TI-毫米波雷达芯片解读->代码解读部分-4_DP专题(3)DPC详解

1.概述 

            前面的文章已经详细的分析了DPM对外接口的调用和运行逻辑,DPM对外提供了DPM_execute负责完成命令解析和数据处理的执行,DPM_start负责启动,DPM_ioctl负责进行配置。那具体芯片是如何完成从获取ad数据之后到输出点云这一段的处理的呢?这一系列的操作主要是通过DPC来进行的,后面则详细对DPC进行分析。

        结合的代码部分是objectdetect.h和objectdetect.c两个文件中的内容,h文件里面是dpc中用到的所有相关结构体定义,对这里的结构定义进行详细分析有助于我们理解dpc处理流程。objectdetect.c则是真正负责完成相关处理。其主要处理过程如下所示:

        目标检测DPC(数据处理链)提供了在帧采集和帧间处理期间将ADC样本处理为检测目标的功能。它可以通过在DPM框架中注册并使用DPM API调用来被应用程序使用。目标检测DPC的外部接口可以在目标检测DPC(数据路径处理链)外部接口处看到。

在时序图中看到的脉冲期间的处理:

        这包括1D(距离)FFT处理,它从ADC缓冲区接收多个接收天线的输入,针对每个脉冲(对应于发射天线上的脉冲模式)进行FFT处理,并将输出生成到L3 RAM中。

        在脉冲结束到下一个脉冲周期开始之间的时间内进行的处理,时序图中显示为“帧间周期”。处理包括:

        当启用时,静态杂波去除会从场景中移除所有静态物体。 2D(速度)FFT处理,它从L3 RAM中的1D输出中获取输入,并执行FFT以在L3 RAM中给出(距离,速度)矩阵。在多普勒处理的检测矩阵输出上进行CFAR处理和峰值分组。 到达角度(方位角、仰角)处理,以生成具有位置坐标(xyz)和速度的最终检测目标列表。

2.主要数据结构

Cfar检测参数结构

/**
 * @brief
 *  CFAR Configuration
 *
 * @details
 *  The structure contains the cfar configuration used in data path
 */
typedef struct DPU_CFARProc_CfarCfg_t
{
    /*! @brief    CFAR threshold scale */
    uint16_t       thresholdScale;
    /*! @brief    CFAR averagining mode 0-CFAR_CA, 1-CFAR_CAGO, 2-CFAR_CASO, 3-CFAR_OS(HWA2.0 only) */
    uint8_t        averageMode;
    /*! @brief    CFAR noise averaging one sided window length */
    uint8_t        winLen;
    /*! @brief    CFAR one sided guard length*/
    uint8_t        guardLen;
    /*! @brief    CFAR cumulative noise sum divisor
                  CFAR_CA:
                        noiseDivShift should account for both left and right noise window
                        ex: noiseDivShift = ceil(log2(2 * winLen))
                  CFAR_CAGO/_CASO:
                        noiseDivShift should account for only one sided noise window
                        ex: noiseDivShift = ceil(log2(winLen))     */
    uint8_t        noiseDivShift;
    /*! @brief    CFAR 0-cyclic mode disabled, 1-cyclic mode enabled */
    uint8_t        cyclicMode;
    /*! @brief    Peak grouping scheme 1-based on neighboring peaks from detection matrix
     *                                 2-based on on neighboring CFAR detected peaks.
     *            Scheme 2 is not supported on the HWA version (cfarprochwa.h) */
    uint8_t        peakGroupingScheme;
    /*! @brief     Peak grouping, 0- disabled, 1-enabled */
    uint8_t        peakGroupingEn;
    /*! @brief     The ordered statistic K in CFAR_OS */
    uint8_t        osKvalue;
    /*! @brief     Only used in CFAR_OS non-cyclic mode, scaling of K value for edge samples,
     *             0- disabled, 1-enabled */
    uint8_t        osEdgeKscaleEn;
} DPU_CFARProc_CfarCfg;

DPU_CFARProc_CfarCfg 是雷达数据路径中 恒定虚警率(CFAR)检测的核心配置单元,用于动态抑制环境噪声干扰并提取有效目标信号。其设计目标在于平衡检测灵敏度与虚警概率,支持多模式算法以适应复杂场景(如密集目标、强杂波环境)。

1. 核心检测参数

参数

数据类型

功能说明

约束与关联规则

thresholdScale

uint16_t

检测阈值缩放因子:噪声均值 × 缩放因子 = 最终检测阈值,值越大虚警率越低。

典型范围:200~5000(Q格式定点数),需根据信噪比(SNR)动态调整。

averageMode

uint8_t

