quartus ii matlab,基於Quartus II和MATLAB的FIR濾波器設計與仿真(二)

接上文  基於Quartus II和MATLAB的FIR濾波器設計與仿真(一):

3  QuartusII 調用 IP 核生成 FIR 濾波器模塊

在 Quartus II 中, Altera 提供了一系列可供用戶免費使用的 IP 核, FIR濾波器就包含其中,所以只需要在 Quartus II 中調用 FIR 濾波器 IP 核,導入在 2.1 生成的濾波器系數並設置端口性質即可生成 FIR 濾波器模塊。調用 FIR濾波器 IP 核的設置過程如下圖所示:

40782d11d3be8f7ea566a915ea5274e4.png

587cb4e3413e8712e4253af081eb90bd.png

點擊 step1

c0818d1668db41145dc969c6edcde521.png

40ce268ccde5e97fbc3b40d98a943f6b.png

接着點擊step2,勾選所有選項即可,也可不勾選。最后點擊step3 generate 生成模塊。

注意:1.在導入濾波器系數時,要檢查系數文件.txt文件的格式,Quartus II 9.0只支持一行只有一個數據,並且最后沒有分號;2.如果點擊step3  generate后進度條卡住不動可以嘗試打開任務管理器找到“quartus_map”或者類似的任務項然后結束任務即可。

由於在 2.1 中對濾波器系數和輸入信號的值進行了 12 位量化處理,所以把濾波器的系數和輸入數據位寬設置為 12,如圖設置完參數后即可生成濾波器模塊,生成的濾波器模塊如下圖所示:

fe06267380fa2409e1c48fdffc2b1d3a.png

其中 ast_sink_data[11..0]和 ast_source_data[21..0]分別表示數據輸入端口與數據輸出端口, clk 為輸入時鍾信號端口。    4 Quartus II 仿真 FIR 濾波器

4.1 生成一個 ROM 模塊存儲輸入數據

本文需要在 Quartus II 中導入 2.2 在 MATLAB 中生成的濾波器輸入信號作為仿真的數據輸入,所以需要調用 IP 核生成一個 ROM 模塊存儲導入的輸入數據,再連接 ROM 模塊和 FIR 濾波器模塊進行仿真。在調用 ROM 模塊之前首先需要導入輸入數據保存為.mif 文件,之后再在調用 IP 核時加載.mif 文件把輸入數據存入 ROM 中,相當於調用ROM生成一個正弦信號發生器,生成過程如下圖所示:

首先新建一個文件保存為.mif 文件:

efe6e188595c75e8dec9943cf7527ac2.png

98d554c0812680ce590cb4c251dd7c15.png

42f3c9ec9d21ff4bd92a092defeb9b71.png

圖中 address[6..0]為地址輸入端口, clock 為時鍾輸入端口, q[11..0]為數據輸出端口,輸出存在 ROM 中的數據 。

4.2 Quartus II 仿真與 MATLAB 繪圖

Quartus II 中可以通過建立一個.vwf 文件作為輸入激勵做時序仿真。本文也以這種形式利用 Quartus II 仿真。首先我們連接以上建立的兩個模塊,連接成為一個完整的濾波器。 系統連接圖如下所示:

413bbf984a56ddfa9ec36216877970f6.png

圖 12 中端口 q[11,,0]作用在於測試 ROM 輸出的數據是否與導入的輸入數據一致。 Quartus II 中仿真的波形如下圖所示:

3c20fb720144635563fe22b3d04e38d7.png

經過核對, q[11..0]輸出的數據與 MATLAB 中產生的輸入數據是一致的,證明ROM 模塊是無誤的。從圖 13 中我們也可以看出, 該 FIR 濾波器也會有一段時間的延時,這與 MATLAB 中的仿真結果是一致的。由於 Quartus II 中只能顯示低電平和高電平,無法繪制正弦函數波形,所以本文選擇將波形文件中的輸出數據導出到 MATLAB 中繪圖觀察結果。在MATLAB 中繪制的圖如下所示:

f9e061b92b291ef7e6a916cdbc1c4f36.png

ae6196aea63b91bf86bb947e95c8d76e.png

由圖我們就可以看到橫坐標 0-29 對應的是 FIR 濾波器的延時,是正常的,而橫坐標 29-46 對應的波形是失真的波形,失真原因還有待深入研究, 橫坐標46 之后對應的波形則與 MATLAB 仿真波形一致,是正確的,並且在濾波之后的信號中還存在 1000Hz 附近頻率的噪聲。仿真結果表明,該設計整體式可行的,主要存在的問題就是正確輸出之前

的一段輸出失真原因有待深入研究,在取輸出信號時也要注意處理這段失真波形。

注意:1.由於數據量不大,我是直接將Quartus II中的輸出數據手動輸入到MATLAB中建立一個新的變量然后繪圖的,直接導入數據到MATLAB中網上也有教程,但由於采樣點數的不同可能導致繪制的圖和MATLAB中原來繪制的輸入波形不好對比頻率。

2.注意到在輸出波形的前面一段有明顯的失真,經過驗證是因為我輸入和輸出都設置為了無符號變量,而實際輸出是有正有負的,所以導致出現了太大的數,后面我也改設成有符號數驗證過是無誤的,因為當時沒有截圖保存所以沒有上傳圖片,大家可以自行嘗試。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值