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