Savitzky-Golay (SG)滤波器是一种用于时间序列数据平滑和降噪的数字信号处理技术,它通过将多项式函数拟合到数据的一小部分来估计噪声数据中潜在的趋势或模式。SG滤波器的工作原理是在数据上滑动一个窗口,在每个位置,对窗口内的点拟合一个多项式。窗口的中心点被由多项式拟合估计的值所取代。这个过程对数据中的每个点重复,有效地平滑和减少噪声。
在Python中,可以使用scipy.signal.savgol_filter
函数来实现Savgol滤波器。该函数的参数包括输入数据、窗口长度、多项式拟合阶数等。
import numpy as np
from scipy.signal import savgol_filter
import matplotlib.pyplot as plt
# 生成含噪声的测试信号
x = np.linspace(0, 2 * np.pi, 100)
y = np.sin(x) + np.random.normal(0, 0.1, x.size)
# 使用Savgol滤波器进行平滑处理
window_size = 11 # 窗口大小,必须为奇数
poly_order = 2 # 多项式拟合阶数
y_smooth = savgol_filter(y, window_size, poly_order)
# 绘制原始数据和平滑后的数据
plt.plot(x, y, label='Noisy Signal')
plt.plot(x, y_smooth, label='Smoothed Signal', color='red')
plt.legend()
plt.show()
相比其他平滑技术如移动平均线,Savgol滤波器能够更好地保留数据的形状和特征,包括峰值和谷值等重要细节,因此在处理时间序列数据时,能够更准确地反映数据的真实趋势。
通过上述步骤和示例,可以看到Savgol滤波器不仅易于实现,而且能够有效提高数据分析的质量,特别是在需要精细处理数据的情况下。
领取专属 10元无门槛券
手把手带您无忧上云