您的位置 首页 编程

为什么叫“卡尔曼”,卡尔曼滤波器算法介绍

首先看看为什么叫“卡尔曼”。跟其他著名的理论(例如傅立叶变换,泰勒级数等等)一样,卡尔曼也是一个人的名字,而跟他们不同的是,他是个现代人!1、卡尔曼全名Rudolf Emil Kalman

  首要看看为什么叫“卡尔曼”。跟其他闻名的理论(例如傅立叶改换,泰勒级数等等)相同,卡尔曼也是一个人的姓名,而跟他们不同的是,他是个现代人!

  1、卡尔曼全名Rudolf Emil Kalman

  匈牙利数学家,1930年出生于匈牙利首都布达佩斯。1953,1954年于麻省理工学院别离取得电机工程学士及硕士学位。1957年于哥伦比亚大学取得博士学位。咱们现在要学习的卡尔曼滤波器,正是源于他的博士论文和1960年宣布的论文《A New Approach to Linear Filtering and Prediction Problems》(线性滤波与猜测问题的新方法)。

  简略来说,卡尔曼滤波器是一个“optimal recursive data processing algorithm(最优化自回归数据处理算法)”。关于处理很大部分的问题,他是最优,功率最高乃至是最有用的。他的广泛使用现已超越30年,包含机器 人导航,操控,传感器数据交融乃至在军事方面的雷达体系以及导弹追寻等等。近年来更被使用于计算机图画处理,例如头脸辨认,图画切割,图画边际检测等等。

  2、卡尔曼滤波器的介绍(Introduction to the Kalman Filter)

  为了能够愈加简略的了解卡尔曼滤波器,这儿会使用形象的描绘方法来解说,而不是像大多数参考书那样罗列一大堆的数学公式和数学符号。可是,他的5条公式是其核心内容。结合现代的计算机,其实卡尔曼的程序适当的简略,只需你了解了他的那5条公式。

  在介绍他的5条公式之前,先让咱们来依据下面的比如一步一步的探究。

  假定咱们要研讨的对象是一个房间的温度。依据你的经历判别,这个房间的温度是稳定的,也便是下一分钟的温度等于现在这一分钟的温度(假定咱们用一分钟来做时 间单位)。假定你对你的经历不是100%的信任,或许会有上下误差几度。咱们把这些误差当作是高斯白噪声(White Gaussian Noise),也便是这些误差跟前后时间是没有关系的并且契合高斯分配(Gaussian Distribution)。别的,咱们在房间里放一个温度计,可是这个温度计也不准确的,丈量值会比实践值误差。咱们也把这些误差当作是高斯白噪声。

  好了,现在关于某一分钟咱们有两个有关于该房间的温度值:你依据经历的猜测值(体系的猜测值)和温度计的值(丈量值)。下面咱们要用这两个值结合他们各自的噪声来预算出房间的实践温度值。

  假定咱们要预算k时间的是实践温度值。首要你要依据k-1时间的温度值,来猜测k时间的温度。由于你信任温度是稳定的,所以你会得到k时间的温度猜测值是跟k-1时间相同的,假定是23度,一起该值的高斯噪声的误差是5度(5是这样得到的:假如k-1时间预算出的最优温度值的误差是3,你对自己猜测的不确定度是4度,他们平方相加再开方,便是5)。然后,你从温度计那里得到了k时间的温度值,假定是25度,一起该值的误差是4度。

  由于咱们用于预算k时间的实践温度有两个温度值,别离是23度和25度。终究实践温度是多少呢?信任自己仍是信任温度计呢?终究信任谁多一点,咱们能够用他们的covariance来判别。由于Kg^2=5^2/(5^2+4^2),所以Kg=0.78,咱们能够预算出k时间的实践温度值是:23+0.78*(25-23)=24.56度。能够看出,由于温度计的covariance比较小(比较信任温度计),所以预算出的最优温度值倾向温度计的值。

  现在咱们现已得到k时间的最优温度值了,下一步便是要进入k+1时间,进行新的最优预算。到现在为止,如同还没看到什么自回归的东西呈现。对了,在进入k+1时间之前,咱们还要算出k时间那个最优值(24.56度)的误差。算法如下:((1-Kg)*5^2)^0.5=2.35。这儿的5便是上面的k时间你猜测的那个23度温度值的误差,得出的2.35便是进入k+1时间今后k时间预算出的最优温度值的误差(对应于上面的3)。

  便是这样,卡尔曼滤波器就不断的把covariance递归,然后预算出最优的温度值。他运转的很快,并且它只保留了上一时间的covariance。上面的Kg,便是卡尔曼增益(Kalman Gain)。他能够随不同的时间而改动他自己的值,是不是很奇特!

  下面就要言归正传,评论实在工程体系上的卡尔曼。

  3、卡尔曼滤波器算法(The Kalman Filter Algorithm)

  在这一部分,咱们就来描绘源于Dr Kalman 的卡尔曼滤波器。下面的描绘,会触及一些根本的概念常识,包含概率(Probability),随即变量(Random Variable),高斯或正态分配(Gaussian Distribution)还有State-space Model等等。但关于卡尔曼滤波器的具体证明,这儿不能逐个描绘。

  首要,咱们先要引进一个离散操控进程的体系。该体系可用一个线性随机微分方程(Linear Stochastic Difference equation)来描绘:

  X(k)=A X(k-1)+B U(k)+W(k)

  再加上体系的丈量值:

  Z(k)=H X(k)+V(k)

  上两式子中,X(k)是k时间的体系状况,U(k)是k时间对体系的操控量。A和B是体系参数,关于多模型体系,他们为矩阵。 Z(k)是k时间的丈量值,H是丈量体系的参数,关于多丈量体系,H为矩阵。W(k)和V(k)别离表明进程和丈量的噪声。他们被假定成高斯白噪声 (White Gaussian Noise),他们的covariance 别离是Q,R(这儿咱们假定他们不随体系状况改变而改变)。

  关于满意上面的条件(线性随机微分体系,进程和丈量都是高斯白噪声),卡尔曼滤波器是最优的信息处理器。下面咱们来用他们结合他们的covariances 来预算体系的最优化输出(相似上一节那个温度的比如)。

  首要咱们要使用体系的进程模型,来猜测下一状况的体系。假定现在的体系状况是k,依据体系的模型,能够依据体系的上一状况而猜测呈现在状况:

  X(k|k-1)=A X(k-1|k-1)+B U(k) ……….. (1)

  式(1)中,X(k|k-1)是使用上一状况猜测的成果,X(k-1|k-1)是上一状况最优的成果,U(k)为现在状况的操控量,假如没有操控量,它能够为0。

  到现在为止,咱们的体系成果现已更新了,可是,对应于X(k|k-1)的covariance还没更新。咱们用P表明covariance:

  P(k|k-1)=A P(k-1|k-1) A’+Q ……… (2)

  式(2)中,P(k|k-1)是X(k|k-1)对应的covariance,P(k-1|k-1)是X(k-1|k-1)对应的 covariance,A’表明A的转置矩阵,Q是体系进程的covariance。式子1,2便是卡尔曼滤波器5个公式傍边的前两个,也便是对体系的预 测。

  现在咱们有了现在状况的猜测成果,然后咱们再搜集现在状况的丈量值。结合猜测值和丈量值,咱们能够得到现在状况(k)的最优化预算值X(k|k):

  X(k|k)= X(k|k-1)+Kg(k) (Z(k)-H X(k|k-1)) ……… (3)

  其间Kg为卡尔曼增益(Kalman Gain):

  Kg(k)= P(k|k-1) H’ / (H P(k|k-1) H’ + R) ……… (4)

  到现在为止,咱们现已得到了k状况下最优的预算值X(k|k)。可是为了要另卡尔曼滤波器不断的运转下去直到体系进程完毕,咱们还要更新k状况下X(k|k)的covariance:

  P(k|k)=(I-Kg(k) H)P(k|k-1) ……… (5)

  其间I 为1的矩阵,关于单模型单丈量,I=1。当体系进入k+1状况时,P(k|k)便是式子(2)的P(k-1|k-1)。这样,算法就能够自回归的运算下去。

  卡尔曼滤波器的原理根本描绘了,式子1,2,3,4和5便是他的5 个根本公式。依据这5个公式,能够很简略的完成计算机的程序。

  下面,我会用程序举一个实践运转的比如。。。

  4、简略比如(A Simple Example)

  这儿咱们结合第二第三节,举一个十分简略的比如来阐明卡尔曼滤波器的作业进程。所举的比如是进一步描绘第二节的比如,并且还会配以程序模仿成果。

  依据第二节的描绘,把房间当作一个体系,然后对这个体系建模。当然,咱们见的模型不需求十分地准确。咱们所知道的这个房间的温度是跟前一时间的温度相同的,所以A=1。没有操控量,所以U(k)=0。因而得出:

  X(k|k-1)=X(k-1|k-1) ……….. (6)

  式子(2)能够改成:

  P(k|k-1)=P(k-1|k-1) +Q ……… (7)

  由于丈量的值是温度计的,跟温度直接对应,所以H=1。式子3,4,5能够改成以下:

  X(k|k)= X(k|k-1)+Kg(k) (Z(k)-X(k|k-1)) ……… (8)

  Kg(k)= P(k|k-1) / (P(k|k-1) + R) ……… (9)

  P(k|k)=(1-Kg(k))P(k|k-1) ……… (10)

  现在咱们模仿一组丈量值作为输入。假定房间的实在温度为25度,我模仿了200个丈量值,这些丈量值的平均值为25度,可是加入了标准误差为几度的高斯白噪声(在图中为蓝线)。

  为了令卡尔曼滤波器开端作业,咱们需求告知卡尔曼两个零时间的初始值,是X(0|0)和P(0|0)。他们的值不必太介意,随便给一个就能够了,由于跟着卡 尔曼的作业,X会逐步的收敛。可是关于P,一般不要取0,由于这样或许会令卡尔曼彻底信任你给定的X(0|0)是体系最优的,然后使算法不能收敛。我选了 X(0|0)=1度,P(0|0)=10。

  该体系的实在温度为25度,图顶用黑线表明。图中红线是卡尔曼滤波器输出的最优化成果(该成果在算法中设置了Q=1e-6,R=1e-1)。

  ××××××××××××××××××

  附matlab下面的kalman滤波程序:

  clear

  N=200;

  w(1)=0;

  w=randn(1,N)

  x(1)=0;

  a=1;

  for k=2:N;

  x(k)=a*x(k-1)+w(k-1);

  end

  V=randn(1,N);

  q1=std(V);

  Rvv=q1.^2;

  q2=std(x);

  Rxx=q2.^2;

  q3=std(w);

  Rww=q3.^2;

  c=0.2;

  Y=c*x+V;

  p(1)=0;

  s(1)=0;

  for t=2:N;

  p1(t)=a.^2*p(t-1)+Rww;

  b(t)=c*p1(t)/(c.^2*p1(t)+Rvv);

  s(t)=a*s(t-1)+b(t)*(Y(t)-a*c*s(t-1));

  p(t)=p1(t)-c*b(t)*p1(t);

  end

  t=1:N;

  plot(t,s,'r',t,Y,'g',t,x,'b');

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/fangan/biancheng/131604.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部