杜俊橋,夏偉杰,孫 璟
(南京航空航天大學電子信息工程學院,江蘇南京 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的資源消耗。同時,該改進方法采用波束形成系數實時生成的方法,使聲吶具有近場聚焦和聲速可調功能,具有很好的工程應用價值。