Dr_can Kalman Filter学习笔记(一)
首先,为什么会提出卡尔曼滤波呢,主要是解决问题的过程中中经常存在不确定性问题。
不确定性:
- 不存在完美的模型
- 系统的扰动不可控,也很难建模
- 测量传感器存在误差
例1:假如我们有一个硬币需要测量直径长度
x
x
x,假设我们现在测得了
k
k
k个测量值,
z
1
,
z
2
,
⋯
,
z
k
z_1,z_2,\cdots,z_k
z1,z2,⋯,zk我们很容易想到会用平均值来代替硬币的直径长度,但是会不会有一种更高效的方式呢,如果仅仅只是考虑平均值会不会太简单了呢?
x
k
^
=
1
k
(
z
1
+
z
2
+
⋯
+
z
k
)
\hat{x_k} = \frac{1}{k}(z_1+z_2+\cdots+z_k)
xk^=k1(z1+z2+⋯+zk)
让我们先对上述式子进行进一步推导:
1
k
(
z
1
+
z
2
+
⋯
+
z
k
)
=
1
k
(
z
1
+
z
2
+
⋯
+
z
k
)
+
1
k
z
k
=
1
k
k
−
1
k
−
1
(
z
1
+
z
2
+
⋯
+
z
k
)
+
1
k
z
k
=
k
−
1
k
x
^
k
−
1
+
1
k
z
k
=
k
−
1
k
x
^
k
−
1
+
1
k
z
k
\begin{align*} & \frac{1}{k}(z_1+z_2+\cdots+z_k) \notag \\ ={}&\frac{1}{k}(z_1+z_2+\cdots+z_k)+\frac{1}{k}z_k \notag \\ ={}&\frac{1}{k}\frac{k-1}{k-1}(z_1+z_2+\cdots+z_k)+\frac{1}{k}z_k \notag \\ ={}&\frac{k-1}{k}\hat{x}_{k-1}+\frac{1}{k}z_k \notag \\ ={}&\frac{k-1}{k}\hat{x}_{k-1}+\frac{1}{k}z_k \notag \\ \end{align*}
====k1(z1+z2+⋯+zk)k1(z1+z2+⋯+zk)+k1zkk1k−1k−1(z1+z2+⋯+zk)+k1zkkk−1x^k−1+k1zkkk−1x^k−1+k1zk
所以可得一个递归方程为:
x
k
^
=
x
k
−
1
^
+
1
k
(
z
k
−
x
k
−
1
^
)
\hat{x_k} = \hat{x_{k-1}}+\frac{1}{k}(z_k-\hat{x_{k-1}})
xk^=xk−1^+k1(zk−xk−1^),我们令
1
k
=
K
k
\frac{1}{k}=K_k
k1=Kk,如下:
x
k
^
=
x
k
−
1
^
+
K
k
(
z
k
−
x
k
−
1
^
)
K
a
l
m
a
n
G
a
i
n
:
K
k
=
e
E
S
T
k
−
1
e
E
S
T
k
−
1
−
e
M
E
A
k
\hat{x_k} = \hat{x_{k-1}}+K_k(z_k-\hat{x_{k-1}}) \\ Kalman\quad Gain:\quad K_k = \frac{e_{{EST}_{k-1}}}{e_{{EST}_{k-1}}-e_{{MEA}_k}}
xk^=xk−1^+Kk(zk−xk−1^)KalmanGain:Kk=eESTk−1−eMEAkeESTk−1
式中的
K
k
K_k
Kk为卡尔曼增益,卡尔曼增益公式是卡尔曼滤波的核心。可以很明显的看出来,当前的观测状态和上一个观测状态有关.
好了,在这里我们先总结下卡尔曼滤波的计算步骤和求解过程:
w
h
i
l
e
r
e
s
t
r
i
c
t
i
o
n
S
t
e
p
1
:
计算
K
a
l
m
a
n
G
a
i
n
K
k
=
e
E
S
T
k
−
1
e
E
S
T
k
−
1
−
e
M
E
A
k
S
t
e
p
2
:
计算
x
k
^
=
x
k
−
1
^
+
K
k
(
z
k
−
x
k
−
1
^
)
S
t
e
p
3
:
更新
e
E
S
T
k
=
(
1
−
K
k
)
e
E
S
T
k
−
1
e
n
d
w
h
i
l
e
while\quad restriction\\ Step1:计算Kalman\quad Gain\quad K_k = \frac{e_{{EST}_{k-1}}}{e_{{EST}_{k-1}}-e_{{MEA}_k}}\\ Step2:计算\hat{x_k} = \hat{x_{k-1}}+K_k(z_k-\hat{x_{k-1}})\\ Step3:更新e_{EST_{k}}=(1-K_k)e_{EST_{k-1}} \\ end \quad while
whilerestrictionStep1:计算KalmanGainKk=eESTk−1−eMEAkeESTk−1Step2:计算xk^=xk−1^+Kk(zk−xk−1^)Step3:更新eESTk=(1−Kk)eESTk−1endwhile
例2:有一实际长度为50mm的物体,第一次的估计值为
x
^
0
=
40
m
m
\hat{x}_0=40mm
x^0=40mm,
e
E
S
T
0
=
5
m
m
e_{EST_{0}}=5mm
eEST0=5mm,
z
1
=
51
m
m
,
e
M
E
A
k
=
3
m
m
z_1=51mm,e_{MEA_{k}}=3mm
z1=51mm,eMEAk=3mm,利用上述求解步骤,在excel表格中进行求解。
注:Kalman Gain的推导和Step3的更新公式推导会在后续进行笔记更新。
问题:为什么不能用平均值直接作为观测的结果,而需要使用递归?是否与神经网络传递过程中的移动均值和移动方差有关?