基于FPGA的FIR數(shù)字濾波器的優(yōu)化設(shè)計(jì)
摘要:提出采用正則有符號數(shù)字量(CSD)編碼技術(shù)實(shí)現(xiàn)FIR濾波器。首先分析了FIR數(shù)字濾波器理論及常用設(shè)計(jì)方法的不足,然后介紹了二進(jìn)制數(shù)的CSD編碼技術(shù)及其特點(diǎn),給出了其于CSD編碼的定點(diǎn)常系數(shù)FIR濾波器設(shè)計(jì)過程,使用VHDL語言實(shí)現(xiàn)了該常系數(shù)濾波器的行為描述。最后在Max+PlusⅡ環(huán)境下進(jìn)行實(shí)驗(yàn)仿真和驗(yàn)證,與DA和2C編碼算法比較結(jié)果表明,用CSD編碼技術(shù)實(shí)現(xiàn)的濾波器可以有效提高運(yùn)算速度并降低FPGA芯片的面積占用。
關(guān)鍵詞:CSD編碼;分布式算法;FIR;FPGA;常系數(shù)乘法
0 引言
在圖像處理、語音識別等數(shù)字信號處理中,數(shù)字濾波器占有重要的地位,其性能對系統(tǒng)有直接的影響。隨著系統(tǒng)在寬帶、高速、實(shí)時信號處理上要求的提高,對濾波器的處理速度、性能等也提出更高的要求。目前數(shù)字濾波器的硬件實(shí)現(xiàn)方法通常采用專用DSP芯片或FPGA,DSP特有的一些硬件結(jié)構(gòu)和特性使其非常適合作數(shù)字濾波電路,但由于其軟件算法在執(zhí)行時的串行性,限制了它在高速和實(shí)時系統(tǒng)中的應(yīng)。FPGA最明顯的優(yōu)勢在于其實(shí)現(xiàn)數(shù)字信號處理算法的并行性,可以顯著提高濾波器的數(shù)據(jù)吞吐率,隨著FPGA技術(shù)的不斷發(fā)展,現(xiàn)在的FPGA不僅包含查找表、寄存器、多路復(fù)用器、分布式塊存儲器,而且還嵌入專用的快速加法器、乘法器和輸入/輸出設(shè)備,因而成為高性能數(shù)字信號處理的理想器件。而在FPGA中,數(shù)字濾波器不同的實(shí)現(xiàn)方法所消耗的FPGA資源是不同的,且對濾波器的性能影響也有較大差異?;诖?,本文從FIR濾波器的系數(shù)考慮,采用CSD編碼,對FIR數(shù)字濾波器進(jìn)行優(yōu)化設(shè)計(jì)。
1 FIR濾波器的基本原理
一個L階的FIR數(shù)字濾波器的基本系統(tǒng)函數(shù)見式(1):
式中:h(n)表示濾波器的系數(shù);x(i)表示帶有時間延遲的輸入序列,此表達(dá)式對應(yīng)的直接型實(shí)現(xiàn)結(jié)構(gòu)可用圖1來表示。
可以看出,F(xiàn)IR濾波器是由一個“抽頭延遲線”加法器和乘法器的集合構(gòu)成的。傳給每個乘法器的操作數(shù)就是一個FIR系數(shù)。對每次采樣x(n)要進(jìn)行N次連續(xù)的乘法和(N-1)次加法操作,因?qū)嶋H中濾波器的階數(shù)都很高,實(shí)現(xiàn)高數(shù)據(jù)吞吐率就需要很多的硬件乘法器,硬件實(shí)現(xiàn)時將占用大量的資源,同時也會因此影響濾波器的速度和性能。為了解決這個問題,人們從多個角度尋求優(yōu)化方法。從數(shù)字濾波器表達(dá)式看,對它
的優(yōu)化操作,實(shí)際最終轉(zhuǎn)換成兩類改進(jìn)。一類是針對輸入xi的DA操作的改進(jìn);另一類是針對系數(shù)hi編碼的操作。
2 DA算法
分布式算法(Distributed Arithmetic,DA)是為了解決乘法資源問題而提出的經(jīng)典優(yōu)化算法這種算法結(jié)構(gòu),可以有效地將乘法運(yùn)算轉(zhuǎn)換成基于查找表LUT(Look Up Table)的加法運(yùn)算,利用查表方法快速得到部分積。
對于低階而言,由于LUT表地址空間較小,與傳統(tǒng)算法相比,分布式算法可極大地減少硬件電路的規(guī)模,提高電路的執(zhí)行速度。然而當(dāng)FIR濾波器階數(shù)很高時,作為查找表的ROM將很大。階數(shù)每增加1位,ROM容量就增加1倍,這種以2的冪次遞增的資源占用是硬件資源不可接受的。因而在濾波器系數(shù)較高時,為了減小查找表的規(guī)模,常采用一定的方法將大LUT分割為一些小的LUT的方法。如濾波器的多相分解結(jié)構(gòu)、多路復(fù)用器和加法器替代查找表的算法等。
3 CSD編碼算法
常數(shù)乘法可以通過“移位-加”來完成,而乘數(shù)中“1”的個數(shù)決定了“加”操作的次數(shù),當(dāng)然“1”的個數(shù)越少越好,正則有符號數(shù)字量CSD(Canonic Signed Digit)編碼就可以實(shí)現(xiàn)“1”的個數(shù)的最小化。
3.1 CSD編碼
與傳統(tǒng)的二進(jìn)制編碼的二值表示法不同,CSD編碼的數(shù)字值域?yàn)?,1和-1。-1常表示成1。這種編碼是具有最少非零元素的一種表示法,用CSD編碼表示數(shù)字的形式具有惟一性。在實(shí)際硬件電路中可以采用如下原則生成最佳CSD編碼:
①從最低有效位開始,用10…0 取代所有大于2的1序列,此外還需要用110 取代1011;
②從最高有效位開始,用011代替10 。
最佳CSD編碼的特點(diǎn)是:
①在一個CSD數(shù)據(jù)里,沒有兩個連續(xù)的非零位;
②對同一個數(shù)字的CSD編碼是獨(dú)一無二的;
③是數(shù)字表示法里,所含非零位數(shù)最少,相比于二進(jìn)制補(bǔ)碼系統(tǒng)平均減少33%的非零項(xiàng)。
評論