王一海 ,俞筱楠,姜志鵬
(1.東南大學軟件學院,南京 210096;2.南京工程學院康尼學院,南京 211167;3.金陵科技學院信息技術學院,南京 211169)
數字濾波器用于在數字信號處理中對輸入信號做濾波處理。從實現方法來劃分,可以分為FIR 濾波器和IIR 濾波器[1]。FIR 濾波器容易實現線性相位,且其單位沖激響應為有限長,使得系統總是穩定的[2]。因此FIR 濾波器在通信、圖像處理等領域得到了廣泛應用[3-4]。
設FIR 濾波器的階數為N,則其數學表達式為

在實現FIR 濾波器的眾多方法中,由于FPGA的獨特硬件運行特點,采用FPGA 實現FIR 濾波器具有速度更快的優勢。但是由于FIR 系統只有零點,只有階數較高時才能取得所需的濾波效果[5],因此在FPGA 實現過程中將消耗大量的硬件資源。此時,采用分布式算法實現FIR 濾波器既能保證運算速度,又能大量節省片內資源。
分布式算法是一項重要的FPGA 技術,這種算法使得一般的乘積和計算在FPGA 實施過程中不再需要通用乘法器。分布式算法的基本思想[6]是對于乘積運算

其中c[n]為已知常數,x[n]為數字變量。若x[n]為用B+1 位表達的整型無符號變量,則

其中xb[n]為x 中第b 位,取值為0或1。將上式代入式(2),可知

對上式稍作變換可得


當把x[n]看作由B 位有符號數表示的變量時,上式需稍加變動,根據補碼的計算原理有

將式(6)代入式(2)中,可得

由式(7)可知,運用DA 算法實現有符合運算時,各個變量最高位與常數c[n]之間的乘加和應取負號后再參與后續運算。
基本DA 算法實現框圖如圖1所示。從圖1 可以看出,N個變量的各位依次順序作為地址送往LUT,LUT 從高位開始依次取出預先計算的結果進行累加求和。其中根據最高位B 位的組合獲得的計算結果加負號后參與后續累加操作。

圖1 基本DA 算法實現框圖
使用DA 算法實現FIR 濾波器時,只要將常數c[n]看作是FIR 濾波器的各級系數,而將變量x[n]看作是輸入的待濾波數據即可。
圖1所示的DA 基本算法框圖存在兩個不足。一是對于N 階FIR 濾波器,需要2N個存儲單元。如N=32 時,將需要232個存儲單元,這對FPGA 來說是一個巨大的資源消耗,有的FPGA 芯片甚至無法提供這種容量的存儲單元。二是由于各個變量按位組合后訪問LUT,這就使得在變量的位數較大時,從輸入到結果產生有較大的延遲。
解決以上問題的辦法之一[7-10]是,將原來的一個查找表分成若干小的查找表。設N=LM,即將N階FIR 濾波器分解為L 級M 階FIR 濾波器,則對式(7)作變換,可得

當將原表分為L=8個小表時,每個小查找表的容量為24=16個單元,8個小查找表的總容量減少為128個單元。
圖2 給出了32 階FIR 濾波器的原232單元的查找表分割為8個16 單元的查找表M1~M8,各查找表的輸出依次相加,最后獲得以實現分布式算法的實現框圖。

圖2 32 階FIR 濾波器分解后實現框圖
圖2 中的8 級查找表M1~M7模塊均采用了并行結構,以第1 級查找表為例,其結構框圖如圖3所示。

圖3 圖2 中M1~M8 的內部結構示意圖
圖3 中的每個采樣值設為12 bit 補碼,din為前續電路得到的新采樣值,隨著時鐘的驅動,新采樣值源源不斷地進入濾波器進行濾波。圖中可以看到,各個變量的最高位作為符號位,與各級系數乘加后的結果首先加負號后才參與到后續的運算中。
考慮到工程實際情況,本文以32 階FIR 濾波器為例,針對以12 bit 表達的補碼變量進行FIR 濾波運算。

圖4 MATLAB 中獲得的待濾波時域波形
本文采用MATLAB 的濾波器設計分析工具FDATOOL 設計了一個采樣率為30 kHz、通帶帶寬為8 kHz 的漢寧窗32 階的FIR 濾波器。用于仿真的數據由2.5 kHz、3 kHz 兩個低頻信號和60 kHz 的高頻信號疊加產生。其波形如圖4所示。在MATLAB 對取得的32 階系數進行驗證,驗證結果表明能夠有效濾波,如圖5所示。

圖5 FDATOOL 獲得FIR 系數的濾波效果
將MATLAB 產生的待仿真數據量化為12 bit 的補碼數據后送至FPGA 芯片仿真測試。芯片采用ALTERA 公司的CYCLONEⅡ系列的EP2C8Q208C7。其仿真結果如圖6所示。從圖中可以看出FPGA 的運行結果與MATLAB 結果相符。

圖6 QuartusⅡ中仿真結果
本文對DA 算法及其并行化改進算法進行了研究,編寫了VHDL 代碼,在QUARTUSⅡ軟件中仿真通過。設計中利用FIR 濾波器的線性特性,將32 階FIR 濾波器分解為8個4 階FIR 濾波器,大大減少了LUT 的容量。仿真結果表示從輸入到輸出的時延僅為40ns,遠高于基本DA 算法串行運算時的速度。本文研究的FIR 濾波器實現方法具有較高的實用價值。
[1]胡廣書.數字信號處理理論、算法與實現[M].清華大學出版社,2003.
[2]吳鎮揚.數字信號處理[M].高等教育出版社,2004.
[3]葉和忠.軟件無線電中數字上下變頻器的研究與開發[D].桂林電子科技大學,2010.
[4]李金明.數字FIR 濾波器在監控系統中圖像信號處理方面的應用[D].蘭州理工大學,2006.
[5]戴曜澤,王春雷,朱智強.基于FPGA 高階FIR 濾波器的實現[J].現代電子技術,2012,35(8):110-113.
[6]姜宇柏,游思晴.軟件無線電原理與工程應用[M].機械工業出版社,2007.
[7]周大鵬,何光普,陳莉明.基于改進DA 算法和流水線技術的FIR 數字濾波器設計[J].煤炭技術,2012,32(3):33-35.
[8]趙嵐,畢衛紅,劉豐.基于FPGA 的分布式算法FIR 濾波器設計[J].電子測量技術,2007,30(7):101-104.
[9]于亞萍,劉源,衛勇.利用改進DA 算法FIR 濾波器的仿真與實現[J].計算機工程與應用,2011,47(27):77-79,118.
[10]楊鴻武,丁朋程,王全州.基于FPGA 的高速全并行FIR 濾波器的設計[J].西北師范大學學報(自然科學版),2012,48(1):48-51.
[11]金燕,王明,葛遠香.基于FPGA 的抗混疊FIR 數字濾波器的設計與實現[J].浙江工業大學學報,2010,38(2):192-196.
[12]劉彬彬,林偉.基于Matlab和FPGA 的CIC 濾波器的設計[J].電子器件,2010,33(2):231-234.