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.

IWR1843BOOST: 关于多普勒删除的问题

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;//累加四个天线的数据,并转换为float
       for( 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);
}

  • 您好,您的code是不是有些问题?可以的话您请重新添加下。

  • 是不能直接将cplx16_t转换为float吗,因为我看到CFAR的输入是float ** localPDPPtr

  • 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);
    }

    您代码的前半部分如上,我和您确认下是否无误,没有问题的话我就把您的问题升级到英文论坛给工程师看下。

  • 您提到的这部分代码是原来的,更改的是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;//累加四个天线的数据,并转换为float
            for( 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;
    }

  • 您代码的前半部分如上,我和您确认下是否无误,没有问题的话我就把您的问题升级到英文论坛给工程师看下。

    我在想是不是因为将实部虚部分别转换成float的数量是2个float,这时候就超出了输出的大小    dataPathObj->dopplerProcOut[PING] = (float *)radarOsal_memAlloc(RADARMEMOSAL_HEAPTYPE_LL2, 0, sizeof(float)*dataPathObj->numDopplerBins, 8);

    我猜想是不是将实部作为float的高位,虚部作为float的虚部这样处理的

  • 我们向工程师确认下,有答复尽快给到到您。

  • 请问您目前安装的软件版本(SDK、toolbox等)是什么? 以及使用的示例软件是什么? 您的应用具体是什么?

  • 你好,软件版本是sdk3.5.0.4,示例软件pa_18xx,应用是打算将pa_18xx 的速度纬度fft算法部分去掉,将距离纬度的cfar检测出来的距离索引,用于高精度液位测量的zoomfft粗略的索引,提高静态物体距离的检测精度。

  • 软件目录

    mmwave_automotive_toolbox_3_2_0\labs\lab0008_automated_parking

  • 工程师不太熟悉 PA_18xx 示例软件。 请问在哪里获得(radar toolbox等)? 

  • 工程师不太熟悉 PA_18xx 示例软件。 请问在哪里获得(radar toolbox等)? 

    mmwave_automotive_toolbox_3_2_0\labs\lab0008_automated_parking

  • 好的收到了,我们需要请求汽车团队专家的帮助,应该会在一到两天给到您答复。

  • 十分抱歉,我们的支持团队可以为此demo提供的支持有限,该demo的开发人员已无法再提供支持。

    将距离 FFT 的输出转换为浮点应该不会有问题。 但是需要确保 CFAR 处理也在处理浮点格式。 

  • 你好,我发现ZOOMFFT算法的输入需要原始数据的float形式;CFAR算法的输入是12(3*4)根天线的一个chirp累加成一个chirp,从而组成chirp数*采样点数的二维float数组;我想将cfar得到的距离索引用于ZOOMFFT,就必须保证ZOOMFFT输入也得是12根天线的chirp累加和并转换为float吗,还是跟原来一样输入的是一根天线的多个chirp的累加作为输入?

  • 您是否能分享个方框图,显示了将 Zoom FFT 应用于何处这样方便我们更好地理解您的问题?