Savitzky-Golay滤波器和sEMA(对称指数Moving Average)两个方法之间的区别与示例代码

Savitzky-Golay 滤波器和对称指数移动平均(sEMA)是两种不同的平滑方法。它们各有优缺点,适用于不同的应用场景。

Savitzky-Golay 滤波器

Savitzky-Golay 滤波器是一种通过多项式拟合进行平滑的方法。它可以在保持信号整体趋势和结构的情况下减少噪声,适用于需要保留信号峰值和细节的场景。

代码实现
import numpy as np
from scipy.signal import savgol_filter

def savitzky_golay_filter(data, window_length=5, polyorder=2):
    """
    使用 Savitzky-Golay 滤波器平滑数据
    :param data: 输入的一维数据数组
    :param window_length: 滤波器窗口长度,必须为奇数
    :param polyorder: 拟合多项式的阶数
    :return: 平滑后的数据
    """
    return savgol_filter(data, window_length, polyorder)

对称指数移动平均(sEMA)

对称指数移动平均(sEMA)是一种平滑时间序列数据的简单方法,通过对当前数据点和之前的平滑结果进行加权平均来消除噪声。

代码实现
import numpy as np

def sEMA(data, alpha=0.1):
    """
    对称指数移动平均(sEMA)滤波器
    :param data: 输入的一维数据数组
    :param alpha: 平滑因子,范围在0到1之间
    :return: 平滑后的数据
    """
    sEMA_data = np.zeros_like(data)
    sEMA_data[0] = data[0]
    for t in range(1, len(data)):
        sEMA_data[t] = alpha * data[t] + (1 - alpha) * sEMA_data[t - 1]
    return sEMA_data

示例

下面是一个简单的示例,展示如何使用这两个函数对相同的数据进行平滑处理:

import numpy as np
import matplotlib.pyplot as plt

# 生成示例数据
np.random.seed(0)
t = np.linspace(0, 2 * np.pi, 100)
data = np.sin(t) + np.random.normal(0, 0.1, t.shape)

# 使用 Savitzky-Golay 滤波器
smooth_data_sg = savitzky_golay_filter(data, window_length=11, polyorder=2)

# 使用 sEMA 滤波器
smooth_data_sema = sEMA(data, alpha=0.1)

# 绘制原始数据和平滑后的数据
plt.figure(figsize=(10, 6))
plt.plot(t, data, label='Original Data', alpha=0.5)
plt.plot(t, smooth_data_sg, label='Savitzky-Golay Filtered Data')
plt.plot(t, smooth_data_sema, label='sEMA Filtered Data')
plt.legend()
plt.show()

区别

  • Savitzky-Golay 滤波器:

    • 优点: 能够在平滑数据的同时保留信号的峰值和细节。
    • 缺点: 参数选择(窗口长度和多项式阶数)需要根据数据特点调整,计算复杂度相对较高。
  • sEMA 滤波器:

    • 优点: 简单易实现,计算效率高。
    • 缺点: 平滑效果相对较弱,可能无法很好地保留信号的细节。

这两种方法各有优缺点,具体选择哪一种方法需要根据数据的特点和实际应用场景来决定。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值