Xiaojie雷达之路---TI实战笔记---MmwDemo_dataPathConfigPopulate详解

本篇文章主要是介绍main函数中的MmwDemo_dataPathConfigPopulate函数,该函数主要是对雷达的数据路径的一些参数进行配置

    int16_t i;
    obj->processingPath = POINT_CLOUD_PROCESSING;
    obj->subframeIndx = subframeIndx;
    obj->numRxAntennas = NUM_RX_CHANNELS;
    obj->chirpThreshold = ADCBUFF_CHIRP_THRESHOLD;
    obj->numTxAntennas = SUBFRAME_USRR_NUM_TX;
    obj->numVirtualAntennas = SUBFRAME_USRR_NUM_VIRT_ANT;
    obj->numVirtualAntAzim = 8;
    obj->numVirtualAntElev = 4;
    obj->numAdcSamples = SUBFRAME_USRR_NUM_CMPLX_ADC_SAMPLES;
    obj->numRangeBins = SUBFRAME_USRR_NUM_CMPLX_ADC_SAMPLES;
    obj->numDopplerBins = SUBFRAME_USRR_CHIRPTYPE_0_NUM_CHIRPS;

#if (SUBFRAME_USRR_CHIRPTYPE_0_NUM_CHIRPS != SUBFRAME_USRR_CHIRPTYPE_1_NUM_CHIRPS)
#error "the number of chirps in each chirp type is not equal"
#endif

    obj->maxUnambiguousVel = SUBFRAME_USRR_MAX_VEL_M_P_S;

    /*! @brief Q format of the output x/y/z coordinates */
    obj->xyzOutputQFormat = 7;
    obj->invOneQFormat = 1.0f/((float)(1U << obj->xyzOutputQFormat));
    obj->sinAzimQFormat = 14;
    obj->invOneSinAzimFormat = 1.0f/((float)(1U << obj->sinAzimQFormat));

    //obj->radarProcConfig.DopplerWinSize =
    /*! @brief DC Range antenna signature calibration configuration. */
