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.
Parameter | Value |
---|---|
CPU + OS | m4fss0-0 freertos |
Toolchain | ti-arm-clang |
Board | xWRL6432-evm |
Example folder | examples/mmw_demo/mmwave_demo |
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. |
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
Additionally, the GUI also allows enabling of supported combinations of the features listed above.
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.
The processing layers of the demo is shown below
Below is the top-level radar signal processing timing diagram per frame
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.
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.
Below figure shows the antenna configuration on the XWRL1432 EVM board.
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.
The top-level view of this signal processing chain is shown in Figure below. This chain performs object detection in dange-doppler detection matrix.
The signal processing consists of the following data processing units:
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.
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.
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.
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.
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.
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.
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.
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
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.
The measurement procedure is configured using a CLI command measureRangeBiasAndRxChanPhase. The following is the command syntax:
measureRangeBiasAndRxChanPhase enabled targetDistance searchWindow
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:
This demo is implemented on xWRL6432 using multiple tasks running in the system. Table below list all tasks used in the system.
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.
The CLI task provides the execution context for the command line interface. It includes simple command parser.
The DPC task provides the execution context for the detection processing chain.
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.
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
This task is engaged when the demo is running in the power saving deep sleep mode.
The timing diagram during the startup and the first two frames is illustrated in Figure below.
The timing diagram in the low power mode is shown below.
The millimeter wave demo memory usage can always be found in the MAP file. The current usage is shown in Table below.
Some of the data arrays are dynamically handled using a set of simple memory allocation utility functions, provided below.
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.
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.
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)
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 |
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.
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.
The frame header is of fixed size (52bytes). It is defined by the structure as
The TLV structure consists of a fixed header, TL (8bytes) followed by TLV specific payload. The TLV header structure is shown below.
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.
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.
The single point is defined as:
The single point side info is defined as:
The unit structure is defined as:
The single point is defined as:
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).
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
This TLV contains statistics described in the structure below.
This TLV contains the output of Rx channel compensation measurement procedure.
Below is the high level flow diagram of Motion and Presence detection OOB demo in Low Power Mode:
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:
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.
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:
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.
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.
For successful recording of data from RADAR EVM sequence is given as follows
Refer TI_DCA1000EVM_CLI_Software_UserGuide.pdf document for more details.
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 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:
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:
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 |
Steps to Perform Raw ADC Data Streaming on xWRL6432 AOP device:
The path ${SDK_INSTALL_PATH}/tools/ADC_parser includes parsing and post processing scripts for interpreting Raw ADC data acquired through SPI.
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.
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.
Please refer to Monitors for steps to run monitors
Following are power numbers with SDK default configurations measured using INA228 sensor.
Configuration | Average Power (mW) |
---|---|
Automated Parking | 31.3 |