于亞萍 陳雪強 劉源 衛勇
摘要:根據FIR濾波器的特性和分布式(DA)算法的特點,基于FPGA實現FIR濾波器的原理和方法,在拆分查找表的基礎上,利用串并結合DA算法對數字濾波器的設計進行優化,設計更高階次的濾波器并節省所占用的硬件資源。采用串并結合DA算法設計了16階FIR低通濾波器,在Quartus II 7.0下進行仿真,結果驗證了該方法濾波效果好,能夠有效地減少FPGA硬件資源的使用,提高FIR的運算速度。
關鍵詞:FIR濾波器;查找表;FPGA;分布式(DA)算法
中圖分類號:TN713文獻標識碼:A文章編號:0439-8114(2012)14-3092-04
Design of FPGA-Based Serial-Parallel FIR Filter
YU Ya-ping1,CHEN Xue-qiang2,LIU Yuan1,WEI Yong1
(1.Department of Mechanic and Electronic Engineering,Tianjin Agricultural University,Tianjin 300384, China;
2. Jinma Coking Limited Company, Jiyuan City of Henan Province, Jiyuan 454650, Henan,China)
Abstract: According to the characteristics of FIR filter and distributed algorithm (DA), the theory and method of FIR Filter was realized using DA based on FPGA. On the basis of table partitioning, the designation of FIR filters was optimized by serial-parallel arithmetic aiming at filters with higher order while saving the hardware it would use. 16-order FIR filters was designed by serial and parallel DA and simulated in Quartus Ⅱ 7.0. Results showed that the FIR filters were with small resource usage and high speed compared with traditional methods.
Key words: FIR filter; look-up table; FPGA; distributed algorithm
數字濾波器是數字信號處理的重要手段,分為有限脈沖響應數字(Finite impulsive response,FIR)濾波器和無限脈沖響應數字(Infinite impulsive response,IIR)濾波器兩種。其中FIR濾波器在數字信號處理的過程中有很好的線性相位和穩定性,被廣泛應用于工業、農業和醫學領域中[1]。
目前FIR濾波器的硬件實現有以下4種方式:①使用單片通用數字濾波器集成電路,這種電路使用起來比較簡單,由于字長和階數的規格較少,不易滿足實際需要。②使用DSP芯片[2],DSP芯片是依靠軟、硬件結合來實現FIR濾波器,速度受到限制。③使用可編程邏輯器件FPGA/CPLD[3],用FPGA來實現數字信號處理可以很好地解決并行和順序性的矛盾,而且易于測試與硬件升級[4]。
在FPGA中,進行傳統乘法運算占用了大量的硬件資源,分布式(DA)算法巧妙地利用ROM查找表將固定系數的乘累加運算轉換成查找表操作[5,6],避免了乘法運算。查找表后數據執行的都是簡單的加法運算,可以較大程度地提高運算速度[7]。
該研究在拆分查找表的基礎上,采用串并結合的DA算法進行FIR濾波器的設計,能很好地實現實時處理,有效減少硬件的使用,提高濾波器的運算速度。
1DA算法
DA算法是一項重要的FPGA技術,它與傳統算法實現乘加運算的不同在于執行部分積運算的先后順序不同[8,9]。
對于一個無符號系統,DA算法為:
式中,x[n]是變量,表示如下:
對于有符號系統,DA算法為:
DA算法對數據相同位分別加權求和,要實現有符號DA系統,利用一個LUT實現映射f(c[n],xb[n]),采用帶有加/減控制的累加器,對前(B-1)位進行移位累加,對第B位進行減法運算。
1.1串行DA算法
將輸入數據的相同位進行尋址,預先設定LUT接收一個N位輸入向量xb={xb[0],xb[1]…xb[N-1]},輸出為f(c[n],xb[n])。各個映射f(c[n],xb[n])都有相應的二次冪加權并累加,N次查詢循環后就完成了對內積y的計算。串行DA算法如圖1所示。
這種計算方法節省芯片的內部資源,運算速度與輸入數據的長度有關,比較慢。
1.2拆分查找表DA算法
如果輸入系數N過多,LUT的地址隨系數呈指數增加。假定長度為LN的內積,則:
可以用一個DA結構實現。可得到:
拆分查找表DA算法如圖2所示,實現一個4N的DA設計需要3個次輔助加法器,表格的規模由24N×B降到了4個2N×B。若要實現更高階的濾波器,拆分查找表法的優勢將更加明顯,另外,如果是線性相位的濾波器,表的個數還能縮小一半。但是拆分查找表法只能降低硬件資源的有效使用,不能提高FIR的運算速度。
1.3串并結合DA算法
并行DA算法是通過增加ROM、寄存器和加法器提高速度,讓輸入數據每一位的相同位同時尋址,ROM表的內容相同,將尋址內容進行相應的二次冪加權并相加,每級的加法運算都是并行的。并行DA算法能使系統在1個系統時鐘內完成濾波運算,但占用資源太多。
全串行方式是在每個時鐘周期中對所有變量的一個相同位進行串行處理,全并行方式是每個時鐘周期對所有變量的所有相同位進行并行處理,這兩種方法是針對資源優化設計和速度優化設計的兩種最優情況。根據設計者對FIR速度大小的要求,可以通過串并結合的方式提高FIR的速度,使資源利用達到最優。若:
對于一個數據寬度和尋址查找表寬度均為8位的FIR濾波器來說,可以寫為:
y=[sum0]+[sum1]21+[sum2]22+[sum3]23++[sum4]+[sum5]21+[sum6]22+[sum7]23×24
兩個基數都為21的輸出加權累加器,每個系統的時鐘脈沖可以算兩位。根據系統對資源和運算速度的要求,可以對一次并行處理的數據位數進行合理的安排。DA算法的串并結合實現結構如圖3所示。
2串并結合的FIR低通數字濾波器的FPGA實現
2.1采用窗函數對參數進行設計
2.1.1參數設計使用MATLAB軟件中的Filter design toolbox數字濾波器設計軟件模塊FDATool進行設計[10],FIR濾波器的設計指標:采樣頻率10 MHz,截止頻率1.5 MHz,濾波器階數16階,輸入數據寬度12位,系數數據寬度12位,采用Kaiser窗進行設計,β=0.5,線性偶對稱。
2.1.2運算量化量化是將濾波器的系數由浮點數轉換為FPGA可以進行運算的定點數。考慮到溢出,將h(n)擴大210倍,再表示為12位二進制補碼,可得到:
h(0)=h(15)=0.028 219 0=29=0000000111012C
h(1)=h(14)=-0.007 315 9=-8=1111111110002C
h(2)=h(13)=-0.049 899 0=-51=1111110011012C
h(3)=h(12)=-0.061 658 0=-63=1111110000012C
h(4)=h(11)=-0.014 040 0=-14=1111111100102C
h(5)=h(10)=0.089 426 0=92=0000010111002C
h(6)=h(19)=0.209 090 0=214=0000110101102C
h(7)=h(18)=0.288 940 0=296=0001001010002C
2.2FPGA的實現
采用FPGA實現時,首先將輸入數據存入數組中寄存起來,然后以寄存器中每一個輸入數據的相同位的值為地址,去對應查找表中的值,根據DA算法的公式,進行相應二次冪加權后累加,減去數據最高位,就能得到正確的濾波器輸出。該系統在拆分查找表的基礎上,采用串并結合方法對輸入數據進行構建,共由數據存儲延時模塊、查找表模塊、移位累加模塊、控制模塊組成。系統結構框架如圖4所示。
2.2.1數據存儲延時模塊設計的濾波器階數為16階,可以采用FIR網絡的線性型結構,首先將12位的輸入數據并行輸入數據寄存器中,由于該濾波器系數有16個,分別將16位輸入數據存入16×13列數組中的前12列中,按位存儲,第13列擴展位存儲的數據與符號位相同。由于FIR數字濾波器的單位取樣響應是對稱的,濾波系數對稱,將輸入數據x(i)和x(15-i)相加之后存入寄存器,可以將16階系數尋址降為8階。分別將每一次輸入數據的第1位到第6位、第7位到第12位和第13位數據并行輸入,在控制模塊的作用下,每一個系統時鐘脈沖,數據左移一位,將第一列數據輸出作為地址尋找查找表的內容。
2.2.2查找表模塊抽頭系數查找表模塊將濾波器系數的各種組合固化在ROM中[11],它的地址來自于輸入數據移位模塊相同位的輸出,通過查找表得到卷積數據,并將這些數據輸出到移位相加模塊。設計將查找表劃分為兩個四抽頭查找表LUT1和LUT2,LUT1用VHDL語言實現如下:
Case table_address0 is
When"0000"=>table_out_12b<="000000000000";
When "0001"=>table_out_12b<="000000011101";-- 29
When "0010"=>table_out_12b<="111111111000";-- -8
When "0011"=>table_out_12b<="000000010101";-- 21
When "0100"=>table_out_12b<="111111001101";-- -51
When "0101"=>table_out_12b<="111111101010";-- -22
When "0110"=>table_out_12b<="111111000101";-- -59
When "0111"=>table_out_12b<="111111100010";-- -30
When "1000"=>table_out_12b<="111111000001";-- -63
When "1001"=>table_out_12b<="111111011110";-- -34
When "1010"=>table_out_12b<="111110111001";-- -71
When "1011"=>table_out_12b<="111111010110";-- -42
When "1100"=>table_out_12b<="111110001110";-- -114
When "1101"=>table_out_12b<="111110101011";-- -85
When "1110"=>table_out_12b<="111110000110";-- -122
When "1111"=>table_out_12b<="111110100011";-- -93
When others=>table_out_12b<="000000000000"
2.2.3移位累加模塊移位累加模塊的主要功能是實現數據的累加,主要由加減器單元和移位累加單元組成。為了使累加器的結果不產生溢出,需要對累加器進行冗余設計,輸入數據和濾波器系數的位數均為N,累加器的長度為M,濾波器的長度為L,對于有符號數:M=2N+log2L-1,設計中累加器的長度為27位。
2.2.4控制模塊控制模塊主要控制信號的輸入、移位相加和數據的輸出,使上述各個模塊按照一定的時序進行操作,最終完成濾波功能。系統仿真波形如圖5所示。
3結論
理論分析和試驗結果表明,在采用拆分查找表的基礎上用串并結合的方式,不僅能夠節省硬件資源,而且能夠提高FIR的運算速度。該設計采用FPGA器件CycloneⅡ EP2C5F256C6進行方案驗證,僅占用邏輯單元631個,采用串并結合的FIR數字濾波器具有良好的濾波效果,在資源允許的條件下,可根據實際應用任意確定濾波器的階數和運算速度,是一種比較實用可靠的設計方法。
參考文獻:
[1] 劉建成,鄒應全,徐偉.基于FPGA的FIR濾波器設計與仿真[J]. 南京信息工程大學學報(自然科學版),2010,2(5):400-404.
[2] 周日貴,龔勇清,聶愛球,等. 定點DSP實現高精度FIR數字濾波[J]. 儀表技術與傳感器,2004(2):400-404.
[3] 呂紹娟,趙不賄. FIR數字濾波的 FPGA實現[J]. 微計算機信息,2008,24(20):223-224.
[4] 徐志軍,徐光輝. CPLD/FPGA的開發與應用[M]. 北京:電子工業出版社,2003.
[5] 黃曉紅,蔡江利. 基于FPGA 的改進型FIR濾波器的實現[J]. 電子技術應用,2009,35(5):32-33.
[6] 楊洪軍,王振友. 基于分布式算法和查找表的FIR濾波器的優化設計[J]. 山東理工大學學報(自然科學版),2009,23(5):104-106.
[7] 劉德建,鄭繼禹.基于流水線技術的FIR 濾波器的設計與實現[J]. 電測與儀表,2008,45(6):54-56.
[8] MEYER-BAESE U. 數字信號處理的FPGA實現[M]. 劉凌,胡永生,譯. 北京:清華大學出版社,2003.
[9] XIE J F,HE J J,TAN G Z. FPGA realization of FIR filters for high-speed and medium-speed by using modified distributed arithmetic architectures[J].Microelectronics Journal,2010,41(6):365-370.
[10] 李彬. FIR數字濾波器的FPGA實現技術研究[D]. 成都:西南交通大學,2007.
[11] 羅朝霞,高書莉. CPLD/FPGA設計及應用[M]. 北京:人民郵電出版社,2007.