李靖宇,李豹,曹可勁,瞿洋
(1.海軍工程大學(xué)導(dǎo)航工程系,湖北武漢430033;2.海軍91821部隊廣東潮州515700)
羅蘭C系統(tǒng)是我國獨立控制的唯一大型陸基無線電導(dǎo)航系統(tǒng),是我國衛(wèi)星導(dǎo)航定位授時(PNT)的重要備份手段,是全球羅蘭C系統(tǒng)網(wǎng)的重要組成部分。其工作頻率為90~110 kHz[1]。由于其工作在低頻段,存在水下接收的可能,近年來,利用磁天線接收羅蘭C信號實現(xiàn)水下隱蔽定位成為研究熱點[2]。而射頻前端的數(shù)字帶通濾波器是實現(xiàn)數(shù)字化實時處理接收機(jī)的重要部分。針對這些需求,筆者提出了采用級聯(lián)形式在FPGA上通過Verilog語言編程實現(xiàn)羅蘭C數(shù)字帶通濾波器的方法。在經(jīng)典濾波器中,IIR數(shù)字濾波器具有很高的濾波效率,所需的階數(shù)不僅比FIR濾波器低,而且可以利用模擬濾波器的設(shè)計成果[4]。在對信號的相位要求不是很高時可以使用IIR濾波器,用級聯(lián)形式設(shè)計的IIR濾波器的工作量相對較小,而且所用存儲單元少,經(jīng)濟(jì)效益高。
IIR濾波器是一種遞歸濾波器,具有反饋結(jié)構(gòu),如圖1所示。
圖1 IIR濾波器直接型結(jié)構(gòu)Fig.1 The direct structure of IIR filter
其系統(tǒng)差分方程可描述為:
其系統(tǒng)傳遞函數(shù)描述為:
可以對IIR數(shù)字濾波器的傳遞函數(shù)H(Z)進(jìn)行分子,分母的多項式分解,這樣就可以得到其級聯(lián)形式,級聯(lián)形式結(jié)構(gòu)如圖2所示。
圖2 IIR濾波器級聯(lián)結(jié)構(gòu)示意圖Fig.2 The cascaded structure of IIR filter
其中,每一級的二階子系統(tǒng)的傳輸函數(shù)形式為:
級聯(lián)形式具有一定的獨立性,極點與零點的組合以及Hk(z)的連接順序等具有相當(dāng)大的自由度。與直接型結(jié)構(gòu)相比,對系數(shù)敏感度低的濾波器,不容易受系數(shù)誤差影響的濾波器更適合采用級聯(lián)型結(jié)構(gòu)。級聯(lián)結(jié)構(gòu)在硬件實現(xiàn)中可以共用存儲器和延遲單元,減少所需元件數(shù)量,簡化結(jié)構(gòu)[4]。
利用MATLAB綜合函數(shù)可以很容易地求出滿足要求的帶通濾波器參數(shù)。
其中wp和ws分別為通帶截止頻率和阻帶截止頻率,由于是帶通濾波器所以兩個都應(yīng)該為二維向量。Rp和Rs分別為通帶最大衰減和阻帶最小衰減。wn為3 db邊緣頻率,此亦為二維向量。B和A即為式(2)中的分子,分母的系數(shù)向量。即:
A=[1,α1,…,αN];B=[b0,b1,…,bM](5)
求出濾波器參數(shù)B,A之后可以利用MATLAB函數(shù)將其轉(zhuǎn)化成級聯(lián)形式:
[sos,g]=tf2sos(B,A);
此例中產(chǎn)生的sos為一個4×6的矩陣:g=0.000 001 274 722 974;濾波器增益。
每行為一個二階子系統(tǒng)的參數(shù),對應(yīng)為:[bk0,bk1,bk2,1,ak1,ak2],k=1,2,3,4;
由于最終要采用FPGA硬件實現(xiàn),為了使設(shè)計簡便及資源得以充分利用,應(yīng)該對系數(shù)進(jìn)一步的量化,將系數(shù)由小數(shù)轉(zhuǎn)化為整數(shù),根據(jù)需要主要考慮量化精度和系統(tǒng)資源兩方面,本文采用將二階網(wǎng)絡(luò)系數(shù)乘以2N(N=5)并取整實現(xiàn)[8]。
由于參數(shù)取整處理帶來的舍入誤差會對濾波器的零點,極點造成影響,從而影響濾波器的穩(wěn)定性。因此有必要將參數(shù)取整后的級聯(lián)方式轉(zhuǎn)回標(biāo)準(zhǔn)形式,再利用MATLAB綜合函數(shù)對其濾波效果進(jìn)行測試。如果濾波效果不能滿足要求,即取整舍入誤差造成的影響較大,應(yīng)將2的冪次升高,但如果2的冪次過高,勢必會占用過多的硬件資源,因此要綜合考慮,以滿足濾波要求,且濾波器穩(wěn)定工作為前提。
fs=1e6;采樣率1 M;
t=0:1/fs:1e-3;時間1 ms
x=15*sin(2*pi*100e3*t)+15*sin(2*pi*115e3*t)+15*sin(2*pi*85e3*t);
x1=round(x);信號點取整。測試信號波形如圖3所示:
圖3 測試信號波形圖Fig.3 The diagram of tested signal
測試信號采用3個不同頻段的信號疊加產(chǎn)生,用此信號作為濾波器的輸入信號,對濾波器的濾波效果進(jìn)行測試,驗證濾波器能否濾除頻帶外的信號。
為了方便利用MATLAB函數(shù)進(jìn)行濾波性能比較,需將濾波器的級聯(lián)形式化成標(biāo)準(zhǔn)形式,注意增益仍舊用g而不是G,表示濾波器的增益和原來取整之前的相等,便于幅頻響應(yīng)的比較。
[B1,A1]=sos2tf(S,g);
[h,w]=freqz(B,A,256,'whole',fs);
[h1,w1]=freqz(B1,A1,256,'whole',fs);
由圖4可以看出,濾波器參數(shù)取整后的幅頻響應(yīng)曲線幾乎和取整之前重合,證明參數(shù)乘以25再取整后的舍入誤差對濾波器幅頻響應(yīng)的影響極小,可以忽略。
硬件程序設(shè)計前,在MATLAB下寫出級聯(lián)形式的差分方程,模擬硬件程序的運(yùn)算過程,驗證算法的準(zhǔn)確性,并可以觀察運(yùn)算過程中數(shù)值的大小,方便硬件設(shè)計中定義高效準(zhǔn)確的數(shù)據(jù)位寬,提高設(shè)計的針對性與準(zhǔn)確性。
圖4 幅頻響應(yīng)比較圖Fig.4 Comparison of amplitude frequency response
x2(1)=0;x2(2)=0;....x5(1)=0;x5(2)=0;差分方程初始化
for i=1:998
x_t=(S(1)*x1(i+2)+S(5)*x1(i+1)+S(9)*x1(i))/32;均勻分配增益,防止溢出
y_t=S(17)*x2(i+1)+S(21)*x2(i);
x2(i+2)=(x_t-y_t)/32;將參數(shù)a0歸一化
...
x5(i+2)=(x_t3-y_t3)/32;
end
由圖5可見在參數(shù)取整后用級聯(lián)式差分方程模擬硬件程序濾波效果和調(diào)用filter函數(shù)的輸出效果在波形上也幾乎一致,只是由于增益上取整后的一點差異,信號幅度略有降低,對頻域并無影響,且濾波器穩(wěn)定,沒有發(fā)散,由此可知上述取整滿足設(shè)計要求,可以考慮下步硬件程序?qū)崿F(xiàn)。
圖5 濾波效果比較Fig.5 Comparison of filter performance
Quartus是Altera公司在21世紀(jì)初推出的FPGA/CPLD開發(fā)環(huán)境,其優(yōu)點是功能強(qiáng)大,界面友好,使用便捷,設(shè)計完成后還可以進(jìn)行時序仿真。本例采用了在Quartus下自頂向下的工程設(shè)計,設(shè)計完成后進(jìn)行了仿真測試。
創(chuàng)立工程,在工程下建立bdt文件。如圖6:U1模塊為計數(shù)器模塊,U2為ROM模塊,ROM內(nèi)部存儲的初始值來自預(yù)先建立的mif文件,mif文件的初始值可以自行設(shè)定,作為濾波器的輸入信號源,U3為帶通濾波器模塊。
圖6 框圖文件Fig.6 Block diagram file
分別為各模塊添加Verilog程序,其中ROM模塊是調(diào)用的宏模塊,可以自動生成.V程序。
U3模塊的濾波器主程序:
module filter100k
(rst,clock,in,out,out1,out2,out3);
//Port Declaration
input clock;
...
output[15:0]out;
...
wire[15:0]y1_out;
...
//the first step parameter;
parameter b_1_0=32;
...
parameter a_1_0=32;
...
sub2
sub2_1(.clock(clock),.rst(rst),.a1_0(a_1_0),.a1_1(a_1_1),.a1_2(a_1_2),.b1_0(b_1_0),.b1_1(b_1_1),.b1_2(b_1_2),.x_in(in),.y_out(y1_out));
...
assign out2={out[15],out[6:0]};
end module
由于在sub2子程序設(shè)計中涉及到乘法和除法(移位)運(yùn)算,需要將中間變量寄存器,輸入和輸位寬定義足夠大,防止運(yùn)算過程中產(chǎn)生溢出,但又要考慮到提高運(yùn)算速度和硬件資源問題。為了有針對性的進(jìn)行設(shè)計,可以在MATLAB的工作窗口中觀察級聯(lián)差分方程運(yùn)算過程中中間變量值的大小,針對實際輸入信號的幅度,準(zhǔn)確高效地設(shè)置位寬。在FPGA硬件中,負(fù)數(shù)是用二進(jìn)制補(bǔ)碼表示,除法(移位)運(yùn)算在移位過程中會影響到符號位,導(dǎo)致輸出結(jié)果發(fā)生錯誤,所以移位過程中,應(yīng)采取保留符號位進(jìn)行移位。
工程編譯成功后,建立一個矢量源文件(vwf)進(jìn)行波形仿真。將實際采集的羅蘭C信號存入mif文件,作為濾波器的輸入信號。實際的濾波仿真效果如圖7所示。
圖7 實際采集羅蘭C數(shù)據(jù)濾波仿真結(jié)果Fig.7 Simulation result of practical Loran Cdata
由圖7可見,經(jīng)過濾波器后可以從雜亂的采集信號中選擇出清晰的羅蘭C信號,說明濾波器設(shè)計滿足要求。
本文以巴特沃斯帶通濾波器為例,描述了IIR數(shù)字帶通濾波器從MATLAB設(shè)計到FPGA實現(xiàn)的整個過程,避開了有限字長效應(yīng)等復(fù)雜理論的討論,從設(shè)計中遇到的一些關(guān)鍵性問題出發(fā),在MATLAB下進(jìn)行了濾波效果的仿真比較,最終在Quartus下用Verilog語言實現(xiàn)了濾波器的硬件程序設(shè)計,并用實際采集數(shù)據(jù)進(jìn)行了濾波效果仿真?;诩壜?lián)方式的IIR濾波器是較為容易實現(xiàn)的高效方式,當(dāng)利用硬件實現(xiàn)濾波時,可以共用存儲器和延遲單元,利于減少所需元件數(shù)量,可以簡化結(jié)構(gòu),降低成本。同時代碼簡短,可大大節(jié)省濾波器設(shè)計時間。用這一方法設(shè)計的帶通濾波器將用在利用磁天線接收水下信號的LoranC數(shù)字化接收機(jī)中。
[1] 吳苗,朱濤,李方能,等.無線電導(dǎo)航原理及應(yīng)用[M].北京:國防工業(yè)出版社,2008.
[2] 崔國恒,曹可勁,許江寧,等.磁天線水下接收羅蘭C信號可行性研究[J].彈箭與制導(dǎo)學(xué)報,2010,30(6):180-182.CUI Guo-heng,CAO Ke-jin,XU Jiang-ning,et al.The research on feasibility of receiving LoranC signal underwater based on H-field antenna[J].Journal of projectiles,Rockets,Missiles and Guidance,2010,30(6):180-182.
[3] 胡廣書.數(shù)字信號處理[M].2版.北京:清華大學(xué)出版社,2003.
[4] 田耘,徐文波,張延偉.無線通信FPGA設(shè)計[M].北京:電子工業(yè)出版社,2008.
[5] 夏宇聞.Verilog數(shù)字系統(tǒng)教程[M].2版.北京:北京航空航天大學(xué)出版社,2008.
[6] 屈星,唐寧,嚴(yán)舒,等.基于FPGA的IIR數(shù)字濾波器的設(shè)計與仿真[J].計算機(jī)仿真,2009,26(8):304-308.QU Xing,TANG Ning,YAN Shu,et al.Design of digital filter based on FPGA[J].Computer Simulation,2009,26(8):304-308.
[7] 周潤景,蘇良碧.基于QuartusII的數(shù)字系統(tǒng)VerilogHDL設(shè)計實例詳解[M].北京:電子工業(yè)出版社,2010.
[8] 童位理.基于FPGA的IIR數(shù)字濾波器的快捷設(shè)計[J].電子元器件應(yīng)用,2007,9(5):36-40.TONG Wei-li.Shortcut design of IIR digital filter based on FPGA[J].Electronic Component&Device Applications,2007,9(5):36-40.