基于FPGA的IIR數字濾波器的快捷設計
0 引言
本文引用地址:http://dyxdggzs.com/article/189710.htmIIR數字濾波器在很多領(lǐng)域中都有著(zhù)廣闊的應用。與FIR數字濾波器相比,IIR數字濾波器可以用較低的階數獲得較高的選擇性,而且所用存儲單元少,經(jīng)濟效率高。一個(gè)N階IIR數字濾波器的系統函數為:

其線(xiàn)性常系數差分方程為:

用FPGA實(shí)現濾波的基本思想就是基于式(2)來(lái)實(shí)現的。如果知道了系統的輸入序列(濾波器的輸入),那么,只要根據所給的濾波器的指標,然后通過(guò)MATLAB仿真出系數矢量b和a,再采用遞推算法求解差分方程,就能求出輸出序列(濾波器的輸出)。
1 濾波器的MATLAB設計
由于本文采用巴特沃斯濾波器,故需要在工具箱中調用的兩個(gè)函數buttord和butter的調用格式為:

其中N為濾波器階數;wp和ws分別為通帶截止頻率矢量和阻帶截止頻率矢量,單位為π,一般需要模擬頻率指標對采樣頻率的一半作歸一化;Rp和As分別為通帶最大衰減和阻帶最小衰減,單位dB;wc為3 dB邊緣頻率矢量;b和a即為方程(2)中的系數矢量。
獲得系數6和a之后,調用函數freqz(b,a,k,Fs)即可按照下式計算k點(diǎn)的復頻率響應矢量H:

然后便可繪出K點(diǎn)的幅頻和相頻特性曲線(xiàn),以用于檢查計算出的系數是否滿(mǎn)足所需要的濾波器指標。
2 編寫(xiě)VHDL語(yǔ)言代碼注意事項
乘加運算過(guò)程中的數據是有符號的二進(jìn)制補碼,通常在Xilinx ISE集成開(kāi)發(fā)環(huán)境下建立的VHDL源文件頭部都會(huì )有“use IEEE.STD_LOG-IC_UNSIGNED_ALL;”,如將其改為“use IEEE.STD_LOGIC_SIGNED.ALL;”即應該包含有符號數運算程序包,這樣就能保證代碼中的所有std_log-ic_vector型數據按照有符號二進(jìn)制補碼的規則進(jìn)行運算。
由于FPGA內部不能表示浮點(diǎn)數,因此只能用有限精度方法來(lái)實(shí)現數據的運算,即用數據(包括方程(2)的輸入輸出和系數)的整數部分(截去小數部分)作近似運算,且需要std_log-ic_vector數據類(lèi)型來(lái)表示數據整數部分的二進(jìn)制補碼形式,但這樣會(huì )產(chǎn)生截斷誤差。為了減小截斷誤差,應該將數據擴大適當的倍數(通常是2L倍,L為正整數),以使小數部分可以忽略不計。擴大的倍數越大,截斷誤差就越小,得到的數據就越精確,但是,用來(lái)表示數據整數部分的std_logic_vector型數據長(cháng)度會(huì )越大,這樣就會(huì )占用越多的FPGA內部資源,因此,適當的選擇數據擴大倍數是個(gè)關(guān)鍵。此外,各種數據轉換為std_logic_vector型數據的長(cháng)度選取至少應足以表示二進(jìn)制補碼(包括符號位)。若FPGA內部資源充足,可以通過(guò)增加std_logic_vector型數據長(cháng)度來(lái)減小截斷誤差,提高運算精度。
通常由MATLAB仿真得到的系數b都遠小于1,因此要適當選擇正整數L。運算時(shí)可給系數b和a(a的第一個(gè)系數除外)同乘以2L,之后取整得到B=round(b*2L)和A=round(a*2L)
當前時(shí)刻輸入的x(n)有時(shí)可能太小,為減小截斷誤差,應該選擇適當的整數M,以給x(n)乘以2M,即給表示當前時(shí)刻輸入的std_logic_vec-tor變量后補上M個(gè)‘0’。這樣,得到的當前時(shí)刻輸出y (n)就是擴大了2L+M倍的數據,應該除以2L+M才是當前時(shí)刻的真實(shí)輸出。而VHDL語(yǔ)言不支持除法運算,故應采用截去末尾(L+M)位的方法來(lái)近似除法運算,這種做法相當于原始輸出y除以2L+M之后截去小數部分。
在用示波器觀(guān)測時(shí),濾波器的輸出波形可能帶有許多大幅度尖銳毛刺,從而嚴重影響了濾波器的性能。毛刺是由于組合電路的競爭而使電路輸出發(fā)生瞬時(shí)錯誤的現象,通常消除毛刺的方法是在具體的電路中加個(gè)鎖存器。本文采取另一優(yōu)化方法,即在源代碼中通過(guò)符號“=”把輸出信號賦給一個(gè)中間信號,再把中間信號作為輸出,這相當于將信號作一個(gè)延時(shí)再輸出。這種方法不需要知道具體的電路結構,也元需編寫(xiě)其它代碼模塊,因此優(yōu)化更為簡(jiǎn)便快捷,而且優(yōu)化效果非常好。
3 濾波器MATLAB設計的FPGA實(shí)現
下面以一個(gè)簡(jiǎn)單的低通濾波器設計實(shí)例來(lái)說(shuō)明從MATLAB設計到FPGA實(shí)現的整個(gè)過(guò)程。該低通濾波器的系統采樣頻率為40 MHz,通帶截止頻率為1 MHz,阻帶截止頻率為5 MHz,通帶內最大衰減為3 dB,阻帶內最小衰減為40 dB,而對相位不作要求。
低通濾波器相關(guān)文章:低通濾波器原理
電源濾波器相關(guān)文章:電源濾波器原理
評論