FIR(finite impulse response)濾波器是數字信號處理系統中最基本的元件,它可以在保證任意幅頻特性的同時具有嚴格的線性相頻特性,同時其單位沖激響應是有限的,沒有輸入到輸出的反饋,是穩定的系統。因此,FIR濾波器在通信、圖像處理、模式識別等領域都有著廣泛的應用。
目前FIR濾波器的硬件實現有以下幾種方式:
一種是使用單片通用數字濾波器集成電路,這種電路使用簡單,但是由于字長和階數的規格較少,不易完全滿足實際需要。雖然可采用多片擴展來滿足要求,但會增加體積和功耗,因而在實際應用中受到限制。
另一種是使用DSP芯片。DSP芯片有專用的數字信號處理函數可調用,實現FIR濾波器相對簡單,但是由于程序順序執行,速度受到限制。而且,就是同一公司的不同系統的DSP芯片,其編程指令也會有所不同,開發周期較長。
還有一種是使用可編程邏輯器件,FPGA/CPLD。FPGA有著規整的內部邏輯塊整列和豐富的連線資源,特別適合用于細粒度和高并行度結構的FIR濾波器的實現,相對于串行運算主導的通用DSP芯片來說,并行性和可擴展性都更好。
FIR濾波器的主要組成模塊是乘累加單元(MAC),如果按照直觀結構構造乘法器和系數寄存器來實現會占用大量的邏輯資源,顯然不可取。本文采用基于分布式算法思想的方法來設計FIR濾波器,并在FPGA上實現。
1 分布式算法原理
分布式算法(distributed arithmetic,DA)最初是在1973年由Croisier提出的,但直到Xilinx發明FPGA的查找表以后,DA算法才在上世紀90年代初重新受到重視,并有效地應用在FIR濾波器的設計中。DA算法的原理如下。
函數f(c(n),xb(n))的實現方法是利用一個LUT(查找表)實現影射f(c(n),xb(n)),也就是說2N字寬、預先設定程序的LUT接收一個N位輸入向量xb=[xb[0],xb…xb[N-1]],輸出為f(c(n),xb(n)),個個影射,f(c(n),xb(n))都由相應的二次冪加權并累加。對于固定系數,整數乘以2b即左移6位,可以通過硬連線實現,不占用邏輯資源,利用圖1所示的移位加法器就能有效地實現累加。DA算法的主要特點是巧妙利用SRAM查找表將固定系數的MAC運算轉化為查表操作,其運算速度不隨系數和輸入數據精度的增加而降低,而且相對直接實現乘法器和系數寄存器在邏輯資源占用上得到了極大的改善。缺點是查找表的大小隨濾波器的階數的增加呈指數增長,這時可以采用將大查找表分解為小查找表的方法來降低邏輯資源的消耗,如圖2所示。
2 FIR濾波器的網絡結構
N階FIR濾波器相對于輸入時間序列x(n)的輸出表達式為:
對于線性相位FIR濾波器,其單位取樣響應是對稱或反對稱的,即:
3 FIR濾波器的硬件電路設計
下面以一個32階FIR帶通濾波器為例說明硬件電路設計的方法和過程。
3.1 設計指標
采用頻率:200 Hz 類型:帶通
上限截止頻率:54.3 Hz 下限截止頻率:46 Hz
階數:32階 系數數據寬度:16位
輸入數據寬度:16位 輸出數據寬度:16位
3.2 濾波器的設計
使用MATLAB 7.1軟件中Filter Design&AnalysisTool,選取帶通濾波器,Kaiser窗設計方法,設計出符合設計指標的32階線性相位FIR濾波器,其幅頻特性和相頻特性如圖5所示。
濾波器的特征參數用16位二進制補碼表示如下:
(1) 數據位擴展:由于輸入數據要進行預相加,為了防止溢出,保證電路正常工作,采用符號位擴展,使輸入數據由16位增加到17位。
(2) 并串轉換器:由于電路以串行方式工作,須將并行輸入的數據轉換為串行數據輸入,且順序是先輸入低位(LSB),后輸入高位(MSB)。
(3) 移位寄存器組:其主要功能是用寄存器組存儲輸入序列,實現輸入數據的延時輸出,存儲的級數等于FIR濾波器的階數減1,即31。移位寄存器組輸出的數據和并串轉換器輸出的數據一起形成如圖1中所示的輸入數據陣列形式。
(4) 預相加單元:利用FIR濾波器系數的對稱性,按照圖4所示的FIR濾波器線性網絡結構,將相同濾波器系數相乘兩個輸入數據預先相加,這樣相當于將濾波器的階數減半,減小了硬件規模。預相加單元采用在位串行電路中廣泛應用的串行加法器來實現。
(5) 查找表單元:如前所述,LUT的規模隨濾波器階數的增加呈指數增長,當濾波器的階數很大時,查找表的規模過于龐大。為了減小規模,可以將1個有16位地址總線的LUT分割,產生4個4位地址總線部分LUT,先分別對4個部分表查表,再將結果相加。為防止相加時產生溢出,將16位查表輸出經過1位符號擴展變為17位。
(6) 查表結果相加單元:加法器是影響FIR濾波器性能的主要部件,其工作速度決定了FIR濾波器的效率,因此采用具有超前進位功能的流水線加法器。
(7) 移位累加單元:得到的查表結果相當于一個部分積,移位累加單元將其與寄存器中的部分積相加,結果右移1位還放入寄存器中,直到所有的位數都查表結束。特別應注意,最高位查表得到的結果不是與上一個右移1位的部分積相加,而是相減。這里的加法器仍是采用具有超前進位功能的流水線加法器,作減法時,只需將被減數取補即可。
(8) 鎖存輸出單元:加法器的輸出不穩定,將其結果經過一鎖存器得到穩定的輸出。
(9) 控制單元:產生復位,時序等控制信號,控制電路的總體運行。
3.4 電路仿真
在ALTERA公司的MAX+PLUS2軟件環境下,用硬件描述語言VHDL對上述FIR濾波器的模塊進行編程描述,并仿真各模塊的波形,最后將各模塊綜合起來下載到器件FLEX10KE中形成FIR濾波器。
用MATLAB設計了一幅度為0.22的50 Hz的正弦波,用250 Hz的采樣器對其采樣,得到周期序列[0,0.209 2,0.129 3,—0.129 3,—0.209 2],用16位二進制補碼表示為:[0000H,1ACBH,108DH,EF73H,E538H],將其輸入到FIR濾波器的輸入端,濾波器的輸出如圖6所示,實驗結果與理論計算一致。并取32位以后的輸出結果,在MATLAB里繪制波形,如圖7所示,可見,FPGA仿真結果正確,50 Hz的正弦波通過了FIR濾波器。
4 結 論
本文所介紹的基于FPGA、采用分布式算法實現FIR濾波器的方法,在提高系統運行速度和節省硬件資源方面具有很大的優勢。而且,通過改變階數和查找表中的系數,還可以將此設計靈活地運用于實現高通、低通和帶阻濾波器,可移植性較好。因此,這種方法在高速數字信號處理中將有很好的應用前景。
-
FPGA
+關注
關注
1626文章
21667瀏覽量
601858 -
cpld
+關注
關注
32文章
1247瀏覽量
169217 -
濾波器
+關注
關注
160文章
7728瀏覽量
177685
發布評論請先 登錄
相關推薦
評論