何蘊(yùn)良,耿淑琴,汪金輝(北京工業(yè)大學(xué)電子信息與控制工程學(xué)院,北京 100022)
?
基于Verilog的FIR數(shù)字濾波器設(shè)計(jì)與仿真
何蘊(yùn)良,耿淑琴,汪金輝
(北京工業(yè)大學(xué)電子信息與控制工程學(xué)院,北京100022)
摘要:設(shè)計(jì)一種基于Verilog的FIR數(shù)字低通濾波器。在結(jié)構(gòu)上改變了以往乘法器和加法器的簡(jiǎn)單結(jié)合,利用分布式算法構(gòu)造查找表進(jìn)行乘累加運(yùn)算,節(jié)約資源占用并且提高運(yùn)算速率。利用Matlab工具設(shè)計(jì)和獲取濾波器參數(shù),并且進(jìn)行仿真驗(yàn)證。濾波器參數(shù)量化后形成查找表,利用Verilog HDL語(yǔ)言對(duì)硬件電路模塊進(jìn)行設(shè)計(jì)描述,并且用ModelSim進(jìn)行整個(gè)硬件電路系統(tǒng)的功能仿真,驗(yàn)證了設(shè)計(jì)的正確性。設(shè)計(jì)在速度和面積方面做了折中和優(yōu)化,成功實(shí)現(xiàn)了數(shù)字濾波的功能。
關(guān)鍵詞:Verilog;數(shù)字濾波器;分布式算法;FIR
從帶有干擾的原始信號(hào)中提取有效信號(hào)并對(duì)其進(jìn)行處理,幾乎是所有科學(xué)技術(shù)領(lǐng)域都必然涉及的重要環(huán)節(jié)。信號(hào)處理的任務(wù)主要是對(duì)信號(hào)進(jìn)行采樣接收、頻譜分析、域變換、綜合和估值識(shí)別等[1]?,F(xiàn)在的信號(hào)處理的系統(tǒng)主要分為兩大類:模擬信號(hào)處理系統(tǒng)和數(shù)字信號(hào)處理系統(tǒng)。數(shù)字信號(hào)處理,主要是利用計(jì)算機(jī)或?qū)S锰幚碓O(shè)備對(duì)數(shù)字信號(hào)進(jìn)行分析、變換、綜合、估計(jì)與識(shí)別等進(jìn)行加工處理。數(shù)字信號(hào)處理的核心的內(nèi)容主要是傅里葉變換和數(shù)字濾波。而其中數(shù)字濾波技術(shù)的主要任務(wù)是從帶有噪聲干擾的信號(hào)中提取所需要的有效信號(hào),而抑制不需要的噪聲信號(hào)。數(shù)字濾波器(Digital Filter)是用來(lái)對(duì)輸入信號(hào)進(jìn)行濾波的硬件或軟件。它的輸入和輸出均為數(shù)字信號(hào),并通過(guò)一定運(yùn)算關(guān)系改變輸入信號(hào)所含頻率成分的器件[2]。與模擬濾波器相比,數(shù)字濾波器的處理的信號(hào)形式,實(shí)現(xiàn)濾波的方法不同,因此數(shù)字濾波器具有精度高、穩(wěn)定,體積小、重量輕、靈活,不要求阻抗匹配等優(yōu)點(diǎn)。數(shù)字濾波器在實(shí)驗(yàn)和現(xiàn)實(shí)的生產(chǎn)生活中起著廣泛和重要的作用。
1.1FIR數(shù)字濾波器原理和特點(diǎn)
數(shù)字濾波器分為有限沖激響應(yīng)(FIR)數(shù)字濾波器和無(wú)限沖激響應(yīng)(IIR)數(shù)字濾波器兩種,這兩種濾波器均被廣泛應(yīng)用于數(shù)字信號(hào)處理系統(tǒng)中。IIR數(shù)字濾波器設(shè)計(jì)方便簡(jiǎn)單,但是它的相位具有非線性,所以要求全通網(wǎng)絡(luò)進(jìn)行相位的校正,而且它的穩(wěn)定性難以保障。而FIR濾波器具有很好的線性相位特性,使得它越來(lái)越受到廣泛的重視[3]。FIR數(shù)字濾波器是一個(gè)線性時(shí)不變系統(tǒng),所以N階因果有限沖激響應(yīng)濾波器可以用傳輸函數(shù)H(z)來(lái)描述:
在時(shí)域中,上述有限沖激響應(yīng)濾波器的輸入/輸出關(guān)系為:
式中:x(n)和y(n)分別是輸入和輸出序列。FIR濾波器的主要特點(diǎn)是:既具有嚴(yán)格的線性相位,又具有任意的幅度。它的單位抽樣響應(yīng)是有限長(zhǎng)的,因而濾波器性能比較穩(wěn)定。只要經(jīng)過(guò)一定的延時(shí),任何非因果有限長(zhǎng)序列都能變成因果的有限長(zhǎng)序列,因而能用因果系統(tǒng)來(lái)實(shí)現(xiàn)。它的單位沖擊響應(yīng)是有限長(zhǎng)的,可用快速傅里葉變換來(lái)實(shí)現(xiàn)過(guò)濾信號(hào),運(yùn)算效率可以有很大提高。
1.2FIR數(shù)字濾波器結(jié)構(gòu)
FIR數(shù)字濾波器的實(shí)現(xiàn)一般有直接型、轉(zhuǎn)置型、線性相位型、級(jí)聯(lián)和頻率采樣等[4]。乘法運(yùn)算是實(shí)現(xiàn)濾波的關(guān)鍵方法,但是乘法運(yùn)算占用電路資源很大,因此,在選擇結(jié)構(gòu)時(shí),也要考慮到資源的占用。線性相位的FIR濾波器結(jié)構(gòu)比一般直接型結(jié)構(gòu)可以節(jié)省幾乎一半的乘法次數(shù),設(shè)計(jì)中選擇了線性相位的FIR濾波結(jié)構(gòu)。FIR濾波器的線性相位非常重要,數(shù)據(jù)的傳輸和圖像處理都要求系統(tǒng)具有線性相位。由于FIR濾波器的沖激響應(yīng)是有限長(zhǎng)的,有可能做成嚴(yán)格線性相位。當(dāng)沖擊響應(yīng)滿足下列公式時(shí),F(xiàn)IR濾波器具有對(duì)稱結(jié)構(gòu),為線性相位濾波器;N階線性相位的因果FIR系統(tǒng)的單位沖激響應(yīng)濾波器的對(duì)稱的沖激響應(yīng)公式為:
或者反對(duì)稱的沖激響應(yīng)公式:
當(dāng)N為偶數(shù)時(shí):
當(dāng)N為奇數(shù)時(shí):
因此FIR線性相位系統(tǒng)的結(jié)構(gòu)可轉(zhuǎn)化成如圖1和圖2所示的電路圖。
這樣就實(shí)現(xiàn)了結(jié)構(gòu)上的對(duì)稱,因此減少了乘法次數(shù)。由于這種對(duì)稱性,使得乘法器數(shù)量可以減半。乘法器的減少,意味著電路成本減少,可以提高電路的工作效率。
圖1 FIR線性相位系統(tǒng)的結(jié)構(gòu)(N為奇數(shù))
圖2 FIR線性相位系統(tǒng)的結(jié)構(gòu)(N為偶數(shù))
分布式算法是一項(xiàng)重要的FPGA技術(shù),這種算法使得一般的乘積和計(jì)算在FPGA實(shí)施過(guò)程中不再需要通用乘法器[5]。分布式算法和傳統(tǒng)實(shí)現(xiàn)乘累加運(yùn)算的主要不同是:執(zhí)行部分積運(yùn)算的先后順序不同。分布式算法完成乘累加功能是通過(guò)把輸入數(shù)據(jù)每一個(gè)對(duì)應(yīng)的位產(chǎn)生的部分積預(yù)先進(jìn)行相加形成相應(yīng)部分積,然后再對(duì)各部分產(chǎn)生的積相加起來(lái)得到最終結(jié)果。
而傳統(tǒng)的算法是在所有的乘積產(chǎn)生之后,再進(jìn)行相加得到最后的結(jié)果。與傳統(tǒng)算法相比,運(yùn)用分布式算法之后可以極大地減少硬件電路規(guī)模,并且容易實(shí)現(xiàn)流水線處理,因而提高了電路執(zhí)行的速度。對(duì)于FIR數(shù)字濾波器,基本結(jié)構(gòu)是一個(gè)分節(jié)的延時(shí)線,每一節(jié)的輸出加權(quán)累加,得到濾波器的輸出。它的輸出y就是輸入x和系數(shù)h的內(nèi)積:
輸入數(shù)據(jù)x(n)可以采用B+1位補(bǔ)碼來(lái)表示,即:
因?yàn)橄禂?shù)h(n)為已知常數(shù),則內(nèi)積y可以寫(xiě)成:
將上式中的第二部分展開(kāi),重新分別求和,這也是“分布式算法”名稱的由來(lái),可以得到:
化簡(jiǎn)為:
計(jì)算h(n)xb(n)的方法就是用查找表來(lái)實(shí)現(xiàn)一個(gè)映射,然后再將此映射得到的結(jié)果經(jīng)過(guò)相應(yīng)的二次冪加權(quán),最后得到濾波器的輸出。分布式算法在大規(guī)模集成電路實(shí)現(xiàn)中被廣泛應(yīng)用,它的顯著優(yōu)點(diǎn)包括可節(jié)約硬件資源,所實(shí)現(xiàn)硬件結(jié)構(gòu)具有高度規(guī)整性,最小的傳輸延時(shí)和最少的跨區(qū)域連接等[6]。
3.1濾波參數(shù)提取與量化
FIR濾波器系數(shù)計(jì)算是比較繁瑣的,在設(shè)計(jì)時(shí),可以借助Matlab工具箱,根據(jù)設(shè)計(jì)需求選擇合適的窗函數(shù),即可方便地計(jì)算濾波器系數(shù),并分析幅頻、相頻特性[7]。采用Matlab中工具箱中的Filter Design來(lái)設(shè)計(jì)和提取濾波器參數(shù)。利用其中FDAtool工具可以設(shè)計(jì)出滿足所需性能指標(biāo)的濾波器。界面如圖3所示。
圖3 Toolboxes工具箱界面
要設(shè)計(jì)的濾波器的參數(shù)如圖3所示:設(shè)計(jì)低通濾波器,采用窗函數(shù)中的Kaiser窗來(lái)實(shí)現(xiàn),Beta值為2.116,Wc為0.4。按照給定的參數(shù)設(shè)計(jì)數(shù)字濾波器,得到的沖擊響應(yīng)、線性相位和幅度響應(yīng)如圖4所示,可見(jiàn)第一旁瓣響應(yīng)小于-30 dB,符合設(shè)計(jì)要求。由于Matlab計(jì)算得到的濾波系數(shù)均為有符號(hào)浮點(diǎn)值,但在后續(xù)利用硬件描述語(yǔ)言對(duì)數(shù)字濾波器進(jìn)行RTL建模和功能仿真時(shí),濾波系數(shù)都必須為定點(diǎn)值。因此,還需要將這些浮點(diǎn)形式的濾波系數(shù)定點(diǎn)量化[8]。將量化后轉(zhuǎn)換成補(bǔ)碼形式,得到的系數(shù)如表1所示。
3.2Matlab仿真和結(jié)果分析
把設(shè)計(jì)的濾波器實(shí)例化,并在Matlab中Simulink工具下仿真,測(cè)試它是否可以完成濾波功能。搭建測(cè)試平臺(tái)如圖5所示。給定高頻和低頻兩個(gè)測(cè)試信號(hào),并將這兩個(gè)測(cè)試信號(hào)混合,混合后的信號(hào)如圖6所示。然后再通過(guò)濾波器,經(jīng)過(guò)濾波器處理的信號(hào)如圖7所示,觀測(cè)輸出信號(hào)是否可以成功地濾掉高頻信號(hào),保留理想的低頻信號(hào)。
圖4 濾波器的沖擊響應(yīng)、線性相位和幅度響應(yīng)
表1 量化系數(shù)和補(bǔ)碼表
圖5 測(cè)試平臺(tái)
圖6 混合后的信號(hào)
圖7 經(jīng)過(guò)濾波的信號(hào)
4.1模塊描述
上文中證實(shí)了該數(shù)字濾波器功能的正確性,開(kāi)始把整個(gè)設(shè)計(jì)劃分成各個(gè)功能模塊,并且定義各個(gè)模塊的功能,然后對(duì)濾波器的各個(gè)功能模塊進(jìn)行硬件語(yǔ)言描述,形成各個(gè)模塊的實(shí)例。
移位寄存模塊的功能是將輸入的數(shù)據(jù)在時(shí)鐘的上升沿依次進(jìn)行移位寄存,即就是產(chǎn)生一次數(shù)據(jù)延遲的過(guò)程。因?yàn)槌轭^系數(shù)的對(duì)稱性,所以可以把首尾的輸入系數(shù)預(yù)先進(jìn)行相加處理,然后對(duì)這個(gè)預(yù)相加的結(jié)果再進(jìn)行數(shù)據(jù)的處理,合二為一,這樣可以節(jié)省芯片面積和運(yùn)算時(shí)間。串并轉(zhuǎn)換模塊,把并行的數(shù)據(jù)轉(zhuǎn)化為串行的數(shù)據(jù),然后輸入到查找表中進(jìn)行查找。查找表模塊,該模塊的作用是對(duì)輸入的數(shù)據(jù)進(jìn)行查找,輸出查找表結(jié)果。查找表結(jié)構(gòu)相加模塊的功能是把查找表中輸出的數(shù)據(jù)進(jìn)行相加。
計(jì)算模塊的功能是把相加后的數(shù)據(jù)進(jìn)行加或者減操作,輸出最終的結(jié)果。整合好的電路頂層連接如圖8所示。
圖8 電路頂層連接框圖
4.2電路仿真
將測(cè)試數(shù)據(jù)依次送到輸入端,觀察輸出數(shù)據(jù)的結(jié)果,經(jīng)過(guò)計(jì)算,輸出結(jié)果和計(jì)算應(yīng)得結(jié)果一致,準(zhǔn)確無(wú)誤,說(shuō)明濾波器仿真功能正確,輸入和輸出信號(hào)見(jiàn)圖9。
圖9 電路仿真結(jié)果
本文設(shè)計(jì)實(shí)現(xiàn)了FIR數(shù)字低通濾波器,整個(gè)設(shè)計(jì)分成濾波器系數(shù)設(shè)計(jì)提取和濾波電路的Verilog實(shí)現(xiàn)。濾波系數(shù)設(shè)計(jì)提取利用Matlab工具,并用其進(jìn)行仿真驗(yàn)證,證明該濾波算法原理的正確性。采用自頂向下的設(shè)計(jì)方法,將FIR濾波器系統(tǒng)劃分為若干電路的模塊,分別對(duì)各個(gè)模塊進(jìn)行Verilog設(shè)計(jì)實(shí)現(xiàn),最后整合成整個(gè)濾波器電路,經(jīng)過(guò)仿真驗(yàn)證了其功能的正確性。
參考文獻(xiàn)
[1]戴明禎.數(shù)字信號(hào)處理的硬件實(shí)現(xiàn)[M].北京:航空工業(yè)出版社,1998.
[2]劉朋全.基于FPGA的FIR數(shù)字濾波器的設(shè)計(jì)和實(shí)現(xiàn)[D].西安:西北工業(yè)大學(xué),2006.
[3]王旭東,潘明海.數(shù)字信號(hào)處理的FPGA實(shí)現(xiàn)[M].北京:清華大學(xué)出版社,2011.
[4]劉福泉.基于FPGA的FIR數(shù)字濾波器實(shí)現(xiàn)[D].北京:北京郵電大學(xué),2012.
[5]王一海,俞筱楠,姜志鵬.并行分布式算法FIR濾波器的FPGA實(shí)現(xiàn)[J].電子器件,2012,35(5):545?548.
[6]王天云.基于分布式算法FIR濾波器的FPGA實(shí)現(xiàn)[J].艦船電子工程,2005,25(5):107?110.
[7]孫耀奇,高火濤,熊超,等.基于Matlab和FPGA的FIR數(shù)字濾波器設(shè)計(jì)及實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),2008,31(11):89?92.
[8]王赟松.FIR數(shù)字濾波器設(shè)計(jì)[D].西安:西安電子科技大學(xué),2012.
Design and simulation of FIR digital filter based on Verilog
HE Yunliang,GENG Shuqin,WANG Jinhui
(College of Electronic Information & Control Engineering,Beijing University of Technology,Beijing 100022,China)
Abstract:A FIR digital low?pass filter based on Verilog was designed and changed in its the structure. It isn’t a commonly used simple combination of multipliers and adders,but the distributed algorithm was used to construct a lookup table to achieve the multiply?accumulate operation. Resource occupation was reduced and the operating rate was improved by this way. The Mat?lab was used to obtain parameters of the filter. The look?up table is formed by quantification of the parameters. The hardware cir?cuit modules are designed and are described with Verilog HDL. The functional simulation of the whole hardware circuit system was conducted to verify correctness of the design by ModelSim. A compromise and optimization in speed and area were made,by which the functions of digital filtering were achieved successfully.
Keywords:Verilog;digital filter;distributed algorithm;FIR
中圖分類號(hào):TN713?34
文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1004?373X(2016)10?0001?04
doi:10.16652/j.issn.1004?373x.2016.10.001
收稿日期:2015?09?06
基金項(xiàng)目:國(guó)家自然科學(xué)基金(61204040;60976028);教育部博士點(diǎn)基金(20121103120018);北京市教育委員會(huì)科技計(jì)劃面上項(xiàng)目(JC002999201301);北京市自然科學(xué)基金資助(4152004)
作者簡(jiǎn)介:何蘊(yùn)良(1991—),男,河北秦皇島人,碩士研究生。研究方向?yàn)榧呻娐吩O(shè)計(jì)與系統(tǒng)。耿淑琴(1970—),女,山西運(yùn)城人,博士。研究方向?yàn)榧呻娐吩O(shè)計(jì)與系統(tǒng)、無(wú)線傳感網(wǎng)絡(luò)等。汪金輝(1982—),男,河北唐山人,副教授,博士。研究方向?yàn)榧呻娐吩O(shè)計(jì)、嵌入式系統(tǒng)等。