1、濾波器階數的獲得 採樣filter solutions軟件
實現方法【lmplementation】選擇數字方式【Digtal】,濾波器類型爲FIR
選擇濾波器階數及截止頻率
選擇濾波器方式 這裏我們選擇低通
接下來選擇採樣頻率 FPGA的時鐘爲50M 這裏我們選擇50M
最後選擇加窗類型
到此爲止 數字濾波器·設置完畢
整個設計完成界面如下
接下來查看抽頭係數
點擊Transfer Function
點擊vec 抽頭係數便可出現
需要用科學計數法 我們這裏進行手動轉化 結果如下
0.01862,0.02074,0.02282,0.02484,0.02678,0.02864,0.03039,0.03201,0.03349,0.03482,0.03598,0.03697,0.03777,0.03838,0.03878,0.03899,0.03899,0.03878,0.03838,0.03777,0.03697, 0.03598,0.03482,0.03349,0.03201,0.03039,0.02864,0.02678,0.02484,0.02282,0.02074,0.01862
中間用逗號隔開
2、FIR IP核的使用
fir ip核應該在DSP類目下 自己去找好了
在這裏 導入抽頭係數 可以直接導入文件 也可以手擼 我們選擇後者
濾波器選擇單一採樣率 並設置好輸入時鐘
coefficient width直接影響精度 在小數的定點數中 根據位寬會損失一定的精度 位寬越高 越接近浮點數 誤差越低 這個係數位寬一般我們選擇10或者12
Coefficient Fractional Bits也會影響精度 可以通過修改它的值 觀察左側響應變化
輸入數據類型選擇有符號數
輸入數據位寬爲9位【仿真需要 實際可改 關於原因 後續介紹】
輸出數據位寬爲8位
並將輸出進行截斷【數字信號處理中的內容】
接下來的一頁 默認即可 初始化完成
3、DDS IP核的使用【仿真需要】
例化兩個DDS ip核 以產生兩個不同頻率信號疊加的波形 我們選擇了100KHz與2MHz的信號進行疊加 以觀看濾波效果
具體配置不再將 配置如下:
僅選擇正弦波
輸出可選
選擇頻率
配置完成
【關於佔用了多少資源 我也沒去考慮 emmm 也不會 正如師兄所言 隨便用 資源不夠了 就換資源豐富的片子 顯然土豪作風 反正像我這種菜雞也不會考慮 搞個32階濾波器也無妨 反正我只關注效果】
4、例化
這就比較簡單了 只是該注意下 兩個有符號數相加問題 用如下語句:
assign sin_out_3 = $signed(sin_out_1)+$signed(sin_out_2);
方能實現兩個正弦波相加 由於 8位加8位 會產生進位 所以輸出設置爲9位 則濾波器的輸入也要設置爲9位
例化很簡單 簡單到令人髮指 根本不用寫啥代碼 就略過了
5、testbench的書寫
這就更簡單了 只需寫個時鐘就好
6、仿真
可以看出 2MHz的雜波被很好地濾掉了 【代碼下載地址:https://download.csdn.net/download/yulang007_/10568899】