基础滤波#
基础滤波算法用于去除信号中的噪声、平滑数据或提取特定频率成分。
线性滤波#
线性滤波通过卷积运算处理信号,输出是输入的加权和。
移动平均滤波 (Moving Average Filter)#
算法思路#
移动平均滤波将窗口内的数据点求平均,用平均值替代当前点,从而平滑高频噪声。该滤波器属于有限冲激响应 (FIR) 滤波器。窗口越大,平滑效果越强,但信号延迟也越大。
数学公式#
设输入信号为 \(x[n]\),窗口大小为 \(N\),输出为 \(y[n]\):
也可以写成卷积形式:
其中离散脉冲响应为:
参数说明#
| 参数 | 含义 | 建议范围 |
|---|---|---|
| \(N\) | 窗口大小 | 3~20,根据噪声强度与采样率调整 |
| \(N\) 越大 | 平滑效果越强 | 噪声较大、信号变化慢时取大值 |
| \(N\) 越小 | 响应速度越快 | 信号变化快、实时性要求高时取小值 |
限制#
- 相位延迟:由于是一阶因果系统,窗口越大延迟越大,群延迟约为 \(\frac{N-1}{2}\) 个采样点。
- 边缘效应:信号开头的 \(N-1\) 个点无法完全滤波,需要进行 Padding(如零填充、边界复制等)。
- 信号失真:由于对所有点一视同仁,会严重平滑掉信号中的有用尖峰或快速阶跃成分。
低通滤波 (Low-Pass Filter)#
算法思路#
一阶低通滤波(亦称指数平滑)允许低频信号通过,抑制高频噪声,属于无限冲激响应 (IIR) 滤波器。当前输出是当前输入与上一次输出的加权平均。
数学公式#
一阶低通滤波的递推形式:
其中 \(\alpha \in (0, 1]\) 是平滑系数。它由连续一阶系统 \(\tau \frac{dy}{dt} + y = x\) 经后向差分时域离散化得到,系数关系为:
其中 \(\Delta t\) 为采样周期,\(\tau\) 为系统时间常数。截止频率 \(f_c\) 的精确计算公式为:
注意:当 \(\alpha \ll 1\) 时,可近似为 \(f_c \approx \frac{\alpha}{2\pi \Delta t}\)。
参数说明#
| 参数 | 含义 | 建议范围 |
|---|---|---|
| \(\alpha\) | 平滑系数 | 0.01~0.5 |
| \(\alpha\) 越小 | 截止频率越低,平滑越强 | 噪声严重、允许延迟时取小值 |
| \(\alpha\) 越大 | 截止频率越高,响应越快 | 需要跟踪快速变化时取大值 |
限制#
- 相位滞后:低通滤波会带来明显的动态相位延迟。
- 建立时间:面对阶跃输入时,需要约 \(\frac{3}{\alpha}\) 个采样点才能达到稳定值的 95% 左右。
- 频带重叠无法分离:若有用信号与噪声的频带重叠,低通滤波会在去噪的同时严重削弱信号。
高通滤波 (High-Pass Filter)#
算法思路#
一阶高通滤波允许高频成分通过,抑制低频漂移和直流分量。常用于消除传感器基线漂移、趋势项或零点偏置。
数学公式#
一阶高通滤波的递推形式为:
其对应的 Z 传递函数为:
其中 \(\alpha = \frac{\tau}{\tau + \Delta t}\)。截止频率 \(f_c\) 与 \(\alpha\) 的关系为:
参数说明#
| 参数 | 含义 | 建议范围 |
|---|---|---|
| \(\alpha\) | 滤波系数 | 0.80~0.99 |
| \(\alpha\) 越大 | 截止频率越低,保留更多低频 | 仅需去除极低频(如基线漂移)时取大值 |
| \(\alpha\) 越小 | 截止频率越高,滤除更多低频 | 需要提取高频突变或完全剔除低频趋势时取小值 |
限制#
- 放大高频噪声:高通特性会导致输入信号中的高频随机噪声被进一步放大。
- 边界跳变敏感:在信号初始阶段或输入突变时,输出端会出现较大的暂态跳变。
- 数值累积误差:递推结构对浮点数精度有一定要求,极长期运行可能存在微小的数值漂移。
高斯滤波 (Gaussian Filter)#
算法思路#
高斯滤波使用高斯概率密度函数构建卷积核。相比于移动平均的均匀权重,高斯核的权重从中心向边缘呈指数衰减,能在平滑噪声的同时,更好地保留信号的中心特征与边缘轮廓。
数学公式#
一维未归一化的高斯核权重为:
为了保证信号总能量不变,必须进行归一化处理:
滤波输出为:
为了完整覆盖高斯分布的绝大部分能量(\(\pm 3\sigma\) 窗口),通常定义滤波核的宽度 \(N = 2k + 1\),其中 \(k = \lceil 3\sigma \rceil\)。
参数说明#
| 参数 | 含义 | 建议范围 |
|---|---|---|
| \(\sigma\) | 高斯标准差(决定核的平滑宽度) | 0.5~5.0 |
| \(\sigma\) 越大 | 权重向两侧扩散,平滑效果越强 | 噪声分布较广时取大值 |
| \(\sigma\) 越小 | 权重向中心集中,保边性越好 | 需保留波形细节与边缘时取小值 |
限制#
- 计算复杂度高:属于滑动窗口卷积,单点计算量为 \(O(N)\),窗口较大时比一阶 IIR 滤波器更耗时。
- 边缘信息模糊:若 \(\sigma\) 选取过大,波形的尖峰与突变边缘仍会被不可逆地模糊。
非线性滤波#
非线性滤波不满足线性系统的叠加原理,通常基于排序、统计等非线性映射操作。
中值滤波 (Median Filter)#
算法思路#
中值滤波在滑动窗口内对所有数据点进行排序,并输出序列的中位数。它对脉冲噪声(如椒盐噪声、离群点 Outlier) 具有极强的抑制能力,因为极端异常值在排序时会被移到序列的两端,无法影响中位数的输出。
数学公式#
设窗口大小为 \(N\)(通常为奇数 \(N = 2k + 1\)),输入信号为 \(x[n]\):
参数说明#
| 参数 | 含义 | 建议范围 |
|---|---|---|
| \(N\) | 窗口大小 | 3~11(必须为奇数) |
| \(N\) 越大 | 抑制连续脉冲或大幅度离群值的能力越强 | 异常值密集时取大值 |
| \(N\) 越小 | 信号边缘与尖峰细节保持得越好 | 异常值稀疏、需保留突变时取小值 |
限制#
- 单点计算复杂度:标准实现的滑动窗口单点排序复杂度为 \(O(N \log N)\),在大窗口下运行效率低于线性滤波。
- 真实尖峰被抹杀:若信号本身带有合理的窄脉冲(如心电信号的 QRS 波),中值滤波会将其误认为噪声并直接剔除。
- 引起波形阶梯化:频繁使用大窗口中值滤波会导致平滑的斜坡信号变成不连续的“阶梯”状。
参数调优指南#
通用调试对策#
| 滤波异常现象 | 可能原因 | 调整方向 |
|---|---|---|
| 滤波后仍有高频白噪声 | 截止频率过高或窗口太小 | 增大窗口 \(N\) / 减小低通 \(\alpha\) / 增大高斯 \(\sigma\) |
| 滤波后信号波形延迟、滞后严重 | 滤波响应过慢、相位滞后大 | 减小窗口 \(N\) / 增大低通 \(\alpha\) |
| 基线漂移、缓慢趋势未能除尽 | 高通截止频率太低 | 减小高通 \(\alpha\)(提升截止频率) |
| 突发性尖峰/毛刺噪声无法消除 | 线性滤波对离群点钝感 | 引入中值滤波,并适当加大中值窗口 \(N\) |
| 波形边缘、陡峭阶跃被严重模糊 | 过度平滑 | 减小高斯 \(\sigma\) 或缩小移动平均窗口 \(N\) |
场景选型矩阵#
| 目标应用场景 | 噪声特点 | 推荐滤波器 | 选型理由 |
|---|---|---|---|
| 白噪声平滑 | 连续、高频随机噪声 | 移动平均滤波 | 结构最简单,对平稳噪声有很好的均值抑制作用。 |
| 微控制器实时去噪 | 内存有限、实时性要求极高 | 一阶低通滤波 | 空间复杂度 \(O(1)\),无需缓存历史数组。 |
| 保留波形特征的平滑 | 传统平滑容易导致峰值塌陷 | 高斯滤波 | 钟形权重分配,中心点响应高,兼顾平滑与保真。 |
| 去除工业刺针、离群点 | 脉冲、椒盐噪声、传感器偶发跳变 | 中值滤波 | 非线性统计特性,可 100% 免疫孤立离群点。 |
| 消除传感器零漂/基线起伏 | 缓慢的直流漂移或低频呼吸干扰 | 一阶高通滤波 | 有效截断低频直流成分,快速恢复动态基线。 |
参考实现#
具体代码仿真与对比验证见:01.basic_filters_sim.ipynb。