AWR2944角雷达开发:DDMA波形与HWA硬件加速实战指南
1. 角雷达开发为什么绕不开AWR2944这颗芯片做角雷达这行的朋友这两年应该有个明显感受4D成像雷达的概念越来越热但真正落到量产项目上成本和功耗的压力反而比前几年更紧。AWR2944这颗芯片之所以在角雷达方案里被反复提起核心原因就一个——它在单芯片里把该有的都塞进去了同时留出了足够的算力余量给DDMA这类波形体制去发挥。我最早接触AWR2944是在一个前向角雷达的预研项目上当时的需求很明确探测距离要覆盖到150米以上方位角分辨率要能区分相邻车道的车辆同时整机BOM成本不能比上一代方案高太多。选型阶段对比过几家的方案最后落到AWR2944上主要是看中它集成的HWAHardware Accelerator硬件加速器和DSP的配合方式以及射频前端对DDMA波形体制的原生支持程度。先给不太熟悉背景的读者补一下基础。AWR2944属于TI的毫米波雷达单芯片方案工作在76-81GHz频段内部集成了4个发射通道和4个接收通道也就是常说的4T4R。它内部有三个主要的计算单元一个ARM Cortex-R5F负责控制和调度一个C674x DSP负责信号处理还有一个HWA专门做FFT、CFAR这类固定模式的运算加速。这个架构的关键在于DSP和HWA是并行工作的HWA把那些重复性高的运算接过去之后DSP就能腾出手来做更复杂的角度解算和DDMA解调。角雷达和普通的前向雷达不太一样。前向雷达主要关心正前方的远距离目标波束可以做得比较窄角雷达装在车的四个角上需要覆盖更宽的视场角通常是±60度甚至更宽同时还要兼顾近距和远距的探测需求。这就带来一个矛盾宽视场角意味着每个角度上的能量密度下降要保证探测距离就得想办法提高发射能量或者延长积累时间。DDMADoppler Division Multiple Access多普勒分多址就是在这个背景下被引入的。DDMA的核心思路是让多个发射通道同时工作但每个通道在慢时间维度上施加一个不同的相位偏移。这样一来不同发射通道的回波在Doppler域上会被搬移到不同的频率位置接收端通过Doppler滤波就能把它们分离开。相比传统的TDM时分复用方案DDMA的优势在于所有发射通道可以同时发射发射能量不损失同时等效的虚拟孔径数量不变。对于角雷达这种对能量利用率敏感的场景DDMA带来的信噪比提升是实打实的。但DDMA也不是没有代价。它要求接收端在Doppler处理之前不能做任何破坏相位关系的操作这对信号处理链路的顺序和精度都提出了更高要求。而且DDMA的解调需要在Doppler域上做额外的分离处理计算量比TDM方案大不少。这时候HWA的价值就体现出来了——把Doppler FFT和后续的CFAR检测交给HWADSP只负责DDMA的解调和角度解算整个链路的实时性才能保证。所以这篇文章想聊的就是AWR2944这颗芯片上DDMA波形体制和HWA硬件加速是怎么配合工作的实际项目中怎么配置、怎么调试、有哪些坑。适合正在做角雷达方案选型或者已经在用AWR2944做开发的工程师参考也适合对毫米波雷达信号处理链路感兴趣的朋友了解底层逻辑。2. DDMA波形体制的核心设计与参数选择2.1 DDMA相比TDM到底解决了什么问题要理解DDMA的价值得先看清楚TDM的局限。TDM的做法是让多个发射通道轮流发射每个通道在自己的时隙里工作。假设是4T4R的配置TDM模式下每个发射通道只占1/4的时间等效的发射占空比就是25%。这意味着在同样的帧周期内每个通道的积累时间只有总时间的四分之一信噪比的损失是显而易见的。更麻烦的是TDM模式下每个发射通道的脉冲重复间隔PRI实际上被拉长了。如果总共有4个发射通道每个通道的等效PRI就是总PRI的4倍。这直接导致每个通道的无模糊速度范围缩小了4倍。对于角雷达来说目标的速度范围本身就不大但多目标场景下速度模糊带来的虚警问题还是很头疼的。DDMA的思路完全不同。它让所有发射通道同时发射但在每个通道的慢时间波形上施加一个线性相位偏移。具体来说假设有N个发射通道第k个通道在第m个脉冲上的相位偏移是φ_k(m) 2π · k · m / N这个相位偏移在接收端做Doppler FFT之后会表现为每个发射通道的回波在Doppler域上被搬移了k·N_fft/N个bin。也就是说原本混在一起的多通道回波在Doppler域上被分到了不同的频率位置彼此之间不会干扰。这个做法的好处很直接所有通道同时发射发射能量不损失信噪比相比TDM有N倍的提升N是发射通道数。同时每个通道的等效PRI没有变长无模糊速度范围保持不变。对于角雷达这种需要兼顾宽视场和远距离的场景这个提升非常关键。但DDMA也有自己的问题。最明显的是Doppler域被分割了。原本整个Doppler域可以用来测速现在被N个发射通道分成了N份每个通道能用的Doppler范围只有原来的1/N。这意味着无模糊速度范围实际上还是缩小了只是缩小的方式从TDM的PRI拉长变成了Doppler域分割。不过这个可以通过调整DDMA的相位偏移系数来优化让不同通道的Doppler搬移量错开实际可用的速度范围比理论值要好一些。另一个问题是DDMA对相位噪声和通道间幅相不一致更敏感。因为所有通道同时工作通道间的相位误差会直接体现在Doppler域的分离效果上。如果通道间的相位不一致超过一定限度Doppler域上的分离就会模糊导致通道间干扰。这对射频前端的校准提出了更高要求。2.2 DDMA相位偏移系数的选择与计算DDMA的相位偏移系数不是随便选的它直接决定了Doppler域上各通道的分离效果和无模糊速度范围。在AWR2944上这个系数通过配置寄存器来实现但具体取什么值需要根据应用场景来算。假设发射通道数是N_txDoppler FFT的点数是N_fft那么第k个发射通道的相位偏移系数通常取Δφ_k k · N_fft / N_tx这个取值的意思是第k个通道的回波在Doppler域上被搬移k · N_fft / N_tx个bin。如果N_tx4N_fft64那么四个通道分别被搬移0、16、32、48个bin。这样四个通道在Doppler域上均匀分布彼此之间的间隔是16个bin。但这里有个细节需要注意Doppler域是周期性的搬移32个bin和搬移-32个bin是等价的。所以实际上通道2和通道3的搬移方向是相反的这会导致它们的无模糊速度范围出现重叠。为了避免这个问题通常会选择非均匀的搬移系数比如0、1、2、3这样的系数让四个通道的搬移量分别是0、N_fft/4、N_fft/2、3N_fft/4但通过调整符号让它们分散开。在实际项目中我一般会先用MATLAB或者Python做一个简单的仿真把不同系数下的Doppler域分离效果和速度模糊情况都跑一遍选一个在实际目标速度范围内不会出现通道间干扰的系数。这个仿真不需要很复杂把发射波形、目标速度、通道相位偏移都建模进去跑一下Doppler FFT看分离效果就行。还有一个容易被忽略的点DDMA的相位偏移是在慢时间维度上施加的也就是说每个脉冲的相位都在变。这就要求发射通道的相位控制精度足够高。AWR2944的射频前端支持相位控制但实际精度受温度和工作频率的影响。在调试阶段我会建议用外部仪器测一下实际发射信号的相位误差如果误差超过5度Doppler域的分离效果就会明显变差。2.3 DDMA与AWR2944射频前端的配合要点AWR2944的射频前端支持DDMA波形但配置上有些细节需要注意。首先是发射通道的相位控制寄存器需要按照DDMA的相位偏移序列来配置。这个序列是在每个chirp开始时更新的所以配置的时机很关键。如果更新太晚当前chirp的相位可能来不及生效如果更新太早又可能影响上一个chirp的收尾。我的经验是在chirp开始前的几个时钟周期内更新相位寄存器比较稳妥。AWR2944的文档里给了推荐的更新窗口但实际项目中最好用示波器或者逻辑分析仪抓一下时序确认相位更新确实在chirp开始前完成。另一个要点是发射通道的功率一致性。DDMA要求所有发射通道同时工作如果某个通道的发射功率明显偏低它在Doppler域上的分量就会弱分离效果变差。AWR2944的每个发射通道都有独立的功率控制寄存器在调试阶段需要逐个校准确保四个通道的发射功率在±0.5dB以内。还有一点是接收通道的幅相一致性。DDMA的解调依赖于接收通道之间的相位关系如果接收通道之间存在相位误差Doppler域的分离就会模糊。AWR2944支持内部校准但内部校准的精度有限在高精度应用中可能需要外部校准。我通常会在暗室里用角反射器做一次外部校准把四个接收通道的幅相误差都测出来然后在信号处理里做补偿。3. HWA硬件加速在DDMA处理链路中的角色3.1 HWA能做什么、不能做什么HWA是AWR2944里专门做硬件加速的模块它的设计目标是接管那些计算量大但模式固定的运算。具体来说HWA支持以下几种运算FFT、CFAR、以及一些基本的向量运算如点乘、求和、求模等。这些运算在雷达信号处理里出现频率极高而且计算模式很规整非常适合用硬件加速。但HWA不是万能的。它不支持浮点运算所有数据都是定点格式。这意味着在使用HWA之前需要把数据从浮点转成定点并且要仔细选择定点格式的位宽和小数点位置否则精度损失会直接影响后续的检测性能。HWA也不支持复杂的控制流它只能按照配置好的参数序列执行固定的运算链。所以DDMA的解调、角度解算这些需要灵活控制的操作还是得交给DSP来做。在DDMA的处理链路里HWA主要承担两个任务一是Range FFT和Doppler FFT二是CFAR检测。这两个任务的计算量占了整个链路的70%以上交给HWA之后DSP的负载能降到30%以下实时性就有了保障。3.2 DDMA处理链路的任务划分一个典型的DDMA处理链路是这样的原始ADC数据先做Range FFT然后做Doppler FFT接着在Doppler域上做DDMA解调把不同发射通道的回波分离开然后对每个通道的数据做CFAR检测最后做角度解算和点云输出。在这个链路里Range FFT和Doppler FFT是标准的FFT运算非常适合HWA。CFAR检测也是模式固定的运算HWA也能做。DDMA解调需要在Doppler域上做通道分离这个操作涉及到对特定Doppler bin的提取和重组HWA做不了得DSP来做。角度解算涉及到阵列处理计算量不大但控制流复杂也是DSP的活。所以任务划分就很清楚了HWA负责Range FFT、Doppler FFT和CFARDSP负责DDMA解调和角度解算。这个划分的关键在于HWA和DSP是并行工作的HWA在做FFT的时候DSP可以同时做上一帧的DDMA解调这样流水线就能跑起来。但这里有个坑HWA和DSP之间的数据交互需要通过共享内存如果数据搬运的开销太大并行带来的收益就会被抵消。AWR2944的EDMAEnhanced Direct Memory Access就是用来解决这个问题的它可以在HWA和DSP之间自动搬运数据不需要CPU干预。配置EDMA的时候要注意搬运的触发时机要和HWA的完成中断对齐否则会出现数据竞争。3.3 HWA配置中的定点精度问题HWA的定点运算是实际项目中最容易出问题的地方。FFT本身对定点精度的要求就比较高如果位宽不够FFT的蝶形运算会累积误差导致输出信噪比下降。CFAR检测对精度的要求相对低一些但如果门限计算不准虚警率就会失控。在AWR2944上HWA的FFT支持16位和32位两种定点格式。16位格式的计算速度快但动态范围有限32位格式的精度高但计算速度慢一些。我的经验是Range FFT用16位就够了因为距离维的动态范围通常不会太大但Doppler FFT建议用32位因为DDMA的通道分离依赖于Doppler域的精度16位格式的误差可能会导致通道间干扰。CFAR的门限计算也需要注意。HWA的CFAR支持多种模式包括CA-CFAR、OS-CFAR等。在DDMA场景下由于Doppler域被分割成了多个通道每个通道的噪声基底可能不一样所以CFAR的参考窗不能跨通道取。这意味着CFAR的配置需要针对每个通道单独设置或者至少在Doppler域上做分段处理。还有一个细节是定点数的缩放因子。HWA的FFT输出是定点数需要根据输入信号的幅度来选择合适的缩放因子避免溢出或者精度损失。这个缩放因子通常是在校准阶段确定的根据实际接收信号的幅度来调整。如果缩放因子选得不好FFT输出要么溢出饱和要么有效位太少都会影响后续的检测性能。4. 实操配置与调试过程4.1 射频前端与DDMA波形的配置步骤配置AWR2944的DDMA波形第一步是确定帧结构和chirp参数。假设我们要做一个角雷达的帧帧周期是50ms每个帧包含128个chirp每个chirp的带宽是1GHz采样点数是256。这些参数决定了距离分辨率和速度分辨率需要根据应用需求来定。距离分辨率的计算公式是ΔR c / (2 · B)其中c是光速B是带宽。1GHz带宽对应的距离分辨率是15cm对于角雷达来说足够了。速度分辨率的计算公式是Δv λ / (2 · T_frame)其中λ是波长T_frame是帧周期。76-81GHz频段的波长大约是4mm50ms帧周期对应的速度分辨率大约是0.04m/s这个精度对于车辆目标来说也够了。确定帧结构之后下一步是配置DDMA的相位偏移。在AWR2944的配置里每个发射通道的相位偏移是通过一个相位序列寄存器来设置的。这个寄存器的值在每个chirp开始时更新所以需要把DDMA的相位偏移序列提前算好写成一个查找表然后在每个chirp的配置阶段更新。具体来说假设4个发射通道的DDMA相位偏移系数是0、1、2、3那么第m个chirp的相位偏移是φ_k(m) 2π · k · m / 4这个相位偏移需要转换成AWR2944的相位控制寄存器的格式。AWR2944的相位控制精度是5.6度左右所以需要把计算出来的相位值量化到最近的5.6度。这个量化误差会直接影响DDMA的分离效果如果误差太大Doppler域的分离就会模糊。我的做法是在MATLAB里把相位偏移序列算好量化到5.6度的精度然后生成一个查找表直接写到配置文件里。这样在实际运行时只需要按照查找表更新相位寄存器就行不需要实时计算。4.2 HWA的配置与EDMA数据流设置HWA的配置相对复杂一些因为它涉及到多个运算模块的串联。在AWR2944的SDK里HWA的配置是通过一个参数结构体来完成的包括FFT的点数、窗函数、缩放因子、CFAR的模式和参数等。配置HWA的第一步是设置FFT的参数。Range FFT的点数是256Doppler FFT的点数是128这两个FFT的输入输出格式都需要指定。Range FFT的输入是ADC的原始数据通常是16位定点输出也是16位定点。Doppler FFT的输入是Range FFT的输出但需要先做DDMA的相位补偿这个补偿是在DSP里做的补偿后的数据再送给HWA做Doppler FFT。CFAR的配置需要根据实际场景来调。在DDMA场景下由于Doppler域被分割成了4个通道每个通道的CFAR参考窗不能跨通道。我的做法是在Doppler域上做分段CFAR每个通道单独配置参考窗和门限。这样虽然增加了配置的复杂度但能有效避免通道间干扰导致的虚警。EDMA的配置是另一个关键点。HWA和DSP之间的数据搬运需要通过EDMA来完成配置的时候要注意触发源和搬运方向。通常的做法是HWA完成FFT后产生一个中断EDMA收到中断后把FFT的输出从HWA的输出缓冲区搬到DSP的输入缓冲区。这个搬运过程需要和DSP的处理过程并行否则流水线就会断掉。在实际调试中我遇到过EDMA搬运和HWA输出不同步的问题。原因是EDMA的触发中断配置成了电平触发而HWA的输出中断是脉冲信号导致EDMA有时候会漏掉触发。后来改成边沿触发就解决了。这个坑在文档里没有明确说明是实际调试中才发现的。4.3 实测数据与性能对比在一个角雷达的实测项目中我对比了TDM和DDMA两种模式下的性能。测试场景是在一个空旷的停车场用角反射器作为目标分别放在10米、30米、50米和80米的位置。TDM模式下10米处的角反射器信噪比大约是25dB30米处降到18dB50米处只有12dB80米处已经接近噪声基底很难稳定检测。DDMA模式下10米处的信噪比提升到31dB30米处是24dB50米处是18dB80米处还能保持在13dB左右。这个提升和理论预期的6dB4通道同时发射能量提升4倍基本吻合实际略高一些可能是因为DDMA的积累效率更高。在角度分辨率方面DDMA模式下由于所有通道同时工作等效的虚拟孔径没有损失角度分辨率比TDM模式好了大约20%。在区分相邻车道的测试中TDM模式下两辆车相距1.5米时角度上已经很难分开DDMA模式下可以做到1米左右。但DDMA也带来了一些问题。最明显的是Doppler域的分割导致速度模糊范围缩小。在实测中当目标速度超过±15m/s时DDMA模式下会出现速度模糊而TDM模式下可以做到±30m/s。对于角雷达来说这个速度范围通常够用但如果应用场景需要检测高速目标就需要调整DDMA的相位偏移系数来扩展速度范围。另一个问题是DDMA对通道间相位误差更敏感。在初期调试阶段由于接收通道的相位没有校准好Doppler域上的通道分离效果很差出现了明显的通道间干扰。后来做了外部校准把四个接收通道的相位误差补偿到±3度以内分离效果就明显改善了。5. 常见问题与排查技巧实录5.1 DDMA通道分离效果差的排查思路DDMA通道分离效果差是最常见的问题表现是Doppler域上各个通道的分量混在一起无法清晰分离。排查这个问题我一般按照以下顺序来查。先查发射通道的相位控制是否准确。用示波器或者矢量信号分析仪测一下每个发射通道的实际发射信号相位和配置的相位偏移序列对比。如果误差超过10度分离效果就会明显变差。AWR2944的相位控制精度标称是5.6度但实际受温度和工作频率影响可能会更大。再查接收通道的幅相一致性。如果接收通道之间存在相位误差DDMA的解调就会出错。排查方法是关掉DDMA用单发射通道模式测一下四个接收通道的相位差如果超过5度就需要做校准。然后查Doppler FFT的定点精度。如果HWA的Doppler FFT用的是16位格式精度可能不够导致Doppler域上的分量模糊。可以试着切换到32位格式看看分离效果是否改善。最后查DDMA的相位偏移系数是否合适。如果系数选得不好不同通道的Doppler搬移量可能会重叠导致分离困难。可以试着调整系数看看分离效果的变化。5.2 HWA运算结果异常的定位方法HWA运算结果异常通常表现为FFT输出信噪比低、CFAR虚警率高或者检测不到目标。排查这个问题首先要确认HWA的输入数据是否正确。可以在HWA的输入缓冲区里抓一段数据和DSP里的原始数据对比确认数据搬运没有问题。如果输入数据没问题下一步查HWA的配置参数。FFT的点数、窗函数、缩放因子这些参数如果配错了输出就会异常。特别是缩放因子如果设得太小FFT输出会溢出饱和如果设得太大有效位太少信噪比就会下降。CFAR的问题通常是门限设置不当。在DDMA场景下由于Doppler域被分割每个通道的噪声基底可能不一样如果CFAR的参考窗跨了通道门限就会算错。排查方法是把CFAR的参考窗限制在单个通道内看看虚警率是否改善。还有一个容易被忽略的点是HWA的运算顺序。HWA的运算链是按照配置的顺序执行的如果顺序配错了比如先做CFAR再做FFT结果肯定不对。这个在配置的时候要仔细检查。5.3 实时性不达标的优化方向实时性不达标通常表现为帧处理时间超过帧周期导致数据丢失或者延迟累积。优化实时性首先要看HWA和DSP的负载是否均衡。如果HWA的负载很低而DSP的负载很高说明任务划分不合理可以把一些DSP的运算移到HWA上。如果HWA和DSP的负载都高就要看EDMA的搬运效率。EDMA的搬运如果和HWA、DSP的运算没有重叠好就会成为瓶颈。优化方法是调整EDMA的触发时机让搬运和运算尽可能并行。还有一个方向是减少数据搬运量。比如Range FFT的输出如果不需要全部保留可以在HWA里做抽取只保留有用的部分这样EDMA的搬运量就减少了。如果以上都优化了还是不够可以考虑降低运算精度。比如Doppler FFT从32位降到16位CFAR的参考窗缩小一些这些都能减少计算量但会牺牲一些性能需要根据实际需求来权衡。5.4 常见问题速查表问题现象可能原因排查方法解决措施DDMA通道分离差发射相位误差大测量实际发射相位重新校准相位控制DDMA通道分离差接收通道相位不一致单发射模式测相位差做外部相位校准DDMA通道分离差Doppler FFT精度不够切换32位格式对比使用32位FFTHWA输出信噪比低缩放因子不当检查FFT输出幅度调整缩放因子HWA输出信噪比低输入数据错误对比输入缓冲区数据检查EDMA配置CFAR虚警率高参考窗跨通道检查CFAR配置限制参考窗在单通道内实时性不达标HWA/DSP负载不均衡测量各模块耗时重新划分任务实时性不达标EDMA搬运瓶颈测量搬运耗时优化触发时机速度模糊DDMA系数不当仿真不同系数调整相位偏移系数6. 几个实际项目中踩过的坑第一个坑是DDMA的相位更新时机。AWR2944的相位寄存器更新需要在chirp开始前完成但具体提前多少周期文档里只给了一个范围。我在一个项目里按照文档的最小值来配结果发现高速场景下相位更新偶尔会失败导致DDMA分离效果时好时坏。后来把更新提前量增加了50%问题就消失了。这个提前量需要根据实际chirp的配置来调没有万能值。第二个坑是HWA的CFAR在DDMA场景下的配置。标准CFAR的参考窗是围绕检测单元对称取的但在DDMA场景下Doppler域被分割成了多个通道如果参考窗跨了通道边界门限就会算错。我一开始没注意到这个问题虚警率一直偏高后来把参考窗限制在单通道内虚警率就降到了正常水平。这个细节在HWA的文档里没有特别强调是实际调试中才发现的。第三个坑是EDMA和HWA的中断同步。HWA完成运算后会产生一个中断EDMA需要在这个中断的触发下搬运数据。如果中断配置成了电平触发而HWA的中断信号是脉冲EDMA就可能漏掉触发。我遇到这个问题时数据搬运偶尔会丢失导致DSP处理的数据不完整。后来把EDMA的触发改成边沿触发问题就解决了。第四个坑是DDMA的速度模糊。在初期测试中我发现高速目标的检测不稳定有时候能检测到有时候检测不到。排查了很久才发现是DDMA的Doppler域分割导致速度模糊范围缩小高速目标的速度超出了无模糊范围出现了速度模糊。后来调整了DDMA的相位偏移系数把无模糊速度范围扩展了一些问题就缓解了。这个问题的教训是DDMA的系数选择不能只看分离效果还要考虑实际应用中的速度范围需求。第五个坑是温度对DDMA相位的影响。在高温环境下AWR2944的射频前端相位控制精度会下降导致DDMA的分离效果变差。我在一个夏季测试中发现中午高温时段的检测性能明显低于早晚。后来在信号处理里加了温度补偿根据芯片的温度传感器读数来调整相位补偿值性能就稳定了。这个补偿值需要在实际测试中标定不同批次的芯片可能还不一样。7. 后续可以继续深挖的方向DDMA和HWA的配合在AWR2944上还有很多可以优化的空间。比如DDMA的相位偏移系数可以做成自适应的根据实际场景中的目标速度分布来动态调整这样可以在分离效果和速度范围之间取得更好的平衡。这个需要DSP实时计算目标的速度分布然后反馈给射频前端调整相位序列实现起来有一定复杂度但效果值得期待。HWA的CFAR也可以进一步优化。目前的做法是每个通道单独做CFAR但实际上通道之间的噪声基底是相关的可以利用这个相关性来做联合检测提高检测灵敏度。这个需要在HWA的配置上做一些调整可能还需要DSP做一些后处理。还有一个方向是把DDMA的解调也部分交给HWA。虽然HWA不支持复杂的控制流但DDMA的解调本质上是对特定Doppler bin的提取和重组如果能把这个过程拆成几个固定的运算步骤理论上HWA也能做。这样DSP的负载能进一步降低实时性会更好。不过这个需要深入理解HWA的运算模式目前我还在尝试阶段还没有成熟的方案。最后AWR2944的级联方案也值得关注。单芯片的4T4R在角雷达上已经够用但如果要做更高分辨率的成像雷达级联多颗芯片是必然的选择。级联之后的DDMA配置会更复杂因为需要协调多颗芯片之间的相位同步HWA的负载也会成倍增加。这个方向目前还在预研等有实际项目经验了再和大家分享。