謝海霞,孫志雄
(瓊州學(xué)院電子信息工程學(xué)院,海南 三亞572022)
隨著信息技術(shù)、計算機和半導(dǎo)體集成電路的飛速發(fā)展,數(shù)字濾波器的理論與實現(xiàn)技術(shù)也獲得極大的發(fā)展,并已經(jīng)應(yīng)用及滲透到許多重要學(xué)科和技術(shù)領(lǐng)域中。根據(jù)單位沖激響應(yīng)函數(shù)的時域特性數(shù)字濾波器可分為IIR 濾波器和FIR 濾波器,其中FIR 濾波器是數(shù)字信號處理中常用部件,它的最大優(yōu)點在于設(shè)計任何幅頻特性時,可以具有嚴(yán)格的線性相位,這一點對數(shù)字信號的實時處理非常關(guān)鍵,因而受到人們的青睞[1-5]。
FIR 濾波器的設(shè)計實現(xiàn)大致有兩種方法:一種是軟件實現(xiàn),使用高級語言如C/C++、MATLAB 等,在通用的計算機上實現(xiàn),這種方法多用于教學(xué)或算法仿真,不能實現(xiàn)實時性。另一種是硬件實現(xiàn),采用可編程邏輯器件(CPLD/FPGA)。FPGA 具有靈活的可編程邏輯,突破了并行處理與流水級數(shù)的限制,它所具有的查找表結(jié)構(gòu)非常適用于實現(xiàn)實時快速可靠的FIR 濾波器,在加上Verilog HDL 語言靈活的描述方法以及與硬件無關(guān)的特點,使得使用Verilog HDL 語言基于FPGA 芯片實現(xiàn)FIR 濾波器成為研究方向[3]。本文對基于FPGA 的FIR 數(shù)字濾波器實現(xiàn)進行了研究,并設(shè)計一個16 階的FIR 低通濾波器[6-10]。
FIR 有限脈沖響應(yīng)濾波器是數(shù)字濾波器的一種,它的特點是單位脈沖響應(yīng)是一個有限長序列,其數(shù)學(xué)表達式為:
式中,N 表示FIR 濾波器的抽頭數(shù),y(n)表示第n 時刻的輸出樣本,h(k)表示FIR 濾波器的第k 級抽頭系數(shù),x(n-k)表示延時k 個抽頭的輸入信號。根據(jù)式(1)可得FIR 濾波器的直接型結(jié)構(gòu),如圖1 所示。
圖1 直接型FIR 濾波器的結(jié)構(gòu)示意圖
用加法器和乘法器不難實現(xiàn)這種結(jié)構(gòu)的FIR 濾波器,傳給每個乘法器的操作數(shù)就是一個FIR 系數(shù)。所需乘法次數(shù)是N,加法次數(shù)是N-1。但這種直接實現(xiàn)的FIR 濾波器不論速度上還是資源耗用上都不理想。在使用FIR 濾波器的實際系統(tǒng)中,常常都會利用了FIR 濾波器的線性相位的新特點,因此根據(jù)線性相位FIR 濾波器的系數(shù)具有對稱性這一特點,即h(n)=h(N-1-n)或h(n)= -h(huán)(N-1-n);因此,線性相位FIR 濾波器的直接型結(jié)構(gòu)可改進為如圖2 所示。
圖2 線性相位FIR 濾波器的直接型結(jié)構(gòu)改進圖(N 為偶數(shù))
在改進的結(jié)構(gòu)中,N 次乘法減少為N/2 次,而加法次數(shù)增加了N/2 次,總的運算量得以減少。以乘法次數(shù)表示,其總運算量為N/2 次,這種直接型結(jié)構(gòu)簡單明了,系統(tǒng)調(diào)整方便[11-12]。
本文設(shè)計的FIR 數(shù)字濾波器是低通濾波器,其設(shè)計指標(biāo)為:采樣頻率是5 MHz,截止頻率是1.5 MHz,輸入、輸出數(shù)據(jù)寬度是8 位,階數(shù)是15 階,通帶衰減Ap=4 dB。
使用MATLAB6.5 軟件中Filter Design Toolbox工具箱中的FDATool,選擇低通濾波器,Kaiser 窗設(shè)計方法,F(xiàn)s=5 MHz,F(xiàn)c=1.5 MHz,階數(shù)為15 階,線性相位。圖3 是軟件仿真結(jié)果圖,如圖3 所示,實線條是濾波器的幅頻響應(yīng),頻率為1.5 MHz 處幅頻響應(yīng)衰減Ap=4.8 dB,虛線條是相頻響應(yīng),相頻特性是線性,仿真結(jié)果滿足設(shè)計指標(biāo)要求。最后導(dǎo)出所設(shè)計的濾波器抽頭系數(shù),對其四舍五入處理后,16個抽頭系數(shù)如下:
h[0]=h[15]=0.039 9;h[1]=h[14]=-0.014 5;h[2]=h[13]=-0.045 3;h[3]=h[12]=-0.056 0;h[4]=h[11]=0.027 0;h[5]=h[10]=-0.126 5;h[6]=h[9]=0.065 4;h[7]=h[8]=0.514 9。
圖3 FIR 數(shù)字低通濾波器頻域特性圖
FIR 濾波器的抽頭系數(shù)多為小數(shù),且有符號,因此抽頭系數(shù)的編碼是必須考慮的一個問題。常用的編碼方式有二進制補碼、反碼、有符號數(shù)值表示法等。
本例中采用以下的編碼方式:將十進制數(shù)用2n數(shù)相加、減的形式表示出來,這種編碼方法也被稱SD(Signed Digit Numbers)編碼,該編碼與傳統(tǒng)的二進制編碼不同,它使用三個值來表示數(shù)字,即0、1、-1,其中-1 經(jīng)常寫為。例如:
2710=3210-410-12=1000SD(下標(biāo)表示進制)
通??梢酝ㄟ^非零元素的數(shù)量來估計乘法的效率,比如乘法操作:A* x[n],其具體實現(xiàn)過程如下。
若A10=(ak-1ak-2…a0)2,則
可以明顯地看到,乘法的成本與A 中非零元素ak的數(shù)量有直接的關(guān)系。而普通二進制編碼需要4 個加法器,用SD 編碼只需要3 個加法器。
SD 編碼通常不是唯一的,比如:
在上面的SD 編碼中,由于第1 種方式具有最少數(shù)量的1 和,因此它的乘法成本最低,因此應(yīng)該盡量減少編碼中1 和的數(shù)量,以將乘法器實現(xiàn)的成本降低到最低,通常將這種包含最少1 和數(shù)量的SD 編碼稱為最佳SD 編碼。
在濾波器系數(shù)的處理上,采用最佳SD 編碼方式,以減少對器件資源的在耗用。濾波器系數(shù)的SD編碼如下,每個抽頭系數(shù)均先左移7 位(乘以128)。
FIR 濾波器采用對稱結(jié)構(gòu),每個抽頭的輸出分別乘以相應(yīng)加權(quán)的二進制值,再將結(jié)果相加。同時利用濾波器系數(shù)的偶對稱特性,把輸入信號x(n)進行以下等效:
這樣,16 階FIR 濾波器的輸出就可以用下面的算式得到:
在得到結(jié)果后,再將結(jié)果右移7 位,即得到正確的結(jié)果。根據(jù)以上設(shè)計思路,用Verilog HDL 語言設(shè)計。仿真結(jié)果如圖4 所示。
圖4 16 階FIR 濾波器的仿真結(jié)果
對QuartusⅡ仿真結(jié)果和MATLAB 計算的理論值進行比較分析,它們之間的誤差如表1 所示。
表1 理論值與仿真結(jié)果
由上面仿真波形可以讀出結(jié)果。經(jīng)比較,仿真結(jié)果與輸出信號理論吻合,除了一個38%的誤差較大,其它的誤差都在可接受范圍內(nèi);且波形基本沒有毛刺,設(shè)計符合要求。(部分比較大的誤差出入是由于在設(shè)計中系數(shù)量化時引入的量化誤差,以及舍位時產(chǎn)生的舍位誤差,在數(shù)據(jù)比較小的時候。這種誤差較為明顯。)仿真結(jié)果正確后把生成的編程數(shù)據(jù)文件下載到FPGA 芯片中即可。
在實際使用的時候,大多數(shù)情況下,人們希望能夠根據(jù)應(yīng)用的不同場所改變?yōu)V波器的參數(shù)和性能,這就需要對濾波器的系數(shù)進行在線配置。本文設(shè)計的可編程濾波器能滿足這一要求。可編程濾波器在數(shù)據(jù)處理上分為兩個過程:第1 步完成濾波器系數(shù)的配置,將系數(shù)配置到抽頭延遲線上;第2 步執(zhí)行乘積和的計算,對乘積進行一位有符號擴展,并加到前面的部分乘積上。本文所介紹的設(shè)計、驗證的方法都是可行的,具有很高的應(yīng)用價值。
[1] Shousheng He,Mats Torkelson.FPGA Implementation of FIR Filters Using Pipelined Bit-Serial Canonical Signed Digit Multipliers[J].IEEE Custom Integrated Circuits Conference,1994(1-4 May):81-84.
[2] 劉在爽,盧瑩瑩.高階FIR 濾波器面向FPGA 的多種實現(xiàn)方法[J].中國有線電視,2008(2):164-168.
[3] 李瑩,路衛(wèi)軍,于敦山. 一種在FPGA 上實現(xiàn)FIR 數(shù)字濾波器的資源優(yōu)化算法[J]. 北京大學(xué)學(xué)報:自然科學(xué)版,2009,45(2);222-226.
[4] 楊麗杰.基于FPGA 的FIR 濾波器設(shè)計方法的研究[J]. 東華大學(xué)學(xué)報,2006,(6):93-97.
[5] 劉悅. FIR 數(shù)字濾波器的設(shè)計與實現(xiàn)[J]. 信息技術(shù),2009,(2):8-9.
[6] 江國強. EDA 技術(shù)與應(yīng)用[M]. 北京:電子工業(yè)出版社,2006.1-15.[M].清華大學(xué)出版社,2010.
[7] 王金明,冷自強. EDA 技術(shù)與Verilog 設(shè)計[M]. 北京:科學(xué)出版社,2008.
[8] 王道.CPLD/FPGA 可編程邏輯器件應(yīng)用與開發(fā)[M].北京:電子工業(yè)出版社,2004.
[9] 冷邦明. 基于FPGA 的數(shù)字信號處理算法研究與高效實現(xiàn)[D].哈爾濱工程大學(xué),2009.
[10] 朱霞,柴志雷,須文波. 基于FPGA 的數(shù)字濾波器乘法模塊改進[J].計算機仿真,2009,26(1):335-338.
[11] 陳后金,薛健,胡健.數(shù)字信號處理[M].第2 版.北京:高等教育出版社,2008.
[12] 何賓.FPGA 數(shù)字信號處理實現(xiàn)原理及方法[M].北京:清華大學(xué)出版社,2010.