摘 要:基于FIR數(shù)字濾波器的原理和層次化、模塊化設(shè)計(jì)思想,結(jié)合Altera公司的Cyclone II系列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
中圖分類號(hào):TN713 文獻(xiàn)標(biāo)識(shí)碼:B
文章編號(hào):1004-373X(2008)11-089-04
Design and Implementation of FIR Digital Filter Based on Matlab and FPGA
SUN Yaoqi,GAO Huotao,XIONG Chao,RAO Kun
(School of Electronic Information,Wuhan University,Wuhan,430079,China)
Abstract:The paper introduces principle and stratified,modular design idea of FIR digital filter.A hardware design schedule which is using Altera CycloneII family FPGA to realize FIR filter is proposed,the method and process of designing a 32 orders low pass FIR filter using Matlab and Quartus Ⅱ are pointed out.The simulation and practice test demonstrate the correctness of the design.Comparing with traditional digital filter,it has more real-time,flexibility and pracitce characteristics.
Keywords:FIR digital filter;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(ejw)=±|H(ejw)|ejθ(w)
(1)
若要求線性相位,則需:
θ(w)=-τw 或 θ(w)=β-τw
(2)
因而h(n)如果滿足對(duì)稱或反對(duì)稱的條件,就具有線性相位特性,即:
h(n)=h(L-1-n) 或 h(n)=-h(L-1-n)
(3)
數(shù)字濾波器結(jié)構(gòu)有很多種,偶對(duì)稱FIR濾波器的直接型結(jié)構(gòu)如圖1所示。
圖1 偶對(duì)稱FIR濾波器的直接型結(jié)構(gòu)
其中x(n),y(n)分別為輸入輸出時(shí)間序列。容易得到32階偶對(duì)稱FIR濾波器的輸入輸出關(guān)系,如式(4)所示:
y(n)=h(0)*[x(0)+x(31)]+h(1)*[x(1)+
x(30)]++h(15)*[x(15)+x(16)]
(4)
根據(jù)以上分析,可以把對(duì)稱結(jié)構(gòu)的FIR數(shù)字濾波器分成“移位相加單元、乘法器、輸出相加及截位輸出”四塊,如圖2所示。
圖2 分塊后系統(tǒng)框圖
對(duì)于長(zhǎng)度為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所示。
圖3 用Matlab設(shè)計(jì)數(shù)字濾波器
表1 32階FIR低通數(shù)字濾波器系數(shù)表
4 濾波器的FPGA實(shí)現(xiàn)及仿真測(cè)試
按照?qǐng)D1、圖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位。其中Din[13..0]是二進(jìn)制補(bǔ)碼輸入,DoutXX[14..0]是移位相加后數(shù)據(jù)輸出。Verilog HDL程序關(guān)鍵語句為:
assign Dintemp=(Din[13]);
({Din[13],1′b1,Din[12:0]}):Din;
//寄存器組首尾相加,并存入緩沖器
……
移位相加單元模塊圖如圖4所示。
圖4 移位相加模塊
移位相加單元時(shí)序仿真:仿真結(jié)果如圖5所示,輸入一個(gè)階躍信號(hào)(8191),從圖5中可以看出,輸出數(shù)據(jù)從Douta 到 Doutp依次有一個(gè)時(shí)鐘周期的時(shí)延,并且總的時(shí)延和濾波器階數(shù)(32)相等,最后輸出數(shù)據(jù)是16 382=8 191*2,和理論計(jì)算值相同。
圖5 移位相加模塊仿真時(shí)序圖
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所示。
圖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)輸出分別為Ra,Rb,Rc和Rd。這樣設(shè)計(jì)不失一般性,仿真無誤后再擴(kuò)充到16個(gè)即可。仿真結(jié)果如圖7所示。
圖7 乘法器模塊仿真時(shí)序圖
4.3 乘法器輸出結(jié)果相加
16路數(shù)據(jù)相加后位數(shù)被擴(kuò)為33+4=37,另外要在其輸出端加一寄存器,以消除毛刺。此模塊原理圖如圖8所示。
圖8 相加輸出模塊
相加輸出模塊仿真:實(shí)際用到的是16輸入的加法器,為便于仿真測(cè)試,輸入先設(shè)為4路,仿真結(jié)果如圖9所示。
圖9 相加輸出模塊仿真時(shí)序圖
4.4 截位輸出
截位是濾波器設(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ī)。截位用Verilog HDL實(shí)現(xiàn)的語句是:
assign FIRout={Dtemp[36],Dtemp[29:15]};
此模塊的原理圖如圖10所示,其中FIRout[15..0]是濾波器的最終輸出。
圖10 輸出截位模塊
在Quartus Ⅱ 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)。其原理框圖如圖11所示。
圖11 測(cè)試電路原理框圖
測(cè)試時(shí)把一被干擾的模擬信號(hào)輸入ADC,采樣得到的數(shù)據(jù)經(jīng)過FPGA和USB傳輸?shù)接?jì)算機(jī)上,然后用Matlab顯示出其時(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。
圖12 未濾波的信號(hào)
5.2 濾波后信號(hào)波形
把濾波器程序下載到FPGA,輸入信號(hào)不變。濾波后波形如圖13所示。
圖13 濾波后的信號(hào)
前后對(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ù)用Matlab顯示出來并做比較,測(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à)值。
參 考 文 獻(xiàn)
[1]Uwe Meyer-Baese.Digital Signal Processing with Field Programmable Gate Arrays.Tsinghua University Press, 2006.
[2]Sanjit K Mitra.Digital Signal Processing:A Computer-Based Approach.Tsinghua University Press,2004.
[3]Michael D Ciletti.Advanced Digital Design with the Verilog HDL\\[M\\].Publishing House of Electronics Industry,2007.
[4]程佩清.數(shù)字信號(hào)處理教程\\[M\\].北京:清華大學(xué)出版社,2003.
[5]郭曉宇.基于FPGA實(shí)現(xiàn)FIR數(shù)字濾波器的研究\\[D\\].武漢:武漢大學(xué),2004.
[6]李登峰.基于FPGA和DSP的數(shù)字濾波器設(shè)計(jì)\\[D\\].南京:南京理工大學(xué),2004.
作者簡(jiǎn)介 孫耀奇 男,1983年出生,碩士研究生。主要研究方向?yàn)閿?shù)字信號(hào)處理。
高火濤 男,1964年出生,博士、教授、博士生導(dǎo)師。主要研究方向?yàn)樾麦w制無線電探測(cè)技術(shù)、復(fù)雜系統(tǒng)電磁波傳播和散射、天線及空間信號(hào)處理。
熊 超 男,1983年出生,在讀研究生。主要研究方向?yàn)樾盘?hào)處理。
饒 坤 男,1983年出生,博士研究生。主要研究方向?yàn)閿?shù)字信號(hào)處理。
注:本文中所涉及到的圖表、注解、公式等內(nèi)容請(qǐng)以PDF格式閱讀原文。