数字滤波器设计¶
我们简单讲解一下数字滤波器设计。
最开始要说明我们如何实现滤波。我们不断采样获得一个时域上的信号函数 \(x[n]\)。然后我们设计好的滤波器是 \(h[n]\)。那么利用卷积:
\[
y[n] = x[n] * h[n]
\]
也就完成了滤波。
窗函数法设计 FIR 滤波器¶

如上图所示:从理想低通滤波器开始。这在频域上是一个完美的矩形。然而其对应的时域函数\(h_1[n]\)是一个震荡的无限延伸的 \(\text{sinc}\) 函数。我们不可能在内存里面存无限个数据。(并且 IIR 响应还要用到未来的数据,影响因果性)。所以我们就要对这个 \(\text{sinc}\) 函数进行加窗 \(w[n]\)。
\[
h'[n] = h_1[n]w[n]
\]
加窗了以后,\(\text{sinc}\) 函数在时域上就有限长了,我们就得到了一个 FIR 滤波器。
最朴素的方法是加矩形窗,也就是对 \(\text{sinc}\) 函数进行直接截断。
\[
w_{\mathrm{R}}[n]
=
\begin{cases}
1, & 0 \leq n \leq N,\\
0, & \text{otherwise}.
\end{cases}
\]
下图展示了矩形窗的形状以及被矩形窗加窗以后,\(\text{sinc}\) 函数对应的时域和频域,看第五张图,是有明显的波动的,即所谓的振铃现象。

要想平滑这样的波动,可以用更加平滑的窗函数,例如hamming 窗。
\[
w_{\mathrm{H}}[n]
=
\begin{cases}
0.54-0.46\cos\left(\dfrac{2\pi n}{N}\right),
& 0 \leq n \leq N,\\
0, & \text{otherwise}.
\end{cases}
\]
下图展示了 hamming 窗的形状以及被 hamming 窗加窗以后 \({sinc}\) 函数对应的时域和频域。很明显,频域平滑了不少。因此在实际运用中更加常用。

总结一下,窗函数的设计流程如下:
在工程上,给出采样频率 fs、截止频率 fc、FIR 阶数 N(系数数量等于 N+1)和窗函数也就能直接得到 FIR 滤波器的参数了。