IIR濾波器設計【轉】


來源:https://zhuanlan.zhihu.com/p/51097798

 

在文章如何快速設計一個FIR濾波器(一)以及如何快速設計一個FIR濾波器(二)等文章中,我們討論了如何設計FIR(Finite Impulse Response Filter),FIR有很多優點,比如可以獲得線性相位,不存在穩定性問題等,典型的FIR具有如下形式:

[公式]

當 [公式] 時幅值響應可以變得更為陡峭和理想,這樣做的缺點就是需要采集更多的點進行計算,有時候這么做不太適用。因此工程上很多時候采用的是IIR(Infinite Impulse Response Filter),IIR和FIR最大的區別就是輸出不僅僅取決於輸入,還取決於輸出,IIR的標准形式如下:

[公式]

IIR的設計和FIR有較大的區別,接下來我們就簡單討論一下,先從一個最常見的傳遞函數說起。


一、從一個最常見的傳遞函數說起

慣性環節是我們碰到最多的傳遞函數了,其基本形式如下:

[公式]

這個函數有什么特點呢?——無外乎就是從幅值響應和相位響應兩個角度來看了。我們只考慮穩態時系統的響應,也就是令 [公式] ,於是傳遞函數形式可以改寫為:

[公式]

我們來簡單的分析一下這個傳遞函數,很顯然:

當 [公式] 時, [公式] ;

當 [公式] 時, [公式] ;

當 [公式] 時, [公式] ;

也就是說, [公式] 在低頻是幅值響應大(沒衰減,為1),頻率增加到 [公式] 時幅值響應下降到 [公式] ,當頻率增加到 [公式] 時,幅值響應降到了幾乎為零,因此這個濾波器應該是一個低通濾波器。下面我們從數學的角度嚴謹的看一下, [公式] 幅值響應為:

[公式]

相位響應為:

[公式]

畫個圖更直觀:

可見,這確是一個低通濾波器。我們知道截止頻率的定義是當輸出幅值響應下降到輸入幅值的-3dB ( [公式] ),也就是0.707(也就是 [公式] )時對應的頻率。因此,此處 [公式] 就是截止頻率。


二、如何設計一個高通模擬濾波器

對於低通濾波器,令截止頻率 [公式] ,形式為: [公式] ,我們把這個稱之為標准化的低通濾波器。那假如我們現在想設計一個高通濾波器 [公式] 該怎么辦呢?

同樣令 [公式] ,我們的目標是:

當 [公式] 時, [公式] ;

當 [公式] 時, [公式] ;

當 [公式] 時, [公式] ;

很簡單,將 [公式] 即可,則傳遞函數變形為:

[公式]

我們畫個圖看一下:

哈哈,果然是高通濾波器,而且截止頻率就是 [公式] 。


三、如何設計一個帶通模擬濾波器

那假如我們現在想設計一個帶通濾波器該怎么辦呢?

也就是我們想要:

當 [公式] 時, [公式] ;

當 [公式] 時, [公式] ;

當 [公式] 時, [公式] ;

當 [公式] 時, [公式] ;

[公式] 、 [公式] 分別為帶通的高和低端的頻率。我們經過幾次嘗試以后呢發現,可以將標准形式的低通濾波器中 [公式] 進行如下替換就可以實現:[公式],其中 [公式] , [公式] 。

則變換后的傳遞函數變為:

[公式]

於是就得到了一個帶通濾波器。


四、如何設計一個帶阻模擬濾波器

那假如我們現在想設計一個帶阻濾波器該怎么辦呢?

同樣令 [公式] ,也就是我們想要:

當 [公式] 時, [公式] ;

當 [公式] 時, [公式] ;

當 [公式] 時, [公式] ;

當 [公式] 時, [公式] ;

同樣,我們將標准形式的 [公式] 進行變換, [公式],則可以得到:

[公式]

畫個圖看看:

可見,確實得到了一個帶阻濾波器。


好了,需要停下來總結一下,我們有了一個標准的低通模擬濾波器 [公式] ,通過適當的變形,我們可以得到相應的高通、帶通及帶阻模擬濾波器。但是我們現在是要設計數字濾波器啊,這不是跑題了嗎?——也不見得,按照我們的直覺,模擬濾波器和數字濾波器應該存在某種聯系,如果我們找到了這個聯系,就可以通過模擬濾波器來得到數字濾波器,問題就解決了。那這個聯系是什么呢?——雙線性變換。

五、什么是雙線性變換

如何理解離散傅里葉變換及Z變換一文中我們介紹了什么是z變換,以及z和s的關系:

[公式] ,其中 [公式] 為采樣周期。這就是模擬(s)和數字(z)的聯系,理論上可以直接用的,指數函數用起來比較復雜,不方便,我們需要一個更簡單的形式。

稍微變一下形:

[公式]

我們知道,函數 [公式] 的泰勒展開為:

[公式]

利用上式分別對分子和分母進行泰勒展開,並只取前兩項:

[公式]

稍微變一下形:

[公式]

這就是雙線性變換了,為啥這個名字呢?——因為它是用兩個s域的線性函數的比值來逼近z的。我們稍微做一個推演,看看雙線性變換代表什么。首先看一下z域的單位圓:

