FIR數(shù)字濾波器在數(shù)字信號處理的過程中有很好的線性相位和穩(wěn)定性,被廣泛應(yīng)用于音頻處理、語音處理、信息系統(tǒng)等各種系統(tǒng)中。隨著現(xiàn)代電子技術(shù)及EDA技術(shù)的發(fā)展,特別是可編程邏輯電路的發(fā)展,F(xiàn)IR數(shù)字濾波器的實現(xiàn)將變得更具有靈活性和實時性。FIR濾波器的實現(xiàn)有多種方法,其中基于分布式算法FIR濾波器的FPGA實現(xiàn)采用硬件結(jié)構(gòu),此算法的特點(diǎn)是運(yùn)行速度快,能較好地實現(xiàn)實時處理,特別適合于高速實時的信號處理。本文提出了一種基于分布式算法改進(jìn)型FIR濾波器的FPGA實現(xiàn),并設(shè)計和實現(xiàn)了改進(jìn)型FIR濾波器。
1 FIR數(shù)字濾波器的直接型結(jié)構(gòu)
FIR數(shù)字濾波器的輸入與輸出可以用下式表示:
式中:N為濾波器的階數(shù)(或抽頭數(shù));x(k)為第k時刻的輸入樣本值;h(k)為第k級抽頭系數(shù)。FIR因為其單位脈沖響應(yīng)h(n)是有限長而得名,即h(n)是一個有限長序列,對h(n)做Z變換就得到FIR數(shù)字濾波器的系統(tǒng)函數(shù)H(z):
由此可以得到FIR數(shù)字濾波器直接型的結(jié)構(gòu)圖如圖1所示。
2 改進(jìn)型FIR數(shù)字濾波器算法
2.1 分布式算法的原理
分布式算法是一種重要的FPGA技術(shù),廣泛應(yīng)用在計算乘積和之中。除了卷積之外,相關(guān)、DFT計算和RNS反演映射等都可以轉(zhuǎn)化為乘積和(sum of products)的形式。
(1)無符號分布式算法
假設(shè)N項的乘積和表示為:
又設(shè)系數(shù)h(n)是已知的常系數(shù),x(n)是變量,設(shè)x(n)的表達(dá)式如下:
其中xb(n)表示x(n)的第b位,x(n)是x的第n次采樣,則y又可以表示為:
(2)有符號分布式算法
對于有符號數(shù)補(bǔ)碼數(shù)采用補(bǔ)碼的表示方法。需要注意的是,在補(bǔ)碼中,最高有效位是用來區(qū)別正數(shù)和負(fù)數(shù)的。將采用(B+1)位表達(dá)式:
要實現(xiàn)有符號分布式系統(tǒng),通常采用“帶有加/減控制器的累加器”實現(xiàn)此系統(tǒng),當(dāng)xb(n)為0時進(jìn)行加法運(yùn)算,為1時進(jìn)行減法運(yùn)算。
2.2 串行分布式算法
串行分布式算法結(jié)構(gòu)如圖2所示。利用一個LUT實現(xiàn)映射,即2N字寬,預(yù)先編寫好程序的xb=[xb(0),xb(1),…,xb(N-1)]的映射,經(jīng)查找表查找后輸出,N次查詢循環(huán)后就完成了計算結(jié)果。
以三階四位有符號的數(shù)字濾波器為例,令濾波器的系數(shù)為{-2,1,3},LUT可采用基于FPGA的邏輯查找表或利用FPGA自帶的ROM實現(xiàn)。用case表實現(xiàn)的核心代碼如下:
Process (table_ in)
Begin
Case table_ in is
when “000”=》 table_ out=0;
when “001”=》 table_ out=-2;
when “010”=》 table_ out=3;
when “011”=》 table_ out=1;
when “100”=》 table_ out=1;
when “101”=》 table_ out=-1;
when “110”=》 table_ out=4;
when “111”=》 table_ out=2;
when others=》 table_ out=0;
end case;
end process;
2.3 并行分布式算法
并行分布式算法結(jié)構(gòu)如圖3所示,圖中虛線代表流水線寄存器,輸入采用逐次采樣(每次一個字)、位并行的形式。將每個數(shù)據(jù)的相同位遞給LUT,對于輸入的每一位都需要配置相應(yīng)單獨(dú)的表,且表的規(guī)模不固定(輸入位寬等于濾波器抽頭的數(shù)量),但表的內(nèi)容相同。且不同的位對應(yīng)不同的值,然后將從LUT中讀取的數(shù)據(jù)經(jīng)過處理后送入加法器中,每級的加法運(yùn)算都是并行的。
2.4 拆分查找表
并行分布式算法雖然能夠有效提高系統(tǒng)運(yùn)算的速度,但是占用的資源太大。串行分布式算法占用的資源小,但系統(tǒng)的運(yùn)算速度慢。而且當(dāng)N很大時,即在FIR濾波器中如果階數(shù)很高時,作為查找表的ROM將很大,例如:假定N=16,輸入LUT的位寬為16,則ROM的大小為16×216 bit,即1 Gbit。N每增加一位,ROM容量就增加一倍,這種以2的冪次遞增的資源占用是硬件資源不可接受的。
當(dāng)系統(tǒng)對速度要求不太高、而濾波器的階數(shù)很高時,可以采用拆分表減少ROM容量并將結(jié)果累加。如果再加上流水線寄存器,這個改進(jìn)并沒有降低速度,卻可以極大減少LUT的設(shè)計規(guī)模。
假設(shè)長度為LN的內(nèi)積:
可以用一個DA結(jié)構(gòu)實現(xiàn)。將和分配到L個獨(dú)立的N階并行DA的LUT之中,結(jié)果如下:
例如:實現(xiàn)一個4N的DA設(shè)計需要3個次輔助加法器。而表格的規(guī)模從一個4N×2B的LUT降低到4個N×2B表。圖4是拆分查找表的硬件結(jié)構(gòu)圖。
3 基于FPGA實現(xiàn)的改進(jìn)型FIR濾波器結(jié)構(gòu)性能
3.1 16階8位FIR濾波器的實現(xiàn)及仿真
本設(shè)計采用Altera公司的Cyclone II EP2C35F672C8器件,在Quartus II 5.0下仿真,F(xiàn)IR濾波器為16階,輸入數(shù)據(jù)為8位(最高位代表符號位)。如果采用單個查找表的面積為28×16 bit,面積太大。采用拆分查找表的結(jié)構(gòu)能減少面積,在Altera公司的一系列FPGA中LUT查找表采用四輸入查找表,因此單個表可以拆分為2個四輸入的查找表。因為設(shè)計的是線性相位濾波器,這樣單個表的面積就得到了最優(yōu)化。同時單個查找表的連線是LUT查找表的內(nèi)部連線,減少了互聯(lián)的資源和連線的延遲。查找表計算方法如表1所示。
設(shè)輸入序列為{99,0,0,0,70,0,0,0,99,0,0,0,70,0,0,0},濾波器的系數(shù)為{-12 -18 13 29 -13 -52 14 162 242 14 -52 -13 29 13 -18}。仿真結(jié)果如圖5所示。
本設(shè)計的時鐘主頻可達(dá)73.49 MHz,占用了236個邏輯單元,占整個LC(Logic cell)的2%。可見拆分查找表的方式實現(xiàn)FIR濾波器速度較快,占用的資源少。
若要實現(xiàn)更高階的濾波器,拆分查找表法的優(yōu)勢將更加明顯。另外,如果是線性相位的濾波器,表的個數(shù)將能縮小一倍。本設(shè)計即為線性相位濾波器。
3.2 改進(jìn)型FIR濾波器在FPGA中實現(xiàn)的特點(diǎn)分析
為了分析改進(jìn)型FIR濾波器在FPGA中實現(xiàn)的特點(diǎn),利用VHDL語言程序分別設(shè)計了16階的串行、并行及直接型FIR濾波器,并與相應(yīng)的拆分查找表法FIR濾波器進(jìn)行比較,其各自的運(yùn)行速度及占用FPGA資源的情況如表2所示。
從表2可以看出,改進(jìn)型濾波器與直接型相比存在兩大明顯的優(yōu)勢。一方面,在濾波器階數(shù)相同時,改進(jìn)型FIR濾波器在FPGA資源占用上比直接型更少;另一方面,系統(tǒng)運(yùn)行的速度比直接型更快。而且,隨著濾波器階數(shù)的增加,這種優(yōu)勢更加明顯。串行濾波器完成一次運(yùn)算需要8個時鐘周期,為了把數(shù)據(jù)分為8個時鐘周期進(jìn)行計算,采用了移位寄存器,這樣單個表的面積相當(dāng)大,從而占用了大量資源,工作速度也受到了限制。并行分布式濾波器在1個時鐘周期完成了累加,提高了工作速度,但所用面積較大。拆分查找表法濾波器大大減少了面積,而且速度并沒有降低。
本設(shè)計采用了拆分查找表方法,影響系統(tǒng)速度的是加法器組,可以對濾波器進(jìn)一步改進(jìn),如對加法器組利用流水線、編碼等技術(shù)可以提高工作速度。
通過以上的理論分析和仿真結(jié)果表明,基于FPGA器件的拆分查找表FIR算法,占用資源少、運(yùn)算速度快,在資源允許的條件下可根據(jù)實際應(yīng)用任意確定濾波器的長度和階數(shù),是一種比較實用可靠的高效設(shè)計方法。
評論
查看更多