劉 雪,夏偉杰,凡志邈
(南京航空航天大學電子信息工程學院,江蘇南京 210016)
成像聲吶在海洋資源開發(fā)和海洋防衛(wèi)等方面有著重要的意義。因其具有作用距離遠、能夠直觀顯示觀測區(qū)域狀況和識別目標等特點,被廣泛地應(yīng)用于軍事、經(jīng)濟領(lǐng)域。在成像聲吶系統(tǒng)[1-3]的設(shè)計過程中,為了實現(xiàn)對目標更為細膩的刻畫,系統(tǒng)的角度分辨率和距離分辨率指標往往都很高。成像聲吶的接收陣列結(jié)構(gòu)對系統(tǒng)性能影響巨大,且接收陣列結(jié)構(gòu)決定著聲吶信號處理算法的選擇。線陣作為一種經(jīng)典的陣列結(jié)構(gòu),在水聲設(shè)備等相關(guān)領(lǐng)域有著廣泛的應(yīng)用和研究[4-5]。傳統(tǒng)成像聲吶多采用預(yù)存固定加權(quán)系數(shù)的方法進行波束形成[6-8],雖然運算復(fù)雜度小,但需要預(yù)存大量的系數(shù);在線列陣寬帶多波束形成技術(shù)中,存儲一個聲速下的固定加權(quán)系數(shù),便已占用了44%隨機存儲器(Random Access Memory,RAM)資源??梢婎A(yù)存儲方法對系統(tǒng)存儲能力的要求非??量?,亟需引入實時生成的方法來解決該問題。目前已有學者將CORDIC算法引入成像聲吶波束形成算法中。楊長根等[9]采用CORDIC算法實現(xiàn)扇形變換和復(fù)數(shù)求模運算,陳朋等[10]在三維聲吶頻域波束形成算法中利用 CORDIC直接實現(xiàn)復(fù)數(shù)的相位旋轉(zhuǎn)功能,馬超[11]設(shè)計了一種基于CORDIC的快速傅里葉變換(Fast Fourier Transform, FFT)處理器,用于聲吶波束形成。此外,在其他工程應(yīng)用的FPGA實現(xiàn)中也引入了CORDIC,王韜等[12]在移動通信的梯度跟蹤算法現(xiàn)場可編程門陣列(Field Programmalble Gate Array, FPGA)實現(xiàn)方案中,引入CORDIC算法實現(xiàn)三角函數(shù)的計算。受前述文獻中CORDIC算法的不同應(yīng)用啟發(fā),本文提出了一種基于CORDIC的實時生成加權(quán)系數(shù)算法,以解決硬件中RAM資源占用過多的問題。
本文在研制便攜式微小型寬帶多波束成像聲吶背景下展開,圍繞實時生成加權(quán)系數(shù)的FPGA實現(xiàn)方法進行研究,以緩解FPGA中RAM的資源消耗問題。本文的成像聲吶相關(guān)技術(shù)指標為:量程120 m,視角 120°,中心頻率 720 kHz,帶寬 100 kHz,波束數(shù)512,波束間距0.23°,量程分辨率0.8 cm,最高幀率20 Hz。
如圖1所示,等間隔線列陣由M個相同的陣元1,2,…,m,…,M組成,陣列間距為d,各陣元的接收方向圖相同,幅度加權(quán)系數(shù)為Ak(k=1,2,…,M)。
圖1 基元間隔相等的線列陣Fig.1 A linear array of equally spaced elements
本文使用的聲吶發(fā)射基陣是由 64個陣元組成的,這些陣元以弧形排列成弧陣;接收陣為線陣,由 96個陣元組成。為獲得更高的距離分辨率,本文采用線性調(diào)頻信號作為發(fā)射信號,信號中心頻率為720 kHz,帶寬為100 kHz。在同等陣列結(jié)構(gòu)條件下,窄帶波束形成僅需要考慮信號來向?qū)?dǎo)向矢量的影響,而寬帶波束形成還需要考慮帶寬內(nèi)信號頻率變化的影響。故在FPGA實現(xiàn)時,需要采用寬帶多波束形成技術(shù)。聲吶發(fā)射信號的復(fù)數(shù)形式為
其中,rect[?]為矩形窗函數(shù)。
該信號遇到目標反射產(chǎn)生延遲τ,得到具有延遲τ的回波信號。首先對回波信號進行復(fù)解調(diào)、降采樣;然后采用離散傅里葉變換(Discrete Fourier Transform, DFT)方法將時域信號變換到頻域進行處理,對于變換后的頻域信號進行脈沖壓縮;最后,將一個或多個連續(xù)頻點看作一個窄帶進行處理,運用頻域波束形成方法,進行逐個頻點加權(quán)移相相加,得到θi方向的波束輸出:
其中:sk(ω)是第k個水聽器在脈沖壓縮后頻域的表達形式;ω0是聲吶回波信號的中心角頻率;τk是第k個陣元相對于接收陣第1個陣元的延時。對于寬帶信號,補償相移的時候,需要考慮頻率點的不同。
?ωk是第k個陣元信號需要補償?shù)南辔?,不同的相位補償可以改變波束的指向,多個相位補償方法即可形成多個波束。τk、?ωk的表達式為
其中:c為水中聲速,d為等間隔的陣元間距,本文中d=λ/2= 1.04 mm(中心頻率為 720 kHz),θ為信號來向,θ'為均勻分布在120°視角范圍內(nèi)的第k個波束的指向角度。
Ak是第k個水聽器的幅度加權(quán)系數(shù),用于改善波束性能。采用切比雪夫加權(quán),可以在波束寬度展寬很少的前提下降低旁瓣的寬度,從而提升波束性能。
由式(2)、(3)可知,要進行計算的加權(quán)系數(shù)為
其中:θ'=(i?1)×q0?π/3,i=1,2,…,512,q0為波束間距,q0=(2π/3)/511。
為了使用FPGA實現(xiàn)1.1節(jié)線列陣頻域?qū)拵Ф嗖ㄊ纬杉夹g(shù)[14-16],首先需要使用Matlab軟件將加權(quán)系數(shù)計算出來。對于寬帶多波束形成,每個頻點的加權(quán)系數(shù)都需要單獨生成。本文基于 64頻點的脈沖壓縮結(jié)果,每 96個通道進行波束形成,則一組加權(quán)系數(shù)就是一個96× 64的二維數(shù)組。如要產(chǎn)生512個波束,則需要3 145 728個加權(quán)系數(shù)。
由于上述加權(quán)系數(shù)數(shù)量較大,已超出本文FPGA芯片選型的RAM容量,為了降低FPGA的存儲壓力,將逐頻點(64點)補償?shù)姆椒ǜ臑閯澐譃?個子頻帶的方式[17],其理論仿真及硬件實現(xiàn)已經(jīng)驗證了采用8個子頻帶的方式進行補償幾乎不會對波束形成結(jié)果有任何影響。因此,最終需要存儲1 572 864個加權(quán)系數(shù)。
在 FPGA中使用上述加權(quán)系數(shù)時,需要在FPGA實例化若干個RAM,然后將加權(quán)系數(shù)存儲進去,以便于在波束形成時可以直接從RAM中讀取加權(quán)系數(shù)并與脈沖壓縮后的通道數(shù)據(jù)相乘,最后進行逆傅里葉變換(Inverse Fast Fourier Transform,IFFT)來實現(xiàn)多波束的產(chǎn)生。FPGA實現(xiàn)流程如圖2所示。
圖2 現(xiàn)有預(yù)存儲式方法的FPGA實現(xiàn)流程Fig.2 FPGA implementation process with the existing pre-storage method
圖2中采用預(yù)存儲式生成方法,將Akcos(?ωk)與Aksin(?ωk)分別存儲在兩個系數(shù)RAM中,形成1組波束在1種聲速下的實/虛部加權(quán)值。每個RAM的存儲深度為 6 144,每個波束形成需預(yù)存波束加權(quán)系數(shù)矢量實際所需存儲空間為6144× 2× 16 bit= 196 608 bit=24 kB,整個系統(tǒng)所占用 RAM 空間大小為24 kB× 86≈ 2 064 kB。資源消耗報告如表1所示。
表1 現(xiàn)有預(yù)存儲式生成方法的資源消耗報告Table 1 The resource consumption report of the existing pre-storage method
在FPGA中實時完成1.1節(jié)中式(3)的計算,不僅涉及到加減乘除四種運算,還涉及到sin函數(shù)、exp()函數(shù)這類三角函數(shù)。對于乘法使用乘法器實現(xiàn),對于所有的除法,我們將其轉(zhuǎn)換為對應(yīng)乘法進行運算。sin()函數(shù)可以直接用CORDIC IP核計算得到[11],而exp()函數(shù)可以借助于歐拉公式將其轉(zhuǎn)換為cos()和sin()運算,也使用CORDIC IP核計算得到。具體實現(xiàn)
步驟如下:
(1) 控制循環(huán)變量
加權(quán)系數(shù)中涉及到頻點n、通道數(shù)k、波束數(shù)目i三個循環(huán)變量;FPGA中可以控制n的變化與時鐘clk同步,n增加到64時,k自增1,k增加到96時,i自增1,以此往復(fù)循環(huán)。
(2) 計算τ'
由1.1節(jié)可知:τ'=(k?1)dsinθ'/c。
? 預(yù)存波束角度
由于d是一個常數(shù),可以使用Matlab軟件計算出512個dsinθ',將其分別存儲在86個RAM中,深度為6,這樣可以避免使用FPGA計算sinθ'時邏輯資源不夠用的情況出現(xiàn)。
? 調(diào)用乘法器
dsinθ'的值在上一步已經(jīng)得到了,避免使用除法器,我們可以采用上位機下發(fā)聲速的倒數(shù)1/c,在FPGA中調(diào)用兩次乘法器,即可計算出τ。
(3) 計算exp中的常數(shù)
在FPGA程序中我們定義成phase變量l來表示exp括號中的相位值,同樣調(diào)用兩次乘法器即可計算出相位值。
(4) 計算exp
根據(jù)歐拉公式,我們將相位值輸入到CORDIC中,即可得到加權(quán)系數(shù)的實部和虛部。
CORDIC IP核要求輸入值必須為?1~1之間的數(shù)值,但是相位值卻不是處于?1~1之間,如果將相位值直接輸入到CORDIC中,超出有效輸入范圍的值對應(yīng)的輸出是無效的,因此導(dǎo)致 CORDIC輸出出現(xiàn)部分正確、部分不正確的情況,為了將所有的值縮放到?1~1之間,需要將相位值的高兩位使用高第三位的值進行填充,即:scale_phase={phase[17],phase[17],phase[17],phase[16:0]},然后相位的前三位作為定點數(shù)的整數(shù)部分,后面 17位作為小數(shù)部分即可,得到scale_phase作為CORDIC的輸入相位。
(5) 切比雪夫加權(quán)
最后調(diào)用兩個乘法器,將步驟(4)的結(jié)果與切比雪夫幅度加權(quán)系數(shù)進行相乘,得到最終的波束加權(quán)系數(shù)。
綜上,基于CORDIC實時方法生成加權(quán)系數(shù)的FPGA實現(xiàn)流程如圖3所示。其中,clk為該模塊的時鐘信號,en為使能信號,v為實時聲速,fs為采樣頻率,x_cos為cordic ip核的輸出的余弦值,x_sin為cordic ip核的輸出的正弦值。
圖3 基于CORDIC的實時權(quán)系數(shù)生成的FPGA實現(xiàn)Fig.3 FPGA implementation with the CORDIC based dynamic weight generation module
本文共需要86個上述模塊完成512個波束形成加權(quán)系數(shù)的計算。
采用 CORDIC實時生成方法的資源消耗報告如表2所示。
表2 基于CORDIC實時生成方法資源消耗報告Table 2 The resource consumption report of the CORDIC based real-time generation method
由前面的仿真實驗分析,表3給出了兩種方法的資源消耗對比。
表3 兩種權(quán)系數(shù)生成方法的資源消耗Table 3 Comparison of resource consumption between the two generation methods of weight coefficients
本文提出了一種基于 CORDIC的成像聲吶加權(quán)系數(shù)實時生成方法,該方法用邏輯資源代替存儲器資源,改進了預(yù)存儲式生成方法。經(jīng)過綜合、布局布線后,顯示整體系統(tǒng)模塊消耗的邏輯資源增加了32個百分點,RAM資源占用降低了27個百分點,有效地均衡了兩種資源的利用率。對于波束加權(quán)系數(shù)模塊的RAM資源占用率。在原有基礎(chǔ)上了降低了77%,很大程度節(jié)省了FPGA的資源。