IIR濾波器的MATLAB與FPGA的設計實現

IIR濾波器的MATLAB與FPGA的設計實現

博主微信:flm13724054952,不懂的有疑惑的也可以加微信諮詢,歡迎大家前來投稿,謝謝!
在這裏插入圖片描述

引言

數字濾波器是數字信號系統裏面最常用、最重要、最基本的元件之一。無限脈衝響應(Infinite Impulse Response,IIR)濾波器具有很高的濾波效率,在相同的幅頻響應條件下,所要求的IIR濾波器階數會明顯比FIR濾波器的低。也就是說在不介意濾波器的相位,實現同等濾波性能下的IIR濾波器會比FIR濾波器更加節省電路面積,節省電路功耗。在前面的博文中介紹了FIR濾波器的設計實現,本文將介紹無限脈衝響應IIR濾波器(Infinite Impulse Response,IIR)的原理介紹,架構研究,設計實現等。

原理介紹

IIR濾波器的結構式有直接型跟級聯型結構,而級聯型結構的IIR濾波器更不容易受到系統的極點零點的影響。
在這裏插入圖片描述
從系統函數等可以總結IIR濾波器的幾個顯著特性就是:
(1)IIR濾波器同時存在不爲零的極點和零點。要保證IIR濾波器是穩定不振盪系統,要求系統的極點必須在單位圓內,因爲系統的穩定性就是由系統函數的極點決定的。
(2)由於線性相位濾波器(FIR濾波器)所有的零點和極點都是關於單位圓對稱的,所有隻允許極點位於單位圓的原點。由於IIR濾波器存在不爲零的極點,因此只能實現近似的線性相位特性,也就是說如果電路對濾波器的線性相位要求高的話,那IIR濾波器便不可使用了。
(3)在FPGA設計IIR濾波器的時候,由於存在反饋結構,也就是y(n)一直在累加自己前面的y(n-1),這種無限脈衝響應與我們有限的寄存器長度相矛盾。所以在設計IIR濾波器,其有限字長效應是實際工程設計應該考慮的問題。
從IIR濾波器的差分方程式可以看得出,輸出信號是由兩部分組成的:第一部分∑x(n-i)b(i)表示對輸入信號的延時組成M階網絡,其實相當於前面博文介紹的FIR濾波器的結構,實現了系統的零點。第二部分 ∑y(n-j)a(j)表示對輸出信號的延遲,組成J階網絡,每階經延時抽頭後與常係數相乘,並將乘法結果相加,由於這部分是對輸出延時,故爲反饋網絡,實現了系統的極點。
根據系統的差分方程式跟上面的分析後,例如一階的IIR濾波器差分方程爲:y(n)=b0x(n)+b1x(n-1)-a1y(n-1);其一階系統的架構設計圖可以定爲以下直接型結構:
在這裏插入圖片描述

MATLAB設計實現

一般來說,IIR濾波器的設計方法分爲三種:原型轉換設計法,直接設計法以及直接調用MATLAB函數設計法。本文主要介紹的是通過matlab來實現對IIR濾波器的設計實現。在matlab裏面設計數字濾波器既可以通過窗函數自己編寫程序來設計IIR濾波器,也可以通過調用工具箱來設計IIR濾波器。通過編寫程序來設計IIR濾波器比較普遍,濾波器的參數等改動也比較方便,與FPGA做聯合功能仿真驗證也方便。而直接調用工具箱就直接了當,較節省設計時間。本文將對兩種方法進行介紹,一般matlab採用的幾個IIR濾波器設計函數有巴特沃斯,切比雪夫,橢圓三種低通濾波器,不過本文設計採用的是切比雪夫函數來設計IIR濾波器。
一個數字濾波器的傳輸函數表達式爲如下所示:
在這裏插入圖片描述
其中H(w)叫做幅頻特性 ,Ψ(w)叫做相頻特性。幅頻特性表示信號通過該濾波器以後頻率成分幅度衰減情況,而相頻特性反映各頻率分量通過濾波器後在時間上的延時情況。

切比雪夫低通濾波器

