Object Detection Data-path Processing Chain(DPC)

本文介绍了一种基于毫米波雷达的目标检测处理链(DPC),详细解释了数据路径处理过程,包括线性调频处理、帧间处理、静态杂波清除、多普勒处理、CFAR处理及到达角度处理等内容。此外,还探讨了DPC执行流程、数据路径设计注意事项以及距离偏差和接收通道增益/偏移的测量与补偿方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Introduction

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

Data Path

在这里插入图片描述
数据路径处理包括:

  • 线性调频期间的处理如图所示:
    这包括1D(range)FFT处理,输入来自多个接收天线从ADC缓冲区每个线性调频脉冲(对应于在发射天线上的线性调频脉冲格式)并且在它上面执行FFT和生成输出结果到L3 RAM DPIF_RADARCUBE_FORMAT_1定义的格式。对于更多的细节,请参见于位于RangeProc DPU的距离处理DPU(数据处理单元)的doxygen文档

  • 在线性调频结束到下一个线性调频开始的这段时间内进行的处理,在时序图中显示为"帧间周期"。这个处理包括:

    • 当启用时,删除场景中的所有静态对象。更多的细节,请参见静态杂波清除DPU
    • 2D(velocity)FFT处理,从L3 RAM的1D输出中获取输入,并执行FFT以在L3 RAM中给出(range、velocity)矩阵。更多的细节,请参阅多普勒DPU
    • 多普勒处理的检测矩阵输出的CFAR处理和峰值分组。对于更多的详情,请参见CFAR-DPU
    • 到达处理的角度(方位角、仰角),以产生带有位置坐标(x、y、z)和速度的最终检测目标列表。有关跟多细节,请参见AoA DPU和AOA2D AOA DPU

Application-DPC Execution Flow

下图展示了application-DPU的执行流程
在这里插入图片描述
上面的流程显示了DPC的初始化、配置、执行和动态控制操作的顺序,以及在这些操作下发生的某些细节。大多数的硬件资源(如HWA、EDMA相关)配置的DPUs发布的DPC处理DPC_OBJDET_IOCTL__STATIC_PRE_START_CFG命令的一部分提供的应用程序在构建时使用资源文件(DPC来源是建立作为构建的应用程序的一部分,没有单独的DPClibrary对象)。此文件被作为编译器命令行定义传递
在这里插入图片描述
上面的“文件名”包含路径,就好像在构建DPC作为构建应用程序的一部分时包含该文件,并且需要引用该文件的任何DPC源(当前为objectdetection)都有以下代码:
在这里插入图片描述
使用此DPC的一个demo位于ti/demo/xwr68xx/mmw。这个demo中的资源文件是mmw_res.h,此文件显示应用程序中DPC需要的所有定义。这个文件是在编译器命令行提供时,构建如下:
在这里插入图片描述
L3的分区和核心的本地RAM(总之至今为止被称为LRAM)内存由程序(DPC_ObjectDetection_InitParams_t::L3ramCfg和DPC_ObjectDetection_InitParams_t::CoreLocalRamCfg)提供在DPC_ObjectDetection_init(通过DPM_init程序来调用)发生在处理DPC_OBJECT_IOCTL_STATIC_PRE_START_CFG命令,如下图所示。从应用系统堆中的分配(通常在LRAM中)使用MemoryP_osal API来完成在DPC_ObjectiDetection_init期间(DPC的对象实例和DPUs子帧构成)和在DPC_OBJECT_IOCTL_STATIC_PRE_START_COMMON_CFG处理的命令(range DPCUs dc antenna coupling signature buffer对于每个子帧来说是独一无二的)也被显示在下图
在这里插入图片描述
在上面的图片中,LRAM显示分配的"cfarRngDopSnrList"(DPIF_CFARDeList_t)在scratch使用之外,因为这是CFAR和AoA之间的共享缓冲处理流程中,因此需要持续的子帧直到在处理链末端的时候AoA执行完成。图中标记为"windowBuffer"的内存用于range和dopplerDPUs被消耗在DPU配置处理到HWA配置RAM(顺序地),并且可以在本地堆栈内存中生成,但是这将需要需要需要较大的堆栈深度,所以使用LRAM代替。AoA接口缓冲器是从多普勒DPU(在AoA配置之前配置)的窗口缓冲器末端从LRAM中分配的,因为在使用它重新计算2D多普勒FFT时,AoA需要提供与多普勒相同的窗口。内存中的排序和安排防止了AoA的窗口的重计算,尽管AoA将(对多普勒DPU是冗余的)以与多普勒DPU相同的窗口RAM的偏移量重新将窗口复制到HWA配置的RAM中。AoA DPU API被设计成需要2D-FFT窗口配置(即窗口配置是不可选的),因为它可以在不存在多普勒处理的上下文中使用(单元测试,其他DPC风格)。在DPC执行API的末尾时,应用程序使用AoA接口缓冲区。

