基本思想
用前一个状态的估计值和当前观测数据估计当前状态变量的值。
其中:
- 状态变量 x k x_k xk
- 前一时刻的状态变量 x k − 1 x_{k-1} xk−1
- 第k步状态变量之间增益矩阵的取值 A k A_k Ak
- 第k步状态变量和输出信号之间的增益 C k C_k Ck
- 量测噪声 v k v_k vk
- 过程噪声 w k − 1 w_{k-1} wk−1
- 当前的观测值 y k y_k yk
状态方程:
x
k
=
A
k
−
1
x
k
−
+
w
k
−
1
x_k=A_{k-1}x_{k-}+w_{k-1}
xk=Ak−1xk−+wk−1
量测方程:
y
k
=
C
k
x
k
+
v
k
y_k = C_{k}x_k+v_{k}
yk=Ckxk+vk
下一个时刻的观测数据
y
k
y_k
yk由前一个状态变量决定,所以前一个状态变量是否估算准确十分关键。
为了使前一个状态估算准确,使用当前的观测值与实际值的误差去校正前一个状态变量。考虑k-1时刻的过程噪声
w
k
−
1
w_{k-1}
wk−1 和量测噪声
v
k
v_k
vk。
{
x
^
k
′
=
A
k
−
1
x
k
−
y
^
k
′
=
C
k
x
k
\left\{\begin{array}{l} \hat x_k'=A_{k-1}x_{k-}\\ \hat y_k' = C_{k}x_k \end{array}\right.
{x^k′=Ak−1xk−y^k′=Ckxk
用数学的语言去描述就是:
x
^
k
=
A
k
x
^
k
−
1
+
H
k
(
y
k
−
y
^
k
′
)
=
A
k
x
^
k
−
1
+
H
k
(
y
k
−
C
k
x
k
)
=
A
k
x
^
k
−
1
+
H
k
(
y
k
−
C
k
A
k
x
^
k
−
1
)
\begin{aligned} \hat x_k &= \mathbf A_k \hat x_{k-1}+\mathbf H_k(y_k-\hat y_k') \\ &= \mathbf A_k\hat x_{k-1}+\mathbf H_k(y_k-\mathbf C_{k}x_k) \\ &= \mathbf A_k\hat x_{k-1}+\mathbf H_k(y_k-\mathbf C_{k}\mathbf A_k\hat x_{k-1}) \end{aligned}
x^k=Akx^k−1+Hk(yk−y^k′)=Akx^k−1+Hk(yk−Ckxk)=Akx^k−1+Hk(yk−CkAkx^k−1)
H
k
\mathbf H_k
Hk为增益矩阵
注意,这里没有考虑k-1时刻的过程噪声
w
k
−
1
w_{k-1}
wk−1 和量测噪声
v
k
v_k
vk。
这时,经过校正的当前状态的误差为
x
~
=
x
k
−
x
^
k
\tilde{x} = x_k - \hat{x}_k
x~=xk−x^k
经过校正的当前状态的均方值为
P
k
=
E
[
(
x
k
−
x
^
k
)
(
x
k
−
x
^
k
)
T
]
P_k=E[(x_k-\hat x_k)(x_k-\hat x_k)^T]
Pk=E[(xk−x^k)(xk−x^k)T]
未经过校正的当前状态的均方值为
P
k
′
=
E
[
(
x
k
−
x
^
k
′
)
(
x
k
−
x
^
k
′
)
T
]
P_k'=E[(x_k-\hat x_k')(x_k-\hat x_k')^T]
Pk′=E[(xk−x^k′)(xk−x^k′)T]
卡尔曼滤波要求状态变量的估计误差的均方值(
P
k
P_{k}
Pk对角线元素)为最小, 因此卡尔曼滤波的关键就是要得到Pk与Hk的关系式,即通过选择合适的
H
k
\mathbf H_k
Hk,使
P
k
P_{k}
Pk取得最小值。
经过一系列的推导,得到卡尔曼滤波的推导式:
{
x
^
k
=
A
k
x
^
k
−
1
+
H
k
(
y
k
−
C
k
A
k
x
^
k
−
1
)
H
k
=
P
k
′
C
k
T
(
C
k
P
k
′
C
k
T
+
R
k
)
−
1
P
k
′
=
A
k
P
k
−
1
A
k
T
+
Q
k
−
1
P
k
=
(
I
−
H
k
C
k
)
P
k
′
\left\{\begin{array}{l} \hat{x}_{k}=A_{k} \hat{x}_{k-1}+\mathbf H_{k}\left(y_{k}-\mathbf C_{k} \mathbf A_{k} \hat{x}_{k-1}\right) \\ H_{k}=P_{k}^{\prime} \mathbf C_{k}^{\mathrm{T}}\left(\mathbf C_{k} P_{k}^{\prime} \mathbf C_{k}^{\mathrm{T}}+R_{k}\right)^{-1} \\ P_{k}^{\prime}=\mathbf A_{k} P_{k-1} \mathbf A_{k}^{\mathrm{T}}+Q_{k-1} \\ P_{k}=\left(\mathbf I-\mathbf H_{k} \mathbf C_{k}\right) P_{k}^{\prime} \end{array}\right.
⎩⎪⎪⎨⎪⎪⎧x^k=Akx^k−1+Hk(yk−CkAkx^k−1)Hk=Pk′CkT(CkPk′CkT+Rk)−1Pk′=AkPk−1AkT+Qk−1Pk=(I−HkCk)Pk′
其中
Q
k
Q_k
Qk为过程噪声的方差,
R
k
R_k
Rk量测噪声的方差
递推流程:
利用
k
−
1
k-1
k−1时刻的状态变量
x
^
k
−
1
\hat{x}_{k-1}
x^k−1与经过校正后的状态变量的估计误差均方值
P
k
′
P_{k}'
Pk′代入
P
k
′
=
A
k
P
k
−
1
A
k
T
+
Q
k
−
1
P_{k}^{\prime}=\mathbf A_{k} P_{k-1} \mathbf A_{k}^{\mathrm{T}}+Q_{k-1}
Pk′=AkPk−1AkT+Qk−1
得到
P
k
′
P_{k}'
Pk′, 代入
H
k
=
P
k
′
C
k
T
(
C
k
P
k
′
C
k
T
+
R
k
)
−
1
\mathbf H_{k}=P_{k}^{\prime} \mathbf C_{k}^{\mathrm{T}}\left(\mathbf C_{k} P_{k}^{\prime} \mathbf C_{k}^{\mathrm{T}}+R_{k}\right)^{-1}
Hk=Pk′CkT(CkPk′CkT+Rk)−1
得到
H
k
\mathbf H_{k}
Hk,将其代入
P
k
=
(
I
−
H
k
C
k
)
P
k
′
P_{k}=\left(\mathbf I-\mathbf H_{k} \mathbf C_{k}\right) P_{k}^{\prime}
Pk=(I−HkCk)Pk′
x
^
k
=
A
k
x
^
k
−
1
+
H
k
(
y
k
−
C
k
A
k
x
^
k
−
1
)
\hat{x}_{k}=A_{k} \hat{x}_{k-1}+\mathbf H_{k}\left(y_{k}-\mathbf C_{k} \mathbf A_{k} \hat{x}_{k-1}\right)
x^k=Akx^k−1+Hk(yk−CkAkx^k−1)
最终得到
x
^
k
\hat{x}_{k}
x^k和
P
k
P_{k}
Pk。