This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

CCS/AWR1642BOOST: High Accuracy Demo: How to parse range profile TLV?

Part Number: AWR1642BOOST
Other Parts Discussed in Thread: IWR1443, AWR1642

Tool/software: Code Composer Studio

Hello Community,

I'm working on High Accuracy (Level Sensing) demo project on AWR1642BOOST. I'm confused at a point. In the documentation of Out of Box demo project (which is at /<mmwave_sdk_install_dir>/packages/ti/demo/xwr16xx/mmw/docs/doxygen/html/index.html), It says the Range Profile TLV consists of uint16_t:

Range profile
Type: (MMWDEMO_OUTPUT_MSG_RANGE_PROFILE)

Length: (Range FFT size) x (size of uint16_t)

Value: Array of profile points at 0th Doppler (stationary objects). In XWR16xx the points represent the sum of log2 magnitudes of received antennas, expressed in Q8 format. In XWR14xx the points represent the average of log2 magnitudes of received antennas, expressed in Q9 format.

I have worked on IWR1443's High Accuracy demo project before. The Range Profile TLV of the IWR1443's demo project fits the description above and It sends exact the same thing (main.c, line 978):

UART_writePolling (uartHandle, (uint8_t*)(MMW_HWA_1D_OUT_PING), obj->numRangeBins * sizeof(uint16_t));

But after I started to work on AWR1642, I noticed that the contents of Range Profile TLV is different than the documentation. In the AWR1642's High Accuracy demo project, the MSS code (mss_main.c, line 294) sends two float values per FFT output:

UART_writePolling (uartHandle, (uint8_t*)outputData->fft1Dinput, 2 * fft1D_length * sizeof(float));

 

My question is, what is the meaning of those float values that AWR1642 sends? How can I parse them to get the actual range profile like I did in IWR1443?

Thank you.

  • Hi,

    Format of TLV may be different for different application (SDK mmw vs TI-Rex application). You can trace back all the TLV data in dss code where it is originated, look into dss_main.c and dss_data_path.c files for these variables.

    And to parse it you can refer the Visualizer code where it does the parsing of each TLV parameter.

    Please refer this FAQ link for visualizer code.

    https://e2e.ti.com/support/sensors/f/1023/t/856038

    Regards,

    Jitendra

  • Thank you for your reply Jitendra.

    After I inspected the source code of mmWave Visualizer, I found that, the float values stores the imaginary and real parts of the result (But result of what? I don't know). At the line 1040 of the mmw_HighAccu.js, the parser function calls a "transform" function from a library*:

    fft.transform(real, imag);

    Hence, the visualizer program calculates the discrete Fourier transform (DFT) by its own. That sounds strange, I think. Why don't we use the sensor's own DSP to calculate the DFT? Is there any accelerator to do that?

    * The library is available at https://www.nayuki.io/page/free-small-fft-in-multiple-languages for various languages.

  • Hi BV,

    This "visualizer fft" is only performing it on the entire output data so that it can draw the Range Profile plot. This is also performed in the standard mmWave Demo Visualizer for the Out-of-Box Demo.

    The AWR1642 chip performs the two-step FFT on-chip to return a single distance measurement with high accuracy.

    Cheers,

    Akash