有限冲激响应滤波器(FIR Filter)系统学习笔记
1. 数字滤波与系统概述
1.1 数字信号处理的基本框架
在现代电子系统中,大部分信号处理都是在计算机或数字信号处理器(DSP)中完成的。一个典型的数字滤波系统框图如下所示:
x(t)A/D 转换x[n]数字滤波器(系统)y[n]D/A 转换y(t)
- x(t):连续时间输入信号(模拟信号)。
- x[n]:经模数转换(ADC)采样后得到的离散时间输入序列。
- y[n]:经数字滤波器处理后的离散时间输出序列。我们当前的核心关注点,即为数字滤波器(Computer/DSP)内部对信号的处理算法。
- y(t):经数模转换(DAC)和重建滤波器后输出的连续时间模拟信号。
1.2 系统的抽象表示
数字滤波器在数学上可以抽象为一个“系统”,它将输入序列 x[n] 映射为输出序列 y[n]:
x[n]⟶系统 (System)⟶y[n]
2. 从“3点平均滤波器”引入:实时性与滤波器特性
2.1 非实时(非因果)3点平均滤波器

考虑以下差分方程所描述的系统:
y[n]=3x[n]+x[n+1]+x[n+2]
特性分析
- 物理意义(低通特性): 该系统将当前时刻、未来第一个时刻和未来第二个时刻的三个输入信号进行算术平均。例如,当输入信号为一个带有高频波动的三角波时,经过这种平均处理,尖锐的波峰会被平滑。
- 物理效果:平滑波形。
- 频域本质:滤除了高频成分,因此它是一个低通滤波器(LPF, Low-Pass Filter)。
- 实时性(Real-time)分析:
- 结论:该系统不是实时系统。
- 原因:在计算当前 n 时刻的输出 y[n] 时(例如 n=0 时求 y[0]),系统需要用到未来的信号采样值 x[1] 和 x[2]。在实时流式处理中,未来的信号尚未发生,因此无法实现实时处理。在系统分类中,这种系统被称为非因果系统(Non-causal System)。
2.2 实时(因果)3点平均滤波器
为了让系统能够进行实时(即时)处理,我们需要对公式进行时移,使其仅依赖于当前和过去的输入信号(对应手写笔记中的“修改为减号/延迟”):
y[n]=31x[n]+31x[n−1]+31x[n−2]
特性分析
- 结论:这是一个实时系统 / 因果系统(Causal System)。
- 原因:计算当前时刻输出 y[n] 仅需要当前输入 x[n]、前一时刻输入 x[n−1] 和前两时刻输入 x[n−2]。所有这些数据在时刻 n 都是已知的,因此可以即时处理。
3. 有限冲激响应(FIR)滤波器一般化
3.1 差分方程一般式
将上述实时 3 点平均滤波器推广,得到一般的 FIR(Finite Impulse Response,有限冲激响应)滤波器 差分方程:
y[n]=∑k=0Mbkx[n−k]
- bk:滤波器的系数(Coefficients),即 FIR 滤波器的设计参数(也称抽头权重 Tap Weights)。
- M:滤波器的阶数(Order)。整个滤波器共有 M+1 个抽头。
- 因果性保障:求和上限从 k=0 开始(即没有 x[n+1] 等未来项),保证了系统是因果、可实时实现的系统。