我們知道:

  • 在s域,s=0時對應的是零頻率,對應到z域就是z=1;
  • 在s域,s=∞時對應的是無窮大頻率f=∞。通過非線性變換,我們知道此時z=-1,對應的頻率就是 [公式] ;

因此,雙線性變換本質就是就是將s域(模擬量)無窮大的頻率映射到z域的 [公式] ,因為根據香濃采樣定理,數字信號的包含的最大分量的頻率就是一半的采樣頻率,否則就會產生混疊。

可見,對於雙線性變換而言,在s域的頻率和z域對應的頻率不同,發生了一定的彎曲,也就意味着截止頻率在s域和在z域是不一樣的,現在我們需要找到這種關系。

在z域,假設截止頻率為 [公式] ,則

[公式]

根據雙線性變換計算得到的s為

[公式]

此時s對應模擬的頻率為:

[公式]

所以

[公式]

[公式]

也就是說對於雙線性變而言,模擬的截止頻率和數字的截止頻率是不同的,不同的原因是因為雙線性變換是近似變換,不是准確換算。

值得一提的是,當 [公式] 時,即采樣頻率遠大於截止頻率,可以得到

[公式]

也就是模擬的截止頻率和數字的截止頻率差不多,為簡單起見,也可以直接用數字的截止頻率代替模擬的截止頻率。


六、如何設計數字濾波器

有了前面的鋪墊,我們就可以進行數字的IIR濾波器設計了,基本有如下五個步驟:

  1. 選擇一個歸一化的模擬濾波器 [公式] ;
  2. 確定數字濾波器的截止頻率,也就是響應為-3dB(幅值衰減為 [公式] )是對應的頻率;
  3. 利用公式 [公式] 計算對應的模擬截止頻率;
  4. 選擇合適的變換,得到 [公式] 比如對於低通濾波器: [公式] 其中 [公式] 。
  5. 在 [公式] 中,用 [公式] 進行替換,得到數字化的濾波器 [公式] 。

舉個例子,現在假設要設計一個低通濾波器,截止頻率為 [公式] ,采樣頻率為 [公式] 。

step1:選擇歸一化的濾波器 [公式] ;

step2:數字截止頻率為10Hz;

step3:對應的模擬截止頻率為: [公式] ;

step4:將 [公式] 中s進行替換:[公式] , [公式]。得到: [公式] ,其中 [公式] ;

step5: 用 [公式] 進行替換,得到 [公式]

於是就得到了我們想要的濾波器。


七、如何利用MATLAB進行IIR設計

前面手動設計IIR濾波器是為了告訴大家基本的設計原理,實際工程中我們一般采用計算機來進行設計,快速、准確、可視化程度高,下面我們就來看看如何利用MATLAB來設計IIR濾波器。

最常用的函數就是butter函數,具體語法為:

[a b]= butter(N,Wn,'low');

a和b就是就是IIR濾波器分子和分母對應的系數:

[公式]

[公式] 為截止頻率,low代表低通濾波器。

我們來驗證一下我們前面設計的IIR濾波器對不對。根據定義 [公式] ,MATLAB中輸入[a b]= butter(1,0.4,'low'),其計算結果為:

a =[0.4208 0.4208],b =[1.0000 -0.1584]

可見,是一致的(因為手算位數少,會有一定的計算誤差)。

可能有的童鞋就納悶了,在設計FIR時,用的函數是fir1、fir2等,一看就是FIR濾波器,為啥到IIR函數的名字就叫butter了,難道第一個設計IIR的人喜歡吃黃油?——哈哈,當然不是,其實butter是butterworth(巴特沃斯)的簡寫,那butterworth又是什么呢?——看拼寫像是一個人名,沒錯,這就是一個人名。那為啥用這個名字呢?

還記得我們一開始選取的標准低通濾波器的函數嗎?

[公式]

穩態時可用 [公式] ,則

[公式]

[公式]

這其實是一類函數的特殊形式:

[公式]

其中 [公式] 為濾波器的階次, [公式] 為截止頻率,當N=1時時就是我們選擇的那個標准的一節慣性環節,感興趣的童鞋可以試一下這類函數的性質。這類函數最早是由一個叫butterworth的人提出的,因此,基於這類函數而衍生的濾波器就是butterworth濾波器,MATLAB就用butter函數來致敬butterworth。

當然基准函數的獲取,除了butterworth的方法,還有其他的方法,他們的特點分別為:

  • Butterworth(巴特沃斯)濾波器:濾波器具有單調下降的幅頻特性;
  • Chebyshev(切比雪夫)濾波器:幅頻特性在銅帶或阻帶內有波動,可提高選擇性;大約有3/4通帶接近線性相位;
  • Bessel(貝塞爾)濾波器:通帶內有較好的線性相位;
  • Ellipse(橢圓)濾波器:較好的線性相位;大約有1/2通帶接近線性相位。

它們的幅值響應如下圖所示。

 

除了butter函數外,當然我們不需要記住其他的命令,當需要其他類型的IIR時,打開MATLAB,在命令行輸入:filterDesigner或者fdatool(老版MATLAB),你就能看到如下界面:

通過勾勾選選就能設計IIR濾波器哦!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM