李靖宇,李豹,曹可勁,瞿洋
(1.海軍工程大學導航工程系,湖北武漢430033;2.海軍91821部隊廣東潮州515700)
羅蘭C系統是我國獨立控制的唯一大型陸基無線電導航系統,是我國衛星導航定位授時(PNT)的重要備份手段,是全球羅蘭C系統網的重要組成部分。其工作頻率為90~110 kHz[1]。由于其工作在低頻段,存在水下接收的可能,近年來,利用磁天線接收羅蘭C信號實現水下隱蔽定位成為研究熱點[2]。而射頻前端的數字帶通濾波器是實現數字化實時處理接收機的重要部分。針對這些需求,筆者提出了采用級聯形式在FPGA上通過Verilog語言編程實現羅蘭C數字帶通濾波器的方法。在經典濾波器中,IIR數字濾波器具有很高的濾波效率,所需的階數不僅比FIR濾波器低,而且可以利用模擬濾波器的設計成果[4]。在對信號的相位要求不是很高時可以使用IIR濾波器,用級聯形式設計的IIR濾波器的工作量相對較小,而且所用存儲單元少,經濟效益高。
IIR濾波器是一種遞歸濾波器,具有反饋結構,如圖1所示。

圖1 IIR濾波器直接型結構Fig.1 The direct structure of IIR filter
其系統差分方程可描述為:

其系統傳遞函數描述為:

可以對IIR數字濾波器的傳遞函數H(Z)進行分子,分母的多項式分解,這樣就可以得到其級聯形式,級聯形式結構如圖2所示。

圖2 IIR濾波器級聯結構示意圖Fig.2 The cascaded structure of IIR filter

其中,每一級的二階子系統的傳輸函數形式為:

級聯形式具有一定的獨立性,極點與零點的組合以及Hk(z)的連接順序等具有相當大的自由度。與直接型結構相比,對系數敏感度低的濾波器,不容易受系數誤差影響的濾波器更適合采用級聯型結構。級聯結構在硬件實現中可以共用存儲器和延遲單元,減少所需元件數量,簡化結構[4]。
利用MATLAB綜合函數可以很容易地求出滿足要求的帶通濾波器參數。

其中wp和ws分別為通帶截止頻率和阻帶截止頻率,由于是帶通濾波器所以兩個都應該為二維向量。Rp和Rs分別為通帶最大衰減和阻帶最小衰減。wn為3 db邊緣頻率,此亦為二維向量。B和A即為式(2)中的分子,分母的系數向量。即:
A=[1,α1,…,αN];B=[b0,b1,…,bM](5)
求出濾波器參數B,A之后可以利用MATLAB函數將其轉化成級聯形式:
[sos,g]=tf2sos(B,A);

此例中產生的sos為一個4×6的矩陣:g=0.000 001 274 722 974;濾波器增益。
每行為一個二階子系統的參數,對應為:[bk0,bk1,bk2,1,ak1,ak2],k=1,2,3,4;
由于最終要采用FPGA硬件實現,為了使設計簡便及資源得以充分利用,應該對系數進一步的量化,將系數由小數轉化為整數,根據需要主要考慮量化精度和系統資源兩方面,本文采用將二階網絡系數乘以2N(N=5)并取整實現[8]。

由于參數取整處理帶來的舍入誤差會對濾波器的零點,極點造成影響,從而影響濾波器的穩定性。因此有必要將參數取整后的級聯方式轉回標準形式,再利用MATLAB綜合函數對其濾波效果進行測試。如果濾波效果不能滿足要求,即取整舍入誤差造成的影響較大,應將2的冪次升高,但如果2的冪次過高,勢必會占用過多的硬件資源,因此要綜合考慮,以滿足濾波要求,且濾波器穩定工作為前提。
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個不同頻段的信號疊加產生,用此信號作為濾波器的輸入信號,對濾波器的濾波效果進行測試,驗證濾波器能否濾除頻帶外的信號。
為了方便利用MATLAB函數進行濾波性能比較,需將濾波器的級聯形式化成標準形式,注意增益仍舊用g而不是G,表示濾波器的增益和原來取整之前的相等,便于幅頻響應的比較。
[B1,A1]=sos2tf(S,g);
[h,w]=freqz(B,A,256,'whole',fs);
[h1,w1]=freqz(B1,A1,256,'whole',fs);
由圖4可以看出,濾波器參數取整后的幅頻響應曲線幾乎和取整之前重合,證明參數乘以25再取整后的舍入誤差對濾波器幅頻響應的影響極小,可以忽略。
硬件程序設計前,在MATLAB下寫出級聯形式的差分方程,模擬硬件程序的運算過程,驗證算法的準確性,并可以觀察運算過程中數值的大小,方便硬件設計中定義高效準確的數據位寬,提高設計的針對性與準確性。

