Savitzky-Golay(SG)滤波器是一种在时域内基于局域多项式最小二乘法拟合的滤波方法,它最初由Savitzky A和Golay M于1964年提出,并广泛应用于数据流平滑除噪。
基本介绍
一、基本原理
SG滤波器通过在滑动窗口内拟合多项式来平滑数据,从而在去除噪声的同时,最大程度地保留了数据的细节和峰值。具体来说,它会在信号上选择一个固定大小的滑动窗口,并在每个窗口内使用多项式(通常是低阶多项式)对数据进行拟合。通过计算拟合得到的多项式在窗口中心点的值,作为该点的滤波结果。这样,通过移动窗口并重复上述过程,可以实现对整个信号的平滑处理。
二、特点与优势
- 保持信号形状和宽度:SG滤波器最大的特点在于在滤除噪声的同时确保信号的形状和宽度不变。
- 优于标准平均值FIR滤波器:在某些应用中,SG滤波器的性能优于标准平均值FIR滤波器,后者往往会将高频成分随噪声一起滤除。而SG滤波器在保留高频信号分量方面更为有效。
- 处理边缘数据:与移动平均相比,SG滤波器不仅能够更好地处理窗口边界的数据,还能在平滑过程中保持信号的整体形态。
三、应用场景
SG滤波器在信号处理、光谱分析、图像处理等领域中得到了广泛的应用。例如,在光谱分析中,SG滤波器常用于平滑滤波,以提高光谱的平滑性并降低噪音的干扰。此外,它还可以用于时间序列数据平滑、去噪以及信号分析等领域。
四、关键参数与选择
SG滤波器的关键参数包括窗口宽度(window length)和多项式阶次(polyorder)。
- 窗口宽度:决定了在每个位置用于拟合多项式的邻近点的数量。较大的窗口宽度可以更有效地去除噪声,但可能会引入较大的延迟和过平滑现象。同时,窗口宽度必须为奇数且不能超过信号长度。
- 多项式阶次:决定了拟合的复杂度。较高的阶数可以更好地拟合信号中的细节,但也可能导致过拟合和噪声放大。在实际应用中,需要根据数据的特征选择合适的窗口宽度和多项式阶次以达到最佳的滤波效果。
五、实现方式
SG滤波器可以通过多种编程语言和工具实现,MATLAB官方示例接口。这些实现方式都基于SG滤波器的数学原理,即利用最小二乘法对滑动窗口内的数据进行多项式拟合。
六、注意事项
- 噪声特性:SG滤波器对高频噪声有较好的去除效果,但对于低频噪声或趋势项可能需要结合其他方法进行处理。
- 计算复杂度:随着窗口大小和多项式阶数的增加,SG滤波器的计算复杂度也会增加,可能影响处理速度。
计算逻辑
推荐参考
一、确定关键参数
- 窗口宽度(window_length):一个正奇整数,表示用于拟合的邻近点的数量。窗口宽度越大,平滑效果越明显,但计算复杂度也会增加。
- 多项式阶次(polyorder):一个正整数,表示用于拟合的多项式的阶数。多项式阶次越高,拟合的复杂度越高,能更好地保留信号的细节,但也可能导致过拟合和噪声放大。
二、构建数据矩阵
假设窗口宽度为window length = 2M +1
,多项式阶次为polyorder = N
。N要小于2M+1避免误解
对于信号中的每个点,
构建一个包含window length
个点的数据窗口,窗口中心为
构建一个设计矩阵A
,其行数为window length,对应2M
+1
,列数为N+1
。矩阵A
的第i
行、第j
列元素为,即窗口内每个点的j
次幂。
三、最小二乘拟合
利用最小二乘法,求解多项式系数θ
,使得拟合误差最小。
即求解线性方程组的最小二乘解,其中Y
为窗口内数据点的向量。要求出,等号两边乘于A的逆即可,但不一定能解,这里用伪逆替代。
从数学角度来看,一个矩阵的逆存在的前提是该矩阵是方阵且行列式不为零。然而,在Savitzky-Golay滤波中,设计矩阵
A
的行数通常大于列数(即窗口宽度大于多项式阶次加一),这意味着A
不是一个方阵。因此,A
的逆在常规意义上是不存在的。
通过计算A
的伪逆
得到多项式系数
四、计算滤波结果
- 使用求得的多项式系数
θ
,计算窗口中心点的滤波值。滤波值为多项式在处的值,即
五、移动窗口并重复上述过程
- 将窗口向右移动一个点,重复步骤二至四,直到处理完信号中的所有点。