《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > EDA與制造 > 設(shè)計應(yīng)用 > FIR濾波器的FPGA實現(xiàn)方法
FIR濾波器的FPGA實現(xiàn)方法
現(xiàn)代電子技術(shù)
徐遠(yuǎn)澤,戴立新,高曉蓉,王 黎,郭建強
摘要: 為了給實際應(yīng)用中選擇合適FIR濾波器的FPGA實現(xiàn)結(jié)構(gòu)提供參考,首先從FIR數(shù)字濾波器的基本原理出發(fā),分析了FIR濾波器的結(jié)構(gòu)特點,然后分別介紹了基于FPGA的FIR濾波器的串行、并行、轉(zhuǎn)置型、FFT型和分布式結(jié)構(gòu)型的實現(xiàn)方法,對于各種實現(xiàn)的結(jié)構(gòu)做了分析、比較以及優(yōu)化處理,特別是對基于FFT的FIR濾波器與傳統(tǒng)卷積結(jié)構(gòu)進(jìn)行了精確的數(shù)值計算比較,最后得出滿足于低階或高階的各種FIR濾波器實現(xiàn)結(jié)構(gòu)的適用范圍及其優(yōu)缺點,并針對實際工程應(yīng)用提出了下一步需解決的問題。
關(guān)鍵詞: FIR FFT FPGA
Abstract:
Key words :

    在數(shù)字信號處理系統(tǒng)中,有限脈沖響應(yīng)(finite impulse response,FIR)數(shù)字濾波器是一個非常重要的基本單元。近年來,由于FPGA具有高速度、高集成度和高可靠性的特點而得到快速發(fā)展。隨著現(xiàn)代數(shù)字通信系統(tǒng)對于高精度、高處理速度的需求,越來越多的研究轉(zhuǎn)向采用FPGA來實現(xiàn)FIR濾波器。而對于FIR濾波器要充分考慮其資源與運行速度的合理優(yōu)化,各種不同的FIR濾波結(jié)構(gòu)各具優(yōu)缺點,在了解各種結(jié)構(gòu)優(yōu)缺點后才能更好地選擇合適結(jié)構(gòu)來實現(xiàn)FIR濾波。

1 FIR數(shù)字濾波器
   
FIR數(shù)字濾波器由有限個采樣值組成,設(shè)計中在滿足幅值特性時,還能保證精確、嚴(yán)格的相位特性,因此在信號處理等領(lǐng)域得到廣泛的應(yīng)用。
    對于FIR濾波器,其輸出y(n)表示為如下形式:
   
    式中:N為濾波器的階數(shù)(或抽頭數(shù));x(i)表示第i時刻的輸入樣本;h(i)為FIR濾波器的第i級抽頭系數(shù)。
    由于FIR濾波器的沖擊響應(yīng)為一個有限序列,其系統(tǒng)函數(shù)可表示為:
   
    FIR濾波器的基本結(jié)構(gòu)如圖1所示。FIR濾波器只在原點處存在極點,所以這使得FIR濾波器具有全局穩(wěn)定性。同時FIR濾波器滿足線性相位條件,其沖擊響應(yīng)序列為實數(shù)且滿足奇對稱或偶對稱條件,即:
   



2 實現(xiàn)方法
   
運用FPGA來實現(xiàn)FIR數(shù)字濾波器的結(jié)構(gòu)多種多樣,但是主要有以下幾類:串行結(jié)構(gòu)、并行結(jié)構(gòu)、轉(zhuǎn)置型結(jié)構(gòu)、基于FFT算法結(jié)構(gòu)、分布式結(jié)構(gòu)。其他類型的FIR濾波器結(jié)構(gòu)都可以由以上幾種結(jié)構(gòu)衍生而來。
2.1 串行結(jié)構(gòu)
   
由表達(dá)式(1)可知,F(xiàn)IR濾波器實質(zhì)是做一個乘累加運算,其濾波器的階數(shù)決定了一次乘累加的次數(shù),其串行結(jié)構(gòu)如圖2所示。


    串行結(jié)構(gòu)的FIR濾波器結(jié)構(gòu)簡單,硬件資源占用少,只需要復(fù)用1個乘法器和1個加法器,所以成本較低。但是,這種結(jié)構(gòu)的FIR濾波器要經(jīng)過多個時鐘周期才有輸出,同時,內(nèi)部時鐘周期還受到乘法器運算速度的影響,所以該結(jié)構(gòu)的FIR濾波器處理速度慢,只適用于濾波階數(shù)較低且處理速度要求低的系統(tǒng)。