//    obj->calibDcRangeSigCfg.enabled = 0;
    obj->txAntennaCount = SUBFRAME_USRR_NUM_TX;

    //obj->radarProcConfig.framePeriod = ;
    obj->radarProcConfig.numAdcSamplePerChirp = SUBFRAME_USRR_NUM_CMPLX_ADC_SAMPLES;
    obj->radarProcConfig.numAdcBitsPerSample = 16;
    obj->radarProcConfig.numChirpPerFrame = SUBFRAME_USRR_CHIRPTYPE_0_NUM_CHIRPS;
    obj->radarProcConfig.numTxAntenna = SUBFRAME_USRR_NUM_TX;
    obj->radarProcConfig.numAziAntenna = 8; //SUBFRAME_USRR_NUM_AZI_ANT;
    obj->radarProcConfig.numAntenna = SUBFRAME_USRR_NUM_VIRT_ANT;
    obj->radarProcConfig.numPhyRxAntenna = NUM_RX_CHANNELS;
    obj->radarProcConfig.mimoModeFlag = 1;    /**<Flag for MIMO mode: 0 -- SIMO, 1 -- TDM MIMO, 2 -- FDM or BF*/
    obj->radarProcConfig.numTotalChirpProfile = SUBFRAME_USRR_NUM_TX;    /**<number of chirp profiles*/
    obj->radarProcConfig.numUniqueChirpProfile = 1;    /**<number of unique chirp profiles*/
    //obj->radarProcConfig.chirpInterval;
    //obj->radarProcConfig.frequencySlopeMHzMicoSec;
    //obj->radarProcConfig.adcSamplePeriodMicoSec;
    //obj->radarProcConfig.bandWidth;
    //obj->radarProcConfig.centerFrequency;
    obj->radarProcConfig.fftSize1D = SUBFRAME_USRR_NUM_CMPLX_ADC_SAMPLES;
    obj->radarProcConfig.fftSize2D = SUBFRAME_USRR_CHIRPTYPE_0_NUM_CHIRPS;
    obj->radarProcConfig.maxNumDetObj = MAX_DET_OBJECTS_RAW_POINT_CLOUD_PROCESSING;

    //obj->radarProcConfig.rangeWinSize  = 16;
    //obj->radarProcConfig.rangeWindow[0]  = 0.0800f;
    //obj->radarProcConfig.rangeWindow[1]  = 0.0894f;
    //obj->radarProcConfig.rangeWindow[2]  = 0.1173f;
    //obj->radarProcConfig.rangeWindow[3]  = 0.1624f;
    //obj->radarProcConfig.rangeWindow[4]  = 0.2231f;
    //obj->radarProcConfig.rangeWindow[5]  = 0.2967f;
    //obj->radarProcConfig.rangeWindow[6]  = 0.3802f;
    //obj->radarProcConfig.rangeWindow[7]  = 0.4703f;
    //obj->radarProcConfig.rangeWindow[8]  = 0.5633f;
    //obj->radarProcConfig.rangeWindow[9]  = 0.6553f;
    //obj->radarProcConfig.rangeWindow[10] = 0.7426f;
    //obj->radarProcConfig.rangeWindow[11] = 0.8216f;
    //obj->radarProcConfig.rangeWindow[12] = 0.8890f;
    //obj->radarProcConfig.rangeWindow[13] = 0.9422f;
    //obj->radarProcConfig.rangeWindow[14] = 0.9789f;
    //obj->radarProcConfig.rangeWindow[15] = 0.9976f;

    /* Doppler window parameters. */
    obj->radarProcConfig.DopplerWinSize    = 4;
    obj->radarProcConfig.dopplerWindow[0] = 0.1624f;
    obj->radarProcConfig.dopplerWindow[1] = 0.4703f;
    obj->radarProcConfig.dopplerWindow[2] = 0.8216f;
    obj->radarProcConfig.dopplerWindow[3] = 0.9976f;

    for (i = 0; i < 12; i++) //set default
    {
        obj->radarProcConfig.antPhaseCompCoeff[2 * i + 0] = 1.f;
        obj->radarProcConfig.antPhaseCompCoeff[2 * i + 1] = 0.f;
    }
    // -0.6663 - 0.7457i
    for (i = 4; i < 8; i++) //TX1 and TX2 are normal, TX3 needs a big phase adjust.
    {
        obj->radarProcConfig.antPhaseCompCoeff[2 * i + 0] = -0.6663;
        obj->radarProcConfig.antPhaseCompCoeff[2 * i + 1] = -0.7457;
    }

    //radarModuleCfarConfig cfarConfig;
    obj->radarProcConfig.cfarConfig.cfarMethod = 4;
    obj->radarProcConfig.cfarConfig.cfarDiscardLeft = 4;
    obj->radarProcConfig.cfarConfig.cfarDiscardRight = 5;
    obj->radarProcConfig.cfarConfig.refWinSize[0] = 8;
    obj->radarProcConfig.cfarConfig.refWinSize[1] = 4;
    obj->radarProcConfig.cfarConfig.guardWinSize[0] = 2;
    obj->radarProcConfig.cfarConfig.guardWinSize[1] = 0;
    obj->radarProcConfig.cfarConfig.thre = 6.3;
    obj->radarProcConfig.cfarConfig.dopplerSearchRelThr = 6.3;
    obj->radarProcConfig.cfarConfig.log2MagFlag = 0;
    obj->radarProcConfig.cfarConfig.clRemoval = 0;
    obj->radarProcConfig.cfarConfig.rangeRes = PROFILE_USRR_RANGE_RESOLUTION_METERS;
    obj->radarProcConfig.cfarConfig.velocityRes = SUBFRAME_USRR_VEL_RESOLUTION_M_P_S;

    //3 1 1047 3 600 10 100
    obj->radarProcConfig.doaConfig.doaMethod = 3;              /**< DOA method, 3 for MPBF, 4 for DML, 0 for SPBF.*/
    obj->radarProcConfig.doaConfig.vmaxUnrollFlag = 1;         /**<flag for angle correction for Vmax unrolling */
    obj->radarProcConfig.doaConfig.doaGamma = 1.047;           /**< gama for DoA_MPBF.*/
    obj->radarProcConfig.doaConfig.doaSideLobeLevel_dB = 3;
    obj->radarProcConfig.doaConfig.doaSearchRange = 60;  /**< DoA search range, from -doaSearchRange to +doaSearchRange.*/
    obj->radarProcConfig.doaConfig.doaSearchRes   = 1;  /**< DoA Resolution.*/
    obj->radarProcConfig.doaConfig.doaVarThr      = 10;         /**< Minimum variance range (in degree) for the output estimation. Estimates with bigger confidence range will not be reported.*/
    //obj->radarProcConfig.doaConfig.antSpacing;           /**< antenna spacing in unit of lambda/2, size of nRxAnt, only support uniform linear array*/
    //obj->radarProcConfig.heatMapMemSize;
    //obj->radarProcConfig.heatMapMem;
    //obj->radarProcConfig.pFFT1DBuffer;

    //clustering
