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: clutter reduction in the OOB demo

Part Number: IWR1443

Hi,

I would like confirmation on one variable in your oob demo.  Your clutter reduction algorithm involves three loops over indices, rngIdx, antIdx and dopIdx.  The rngIdx are over the range bins since the first fft has been done.  The antIdx are over the number of virtual antennas.  The dopIdx are over ?.  It is listed as the doppler bins but the second fft has not been done yet.  So would it not be over the number of chirps but then numDopplerchirp != number of chirps.

It the inner loop is actually over the doppler bins, how does one access the fft'ed data for the first chirp for each of the virtual antennas?

Thanks.

Al

           for (rngIdx = 0; rngIdx < dataPathObj->numRangeBins; rngIdx++)
            {
                for (antIdx = 0; antIdx < dataPathObj->numVirtualAntennas; antIdx++)
                {
                    meanVal.real = 0;
                    meanVal.imag = 0;
                    for (dopIdx = 0; dopIdx < dataPathObj->numDopplerBins; dopIdx++)
                    {
                        meanVal.real += fftOut1D[rngIdx*(dataPathObj->numDopplerBins*dataPathObj->numVirtualAntennas) +
                                                 antIdx + dopIdx*(dataPathObj->numVirtualAntennas)].real;
                        meanVal.imag += fftOut1D[rngIdx*(dataPathObj->numDopplerBins*dataPathObj->numVirtualAntennas) +
                                                 antIdx + dopIdx*(dataPathObj->numVirtualAntennas)].imag;
                    }
                    meanVal.real = meanVal.real/dataPathObj->numDopplerBins;
                    meanVal.imag = meanVal.imag/dataPathObj->numDopplerBins;
                    for (dopIdx = 0; dopIdx < dataPathObj->numDopplerBins; dopIdx++)
                    {
                        fftOut1D[rngIdx*(dataPathObj->numDopplerBins*dataPathObj->numVirtualAntennas) +
                                 antIdx + dopIdx*(dataPathObj->numVirtualAntennas)].real -= meanVal.real;
                        fftOut1D[rngIdx*(dataPathObj->numDopplerBins*dataPathObj->numVirtualAntennas) +
                                 antIdx + dopIdx*(dataPathObj->numVirtualAntennas)].imag -= meanVal.imag;
                    }
                }
            }
        }

  • Former Member
    0 Former Member

    Hello Allen,
    Yes it's over the number of chirps.


    Amanda

  • Hi Amanda,

    Thank you for the confirmation to what I perceived but the inner index for k (the chirp index) should be something like

    chpIdx = 0; chpIdx < dataPathObj->numChirpsPerFrame; chpIdx++

    and not this

    dopIdx = 0; dopIdx < dataPathObj->numDopplerBins; dopIdx++

    since

    numChirpsPerFrame<= numDopplerBins

    What I am I missing unless the vales in fftOut1D between numChirpsPerFrame+1 and numDopplerBins are zero but then the normalization, 1/N_c is off?

    Al

  • Hi Amanda,

    I was wrong about my concern regarding numDopplerBins.  Thank you for your help and please mark this posting as closed.

    Al

  • To clarify some points for the benefit of future visitors to this link:

    Your initial hunch is true. Following points will clarify:

    You are referring to 1443 demo, which means the release is 2.1 or lower [we do not have 1443 oob demo in 3.1 release]. Until 2.x releases, we did not introduce the term "numDopplerChirps", we introduced it in 3.x release. This term is defined as follows:

    /*! @brief Number of chirps for Doppler computation purposes.
    For example, in TDM/BPM-MIMO scheme, this is the physical chirps
    in a frame per transmit antenna
    i.e numDopplerChirps = numChirpsPerFrame / numTxAntennas */
    uint16_t numDopplerChirps;

    The number of doppler bins is next power of 2 of number of doppler chirps, analogous to how number of range bins is the next power of 2 of number of adc samples.

    Reason we did not have this in 2.x releases is because we did not design our code to support non power of 2 number of doppler chirps i.e the physical chirping (total chirps per frame/ num tx antenna) was restricted to be power of 2 and therefore numDopplerChirps = numDopplerBins. This restriction is sometimes problematic because it may require too much compromise in the chirping design e.g if you want something between say 64 and 128 number of doppler chirps, you have to go to 128 and this increases either the total frame time or reduce chirp times pr compromise something else but this can compromise the goals of the chirp profile [trades between range max, range resolution, vel max, vel resolution etc]. In 3.x we removed this restriction. This means 1D output - the radar cube that we actually store in L3 RAM has numDopplerChirps as one of the dimensions [you can refer to datapath/dpif/dpif_radarcube.h] and after 2D that dimension will become numDopplerBins [detection matrix is stored also in L3 ram it will have this dimension, you can see in datapath/dpif/dpif_detmatrix.h]. As you know, static clutter removal is done on 1D output so in 3.x release code, you will see numDopplerChirps for clutter computation, not numDopplerBins.

    You probably figured out yourself and hence you asked to close the thread I guess.