一種用于數(shù)字下變頻的高階分布式FIR濾波器及FPGA實(shí)現(xiàn)
摘 要: 設(shè)計(jì)了一種用于數(shù)字下變頻的256階分布式FIR濾波器。通過分析分布式FIR濾器結(jié)構(gòu)給實(shí)現(xiàn)電路所需資源和運(yùn)算速度帶來的影響,確定了適用于Cyclone III系列FPGA的實(shí)現(xiàn)結(jié)構(gòu)。在Cyclone III系列EP3C40F484C6N芯片上實(shí)現(xiàn)該算法并分析了資源消耗與電路速度。
關(guān)鍵詞: FPGA;FIR濾波器;分布式算法
隨著通信、雷達(dá)等技術(shù)的發(fā)展,軟件無線電技術(shù)已經(jīng)被廣泛的用于無線基站、雷達(dá)信號(hào)處理、軍用電臺(tái)等多個(gè)領(lǐng)域。數(shù)字下變頻技術(shù)作為軟件無線電技術(shù)的重要組成部分,主要完成中頻信號(hào)數(shù)模轉(zhuǎn)換后的變頻、濾波以及重采樣等工作。數(shù)字下變頻的主要硬件框圖如圖1所示[1]。
根據(jù)不同的性能需求,濾波器組中采用以FIR濾波器為主,與梳狀(CIC)濾波器、半帶(HB)濾波器相互搭配來實(shí)現(xiàn)數(shù)字中頻信號(hào)的抽取與濾波。梳狀濾波器和半帶濾波器通常用于前級(jí)的抽取濾波,以將信號(hào)速度降低到一定程度。整個(gè)信道波形的整形則主要依靠FIR濾波器完成。隨著對(duì)信號(hào)處理精度和速度的要求不斷提高,設(shè)計(jì)并實(shí)現(xiàn)更高速度和更高階數(shù)的FIR濾波器成為推進(jìn)數(shù)字下變頻繼續(xù)發(fā)展所需要克服的難題。目前國(guó)內(nèi)很多論文發(fā)表FIR濾波器多為11階[2]、16階[3]等低階FIR濾波器,其濾波效果很難滿足實(shí)際需要。本文設(shè)計(jì)一種用于數(shù)字下變頻的256階分布式FIR濾波,并針對(duì)Cyclone III系列FPGA設(shè)計(jì)了合理的實(shí)現(xiàn)方法。
1 分布式算法分析
FIR濾波器的表達(dá)式可以寫為:
其中hk為濾波器抽頭系數(shù), xk為輸入數(shù)據(jù)。式(1)中K的大小表征了FIR濾波器的階數(shù)。如果采用通常的乘加算法來實(shí)現(xiàn)FIR濾波器,K階濾波器需要使用K個(gè)嵌入式乘加單元。即使采用預(yù)加的實(shí)現(xiàn)方式也至少需要K/2個(gè)嵌入式乘加單元[4]。因此采用乘加算法直接實(shí)現(xiàn)高階濾波器會(huì)消耗大量的嵌入式乘加單元。Cyclone III系列EP3C40F484C6N芯片上的嵌入式乘法單元僅為126個(gè),直接使用硬件乘法器則FPGA片上資源無法滿足要求。
2 分布式算法的變形與資源消耗推算
從式(7)可知yB可能的取值與濾波器的階數(shù)K有關(guān),因此256階濾波器至少需要2256個(gè)存儲(chǔ)單元。從式(6)可知,如果xk的位寬為N,則yN的值需要經(jīng)過N次移位相加后得到。若取N為24,則計(jì)算一個(gè)濾波結(jié)果需要完成24次移位相加。如果直接在FPGA上實(shí)現(xiàn)分布式算法,存儲(chǔ)器資源和運(yùn)算速度均無法滿足需求,需要從濾波器階數(shù)和輸入數(shù)據(jù)位寬兩方面對(duì)式(4)進(jìn)行變形以減少存儲(chǔ)器資源的消耗并提高運(yùn)算速度。
若N位的xk位寬劃分為m段,每段L個(gè)比特,則可將式(4)變形為:
從式(8)可以看出求得Zn(n=0,1,2…,m-1)的值僅需要進(jìn)行L次移位相加運(yùn)算,其運(yùn)算時(shí)間是未變形前的1/m。但變形后需要同時(shí)使用m個(gè)查找表來并行完成查表運(yùn)算。變形后所對(duì)應(yīng)的硬件實(shí)現(xiàn)框圖如圖2所示。
從圖2可知式(8)所對(duì)應(yīng)的實(shí)現(xiàn)電路主要由串并轉(zhuǎn)換模塊、查找表、移位相加模塊以及錯(cuò)位相加模塊組成。串并轉(zhuǎn)換模塊將x0~xK-1對(duì)應(yīng)位串行移出組合后作為查找表的輸入。查找表預(yù)先把所有可能的運(yùn)算結(jié)果預(yù)存,根據(jù)輸入數(shù)據(jù)查表直接求得濾波結(jié)果。移位相加模塊完成查表輸出的移位相加,求得表達(dá)式(8)中的Zn(n=0,1,2…,m-1)。最后根據(jù)Zn(n=0,1,2……,m-1)的權(quán)值不同,將其錯(cuò)位相加后可得到最終結(jié)果。
查找表的大小由濾波器階數(shù)決定,因此可通過將將式(4)變形為多個(gè)子濾波器級(jí)聯(lián)的形式。通過減少各個(gè)子濾波器的階數(shù)來減少查找表的大小,最后將各個(gè)子濾波器的結(jié)果求和可得到最終的濾波輸出??蓪⑹?4)改寫為:
從式(9)可知,可以將K階FIR濾波器分解為t個(gè)S階的子濾波器。其實(shí)現(xiàn)框圖如圖3所示。
由此可知每個(gè)子濾波器所需查找表的大小為2S,則劃分為t個(gè)子濾波器后相比于未劃分之前的所需的存儲(chǔ)單元數(shù)量之比M0為:
由此可知若將K階濾波器劃分為多個(gè)子濾波器可以讓所需的儲(chǔ)存單元成指數(shù)級(jí)降低,而為提高速度所增加存儲(chǔ)單元只成線性增長(zhǎng)。因此根據(jù)FIR速度和FPGA上資源的情況設(shè)計(jì)合理的實(shí)現(xiàn)方案到達(dá)速度和資源上的平衡。
3 FPGA實(shí)現(xiàn)方案及結(jié)果分析
嵌入式存儲(chǔ)器塊是現(xiàn)代FPGA中常見的資源,嵌入式存儲(chǔ)器塊可以配置成不同大小和不同位寬存儲(chǔ)器。Cyclone III系列的FPGA中嵌入的存儲(chǔ)器塊為M9K,每一個(gè)嵌入式存儲(chǔ)器塊容量為9 Kbit。M9K存儲(chǔ)器可以根據(jù)需求被配置為8 192×1、4 096×2、1 024×9、256×32等多種形式。
采用嵌入式存儲(chǔ)器塊來實(shí)現(xiàn)查找表,需要權(quán)衡子濾波器的階數(shù)以及輸出數(shù)據(jù)的精度。若考慮S階濾波器中加法運(yùn)算精度,則需其位寬擴(kuò)展S-1位。對(duì)于系數(shù)為24位FIR濾波器而言,其子濾波器的查找表滿足式(12)時(shí)可以將M9K的利用率發(fā)揮到最大。
根據(jù)M9K嵌入式存儲(chǔ)器的配置規(guī)格可求得S=8時(shí)為近似最優(yōu)解,所以可將嵌入式存儲(chǔ)器配置為256 × 32的模式,則每一個(gè)子濾波器為8階。對(duì)于256階FIR濾波器而言需要32個(gè)子濾波器級(jí)聯(lián)而成,則總共需要嵌入式存儲(chǔ)器塊32個(gè)。為提高運(yùn)算速度減少移位累加次數(shù),根據(jù)公式(8)取m=3,則總共需要96個(gè)M9K嵌入式存儲(chǔ)器,低于EP3C40F484C6N芯片所擁有的126個(gè)M9K嵌入式存儲(chǔ)器的總數(shù)。
根據(jù)前面所述設(shè)計(jì)RTL級(jí)代碼并仿真,輸入采用頻率分別為50 kHz、2 MHz、8 MHz正弦混合信號(hào)仿真結(jié)果如圖4。
如圖4所示50 kHz和2 MHz正弦信號(hào)被保留,而8 MHz正弦信號(hào)被濾除。
由表1可知,在LE的使用率僅為37%時(shí),RAM的使用率已達(dá)76%,還有較多的LE未被使用??稍陔S后的工作中進(jìn)一步改進(jìn)設(shè)計(jì)方案,采用超前進(jìn)位加法等方法縮短關(guān)鍵路徑,進(jìn)一步提高濾波器的運(yùn)算速度。
本文對(duì)分布式濾波算法進(jìn)行了詳細(xì)的分析和推導(dǎo),通過公式變形闡述了提高電路運(yùn)算速度和減小存儲(chǔ)器資源消耗的方法。通過理論推導(dǎo)和對(duì)Cyclone III系列的FPGA中嵌入的存儲(chǔ)器塊的分析,設(shè)計(jì)了一種適用于EP3C40F484C6N芯片的高階分布式FIR濾波器實(shí)現(xiàn)方案并進(jìn)行了仿真和綜合。結(jié)果表明,采用該方案可以實(shí)現(xiàn)高階的FIR濾波器設(shè)計(jì)并得到很高的等效乘加運(yùn)算速度。
評(píng)論