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