基于FPGA的16抽頭FIR數(shù)字低通濾波器設(shè)計與仿真
摘要 采用改進(jìn)并行分布式算法設(shè)計了一種16抽頭FIR數(shù)字低通濾波器,首先用Matlab工具箱中的FDATool設(shè)計濾波器系數(shù),然后使用硬件描述語言Verilog HDL和原理圖,實現(xiàn)了子模塊和系統(tǒng)模塊設(shè)計,在Matlab與QuartusII中對系統(tǒng)模塊進(jìn)行聯(lián)合仿真。仿真結(jié)果表明,設(shè)計系統(tǒng)性能穩(wěn)定,濾波效果良好,且實用性較強(qiáng)。
本文引用地址:http://www.ex-cimer.com/article/262694.htm數(shù)字濾波器分為有限沖激響應(yīng)(FIR)和無限沖激響應(yīng)(IIR)兩種。其中,F(xiàn)IR數(shù)字濾波器在實現(xiàn)任意幅頻特性的同時能夠保證嚴(yán)格的線性相位特性。由于其單位沖激響應(yīng)是有限的,沒有輸出到輸入的反饋,因此系統(tǒng)是穩(wěn)定系統(tǒng)。FIR數(shù)字濾波器在通信、圖像處理、模式識別等領(lǐng)域有著廣泛應(yīng)用。
在實時性要求較高的應(yīng)用場合,相比于DSP芯片或?qū)S眯酒?,采用可編程芯?a class="contentlabel" href="http://www.ex-cimer.com/news/listbylabel/label/FPGA">FPGA實現(xiàn)FIR數(shù)字濾波器具有高速、高精度、高靈活性的優(yōu)點(diǎn)。數(shù)字濾波器的設(shè)計方法有多種,常用的有窗函數(shù)法、頻率抽樣法和最佳一致逼近法,但這些設(shè)計方法在設(shè)計濾波器尤其是高階濾波器時工作量較大。而利用Matlab信號處理工具箱進(jìn)行數(shù)字濾波器的設(shè)計,能夠減少工作量,提高設(shè)計效率。文中首先使用Matlab設(shè)計濾波器系數(shù),然后利用FPGA實現(xiàn)系統(tǒng)。
在FPGA中,進(jìn)行傳統(tǒng)乘法運(yùn)算占用大量的硬件資源,分布式算法利用ROM查找表將固定系數(shù)的乘累加運(yùn)算轉(zhuǎn)換成查表操作,避免了乘法運(yùn)算,查表后的數(shù)據(jù)執(zhí)行的都是簡單的加法運(yùn)算,可以較大程度地提高運(yùn)算速度。分布式算法分為全串行分布式算法和全并行分布式算法,全串行分布式算法資源消耗少但運(yùn)算速度慢,全并行分布式算法資源消耗少但運(yùn)算速度快。兼顧運(yùn)算速度與資源消耗,本文采用改進(jìn)并行分布式算法進(jìn)行FIR數(shù)字濾波器設(shè)計。
1 FIR數(shù)字濾波器基本理論
對于FIR數(shù)字濾波器系統(tǒng),其沖激響應(yīng)是有限長的,系統(tǒng)函數(shù)可記為
式中,x(n)是采樣輸入序列;h(i)是濾波器系數(shù);N是濾波器抽頭數(shù);y(n)是濾波器輸出序列。
2 分布式算法
分布式算法(Distributed Arithmetic,DA)是一項重要的FPGA技術(shù),廣泛地應(yīng)用在卷積、相關(guān)、DFF計算和RNS反演映射等乘積和中。有關(guān)DA算法的討論可以追溯到1973年Croisier發(fā)表的論文,而DA算法的推廣工作則由Peled和Liu完成。雖然DA算法較早被提出,但是一直到可編程門陣列的查找表結(jié)構(gòu)出現(xiàn),這種算法才重新受到重視,成為一種重要的FIR數(shù)字濾波器設(shè)計方法。
DA算法是一種以實現(xiàn)乘加運(yùn)算為目的的運(yùn)算方法,其與傳統(tǒng)實現(xiàn)乘加運(yùn)算算法的不同之處在于執(zhí)行部分積運(yùn)算的先后順序不同。DA算法在完成乘加功能時是通過將各輸入數(shù)據(jù)每一位產(chǎn)生的部分積預(yù)先進(jìn)行相加形成相應(yīng)部分積,然后再對相應(yīng)部分積進(jìn)行加權(quán)累加形成最終結(jié)果;而傳統(tǒng)算法是等到所有乘積產(chǎn)生之后再進(jìn)行相加來完成乘加運(yùn)算。與傳統(tǒng)算法相比,DA算法可以大幅減少硬件電路規(guī)模,易實現(xiàn)流水線處理,提高了電路的執(zhí)行速度。DA算法原理如下。
對于有符號系統(tǒng),采用補(bǔ)碼實現(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è)計,通過引入倍頻模塊減少LUT的個數(shù)來節(jié)省資源消耗,同時保證運(yùn)算速度。該算法僅使用一個LUT并結(jié)合流水線寄存器的使用來提高系統(tǒng)運(yùn)算速度。算法原理是讓輸入數(shù)據(jù)每一個相同位同時尋址,將尋址內(nèi)容進(jìn)行相應(yīng)的移位累加操作得到最終輸出,算法如圖1所示。
3 濾波器系數(shù)設(shè)計與量化
文中濾波器系數(shù)通過Matlab工具箱中的FDATool進(jìn)行設(shè)計,濾波器設(shè)計指標(biāo)如下。濾波器類型:低通;設(shè)計方法: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實現(xiàn)
用FPGA設(shè)計FIR數(shù)字濾波器時,利用濾波器系數(shù)的對稱性,將16抽頭設(shè)計轉(zhuǎn)化為8抽頭設(shè)計。首先將輸入數(shù)據(jù)存入移位寄存器中,通過延時進(jìn)行預(yù)相加,然后以預(yù)相加結(jié)果數(shù)據(jù)的相同位的值為地址進(jìn)行查表操作。根據(jù)分布式算法公式,依次進(jìn)行移位累加操作,但對數(shù)據(jù)最高位進(jìn)行移位相減操作才能得到正確的濾波輸出。整個系統(tǒng)由時鐘控制模塊,數(shù)據(jù)輸入模塊,查找表模塊,移位累加模塊以及截位模塊組成。
4.1 時鐘控制模塊
采用的FPGA芯片是Altera公司的CycloneII系列EP2C5T144C6,其時鐘晶振是50 MHz。為提高系統(tǒng)運(yùn)算速度,由于輸入數(shù)據(jù)是12位,數(shù)據(jù)輸入模塊一次輸出8位地址,因此需要設(shè)計一個采樣信號12倍頻模塊,即得到120 MHz信號。時鐘控制模塊主要包括采樣信號12倍頻模塊和采樣信號模塊。其中,采樣信號倍頻模塊利用QuartusII中PLL實現(xiàn),采樣信號模塊利用倍頻模塊通過硬件描述語言Verilog HDL編程分頻實現(xiàn)。
4.2 數(shù)據(jù)輸入模塊
該模塊的功能是將輸入數(shù)據(jù)轉(zhuǎn)化為8位查找表的地址,包括移位寄存、預(yù)相加和并串轉(zhuǎn)換。首先將數(shù)據(jù)存入移位寄存器中,通過延時進(jìn)行預(yù)相加,最后對預(yù)相加結(jié)果進(jìn)行并串轉(zhuǎn)換。
4.3 查找表模塊
查找表模塊可以利用QuartusII中的lpm_rom實現(xiàn),但需要手工計算每個地址對應(yīng)的數(shù)據(jù)輸出,由于輸入8位地址數(shù)據(jù),使用lpm_rom實現(xiàn)查找表的計算量過大,所以該模塊通過硬件描述語言Verilog HDL編程實現(xiàn)。模塊還可繼續(xù)拆分為4輸入或2輸入查找表。
濾波器相關(guān)文章:濾波器原理
fpga相關(guān)文章:fpga是什么
濾波器相關(guān)文章:濾波器原理
低通濾波器相關(guān)文章:低通濾波器原理
電源濾波器相關(guān)文章:電源濾波器原理
晶振相關(guān)文章:晶振原理 數(shù)字濾波器相關(guān)文章:數(shù)字濾波器原理
評論