高通、低通、带通、陷波:四种滤波器原理与工程实战一次讲透
2026/9/9 9:13:06 网站建设 项目流程

我做了六七年信号处理和嵌入式开发,经常被身边刚入门的朋友问到同一个问题:高通、低通、带通、陷波到底怎么区分?每次我试着用教科书上的定义解释,对方总是一脸茫然。后来我琢磨出一套类比思维,配合实际工程场景来讲,大家基本两三分钟内就能建立清晰的印象。

这篇文章我打算抛开那些复杂的数学公式,用大家熟悉的生活场景、结合常用的滤波实现方式,把这四种滤波器一次讲透。文末还会附上我日常做选型和参数调试时的一些心得,这部分属于实操后才会明白的经验,希望你少走弯路。

1. 频率视角:理解滤波器必须先切换的思维模式

很多人一开始理解不了滤波器的行为,核心问题出在思维模式上。我们从小到大的直觉经验大多是“随时间变化”的,比如看到温度曲线一天内的波动、听到声音随时间的起伏。但滤波器本质上是工作在另一个维度——频率维度。

1.1 从时域切换到频域:一个随时钟摆动的视角

设想你在看一段心率信号。在时域里,它是一跳一跳的波形。但同一个信号,换个角度看,它其实是由很多不同速度的“旋转小箭头”叠加出来的——有的箭头转得慢,有的转得快,还有的朝相反方向转。每个旋转速度就是“频率”,旋转快的对应高频成分,旋转慢的对应低频成分。

这就是傅里叶变换的核心思想:任何一个看似复杂的信号,都是若干频率成分的叠加。滤波器做的事情,用一句话概括就是——有选择地放行或衰减某些旋转速度的成分

我说的“放行”和“衰减”,在电路里对应电阻、电容、电感构成的网络行为,在软件里对应一段循环处理数据的算法。但不管实现方式多不同,本质逻辑是一样的:

  • 让某些频率成分顺利通过,几乎不损耗;
  • 把另一些频率成分大幅度削弱,甚至完全消除。

1.2 频响曲线的读法:像看地形图一样看滤波器

每个滤波器都有一个“频率响应曲线”,简称频响曲线。横轴是频率,纵轴是增益(通常用分贝dB表示)。0 dB表示信号原样通过,-3 dB表示功率衰减到原来的一半(这是大家常说的截止频率点),-40 dB表示衰减到原来的1%。

提示:-3 dB对应的不是幅度衰减一半,而是功率衰减一半。幅度上大约是原来的0.707倍。

理解这条曲线,比死记定义有用得多。高通、低通、带通、陷波,其实就是四种不同形状的频响曲线。你只需要看曲线的“门”开在哪里、关在哪里,就能立刻判断出这是什么类型的滤波器。

这个读图能力,在工程实践里极其重要。无论是看数据手册里的滤波器参数,还是调试自己搭的滤波电路,第一件事永远是拉出频响曲线看一眼,而不是对着公式发呆。

2. 四种基本滤波器逐个拆解:行为、实现与典型场景

下面把这四种滤波器分别说清楚。每一种我都会先给出直觉理解,再补充电路实现和软件实现的常见做法,最后放一个典型应用场景。

2.1 低通滤波器:只让慢变化通过

低通滤波器,英文Low-Pass Filter,简称LPF。它的行为是:允许低频成分通过,削弱高频成分

直觉理解可以参考一个场景——你站在一条人来人往的街边,想观察远处招牌上的字。你眯起眼睛(相当于缩小瞳孔),远处的大字依然看得清,但近处快速晃动的人群却变得模糊了。眯眼这个动作,就是一个低通滤波过程:保留了你想看的慢变化信息,滤掉了烦人的细节抖动。

在电子系统里,最常见的低通滤波应用场景是传感器信号调理。举例来说,用热电偶测水温,信号本身变化很慢,但外部环境会有各种高频干扰耦合进来。这时候在ADC采样之前加一个低通滤波器,能显著提升测量稳定性。

软件层面实现低通滤波最经典的是一阶惯性滤波,也叫指数加权移动平均:

y[n] = α * x[n] + (1 - α) * y[n-1]

其中α是滤波系数,范围在0到1之间。α越小,滤波越强,响应越慢;α越大,滤波越弱,响应越快。这个公式本质上就是一个最简单的RC低通电路的数字化版本。

硬件层面最基础的是RC低通电路——一个电阻串联、一个电容并联到地。截止频率公式:

f_c = 1 / (2πRC)

