濾波器是信號處理技術繞不過的內容,而在BSPK的實現框圖中,也需要用到濾波器。
m序列的時域波形是一個矩形,矩形在頻譜上是所有奇次諧波之和,為了節省帶寬資源,這里需要使用FIR濾去諧波,留下基波。
本文會講到Vivado 中FIR IP核的使用方法,會涉及到MATLAB的部分內容。
因為我們不使用太高級的功能,只使用最基礎的功能,濾波。所以,最關鍵的內容就是coe參數文件的生成,可以使用MATLAB幫助我們生成這個文件。
在MATLAB的命令窗口,輸入fdatool(新版MATLAB為filterDesigner)回車,
濾波器設置界面
這里選擇低通FIR,窗函數選常用的幾個,這里選擇了漢明窗;濾波器階數選擇72,階數越高濾波效果越好,但資源占用越多;FS/FC(采樣率/截止頻率)為50:3,點擊Design Filter會顯示相應的頻率響應圖,由于FIR濾波器抽頭的特性,當輸入的采樣率為50M時,濾波器的截止頻率為3M,兩者之間保持比例關系。
濾波器數值表示
點擊如上圖紅框內的圖標,將Filter arithmetic修改為Fixed-point,將濾波器的參數數值表示修改為定點數表示,方便FPGA處理,也只有這樣能生成coe文件。
濾波器生成coe文件
點擊上圖菜單欄的Target,然后生成coe文件。
在Vivado中IP Catalog中找到FIR IP核,
FIR IP核界面
在Filter Coefficient里面選擇使用COE FILE,文件選擇剛才生成的COE文件。
FIR IP核界面
在Channel Specification,設置輸入的采樣率為50M。
FIR IP核界面
Implementation里面,濾波器系數類型選擇有符號型,輸入數據也是有符號型,輸入數據位寬選擇2位,小數部分位數為0,GUI顯示出輸入數據位寬21位,這些數值后面有用。
一路默認,FIR IP核生成后,可以看到相關的端口定義。
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
);
可以看到,輸入數據位寬為8位,而我們在FIR GUI界面設置的是2位,為了不影響最終的輸入數據,需要對輸入數據進行符號位擴展。
而輸出數據位寬有24位,但是FIR GUI界面顯示輸出數據位寬為21位,這說明FIR的輸出數據也進行了符號位擴展,這里可以截取符號位。
相關的符號位擴展和截取符號位可以見下代碼塊。
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
);
最后的濾波效果如圖:
濾波效果圖
濾波效果可以繼續調節,這里可以看到圖里的濾波效果確實達到了,但可能效果不是那么好,實際的濾波參數需要仿真后看效果才可以確定。
FIR濾波相對于IIR濾波而言,沒有極點或者說極點與零點抵消了,更加穩定。但如果有時候我們想用IIR濾波器怎么辦呢,后續會談到如何實現IIR濾波器。
-
濾波器
+關注
關注
161文章
7796瀏覽量
177997 -
MATLAB仿真
+關注
關注
4文章
176瀏覽量
19922 -
GUI
+關注
關注
3文章
659瀏覽量
39657 -
FIR濾波
+關注
關注
0文章
6瀏覽量
9832 -
Vivado
+關注
關注
19文章
812瀏覽量
66473
發布評論請先 登錄
相關推薦
評論