杜俊桥,夏伟杰,孙 璟
(南京航空航天大学电子信息工程学院,江苏南京 210016)
在水下的科学研究以及军事等活动中,通常需要准确地获取所关注区域内的水底地形地貌信息,基于声波在水中独有的传播特性设计的成像声呐、多波束测深声呐等各种声呐被广泛应用于水下探测活动[1-6]。
声呐通过形成多波束来获取信息,在工程实现中波束形成的核心是实时生成加权系数。目前业内使用坐标旋转数字计算(Coordinate Rotation Digital Computer, CORDIC)方法来实时生成波束形成的加权系数,但当波束数较多且为宽带信号波束形成时,采用传统方法实时生成加权系数会消耗大量的随机存取存储器(Random Access Memory, RAM)和CORDIC IP核(简称:CORDIC)资源[7]。
现场可编程门阵列(Field Programmable Gate Array, FPGA)在实现频域波束形成过程中,CORDIC实时生成的加权系数与原始数据对应相乘累加即可完成波束形成,当前主要有两种方法来保证系数与原始数据高度同步。一种是纯RAM缓存方法,使用少量的CORDIC先依次实时生成加权系数,然后将全部的加权系数缓存到RAM中[8],通过控制读取RAM中的系数与原始数据完成相乘累加操作。这种方法虽然耗用CORDIC资源较少,但会占用大量的RAM存储器资源。刘雪等[9]提出纯CORDIC实时生成方法,通过使用大量CORDIC资源来保证同一波束下的加权系数实时生成速率与原始数据传输速率相同,直接将CORDIC输出的加权系数送入乘法器与对应的原始数据完成相乘操作。这种方法的优点是不需要缓存系数,不会占用RAM资源,但是会消耗大量的CORDIC资源。
本文围绕宽带多波束声呐的波束形成加权系数实时生成展开研究[10],致力于解决硬件资源消耗过多的问题。本文提出了多维度复用实时系数生成方法,通过频点复用、波束复用、RAM乒乓操作等一系列处理,最终通过占用少量RAM存储器空间,显著减少了CORDIC资源消耗。虽然一定程度增加了逻辑实现复杂度,但均衡了CORDIC和RAM的资源消耗,节省了硬件资源。
频域波束形成时[11-13],波束角θ方向,频点ω下的频域波束输出表达式为
式中:Ak是接收阵元幅度加权系数,可由仿真工具直接生成,Sk是第k个阵元接收原始信号经过脉冲压缩后在频域的复信号,exp(jφωk)是第k个阵元原始信号的补偿系数,即波束形成加权系数,其中φωk为第k个阵元在频点ω下的补偿相位值。
直线阵列回波接收示意图如图1所示。设均匀等间隔直线阵列有M个阵元,相邻阵元间距为d,回波信号源为S,回波到达方向为θk。
图1 直线阵列回波接收示意图Fig.1 Schematic diagram of echo receiving by a linear array
选定阵元0为参考阵元,设阵元0与信号源的距离为rk,阵元m(0≤m≤M-1)与信号源的距离为Rk。根据余弦定理,可得阵元m与参考阵元的回波声程差ΔR。声波波长为λ,由声波性质,可得两阵元接收回波的相位差为
为方便后续FPGA处理实现,根据泰勒定理展开式,将非线性关系转换为线性关系并舍弃高阶无穷小量,结合声波的波速c,波长λ与频率f三者关系,可得线性变换后的补偿相位差表达式为
根据补偿相位差φωk,CORDIC可实时生成加权系数实部cosφωk和虚部sinφωk。补偿相位差与阵元间距、声速、阵元通道、波束角、距离、频率有关。其中,阵元间距为固定值,声速预先可调,距离随接收回波信号先后次序变化,且在同一距离下做分割后短序列的FFT变换,则在设定声速和距离下,补偿相位差由波束角、阵元通道、频率三个变量确定。通过控制输入CORDIC的补偿相位差,即可实时生成对应的加权系数。
设计声呐参数为波束数为512,阵元通道数为96,FFT点数为64。由波束形成理论可知,不同波束输出结果仅与各自波束的加权系数有关,同一时刻的512个波束的波束形成都使用同一个64×96的二维原始数据,综合考虑数据速率和时钟速率,波束形成模块的时钟速率提高为原始数据的6倍,每6个波束组成一个波束组,512波束分为86个波束组。
每个波束用于波束形成的64×96二维原始数据需要对应大小的二维加权系数与之相乘完成波束形成,则单个波束每一时刻需要实时生成64×96的加权系数,其中,96为通道数,64为做FFT变换的频点数。全部波束均需要实时生成对应的加权系数,考虑实部信号和虚部信号,则512波束总共需要实时生成6,291,456个加权系数,数据量巨大,会导致大量FPGA资源被占用。
频域波束形成基于频点变化,逐频点进行加权系数相乘补偿,进一步多通道累加完成波束形成。为了缓解硬件资源占用压力,考虑将整个频带划分为多个子频带,每相邻的若干个频点组成1个子频带[14]。用子频带的中心频点作为该频带的频率值,基于该频率值实时生成加权系数,该加权系数可作为该子频带内所有频点的公用系数,用于该子频带内所有频点下的原始数据完成波束形成。如此处理,则FPGA只需要实时生成各个子频带中心频点下的加权系数便可供整个宽带的原始数据完成波束形成,极大地减小了FPGA的资源占用。
利用Matlab进行逐频点波束形成和频点复用波束形成仿真。通过设计多个点目标,使其在方位向既分布于中央波束又分布于边缘波束,在距离向既分布于近距离又分布于远距离,对比逐频点波束形成和频点复用的波束形成结果,分析频点复用处理对波束性能的影响,进一步确定组成一个子频带的频点数。
频域变换时的FFT点数为64,考虑将整个64频点划分成若干个均匀的子频带。对比16频点复用、8频点复用、4频点复用以及逐频点4种情况下的波束形成结果,根据波束形成结果的图像显示效果,波束性能分析以及硬件资源消耗等综合因素来确定合适的子频带宽度。4种情况的波束形成结果图像显示如图2所示。
图2 逐频点与频点复用波束形成结果对比Fig.2 Comparison of beamforming results between one by one frequency point and frequency point multiplexing
将3种复用处理的波束形成结果与逐频点的波束形成图像对比,发现频点复用处理不会影响中央波束,但会对边缘波束造成影响。16频点复用处理后边缘波束的距离向出现了明显的旁瓣,导致成像效果较差,说明16频点复用处理明显降低了边缘波束质量。8频点复用和4频点复用虽然也在边缘波束的距离向出现了较强旁瓣,但并没有对成像效果造成较大影响;同时,4频点复用处理的成像效果虽然优于8频点复用处理,但考虑到硬件资源有限,4频点复用处理相较于8频点复用处理需要消耗更多的FPGA资源。综合考虑节省资源与图像显示效果,最后确定选用8频点复用处理,即每8个频点组成一个子频带。
通过对波束在方位向和距离向的性能进行定量分析[15],进一步分析8频点复用处理对波束结果的影响。图3为点目标逐频点与8频点复用在方位向的波束能量分布图。由图3可以看出,在中央波束附近,频点复用对波束的方位向波束能量没有影响;在边缘波束附近,波束的主瓣没有影响,波束的旁瓣在频点复用处理后比逐频点波束形成时大,但低于主瓣能量30 dB,不会影响波束的方位向性能。
图3 方位向波束能量分布Fig.3 Distribution of azimuth beam energy
图4为点目标逐频点与8频点复用在距离向的波束能量分布图。由图4可以看出,在中央波束附近,频点复用对波束的距离向波束能量没有影响;在边缘波束附近,频点复用处理导致出现较强旁瓣,但最强的旁瓣能量低于主瓣能量约20 dB,不会对主瓣造成较大影响。
图4 距离向波束能量分布Fig.4 Distribution of range beam energy
综合分析8频点复用对波束性能的影响,虽然8频点复用处理一定程度上降低了波束性能,尤其是在边缘波束的距离向,但是整体在可接受范围内,对波束结果的整体影响较小,对节省FPGA硬件资源效果显著,确定采用8频点复用处理。
多频点复用系数处理后,CORDIC每生成一个频带内的加权系数可供8个频点下的原始数据使用,则CORDIC可利用其余7个频点的原始数据共用频带加权系数的时间生成其他7个波束该频带内的加权系数[16-18]。如此,一个CORDIC可在保证系数与原始数据同步的前提下生成加权系数与8个波束组的原始数据实时完成波束形成,则一个CORDIC可串行生成48个波束的加权系数,消耗11个CORDIC可并行生成所有波束加权系数。
单个CORDIC生成48个波束的加权系数时,48个波束的系数串行依次生成,但原始数据是通过8个RAM并行缓存。为了保证系数RAM输出与原始数据RAM输出对应相乘,使用16个系数RAM来缓存生成的8组实部系数和8组虚部系数,通过控制CORDIC内48个波束的系数生成顺序来保证系数和原始数据对应。按照波束、频点、通道优先级依次降低的顺序,在一个CORDIC内按照串行顺序生成加权系数。
单个CORDIC生成48波束加权系数示意图如图5所示。首先生成第1号波束的第1个频带系数,写入第一个系数RAM,接着顺序生成第7、13、19、25、31、37、43号波束的第一个频点,通过控制系数RAM的写使能,依次分别写入第2至第8个系数RAM,直至43号波束的第一个频带系数生成后,8个波束组的每组波束内的首号波束的第一个频点系数全部生成。8个系数RAM均写入第一个频带下的96通道加权系数。同一时间,8个原始数据RAM完成各自首号波束第1~8频带的原始数据缓存。
图5 单个CORDIC生成48波束加权系数Fig.5 A single CORDIC generates a 48-beamweighted coefficients
8个波束组的每组波束内的首号波束的第一个频点系数全部生成后,接着生成每组波束内的首号波束的第2至第8频带系数,并分别写入8个系数RAM。至此,8组波束的每组波束的首号波束所有频点系数全部生成结束。按照首号波束加权系数的生成顺序,依次生成每个波束组内部的第2、3,4,5,6号波束的系数。直到每个波束组内的第6号波束的第8个频带系数生成结束,则一个CORDIC内的48个波束的所有系数生成结束。11个CORDIC并行工作生成512个波束的所有加权系数。
将补偿相位送入CORDIC即可实时生成加权系数,需要首先实时生成补偿相位。
根据式(3),结合公式中常数与变量分析,令α=2πdsinθk,β=πd2cos2θk,其中,α和β仅与波束角θk的变化有关,而波束角为512个确定值,因此可分别预存α和β的512个确定值,只需控制读取预存值,可不用CORDIC实时生成,减小了CORDIC资源占用,且易于实现。
距离rk随采样点数序号的变化而变化,通过设置随采样时刻变化规律生成距离参数。通过计数器循环产生0到95的m计数器,再平方即可循环生成m2。频率f为8个频带的各自中心频率值,可提前预存为8个固定的参数,通过控制频率生成模块的读地址调用预存的参数。
在一定声速范围内设置若干个声速档位,可提前预存多个固定的参数,根据下发的声速指令控制读地址匹配对应的声速参数,实现声速调节。
图6为CORDIC实时生成方法的实现过程,将各部分参数对应生成后,通过简单的加法器和乘法器即可实时生成最终的加权系数。由于距离参数随实际原始数据采样位置实时变化,所以该加权系数具有近场聚焦功能;由于声速可根据实际水声环境选择读取调用,所以该加权系数具有声速可调功能,使得声呐可适用于多种水声环境。
图6 CORDIC实时生成方法Fig.6 CORDIC real-time generation method
图7为系数RAM写入和读取的过程示意图。首先写入首号波束第1个频带的96个系数到第一个系数RAM的存储位置1~96,经过96×8个时钟,即768个时钟,一个CORDIC负责实时生成的8个波束组的首号波束的第一个频带系数分别缓存写入到8个系数RAM。此时CORDIC开始实时生成第一个系数RAM内的首号波束第2个频带系数,写入至第一个系数RAM的存储位置97~192,与此同时,开始读取第一个系数RAM的存储位置1~96缓存的第一个频带的系数,重复读取8次,与一个频带内的8个频点原始数据完成波束形成,共经过768个时钟,1~96缓存的第一个频带的系数使用完成,后续波束形成不会再使用该系数,此时CORDIC开始实时生成第一个系数RAM内的首号波束第3个频带系数,直接将首号波束第3个频带系数写入第一个系数RAM的存储位置1~96,更新存储位置1~96的系数,并且同时开始读取存储位置97~192的系数8次。依此类推,使用存储深度192的乒乓RAM反复读取和写入系数,每一个系数RAM完成6个波束加权系数的缓存,使用86个系数RAM并行完成所有波束的加权系数缓存。
图7 系数RAM写入和读取Fig.7 Coefficient RAM write and read
由于每一个系数RAM写入一个频带下96通道的系数后,直至生成下一个频带内的系数才会重新写入。通过控制系数RAM的读取,重复读取8次系数RAM写入的一个频带内96通道的系数,与原始数据RAM读出的该频带下的8个频点的原始数据完成波束形成。在该系数RAM需要写入新的系数时,恰好原来系数RAM内写入的该频带内的96个系数已经被读取出来并与该波束该频带原始数据完成波束形成,后续不再用到这96个系数值。
引入二维乒乓,用之即抛的思想[13],在波束和频带两个变量之间做乒乓操作。本文设计存储深度为192的乒乓RAM,1次写入、8次读取,只需占用极少的RAM存储空间便可以缓存所有的系数。
设计声呐参数为波束数为512,阵元通道数为96,FFT点数为64,波束数为512个,分为86个波束组。纯CORDIC生成方法对应需要消耗86个CORDIC IP核实时生成加权系数,每一个CORDIC依次串行生成每个波数组内6个波束的加权系数,86个CORDIC并行生成所有波束的加权系数;纯RAM缓存方法需要消耗86个系数RAM,每一个系数RAM用于缓存6个波束的加权系数,考虑每8个频点复用一个频带系数,单个系数RAM需要缓存6×8×96个系数,即4 608个系数,每个系数占用1 Byte存储空间,考虑RAM乒乓操作,则单个系数RAM占用9 216存储空间,每个系数使用1 Byte存储空间,则所有波束的实部和虚部加权系数总共占用存储空间为1 548 kB。
如图8所示为加权系数直接缓存与二维乒乓缓存两种系数缓存方法的RAM存储空间占用的对比。采用二维乒乓RAM,每个系数RAM存储深度192,则总共消耗的86个系数RAM占用存储空间为192×2×86×1 Byte=32.25 kB。
图8 直接缓存与二维乒乓缓存的系数RAM存储空间占用对比Fig.8 Comparison of coefficient RAM storage space occupancies between direct and 2D ping-pong caches
多频点复用处理,为多组波束复用CORDIC创造了必要条件,一个CORDIC可以顺序生成8个波束组的加权系数,即一个CORDIC可以负责生成48个波束的加权系数,通过对波束角、阵元通道、频点的控制,实时生成对应的相位补偿角,将相位补偿角输入至CORDIC,即可在单个CORDIC内串行生成48个波束的所有加权系数。总共有512个波束,则总共消耗11个CORDIC。在单个CORDIC内部串行生成其负责的48个波束的加权系数,11个CORDIC并行生成所有波束的加权系数。
表1为三种方法的资源消耗。本文提出的改进的实时生成方法,相较于纯CORDIC或纯RAM实时生成加权系数方法,大幅度降低了逻辑资源占用和存储空间占用。通过多维度复用方法,在逻辑资源占用方面,减少了87.5%的CORDIC资源占用。通过二维乒乓、用之即抛的系数缓存方法,减少了97.9%的系数RAM存储空间占用。
表1 三种方法资源消耗Table 1 Resource usages of three methods
本系统采用Xilinx的kintex-7系列开发板,型号为xc7k410t-2ffg900,该开发板可提供的存储器空间为3 578 kB,Slice LUTs数量为254 200。加权系数实时生成模块仅是整个声呐系统的一个模块,但会消耗整个声呐系统的大量资源。多维度复用方法节省了大量硬件资源的占用,均衡了加权系数生成模块在整个器件各类资源在的利用率,有利于整个系统的资源合理分配。
仿真测试验证了多频点复用处理的可行性,由多频点复用出发,采用多维度复用方法实时生成波束形成加权系数,还需要在水中进行实际测试验证该方法实时生成的加权系数的波束形成结果。在湖中设置目标,用声呐进行实际照射实验,成像显示波束结果可验证该方法在实际工程中的具体使用效果。
如图9所示为一边沿不规则人造湖实景,南北长度约为70 m,东西长度约为200 m,水深约3 m,湖边有人工修筑的水泥堤坝,用声呐对湖边堤坝进行照射实验,主要测试远场环境下的波束形成结果。图10所示为堤坝声呐成像结果。由图10可以看出,声呐成像与实际堤坝的形状一致。
图9 堤坝实景图Fig.9 The photo of the dam
图10 堤坝声呐成像结果Fig.10 The sonar imaging results of the dam
如图11为一直径约为30 cm的圆环。在声呐前方3 m左右的水中放入该圆环,主要测试近场环境下的波束形成结果。图12为近场环境下的圆环声呐成像图,可以清楚地识别出近距离的圆环目标物。由图12成像结果可知,通过多维度复用处理实时生成波束形成加权系数,该方法形成的多波束具有良好的波束性能,能够满足实际工程的需要。
图11 圆环照片Fig.11 Photo of the ring
图12 圆环声呐成像结果Fig. 12 The sonar imaging results of the ring
本文基于CORDIC方法实时生成波束形成加权系数展开研究,针对工程实践中当波束数较多,信号为宽带信号时硬件资源消耗过多的问题,提出了多维度复用的解决方案。充分发挥了FPGA实时高速并行运算的优势,本文提出的方法改进既保证了波束形成后的波束性能,又极大地降低了FPGA中RAM存储器和CORDIC的资源消耗。同时,该改进方法采用波束形成系数实时生成的方法,使声呐具有近场聚焦和声速可调功能,具有很好的工程应用价值。