news 2026/6/15 15:04:42

FIR滤波器深入介绍

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
FIR滤波器深入介绍

FIR 滤波器是数字信号处理中非常重要的一类滤波器,它具有无条件稳定严格线性相位的特性,这使其在许多应用中非常受欢迎。


🧐 FIR 滤波器基础

FIR 滤波器通过将输入信号与滤波器的冲激响应进行卷积来实现滤波功能。

  • 冲激响应 (Impulse Response):它的长度是有限的,因此得名“有限冲激响应”。
  • 结构类型:FIR 滤波器属于非递归系统(Non-recursive System),这意味着它的输出只依赖于当前的输入和过去的输入样本,而不依赖于过去的输出样本。

y [ n ] = ∑ k = 0 M b k ⋅ x [ n − k ] y[n] = \sum_{k=0}^{M} b_k \cdot x[n-k]y[n]=k=0Mbkx[nk]

其中:

  • y [ n ] y[n]y[n]是时刻n nn的输出信号。
  • x [ n ] x[n]x[n]是时刻n nn的输入信号。
  • b k b_kbk是滤波器的系数(通常称为“抽头”或“Taps”),它们就是滤波器的冲激响应h [ k ] h[k]h[k]
  • M MM是滤波器的阶数,滤波器的长度(抽头数)为N = M + 1 N = M + 1N=M+1

🏛️ FIR 滤波器的典型架构:直接形式 I (Direct Form I)

最常见和最直观的 FIR 滤波器架构是直接形式 I,也称为横向结构(Transversal Structure)。

这种结构由以下基本单元组成:

  1. 延迟单元 (Delay Elements,z − 1 z^{-1}z1):用于存储输入信号的过去M MM个样本。在数字实现中,这通常是一个移位寄存器环形缓冲区
    • 在时刻n nn,移位寄存器存储了输入信号的{ x [ n ] , x [ n − 1 ] , … , x [ n − M ] } \{x[n], x[n-1], \dots, x[n-M]\}{x[n],x[n1],,x[nM]}这些样本。
  2. 乘法器 (Multipliers):每个延迟的输入样本x [ n − k ] x[n-k]x[nk]都与相应的滤波器系数b k b_kbk相乘。
  3. 加法器 (Summers/Accumulators):所有乘法的结果被累加起来,产生最终的输出样本y [ n ] y[n]y[n]

架构特点总结:

  • 简单直观:这种结构直接对应于 FIR 滤波器的卷积求和公式。
  • 计算量:对于一个N NN阶(M = N − 1 M=N-1M=N1)的滤波器,每个输出样本需要N NN次乘法和N − 1 N-1N1次加法。
  • 存储需求:需要存储N NN个输入样本和N NN个系数b k b_kbk

📐 线性相位 FIR 滤波器的对称结构

FIR 滤波器的一个最大优点是可以轻松设计成严格线性相位。线性相位意味着滤波器的群延迟是常数,不会引起信号的相位失真(即信号中不同频率分量的延迟时间相同)。

当滤波器系数满足对称反对称关系时,即可实现线性相位:

  • 对称:b k = b M − k b_k = b_{M-k}bk=bMk
  • 反对称:b k = − b M − k b_k = -b_{M-k}bk=bMk

利用这种对称性,可以设计出简化的结构减少乘法器的数量,从而降低计算复杂度并节省硬件资源。

简化结构原理:

以对称系数为例,如M = 4 M=4M=4的滤波器:
y [ n ] = b 0 x [ n ] + b 1 x [ n − 1 ] + b 2 x [ n − 2 ] + b 3 x [ n − 3 ] + b 4 x [ n − 4 ] y[n] = b_0 x[n] + b_1 x[n-1] + b_2 x[n-2] + b_3 x[n-3] + b_4 x[n-4]y[n]=b0x[n]+b1x[n1]+b2x[n2]+b3x[n3]+b4x[n4]
因为b 0 = b 4 b_0=b_4b0=b4b 1 = b 3 b_1=b_3b1=b3,可以重写为:
y [ n ] = b 0 ( x [ n ] + x [ n − 4 ] ) + b 1 ( x [ n − 1 ] + x [ n − 3 ] ) + b 2 x [ n − 2 ] y[n] = b_0 (x[n] + x[n-4]) + b_1 (x[n-1] + x[n-3]) + b_2 x[n-2]y[n]=b0(x[n]+x[n4])+b1(x[n1]+x[n3])+b2x[n2]

  • 操作变化:变为先进行加法,然后用一个系数进行乘法
  • 优势:乘法次数从N NN次(5次)减少到大约N / 2 N/2N/2次(3次)。