2.2 并行結(jié)構(gòu)
   
將串行結(jié)構(gòu)的FIR濾波器展開就可以得到并行結(jié)構(gòu)的FIR濾波器,并行FIR濾波器結(jié)構(gòu)又稱作直接型FIR濾波器結(jié)構(gòu),這種結(jié)構(gòu)是直接根據(jù)圖1的濾波器結(jié)構(gòu),用多個乘法器和加法器并行實現(xiàn)。通??紤]到其濾波器系數(shù)的對稱性,先對輸入值進(jìn)行加法運算,再進(jìn)行乘法運算,最后累加輸出,以此來減少乘法器的個數(shù),其結(jié)構(gòu)如圖3所示。


    并行結(jié)構(gòu)的FIR濾波器在1個周期內(nèi)可以完成1次濾波,運行速度快,雖然利用濾波系數(shù)對稱性,但仍要占用大量的乘法器和加法器,特別對于濾波階數(shù)高的濾波器,其資源占用較多,如對于256階的濾波器,其需要128個乘法器來實現(xiàn)。為提高濾波器速度,常引入流水線結(jié)構(gòu),即在每次加法或者乘法運算后加入1個寄存器存儲數(shù)據(jù),使得濾波器可以運行在更高的頻率上。
2.3 轉(zhuǎn)置型結(jié)構(gòu)
   
根據(jù)轉(zhuǎn)置定理,如果將網(wǎng)絡(luò)中所有的支路方向倒轉(zhuǎn),并將輸入x(n)和輸出y(n)相互交換,則其系統(tǒng)函數(shù)H(z)不變。通過轉(zhuǎn)置定理,將并行結(jié)構(gòu)的FIR濾波器變換就可以得到轉(zhuǎn)置型FIR濾波器,其結(jié)構(gòu)如圖4所示。


    基于并行結(jié)構(gòu)的轉(zhuǎn)置型FIR濾波器實現(xiàn)了數(shù)據(jù)的并行輸入,在1個周期內(nèi)就能完成1次濾波,并且各級結(jié)構(gòu)相同,在每個階段都可以讀出數(shù)據(jù),可以對濾波階數(shù)進(jìn)行擴展或者縮減,實現(xiàn)任意階數(shù)的濾波器。但是由于基于的是并行結(jié)構(gòu),便有著并行結(jié)構(gòu)的一些缺點,主要是對于高階的濾波器,其資源占用量是巨大的,設(shè)計成本高。雖然這樣,轉(zhuǎn)置型FIR濾波器仍是應(yīng)用廣泛的一種濾波器。
2.4 基于FFT的結(jié)構(gòu)
   
應(yīng)用快速傅里葉變換(fast fourier transform,F(xiàn)FT)實現(xiàn)FIR濾波器是一種快速實現(xiàn)濾波算法的重要途徑。由式(1)可知,F(xiàn)IR濾波器的輸出y(n)是輸入x(n)與系統(tǒng)沖擊響應(yīng)序列h(n)的卷積,應(yīng)用FFT可以快速實現(xiàn)卷積變換。如圖5所示,先將輸入信號x(n)通過FFT變換為它的頻譜采樣值X(k),然后再與FIR濾波器的頻響采樣值H(k)相乘,H(k)可事先存放在存儲器中,最后再將乘積X(k)H(k)通過快速傅里葉反變換(IF-FT)還原為時域序列,即得到輸出y(n)。


    為實現(xiàn)FFT,根據(jù)兩有限長序列的線性卷積可用其循環(huán)卷積代替而不發(fā)生混疊,必須選擇循環(huán)卷積長度N≥N1+N2-1,即將x(n)和h(n)補零至長度為N的序列,即:
   
    在基于FFT的FIR濾波器結(jié)構(gòu)中,求X(k),H(k)以及反傅里葉變換y(n)需要的乘法次數(shù)均為N/2log2N,而計算X(k)H(k)需要N次乘法,所以基于FFT的總乘法次數(shù)為mf=3/2Nlog2N+N。由于h(n)滿足式(3)條件,所以直接卷積所需的乘法次數(shù)為md=1/2N1N2。假設(shè)N1=N2,則比較這兩種乘法計算量有:
   
    從表1可知,當(dāng)N1<42時,F(xiàn)FT法的運算量小于直接卷積的運算量,當(dāng)N1=42時,F(xiàn)FT法的運算量與直接卷積的運算量相當(dāng),當(dāng)N1>42時,F(xiàn)FT法的運算量大于直接卷積的運算量,并且隨著N1增加,F(xiàn)FT法的運算速度越來越快,特別是N1=8 192時,F(xiàn)FT法的運算速度與直接卷積相比快上將近100倍。


