熊潔 黃蕾
摘 要:本課題是基于VHDL的數(shù)字濾波器的設計與實現(xiàn),要求完成數(shù)字濾波器的VHDL語言的模塊描述,通過MAX+PLUSII進行各模塊及頂層的仿真,并下載實現(xiàn)數(shù)字濾波器功能。本設計采用窗函數(shù)法實現(xiàn)線性FIR數(shù)字濾波器的設計,并以一個十六階低通FIR數(shù)字濾波器的實現(xiàn)為例說明了設計過程。
關鍵詞:FIR濾波器;VHDL;窗函數(shù)
本課題基于智能芯片的思想,采用FPGA電路的二次開發(fā)和在線編程能力硬化實現(xiàn)數(shù)字濾波器功能模塊,主要討論基于FPGA技術的數(shù)字濾波器設計方案與具體實現(xiàn)方法。本設計的任務是完成數(shù)字濾波器的VHDL語言的模塊描述,并通過MAX+PLUSII進行各模塊及頂層的仿真。
主要任務:
(1)完成基于VHDL的并行FIR數(shù)字濾波器的設計。(2)用MAX-PLUSII編程實現(xiàn)。(3)完成數(shù)字濾波器算法的仿真。
FPGA有著規(guī)整的內部邏輯陣列和豐富的連線資源,特別適合于數(shù)字信號處理任務,其并行性和可擴展性好,長期以來,F(xiàn)PGA一直被用于系統(tǒng)邏輯或時序控制上,很少有信號處理方面的應用,其原因主要是因為在FPGA中缺乏實現(xiàn)乘法運算的有效結構?,F(xiàn)在這個問題得到了解決,使FPGA在數(shù)字信號處理方面有了長足的發(fā)展。
1 設計思路及特點
1.1 設計思路
采用窗函數(shù)設計法設計FIR濾波器的系數(shù),并采用并行加法結構來提高速度 。
1.2 設計特點
本課題是要設計一個16階8系數(shù)的FIR濾波器,則N=16,x(n),h(n)均用8位二進制數(shù)表示。
假設有16個數(shù)據(jù)x0,x1,x2,……,x14,x15,每個數(shù)據(jù)都用8位二進制數(shù)表示,現(xiàn)要將這16個數(shù)相加。我們先將16個數(shù)據(jù)分為8組,x0與x1,x2與x3……x14與x15。這樣的話,8組數(shù)據(jù)就可以同時進行加法,只需要一個時鐘周期。再將上一步所計算得到的8個數(shù)據(jù)分組,分為四組,進行加法。以此類推,直到算完為止,這樣就需要15個加法器,但只需4個時鐘周期。與傳統(tǒng)累加結構相比,并行加法結構大大減少了計算時間,提高了計算速度。
2 具體步驟
2.1 參數(shù)設計
2.1.1設計指標
下面以一個十六階FIR低通濾波器為例說明設計方法和過程。設定采樣頻率為100kHz,精度<=+1,截止頻率為5kHz,輸入數(shù)據(jù)寬度為8位,輸出數(shù)據(jù)寬度為8位。
2.1.2參數(shù)計算
采用窗函數(shù)設計法來計算FIR的系數(shù),使用的窗函數(shù)為漢寧窗。
我們利用反傅立葉變換公式和低通濾波器的頻率響應H(ejω)求出對應的沖激響應hd(n),
由于要求設計一個16階的FIR,則N=16。計算得hd(n)如下:
hd(0)=hd(15)=0.030025765,hd(1)=hd(14)=0.04365539,hd(2)=hd(13)=0.057190986,hd(3)=hd(12)=0.069900094,hd(4)=hd(11)=0.081074297,hd(5)=hd(10)=0.090077296
hd(6)=hd(9)=0.096388641,hd(7)=hd(8)=0.099639786
根據(jù)漢寧窗的表達式,計算出漢寧窗的系數(shù)如下:
ω(0)= ω(15)=0,ω(1)= ω(14)=0.043227271,ω(2)= ω(13)=0.165434696,
ω(3)= ω(12)=0.345491502,ω(4)= ω(11)=0.552264231,ω(5)= ω(10)=0.75
ω(6)= ω(9)=0.904508497,ω(7)= ω(8)=0.9890738
根據(jù),可計算出的符合設計指標的線性相位16階FIR數(shù)字低通濾波器的特性參數(shù)如下:
h(0)=h(15)=0,h(1)=h(14)=0.001887103,h(2)=h(13)=0.009461373,h(3)=h(12)=0.024149888
h(4)= h(11)=0.044774434,h(5)= h(10)=0.067557972,h(6)= h(9)=0.087184344,
h(7)= h(8)=0.098551101
為了設計的方便,可將上述數(shù)據(jù)擴大,由于濾波器輸出,我們將h(n)擴大1024倍,即210,這樣只需將y(n)除以1024,即右移10位即可,將h(n)乘以1024,得到以下數(shù)據(jù):
將上述數(shù)據(jù)取整,并化為二進制數(shù)(8位):
2.2 程序實現(xiàn)及編譯仿真
2.2.1 編寫VHDL程序
首先,根據(jù)H1,H2…H7模塊的結構圖,編寫VHDL程序:h1.vhd,h2.vhd…h(huán)7.vhd,編譯仿真;然后,根據(jù)系統(tǒng)的總的設計框圖,分別編寫移位寄存器、加法器和移位的程序:reg.vhd,adder.vhd,shift.vhd,并編譯仿真;最后,把各個模塊根據(jù)總的系統(tǒng)設計框圖相應的連接起來,得到總的系統(tǒng)圖,并進行仿真。
2.2.2 仿真結果
仿真結果1大致波形圖如下:
如果輸入x分別從1至14,代入上式計算,由于在參數(shù)設計中將濾波器系數(shù)擴大了1024倍,所以將所得結果除以1024可計算得y=5。由上圖可以看出,符合設計要求。
仿真結果2繪制波形圖如下:
另外,設計的濾波器完成一次濾波所需時間為89.8ns,采樣頻率可達到10MHz,運算速度快,能滿足設計要求。
3 結論及改進
3.1 結論
本課題是基于VHDL的數(shù)字濾波器的設計與實現(xiàn),要求完成數(shù)字濾波器的VHDL語言的模塊描述,通過MAX+PLUSII進行各模塊及頂層的仿真,并下載實現(xiàn)數(shù)字濾波器功能。我們以一個16階低通FIR數(shù)字濾波器為例介紹了用窗函數(shù)設計法設計的過程,計算出FIR濾波器的特性參數(shù),得出總的系統(tǒng)框圖,根據(jù)框圖連接各模塊設計出總的FIR系統(tǒng)圖,在MAX+PLUSⅡ環(huán)境下編譯、仿真,得出仿真結果。其結果正確,而且運算速度快,符合設計要求。
3.2 改進
從FIR的仿真結果可以看出,輸出y存在一定的延時和尖峰脈沖。在本次設計中FIR的系數(shù)是以16階低通濾波器采樣頻率為100kHz截止頻率為5kHz為例設計出來的,因此這些系數(shù)并不具有通用性。在本次設計中輸入信號是一系列數(shù)字信號,因此可以利用模數(shù)轉換器將模擬信號轉換為數(shù)字信號,再用FIR濾波器處理轉換后的信號。
參考文獻
[1]日)谷萩隆嗣著.《數(shù)字濾波器與信號處理》.北京-科學出版社2003
[2]雷伏容.《VHDL電路設計》.清華大學出版社2006
[3]貝耶爾著.《數(shù)字信號處理的FPGA實現(xiàn)》第三版. 清華大學出版社