天天看點

【 FPGA 】MATLAB 生成 FIR 濾波器的操作步驟(包括生成Verilog HDL代碼以及仿真過程)

使用MATLAB生成濾波器有很多學問,這裡隻是作為初步的探索,和FPGA的更多結合,也正在探索中,相關博文例如:【 FPGA 】FIR濾波器目錄,該專題目錄正在記錄我學習FIR濾波器的過程。

MATLAB生成30階低通1MHz海明窗函數設計步驟:

(1)在MATLAB指令視窗中輸入“fdatool”出現如下對話框:

【 FPGA 】MATLAB 生成 FIR 濾波器的操作步驟(包括生成Verilog HDL代碼以及仿真過程)

注意,在MATLAB2018以後的版本中輸入:filterDesigner,即可打開上述界面。

【 FPGA 】MATLAB 生成 FIR 濾波器的操作步驟(包括生成Verilog HDL代碼以及仿真過程)

(2)設定為低通濾波器。

【 FPGA 】MATLAB 生成 FIR 濾波器的操作步驟(包括生成Verilog HDL代碼以及仿真過程)

(3)選擇FIR濾波器的設計類型為窗函數。

【 FPGA 】MATLAB 生成 FIR 濾波器的操作步驟(包括生成Verilog HDL代碼以及仿真過程)

設定FIR濾波器為30階濾波器,選擇窗函數的類型為海明窗函數,海明窗函數可以得到旁瓣更小的效果,能量更加集中在主瓣中,主瓣的能量約占99.963%,第一旁瓣的峰值比主瓣小40dB,但主瓣寬度與海明窗相同。它定義為:

【 FPGA 】MATLAB 生成 FIR 濾波器的操作步驟(包括生成Verilog HDL代碼以及仿真過程)

(4)輸入抽樣頻率和截止頻率,分别是16MHz和1MHz。

(5)點選Design Filter 得到結果,如下圖:

【 FPGA 】MATLAB 生成 FIR 濾波器的操作步驟(包括生成Verilog HDL代碼以及仿真過程)

(6)量化輸入輸出,點選工作欄左邊的量化選項,即“set quantization parameters”選項,選擇定點,設定輸入字長為8,其他選擇預設,如下圖示:

【 FPGA 】MATLAB 生成 FIR 濾波器的操作步驟(包括生成Verilog HDL代碼以及仿真過程)

設定完成後,點選Targets中Generate HDL,選擇生成Verilog 代碼,設定路徑,MATLAB即可生成設計好的濾波器Verilog HDL 代碼以及測試檔案:

【 FPGA 】MATLAB 生成 FIR 濾波器的操作步驟(包括生成Verilog HDL代碼以及仿真過程)
【 FPGA 】MATLAB 生成 FIR 濾波器的操作步驟(包括生成Verilog HDL代碼以及仿真過程)

仿真結果如下圖:

【 FPGA 】MATLAB 生成 FIR 濾波器的操作步驟(包括生成Verilog HDL代碼以及仿真過程)

如上圖所示,當輸入為線性,或者輸入頻率較低時,輸出幅度不會被抑制,當輸入頻率較高,輸出幅度會受到大幅度抑制,而當輸入為白噪聲或者混頻信号時,濾波器會過濾掉高頻信号。

這裡分出來一小部分空間,引用點别人的内容來簡單介紹下上述幾個參數的意思:

Response Type:選擇FIR濾波器的類型:低通、高通​、帶通和帶阻等。在DDC/DUC子產品設計中,抽取和内插需要使用Halfband Lowpass類型,而channel filte​r需要使用Raised-cosine類型。

Design Method:FIR濾波器設計方法有多種,最常用的是窗函數設計法(Window)、等波紋設計法(Equiripple)和最小二乘法(Least-Squares)等。其中窗函數設計法在學校課堂中是重點講解的,提到FIR濾波器肯定會想到hamming、kaiser窗,但是實際應用中卻很少使用,因為如果采用窗函數設計法,達到所期望的頻率響應,與其它方法相比往往階數會更多;而且窗函數設計法一般隻參照通頻帶wp、抑制頻帶ws和理想增益來設計濾波器,但是實際應用中通頻帶和抑制帶的波紋也是需要考慮的,那在這種情況下,采用等波紋設計法就非常适用了。

