Article

信号与系统-CH3.2-FIR滤波器

信号与系统-CH3.2-FIR滤波器,待补充摘要。

May 25, 2026 修考 15 min read

有限冲激响应滤波器(FIR Filter)系统学习笔记

1. 数字滤波与系统概述

1.1 数字信号处理的基本框架

在现代电子系统中,大部分信号处理都是在计算机或数字信号处理器(DSP)中完成的。一个典型的数字滤波系统框图如下所示:

x(t)A/D 转换x[n]数字滤波器(系统)y[n]D/A 转换y(t)x(t) \xrightarrow{\quad \text{A/D 转换} \quad} x[n] \xrightarrow{\quad \text{数字滤波器(系统)} \quad} y[n] \xrightarrow{\quad \text{D/A 转换} \quad} y(t)

  • x(t)x(t):连续时间输入信号(模拟信号)。
  • x[n]x[n]:经模数转换(ADC)采样后得到的离散时间输入序列。
  • y[n]y[n]:经数字滤波器处理后的离散时间输出序列。我们当前的核心关注点,即为数字滤波器(Computer/DSP)内部对信号的处理算法。
  • y(t)y(t):经数模转换(DAC)和重建滤波器后输出的连续时间模拟信号。

1.2 系统的抽象表示

数字滤波器在数学上可以抽象为一个“系统”,它将输入序列 x[n]x[n] 映射为输出序列 y[n]y[n]

x[n]系统 (System)y[n]x[n] \longrightarrow \begin{array}{|c|} \hline \text{系统 (System)} \\ \hline \end{array} \longrightarrow y[n]

2. 从“3点平均滤波器”引入:实时性与滤波器特性

2.1 非实时(非因果)3点平均滤波器

3点平均滤波器

考虑以下差分方程所描述的系统:

y[n]=x[n]+x[n+1]+x[n+2]3y[n] = \frac{x[n] + x[n+1] + x[n+2]}{3}

特性分析

  1. 物理意义(低通特性): 该系统将当前时刻、未来第一个时刻和未来第二个时刻的三个输入信号进行算术平均。例如,当输入信号为一个带有高频波动的三角波时,经过这种平均处理,尖锐的波峰会被平滑。
    • 物理效果:平滑波形。
    • 频域本质:滤除了高频成分,因此它是一个低通滤波器(LPF, Low-Pass Filter)
  2. 实时性(Real-time)分析
    • 结论:该系统不是实时系统。
    • 原因:在计算当前 nn 时刻的输出 y[n]y[n] 时(例如 n=0n=0 时求 y[0]y[0]),系统需要用到未来的信号采样值 x[1]x[1]x[2]x[2]。在实时流式处理中,未来的信号尚未发生,因此无法实现实时处理。在系统分类中,这种系统被称为非因果系统(Non-causal System)

2.2 实时(因果)3点平均滤波器

为了让系统能够进行实时(即时)处理,我们需要对公式进行时移,使其仅依赖于当前和过去的输入信号(对应手写笔记中的“修改为减号/延迟”):

y[n]=13x[n]+13x[n1]+13x[n2]y[n] = \frac{1}{3}x[n] + \frac{1}{3}x[n-1] + \frac{1}{3}x[n-2]

特性分析

  • 结论:这是一个实时系统 / 因果系统(Causal System)
  • 原因:计算当前时刻输出 y[n]y[n] 仅需要当前输入 x[n]x[n]、前一时刻输入 x[n1]x[n-1] 和前两时刻输入 x[n2]x[n-2]。所有这些数据在时刻 nn 都是已知的,因此可以即时处理。

3. 有限冲激响应(FIR)滤波器一般化

3.1 差分方程一般式

将上述实时 3 点平均滤波器推广,得到一般的 FIR(Finite Impulse Response,有限冲激响应)滤波器 差分方程:

y[n]=k=0Mbkx[nk]y[n] = \sum_{k=0}^{M} b_k x[n-k]

  • bkb_k:滤波器的系数(Coefficients),即 FIR 滤波器的设计参数(也称抽头权重 Tap Weights)。
  • MM:滤波器的阶数(Order)。整个滤波器共有 M+1M+1 个抽头。
  • 因果性保障:求和上限从 k=0k=0 开始(即没有 x[n+1]x[n+1] 等未来项),保证了系统是因果、可实时实现的系统

FIR滤波器window

3.2 形象理解与应用

  1. 滑动窗口(Sliding Window)概念: FIR 滤波器的运行机制就像一个在输入信号序列上不断滑动的窗口。窗口的长度为 M+1M+1,每滑动到一个新位置,就将窗口内的输入信号与对应的系数 bkb_k 相乘并累加,从而得到当前的输出 y[n]y[n]
  2. 生活中的实例(股票均线): 股票市场中常用的各种均线(如 5 日均线、30 日月线、250 日年线)就是最典型的滑动平均 FIR 滤波器。它们通过对过去一段时间的价格进行加权平均,滤除每日价格的随机“噪声”,从而呈现出价格发展的平滑趋势。
  3. 特定周期噪声的消除
    • 原理:FIR 滤波器具有极强的噪声滤除能力。如果噪声的周期为 NN,我们可以设计一个 NN 点的滑动平均滤波器来完全滤除该杂讯。
    • 解释:周期为 NN 的正弦或对称杂讯在任意连续 NN 个采样点上的累加和为 0。因此,通过一个 NN 点均值滤波器(所有系数均为 1/N1/N)时,该噪声项会被完全抵消(抵消效果等同于在该噪声频率处产生了一个传输零点)。

💡 例题:已知系数写出差分方程

若给定 FIR 滤波器系数为 bk={3,1,2,1}b_k = \{3, -1, 2, 1\},对应的求和上限为 M=3M=3。请写出其滤波器的差分方程。

  • 解答: 代入一般式 y[n]=k=03bkx[nk]y[n] = \sum_{k=0}^{3} b_k x[n-k],展开得:

    y[n]=3x[n]x[n1]+2x[n2]+x[n3]y[n] = 3x[n] - x[n-1] + 2x[n-2] + x[n-3]

4. 线性时不变(LTI)系统、冲激响应与卷积

4.1 系统的基本性质

在研究数字信号处理时,我们经常假设系统具有以下优良的性质:

  1. 数学描述(Mathematical Description):输入与输出之间明确的数学函数映射关系。

  2. 时不变性(Time-Invariance):系统的特性不随时间而改变。若输入 x[n]x[n] 产生输出 y[n]y[n],则输入同步时移 n0n_0 后,输出也同步时移相同的大小:

    x[nn0]y[nn0]x[n - n_0] \longrightarrow y[n - n_0]

  3. 线性(Linearity):系统满足叠加原理(即可加性与齐次性)。若 x1[n]y1[n]x_1[n] \to y_1[n]x2[n]y2[n]x_2[n] \to y_2[n],则对于任意常数 a,ba, b

    ax1[n]+bx2[n]ay1[n]+by2[n]a x_1[n] + b x_2[n] \longrightarrow a y_1[n] + b y_2[n]

  4. 因果性(Causality):系统在任何时刻的输出 y[n]y[n] 仅取决于当前及过去的输入,而与未来的输入无关(即“无未来依赖”:No output prior to input)。

