《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 模擬設(shè)計(jì) > 設(shè)計(jì)應(yīng)用 > 32階FIR濾波器的FPGA實(shí)現(xiàn)
32階FIR濾波器的FPGA實(shí)現(xiàn)
范曉東,蔡德林,桂岳,梁本仁
摘要: 本文采用并行分布式算法在FPGA上設(shè)計(jì)并實(shí)現(xiàn)了高速處理的32階FIR低通濾波器,,在此過(guò)程中利用Matlab的數(shù)值計(jì)算與分析功能來(lái)提高設(shè)計(jì)效率,。
關(guān)鍵詞: 信號(hào)調(diào)理 FIR FPGA
Abstract:
Key words :

    隨著軟件無(wú)線電的發(fā)展,。對(duì)于濾波器的處理速度要求越來(lái)越高,。傳統(tǒng)的FIR濾波器一般采用通用DSP處理器,,但是DSP處理器采用的是串行運(yùn)算,,而FPGA是現(xiàn)場(chǎng)可編程陣列,,可以實(shí)現(xiàn)專用集成電路,,另外還可以采用純并行結(jié)構(gòu)及考慮流水線結(jié)構(gòu),因此在處理速度上可以明顯高于DSP處理器,。本文采用并行分布式算法在FPGA上設(shè)計(jì)并實(shí)現(xiàn)了高速處理的32階FIR低通濾波器,,在此過(guò)程中利用Matlab的數(shù)值計(jì)算與分析功能來(lái)提高設(shè)計(jì)效率。

1 FlR低通濾波器的窗函數(shù)實(shí)現(xiàn)

    理想的濾波器頻率響應(yīng)中傅里葉反變換ha(n)一定是無(wú)限長(zhǎng)的序列,,而且是非因果的,,而實(shí)際要設(shè)計(jì)的濾波器h(n)是有限長(zhǎng)的,因此要用有限長(zhǎng)來(lái)逼近無(wú)限長(zhǎng)的,,其方法就是用一個(gè)有限長(zhǎng)度的窗口函數(shù)序列ω(n)來(lái)截取,即:
   
    常見的窗函數(shù)有矩形窗,、巴特利特窗,、漢寧窗、哈明窗,、布萊克曼窗,、凱澤窗。其中,,凱澤窗提供了可變的過(guò)渡帶寬,。本文采用凱澤窗對(duì)FIR濾波器進(jìn)行設(shè)計(jì),其窗函數(shù)表達(dá)式為:
   
    I0[·]為第一類變形零階貝賽爾函數(shù),,形狀參數(shù)β為依賴于濾波器階數(shù)M的參數(shù),,用來(lái)調(diào)整主瓣寬度與旁瓣衰減,選擇M可產(chǎn)生各種過(guò)渡帶寬和接近最優(yōu)的阻帶衰減,。給定通帶截止頻率ωp,,阻帶起始頻率ωs,阻帶衰減As,凱澤窗設(shè)計(jì)中有經(jīng)典公式可供使用,,如下:
    過(guò)渡帶寬:
    
    濾波器階數(shù):
    
    形狀參數(shù):
    
    假設(shè)低通數(shù)字濾波器設(shè)計(jì)指標(biāo)如下:

   

采用上面介紹的凱澤窗,,利用Matlab編程計(jì)算得到32階FIR低通濾波器參數(shù)如下:

 

   
    32階FIR低通濾波器幅頻特性圖如圖1所示。

    上述求得的系數(shù)是浮點(diǎn)型的,,而在FPGA設(shè)計(jì)中使用的數(shù)據(jù)是定點(diǎn)型的,,所以在設(shè)計(jì)濾波器之前要將系數(shù)轉(zhuǎn)化為定點(diǎn)型,即系數(shù)的量化,。在本文中采用數(shù)字信號(hào)處理(DSP)技術(shù)中的Q值法對(duì)系數(shù)進(jìn)行量化,。為了兼顧精度和所占用的資源,本文的系數(shù)用12位二進(jìn)制來(lái)量化,,得到的整數(shù)系數(shù)結(jié)果如下:

