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.

AWR1843: It seems threshold is set larger for LOW THRESHOLD setting parameters than that for NON LOW THRESHOLD setting parameters

Expert 2050 points
Part Number: AWR1843

In automotive lab demo mrr, the value of obj->peakValThresholds[0].threshold in dss_main.c is defined according to the settings.  

To my understanding, for the LOW_THRESHOLD_FOR_USRR, the value of obj->peakValThresholds[0].threshold should be set smaller. 

But it seems (27000 >> obj->log2numVirtAnt) is larger than  (350 >> obj->log2numVirtAnt)

/* Code */

...

#ifdef LOW_THRESHOLD_FOR_USRR
/*! @brief CFAR thresholds are varied as a function of range */
obj->SNRThresholds[0].rangelim = (uint16_t) (6.0f * (float)(1U << obj->xyzOutputQFormat));
obj->SNRThresholds[0].threshold = convertSNRdBtoThreshold(1U, 13.0f, CFARTHRESHOLD_N_BIT_FRAC);

obj->SNRThresholds[1].rangelim = (uint16_t) (10.0f * (float)(1U << obj->xyzOutputQFormat));
obj->SNRThresholds[1].threshold = convertSNRdBtoThreshold(1U, 12.0f, CFARTHRESHOLD_N_BIT_FRAC);

obj->SNRThresholds[2].rangelim = 65535;
obj->SNRThresholds[2].threshold = convertSNRdBtoThreshold(1U, 12.0f, CFARTHRESHOLD_N_BIT_FRAC);

/*! @brief peakVal thresholds are varied as a function of range (meant to remove cases of
* clutter being detected too when we drive the car.) Thresholds were derived from experiments.*/
obj->peakValThresholds[0].rangelim = (uint16_t) (3.0f * (float) (1U << obj->xyzOutputQFormat));
obj->peakValThresholds[0].threshold = (27000 >> obj->log2numVirtAnt);

obj->peakValThresholds[1].rangelim = 65535;
obj->peakValThresholds[1].threshold = 0;

obj->peakValThresholds[2].rangelim = 65535;
obj->peakValThresholds[2].threshold = 0;


#else
/*! @brief CFAR thresholds are varied as a function of range */
obj->SNRThresholds[0].rangelim = (uint16_t) (6.0f * (float)(1U << obj->xyzOutputQFormat));
obj->SNRThresholds[0].threshold = convertSNRdBtoThreshold(1, 16.0f, CFARTHRESHOLD_N_BIT_FRAC);

obj->SNRThresholds[1].rangelim = (uint16_t) (10.0f * (float)(1U << obj->xyzOutputQFormat));
obj->SNRThresholds[1].threshold = convertSNRdBtoThreshold(1U, 15.0f, CFARTHRESHOLD_N_BIT_FRAC);

obj->SNRThresholds[2].rangelim = 65535;
obj->SNRThresholds[2].threshold = convertSNRdBtoThreshold(1U, 14.0f, CFARTHRESHOLD_N_BIT_FRAC);

/*! @brief peakVal thresholds are varied as a function of range (meant to remove cases of
* clutter being detected too when we drive the car.) Thresholds were derived from experiments.*/
obj->peakValThresholds[0].rangelim = (uint16_t) (3.0f * (float) (1U << obj->xyzOutputQFormat));
obj->peakValThresholds[0].threshold = (350 >> obj->log2numVirtAnt);

obj->peakValThresholds[1].rangelim = 65535;
obj->peakValThresholds[1].threshold = 0;

obj->peakValThresholds[2].rangelim = 65535;
obj->peakValThresholds[2].threshold = 0;
#endif

/* Code */

Can you please explain why this value is set? 

Kind regards