举个例子,R=10kΩ,C=100nF,那么截止频率大约是159 Hz。也就是说,159 Hz以下的信号能顺利通过,以上的信号开始被逐渐衰减。

2.2 高通滤波器:剔除慢漂移的利器

高通滤波器,英文High-Pass Filter,简称HPF。它和低通恰好相反:让高频成分通过,削弱低频成分

直觉理解可以用“隔直流”来入门。很多音频功放电路在输入端会串联一个电容,这个电容就是高通滤波器的核心元件。它的作用是阻挡直流分量和极低频的漂移,只让有用的声音信号通过。如果去掉这个电容,前级电路的直流偏置会直接进入后级放大,轻则产生巨大噪声,重则烧毁扬声器。

高通滤波器的典型应用场景包括:

  • 心电信号中的基线漂移去除。呼吸动作会造成电极与皮肤接触面缓慢变化,形成极低频的漂移,用高通滤波器能有效压制;
  • 音频系统中去除直流偏置和次声波噪声;
  • 加速度传感器信号中去除重力加速度这一缓慢变化的直流分量,留下人体活动的动态部分。

软件层面的高通滤波通常不直接实现,而是用“原始信号减去低通结果”来间接得到。这是我在实际工程中很喜欢的技巧,因为低通滤波器设计成熟、参数直观:

y_high[n] = x[n] - y_low[n]

这个式子非常直观:从原始信号里减掉低频分量,剩下的自然就是高频分量。

硬件层面最基础的高通电路是RC高通——一个电容串联、一个电阻并联到地。截止频率公式与低通完全相同,也是f_c = 1 / (2πRC),区别只在于电容和电阻的位置互换。

2.3 带通滤波器:锁定一段频率范围

带通滤波器,英文Band-Pass Filter,简称BPF。它的行为是:只允许某一频率范围内的成分通过,低于或高于这个范围的成分都被衰减

带通滤波器可以理解为低通和高通的组合——先高通去掉太慢的,再低通去掉太快的,中间的留下来了。这个“中间”的频率范围就是通带。

最经典的生活类比是收音机的选台。空气中同时存在无数个电台的信号,频率各不相同。你旋转调谐旋钮,本质上就是在移动带通滤波器的通带中心,只让目标电台那个频率附近的信号进来,其他频率的电台信号全部被压制。

工程中的典型应用包括:

  • 通信接收机的前端选频。天线接收到的信号极其复杂,必须先经过带通滤波器选出目标频段,再进行后续放大和解调;
  • 振动监测中对特定机械故障频率成分的提取;
  • 生物电信号中提取特定节律,比如脑电信号中的α波(8-13 Hz)。

硬件层面实现带通滤波器通常有两种方案:

  1. 使用LC谐振回路,电容和电感并联构成谐振电路,谐振频率就是通带中心;
  2. 使用运放构成的二阶带通滤波器(如无限增益多反馈结构)。

软件层面的带通滤波,可以用低通和高通级联实现,也可以直接设计IIR/FIR带通滤波器。后者在MATLAB里用designfilt函数可以很方便地生成系数,具体设计方法后面第四部分会细说。

2.4 陷波滤波器:精准切除某一段频率

陷波滤波器,英文Notch Filter,也叫带阻滤波器的一种特例。它的行为是:只衰减某一窄带范围内的频率成分,其余所有频率几乎无损通过

它的名字很形象——频率响应曲线在某个频率附近会有一个突然的“下陷”,像地上挖了一个窄坑,其他区域都是平坦通道。

直觉理解参考一个场景:你在室内听广播,突然电器设备引入了一个50 Hz的交流哼声。这个哼声的频段很窄,但能量不小。这时候你需要的不是低通(那样会把广播里的低频成分也干掉),也不是高通(那样会破坏中高频段),你需要一把精准的“手术刀”,只把50 Hz这个频率切掉,其他什么都不动。陷波滤波器就是这把手术刀。

在我的实际工作中,陷波滤波器最常见的应用场景是去除50 Hz工频干扰,尤其是心电、脑电等生物电信号采集系统。心电信号本身频率范围在0.05-100 Hz,而50 Hz工频干扰恰好落在信号频带的正中间,用低通或高通都切不干净,只能用陷波精准切除。

另一个经典场景是音频反馈啸叫的抑制。音响系统中麦克风和扬声器之间形成正反馈,会在某个特定频率产生尖锐的啸叫。检测到啸叫频率后,用陷波滤波器将那个频率大幅衰减,啸叫随即消失,而音乐的其余部分几乎不受影响。

