基于 DSP Builder的FIR濾波器的設(shè)計(jì)與實(shí)現(xiàn)
1 引言
在信息信號處理過程中,如對信號的過濾、檢測、預(yù)測等,都要使用濾波器,數(shù)字濾波器是數(shù)字信號處理(dsp,digitalsignalprocessing)中使用最廣泛的一種器件。常用的濾波器有無限長單位脈沖響應(yīng)(ⅱr)濾波器和有限長單位脈沖響應(yīng)(fir)濾波器兩種[1],其中,fir濾波器能提供理想的線性相位響應(yīng),在整個頻帶上獲得常數(shù)群時延從而得到零失真輸出信號,同時它可以采用十分簡單的算法實(shí)現(xiàn),這兩個優(yōu)點(diǎn)使fir濾波器成為明智的設(shè)計(jì)工程師的首選,在采用vhdl或veriloghdl等硬件描述語言設(shè)計(jì)數(shù)字濾波器時,由于程序的編寫往往不能達(dá)到良好優(yōu)化而使濾波器性能表現(xiàn)一般。而采用調(diào)試好的ipcore需要向altera公司購買。筆者采用了一種基于dspbuilder的fpga設(shè)計(jì)方法,使fir濾波器設(shè)計(jì)較為簡單易行,并能滿足設(shè)計(jì)要求。
2 fir濾波器介紹
2.1 fir濾波器設(shè)計(jì)的原理
fir濾波器的數(shù)學(xué)表達(dá)式可用差分方程(1)來表示:
其中:r是fir的濾波器的抽頭數(shù);b(r)是第r級抽頭數(shù)(單位脈沖響應(yīng));x(n-r)是延時r個抽頭的輸入信號。
設(shè)計(jì)濾波器的任務(wù)就是尋求一個因果,物理上可實(shí)現(xiàn)的系統(tǒng)函數(shù)h(z),使其頻率響應(yīng)h(ejw)滿足所希望得到的頻域指標(biāo)。
2.2 設(shè)計(jì)要求
數(shù)字濾波器實(shí)際上是一個采用有限精度算法實(shí)現(xiàn)的線性非時變離散系統(tǒng),它的設(shè)計(jì)步驟為先根據(jù)需要確定其性能指標(biāo),設(shè)計(jì)一個系統(tǒng)函數(shù)h(z)逼近所需要的技術(shù)指標(biāo),最后采用有限的精度算法實(shí)現(xiàn)。本系統(tǒng)的設(shè)計(jì)指標(biāo)為;設(shè)計(jì)一個16階的低通濾波器,對模擬信號的采樣頻率fs為48khz要求信號的截止頻率fc=10.8khz輸入序列位寬為9位(最寬位為符號位)。
3 dspbuilder介紹
dspbuilder是altera推出的一個dsp開發(fā)工具,它在quartusⅱfpga設(shè)計(jì)環(huán)境中集成了mathworks的matlab和simulinkdsp開發(fā)軟件[2]。
以往matlab工具的使用往往作為dsp算法的建模和基于純數(shù)學(xué)的仿真,其數(shù)學(xué)模型無法為硬件dsp應(yīng)用系統(tǒng)直接產(chǎn)生實(shí)用程序代碼,仿真測試的結(jié)果也僅僅是基于數(shù)學(xué)算法結(jié)構(gòu)。而以往fpga所需的傳統(tǒng)的基于硬件描述語言(hdl)的設(shè)計(jì)由于要考慮fpga的硬件的δ延時與vhdl的遞歸算法的銜接,以及補(bǔ)碼運(yùn)算和乘積結(jié)果截取等問題,相當(dāng)繁雜。
對dsp是builder而言,頂層的開發(fā)工具是matlab/simulink整個開發(fā)流層幾乎可以在同一環(huán)境中完成,真正實(shí)現(xiàn)了自定向下的設(shè)計(jì)流程,包括dsp系統(tǒng)的建模、系統(tǒng)級仿真、設(shè)計(jì)模型向vhdl硬件描述語言代碼的轉(zhuǎn)換、rtl(邏輯綜合registertransferlevel)級功能仿真測試、編譯適配和布局布線、時序?qū)崟r仿真直至對dsp目標(biāo)器件的編程配置,整個設(shè)計(jì)流程一氣呵成地將系統(tǒng)描述和硬件實(shí)現(xiàn)有機(jī)地融為一體,充分顯示了現(xiàn)代電子設(shè)計(jì)自動化開發(fā)的特點(diǎn)與優(yōu)勢。
4 fir數(shù)字濾波器的dspbuilder設(shè)計(jì)
4.1 fir濾波器參數(shù)選取
用matlab提供的濾波器設(shè)計(jì)的專門工具箱———fdatool仿真設(shè)計(jì)濾波器,滿足要求的flr濾波器幅頻特性如圖1,由于浮點(diǎn)小數(shù)fpga中實(shí)現(xiàn)比較困難,且代價(jià)太大,因而需要將濾波器的系數(shù)和輸入數(shù)據(jù)轉(zhuǎn)化為整數(shù),其中量化后的系數(shù)在matlab主窗口可直接轉(zhuǎn)化,對于輸入數(shù)據(jù),可乘上一定的增益用altbus控制位寬轉(zhuǎn)化為整數(shù)輸入。
4.2 fir濾波器模型建立
根據(jù)fir濾波器原理,可以利用fpga來實(shí)現(xiàn)fir濾波電路,dspbuilder設(shè)計(jì)流程的第一步是在matlab/simulink中進(jìn)行設(shè)計(jì)輸入,即在matlab的simulink環(huán)境建立一個mdl模型文件,用圖形方式調(diào)用alteradspbuilder和其他的simulink庫中的圖形模塊,構(gòu)成系統(tǒng)級或算法級設(shè)計(jì)框圖(或稱simulink建模),如圖2所示。
4.3 基于dspbuilder的濾波器仿真
輸入信號分別采用頻率f1=8khz和f2=16khz的兩個正弦信號進(jìn)行疊加。其中的仿真波形如圖3所示,從fir濾波電路的仿真結(jié)果看出,輸入信號通過濾波器后輸出基本上變成單頻率的正弦信號,進(jìn)一步通過頻譜儀可看出f2得到了較大的抑制,與條件規(guī)定的fc=10.8khz低通濾波器相符合,至此完成了模型仿真。
4.4 運(yùn)用modelsim進(jìn)行功能仿真
在simulink中進(jìn)行的仿真是屬于系統(tǒng)驗(yàn)證性質(zhì)的,是對mdl文件進(jìn)行的仿真,并沒有對生成的vhdl代碼進(jìn)行過仿真。事實(shí)上,生成vhdl描述是rtl級的,是針對具體的硬件結(jié)構(gòu)的,而在matlab的simulink中的模型仿真是算法級(系統(tǒng)級)的,是針對算法實(shí)現(xiàn)的,這二者之間有可能存在軟件理解上的差異,轉(zhuǎn)換后的vhdl代碼實(shí)現(xiàn)可能與mdl模型描述的情況不完全相符,這就是需要針對生成的rtl級vhdl代碼進(jìn)行功能仿真。
在此,筆者利用modelsim對生成的vhdl代碼進(jìn)行功能仿真。設(shè)置輸入輸出信號均為模擬形式,出現(xiàn)如圖4所示的仿真波形,可以看到這與simulink里的仿真結(jié)果基本一致,即可在quartusⅱ環(huán)境下進(jìn)行硬件設(shè)計(jì)。
4.5 在fpga器件中實(shí)現(xiàn)fir濾波器
在quartusⅱ環(huán)境中打開dspbuilder建立的quartusⅱ項(xiàng)目文件firl.qpf。在quartusⅱ中進(jìn)行再一次仿真,由此可以看到符合要求時序波形,然后指定器件引腳并進(jìn)行編譯,最后下載到fpga器件中,就可以對硬件進(jìn)行測試,加上clcok信號和使能信號,用信號發(fā)生器產(chǎn)生所要求的兩個不同頻率的正弦信號,就可以在示波器上看到濾波以后的結(jié)果,需要設(shè)計(jì)不同的濾波器電路時,僅修改fir濾波模型文件就可以實(shí)現(xiàn),這樣不僅避免了繁瑣的vhdl語言編程,而且便于進(jìn)行調(diào)整。
5 結(jié)束語
在利用fpga進(jìn)行數(shù)字濾波器的開發(fā)時,采用dspbuilder作為設(shè)計(jì)工具能加快進(jìn)度。當(dāng)然,在實(shí)際應(yīng)用中,受精度、速度和器件選擇方面的影響,可以對其轉(zhuǎn)化的vhdl進(jìn)行進(jìn)一步的優(yōu)化。
評論