基于FPGA的高階FIR抽取濾波器有效實(shí)現(xiàn)結(jié)構(gòu)
摘要 針對高階FIR抽取濾波器直接型結(jié)構(gòu)和多相濾波結(jié)構(gòu)中存在乘法器資源使用較多,導(dǎo)致實(shí)際系統(tǒng)實(shí)現(xiàn)困難的問題,提出了一種適合FPGA實(shí)現(xiàn)的高效多相結(jié)構(gòu)。該結(jié)構(gòu)采用分時(shí)復(fù)用技術(shù),通過提高FPGA工作時(shí)鐘頻率,對降采樣后的濾波路數(shù)和每一路FIR濾波器中乘積和操作均復(fù)用一個(gè)乘法器,從而大幅節(jié)約了FPGA中乘法器資源的使用。結(jié)果表明,針對4096階濾波器和降采樣率為512的實(shí)際抽取濾波囂系統(tǒng),只需要8個(gè)乘法器,且在Xilinx公司VirtexⅣ芯片上能穩(wěn)定工作在204.8 MHz的時(shí)鐘頻率上。
關(guān)鍵詞 抽取濾波器;FPGA;乘法器
由于具有高集成度、高速、可編程等優(yōu)點(diǎn),現(xiàn)場可編程門陣列(Field Programmable Gate Array,F(xiàn)PGA)已經(jīng)廣泛應(yīng)用于多種高速信號實(shí)時(shí)處理領(lǐng)域中。抽取濾波作為多速率信號處理中基本運(yùn)算單元,基于FPGA的FIR抽取濾波器設(shè)計(jì)和實(shí)現(xiàn)是數(shù)字下變頻、信道化等眾多領(lǐng)域中一個(gè)重要環(huán)節(jié)。目前,采用FPGA實(shí)現(xiàn)FIR濾波器主要存在的問題是FPGA芯片中乘法器資源較少。在已知硬件FPGA芯片乘法器資源約束條件下,設(shè)計(jì)更為有效的FIR濾波器實(shí)現(xiàn)結(jié)構(gòu)是致力研究的內(nèi)容。
目前,Altera和Xilinx公司都提供了可塑性很強(qiáng)的FIR濾波器IP核,只要改動(dòng)相應(yīng)的參數(shù)設(shè)置,就可以應(yīng)用于不同產(chǎn)品中。然而,在某些對性能和實(shí)時(shí)性要求較高的場合下,F(xiàn)IR濾波器階數(shù)和FPGA系統(tǒng)工作時(shí)鐘頻率均較高,上述FIR濾波器IP核無法直接使用,甚至無法應(yīng)用。文中以Xilinx公司VirtexⅣ芯片為硬件平臺(tái),針對整數(shù)倍FIR抽取濾波器的多相結(jié)構(gòu)特點(diǎn),提出一種高效FPGA實(shí)現(xiàn)結(jié)構(gòu)。該結(jié)構(gòu)能使用很少的乘法器資源完成高階FIR抽取濾波器,并且工作時(shí)鐘為輸入數(shù)據(jù)速率,有著良好的穩(wěn)定性。
1 FIR抽取濾波器的多相結(jié)構(gòu)
整數(shù)D倍抽取濾波器框圖如圖1所示,對應(yīng)的輸入輸出關(guān)系為
其中,濾波器h(n1T1)的長度為N;T1和T2分別對應(yīng)輸入序列和輸出序列時(shí)間間隔,且滿足T2=DT1。根據(jù)式(1)和式(2)可以得到輸出數(shù)據(jù)速率f2=1/T2為輸入數(shù)據(jù)速率f1=1/T1的1/D,即f2=f1/D。
利用多相分解第1型式可以將H(z1)分解為
其中,。圖2(a)給出了式(3)所示的抽取濾波器多相結(jié)構(gòu)。
為進(jìn)一步利用網(wǎng)絡(luò)結(jié)構(gòu)等效性,可以將抽取與各支路濾波器進(jìn)行等效變換,從而得到如圖2(b)所示更為有效的多相抽取濾波結(jié)構(gòu)圖,其中
相對圖1所示的直接實(shí)現(xiàn)結(jié)構(gòu),圖2(b)所示的高效實(shí)現(xiàn)結(jié)構(gòu)具有如下兩個(gè)特點(diǎn):(1)各支路濾波器輸入信號速率為原輸入信號速率的1/D,從而可以使得各支路濾波器工作在較低的速率上。(2)各支路濾波器系數(shù)個(gè)數(shù)為原濾波器系數(shù)個(gè)數(shù)的1/D。因此,相比圖1,圖2(b)所示的濾波器結(jié)構(gòu)具有更高的運(yùn)算效率。
2 FIR抽取濾波器的多相結(jié)構(gòu)實(shí)現(xiàn)
采用多相結(jié)構(gòu)實(shí)現(xiàn)抽取濾波器的基本思想是將輸入信號進(jìn)行相應(yīng)延遲和降采樣后,分別送至D個(gè)通道進(jìn)行濾波,然后將每一支路濾波后的數(shù)據(jù)相加,得到最終輸出結(jié)果。如2(b)所示,降采樣后進(jìn)行第一個(gè)濾波通道的信號數(shù)據(jù)為…,x(0T1),x(DT1),x(2DT1),…,進(jìn)入第二個(gè)濾波通道的信號數(shù)據(jù)為…,x(-1T1),x((D-1)T1),x((2D-1)T1)…,進(jìn)入最后一個(gè)通道的數(shù)據(jù)為…,x((-D+1)T1),x(1T1),x((2D+1)T1),…,等等。結(jié)合上述特點(diǎn),在FPGA進(jìn)行實(shí)現(xiàn)時(shí),可以將延遲和降采樣結(jié)合在一起,采用圖3(a)所示的實(shí)現(xiàn)結(jié)構(gòu)進(jìn)行抽取濾波。該結(jié)構(gòu)中包括3個(gè)模塊:(1)串并轉(zhuǎn)換,將輸入數(shù)據(jù)轉(zhuǎn)換成D路并行信號。(2)多相濾波模塊,將得到的D路并行信號分別進(jìn)行濾波,每一路所采用的濾波器為原濾波器相應(yīng)的多相分量。(3)加法模塊,該模塊將上述得到D路濾波后的數(shù)據(jù)相加得到最終的一路輸出信號。
但隨著降采樣率D的增加,相應(yīng)的所需要的FPGA資源也急劇增加。例如,當(dāng)D=512時(shí),圖3(a)對應(yīng)的實(shí)現(xiàn)結(jié)構(gòu)需要至少512個(gè)乘法器,這在實(shí)際中難以滿足要求。由于D較大時(shí),各路濾波器工作時(shí)鐘頻率卻很低。為了更少地使用乘法器資源,同時(shí)提高系統(tǒng)的工作效率,在圖3(a)的基礎(chǔ)上可以進(jìn)一步優(yōu)化結(jié)構(gòu)。
改進(jìn)后的實(shí)現(xiàn)結(jié)構(gòu)核心思想:可以將圖3(a)中D個(gè)通道分成L組,每組包括D/L通道,每一組采用分時(shí)復(fù)用方法進(jìn)行實(shí)現(xiàn)濾波。同時(shí),針對每一組濾波,進(jìn)一步提高工作時(shí)鐘頻率,采用更少的乘法器實(shí)現(xiàn)抽取濾波器。下面將結(jié)合一個(gè)具體的設(shè)計(jì)要求給出更適合FPGA實(shí)現(xiàn)的多相濾波結(jié)構(gòu)。該系統(tǒng)指標(biāo)如下:輸入數(shù)據(jù)速率(或系統(tǒng)時(shí)鐘f1=204.8 MHz;降采樣率D=512;濾波器階數(shù)N=4 096;FPGA芯片Xilinx公司的VirtexⅣ芯片。
如果采用圖1所示的直接型結(jié)構(gòu)至少需要4 096個(gè)乘法器,采用圖2(b)所示的多相濾波結(jié)構(gòu)也至少需要512個(gè)乘法器,均無法滿足指標(biāo)要求。為此,可以采用復(fù)用方法進(jìn)行實(shí)現(xiàn)。根據(jù)技術(shù)指標(biāo)要求,原濾波器的多相分量含有N/D=8個(gè)系數(shù),同時(shí),每一路速率為fk=f1/D=0.4 MHz,因此,可以將D路濾波通道分成=8組,每組D/L=64路信號復(fù)用,同時(shí)濾波時(shí)乘法器進(jìn)一步復(fù)用,則每一個(gè)濾波器工作頻率為fl=fk×64 ×8=f1=204.8 MHz。圖3(b)給出了優(yōu)化后的抽取濾波器多相實(shí)現(xiàn)結(jié)構(gòu)。由于每組多相濾波模塊中同時(shí)完成64路的濾波功能,同時(shí)濾波器實(shí)現(xiàn)過程對成績和操作也進(jìn)行復(fù)用,每一組多相濾波模塊只需1個(gè)乘法器,整個(gè)系統(tǒng)共需8個(gè)乘法器,大幅節(jié)約了乘法器資源。實(shí)際也可以根據(jù)不同的系統(tǒng)指標(biāo)要求,針對不同的FPGA芯片性能,設(shè)置不同的復(fù)用路數(shù)和濾波器工作頻率,使整個(gè)系統(tǒng)資源和性能均滿足要求。
3 仿真結(jié)果
為驗(yàn)證該結(jié)構(gòu)的正確性,可分兩步完成:(1)采用Matlab程序進(jìn)行功能仿真。(2)將FPGA程序運(yùn)行結(jié)果與Matlab定點(diǎn)仿真程序結(jié)果進(jìn)行進(jìn)一步比較,以驗(yàn)證FPGA程序的正確性。圖4給出了系統(tǒng)中采用的原型濾波器的幅頻響應(yīng)曲線。圖5給出了采用Matlab分別對圖1和圖3(b)所對應(yīng)的直接型結(jié)構(gòu)和改進(jìn)的多相結(jié)構(gòu)仿真結(jié)果(灰色表示圖1對應(yīng)的仿真結(jié)果,黑色表示圖3(b)對應(yīng)的仿真結(jié)果)。從圖5可以看出,兩者運(yùn)行結(jié)果相同,從而表明文中提出的FPGA結(jié)構(gòu)正確。圖6給出了FPGA程序Modelsim仿真結(jié)果。圖7為FPGA程序輸出數(shù)據(jù)與Matlab定點(diǎn)仿真程序輸出數(shù)據(jù)對比結(jié)果(灰色表示Matlab定點(diǎn)程序?qū)?yīng)的仿真結(jié)果,黑色表示Modelsim對應(yīng)的仿真結(jié)果)。從圖7可以看出設(shè)計(jì)的FPGA程序正確。
4 結(jié)束語
針對高階FIR抽取濾波器,提出了一種更適合FPGA實(shí)現(xiàn)的優(yōu)化多相結(jié)構(gòu)。相對應(yīng)直接型和傳統(tǒng)的多相結(jié)構(gòu),設(shè)計(jì)的結(jié)構(gòu)充分結(jié)合FPGA自身特點(diǎn)和多相濾波結(jié)構(gòu)特性,采用分時(shí)復(fù)用技術(shù),大幅降低了FPGA中乘法器資源的使用,能夠采用一片FPGA實(shí)現(xiàn)高階濾波。目前,該FPGA模塊已經(jīng)應(yīng)用于一個(gè)實(shí)際的數(shù)字分路系統(tǒng)中,程序運(yùn)行正確。