问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

滤波入门:从零开始理解滤波

创作时间:
作者:
@小白创作中心

滤波入门:从零开始理解滤波

引用
CSDN
1.
https://blog.csdn.net/navsense_support/article/details/146210928

滤波是信号处理中的一个重要概念,它的目的是去除数据中的噪声,提取有用的信息。本文将从零开始,详细介绍四种基本的滤波方法:均值滤波、中值滤波、指数滤波和高斯滤波。通过理论解释、数学公式、示例代码和优缺点对比,帮助读者理解滤波的基本概念和应用场景。

1. 什么是滤波?

滤波(Filtering)是信号处理中的一个重要概念,它的目的是去除数据中的噪声,提取有用的信息。在很多应用场景中(如传感器数据处理、室内定位、图像处理等),原始数据通常会受到外部环境的干扰,导致数据波动较大,影响后续计算和分析。滤波技术能够减少这些误差,使数据更加平滑、稳定、精准。

1.1 滤波的作用

  • 去除噪声:减少数据中的随机波动,使信号更加稳定。
  • 平滑数据:在轨迹计算、姿态估计等应用中,滤波可以消除突变点,使曲线更平滑。
  • 提高定位精度:在 GNSS、UWB、WiFi、蓝牙等定位系统中,滤波可以减少信号的干扰,提高定位准确性。
  • 优化传感器数据:如加速度计、陀螺仪的数据通常有噪声,滤波可以使数据更接近真实值。

2. 最简单的滤波:均值滤波

均值滤波(Mean Filtering)是最基础、最容易理解的滤波方法。

2.1 均值滤波的原理

它的基本思想是取某个时间窗口(或区域)内的数据的平均值,然后用这个均值代替当前值,从而减少数据中的高频噪声,使数据更平滑。

数学表达式

其中:

  • N是窗口大小(如 3、5、7)。
  • x(j) 是原始数据。
  • y(i) 是滤波后的数据。

示例

假设有一组传感器数据: x=[10,12,14,50,16,15,14,13]

使用窗口大小 N=3 进行均值滤波:

  • 未滤波数据(包含异常值 50):10,12,14,50,16,15,14,13
  • 滤波后数据(50 被平滑):11,12,25.33,26.66,27,15,14,13

优点

✅ 计算简单,适用于大多数数据平滑场景。
✅ 在信号变化较平稳的环境下效果较好。

缺点

对突变噪声(如 50 这样的离群值)不够鲁棒,容易被极端值拉偏。
会导致信号延迟,特别是窗口变大时,滤波后的数据可能滞后于真实值。

3. 解决极端值问题:中值滤波

中值滤波(Median Filtering)是一种比均值滤波更鲁棒的方法,特别适用于有突变噪声的情况

3.1 中值滤波的原理

与均值滤波不同,中值滤波不计算均值,而是取窗口内数据的中位数,这样就能有效去除突变噪声。

数学表达式

其中:

  • median 表示取中位数,即排序后的中间值。

示例

假设原始数据: x=[10,12,14,50,16,15,14,13]

使用窗口大小 N=3 进行中值滤波:

窗口滑动计算如下:

  • 未滤波数据(包含异常值 50):10,12,14,50,16,15,14,13
  • 中值滤波后数据(50 被替换成相邻的中位数):10,12,14,16,16,15,14,13

优点

对突变噪声(如 50 这样的异常值)更鲁棒,不会像均值滤波一样被极端值影响。
适用于非正态分布数据(即数据分布不均匀的情况)。

缺点

无法平滑随机噪声,如果噪声是高斯分布(均匀分布的噪声),均值滤波可能更合适。
计算稍复杂,需要对窗口内数据排序。

4. 指数滤波(Exponential Filtering)

指数滤波(Exponential Filtering)是一种加权的均值滤波,它的特点是越新的数据权重越大,可以减少数据延迟的问题。

4.1 指数滤波的原理

在计算新数据点时,不是取简单平均,而是按照指数衰减赋予新数据更高的权重

