濾波器是信號處理技術(shù)繞不過的內(nèi)容,而在BSPK的實現(xiàn)框圖中,也需要用到濾波器。
m序列的時域波形是一個矩形,矩形在頻譜上是所有奇次諧波之和,為了節(jié)省帶寬資源,這里需要使用FIR濾去諧波,留下基波。
本文會講到Vivado 中FIR IP核的使用方法,會涉及到MATLAB的部分內(nèi)容。
因為我們不使用太高級的功能,只使用最基礎(chǔ)的功能,濾波。所以,最關(guān)鍵的內(nèi)容就是coe參數(shù)文件的生成,可以使用MATLAB幫助我們生成這個文件。
在MATLAB的命令窗口,輸入fdatool(新版MATLAB為filterDesigner)回車,
濾波器設(shè)置界面
這里選擇低通FIR,窗函數(shù)選常用的幾個,這里選擇了漢明窗;濾波器階數(shù)選擇72,階數(shù)越高濾波效果越好,但資源占用越多;FS/FC(采樣率/截止頻率)為50:3,點擊Design Filter會顯示相應(yīng)的頻率響應(yīng)圖,由于FIR濾波器抽頭的特性,當輸入的采樣率為50M時,濾波器的截止頻率為3M,兩者之間保持比例關(guān)系。
濾波器數(shù)值表示
點擊如上圖紅框內(nèi)的圖標,將Filter arithmetic修改為Fixed-point,將濾波器的參數(shù)數(shù)值表示修改為定點數(shù)表示,方便FPGA處理,也只有這樣能生成coe文件。
濾波器生成coe文件
點擊上圖菜單欄的Target,然后生成coe文件。
在Vivado中IP Catalog中找到FIR IP核,
FIR IP核界面
在Filter Coefficient里面選擇使用COE FILE,文件選擇剛才生成的COE文件。
FIR IP核界面
在Channel Specification,設(shè)置輸入的采樣率為50M。
FIR IP核界面
Implementation里面,濾波器系數(shù)類型選擇有符號型,輸入數(shù)據(jù)也是有符號型,輸入數(shù)據(jù)位寬選擇2位,小數(shù)部分位數(shù)為0,GUI顯示出輸入數(shù)據(jù)位寬21位,這些數(shù)值后面有用。
一路默認,F(xiàn)IR IP核生成后,可以看到相關(guān)的端口定義。
fir_compiler_0 your_instance_name (
.aclk(aclk), // input wire aclk
.s_axis_data_tvalid(s_axis_data_tvalid), // input wire s_axis_data_tvalid
.s_axis_data_tready(s_axis_data_tready), // output wire s_axis_data_tready
.s_axis_data_tdata(s_axis_data_tdata), // input wire [7 : 0] s_axis_data_tdata
.m_axis_data_tvalid(m_axis_data_tvalid), // output wire m_axis_data_tvalid
.m_axis_data_tdata(m_axis_data_tdata) // output wire [23 : 0] m_axis_data_tdata
);
可以看到,輸入數(shù)據(jù)位寬為8位,而我們在FIR GUI界面設(shè)置的是2位,為了不影響最終的輸入數(shù)據(jù),需要對輸入數(shù)據(jù)進行符號位擴展。
而輸出數(shù)據(jù)位寬有24位,但是FIR GUI界面顯示輸出數(shù)據(jù)位寬為21位,這說明FIR的輸出數(shù)據(jù)也進行了符號位擴展,這里可以截取符號位。
相關(guān)的符號位擴展和截取符號位可以見下代碼塊。
fir_compiler_0 fir_inst (
.aclk(clk_50m), // input wire aclk
.s_axis_data_tvalid(1'b1), // input wire s_axis_data_tvalid
.s_axis_data_tready(), // output wire s_axis_data_tready
.s_axis_data_tdata({{6{code_c[1]}},code_c}), // input wire [7 : 0] s_axis_data_tdata
.m_axis_data_tvalid(), // output wire m_axis_data_tvalid
.m_axis_data_tdata(fir_out) // output wire [23 : 0] m_axis_data_tdata 19-8
);
xbip_dsp48_macro_0 dsp_product_inst (
.CLK(clk_50m), // input wire CLK
.A(fir_out[19:8]), // input wire [11 : 0] A
.B(cos_o[13:2]), // input wire [11 : 0] B
.P(duc_data) // output wire [23 : 0] P
);
最后的濾波效果如圖:
濾波效果圖
濾波效果可以繼續(xù)調(diào)節(jié),這里可以看到圖里的濾波效果確實達到了,但可能效果不是那么好,實際的濾波參數(shù)需要仿真后看效果才可以確定。
FIR濾波相對于IIR濾波而言,沒有極點或者說極點與零點抵消了,更加穩(wěn)定。但如果有時候我們想用IIR濾波器怎么辦呢,后續(xù)會談到如何實現(xiàn)IIR濾波器。
-
濾波器
+關(guān)注
關(guān)注
161文章
7826瀏覽量
178204 -
MATLAB仿真
+關(guān)注
關(guān)注
4文章
176瀏覽量
19932 -
GUI
+關(guān)注
關(guān)注
3文章
660瀏覽量
39703 -
FIR濾波
+關(guān)注
關(guān)注
0文章
6瀏覽量
9833 -
Vivado
+關(guān)注
關(guān)注
19文章
812瀏覽量
66586
發(fā)布評論請先 登錄
相關(guān)推薦
評論