杭州電子科技大學射頻電路與系統教育部重點實驗室 楊延亮 程知群 馮 濤
基于FPGA的IIR帶通數字濾波器設計與仿真
杭州電子科技大學射頻電路與系統教育部重點實驗室 楊延亮 程知群 馮 濤
該文給出了用Matlab設計IIR帶通數字濾波器的方法,利用Matlab語言進行程序設計出二階環為基礎的并聯結構模型,通過在Matlab環境下仿真軟件Simulink對設計的帶通濾波器進行了動態仿真,確定了濾波器系數的量化字長。從仿真結果來看,設計的帶通數字濾波器既滿足濾波器的選頻特性,又優化了硬件資源。在實際的應用中,可以根據不同FPGA資源靈活修改濾波器系數,在不同規模的FPGA上實現。
無限脈沖響應;帶通數字濾波器;量化字長;現場可編程門陣列
在數字信號處理的領域內,數字濾波技術是極其重要的一個分支。無論是信號的獲取、傳輸,還是信號的處理和交換都離不開數字濾波,它對于信號安全有效的傳輸是至關重要的[1]。在主要的兩類數字濾波器中,IIR(無限脈沖響應)濾波器被廣泛使用。
Matlab是美國MathWorks公司出品的數學軟件,用于算法開發、數據可視化、數據分析以及數值計算的高級技術計算語言和交互式環境[2]。其中Matlab自帶的信號處理工具箱,具有強大的信號處理和分析功能,它提供了豐富簡便的設計,使原來繁瑣的程序設計簡化成函數的調用,這樣便可以快速有效的實現數字濾波器的設計與仿真。
FPGA(現場可編程門陣列)以其優越的實時性和設計靈活性成為了控制系統中不可或缺的一部分,它可利用Simulink設計仿真的有限字長IIR濾波器自動生成VHDL或Verilog代碼,下載至FPGA實現濾波器功能[3]。本文研究了基于FPGA有限字長的IIR帶通數字濾波器的相關理論,設計方法及仿真。
數字IIR濾波器的設計都是基于模擬IIR濾波器,之后將其轉化為等價的數字濾波器[4]。其中沖擊響應不變法是一種較為常用的方法。其總的變化流程如下:

考慮到傳統濾波器計算量大,濾波特性不宜調整等缺點,如何解決這些問題便顯得極為關鍵。利用Matlab強大的數字信號處理和計算能力可快速有效的設計數字濾波器,不僅極大的簡化了計算量,而且它可以隨時對比設計要求和濾波器特性進行參數調整,方便靈活[5]。
高階IIR數字濾波器的系統傳遞函數可表示為:

根據濾波器傳遞函數H(z)的不同表達形式,可以得出不同的實現結構。相對較為常用的3種結構為直接型,級聯型和并聯型。其中直接型對系數的敏感度最高,受有限字長造成的影響最大。級聯型H(z)的連接順序具有很大的自由度,因此在實際設計中這些組合方式,比例變化和H(z)的連接順序等都會產生很大的問題。并聯型濾波器則可以很好的克服上述兩種結構的缺點,因此在濾波器極點不重復時,并聯型濾波器被廣泛使用。
在相同性能的要求下,橢圓濾波器比巴特沃斯和切比雪夫濾波器所需的階數低,且過渡帶窄,可獲得更好的選頻特性。
通過Matlab設計的帶通濾波器部分代碼如下:

上述程序給出了橢圓濾波器模型設計的10階并聯型結構的數字濾波器[6]。通帶為頻率1000~2000Hz,采樣頻率8000Hz,通帶衰減1dB,阻帶衰減60dB。

二階IIR濾波器傳遞函數為:從式中可以看出,為確保穩定性,極點必須位于單位圓之內(即|p1|<1,|p2|<1),因此可以得到:

由Schur-Cohn穩定性測試可以得到a1和a2的關系為:

只要滿足上述兩式的關系,就可以保證濾波器的穩定性。
理論設計出的濾波器系數是無限精度的,但在實際的應用中,所有的系數都必須是以二進制數儲存在計算機中,這就要求量化系數,取有限精度的字長,相應造成濾波器零極點的位置發生偏移,使得實際的頻率響應和理論情況有所出入,情況嚴重時還可能使濾波器極點偏移至穩定單位圓外,造成整個系統不穩定。

圖1 初始化函數

圖2 濾波器系數參數

圖3 未經量化的幅頻響應

圖4 量化精度16bits幅頻響應

圖5 量化精度14bits幅頻響應

圖6 量化精度13bits幅頻響應

圖7 IIR濾波器Simulink仿真模型

圖8 4單頻與白噪聲相加頻譜

圖9 單頻加白噪聲濾波后頻譜

圖10 白噪聲濾波后的頻譜
導致這些不穩定的因素主要有兩方面體現:溢出和極限環。溢出問題可以通過飽和模式、保護位、對信號和/或系數進行縮放等消除溢出效應;而對于極限環所造成的不穩定,可以通過截尾法、降低濾波器階數、使用更多位來提高精度,移動極點使其遠離單位圓等方法來消除極限環[7]。總之,在FPGA上實現IIR濾波器之前,檢查其穩定性和有限字長效應是非常重要的。
在Simulink濾波器模型中,可以通過設定變量的方法可靈活控制濾波器系數字長,如圖1、2所示。
在圖2所示的Parameter Attributes和Signal Attributes分別對應的data type中可對其進行變量設定;圖1所示的InitFcn函數可以對濾波器系數、加法器等設定與圖2相對應的變量,并對其初始化。其優勢在于當需要改變濾波器字長時,無需通過對每個濾波器系數字長逐一進行修改,只需在InitFcn函數中對其對應的初始化常量值進行修改量化即可。不同的量化字長對應不同的濾波效果,對幅頻響應造成的影響如圖3-6所示。A子集還是B子集進行編碼。反過來也可以說,左側數據區字符編碼的奇偶排列順序,決定了前置碼。比如,如果某個條形碼的左側數據區的編碼是:奇偶偶偶奇奇,那么前置碼就是6。
經由條碼的條空寬度歸一化到-1,-2,-3,-4,1,2,3和4八個整數后,創建譯碼表,表3所示。譯碼工作通過查詢此表即可實現。例如:某個字符的四個條空寬度分別是,-3,1,-2和1,經查表可知,這個字符是“8”。
仿真實驗使用VC++ Express 2008和OpenCV開發平臺。實驗表明,本文算法效果良好。對于光照不均勻,輕微模糊,及傾斜角在正負25度內的條碼圖像,都能正確識別。如圖7所示。
[1]中國標準出版社.條碼國家標準匯編[M].北京:中國標準出版社,2004.
[2]陸宗騏.C/C++圖像處理編程[M].北京:清華大學出版社,2005.
[3]蘇彥華.VC++數字圖像識別技術典型案例[M].北京:人民郵電出版社,2004
[4]沈庭芝.數字圖像處理及模式識別[M].北京:北京理工大學出版社,1998.
姜亮(1980—),男,研究生,研究方向:計算機應用。