周龍,王紅玲,崔新瑩,黃琳華
(哈爾濱理工大學(xué)應(yīng)用科學(xué)學(xué)院電子科學(xué)與技術(shù),黑龍江哈爾濱150080)
基于FPGA及分布式算法濾波器
周龍,王紅玲,崔新瑩,黃琳華
(哈爾濱理工大學(xué)應(yīng)用科學(xué)學(xué)院電子科學(xué)與技術(shù),黑龍江哈爾濱150080)
文中基于分布式算法實現(xiàn)FIR數(shù)字濾波器的設(shè)計方案。該方案分為3部分,首先是利用Matlab軟件產(chǎn)生需要的數(shù)據(jù);使用FDATool工具包生成濾波算法所需要的系數(shù);完成ROM查找表中數(shù)據(jù)的計算。第二部分是采用分布式算法設(shè)計基于FPGA的實現(xiàn)結(jié)構(gòu),完全避免了乘法運算,資源優(yōu)化性高;第三部分通過對FPGA的濾波器設(shè)計方案進行仿真驗證,并與使用Matlab模擬濾波算法產(chǎn)生的波形進行比較,兩者能夠達到幾乎一致,得出電路設(shè)計合理,濾波效果達標(biāo)的結(jié)論。
FIR;FPGA;分布式;并行結(jié)構(gòu)
濾波器是一種選頻設(shè)備,可以選取所需的信號頻率,抑制不需要的信號頻率。根據(jù)選頻范圍可分為4種基本類型:低通濾波器、高通濾波器、帶通濾波器、帶阻濾波器。低通濾波器的選頻范圍是低于某一頻率的信號不受衰減,而高于該頻率的信號受到大幅衰減;高通濾波器選頻范圍與低通濾波器相反;帶通濾波器的選頻范圍是在某兩個頻率之間信號可以正常通過,而其余頻率的信號衰減;帶阻濾波器與帶通濾波器相反[1-2]。
濾波器的應(yīng)用領(lǐng)域非常廣泛,從民用設(shè)備到軍用設(shè)施,濾波器都是必不可少的重要工具。實現(xiàn)濾波器的方案有很多種,但是從信號穩(wěn)定性及不失真的角度看,F(xiàn)IR數(shù)字濾波器具有明顯優(yōu)勢,能夠避免模擬濾波器電壓漂移、溫度漂移、噪聲等問題,同時FIR濾波器沒有反饋回路,所以穩(wěn)定,也可以保證精確的線性相位。最常見的數(shù)字濾波器都是線性時不變系統(tǒng),其數(shù)學(xué)表達形式是一個卷積式,卷積過程如(1)所示。
本設(shè)計是基于以上的算法實現(xiàn)一種改進算法的FIR數(shù)字濾波器。其技術(shù)指標(biāo)是:截止頻率為10 800 Hz、采樣頻率為48 000 Hz、帶寬3 dB、16階的FIR低通數(shù)字濾波器。FIR數(shù)字濾波器可以通過軟件或者硬件兩種方式實現(xiàn)。軟件的方式是在通用計算機上運行濾波軟件,軟件可以使用已經(jīng)被開發(fā)出來的工具包進行設(shè)計,也可以自行編程完成,但是軟件實現(xiàn)的速度慢。硬件實現(xiàn)的方式可以加速計算。本文針對基于FPGA的硬件方案進行研發(fā)設(shè)計,并與使用Matlab工具包進行濾波的仿真效果進行對比。
FDATool是Matlab提供的一種關(guān)于濾波器設(shè)計的工具包。在FDATool的界面上設(shè)置濾波器參數(shù)如圖1所示,依次設(shè)置為:FIR低通濾波器、窗函數(shù)法設(shè)計、窗口類型是Kaiser、16階、采樣頻率48 000 Hz、截止頻率10 800 Hz。
圖1 FDATool界面參數(shù)設(shè)置
如圖1可見,在橫坐標(biāo)超過10 kHz的位置,信號振幅開始大幅衰減,產(chǎn)生濾波效果;在10 kHz之前,信號振幅較平穩(wěn),維持在上下波動不超過3 dB的范圍內(nèi)。本設(shè)計利用窗函數(shù)法產(chǎn)生FIR濾波器系數(shù),對FIR濾波器而言,沖擊響應(yīng)就是濾波系數(shù),因此可以從時域出發(fā),選取一個理想濾波器,截取有限長的一段單位沖擊響應(yīng)作為系數(shù),沖擊響應(yīng)的長度就是濾波器的階數(shù)。由于沖擊響應(yīng)對稱,因此該方法生成的系數(shù)具有對稱性。針對本設(shè)計16階的濾波器,窗函數(shù)法生成的系數(shù)導(dǎo)出,如圖2所示。
為了完成后續(xù)對濾波器的仿真測試,需要先生成帶干擾的數(shù)據(jù),作為濾波器的輸入數(shù)據(jù),進行濾波處理,本設(shè)計使用2 000 Hz的正弦波上疊加20 000 Hz的余弦波,得到的波形如圖3所示。
圖2 窗函數(shù)法生成系數(shù)
圖3 帶干擾波形
如圖3所示,疊加波形的數(shù)據(jù)范圍在-2~+2之間,將數(shù)據(jù)打印出來,如圖4所示。
圖4 干擾后的數(shù)據(jù)
可見所成的數(shù)據(jù)均為浮點數(shù),在硬件系統(tǒng)中對浮點數(shù)進行運算處理是比較困難的,因此,本設(shè)計考慮采用Q格式轉(zhuǎn)換的方法,對浮點數(shù)據(jù)進行轉(zhuǎn)化。Q格式轉(zhuǎn)化的思想是先對浮點數(shù)據(jù)進行擴大,擴大成整數(shù),用整數(shù)進行運算,結(jié)果再按照相應(yīng)的倍數(shù)縮減。Qn表示小數(shù)點后有n位數(shù),將小數(shù)點右移n位即得到擴大后的浮點數(shù)。如表1所示,列出幾種常用Qn形式及其適用數(shù)值范圍與精度。根據(jù)所需要擴大數(shù)據(jù)的范圍選擇Qn類型。同時,為了方便計算,本設(shè)計先將數(shù)據(jù)轉(zhuǎn)化為無符號數(shù)據(jù)計算,采取的方法是令輸出數(shù)據(jù)先加2,再使用Qn格式轉(zhuǎn)化,相當(dāng)于將上述波形整體向上移動兩個單位,使所有數(shù)據(jù)全部在正數(shù)范圍內(nèi)表示。對照本設(shè)計采用的帶干擾數(shù)據(jù),可以確定在Q13格式的范圍內(nèi),因此,對本設(shè)計的干擾數(shù)據(jù)進行Q13格式的擴大。
表1 Qn格式
分布式算法:根據(jù)上文的卷積式(1)可知,濾波算法實際上就是計算乘累加的過程,在FPGA設(shè)計中,分布式算法是一種實現(xiàn)乘累加的重要解決方案,能夠顯著節(jié)省硬件資源,提升運算速度。本設(shè)計即是采用分布式算法實現(xiàn)FIR濾波器[3-5]。
等式(2)代表L階FIR濾波器的輸出。L是濾波器系數(shù)h(k)的階數(shù),x(n)代表輸入的時間序列。
假設(shè)h[n]均為已知常數(shù),x(n)代表輸入,x(n-k)代表延遲了k個周期后的數(shù)據(jù),在硬件中即代表輸入在寄存器中傳遞了k級,等式(2)可是被重寫為如下:
當(dāng)輸入數(shù)據(jù)是二進制,x[n]可以被表示成式(4),其中xb(n)是x[n]的第b位,B是輸入位寬:
將式(4)待入式(3)并進一步化簡:
上式即得出了L個樣本依次輸入,通過系數(shù)c[n]每一次和x[n]中的一位做與運算獲得部分乘積。在FPGA中,與操作和加法器可以由由查找表代替來得到部分積。將二進制數(shù)x[n]與系數(shù)c[n]相乘的可能性全部計算出來存儲到查找表中。這樣,就可以通過x[n]作為二進制的地址來查找每一次乘積的結(jié)果。再將得到的結(jié)果向左移位來完成與2^b相乘。每一個輸入的每一位都進行以上操作,最后,將所有的結(jié)果累加即可獲得輸出值。這里要說明的是,由于硬件系統(tǒng)每個周期只能輸入一個數(shù)據(jù),因此,在小于階數(shù)L個周期內(nèi),乘積累加和的結(jié)果并不準(zhǔn)確,假設(shè)本周期輸入第3個數(shù)據(jù),階數(shù)是16,那么:
可見,只有當(dāng)數(shù)據(jù)多余階數(shù)個時,才會有完整的計算結(jié)果。
FPGA設(shè)計結(jié)構(gòu):根據(jù)以上對于分布式算法的介紹,采用FPGA的并行方式實現(xiàn),可以加速計算。本設(shè)計完成16階FIR數(shù)字濾波。設(shè)計結(jié)構(gòu)圖如圖5所示。
圖5 FIR濾波器結(jié)構(gòu)圖
第一個級聯(lián)模塊,是將16個輸入數(shù)據(jù)一級一級向下傳遞并存儲在寄存器中,一個N階的濾波器,級聯(lián)模塊應(yīng)該保留N個輸入數(shù)據(jù)。因此,在前16個時鐘周期,寄存器級聯(lián)模塊中沒有填滿數(shù)據(jù),輸出結(jié)果在16個時鐘周期之后有效。
ROM模塊輸出的結(jié)果作為移位模塊的輸入數(shù)據(jù),在數(shù)字電路中,向左移一位代表乘以2,在分布式算法中,每一個ROM的輸出結(jié)果都需要乘以2^b(對于任意一個ROM,b的值是固定的),如果使用乘法器實現(xiàn)這步計算,是需要占用很多FPGA內(nèi)部資源的,因此,將乘法計算轉(zhuǎn)化成移位操作,節(jié)省了資源也簡化了計算。移位模塊的輸出作為加法模塊的輸入,加法模塊將所有的計算結(jié)果進行累加,即得到最終的濾波結(jié)果。
硬件仿真是使用ISE自帶仿真工具ISIM進行,將Matlab產(chǎn)生的帶干擾的數(shù)據(jù)作為輸入激勵,將Matlab中計算的查找表數(shù)據(jù)存入ROM,仿真得到的結(jié)果數(shù)據(jù)存入文本文件中,Matlab讀取并打印出波形,如圖6中標(biāo)識“Filter using FPGA”的波形圖所示。在本設(shè)計中配合使用了Matlab軟件用來產(chǎn)生數(shù)據(jù)及打印波形,Matlab還可以用來完成仿真設(shè)計。本設(shè)計即使用了未經(jīng)改進的濾波算法在Matlab上進行了仿真驗證,與FPGA模塊處理的波形做濾波效果的比對,如圖6中標(biāo)志的“Filter using Matlab”即是直接使用Matlab實現(xiàn)[6-9]。
圖6 Matlab實現(xiàn)與FPGA實現(xiàn)的濾波對比圖
由上圖可見,在波形起始處,由于數(shù)據(jù)小于濾波器設(shè)定的階數(shù),計算的結(jié)果是不準(zhǔn)確的,當(dāng)輸入數(shù)據(jù)量達到設(shè)定的濾波階數(shù)后,兩種方法濾波處理后的波形完全一致,說明FPGA模塊實現(xiàn)的分布式算法的濾波器與軟件使用卷積方法實現(xiàn)的濾波器在濾波效果上沒有差別,但是硬件模塊速度更快,而且分布式算法能夠節(jié)省資源[10-15]。
本文完整地討論了基于FPGA的FIR濾波器的設(shè)計,并對其中涉及關(guān)鍵問題進行了詳細(xì)的討論。針對優(yōu)化資源和結(jié)構(gòu),采用了分布式的解決方法。使用該設(shè)計方案在簡化算法的同時,提升了濾波的速度與性能,具有很高的推廣價值。
[1]梁麗娟,安蘭珠.利用MATLAB實現(xiàn)FIR數(shù)字濾波器設(shè)計[J].中國科技信息,2012(10):137.
[2]何蘊良,耿淑琴,汪金輝.基于Verilog的FIR數(shù)字濾波器設(shè)計與仿真[J].現(xiàn)代電子技術(shù),2016,39(10):1-4.
[3]郭廣浩,劉志哲,孟慶龍,等.多級并行流水FIR數(shù)字濾波器的設(shè)計與驗證[J].現(xiàn)代電子技術(shù),2015(1):69-72.
[4]余琳,黃光明.基于FPGA的FIR濾波器的性能研究[J].電子設(shè)計工程,2011(9):125-128.
[5]高耀鴻.基于FPGA的FIR低通濾波器[D].長沙:湖南大學(xué),2012.
[6]曹振吉,何敏.基于FPGA和Matlab的FIR數(shù)字濾波器[J].現(xiàn)代電子技術(shù),2015(19):98-101.
[7]趙秀鳥,仲佳嘉.一種FIR數(shù)字濾波器的快速算法及DSP實現(xiàn)[J].數(shù)字技術(shù)與應(yīng)用,2011(6):131-132.
[8]余丹,孫文.Matlab軟件設(shè)計應(yīng)用之FIR數(shù)字濾波器[J].山東工業(yè)技術(shù),2015(10):140-140.
[9]付正,鄭維智,江遠(yuǎn)志.基于FPGA的并行FIR數(shù)字濾波器硬件實現(xiàn)及優(yōu)化[J].食品科學(xué)技術(shù)學(xué)報,2010,28(5):69-74.
[10]王香,張莉莉.基于FPGA的16階FIR數(shù)字濾波器的設(shè)計[J].電子世界,2013(16):148-149.
[11]欒軍,王俊,袁運能.基于fpga的高速fir數(shù)字濾波器:CN,CN 102355232 A[P].2012.
[12]鄭爭兵.基于DSP Builder的FIR數(shù)字濾波器設(shè)計與仿真[J].陜西理工學(xué)院學(xué)報:自然科學(xué)版,2013,29(2):34-38.
[13]趙穎,劉祖深,李勝寅.基于MATLAB的FIR數(shù)字濾波器的方法設(shè)計[J].國外電子測量技術(shù),2012,31(10):35-37.
[14]劉慶良,盧榮軍,李建清.FIR數(shù)字濾波器的FPGA實現(xiàn)研究[J].電子設(shè)計工程,2010,18(3):59-61.
[15]趙濤,蔣媛.基于Matlab的FIR數(shù)字濾波器的設(shè)計[J].科技信息,2010(18):386-387.
Filter based on FPGA and distributed algorithm
ZHOU Long,WANG Hong-ling,CUI Xin-ying,HUANG Lin-hua
(School of Applied Science,Electronic Science and Technology,Harbin University of Science and Technology,Harbin150080,China)
The design scheme of FIR digital filter based on distributed algorithm is implemented in this paper.The scheme is divided into three parts,the first is the use of Matlab software to generate the required data;the use of the FDATool toolkit to generate the coefficients of the filter algorithm;complete the calculation of the data in the ROM lookup table.The second part is the design and implementation of distributed algorithm based on the FPGA structure,completely avoid the multiplication,resource optimization;the third part is simulated through the design of FPGA filter,and simulation and filtering algorithm using Matlab waveform comparison,both can achieve almost the same,the circuit design is reasonable,the filtering effect of the standard conclusion.
FIR;FPGA;distributed algorithm;parallel structure
TN492
A
1674-6236(2017)23-0139-04
2016-09-21稿件編號:201609189
周龍(1993—),男,山西朔州人。研究方向:電子科學(xué)與技術(shù)。