2.5 分布式結(jié)構(gòu)
2.5.1 分布式算法原理

    分布式算法(distributed arithmetic,DA)于1973年就由Croisier提出,但是直到FPGA出現(xiàn),才廣泛的被應(yīng)用于FPGA中計算乘累積和。
    對于有符號數(shù)x(n)可以用下式的補碼形式表示:
 
    對于式(7)中的h(i)xb(n-i)代表著輸入數(shù)據(jù)x(n-i)的第i位與抽頭系數(shù)h(i)的乘積,對于FIR濾波器,其系數(shù)h(i)是常數(shù),所以可以事先構(gòu)造一個查找表。該查找表存儲所有h(i)xb(n-i)的乘積值,通過輸入(xb(N-1),xb(N-2),…,xb(0))對該表尋址,然后將查得的值乘上2b后移位累加便得到濾波器輸出y(n)。該查找表構(gòu)造規(guī)則如表2所示。


2.5.2 基于分布式算法的FIR濾波器結(jié)構(gòu)
   
基于分布式算法的FIR濾波器主要有3種結(jié)構(gòu)類型。
    (1)第一種結(jié)構(gòu)為串行分布式結(jié)構(gòu)。串行分布式FIR濾波器的原理為,首先用所有N個輸入量的最低位對DA查找表進(jìn)行尋址查值,得到一個部分積,將部分積右移一位即相當(dāng)于除以2后放到寄存器中暫存。同時,N個輸入量的次低位開始對DA查找表進(jìn)行尋址查值,得到另一個部分積,把該部分積與上一個儲存在寄存器中的值進(jìn)行相加,相加后的值再右移一位放到寄存器中。以此重復(fù)循環(huán)累加,直到所有位數(shù)都尋址完