CFAR算法模式
0-CA(单元平均)
1-CAGO(CA+保护单元)
2-CASO(CA+滑动保护)
3-OS(有序统计,仅HWA2.0)

OS模式需硬件支持,HWA1.0禁用;CAGO/CASO适用于目标密集场景,CA适合均匀噪声环境。

winLen

uint8_t

噪声参考窗单边长度:用于计算背景噪声的参考单元数量。

典型值:4~16,过长导致分辨率下降,过短噪声估计不稳定。

guardLen

uint8_t

保护窗单边长度:隔离目标能量与噪声参考窗,防止信号泄漏。

必须满足 guardLen < winLen,典型值:2~8

2. 计算优化与模式控制

参数

功能说明

技术细节

noiseDivShift

噪声累积和移位除数:用右移代替除法运算,优化计算效率。

- CA模式:ceil(log2(2 * winLen)) - CAGO/CASO:ceil(log2(winLen))

cyclicMode

循环边界处理:启用后数据首尾相连,避免边缘检测失效。

适用于旋转雷达或环形扫描场景,非循环模式需增加保护带。

peakGroupingEn

峰值聚合使能:合并邻近检测点,减少重复目标报告。

需配合peakGroupingScheme选择聚合策略。

peakGroupingScheme

聚合策略:1-基于检测矩阵邻近峰值,2-基于CFAR检测结果(HWA不支持)。

策略2精度更高但计算复杂,策略1兼容性强。

3. OS-CFAR专属参数

参数

功能说明

约束条件

osKvalue

有序统计K值:选取排序后第K个样本作为噪声估计,K越大抗干扰能力越强。

典型值:winLen * 3/4,需满足 1 ≤ K ≤ winLen

osEdgeKscaleEn

边缘K值缩放:在非循环模式下,边缘区域动态调整K值以平衡灵敏度。

适用于雷达扫描边界区域,防止边缘漏检。


校准配置相关参数

/**

 * @brief Range Bias and rx channel gain/phase measurement configuration.

 *

 */

typedef struct DPC_ObjectDetection_MeasureRxChannelBiasCfg_t
{
    /*! @brief  1-enabled 0-disabled */
    uint8_t enabled;
    /*! @brief  Target distance during measurement (in meters) */
    float targetDistance;
    /*! @brief  Search window size (in meters), the search is done in range
     *          [-searchWinSize/2 + targetDistance, targetDistance + searchWinSize/2] */
    float searchWinSize;
} DPC_ObjectDetection_MeasureRxChannelBiasCfg;

DPC_ObjectDetection_MeasureRxChannelBiasCfg 是面向 雷达接收通道校准 的核心配置模块,通过测量固定距离目标的通道响应差异,实现:

硬件误差补偿:消除多通道间增益/相位不一致性(典型误差:增益±1.5dB,相位±10°)