Filter Order:設定濾波器的階數,這個選項直接影響濾波器的性能,階數越高,性能越好,但是相應在FPGA實作耗用的資源需要增多。在這個設定中提供2個選項:Specify order和Minimum order,Specify order是工程師自己确定濾波器的階數,Minimum order是讓工具自動确定達到期望的頻率相應所需要的最小階數,是以具體選擇哪個選項得視實際情況而定了。

density factor:這個參數控制了頻率網的密度。提高這個參數的值可以使設計出的濾波器更加接近理想的頻率響應,但這樣會增加濾波的計算量。因為濾波器設計要求頻率網上每個頻點都要滿足理想濾波器的名額規格,頻率網越密,設計出的濾波器公式越複雜。

Frequency Specification:設定頻率響應的參數,包括采樣頻率Fs、通帶頻率Fpass和阻帶頻率Fstop。

magnitude specifications:定義幅值衰減,機關是db,分貝。Apass表示通帶衰減,Astop表示阻帶衰減。Apass/Astop = 20*log10(輸出/輸入)。

用等波紋最佳逼近法設計的濾波器,其通帶和阻帶均為等波紋特性,且通帶最大衰減和阻帶最小衰減可以分别控制,是以其名額均勻分布,沒有資源浪費,是以階數低得多。

http://www.elecfans.com/d/700098.html

當然,如果僅僅直接給出上述仿真結果,略顯沒有誠意,因為一般教科書上的風格就是這樣的,不告訴你怎麼仿真成這個樣子,(例如這裡的模拟波形是如何産生的等),那這裡不是教科書,這裡是更随意、更接地氣的分享知識以及經驗的地方,我就給出仿真的過程。

預備1:

首先,你的電腦上必須要有Modelsim這個仿真軟體:

我曾經寫過modelsim安裝以及破解的博文,可以參考!

modelsim-win64-10.4-se 破解(win7實驗成功)(其他作業系統也可參考,大同小異)

預備2:通過上述的方法生成Verilog HDL代碼以及testbench檔案:

【 FPGA 】MATLAB 生成 FIR 濾波器的操作步驟(包括生成Verilog HDL代碼以及仿真過程)

正式開始:

打開Modelsim,建立一個工程檔案:

【 FPGA 】MATLAB 生成 FIR 濾波器的操作步驟(包括生成Verilog HDL代碼以及仿真過程)

添加Verilog HDL檔案以及測試檔案:

【 FPGA 】MATLAB 生成 FIR 濾波器的操作步驟(包括生成Verilog HDL代碼以及仿真過程)
【 FPGA 】MATLAB 生成 FIR 濾波器的操作步驟(包括生成Verilog HDL代碼以及仿真過程)

如下圖,選中并編譯:

【 FPGA 】MATLAB 生成 FIR 濾波器的操作步驟(包括生成Verilog HDL代碼以及仿真過程)

之後開始仿真:

【 FPGA 】MATLAB 生成 FIR 濾波器的操作步驟(包括生成Verilog HDL代碼以及仿真過程)

選中tb檔案,并取消優化選項:

【 FPGA 】MATLAB 生成 FIR 濾波器的操作步驟(包括生成Verilog HDL代碼以及仿真過程)

之後,如下圖:選中目标并右擊添加到wave;

【 FPGA 】MATLAB 生成 FIR 濾波器的操作步驟(包括生成Verilog HDL代碼以及仿真過程)

如下圖:仿真時間改為1ms

【 FPGA 】MATLAB 生成 FIR 濾波器的操作步驟(包括生成Verilog HDL代碼以及仿真過程)

運作:

【 FPGA 】MATLAB 生成 FIR 濾波器的操作步驟(包括生成Verilog HDL代碼以及仿真過程)

選中下面的兩項:

【 FPGA 】MATLAB 生成 FIR 濾波器的操作步驟(包括生成Verilog HDL代碼以及仿真過程)

右擊,format,analog(automatic);

右擊,radix,decimal;

這兩個步驟完成之後,就出現如下圖的效果:

【 FPGA 】MATLAB 生成 FIR 濾波器的操作步驟(包括生成Verilog HDL代碼以及仿真過程)

從中,最直覺的感受就是我們設計的這個濾波器對低頻分量給予通過,對高頻分量則出現抑制現象,和我們的預期一樣,因為我們設計的就是低通濾波器。

更多内容的你可以仔細去閱讀tb檔案,看看人家輸入的信号是什麼樣的。

好了,這篇博文就到這裡了。

路漫漫其修遠兮,吾将上下而求索!

繼續閱讀