本文对上文的卡尔曼滤波知识进行些许补充,并简单说明扩展卡尔曼的知识及用法。
卡尔曼是一种多数据递归融合算法,同时也可以理解为一个权重在变化的低通滤波器。
其思想公式为:
当前的估计值 = 上一次估计值 + 权重 ∗ (当前测量值 − 上一次估计值) 当前的估计值=上一次估计值+权重*(当前测量值-上一次估计值) 当前的估计值=上一次估计值+权重∗(当前测量值−上一次估计值)
所以,递归次数越多,测量值的作用越小,其估计值越接近真实值。如下例子:
假设A的真实值为50,经过上述公式计算后,结果波形如下:

所谓的数据融合,其实就是通过计算增益值K使得测量值的方差
Σ
\Sigma
Σ最小,使得数据为最优解。
例如:二维的位置P、速度V恒定速度系统,测量值为P,无控制量
P k = P k − 1 + V k ∗ Δ t + W p , k P_k = P_{k-1}+V_k*\Delta{t}+W_{p,k} Pk=Pk−1+Vk∗Δt+Wp,k
V k = V k − 1 + W v , k V_k=V_{k-1}+W_{v,k} Vk=Vk−1+Wv,k
Z p , k = X p , k + V p , k Z_{p,k}=X_{p,k}+V_{p,k} Zp,k=Xp,k+Vp,k
Z v , k = 0 Z_{v,k}=0 Zv,k=0
W W W、 V V V为过程噪声和测量噪声。
设状态向量
X
k
^
=
∣
P
k
V
k
∣
T
\hat{X_k} = |PkVk|
所以用矩阵表示为:
∣
P
k
V
k
∣
=
∣
1
Δ
t
0
1
∣
∣
P
k
−
1
V
k
−
1
∣
+
∣
Q
p
0
0
Q
v
∣
∣
W
p
,
k
W
v
,
k
∣
|PkVk|
Z
k
=
∣
1
0
∣
∣
X
p
,
k
−
1
X
v
,
k
−
1
∣
+
∣
R
p
0
∣
∣
V
p
,
k
−
1
V
v
,
k
−
1
∣
Z_k=|10|
这里状态转移矩阵
F
=
∣
1
Δ
t
0
1
∣
F=|1Δt01|
由于没有控制量,所以 B = 0 B=0 B=0
过程噪声协方差矩阵
Q
Q
Q其实就是前面的
∣
Q
p
0
0
Q
v
∣
|Qp00Qv|
测量噪声协方差矩阵
R
R
R其实就是前面的
∣
R
p
0
∣
|Rp0|
由于状态协方差矩阵只在初始阶段产生影响,且位置速度噪声相互独立,所以一般可以给定矩阵初始值
P
0
=
∣
σ
p
2
σ
p
σ
v
σ
v
σ
p
σ
v
2
∣
=
∣
1
0
0
1
∣
P_0=|σp2σpσvσvσpσv2|
系统转换矩阵
H
=
∣
1
0
∣
H=|10|
扩展卡尔曼应用于非线性程度不高的系统。扩展卡尔曼其实与卡尔曼很类似,只是扩展卡尔曼是利用泰勒级数展开对 k − 1 k-1 k−1时刻求 f ( x ) f(x) f(x)对 x x x的偏导。所以两者最大的区别是状态转移矩阵 F F F和系统转换矩阵 H H H用雅各比矩阵表示。
即扩展卡尔曼先验估算公式为:
X ^ k = f ( x ^ k − 1 , u ^ k − 1 , 0 ) \hat X_{k}=f(\hat{x}_{k-1},\hat{u}_{k-1},0) X^k=f(x^k−1,u^k−1,0)
后验估算公式为:
X ^ k ′ = X ^ k + K ( Z k − h ( X ^ k ) ) \hat{X}'_{k}=\hat{X}_k+K(Z_k-h(\hat{X}_k)) X^k′=X^k+K(Zk−h(X^k))
例如:
某系统的状态空间方程为:
X 1 = X 1 + S I N ( X 2 ) = f 1 ( x ) X_1=X_1+SIN(X_2)=f_1(x) X1=X1+SIN(X2)=f1(x)
X 2 = X 1 2 = f 2 ( x ) X_2=X^2_1=f_2(x) X2=X12=f2(x)
Z 1 = 1 2 C O S ( X 1 ) = h 1 ( x ) Z_1=\frac{1}{2}COS(X_1)=h_1(x) Z1=21COS(X1)=h1(x)
Z 2 = 0 = h 2 ( x ) Z_2=0=h_2(x) Z2=0=h2(x)
所以:
F
=
∣
∂
f
1
∂
x
1
∂
f
1
∂
x
2
∂
f
2
∂
x
1
∂
f
2
∂
x
2
∣
x
1
k
−
1
,
x
2
k
−
1
=
∣
1
c
o
s
(
x
2
k
−
1
)
2
x
1
k
−
1
0
∣
F=|∂f1∂x1∂f1∂x2∂f2∂x1∂f2∂x2|
H
=
∣
∂
h
1
∂
x
1
∂
h
1
∂
x
2
∂
h
2
∂
x
1
∂
h
2
∂
x
2
∣
x
1
k
−
1
,
x
2
k
−
1
=
∣
−
1
2
s
i
n
(
x
1
k
−
1
)
0
∣
H=|∂h1∂x1∂h1∂x2∂h2∂x1∂h2∂x2|
由此可以看出 F F F、 H H H随着 k k k的变化而变化。
其余公式与卡尔曼滤波公式一致,将这两个雅各比矩阵代入重新计算即可。
如上所说,即可完成将卡尔曼滤波器改写成扩展卡尔曼滤波器。