采用FPGA來(lái)實(shí)現(xiàn)自適應(yīng)波束形成算法
1 引 言
本文采用自適應(yīng)的FIR濾波器結(jié)構(gòu),結(jié)合時(shí)延最小均方(DLMS)算法,充分利用FPGA芯片運(yùn)算速度快,存儲(chǔ)資源豐富等優(yōu)點(diǎn)設(shè)計(jì)和實(shí)現(xiàn)了基于FIR超聲陣列自適應(yīng)波束形成。主動(dòng)聲納信號(hào)為窄帶信號(hào),通常采用復(fù)數(shù)形式表示,在空間濾波器模塊采用了循環(huán)移位流水乘加器,使復(fù)數(shù)乘加運(yùn)算節(jié)約了大量資源,同時(shí)用并行乘法器完成了DLMS算法,并給出了系統(tǒng)軟、硬件模塊和仿真分析。
2.1 系統(tǒng)架構(gòu)及原理
基于FIR自適應(yīng)波束形成系統(tǒng)過(guò)程如下:一方面,輸入信號(hào)與表示在n時(shí)刻的值可調(diào)節(jié)權(quán)系數(shù)ω1(n),ω2(n),…,ωm(n)相乘后相加得到輸出;另一方面,將輸出信號(hào)與期望信號(hào)進(jìn)行對(duì)比,所得的誤差值通過(guò)一定的DLMS自適應(yīng)控制算法再用來(lái)調(diào)整權(quán)值,以保證空間濾波器處在最佳狀態(tài),實(shí)現(xiàn)濾波的目的。
在延時(shí)LMS算法(the Delayed LMS Algoritms,DLMS)中,將系數(shù)更新延遲幾個(gè)采樣周期,只要延遲小于系統(tǒng)階數(shù),也就是濾波器長(zhǎng)度,則誤差梯度▽[n]=e[n]x[n],也就是▽[n]≈▽[n-D],但對(duì)于由FPGA實(shí)現(xiàn)的乘法器和系數(shù)更新需要額外的流水線(xiàn)級(jí),如果引入一個(gè)延遲因子D,μ為步長(zhǎng)因子,LMS算法就變成:
2.2 系統(tǒng)FPGA軟件模塊設(shè)計(jì)
第一步:由式(1)得,實(shí)際輸入的x(n)和調(diào)整后的權(quán)值w(n)各分量相乘之后累加得到輸出y(n);
第二步:由式(2)得,實(shí)際輸出的y(n)與期望d(n)相減得到調(diào)整誤差e(n);
第三步:由式(3)得,延時(shí)后的調(diào)整誤差P(n)跟步長(zhǎng)的2倍相乘,再和延時(shí)的輸入x(n-D)相乘得到的積與延時(shí)的權(quán)值相加,得到新的權(quán)值向量。
第四步:新的權(quán)值向量再與新的輸入向量循環(huán)進(jìn)行第一到第三步實(shí)現(xiàn)自適應(yīng)。
由此,我們可以將系統(tǒng)分為五大模塊:主控模塊:主要產(chǎn)生時(shí)鐘信號(hào),給各模塊提供時(shí)序信號(hào)觸發(fā)各模塊的啟動(dòng)和初始化;雙口存儲(chǔ)模塊(包括輸入數(shù)據(jù)存儲(chǔ)模塊、權(quán)值存儲(chǔ)模塊、誤差信號(hào)存儲(chǔ)模塊等):存儲(chǔ)各功能模塊所需的數(shù)據(jù)和參數(shù);自適應(yīng)權(quán)值計(jì)算模塊,誤差計(jì)算模塊:這兩個(gè)模塊可以合在一起,用于系數(shù)更新的白適應(yīng)算法;空間濾波器乘加模塊:完成濾波運(yùn)算,得到輸出結(jié)果。
2.2.1 控制模塊
控制模塊是整個(gè)系統(tǒng)完成功能的控制部件,主要協(xié)調(diào)各功能模塊順利實(shí)現(xiàn)功能,由系統(tǒng)時(shí)鐘產(chǎn)生時(shí)鐘脈沖,設(shè)計(jì)中用分頻和有限狀態(tài)機(jī)描述來(lái)產(chǎn)生存儲(chǔ)器讀寫(xiě)信號(hào)、濾波運(yùn)算所用到的控制時(shí)鐘和復(fù)數(shù)運(yùn)算。
輸入信號(hào)和權(quán)值是8位的復(fù)數(shù)數(shù)據(jù),通過(guò)控制模塊選擇乘法操作的操作數(shù),兩個(gè)復(fù)數(shù)信號(hào)相乘的4種組合00,11,01,10可以完成實(shí)部和虛部之間4個(gè)乘法運(yùn)算,四種情況控制模塊輸出的控制信號(hào)分別為ST0,ST1,ST2,ST3。
其中,clk_regbt用來(lái)控制乘法器完成乘法,counterbt用來(lái)控制乘數(shù)的位選,clk_reg用來(lái)控制運(yùn)算新數(shù)的進(jìn)入、上次計(jì)算的完畢和結(jié)果的輸出。
存儲(chǔ)模塊采用8位和16位雙口RAM(如圖3所示)作為信號(hào)數(shù)據(jù)和權(quán)值數(shù)據(jù)的存入和讀取存儲(chǔ)器,分別用來(lái)存放輸入信號(hào)x、權(quán)值ω和誤差e,分別由控制信號(hào)clkregbt,clk_regw和clk_rege來(lái)控制信號(hào)的寫(xiě)入和讀出。其中x_ram用來(lái)存放輸入信號(hào);w_ram存放權(quán)值,其輸入為系數(shù)更新模塊的輸出,輸出為更新后的權(quán)值。
2.2.3 自適應(yīng)處理及復(fù)數(shù)乘加器模塊
數(shù)字波束形成器是通過(guò)加權(quán)因子對(duì)空間不同陣元接收信號(hào)的加權(quán)求和而成的。由于加權(quán)因子相當(dāng)于濾波器系數(shù),而輸入的信號(hào)為空間位置不同的陣元的接收信號(hào)。所以可將數(shù)字波束形成器等同于一個(gè)空域?yàn)V波器來(lái)實(shí)現(xiàn)。
3 系統(tǒng)仿真與驗(yàn)證
圖5為主控模塊的仿真波形,其中ST0,ST1,ST2,ST3為復(fù)數(shù)乘法的4種組合,clk_regbt用來(lái)控制乘法器完成乘法,counter_bt用來(lái)控制乘數(shù)的位選,clk_reg用來(lái)控制運(yùn)算新數(shù)的進(jìn)入、上次計(jì)算的完畢和結(jié)果的輸出。
圖6為復(fù)數(shù)乘加模塊功能仿真結(jié)果,dc_out,ds_out,xc_out,xs_out分別是輸入信號(hào)和期望信號(hào)的實(shí)部和虛部,ec_out,es_out,yc_out,ys_out分別為誤差和濾波輸出的實(shí)部和虛部。
圖7為系統(tǒng)仿真測(cè)試結(jié)果:系統(tǒng)預(yù)形成波束方向?yàn)?°方向,干擾從45°傳來(lái),通過(guò)仿真結(jié)果可以看出,主波束在0°方向形成,和預(yù)形成主波束吻合,在45°干擾方向形成零陷,并且提高了主波束的增益,滿(mǎn)足系統(tǒng)的設(shè)計(jì)要求。
4 結(jié) 語(yǔ)
自適應(yīng)DBF是現(xiàn)代聲納陣列信號(hào)處理的關(guān)鍵技術(shù)之一,本文介紹了利用FPGA芯片實(shí)現(xiàn)的自適應(yīng)BDF結(jié)構(gòu),給出了相應(yīng)的硬件設(shè)計(jì)和仿真驗(yàn)證,采用FPGA結(jié)構(gòu),硬件成本低,在自適應(yīng)陣列信號(hào)處理系統(tǒng)中具有很好的應(yīng)用前景。
評(píng)論