譚家杰
(衡陽師范學(xué)院物理與電子信息科學(xué)系,衡陽 421008)
數(shù)字濾波器按照其結(jié)構(gòu)分成無限脈沖響應(yīng)型(IIR,Infinite Impulse Response)和有限脈沖響應(yīng)型(FIR,F(xiàn)inite Impusle Response)。有限脈沖響應(yīng)型的設(shè)計(jì)方法有窗函數(shù)法、頻率采樣法及其它方法。數(shù)字濾波器實(shí)現(xiàn)方式主要有以下方法:①直接用DSP(Digital Signal Processor)硬件實(shí)現(xiàn)設(shè)計(jì)的數(shù)字濾波器[1-4]。②用 FPGA (Field Programmable Gate Array)器件實(shí)現(xiàn)[5-8]。③通用計(jì)算機(jī)或單片機(jī)實(shí)現(xiàn)[5,9]。其中,實(shí)現(xiàn)方式①②速度較快,因而應(yīng)用較廣泛,方式③受限制,通用機(jī)一般用于設(shè)計(jì)濾波器,單片機(jī)則實(shí)現(xiàn)一些特殊的數(shù)字濾波器。一般的設(shè)計(jì)方法是采用Matlab 軟件[2-3,6,10-11]或面向?qū)ο筌浖?2-14],根據(jù)給定的濾波器參數(shù)選用相應(yīng)方法設(shè)計(jì)出數(shù)字濾波器,并檢查其幅頻特性、相頻特性是否符合設(shè)計(jì)要求。上述方法各有其特點(diǎn),互有優(yōu)劣。采用Visual Basic6.0 軟件研制出FIR 濾波器設(shè)計(jì)的計(jì)算機(jī)輔助軟件,是可將濾波器的系數(shù)保存并輸出為VHDL(Very-High-Speed Circuit Hardware Description Language)語言的數(shù)字濾波器程序,經(jīng)QuartusII6.0 綜合產(chǎn)生可在線綜合、配置,能實(shí)現(xiàn)FIR 濾波器的在線設(shè)計(jì)、實(shí)現(xiàn)及修改。
FIR 數(shù)字濾波器相對(duì)于IIR 濾波器具有良好的線性相位,缺點(diǎn)是相對(duì)IIR 有較高的階數(shù)。一般的設(shè)計(jì)原理采用加窗函數(shù)方法。首先按照相應(yīng)步驟設(shè)計(jì),得到數(shù)字濾波器的系數(shù);然后驗(yàn)證所設(shè)計(jì)的濾波器是否符合預(yù)先指定的指標(biāo);最后,根據(jù)系統(tǒng)的輸入、輸出信號(hào)以及濾波器的單位沖激響應(yīng)可以給出濾波器的結(jié)構(gòu),并用DSP 硬件實(shí)現(xiàn),用C 語言描述,也可以用FPGA 器件實(shí)現(xiàn),采用VHDL 語言建模設(shè)計(jì)程序[5-6]。用Visual Basic6.0 軟件平臺(tái)按照FIR濾波器原理設(shè)計(jì)出FIR 濾波器設(shè)計(jì)軟件,并導(dǎo)出實(shí)現(xiàn)濾波器的VHDL 程序代碼,最后用FPGA 開發(fā)軟件實(shí)現(xiàn)濾波器,從而完成FIR 數(shù)字濾波器設(shè)計(jì)、實(shí)現(xiàn)。
用Visual Basic6.0 完成FIR 濾波器的設(shè)計(jì),設(shè)計(jì)方法用加窗法,窗函數(shù)有:矩形窗、三角窗、漢明窗、漢寧窗、布萊克曼窗和凱塞窗。其設(shè)計(jì)的界面如圖1 所示。
圖1 FIR 濾波器設(shè)計(jì)界面
選擇濾波器類型包括低通、高通、帶通、帶阻四種,這里用四個(gè)單選鈕,其功能是用于選擇濾波器的類型。加窗類型則采用組合框用于運(yùn)行時(shí)選擇設(shè)計(jì)濾波器的六種加窗類型。
設(shè)置濾波器參數(shù)則采用六個(gè)文本框分別用于輸入通帶衰減、阻帶衰減,阻帶下邊界頻率、阻帶上邊界頻率、通帶下邊界頻率、通帶上邊界頻率。其中,采用濾波器類型為低通或高通濾波器時(shí),下面兩個(gè)輸入文本框控件設(shè)置為不可見,上面兩個(gè)文本框控件分別用于設(shè)計(jì)低通、高通濾波器時(shí)輸入通帶頻率和阻帶頻率。
濾波器設(shè)計(jì)操作主要由六個(gè)按鈕組成,實(shí)現(xiàn)的功能分別是設(shè)計(jì)濾波器、查看幅頻特性、查看相頻特性、導(dǎo)出濾波器系數(shù)、導(dǎo)出VHDL 文件及退出。通過前面介紹的控件設(shè)置濾波器類型、加窗類型及濾波器參數(shù)設(shè)計(jì)后,只有濾波器設(shè)計(jì)按鈕和退出按鈕是可操作的。單擊濾波器設(shè)計(jì)按鈕后,幅頻特性、導(dǎo)出濾波器系數(shù)、導(dǎo)出VHDL 程序按鈕變?yōu)榭刹僮?,此時(shí)可以單擊上述按鈕完成相應(yīng)操作。但是濾波器操作禁止,因此變?yōu)榛疑苑乐怪貜?fù)操作導(dǎo)致導(dǎo)出系數(shù)和VHDL 程序輸出的系數(shù)錯(cuò)誤。單擊幅頻特性后,相頻特性則為可操作。當(dāng)單擊導(dǎo)出濾波器系數(shù)、導(dǎo)出VHDL 程序后,所有按鈕除退出可操作外,其余都不可操作,只有重新選擇濾波器類型或加窗類型或?yàn)V波器參數(shù),濾波器設(shè)計(jì)按鈕才變成可操作。導(dǎo)出濾波器系數(shù)是將所有計(jì)算出來的系數(shù)經(jīng)過量化程序產(chǎn)生適合于FPGA 運(yùn)行的數(shù)據(jù),不同于界面所顯示的。導(dǎo)出VHDL 代碼的功能是直接產(chǎn)生可供QuartusII6.0 軟件綜合的代碼,經(jīng)編譯后可以直接配置到芯片中,從而達(dá)到在線修改濾波器的目的。
為驗(yàn)證設(shè)計(jì)軟件運(yùn)行是否正確,給出了兩個(gè)實(shí)例,并將設(shè)計(jì)的濾波器分別與matlab 設(shè)計(jì)的濾波器進(jìn)行對(duì)比。
例1 用凱塞窗設(shè)計(jì)一個(gè)通帶截止頻率0.3π,阻帶截止頻率為0.5π,阻帶衰減為40dB的低通濾波器。
按照例1的要求設(shè)置參數(shù),運(yùn)行設(shè)計(jì)軟件的結(jié)果如圖2 所示。為了將設(shè)計(jì)結(jié)果與matlab 軟件設(shè)計(jì)對(duì)比,分別將兩種設(shè)計(jì)方法設(shè)計(jì)的濾波器系數(shù)用表1 列出。濾波器的長(zhǎng)度為23 且為對(duì)稱,因此表1列出前12個(gè)濾波器系數(shù)。表1 數(shù)據(jù)表明設(shè)計(jì)軟件與matlab 軟件設(shè)計(jì)的濾波器系數(shù)h(11)相差的最大誤差為-0.0004,其余相差很小。采用16 位二進(jìn)制量化,系數(shù)量化最大誤差為-26;8 位量化系數(shù)誤差為-1,采用8 位量化值誤差可以不予考慮。說明設(shè)計(jì)軟件在算法及程序設(shè)計(jì)方面是正確的。
例2 用布萊克曼窗設(shè)計(jì)一個(gè)帶阻FIR 濾波器,通帶下截止頻率為0.2π,阻帶下截止頻率為0.35π,通帶上截止頻率為0.8π,阻帶上截止頻率為0.65π,阻帶最小衰減為-60dB,通帶最大衰減為1dB。
圖2 凱塞窗設(shè)計(jì)低通FIR 濾波器
表1 設(shè)計(jì)FIR 系數(shù)與matlab 設(shè)計(jì)對(duì)比
圖3 布萊克曼窗設(shè)計(jì)高通濾波器
設(shè)計(jì)軟件得到如圖3的結(jié)果,設(shè)計(jì)的濾波器長(zhǎng)度為61,matlab 軟件設(shè)計(jì)的結(jié)果如圖4 所示。對(duì)兩個(gè)圖的幅頻特性進(jìn)行對(duì)比后可知在通帶衰減方面相差不大,主要在阻帶衰減方面,matlab 設(shè)計(jì)的濾波器衰減大近30dB。由于篇幅有限,其它設(shè)計(jì)就不一一列出。經(jīng)過仿真實(shí)驗(yàn)證明,本設(shè)計(jì)軟件在設(shè)計(jì)思路、代碼編寫方面都是正確的,因而采用設(shè)計(jì)軟件設(shè)計(jì)的數(shù)字濾波器是可靠的。
FPGA 數(shù)字濾波器的實(shí)現(xiàn)是以計(jì)算機(jī)為平臺(tái),以FPGA 開發(fā)軟件QuartusII6.0為工具,以FPGA 芯片為目標(biāo)器件。由設(shè)計(jì)軟件先設(shè)計(jì)FIR 濾波器,然后導(dǎo)出實(shí)現(xiàn)的VHDL 程序來實(shí)現(xiàn)。數(shù)字濾波器實(shí)現(xiàn)的實(shí)質(zhì)是輸入信號(hào)與數(shù)字濾波器的系數(shù)做卷積過程,可用式(1)實(shí)現(xiàn)[5]。
圖4 matlab 設(shè)計(jì)布萊克曼窗FIR 濾波器幅頻特性
其中x(n)為輸入信號(hào),y(n)為輸出信號(hào),h(n)為濾波器系數(shù),是設(shè)計(jì)軟件得到的。由于FIR 濾波器的階數(shù)較高,為保證其具有線性相位,其結(jié)構(gòu)具有對(duì)稱性,因而將式(1)變?yōu)槭?2)。
在設(shè)計(jì)算法時(shí)充分利用這點(diǎn)來節(jié)約資源,因此只需用濾波器系數(shù)的一半完成實(shí)現(xiàn)工作。
從濾波器的結(jié)構(gòu)可知FPGA 實(shí)現(xiàn)方法主要有:串行方式和并行方式。串行方式是以犧牲時(shí)間為代價(jià),但是其資源的利用率較高。而并行結(jié)構(gòu)則是以消耗大量資源來?yè)Q取時(shí)間的。設(shè)計(jì)軟件采用串行實(shí)現(xiàn),將問題歸結(jié)為下述主要環(huán)節(jié):①濾波器系數(shù)的量化問題。②移位寄存器實(shí)現(xiàn)。③加法器、乘法器。
FPGA 濾波器系數(shù)量化是將設(shè)計(jì)的浮點(diǎn)系數(shù)轉(zhuǎn)換成可供FPGA 實(shí)現(xiàn)的數(shù)據(jù)的過程。量化數(shù)據(jù)類型有:傳統(tǒng)定點(diǎn)數(shù)、非傳統(tǒng)定點(diǎn)數(shù)和浮點(diǎn)數(shù)形式。定點(diǎn)數(shù)包括無符號(hào)整數(shù)、有符號(hào)整數(shù)、二進(jìn)制補(bǔ)碼、二進(jìn)制反碼、正則有符號(hào)數(shù)字系統(tǒng)(CSD,Canonic Signed Digit)。浮點(diǎn)數(shù)相對(duì)于定點(diǎn)數(shù)來說能在很大范圍提供足夠的精度,而定點(diǎn)數(shù)缺乏這方面的優(yōu)勢(shì),但是定點(diǎn)數(shù)在運(yùn)行速度和解決問題的復(fù)雜性方面更有優(yōu)勢(shì)?;谏鲜鲈?,在量化時(shí)必須考慮哪種類型數(shù)據(jù)更加適合系統(tǒng)的運(yùn)算方式。設(shè)計(jì)軟件采用傳統(tǒng)的整數(shù)進(jìn)行系數(shù)量化,既簡(jiǎn)化了設(shè)計(jì)軟件算法程序的復(fù)雜度,又給實(shí)現(xiàn)帶來方便。VHDL 程序中采用std_logic_vector 數(shù)據(jù)來實(shí)現(xiàn)整型數(shù)據(jù),并且開發(fā)環(huán)境有函數(shù)進(jìn)行轉(zhuǎn)換,如conv_integer 函數(shù),易于程序?qū)崿F(xiàn)。量化時(shí)采用定點(diǎn)整型數(shù)據(jù)。
移位寄存器的任務(wù)是將外部經(jīng)A/D 轉(zhuǎn)換輸入的數(shù)據(jù),依次輸入與濾波器的系數(shù)相乘,需在統(tǒng)一時(shí)鐘信號(hào)和使能信號(hào)的作用下完成數(shù)據(jù)的移位并保存。根據(jù)上述原理,設(shè)置若干個(gè)signal 暫存信號(hào),其數(shù)據(jù)類型與濾波器數(shù)據(jù)類型一致,且數(shù)據(jù)寬度相同,用于將輸入信號(hào)移位后存儲(chǔ)。暫存信號(hào)的個(gè)數(shù)與濾波器系數(shù)相同。再設(shè)計(jì)一個(gè)進(jìn)程起移位寄存器的作用,這個(gè)進(jìn)程的敏感信號(hào)為時(shí)鐘和復(fù)位信號(hào)。這樣的方法有利于Visual Basic 編程實(shí)現(xiàn)。
乘法器是數(shù)字濾波器實(shí)現(xiàn)的關(guān)鍵,根據(jù)VHDL 代碼并行性的特點(diǎn),單獨(dú)設(shè)計(jì)乘法器模塊以供調(diào)用。乘法器模塊采用移位相加實(shí)現(xiàn),其原理是通過將中間暫存數(shù)據(jù)進(jìn)行移位,然后相加實(shí)現(xiàn)。而設(shè)計(jì)軟件根據(jù)FIR 濾波器長(zhǎng)度由公式(2)生成語句完成乘積運(yùn)算。加法器采用二進(jìn)制加法運(yùn)算。加法器、乘法器和移位寄存器在控制模塊的統(tǒng)一作用下依次完成。
為了對(duì)導(dǎo)出的FIR 濾波器VHDL 文件進(jìn)行仿真,先設(shè)計(jì)一個(gè)加矩形窗的FIR 低通濾波器,阻帶衰減為40dB,通帶截止頻率為0.3π,阻帶截止頻率為0.4π。設(shè)計(jì)得到濾波器長(zhǎng)度為11的低通濾波器。將設(shè)計(jì)軟件導(dǎo)出的VHDL 文件在QuartusII 6.0平臺(tái)上進(jìn)行編譯、綜合。然后研究QuartusII6.0 綜合的濾波器是否滿足要求,輸入濾波器信號(hào)為:
進(jìn)行仿真時(shí),輸入信號(hào)量化為整型數(shù)據(jù)。取一序列{126,-8,71,-56,-31,-62,-70,18,-31,111,0,111,-31,18,-70,-63}設(shè)置為輸入信號(hào),建立Waveform 文件,仿真得到仿真數(shù)據(jù)。仿真輸出信號(hào)為{0,- 6048,- 4656,4472,23686,38574,36837,17293,-13864,-35579,-44127,-35670,- 13363,13808,36214,44406,36262,12360,-17351,-32835,-32583,-15591,-1844,5880,3024,0}。由于不知道輸出是否將高頻部分信號(hào)濾除,因此用Matlab 軟件驗(yàn)證。具體做法是將輸入信號(hào)做256 點(diǎn)的FFT 運(yùn)算,然后將輸出信號(hào)也做256點(diǎn)的FFT,得到如圖5的仿真信號(hào)。
圖5(a)為輸入信號(hào)的頻譜,其成分有歸一化頻率為0.1的低頻和0.45的高頻,圖5(b)是輸入信號(hào)通過濾波器后,僅剩下低頻部分。這個(gè)結(jié)果說明,設(shè)計(jì)軟件導(dǎo)出的VHDL 文件是正確的。
采用Visual Basic6.0 設(shè)計(jì)出了FIR 數(shù)字濾波器的設(shè)計(jì)軟件,設(shè)計(jì)軟件設(shè)計(jì)的濾波器正確可靠。該設(shè)計(jì)方法不同于以往,其創(chuàng)新在于能直接導(dǎo)出VHDL 文件供QuartusII 6.0 綜合、配置,從而實(shí)現(xiàn)了濾波器的在線設(shè)計(jì)、在線修改。經(jīng)QuartusII 6.0 仿真、配置測(cè)試,證明這種方法是正確可行的。
圖5 濾波器效果對(duì)比圖
[1]楊達(dá)亮,王巨豐.基于DSP的IIR 數(shù)字濾波器的設(shè)計(jì)與實(shí)現(xiàn)[J].電子技術(shù)應(yīng)用,2006(11):116-120.
[2]陸廣平,卜迎春.基于DSP的FIR 數(shù)字濾波器的研究與實(shí)現(xiàn)[J].工業(yè)控制計(jì)算機(jī),2010,23(12):102-103.
[3]鄧婷.基于Matlab 和DSP 數(shù)字濾波器的設(shè)計(jì)與實(shí)現(xiàn)[J].科學(xué)技術(shù)與工程,2011,11(19):4597-4601.
[4]梅志紅,楊萬銓,鄧文華.基于快速原型的數(shù)字濾波器的設(shè)計(jì)和實(shí)現(xiàn)[J].計(jì)算機(jī)仿真,2005,22(2):106-109.
[5]孔陽,武杰,萬娟,等.基于FPGA 和MCU的低成本地震信號(hào)數(shù)字濾波器設(shè)計(jì)[J].核電子學(xué)與探測(cè)技術(shù),2012,32(1):54-58.
[6]張書召,彭杰.基于FPGA的IIR 數(shù)字濾波器的設(shè)計(jì)與實(shí)現(xiàn)[J].工業(yè)控制計(jì)算機(jī),2010,23(1):105-106.
[7]周戈,曾智.改進(jìn)的遺傳算法在數(shù)字濾波器優(yōu)化應(yīng)用研究[J].計(jì)算機(jī)仿真,2011,28(12):215-218.
[8]李?yuàn)?,田克?一種基于FPGA的分布式FIR 數(shù)字濾波器設(shè)計(jì)[J].電聲技術(shù),2012,36(10):29-32.
[9]海玉,陳軍,錢獻(xiàn)芬.一種單片機(jī)數(shù)據(jù)采集系統(tǒng)的數(shù)字濾波器設(shè)計(jì)[J].信息技術(shù),2012(9):175-177.
[10]張大為,姜靜,劉迪.基于FPGA的IIR 低通數(shù)字濾波器的設(shè)計(jì)[J].船電技術(shù),2012,32(2):24-26.
[11]俞興明,周燕.基于DSP的在線FIR 數(shù)字濾波器設(shè)計(jì)及實(shí)現(xiàn)[J].國(guó)外電子測(cè)量技術(shù),2010,29 (5):52-55.
[12]譚家杰,陳淑芳,張?zhí)m英,等.基于Visual Basic6.0IIR數(shù)字濾波器設(shè)計(jì)[J].四川理工學(xué)院學(xué)報(bào)(自然科學(xué)版),2008,21(2):88-91.
[13]王斌.基于Visual DSP++的無限脈沖響應(yīng)數(shù)字濾波器(IIR)設(shè)計(jì)[J].電子元器件應(yīng)用,2012,14(3):36-37.
[14]楊柳,喻金科,張帆.基于delphi的數(shù)字濾波器的設(shè)計(jì)與實(shí)現(xiàn)[J].南昌航空大學(xué)學(xué)報(bào)(自然科學(xué)版),2007,21(3):50-53.