基于Matlab和FPGA的FIR數(shù)字濾波器設(shè)計(jì)及實(shí)現(xiàn)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
摘要:基于FIR數(shù)字濾波器的原理和層次化、模塊化設(shè)計(jì)思想,結(jié)合Altera公司的CycloneII系列FPGA芯片,提出了FIR數(shù)字濾波器的實(shí)現(xiàn)硬件方案,給出了采用Matlab、QuartusⅡ設(shè)計(jì)及實(shí)現(xiàn)32階低通FIR濾波器的方法步驟,仿真及實(shí)際測(cè)試結(jié)果驗(yàn)證了設(shè)計(jì)方案的正確性,與傳統(tǒng)的數(shù)字濾波器相比,本文設(shè)計(jì)的FIR數(shù)字濾波器具有更好的實(shí)時(shí)性、靈活性和實(shí)用性。
關(guān)鍵詞:FIR數(shù)字濾波器;FPGA;Verilog HDL;Matlab
1 引 言
FIR數(shù)字濾波器以其良好的線性特性被廣泛應(yīng)用于現(xiàn)代電子通信系統(tǒng)中,是數(shù)字信號(hào)處理的重要內(nèi)容之一。在實(shí)際信號(hào)處理中,往往要求系統(tǒng)兼具實(shí)時(shí)性和靈活性,而已有的一些軟件或硬件實(shí)現(xiàn)方案(如DSP)則難以同時(shí)達(dá)到這兩方面的要求。使用具有并行處理特性的FPGA來實(shí)現(xiàn)FIR濾波器,既有很強(qiáng)的實(shí)時(shí)性,又兼顧了靈活性,為數(shù)字信號(hào)處理提供了一種很好的解決方案。FIR濾波器系數(shù)計(jì)算較為繁瑣,在設(shè)計(jì)時(shí)借助Matlab工具箱,選擇合適的窗函數(shù),可以方便地計(jì)算濾波器系數(shù),并分析其幅頻、相頻特性。
本文在用FPGA設(shè)計(jì)FIR濾波器時(shí),采用了層次化、模塊化的設(shè)計(jì)思想,將整個(gè)濾波器劃分為若干功能模塊,運(yùn)用Verilog HDL語言和原理圖兩種設(shè)計(jì)輸入方式,各個(gè)模塊先獨(dú)立設(shè)計(jì),驗(yàn)證無誤后再互聯(lián)綜合,完成了FIR數(shù)字濾波器的系統(tǒng)設(shè)計(jì)及仿真測(cè)試。
2 FIR濾波器基本原理及結(jié)構(gòu)
FIR數(shù)字濾波器的沖擊響應(yīng)h(n)為實(shí)序列時(shí),頻率響應(yīng):
若要求線性相位,則需:
因而h(n)如果滿足對(duì)稱或反對(duì)稱的條件,就具有線性相位特性,即:
數(shù)字濾波器結(jié)構(gòu)有很多種,偶對(duì)稱FIR濾波器的直接型結(jié)構(gòu)如圖1所示。
其中x(n),y(n)分別為輸入輸出時(shí)間序列。容易得到32階偶對(duì)稱FIR濾波器的輸入輸出關(guān)系,如式(4)所示:
根據(jù)以上分析,可以把對(duì)稱結(jié)構(gòu)的FIR數(shù)字濾波器分成“移位相加單元、乘法器、輸出相加及截位輸出”四塊,如圖2所示。
對(duì)于長度為2M的濾波器,其運(yùn)算次數(shù)只有M量級(jí),減少了乘法次數(shù),也提高了運(yùn)算速度。在用FPGA實(shí)現(xiàn)時(shí)可以節(jié)約不少資源。
3 用Matlab設(shè)計(jì)FIR數(shù)宇濾波器
具有對(duì)稱結(jié)構(gòu)的直接型FIR濾波器結(jié)構(gòu)如圖1所示,用加窗的設(shè)計(jì)方法,經(jīng)比較后窗函數(shù)選用海明窗。根據(jù)實(shí)際指標(biāo)要求在Matlab的“Filter Design”工具里設(shè)置各參數(shù),然后算得系數(shù)h(n),如圖3所示,得到的系數(shù)是用十進(jìn)制表示的,需要將其轉(zhuǎn)換成系統(tǒng)要求精度(如18位)的定點(diǎn)二進(jìn)制小數(shù)。把所有系數(shù)乘以218后再四舍五入即可,最終數(shù)據(jù)如表1所示。
4 濾波器的FPGA實(shí)現(xiàn)及仿真測(cè)試
按照?qǐng)Dl、圖2和濾波器系數(shù)表1,用Verilog HDL分別實(shí)現(xiàn)濾波器的各個(gè)模塊,仿真無誤后生成單元模塊圖,然后在QuartusⅡ里調(diào)用該模塊,互聯(lián)后綜合得到系統(tǒng)電路圖,各功能模塊的設(shè)計(jì)方法如下。
4.1 移位及首尾相加單元
把輸入數(shù)據(jù)存儲(chǔ)到移位寄存器,利用FIR濾波器的對(duì)稱性,把移位后的數(shù)據(jù)首尾相加即可。加法器輸出端要加個(gè)寄存器模塊,以去除毛刺。另外為防止相加后數(shù)據(jù)溢出,要把數(shù)據(jù)位數(shù)擴(kuò)寬到14+1位。其中D_in[13..O]是二進(jìn)制補(bǔ)碼輸入,D out XX[14..O]是移位相加后數(shù)據(jù)輸出。Vexrilog HDL程序關(guān)鍵語句為:
移位相加單元模塊圖如圖4所示。
[!--empirenews.page--]
移位相加單元時(shí)序仿真:仿真結(jié)果如圖5所示,輸入一個(gè)階躍信號(hào)(8191),從圖5中可以看出,輸出數(shù)據(jù)從D_out_a到D_out_p依次有一個(gè)時(shí)鐘周期的時(shí)延,并且總的時(shí)延和濾波器階數(shù)(32)相等,最后輸出數(shù)據(jù)是16 382=8 191*2,和理論計(jì)算值相同。
4.2 與濾波器系數(shù)相乘
數(shù)據(jù)首尾相加輸出后與濾波器系數(shù)h(n)相乘,由于FIR濾波器的結(jié)構(gòu)是對(duì)稱的,因而只需16個(gè)乘法器即可。乘法器直接調(diào)用QuartusⅡ里面的參數(shù)化元件庫,系數(shù)的位寬設(shè)為18。關(guān)鍵Verilog語句如下:
以上為一個(gè)乘法器設(shè)置方法,16個(gè)乘法器的整體模塊圖如圖6所示。
為了便于仿真測(cè)試,乘法器單元一開始只設(shè)置了4個(gè)輸入。其中h(0)=100,h(1)=200,h(2)=300,h(3)=400,a,b,c,d為4個(gè)輸入數(shù)據(jù),與h(n)相乘后對(duì)應(yīng)輸出分別為R_a,R_b,R_c和R_d。這樣設(shè)計(jì)不失一般性,仿真無誤后再擴(kuò)充到16個(gè)即可。仿真結(jié)果如圖7所示。
4.3 乘法器輸出結(jié)果相加
16路數(shù)據(jù)相加后位數(shù)被擴(kuò)為33+4=37,另外要在其輸出端加一寄存器,以消除毛刺。此模塊原理圖如圖8所示。
相加輸出模塊仿真:實(shí)際用到的是16輸入的加法器,為便于仿真測(cè)試.輸入先設(shè)為4路,仿真結(jié)果如圖9所示。
4.4 截位輸出[!--empirenews.page--]
截位是濾波器設(shè)計(jì)的關(guān)鍵,此處的處理方法是:14位的輸入數(shù)據(jù)(14 b的ADC),18位二進(jìn)制補(bǔ)碼表示的濾波器系數(shù),除去符號(hào)位,相乘后小數(shù)位是13+17=30,加法運(yùn)算不改變小數(shù)位數(shù)。另外系統(tǒng)測(cè)試電路板用的是USB總線,USB控制器的數(shù)據(jù)位寬是16,因而把輸出數(shù)據(jù)截到16位,然后送給FIFO,從而傳到計(jì)算機(jī)。截位用VerilogHDL實(shí)現(xiàn)的語句是:
assign FIR_out={D_temp[36],D_temp[29:15]};
此模塊的原理圖如圖10所示,其中FIR_out[15..O]是濾波器的最終輸出。
在QuarltusⅡ7.0里調(diào)用仿真無誤的模塊,組成整個(gè)系統(tǒng),最后仿真無誤后進(jìn)行系統(tǒng)的實(shí)際數(shù)據(jù)測(cè)試。
5 實(shí)際測(cè)試
測(cè)試電路是一基于FPGA和USB的數(shù)據(jù)采集及處理系統(tǒng)。其原理框圖如圖1l所示。
測(cè)試時(shí)把一被干擾的模擬信號(hào)輸入ADC,采樣得到的數(shù)據(jù)經(jīng)過FPGA和USB傳輸?shù)接?jì)算機(jī)上,然后用Mat—lab顯示出其時(shí)域和頻域圖形。
5.1 未濾波時(shí)信號(hào)波形
輸入信號(hào)頻率是3 kHz,含頻率為34 kHz的干擾信號(hào)(用兩個(gè)信號(hào)源合成),下載的FPGA控制程序不含數(shù)字濾波器模塊,采樣得到的數(shù)據(jù)經(jīng)USB傳到計(jì)算機(jī),然后用Matlab顯示出的波形如圖12所示,可以看出干擾信號(hào)的相對(duì)功率約為一20 dB。
5. 2 濾波后信號(hào)波形
把濾波器程序下載到FPGA,輸入信號(hào)不變。濾波后波形如圖13所示。
前后對(duì)比可以發(fā)現(xiàn),濾波后信號(hào)明顯變好,34 kHz的干擾被抑制到約一55 dB,驗(yàn)證了設(shè)計(jì)的正確性。
6 結(jié) 語
本文給出了用CycloneⅡ系列FPGA實(shí)現(xiàn)FIR低通濾波器的設(shè)計(jì)實(shí)例。然后將濾波前后的AD實(shí)際采樣數(shù)據(jù)用Madab顯示出來并做比較,測(cè)試結(jié)果證明所設(shè)計(jì)的FIR數(shù)字濾波器功能正確,性能良好。并且該數(shù)字濾波器有很高的靈活性,濾波器系數(shù)在一個(gè)表格內(nèi),修改其參數(shù)即可分別實(shí)現(xiàn)低通、高通、帶通等類型。文中所討論的設(shè)計(jì)方法和實(shí)現(xiàn)技術(shù)對(duì)數(shù)字信號(hào)處理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)具有重要的實(shí)用價(jià)值。