在數(shù)字信號處理系統(tǒng)中,,有限脈沖響應(yīng)(finite impulse response,,FIR)數(shù)字濾波器是一個非常重要的基本單元。近年來,,由于FPGA具有高速度,、高集成度和高可靠性的特點(diǎn)而得到快速發(fā)展。隨著現(xiàn)代數(shù)字通信系統(tǒng)對于高精度,、高處理速度的需求,,越來越多的研究轉(zhuǎn)向采用FPGA來實(shí)現(xiàn)FIR濾波器。而對于FIR濾波器要充分考慮其資源與運(yùn)行速度的合理優(yōu)化,,各種不同的FIR濾波結(jié)構(gòu)各具優(yōu)缺點(diǎn),,在了解各種結(jié)構(gòu)優(yōu)缺點(diǎn)后才能更好地選擇合適結(jié)構(gòu)來實(shí)現(xiàn)FIR濾波。
1 FIR數(shù)字濾波器
FIR數(shù)字濾波器由有限個采樣值組成,,設(shè)計(jì)中在滿足幅值特性時,,還能保證精確、嚴(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濾波器只在原點(diǎn)處存在極點(diǎn),所以這使得FIR濾波器具有全局穩(wěn)定性,。同時FIR濾波器滿足線性相位條件,,其沖擊響應(yīng)序列為實(shí)數(shù)且滿足奇對稱或偶對稱條件,即:
2 實(shí)現(xiàn)方法
運(yùn)用FPGA來實(shí)現(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濾波器實(shí)質(zhì)是做一個乘累加運(yùn)算,,其濾波器的階數(shù)決定了一次乘累加的次數(shù),其串行結(jié)構(gòu)如圖2所示,。
串行結(jié)構(gòu)的FIR濾波器結(jié)構(gòu)簡單,,硬件資源占用少,只需要復(fù)用1個乘法器和1個加法器,,所以成本較低,。但是,這種結(jié)構(gòu)的FIR濾波器要經(jīng)過多個時鐘周期才有輸出,,同時,,內(nèi)部時鐘周期還受到乘法器運(yùn)算速度的影響,所以該結(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),,用多個乘法器和加法器并行實(shí)現(xiàn)。通??紤]到其濾波器系數(shù)的對稱性,,先對輸入值進(jìn)行加法運(yùn)算,再進(jìn)行乘法運(yùn)算,,最后累加輸出,,以此來減少乘法器的個數(shù),其結(jié)構(gòu)如圖3所示,。
并行結(jié)構(gòu)的FIR濾波器在1個周期內(nèi)可以完成1次濾波,,運(yùn)行速度快,雖然利用濾波系數(shù)對稱性,,但仍要占用大量的乘法器和加法器,,特別對于濾波階數(shù)高的濾波器,其資源占用較多,,如對于256階的濾波器,,其需要128個乘法器來實(shí)現(xiàn)。為提高濾波器速度,,常引入流水線結(jié)構(gòu),即在每次加法或者乘法運(yùn)算后加入1個寄存器存儲數(shù)據(jù),使得濾波器可以運(yùn)行在更高的頻率上,。
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濾波器實(shí)現(xiàn)了數(shù)據(jù)的并行輸入,在1個周期內(nèi)就能完成1次濾波,,并且各級結(jié)構(gòu)相同,,在每個階段都可以讀出數(shù)據(jù),可以對濾波階數(shù)進(jìn)行擴(kuò)展或者縮減,,實(shí)現(xiàn)任意階數(shù)的濾波器,。但是由于基于的是并行結(jié)構(gòu),便有著并行結(jié)構(gòu)的一些缺點(diǎn),,主要是對于高階的濾波器,,其資源占用量是巨大的,設(shè)計(jì)成本高,。雖然這樣,,轉(zhuǎn)置型FIR濾波器仍是應(yīng)用廣泛的一種濾波器。
2.4 基于FFT的結(jié)構(gòu)
應(yīng)用快速傅里葉變換(fast fourier transform,,F(xiàn)FT)實(shí)現(xiàn)FIR濾波器是一種快速實(shí)現(xiàn)濾波算法的重要途徑,。由式(1)可知,F(xiàn)IR濾波器的輸出y(n)是輸入x(n)與系統(tǒng)沖擊響應(yīng)序列h(n)的卷積,,應(yīng)用FFT可以快速實(shí)現(xiàn)卷積變換,。如圖5所示,先將輸入信號x(n)通過FFT變換為它的頻譜采樣值X(k),,然后再與FIR濾波器的頻響采樣值H(k)相乘,,H(k)可事先存放在存儲器中,最后再將乘積X(k)H(k)通過快速傅里葉反變換(IF-FT)還原為時域序列,,即得到輸出y(n),。
為實(shí)現(xiàn)FFT,根據(jù)兩有限長序列的線性卷積可用其循環(huán)卷積代替而不發(fā)生混疊,,必須選擇循環(huán)卷積長度N≥N1+N2-1,,即將x(n)和h(n)補(bǔ)零至長度為N的序列,即:
在基于FFT的FIR濾波器結(jié)構(gòu)中,,求X(k),,H(k)以及反傅里葉變換y(n)需要的乘法次數(shù)均為N/2log2N,,而計(jì)算X(k)H(k)需要N次乘法,所以基于FFT的總乘法次數(shù)為mf=3/2Nlog2N+N,。由于h(n)滿足式(3)條件,,所以直接卷積所需的乘法次數(shù)為md=1/2N1N2。假設(shè)N1=N2,,則比較這兩種乘法計(jì)算量有:
從表1可知,,當(dāng)N1<42時,F(xiàn)FT法的運(yùn)算量小于直接卷積的運(yùn)算量,,當(dāng)N1=42時,,F(xiàn)FT法的運(yùn)算量與直接卷積的運(yùn)算量相當(dāng),當(dāng)N1>42時,,F(xiàn)FT法的運(yùn)算量大于直接卷積的運(yùn)算量,,并且隨著N1增加,F(xiàn)FT法的運(yùn)算速度越來越快,,特別是N1=8 192時,,F(xiàn)FT法的運(yùn)算速度與直接卷積相比快上將近100倍。
2.5 分布式結(jié)構(gòu)
2.5.1 分布式算法原理
分布式算法(distributed arithmetic,,DA)于1973年就由Croisier提出,,但是直到FPGA出現(xiàn),才廣泛的被應(yīng)用于FPGA中計(jì)算乘累積和,。
對于有符號數(shù)x(n)可以用下式的補(bǔ)碼形式表示:
對于式(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ù)很高時,,采用一個查找表來實(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)比單獨(dú)用乘法器實(shí)現(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)勢,,實(shí)現(xiàn)在速度和規(guī)模上的協(xié)調(diào),。實(shí)際應(yīng)用中。需根據(jù)系統(tǒng)的要求來選擇合適的結(jié)構(gòu),。
3 結(jié)語
本文定性地分析了各種FIR濾波器的FPGA實(shí)現(xiàn)方法,。對于低階的FIR濾波器可采用串行結(jié)構(gòu),、并行結(jié)構(gòu)以及轉(zhuǎn)置型結(jié)構(gòu)來實(shí)現(xiàn),而并行結(jié)構(gòu)和轉(zhuǎn)置型結(jié)構(gòu)的FIR濾波器以犧牲資源損耗來實(shí)現(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實(shí)現(xiàn)的FIR濾波器以減少運(yùn)算量來獲得了速度上的提高,,特別是濾波階數(shù)越高其速度提升越明顯。
現(xiàn)代工程技術(shù)領(lǐng)域?qū)V波系統(tǒng)的帶寬,、高速、信號的實(shí)時性處理等方面要求越來越高,,在運(yùn)用FPGA來實(shí)現(xiàn)FIR濾波中,,基于乘法器結(jié)構(gòu)的FIR濾波器無法滿足以上要求,而分布式結(jié)構(gòu)的FIR濾波器巧妙地運(yùn)用ROM查找表來實(shí)現(xiàn)固定系數(shù)的乘累加運(yùn)算,,避免了乘法運(yùn)算,,并且在隨后的每級加法運(yùn)算中引入流水線結(jié)構(gòu),提高了速度,。因此采用分布式算法實(shí)現(xiàn)FIR濾波器是目前研究的熱點(diǎn),,同時無論哪種分布式算法都要使用ROM來做查找表,但是隨著濾波階數(shù)的增加,,ROM的數(shù)量將會增加,,在進(jìn)一步提高速度的情況下如何減少ROM的數(shù)量是今后亟待解決的問題。