崔 亮,張芝賢
(沈陽航空航天大學 電子信息工程學院,遼寧 沈陽 110136)
數字濾波器通常都是應用于修正或改變信號的屬性[1]。最為普通的數字濾波器就是線性時間不變量 (LTI)濾波器。LTI與其輸入信號之間相互作用,是經過一個線性卷積的過程。
LTI濾波器分為兩類:IIR和FIR濾波器。在數據通訊,語音信號處理,圖像處理,雷達信號處理中,不能有明顯的相位失真,而有限長單位沖激相應FIR具有嚴格的線性相位的特點;此外,FIR濾波器的單位抽樣響應序列是有限長的,因此是一個穩定的系統,故FIR濾波器在上述領域中得到廣泛應用[2]。
隨著現代電子技術的發展,采用FPGA(Field Programmable Gata Aarry)[3]進行數字信號處理技術得到廣泛應用。以現場可編程門陣列(FPGA)為代表的ASIC器件得到迅速普及和發展。數字濾波器的設計正擺脫傳統的設計模式,而采用FPGA技術來設計FIR濾波器正成為設計的趨勢。目前在FPGA中用于設計FIR濾波器有很多種方法,即直接乘加結構、乘法器復用結構、乘累加結構、DA(分布式算法)。在文中是以一32階FIR濾波器進行比較的。
這里設計的是低通濾波器,其中Fpass=23 MHz,Fstop=40 MHz, Fs=160 MHz,Apass=0.1 dB,Astop=80 dB。 通過調用MATLAB中濾波器設計的工具箱[4](FDATool),生成FIR系數。
從FIR公式出發[5],可以得道fir濾波器的輸出是輸入數據和系數相卷積得到的,如公式(1)所示。

具有嚴格線性相位FIR濾波器具有對稱的性質,即滿足偶對稱性或奇對稱,在這里介紹下偶對稱的結構,即滿足公式(2):

由上面討論知道FIR的輸出等于輸入信號與FIR系數的卷積,如式(3)所示:

s為輸入信號,h為FIR濾波器系數,N為濾波器的系數。
從公式可得到是把輸入數據進行延遲,與系數相乘后加在一起即可得到最后輸出結果。據此可以得到直接乘加結構[5],整體框架如圖1所示。
輸入數據通過32個延遲單元并和系數相乘,相乘后的結果通過加法樹就可得到輸出數據。該結構使用了32個乘法器和31個加法器。對于更高階的濾波器,使用的乘法器和加法器更多,需要占用大量的FPGA資源。

圖1 整體框架Fig.1 Overall diagram
由于嚴格線性相位的FIR具有偶對稱的性質,即h(i)=h(N-i),因此在實現中可以先進行延遲再把數據進行兩兩相加并與對應的系數相乘,然后通過加法樹得到最終輸出結果。
先定義32個寄存器用于保存通過延遲單元延時的數據,然后把寄存器中的數據進行兩兩相加再同系數相乘,最后通過加法樹得到最后的輸出結果[6]。整體框圖[3]如圖2所示。

圖2 整體結構Fig.2 Overall diagram
該結構使用了16個乘法器和31個加法器,比直接乘加結構節省了一半的乘法器,但是如果對于階數很多的濾波器,仍然會占用大量的資源。
乘累加結構是通過對輸入數據進行延遲后先進行兩兩相加,再選擇對應的數據和系數作為乘法器的輸入數據,再把相乘后的結果通過累加器的累加得到最終的輸出結果[6]。整體框圖如圖3所示。

圖3 整體框圖Fig.3 Overall diagram
通過觀察框圖可看出只使用了1個乘法器和1個加法器,這會節省很多的資源,相應的會造成時序控制的復雜性。
分布式算法(DA算法)是一種以實現乘加為目的的運算方法[6]。它是在完成乘加功能時是通過將各輸入數據每一對應位產生的部分積預先進行相加形成對應部分積,然后再把各部分積保存起來作為查找表的內容,通過將輸入數據的每一位最為查找表的地址讀出數據,再通過加法樹得到最終輸出結果[6]。FIR公式可用式(4)表示。

對于一個16位的有符號數,x(i)可表示為:

代入式(4)可得:

從式 (6)可看出當輸入數據很多時,則查找表需要做2^16=65 536個部分積,即查找表要存儲65 536個可能組合值,這個數據是很多的,不利于工程實現。因此這里可以先做一個4階的查找表,把這4階的查找表做成一個4階的FIR濾波器,再把這4階的FIR濾波器構建一個32階的濾波器。
4階FIR查找表結構如表1所示。

表1 查找表中值的設置Tab.1 Median of the lookup table setting
4階的FIR整體框圖結構如圖4所示。
32階FIR濾波器結構如圖5所示。
DA算法僅使用加法器和查找表的結構,而不使用乘法器,這樣會節省很多資源,在現在工程量很大的情況下可以節省很多資源。
在這里可以對上述各種實現結構做一個資源統計表如表2所示。

圖4 4階FIR框圖Fig.4 Overall diagram of 4 FIR

圖5 32階FIR濾波器結框圖Fig.5 Overall diagram of 32 FIR

表2 資源統計表Tab.2 Resource statistics
根據表格2得到乘法器復用結構比直接乘加結構會節省一半的乘法器、而乘累加結構只使用了一個乘法器、DA只使用加法器沒有用到乘法器。在FPGA中乘法器會占用大量的邏輯資源,從統計表中得到DA算法雖然沒有用到乘法器但是用到的資源是比較多的,相比下直接乘加結構占用的資源最較少,但是他用到了乘法器。
[1]Lyons R G.數字信號處理[M].2版.朱光明,譯.北京:機械工業出版社,2006.
[2]余琳,黃光明.基于FPGA的FIR濾波器的性能研究[J].電子設計工程,2011,19(9):125-128.YU Lin,HUANG Guang-ming.Performance of FIR digital filterbased on FPGA.ElectronicDesign Engineering,2011,19(9):125-128.
[3]王旭東,潘廣楨.MATLAB及其在FPGA中的應用[M].北京:國防工業出版社,2006.
[4]羅軍輝,羅勇江,白義臣,等.MATLAB 7.0在數字信號處理中的應用[M].北京:機械工業出版社,2005.
[5]程培青.數字信號處理教程 [M].北京:清華大學出版社,2007.
[6]田耕,許文波,張延偉.無線通信FPGA設計[M].北京:電子工業出版社,2007.