#ifdef TMDEMOV1
    obj->radarProcConfig.dbscanConfig.nAccFrames = 4;
    obj->radarProcConfig.dbscanConfig.epsilon = 0.4;
    obj->radarProcConfig.dbscanConfig.weight = 1.3;
    obj->radarProcConfig.dbscanConfig.vFactor = 2.0;
    obj->radarProcConfig.dbscanConfig.minPointsInCluster   =   3; //obj->radarProcConfig.dbscanConfig.dbscan_nAccFrames - 1;
    obj->radarProcConfig.dbscanConfig.fixedPointScale = 256;
    obj->radarProcConfig.dbscanConfig.xyzOutputQFormat = 8;
#endif

对上面程序进行解读

obj->processingPath = POINT_CLOUD_PROCESSING;	//处理路径
obj->subframeIndx = subframeIndx;	//子帧Id
obj->numRxAntennas = NUM_RX_CHANNELS;	//接收天线数量
obj->chirpThreshold = ADCBUFF_CHIRP_THRESHOLD;		//chirp阈值  也就是每次处理的chirp数
obj->numTxAntennas = SUBFRAME_USRR_NUM_TX;	//发射天线的数量
obj->numVirtualAntennas = SUBFRAME_USRR_NUM_VIRT_ANT;		//虚拟成的天线的数量
obj->numVirtualAntAzim = 8;		//水平方向虚拟的天线数量
obj->numVirtualAntElev = 4;		//俯仰方向上虚拟的天线数量
obj->numAdcSamples = SUBFRAME_USRR_NUM_CMPLX_ADC_SAMPLES;		//ADC采样点的数量
obj->numRangeBins = SUBFRAME_USRR_NUM_CMPLX_ADC_SAMPLES;		//rangebin的数量
obj->numDopplerBins = SUBFRAME_USRR_CHIRPTYPE_0_NUM_CHIRPS;	//dopplerbin的数量



obj->maxUnambiguousVel = SUBFRAME_USRR_MAX_VEL_M_P_S;	//最大无模糊速度

/*! @brief Q format of the output x/y/z coordinates */
obj->xyzOutputQFormat = 7;
obj->invOneQFormat = 1.0f/((float)(1U << obj->xyzOutputQFormat));
obj->sinAzimQFormat = 14;
obj->invOneSinAzimFormat = 1.0f/((float)(1U << obj->sinAzimQFormat));

obj->txAntennaCount = SUBFRAME_USRR_NUM_TX;	//发射天线的计数变量

obj->radarProcConfig.numAdcSamplePerChirp = SUBFRAME_USRR_NUM_CMPLX_ADC_SAMPLES;	//每个chirp中的采样点数量
obj->radarProcConfig.numAdcBitsPerSample = 16;	//每个采样点的位数
obj->radarProcConfig.numChirpPerFrame = SUBFRAME_USRR_CHIRPTYPE_0_NUM_CHIRPS;	//每个frame中的chirp数量
obj->radarProcConfig.numTxAntenna = SUBFRAME_USRR_NUM_TX;	//发射天线的数量
obj->radarProcConfig.numAziAntenna = 8; //SUBFRAME_USRR_NUM_AZI_ANT;	//水平天线的数量
obj->radarProcConfig.numAntenna = SUBFRAME_USRR_NUM_VIRT_ANT;	//虚拟天线的数量
obj->radarProcConfig.numPhyRxAntenna = NUM_RX_CHANNELS;	//物理上的接收天线的数量
obj->radarProcConfig.mimoModeFlag = 1;    //雷达的模式	时分复用 多发多收/**<Flag for MIMO mode: 0 -- SIMO, 1 -- TDM MIMO, 2 -- FDM or BF*/

obj->radarProcConfig.numTotalChirpProfile = SUBFRAME_USRR_NUM_TX;   /**<number of chirp profiles*/
obj->radarProcConfig.numUniqueChirpProfile = 1;    /**<number of unique chirp profiles*/

obj->radarProcConfig.fftSize1D = SUBFRAME_USRR_NUM_CMPLX_ADC_SAMPLES;	//1Dfft的维度大小
obj->radarProcConfig.fftSize2D = SUBFRAME_USRR_CHIRPTYPE_0_NUM_CHIRPS;	//2Dfft维度的大小
obj->radarProcConfig.maxNumDetObj = MAX_DET_OBJECTS_RAW_POINT_CLOUD_PROCESSING;	//最大的可检测点的数量