4.2 冲激响应(Impulse Response)

  • 定义单位冲激信号 δ[n]\delta[n] 定义为:

    δ[n]={1,n=00,n0\delta[n] = \begin{cases} 1, & n = 0 \\ 0, & n \neq 0 \end{cases}

  • 冲激响应 h[n]h[n] 是指:当系统输入为单位冲激信号 x[n]=δ[n]x[n] = \delta[n] 时,系统的输出响应。

示例推导:求因果 3点平均滤波器的冲激响应

对于实时 3 点平均滤波器 y[n]=13x[n]+13x[n1]+13x[n2]y[n] = \frac{1}{3}x[n] + \frac{1}{3}x[n-1] + \frac{1}{3}x[n-2]: 令输入 x[n]=δ[n]x[n] = \delta[n],输出即为 h[n]h[n]

h[n]=13δ[n]+13δ[n1]+13δ[n2]h[n] = \frac{1}{3}\delta[n] + \frac{1}{3}\delta[n-1] + \frac{1}{3}\delta[n-2]

逐点展开计算:

  • n=0    h[0]=13δ[0]+0+0=13n = 0 \implies h[0] = \frac{1}{3}\delta[0] + 0 + 0 = \frac{1}{3}
  • n=1    h[1]=0+13δ[0]+0=13n = 1 \implies h[1] = 0 + \frac{1}{3}\delta[0] + 0 = \frac{1}{3}
  • n=2    h[2]=0+0+13δ[0]=13n = 2 \implies h[2] = 0 + 0 + \frac{1}{3}\delta[0] = \frac{1}{3}
  • n3n \ge 3n<0    h[n]=0n < 0 \implies h[n] = 0

由此可见,该滤波器的冲激响应是有限长的。

关键结论: 在因果 FIR 滤波器中,滤波器的系统系数 bkb_k 与系统的单位冲激响应 h[k]h[k] 在数值上完全相等,即:

bk=h[k]b_k = h[k]

因此,FIR 滤波器的差分方程也可以写为:

y[n]=k=0Mh[k]x[nk]y[n] = \sum_{k=0}^{M} h[k]x[n-k]

4.3 卷积(Convolution)与 LTI 系统

对于任意一个线性时不变(LTI)系统,输出 y[n]y[n] 可以通过输入信号 x[n]x[n] 与系统冲激响应 h[n]h[n]卷积和求得(此公式极其重要,务必牢记):

y[n]=h[n]x[n]=k=+h[k]x[nk]y[n] = h[n] * x[n] = \sum_{k=-\infty}^{+\infty} h[k] x[n-k]

对于因果且冲激响应有限长(长度为 M+1M+1)的 FIR 系统,卷积和公式退化为:

y[n]=k=0Mh[k]x[nk]y[n] = \sum_{k=0}^{M} h[k] x[n-k]

📝 深度解析例题

【题目】 已知系统的冲激响应为:

h[n]=δ[n]δ[n1]+2δ[n2]δ[n3]+δ[n4]h[n] = \delta[n] - \delta[n-1] + 2\delta[n-2] - \delta[n-3] + \delta[n-4]

系统的输入信号为单位阶跃信号:

x[n]=u[n]={1,n00,n<0x[n] = u[n] = \begin{cases} 1, & n \ge 0 \\ 0, & n < 0 \end{cases}

求该系统的输出序列 y[n]y[n]

【解答】

方法一:利用差分方程/系统系数直接求解

h[n]h[n] 的表达式可知,非零值的时刻为 n=0,1,2,3,4n = 0, 1, 2, 3, 4,其对应系数(冲激响应值)为:

h[0]=1,h[1]=1,h[2]=2,h[3]=1,h[4]=1h[0]=1, \quad h[1]=-1, \quad h[2]=2, \quad h[3]=-1, \quad h[4]=1

其余时刻 h[n]=0h[n] = 0。该系统为一个 4 阶 FIR 滤波器(M=4M=4),其差分方程为:

y[n]=x[n]x[n1]+2x[n2]x[n3]+x[n4]y[n] = x[n] - x[n-1] + 2x[n-2] - x[n-3] + x[n-4]

x[n]=u[n]x[n] = u[n] 代入,分时刻讨论计算:

  • n<0n < 0 :由于因果性且 u[n]=0u[n]=0,输出 y[n]=0y[n] = 0

  • n=0n = 0

    y[0]=u[0]u[1]+2u[2]u[3]+u[4]=10+00+0=1y[0] = u[0] - u[-1] + 2u[-2] - u[-3] + u[-4] = 1 - 0 + 0 - 0 + 0 = 1

  • n=1n = 1

    y[1]=u[1]u[0]+2u[1]u[2]+u[3]=11+00+0=0y[1] = u[1] - u[0] + 2u[-1] - u[-2] + u[-3] = 1 - 1 + 0 - 0 + 0 = 0

  • n=2n = 2

    y[2]=u[2]u[1]+2u[0]u[1]+u[2]=11+2(1)0+0=2y[2] = u[2] - u[1] + 2u[0] - u[-1] + u[-2] = 1 - 1 + 2(1) - 0 + 0 = 2

  • n=3n = 3

    y[3]=u[3]u[2]+2u[1]u[0]+u[1]=11+2(1)1+0=1y[3] = u[3] - u[2] + 2u[1] - u[0] + u[-1] = 1 - 1 + 2(1) - 1 + 0 = 1

  • n4n \ge 4 :此时所有的延迟项 u[n],u[n1],,u[n4]u[n], u[n-1], \dots, u[n-4] 的值全部为 11,因此:

    y[n]=11+21+1=2y[n] = 1 - 1 + 2 - 1 + 1 = 2

汇总计算表

我们可以将卷积计算过程汇总在下表中:

时刻 nnx[n]x[n]x[n1]x[n-1]x[n2]x[n-2]x[n3]x[n-3]x[n4]x[n-4]输出 y[n]y[n]
<0< 0000000
00100001
11110000
22111002
33111101
4\ge 4111112

最终输出序列的表达式

我们可以将输出写成序列形式:

y[n]={1,0,2,1,2,2,2,}(表示 n=0 的位置)y[n] = \{ \underset{\uparrow}{1}, 0, 2, 1, 2, 2, 2, \dots \} \quad (\uparrow \text{表示 } n=0 \text{ 的位置})

也可以使用单位冲激信号和单位阶跃信号表示为闭合通式:

y[n]=δ[n]+2δ[n2]+δ[n3]+2u[n4]y[n] = \delta[n] + 2\delta[n-2] + \delta[n-3] + 2u[n-4]

5. FIR 滤波器的硬件结构设计

5.1 硬件实现的三大基本元素

要在数字硬件(如 FPGA、ASIC 或专用 DSP 芯片)上实现 FIR 滤波器,仅需要以下三种最基本的运算单元:

  1. 单位延迟单元(Delay, z1z^{-1}:存储前一个样值。输入为 v[n]v[n],输出为 v[n1]v[n-1]
  2. 乘法器(Multiplier, \otimes:将输入数据乘以固定的系数(如 bkb_k)。
  3. 加法器(Adder, \oplus:将多路数据相加求和。

5.2 硬件结构设计实例

题目:如何设计硬件结构来实现以下差分方程?

y[n]=b0x[n]+b1x[n1]+b2x[n2]+b3x[n3]y[n] = b_0 x[n] + b_1 x[n-1] + b_2 x[n-2] + b_3 x[n-3]

硬件原理图(直接型 Direct Form I 结构)

通过级联延迟单元 z1z^{-1} 形成一条延迟链,在每一个节点(抽头)引出信号乘以对应的系数,最后通过加法树或级联加法器求和。

下面是该硬件设计的标准信号流图:

FIR系统设计

硬件工作流程

  1. 采样与时钟沿到来:在每一个采样时钟上升沿,数据在延迟链中向右(或向下)传递一级:x[n2]x[n3]x[n-2] \to x[n-3]x[n1]x[n2]x[n-1] \to x[n-2]x[n]x[n1]x[n] \to x[n-1]。新输入的采样点进入 x[n]x[n] 寄存器。
  2. 乘法计算:各个寄存器的输出与其对应的预设滤波器系数 b0,b1,b2,b3b_0, b_1, b_2, b_3 分别进行乘法运算。
  3. 加法累加:乘法器的输出结果送入加法链中,进行级联求和,最终在当前时钟周期内输出滤波后的结果 y[n]y[n]。由于没有反馈环路(无 y[n1]y[n-1] 等反馈项),该结构非常稳定,永远不会产生自激振荡。