圖4 幅頻響應比較圖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;將參數a0歸一化
...
x5(i+2)=(x_t3-y_t3)/32;
end
由圖5可見在參數取整后用級聯式差分方程模擬硬件程序濾波效果和調用filter函數的輸出效果在波形上也幾乎一致,只是由于增益上取整后的一點差異,信號幅度略有降低,對頻域并無影響,且濾波器穩定,沒有發散,由此可知上述取整滿足設計要求,可以考慮下步硬件程序實現。

圖5 濾波效果比較Fig.5 Comparison of filter performance
Quartus是Altera公司在21世紀初推出的FPGA/CPLD開發環境,其優點是功能強大,界面友好,使用便捷,設計完成后還可以進行時序仿真。本例采用了在Quartus下自頂向下的工程設計,設計完成后進行了仿真測試。
創立工程,在工程下建立bdt文件。如圖6:U1模塊為計數器模塊,U2為ROM模塊,ROM內部存儲的初始值來自預先建立的mif文件,mif文件的初始值可以自行設定,作為濾波器的輸入信號源,U3為帶通濾波器模塊。

圖6 框圖文件Fig.6 Block diagram file
分別為各模塊添加Verilog程序,其中ROM模塊是調用的宏模塊,可以自動生成.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子程序設計中涉及到乘法和除法(移位)運算,需要將中間變量寄存器,輸入和輸位寬定義足夠大,防止運算過程中產生溢出,但又要考慮到提高運算速度和硬件資源問題。為了有針對性的進行設計,可以在MATLAB的工作窗口中觀察級聯差分方程運算過程中中間變量值的大小,針對實際輸入信號的幅度,準確高效地設置位寬。在FPGA硬件中,負數是用二進制補碼表示,除法(移位)運算在移位過程中會影響到符號位,導致輸出結果發生錯誤,所以移位過程中,應采取保留符號位進行移位。
工程編譯成功后,建立一個矢量源文件(vwf)進行波形仿真。將實際采集的羅蘭C信號存入mif文件,作為濾波器的輸入信號。實際的濾波仿真效果如圖7所示。

圖7 實際采集羅蘭C數據濾波仿真結果Fig.7 Simulation result of practical Loran Cdata
由圖7可見,經過濾波器后可以從雜亂的采集信號中選擇出清晰的羅蘭C信號,說明濾波器設計滿足要求。
本文以巴特沃斯帶通濾波器為例,描述了IIR數字帶通濾波器從MATLAB設計到FPGA實現的整個過程,避開了有限字長效應等復雜理論的討論,從設計中遇到的一些關鍵性問題出發,在MATLAB下進行了濾波效果的仿真比較,最終在Quartus下用Verilog語言實現了濾波器的硬件程序設計,并用實際采集數據進行了濾波效果仿真?;诩壜摲绞降腎IR濾波器是較為容易實現的高效方式,當利用硬件實現濾波時,可以共用存儲器和延遲單元,利于減少所需元件數量,可以簡化結構,降低成本。同時代碼簡短,可大大節省濾波器設計時間。用這一方法設計的帶通濾波器將用在利用磁天線接收水下信號的LoranC數字化接收機中。
[1] 吳苗,朱濤,李方能,等.無線電導航原理及應用[M].北京:國防工業出版社,2008.
[2] 崔國恒,曹可勁,許江寧,等.磁天線水下接收羅蘭C信號可行性研究[J].彈箭與制導學報,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] 胡廣書.數字信號處理[M].2版.北京:清華大學出版社,2003.
[4] 田耘,徐文波,張延偉.無線通信FPGA設計[M].北京:電子工業出版社,2008.
[5] 夏宇聞.Verilog數字系統教程[M].2版.北京:北京航空航天大學出版社,2008.
[6] 屈星,唐寧,嚴舒,等.基于FPGA的IIR數字濾波器的設計與仿真[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的數字系統VerilogHDL設計實例詳解[M].北京:電子工業出版社,2010.
[8] 童位理.基于FPGA的IIR數字濾波器的快捷設計[J].電子元器件應用,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.