xWRL6432 MMWAVE-L-SDK  05.04.00.01
Mmwave Demo

Purpose and Scope

The millimeter wave demo (Mmwave_demo) is the out of box (OOB) millimeter wave radar signal processing chain demo on xWRL6432 SOC device. This chapter presents the millimeter wave demo (mmwave_demo) radar signal processing chain demo implementation details on xWRL6432 SOC device using the MMWAVE LP SDK. The chapter provides a description of the signal processing flow, memory usage, and benchmark results. It also focuses on the implementation details of the low-level signal processing chain. The processing chain is based on range-doppler detection. This chain can be used as a resource for initiating parkingassist applications, blind spot detection (BSD) applications, and many more applications.

Supported Combinations

Parameter Value
CPU + OS m4fss0-0 freertos
Toolchain ti-arm-clang
Board xWRL6432-evm
Example folder examples/mmw_demo/mmwave_demo

Supported Features

Feature Description
Feature Lite Build This feature generates an optimized application with reduced RAM and inturn reduced power. It is important to note that CLI is removed, if this feature is enabled, in addition to other features such as ADC logging, Monitors etc. This is disabled by default.
Raw ADC streaming Streaming of adc data over RDIF+DCA1000 or SPI. This feature is disabled by default.
Monitors FECSS analog monitors. This feature is disabled by default.

Using SysConfig

A GUI tool SysConfig is used to configure different modules and peripherals of the example. Using this tool, users can select and customize different modules and peripherals. The SysConfig tool will generate the code for initializing and configuring these modules. This configuration is saved to a file called example.syscfg for every example. To know more about how to use SDK with SysConfig, Visit this page

Using SDK with SysConfig

Custom Demo Code Options

Additionally, the GUI also allows enabling of supported combinations of the features listed above.

Steps to enable/disable the supported features

  • Open the demo example.syscfg and navigate to the TI DEMO menu
  • This provides the flexibility to Enable/Disable the features as shown in the figure below. Choose the required features and save the example.syscfg file

  • Compile the application and run the demo with the updated binaries
Note
  • For Feature Lite Build, there is an additional option to upload CLI json file to update the predefined configurations. However, this is an optional step, only if the default configuration needs to be updated
  • When Feature Lite Build is enabled, the following features are not supported:
    • Monitors
    • Raw ADC data streaming
    • Phase Compensation

MMWAVE Demo Setup

The demo detection demo setup is shown in Figure below. The demo configuration is provided by the command line interface (CLI) configuration file. The PC visualizer is connected to xWRL6432 EVM board via a single UART port. Initially, to start a demo, a set of CLI configuration commands is sent to the EVM. Based on the configuration the EVM sends through the same port various detection information to the visualizer, such as point cloud, range profile, detection heatmap, presence detection information, and stats data.

Millimeter wave demo setup

The processing layers of the demo is shown below

The signal processing layers of the millimeter wave demo

Below is the top-level radar signal processing timing diagram per frame

Signal processing high level timing diagram

MIMO Modulation Schemes

The demo currently supports only a 2 TX BPM-MIMO scheme. In addition, it supports only uniform chirp distribution within the frame (β€œNormal Mode”), namely single burst per frame, and even number of chirps per burst. The example of the chirp timing diagram is shown in Figure below.

Chirp timing diagram 2Tx BPM-MIMO

Antenna Geometry

The demo supports different antenna configurations. This is achieved through the CLI configuration. The antenna pattern is specified by the CLI command antGeometryCfg. The command specifies the row and column position for each virtual antenna in the 2D virtual antenna array grid, as illustrated in Figure below. The syntax of the command is

antGeometryCfg ant1Row ant1Col ant2Row ant2Col …ant6Row ant6Col distX distZ

The last two parameters of the command specify antenna spacing (in millimeters) in X and Z dimensions.

Virtual antenna arrangement based on the Tx/Rx antenna pattern and the corresponding CLI configuration command for xWRL6432 EVM board

Below figure shows the antenna configuration on the XWRL1432 EVM board.

IWRL1432 EVM board, FR4 based, 2-patch antennas.

The antenna spacing and the virtual antenna array are shown in Figure below. The right-most figure shows the virtual antenna with the red and blue antennas corresponding to TX1 and TX2 respectively.

Antenna spacing and virtual antenna array representation

Signal Processing Chain

The top-level view of this signal processing chain is shown in Figure below. This chain performs object detection in dange-doppler detection matrix.

Signal processing chain – top-level view

The signal processing consists of the following data processing units:

  • Range DPU: Performs:
    • Range FFT for each antenna and chirp. Note that although that the chain is configured in BPM mode, the range DPU is configured with disabled BPM since the BPM decoding is performed in the last DPU in the processing chain.
    • The only radar data cube format supported in this demo is DPIF_RADARCUBE_FORMAT_6
  • DOA DPU: This DPU creates Range-doppler detection matrix using an approach of non-coherent Doppler FFT summation across virtual antennas. Per range bin it performs:
    • Doppler FFT per each antenna,
    • Non-coherent summation of Doppler FFT magnitudes across all virtual antennas.
  • CFAR DPU: Performs CFAR detection algorithm on the range-doppler detection matrix:
    • CFAR detection algorithm (CFAR-CASO) applied along range dimension,
    • Detected points confirmed by being local peak in Doppler domain,
    • Range and Doppler interpolation,
    • Sorting of the detected points with range indices in increasing order
  • AoA2D DPU: This DPU generates a final point cloud list in Cartesian format, achieved through the following operations:
    • for each group of detected points at the same range index, it computes Doppler FFT,
    • for each detected point in the group, at the detected range and Doppler index pair, it performs the following operations:
      • it maps the antenna symbols from the detected range and Doppler index pair into a 2D virtual antenna array,
      • it then computes 2D azimuth/elevation FFT on the virtual antenna array,
      • based on the peaks in the azimuth domain and corresponding positions in the elevation domain, the DPU calculates the coordinates of the detected points in Cartesian format.

Data Compression

