靳鵬
(中國電子科技集團公司第二十研究所,西安 710068)
作為數字信號處理中常用的一種基本處理模塊,數字濾波器在數字信號處理中有著重要地位。相比模擬濾波器,數字濾波器具有精度高、穩(wěn)定性好、設計靈活等優(yōu)點,可以實現模擬器件很難達到的嚴格線性相位關系,還能避免模擬濾波器難以克服的溫度漂移、電壓漂移和噪聲等問題。常用的數字濾波器有FIR(Finite Impulse Response)濾波器和IIR(Infinite Impulse Response)濾波器。FIR濾波器在滿足設計要求的幅頻響應的同時,還可以保證嚴格的線性相位特性。并且,由于采用非遞歸結構,不論在理論上還是在實際的有限精度運算中都是穩(wěn)定的。因此,在通信、模式識別、圖像處理、頻譜分析等領域都得到了廣泛的應用[1]。
FIR濾波器的實現方法主要有以下幾種:專用數字濾波器集成電路、DSP和可編程邏輯器件。其中,FPGA的并行處理結構和可編程特性,可以兼顧處理的實時性和設計的靈活性要求,使其成為實現FIR濾波器的優(yōu)良載體,得到了廣泛應用[2]。
目前,基于FPGA實現FIR濾波器主要有乘累加結構和分布式算法結構。乘累加結構需要使用乘法器,在乘法器資源較為緊張的情況下使用會受到限制;分布式算法利用查找表將固定系數的乘累加操作轉換成查找表操作,減少了乘法器資源的消耗。本文基于分布式算法設計了一個低通 FIR濾波器,并在FPGA上實現了該濾波器。
分布式算法(Distributed Arithmetic,DA),最早由Croisier于1973年提出,是一種專門針對乘加運算的技術,廣泛應用于卷積、相關等乘積和計算中[3]。FIR濾波器是一個標準的乘加運算,采用分布式算法來實現FIR濾波器可以很方便地實現流水線處理,提高電路的運行速度,減小電路規(guī)模。不同于傳統(tǒng)乘加算法,分布式算法在完成乘加運算時,通過將輸入數據每一個對應位產生的積預先進行相加形成相應的部分積,然后再對各部分積進行累加得到最終結果。
一個典型的乘加運算可以用式(1)表示:
式(1)中, Ak為常數,xk(n)為輸入變量。xk(n)可以用B位二進制補碼進行表示:
式(2)中,xb(n)表示 x(n)的第b位,xB(n)是符號位。將式(2)帶入式(1)可得:
圖1 DA算法實現結構框圖
由式(3)可以看出,這一表達式是將一個輸入項是常數的乘累加運算操作轉換為查找表操作和累加,用查找表實現一個映射,然后再將此映射經過相應的二次冪加權,即可得到輸出結果,其實現結構框圖如圖1所示。
一個N階FIR濾波器的數學表達式如式(4)所示:
式中, ()yn為濾波器在n時刻的輸出; ()xn為濾波器的采樣輸入; ()hk為濾波器系數, ()xnk-為經過k階延遲的采樣輸入。其中濾波器系數 ()hk為常數,這樣就可以將式(4)轉換為式(3)所示的結構,利用分布式算法來進行運算,實現對輸入數據的濾波處理。
在設計時,首先根據系統(tǒng)具體性能指標要求,生成相應的濾波器系數,之后按照表1構造一個查找表,該表中存儲著式(3)中乘積項所有可能的組合值。通過所有輸入變量相對應位的組合向量對該表進行尋址,并對輸出結果按照圖1所示進行二次冪加權累加,即可得到濾波器輸出結果。
在FPGA中,表1可以通過寄存器或者Rom來實現。查找表的深度與濾波器階數N相關,當階數較大時,查找表的規(guī)模將很龐大,會消耗過多資源,并影響運行速度,不利于實現。為了減小規(guī)模,可以對查找表進行分割,利用部分表計算。由于FIR濾波器是線性濾波器,因此可以對低階濾波器的輸出進行相加,從而得到高階濾波器的輸出。
在使用FPGA實現時,可以將整個濾波器劃分為以下三個模塊:狀態(tài)控制模塊、輸入數據處理模塊和數據累加模塊,如圖2所示。
圖2 濾波器實現結構框圖
各個模塊的功能如下:
狀態(tài)控制模塊用來產生其它模塊的控制信號,實現對輸入數據處理,濾波器系數讀取和數據累加的控制,使各個模塊能按照一定的時序執(zhí)行各自的功能,完成濾波。
表1 查找表構造規(guī)則
輸入數據處理模塊的主要功能是完成對輸入信號的處理,包括對輸入數據的串并轉換,移位寄存,為后續(xù)的處理做準備。
數據累加模塊的主要功能是根據控制信號實現對數據的累加輸出。
本文基于分布式算法,設計了一個低通FIR濾波器,并在 FPGA中實現了該濾波器。在設計時,首先使用MATLAB中的濾波器設計工具,設計生成一組濾波器系數,并根據表1進行查找表的構造。之后在Xilinx公司的vivado編譯設計工具中按照圖2所示的結構框圖實現該濾波器,并完成仿真驗證。圖3和圖4分別是在vivado中的仿真結果和將處理數據導入MATLAB中進行驗證的結果。
圖3 vivado中仿真結果
圖4 MATLAB中仿真驗證結果
本文就 FPGA 器件實現 FIR 數字濾波器進行了研究,基于分布式算法設計了一個FIR濾波器,并在FPGA中實現了該濾波器,經過仿真驗證,符合設計預期。分布式算法是實現常系數乘累加運算的高效方法,FPGA內部有豐富的查找表和存儲器資源,非常適合來實現分布式算法,將二者結合起來可以有效應用于FIR濾波器的設計實現