鄭爭兵
(陜西理工學(xué)院物理與電信工程學(xué)院,陜西 漢中 723003)
數(shù)字濾波器根據(jù)其單位沖擊響應(yīng)函數(shù)的時(shí)域特性可分為兩類:無限沖擊響應(yīng)(Infinite Impulse Response,IIR)濾波器和有限沖擊響應(yīng)(Finite Impulse Response,F(xiàn)IR)濾波器。與IIR濾波器相比,F(xiàn)IR濾波器具有精確的線性相位、易于硬件實(shí)現(xiàn)和系統(tǒng)穩(wěn)定等優(yōu)點(diǎn),在數(shù)字音頻、圖像處理、衛(wèi)星導(dǎo)航和軍事通信等領(lǐng)域得到了廣泛應(yīng)用[1-3]。
目前,F(xiàn)IR數(shù)字濾波器的主要實(shí)現(xiàn)方法有許多種?;贒SP芯片的設(shè)計(jì)方法采用內(nèi)部特有的硬件結(jié)構(gòu)實(shí)現(xiàn)濾波算法,需要進(jìn)行指令編程同時(shí)還必須在DSP硬件上進(jìn)行實(shí)時(shí)的在線仿真調(diào)試,開發(fā)流程復(fù)雜[4];基于MATLAB和DSP硬件的設(shè)計(jì)方法利用MATLAB進(jìn)行輔助設(shè)計(jì)提取濾波器系數(shù),但是需要在DSP上編寫專門適合數(shù)字信號(hào)處理的指令代碼,指令對(duì)硬件的依賴性強(qiáng),可移植性差;基于FPGA芯片的設(shè)計(jì)方法采用VHDL語言進(jìn)行算法設(shè)計(jì),具有硬件可修改性且代碼不依賴于芯片,但是代碼仿真和調(diào)試相對(duì)復(fù)雜,開發(fā)周期相對(duì)較長[5-6]。因此,提出了一種基于DSP Builder工具的設(shè)計(jì)方法。該方法在MATLAB軟件的Simulink環(huán)境下,采用Altera公司的DSP Builder工具箱,實(shí)現(xiàn)系統(tǒng)級(jí)的圖形化模型仿真,并生成最終用于FPGA下載的VHDL代碼。該方法能夠靈活地設(shè)計(jì)濾波器結(jié)構(gòu),開發(fā)容易,易于進(jìn)行功能的擴(kuò)展和升級(jí)。
DSP Builder是Altera公司推出的FPGA的系統(tǒng)級(jí)設(shè)計(jì)開發(fā)工具,將MATLAB/Simulink系統(tǒng)級(jí)設(shè)計(jì)工具的算法開發(fā)、仿真和驗(yàn)證功能與VHDL綜合,仿真和實(shí)現(xiàn)結(jié)合在一起,簡化設(shè)計(jì)過程,提高設(shè)計(jì)效率,進(jìn)一步推動(dòng)了FPGA在數(shù)字信號(hào)處理領(lǐng)域的應(yīng)用。DSP Builder在Simulink環(huán)境中以Simulink的圖形模塊形式出現(xiàn),利用自身Altera DSP Builder模塊和已有的MATLAB函數(shù)和Simulink模塊進(jìn)行圖形化模型設(shè)計(jì)和仿真。另外,DSP Builder利用 SignalCompiler模塊把MATLAB/Simulink中的設(shè)計(jì)算法模型轉(zhuǎn)換為QuartusⅡ軟件工具可編譯的VHDL文件。基于DSP Builder工具設(shè)計(jì)FIR濾波器的過程如圖1所示。
首先根據(jù)FIR濾波器設(shè)計(jì)指標(biāo)確定濾波器結(jié)構(gòu),在MATLAB/Simulink環(huán)境中建立一個(gè)模型文件(后綴mdl文件),用圖形方式調(diào)用Altera DSP Builder模塊和其它Simulink庫中的模塊,構(gòu)成算法級(jí)設(shè)計(jì)框圖;接著使用MATLAB中使用濾波器設(shè)計(jì)工具箱FDATool獲取濾波器的設(shè)計(jì)參數(shù),對(duì)圖形模塊進(jìn)行參數(shù)配置,利用Simulink的圖形化仿真、分析功能,分析此設(shè)計(jì)模型的正確性,完成模型仿真;然后SignalCompiler工具將Simulink的模型文件轉(zhuǎn)化為寄存器傳輸級(jí)的VHDL文件;最后在QuartusⅡ9.0中編譯VHDL文件,下載FPGA硬件進(jìn)行功能測(cè)試驗(yàn)證。
圖1 基于DSP Builder設(shè)計(jì)FIR濾波器流程圖
FIR濾波器的差分方程表達(dá)式為
其中,N是濾波器的階數(shù),單位脈沖響應(yīng)h(n)是濾波器系數(shù),x(n)是輸入信號(hào),y(n)是濾波后的輸出信號(hào)。由(1)式可見,F(xiàn)IR濾波算法實(shí)質(zhì)是一種乘累加運(yùn)算。據(jù)此可知FIR濾波器采用直接型的結(jié)構(gòu)來實(shí)現(xiàn)較為簡單。如圖2所示,輸入信號(hào)x(n)經(jīng)過不同的延遲因子z-1與適當(dāng)?shù)南禂?shù)h(k)加權(quán),然后將所得乘積相加就得到輸出信號(hào)y(n)。x(n)是經(jīng)A/D轉(zhuǎn)換后得到的數(shù)字采樣序列,y(n)是經(jīng)過濾波器后的輸出數(shù)字序列。該結(jié)構(gòu)中,F(xiàn)IR濾波器的實(shí)現(xiàn)關(guān)鍵是系數(shù)h(k)的確定和延遲因子z-1的實(shí)現(xiàn)[7]。
圖2 FIR濾波器的結(jié)構(gòu)
FIR濾波器設(shè)計(jì)方法主要有窗函數(shù)法、頻率采樣法和等波紋最佳逼近法,這里采用窗函數(shù)法。本文以設(shè)計(jì)FIR低通濾波器為例,說明基于Altera DSP Builder的FIR數(shù)字濾波器的實(shí)現(xiàn)方法。設(shè)計(jì)的FIR低通濾波器具體指標(biāo)為:階數(shù)8,通帶截止頻率1000 Hz,采樣頻率8000 Hz,采用漢明窗,10位輸入數(shù)據(jù)寬度,8位系數(shù)數(shù)據(jù)寬度,直接型I型結(jié)構(gòu)。
MATLAB中的濾波器設(shè)計(jì)工具箱FDATool具有良好的操作界面,能夠完成濾波器的設(shè)計(jì),實(shí)現(xiàn)參數(shù)提取和性能分析功能。首先打開MATLAB,在命令窗口中輸入FDAtool,設(shè)置當(dāng)前設(shè)計(jì)的濾波器參數(shù),其FDAtool設(shè)計(jì)濾波器的界面如圖3所示。
根據(jù)設(shè)計(jì)的要求,濾波器的類型指定為Lowpass(低通),濾波器的設(shè)計(jì)方法為FIR(Window),Window窗函數(shù)選為 Hamming,指定濾波器階數(shù)設(shè)置為7[8],采樣頻率 Fs為8000 Hz,截止頻率 Fc為1000 Hz,濾波器結(jié)構(gòu)選為直接I型。指定完成這些濾波器設(shè)計(jì)參數(shù)后,點(diǎn)擊DesignFilter,開始生成濾波器系數(shù)。由于浮點(diǎn)小數(shù)在FPGA中實(shí)現(xiàn)比較困難,因而需要將濾波器的系數(shù)轉(zhuǎn)化為整數(shù)。在菜單File→Export→Variable Numbers中導(dǎo)出生成濾波器系數(shù)數(shù)值Num,利用函數(shù)round(Num*(2^10))得到10位的整數(shù)系數(shù)數(shù)值如下:
圖3 FDAtool設(shè)計(jì)濾波器的界面
Simulink是MATLAB中一個(gè)專門用于對(duì)動(dòng)態(tài)系統(tǒng)進(jìn)行建模、仿真和分析的軟件包[9]。通過調(diào)用Altera DSP Builder和Simulink庫中的圖形模塊,構(gòu)成FIR數(shù)字濾波器的系統(tǒng)結(jié)構(gòu)框圖(圖4)。該模型主要由8階直接型FIR濾波器模塊和測(cè)試輸入信號(hào)模塊組成。8階直接型FIR濾波器模塊主要通過延時(shí)模塊、系數(shù)增益模塊和累加模塊完成濾波功能。測(cè)試輸入信號(hào)模塊主要由掃頻電路產(chǎn)生一個(gè)包含任意頻率的掃頻信號(hào),該信號(hào)用來驗(yàn)證FIR濾波器模塊的正確性。為了便于觀察,通過示波器模塊獲取仿真結(jié)果。
在設(shè)計(jì)的過程,關(guān)鍵是對(duì)圖形模塊的參數(shù)配置。增益 Gain模塊:(Gain0,Gain1,Gain2,Gain3,Gain4,Gain5,Gain6,Gain7)在庫 Altera DSP Builder中 Ahmetic庫,參數(shù)“Gain Value”分別設(shè)為“3,30,129,238,238,129,30,3”,參數(shù)“Gain Value number of bit”設(shè)為“10”,參數(shù)“Number of Pipeline Levels”設(shè)為“0”,不選擇Use LPM;延時(shí)器Delay模塊的延時(shí)參數(shù)“Number of Pipeline Stages”設(shè)置為“1”;加法減法器Parrallel Adder Subtractor模塊的輸入信號(hào)路數(shù)“Number of Inputs”設(shè)置為“8”,“Add(+)Sub(-)”設(shè)置為“+”,其他模塊均要進(jìn)行相應(yīng)的設(shè)置。
在Simulink中建立好基于DSP Builder的FIR濾波器模型后,直接進(jìn)行系統(tǒng)級(jí)的功能仿真驗(yàn)證。為了便于觀察結(jié)果,設(shè)置示波器Scope模塊的仿真時(shí)間參數(shù)要合理。選中其中的“Data history”,把Limit data points to tast:設(shè)為100000。選擇Simulation菜單下的Start項(xiàng),或按下“Ctrl+T”鍵開始啟動(dòng)仿真,得到的仿真波形如圖5所示。
從圖5可以看到,測(cè)試輸入信號(hào)模塊產(chǎn)生一個(gè)周期等幅的掃頻測(cè)試信號(hào),信號(hào)頻率從低頻變化到高頻。等幅的掃頻測(cè)試信號(hào)經(jīng)FIR濾波器濾波后,信號(hào)的幅度隨頻率增加衰減增大,最終衰減至0,高頻信號(hào)得到了有效抑制,F(xiàn)IR濾波器模型滿足低通的濾波特性,達(dá)到了設(shè)計(jì)要求。
圖4 FIR濾波器模型頂層圖
圖5 FIR濾波器的仿真波形圖
在Simulink中,對(duì)基于DSP Builder的FIR濾波器模型進(jìn)行系統(tǒng)驗(yàn)證仿真,還需要在QuartusⅡ環(huán)境進(jìn)行VHDL代碼的時(shí)序仿真。SignalCompiler工具為系統(tǒng)仿真到硬件實(shí)現(xiàn)提供了一種有效的代碼轉(zhuǎn)換接口。在系統(tǒng)功能驗(yàn)證成功后,將FIR濾波器模型中的測(cè)試輸入信號(hào)模塊去掉,使用SignalCompiler工具生成QuartusⅡ的FIR濾波器工程文件和相應(yīng)的VHDL文件,進(jìn)行FPGA硬件測(cè)試驗(yàn)證。
基于DSP Builder的FIR濾波器的設(shè)計(jì)方法運(yùn)用Altera DSP Builder和Simulink庫中的圖形模塊進(jìn)行模塊化設(shè)計(jì),配置圖形模塊參數(shù),有效地完成了FIR濾波器模型和模型仿真。該方法操作方便,極大地縮短了濾波器的開發(fā)周期,避免了繁瑣的VHDL語言編程,仿真驗(yàn)證過程簡單,提高了數(shù)學(xué)信號(hào)處理算法的開發(fā)效率。該方法將為FPGA芯片在信號(hào)處理領(lǐng)域的應(yīng)用提供更為廣闊的空間。
[1]鄭爭兵.一種適用于電視頻段的接收系統(tǒng)[J].電視技術(shù),2011,35(19):62-64.
[2]陳正濤.光纖HFBR-1414發(fā)射器的驅(qū)動(dòng)電路設(shè)計(jì)[J].國外電子測(cè)量技術(shù),2010,29(5):79-80.
[3]鄭爭兵.開放式通信教學(xué)實(shí)驗(yàn)系統(tǒng)設(shè)計(jì)[J].實(shí)驗(yàn)室研究與探索,2012,31(3):55-58.
[4]鄭爭兵.基于MATLAB和DSP的數(shù)字濾波器設(shè)計(jì)[J].電子質(zhì)量,2011(10):30-31.
[5]韓團(tuán)軍.基于VHDL步進(jìn)電機(jī)控制器研制[J].電腦知識(shí)與技術(shù),2009,25(5):7300-7302.
[6]鄭爭兵.基于FPGA的FSK調(diào)制解調(diào)系統(tǒng)設(shè)計(jì)[J].陜西理工學(xué)院學(xué)報(bào):自然科學(xué)版,2012,28(5):20-21.
[7]鄭爭兵.基于FPGA的FIR濾波器的設(shè)計(jì)[J].通信電源技術(shù),2008,25(3):45-46.
[8]羅韓君,劉明偉,王成.基于DSP Builder的FIR濾波器設(shè)計(jì)與實(shí)現(xiàn)[J].微計(jì)算機(jī)信息,2009,25(1):148-149.
[9]彭雪峰,汪臨偉,許建平.基于 MATLAB與 QUARTUSⅡ的 FIR濾波器設(shè)計(jì)與驗(yàn)證[J].電子設(shè)計(jì)工程,2009,17(11):118-119.