MATLAB設計不同結構的FIR或IIR濾波器

2022-09-01 17:24:10 字數 1423 閱讀 5048

網上很多教程都是使用matlab的fdatool工具設計濾波器,然後將係數匯出,放到ip核中,由ip核根據資料速率核主處理時鐘來決定濾波器的結構。這種設計方式很方便但是不靈活,有時會碰到這種情況:我們需要乙個fir濾波器,資料速率和主處理時鐘速率都很高,甚至一樣,且濾波器的階數又很高,這個時候由ip自己來生成濾波器時,會生成全並行濾波器,會占用大量資源,甚至資源都不夠用。此時我們希望能自己決定濾波器的結構,從而達到資源和效率相匹配的目的。高手可以自己動手用hdl語言來實現自己所需結構的濾波器,本文介紹一種用matlab提供的filterbuilder工具來設計濾波器,並自動生成我們所需結構濾波器的hdl**。

開啟filterbuilder工具

開啟filterbuilder工具有兩種方式,一種是在matlab的的應用程式中的訊號處理和通訊一欄下,如圖所示:(我用的是matlab2016a版本,ps:點選圖示右上方的星星圖示,可以將工具新增到收藏夾,以後開啟方便。)

第二種是在matlab的命令列視窗直接輸入filterbuilder回車,選擇lowpass,然後確定。

設計乙個低通fir濾波器

設計乙個低通fir濾波器,取樣率245.76mhz,通帶頻寬3.2mhz,阻帶5mhz,通帶紋波0.1db,阻帶衰減80db,窗函式為kaiserwin。如圖所示:

生成所需結構的hdl

點選data types按鈕,arithmetic欄選擇fixed point,根據具體情況填入輸入資料精度

點選code generation標籤,然後點選generate hdl,在彈出視窗根據自己熟悉的語言選擇vhdl或verilog。在architecture處可以選擇全並行、全序列、部分序列、級聯序列以及分布式。這裡選擇部分序列,點選view details可以看到不同結構消耗不同數量的乘法器,根據自己系統要求可以自由選擇。在下面還可以選擇增加流水線暫存器。

點選global setting,將clock enable input port 名稱改為ce。這為後續將hdl**匯入system generator的black box提供方便。

後面幾項根據需要設定。設定完成後點選generate,即可生成hdl**。hdl**可以當做乙個模組直接新增到程式中,可以綜合。

Matlab的選擇結構

運算子 含義 小於 大於 小於等於 等於 不等於 三目運算子 邏輯運算子含義 與 或 非xor 異或ischar x x是否為乙個字元 isempty x x是否為空 isinf x x是否為無窮大 isnan x x是否不是數 isnumeric x x是否是數 自上而下,自高而低 轉置共軛 矩陣...

Scilab與matlab的不同點

一些預設的變數的表示方法不同。比如圓周率pai在matlab裡面就是 pi 而在scilab裡面要加上 也就是說,呼叫圓周率的時候要寫 pi 類似的還有 虛數在matlab裡可以是 i 或者 j 而在scilab裡面為 i j 好像不可以 例外的是預設變數 ans 兩者都不需要加百分號。操作符的用法...

C 與matlab儲存方式的不同

注意到 c 矩陣的資料是按 行優先 進行儲存的 matlab矩陣的資料是按 列優先 進行儲存的 在c 中矩陣元素下標常這樣來查詢 假設其第 item id 個 2 維矩陣,該矩陣的 高為 data height,寬為 data width.index item id data height h da...