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.

Compiler/AWR1642BOOST: TIDEP-0092,algorithm

Part Number: AWR1642BOOST
Other Parts Discussed in Thread: AWR1642, TIDEP-0092

Tool/software: TI C/C++ Compiler

Hi:

  My company are using AWR1642 to develop some application products and I am now simulating the behavior of the reference code. I have some question about the reference code (TIDEP-0092) clustering and tracking phase.

1. What is vector currTrack->vec stand for? state(x,y,vx,vy) or measuremnt(r,v,theta)?

Below code is in Extended_Kalman_Filter_xyz.

if (stateVecTimeUpdate(currTrack->vec, td) == IS_INVALID)
{
nFree = invalidateCurrTrack(currTrack, freeTrackerIndxArray, nFree, iTrack);
continue;
}

It seem like "state" in this part, but there is another part that let me confused, 

Qvec = select_QVec(QvecList, currTrack->tick, currTrack->age, currTrack->vec[iRANGE]);

There statement says that is the range information of track.(vec[iRANGE])

2. I have study some questions about others asked at E2E about the measurement noise issues but still not understand clearly. How to use the CRLB to estimate the noise distribution in range,velocity,and angular domain?And how does this parameters (measurement cov) change when we have more than one measurement in one cluster?

3.If I have few track is now being tracked,and there are some moment some track do not has measurement with in gate. Does the track(with no measurement) still updated the state with only predict data?

4.The code is also in Extended_Kalman_Filter_xyz.
/* b5. Update the size of the cluster using the current size and a 1st order IIR. */
currTrack->xSize = (int16_t) ((7 * ((int32_t) currTrack->xSize)) + ((int32_t) currMeas->xSize)) >> 3;
currTrack->ySize = (int16_t) ((7 * ((int32_t) currTrack->ySize)) + ((int32_t) currMeas->ySize)) >> 3;
I do not understand the part of above code

Thanks for answering my questions!

Best regards,

Henry Lin

  • Hi,

    We have to check with the developer of the algorithm and will get back to you

    thank you
    Cesar
  • Hi Henry, 

    Thank you for taking the time to review the SRR TI Design. Answers to your questions are provided below. 

    1. What is vector currTrack->vec stand for? state(x,y,vx,vy) or measuremnt(r,v,theta)?

    It should stand for state(x,y,vx,vy). The current 'tracker state structure' is called currTrack, and its state is always (x,y,vx,vy).

    Regarding the second part of your question, it is a bug which we've fixed in our internal release. The 'process noise matrix' selection (or Qvec) selection is done based on the distance of the object from the radar, and it is larger when the object is closer and smaller when it is farther away. Ideally, the  function should have been ...

    Qvec = select_QVec(QvecList, currTrack->tick, currTrack->age, sqrtsp(currTrack->vec[iX] + currTrack->vec[iY]*currTrack->vec[iY]) );

    In other words, we should've provided the 'range' computed from the state (i.e. sqrt(x*x + y*y) ). 

    2. I have study some questions about others asked at E2E about the measurement noise issues but still not understand clearly. How to use the CRLB to estimate the noise distribution in range,velocity,and angular domain?And how does this parameters (measurement cov) change when we have more than one measurement in one cluster?

    The measurement nosie is simply an estimate of the variance of the measurements - range, angle, and velocity.

    Given a single parameter and its SNR, the easiest way to compute a variance is to calculate the CRLB which relates the SNR to the variance when using an ML-estimator.  We assume that the 'Fourier Transform' based estimator that we use is fairly close to the ML estimate, if there is only one object in the vicinity. If there are multiple strong objects within a single cluster, we also need to use the size of the cluster (variance is assumed to be atleast (3.0*max(xSize*xSize, ySize*ySize)). The final variance is simply the higher of the two. 

    In most cases, there would be only one object per cluster,  so the CRLB is what is normally used for measurement noise.

    3.If I have few track is now being tracked,and there are some moment some track do not has measurement with in gate. Does the track(with no measurement) still updated the state with only predict data?

    Yes. The function 'stateVecTimeUpdate' is run always for all the valid tracks. 

    4.The code is also in Extended_Kalman_Filter_xyz.
    /* b5. Update the size of the cluster using the current size and a 1st order IIR. */
    currTrack->xSize = (int16_t) ((7 * ((int32_t) currTrack->xSize)) + ((int32_t) currMeas->xSize)) >> 3;
    currTrack->ySize = (int16_t) ((7 * ((int32_t) currTrack->ySize)) + ((int32_t) currMeas->ySize)) >> 3;
    I do not understand the part of above code

    The xSize, and the ySize are the size of a 'tracked' cluster. The above computation is simply an IIR filter on the xSize, and the ySize respectively.  In other words

    xSize = (xSize * 7/8 + xSize/8)

    As I said previously, the only reason this filtering is performed is for the visual effect of a smooth growth/reduction in size of 'tracked' clusters.

    Regards

    Anil