2 并行分布式算法原理及FPGA設(shè)計(jì)
    32階FIR濾波器的差分方程表達(dá)式為:

 

   
    式中:x(n)為輸入,;y(n)為輸出,;h(n)為濾波器系數(shù)。
    設(shè)x(n)用二進(jìn)制可表示為:

   
    其中,,最高位為符號(hào)位,。則式(7)可寫為:


    式(10)為并行分布式算法,由上可以看出并行分布式算法是將濾波器表達(dá)式重新排列,,分別加權(quán)求和,。與傳統(tǒng)算法最大的不同之處是在FPGA設(shè)計(jì)過(guò)程中以查找表代替乘法器,即根據(jù)輸入數(shù)據(jù)的不同,,將對(duì)應(yīng)的濾波器系數(shù)預(yù)先求和保存在ROM中,,也就是將每一項(xiàng)的乘法求和通過(guò)并行結(jié)構(gòu)查表尋值完成,提高運(yùn)行速度,。
    具體FPGA實(shí)現(xiàn)時(shí),,首先將12位的輸人數(shù)據(jù)并行輸入到12列32位移位寄存器分別寄存,然后以寄存器中的值為地址,,對(duì)應(yīng)于查找表的結(jié)果,,按照式(10),每列進(jìn)行相應(yīng)二次冪加權(quán),,最后各列累加,,在第32個(gè)數(shù)據(jù)完全輸入之后得到正確的濾波器輸出。由于輸入數(shù)據(jù)的延遲,,在此之前濾波器輸出會(huì)延遲或者產(chǎn)生不正確的結(jié)果,,可以在實(shí)現(xiàn)過(guò)程中加入控制信號(hào)進(jìn)行輸出控制。由于查找表的規(guī)模是隨著地址的增加呈指數(shù)增加的,,可以將32位的查找表劃分為四個(gè)8位的查找表,,從而降低對(duì)ROM的需求。
    在本設(shè)計(jì)中可采用多級(jí)流水線技術(shù),,也就是將在明顯制約系統(tǒng)速度的長(zhǎng)路徑上插入幾級(jí)寄存器,,雖然流水線會(huì)影響器件資源的使用量,但它降低了寄存器間的傳播時(shí)延,,允許維持高的系統(tǒng)時(shí)鐘速率,。

3 FPGA仿真與驗(yàn)證
    由于直接將大量數(shù)據(jù)進(jìn)行硬件仿真驗(yàn)證很不方便,因此利用Matlab產(chǎn)生一個(gè)采樣頻率為100 MHz,,頻率分別為1 MHz與30 MHz的兩個(gè)正弦信號(hào)相加后,,作為輸入信號(hào)。同樣,,浮點(diǎn)變?yōu)槎c(diǎn),將此信號(hào)進(jìn)行12位量化,,并將負(fù)數(shù)轉(zhuǎn)化為補(bǔ)碼形式,按照一定格式保存為.vec文件,,導(dǎo)入到QuartusⅡ中進(jìn)行仿真,,時(shí)序功能仿真結(jié)果如圖2所示,。

 

 

    其中,clk為時(shí)鐘信號(hào),,x_in為濾波器輸入信號(hào),,y為濾波器輸出信號(hào)。圖2并不能很直觀地看出并行分布式算法產(chǎn)生的濾波效果,,可以將QuartusⅡ中.vwf文件轉(zhuǎn)化為.tbl文件,,在Matlab中按照一定形式編程可以得到時(shí)域及頻域波形圖,如圖3,,圖4所示,。

    圖3,圖4中,,軟件仿真是直接在Matlab中用輸入信號(hào)與濾波系數(shù)卷積得到的,,在時(shí)域波形中軟件仿真輸出信號(hào)與理想信號(hào)相比有一定時(shí)間延遲,而QuartusⅡ仿真與軟件仿真結(jié)果中幅度的差別是由于硬件輸入量化產(chǎn)生的,。
    從時(shí)域或者頻域波形圖可以看出,,頻率為30 MHz的信號(hào)被濾除掉,只有頻率為1 MHz的信號(hào)通過(guò)濾波器,,達(dá)到了濾波的目的。


4 結(jié) 語(yǔ)
    本設(shè)計(jì)選用Stratix系列芯片,,最大處理速度可以達(dá)到200 MHz以上,。本文沒有考慮線性相位的濾波器對(duì)稱性,在考慮線性相位的基礎(chǔ)之上結(jié)合一些其他算法可以降低器件數(shù)量和進(jìn)一步提高處理速度,。由于FPGA器件的可編程特性,,在本設(shè)計(jì)中可以修改濾波器參數(shù),得到高速處理的高通或者帶通數(shù)字濾波器,,具有一定實(shí)用價(jià)值,。另外,本文利用QuartusⅡ與Matlab聯(lián)合仿真,,極大地提高了FPGA的設(shè)計(jì)效率,。
 

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載,。