Tool/software: Code Composer Studio
Hi,
The DSP mode in the SDK3.2 computes the detmatrix as follows in the function DPU_DopplerProcDSP_log2AbsAccum(3Tx antennas,4Rx Antennas for example):
static inline void DPU_DopplerProcDSP_log2AbsAccum
(
DPU_DopplerProcDSP_Obj *obj,
uint16_t rxAntIdx,
uint16_t txAntIdx,
uint16_t rangeIdx,
uint32_t *waitingTime,
uint16_t fftOutIndx
)
{
volatile uint32_t startTimeWait;
uint32_t idx;
uint16_t *log2AbsBuf = (uint16_t *)obj->cfg.hwRes.windowingLog2AbsBuf;
mmwavelib_log2Abs32(
(int32_t *) &obj->cfg.hwRes.fftOutBuf[fftOutIndx],
log2AbsBuf,
obj->cfg.staticCfg.numDopplerBins);
/* Check if this is the first virtual antenna for this range bin*/
if ((rxAntIdx == 0) && (txAntIdx == 0))
{
/*This is the first virtual antenna. Starting a new sum. */
if (rangeIdx > 0)
{
/* check if previous sumAbsBuf has been transferred */
startTimeWait = Cycleprofiler_getTimeStamp();
DPU_DopplerProcDSP_waitTransDetMatrix (obj);
waitingTime += Cycleprofiler_getTimeStamp() - startTimeWait;
}
/* Start new sum*/
for (idx = 0; idx < obj->cfg.staticCfg.numDopplerBins; idx++)
{
obj->cfg.hwRes.sumAbsBuf[idx] = log2AbsBuf[idx] >> obj->log2VirtAnt;
}
}
else
{
/*Not the first virtual antenna. Accumulate.*/
mmwavelib_accum16shift(log2AbsBuf,
obj->cfg.hwRes.sumAbsBuf,
obj->log2VirtAnt,
obj->cfg.staticCfg.numDopplerBins);
}
}
In this function,the function mmwavelib_accum16shift is called.The element in the detmatrix is equal to sum(abs(xi)>>4),i=0:11.
The threshold TdB in the CFAR step is derived as belows:
Because in the function MmwDemo_CLICfarCfg,MMWDEMO_CFAR_THRESHOLD_ENCODING_FACTOR=100.0, the configuration parameter argv[8] should be 32/100*TdB.That is to say,if the threshold TdB=15, argv[8]=32*15/100=4.8.
I don't know whether my understanding is right or not.
Regards,
Rata