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: What's the theory of RxChPhaseMeasure & DopplerCompensation?

Part Number: AWR1642BOOST

     My question is in TI MMWaveRadar Demo project  'mmw_dss_16xx':
     1. Function void MmwDemo_rangeBiasRxChPhaseMeasure(
                                        float targetDistance,
                                        float rangeResolution,
                                        float searchWinSize,
                                       uint16_t *detMatrix,
                                       uint16_t numDopplerBins,
                                       uint32_t numVirtualAntennas,
                                       uint32_t numColInSymbolMatrix,
                                       uint32_t *symbolMatrix,
                                       uint32_t numRxAnt,
                                       uint32_t numTxAnt,
                                       uint32_t *txOrder,
                                       MmwDemo_compRxChannelBiasCfg_t *compRxChanCfg)
        
in file rx_ch_bias_measure.c

     2. Function

void MmwDemo_addDopplerCompensation(
                                    int32_t dopplerIdx,
                                    int32_t numDopplerBins,
                                    uint32_t *azimuthModCoefs,
                                    uint32_t *azimuthModCoefsHalfBin,
                                    int64_t *azimuthIn,
                                    uint32_t numAnt)

      in file dss_data_path.c

     I don't understand the theory of range bias rx channel phase measure and doppler phase compensation in these 2 functions, is there a white paper ralated to these functions I can refer to.

     Thank you!

  • Hi Durf,

    I've asked an mmWave expert to look at this and someone should have an answer for you on Monday.


    Cheers,
    Akash
  • Hi,

    First, please make sure you have read the demo documentation located at

    C:\ti\mmwave_sdk_01_02_00_05\packages\ti\demo\xwr16xx\mmw\docs\doxygen\html\index.html

    Additional Resources:

    For item #2
    Please search the internet for "Doppler Compensation"

    Thank you
    Cesar
  • Hi,
    I've read 'index.html' before I ask this question.

    Maybe I didn't describe my question clearly.

    Acturally, for Q2, what I want to know is why 'Dopller induced phase' equals to 2pi*i_dop/N_{FFT_DOP}, and how the value is calculated, which is not mentioned in 'index.html'.

    For Q1, what I want to known is where Rx Channel Phase measurement algorithm comes from, I don't understand this part.

    Thank u!
  • durf, have you gone through the  , particularly 1.2 (phase of IF signal) and 1.3 (velocity estimation)

  • Yes, but the video seems not giving the analysis of doppler compensation and RxPhasMeasurement. For doppler compensation, it seems the additional phase compensation 2pi*i_dop/N_{FFT_DOP} coorespons to the max doppler phase shift 2*pi(but the max phase shift in doppler is pi), and evenly ditributed to each chirp, cause each chirp adding phase shift 2pi*i_dop/N_{FFT_DOP}. I don't know what I think is correct. Thank you!
  • You are right the video is not directly about the things you are trying to understand but the basic understanding of phase is needed to understand the velocity and angle estimation concepts in the TDM-MIMO scheme which video does not directly talk about. Note i_dop is signed [-N/2,N/2), max unambiguous is still pi because of this (in the video |omega| < pi). When you do doppler FFT, you have index range from 0 to N-1, you convert this into a signed representation for compensation purposes.

    What is and why doppler compensation? : In TDM-MIMO scheme on the 16xx, the velocity estimation needs to take the readings corresponding to the same virtual antenna i.e time series of each of the receive antenna corresponding to each transmit antenna and in TDM case, it is every other transmit antenna, because if you try to estimate using tx1 and tx2 for example on the same rx antenna readings of these two consecutive chirps, you will have a mix of phase shift due to motion and phase shift due to the angular position of the object because tx1 and tx2 are not physically co-located (or in other words, each of the rx pair corresponding to tx1 and tx2 are not co-located in virtual space), so if you want to know the velocity without knowing the position of the object, you have to use the readings corresponding to the same transmit antenna, in other words the Tc that you see in the video is the time between chirps corresponding to the same transmit antenna in the TDM case, not consecutive physical chirps as in the picture in the video (video is explaining the general concept, not particulars of TDM-MIMO but if you understand the basics from the video, you will be able to see what I explain here properly, hence I pointed to the video).

    Having estimated the velocity this way, now when you proceed to do angle computation for the object separated in range-doppler matrix (i.e you have determined radial position and the velocity of the object), this angle computation in the TDM case involves all rx readings corresponding to both tx antennas which arrange nicely in a spatial array separated by lambda/2 due to the 2*lambda separation between the two tx antennas which is also the total separation from first rx to last rx (rxes are separated by lambda/2 among each other, so total separation among them is 4*(lambda/2) = 2*lambda = tx1-tx2 seperation), now you are using this spatial information to estimate the angular position. In this case, you will realize that you need to account for the doppler related phase shift of tx2 relative to tx1 before you estimate angle otherwise your estimation will be polluted due to phase shift corresponding to the motion from tx1 to tx2 i.e the group of rxes corresponding to tx2 transmission needs to be motion compensated relative to the group of rx-es due to tx1 transmission on the range-velocity bin on which you are estimating the angle, but because you estimated (based on same tx to same tx), you can estimate how much it would have shifted between tx1 and tx2 and cancel this out so you only have angle related phase shift i.e in effect you are removing motion induced phase shift from tx1 to tx2 to estimate angular position correctly.

    So in summary, the procedure is you estimate the velocity first using alternative chirps (and you do this for both tx1 and tx2) on series of readings from same rx antenna (you never use other antennas in velocity) and before you do angle estimation, you use this estimated velocity to determine how much velocity related phase shift has happened from tx1 to tx2 and correct the tx2 related antennas for that much amount, this phase shift is going to be tx1 to tx1 (or tx2 to tx2) divided by 2. (this applies generally, e.g if there were say 3 tx antennas (as in 14xx), then the rx-es corresponding to 2nd antenna you would compensate by 1/3 of the total and those corresponding to 3rd by 2/3rd of the total). After having done this, you can use the array of rx-es to estimate angle (azimuth) correctly. Note you can estimate the angle by using only rxes corresponding to the same transmit antenna in which case you don't need to worry about doppler compensation but now you are limiting your antenna array to only the physical size of 4 antennas which will basically halve your angular resolution, and defeats the purpose of the TDM-MIMO. Note also that the chirp period Tc for velocity estimation is effectively double of non-TDM case, which halves the max velocity that can be estimated which is the down side of TDM, however we have a feature called extended max velocity that allows user to recover this loss with some additional processing, within some limitations.

    Regarding the range bias and phase compensation, this is related to calibration required because of routing length variations on each board and RF delays in the chip. In effect, it would be like each of the paths from tx -> object -> rx (8 such paths = 2 tx * 4 rx) are not what the geometry shows but different lengths which means that the object will be seen at a distance different than where it is truly located (typically longer distance due to the additional lengths) from the sensor and also potentially at a different angle than it actually is because the phase information going to the angle estimation will be affected by the additional (and importantly for phase, different among the tx-rx pair) lengths. So the calibration procedure requires you to place the object at a known position (and constrained to 0 azimuth angle in our implementation) and the code measures the range bias and the relative phases among the antennas and generates a correction vector which when embedded in the configuration file by the user, will apply the range bias correction to every object's range estimate and the phase corrections are applied before angle estimation is done. See also :

    e2e.ti.com/.../673284
  • First, Thank u for your such long answering, it's so nice of you!!!!!

    Having read your reply, and I returned to read the code, I realized that I've made a big mistake understanding the code. Thank u for your answer!