卡尔曼滤波器 1_递归算法_Recursive
Filter(滤波器)可以看成是 Optimal Recursive Data Processing Algorithm 最优化递归数字处理算法,是一种观测器,不是一般的滤波器。他的存在是因为我们生活中总是存在不确定性,
- 不存在完美的数学模型
- 系统的扰动
- 测量传感器存在误差
例子:用一个尺子测量一枚硬币的直径,因为尺子的误差以及测量的硬币不同会使测量结果
Z
k
Z_k
Zk存在一定的误差,下标
k
k
k为第
k
k
k次测量。此时有测量结果
z
1
,
z
2
.
.
.
z
k
z_1,z_2...z_k
z1,z2...zk,此时我们想要估计出真实数据,会自然的去取平均值:
x
^
k
=
1
k
(
z
1
+
z
2
+
⋯
+
z
k
)
=
1
k
(
z
1
+
z
2
+
⋯
+
z
k
−
1
)
+
1
k
z
k
=
1
k
k
−
1
k
−
1
(
z
1
+
z
2
+
⋯
+
z
k
−
1
)
+
1
k
z
k
=
k
−
1
k
x
^
k
−
1
+
1
k
z
k
=
x
^
k
−
1
−
1
k
x
^
k
−
1
+
1
k
z
k
⇒
x
^
k
=
x
^
k
−
1
+
1
k
(
z
k
−
x
^
k
−
1
)
\begin{aligned} \hat{x}_{k} &=\frac{1}{k}\left(z_{1}+z_{2}+\cdots+z_{k}\right) \\ &=\frac{1}{k}\left(z_{1}+z_{2}+\cdots+z_{k-1}\right)+\frac{1}{k} z_{k} \\ &=\frac{1}{k} \frac{k-1}{k-1}\left(z_{1}+z_{2}+\cdots+z_{k-1}\right)+\frac{1}{k} z_{k} \\ &=\frac{k-1}{k} \hat{x}_{k-1}+\frac{1}{k} z_{k} \\ &=\hat{x}_{k-1}-\frac{1}{k}\hat{x}_{k-1}+\frac{1}{k}z_{k}\\ \Rightarrow \quad \hat{x}_{k} &= \hat{x}_{k-1}+\frac{1}{k}\left(z_{k}-\hat{x}_{k-1}\right) \end{aligned}
x^k⇒x^k=k1(z1+z2+⋯+zk)=k1(z1+z2+⋯+zk−1)+k1zk=k1k−1k−1(z1+z2+⋯+zk−1)+k1zk=kk−1x^k−1+k1zk=x^k−1−k1x^k−1+k1zk=x^k−1+k1(zk−x^k−1)
我们简单的分析以下最后的式子,随着k的增加,测量结果不再重要了;k值较小时,也就是测量的次数少时,
z
k
z_k
zk,也就是测量结果的作用较大。
令
1
k
=
K
k
\frac{1}{k}=K_k
k1=Kk
x
^
k
=
x
^
k
−
1
+
K
k
(
z
k
−
x
^
k
−
1
)
\hat{x}_{k} = \hat{x}_{k-1}+K_k\left(z_{k}-\hat{x}_{k-1}\right)
x^k=x^k−1+Kk(zk−x^k−1)
也就是当前的估计值=上一次的估计值+系数X(当前测量值-上一次的估计值)在卡尔曼滤波器中这个
K
k
K_k
Kk就是Kalman Gain 卡尔曼增益/因数。我们通过这个式子可以看出,此时的估计值与上一次的估计值有关,上一次的估计值与上上一次的估计值有关(不需要追溯很久以前的估计值,也是卡尔曼滤波器的优势)这就是递归的思想。
这里我们对这个
K
k
K_k
Kk进行一个简单的讨论,引入两个参数,估计误差(估计值与真实值的误差)
e
E
S
T
e_{EST}
eEST,测量误差(测量值与真实值的误差)
e
M
E
A
e_{MEA}
eMEA,此时
K
k
=
e
E
S
T
k
−
1
e
E
S
T
k
−
1
+
e
M
E
A
k
K_k = \frac{{e_{EST}}_{k-1}}{{e_{EST}}_{k-1}+{e_{MEA}}_{k}}
Kk=eESTk−1+eMEAkeESTk−1这是卡尔曼滤波器的核心公式,后续学习他是怎么推导出来的,现在进行一个讨论:
当
k
k
k时刻:
e
E
S
T
k
−
1
>
>
e
M
E
A
k
{e_{EST}}_{k-1}>>{e_{MEA}}_{k}
eESTk−1>>eMEAk,此时可以通过上式看出
K
k
K_k
Kk趋近于1,所以
x
^
k
=
x
^
k
−
1
+
z
k
−
x
^
k
−
1
=
z
k
\hat{x}_{k} = \hat{x}_{k-1}+z_{k}-\hat{x}_{k-1}=z_{k}
x^k=x^k−1+zk−x^k−1=zk,这就说明了在
k
−
1
k-1
k−1时刻的估计误差远远大于
k
k
k时刻的测量误差时,
k
k
k时刻的估计值趋近于
k
k
k时刻的测量值。也就是估计的误差大,我们更相信测量值;反之,当
k
−
1
k-1
k−1时刻的估计误差远远小于
k
k
k时刻的测量误差时,
K
k
K_k
Kk趋近于0,我们也就更相信估计值。