有限冲激响应

有限冲激响应（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