This section describes the data compression option implemented in the signal processing chain. The primary reason for data compression is the reduction of the size of the data storage, namely the radar cube memory size which can be quite large for certain applications. The compression is applied on the output of the range FFT data resulting in the reduced radar cube memory. The applied compression and decompression operations in the processing chain are illustrated in Figure below. The data compression is integrated in the range processing DPU, while the data decompression is integrated in the Doppler DPU and AoA2D DPU.

Compression/decompression feature integrated in the signal processing chain

The data compression/decompression is performed by HWA. The compression method used in the processing chain is the BFT method and it is applied on the pair of consecutive range bins of the same Rx channel. The two options of the compression ratios (CR) are supported in the processing chain, CR=50% and CR=25%.

Compression ratio - 50%:

The compression operation is illustrated in Figure below. It is applied on the range FFT output samples. The input to one compression operation consists of the two range bins, occupying 64 bits, that is 2 complex samples of type complex16, represented as four 16-bit real values. The output consists of the 4-bit common exponent and the four 7-bit mantissa fields corresponding to the four 16-bit input values, making the total output size of 32 bits.

BFP compression, compression ratio = 50%

Compression ratio - 25%:

The compression operation is illustrated in Figure below. It is applied on the range FFT output samples. The input to the one compression operation consists of the two range bins, occupying 64 bits, that is 2 complex samples of type complex16, represented as four 16-bit real values. The output consists of the 4-bit common exponent and the four 3-bit mantissa fields corresponding to the four 16-bit input values, making total output size of 16 bits.

BFP compression, compression ratio = 25%

Range processing DPU

The range processing diagram with compression is shown in Figure below. The two param sets are added for the compression operation after the range FFT, one in the ping and the other in the pong processing path.

Range processing DPU with compression option

Doppler Processing DPU

The Doppler processing DPU diagram with optional decompression is shown in Figure below. The two decompression param sets (one in ping and the other in pong path) decompress two range gates each.

Doppler DPU including decompression option

AoA2D DPU

The AoA2D DPU diagram is shown in Figure below. The decompression param set is placed before the Doppler FFT pram set. Although the decompression engine decompresses data of the two range bins, only one range bin is output into the HWA memory. During the configuration time the two param sets are created, one for even range bin and the other for odd range bin, and then the sets are saved in the local memory. At the run time, depending on the detected range bin index being odd or even, the corresponding param set is loaded to HWA before execution.

AoA2D processing DPU with decompression option

The processing flow is illustrated in Figure below. There is a slight difference in the processing flow when the compression is enabled and when it is disabled.

AoA2D processing flow with compression disabled on the left and with compression enabled on the right

When the compression is disabled, the input EDMA data transfer of the next range gate is done in parallel with the angle processing of the current range gate, and therefore the EDMA transfer and the HWA Doppler processing are software triggered separately, while when the compression is enabled, the EDMA transfer and the HWA Doppler processing are chained, and software triggered one time

Rx Channel Gain/Offset Measurement and Compensation

Because of imperfections in antenna layouts on the board there is a need to calibrate the sensor to compensate for bias in the range estimation and the receive channel gain and phase imperfections. The demo provides the ability to do the measurement and compensation.

Measurement Procedure Implementation

The measurement procedure is configured using a CLI command measureRangeBiasAndRxChanPhase. The following is the command syntax:

measureRangeBiasAndRxChanPhase enabled targetDistance searchWindow

  • where enabled - is the flag to enable the procedure, targetDistance - is the distance of the strong target in front of the sensor at the bore site (in meters), searchWindow - is the search window (in meters).

The procedure is implemented by the function mmwDemo_rangeBiasRxChPhaseMeasure(). It is called in the processing chain after the range processing DPU. The input to the procedure is a radar cube. Note that this procedure assumes that the sensor is configured in 2Tx BPM-MIMO mode and that the symbols in the radar cube have not been BPM decoded in the range DPU (range DPU configured in 2Tx TDM-MIMO mode). The measurement procedure first calculates the range profile as the sum of the magnitude squares across all antennas on the range FFTs. Then it searches for the peak in the zone π‘‹βˆ’π·/2 ≀ π‘Ÿπ‘Žπ‘›π‘”π‘’ ≀ 𝑋+𝐷/2 where 𝐷 = searchWindow and 𝑋 = targetDistance.

The procedure then estimates the peak position using the three point parabolic interpolation and the range bias as the difference between the peak position and the configured target distance X.

The Rx channel compensation coefficients are calculated according to following equations.

From the radar cube stored as a complex16 3D array 𝑋[π‘β„Žπ‘–π‘Ÿπ‘][π‘Žπ‘›π‘‘π‘’π‘›π‘›π‘Ž][π‘Ÿπ‘Žπ‘›π‘”π‘’], the received symbols are extracted at the range index π‘–π‘π‘’π‘Žπ‘˜ of the peak position corresponding to the target as

The symbols are then BPM decoded as

The coefficients are then calculated as

where

The coefficients are sent per frame to the host within the TLV packet.

Measurement Procedure Steps:

  • Set a strong target like corner reflector at boresight at desired distance and measure precisely the distance from the sensor.
  • Create the CLI configuration file for the measurement procedure with
    • the enabled flag to 1 in CLI command measureRangeBiasAndRxChanPhase,
    • all antennas enabled,
    • TDM MIMO mode selected,
    • major mode detection enabled.
  • Run the target demo. The target sends TLV with the calculated coefficients.
  • Copy one snapshot of the coefficients to clipboard.
  • Paste the copied line into the final CLI configuration file.

System execution flow

Task Model

This demo is implemented on xWRL6432 using multiple tasks running in the system. Table below list all tasks used in the system.

Demo tasks

Main Task

This is free RTOS main task initially called by the main function. It is active only during the start time, and after the creation of the CLI task it rests in pending state.

CLI Task

The CLI task provides the execution context for the command line interface. It includes simple command parser.

DPC Task

The DPC task provides the execution context for the detection processing chain.

UART Task

This task controls the transfer of radar detection data to the host. The task transmits one packet of data per radar frame using a TLV format structure. Depending on the CLI configuration command guiMonitor the task sends point cloud, range profile, detection matrix, etc.