⚡ 快速 FIR 滤波:利用 FFT

对于非常高阶的 FIR 滤波器,直接形式或对称形式的实时实现可能需要大量的乘法运算。在这种情况下,可以利用快速傅里叶变换 (FFT)来实现滤波,基于时域卷积相当于频域相乘的原理:

y [ n ] = x [ n ] ∗ h [ n ] ⇔ Y [ k ] = X [ k ] ⋅ H [ k ] y[n] = x[n] * h[n] \quad \Leftrightarrow \quad Y[k] = X[k] \cdot H[k]y[n]=x[n]h[n]Y[k]=X[k]H[k]

实现步骤 (重叠相加法/重叠保留法):

  1. 将长输入信号x [ n ] x[n]x[n]分割成较短的块。
  2. 对输入信号块x b l o c k [ n ] x_{block}[n]xblock[n]和滤波器冲激响应h [ n ] h[n]h[n]进行FFT得到X b l o c k [ k ] X_{block}[k]Xblock[k]H [ k ] H[k]H[k]
  3. 在频域将它们相乘得到Y b l o c k [ k ] = X b l o c k [ k ] ⋅ H [ k ] Y_{block}[k] = X_{block}[k] \cdot H[k]Yblock[k]=Xblock[k]H[k]
  4. Y b l o c k [ k ] Y_{block}[k]Yblock[k]进行IFFT得到输出信号块y b l o c k [ n ] y_{block}[n]yblock[n]
  5. 将输出块进行适当的重叠处理(取决于使用重叠相加还是重叠保留),以形成最终的输出信号y [ n ] y[n]y[n]

优势:当滤波器阶数N NN非常大时,FFT 算法的复杂度(O ( N log ⁡ N ) O(N \log N)O(NlogN))通常远低于直接卷积(O ( N 2 ) O(N^2)O(N2)O ( N ) O(N)O(N)forM MMlength filter),可以显著提高运算速度


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/13 18:30:13

tensorflow 零基础吃透:TensorFlow 稀疏张量(SparseTensor)的核心操作

零基础吃透:TensorFlow稀疏张量(SparseTensor)的核心操作 稀疏张量无法直接使用tf.math.add等密集张量的算术算子,必须通过tf.sparse包下的专用工具进行操作。本文拆解加法、矩阵乘法、拼接、切片、元素级运算五大核心操作&#x…

作者头像 李华
网站建设 2026/6/15 7:15:54

PPTTimer:演讲时间管理的革命性解决方案

还在为演讲时间失控而焦虑吗?在重要场合的演示中,精准的时间把控往往决定了演讲的成败。PPTTimer作为一款专业的开源倒计时工具,专门针对各类演示场景设计,帮助您彻底告别时间管理难题。 【免费下载链接】ppttimer 一个简易的 PPT…

作者头像 李华
网站建设 2026/6/10 22:51:32

如何快速配置文泉驿微米黑:跨平台字体终极解决方案

你是否曾经为系统字体显示效果不佳而烦恼?或者在终端中遇到中文字符对齐问题?今天,我要向你介绍一款能够解决这些问题的开源字体——文泉驿微米黑。这款字体不仅体积小巧,还完美支持中日韩字符集,是跨平台字体配置的理…

作者头像 李华
网站建设 2026/6/11 23:32:31

LobeChat能否对接CERN开放数据?粒子物理科普问答系统

LobeChat能否对接CERN开放数据?粒子物理科普问答系统 在公众对科学的好奇心日益增长的今天,如何让高深的粒子物理走出实验室、走进大众视野,成为一道亟待破解的难题。欧洲核子研究中心(CERN)虽然早已将大型强子对撞机…

作者头像 李华
网站建设 2026/6/14 14:01:20

LobeChat接入通义千问、百川、GLM等国产大模型教程

LobeChat 接入通义千问、百川、GLM 等国产大模型实战指南 在大模型落地的浪潮中,一个常被忽视但至关重要的环节是:如何让用户真正“用得上”这些强大的AI能力? 前端交互界面,正是连接复杂后端模型与普通用户的桥梁。然而&#xff…

作者头像 李华