曹振吉 何敏
摘 要: 為了滿足信號(hào)處理快速和靈活的要求,基于FPGA實(shí)現(xiàn)的FIR濾波器有這兩方面的優(yōu)勢(shì),使用Matlab中的FDATool計(jì)算出濾波器系數(shù)并分析其幅頻特性,利用FPGA分別設(shè)計(jì)實(shí)現(xiàn)串行結(jié)構(gòu)、全并行結(jié)構(gòu)以及基于IP核的FIR數(shù)字濾波器。利用Matlab軟件進(jìn)行FIR濾波器仿真,并與基于FPGA實(shí)現(xiàn)濾波器的Modelsim仿真輸出數(shù)據(jù)進(jìn)行比較,結(jié)果表明,設(shè)計(jì)的FIR濾波器功能正確、濾波性能良好。通過(guò)對(duì)不同結(jié)構(gòu)濾波器的資源占用情況和數(shù)據(jù)處理速度進(jìn)行分析,得出不同應(yīng)用場(chǎng)合可選擇不同的濾波器結(jié)構(gòu)的結(jié)論。
關(guān)鍵詞: FIR; FPGA; 串行結(jié)構(gòu); 并行結(jié)構(gòu); IP核
中圖分類號(hào): TN713?34 文獻(xiàn)標(biāo)識(shí)碼: A 文章編號(hào): 1004?373X(2015)19?0098?04
Abstract: Since the actual signal processing has the requirements of real?time response and flexibility, the implementation of FPGA?based FIR filter has the two advantages. The filter coefficient is calculated and the magnitude?frequency characteristic is analyzed by FDATool in Matlab. The FIR digital filters of serial structure, parallel structure and IP core based were designed and realized respectively by FPGA. FIR filters are simulated by Matlab, and compared with the data output by Modelsim simulation of the filter implemented by FPGA, the results show that functions of the designed FIR filters are correct, and filtering performance is better. The resource occupation situation and data processing speed of different structure filters are analyzed, and the conclusion of filters with different structures can be chosen to apply to suitable situation was obtained.
Keywords: FIR; FPGA; serial structure; parallel structure; IP core
0 引 言
數(shù)字濾波器是一個(gè)按預(yù)定的有限精度算法實(shí)現(xiàn)的、將輸入的數(shù)字信號(hào)轉(zhuǎn)換為所要求的輸出數(shù)字信號(hào)的線性時(shí)不變系統(tǒng)[1?2]。由于FPGA的并行處理特性和自上到下的編程思想,所以其實(shí)現(xiàn)的數(shù)字濾波器能夠兼顧系統(tǒng)實(shí)時(shí)性和靈活性的要求[3?4]。
根據(jù)系統(tǒng)時(shí)域性能,數(shù)字濾波器分為有限長(zhǎng)單位脈沖響應(yīng)(Finite Impulse Response,F(xiàn)IR)數(shù)字濾波器和無(wú)限長(zhǎng)單位脈沖響應(yīng)(Infinite Impulse Response,IIR)數(shù)字濾波器。相對(duì)于IIR數(shù)字濾波器,F(xiàn)IR濾波器有較大的優(yōu)越性[5?6],所以本文將對(duì)FIR濾波器進(jìn)行設(shè)計(jì)。FIR濾波器系數(shù)的設(shè)計(jì)方法主要有3種,包括窗函數(shù)法、頻率采樣法和最優(yōu)化方法[5]。
本文借助Matlab中的FDATool工具,針對(duì)濾波要求設(shè)置合適的參數(shù),可以方便地求解出濾波器系數(shù)和響應(yīng)曲線,然后利用FPGA分別設(shè)計(jì)實(shí)現(xiàn)串行結(jié)構(gòu)、全并行結(jié)構(gòu)以及基于IP核的FIR數(shù)字濾波器,利用Matlab軟件進(jìn)行FIR濾波器仿真,并與基于FPGA實(shí)現(xiàn)濾波器的Modelsim輸出數(shù)據(jù)進(jìn)行對(duì)比,以此判斷3種結(jié)構(gòu)濾波器設(shè)計(jì)的正確性。
1 基于Matlab的FIR數(shù)字濾波器的設(shè)計(jì)
1.1 FIR濾波器基本原理及結(jié)構(gòu)
根據(jù)FIR濾波器硬件實(shí)現(xiàn)結(jié)構(gòu)的不同,可將其分為直接型、級(jí)聯(lián)型、頻率采樣型和快速卷積型[6]等4種形式。本文主要討論直接型結(jié)構(gòu)。根據(jù)直接型FIR濾波器的原理,以長(zhǎng)度[N]為例,輸出一個(gè)濾波數(shù)據(jù),需要完成[N]次乘法和[N-1]次加法運(yùn)算。
依據(jù)FIR濾波器嚴(yán)格的線性相位特點(diǎn),得到濾波器系數(shù)具有對(duì)稱性,因此能夠采用線性相位結(jié)構(gòu),如圖1所示[7],可以減少運(yùn)算次數(shù)和節(jié)約硬件資源。因?yàn)閇h(n)]關(guān)于[n=(N-1)2]對(duì)稱[7],可以先將位置上對(duì)稱的兩個(gè)數(shù)據(jù)加起來(lái),再與相應(yīng)的濾波器系數(shù)相乘,然后經(jīng)過(guò)累加得到最終的結(jié)果。采用這種結(jié)構(gòu),每得到一個(gè)輸出數(shù)據(jù),要完成[N2]次乘法和[N-1]次加法,與之前相比,可以減少[N2]次乘法運(yùn)算。
1.2 基于Matlab的FIR數(shù)字濾波器的設(shè)計(jì)
調(diào)用Matlab軟件中的FDATool工具,設(shè)置相應(yīng)參數(shù)。求解濾波器系數(shù)時(shí),F(xiàn)DATool可方便地選擇系數(shù)的量化位數(shù)。完成濾波器設(shè)計(jì)參數(shù)設(shè)置后,可直接生成FPGA所需的濾波器系數(shù)配置文件。
本文要設(shè)計(jì)的FIR濾波器參數(shù)為:低通濾波器,采樣頻率為50 kHz;過(guò)渡帶為12~15 kHz,通帶紋波最大為0.1,阻帶紋波最大為0.001。通過(guò)Matlab編程,分別對(duì)濾波器系數(shù)未量化、10位、12位、14位量化的濾波器幅頻響應(yīng)結(jié)果進(jìn)行比較,如圖2所示。從圖2中可以看出,量化位數(shù)對(duì)濾波器的阻帶紋波有較大的影響,且量化位數(shù)越高影響越小,故采用14位量化。endprint
2 基于FPGA的FIR數(shù)字濾波器的設(shè)計(jì)
以低通濾波器為例,本文分別對(duì)全串行結(jié)構(gòu)、全并行結(jié)構(gòu)以及基于FIR核的FIR數(shù)字濾波器進(jìn)行設(shè)計(jì)和仿真。
2.1 全串行結(jié)構(gòu)的FIR濾波器
全串行結(jié)構(gòu)是指只用一個(gè)加法器串行實(shí)現(xiàn)濾波器對(duì)稱系數(shù)的加法運(yùn)算。設(shè)計(jì)一個(gè)低通FIR濾波器,采用凱塞窗函數(shù),其他參數(shù)同上,長(zhǎng)度為16,F(xiàn)PGA的系統(tǒng)時(shí)鐘為50 MHz,輸入12 b數(shù)據(jù),輸出29 b濾波結(jié)果。
首先采用Matlab軟件求得14位量化后的濾波器系數(shù),然后根據(jù)圖1所示的結(jié)構(gòu)采用VHDL語(yǔ)言完成濾波器的編程。在Matlab軟件中仿真出由9.765 kHz和18 kHz兩種頻率信號(hào)疊加的輸入信號(hào),經(jīng)Matlab編寫的FIR濾波前后的頻譜如圖3所示。
從圖3,圖4可以看出,F(xiàn)PGA實(shí)現(xiàn)的濾波器輸出信號(hào)頻譜與Matlab直接仿真的結(jié)果幾乎相同。從圖5可以看出,疊加輸入信號(hào)濾波后形成頻率為9.765 kHz的單頻信號(hào),即將18 kHz的信號(hào)濾除掉了。因此,從仿真結(jié)果來(lái)看,通過(guò)FPGA設(shè)計(jì)實(shí)現(xiàn)的全串行結(jié)構(gòu)的FIR濾波器滿足濾波要求。
2.2 全并行結(jié)構(gòu)的FIR濾波器
全并行結(jié)構(gòu)濾波器的思想就是將一次濾波運(yùn)算內(nèi)的乘法同時(shí)執(zhí)行,通過(guò)硬件資源換取運(yùn)行速度。這種結(jié)構(gòu)可以采用直接型、轉(zhuǎn)置型和脈動(dòng)方式實(shí)現(xiàn)[5,8?9]。
基于加法樹直接型結(jié)構(gòu)的全并行FIR低通濾波器的設(shè)計(jì)過(guò)程與串行結(jié)構(gòu)濾波器相同,直接給出仿真結(jié)果。Matlab仿真的信號(hào)濾波前后的頻譜如圖6所示,F(xiàn)PGA仿真的信號(hào)濾波前后的頻譜如圖7所示,F(xiàn)PGA仿真的信號(hào)濾波前后的時(shí)域波形如圖8所示。
從圖6,圖7可以看出,F(xiàn)PGA實(shí)現(xiàn)的濾波器輸出信號(hào)頻譜與Matlab仿真的結(jié)果幾乎相同。從圖8可以看出,合成單頻信號(hào)濾波后,已經(jīng)形成規(guī)則的頻率為9.765 kHz的單頻信號(hào)。從仿真結(jié)果來(lái)看,使用FPGA設(shè)計(jì)全并行結(jié)構(gòu)的濾波器是正確有效的。
2.3 基于IP核的FIR濾波器
采用IP核設(shè)計(jì)一個(gè)低通最優(yōu)FIR濾波器,過(guò)渡帶為12~15 kHz,采樣頻率為50 kHz,通帶紋波最大為0.1,阻帶紋波最大為0.001。系統(tǒng)時(shí)鐘頻率為50 MHz,輸入和輸出數(shù)據(jù)位寬均為10 b。
從圖9,圖10可以看出,F(xiàn)PGA實(shí)現(xiàn)后的濾波器輸出信號(hào)頻譜與Matlab直接仿真的結(jié)果幾乎相同。從圖11可以看出,合成信號(hào)濾波后將18 kHz的高頻信號(hào)濾除掉了。因此,從仿真結(jié)果來(lái)看,基于IP核實(shí)現(xiàn)的FIR濾波器功能正確,滿足設(shè)計(jì)要求。
3 性能比較
從資源占用情況來(lái)看,為了便于對(duì)比,選用Xilinx公司的Spartan?6系列的XC6SLX45?CSG484?3芯片,從ISE的Design Summary獲得3種結(jié)構(gòu)FIR濾波器分別占用邏輯資源的數(shù)量,如表1所示。顯然,全并行結(jié)構(gòu)的濾波器使用的寄存器(Registers)、查找表(LUTs)和乘法器(DSP48A1s)的數(shù)量大于另外兩種結(jié)構(gòu)濾波器的使用數(shù)量,而全串行結(jié)構(gòu)的濾波器是占用硬件資源最少的。
從數(shù)據(jù)處理速度來(lái)看,全并行結(jié)構(gòu)具有很高的數(shù)據(jù)處理速度,其系統(tǒng)頻率與數(shù)據(jù)速率相同;全串行結(jié)構(gòu)的數(shù)據(jù)速率是系統(tǒng)頻率的[1N](N為乘加運(yùn)算的次數(shù))[6],特別在乘加次數(shù)[N]較大時(shí),與并行結(jié)構(gòu)濾波器的數(shù)據(jù)速率有較大差距。
基于IP核實(shí)現(xiàn)的FIR濾波器比較靈活,可以根據(jù)參數(shù)設(shè)置選擇合適的硬件資源占用數(shù)量與數(shù)據(jù)處理速率。所以,在速度作為最重要考量的因素時(shí),選擇全并行結(jié)構(gòu)能收到較好的效果,比如可以將其應(yīng)用于高速測(cè)量系統(tǒng)中;全串行結(jié)構(gòu)濾波器占用硬件資源少,但是處理數(shù)據(jù)的速率較慢,可以用于速度要求不高且硬件成本較低的系統(tǒng)中。若是在一般應(yīng)用場(chǎng)合,使用IP核設(shè)計(jì)濾波器方便靈活,可以兼顧占用資源與速度兩方面的要求。
4 結(jié) 語(yǔ)
本文借助Matlab計(jì)算出濾波器系數(shù),然后利用FPGA分別設(shè)計(jì)實(shí)現(xiàn)串行結(jié)構(gòu)、全并行結(jié)構(gòu)以及基于IP核的FIR數(shù)字濾波器。其中,串行結(jié)構(gòu)和并行結(jié)構(gòu)的FIR濾波器性能各有優(yōu)勢(shì)[10],串行結(jié)構(gòu)濾波器占用資源少,但運(yùn)算速度較并行結(jié)構(gòu)慢,并行結(jié)構(gòu)濾波器運(yùn)算速度快,但占用資源多;而基于IP核的數(shù)字濾波器則能夠兼具兩者的優(yōu)勢(shì),占用資源少,運(yùn)算速度快,具有非常好的靈活性。利用Matlab軟件進(jìn)行FIR濾波器仿真,并與基于FPGA實(shí)現(xiàn)的濾波器的輸出結(jié)果進(jìn)行比較,仿真結(jié)果表明,本文設(shè)計(jì)的3種FIR濾波器功能正確,濾波性能良好,選擇不同的結(jié)構(gòu)設(shè)計(jì)濾波器可以滿足不同的系統(tǒng)要求。
參考文獻(xiàn)
[1] 江志紅.深入淺出數(shù)字信號(hào)處理[M].北京:北京航空航天大學(xué)出版社,2012.
[2] 程佩清.數(shù)字信號(hào)處理教程[M].北京:清華大學(xué)出版社,2003.
[3] 孫耀奇,高火濤,熊超,等.基于Matlab和FPGA的FIR數(shù)字濾波器設(shè)計(jì)和實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),2008,31(11):89?92.
[4] 高耀紅.基于FPGA的FIR低通濾波器[D].長(zhǎng)沙:湖南大學(xué),2012.
[5] 高亞軍.基于FPGA的數(shù)字信號(hào)處理[M].北京:電子工業(yè)出版社,2012.
[6] 杜勇,路建功,李元洲.數(shù)字濾波器的Matlab與FPGA實(shí)現(xiàn)[M].北京:電子工業(yè)出版社,2012.
[7] 蔣立平,譚雪琴,王建新.一種基于FPGA的高效FIR濾波器的設(shè)計(jì)與實(shí)現(xiàn)[J].南京理工大學(xué)學(xué)報(bào),2007,31(1):125?128.
[8] 鄭運(yùn)冬.基于FPGA的FIR濾波器設(shè)計(jì)與實(shí)現(xiàn)[D].上海:復(fù)旦大學(xué),2013.
[9] 謝海霞,孫志雄.可編程FIR濾波器的FPGA實(shí)現(xiàn)[J].電子器件,2012,35(2):232?235.
[10] 馬駿,何敏,楊鳴.基于FPGA的電磁金屬探傷系統(tǒng)及其微弱信號(hào)處理[J].測(cè)試技術(shù)學(xué)報(bào),2014,28(5):425?430.
[11] 單文軍,周雪純,李文華.基于FPGA的FIR數(shù)字濾波器設(shè)計(jì)與實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),2013,36(14):123?126.endprint