关于 Matlab 程序的操作请参考:【UWB】Savitzky Golay filter SG滤波器快速入门并上手使用
简介
Savitzky-Golay滤波器(通常简称为S-G滤波器)最初由Savitzky和Golay于1964年提出,发表于Analytical Chemistry 杂志。之后被广泛地运用于数据流平滑除噪,是一种在时域内基于局域多项式最小二乘法拟合的滤波方法。这种滤波器最大的特点在于在滤除噪声的同时可以确保信号的形状、宽度不变。
平滑滤波是光谱分析中常用的预处理方法之一。用 Savitzky. Golay 方法进行平滑滤波,可以提高光谱的平滑性,并降低噪音的干扰。S-G 平滑滤波的效果,随着选取窗宽不同而不同,可以满足不同场合的需求。
Savitzy-Golay 卷积平滑算法是移动平滑算法的改进。关键在于矩阵算子的求解。
推导
设滤波窗口的宽度为
n
=
2
m
+
1
n=2m+1
n=2m+1,各测量点为
x
=
(
−
m
,
−
m
+
1
,
⋯
,
0
,
1
,
⋯
,
m
−
1
,
m
)
x=(-m, -m+1, \cdots, 0, 1, \cdots, m-1, m )
x=(−m,−m+1,⋯,0,1,⋯,m−1,m),采用
k
−
1
k-1
k−1 次多项式对窗口内的数据点进行拟合
y
=
a
0
+
a
1
x
+
a
2
x
2
+
⋯
+
a
k
−
1
x
k
−
1
y = a_0 + a_1 x + a_2 x^2 + \cdots + a_{k-1} x^{k-1}
y=a0+a1x+a2x2+⋯+ak−1xk−1
其中
x
x
x 为待拟合的数据
y
y
y 为拟合后的输出数据
a
a
a 为待求解的参数。
其本质就是通过求解一个
k
−
1
k-1
k−1 次方程的到一个输出值
y
y
y。
因变量是
y
y
y,自变量是
x
x
x,参数是
a
a
a,后边还会加上参数
b
b
b。
于是就有了
n
=
2
m
+
1
n = 2m + 1
n=2m+1 个这样的方程,构成了
k
k
k 元线性方程组。要使方程组有解则
n
n
n 应大于等于
k
k
k,一般选择
n
>
k
n > k
n>k,通过最小二乘法拟合确定拟合参数
A
A
A。由此可得到
KaTeX parse error: Got function '\textcolor' with no arguments as subscript at position 1: \̲t̲e̲x̲t̲c̲o̲l̲o̲r̲{##df0030}{#1}
上述公式可能过于复杂不方便理解,我们假设一个五点三次平滑公式,即 m = 2 , n = 2 ∗ 2 + 1 = 5 , k = 3 m=2, n= 2*2+1 = 5, k=3 m=2,n=2∗2+1=5,k=3 代入公式
[ y − 2 y − 1 y 0 y 1 y 2 ] = [ 1 ( x − 2 ) 1 ( x − 2 ) 2 1 ( x − 1 ) 1 ( x − 1 ) 2 1 ( x 0 ) 1 ( x 0 ) 2 1 ( x 1 ) 1 ( x 1 ) 2 1 ( x 2 ) 1 ( x 2 ) 2 ] [ a 0 a 1 a 2 ] + [ b − 2 b − 1 b 0 b 1 b 2 ] \begin{aligned} \left[\begin{matrix} y_{-2} \\ y_{-1} \\ y_{0} \\ y_{1} \\ y_{2} \\ \end{matrix}\right] &= \left[\begin{matrix} 1 & (x_{-2})^{1} & (x_{-2})^{2} \\ 1 & (x_{-1})^{1} & (x_{-1})^{2} \\ 1 & (x_{0})^{1} & (x_{0})^{2} \\ 1 & (x_{1})^{1} & (x_{1})^{2} \\ 1 & (x_{2})^{1} & (x_{2})^{2} \\ \end{matrix}\right] \left[\begin{matrix} a_{0} \\ a_{1} \\ a_{2} \\ \end{matrix}\right] + \left[\begin{matrix} b_{-2} \\ b_{-1} \\ b_{0} \\ b_{1} \\ b_{2} \\ \end{matrix}\right] \\ \end{aligned} y−2y−1y0y1y2 = 11111(x−2)1(x−1)1(x0)1(x1)1(x2)1(x−2)2(x−1)2(x0)2(x1)2(x2)2 a0a1a2 + b−2b−1b0b1b2
转换成矩阵表示的形式为
Y
(
2
m
+
1
)
×
1
=
X
(
2
m
+
1
)
×
k
⋅
A
k
×
1
+
B
(
2
m
+
1
)
×
1
Y_{(2m+1) \times 1} = X_{(2m+1) \times k} \cdot A_{k \times 1} + B_{(2m+1) \times 1}
Y(2m+1)×1=X(2m+1)×k⋅Ak×1+B(2m+1)×1
规整下符号: Y Y Y 表示待求解的输出值, X X X 为观测值
A
A
A 的最小二乘解
A
^
\hat{A}
A^ 为
A
^
=
(
X
T
⋅
X
)
−
1
⋅
X
T
⋅
Y
\hat{A} = (X^\text{T} \cdot X)^{-1} \cdot X^\text{T} \cdot Y
A^=(XT⋅X)−1⋅XT⋅Y
Y
Y
Y 的模型预测值或滤波值
Y
^
\hat{Y}
Y^ 为
Y
^
=
X
⋅
A
=
X
⋅
(
X
T
⋅
X
)
−
1
⋅
X
T
⋅
Y
=
E
⋅
Y
\hat{Y} = X \cdot A = X \cdot (X^\text{T} \cdot X)^{-1} \cdot X^\text{T} \cdot Y = E \cdot Y
Y^=X⋅A=X⋅(XT⋅X)−1⋅XT⋅Y=E⋅Y
E
=
X
⋅
(
X
T
⋅
X
)
−
1
⋅
X
T
E = X \cdot (X^\text{T} \cdot X)^{-1} \cdot X^\text{T}
E=X⋅(XT⋅X)−1⋅XT
举例
为了进一步理解上述过程,我们假设信号为 x − 2 = − 2 , x − 1 = − 1 , x 0 = 0 , x 1 = 1 , x 2 = 2 x_{-2} = -2, x_{-1} = -1, x_{0} = 0, x_{1} = 1, x_{2} = 2 x−2=−2,x−1=−1,x0=0,x1=1,x2=2,那么就有
[ y − 2 y − 1 y 0 y 1 y 2 ] = [ 1 ( x − 2 ) 1 ( x − 2 ) 2 1 ( x − 1 ) 1 ( x − 1 ) 2 1 ( x 0 ) 1 ( x 0 ) 2 1 ( x 1 ) 1 ( x 1 ) 2 1 ( x 2 ) 1 ( x 2 ) 2 ] [ a 0 a 1 a 2 ] + [ b − 2 b − 1 b 0 b 1 b 2 ] = [ 1 − 2 4 1 − 1 1 1 0 0 1 1 1 1 2 4 ] [ a 0 a 1 a 2 ] + [ b − 2 b − 1 b 0 b 1 b 2 ] \begin{aligned} \left[\begin{matrix} y_{-2} \\ y_{-1} \\ y_{0} \\ y_{1} \\ y_{2} \\ \end{matrix}\right] &= \left[\begin{matrix} 1 & (x_{-2})^{1} & (x_{-2})^{2} \\ 1 & (x_{-1})^{1} & (x_{-1})^{2} \\ 1 & (x_{0})^{1} & (x_{0})^{2} \\ 1 & (x_{1})^{1} & (x_{1})^{2} \\ 1 & (x_{2})^{1} & (x_{2})^{2} \\ \end{matrix}\right] \left[\begin{matrix} a_{0} \\ a_{1} \\ a_{2} \\ \end{matrix}\right] + \left[\begin{matrix} b_{-2} \\ b_{-1} \\ b_{0} \\ b_{1} \\ b_{2} \\ \end{matrix}\right] \\ &= \left[\begin{matrix} 1 & -2 & 4 \\ 1 & -1 & 1 \\ 1 & 0 & 0 \\ 1 & 1 & 1 \\ 1 & 2 & 4 \\ \end{matrix}\right] \left[\begin{matrix} a_{0} \\ a_{1} \\ a_{2} \\ \end{matrix}\right] + \left[\begin{matrix} b_{-2} \\ b_{-1} \\ b_{0} \\ b_{1} \\ b_{2} \\ \end{matrix}\right] \end{aligned} y−2y−1y0y1y2 = 11111(x−2)1(x−1)1(x0)1(x1)1(x2)1(x−2)2(x−1)2(x0)2(x1)2(x2)2 a0a1a2 + b−2b−1b0b1b2 = 11111−2−101241014 a0a1a2 + b−2b−1b0b1b2
再由公式计算 E E E 矩阵。此处借用 Matlab 进行计算,m 代码如下
X = [1 -2 4;
1 -1 1;
1 0 0;
1 1 1;
1 2 4;];
E = X * inv(X' * X) * X'
可以得到
E
E
E 矩阵为
E
=
1
35
[
31
9
−
3
−
5
3
9
13
12
6
−
5
−
3
12
17
12
−
3
−
5
6
12
13
9
3
−
5
−
3
9
31
]
E = \frac{1}{35} \left[\begin{matrix} 31 & 9 & -3 & -5 & 3 \\ 9 & 13 & 12 & 6 & -5 \\ -3 & 12 & 17 & 12 & -3 \\ -5 & 6 & 12 & 13 & 9 \\ 3 & -5 & -3 & 9 & 31 \\ \end{matrix}\right]
E=351
319−3−53913126−5−3121712−3−56121393−5−3931
Y ^ = 1 35 [ 31 9 − 3 − 5 3 9 13 12 6 − 5 − 3 12 17 12 − 3 − 5 6 12 13 9 3 − 5 − 3 9 31 ] ⋅ Y \hat{Y} = \frac{1}{35} \left[\begin{matrix} 31 & 9 & -3 & -5 & 3 \\ 9 & 13 & 12 & 6 & -5 \\ -3 & 12 & 17 & 12 & -3 \\ -5 & 6 & 12 & 13 & 9 \\ 3 & -5 & -3 & 9 & 31 \\ \end{matrix}\right] \cdot Y Y^=351 319−3−53913126−5−3121712−3−56121393−5−3931 ⋅Y
展开就可以得到根据 5 个实际值通过多项式计算得到对应的预测值的计算过程
y
^
−
2
=
1
35
(
31
y
−
2
+
9
y
−
1
−
3
y
0
−
5
y
1
+
3
y
2
)
=
−
2
y
^
−
1
=
1
35
(
9
y
−
2
+
13
y
−
1
+
12
y
0
+
6
y
1
−
5
y
2
)
=
−
1
y
^
−
0
=
1
35
(
−
3
y
−
2
+
12
y
−
1
+
17
y
0
+
12
y
1
−
3
y
2
)
=
0
y
^
−
1
=
1
35
(
−
5
y
−
2
+
6
y
−
1
+
12
y
0
+
13
y
1
+
9
y
2
)
=
1
y
^
2
=
1
35
(
3
y
−
2
−
5
y
−
1
−
3
y
0
+
9
y
1
+
31
y
2
)
=
2
\begin{aligned} &\hat{y}_{-2} = \frac{1}{35} (31 y_{-2} + 9 y_{-1} - 3 y_{0} - 5 y_{1} + 3 y_{2}) & = -2 \\ &\hat{y}_{-1} = \frac{1}{35} (9 y_{-2} + 13 y_{-1} + 12 y_{0} + 6 y_{1} - 5 y_{2}) & = -1 \\ &\hat{y}_{-0} = \frac{1}{35} (-3 y_{-2} + 12 y_{-1} + 17 y_{0} + 12 y_{1} - 3 y_{2}) & = 0 \\ &\hat{y}_{-1} = \frac{1}{35} (-5 y_{-2} + 6 y_{-1} + 12 y_{0} + 13 y_{1} + 9 y_{2}) & = 1 \\ &\hat{y}_{2} = \frac{1}{35} (3 y_{-2} - 5 y_{-1} - 3 y_{0} + 9 y_{1} + 31 y_{2}) & = 2 \end{aligned}
y^−2=351(31y−2+9y−1−3y0−5y1+3y2)y^−1=351(9y−2+13y−1+12y0+6y1−5y2)y^−0=351(−3y−2+12y−1+17y0+12y1−3y2)y^−1=351(−5y−2+6y−1+12y0+13y1+9y2)y^2=351(3y−2−5y−1−3y0+9y1+31y2)=−2=−1=0=1=2
最小二乘法原理
针对矩阵形式,其控制目标是使误差最小,即
arg min
A
=
∣
Y
−
(
A
X
+
B
)
∣
2
\argmin_{A} = |Y - (AX+B)|^2
Aargmin=∣Y−(AX+B)∣2
将上述等式右侧展开得
∣
Y
−
(
A
X
+
B
)
∣
2
=
(
Y
−
(
A
X
+
B
)
)
T
(
Y
−
(
A
X
+
B
)
)
=
(
Y
T
−
X
T
A
T
−
B
T
)
(
Y
−
A
X
−
B
)
=
Y
T
Y
−
Y
T
A
X
−
Y
T
B
−
X
T
A
T
Y
+
X
T
A
T
A
X
+
X
T
A
T
B
−
B
T
Y
+
B
T
A
X
+
B
T
B
=
\begin{aligned} |Y - (AX+B)|^2 &= (Y-(AX+B))^\text{T} (Y-(AX+B)) \\ &= (Y^\text{T} - X^\text{T}A^\text{T} - B^\text{T}) (Y - AX - B) \\ &= Y^\text{T} Y - Y^\text{T} AX - Y^\text{T}B - X^\text{T}A^\text{T}Y + X^\text{T}A^\text{T} AX + X^\text{T}A^\text{T} B - B^\text{T}Y + B^\text{T} AX + B^\text{T} B \\ &= \\ \end{aligned}
∣Y−(AX+B)∣2=(Y−(AX+B))T(Y−(AX+B))=(YT−XTAT−BT)(Y−AX−B)=YTY−YTAX−YTB−XTATY+XTATAX+XTATB−BTY+BTAX+BTB=