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