ADC read data Task

This task is used for running the unit tests for the demo. The task reads reference ADC data samples from the file and feeds the signal processing chain instead of real ADC data coming from the RF

Power Management Task

This task is engaged when the demo is running in the power saving deep sleep mode.

Timing Diagram

The timing diagram during the startup and the first two frames is illustrated in Figure below.

Timing diagram – low power mode disabled.

The timing diagram in the low power mode is shown below.

Timing diagram – low power mode enabled.

Memory Usage

The millimeter wave demo memory usage can always be found in the MAP file. The current usage is shown in Table below.

The memory usage

Some of the data arrays are dynamically handled using a set of simple memory allocation utility functions, provided below.

Memory allocation functions

Two memory heaps are created, one in the local core memory, gMmwCoreLocMem[28*1024], and the other, gMmwL3[416K], occupying 256KB shared memory of APPSS and 160KB shared memory of HWASS. Currently less than one 3kB of memory is allocated in the local core RAM. The usage of the shared memory depends on the configuration. At the start time, after the CLI commands has been received and configuration completed, memory usage of these two heaps is printed out on the console. The memory usage for the CLI configuration file parking_9m.cfg which is provided in this SDK release is shown in Table below.

Memory usage for the CLI configuration file parking_9m.cfg

Benchmarks

Currently the CPU time and the UART transmit time is reported to Host within the stats TLV. The explanation of these time intervals is shown in the timing diagram above.

Configuration (.cfg) File Format (CLI INTERFACE)

Attention
Converting configuration from older SDK release to current SDK release:
As new versions of SDK releases are available, there are usually changes to the configuration commands that are supported in the new release. Now, users may have some hand crafted config file which worked perfectly well on older SDK release version but will not work as is with the new SDK release. Check users guide for details.
Note
Example configuration files are available at '${SDK_INSTALL_PATH}/examples/mmw_demo/mmwave_demo/profiles/{board}' and '${SDK_INSTALL_PATH}/examples/mmw_demo/mmwave_demo/profiles/{board}'. All the CLI commands should be between 'sensorStop' and 'sensorStart'

Each line in the .cfg file describes a command with parameters. The various commands and their arguments are described in the table below (arguments are in sequence)

Sensor front-end parameters