硬件层面的陷波器通常用双T网络或文氏电桥实现,能形成深而窄的陷波特性。软件层面则常用双二阶(Biquad)结构的IIR滤波器,系数可以通过公式精确计算。

2.5 一张表理清四种滤波器

如果你觉得上面的信息量稍微有点大,没关系,下面这张对比表能帮你快速建立整体框架:

滤波器类型英文缩写放行频率衰减频率生活类比典型场景
低通LPF低频高频眯眼看远处招牌传感器去噪、音频低音提取
高通HPF高频低频隔直流电容去除基线漂移、音频去直流
带通BPF中间一段两端收音机选台通信选频、特征频率提取
陷波BEF/Notch除窄带以外所有窄带内频率精准手术刀去除50Hz工频、抑制啸叫

带阻滤波器和陷波滤波器本质上是同一种东西,区别只在于阻带的宽窄。阻带窄的叫陷波器,阻带宽的叫带阻滤波器。实际交流中经常混用这两个词,不影响理解。

3. 电路篇:RC滤波器的内外功与实战计算

硬件滤波器的世界远不止RC这么简单,但RC确实是最基础、最常用、也最容易理解的一类。理解RC滤波器的行为特性,再看高阶的LC、有源滤波器,思路基本上是一致的。

3.1 一阶RC低通的内部逻辑与阻抗分压视角

一阶RC低通电路看起来极其简单:一个电阻串联在信号通路中,一个电容从信号输出端对地连接。但它为什么能实现低通滤波?

关键在于电容的阻抗特性。电容对信号的阻抗(容抗)与频率成反比:

Xc = 1 / (2πfC)

频率越低,容抗越大,电容越接近“断路”;频率越高,容抗越小,电容越接近“短路”。低频时电容阻抗大,信号大部分落在电容两端,输出接近输入;高频时电容阻抗小,高频信号被电容旁路到地,输出大幅衰减。

这就构成了一个频率相关的分压器。电阻和电容构成分压网络,输出取自电容两端。低频时电容分到的电压大,高频时电容分到的电压小——一个低通滤波器的行为就此形成。

3.2 截止频率的计算与设计实例

任何滤波器设计,第一步都是确定截止频率。RC低通的截止频率计算方式极为简单:

f_c = 1 / (2πRC)

我做一个具体的计算示例。假设我们要为一个温度传感器设计输入滤波,传感器输出信号的变化频率最高约10 Hz,外部干扰主要是50 Hz工频及其谐波。我希望在50 Hz处有明显衰减,但同时保证10 Hz以内的信号不受影响。

取10 Hz为信号的最高有效频率,那截止频率可以取10-30 Hz之间。为了在50 Hz处获得足够衰减,截止频率取低一些会更好。我选30 Hz作为截止频率,反推参数:

如果取C = 1μF,则R = 1 / (2π × 30 × 1×10⁻⁶) ≈ 5305 Ω,取标准值5.1 kΩ。校验实际截止频率:

f_c = 1 / (2π × 5100 × 1×10⁻⁶) ≈ 31.2 Hz

在50 Hz处的衰减大约是-4.3 dB左右,对于一阶滤波器来说这个衰减还不够。所以如果你遇到的问题干扰比较强,可能就得考虑二阶滤波器,甚至是有源滤波器。

二阶RC滤波器的做法是两级RC串联,但要注意两级之间的负载效应。简单串联两个相同的RC,截止频率并不是简单的一半,而是需要考虑级间影响。为了简化设计,常用运放做缓冲隔离,或者直接采用Sallen-Key结构的有源滤波器。

3.3 RC滤波的元器件选型经验

关于RC滤波器的元器件选型,我在实际调试中积累了一些经验:

  • 电阻选型:优先选金属膜电阻,温度系数低,噪声小。在高精度测量场景,尽量选1%精度甚至更高;普通数字电路里5%也能用。
  • 电容选型:最关键的一点是注意电容类型对性能的影响。C0G/NP0材质的陶瓷电容温度稳定性最好,X7R次之,X5R再次之;电解电容虽然容量大,但高频特性差、漏电流大、寿命有限,不适合用在精密滤波场景。
  • 容差与温漂:RC截止频率的精度取决于R和C的容差及温度漂移。如果R和C的精度都是5%,那么最坏情况下截止频率可能偏移接近10%。对频率精度要求高的场景,务必使用1%精度的电阻和C0G电容。

3.4 高阶滤波器的快速入门

