1. 程式人生 > >FIR濾波器和IIR濾波器原理及Xilinx System Generator實現

FIR濾波器和IIR濾波器原理及Xilinx System Generator實現

1.FIR數字濾波器

有限衝激響應(FIR)濾波器是對N個取樣資料執行加權和平均的處理。處理過程公式為:

如三抽頭FIR濾波器結構:

一個低通濾波器結構:

設計濾波器就是選取合適的濾波器係數W,使濾波器達到設計的要求。

一階微分濾波器結構:

當低頻通過時,因為相鄰兩個取樣點對於低頻來說,變化不大,所以差值基本為0,而對於高頻來說,相鄰取樣點變化很大,輸出幅度便會很大,所以一階微分濾波器是高通。

線性相位與非線性相位:

如果濾波器的N個實值係數為對稱或者反對稱,那麼為線性相位。即通過濾波器的所有頻率分量具有相同的延遲。該延遲為群延遲,所以對稱FIR具有相同的群延遲。

FIR濾波器的轉置結構:

轉置結構的公式:

不同點在於:

1.標準FIR暫存器是8位的,轉置FIR暫存器是16位的。

2.標準FIR關鍵路徑(x路徑)上有四個暫存器,轉置FIR沒有,所以轉置FIR工作速度更快。

資源消耗更多但是對於FPGA或者DSP來說,轉置FIR更有優勢。

2.IIR數字濾波器

無限衝激響應濾波器,可以看做是兩個FIR濾波器構成,其中一個FIR在反饋迴路中。

IIR的優點是,同樣的階次,比FIR濾波效果好。缺點是,不穩定,存在相位失真,所以FIR更適合自適應濾波器。

公式為:

具有N個前饋係數和M-1個反饋係數。結構如下:

為了保證IIR濾波器的穩定性,需要極點均位於z平面的單位圓內。

3.DA FIR濾波器設計

分散式算術(DA)實現數字濾波器,通過System Generator實現移位暫存器,查詢表,查詢表加法器,縮放比例加法器,從而構造整個FIR濾波器。首先對對稱係數FIR濾波器的表示式進行改寫,使更適合用硬體實現。

其中,W是濾波器係數,每一個抽樣值用B位位元表示,XB-i為輸入值的第B-i個位元位,共有N個取樣值參與計算,N個取樣值用移位暫存器實現。

移位暫存器:

1.其中SineWave和Constant從Simulink Library庫Simulink—>Source中拉取。SineWave設定為頻率2*pi。

2.Gateway In起取樣的作用

,取樣週期0.001,設定抽樣值為定點數,位元數為8位,小數位為4位,有符號數。Gateway Out輸出值,兩者均在Xilinx Blockset—>Basic Elements中,Gataway In1設定抽樣間隔0.001,位元數為1。

3.子系統由Xilinx Blockset—>Basic Elements Black Box實現,共七個Black Box,每個Black Box由VHDL描述其功能並用m檔案定義介面,在這裡Black Box設定為8位寬輸出的D觸發器,實現延遲0.001的效果,從而構成7個取樣數值。最後包裝為子系統。

4.System Generator,控制模擬,Timing設定為0.001抽樣。

5.Scope從Sinks庫中獲得,設定輸入為7,設定layout為7,進行模擬。

這裡驗證設計的移位暫存器是否正確,從模擬結果中看到,是正確的,所以這個移位暫存器模組可以作為後面DA Filter設計了,所設計的子系統為模擬訊號輸入輸出7個8位連續取樣有符號值

查詢表模組:

從公式中可以看到(W1*x1+W2*x2+......W7*x7),對於取樣值的每一位元位只有0和1的取值,所以公式僅僅是濾波器係數的加和,例如7個取樣值最高位為分別為(7—>1)1100000,則對應上式輸出為W7+W6,所以查詢表記錄的是運算後的結果,但是對於7個位元組合方式太多,所以將7個位元值分為低4位和高3位,分別計算與權值的乘積加和,即分別用查詢表實現x4x3x2x1對應的值與x7x6x5對應的值,之後相加。

使用BlackBox實現4位元輸入查詢表與3位元輸入查詢表,0000—>1111對應的輸出乘積加和與000—>111對應的輸出乘積加和。

上圖使用Counter計數器分別輸出0-15與0-7驗證查詢表是否正確。這裡查詢表分別為3位輸入與4位輸入,輸出23位乘積值(其中21位為小數並且為有符號數)。

查詢表加法器模組:

這個模組就是將兩個查詢表模組的值加起來,實現(W1*x1+W2*x2+......W7*x7)。

實現後的查詢表加法器模組為23位有符號兩輸入,23位有符號輸出。

縮放比例加法器:

最後就是分別乘上2的i次方然後加起來,作為輸出值,縮放比例加法器完成了這個操作。整體結構:

In是查詢表加法器輸出的值,23位位元其中21位小數位,首先經過Reinterpret強制轉換資料格式與型別,轉換成無符號數並且小數位為0,乘法器引數設定為(1—>128)無符號8位,設定乘法器輸出無符號30位,在Reinterpret8之前均操作為無符號數30位精度,Reinterpret8強制轉換為有符號為並且小數位為25。(應該是乘法操作不能使用有符號數,加減法可以使用,有待查閱)。

DA Filter完整設計

兩個不同頻率的sin波形加在一起,作為濾波訊號,首先需要進行抽樣與資料轉換(matlab轉化為Xilinx),使用Gateway In,並設定抽樣週期0.001,使用移位暫存器在一個取樣時刻獲取7個連續取樣值,使用Xilinx庫提供的BitBasher提取各個位元值,如提取最高位設定表示式:

同樣的操作將7個取樣值的8位位元值分別提取出來,送入查詢表模組與查詢表相加模組,得到每一個位元位的乘積加和,最後送入縮放比列加法器,完成整個表示式。

模擬結果:

效果還是可以的。最後不要忘了加Xilinx的模擬控制元件並設定時間0.001,一個經常忘記新增的模擬控制元件。