有限衝激響應

有限衝激響應（Finite impulse response，縮寫FIR）濾波器是其衝激響應為有限長度的濾波器，脈衝輸入信號的響應會在有限時間內變為零，此特性和無限衝激響應（IIR）濾波器相反，無限衝激響應濾波器存在反饋迴路，其衝激響應可能是無限長度的（不過一般會衰減）。

N階離散時間的FIR濾波器，其衝激響應（對應克羅內克δ函數輸入的輸出）在變為零之前，最多只持續$N+1$個取樣點（從第一個非零取樣點，到最後一個非零取樣點）。

FIR濾波器可以是連續時間的，也可能是離散時間的，可以是數位的，也可能是類比的。

## 定義

<image>

<image>

針對因果離散時間的N階濾波器，輸出序列的每一個值都是最近輸入的加權和：

$$\begin{align} <pre> y[n] &= b_0 x[n] + b_1 x[n-1] + \cdots + b_N x[n-N] \\ &= \sum_{i=0}^N b_i\cdot x[n-i], </pre> \end{align}$$

其中

- $x[n]$是輸入信號
- $y[n]$是輸出信號
- $N$是濾波器階數。$N$th階濾波器表示在右邊有$N + 1$項
- $b_i$是$N^\text{th}$階FIR濾波器在第i時間（$0 \le i \le N$）的脈波響應。若濾波器是直接型的FIR濾波器，則$b_i$也就是濾波器的係數。

計算也稱為離散卷積。

上述項中的$x[n-i]$常稱為（抽頭），依數位延遲線的結構而定，在許多實現或方塊圖中，會將延遲輸入進行乘法運算。

濾波器的衝激響應定義為有限區間內的非零值。包括零值在內，衝激響應是無限數列：

$$<pre> h[n] = \sum_{i=0}^N b_i\cdot \delta[n-i] = \begin{cases} b_n & 0 \le n \le N\\ 0 & \text{otherwise}. \end{cases} </pre>$$

若FIR濾波器是非因果的，其脈衝響應上的非零值範圍可能從$n=0$前就開始。

## 特性

FIR濾波器相較於IIR濾波器，有以下的優點：

- 不需要回授，因此捨去誤差不會因為連續的加總而累計。每一次的計算其相對誤差都是一樣的，因此在實現上比較簡單。
- 在本質上穩定，因為其輸出是有限個輸入值乘以有限倍數的和，因此不會大於$\sum |b_i|$乘以輸入的最大值。
- 若讓係數對稱，可以設計成線性相位，這在一些相位很重要的應用（例如資料通訊、地震學或分音器）中是很好的特性。

FIR濾波器的主要缺點是若要求要求低頻（相對於取樣率）截止頻率，在相同的銳利程度或是選擇性 (電子)情形下，在通用處理器上的運算量要比IIR濾波器要大。不過目前有許多數位信號處理器提供特別的硬體來使FIR濾波器有類似IIR濾波器一樣有效率。

## 頻率響應

數列$x[n]$的濾波效果可以用卷積定理，在頻域上描述：

$\underbrace{\mathcal{F}\{x*h\}}_{Y(\omega)} = \underbrace{\mathcal{F}\{x\}}_{X(\omega)} \cdot \underbrace{\mathcal{F}\{h\}}_{H(\omega)}$ and $y[n] = x[n]*h[n]= \mathcal{F}^{-1}\big\{X(\omega)\cdot H(\omega)\big\},$

其中運算子$\mathcal{F}$和$\mathcal{F}^{-1}$表示離散時間傅立葉變換（DTFT）和其倒數。因此，複數值的乘性函數$H(\omega)$是濾波器的頻率響應，可以用以下的傅立葉級數定義：

$$H_{2\pi}(\omega)\ \triangleq \sum_{n=-\infty}^{\infty} h[n]\cdot \left({e^{i \omega}}\right)^{-n} = \sum_{n=0}^{N}b_n\cdot \left({e^{i \omega}}\right)^{-n},$$

其中加上下標表示2π週期性。此處的$\omega$是正規頻率 (數位訊號處理)（radians/sample）下的頻率。在許多濾波器設計的程式中都較常用$\omega = 2\pi f,$的定義，將頻率單位$(f)$改為cycles/sample，其週期為1。當xn序數是已知的取樣率$f_s$ samples/second，$\omega = 2\pi f/f_s$的取代會將頻率單位$(f)$變為cycles/second（赫茲），週期性是$f_s$。$\omega = \pi$的值會對應$f = \tfrac{f_s}{2}$ Hz $= \tfrac{1}{2}$ cycles/sample的頻率，也就是奈奎斯特頻率。

$H_{2\pi}(\omega)$也可以用濾波器衝激響應的離散時間傅立葉變換表示：

$$\widehat H(z)\ \triangleq \sum_{n=-\infty}^{\infty} h[n]\cdot z^{-n}.$$

$$H_{2\pi}(\omega) = \left. \widehat H(z) \, \right|_{z = e^{j \omega}} = \widehat H(e^{j \omega}).$$

## 濾波器設計

數位濾波器的設計理念是直接去近似某個離散時間系統的理想頻率響應。在設計有限脈衝響應濾波器時，要找到符合特定規格的係數以及階數，規格可能是時域的（匹配濾波器），也可能是頻域的（較常見的情形）。匹配濾波器是將輸入信號和已知形狀的脈波進行互相關（cross-correlation）。FIR摺積（FIR convolution）是脈波響應的逆時間複本（time-reversed copy）和輸入信號進行互相關。因此匹配濾波器的脈波是用針對已知脈波進行取樣，再將取樣信號倒序，做為濾波器的係數。

