什么是卡尔曼滤波?
你可以在任何含有不确定信息的动态系统中使用卡尔曼滤波,对系统下一步的走向做出有根据的预测,即使伴随着各种干扰,卡尔曼滤波总是能指出真实发生的情况。
在连续变化的系统中使用卡尔曼滤波是非常理想的,它具有占用内存小的优点(除了前一个状态量外,不需要保留其他历史数据),并且速度很快,很适合应用于实时问题和嵌入式系统。
卡尔曼滤波五大公式
定义变量
状态预测值:
x
^
k
−
\hat{x}_{k}^{-}
x^k−,维度
n
×
1
n\times 1
n×1
状态估计值:
x
^
k
\hat{x}_{k}
x^k
实际观测值:
y
k
y_{k}
yk,维度
m
×
1
m\times 1
m×1
输入量:
u
k
u_{k}
uk,维度
l
×
1
l\times 1
l×1
状态转移矩阵:
F
F
F,维度
n
×
n
n\times n
n×n
测量矩阵:
H
H
H,维度
m
×
n
m\times n
m×n
输入量到状态的转换矩阵:
B
B
B,维度
n
×
l
n\times l
n×l
状态噪声:
Q
Q
Q
观测噪声:
R
R
R
状态预测值的状态协方差矩阵:
P
^
k
−
\hat{P}_{k}^{-}
P^k−,表示状态预测值与状态真实值之间的误差协方差矩阵;
状态估计值的状态协方差矩阵:
P
^
k
\hat{P}_{k}
P^k,表示状态估计值与状态真实值之间的误差协方差矩阵;
卡尔曼滤波增益:
K
k
K_{k}
Kk
时间更新:
x
^
k
−
=
F
x
^
k
−
1
+
B
k
u
k
−
1
(
式
1
)
\hat{x}_{k}^{-} = F\hat{x}_{k-1} + B_{k}u_{k-1} (式1)
x^k−=Fx^k−1+Bkuk−1(式1)
P
^
k
−
=
F
P
^
k
−
1
F
T
+
Q
(
式
2
)
\hat{P}_{k}^{-} = F\hat{P}_{k-1}F^{T} + Q(式2)
P^k−=FP^k−1FT+Q(式2)
状态更新:
K
k
=
P
^
k
−
H
T
(
H
P
^
k
−
H
T
+
R
)
−
1
(
式
3
)
K_{k} = \hat{P}_{k}^{-} H^T(H\hat{P}_{k}^{-}H^T + R)^{-1}(式3)
Kk=P^k−HT(HP^k−HT+R)−1(式3)
x
^
k
=
x
^
k
−
+
K
k
(
y
k
−
H
x
^
k
−
)
(
式
4
)
\hat{x}_{k} = \hat{x}_{k}^{-} + K_{k}(y_{k} - H\hat{x}_{k}^{-})(式4)
x^k=x^k−+Kk(yk−Hx^k−)(式4)
P
^
k
=
(
I
−
K
k
H
)
P
^
k
−
(
式
5
)
\hat{P}_{k} = (I - K_{k}H)\hat{P}_{k}^{-}(式5)
P^k=(I−KkH)P^k−(式5)
预测过程是利用系统模型(状态方程)预测状态的先验概率密度,也就是通过已有的先验知识对未来的状态进行猜测,即
p
(
x
(
k
)
∣
x
(
k
−
1
)
)
p(x(k)|x(k-1))
p(x(k)∣x(k−1))。更新过程则利用最新的测量值对先验概率密度进行修正,得到后验概率密度,也就是对之前的猜测进行修正。
卡尔曼滤波推导过程
1、在k时刻,卡尔曼滤波的目的是得到估计值:
x
^
k
\hat{x}_{k}
x^k,通过(式4:通过观测值与状态预测值的误差,修正状态预测值,得到状态估计值,此为后验),已知:观测矩阵
H
H
H以及观测量
y
k
y_{k}
yk,需要确定k时刻的状态预测值
x
^
k
−
\hat{x}_{k}^{-}
x^k−和k时刻卡尔曼增益
K
k
K_{k}
Kk。
2、