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.

IWR1443: High Accuracy Range Measurement - 14xx / Level Sense Demo (TIDEP-0091) - how the 1D FFT output is organized in memory L3?

Part Number: IWR1443
Other Parts Discussed in Thread: TIDEP-0091,

Hi All,

1. in High Accuracy Range Measurement - 14xx, the following CLI command is used to config the adcbuf :

adcbufCfg 0 1 0 1

which means, Complex data out, Q in LSB and I in MSB, Interleaved samples, fixed value for chirp thres.

2. in Level Sense Demo (TIDEP-0091) uses following lines to config ADCBUF in demo.c demo_staticConfig:

/* Populate Adcbuf configuration: */
  adcbufCfg->adcFmt             = 0; //0=complex
  adcbufCfg->iqSwapSel          = 1; //1=Q in LSB, I in MSB
  adcbufCfg->chInterleave       = 1; //not interleaved
  adcbufCfg->chirpThreshold     = 1;

which uses non-interleaved samples

In both cases, ADCBUF outputs complex samples (I & Q) and the input to the FFT module is a complex signal. 

A) in these two cases, does the 1D FFT output stored in a different way due to the ADCBUF interleaved/non-interleaved change? 

I mean the way imag. and real parts of the 1D FFT out is organized in L3 local memory is different due to the interleaved/non-interleaved change?

Any documentation or an explanation would be appropriated. 

B) From the source of TIDEP-0091, demo.c, demo_findTopTanges it seems that the  imaginary and complex parts are stored next to each other. : 

Here, which one is imaginary and which one is real component? 

for (idx = START_IDX; idx < DEMOCFG_NUM_ADC_SAMPLES; idx ++)
  {
    mag[idx] = 0;

    for (idx2 = 0; idx2 < chirps * 2; idx2 ++)
    {
      //Sum the squares of the magnitudes (of I and Q) and sum the chirps.
      //(don't need to do square roots since we'll only looking for max)
      temp = *fft_out++ >> 1;
      mag[idx] += (temp * temp);
    }
  }

C) in High Accuracy Demo 14xx, (i.e. with interleaved samples) how the imag. and real parts of the1D FFT output is stored in MMW_HWA_1D_OUT_PING memory? 

Is this similar to non-interleaved complex input signal ?

The reason why I'm asking this info. is, I need to find few peak values in 1D FFT output.  Is there any documentation on how the real and imaginary signals are stored in memory? 

Thanks,

Randy

  • Hi Randy,

    As to the interleaved question, please check the mmwave_sdk_user_guide on adcbufCfg. Only certain modes are supported.
    As for the data format, I think this document will help:
    www.ti.com/.../swra581.pdf

    Let me know if there's still confusion.

    Thanks and Regards,
    Michelle
  • Hi Michelle,

    My question is not how the ADC samples are organized in memory.

    My question is how the 1D FFT output is stored in memory  (i. e. how real & imag. parts of 1D FFT is stored) ?

    Does it changes with the interleaved or non-interleaved samples ?

    Is there any doc. which explain how the 1D FFT out is stored in L3 memory in both cases.

    Thanks

    Randy

  • Hi Randy,

    Sorry I was mislead by seeing adcbufCfg. The interleave option does not change the real and img parts of a complex sample. It's the sample by sample location that's different. For example, for 4 rx, interleaved samples are S0_rx0, S0_rx1, S0_rx2, S0_rx3, S1_rx0, S1_rx1, S1_rx2, S1_rx3, S2_rx0, S2_rx1, S2_rx2, S2_rx3...., while non-interleaved samples look like this: S0_rx0, S1_rx0, S2_rx0, S3_rx0, S4_rx0.....Sn_rx0, S0_rx1..... each Sx here is a complex sample with 32 bits (16bits I and 16 bitsQ)

    In IWR1443, HWA hardware parameter sets for fft will specify how the data is picked from the source memory and how it's stored on the destination memory (see HWA user guide part 1).

    As for which one is imag and which is real part, in the IQ swap of 0, we have I was lower 16bits and Q as higher 16 bits (open the memory browser you'll see it's data is stored as 32 bits). In the level sensing demo, IQ is swapped, then it means I is higher 16bits and Q is lower 16 bits.

    In high accuracy lab, it's the non-swapped case.

    If you are only interested into peaks, no need to worry about IQ swap. Just take the magnitude.

    Let me know if it's still clear.

    Thanks and Regards,
    Michelle
  • Hi Randy,

    It seems you are not satisfied with the answer above. Let me go directly to your original question to clarify

    copy over and respond inline below:
    In both cases, ADCBUF outputs complex samples (I & Q) and the input to the FFT module is a complex signal.

    A) in these two cases, does the 1D FFT output stored in a different way due to the ADCBUF interleaved/non-interleaved change?

    I mean the way imag. and real parts of the 1D FFT out is organized in L3 local memory is different due to the interleaved/non-interleaved change? [ML]: The 1D output sample sequence depend on how the HWA parameter set for destination memory. But each sample is 16bit I and 16bitQ, if you want to find the magnitude, just use sqrt(I^2 + Q^2), that has nothing to do with interleaved/non-interleaved.

    Any documentation or an explanation would be appropriated.

    B) From the source of TIDEP-0091, demo.c, demo_findTopTanges it seems that the imaginary and complex parts are stored next to each other. :

    Here, which one is imaginary and which one is real component? [ML]: lower 16 bit is I and higher 16 bit is Q (IQ not swapped in 1D FFT output).

    C) in High Accuracy Demo 14xx, (i.e. with interleaved samples) how the imag. and real parts of the1D FFT output is stored in MMW_HWA_1D_OUT_PING memory?

    Is this similar to non-interleaved complex input signal ?

    [ML]: yes, similar, each sample is lower 16bit I and higher 16bit Q (no IQ swap). Again, I and Q relative location depends on whether IQ swap is set, has nothing to do with interleaved/non-interleaved.

    Let me know if there's still confusion.

    Thanks and Regards,
    Michelle
  • We apologize that we were not able to provide you a timely answer.
    If this is still an issue we recommend that you start a new thread.