其中:

  • α 是平滑因子(0 < α < 1),决定了新旧数据的权重:
  • α 越大,新数据的影响越大,反应更灵敏。
  • α 越小,平滑效果更明显,但数据更新较慢。
  • x(i) 是当前数据,y(i−1) 是上一时刻的滤波值。

示例

设原始数据: x=[10,12,14,50,16,15,14,13] 取 α=0.3:

y(1)=10
y(2)=0.3×12+0.7×10=10.6
y(3)=0.3×14+0.7×10.6=11.62

优点

不会产生明显的信号延迟,比均值滤波快。
可以调整平滑因子 α\alphaα 来控制平滑程度

缺点

对剧烈变化的数据仍然可能滞后,例如瞬间跳变的信号。

5. 高斯滤波(Gaussian Filtering)

高斯滤波(Gaussian Filtering)是一种更加平滑的滤波方法,它对数据的影响是基于高斯分布进行加权的。

5.1 高斯滤波的原理

  • 计算方式类似均值滤波,但加权方式不同,使用高斯函数进行加权:
  • 类似于均值滤波和中值滤波,高斯滤波也使用滑动窗口(通常为 3×3、5×5、7×7),但窗口内的数据加权不同。
  • 权重由高斯函数决定,而不是简单的均值计算。

5.2 计算高斯加权值

窗口内的值并不是等权相加,而是根据高斯函数计算权重

例如,窗口大小 N=3,对应的高斯权重矩阵(核)可能是:

权重中心最大,远离中心的数值权重逐渐降低

  1. 将窗口内的数据与对应的高斯权重矩阵相乘。
  2. 计算所有数值的加权平均,作为新的数据值。
  3. 用计算出的新值替换窗口中心的原值。

5.3 具体示例

我们使用相同的窗口大小 3,原始数据:

x=[10,12,14,50,16,15,14,13]

第一步:选取窗口

  • 例如在窗口[10, 12, 14]里,我们用高斯权重进行加权平均计算:
    (10×0.06+12×0.098+14×0.06)/(0.06+0.098+0.06)
    最终得到新的值**≈12**。

第二步:计算窗口内数据的高斯加权均值

对于包含50的窗口:

  • 原始窗口:[12, 14, 50]
  • 高斯加权后: (12×0.06+14×0.098+50×0.06)/(0.06+0.098+0.06)=16.7

为什么高斯滤波比均值滤波好?

  • 减少异常值的影响
  • 均值滤波 直接计算均值,容易被极端值拉偏,如 50 导致均值 25.33。
  • 高斯滤波 给予中心点更高权重,使得 50 影响降低,最终数值只是 16.7,保留了更多的真实信息。
  • 平滑效果更好
  • 均值滤波 可能会导致数据突然变化,高斯滤波可以让数据平滑过渡,不会突变。
  • 不会导致过度平滑
  • 均值滤波 可能会导致细节信息丢失,而高斯滤波能够保留更多特征信息。

优点

效果比均值滤波更好,能去除高频噪声,同时保留信号的关键特征。
适用于图像、轨迹数据的平滑处理

缺点

计算量比均值滤波大,不适用于对实时性要求较高的系统。

四种方法优缺点

代码实现

# 1. 均值滤波(Mean Filter)
def mean_filter(signal, window_size=3):
    return np.convolve(signal, np.ones(window_size)/window_size, mode='same')

# 2. 中值滤波(Median Filter)
def median_filter(signal, window_size=3):
    return np.array([np.median(signal[max(0, i - window_size//2): min(len(signal), i + window_size//2 + 1)]) 
                     for i in range(len(signal))])

# 3. 指数滤波(Exponential Filter)
def exponential_filter(signal, alpha=0.3):
    filtered = np.zeros_like(signal)
    filtered[0] = signal[0]  # 初始化第一个值
    for i in range(1, len(signal)):
        filtered[i] = alpha * signal[i] + (1 - alpha) * filtered[i - 1]
    return filtered

# 4. 高斯滤波(Gaussian Filter)
def gaussian_filter(signal, sigma=1):
    return gaussian_filter1d(signal, sigma)
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号
滤波入门:从零开始理解滤波