O 引言
FIR(fini te impulse response)濾波器是數字信號處理系統中最基本的元件,它可以在保證任意幅頻特性的同時具有嚴格的線性相頻特性,同時其單位沖激響應是有限的,沒有輸入到輸出的反饋,系統穩定。因此,FIR濾波器在通信、圖像處理、模式識別等領域都有著廣泛的應用。在工程實踐中,往往要求對信號處理要有實時性和靈活性,而已有的一些軟件和硬件實現方式則難以同時達到這兩方面的要求。隨著可編程邏輯器件的發展,使用FPGA來實現FIR濾波器,既具有實時性,又兼顧了一定的靈活性,越來越多的電子工程師采用FPGA器件來實現FIR濾波器。
1 FIR濾波器工作原理
在進入FIR濾波器前,首先要將信號通過A/D器件進行模數轉換,使之成為8bit的數字信號,一般可用速度較高的逐次逼進式A/D轉換器,不論采用乘累加方法還是分布式算法設計FIR濾波器,濾波器輸出的數據都是一串序列,要使它能直觀地反應出來,還需經過數模轉換,因此由FPGA構成的FIR濾波器的輸出須外接D/A模塊。FPGA有著規整的內部邏輯陣列和豐富的連線資源,特別適合于數字信號處理任務,相對于串行運算為主導的通用DSP芯片來說,其并行性和可擴展性更好,利用FPGA乘累加的快速算法,可以設計出高速的FIR數字濾波器。
2 16階濾波器結構
在濾波過程中實現抽取,對于抽取率為N的抽取濾波器而言,當進來N個數據時濾波器完成1次濾波運算,輸出1次濾波結果。抽取濾波器的結果和先濾波后抽取的結果是一致的,只是對于同樣的數據,進行濾波運算的次數大大減少。在數字系統中采用拙取濾波器的最大優點是增加了每次濾波的可處理時間,從而達到實現高速輸入數據的目的。采樣數據與濾波器系數在控制電路的作用下,分別對應相乘并與前一個乘積累加,經過多次(有多少階就要多少次)反復的乘累加最后輸出濾波結果,將相同系數歸類,16階濾波器公式:
乘法器的數量減少一半,但加法器的數量增多了,但相對乘法運算來說,加法運算所占用的資源少的多,運算的速度也快得多。
3 濾波器系數的求取
使用Matlab集成的濾波器設計工具FDAtool,可以完成多種濾波器的數值設計、分析與評估,設計16階低通濾波器參數如下:
采樣頻率:Fs為50MHz,濾波器歸一化截止頻率:Fc為0.4MHz,輸入數據位寬:8位,輸出數據寬度:16位FDAtool采用漢寧窗函數(Hanning)設計16階線性相位FIR數字濾波器,并提取其特性參數h(n)浮點數值。
MATLAB中算出的系數h(n)的值是一組浮點數,進行浮點值到定點值的轉換,用16位二進制補碼表示為
濾波器抽頭數是16個,考慮到線性FIR濾波器的偶對稱特性,只考慮8個獨立濾波器抽頭數,則需要一個28×8的表(其中指數8指的是8個濾波器抽頭數,后面的8指的是輸入數據的位寬)。但是Virrex—e FPGA只能提供4輸入的杏找表,所以要對查找表的地址進行電路分割。將8位地址線分為高4位和低4位,分別作為兩個24×8的查找表的地址輸入,從而指數倍地節省了硬件資源。
4 主程序及仿真
在時鐘和計數器的控制下,根據查找表輸出結果位權的不同,將輸入數據向左移動相應的位數,低位按照位權的不同補上個數相當的“0”,然后將移位數據進行累加操作,輸出最終濾波結果,這里的結果依舊是用二進制數據表示的,只是位數因為移位和累加操作增加了8位。
圖五 移位加法器的波形仿真圖
以上便是基于分布式算法的FIR濾波器的三個主要模塊的分析,為了能使該濾波器能正常工作,還需要用VHDL語言編寫控制程序,使各模塊連接起來,總的來說,該濾波器的實現原理圖如下:
圖六基于分布式算法的FIR濾波器頂層原理圖在FPGA中,不論是基于乘累加的FIR濾波器,還是基于分布式算法的FIR濾波器(包括FIR濾波器的各模塊)都是通過VHDL語言編程來實現的。
5 結語
本文所介紹的基于FPGA、采用分布式算法實現FIR濾波器的方法,在提高系統運行速度和節省硬件資源方面具有很大的優勢。基于分布式算法的FIR濾波器結構可以擴展成任意階數的FIR濾波器。而且,通過改變階數和查找表中的系數,還可以將此設計靈活地運用于實現高通、低通和帶阻濾波器,可移植性較好。因此,這種方法在高速數字信號處理中將有很好的應用前景。