來源: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濾波器設計了,基本有如下五個步驟:
- 選擇一個歸一化的模擬濾波器
;
- 確定數字濾波器的截止頻率,也就是響應為-3dB(幅值衰減為
)是對應的頻率;
- 利用公式
計算對應的模擬截止頻率;
- 選擇合適的變換,得到
比如對於低通濾波器:
其中
。
- 在
中,用
進行替換,得到數字化的濾波器
。
舉個例子,現在假設要設計一個低通濾波器,截止頻率為 ,采樣頻率為
。
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濾波器哦!