Commands Parameters Notes
sensorStop FrameStopMode Indicates the frame stop mode. This command stops the sensor from transmitting further frames.
Important Note: This command is not supported when lowPowerCfg is 1
channelCfg RxChCtrlBitMask RX antennas 1 and 2, mask = 0x011b = 3
RX antennas 1 and 3, mask = 0x101b = 5
RX antennas 2 and 3, mask = 0x110b = 6
RX antennas 1, 2 & 3, mask = 0x111b = 7
TxChCtrlBitMask TX antennas 1 and 2, mask = 0x011b = 3
TX antenna 1, mask = 0x001b = 1
TX antenna 2, mask = 0x010b = 2
MiscCtrl Not supported on the current version of the SDK.
chirpComnCfg DigOutputSampRate Digital output Sampling rate for chirp ADC samples. Digital sampling rate is given by 100MHz/ DigOutputSampRate. The valid sampling rate can be configured as per below.
8 - 12.5 MHz
9 - 11.11 MHz
10 - 10 MHz
12 - 8.333 MHz
16 - 6.25 MHz
20 - 5 MHz
25 - 4 MHz
32 - 3.125 MHz
40 - 2.5 MHz
50 - 2 MHz
64 - 1.5625 MHz
80 - 1.25 MHz
100 - 1 MHz
DigOutputBitsSel Digital output sample bits select, this field governs which bits of the FECSS DFE's internal 16 bit signed data path are sent as output.
0 - Digital sample output is 12 MSB bits of DFE after rounding 4 LSBs
1 - Digital sample output is 12 bits after rounding 3 LSBs & clipping 1 MSB
2 - Digital sample output is 12 bits after rounding 2 LSBs & clipping 2 MSB
3 - Digital sample output is 12 bits after rounding 1 LSBs & clipping 3 MSB
4 - Digital sample output is 12 LSB bits after clipping 4 MSB
5 - Digital sample output is 16 bits
DfeFirSel The final stage FIR filter's characteristics can be selected as below.
0 - Long Filter (90% visibility): This provides visibility to a larger range of IF frequencies: 0 to 0.45 x Sampling Rate. Beyond that, the filter response starts drooping & enters filter transition band.
1 - Short Filter (80% visibility): This provides faster settled outputs but the IF frequency range visible is 0 to 0.40 x Sampling Rate. Beyond that, the filter response starts drooping & enters filter transition band.
NumOfAdcSamples No. of ADC samples. Current SDK work for values with powers of 2
Valid Range: 2 to 2048
ChirpTxMimoPatSel Note Only the BPM_2TX pattern is supported in this demo.
0 - TX BPM MIMO pattern disabled
1 - TDMA_2TX pattern
4 - BPM_2TX pattern
ChirpRampEndTime Chirp Profile Ramp end Time. This is a common ramp end time value for all chirps in a frame.
ChirpRxHpfSel Chirp Profile HPF corner frequency. This is a common HPF corner frequency value for all chirps in a frame.
0 - 175kHz HPF corner frequency
1 - 350kHz HPF corner frequency
2 - 700kHz HPF corner frequency
3 - 1400kHz HPF corner frequency
chirpTimingCfg ChirpIdleTime Chirp Profile Idle Time. This is a common idle time value for all chirps in a frame.
Unit: 1us.
ChirpAdcSkipSamples Chirp Profile ADC start skip samples. This is a common adc start time value for all chirps in a frame
Valid range: 0 to 63
ChirpTxStartTime Chirp Profile TX start Time. This is a common TX start time value for all chirps in a frame.This field indicates the TX start time in the chirp cycle with respect to the knee of the ramp.
Unit: In usec
ChirpRfFreqSlope Chirp Profile RF Frequency Slope. This is a common RF frequency slope value for all chirps in a frame.This field indicates the required FMCW slope of the chirp.
Unit: MHz/us
Valid range:- 399MHz/us to +399MHz/us.
ChirpRfFreqStart Chirp Profile RF start Frequency. This is a common RF start frequency value for all chirps in a frame. This field indicates the required start frequency of the chirp.
Unit: GHz
Valid range:58GHz to 62.5GHz for ES1.0 devices
frameCfg NumOfChirpsInBurst Number of Chirps in a Burst. This field indicates the number of chirps to be generated per burst.
Valid range: 1 to 65535 chirps .
(Limited support in current OOB)
NumOfChirpsAccum Number of accumulation per chirp. This field indicates the Number of chirps to be accumulated before sending the ADC data out in DFE, this can be used to increase the SNR without increasing the number of chirps to process in the DSP/HW accelerator.
Valid range: : 0 to 64 chirps.
(Limited support in current OOB)
BurstPeriodicity Burst periodicity in ΞΌs. This field indicates the period of the burst.
(Limited support in current OOB)
NumOfBurstsInFrame Note Only one burst per frame is supported in this demo.
Number of bursts per frame.
Valid range:1 to 4096
(Limited support in current OOB)
FramePeriodicity Frame Periodicity. This field indicates the period of the frame, 32bit counter.This field indicates the frame periodicity, the time gap between successive frame starts.
Unit: ms
Valid range:100 to 4294967295 (Limited support in current OOB)
NumOfFrames Number of frames.
Valid range: 0 to 65535, 0 means infinite
adcLogging enable ADC data logging enable:
0 - Disable.
1: Enable via DCA.
2: Enable via SPI.
NOTE: When ADC logging via DCA is enabled number of adc samples must be a multiple of 4. And the configs listed below are not applicable when SPI logging is used.
sideBandEnable Sideband data logging:(optional argument)
0: Disable.
1: Enable.
NOTE: FrameLivMonEn in sensorstart must be set to a value 2(RX_SATURATION_LIVE_MON must be enabled) for sideband data logging. And by default sideband data is disabled.
(Refer to the ICD for more details about this feature)
swizzlingMode RDIF Data Swizzling Mode enable control:(optional argument)
0: Pin0-bit0-Cycle1 Mode.
1: Pin3-bit0-Cycle1 Mode.
2: Pin0-bit0-Cycle3 Mode.
3: Pin3-bit0-Cycle3 Mode.
(Refer to the ICD for more details about this feature)
scramblerMode RDIF Scrambler Mode enable control:(optional argument)
0: Disable.
1: Enable.
(Refer to the ICD for more details about this feature)
laneRate Enable RDIF lane rate update:(optional argument)
0: Combined Lane Rate of 400Mbps.
1: Combined Lane Rate of 320Mbps.
2: Combined Lane Rate of 200Mbps.
3: Combined Lane Rate of 160Mbps.
4: Combined Lane Rate of 100Mbps.
(Refer to the ICD for more details about this feature)
lowPowerCfg Enable/Disable Configuration to enable/disable the power management framework.
0 - Disabled
1 - Enabled
factoryCalibcfg Save enable When this option is enabled application will boot-up normally and configure the FECSS to perform all applicable factory calibrations during FECSS initialization. Once the calibrations are performed, application will retrieve the calibration data from FECSS and save it to FLASH. User need to specify valid <flash offset> value. <restore enable> option should be set to 0.
Note The factory calibration should be done at room temp (25 °C +/- 15 °C)
0 - Save Disabled
1 - Save Enabled
restore enable When Restore enabled option is set, application will check the FLASH for a valid calibration data section. If present, it will restore the data from FLASH and provide it to FECSS while configuring it to skip any real-time factory calibrations and use provided calibration data. User need to specify valid <flash offset> value which was used during saving of calibration data. <save enable> option should be set to 0. <rxGain> and <backoff0> arguments will be ignored when restore option is enabled.
0 - Restored Disabled
1 - Restore Enabled
rxGain Recommended value is 30db to 40db.
Units: db.
backoff0 TX channel power calibration. Valid Range: 0db to 26db.
Units: db.
flash offset Address offset in the flash to be used while saving or restoring calibration data. Make sure the address doesn't overlap the location in FLASH where application images are stored and has enough space for saving factory Calibration data. This field is don't care if both save and restore are disabled.Flash address range is 0x0 to 0x1FFFFF (16Mb) Actual Factory calibration data is of size 128 bytes. It is recommended to use last sector of flash memory starting with address 0x1FF000.
Note The flash offset should be greater than 1MB (0x100000h) for EVM. This check is only to make sure Appimage and ATE calibration data is not corrupted.
baudRate baudRateVal The sensor starts with 115200 baud rate by default. When this command is sent to the device, the baud rate for the UART communication is updated according to the given value. Currently only baudRateVal=1250000 is supported
sensorStart 'FrameTrigMode' Frame Trigger Mode.
0 - Frame SW immediate trigger Mode (SW_TRIG).
1 - Frame SW timer based trigger Mode (SW_TIMER_TRIG).
2 - Frame HW trigger low power Mode (HW_LOW_PWR_TRIG).
3 - Frame HW trigger low jitter Mode (HW_LOW_JIT_TRIG).
4 - CW CZ Trigger Mode (CW_CZ_TRIG).
5 - Chirp Timer Override Trigger Mode (CT_OVRD_TRIG).
(Currently SDK supports only SW_TRIG mode(0))
'ChirpStartSigLbE' Chirp Timer (CT) start signal loopback enable control.
0 - CHIRP_START_SIGNAL to DIG_SYNC_OUT Loopback Disable
1 - CHIRP_START_SIGNAL to DIG_SYNC_OUT Loopback Enable.
(Currently SDK supports only Loopback Disable mode(0))
'FrameLivMonEn' Frame Live monitors enable control.
0 - Live monitor Disabled
1 - Synth Frequency Monitor Enabled
2 - Rx Saturation Live Monitor Enabled
3 - Both Synth Frequency Monitor and Rx Saturation Live Monitor Enabled
'FrameTrigTimerVal' Frame Trigger Timer Value. 32bit counter value.
(Currently SDK demo is tested only with value 0)
sensorWarmRst Reserved for future This command initiates a warm reset of sensor with application getting reloaded from flash after reset.
Important Note: This command is not supported when lowPowerCfg is 1

Detection layer parameters

Commands Parameters Notes
sigProcChainCfg azimuthFftSize Azimuth FFT size. Suggested to set as power of 2
elevationFftSize Elevation FFT size. Suggested to set as power of 2
motDetMode The flag must be set to 1.
coherentDoppler This flag is ignored.
numFrmPerMinorMotProc This flag is ignored.
numMinorMotionChirpsPerFrame This flag is ignored.
forceMinorMotionVelocityToZero This flag is ignored.
minorMotionVelocityInclusionThr This flag is ignored.
cfarCfg averageMode CFAR Averaging mode selection Recommened to set 2
0 - CFAR-CA
1 - CFAR-CAGO
2 - CFAR-CASO
winLen One-sided noise averaging window length (in samples) of range-CFAR Recommened to set as power of 2
guardLen One-sided guard length (in samples) of range-CFAR.
noiseDiv Cumulative noise sum divisor expressed as a shift. Sum of noise samples is divided by 2^noiseDiv. Suggested to set as log2(winLen).
cyclicMode Cyclic mode or wrapped around mode.
0 - Disabled
1 - Enabled
thresholdScale Threshold factor of range-CFAR in dB scale (20log10).
peakGroupingEn Enable or disable Peakgrouping
0 - Disabled
1 - Enabled
sideLobeThreshold Note: This flag is used by AoA2D DPU.
Sidelobe threshold (in linear scale) in azimuth domain to declare a local peak as a valid detection.
localMaxRangeDomain Enable/disable selection of the local maximum in the range domain
0 - Disabled
1 - Enabled
localMaxDopplerDomain Enable/disable selection of the local maximum in the Doppler domain
0 - Disabled
1 - Enabled
interpolateRange Enable /disable the interpolation of the range
0 - Disabled
1 - Enabled
interpolateDopplerDomain Enable /disable the interpolation of the Doppler
0 - Disabled
1 - Enabled
cfarScndPassCfg enabled Second pass CFAR enabled flag:
0 - Disabled
1 - Enabled
averageMode CFAR Averaging mode selection Recommened to set 2
0 - CFAR-CA
1 - CFAR-CAGO
2 - CFAR-CASO
winLen One-sided noise averaging window length (in samples) of range-CFAR Recommened to set as power of 2
guardLen One-sided guard length (in samples) of range-CFAR.
noiseDiv Cumulative noise sum divisor expressed as a shift. Sum of noise samples is divided by 2^noiseDiv. Suggested to set as log2(winLen).
cyclicMode Cyclic mode or wrapped around mode.
0 - Disabled
1 - Enabled
thresholdScale Threshold factor of range-CFAR in dB scale (20log10).
peakGroupingEn Enable or disable Peakgrouping
0 - Disabled
1 - Enabled
aoaFovCfg minAzimuthDeg Minimum azimuth angle (in degrees) that specifies the start of field of view
maxAzimuthDeg Maximum azimuth angle (in degrees) that specifies the end of field of view
minElevationDeg Minimum elevation angle (in degrees) that specifies the start of field of view
maxElevationDeg Maximum elevation angle (in degrees) that specifies the end of field of view
rangeSelCfg minMeters Minimum range of exported detected points
maxMeters Maximum range of exported detected points
clutterRemoval enabled Note: Clutter removal is not supported. The flag must be set to 0.
compRangeBiasAndRxChanPhase rangeBias Value of the Range Bias (m).
virtAntIdx 1 Phase compensation factor (real, imaginary) of virtual antenna 1.
virtAntIdx 2 Phase compensation factor (real, imaginary) of virtual antenna 2.
virtAntIdx 3 Phase compensation factor (real, imaginary) of virtual antenna 3.
virtAntIdx 4 Phase compensation factor (real, imaginary) of virtual antenna 4.
virtAntIdx 5 Phase compensation factor (real, imaginary) of virtual antenna 5.
virtAntIdx 6 Phase compensation factor (real, imaginary) of virtual antenna 6.
measureRangeBiasAndRxChanPhase enabled Enable measurement of the range bias and rx channel gain and phase imperfections
0 - Disabled
1 - Enabled
targetDistance Distance in meters where strong reflector is located to be used as test object for measurement. This field is only used when measurement mode is enabled.
searchWin Distance in meters of the search window around targetDistance where the peak will be searched
guiMonitor pointCloud Enable/Disable the transmission of the point cloud data
0 - Disable
1 - Enable, point cloud in floating point format, plus side information,
2 - Enable, point cloud in compressed format (fixed point)
rangeProfile Enable/Disable the transmission of the Range Profile data.
0 - Disable
1 - Enable
NoiseProfile Not supported, must be set to 0
rangeAzimuthHeatMap Not supported, must be set to 0
rangeDopplerHeatMap Enable/Disable transmission of the Range Doppler heatmap
0 - Disable
1 - Enable
statsInfo Enable/Disable the transmission of the Statistics info that include processing time, temperature, power. (Partially supported in the current SDK)
0 - Disabled
1 - Enabled
presenceInfo Not supported, must be set to 0
adcSamples Enable/Disable the transmission of the raw ADC samples of the last two chirps of the frame
0 - Disabled
1 - Enabled
trackerInfo Not supported, must be set to 0
microDopplerInfo Not supported, must be set to 0
classifierInfo Not supported, must be set to 0
antGeometryCfg vAnt1_row row index of virtual antenna 1. (TxAnt1->RxAnt1)
vAnt1_col column index of virtual antenna 1. (TxAnt1->RxAnt1)
vAnt2_row row index of virtual antenna 2. (TxAnt1->RxAnt2)
vAnt2_col column index of virtual antenna 2. (TxAnt1->RxAnt2)
vAnt3_row row index of virtual antenna 3. (TxAnt1->RxAnt3)
vAnt3_col column index of virtual antenna 3. (TxAnt1->RxAnt3)
vAnt4_row row index of virtual antenna 4. (TxAnt2->RxAnt1)
vAnt4_col column index of virtual antenna 4. (TxAnt2->RxAnt1)
vAnt5_row row index of virtual antenna 5. (TxAnt2->RxAnt2)
vAnt5_col column index of virtual antenna 5. (TxAnt2->RxAnt2)
vAnt6_row row index of virtual antenna 6. (TxAnt2->RxAnt3)
vAnt6_col column index of virtual antenna 6. (TxAnt2->RxAnt3)
antDistX Antenna spacing in X dimension in mm. This is optional argument. If omitted, it is assumed that λ/dx=2
antDistZ Antenna spacing in Z dimension in mm. This is optional argument. If omitted, it is assumed that λ/dz=2
compressionCfg enabled Data compression enable/disable flag:
0 - Disabled
1 - Enabled
compressionRatio Compression ratio (CR). Supported only CR=0.5 and CR=0.25