RC滤波只有一阶时,滚降速率只有-20 dB/每十倍频程。什么意思?频率每增加10倍,衰减增加20 dB。听起来好像也行,但实际很多场景需要更陡峭的衰减特性——比如截止频率之后紧接着就是强干扰信号,一阶滤波器根本挡不住。

这时候需要高阶滤波器。每增加一阶,滚降速率增加-20 dB/每十倍频程。二阶就是-40 dB,四阶就是-80 dB。高阶滤波器可以用多个RC级联并加入运放缓冲实现,也可以用LC无源网络实现。

常见的高阶滤波器拓扑结构:

  • Sallen-Key拓扑:用运放和RC网络构成二阶滤波单元,结构简单、性能可靠,适合做低通和高通;
  • 多重反馈拓扑(MFB):在反相输入端构建RC网络,增益精度高,适合做带通和低通;
  • 巴特沃斯响应:通带内最平坦,没有纹波,是通用首选的响应类型;
  • 切比雪夫响应:通带内有等波纹,但过渡带更陡峭,允许通带纹波一定值的场景可以用;
  • 贝塞尔响应:相位线性度最好,适合对波形失真敏感的应用,但过渡带平坦度最差。

3.5 陷波器电路搭建设计要点

陷波器电路设计是所有滤波电路里最容易出偏差的一种。用双T网络实现陷波时,元件的对称性至关重要。陷波深度取决于R1=R2、C1=C2、以及反馈网络R3和C3之间的匹配程度。元件稍微不匹配,陷波深度就会大幅恶化。

我分享一个实用取值方法。假设要设计一个50 Hz陷波器:

  • 取C1 = C2 = C = 100nF,那么R1 = R2 = 1 / (2π × 50 × 100×10⁻⁹) ≈ 31.8 kΩ,取标准值33 kΩ;
  • 反馈臂R3 = (R1 + R2) / 2 ≈ 33 kΩ,C3 = 2C ≈ 200nF(用两个100nF并联)。

注意:上述取值法是工程近似,实际焊好电路后用信号发生器扫频,通常还需要微调电阻才能将陷波频率对准50 Hz。用多圈电位器替代固定电阻调试,是最省心的方法。

整个双T带阻网络放在运放的反馈回路里,构成一个有源陷波器,陷波深度可以做到-40 dB甚至更深。

4. 软件篇:数字滤波算法的层次与落地对比

硬件滤波讲完之后,接下来聊聊软件滤波。数字滤波器灵活性高、参数调整方便、不受元件容差影响,是当前嵌入式系统、信号处理领域的绝对主流。

4.1 从一阶惯性滤波到滑动窗口滤波的实现细节

软件低通滤波最常用的是一阶惯性滤波,公式前面已经写过:

y[n] = α * x[n] + (1 - α) * y[n-1]

α和截止频率之间的对应关系为:

α = 1 / (1 + 2πf_c*T) (近似)

或者更精确的计算方式涉及双线性变换。这里给出一个快速估算方式。假设采样周期T=1ms,想实现10 Hz截止频率的低通滤波,那么:

α ≈ 1 / (1 + 2π × 10 × 0.001) ≈ 0.941

α接近1意味着滤波很弱,几乎直接跟随输入。如果想增强平滑效果,把截止频率降到1 Hz:

α ≈ 1 / (1 + 2π × 1 × 0.001) ≈ 0.994

等等,这个结果看起来方向反了——α越大滤波越强?实际上不是。一阶惯性滤波的α值虽然是低通强度参数,但它的物理含义是“新采样值的权重”。α越大,新的采样值权重越大,输出越接近原始输入,滤波反而越弱。我发现自己刚学滤波的时候也经常搞混这个方向。

正确的理解方式:α表示新数据占比,1-α表示历史数据占比。α越小,历史数据权重越大,输出越平滑,但滞后也越大。所以α大小和截止频率的高低是正相关关系,α越小对应截止频率越低。

滑动窗口滤波则更直观:维护一个固定长度的缓冲区,每次输出缓冲区所有数据的平均值。窗口越长,平滑效果越强,但滞后也越明显。它本质上是一个FIR滤波器,所有系数相等。它的计算可以用增量更新的方式优化——新数据进入、旧数据退出,只需一次加法和一次减法,不用每次都重新求和。

我在STM32平台上用滑动窗口滤波处理磁编码器角度数据时,窗口大小取32点,配合10kHz采样率,效果很好。但要注意,滑动窗口对脉冲型干扰(如尖峰噪声)的抑制效果不如中值滤波,这点后面会聊。

4.2 Simulink一阶滤波模块的配置逻辑