距离偏差修正:校正由电路延迟导致的距离测量偏移(常见误差:0.1~0.3m

自适应校准:支持现场动态校准,应对温度漂移(-40~85℃环境补偿)

参数

类型

功能说明

物理约束与工程实践

enabled

uint8_t

校准模式开关:
• 1:激活通道测量模式,暂停常规检测
• 0:正常检测模式

• 需配合专用校准信号源(如角反射器)
• 启用时雷达功耗增加15%~20%

targetDistance

float

基准目标距离:已知反射体的精确空间位置

• 典型值范围:1.0~50.0m
• 必须大于雷达最小探测距离(通常≥0.5m)

searchWinSize

float

搜索窗口半径:以基准距离为中心的对称检测范围

• 推荐值:0.5~5.0m
• 窗口过小→目标丢失风险↑
• 窗口过大→噪声干扰↑

Dpc初始化配置参数

*

 * @brief Configuration for DPM's init API.
 *        DPM_init's arg = pointer to this structure.
 *        DPM_init's argLen = size of this structure.
 *
 */
typedef struct DPC_ObjectDetection_InitParams_t
{
   /*! @brief   Handle to the hardware accelerator */
   HWA_Handle hwaHandle;
   /*! @brief   Handles of the EDMA driver. */
   EDMA_Handle edmaHandle[EDMA_NUM_CC];
   /*! @brief L3 RAM configuration. DPC will allocate memory from this
    *         as needed and report the amount of memory consumed through
    *         @ref DPC_ObjectDetection_PreStartCfg to application */
   DPC_ObjectDetection_MemCfg L3ramCfg;
   /*! @brief Core Local RAM configuration (e.g L2 for R5F).
    *         DPC will allocate memory from this as needed and report the amount
    *         of memory consumed through @ref DPC_ObjectDetection_PreStartCfg
    *         to the application */
   DPC_ObjectDetection_MemCfg CoreLocalRamCfg;
   /*! @brief   Process call back function configuration */
   DPC_ObjectDetection_ProcessCallBackCfg processCallBackCfg;

} DPC_ObjectDetection_InitParams;

参数

类型

功能说明

工程约束与典型配置

hwaHandle

HWA_Handle

硬件加速器句柄:
• 指向雷达信号处理专用硬件(如TI MMIC或NVIDIA RadarSP)

• 需与雷达前端芯片型号匹配
• 启动前需完成HWA自检(CRC校验)

edmaHandle

EDMA_Handle[EDMA_NUM_CC]

DMA控制器句柄数组:
• 控制多通道数据传输(如ADC采样→L2缓存)

• EDMA_NUM_CC通常为2-4(双核架构)
• 通道优先级配置:雷达数据流>日志传输

L3ramCfg

DPC_ObjectDetection_MemCfg

L3共享内存配置:
• 存储点云数据、跟踪航迹等大块共享数据

• 最小分配单位128KB
• 自动驾驶典型值:16-32MB(支持4096个目标点云)

CoreLocalRamCfg

DPC_ObjectDetection_MemCfg

核心本地内存配置:
• 存储实时处理中间数据(如FFT结果、CFAR检测矩阵)

• R5F核典型分配:2-4MB
• 需预留15%冗余应对突发数据流

processCallBackCfg

DPC_ObjectDetection_ProcessCallBackCfg

异步回调配置:
• 定义目标检测事件(如紧急制动信号)的响应函数

• 中断延迟要求:<100μs
• 典型回调类型:目标闯入预警、硬件异常通知、内存溢出警报

Dpc静态配置参数

adcbuf参数

typedef uint32_t DPIF_DATAFORMAT;

typedef uint32_t DPIF_RXCHAN_INTERLEAVE;

/**
 * @brief
 *  ADC Data buffer property
 *
 * @details
 *  The structure describes the properties for ADC data buffers
 */
typedef struct DPIF_ADCBufProperty_t
{
    /*! @brief  Data format in adcbuf */
    DPIF_DATAFORMAT     dataFmt;
    /*! @brief  Data in interleave or non-interleave mode */
    DPIF_RXCHAN_INTERLEAVE  interleave;
    /*! @brief  ADCBUF will generate chirp interrupt event every this many chirps - chirpthreshold */
    uint8_t             numChirpsPerChirpEvent;
    /*! @brief  ADC out bits
     *          0(12 Bits), 1(14 Bits), 2(16 Bits)
                refer to rlAdcBitFormat_t for details
     */
    uint8_t             adcBits;
    /*! @brief  Number of receive antennas */
    uint8_t             numRxAntennas;
    /*! @brief  Number of ADC samples */
    uint16_t            numAdcSamples;
    /*! @brief  rxChan offset in ADCBuf, it is required in non-interleave mode
                The offset array is set for numRxAntennas starting from index 0 ontiguously
                The offset is in number of bytes     */
    uint16_t            rxChanOffset[SYS_COMMON_NUM_RX_CHANNEL];
}DPIF_ADCBufProperty;

DPIF_ADCBufProperty 定义了 毫米波雷达模数转换(ADC)数据缓冲的核心属性,其作用贯穿信号处理链的物理层至数据链路层:

数据物理存储控制:规范ADC原始数据在内存中的存储格式与排布方式

硬件资源适配:协调ADC位数、通道数等硬件特性与算法需求

中断效率优化:通过事件触发机制平衡实时性与系统负载

参数

类型/取值范围

功能说明

典型配置与验证逻辑

dataFmt

DPIF_DATAFORMAT

数据格式:
• 定义IQ数据存储类型(复数/实数)
• 复数模式提升多普勒分辨率

COMPLEX_16BIT(车载雷达)
REAL_12BIT(低功耗场景)

interleave

DPIF_RXCHAN_INTERLEAVE

通道交织模式:
• 交织存储提升内存访问效率
• 非交织简化多通道数据处理

多天线系统常用交织模式
INTERLEAVED(4RX+TDMA场景)

numChirpsPerChirpEvent

uint8_t (1-255)

Chirp事件中断间隔:
• 每N个Chirp触发一次DMA传输完成中断

自动驾驶:8-16(平衡实时性与CPU负载)
工业检测:64-128(低中断频率)

adcBits

uint8_t [0-2]

ADC量化位数:
• 0=12bit(72dB SNR)
• 1=14bit(84dB)
• 2=16bit(96dB)

验证逻辑:
assert(adcBits <= 2);
77GHz雷达:14bit(动态范围与成本平衡)

numRxAntennas

uint8_t (1-32)

接收天线数量:
• 决定数据通道维度
• 与MIMO虚拟阵列设计强相关

需满足:
numRxAntennas <= SYS_COMMON_NUM_RX_CHANNEL
典型值:4/8/12

numAdcSamples

uint16_t (64-8192)

单个Chirp采样点数:
• 决定最大探测距离(R_max = (N*c)/(2B))

4GHz带宽时:1024点→150m探测
验证:numAdcSamples % 64 == 0(对齐DMA突发传输)

rxChanOffset

uint16_t[]

通道数据偏移量:
• 非交织模式下各通道数据的字节偏移量

计算示例:
16bit数据+4通道→
offset[0]=0, offset[1]=2048,...(每通道1024样本)

/**

 * @brief

 *  ADC Data buffer definition

 *

 * @details

 *  The structure defines the ADC data buffer ,including data property, data size and data pointer

 */

typedef struct DPIF_ADCBufData_t
{
    /*! @brief  ADCBuf data property */
    DPIF_ADCBufProperty     dataProperty;
    /*! @brief  ADCBuf  buffer size in bytes */
    uint32_t                dataSize;
    /*! @brief  ADCBuf data pointer */
    void                    *data;
}DPIF_ADCBufData;

DPIF_ADCBufData 是毫米波雷达系统中 ADC数据存储的核心载体,承担三大核心角色:

数据容器:物理存储IQ采样数据,连接ADC硬件与数字信号处理模块

元数据管理:通过dataProperty关联数据格式、通道布局等关键属性

内存控制:动态管理缓冲区的空间分配与生命周期

静态总参数结构体

/*
 * @brief Static Configuration that is part of the pre-start configuration.
 */
typedef struct DPC_ObjectDetection_StaticCfg_t
{
    /*! @brief      ADCBuf buffer interface */
    DPIF_ADCBufData  ADCBufData;
    /*! @brief  Rx Antenna order */
    uint8_t     rxAntOrder[SYS_COMMON_NUM_RX_CHANNEL];
    /*! @brief  Tx Antenna order */
    uint8_t     txAntOrder[SYS_COMMON_NUM_TX_ANTENNAS];
    /*! @brief  Number of transmit antennas */
    uint8_t     numTxAntennas;
    /*! @brief  Number of virtual antennas */
    uint8_t     numVirtualAntennas;
    /*! @brief  Number of virtual azimuth antennas */
    uint8_t     numVirtualAntAzim;
    /*! @brief  Number of virtual elevation antennas */
    uint8_t     numVirtualAntElev;
    /*! @brief  Number of range FFT bins, this is at a minimum the next power of 2 of
               @ref DPIF_ADCBufProperty_t::numAdcSamples, in case of complex ADC data,
               and half that value in case of real only data.
                If range zoom is supported, this can be bigger than the minimum. */
    uint16_t    numRangeBins;
    /*! @brief  Number of bins used in Range FFT Calculation. In case of real only samples,
                this is twice the number of range bins. Else it is equal to the number
                of range bins. */
    uint16_t    numRangeFFTBins;
    /*! @brief  Number of chirps per frame */
    uint16_t    numChirpsPerFrame;
    /*! @brief Number of chirps for Doppler computation purposes.
              For example, in TDM/BPM-MIMO scheme, this is the physical chirps
              in a frame per transmit antenna
              i.e numDopplerChirps = @ref numChirpsPerFrame / @ref numTxAntennas */
    uint16_t    numDopplerChirps;
    /*! @brief  Number of Doppler FFT bins, this is at a minimum the next power of 2 of
               @ref numDopplerChirps. If Doppler zoom is supported, this can be bigger
               than the minimum. */
    uint16_t    numDopplerBins;
    /*! @brief  Range conversion factor for FFT range index to meters */
    float       rangeStep;
    /*! @brief  Doppler conversion factor for Doppler FFT index to m/s */
    float       dopplerStep;
    /*! @brief   1 if valid profile has one Tx per chirp else 0 */
    uint8_t      isValidProfileHasOneTxPerChirp;
    /*! @brief   Antenna geometry definition */
    ANTDEF_AntGeometry antDef;
    /*! @brief     Range FFT Tuning Params */
    DPU_RangeProcHWA_FFTtuning    rangeFFTtuning;
    /*! @brief     Data Input Mode, */
    DPU_RangeProcHWA_InputMode      dataInputMode;
#if defined POWER_MEAS
    /*! @brief    Flag to enable HWA Dynamic Clock Gating. */
    uint32_t      isHwaDynamicClkGate;
    /*! @brief    Flag to enable HWA Clock gatting after Frame Proc. */
    uint32_t      hwaStateAfterFrameProc;
    /*! @brief    Flag to enable DSP Clock gatting after Frame Proc. */
    uint32_t      dspStateAfterFrameProc;
#ifdef SOC_AWR294X
    /*! @brief    DSP Sleep time in Msec. */
    uint32_t      dspLoadSleepTimeInMsec;
    /*! @brief    Flag to enable DSP loading. */
    uint32_t      isDspLoading;
    /*! @brief    Time for which DSP loading. */
    uint32_t      dspTimeToLoad;
#endif

#endif
    /*! @brief    Frame period used for DSP sleep time computation  */
    Float32           framePeriod;
} DPC_ObjectDetection_StaticCfg;

DPC_ObjectDetection_StaticCfg 定义了雷达信号处理链的 物理层固定参数集合,其核心作用在于:

硬件特征绑定:固化与雷达射频前端、天线阵列物理特性强相关的参数

算法维度约束:确定信号处理流水线的数学计算边界(如FFT点数、分辨率)

能耗基线控制:建立时钟门控、DSP睡眠等低功耗策略的基准配置

参数

类型/范围

物理意义与工程约束

ADCBufData

DPIF_ADCBufData

ADC原始数据缓冲协议,定义IQ数据排列方式(如交错存储)
• 典型配置:4通道16位复数采样

numChirpsPerFrame

uint16_t (50-2048)

每帧Chirp数量,决定时间分辨率和最大探测距离
• 77GHz车载雷达典型值:256 chirps/frame

numRangeBins

uint16_t (256-4096)

距离FFT点数,影响距离分辨率(ΔR = c/(2B))
• 4GHz带宽时:512 bins → 0.15m分辨率

numRangeFFTBins

uint16_t

实际计算FFT点数,与采样模式相关:
• 复数采样:=numRangeBins
• 实数采样:2×numRangeBins

参数

矩阵维度

MIMO雷达关键作用

rxAntOrder

[SYS_COMMON_NUM_RX]

接收天线物理顺序,影响虚拟阵列合成
• 示例:3发4接收→12虚拟通道

numVirtualAntAzim

uint8_t (8-32)

虚拟方位天线数,决定水平角分辨率
• 公式:θ_azim = λ/(N*d)

antDef

ANTDEF_AntGeometry

天线几何定义,含单元间距/极化方式
• 车载常用:λ/2均匀矩形阵列

参数

计算关系

动态目标检测影响

numDopplerChirps

=numChirpsPerFrame/numTx

有效多普勒采样点数,决定速度分辨率
示例:256 chirps/4发 = 64点

dopplerStep

float (0.1-2.0 m/s)

速度分辨率计算:Δv = λ/(2T_frame*N)
典型值:0.5m/s

isValidProfileHasOneTxPerChirp

0/1

TDM-MIMO模式标识,影响相位补偿算法
1表示时分发射模式

Dpc动态配置参数

/*
 * @brief Dynamic Configuration that is part of the pre-start configuration.
 */
typedef struct DPC_ObjectDetection_DynCfg_t
{
    /*! @brief   Calibration DC Range configuration */
    DPU_RangeProc_CalibDcRangeSigCfg calibDcRangeSigCfg;
    /*! @brief      CFAR configuration in range direction */
    DPU_CFARProc_CfarCfg cfarCfgRange;
    /*! @brief      CFAR configuration in Doppler direction */
    DPU_CFARProc_CfarCfg cfarCfgDoppler;
    /*! @brief      Field of view configuration in range domain */
    DPU_CFARProc_FovCfg fovRange;
    /*! @brief      Field of view configuration in Doppler domain */
    DPU_CFARProc_FovCfg fovDoppler;
    /*! @brief   Multi Object Beam Forming configuration */
    DPU_AoAProc_MultiObjBeamFormingCfg multiObjBeamFormingCfg;
    /*! @brief     Flag indicates to prepare data for azimuth heat-map */
    bool  prepareRangeAzimuthHeatMap;
    /*! @brief      Field of view configuration for AoA */
    DPU_AoAProc_FovAoaCfg fovAoaCfg;
    /*! @brief      Extended maximum velocity configuration */
    DPU_AoAProc_ExtendedMaxVelocityCfg extMaxVelCfg;
    /*! @brief   Static Clutter Removal Cfg */
    DPC_ObjectDetection_StaticClutterRemovalCfg_Base staticClutterRemovalCfg;
} DPC_ObjectDetection_DynCfg;

DPC_ObjectDetection_DynCfg 是毫米波雷达目标检测算法的 动态调谐中枢,具备三大核心能力:

环境自适应:通过静态杂波滤除与动态校准应对复杂场景

多维度检测:同步优化距离/速度/角度三域检测性能

资源智能分配:基于FOV配置实现计算资源精准投放

参数

类型/取值范围

功能说明

典型配置与验证逻辑

calibDcRangeSigCfg

DPU_RangeProc_CalibDcRangeSigCfg

直流分量校准:
• 消除天线耦合效应
• 补偿温度漂移引起的基线偏移

验证逻辑:
assert(calibValue < ADC满量程的5%)
车规级要求温度漂移补偿精度±3mV

staticClutterRemovalCfg

DPC_ObjectDetection_StaticClutterRemovalCfg_Base

静态杂波滤除:
• 基于背景差分法
• 支持自适应滤波系数更新

工业场景配置:
更新周期=1s,滤波系数α=0.1

参数

技术特性

多域协同机制

cfarCfgRange

距离域CFAR(OS-CFAR)

窗宽配置与fovRange联动:
前窗=最大探测距离×10%,后窗=5%(防近距漏检)

cfarCfgDoppler

多普勒域CFAR(CA-CFAR)

速度分辨率约束:
窗长 ≤ 多普勒FFT点数/(2×最大扩展速度倍数)

extMaxVelCfg

速度解模糊扩展

采用相位编码方案时:
最大速度扩展倍数=编码序列长度/(1+编码阶数)

参数

三维感知优化策略

典型场景配置

multiObjBeamFormingCfg

多目标波束成形

8通道天线:
角度分辨率=λ/(2Ndcosθ),N=4,d=0.58λ

fovAoaCfg

角度域FOV

自动驾驶:±60°水平覆盖
无人机:±90°俯仰补偿(应对地形起伏)

prepareRangeAzimuthHeatMap

热图生成标志

调试模式开启时数据量增加:
256×256热图 → 额外占用64KB内存

接下来对这里的核心参数进行分析

2.1 ADC buf配置参数(DPIF_ADCBufData)

       设备中每个配置的接收(Rx)通道接收到的模拟信号会经过模拟和数字前端(DFE)的预处理,以配置的采样率生成的数据存储在ADC缓冲区中。所有配置的Rx通道对应的数据都存储在这个缓冲区中。 ADC缓冲区采用双缓冲(乒乓)机制实现,允许一个缓冲区被写入(填充),而另一个缓冲区被读出(清空)。 ADC缓冲区的大小为:

        • AWR12xx、AWR22xx和AWR14xx设备的每个乒乓缓冲区为16 KB

        • AWR16xx设备的每个乒乓缓冲区为32 KB

        这个参数是前端和后端处理的数据接口,前端完成AD采集后将数据存入ADC buffer中,该结构体包括:ADC数据指针、数据长度datasize及数据属性。

        这里重点分析一下数据属性:

        数据格式(dataFormat):主要是标识单个Rx通道是复数采样还是实数采样,如果是复数采样则数据是实部+虚部,如果是实数采样则不进行区分。格式定义有如下:

#define DPIF_DATAFORMAT_COMPLEX16_IMRE          (uint32_t)  0
#define DPIF_DATAFORMAT_COMPLEX16_REIM          (uint32_t)  1
#define DPIF_DATAFORMAT_COMPLEX32_IMRE          (uint32_t)  2
#define DPIF_DATAFORMAT_COMPLEX32_REIM          (uint32_t)  3
#define DPIF_DATAFORMAT_FLOAT                   (uint32_t)  4
#define DPIF_DATAFORMAT_REAL16                  (uint32_t)  5
#define DPIF_DATAFORMAT_REAL32                  (uint32_t)  6

        交错和非交错模式(Interleaved and Non-Interleaved Modes):

        交错模式下,复数采样和实数采样数据在内存中的组织如下图所示(2944有4个接收通道):

        交错模式下,多个通道在同一时刻获取的接收数据按照R0、R1、R2、R3依次进行存储每128个bit位即16个字节可存储一个时刻的4个通道复采样数据,每个数据16bit;若是实数采样则能存储两个时刻的数据。

        非交错模式下,在内存中的数据组织格式如下图所示:

     2.2 静态配置参数

        静态配置参数主要由几下几部分组成:

  1. ADCbufData 在上面已经介绍过
  2. 天线配置参数,包括:接收通道顺序、发射通道顺序、接收天线数、发射天线数、虚拟接收天线数等。
  3. 距离维FFT的频点数(Bins),用于将ADC采样数据转换到频域,计算目标距离复数ADC数据:取 numAdcSamples 的 下一个二次幂(例如,若 numAdcSamples=300,则 numRangeBins=512)。实数ADC数据:取 numAdcSamples 的 下一个二次幂的一半(例如,numAdcSamples=300 → 二次幂为512 → numRangeBins=256)。原因:实数FFT结果具有共轭对称性,只需保留一半频点以节省计算资源。
  4. numRangeFFTBins 表示 执行Range FFT时的实际运算点数,决定频域结果的精细度。复数ADC数据(IQ采样):numRangeFFTBins = numRangeBins(例如:若 numRangeBins=512,FFT直接计算512点,保留全部频点)实数ADC数据(单通道采样):numRangeFFTBins = 2 * numRangeBins(例如:若 numRangeBins=256,FFT需计算512点,但仅保留前256个有效频点)
  5. 每一帧包含的chirp数
  6. 用于进行doppler计算的chirps数
  7. 用于进行doppler计算的FFT点数
  8. 距离分辨率
  9. 速度分辨率
  10. 参数用于 验证雷达配置文件中发射天线(Tx)与啁啾(Chirp)的时序关系,是MIMO雷达波形设计的关键标志位。其取值直接影响多天线调度策略、信号处理复杂度及系统性能。以下从多维度展开分析:取值含义1:每个啁啾仅由 一根发射天线 激活(如TDM-MIMO的分时发射模式)。0:允许单啁啾内 多根发射天线协同工作(如BPM-MIMO的编码发射或全数字MIMO的同频发射)

  11. framePeriod 表示 完整处理一帧数据所需的时间(单位:秒),涵盖数据采集、处理到输出的全流程。
    公式

    framePeriod = T_processing + T_sleep  
    

 2.3 动态配置参数

  1. 距离维cfar配置参数;
  2. 速度为cfar配置参数;
  3. 距离维视场大小;
  4. 速度维视场大小;
  5. aoa估计参数;
  6. 杂波去除参数配置;

3.主要代码解析

3.1 DPC_ObjectDetection_start

        该函数的核心功能如下:

  1. 在系统真正开始运行之前,需要确保当前的子帧(编号为 0 的子帧)被重新配置,因为在系统启动之前,子帧的配置(cfgs)可能以任意顺序到达。所以要在启动前重新进行一次配置,确保所有配置都能够生效;
  2. 启动rangproHwa。

3.2 DPC_ObjectDetection_ioctl

       该函数核心功能如下:

  1. 触发新帧处理流程,启动对象检测的帧处理周期
  2. 配置全局参数(如子帧数量、LVDS 通道数)释放旧的硬件资源内存,确保新配置的连续性
  3. 动态测量接收通道的偏置(Bias)和相位
  4. 动态补偿接收通道的偏置和相位
  5. 处理子帧完成后的资源切换和性能统计
  6. CFAR 配置:恒虚警率检测,用于噪声抑制和目标检测。
  7. FOV 配置:设置感兴趣的区域(如距离、多普勒、角度范围)。
  8. AoA 配置:波束成形和到达角估计,支持多目标检测。
  9. 静态杂波消除:抑制静止背景干扰。
  10.  与启动静态配置

    3.3 DPC_ObjectDetection_execute

    距离-多普勒域处理 → 目标检测 → 角度估计

    /* 距离处理 */ 
    retVal = DPU_RangeProcHWA_process(...); // 生成距离维FFT 
    DebugP_assert(outRangeProc.endOfChirp == true); // 验证chirp信号完整性 
    /* 多普勒处理 */
     DPC_ObjDet_GenDopplerWindow(...); // 生成多普勒窗函数
    DPU_DopplerProcHWA_config(...); // 配置多普勒处理参数 
    DPU_DopplerProcHWA_process(...); // 执行多普勒维FFT
     /* CFAR检测 */ 
    if (subFrmObj->isAoAHWAparamSetOverlappedWithCFAR)
         { DPU_CFARProcHWA_config(...); // 条件性配置CFAR参数 } 
         DPU_CFARProcHWA_process(...); // 执行恒虚警检测 
    /* 到达角估计 */
     DPU_AoAProcHWA_process(...); // 执行波达方向估计(使用MUSIC或DBF算法)

3.4 DPC_ObjDet_preStartConfig

        雷达信号处理链的预配置管理,负责初始化各数字处理单元(DPU),分配内存资源,确保硬件加速模块(HWA)参数正确加载。

功能: 雷达信号处理链的预配置管理,负责初始化各数字处理单元(DPU),分配内存资源,确保硬件加速模块(HWA)参数正确加载。  
核心模块解析 
1. 配置存储与初始化
obj->staticCfg = *staticCfg; 
obj->dynCfg = *dynCfg;
hwaWindowOffset = DPC_OBJDET_HWA_WINDOW_RAM_OFFSET;

- 功能: 固化配置参数到子帧对象,避免栈数据失效风险 
- 关键点:
  - `staticCfg`存储不可变参数(如FFT点数)
  - `dynCfg`保存运行时可变参数(如滤波阈值)
  - `hwaWindowOffset`设定HWA内存窗口偏移,隔离不同处理模块的内存访问 
 
2. 内存管理策略

DPC_ObjDet_MemPoolReset(L3ramObj); 
DPC_ObjDet_MemPoolReset(CoreLocalRamObj);

- 三级内存架构:
  1. L3 RAM: 
     - 存储跨处理阶段的中间数据(如`radarCube`雷达立方体)
     - 分配策略:从预初始化内存池按需分配 
     - 示例:`radarCube.dataSize = numRangeBins * numDopplerChirps * ...`
  2. Core Local RAM:
     - 处理模块内部暂存区(如FFT计算缓存)
     - 生命周期:单次子帧处理周期内有效 
     - 重用机制:通过`MemPoolSet`重置指针实现内存复用 
  3. HWA专用内存:
     - 硬件加速器直接访问区域(如`hwaMemBankAddr`)
     - 用途:存储窗函数系数、参数集等低延迟访问数据 
 
3. 关键数据结构分配
L3内存分配:
/* 雷达立方体 */
radarCube.data = DPC_ObjDet_MemPoolAlloc(L3ramObj, ..., DPC_OBJDET_RADAR_CUBE_ALIGN);
/* 检测矩阵 */  
detMatrix.data = DPC_ObjDet_MemPoolAlloc(L3ramObj, ..., DPC_OBJDET_DET_MATRIX_ALIGN);
- 数据特征:
  - `radarCube`: 复数格式(`cmplx16ReIm_t`),存储原始ADC信号经距离处理后的多维数据 
  - `detMatrix`: 16位整型,表示多普勒-距离维的能量检测结果 
 
核心本地内存分配:
cfarRngDopSnrList = DPC_ObjDet_MemPoolAlloc(CoreLocalRamObj, ..., CFAR_DET_LIST_ALIGN);
- CFAR输出列表:
  - 存储候选目标的距离-多普勒单元索引及SNR值 
  - 对齐要求:确保HWA DMA访问效率(通常32字节对齐)
 
4. 硬件加速模块配置
处理链顺序:  
`RangeProc → DopplerProc → CFAR → AoAProc`
 
RangeProc配置:

DPC_ObjDet_rangeConfig(obj->dpuRangeObj, ..., &obj->dpuCfg.rangeCfg);

- 功能:
  - 配置距离FFT参数(窗类型、补零策略)
  - 分配HWA参数集内存(如抗混叠滤波器系数)
  - 初始化EDMA传输链(ADC数据→HWA输入)
 
DopplerProc配置:

DPC_ObjDet_dopplerConfig(..., obj->dpuCfg.dopplerCfg);

- 核心操作:
  - 生成多普勒窗函数(如Hamming窗)
  - 配置多普勒维FFT(循环移位、相位补偿)
  - 传递窗系数至AoA模块(实现内存复用)
 
CFAR配置:

DPC_ObjDet_CFARconfig(..., &obj->dpuCfg.cfarCfg);

- 动态参数:
  - 保护单元与参考单元比例(如CA-CFAR中的`guardBins`/`trainBins`)
  - 阈值因子计算(基于虚警概率模型)
  - 多普勒解模糊处理(处理速度模糊问题)
 
AoAProc配置:

DPC_ObjDet_AoAconfig(..., &obj->dpuCfg.aoaCfg);

- 关键技术:
  - 接收通道相位校准(`compRxChanCfg`)
  - 波达方向估计算法选择(DBF/MUSIC)
  - 复用Doppler窗内存,减少数据拷贝 
 
5. 高级优化策略
内存复用机制:

CoreLocalScratchStartPoolAddr = DPC_ObjDet_MemPoolGet(CoreLocalRamObj);
/* 各DPU配置后重置指针 */
DPC_ObjDet_MemPoolSet(CoreLocalRamObj, CoreLocalScratchStartPoolAddr);

- 实现效果:
  - Range/Doppler/CFAR模块共享同一块核心本地暂存区 
  - 通过配置顺序控制内存生命周期(AoA模块最后配置,无需重置)
 
HWA参数集重叠:

obj->isAoAHWAparamSetOverlappedWithCFAR = ...

- 原理: 
  - 利用HWA的多bank特性,在不同阶段复用同一物理内存 
  - 需要精确计算参数集时序以避免冲突 
 
 

 

 

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值