Refer ${SDK_INSTALL_PATH}/docs/MotionPresenceDetectionDemo_TuningGuide.pdf document for Parameter tuning and customization of Demo application.

UART and Output to the Host

Output TLV Description

The packet structure consists of fixed sized frame header, followed by variable number of TLVs (see Figure below). Each TLV has fixed header followed by variable size payload. The Byte order is Little Endian.

Data packet structure sent to Host.

Frame Header Structure

The frame header is of fixed size (52bytes). It is defined by the structure as

typedef struct MmwDemo_output_message_header_t
{
uint16_t magicWord[4]; /* Sync word: {0x0102,0x0304,0x0506,0x0708} */
uint32_t version; /* MajorNum*2^24+MinorNum*2^16+BugfixNum*2^8+BuildNum */
uint32_t totalPacketLen; /* Total packet length including header in Bytes */
uint32_t platform; /* platform type */
uint32_t frameNumber; /* Frame number */
uint32_t timeCpuCycles; /* Time in CPU cycles when the message was created */
uint32_t numDetectedObj; /* Number of detected objects */
uint32_t numTLVs; /* Number of TLVs */
uint32_t subFrameNumber; /* Subframe number */
} MmwDemo_output_message_header;

TLV Structure

The TLV structure consists of a fixed header, TL (8bytes) followed by TLV specific payload. The TLV header structure is shown below.

typedef struct MmwDemo_output_message_tl_t
{
uint32_t type; /* TLV type */
uint32_t length; /* Length in bytes */
} MmwDemo_output_message_tl;

Point Cloud TLV

The demo outputs point cloud data in one of the two formats, floating point format and more compressed fixed point format. The format option is selected from the CLI configuration.

Floating point format

The point cloud data are sent using two TLV elements, first one with the detected point cartesian coordinates and the radial velocity, and the second one, this side information, the detected point snr and noise.

Point Cloud – Coordinates TLV
  • Type = MMWDEMO_OUTPUT_MSG_DETECTED_POINTS
  • Length = sizeof(DPIF_PointCloudCartesian) * numberOfPoints

The single point is defined as:

typedef struct DPIF_PointCloudCartesian_t
{
float x; /* x - coordinate in meters. */
float y; /* y - coordinate in meters. */
float z; /* z - coordinate in meters. */
float velocity; /* radial velocity away from sensor in m/s */
} DPIF_PointCloudCartesian;

Point Cloud - Side information TLV
  • Type = MMWDEMO_OUTPUT_MSG_DETECTED_POINTS_SIDE_INFO
  • Length = sizeof(DPIF_PointCloudSideInfo) * numberOfPoints

The single point side info is defined as:

typedef struct DPIF_PointCloudSideInfo_t
{
int16_t snr; /* snr - CFAR cell to side noise ratio in dB, 1LSB = 0.1dB */
int16_t noise; /* noise level of side of detected cell in dB, 1LSB = 0.1dB */
} DPIF_PointCloudSideInfo;

Fix-point format

  • Type = MMWDEMO_OUTPUT_EXT_MSG_DETECTED_POINTS
  • Length = sizeof (MmwDemo_output_message_point_uint) + sizeof (MmwDemo_output_message_UARTpoint) * numberOfPoints

The unit structure is defined as:

typedef struct MmwDemo_output_message_point_uint_t
{
float xyzUnit; /* x/y/z coordinates reporting unit, in m */
float dopplerUnit; /* radial velocity reporting unit, in m/s */
float snrUint; /* SNR reporting unit, in dB */
float noiseUint; /* Noise reporting unit, in dB */
uint16_t numDetectedPoints[2]; /* number of detected points in [0]-major and [1]-minor motion mode */
} MmwDemo_output_message_point_uint;
  • Note that since this demo does not support minor mode, the number of detected points are stored in the field numDetectedPoints[0], while the field numDetectedPoints[1] is set to zero.

The single point is defined as:

typedef struct MmwDemo_output_message_UARTpoint_t
{
int16_t x; /* Detected point x, 1LSB = xyzUnit */
int16_t y; /* Detected point y, 1LSB = xyzUnit */
int16_t z; /* Detected point z, 1LSB = xyzUnit */
int16_t doppler; /* Detected point radial velocity, 1LSB = dopplerUnit */
uint8_t snr; /* Range detection SNR, 1LSB = snrUnit */
uint8_t noise; /* Detected point noise value 1LSB = noiseUnit */
} MmwDemo_output_message_UARTpoint;

Range Profile TLV

This demo sends the range profile using as the major mode TLV. This TLV contains the range profile, specified as an array of 32-bit unsigned linear values of range bins. The length is equal to number of range bin elements, (half of the range FFT size, since the ADC samples are real).

  • Type = MMWDEMO_OUTPUT_EXT_MSG_RANGE_PROFILE_MAJOR
  • Length = sizeof(uint32_t) * numberOfRangeBins

Range-Doppler Heatmap TLV

