Part Number:IWR1843BOOST
你好,
程序是PA_18XX,如果不使用多普勒维度FFT,直接将实部和虚部转换为浮点数,这么改有什么不对吗?运行CFAR时检测点高达145个,原来只有十几个,
如果这样更改存在数据上的错误,有什么建议吗
for (rangeIdx = 0; rangeIdx < obj->numRangeBins; rangeIdx++){//鎸夌収璺濈缁村皢鏁版嵁浠ワ紙铏氭嫙澶╃嚎*澶氭櫘鍕掍粨锛夊皢鏁版嵁浠巖adarCube鎼繍鍒版殏瀛樹箳涔撶紦瀛樺尯copyBlock((uint32_t *)&obj->radarCube[rangeIdx * obj->numVirtualAntennas * obj->numDopplerBins], (uint32_t *)&obj->dstPingPong[0], obj->numDopplerBins * obj->numVirtualAntennas);radarDopplerProcessRun(obj->radarProcessHandle, (cplx16_t *) &obj->dstPingPong[0], (float *) obj->dopplerProcOut[PING]);//闂撮殧璺濈浠撲紶閫佸鏅嫆浠� 鐢ㄤ簬璺濈閫熷害鐑浘copyTranspose((uint32_t *)obj->dopplerProcOut[PING], (uint32_t *)&(obj->radarProcConfig.heatMapMem[rangeIdx]), obj->numDopplerBins, 0, obj->numRangeBins, 1);} uint8_t radarDopplerProcessRun(void *handle, cplx16_t * pDataIn, float *pDataOut) {radarProcessInstance_t *processInst = (radarProcessInstance_t *)handle; int32_t i,j; float *tempDataOut; tempDataOut=pDataOut; for (j = 0; j < processInst->nRxAnt; j++)//虚拟天线个数 {//按照天线维度将(虚拟天线*多普勒仓)数据展开 // processInst->dopplerInput->dopplerProcInput[j] = (void * )&pDataIn[j * processInst->fftSize2D];pDataOut=tempDataOut;//累加四个天线的数据,并转换为floatfor( i = 0; i <((int32_t)processInst->fftSize2D - 1); i++){*pDataOut += (float)pDataIn[j * processInst->fftSize2D].real;pDataOut++;*pDataOut += (float)pDataIn[j * processInst->fftSize2D].imag;pDataOut++;pDataIn++;} } // /*输入标志,指示调用模块仅用于重新生成 2DFFT 输出目的。*/ // processInst->dopplerInput->reGen2DFFTout4AoAFlag = 0; // /*输入标志,用于启用TDM MIMO的多普勒补偿(如果设置为1), // * 并且如果reGen2DFFTout4AoAFlag设置为1*/ // processInst->dopplerInput->dopplerComp4TDMMimo = 0; // // processInst->dopplerProcErrorCode = RADARDEMO_dopplerProc_run( // processInst->dopplerFFInstance, // processInst->dopplerInput, // pDataOut); // return((uint8_t)processInst->dopplerProcErrorCode); }
Cherry Zhou:
您好,您的code是不是有些问题?可以的话您请重新添加下。
,
JESU LEE:
是不能直接将cplx16_t转换为float吗,因为我看到CFAR的输入是float ** localPDPPtr
,
Cherry Zhou:
for (rangeIdx = 0; rangeIdx < obj->numRangeBins; rangeIdx++) { //鎸夌収璺濈缁村皢鏁版嵁浠ワ紙铏氭嫙澶╃嚎*澶氭櫘鍕掍粨锛夊皢鏁版嵁浠巖adarCube鎼繍鍒版殏瀛樹箳涔撶紦瀛樺尯 copyBlock((uint32_t *)&obj->radarCube[rangeIdx * obj->numVirtualAntennas * obj->numDopplerBins], (uint32_t *)&obj->dstPingPong[0], obj->numDopplerBins * obj->numVirtualAntennas);
radarDopplerProcessRun(obj->radarProcessHandle, (cplx16_t *) &obj->dstPingPong[0], (float *) obj->dopplerProcOut[PING]);
//闂撮殧璺濈浠撲紶閫佸鏅嫆浠� 鐢ㄤ簬璺濈閫熷害鐑浘 copyTranspose((uint32_t *)obj->dopplerProcOut[PING], (uint32_t *)&(obj->radarProcConfig.heatMapMem[rangeIdx]), obj->numDopplerBins, 0, obj->numRangeBins, 1); }
您代码的前半部分如上,我和您确认下是否无误,没有问题的话我就把您的问题升级到英文论坛给工程师看下。
,
JESU LEE:
您提到的这部分代码是原来的,更改的是radarDopplerProcessRun函数;
原来的函数体:
uint8_t radarDopplerProcessRun(void *handle, cplx16_t * pDataIn, float *pDataOut) {radarProcessInstance_t *processInst = (radarProcessInstance_t *)handle;int32_t i,j;float *tempDataOut;tempDataOut=pDataOut;for (j = 0; j < processInst->nRxAnt; j++)//虚拟天线个数{//按照天线维度将(虚拟天线*多普勒仓)数据展开processInst->dopplerInput->dopplerProcInput[j] = (void * )&pDataIn[j * processInst->fftSize2D];}/*输入标志,指示调用模块仅用于重新生成 2DFFT 输出目的。*/processInst->dopplerInput->reGen2DFFTout4AoAFlag = 0;/*输入标志,用于启用TDM MIMO的多普勒补偿(如果设置为1),* 并且如果reGen2DFFTout4AoAFlag设置为1*/processInst->dopplerInput->dopplerComp4TDMMimo = 0;processInst->dopplerProcErrorCode = RADARDEMO_dopplerProc_run(processInst->dopplerFFInstance,processInst->dopplerInput,pDataOut);return((uint8_t)processInst->dopplerProcErrorCode); }更改后的函数体:
uint8_t radarDopplerProcessRun(void *handle, cplx16_t * pDataIn, float *pDataOut) {radarProcessInstance_t *processInst = (radarProcessInstance_t *)handle;int32_t i,j;float *tempDataOut;tempDataOut=pDataOut;for (j = 0; j < processInst->nRxAnt; j++)//虚拟天线个数{pDataOut=tempDataOut;//累加四个天线的数据,并转换为floatfor( i = 0; i <((int32_t)processInst->fftSize2D - 1); i++){*pDataOut += (float)pDataIn[j * processInst->fftSize2D].real;pDataOut++;*pDataOut += (float)pDataIn[j * processInst->fftSize2D].imag;pDataOut++;pDataIn++;}}return; }
,
JESU LEE:
Cherry Zhou 说:您代码的前半部分如上,我和您确认下是否无误,没有问题的话我就把您的问题升级到英文论坛给工程师看下。
我在想是不是因为将实部虚部分别转换成float的数量是2个float,这时候就超出了输出的大小 dataPathObj->dopplerProcOut[PING] = (float *)radarOsal_memAlloc(RADARMEMOSAL_HEAPTYPE_LL2, 0, sizeof(float)*dataPathObj->numDopplerBins, 8);
我猜想是不是将实部作为float的高位,虚部作为float的虚部这样处理的
,
Cherry Zhou:
我们向工程师确认下,有答复尽快给到到您。
,
Cherry Zhou:
请问您目前安装的软件版本(SDK、toolbox等)是什么? 以及使用的示例软件是什么? 您的应用具体是什么?
,
JESU LEE:
你好,软件版本是sdk3.5.0.4,示例软件pa_18xx,应用是打算将pa_18xx 的速度纬度fft算法部分去掉,将距离纬度的cfar检测出来的距离索引,用于高精度液位测量的zoomfft粗略的索引,提高静态物体距离的检测精度。