卡尔曼滤波适用于线性高斯系统,即系统满足叠加性、齐次性,噪声满足正态分布。其使用上一次的最优结果预测当前的值(先验估计),同时使用观测值修正当前值,得到最优结果。
卡尔曼、粒子滤波实际应该叫做估计器(Estimator),估计当前值叫滤波(Filtering),估计过去叫平滑(Smoothing),估计未来叫预测(Predicting)。
卡尔曼滤波利用目标的动态信息,设法去掉噪声的影响,得到一个关于目标位置的好的估计。这个估计可以是对当前目标位置的估计(滤波),也可以是对于将来位置的估计(预测),也可以是对过去位置的估计(插值或平滑)。
卡尔曼滤波假设系统状态与噪声是高斯的,可以用均值和方差来描述。则上述状态空间模型可以被表述为:
系统状态方程
x k = A x k − 1 + B u k − 1 + w k − 1 x_k = Ax_{k-1} + Bu_{k-1} + w_{k-1} xk=Axk−1+Buk−1+wk−1
系统观测方程
z
k
=
H
x
k
+
v
k
z_k = H x_k+v_k
zk=Hxk+vk
卡尔曼滤波的两个假设
根据上一时刻(
k
−
1
k-1
k−1 时刻) 的后验估计值来估计当前时刻(
k
k
k 时刻) 的状态,得到
k
k
k 时刻的先验估计值;
x
^
k
‾
=
A
x
^
k
−
1
+
B
u
k
−
1
\hat x_{\overline k} = A\hat x_{k-1} + Bu_{k-1}
x^k=Ax^k−1+Buk−1
P k ‾ = A P k − 1 A T + Q P_{\overline k} = AP_{k-1}A^T + Q Pk=APk−1AT+Q
使用当前时刻的测量值来更正预测阶段先验估计值,得到当前时刻的后验估计值。
K
k
=
P
k
‾
H
T
H
P
k
‾
H
T
+
R
K_k = \frac{P_{\overline k }H^T}{HP_{\overline k}H^T + R}
Kk=HPkHT+RPkHT
x ^ k = x ^ k ‾ + K k ( z k − H x ^ k ‾ ) \hat x_k = \hat x_{\overline k} + K_k(z_k- H\hat x_{\overline k}) x^k=x^k+Kk(zk−Hx^k)
P k = ( I − K k H ) P k ‾ P_k = (I - K_kH) P_{\overline k} Pk=(I−KkH)Pk
P k P_{k} Pk: k k k 时刻后验估计协方差(即 x ^ k \hat x_{k} x^k 的协方差,表示状态的不确定度),是滤波的结果之一。
I I I:单位矩阵
K k K_k Kk:卡尔曼增益,或卡尔曼系数。
H H H:是状态变量到测量(观测)的转换矩阵。
P k ‾ P_{\overline k} Pk: k k k 时刻的先验估计协方差( x ^ k ‾ \hat x_{\overline k} x^k 的协方差)
prediction
x
′
=
F
x
+
u
P
′
=
F
P
F
T
+
Q
x^\prime = Fx + u \\ P^\prime = FPF^T + Q
x′=Fx+uP′=FPFT+Q
update
y
=
z
−
H
x
′
S
=
H
P
′
H
T
+
R
K
=
P
′
H
T
S
−
1
x
=
x
′
+
K
y
P
=
(
I
−
K
H
)
P
′
y = z-Hx^\prime \\ S = HP^\prime H^T + R \\ K = P^\prime H^T S^{-1} \\ x = x^\prime + Ky \\ P = (I - KH)P^\prime
y=z−Hx′S=HP′HT+RK=P′HTS−1x=x′+KyP=(I−KH)P′
code