FIR數(shù)字濾波器的FPGA實(shí)現(xiàn)研究
掃描二維碼
隨時(shí)隨地手機(jī)看文章
根據(jù)單位脈沖響應(yīng)的不同,數(shù)字濾波器主要分為有限脈沖響應(yīng)(FIR)和無(wú)限脈沖響應(yīng)(IIR)2大類。在同樣的設(shè)計(jì)要求下,IIR方式計(jì)算工作量較小。但難以得到線性相位響應(yīng),且系統(tǒng)不易穩(wěn)定;FIR方式的計(jì)算工作量稍大,但在設(shè)計(jì)任意幅頻特性時(shí),能保證嚴(yán)格的線性相位特性;由于其實(shí)現(xiàn)結(jié)構(gòu)主要是非遞歸的,F(xiàn)lR濾波器可以穩(wěn)定工作。FIR數(shù)字濾波器是數(shù)字多普勒接收機(jī)的重要組成部分,因此,研究FIR數(shù)字濾波器的實(shí)現(xiàn)技術(shù)具有重要意義。隨著FPGA技術(shù)的不斷發(fā)展,F(xiàn)PGA逐漸成為信號(hào)處理的主流器件。而在FPGA中,數(shù)字濾波器不同的實(shí)現(xiàn)方法所消耗的FPGA資源是不同的,且對(duì)濾波器的性能影響也有較大差異。
1 FIR濾波器的原理及結(jié)構(gòu)
FIR濾波器存在N個(gè)抽頭的h(n),N稱為濾波器的階數(shù),其數(shù)學(xué)表達(dá)式為:
式中,x(k)為第k時(shí)刻的采樣值,y(n)為濾波器輸出。h(k)為FIR濾波器的第k級(jí)抽頭系數(shù)。
通過(guò)對(duì)h(k)進(jìn)行Z變換得到FIR的傳遞函數(shù)H(Z),其在Z域內(nèi)的形式如下:
因此,根據(jù)傳遞函數(shù)H(Z)和FIR濾波器系數(shù)的對(duì)稱性,可得FIR濾波器的一般實(shí)現(xiàn)結(jié)構(gòu),如圖1所示。
從串行結(jié)構(gòu)中可以看出,F(xiàn)IR濾波過(guò)程就是一個(gè)信號(hào)逐級(jí)延遲的過(guò)程,將各級(jí)延遲輸出加權(quán)累加,得到濾波輸出,其中最主要的運(yùn)算是乘累加運(yùn)算。FIR每完成一次濾波過(guò)程需要進(jìn)行N次乘法和(N-1)次加法運(yùn)算,N為濾波器的階數(shù)。所以,濾波器的運(yùn)算量完全取決于N的大小,當(dāng)N很大時(shí),延遲將非常長(zhǎng),無(wú)法實(shí)現(xiàn)高速信號(hào)處理。
根據(jù)FIR數(shù)字濾波器的對(duì)稱特性,可以先進(jìn)行加法運(yùn)算,然后對(duì)加法運(yùn)算的結(jié)果進(jìn)行串行乘累加運(yùn)算,從而得到改進(jìn)的串行結(jié)構(gòu)。與串行結(jié)構(gòu)相比,改進(jìn)的濾波器完成一次濾波的時(shí)鐘周期減半,乘累加次數(shù)減半,提高了處理速度,但同時(shí)要消耗更多的硬件資源。圖1(b)為Ⅳ位偶數(shù)時(shí)改進(jìn)的串行結(jié)構(gòu)。與串行結(jié)構(gòu)相似,濾波器的運(yùn)算量完全取決于N的大小,當(dāng)N很大時(shí),延遲將非常長(zhǎng),無(wú)法實(shí)現(xiàn)高速信號(hào)處理。
將串行結(jié)構(gòu)展開(kāi),根據(jù)濾波器的信號(hào)流圖用多個(gè)乘法器和加法器并行實(shí)現(xiàn),得到FIR濾波器的并行實(shí)現(xiàn)結(jié)構(gòu),如圖1(c)所示。并行濾波器的濾波速度快,一個(gè)時(shí)鐘周期內(nèi)完成一次濾波,但消耗大量的FPGA資源,如乘累加器,且器件的延遲較大,工作頻率不宜太高。
FPGA具有規(guī)整的內(nèi)部邏輯陣列和豐富的連線資源,特別適合用于數(shù)字信號(hào)處理。但以前FPGA一般用于系統(tǒng)邏輯或時(shí)序控制,很少應(yīng)用在信號(hào)處理方面。其原因主要是FPGA中缺乏實(shí)現(xiàn)乘法運(yùn)算的有效結(jié)構(gòu)。隨著FPGA技術(shù)的不斷發(fā)展,查找表(LUT)技術(shù)的應(yīng)用有效地解決了這個(gè)問(wèn)題,使FPGA在數(shù)字信號(hào)處理方面得到了廣泛應(yīng)用。
2 基于分布式算法的FIR濾波器的實(shí)現(xiàn)
2.1 分布式算法原理
上世紀(jì)70年代Croisie提出了分布式算法DA(Distributed Arithmetic),但由于其特別適合用FPGA實(shí)現(xiàn),所以直到Xilinx公司在FPGA中使用查找表(LUT)后,DA才被廣泛應(yīng)用在FPGA求乘積和中。
FIR的濾波輸出y可以表示為輸入x和系數(shù)h的內(nèi)積:
由上述推導(dǎo)可知,分布式算法是一種以實(shí)現(xiàn)乘加運(yùn)算為目的的運(yùn)算方法。它與傳統(tǒng)實(shí)現(xiàn)乘加運(yùn)算的先后順序不同。分布式算法在完成乘加功能時(shí),是通過(guò)將各輸入數(shù)據(jù)每一對(duì)應(yīng)位產(chǎn)生的部分積預(yù)先進(jìn)行相加形成相應(yīng)部分積,然后在對(duì)各部分積預(yù)先進(jìn)行累加形成最終結(jié)果;而傳統(tǒng)算法是等到所有乘積產(chǎn)生之后再進(jìn)行相加來(lái)完成乘加運(yùn)算。
2.2 分布式FIR的實(shí)現(xiàn)結(jié)構(gòu)
圖2為分布式FIR濾波器的直接實(shí)現(xiàn)結(jié)構(gòu)。對(duì)于小位寬的數(shù)據(jù),DA算法不僅速度快,而且所占用的芯片資源少。
2.3 性能優(yōu)化方法
1)流水線結(jié)構(gòu)法 在濾波器中間增加適當(dāng)?shù)募拇嫫?,?gòu)成流水線結(jié)構(gòu)。在并行結(jié)構(gòu)實(shí)現(xiàn)中添加流水線結(jié)構(gòu),可以提高濾波器速度,使其工作在更高的工作頻率。對(duì)于速度固定的數(shù)據(jù),可以通過(guò)多次復(fù)用乘累加器來(lái)節(jié)省資源。
2)查找表分隔法 在用LUT實(shí)現(xiàn)分布式算法時(shí),由于LUT的規(guī)模隨著N的增加呈現(xiàn)指數(shù)增長(zhǎng),如果濾波器系數(shù)N過(guò)大,則查找表的規(guī)模十分龐大。為了減小規(guī)模,可以利用部分表計(jì)算。由于FIR濾波器是線性濾波器,因此低階濾波器輸出可以相加,由此定義一個(gè)高階濾波器的輸出。例如,把16輸入的查找表分割成4個(gè)并行的查找表。
查找表的分隔技術(shù)和流水線技術(shù)可以大大減小設(shè)計(jì)規(guī)模,同時(shí)并不會(huì)降低濾波速度。使用DA算法實(shí)現(xiàn)的FlR濾波器與傳統(tǒng)的算法相比,DA算法可以極大地減少硬件電路規(guī)模,很容易實(shí)現(xiàn)流水線處理,提高電路的執(zhí)行速度。
2.4 3種結(jié)構(gòu)實(shí)現(xiàn)的比較
改進(jìn)串行結(jié)構(gòu)、并行結(jié)構(gòu)、DA結(jié)構(gòu)實(shí)現(xiàn)的比較如下:
1)改進(jìn)串行結(jié)構(gòu) ①優(yōu)點(diǎn):使用資源少,只需一些寄存器、乘累加器便可完成整個(gè)濾波運(yùn)算;②缺點(diǎn):濾波速度慢,一次濾波所需的時(shí)鐘數(shù)由濾波器的階數(shù)決定。階數(shù)較高的濾波器,濾波周期很大,無(wú)法實(shí)現(xiàn)高速濾波。
2)并行結(jié)構(gòu) ①優(yōu)點(diǎn):完成濾波的速度快,直接并行濾波器可以在一個(gè)時(shí)鐘周期內(nèi)完成一次濾波;②缺點(diǎn):消耗大量的乘累加器,器件延遲較大,工作頻率不可能太高。
3)DA結(jié)構(gòu) 與串行結(jié)構(gòu)實(shí)現(xiàn)相比,DA實(shí)現(xiàn)濾波速度較快,其濾波周期由數(shù)據(jù)寬度決定而與濾波器的階數(shù)無(wú)關(guān);而與并行實(shí)現(xiàn)相比,DA實(shí)現(xiàn)消耗的資源較少。且容易實(shí)現(xiàn)流水線處理,提高電路的執(zhí)行速度。
在設(shè)計(jì)中,當(dāng)資源成本為主要制約時(shí),根據(jù)速度要求,選擇串行結(jié)構(gòu)實(shí)現(xiàn)或DA結(jié)構(gòu)實(shí)現(xiàn);而當(dāng)速度成為主要制約時(shí),則根據(jù)資源成本因素,選擇并行實(shí)現(xiàn)結(jié)構(gòu)或DA結(jié)構(gòu)實(shí)現(xiàn)。在一般的應(yīng)用設(shè)計(jì)中,一般采用DA結(jié)構(gòu)實(shí)現(xiàn)。
3 實(shí)例設(shè)計(jì)與仿真
3.1 FIR濾波器的設(shè)計(jì)
利用Matlab中的FDATool工具設(shè)計(jì)一個(gè)33階,F(xiàn)s=48kHz,F(xiàn)c=10.8 kHz的FIR濾波器,其幅值、相位響應(yīng)見(jiàn)圖3。為了便于FIR濾波器的FPGA實(shí)現(xiàn),減小誤差,將濾波器的系數(shù)量化取整后,在FPGA中實(shí)現(xiàn)采用的濾波系數(shù)為{-11,14,18,-11,-25,4,32,6,-38,-21,43,45,-47,-96,50,319,457,319,50,-96,-47,45,43,-21,-38,6,32,4,-25,-11,18,14,-11}。
3.2 FIR濾波器的FPGA實(shí)現(xiàn)與仿真
在Xilinx 10.1 ISE平臺(tái)中,選用Virtex-5系列的XC5VSXT50T器件,用Verilog HDL語(yǔ)言設(shè)計(jì)串行結(jié)構(gòu)、并行結(jié)構(gòu)的、以及DA結(jié)構(gòu),并在ModelSim中對(duì)3種結(jié)構(gòu)實(shí)現(xiàn)進(jìn)行仿真。設(shè)計(jì)中輸入數(shù)據(jù)的位寬設(shè)為16位,而輸入數(shù)據(jù)在運(yùn)算處理前位寬擴(kuò)展到17位。所用仿真激勵(lì)為單位階躍響應(yīng),時(shí)鐘周期為T(mén)ck=10 ns。ModelSim中的仿真結(jié)果如圖4所示。
圖4中依次為改進(jìn)的串行實(shí)現(xiàn),并行實(shí)現(xiàn)和DA實(shí)現(xiàn)的仿真結(jié)果,其濾波周期分別為180 ns,10 ns和180 ns。上述設(shè)計(jì)的改進(jìn)串行結(jié)構(gòu)、并行結(jié)構(gòu)和DA結(jié)構(gòu)分別在XC5VSX50T中實(shí)現(xiàn)后,所消耗的FPGA內(nèi)部各種資源如表1所示。
從表l可以看出,并行實(shí)現(xiàn)消耗的資源最多,其次是DA實(shí)現(xiàn),最小是串行實(shí)現(xiàn)。而從濾波速度上來(lái)看,并行濾波速度最快,1個(gè)時(shí)鐘周期便可濾波1次;而串行實(shí)現(xiàn)速度慢,其濾波周期取決于濾波器的階數(shù),對(duì)17階的對(duì)稱濾波器而言,濾波一次占9個(gè)時(shí)鐘周期,濾波輸出占1個(gè)時(shí)鐘周期;相對(duì)串行實(shí)現(xiàn)和并行實(shí)現(xiàn),DA實(shí)現(xiàn)的濾波周期取決于處理的數(shù)據(jù)寬度,上述設(shè)計(jì)中DA實(shí)現(xiàn)的濾波處理數(shù)據(jù)位寬是17位,所以濾波一次占17個(gè)時(shí)鐘周期,濾波輸出占用1個(gè)時(shí)鐘周期。
4 結(jié)束語(yǔ)
在實(shí)際應(yīng)用中,當(dāng)濾波器設(shè)計(jì)對(duì)濾波速度要求不高時(shí),可采用串行結(jié)構(gòu)或改進(jìn)串行結(jié)構(gòu)來(lái)實(shí)現(xiàn),這樣可以選取資源較少的器件,降低設(shè)計(jì)成本;當(dāng)對(duì)濾波速度有較高要求時(shí),可以考慮采用并行或DA來(lái)實(shí)現(xiàn)。并行實(shí)現(xiàn)濾波周期為時(shí)鐘周期,速度快,但消耗的資源多,成本高;DA實(shí)現(xiàn)速度較快,消耗的資源較少,成本耗費(fèi)較低。在數(shù)字多普勒接收機(jī)的實(shí)現(xiàn)過(guò)程中,根據(jù)接收機(jī)的性能要求以及所選用的FPGA器件資源,選取最優(yōu)的FlR濾波器實(shí)現(xiàn)結(jié)構(gòu)。隨著FPGA查找技術(shù)的發(fā)展,具有較快的濾波速度和消耗較少資源的DA算法在FIR數(shù)字濾波領(lǐng)域得到了廣泛應(yīng)用。