基于FPGA的FIR數(shù)字濾波器設(shè)計(jì)與仿真
掃描二維碼
隨時(shí)隨地手機(jī)看文章
摘要 采用改進(jìn)并行分布式算法設(shè)計(jì)了一種16抽頭FIR數(shù)字低通濾波器,首先用Matlab工具箱中的FDATool設(shè)計(jì)濾波器系數(shù),然后使用硬件描述語(yǔ)言Verilog HDL和原理圖,實(shí)現(xiàn)了子模塊和系統(tǒng)模塊設(shè)計(jì),在Matlab與QuartusII中對(duì)系統(tǒng)模塊進(jìn)行聯(lián)合仿真。仿真結(jié)果表明,設(shè)計(jì)系統(tǒng)性能穩(wěn)定,濾波效果良好,且實(shí)用性較強(qiáng)。
數(shù)字濾波器分為有限沖激響應(yīng)(FIR)和無(wú)限沖激響應(yīng)(IIR)兩種。其中,FIR數(shù)字濾波器在實(shí)現(xiàn)任意幅頻特性的同時(shí)能夠保證嚴(yán)格的線性相位特性。由于其單位沖激響應(yīng)是有限的,沒(méi)有輸出到輸入的反饋,因此系統(tǒng)是穩(wěn)定系統(tǒng)。FIR數(shù)字濾波器在通信、圖像處理、模式識(shí)別等領(lǐng)域有著廣泛應(yīng)用。
在實(shí)時(shí)性要求較高的應(yīng)用場(chǎng)合,相比于DSP芯片或?qū)S眯酒捎每删幊绦酒?strong>FPGA實(shí)現(xiàn)FIR數(shù)字濾波器具有高速、高精度、高靈活性的優(yōu)點(diǎn)。數(shù)字濾波器的設(shè)計(jì)方法有多種,常用的有窗函數(shù)法、頻率抽樣法和最佳一致逼近法,但這些設(shè)計(jì)方法在設(shè)計(jì)濾波器尤其是高階濾波器時(shí)工作量較大。而利用Matlab信號(hào)處理工具箱進(jìn)行數(shù)字濾波器的設(shè)計(jì),能夠減少工作量,提高設(shè)計(jì)效率。文中首先使用Matlab設(shè)計(jì)濾波器系數(shù),然后利用FPGA實(shí)現(xiàn)系統(tǒng)。
在FPGA中,進(jìn)行傳統(tǒng)乘法運(yùn)算占用大量的硬件資源,分布式算法利用ROM查找表將固定系數(shù)的乘累加運(yùn)算轉(zhuǎn)換成查表操作,避免了乘法運(yùn)算,查表后的數(shù)據(jù)執(zhí)行的都是簡(jiǎn)單的加法運(yùn)算,可以較大程度地提高運(yùn)算速度。分布式算法分為全串行分布式算法和全并行分布式算法,全串行分布式算法資源消耗少但運(yùn)算速度慢,全并行分布式算法資源消耗少但運(yùn)算速度快。兼顧運(yùn)算速度與資源消耗,本文采用改進(jìn)并行分布式算法進(jìn)行FIR數(shù)字濾波器設(shè)計(jì)。
1 FIR數(shù)字濾波器基本理論
對(duì)于FIR數(shù)字濾波器系統(tǒng),其沖激響應(yīng)是有限長(zhǎng)的,系統(tǒng)函數(shù)可記為
式中,x(n)是采樣輸入序列;h(i)是濾波器系數(shù);N是濾波器抽頭數(shù);y(n)是濾波器輸出序列。
2 分布式算法
分布式算法(Distributed Arithmetic,DA)是一項(xiàng)重要的FPGA技術(shù),廣泛地應(yīng)用在卷積、相關(guān)、DFF計(jì)算和RNS反演映射等乘積和中。有關(guān)DA算法的討論可以追溯到1973年Croisier發(fā)表的論文,而DA算法的推廣工作則由Peled和Liu完成。雖然DA算法較早被提出,但是一直到可編程門(mén)陣列的查找表結(jié)構(gòu)出現(xiàn),這種算法才重新受到重視,成為一種重要的FIR數(shù)字濾波器設(shè)計(jì)方法。
DA算法是一種以實(shí)現(xiàn)乘加運(yùn)算為目的的運(yùn)算方法,其與傳統(tǒng)實(shí)現(xiàn)乘加運(yùn)算算法的不同之處在于執(zhí)行部分積運(yùn)算的先后順序不同。DA算法在完成乘加功能時(shí)是通過(guò)將各輸入數(shù)據(jù)每一位產(chǎn)生的部分積預(yù)先進(jìn)行相加形成相應(yīng)部分積,然后再對(duì)相應(yīng)部分積進(jìn)行加權(quán)累加形成最終結(jié)果;而傳統(tǒng)算法是等到所有乘積產(chǎn)生之后再進(jìn)行相加來(lái)完成乘加運(yùn)算。與傳統(tǒng)算法相比,DA算法可以大幅減少硬件電路規(guī)模,易實(shí)現(xiàn)流水線處理,提高了電路的執(zhí)行速度。DA算法原理如下。
對(duì)于有符號(hào)系統(tǒng),采用補(bǔ)碼實(shí)現(xiàn),輸入序列x(n)表示為
式中,y(n)是輸出序列;x(n)是輸入序列;h(i)是濾波器系數(shù);B是x(n)二進(jìn)制補(bǔ)碼的位數(shù);xb(n)是x(n)的第6位,N是濾波器抽頭數(shù)。
本文采用改進(jìn)并行DA算法進(jìn)行FIR數(shù)字濾波器設(shè)計(jì),通過(guò)引入倍頻模塊減少LUT的個(gè)數(shù)來(lái)節(jié)省資源消耗,同時(shí)保證運(yùn)算速度。該算法僅使用一個(gè)LUT并結(jié)合流水線寄存器的使用來(lái)提高系統(tǒng)運(yùn)算速度。算法原理是讓輸入數(shù)據(jù)每一個(gè)相同位同時(shí)尋址,將尋址內(nèi)容進(jìn)行相應(yīng)的移位累加操作得到最終輸出,算法如圖1所示。
3 濾波器系數(shù)設(shè)計(jì)與量化
文中濾波器系數(shù)通過(guò)Matlab工具箱中的FDATool進(jìn)行設(shè)計(jì),濾波器設(shè)計(jì)指標(biāo)如下。濾波器類(lèi)型:低通;設(shè)計(jì)方法:FIR Kaiser窗,Beta= 0.5;階數(shù):15階;采樣頻率:10 MHz;截止頻率:1.5 MHz;輸入數(shù)據(jù)寬度:12位;濾波器系數(shù)寬度:12位。
由于FPGA只能進(jìn)行定點(diǎn)數(shù)運(yùn)算,需要將浮點(diǎn)濾波器系數(shù)量化為定點(diǎn)數(shù)。將h(n)擴(kuò)大210倍,然后表示為12位二進(jìn)制補(bǔ)碼。濾波器系數(shù)與量化補(bǔ)碼如表1所示。
4 FPGA實(shí)現(xiàn)
用FPGA設(shè)計(jì)FIR數(shù)字濾波器時(shí),利用濾波器系數(shù)的對(duì)稱(chēng)性,將16抽頭設(shè)計(jì)轉(zhuǎn)化為8抽頭設(shè)計(jì)。首先將輸入數(shù)據(jù)存入移位寄存器中,通過(guò)延時(shí)進(jìn)行預(yù)相加,然后以預(yù)相加結(jié)果數(shù)據(jù)的相同位的值為地址進(jìn)行查表操作。根據(jù)分布式算法公式,依次進(jìn)行移位累加操作,但對(duì)數(shù)據(jù)最高位進(jìn)行移位相減操作才能得到正確的濾波輸出。整個(gè)系統(tǒng)由時(shí)鐘控制模塊,數(shù)據(jù)輸入模塊,查找表模塊,移位累加模塊以及截位模塊組成。
4.1 時(shí)鐘控制模塊
采用的FPGA芯片是Altera公司的CycloneII系列EP2C5T144C6,其時(shí)鐘晶振是50 MHz。為提高系統(tǒng)運(yùn)算速度,由于輸入數(shù)據(jù)是12位,數(shù)據(jù)輸入模塊一次輸出8位地址,因此需要設(shè)計(jì)一個(gè)采樣信號(hào)12倍頻模塊,即得到120 MHz信號(hào)。時(shí)鐘控制模塊主要包括采樣信號(hào)12倍頻模塊和采樣信號(hào)模塊。其中,采樣信號(hào)倍頻模塊利用QuartusII中PLL實(shí)現(xiàn),采樣信號(hào)模塊利用倍頻模塊通過(guò)硬件描述語(yǔ)言Verilog HDL編程分頻實(shí)現(xiàn)。
4.2 數(shù)據(jù)輸入模塊
該模塊的功能是將輸入數(shù)據(jù)轉(zhuǎn)化為8位查找表的地址,包括移位寄存、預(yù)相加和并串轉(zhuǎn)換。首先將數(shù)據(jù)存入移位寄存器中,通過(guò)延時(shí)進(jìn)行預(yù)相加,最后對(duì)預(yù)相加結(jié)果進(jìn)行并串轉(zhuǎn)換。
4.3 查找表模塊
查找表模塊可以利用QuartusII中的lpm_rom實(shí)現(xiàn),但需要手工計(jì)算每個(gè)地址對(duì)應(yīng)的數(shù)據(jù)輸出,由于輸入8位地址數(shù)據(jù),使用lpm_rom實(shí)現(xiàn)查找表的計(jì)算量過(guò)大,所以該模塊通過(guò)硬件描述語(yǔ)言Verilog HDL編程實(shí)現(xiàn)。模塊還可繼續(xù)拆分為4輸入或2輸入查找表。
4.4 移位累加模塊
系統(tǒng)核心模塊,主要對(duì)查找表模塊輸出數(shù)據(jù)進(jìn)行移位累加操作,由于輸入12位數(shù)據(jù),因此要進(jìn)行12次移位操作,前11次移位進(jìn)行加法操作,第12次移位進(jìn)行減法操作。為使累加結(jié)果不溢出,要進(jìn)行冗余設(shè)計(jì)。
若輸入數(shù)據(jù)與濾波器系數(shù)均為B位,對(duì)于有符號(hào)系統(tǒng),移位累加器長(zhǎng)度M=2B+log2N-1,其中N為濾波器抽頭數(shù)。該移位累加模塊輸出數(shù)據(jù)寬度為27位。
4.5 截位模塊
移位累加模塊輸出27位數(shù)據(jù),由于其對(duì)應(yīng)的10進(jìn)制數(shù)值較大,不便于分析,因此對(duì)移位累加模塊的輸出數(shù)據(jù)進(jìn)行截位。截位模塊的功能是通過(guò)移位截取27位輸入數(shù)據(jù)的高15位。
5 Matlab與QuartusII聯(lián)合仿真
FIR數(shù)字濾波器輸入與輸出均是數(shù)字信號(hào),通過(guò)Matlab編程模擬A/D轉(zhuǎn)換得到濾波器輸入數(shù)據(jù),然后將輸入數(shù)據(jù)送到濾波器輸入端口并進(jìn)行仿真得到輸出波形,最后再通過(guò)Matlab編程模擬D/A轉(zhuǎn)換將輸出數(shù)字信號(hào)以模擬信號(hào)波形形式展現(xiàn)。具體步驟如下:首先利用Matlab編寫(xiě)得到*.mif文件的M程序,輸入0.5 MHz和2.5 MHz正弦相加信號(hào),幅度均為15。然后用QuartusII中l(wèi)pm_rom模塊得到濾波器輸入數(shù)據(jù),再用QuartusII對(duì)系統(tǒng)模塊進(jìn)行仿真,將仿真波形*.vwf文件另存為*.tbl文件,系統(tǒng)模塊仿真波形如圖3所示,最后用Matlab讀取該文件中的數(shù)據(jù),得到采樣信號(hào)時(shí)域波形與頻譜。
6 結(jié)束語(yǔ)
采用改進(jìn)并行DA算法設(shè)計(jì)了一個(gè)16抽頭FIR數(shù)字低通濾波器,與全并行DA算法相比,減少了LUT的個(gè)數(shù),同時(shí)引入倍頻模塊兼顧了運(yùn)算速度。仿真結(jié)果表明,設(shè)計(jì)系統(tǒng)性能穩(wěn)定、濾波效果良好、實(shí)用性較強(qiáng)。同時(shí),利用改進(jìn)并行DA算法設(shè)計(jì)的FIR數(shù)字低通濾波器,其系統(tǒng)速度得到大幅提高,由于省去乘法器的使用,減少了LUT的個(gè)數(shù),邏輯單元的消耗量也大幅降低。該模塊可以作為其他設(shè)計(jì)的子模塊,也可用于設(shè)計(jì)更高階數(shù)的濾波器。