DPU reconfiguration related to data path processing within and across sub-frame

当传输天线数为3时(相对小于3),CFAR和AoA之间的HWA资源(参数集)是重叠的,因为所有DPUs所需的HWA参数集总数超过了HWA(16)中可用的总数。在这种情况下,在每个子帧的处理中(在DPC的execute API实现中),CFAR和AoA在重叠参数集上的HWA配置需要调用它们的进程API之前重新执行。目前,DPUs没有专门的部分配置api来重新配置所需的重叠参数集,因此完整的DPU配置(xxx_config)必须发出(包括相关的DPUs中的FFT窗口配置)。此外,在交换子帧时也需要这种重新配置的情况,因为所有的HWA参数集和EDMA资源都在子帧之间重叠。请注意,DPU的xxx_config API是一个完整的配置API,超出了HWA和EDMA资源配置(例如静态和动态配置),因此限制到完整的配置意味着没有特定的DPU子帧实例化是必要的。然而,在优化实现中可能有专门的(部分的)配置api(只配置了重叠的EDMA/HWA资源)的情况下,代码为每个子帧演示了单独的DPUs实例,以演示子帧解决方案的通用性。对完整配置的限制还意味着,在预启动配置时间内构建DPUs配置结构所需的所有代码要么必须重复,要么在预启动配置处理时间创建的配置将被保存并在以后重用。采用后一种路径,在预启动处理期间构建的所有DPU配置都存储在单独的存储中,它可能位于SubFrameObj_t::dpuCfg。但是,需要重复此存储中无法捕获的部分重新配置,即窗口生成(DPC_ObjDet_GenDroppLERWindow,DPC_ObjDet_GenRangeWindow)和rx相位补偿(DPC_ObjDet_GetRxChPhaseComp)

DPU高层动态配置结构包含指向个人配置(如见DPU_AoAProc_DynamicConfig_t)所以DPC存储在预启动配置(DPC_ObjectDetection_DynCfg_t)在永久的存储(SubFrameObj_t::dynCfg)的动态配置中和DPUs从这存储区域中通过,这样在重新配置期间他们的指针指向这个永久的存储器。在预启动配置(DPC_ObjectDetection_StaticCfg_t)期间静态配置也被存储(SubFrameObj_t::staticCfg)方便引用在做距离偏差和rx相位测量(DPC_ObjDet_rangeBiasRxChPhaseMeasure)和在重新配置(DPC_ObjDet_GetRxChPhaseComp)上述提到tx ch相位计算。保存整个静态配置可能是不必要的(相对于只存储在上面提到的函数中引用的参数),但是它使实现更简单/更清晰,并且在调试期间可能有用

Range Bias and Rx Channel Gain/Offset Measurement and Compensation

因为电路板上的天线布局的缺陷,SOC中的射频延迟等,需要对传感器进行校准以补偿距离估算中的偏差和接收信道和相位的缺陷。DPC提供了测量和补偿的能力
在这里插入图片描述

Measurement

如果在预启动的公共配置(DPC_ObjectDetection_PreStartCommonCfg_t::measureRxChannelBiasCfg)或动态配置(DPC_OBJDET_IOCTL_DYNAMIC_MEASURE_RANGE_BIAS_AND_RX_CHAN_PHASE)启用了测量(DPC_ObjectDetection_MeasureRxChannelBiasCfg_t::enabled),假设一个强大的目标就像一个角发射器保持在瞄准线的距离X=DPC_ObjectDetection_MeasureRxChannelBiasCfg_t::targetDistance。峰值搜索在检测矩阵的第0多普勒距离D=DPC_ObjectDetection_MeasureRxChannelBiasCfg::searchWinSize约X处进行2DFFT后进行,即在-D/2 + X和X + D/2之间搜索峰值。然后利用峰值位置计算及其两个近邻的虚拟天线(取自一维fft雷达立方体矩阵)的幅值平方和的平方根。这三个幅值大小和他们的位置被用来做抛物线插值来找到更精确的峰值位置,从这个插值的峰值位置减去配置的目标距离X,距离偏差就被估计出来。rx通道相位和增益估计是通过寻找虚拟天线的幅值平方来完成的,这个最小值用于缩放单个天线,以便系数的幅值总是小于或等于1。Rx通道补偿系数的计算公式如下:雷达立方体矩阵以四维矩阵的形式排列,定义为DPIF_RADARCUBE_FORMAT_1,如下:
在这里插入图片描述
在搜索范围内最大对应的距离索引imax处,接收到符号从第一个chirp中1D-FFT雷达立方体提取
在这里插入图片描述
计算的系数为:
在这里插入图片描述

