TI的Doppler-Azimuth架构(TI文档)
TI在AWR2944平台上推出新的算法架构,原先的处理方式是做完二维FFT后在RD图上做CFAR检测,然后提取各个通道数据做测角。
Doppler-Azimuth架构则是做完二维FFT后,再做角度维FFT,生成Doppler-Azimuth频谱图,然后在该频谱图上做目标检测。这种处理方式的信号链如下图所示,整个处理链路由DSP、ARM和HWA协作完成。
另外需要注意的是,由于TDM模式下测角需要先做速度补偿,因此这种架构只支持DDM模式。
1 Doppler-Azimuth架构处理步骤
从接收ADC数据到生成点云是DDMA接收链路的核心部分,由DSP和HWA协作完成,包括下面步骤:
1.Chirp级处理:DDMA的chirp级处理链路和TDM是一样的,由DFE触发EDMA搬运数据,使用HWA自动完成运算,不需要DSP参与,对每个chirp执行一次,执行去直流,干扰抑制,1D-FFT和数据压缩,通过EDMA将压缩后的1D-FFT结果保存在L3。
在SDK的demo中,chirp级处理是通过RangeProc DPU完成的。
2.Range gete级处理:对每个range gate执行一次,主要的处理在HWA完成,但是需要DSP接入两次。
在SDK中,Range gate级处理是通过DopplerProc-DDMA DPU完成的,它的处理工作分为:
2.1.数据解压缩:将L3上的压缩数据通过EDMA搬移进HWA,执行数据解压缩,解压缩后的数据保存在L3上的scratch buffer。
2.2.2D-FFT和DDMA解调:待一个range bin对应的所有Doppler bin的1D-FFT结果都解压缩完成后,通过EDMA将L3上scratch buffer的数据搬移进HWA,执行2D-FFT和DDMA解调。DDMA解调完成后,需要DSP第一次介入,根据获得的发射天线Tx和子带sub-band的对应关系,对2D-FFT的结果按照虚拟天线的位置进行重排。
2.3.相关检测:由HWA对上一步按照虚拟天线位置重排过的2D-FFT数据,执行天线相位/增益补偿和水平角度FFT,接着由HWA在Doppler维度进行CFAR-OS和Local Maxima的计算,在HWA计算完成后需要DSP第二次介入,根据HWA的输出结果提取可能的(Doppler,azimuth)目标列表,并把这个目标在所有虚拟天线上的2D-FFT结果保存下来供后面的垂直角度估计使用。
3.内插和垂直角度估计:待所有range bin的range gate级处理都完成后,由DSP对所有检出的(Doppler,azimuth)目标列表进行内插和垂直角度估计,形成最后的点云列表保存在L3,并通过mailbox将点云列表的信息通知ARM。
ARM在得到L3上的点云列表后,进行后续的目标跟踪,得到tracker的目标列表,并通过UART输出。
2 Chrip级处理
在demo中chirp级处理是通过RangeProc DPU完成的。这个DPU的处理流程如下图所示。
ADC buffer中一个chirp的ADC数据收齐后,将通过ADC_CAPTURE_COMPLETE事件自动触发EDMA的通道31(EDMA_DSS_TPCC_A_EVT_RSS_ADC_CAPTURE_COMPLETE),将ADC数据从ADC buffer搬移到HWA的M0/M1,并启动HWA进行后面的运算。整个chirp级处理信号链包含ping和pong两个通道,每个ADC_CAPTURE_COMPLETE事件触发ping或pong通道执行一次,完成一个chirp的处理。信号链总共使用了10个HWA Param(ping/pong各5个),5个EDMA channel,下面的表格分别列出这些HWA Param和EDMA channel的功能。
Param编号 | 功能 | 触发机制 | 运算Engine | 输入->输出Mem | 说明 |
---|---|---|---|---|---|
1 | Dummy | DMA | None | - | 由EDMA out signature通道触发,保证当前chirp处理开始前,上一个chirp已经处理完并输出 |
2 | DC估计 | DMA | FFT | M0->M2 | 由EDMA in signature通道触发,估计信号的直流分量,保存在寄存器中 |
3 | DC去除+干扰统计 | Immediate | FFT | M0->M2 | 从信号中减去2中得到的DC估计值后保存到M2,同时进行干扰统计 |
4 | 干扰消除+FFT | Immediate | FFT | M0->M2 | 利用3中得到的干扰统计先进行干扰消除,然后再进行加窗和FFT |
5 | 数据压缩 | Immediate | Compress | M0->M2 | 完成一个chirp的4根天线数据的压缩 |
Channel编号 | 功能 | 触发机制 | 触发通道 | 输入->输出Mem | 说明 |
---|---|---|---|---|---|
1 | EDMA In | DFE | - | ADC buf->M0/M1 | 每个chirp由硬件事件ADC_CAPTURE_COMPLETE触发一次,根据当前chirp编号将数据搬移到M0或M1 |
2 | EDMA In Sig | Chain | EDMA In | SIG_DMACHx_DONE-> DMA2HWA_TRIGGER | 根据当前chirp编号,选择触发对应的ping/pong通道的HWA DC估计Param |
3 | EDMA Out Ping | HWA | - | M2->L3 radar cube | 由HWA ping通道数据压缩Param触发,每个chirp的压缩完成触发一次,根据当前chirp编号将数据搬移到L3 radar cube的对应位置 |
4 | EDMA Out Pong | HWA | - | M3->L3 radar cube | 由HWA pong通道数据压缩Param触发,每个chirp的压缩完成触发一次,根据当前chirp编号将数据搬移到L3 radar cube的对应位置 |
5 | EDMA Out Sig | Chain | EDMA Out Ping/Pong | SIG_DMACHx_DONE-> DMA2HWA_TRIGGER | 根据当前chirp编号,选择触发对应的ping/pong通道的HWA Dummy Param |
需要注意的是AWR2944在ADC buffer上的数据格式是交织模式,这点和AWR1642/AWR1843不同。
3 数据压缩
HWA中的数据压缩模块能够对1D-FFT的结果进行压缩,再保存到L3上。在2D-FFT前可以使用HWA的解压缩模块先把L3上的数据解压缩,再送给HWA的FFT模块。通过这个功能可以使有限的L3空间保存更大的radar cube,有利于提高DDMA波形的chirp总数。
HWA数据压缩模块使用EGE(Exponential Golomb Encoder)算法,对每个chirp的1D-FFT结果进行了50%压缩比的数据压缩。压缩以block为单位进行,每个block包含4根天线,连续8个range bin的1D-FFT结果,每个block压缩前的数据长度为128字节(1D-FFT结果的每个采样点的宽度是4字节,总共32个采样点),压缩后的数据长度为64字节。
demo共有192个range bin,所以每个chirp的数据压缩将分为24个block进行。对每个chirp,数据压缩前后HWA Mem上的数据格式如下图所示。HWA完成一个chirp的数据压缩后,将通过EDMA Out Ping/Pong通道将压缩后的数据搬移到L3上的radar cube。为了方便2D-FFT前的数据解压缩,Radar cube上不同chirp的同一个编号的压缩block是紧排在一起的,所以我们可以看到下图中768个chirp的block1顺序排列在radar cube最前面,然后是768个chirp的block2,block3,...,block24。
按照demo的波形配置,radar cube在压缩前的空间大小为2304KB(4byte*4ant*192range*768chirp),压缩后的空间大小为1152KB(64byte*24block*768chirp)。可以看出AWR2944增加的数据压缩功能对RAM空间的节省是巨大的。
4 数据解压缩
在range gate级处理的开始,必须先通过EDMA把radar cube上数据搬移到HWA后进行数据解压缩。2D-FFT需要对所有chirp(demo中N=768)的同一个range gate进行FFT计算,这就需要对上图中每行的所有768个压缩block(chirp)进行解压缩。考虑到1个HWA Mem的大小只有16KB,HWA只能分次完成这768个block的解压缩。demo的解压缩数据处理信号链如下图所示,这个信号链包括ping和pong两个通道(采用ping-pong是为了使EDMA数据搬移和HWA解压缩运算流水运行,提高效率),每个通道1次可以解压缩64个block(chirp)的压缩数据,ping通道HWA计算完成将触发pong通道HWA继续执行,ping和pong通道的1次执行将完成128个chirp的数据解压缩,这也叫解压缩的1个loop。1个loop执行完后将自动触发下1个loop的执行,这样通过6个loop完成768个block(chirp)的数据解压缩。信号链总共使用了2个HWA Param(ping/pong各1个),6个EDMA channel,表格3和4将分别列出这些HWA Param和EDMA channel的功能。
Param编号 | 功能 | 触发机制 | 运算Engine | 输入->输出Mem | 说明 |
---|---|---|---|---|---|
1 | 解压缩Ping | DMA | Compress | M0->M2 | 由EDMA In Ping signature通道触发,在ping通道EDMA将64个压缩数据搬移到M0后执行 |
2 | 解压缩Pong | DMA | Compress | M4->M6 | 由EDMA In Pong signature通道触发,在pong通道EDMA将64个block压缩数据搬移到M4后执行 |
Channel编号 | 功能 | 触发机制 | 触发通道 | 输入->输出Mem | 说明 |
---|---|---|---|---|---|
1 | EDMA Ping In | SW/chain | -/EDMA Ping Out | L3 Radar cube->M0 | 第1个loop由SW启动,后面5个loop由EDMA Ping Out通道chain,6个loop完成768个chirp的解压缩 |
2 | EDMA Ping In Sig | Chain | EDMA Ping In | SIG_DMACHx_DONE-> DMA2HWA_TRIGGER | 触发HWA解压缩Ping Param |
3 | EDMA Pong In | SW/chain | -/EDMA Ping Out | L3 Radar cube->M4 | 第1个loop由SW启动,后面5个loop由EDMA Pong Out通道chain,6个loop完成768个chirp的解压缩 |
4 | EDMA Pong In Sig | Chain | EDMA Pong In | SIG_DMACHx_DONE-> DMA2HWA_TRIGGER | 触发HWA 解压缩Pong Param |
5 | EDMA Ping Out | HWA | - | M2 -> L3 Decomp Scratch buf | 由HWA解压缩Ping Param触发,每个block的解压缩完成触发一次,将当前block解压缩数据搬移到L3 Decomp scratch buf的对应位置 |
6 | EDMA Pong Out | HWA | - | M6->L3 Decomp Scratch buf | 由HWA解压缩Pong Param触发,每个block的解压缩完成触发一次,将当前block解压缩数据搬移到L3 Decomp scratch buf的对应位置 |
需要注意的是HWA通过6个loop将解压缩出对应8个range bin的所有768个chirp的1D-FFT数据,这些数据通过EDMA Ping/Pong Out通道搬移到L3上的Decomp Scratch buf。这个Decomp Scratch buf的大小是98304byte((4byte*4ant*8range*768chirps),格式如下图所示。这里的数据将供后面的DDMA解调和相关检测使用。每8个range bin的所有range gate级处理完成后,再通过软件启动下8个range bin的数据解压缩操作,并更新Decomp Scratch buf中的内容为下8个range bin的解压缩数据,这样的循环要执行24次,完成总共192个range bin的处理。
5 2D-FFT和DDMA解调
当第4节中1次数据解压缩的循环完成,输出连续8个range bin的768个chirp的1D-FFT解压缩数据到L3上的Decomp Scratch buf后,demo将循环8次,分别对每个range bin进行2D-FFT,DDMA解调,相关检测,得到这个range bin上所有的(Doppler,azimuth)目标列表。这是range gate级处理的核心部分。range gate级核心处理中HWA和DSP需要协同工作。对于1个range bin,需要顺序完成下面4个运算步骤:
1)HWA完成2D-FFT和DDMA Metric生成,这是HWA处理的第一阶段(Stage),称之为Doppler Stage
2)DSP根据HWA输出的DDMA Metric,获得Tx ant和sub-band的对应关系,对2D-FFT的结果按照虚拟天线的位置进行重排,称之为DDMA解调(DDMA Demodulation)
3)HWA进行水平角度FFT(Azimuth FFT),CFAR-OS和2D Maxima,称之为Azim Stage
4)DSP根据HWA输出的CFAR-OS和2D Maxima结果提取出这个range bin上所有的(Doppler,azimuth)目标列表,称之为Extract Obj
为了提高执行效率,使HWA处理的步骤1)、3)和DSP处理的步骤2)、4)流水并行执行,避免HWA和DSP互相等待,demo以2个range bin为一个基本的处理循环,在这个循环中实现了ping-pong两个数据处理通道,分别处理range bin x和x+1。整个range gate级处理的时序如下图所示。
TI以DSP第一次介入的DDMA解调(DDMA Demodulation)为边界,将HWA的处理工作分为两个阶段(Stage):Doppler Stage和Azim Stage。本节将介绍Doppler Stage的实现,下一节将介绍Azim Stage。
Doppler stage的信号链如图所示,包含ping-pong两个数据处理通道。demo在需要进行range gate级处理的时候,根据当前range bin的编号通过软件触发对应ping或pong通道的EDMA,将对应这个range bin的所有4根天线768个chirp的1D-FFT数据搬移到HWA的M0或M2(搬移前后数据都是按照天线交织格式排列的),并启动HWA的ping或pong通道进行后面的运算。
信号链总共使用了12个HWA Param(ping/pong各6个),10个EDMA channel(ping/pong各5个),下面的表格将分别列出这些HWA Param和EDMA channel的功能。
Param编号 | 功能 | 触发机制 | 运算Engine | 输入->输出Mem | 说明 |
---|---|---|---|---|---|
1 | Dummy | DMA | None | - | 由Doppler FFT Data In Sig通道触发,保证当前range bin处理开始前,输入数据已经搬移到M0 |
2 | Doppler FFT | Immediate | FFT | M0->M4 | 计算4次768点FFT,输入输出的数据都按天线交织排列,输入每个采样点4 byte,输出每个采样点8 byte |
3 | Log2Abs | Immediate | FFT | M4->M0 | 对2中计算的每个采样点求对数绝对值,输入输出的数据格式不变,输入每个采样点8 byte,输出每个采样点2 byte |
4 | 天线累加 | Immediate | FFT | M0->M1 | 对3中得到的4天线768点的对数绝对值,进行4天线累加,利用FFT的bin0实现,输出768点的累加值,每个累加值2 byte |
5 | DDMA metric | Immediate | FFT | M1->M0 | DDMA metric计算,利用了FFT的bin0实现了4点累加,同时利用HWA的SHUFFLE功能实现了输入点位置的控制(根据DDMA metric计算需要) |
6 | Sub-band累加 | SW | FFT | M1->M0 +768*2 | 等待DDMA metric计算和搬移完毕后手工触发,根据4的输出,将6个sub-band上128个Doppler bin的对数绝对值累加起来,利用了FFT的bin0实现了6点累加,同时利用HWA的SHUFFLE功能实现了输入点位置的控制 |
Channel编号 | 功能 | 触发机制 | 触发通道 | 输入->输出Mem | 说明 |
---|---|---|---|---|---|
1 | Doppler FFT Data In | SW | - | L3 Decomp Scratch buf ->M0 | 每个range bin开始处理前,由软件手工触发将数据搬移到M0 |
2 | Doppler FFT Data In Sig | Chain | Doppler FFT Data In | SIG_DMACHx_DONE-> DMA2HWA_TRIGGER | 触发HWA ping通道的Dummy Param |
3 | Doppler FFT Data Out | HWA | - | M4->L3 Doppler FFT Scratch Buf | 由HWA ping通道Log2Abs Param触发,在对数绝对值计算完毕后,将Doppler FFT数据搬移到L3 Doppler FFT Scratch buf的对应位置 |
4 | DDMA Metric Data Out | HWA | - | M0->L3 DDMA Metric Scratch Buf | 由HWA ping通道DDMA metric Param触发,将计算完的DDMA metric搬移到L3 DDMA Metric Scratch buf的对应位置 |
5 | SumTx Data Out | HWA | - | M0+768*2->L3 Det Matrix Buf | 由HWA ping 通道Sub-band累加Param触发,将计算完的Sub-band累加结果搬移到L3 Det Matrix的对应位置 |
DDMA解调的核心是DDMA Metric的计算(HWA完成)和2D-FFT结果的重排(DSP)完成。demo里HWA在完成Doppler FFT,Log2Abs和天线累加后,将生成对应768个Doppler bin的能量热图,这768个Doppler bin分为6个sub-band,每个sub-band有128个Doppler bin。demo采用下表所示的算法进行DDMA解调。
DDMA Metric是一个128*6的数组,保存对于128个Doppler bin的[Z1,Z2,...,Z6]的能量,它的计算是通过HWA DDMA Metric Param的FFT运算功能实现的,采用4点FFT的bin0获得4个bin的累加值,而计算时访问Doppler bin能量热图的格式是通过HWA的SHUFFLE功能实现的,计算的结果输出到L3上的DDMA Metric Scratch buf。下图给出了HWA DDMA Metric Param计算DDMA Metric的实现方法。在HWA计算完DDMA Metric后,需要DSP介入,在每个Doppler bin对应的6个Metric[Z1,Z2,...,Z6]上找到最大值Zi,根据上表的方法,推断出4个发射天线Tx1/2/3/4在6个sub-band 2D-FFT数据(保存在L3上的Doppler FFT Scratch Buf)中的位置,然后把Tx1/2/3/4的数据顺序提取出来,拷贝到L3上的dopFFTSubMat buf,这就是DSP的DDMA解调。DDMA解调前2D-FFT数据的格式是[128 Doppler][6 sub-band][4 Rx ant][8 byte],DDMA解调后2D-FFT数据的格式变为[128 Doppler][4 Tx ant][4 Rx ant][8 byte]。解调后的数据格式中每个range bin的16根虚天线的数据按Tx1Rx1->Tx1Rx2->Tx1Rx3->Tx1Rx4->Tx3Rx1->Tx3Rx2->Tx3Rx3->Tx3Rx4->Tx4Rx1->Tx4Rx2->Tx4Rx3->Tx4Rx4->Tx2Rx1->Tx2Rx2->Tx2Rx3->Tx2Rx4的顺序排列,方便后面的水平角度FFT的计算。
6 相关检测
通过DDMA解调获得每个range bin按照虚天线顺序排列好的2D-FFT数据,demo的相关检测就是在虚天线维度对2D-FFT的结果进行水平角度FFT,并对FFT的结果在Doppler维度进行CFAR检测(为了输出尽可能多的点云,demo没有进行range维度的CFAR)。因为在doppler维度进行检测的时候,利用了虚天线阵列的2D-FFT结果,这是一个相关检测(另一种常用的非相关检测方法是先简单地把所有虚天线的2D-FFT结果合并,再检测)。在4接收天线的场景,相关检测的性能比非相关检测要好1.5到2dB,这也是demo提高雷达性能的一个重要手段。
2D-FFT做完水平角度的FFT后,RA-Map和DA-Map图分别如下图所示。
相关检测的信号链如下图所示,包含ping-pong两个数据处理通道。
每个通道1次处理1个range bin,首先通过EDMA将这个range bin对应的DDMA解调后的128个Doppler bin上的12根水平虚拟天线的2D-FFT数据搬移到HWA内。然后在每个Doppler bin的12根虚天线数据做48点的补零FFT,得到下图所示的128*48的[Doppler,Azimuth]热图。在这个热图上,将分别使用HWA的CFAR和Local-Maxima engine进行1次Doppler维度的CFAR-OS检测,和2D平面上的Maxima检测,只有当1个bin同时满足:1)在Doppler维CFAR-OS检测超过门限,2)能量大于2D平面上下左右4个bin的能量,才判断这个bin是一个有效的[Doppler,Azimuth]目标,放入有效目标列表。需要注意的是,HWA的CFAR和Local-Maxima engine的结果都通过EDMA先输出到L2上的CFAR Scratch Buf和Local Max Scratch Buf,然后由DSP从这两个buffer中提取有效信息并进行比较,保存同时满足上面两个条件的bin,这就是DSP执行的Extract Obj的工作。
信号链总共使用了10个HWA Param(ping/pong各5个), 10个EDMA channel(ping/pong各5个), 表格7 和8分别列出了这些HWA Param和EDMA channel的功能。
Param编号 | 功能 | 触发机制 | 运算Engine | 输入->输出Mem | 说明 |
---|---|---|---|---|---|
1 | Dummy | DMA | None | - | 由Azim FFT Data In Sig通道触发,保证当前 range bin处理前,重排后的2D-FFT结果已经搬移 到M0 |
2 | Azim FFT | Immediate | FFT | M0->M4 | 计算128次48点FFT (12根水平虚天线后补36 个零)并求log2Abs,输入每个样点8 byte, 输出每 个样点2 byte |
3 | CFAR | Immediate | CFAR | M4->M0 | 对2中输出的[Doppler, Azim]热图在Doppler方向 做CFAR-OS |
4 | LocalMax | Immediate | LOCAL MAX | M4->M1 | 对2中输出的[Doppler, Azim]热图计算2D Local Maxima |
5 | Dummy | Immediate | None | - | 通过中断通知软件Azim Stage HWA执行完毕 |
Channel编号 | 功能 | 触发机制 | 触发通道 | 输入->输出Mem | 说明 |
---|---|---|---|---|---|
1 | Azim FFT Data In | SW | - | L3 dopFFTSubMat buf ->M0 | 每个range bin的DDMA解调完成 后,由软件手工触发将重排后的2D FFT结果搬移到M0 |
2 | Azim FFT Data In Sig | Chain | Azim FFT Data In | SIG_DMACHx_DONE-> DMA2HWA_TRIGGER | 触发HWA ping通道的Dummy Param |
3 | CFAR Out | HWA | - | M0->L2 CFAR Scratch Buf | 由HWA ping通道CFAR Param触 发,对这个range bin的Doppler维 度CFAR完成后,将结果搬移到L2 CFAR Scratch Buf的对应位置 |
4 | LOCAL MAX Out | HWA | - | M1->L2 LocalMax Scratch Buf | 由HWA ping通道LocalMax Param 触发,对这个range bin的LocalMax 完成后,将结果搬移到L2 LocalMax Scratch Buf的对应位置 |
5 | Azim FFT Data Out | HWA | - | M4->L2 AzimFFT Buf | 由HWA ping通道最后的Dummy触 发,将Azim FFT结果搬移到L2 AzimFFT Buf的对应位置 |
7 内插和垂直角度估计
demo通过前面介绍的Chirp级和Range gate级处理,在对一个frame的128个doppler bin完成相关检测后,将形成当前 frame 有效的 [Doppler, Azimuth] 目标列表。在这个列表的基础上,demo 进行了Azimuth维度的角度内插,和垂直角度估计,以形成最终的点云列表,这个计算是在DSP上完成的。 首先对于相关检测得到的每个目标的 Azimuth bin 的索引 peakIdx 和它前后的两个相邻索引 peakIdx-1, peakIdx+1,执行内插,精度提升(将azimuth bin的数量N从48提高到256)和镜像翻转,获得在[-128, 128] 范围内的索引peakIdxRound,算法如下表所示。
AWR2944 EVM的虚拟天线阵列下图所示,包含12根水平虚拟天线,4根垂直虚拟天线。
假设目标的水平角度为θ,垂直角度为φ, 则根据图20的天线阵列,目标在水平方向相邻天线间的相位旋转值𝜔𝑥和 目标在垂直方向相邻天线间的相位旋转值𝜔𝑧满足:
对目标来说,在12根水平虚天线上的接收信号可表示为(假设目标在第1根水平虚天线上的信号为𝐴𝑒𝑗𝜓):
类似的,目标在4根垂直虚天线上的接收信号可表示为
demo中采用下表中的算法来估计目标的水平角度θ和垂直角度φ
根据表 中的第1和第6步结果,利用三角函数关系很容易计算出𝑐𝑜𝑠(𝜃)和𝑐𝑜𝑠(𝜑),再结合目标的距离R,就可以得到目标在三维坐标系中的坐标(X, Y, Z)和速度V。