如果你用Simulink做仿真,会发现自己搭建一阶惯性滤波器和直接用内部模块存在差异。Simulink的“Transfer Fcn”模块可以直接配置一阶低通,分子为[1],分母为[Tc, 1],其中Tc就是时间常数。

时间常数τ和截止频率f_c之间的关系是:

τ = 1 / (2πf_c)

举个例子,如果想实现10 Hz截止频率,那么τ = 1 / (2π × 10) ≈ 0.0159 秒。在Transfer Fcn模块里设置分母为[0.0159, 1]即可。

另一种更简单的方法是用“First-Order Filter”模块(如果版本支持),直接填截止频率就行,Simulink会帮你处理参数转换。

4.3 C语言ADC值滤波的三种实用策略

嵌入式世界里对ADC采样值进行软件滤波,是每个嵌入式开发者的必修课。实际应用中我常用的策略按优先级排序:

  1. 中值滤波:连续采样N次,排序后取中间值。对脉冲干扰(尖峰噪声)的抑制效果奇佳。我常取5次采样取中值,计算开销极低,对尖峰干扰效果立竿见影。但中值滤波对高斯白噪声的平滑能力不足。

  2. 滑动平均滤波:取N次采样的平均值,对随机噪声平滑效果好。我自己在ADC采样中用得最多的是16点滑动平均,配合DMA循环采样,几乎不占用CPU时间。

  3. 一阶惯性滤波+限幅:先用限幅逻辑判断当前采样值是否跳变得离谱(可能是干扰),如果跳变超过阈值就丢弃,用上一拍输出替代;否则用当前值更新。这个组合对大多数工业现场信号已经足够。

实际产品中我通常会将“滑动平均+限幅”结合使用。先做限幅去突刺,再做滑动平均平滑,最后再做一次一阶低通滤波消除残余波纹。三个环节的运算量加起来极低,在Cortex-M0上都能流畅运行。

4.4 IIR与FIR滤波器的选型逻辑

如果需求更复杂,比如要在STM32上实现带通滤波或陷波滤波,就需要用到规范的数字滤波器设计方法。IIR和FIR两条技术路线,选型逻辑如下:

IIR滤波器

核心优势是阶数低、计算量小,适合资源受限的MCU平台。它的缺点是相位非线性,对相位敏感的应用不友好,而且设计不当可能出现稳定性问题。

IIR设计中,双二阶(Biquad)结构是最常用的形式。一个二阶IIR滤波器可以用5个系数描述,级联多个Biquad就能实现高阶滤波。MATLAB中用designfilt设计好滤波器后,用tf2sos转换成级联Biquad系数,然后搬到一个C结构体里直接运行。

FIR滤波器

核心优势是线性相位(不产生波形失真)、绝对稳定。缺点是同样的过渡带要求下,阶数比IIR高得多,计算量大,内存占用多。

MCU场景里FIR滤波器常用查表法或CMSIS-DSP库的arm_fir_f32函数,利用Cortex-M4/M7的SIMD指令加速。如果你用的是STM32F4以上平台,CMSIS-DSP的FIR性能还不错,可以做到实时处理高采样率的音频信号。

一个实用的选型建议:如果只是低通平滑、去除工频干扰,优先选IIR,计算效率高;如果是对波形相位有严格要求的场景(比如ECG波形分析、音频处理),考虑FIR。

4.5 陷波滤波器的软件实现

陷波滤波器的软件实现,最方便的方式还是Biquad结构。陷波Biquad的系数可以直接从标准公式推导,也可以用MATLAB快速生成。这里以50 Hz陷波为例,假设采样率为500 Hz:

fs = 500; f0 = 50; bw = 5; % 陷波带宽 [b, a] = iirnotch(f0/(fs/2), bw/(fs/2)); sos = tf2sos(b, a);

把生成的sos系数转成C数组后,在MCU里用一个Direct Form II Transposed结构实现。这个结构数值稳定性好,Biquad级联时不容易溢出。

Biquad核心的C语言实现如下(三段式命运结构,我一直在用):

typedef struct { float b0, b1, b2; float a1, a2; float x1, x2; float y1, y2; } biquad_t; float biquad_process(biquad_t *f, float x) { float y = f->b0 * x + f->x1; f->x1 = f->b1 * x - f->a1 * y + f->x2; f->x2 = f->b2 * x - f->a2 * y; f->y1 = y; f->y2 = f->y1; return y; }

提示:Biquad运行时务必使用float类型,在某些定点MCU上如果硬件FPU不可用,用Q15格式配合CMSIS-DSP的arm_biquad_cascade_df1_f32函数计算,效率更高。

