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.

AWR1642BOOST: InterframeProcessing -> phase error compensation & zero doppler expansion

Part Number: AWR1642BOOST
Other Parts Discussed in Thread: AWR1642

Dear TI community,

we are using the AWR1642 for a education project. Currently I am trying to understand the radar, especially the code side. I do have two questions right now and hope you could help me to answer them.

The questions are related to the function void MmwDemo_interFrameProcessing(MmwDemo_DSS_DataPathObj *obj):

for (idx = 0; idx < numRxAnt; idx++)
             {
                   int64_t lltemp;
                   int64_t *restrict inputPtr;

                   inputPtr = (int64_t *) &fft1Data[idx * fft2DSize];
                   lltemp = _itoll(_amem4(&odsdemo_dataPathObj.antPhaseCompCoeff[idx]), //Create a long long from 2 ints
             _amem4(&odsdemo_dataPathObj.antPhaseCompCoeff[idx]));
                   for (idx2 = 0; idx2 < (fft2DSize >> 1); idx2++) //halbe fft2d größe (dopplerbins)
                   {
                         _amem8(&inputPtr[idx2]) = _dcmpyr1(_amem8(&inputPtr[idx2]), lltemp);
                   } //amem8 = allows aligned loads and stores of 8 bytes to memory. (param: ptr to adr)
                     //dcmpyr1 two way SIMD compelx multipy operation on two sets of packed numbers with rounding
             }

             // generate the zero doppler output
             // (assumes input data is cmplx16 * numRxAnt * numChirpsPerFrame)
             idx3 = 0;
             zeroDopplerOut[rangeIdx + expensionSize] = 0; //256 + 16*2
             for (idx = 0; idx < numRxAnt; idx++)
             {
                   float totRealValue = 0;
                   float totImagValue = 0;

                   for (idx2 = 0; idx2 < fft2DSize; idx2++)
                   {
                         totRealValue += (float) fft1Data[idx3].real;
                         totImagValue += (float) fft1Data[idx3].imag;
                         idx3++;
                   }
                   zeroDopplerOut[rangeIdx + expensionSize] += (totRealValue * totRealValue) + (totImagValue * totImagValue); 
             }

             // two sided expansion of zero doppler output
             if (rangeIdx == 0)
             {
                   for (idx = 0; idx < expensionSize; idx++)
                         zeroDopplerOut[rangeIdx + idx] = zeroDopplerOut[rangeIdx + expensionSize];
             }
             if (rangeIdx == (maxRangeBinForDetect - 1))
             {
                   for (idx = 0; idx < expensionSize; idx++)
                         zeroDopplerOut[rangeIdx + expensionSize + 1 + idx] = zeroDopplerOut[rangeIdx + expensionSize];
             }

********************************************************************
Additional information
          
             * //Static config to be moved out of here:
             for (antInd = 0; antInd < ODSDEMO_MAX_RX_ANT; antInd++) // 8
             {
             odsdemo_dataPathObj.antPhaseCompCoeff[antInd].real = 32767.0; //7fff -> 7fff7fff
             odsdemo_dataPathObj.antPhaseCompCoeff[antInd].imag = 0.0;
             }
             * */
**********************************************************************

Q:

1) I'm not able the get the sense of the phase error compensation. The antPhaseCompCoeff is an array of complex numbers, where only the real part is filled with 32767.0 (0x7FFF).
For compensation (of what?), a 64-Bit int is created out of the the antPhaseCompCoeff and then likewise complex multiplicated to the FFT-1D results.
Is this done for calibrating the radar? An offset-compensation?
2) What is the reason for applying the two-sided expensation on the zero doppler output? Is it used for smoothing the zero Doppler output?

Thank you in advance for any kind of helps!


Best regards,
Steven