在这里插入图片描述
在上面的计算中,每个元素用大小的平方来除达到增益补偿部分即等同于不同tx-rx路径收益—在补偿(补偿)期间,当输入天线采样上乘以相应的系数,对于全部的虚拟天线来说,结果有相同的幅值。同样,复共轭的乘法也可以实现相位补偿。使用最小的数据即允许最大利用16位固定的点精度来表示系数–补偿向量将有单位振幅为最小元素和小于单位为其余。补偿rx系数采用Q15格式。参考函数DPC_ObjDet_rangeBiasRxChPhaseMeasure执行测量,测量结果(DPU_AoAProc_compRxChannelBiasCfg_t)给出了DPC的应用程序作为结果的一部分结构由DPC执行API(DPC_ObjectDetection_ExecuteResult_t::compRxChainBiasMeasurement)。

Compensation

当补偿配置(DPU_AoAProc_compRxChannelBiasCfg_t)作为预启动通用配置(DPC_ObjectDetection_PreStartCommonCfg_t::compRxChanCfg)或动态配置(DPC_OBJECT_IOCTL_DYNAMIC_COMP_BIAS_AND_RX_CHAN_PHASE)提供时,如图Figure_calibration所示,对于每个子帧DPC决定了rx补偿向量(DPCObj_Det_GetRxChPhaseComp)申请子帧(矢量产生的补偿是所有天线启用配置是连续的存储)根据子帧天线的配置和通过这个AoA DPU。在处理过程中,AoA DPU会将这个连续存储的矢量应用到虚拟天线阵列上,然后进行角度计算
注意:
虽然由于距离偏差估计是基于在二维FFT后搜索峰值位置而对运动免疫,但rx补偿系数是根据一维FFT输出计算的,因此在场景中也不会对运动免疫。因此,在校准期间必须小心,以确保在搜索窗口范围内没有移动的对象

Data Path Design Notes

Scaling

  1. HWA采用24位固定点算法进行数据路径处理。为了防止FFT处理中的溢出,必须在HWA配置中适当地设置缩放因子。HWA有多达10个处理阶段,每个阶段可扩展1/2。
    1. 1D处理:如果HWA的FFT范围被设置为1/2k,k是组合值为(启用缩放的阶段数)和(在输出格式化程序中右移)并且在bins中的一个对于FFT的输入是一个固定的tone,然后在那个bin中FFT的输出幅值是N/2k(N是FFT阶数)乘以输入tone的振幅(因为tone是复数,这意味着单个实分量和虚分量也将放大到该比例的最大值)。因为我们在FFT之前做了一个Blackman窗口,所以总的比例大约是FFT比例的1/2.4。这意味着对于256点的FFT,windowing + FFT比例将为106.7/2k。例如k=2,这将是26.7。因此,对于I和Q分量,一个固定的tone的ADC输出不超过+/-2的15次方/26.7=1228(虽然HWA内部是24位,FFT输出在2D处理前存储位16位,因此为2的15次方)。例如k=3时,这将是13.33。因此,对于I和Q分量,一个固定的tone的ADC输出不超过+/-2的15次方/13.33=2458(尽管HWA的内部时24位,在2D处理之前FFT的输出存储为16位,因此为2的15次方)。因此k值的选择可以通过DPC_ObjectDetection_StaticCfg_t::rangeFFTtuning在butterfly scaling和output divisor (right) shift之间进行分配。
      建议在不使用缩放的情况下允许butterfly stages增长到24位,并且只有在特定的阶段有可能超过24位时,才使用DPU_RangeProcHWA_FFTtuning::numLastButterflyStagesToScale在适当的butterfly stage应用缩放。接下来,需将24位转换为16位时,请适当使用DPU_RangeProcHWA_FFTtuning::fftOutputDivShift
      XWR68xx EVM当面对一个强大的单一反射器相当接近(在线性调频脉冲中Rx的增益是30dB并且ADC的采样点是256)显示了ADC采样点的最大值大约为2000,因此对于fftOutputDivShift应用程序可以选择3并且对于numLastButterflyStagesToScale值为0
    2. 2D processing:对于2DFFT,由于输入是1DFFT的输出这个1DFFT可以在前一节的被提到放大它的输入,因此使用全尺度FFT更合适。目前在实现中,除了第一阶段,FFT的所有阶段都启用了缩放因子因为汉宁窗口相关的缩放是1/2。
  2. 对于chain的缩放系数,参见ti/datapath/dpc/objectdetection/common/docs/ object_detection_data_scale .xlsx

参考文献:

  1. 《mmWave SDK Module Documentation》
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Xiaojie雷达说

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

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

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

打赏作者

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

抵扣说明:

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

余额充值