若希望有特定的頻率響應，以下是一些常見的濾波器設計方式：

- 窗函數設計法：理想頻率響應可由下式表示：$H_d(e^{j\omega})=\sum_{n=-\infty}^{\infty}{h_d[n]e^{-j\omega n}}$ 對於許多濾波器的理想系統脈衝在頻帶邊緣具有不連續的特性。將響應微弱的脈衝段設為0，響應強烈的地方指派為非0值。也就是：$h[n]=h_d[n]w[n]$， $w[n] = \begin{cases} 1, & 0\leq n\leq M{,} \\ 0, & \text{otherwise}\end{cases}$ 我們可用wn將脈衝響應看成一個長度為M+1的窗戶。$H_d(e^{j\omega})$就是窗戶型函數其傅立業轉換的週期性迴旋積分。
- 頻率取樣法：對濾波器的頻率響應取樣。由下式 $H(k)=H_d(e^{j\omega})|_{\omega=\frac{2\pi}{N}k} ,k\in[0,N-1]$ 即可設計不同k點(離散的頻率點) 之值。舉例，將較小的k對應的響應值設計為1，較大的k對應的響應值設計為0,可得低通濾波器響應；將較小的k對應的響應值設計為0，較大的k對應的響應值設計為1,可得高通濾波器響應。
- 最小MSE（均方差）法：定義理想的濾波器頻率響應，以及所想要的均方差，將一濾波器的MSE對設計的時脈衝響應偏微分，將偏微分的的式子等於0，用程式最佳化的方式求出數位濾波器的頻率響應。此方法著重在濾波器的頻率響應和理想響應在取樣頻率段的平均誤差。
- 帕克斯-麥克萊倫演演算法：（也稱為是等漣波法、最佳法或Mini-max法）常會用雷米茲演算法來找最佳等漣波的係數。使用者會標示想要的頻率響應、此響應下誤差的加權函數，以及濾波器階數N。此方法會找到可以將最大偏移量降到最低的$N + 1$個係數。直覺上，這可以找到在只用$N + 1$個頻率點下，最符合期望頻率響應的濾波器。此方式不容易實作，因為最大誤差要考慮設計的響應式與理想響應式相減後的絕對值，如下式：$\max_{f} |H(f)-H_d(f)|$。計算上較為複雜，不常應用在濾波器設計上。目前有一本教科書有包括可以用理想濾波器以及階數N，得到最佳係數的程式。
- 等漣波FIR濾波器也可以用DFT演演算法設計。此方式在本質上是迭代的，初始濾波器計設計的DFT可以用FFT演演算法計算（若沒有初始估計值，可以用hn=deltan）。在傅立葉域下，可以依要想的規格調整頻率響應，接著計算反DFT。在時域下，只保留前N個係數（其他係數設為0），之後再重覆上述的流程：再計算DFT，在頻率下調整，再轉回時域。

目前已有許多軟體可以進行濾波器設計，例如MATLAB、GNU Octave、Scilab和SciPy等。

## 移動平均濾波器的例子

簡單FIR濾波器的方塊器（此例中是二階三抽頭的濾波器，是移動平均濾波器）

移動平均濾波器是簡單的FIR濾波器，有時會稱為Boxcar 函數濾波器（特別在之後有降採樣的情形下）。濾波器的係數$b_0, \ldots, b_N$可以用以下公式求得：

$$b_i=\frac{1}{N+1}$$

以下是更具體的例子，選擇濾波器的階數：

$$N = 2$$

其沖激響應如下：

$$h[n] = \frac{1}{3}\delta[n] + \frac{1}{3}\delta[n-1] + \frac{1}{3}\delta[n-2]$$

右邊的方塊圖是以下要討論的二階移動平均濾波器。其遞移函數為：

$$H(z) = \frac{1}{3} + \frac{1}{3}z^{-1} + \frac{1}{3}z^{-2} = \frac{1}{3}\frac{z^{2} + z + 1}{z^{2}}.$$

下一個圖是濾波器的極零點圖。零頻率（直流）對應(1, 0)，正頻率會繞原點逆時針旋轉，直到(−1, 0)的奈奎斯特頻率。在原點有二個極點，二個零點在$z_1 = -\frac{1}{2} + j\frac{\sqrt{3}}{2}$，$z_2 = -\frac{1}{2} - j \frac{\sqrt{3}}{2}$。

若以正規化頻率 (數位信號處理)ω表示，頻率響應為：

$$\begin{align} H\left(e^{j\omega}\right) &= \frac{1}{3} + \frac{1}{3}e^{-j\omega} + \frac{1}{3}e^{-j2\omega}\\ &= \frac{1}{3}e^{-j\omega}\left(1+2cos(\omega)\right). \end{align}$$

圖上有其振幅和相位的響應，不過此圖也可以用衝激響應的離散傅立葉變換得到

因為其對稱性，濾波器設計或是顯示軟體多半只會顯示 0, π區域。可以看出移動平均濾波器的低頻增益接近1，但會衰減高頻的信號，因此是簡單的低通濾波器。相位圖是線性的，但在增益降到零時出現不連續，不連續的大小是π，意思是有變號的情形。最後一張圖的振幅允許正負，此時的相位就都是線性的。

## 參考文獻

- Jian-Jiun Ding (2013), Advanced Digital Signal Processing viewed 27/06/2013