This TLV contains the range-Doppler detection matrix (heatmap) which consists of two-dimensional array of 32-bit unsigned magnitude values. The matrix is arranged as X[rangeInd* numDopplerBins + dopplerInd], rangeInd = 0, numRangeBins - 1, dopplerInd = 0, numDopplerBins – 1

  • Type = MMWDEMO_OUTPUT_MSG_RANGE_DOPPLER_HEAT_MAP (equal to 5)
  • Length = sizeof(uint32_t) * numRangeBins * numDopplerBins

Stats TLV

This TLV contains statistics described in the structure below.

  • Type = MMWDEMO_OUTPUT_EXT_MSG_STATS
  • Length = sizeof(MmwDemo_output_message_stats)
typedef struct MmwDemo_output_message_stats_t
{
uint32_t interFrameProcessingTime; /* Interframe processing time in usec */
uint32_t transmitOutputTime; /* Transmission data transmit time in usec */
uint16_t powerMeasured[4]; /* Power at 1.8V, 3.3V, 1.2V and 1.2V RF rails(1LSB = 100 uW) */
int16_t tempReading[4]; /* Temperature: Rx, Tx, PM, DIG. (oC), 1LSB = 1oC */
} MmwDemo_output_message_stats;

Rx channel compensation measurement output TLV

This TLV contains the output of Rx channel compensation measurement procedure.

  • Type = MMWDEMO_OUTPUT_EXT_MSG_RX_CHAN_COMPENSATION_INFO
  • Length = sizeof(DPU_DoaProc_compRxChannelBiasFloatCfg)