巴特沃斯低通濾波器的頻率特性在通帶和阻帶內部都是隨着頻率單調變化的,也就是如果在通帶的邊緣能夠滿足指標,在通帶的內部肯定超過設計的指標要求從而造成設計濾波器的階數較高。如果將指標的精度要求均勻分佈在整個通帶內,或者在分佈在阻帶內,或者同時分佈在通帶跟阻帶內,則可以設計出滿足設計需要,階數又低的濾波器了。而切比雪夫濾波器正是如此的。
MATLAB用切比雪夫函數設計濾波器的語法爲:
[b,a] = cheby1(n,Rp,Wn,‘type’);
b,a :分別爲濾波器的分子,分母系數因子;
n :爲濾波器的設計階數;
Rp :爲濾波器在通帶內的最大衰減db
Wn :爲濾波器的截止頻率,當Wn爲[w1,w2]的向量則代表濾波器爲帶通濾波器;
type:指定設計的濾波器類型,爲hige或者slow;
求濾波器的極點零點增益的函數語法爲:
[z,p,k] = cheby1(n,Rp,Wn,‘type’);
z,p,k分別爲所設計濾波器的零點,極點,增益表達式。
利用切比雪夫函數設計濾波器的matlab工程如下所示,hb,ha分別爲量化後的濾波器分子,分母系數;
在這裏插入圖片描述
運行設計的matlab工程可以得到IIR濾波器的輸出爲如下圖所示,及也可得到hb,ha濾波器分子分母系數;
在這裏插入圖片描述
在這裏插入圖片描述
因爲濾波器的係數量化位數,運算位長,輸出量化都會對濾波器的性能產生影響。所以設計的時候也應該考慮這些因素。具體這裏就不做詳細介紹了,因爲在前面的博文FIR濾波器的設計裏面已經做詳細介紹了;這裏只詳細結果:IIR濾波器可以採用14bit的量化位數跟14bit的量化輸出,這樣子其濾波器性能纔是最佳的。
在這裏插入圖片描述

tool工具箱設計法

在matlab的應用程序裏面有一個filter design & analysis tool點進去即爲快速設計濾波器的工具。操作界面如下圖所示,較爲簡單不做詳細介紹。
在這裏插入圖片描述
點analysis裏面的filter coefficient即可出現設計濾波器的FIR濾波器係數,通過file-export可以把濾波器係數導出到workplace。
在這裏插入圖片描述

FPGA設計實現

由上面的matlab的設計可得到IIR濾波器的極點零點,如下圖所示:
在這裏插入圖片描述
根據上面的極點零點,來設計本文的IIR濾波器的直接型結構,如下圖所示:從IIR濾波器的差分方程式可以看得出,輸出信號是由兩部分組成的:上面部分∑x(n-i)b(i)表示對輸入信號的延時組成4階網絡,其實相當於前面博文介紹的FIR濾波器的結構,實現了系統的零點。下面部分 ∑y(n-j)a(j)表示對輸出信號的延遲,組成7階網絡,每階經延時抽頭後與常係數相乘,並將乘法結果相加,由於這部分是對輸出延時,故爲反饋網絡,實現了系統的極點。
在這裏插入圖片描述

直接型IIR濾波器

直接型的IIR濾波器的RTL設計圖如下所示,分爲兩部分實現pole的極點設計及zero的零點設計。
在這裏插入圖片描述

極點零點的設計

極點零點的設計其實都是加法器及乘法器的設計堆砌,涉及的原理基本一致,前面也在FIR濾波器一文裏面詳細描述了,這裏不再做詳細介紹,以極點的設計爲例做簡單描述;如下極點函數的RTL設計圖所示,對零點函數模塊處理後的數據,進行延遲後於相應的係數進行相乘,然後再累加,輸出濾波器的數據。
在這裏插入圖片描述

係數乘法器的設計模塊

乘法器的設計端口介紹如下圖所示:
在這裏插入圖片描述
乘法器的設計原理介紹如下圖所示,具體的乘法設計可參考之前的博客章文:基於FPGA的乘法器原理介紹及設計實現,具體博文鏈接爲:
https://blog.csdn.net/weixin_39015789/article/details/101430566
在這裏插入圖片描述
最後再將所有的乘積和進行累加便是對數據流進行低通濾波後的結果了。

直接型IIR濾波器的功能仿真

下圖爲零點函數的功能仿真波形圖,如下所示,data_in爲輸入的高斯白噪聲,依次經過延遲存入data_mem,然後經過與係數的相乘得到data_reg,再進行累加得到零點函數的輸出結果x_data。再傳到極點函數模塊進行處理。在這裏插入圖片描述
前面經過零點函數處理得到的數據x_data存入到極點函數的data_mem,與相應的係數相乘累加得到mul_sum。再經過最後的截尾處理就可以得到濾波後的最後結果dout。
在這裏插入圖片描述
直接型IIR濾波器的整體功能仿真波形圖如下所示:
在這裏插入圖片描述

直接型IIR濾波器的傅里葉變換

對直接型IIR濾波器的RTL設計輸出的濾波後數據進行matalb的傅里葉變換,看其設計的濾波效果如下圖所示:
在這裏插入圖片描述

級聯型IIR濾波器

級聯型的IIR濾波器的RTL設計圖如下所示,其實每一個級聯的濾波器相當於直接型IIR濾波器的設計,只是每一個濾波器的輸入都是上一個濾波器的濾波後數據輸出。
在這裏插入圖片描述

級聯型IIR濾波器的傅里葉變換

如下圖所示,直接型IIR濾波器與級聯型IIR濾波器的濾波效果如下所示,直接型跟級聯型的濾波效果其實相當接近,但是對於系統的穩定性來說,在實際的設計應用裏面應該採用級聯型濾波器的設計。
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章