卡尔曼滤波
将带有噪声的实际测量值mk与模型估计值xk进行数据融合,从而获得更精确的估计值。核心是对kk进行求解。
xkkk=xk−1+kk(mk−xk−1)=kkmk+(1−kk)xk−1=eESTk−1+eMEAkeESTk−1(1.1)
卡尔曼滤波只涉及:上一次的估计值xk−1;当前测量值mk;卡尔曼滤波系数kk。kk由上一次估计误差eESTk−1与当前的测量误差eMEAk−1组成。
eEST=估计值−真实值eMEA=测量值−真实值(1.2)
目标:将两组测量数据合并,得到一个方差更小更精确的数据:δ 小于 δ1 和 δ2
{m1(z1,δ1)m2(z2,δ2)=>m(z,δ)(2.1)
步骤:
- 引用卡尔曼思路:令z=z1+k(z2−z1);
- 将上式进行方差计算:δ2(z)=var(z1+k(z2−z1))=(1−k)2δ12+(kδ2)2
- 求令δ最小的k:dkdδ2=0;计算出k值。
概念:
-
方差(variance):体现的是数据偏离期望值(均值)的程度
δx2=n1[(x1−x)2+(x2−x)2+⋯+(xn−x)2](2.2)
-
协方差(Covariance):衡量两个变量的总体误差
δxy2=n1[(x1−x)(y2−y)+⋯+(xn−x)(yn−y)](2.3)
-
协方差矩阵:囊括了多个变量的方差和协方差
xyzxyz⎣⎡δx2δyx2δzx2δxy2δy2δzy2δxz2δyz2δz2⎦⎤(2.4)
计算:以三个变量为例
- 过度矩阵
a=⎣⎡x1x2x3y1y2y3z1z2z3⎦⎤−31⎣⎡111111111⎦⎤⎣⎡x1x2x3y1y2y3z1z2z3⎦⎤
- 协方差矩阵:p=31aTa
卡尔曼滤波只能应用于线性模型。
{xkmk=Axk−1+Buk+wk=Hxk+vk(2.5)
wk为数学模型的噪声,满足P(w)∼(0,Q);vk为数学模型的噪声,满足P(v)∼(0,R)。其中Q与R为协方差矩阵。
以状态方程为例:
-
先验:由于wk不可测,通过模型能计算的值是先验值x^k−。
x^k−=Ax^k−1+Buk(2.6)
-
后验:最终通过卡尔曼滤波估计到的值x^k
1)问题描述
先验估计值:x^k−=Ax^k−1+Buk
测量估计值:x^E=H−1zk
后验估计值:x^k=x^k−+G(H−1zk−x^k−);令G=kkH,得x^k=x^k−+kk(zk−Hx^k−)
目标:求出kk实现ek−=x^k−xk=>0
注意
对于后验估计:x^k=x^k−+kk(zk−z^k−), z^k−=Hx^k− 是通过过测量值的偏差进行数据修正的。因此就能进行模型的参数估计(参数辨识),用于外推预测。
2)目标具体化
假设ek满足正太分布:P(e)∼(0,Pe)。
问题的目标是让ek→0。根据正太分布假设,就是要 tr(Pe)最小。
tr(Pe)=δe12+δe22+⋯(3.1)
3)计算 Pek=E(eeT)
Pek=(Pek−−kkHPek−)(I−HTkkT)+kkRkkT带入后面的kk=Pek−−kkHPek−(3.2)
4)计算 dkkdtr(Pek)=0
kk=HPek−HT+RPek−HT(3.3)
5)计算Pek−=E(ek−ek−T)
Pek−=APe k−1AT+Q(3.4)
预测部分:
- 先验估计值: x^k−=Ax^k−1+Buk
- 先验估计协方差:Pek−=APe k−1AT+Q
校正部分:
- 卡尔曼系数:kk=HPek−HT+RPek−HT
- 后验估计值:x^k=x^k−+kk(zk−Hx^k−)
- 更新误差协方差:Pek=Pek−−kkHPek−
卡尔曼滤波器