typedef struct DPU_DoaProc_compRxChannelBiasFloatCfg_t
{
float rangeBias;
float rxChPhaseComp[2 * SYS_COMMON_NUM_TX_ANTENNAS * SYS_COMMON_NUM_RX_CHANNEL];

Low Power Configuration (lowPowerCfg = 1)

Flow Diagram

Below is the high level flow diagram of Motion and Presence detection OOB demo in Low Power Mode:

Flow in Low Power Mode

Threshold and Latency time duration for Power module

Syscfg of Power driver provides some options to be configured by user as per their demo implementations:

Threshold Value The idle time available only after which entry to various power modes is considered. This is upto the user to configure based on their system requirements.
Latency Value: There is a latency for the device to transition into the different low power modes, and to wake from that specific low power mode to resume activity. The actual transition latency will depend upon overall device state, as well as execution of notification functions that are registered with the Power driver. User is expected to measure this in their implementations and configure this value. If there is Xms idle time, device will get into low power state for (X - Latency value) time duration.

Threshold and latency values can be changed (tuned) to meet specific application requirements. Threshold and Latency values for different power modes can be configured in Power Syscfg:

THRESHOLD AND LATENCY VALUES OF DIFFERENT POWER MODES



Enabling wake-up sources from LPDS state: Wake-up from Deep sleep exit is provisioned in the device through a number of external wakeup sources like UART/SPI/GPIO/SYNC_IN/Sleep counter, etc. By Default wake-up using Sleep Counter is enabled in Demo.

LPDS WAKEUP SOURCES



Raw ADC data streaming

Steps for DCA based streaming

MMWAVE-L-SDK OOB (out-of-box) demo supports raw ADC data streaming through the RDIF interface. When the radar EVM board connected with the DCA1000EVM board, users can use the DCA1000EVM CLI application to capture the raw data without starting the mmWaveStudio GUI interface. The DCA1000EVM CLI application is primarily a command line tool for configuration of FPGA and recording based on the user inputs. The DCA1000EVM CLI application connects to DCA1000EVM system through 1GB Ethernet for configuration and recording of data. RADAR EVM is connected to DCA1000EVM for data capture and connected to PC for configuration of data generation. However, there are some important limitations associated with this feature:

  • Do not use this feature when Low power mode is enabled (lowPowerCfg 1).

The DCA1000EVM CLI application is provided for Windows and can be recompiled for other platforms. Users can find the source code and user guide in MMWAVE-STUDIO release package.

The DCA1000EVM CLI application has the following functionalities.

  • CLI application parses the parameters in JSON formatted config file for the corresponding CLI Control commands.
  • CLI application supports both Windows and Linux.
  • Acknowledgement of commands and error codes are handled and returned by the CLI application.
  • The response status of each of the command is captured in a log file by the CLI application.
  • CLI application supports running as a foreground as well as a background process.

DCA1000EVM Setup

  • DCA1000EVM should be connected to Host PC via Ethernet cable to access the CLI and Data Transfer process.
  • DCA1000EVM should be connected to TI Radar EVM via 60 pin HD Connector by using 60 pin Samtec ribbon cable.
  • DCA1000EVM power input should be connected either from DC Jack or TI Radar EVM power output (from 60 pin HD connector) by selecting the switch SW3.
  • Follow the mmWave Studio for additional RADAR EVM connectivity to PC and other pre-requisites.
  • Refer TI_DCA1000EVM_quickStartGuide.pdf document for more details.

Power on/off sequence

Initiate the power on sequence by turning on the radar EVM first, followed by the DCA1000EVM board. For shutdown, power off the DCA1000EVM board first, and then the radar EVM board.

Steps to Perform Raw ADC Data Streaming

For successful recording of data from RADAR EVM sequence is given as follows

  • Configure FPGA
    • Ensure JSON config file (CLI) and Script config file (RADAR EVM) data format mode are in sync
    • Run the command - DCA1000EVM_CLI_Control.exe fpga configFile.json (located in mmWaveStudio/PostProc)
    • The acknowledgement for the above command is shown below
  • Start the record
    • Ensure JSON config file (CLI) and Script config file (RADAR EVM) data logging mode are in sync
    • Run the command - DCA1000EVM_CLI_Control.exe start_record configFile.json (located in mmWaveStudio/PostProc)
    • The acknowledgement for the above command is shown below
  • Run the demo immediately after the above command by using the configuration with "adcLoggging 1" to enable this feature.
  • When data transfer starts DATA_TRANS_PRG LED (LD1) on DCA1000EVM will start toggling.
  • After the Raw ADC Data capture it will get stored in a adc_data_Raw_0.bin file in PostProc folder. And CLI_LogFile.txt contains all the commands execution information along with the timestamp. It can be viewed manually whenever required. The file will be appended for new sessions and new command execution information.
  • FPGA should be reconfigured in the following scenarios
    • When the system is booted or rebooted
    • When the FPGA or DCA1000EVM is reset

Refer TI_DCA1000EVM_CLI_Software_UserGuide.pdf document for more details.

Validation of the ADC data

The path ${SDK_INSTALL_PATH}/tools/ADC_parser includes parsing and post processing scripts for interpreting Raw ADC data acquired from the DCA1000EVM board.

  • The ar_convertAdcData_xWRLx432.m takes the Raw adc dump as input and converts it into adc matrix.
  • In addition, a post processing script Test_read_adc_data_xWRLx432.m, has been included to invoke the above parsing script, compute 1D and 2D FFTs.
  • The inputs to this script are adc_data_Raw_0.bin and cli_configuration.cfg. Update the paths accordingly in the above post processing script.
  • The FFT peaks are a means of validating the captured raw adc data. For example, a corner reflector is placed at 1m along the boresight of the radar. Assuming an FFT bin resolution of 0.1m/bin (derived based on chirping params), the 1D FFT peak falls at 10th bin.

Steps for SPI based streaming

The MmWave Demo supports streaming of raw ADC data over SPI interface every frame during the frame idle time. To enable this feature in demo, user has to ensure that demo is built with "SPI_ADC_DATA_STREAMING" compile time macro defined. To use this feature in demo have "adcLogging 2" in the configuration file. However, there are some important limitations associated with this feature:

  • User has to ensure that sufficient memory is available to store Raw ADC Data required per frame.
  • ADC data of every frame is transmitted during frame idle time. User has to ensure that sufficient frame idle time is available to transmit all the data.
  • Do not use this feature when Low power mode is enabled (lowPowerCfg 1).

This feature uses FTDI USB to SPI converter chips like FT232H, FT4232H etc. to transfer data from SPI interface of xWRL6432 to Host. If EVMs have these FTDI chips on them, user can use those, if not external converters have to be connected. Here the FTDI chip acts as SPI master and xWRL6432 acts as Slave device. SPI_busy signal is used as means of synchronization between FTDI chip and xWRL6432 device.

Steps to Perform Raw ADC Data Streaming on xWRL6432 FCCSP device:

C232HM-DDHSL-0 Cable SPI Wire Description
  • Connection Table of SPI Interface of xWRL6432 with C232HM-DDHSL-0 Cable
XWRLx4XX FCCSP Device C232HM-DDHSL-0 Cable
MOSI YELLOW WIRE
MISO GREEN WIRE
CHIP SELECT BROWN WIRE
SPI CLOCK ORANGE WIRE
SPI BUSY GREY WIRE
GROUND BLACK WIRE


  • Ensure that switch S1.6 is ON.
  • Run the demo and use configuration with "adcLoggging 2" to enable this feature.
  • Run the adcDataSPIFTDI.exe application located in tools/spi_adc_streaming folder after issuing the configuration (via Visualizer or serial term etc.) and before the sensor start command is sent to device.
  • Give all the inputs to adcDataSPIFTDI application like Device Type, Number of ADC samples, Number of chiprs in burst, Number of burst in frame, Number of Frames, Number of Rx Antennas as given in configuration file. Ensure that this is done before "sensorStart" comamnd is sent.
  • After the demo starts, Raw ADC Data for given number of frames will get stored in a adcData.txt file in spi_adc_streaming folder.

Steps to Perform Raw ADC Data Streaming on xWRL6432 AOP device:

  • There are two USB interfaces on xWRL6432 AOP device, one is XDS110 and other is for FTDI transmission. Connect both interfaces of xWRL6432 with Host.
  • Ensure that switch S1.6 is ON and S4.3 is OFF.
  • Run the demo and use configuration with "adcLoggging 2" to enable this feature.
  • Run the adcDataSPIFTDI.exe application located in tools/spi_adc_streaming folder after issuing the configuration (via Visualizer or serial term etc.) and before the sensor start command is sent to device.
  • Give all the inputs to adcDataSPIFTDI application like Device Type, Number of ADC samples, Number of chiprs in burst, Number of burst in frame, Number of Frames, Number of Rx Antennas as given in configuration file. Ensure that this is done before "sensorStart" comamnd is sent.
  • After the demo starts, Raw ADC Data for given number of frames will get stored in a adcData.txt file in spi_adc_streaming folder.

Validation of the ADC data

The path ${SDK_INSTALL_PATH}/tools/ADC_parser includes parsing and post processing scripts for interpreting Raw ADC data acquired through SPI.

  • The SPI based adc data is input as a .txt file along with the corresponding cli.cfg file.
  • The above file paths can be updated in the post processing script Test_read_adc_data_xWRLx432.m, to compute 1D and 2D FFTs.
  • The FFT peaks are a means of validating the captured raw adc data. For example, a corner reflector is placed at 1m along the boresight of the radar. Assuming an FFT bin resolution of 0.1m/bin (derived based on chirping params), the 1D FFT peak falls at 10th bin.

Running in test mode

For testing the signal processing chain, the source for the ADC samples can be configured to be the input file, instead of RF input stream, as shown in Figure below. This mode is enabled using a CLI command adcDataSource which specifies the input binary ADC data file. Note that this mode can run when the code is loaded through CCS. In this mode the RF part of the SOC is not configured.

Reading ADC data from file

In this mode demo is controlled form the ADC read data task mmwDemo_adcFileReadTask(), that reads data from the file, and triggers the input EDMA of the range DPU. This task also saves the point cloud and the range azimuth heat map to files.

The timing diagram is illustrated below.

Timing diagram in demo test mode - ADC samples read from file.

Steps to Run Monitors

Please refer to Monitors for steps to run monitors

Steps to Run the Example

Power Measurements with INA228

Following are power numbers with SDK default configurations measured using INA228 sensor.

Configuration Average Power (mW)
Automated Parking 31.3
DPU_DoaProc_compRxChannelBiasFloatCfg
Range Bias and rx channel gain/phase compensation configuration.
Definition: doaproc.h:474