陷波滤波器带宽的选择很有讲究。带宽太窄,陷波深度足够,但中心频率稍有偏移就失去效果;带宽太宽,又会对目标信号造成过度损伤。以心电信号去除50Hz工频为例,我通常取带宽3-5 Hz,既能有效抑制工频,又不会过多影响心电信号的QRS波群。

5. 实测场景:从零搭建一个ECG信号调理链路

前面讲了不少原理和方法,接下来我把它们串到一个完整的实测场景里,这会帮助你建立“滤波器系统集成”的感觉。以目前工程中很常见的生物电采集项目为例——心电信号采集。

5.1 信号链路中的滤波器排布次序

ECG信号采集系统,从电极到ADC之间,滤波器按顺序排列大致如下:

  1. 前端模拟低通抗混叠:一阶RC低通,截止频率设100 Hz,滤除高频电磁干扰,防止混叠;
  2. 模拟高通:截止频率0.05 Hz左右,去除电极极化电压和基线缓慢漂移;
  3. ADC数字化之后:50 Hz数字陷波,去除工频干扰;
  4. 数字低通:截止频率40 Hz(或100 Hz,取决于诊断标准),进一步滤除带外噪声。

这个链路里的滤波器相辅相成,各有各的任务。如果前端模拟滤波做得足够好,数字端的陷波负担就会减轻;如果数字端陷波带宽设置得当,模拟端的成本可以降低。整体设计需要在性能和成本之间做权衡。

5.2 50Hz工频干扰的去除:模拟陷波还是数字陷波?

这是我在ECG项目调试中被问到最多的问题之一。模拟陷波和数字陷波各有优劣:

维度模拟陷波数字陷波
陷波频率精度受元件容差影响大,需要校准精确,由采样率和系数决定
温度漂移明显
增加硬件成本需要额外运放和RC网络只需软件开销
引入噪声运放自身噪声不引入模拟噪声
相位影响模拟电路相位滞后IIR相位非线性,FIR可线性

我的实践结论是:在MCU资源允许的情况下,优先用数字陷波。原因很简单——陷波频率的精度和稳定性在现代嵌入式系统里太重要了。模拟陷波哪怕做到1%的精度,对于50 Hz陷波来说也有±0.5 Hz的偏移,而工业现场的工频往往有微小漂移,稍一偏移效果就大打折扣。

数字陷波实现后还有一个隐藏优势:可以通过简单的参数修改,随时调整陷波频率和带宽,甚至在运行中动态追踪工频频率的变化。

5.3 从频谱图判断滤波效果的实操方法

滤波器调好之后,怎么判断它到底工作得怎么样?不能靠“感觉”,要看数据。我的工作流程如下:

  • 在采集到的带噪信号上做FFT,观察频谱结构,确定主要干扰的频率位置;
  • 逐一加入各滤波器,每加一级就做一次FFT,对比频谱变化;
  • 最终整体评价滤波性能,确认通带内信号无明显衰减,阻带内干扰被明显压制。

如果你在嵌入式设备上没有MATLAB可用,可以用Python的numpy.fftmatplotlib快速完成同样的工作,或者用串口把采集到的原始波形发到PC上离线分析。只要数据量够大、采样率合适,频谱图能告诉你滤波器是否工作正常。

一个非常实用的技巧:滤波效果的验证不能只看滤波后的时域波形是不是“平了”,要看FFT频谱中目标频率分量是否确实衰减。因为时域波形平缓解感强,但真正的干扰抑制效果需要用频谱来判断。

6. 选型实战:走向稳定可靠滤波方案的思维框架

滤波器设计的核心不是会算公式、会调参数,而是面对一个具体工程问题时,能快速确定该用哪种拓扑、放到链路哪个位置、参数怎么定。这个判断力只能通过反复实践积累,但下面几个通用思维框架可以帮你少走弯路。

6.1 一句话决策:该用低通、高通、带通还是陷波?

按需选择的核心判断流程,我总结为四句口诀:

  • 信号是慢变化、干扰是高频的 → 用低通;
  • 信号是快变化、干扰是低频漂移/直流的 → 用高通;
  • 目标信号只占据某一段频率 → 用带通;
  • 干扰只占据某一个窄频段(如50Hz工频) → 用陷波。

这个判断流程看起来平淡无奇,但真正在工程现场,我发现很多人第一反应是“这里噪声很大,直接低通”,结果把有用信号也滤没了。正确做法是:先摸清信号和干扰各自占据的频段,再选择对应类型的滤波器。

