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.

IWR6843: out_of_box_demo\68xx_mmwave_sdk_dsp例程中CFAR相关配置参数thresholdScale问题

Part Number: IWR6843

您好!

mmwave_industrial_toolbox_4_8_0\labs\out_of_box_demo\68xx_mmwave_sdk_dsp例程中mss_main.c里面的MmwDemo_convertCfarToLinear函数中1962行的计算公式:

linVal = dbVal * (256.0 / 6.0) * ((float)numVirtualAntennas / (float)(1 << mathUtils_ceilLog2(numVirtualAntennas)));

 dbVal * (256.0 / 6.0) 主要目的是把20log10(abs(x))转化成log2(abs(x))*256

现在的疑问是:公式后面的((float)numVirtualAntennas / (float)(1 << mathUtils_ceilLog2(numVirtualAntennas)));的作用是什么?

如果numVirtualAntennas为1,4,8,后面就是等于1,如果为12,则为0.75.

函数定义如下:

/* Convert CFAR threshold value */
subFrameCfg->objDetDynCfg.dspDynCfg.cfarCfgRange.thresholdScale =
MmwDemo_convertCfarToLinear(subFrameCfg->objDetDynCfg.dspDynCfg.cfarCfgRange.thresholdScale,
staticCfg->numVirtualAntennas);

static uint16_t MmwDemo_convertCfarToLinear(uint16_t codedCfarVal, uint8_t numVirtualAntennas)
{
uint16_t linearVal;
float dbVal, linVal;

/* dbVal is a float value from 0-100dB. It needs to
be converted to linear scale..
First, recover float dbVal that was encoded in CLI. */
dbVal = (float)(codedCfarVal / MMWDEMO_CFAR_THRESHOLD_ENCODING_FACTOR);

/* Now convert it to linear value according to the following:
linear_value = dB_value * (256 / 6) * (numVirtualAntennas / (2^ ceil(log2(numVirtualAntennas)))) .
*/
linVal = dbVal * (256.0 / 6.0) * ((float)numVirtualAntennas / (float)(1 << mathUtils_ceilLog2(numVirtualAntennas)));

linearVal = (uint16_t) linVal;
return (linearVal);
}