实例一、线性定常系统
线性定常系统,就是上一篇文章中的
Φ
k
,
k
−
1
\Phi_{k,k-1}
Φk,k−1是一个常值。为了更简单些,观测也用直接观测好了。于是这个定常系统可以这样表示:
X
k
=
Φ
X
k
−
1
+
W
k
−
1
X_k=\Phi X_{k-1}+W_{k-1}
Xk=ΦXk−1+Wk−1
Z
k
=
X
k
+
V
k
Z_k=X_k+V_k
Zk=Xk+Vk
这里的
Φ
\Phi
Φ是常数了,观测Z和状态X都是标量,系统噪声
W
k
W_{k}
Wk和量测噪声
V
k
V_k
Vk都是零均值的白噪声,方差矩阵用Q和R表示,Q和R也是常量。现在,我们对这个系统用卡尔曼滤波试试。
直接套公式好了。
X
^
k
/
k
−
1
=
Φ
X
^
k
−
1
\hat X_{k/k-1}=\Phi \hat X_{k-1}
X^k/k−1=ΦX^k−1
X
^
k
=
X
^
k
/
k
−
1
+
K
k
(
Z
k
−
X
^
k
/
k
−
1
)
=
(
1
−
K
k
)
X
^
k
/
k
−
1
+
K
k
Z
k
\hat X_k=\hat X_{k/k-1}+K_k(Z_k-\hat X_{k/k-1})=(1-K_k)\hat X_{k/k-1}+K_kZ_k
X^k=X^k/k−1+Kk(Zk−X^k/k−1)=(1−Kk)X^k/k−1+KkZk
K
k
=
P
k
/
k
−
1
(
P
k
/
k
−
1
+
R
)
−
1
=
P
k
/
k
−
1
P
k
/
k
−
1
+
R
K_k=P_{k/k-1}(P_{k/k-1}+R)^{-1}=\frac{P_{k/k-1}}{P_{k/k-1}+R}
Kk=Pk/k−1(Pk/k−1+R)−1=Pk/k−1+RPk/k−1
P
k
/
k
−
1
=
Φ
2
P
k
−
1
+
Q
P_{k/k-1}=\Phi^2P_{k-1}+Q
Pk/k−1=Φ2Pk−1+Q
P
k
=
(
1
−
K
k
)
P
k
/
k
−
1
=
(
1
−
P
k
/
k
−
1
P
k
/
k
−
1
+
R
)
P
k
/
k
−
1
=
R
P
k
/
k
−
1
P
k
/
k
−
1
+
R
=
R
K
k
P_k=(1-K_k)P_{k/k-1}=(1-\frac{P_{k/k-1}}{P_{k/k-1}+R})P_{k/k-1}=\frac{RP_{k/k-1}}{P_{k/k-1}+R}=RK_k
Pk=(1−Kk)Pk/k−1=(1−Pk/k−1+RPk/k−1)Pk/k−1=Pk/k−1+RRPk/k−1=RKk
这不就是把卡尔曼滤波的五个方程拿过来套了一下吗?套公式简单,我们希望通过这个简单的例子来看看卡尔曼滤波里到底发生了什么事。
先看第二个方程,
X
^
k
=
(
1
−
K
k
)
X
^
k
/
k
−
1
+
K
k
Z
k
\hat X_k=(1-K_k)\hat X_{k/k-1}+K_kZ_k
X^k=(1−Kk)X^k/k−1+KkZk 我们发现估值
X
^
k
\hat X_k
X^k由两部分组成,分别是这一步的预测和这一步的观测。而这两部分的系数就好玩了,如果一个大,那另一个就小。
先看预测部分的系数小,观测部分的系数大的情况。既然观测部分的系数大,那就是说
K
k
K_k
Kk大,在看上面第三个方程,
K
k
=
P
k
/
k
−
1
P
k
/
k
−
1
+
R
K_k=\frac{P_{k/k-1}}{P_{k/k-1}+R}
Kk=Pk/k−1+RPk/k−1
K
k
K_k
Kk大,就说明R小,而根据R的定义,R越小说明量测
Z
k
Z_k
Zk越准。所以第二个方程观测部分的系数更大。
如果预测部分的系数大,观测部分的系数小呢?情况正好倒过来,预测部分的系数大,说明
1
−
K
k
=
R
P
k
/
k
−
1
+
R
1-K_k=\frac{R}{P_{k/k-1}+R}
1−Kk=Pk/k−1+RR 要大,那么就需要
P
k
/
k
−
1
P_{k/k-1}
Pk/k−1小,而
P
k
/
k
−
1
P_{k/k-1}
Pk/k−1的定义就是表征预测的精度的,它小说明预测的准,所以预测部分的系数要取的大一些。
从这个例子也可以看出,卡尔曼滤波是能够识别出可用信息的质量,并自动确定这些信息的利用程度的,所以可以认为,卡尔曼滤波是具有一些智能自适应功能的算法。
代进去一些具体数算一下试试看。
假如
Φ
=
Q
=
R
=
P
0
=
1
\Phi=Q=R=P_0=1
Φ=Q=R=P0=1。
第一步递推得到
P
1
/
0
=
P
0
+
Q
=
2
P_{1/0}=P_0+Q=2
P1/0=P0+Q=2
K
1
=
P
1
/
0
(
P
1
/
0
+
R
)
−
1
=
0.67
K_1=P_{1/0}(P_{1/0}+R)^{-1}=0.67
K1=P1/0(P1/0+R)−1=0.67
P
1
=
K
1
P_1=K_1
P1=K1
依次递推,会得到:
P
2
=
K
2
=
0.625
P_2=K_2=0.625
P2=K2=0.625
P
3
=
K
3
=
0.62
P_3=K_3=0.62
P3=K3=0.62
P
k
=
K
k
=
P
k
−
1
+
1
P
k
−
1
+
2
P_k=K_k=\frac{P_{k-1}+1}{P_{k-1}+2}
Pk=Kk=Pk−1+2Pk−1+1
会发现,随着递推次数的增加,
K
k
K_k
Kk和
P
k
P_k
Pk会逐渐减小,相应的
P
k
/
k
−
1
P_{k/k-1}
Pk/k−1也会减小,虽然每次递推,大家减小的绝对量是一样的,但是由于
P
k
/
k
−
1
P_{k/k-1}
Pk/k−1总比
K
k
K_k
Kk大,所以
K
k
K_k
Kk减小的相对量要比
P
k
/
k
−
1
P_{k/k-1}
Pk/k−1大。这说明,在递推的开始阶段,估值依靠测量要多一些,随着递推次数的增加,预测的比重开始增加。最终两者达到平衡。这就说明滤波达到稳态了。
实例二、 α − β − γ 滤 波 \alpha-\beta-\gamma滤波 α−β−γ滤波
说实话,我第一次仿真这个例子时真的感觉到这是在滤波了。它讲了这么一个情况。
一个物体沿直线运动,可以想象,这个物体在每一个时刻都可以用位置s(t),速度v(t)和加速度a(t)来表示它的状态。但在观测端,只能观测到位置信息
Z
k
=
s
k
+
V
k
Z_k=s_k+V_k
Zk=sk+Vk显然,观测是由误差的。定义观测的方差
E
[
V
k
2
]
=
r
E[V_k^2]=r
E[Vk2]=r,要求对这个物体的运动状态进行卡尔曼滤波。
开始分析这个问题吧。其实就是已知每一时刻的位置
s
k
s_k
sk,求每一时刻的速度
v
k
v_k
vk和加速度
a
k
a_k
ak。
还有一个量,叫加加速度,咱们用
j
k
j_k
jk表示。但是,这个加加速度在这个系统,尤其是离散后的系统基本跟白噪声没什么区别了。信息理论中对白噪声建模方法里,就是把一个类似有色噪声的过程不断的求导,就会得到白噪声。
加加速度相当于位置进行了三次求导,在离散领域就是做了三次差分,可以认为是白噪声了。于是系统的噪声也有了。我们定义系统的噪声方差为
E
[
j
(
t
)
2
]
=
q
E[j(t)^2]=q
E[j(t)2]=q离散后
E
[
j
k
]
=
q
/
T
E[j_k]=q/T
E[jk]=q/T。
虽然我们可以用上一篇文章里讲的连续系统离散化方法建立状态方程,但对于这么简单的系统,离散方程是可以直接写出来的。数据周期定义为T,那么
s
k
+
1
=
s
k
+
v
k
T
+
0.5
a
k
T
2
s_{k+1}=s_k+v_kT+0.5a_kT^2
sk+1=sk+vkT+0.5akT2
v
k
+
1
=
v
k
+
a
k
T
v_{k+1}=v_k+a_kT
vk+1=vk+akT
a
k
+
1
=
a
k
+
j
k
a_{k+1}=a_k+j_k
ak+1=ak+jk
好啦,状态方程直接出来了。
X
k
=
(
s
k
v
k
a
k
)
,
Φ
=
(
1
T
T
2
2
0
1
T
0
0
1
)
,
Γ
=
(
0
0
1
)
,
Q
=
q
T
X_k=\begin{pmatrix}s_k\\v_k\\a_k\end{pmatrix},\Phi=\begin{pmatrix}1&T&\frac{T^2}{2}\\0&1&T\\0&0&1\end{pmatrix},\Gamma=\begin{pmatrix}0\\0\\1\end{pmatrix},Q=\frac{q}T
Xk=⎝⎛skvkak⎠⎞,Φ=⎝⎛100T102T2T1⎠⎞,Γ=⎝⎛001⎠⎞,Q=Tq
量测矩阵就是
H
=
(
1
0
0
)
H=\begin{pmatrix}1&0&0\end{pmatrix}
H=(100)
直接套卡尔曼滤波的一般方程吧。大家可以自己编个程序仿真一下,比如数据周期1毫秒,如果不用卡尔曼滤波,直接把观测的位置信息求导来计算速度和加速度,即使观测误差达到微米的数量级,两次微分得到的加速度也是看不得的,噪声大得不忍直视。而如果使用卡尔曼滤波,你会发现,不管是速度,还是加速度的曲线都会变得非常的光滑平稳。
为什么叫
α
−
β
−
γ
\alpha-\beta-\gamma
α−β−γ滤波?它是这个意思:当滤波达到稳态时,
P
k
P_k
Pk趋于稳定,稳定后是一个固定的矩阵
P
P
P。而根据卡尔曼滤波器的增益矩阵计算的公式,
K
k
K_k
Kk也会稳定到一个值
K
=
P
H
T
r
−
1
K=PH^Tr^{-1}
K=PHTr−1 把这个式子乘开
K
=
(
P
11
r
P
21
r
P
31
r
)
K=\begin{pmatrix}\frac{P_{11}}r\\\frac{P_{21}}r\\\frac{P_{31}}r\end{pmatrix}
K=⎝⎛rP11rP21rP31⎠⎞
再用
α
,
β
,
γ
\alpha,\beta,\gamma
α,β,γ来定义K的三个元素
K
=
(
α
β
γ
)
K=\begin{pmatrix}\alpha\\\beta\\\gamma\end{pmatrix}
K=⎝⎛αβγ⎠⎞
于是
X
^
k
=
Φ
X
^
k
−
1
+
(
α
β
γ
)
(
Z
k
−
H
Φ
X
^
k
−
1
)
\hat X_k=\Phi\hat X_{k-1}+\begin{pmatrix}\alpha\\\beta\\\gamma\end{pmatrix}(Z_k-H\Phi\hat X_{k-1})
X^k=ΦX^k−1+⎝⎛αβγ⎠⎞(Zk−HΦX^k−1)
这就是
α
−
β
−
γ
\alpha-\beta-\gamma
α−β−γ滤波。
α
,
β
,
γ
\alpha,\beta,\gamma
α,β,γ分别代表位置,速度和加速度的稳态滤波增益。如果不估计加速度,只估计位置和速度,那就是
α
−
β
\alpha-\beta
α−β滤波。