6.2 截止频率的参数选择原则:如何抓住信号和噪声的频段分界

确定截止频率,是整个滤波器设计里最容易出错的环节。以下是几条源于实际操作经验的原则:

  • 截止频率不能选在信号有效频带的边缘。如果信号最高频率是10 Hz,截止频率起码取20-30 Hz,留出一倍以上的裕量,保证通带平坦区域的相位和幅度特性。
  • 低通截止频率不能太高也不能太低。太高会放过更多噪声,太低会导致信号本身被衰减。一个折中的办法是:在后处理阶段用软件补偿幅度衰减,降低对模拟硬件的苛刻要求。
  • 陷波带宽取决于干扰的稳定性。干扰频率准确且稳定时,带宽可以设窄一点;干扰会漂移时,带宽要适当放宽,以容忍频率偏移。

以RC低通为例,当截止频率恰好等于信号最高频率时,信号在该频率处的幅度已经衰减到0.707倍(-3 dB),相位也有明显偏移,这会直接影响测量精度。所以必须留出足够的带宽裕量。

6.3 前端硬件滤波与后端软件滤波的合理分工

这是很多工程师容易陷入误区的地方。硬件滤波贵、占面积、还要调试,软件滤波简单、灵活、零成本,那是不是全用软件滤波就行?

我的观点是:硬件滤波和软件滤波各有不可替代的位置,合理的分工方案是这样的:

  • ADC之前必须有抗混叠滤波(硬件):采样定理告诉我们,超过采样率一半的频率成分会“混叠”回低频段,这是软件无法修复的,必须在采样之前物理滤除。抗混叠滤波的截止频率通常设在采样率的1/4到1/8之间,用一阶或二阶RC就能实现。
  • 大能量高频干扰优先在硬件侧处理:如果前端有强射频干扰或者高频浪涌,会直接导致放大器饱和、ADC输入超量程。这种情况指望软件滤波毫无意义,必须硬件先压制。
  • 窄带干扰(如50Hz)适合软件处理:硬件陷波器对元件匹配要求高,调试繁琐。相比之下,数字陷波的精确性和稳定性优势明显。
  • 基线漂移适合在高精度ADC采样后用软件高通处理:因为漂移的频段极低,用数字高通可以做到极低截止频率且无电容漏电问题。

6.4 我常用的选型速查表

最后把我在项目中经常翻看的选型速查表分享出来,它凝结了我多年设计经验,对刚接触滤波的人尤其有用:

场景推荐方案重要参数提示
传感器模拟输入去噪一阶RC低通+软件滑动平均RC截止频率设为信号最高频率的2-5倍
ADC采样值平滑滑动平均窗口或一阶惯性滤波窗口大小16-32点,干扰强时加大到64点
去除传感器基线漂移数字高通(一阶IIR即可)截止频率0.5 Hz以下
去除50Hz工频干扰数字Biquad陷波带宽3-5 Hz,Q值约10-15
音频去直流模拟RC高通,截止2-5 Hz注意电容漏电和低频相位
振动信号特征提取带通(巴特沃斯二阶以上)通带按机械特性确定,注意过渡带宽度
电源噪声滤除LC低通或CLC派型滤波注意电感的饱和电流和ESR影响

这张表不是标准答案,但它覆盖了工程中80%以上的常见滤波需求。当你积累了足够的经验后,你会形成自己的选型习惯,那时方案会比这张表更贴合你的具体场景。

6.5 滤波参数调试的五个坑位

下面这五个问题,是我在项目调试中反复遇到的,每一个都让人头疼:

  • SPICE仿真跑得通,实板差异大。原因是器件模型没有包含PCB寄生参数。高频段尤其明显,解决方法是预留调试位,用0Ω电阻或跳线方便切换参数。
  • 滤波器接入后信号幅度变小了。大概率是截止频率选得太低,把有用信号也滤掉了。用扫频法测量实际频响曲线,确认-3 dB点的位置。
  • 陷波器衰减深度不够。模拟陷波常见原因是元件不对称,数字陷波常见原因是带宽太窄、中心频率偏了。逐一排查,先确认频率对准,再查元件匹配。
  • 数字滤波算法在MCU上运行卡顿。IIC或IIR的阶数设得太高了,想办法降低采样率、减少滤波级联数量,或者改用定点运算。
  • 滤波后的信号相位滞后严重。IIR滤波器的相位非线性会让人困惑,实时性要求高的场景考虑FIR,或者使用零相位滤波(离线处理时用filtfilt)。