成,注意最高位尋址后的部分積是相減,最后所得到的值就是所需要的結(jié)果。
    當(dāng)N過大,即FIR濾波器的濾波階數(shù)很高時,采用一個查找表來實現(xiàn)將使得存儲查找表的ROM變得十分龐大。為此可采用部分表結(jié)構(gòu),即將查找表劃分為多個部分,N個輸入量的同一位對應(yīng)不同的部分表尋址。圖6所示即為基于4輸入部分表結(jié)構(gòu)的串行DA結(jié)構(gòu)。


    (2)第二種結(jié)構(gòu)為并行分布式結(jié)構(gòu)。并行分布式結(jié)構(gòu)就是將N個輸入量的不同位進(jìn)行同時查表,而相同位送入同一個ROM尋址,不同位有不同的ROM。其結(jié)構(gòu)如圖7所示。


    第三種結(jié)構(gòu)為串并結(jié)合分布式結(jié)構(gòu)。它是一種折中方案,既要求速度不太高又要求資源占用少。對于串行分布式算法,是一次一位(one bit-at-a-time,1BAAT)查找表,而并行分布式算法是一次B位(B bits-at-a-time)。所以串并結(jié)合分布式算法采用一次多位,如2BAAT,3BA-AT。圖8所示為4BAAT查找表結(jié)構(gòu)圖。
    圖8中位數(shù)B是4的倍數(shù),SRL為移位寄存器。SRL中第1行從右邊數(shù)第1列為數(shù)據(jù)的0位,第2列為數(shù)據(jù)的1位,第3列為數(shù)據(jù)的2位,第4列為數(shù)據(jù)的3位。類似地,第2行右數(shù)第1列為數(shù)據(jù)的4位,第2列為數(shù)據(jù)的5位,第3列為數(shù)據(jù)的6位,第4列為數(shù)據(jù)的7位。以后各行按相似的數(shù)位順序排列。在第一個時鐘周期,數(shù)據(jù)的0,4,…,B-4位同時進(jìn)入查找表ROM中,查出所要的數(shù)據(jù),第二個時鐘周期,1,5,…,B-3位同時進(jìn)入ROM中,查出所要的數(shù)據(jù),所查得的數(shù)據(jù)傳遞給下一級累加器進(jìn)行累加,這樣依次對剩下的各數(shù)據(jù)位進(jìn)行同樣的操作。由于每個塊之間相差4位,即16倍,為了對應(yīng)位相加,所以乘16。FIR濾波器的分布式算法結(jié)構(gòu)比單獨用乘法器實現(xiàn)的速度快,特別是濾波階數(shù)越高,其優(yōu)勢更加明顯。分布式結(jié)構(gòu)中,串行結(jié)構(gòu)是1次查詢1位,所以對B位的數(shù)據(jù)在不算上移位寄存等的時間,完成1次濾波需要B個時鐘周期;而并行結(jié)構(gòu)只需要1個時鐘周期便完成濾波,所以并行結(jié)構(gòu)是速度最優(yōu)的結(jié)構(gòu),但是并行結(jié)構(gòu)需要B個DA查找表,需要大量的ROM來儲存,加大了硬件資源的消耗,特別是階數(shù)越高,硬件規(guī)模將十分膨大;串并結(jié)構(gòu)綜合兩種結(jié)構(gòu)優(yōu)勢,實現(xiàn)在速度和規(guī)模上的協(xié)調(diào)。實際應(yīng)用中。需根據(jù)系統(tǒng)的要求來選擇合適的結(jié)構(gòu)。

3 結(jié)語
    本文定性地分析了各種FIR濾波器的FPGA實現(xiàn)方法。對于低階的FIR濾波器可采用串行結(jié)構(gòu)、并行結(jié)構(gòu)以及轉(zhuǎn)置型結(jié)構(gòu)來實現(xiàn),而并行結(jié)構(gòu)和轉(zhuǎn)置型結(jié)構(gòu)的FIR濾波器以犧牲資源損耗來實現(xiàn)了速度上優(yōu)勢;對于高階的FIR濾波器,基于乘法器結(jié)構(gòu)的串行結(jié)構(gòu)、并行結(jié)構(gòu)及轉(zhuǎn)置型結(jié)構(gòu)在速度上難以達(dá)到高速處理的要求,而分布式算法將乘法轉(zhuǎn)換為查表和累加的結(jié)構(gòu),使得分布式結(jié)構(gòu)的FIR濾波器在速度上得到了提高,但三種不同形式的分布式結(jié)構(gòu)要在綜合考慮資源以及速度的基礎(chǔ)上進(jìn)行合理選擇;同樣采用FFT實現(xiàn)的FIR濾波器以減少運算量來獲得了速度上的提高,特別是濾波階數(shù)越高其速度提升越明顯。
    現(xiàn)代工程技術(shù)領(lǐng)域?qū)V波系統(tǒng)的帶寬、高速、信號的實時性處理等方面要求越來越高,在運用FPGA來實現(xiàn)FIR濾波中,基于乘法器結(jié)構(gòu)的FIR濾波器無法滿足以上要求,而分布式結(jié)構(gòu)的FIR濾波器巧妙地運用ROM查找表來實現(xiàn)固定系數(shù)的乘累加運算,避免了乘法運算,并且在隨后的每級加法運算中引入流水線結(jié)構(gòu),提高了速度。因此采用分布式算法實現(xiàn)FIR濾波器是目前研究的熱點,同時無論哪種分布式算法都要使用ROM來做查找表,但是隨著濾波階數(shù)的增加,ROM的數(shù)量將會增加,在進(jìn)一步提高速度的情況下如何減少ROM的數(shù)量是今后亟待解決的問題。

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。