有限冲激响应

(重定向自有限脉冲响应

有限冲激响应(Finite impulse response,縮寫 FIR)滤波器是數位滤波器的一种,简称FIR數位滤波器。这类滤波器对于脉冲输入信号的响应最终趋向于0,因此是有限的,而得名。它是相对于无限冲激响应(IIR)滤波器而言。由于无限冲激响应滤波器中存在反馈回路,因此对于脉冲输入信号的响应是无限延续的。

定義编辑

有限冲激响应滤波器是一线性系统,输入信号, ,经过该系统后的输出信号, 可表示为:

 

其中, 是滤波器的冲激响应,通常称为滤波器的系数。 是滤波器的阶数。上式也可表示为:

 

如果输入信号为脉冲信号 

 

输出信号则为:

 

这也是冲激响应 得名的原因,即,它是滤波器脉冲输入的响应。 有限冲激响应滤波器的传递函数可由其冲激响应的z变换获得:

 .

因此,有限冲激响应滤波器的频率响应为:

 .

特性编辑

有限脈衝響應濾波器(FIR filter)的優點:

  • 脈衝響應(impulse response)為有限長:造成當輸入數位訊號為有限長的時候,輸出數位訊號也為有限長。
  • 比無限脈衝響應濾波器(IIR filter)較容易最佳化(optimize)。
  • 線性相位(linear phase):造成 是偶對稱(even)或奇對稱(odd)且有限長。
  • 一定是穩定的(stable):因為Z轉換(Z transform)後所有的極點(pole)都在單位圓內。

有限脈衝響應濾波器(FIR filter)的缺點:

  • 設計方式較無限脈衝響應濾波器(IIR filter)不容易。

設計方法编辑

1. least MSE(mean square error):最小化平均誤差。

(1)基本思想
 
其中, 為取樣頻率(sampling frequency), 為設計出的濾波器之頻譜, 為欲設計的濾波器(desired filter)之頻譜。
(2)設計步驟
 為奇對稱或偶對稱,則可令 
經過數學推導,我們可將MSE表示為
 
為了找出MSE的極值,我們可讓MSE對s[n]微分可得
 
 
 ,我們可得在MSE最小時
 
由此我們可能符合Least MSE的脈衝響應 
 
其中, 
(3)設計範例
欲設計濾波器為高通濾波器,pass band為 且stop band為 
其中, 為正規化頻率(Normalized Frequency),定義為  為取樣頻率。
下圖為least MSE方式所設計出來的濾波器(脈衝響應長度 ):
 
下圖為least MSE方式所設計出來的濾波器與欲設計的濾波器的誤差(去除transition band的部分):
 

2. Minimax(又稱Remez exchange algorithm):最小化最大誤差。

(1)基本精神
 
其中, 為對頻率取函數最大值,但在Minimax設計方式中,transition band通常不被考慮。 為設計出的濾波器之頻譜, 為欲設計的濾波器(desired filter)之頻譜。
(2)設計步驟
此演算法利用疊代的方式最小化濾波器在通帶(pass band)和止帶(stop band)的最大誤差,詳細設計步驟可見帕克斯-麥克萊倫演算法
(3)設計範例
欲設計濾波器為高通濾波器,pass band為 且stop band為 
其中, 為正規化頻率(Normalized Frequency),定義為  為取樣頻率。
下圖為Minimax方式所設計出來的濾波器(脈衝響應長度 ):
 
下圖為least MSE方式所設計出來的濾波器與欲設計的濾波器的誤差(去除transition band的部分):
 

3. Frequency sampling:所設計出的濾波器的頻譜某些頻率取樣點與欲設計濾波器頻譜的相同頻率取樣點的響應一樣。

(1)基本精神
 為設計出的濾波器之頻譜, 為欲設計的濾波器(desired filter)之頻譜,
   為濾波器長度。
若以正規化頻率 表示:
   為濾波器長度。
Frequency sampling的設計方法較為簡單且值觀,但與前兩種方法相比,得到的filter並不是最佳化濾波器。
其頻率響應與理想濾波器間的微小震盪(ripple)大小變化介於Least MSE和Minimax兩種設計方法的濾波器之間。
我們可以利用設定轉換頻帶的方式,允許在某個頻帶間 
然而,若要透過上述方法設定轉換頻帶的 值,藉此最小化頻率響應在通帶和止帶的微小震盪,
需要透過線性規劃(linear programming),將會增大運算所需時間。
(2)設計步驟
(i)計算 的反轉離散傅立葉轉換(inverse discrete Fourier transform, IDFT)
 \
(ii)當N為奇數時,令
 
 
此時 的區間為 
由此可得 的脈衝響應 
(3)設計範例
欲設計濾波器為高通濾波器,pass band為 且stop band為 
其中, 為正規化頻率(Normalized Frequency),定義為  為取樣頻率。
下圖為frequency sampling方式所設計出來的濾波器(脈衝響應長度 ):
 
下圖為frequency sampling方式所設計出來的濾波器脈衝響應:
 

濾波器設計方法的比較编辑

以下嘗試以濾波器設計方法、設計方法的限制、以及所設計濾波器的效果三方面,來比較最小化平均誤差(Least MSE)、最小化最大誤差(Minimax)與頻率取樣(Frequency sampling)三種設計方法的差異。

1.以設計方法而論

  1. Least MSE:使用到內積以及反矩陣的運算。
  2. Minimax:使用recursive的方式,所以相對而言較為複雜。
  3. Frequency sampling:利用到inverse fourier transform,就想法而言是最簡單的。

2.以方法的限制而論

  1. Least MSE:使用上的限制較少。
  2. Minimax:所設計濾波器必須要是偶對稱或是奇對稱才可以,且必須要有轉換頻帶(transition band)
  3. Frequency sampling:無法使用權重函數(weighting function),且轉換頻帶的加入也很難做到最佳化。

3.以效果而論

  1. Least MSE:平均誤差最小,一般而言系統穩定性較好。
  2. Minimax:最大誤差最小,一般而言表現較好,且可以保證系統的運作在一定的誤差內。
  3. Frequency sampling:很難做到最佳化,且容易有aliasing effect、Gibb’s phenomenon等等缺點,所以是較不普及的設計方法。

自適應FIR濾波器编辑

FIR濾波器可以以自適應的方式實作,並用於未知系統的辨識
以下為使用自適應FIR濾波器不斷修正系統函數,使其與未知系統的參數越來越逼近,從而最小化誤差,達到辨識系統的目的。
以下pseudo code可以以Matlab及Python實現,需要注意的部分為index在兩個程式語言中的用法差異

ee ← 0
# 採樣頻率800Hz
fs ← 800
det ← 1 / fs
f1 ← 100
f2 ← 200
t ← (0 TO 2 BY det)
s ← cos(2 * pi * f1 * t) + cos(2 * pi * f2 * t)
x ← randn(LEN(t))
# 加上雜訊
x ← s + x
# 未知系統
b, a ← butter(5, 150 * 2 / fs)
d ← filter(b, a, x)
N ← 5
delta ← 0.06
M ← LEN(x)
y ← zeros([1, M])
h ← zeros([1, N])
e ← zeros([1, M - N])
FOR n (N TO M):
    x1 ← x[(n TO n - N BY -1)]
    y[n] ← h * transpose(x1)
    e[n] ← d[n] - y[n]
    h ← h + delta * e[n] * x1
ENDFOR
x ← abs(fft(x, 2048))
Nx ← LEN(x)
kx ← (0 TO (Nx / 2) * (800 / Nx) BY 800 / Nx)
D ← abs(fft(d, 2048))
Nd ← LEN(D)
kd ← (0 TO (Nd / 2) * (800 / Nd) BY 800 / Nd)
y ← abs(fft(y, 2048))
Ny ← LEN(y)
ky ← (0 TO (Ny / 2) * (800 / Ny) BY 800 / Ny)
plt.subplot(3, 1, 1)
plt.plot(ky, y[1: Ny / 2])
plt.xlabel("Hz")
plt.title("原始訊號頻譜")
plt.subplot(3, 1, 2)
plt.plot(kd, D[1: Nd / 2])
plt.xlabel("Hz")
plt.title("經未知系統後的訊號頻譜")
plt.subplot(3, 1, 3)
plt.plot(ky, y[1: Ny / 2])
plt.xlabel("Hz")
plt.title("經自適應FIR濾波器後的頻譜")
plt.plot()

參考文獻编辑