7. 案例推演与周边工具集

单独理解每种滤波器,和把它们组合应用,是完全不同的境界。下面通过两个综合案例来收个尾,顺带整理一下我常用的周边工具。

7.1 综合案例一:STM32磁编码器信号处理

用STM32F103 HAL库模拟I2C读取MT6701磁编码器,这个任务我在实际项目里做过。磁编码器输出的角度数据并非直接可用,原因主要有:

  • 电机转动时的电磁干扰会耦合到I2C信号线上,造成偶发的读值跳变;
  • 编码器本身输出会有微小的非线性纹波;
  • 机械振动会产生高频抖动。

我最终采用的滤波链路是:I2C读值→限幅滤波(单步角度变化超限则用上次值)→滑动平均(窗口16)→一阶低通(截止频率约20 Hz)。

有意思的是,单纯增加滑动平均窗口长度并不能无限改善效果,窗口过长会引入明显的滞后,导致电机控制环路不稳定。实际调试时需要观察角度反馈和控制指令之间的相位延迟,找到一个平衡点。

7.2 综合案例二:ECG信号链路中的陷波与低通配合

心电采集系统里,同时存在低通和陷波的实际需求。一个常见问题是:先做低通还是先做陷波?

我的建议是先做低通再做陷波。理由是这样的:信号中可能存在比50Hz更高的噪声,先用低通把它们滤除,可以避免这些高频噪声干扰后续陷波器对频率的判断和衰减效果。实际处理流程:

  1. 前端抗混叠低通100 Hz;
  2. 数字端40 Hz(或100 Hz)低通;
  3. 数字 50 Hz 陷波;
  4. 基线漂移高通0.5 Hz。

这个顺序经过多次验证,效果稳定。如果你把陷波放在最前面,后面的低通滤波器反而可能拉低陷波频段的相位特性,但实际问题不大;关键还是要在测试时多对比几种顺序的实测波形。

7.3 快速反向定位滤波器问题的检查清单

当你遇到“加了滤波器反而更差”的情况,可以按以下顺序快速定位问题:

  • [ ] 滤波器类型选对了吗?信号和干扰的频谱真的摸清了吗?
  • [ ] 截止频率是否靠近信号有效频带?
  • [ ] 数字滤波器系数是否计算准确?用正弦波扫频验证输入输出增益。
  • [ ] 模拟滤波器是否受前后级阻抗影响?前后级匹配是否考虑了?
  • [ ] 有没有混叠问题?ADC前的抗混叠滤波是否足够?
  • [ ] 相位滞后是否影响了系统闭环稳定性?

这份清单在我排查问题时用得很顺手。很多时候你以为的“滤波问题”,往上一层会发现其实是采样率没选好,或者放大电路已经饱和了。滤波只是信号链路上的最后一环,前级的问题不解决,后级再努力也白搭。

7.4 经常用到的软件与仿真工具

最后简单整理一下我常用的工具链,按用途分类:

  • 离线分析:Python(numpy, scipy, matplotlib),用buttercheby2iirnotch等函数快速完成滤波器设计和验证,用freqz画频响曲线;
  • 嵌入式生成系数:MATLAB的designfilttf2sos,把设计好的滤波器转换成Biquad系数C数组,直接搬到MCU工程里使用;
  • 电路仿真:LTspice的AC扫描分析功能,可以快速验证电路频率响应;
  • 在线调试验证:我用串口或J-Link RTT把原始信号实时发到PC上,配合Python处理代码,实现环路参数快速迭代。

在STM32上,CMSIS-DSP库是必须熟练掌握的。arm_biquad_cascade_df1_f32arm_fir_f32arm_mean_f32这三个函数,能让滤波计算效率提升数倍。

我个人对滤波器设计还有一个很重要的操作习惯:在最终方案定型前,一定要准备一个“滤波效果验证数据包”——包含原始信号、加入干扰后的信号、滤波后的信号,以及对应的FFT频谱图。这组数据既是你设计决策的依据,也是和同事沟通设计方案的利器。

滤波器这个领域看起来门槛高,其实真正实践起来没那么神秘。从最简单的RC低通入手,理解频域思维,再逐步接触高阶和数字滤波,你会慢慢发现自己看问题的角度在变化——不再盯着波形的起伏发呆,而是下意识地把每一个信号变化翻译成频谱上有意义的成分分布。当你有能力在频谱图上“看见”信号和噪声的位置时,滤波器选型靠的就是直觉和经验,甚至不需要查太多资料。希望这篇文章能帮你迈出那一步。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询