obj->radarProcConfig.DopplerWinSize    = 4;		//多普勒窗的大小
//多普勒窗的系数
obj->radarProcConfig.dopplerWindow[0] = 0.1624f;	
obj->radarProcConfig.dopplerWindow[1] = 0.4703f;
obj->radarProcConfig.dopplerWindow[2] = 0.8216f;
obj->radarProcConfig.dopplerWindow[3] = 0.9976f;

//天线的相位系数
for (i = 0; i < 12; i++) //set default
{
    obj->radarProcConfig.antPhaseCompCoeff[2 * i + 0] = 1.f;	//实部
    obj->radarProcConfig.antPhaseCompCoeff[2 * i + 1] = 0.f;	//虚部
}

// -0.6663 - 0.7457i
//给发射天线3设置相位系数,因为发射天线3需要较大的相位调整
for (i = 4; i < 8; i++) //TX1 and TX2 are normal, TX3 needs a big phase adjust.
{
    obj->radarProcConfig.antPhaseCompCoeff[2 * i + 0] = -0.6663;	//实部
    obj->radarProcConfig.antPhaseCompCoeff[2 * i + 1] = -0.7457;	//虚部
}

obj->radarProcConfig.cfarConfig.cfarMethod = 4;		//使用到的CFAR检测的算法
obj->radarProcConfig.cfarConfig.cfarDiscardLeft = 4;	//cfar左边要忽略的单元数目
obj->radarProcConfig.cfarConfig.cfarDiscardRight = 5;		//cfar右边要忽略的单元数目
obj->radarProcConfig.cfarConfig.refWinSize[0] = 8;		//range bin维度上的参考单元的数目
obj->radarProcConfig.cfarConfig.refWinSize[1] = 4;		//doppler bin维度上的参考单元的数目
obj->radarProcConfig.cfarConfig.guardWinSize[0] = 2;		//range bin维度上的保护单元的数目
obj->radarProcConfig.cfarConfig.guardWinSize[1] = 0;		//doppler bin维度上的保护单元的数目
obj->radarProcConfig.cfarConfig.thre = 6.3;		//用于比较的阈值
obj->radarProcConfig.cfarConfig.dopplerSearchRelThr = 6.3;	//多普勒搜索的阈值
obj->radarProcConfig.cfarConfig.log2MagFlag = 0;	//标志位:输入值是否是log2(mag)
obj->radarProcConfig.cfarConfig.clRemoval = 0;
obj->radarProcConfig.cfarConfig.rangeRes = PROFILE_USRR_RANGE_RESOLUTION_METERS;	//距离分辨率
obj->radarProcConfig.cfarConfig.velocityRes = SUBFRAME_USRR_VEL_RESOLUTION_M_P_S;	//速度分辨率

//3 1 1047 3 600 10 100
obj->radarProcConfig.doaConfig.doaMethod = 3;              /**< DOA method, 3 for MPBF, 4 for DML, 0 for SPBF.*/
obj->radarProcConfig.doaConfig.vmaxUnrollFlag = 1;         /**<flag for angle correction for Vmax unrolling */
obj->radarProcConfig.doaConfig.doaGamma = 1.047;           /**< gama for DoA_MPBF.*/
obj->radarProcConfig.doaConfig.doaSideLobeLevel_dB = 3;
obj->radarProcConfig.doaConfig.doaSearchRange = 60;  /**< DoA search range, from -doaSearchRange to +doaSearchRange.*/
obj->radarProcConfig.doaConfig.doaSearchRes   = 1;  /**< DoA Resolution.*/
obj->radarProcConfig.doaConfig.doaVarThr      = 10;         /**< Minimum variance range (in degree) for the output estimation. Estimates with bigger confidence range will not be reported.*/

    //clustering
#ifdef TMDEMOV1
    obj->radarProcConfig.dbscanConfig.nAccFrames = 4;
    obj->radarProcConfig.dbscanConfig.epsilon = 0.4;
    obj->radarProcConfig.dbscanConfig.weight = 1.3;
    obj->radarProcConfig.dbscanConfig.vFactor = 2.0;
    obj->radarProcConfig.dbscanConfig.minPointsInCluster   =   3; //obj->radarProcConfig.dbscanConfig.dbscan_nAccFrames - 1;
    obj->radarProcConfig.dbscanConfig.fixedPointScale = 256;
    obj->radarProcConfig.dbscanConfig.xyzOutputQFormat = 8;
#endif
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Xiaojie雷达说

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值