數(shù)字濾波器具有比模擬濾波器精度高,、穩(wěn)定、體積小,、重量輕,、靈活、不要求阻抗匹配,,以及能夠?qū)崿F(xiàn)模擬濾波器無法實現(xiàn)的特殊濾波功能等特點,,因此數(shù)字濾波器被廣泛應(yīng)用于圖像處理和識別、語音處理和識別,、通信,、雷達(dá),、人工智能、核技術(shù)等多個領(lǐng)域,。
數(shù)字濾波器的實現(xiàn)方法很多,,采用FPGA器件實現(xiàn)具有速度快、效率高,、成本低,、開發(fā)周期短等優(yōu)點,而且還可以直接使用Altera公司提供的FIR/IIR IP core或采用LPM的設(shè)計方法進(jìn)行設(shè)計,,使數(shù)字濾波器設(shè)計變得簡單,、可靠。本系統(tǒng)通過一個實例說明如何通過Matlab設(shè)計并在FPGA器件上實現(xiàn)IIR橢圓函數(shù)濾波器,。
1 IIR數(shù)字濾波器的Matlab設(shè)計
1.1 IIR數(shù)字濾波器設(shè)計要求
本系統(tǒng)的設(shè)計指標(biāo)如下:模擬信號采樣頻率為2MHz,,每周期最少采樣20點,即模擬信號的通帶邊緣頻率為fp=100kHz,,阻帶邊緣頻率fs=200kHz,,通帶波動Rp≤0.1dB(通帶誤差不大于5%),阻帶衰減As≥42dB,。換算為數(shù)字域指標(biāo)為:Wp=0.1π,,Ws=0.2π,Rp=0.1dB,,As=42dB,。
1.2 IIR數(shù)字濾波器設(shè)計方案
(1)根據(jù)設(shè)計要求確定濾波器數(shù)字域指標(biāo)
換算為數(shù)字域指標(biāo)為:Wp=0.1π,Ws=0.2π,,Rp=0.1dB,,As=42dB。
(2)采用Matlab軟件設(shè)計濾波器系統(tǒng)函數(shù)
IIR濾波器系統(tǒng)函數(shù)是采用計算機輔助工程CAE工具進(jìn)行設(shè)計的,。系統(tǒng)函數(shù)H(z)的計算采用Matlab軟件設(shè)計比較方便,,其中有兩個現(xiàn)成的函數(shù)可以使用:ellipord(Wp/pi,Ws/pi,,Rp,,As)函數(shù)用來計算數(shù)字橢圓濾波器的階次N和3dB截止頻率Wn;ellip(N,,Rp,,As,Wn)函數(shù)可以求得直接型橢圓IIR濾波器的各個系數(shù),。
根據(jù)要求,,設(shè)計采用Matlab軟件實現(xiàn)IIR濾波器的源程序如下:
利用Matlab軟件可以得到如下結(jié)果:
這是一個四階IIR系統(tǒng),通過Matlab計算出該系統(tǒng)的頻率響應(yīng)如圖1所示,可見能滿足設(shè)計要求,。
(3)確定濾波器網(wǎng)絡(luò)結(jié)構(gòu)
本設(shè)計如果采用直接型結(jié)構(gòu)實現(xiàn),,則需用的乘法器和延遲單元相對較多,而且分子和分母的系數(shù)相差較大,,需要較多的二進(jìn)制位數(shù)才能實現(xiàn)相應(yīng)的精度要求,。
為了克服上述缺點,采用二階級聯(lián)實現(xiàn),。IIR濾波器采用級聯(lián)型的網(wǎng)絡(luò)結(jié)構(gòu)既可以對各基本節(jié)的零點、極點方便地單獨進(jìn)行調(diào)整,,又可以降低對二進(jìn)制數(shù)位數(shù)的要求,。
這里采用Matlab中的“二階部分傳遞函數(shù)”tf2sos()完成IIR濾波器直接型網(wǎng)絡(luò)結(jié)構(gòu)到級聯(lián)型網(wǎng)絡(luò)結(jié)構(gòu)的轉(zhuǎn)換。
將IIR濾波器由直接型變?yōu)榧壜?lián)型的Matlab語言源程序如下:
可以看出,,每個二階節(jié)的分子,、分母系數(shù)差異減少了。值得注意的是,,在分配二階節(jié)的增益時,,要保證每個節(jié)不會發(fā)生運算溢出,可以先用Matlab軟件分析計算來合理安排各節(jié)的增益,。經(jīng)過計算,,本文采用第一級分配0.1626,第二級分配0.0658,,可以保證在要求的輸入范圍,,沒有數(shù)據(jù)溢出發(fā)生。
(4)濾波器參數(shù)量化
差分方程的量化后各系數(shù)如表1所示,,這里采用10位定點純小數(shù)補碼表示,。
2 IIR數(shù)字濾波器的FPGA實現(xiàn)
2.1 總體設(shè)計方案
根據(jù)上述參數(shù)計算可知,需要設(shè)計的IIR濾波器為2個二階節(jié)的系統(tǒng)級聯(lián)形式,,其二階節(jié)系統(tǒng)函數(shù)的差分方程均為:
可以看出,,一個二階節(jié)的實現(xiàn),需要五次乘法運算,、四次加法運算(采用二進(jìn)制補碼將減法運算變?yōu)榧臃ㄟ\算),,兩個二階節(jié)共需要10次乘法運算,所有乘法運算均為無符號數(shù)的乘法運算,,所以使用時需要先將兩個補碼乘數(shù)轉(zhuǎn)換為無符號數(shù)相乘后,,再將乘積轉(zhuǎn)換為補碼乘積輸出,送入累加器求和,。根據(jù)以上設(shè)計思想可知,,一個二階節(jié)系統(tǒng)均由控制模塊、移位模塊,、求補模塊,、乘法模塊和累加器模塊等模塊組成,,其系統(tǒng)電路框圖如圖2所示。
由于IIR濾波器的兩個節(jié)系統(tǒng)電路結(jié)構(gòu)完全相同,,只是系數(shù)不同,,故另一個二階節(jié)的設(shè)計與此類似。
2.2 主要功能模塊的設(shè)計
控制模塊主要用來產(chǎn)生對其他模塊的時序控制,。
累加模塊的功能是將10位×1位乘法器的5個輸出數(shù)據(jù)在10個時鐘周期內(nèi)累加后,,并將結(jié)果輸出。
移位模塊主要完成數(shù)據(jù)交換功能,,將輸入數(shù)據(jù)送入輸入寄存器x(n)中,,同時將x(n)寄存器上一時刻的數(shù)據(jù)送入x(n-1)寄存器,同時又將x(n-1)寄存器上一時刻的數(shù)據(jù)送入x(n-2)寄存器,。同理有y(n)→y(n-1)→y(n-2),。
求補模塊主要根據(jù)每路乘法器2個輸入數(shù)據(jù)的補碼,判斷輸入數(shù)據(jù)的正負(fù),,設(shè)置該路乘積結(jié)果正負(fù)標(biāo)志位,,并對輸入的負(fù)數(shù)進(jìn)行求補運算,保證乘積是在2個無符號數(shù)之間進(jìn)行,,再根據(jù)該路乘積結(jié)果正負(fù)標(biāo)志位,,對乘積結(jié)果進(jìn)行求補運算,保證送入累加器的數(shù)據(jù)為補碼,。
將設(shè)計好的各模塊按照二階節(jié)系統(tǒng)電路框圖銜接,,即可完成IIR濾波器其中一個二階節(jié)系統(tǒng)的設(shè)計。只要修改差分方程的系數(shù)就可完成另一個二階節(jié)系統(tǒng)的設(shè)計,。
2.3 仿真結(jié)果
各功能模塊設(shè)計,、調(diào)測完成之后,按照總體設(shè)計方案完成IIR濾波器的實現(xiàn),,并下載到Altera公司的EP1C6Q240C8器件上驗證,,QuartusⅡ中的仿真結(jié)果如圖3所示。
圖3中:xn為輸入信號,,采用單極性方波周期信號,;頻率為100kHz,在采樣頻率為2MHz時,,每個周期采樣20個點,,換算成數(shù)字域頻率為0.1π;二次諧波的數(shù)字頻率為0.2π,;yn為濾波輸出,。觀察仿真波形可知,所設(shè)計的IIR濾波器符合設(shè)計要求。為了更直觀地觀察IIR濾波器濾波后的輸出結(jié)果,,可將仿真波形文件轉(zhuǎn)換為*.tbl文件,,在Matlab中描繪波形。
3 結(jié)語
數(shù)字濾波器的應(yīng)用十分廣泛,,實現(xiàn)方法很多,,運用Matlab語言,能很容易地設(shè)計出具有嚴(yán)格指標(biāo)要求的數(shù)字濾波器,。采用FPGA器件實現(xiàn)數(shù)字濾波器的方法,,大大縮短了設(shè)計周期,降低了成本,,提高了設(shè)計的可靠性,、靈活性,為數(shù)字濾波器的設(shè)計與實現(xiàn)提供了一種有效的方法,。