焦淑紅,智 揚
(哈爾濱工程大學 信息與通信工程學院,黑龍江 哈爾濱 150001)
有限沖擊響應(Finite Impluse Response,FIR)數字濾波器是數字信號處理領域中最基本的元器件之一,FIR 濾波器具有工作穩(wěn)定、結構簡單、相位嚴格線性等特點,因而得到了廣泛應用。隨著科學技術及工程實踐的發(fā)展,人們對濾波器性能的要求越來越高,如高頻率分辨率,高阻帶衰減等。這些指標的提升導致FIR濾波器的階數越來越高。目前采用軟件實現高階FIR濾波器無法實現并行處理,不利于提高系統(tǒng)的實時性,而采用專用的濾波器芯片雖然有速度高、工作穩(wěn)定的優(yōu)點,但是靈活性較差。
FPGA 是專用集成電路領域的一種半定制電路,可構建高度并行的數據處理架構,提高系統(tǒng)的實時性[1]。而FPGA 的可重配置性意味著只要開發(fā)出算法,便可通過下載不同的配置文件對相應硬件結構和功能進行升級,這也保證了系統(tǒng)有更強的適應性和靈活性。FPGA 不僅具有專用集成電路速度快和工作穩(wěn)定的特點,又兼具了軟件的實時性,是實現高階FIR 濾波器的理想器件。
本文采用FPGA 實現高階FIR 濾波器,介紹了快速卷積結構的FIR 濾波器原理[2]和一維轉二維FFT算法來實現長序列的FFT[3],給出了FPGA 上各模塊的結構原理和仿真驗證結果。
FIR 濾波器的輸出可用時域上的線性卷積y(n)=h(n)*x(n)實現。若兩序列x(n)與h(n)的長度分別為N1和N2(N1≠N2),將兩序列補零變成L 點的序列x'(n)和h'(n),且滿足
就可用兩序列的圓周卷積代替兩序列的線性卷積。利用“時域序列的圓周卷積等效于頻域的離散頻譜的乘積”這一性質,可先對兩L 點序列進行離散傅里葉變換(DFT)[4]
兩者相乘,得到
最終再對Y(k)進行離散傅里葉反變換(IDFT)
圖1 快速卷積結構示意圖
對于快速卷積結構,將x(n)與h(n)均補零變成長度為L 的序列,則快速卷積結構需要進行(L+1)log(L)次復數乘法和2Llog(L)次復數加法。
隨著FIR 濾波器[6-7]的階數增加,采用線性卷積等方法的運算量會急劇增加,而采用快速卷積結構可大幅減小運算量,當N1和N2足夠長時,用該結構計算線性卷積更快,這對提高濾波器的實時性有著重要的意義。
對于高階的FIR 濾波器[8-9],由于輸入序列補零后長度較長,采用直接級聯(lián)型的方法實現長序列FFT會造成存儲規(guī)模過于龐大,邏輯設計也較為困難,必須加以改進。
設輸入序列x(n)的長度N=2n,其DFT 為
式(5)中0≤k <N,將輸入序列按間隔l 等間距抽取,l是2 的冪次方數。
系統(tǒng)使用Xilinx 公司的XCLVLX240T FPGA,采用Verilog HDL 語言進行算法設計。
如圖2 所示,當系統(tǒng)開始工作時,控制模塊將FFT/IFFT 模塊、頻域相乘模塊[11]等各部分的復位端口拉高1 000 ns 使各模塊復位。復位操作完成后,FFT/IFFT 模塊從存儲器1 中讀取輸入序列進行FFT變換。FFT 變換完成后的數據直接送入頻域相乘模塊中,頻域相乘模塊從濾波器系數存儲器中讀取系數與FFT 結果相乘,并將相乘結果存入存儲器1 中。頻域相乘運算結束后,控制模塊對各模塊進行復位,復位完成后,FFT/IFFT 模塊從存儲器1 中讀取數據進行IFFT變換,得到濾波器輸出結果,并將結果重新存儲在存儲器1 中。
圖2 FIR 濾波器系統(tǒng)模塊組成示意圖
FFT/IFFT 模塊在進行FFT 時從存儲器1 中讀取列數據,送入128 點列變換FFT 核中,FFT 核的輸出連接到復數乘法器,與旋轉因子相乘后送入存儲器2 暫存。列變換完畢后,256 點行變換FFT 核從存儲器2中讀取數據進行行變換,并輸出最終的FFT 運算結果。IFFT 過程與FFT 過程類似,只是在讀取旋轉因子時,對旋轉因子的最高位,即符號虛部符號位的最高位取反,得到FFT/IFFT 模塊內部的連接框圖如圖3所示。
頻域相乘模塊的作用是從系數存儲器中讀取濾波器系數并與FFT 的輸出相乘,得到頻域的乘積結果。頻域相乘模塊包括地址控制單元和復數乘法器兩部分,其內部連接如圖4 所示。
圖3 FFT/IFFT 模塊內部結構圖
圖4 頻域相乘模塊結構圖
如圖4 所示,當FFT_MODE 信號為低電平時,系統(tǒng)工作在IFFT 狀態(tài)下,復數乘法器不啟動,FFT/IFFT模塊輸出數據xk_re 與xk_im 通過多路選擇器直接連接到存儲器1 的數據輸入端口,FFT/IFFT 模塊輸出的寫使能信號和地址信號也通過多路選擇器直接連接到存儲器1 的寫使能端口和地址端口。
當FFT_MODE 信號為高電平時,系統(tǒng)工作在FFT狀態(tài)下。控制單元輸出系數存儲器地址信號和讀使能信號,與xk_re、xk_im 相乘。當復數乘法器RDY 信號拉高時,控制單元輸出存儲器1 的地址信號和寫使能信號,并通過多路選擇器連接到存儲器1 相應的端口,頻域相乘結果存入存儲器1 中。
本文采用Matlab 對FPGA 進行輔助設計和仿真驗證,表1 是FIR 濾波器的設計指標。
表1 FIR 濾波器設計指標
根據上述指標,通過Matlab 的FDATool 采用凱塞窗設計得到一個15 056 階的帶通FIR 濾波器,并產生測試數據x(t)=0.5sin(270×2πt) +2sin(40×2πt)。測試數據與濾波器系數補零成為32 768 點序列,并對補零后的濾波器系數進行FFT。將這兩組數據寫入.coe 文件中,連同設計文件下載到FPGA 中?;贔PGA的高階FIR 濾波器仿真輸出波形如圖5 所示。
圖5 基于FPGA 的高階FIR 濾波器仿真輸出波形
仿真軟件ISIM 將仿真輸出數據存儲在.txt 文件中,Matlab 讀取.txt 文件并繪制圖形得到如圖7 所示的結果。
圖6 測試數據波形
圖7 FPGA 仿真輸出結果
由圖可看出,測試數據中包含的40 Hz 頻率成分已經完全被濾除,只保留了270 Hz 的頻率成分,可見基于FPGA 的高階FIR 濾波器完全可達到設計要求。在速度方面,基于FPGA 的高階FIR 濾波器在200 MHz 工作時鐘下完成濾波操作只需1.5 ms,速度超過了Matlab。
本文詳細敘述了基于快速卷積的FIR 濾波器原理,并推導了一維大點數FFT 轉二維小點數FFT 的公式,給出了基于FPGA 的高階FIR 濾波器的工作過程和FFT/IFFT 模塊等關鍵模塊的結構原理及工作過程。仿真驗證表明,采用快速卷積結構實現高階FIR 濾波器可大幅減少運算量,達到實時處理的效果。采用一維大點數FFT 轉二維小點數FFT 的方法可以有效減少FPGA 片內存儲資源的消耗,并降低了邏輯控制的復雜性。相比Matlab,FPGA 能做到實時處理,且誤差可控制在較小的范圍內,是實現高階FIR 濾波器的有效手段。
[1] 王志超.基于FPGA 的低通濾波器[D].哈爾濱:哈爾濱理工大學,2012.
[2] Meher P K.New approach or look-up-table design and memory-based realization of FIR digitial filter[J].IEEE Circuits and Systems Scoiety,2010,57(3):592-603.
[3] 趙忠武.32 位浮點FFT 專用信號處理器設計[D].北京:北京理工大學,2003.
[4] Cheng Hansung.Design and implementation of a scalable fast fourier transform core[J].IEEE Transactions on Cricuit,2002,78(6):63-67.
[5] Johanson S,Shousheng He,Nilson P.Wordlength optimization of a pipelined FFT processor Circuit and Systems[C].Lanzhou:42ndMidwest Symposium on Cricuit,2000:501-503.
[6] 蔣壘,王昌林,劉鎏,等.基于FPGA 的FIR 數字濾波器算法實現[J].艦船電子工程,2006(1):151-156.
[7] 劉剛,林志遠,王毅增.基于流水線的并行高效FIR 濾波器設計[J].電子技術應用,2003(7):60-62.
[8] 唐治德,劉敏,劉曉明.用高密度可編程邏輯器件實現參數化FIR 濾波器[J].重慶大學學報:自然科學版,2002,25(3):72-74.
[9] 高耀鴻.基于FPGA 的FIR 低通濾波器[D].長沙:湖南大學,2012.
[10]高振斌,陳禾,韓秋月.可變2n 點流水線FFT 處理器的設計與實現[J].北京理工大學學報,2006,26(4):338-341.
[11]石碧,程維綜,何曉雄.16X16 位帶符號無符號基于RTL級的可綜合的高速乘法器[J].電子工程師,2003,29(6):58-62.