本講使用matlab產(chǎn)生待濾波信號(hào),并編寫testbench進(jìn)行仿真分析,在Vivado中調(diào)用FIR濾波器的IP核進(jìn)行濾波測(cè)試,下一講使用兩個(gè)DDS產(chǎn)生待濾波的信號(hào),第五講或第六講開始編寫verilog代碼設(shè)計(jì)FIR濾波器,不再調(diào)用IP核。
本例使用上一講的FIR濾波器IP核工程。
matlab與FPGA數(shù)字濾波器設(shè)計(jì)(2)——Vivado調(diào)用IP核設(shè)計(jì)FIR濾波器
matlab與FPGA數(shù)字濾波器設(shè)計(jì)(1)——通過matlab的fdatool工具箱設(shè)計(jì)FIR數(shù)字濾波器
1. 新建仿真文件
(1) Simulation Sources -》 sim_1 -》右鍵 Add Sources;
(2) Add or Create Simulation Sources,新建仿真文件 fir_ip_tb;
2. 編寫testbench
(1) 例化加入的IP核,其中:
輸入時(shí)鐘引腳為 clk,設(shè)置為32MHz(此處暫時(shí)還未設(shè)定頻率);
輸入數(shù)據(jù)引腳為data_in,位寬16-bit,表示待濾波數(shù)據(jù);
輸出數(shù)據(jù)引腳為data_out,位寬40-bit,表示濾波后的數(shù)據(jù);
輸出數(shù)據(jù)有效信號(hào)引腳data_out_valid,位寬1-bit,輸出狀態(tài),為高電平時(shí)表示輸出的data_out有效;
輸入數(shù)據(jù)準(zhǔn)備好信號(hào)引腳data_in_ready,位寬1-bit,輸出狀態(tài),為高電平時(shí)表示準(zhǔn)備好接收輸入數(shù)據(jù);
輸入有效信號(hào)S_AXIS_DATA_0_tvalid,為1時(shí)表示輸入信號(hào)有效,為0時(shí)即使有輸入信號(hào)data_in到 fir 的 ip 核 ,ip 核也不做處理,此處直接讓其恒為1,輸入數(shù)據(jù)恒有效;
總結(jié),需要給ip核輸入的數(shù)據(jù)目前只有兩個(gè),一個(gè)是時(shí)鐘,一個(gè)是待濾波數(shù)據(jù)。
(2) 產(chǎn)生32MHz時(shí)鐘信號(hào);
初始 initial 時(shí)設(shè)置時(shí)鐘信號(hào)clk為低電平0,always 表示一直執(zhí)行,#16表示每隔16 ns(單位是在仿真文件開頭自動(dòng)有定義ns)時(shí)鐘取反一次,即每隔 16ns 時(shí)鐘 0/1間隔變化,相當(dāng)于32ns一個(gè)時(shí)鐘周期,約等于32MHz;
3. 產(chǎn)生待濾波數(shù)據(jù)data_in
(1) 編寫matlab程序,產(chǎn)生兩個(gè)信號(hào)0.5MHz和5MHz,采樣頻率32MHz,采樣5個(gè)周期,進(jìn)行16-bit量化,并把量化后的數(shù)據(jù)寫到 .txt 文件中;
可以看到,在 0.5MHz 和 5MHz處有兩個(gè)峰,表示抽樣后的兩個(gè)信號(hào),經(jīng)過濾波器之后,5MHz 信號(hào)被濾除,只剩下 0.5MHz 信號(hào),藍(lán)色框內(nèi)可以看到,在 3MHz 以后濾波器的響應(yīng)已經(jīng)低于 -80dB,相當(dāng)于濾波后的幅度是濾波前的1/10000,濾波效果很好。
使用 32MHz 的采樣時(shí)鐘采樣 0.5MHz 待濾波信號(hào)(相當(dāng)于0.5MHz信號(hào)疊加了5MHz噪聲),每個(gè)周期采樣 64 個(gè)點(diǎn),在testbench中讀取一個(gè)周期的64個(gè)點(diǎn),重復(fù)30個(gè)周期得到30個(gè)周期的輸入待濾波信號(hào)給FIR濾波器;
4. 仿真結(jié)果分析
點(diǎn)擊1處開始仿真,Vivado中一般默認(rèn)只會(huì)仿真1us,這時(shí)候只看到了初始化的一部分,是看不到后續(xù)結(jié)果的,點(diǎn)擊2處進(jìn)行仿真,會(huì)將所有的仿真步驟完成,執(zhí)行到上圖中第64行的 $stop 語句停止仿真;
5. 仿真結(jié)果分析
(1) data_out_valid:初始為0,在1.872 ns跳變?yōu)?,輸出數(shù)據(jù)開始有效,在為0的那段時(shí)間輸出數(shù)據(jù)data_out無效,這段時(shí)間內(nèi)是FIR的IP核進(jìn)行一些內(nèi)部的配置和初始化;
(2) 更改數(shù)據(jù)表示模式
對(duì)data_in,右鍵設(shè)置其數(shù)據(jù)格式Radix為有符號(hào)的十進(jìn)制數(shù)(Signed Decimal),設(shè)置其波形為模擬波形(Analog);
對(duì) data_out 同樣設(shè)置;
對(duì) Pattern 設(shè)置 無符號(hào)十進(jìn)制,不需要設(shè)置波形。
(3) 點(diǎn)擊放大縮小可以查看整個(gè)仿真的效果
通過下面幾圖,可以看到仿真效果很好,5MHz高頻噪聲濾除干凈,肉眼觀察不出來。
(4) Matlab數(shù)據(jù)分析
肉眼觀察時(shí)域的仿真圖無法得知高頻噪聲具體被濾掉了多少,是否還混有噪聲,此時(shí)需要將濾波后的數(shù)據(jù)按照前文讀取仿真數(shù)據(jù)的方式,將仿真得到的濾波后的數(shù)據(jù)寫入.txt文件,再通過 matlab 讀取 FPGA 濾波后的數(shù)據(jù)并進(jìn)行FFT 頻譜分析,通過頻域的波形來觀察濾波效果,通過 matlab 仿真,可以看到高頻信號(hào)的確被濾除。
下一講使用兩個(gè) DDS 產(chǎn)生待濾波的信號(hào),結(jié)合FIR濾波器搭建一個(gè)信號(hào)產(chǎn)生及濾波的系統(tǒng),并編寫testbench進(jìn)行仿真分析。
編輯:lyn
-
matlab
+關(guān)注
關(guān)注
186文章
2981瀏覽量
231101 -
仿真
+關(guān)注
關(guān)注
50文章
4129瀏覽量
134069 -
fir濾波器
+關(guān)注
關(guān)注
1文章
95瀏覽量
19098 -
Vivado
+關(guān)注
關(guān)注
19文章
815瀏覽量
66926
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
卡爾曼濾波在信號(hào)處理中的應(yīng)用分析
Simulink與 MATLAB 的結(jié)合使用 Simulink中的信號(hào)處理方法
如何使用頻譜分析儀進(jìn)行信號(hào)測(cè)量
編寫高效Testbench的指南和示例
![<b class='flag-5'>編寫</b>高效<b class='flag-5'>Testbench</b>的指南和示例](https://file1.elecfans.com/web2/M00/0A/72/wKgZomcgmb-AdWI4AAA2OcTRjRg055.png)
Matlab/Simulink/Stateflow建模開發(fā)及仿真測(cè)試
基于MATLAB的數(shù)字濾波器語音信號(hào)去噪
![基于<b class='flag-5'>MATLAB</b>的數(shù)字<b class='flag-5'>濾波</b>器語音<b class='flag-5'>信號(hào)</b>去噪](https://file1.elecfans.com/web1/M00/F2/A8/wKgZoWcHqe-AN7SDAF_SzB7ijzg758.png)
評(píng)論