3.2 形象理解与应用
- 滑动窗口(Sliding Window)概念: FIR 滤波器的运行机制就像一个在输入信号序列上不断滑动的窗口。窗口的长度为 M+1,每滑动到一个新位置,就将窗口内的输入信号与对应的系数 bk 相乘并累加,从而得到当前的输出 y[n]。
- 生活中的实例(股票均线): 股票市场中常用的各种均线(如 5 日均线、30 日月线、250 日年线)就是最典型的滑动平均 FIR 滤波器。它们通过对过去一段时间的价格进行加权平均,滤除每日价格的随机“噪声”,从而呈现出价格发展的平滑趋势。
- 特定周期噪声的消除:
- 原理:FIR 滤波器具有极强的噪声滤除能力。如果噪声的周期为 N,我们可以设计一个 N 点的滑动平均滤波器来完全滤除该杂讯。
- 解释:周期为 N 的正弦或对称杂讯在任意连续 N 个采样点上的累加和为 0。因此,通过一个 N 点均值滤波器(所有系数均为 1/N)时,该噪声项会被完全抵消(抵消效果等同于在该噪声频率处产生了一个传输零点)。
💡 例题:已知系数写出差分方程
若给定 FIR 滤波器系数为 bk={3,−1,2,1},对应的求和上限为 M=3。请写出其滤波器的差分方程。
4. 线性时不变(LTI)系统、冲激响应与卷积
4.1 系统的基本性质
在研究数字信号处理时,我们经常假设系统具有以下优良的性质:
-
数学描述(Mathematical Description):输入与输出之间明确的数学函数映射关系。
-
时不变性(Time-Invariance):系统的特性不随时间而改变。若输入 x[n] 产生输出 y[n],则输入同步时移 n0 后,输出也同步时移相同的大小:
x[n−n0]⟶y[n−n0]
-
线性(Linearity):系统满足叠加原理(即可加性与齐次性)。若 x1[n]→y1[n],x2[n]→y2[n],则对于任意常数 a,b:
ax1[n]+bx2[n]⟶ay1[n]+by2[n]
-
因果性(Causality):系统在任何时刻的输出 y[n] 仅取决于当前及过去的输入,而与未来的输入无关(即“无未来依赖”:No output prior to input)。
4.2 冲激响应(Impulse Response)
-
定义:单位冲激信号 δ[n] 定义为:
δ[n]={1,0,n=0n=0
-
冲激响应 h[n] 是指:当系统输入为单位冲激信号 x[n]=δ[n] 时,系统的输出响应。
示例推导:求因果 3点平均滤波器的冲激响应
对于实时 3 点平均滤波器 y[n]=31x[n]+31x[n−1]+31x[n−2]: 令输入 x[n]=δ[n],输出即为 h[n]:
h[n]=31δ[n]+31δ[n−1]+31δ[n−2]
逐点展开计算:
- n=0⟹h[0]=31δ[0]+0+0=31
- n=1⟹h[1]=0+31δ[0]+0=31
- n=2⟹h[2]=0+0+31δ[0]=31
- n≥3 或 n<0⟹h[n]=0
由此可见,该滤波器的冲激响应是有限长的。
关键结论: 在因果 FIR 滤波器中,滤波器的系统系数 bk 与系统的单位冲激响应 h[k] 在数值上完全相等,即:
bk=h[k]
因此,FIR 滤波器的差分方程也可以写为:
y[n]=∑k=0Mh[k]x[n−k]
4.3 卷积(Convolution)与 LTI 系统
对于任意一个线性时不变(LTI)系统,输出 y[n] 可以通过输入信号 x[n] 与系统冲激响应 h[n] 的卷积和求得(此公式极其重要,务必牢记):
y[n]=h[n]∗x[n]=∑k=−∞+∞h[k]x[n−k]
对于因果且冲激响应有限长(长度为 M+1)的 FIR 系统,卷积和公式退化为:
y[n]=∑k=0Mh[k]x[n−k]
📝 深度解析例题
【题目】 已知系统的冲激响应为:
h[n]=δ[n]−δ[n−1]+2δ[n−2]−δ[n−3]+δ[n−4]
系统的输入信号为单位阶跃信号:
x[n]=u[n]={1,0,n≥0n<0
求该系统的输出序列 y[n]。
【解答】
方法一:利用差分方程/系统系数直接求解
由 h[n] 的表达式可知,非零值的时刻为 n=0,1,2,3,4,其对应系数(冲激响应值)为:
h[0]=1,h[1]=−1,h[2]=2,h[3]=−1,h[4]=1
其余时刻 h[n]=0。该系统为一个 4 阶 FIR 滤波器(M=4),其差分方程为:
y[n]=x[n]−x[n−1]+2x[n−2]−x[n−3]+x[n−4]
将 x[n]=u[n] 代入,分时刻讨论计算:
-
n<0 时:由于因果性且 u[n]=0,输出 y[n]=0。
-
n=0 时:
y[0]=u[0]−u[−1]+2u[−2]−u[−3]+u[−4]=1−0+0−0+0=1
-
n=1 时:
y[1]=u[1]−u[0]+2u[−1]−u[−2]+u[−3]=1−1+0−0+0=0
-
n=2 时:
y[2]=u[2]−u[1]+2u[0]−u[−1]+u[−2]=1−1+2(1)−0+0=2
-
n=3 时:
y[3]=u[3]−u[2]+2u[1]−u[0]+u[−1]=1−1+2(1)−1+0=1
-
n≥4 时:此时所有的延迟项 u[n],u[n−1],…,u[n−4] 的值全部为 1,因此:
y[n]=1−1+2−1+1=2
汇总计算表
我们可以将卷积计算过程汇总在下表中:
| 时刻 n | x[n] | x[n−1] | x[n−2] | x[n−3] | x[n−4] | 输出 y[n] |
|---|
| <0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 0 | 1 | 0 | 0 | 0 | 0 | 1 |
| 1 | 1 | 1 | 0 | 0 | 0 | 0 |
| 2 | 1 | 1 | 1 | 0 | 0 | 2 |
| 3 | 1 | 1 | 1 | 1 | 0 | 1 |
| ≥4 | 1 | 1 | 1 | 1 | 1 | 2 |
最终输出序列的表达式
我们可以将输出写成序列形式:
y[n]={↑1,0,2,1,2,2,2,…}(↑表示 n=0 的位置)
也可以使用单位冲激信号和单位阶跃信号表示为闭合通式:
y[n]=δ[n]+2δ[n−2]+δ[n−3]+2u[n−4]
5. FIR 滤波器的硬件结构设计
5.1 硬件实现的三大基本元素
要在数字硬件(如 FPGA、ASIC 或专用 DSP 芯片)上实现 FIR 滤波器,仅需要以下三种最基本的运算单元:
- 单位延迟单元(Delay, z−1):存储前一个样值。输入为 v[n],输出为 v[n−1]。
- 乘法器(Multiplier, ⊗):将输入数据乘以固定的系数(如 bk)。
- 加法器(Adder, ⊕):将多路数据相加求和。
5.2 硬件结构设计实例
题目:如何设计硬件结构来实现以下差分方程?
y[n]=b0x[n]+b1x[n−1]+b2x[n−2]+b3x[n−3]
通过级联延迟单元 z−1 形成一条延迟链,在每一个节点(抽头)引出信号乘以对应的系数,最后通过加法树或级联加法器求和。
下面是该硬件设计的标准信号流图:

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