卡尔曼滤波器综述瞿伟军G100741、卡尔曼滤波的起源1960年,匈牙利数学家卡尔曼发表了一篇关于离散数据线性滤波递推算法的论文,这意味着卡尔曼滤波的诞生。
斯坦利.施密特(Stanley Schmidt)首次实现了卡尔曼滤波器,卡尔曼在NASA埃姆斯研究中心访问时,发现他的方法对于解决阿波罗计划的轨道预测很有用,后来阿波罗飞船的导航电脑使用了这种滤波器。
关于这种滤波器的论文由Swerling (1958)、Kalman (1960)与 Kalman and Bucy (1961)发表。
2、卡尔曼滤波的发展卡尔曼滤波是一种有着相当广泛应用的滤波方法,但它既需要假定系统是线性的,又需要认为系统中的各个噪声与状态变量均呈高斯分布,而这两条并不总是确切的假设限制了卡尔曼滤波器在现实生活中的应用。
扩展卡尔曼滤波器(EKF)极大地拓宽了卡尔曼滤波的适用范围。
EKF的基本思路是,假定卡尔曼滤滤对当前系统状态估计值非常接近于其真实值,于是将非线性函数在当前状态估计值处进行台劳展开并实现线性化。
另一种非线性卡尔曼滤波叫线性化卡尔曼滤波。
它与EKF的主要区别是前者将非线函数在滤波器对当前系统状态的最优估计值处线性化,而后者因为预先知道非线性系统的实际运行状态大致按照所要求、希望的轨迹变化,所以这些非线性化函数在实际状态处的值可以表达为在希望的轨迹处的台劳展开式,从而完成线性化。
不敏卡尔曼滤波器(UKF)是针对非线性系统的一种改进型卡尔曼滤波器。
UKF处理非线性系统的基本思路在于不敏变换,而不敏变换从根本上讲是一种描述高斯随机变量在非线性化变换后的概率分布情况的方法。
不敏卡尔曼滤波认为,与其将一个非线性化变换线性化、近似化,还不如将高斯随机变量经非线性变换后的概率分布情况用高斯分布来近似那样简单,因而不敏卡尔曼滤波算法没有非线性化这一步骤。
在每一定位历元,不敏卡尔曼滤波器按照一套公式产生一系列样点,每一样点均配有一个相应的权重,而这些带权的样点被用来完整地描述系统状态向量估计值的分布情况,它们替代了原先卡尔曼滤波器中的状态向量估计值及协方差。
不敏卡尔曼滤器让这些样点一一经历非线性状态方程与测量方程,然后再将这些经非线性变换后的样点按照它们的权重而综合出对当前时刻的系统状态向量估计值。
多态自适应(MMA)卡尔曼滤波器是一种受到广泛关注的滤波器,它由好多个并联、同时运行的卡尔曼滤波器组成。
在这组卡尔曼滤波器中,每一个滤波器对未知的滤波参数分别做出相互不同的假设,然后各自按照自己的模型假设进行滤波计算,而多态自适应滤波器最后将它们对系统状态的各个估计值进行加权,并以此作为最优估计值输出。
3、卡尔曼滤波器概述简单来说,卡尔曼滤波器是一个“optimal recursive data processing algorithm(最优化自回归数据处理算法)”。
对于解决很大部分的问题,他是最优,效率最高甚至是最有用的。
他的广泛应用已经超过30年,包括机器人导航,控制,传感器数据融合甚至在军事方面的雷达系统以及导弹追踪等等。
近年来更被应用于计算机图像处理,例如头脸识别,图像分割,图像边缘检测等等。
卡尔曼滤波器由一系列递归数学公式描述,它们提供了一种高效可计算的方法来估计过程的状态,并使估计均方误差最小。
卡尔曼滤波器应用广泛且功能强大,它可以估计信号的过去和当前状态,甚至能估计将来的状态,即使并不知道模型的确切性质。
假设我们要研究的对象是一个房间的温度。
根据你的经验判断,这个房间的温度是恒定的,也就是下一分钟的温度等于现在这一分钟的温度(假设我们用一分钟来做时间单位)。
假设你对你的经验不是100%的相信,可能会有上下偏差几度。
我们把这些偏差看成是高斯白噪声(White Gaussian Noise),也就是这些偏差跟前后时间是没有关系的而且符合高斯分配(Gaussian Distribution)。
另外,我们在房间里放一个温度计,但是这个温度计也不准确的,测量值会比实际值偏差。
我们也把这些偏差看成是高斯白噪声。
现在对于某一分钟我们有两个有关于该房间的温度值:你根据经验的预测值(系统的预测值)和温度计的值(测量值)。
下面我们要用这两个值结合他们各自的噪声来估算出房间的实际温度值。
假如我们要估算k 时刻的是实际温度值。
首先你要根据1k -时刻的温度值,来预测k 时刻的温度。
因为你相信温度是恒定的,所以你会得到k 时刻的温度预测值是跟1k -时刻一样的,假设是23度,同时该值的高斯噪声的偏差是5度(5是这样得到的:如果1k -时刻估算出的最优温度值的偏差是3,你对自己预测的不确定度是4度,他们平方相加再开方,就是5)。
然后,你从温度计那里得到了k 时刻的温度值,假设是25度,同时该值的偏差是4度。
由于我们用于估算k 时刻的实际温度有两个温度值,分别是23度和25度。
究竟实际温度是多少呢?相信自己还是相信温度计呢?究竟相信谁多一点,我们可以用他们的协方差来判断。
因为252(5242)Kg ∧∧∧∧=+,所以0.78Kg =,我们可以估算出k 时刻的实际温度值是:230.78(2523)24.56+*-=度。
可以看出,因为温度计的协方差比较小(比较相信温度计),所以估算出的最优温度值偏向温度计的值。
现在我们已经得到k 时刻的最优温度值了,下一步就是要进入1k -时刻,进行新的最优估算。
到现在为止,好像还没看到什么自回归的东西出现。
对了,在进入1k -时刻之前,我们还要算出k 时刻那个最优值(24.56度)的偏差。
算法如下:((1)52)0.5 2.35Kg ∧∧-*=。
这里的5就是上面的k 时刻你预测的那个23度温度值的偏差,得出的2.35就是进入1k +时刻以后k 时刻估算出的最优温度值的偏差(对应于上面的3)。
就是这样,卡尔曼滤波器就不断的把协方差递归,从而估算出最优的温度值。
他运行的很快,而且它只保留了上一时刻的协方差。
上面的Kg ,就是卡尔曼增益(Kalman Gain )。
他可以随不同的时刻而改变他自己的值。
4、卡尔曼滤波器算法首先,我们先要引入一个离散控制过程的系统。
该系统可用一个线性随机微分方程(Linear Stochastic Difference equation )来描述:()(1)()()X k AX k BU k W K =-++ (3.1)再加上系统的测量值:()()()Z k HX k V k =+ (3.2)上两式子中,()X k 是k 时刻的系统状态,()U k 是k 时刻对系统的控制量。
A 和B 是系统参数,对于多模型系统,他们为矩阵。
()Z k 是k 时刻的测量值,H 是测量系统的参数,对于多测量系统,H 为矩阵。
()W K 和()V k 分别表示过程和测量的噪声。
他们被假设成高斯白噪声(White Gaussian Noise),他们的协方差分别是,Q R (这里我们假设他们不随系统状态变化而变化)。
对于满足上面的条件(线性随机微分系统,过程和测量都是高斯白噪声),卡尔曼滤波器是最优的信息处理器。
下面我们来用他们结合他们的协方差s 来估算系统的最优化输出。
首先我们要利用系统的过程模型,来预测下一状态的系统。
假设现在的系统状态是k ,根据系统的模型,可以基于系统的上一状态而预测出现在状态:(1)(11)()X k k AX k k BU k -=--+ (3.3) 式(3.3)中,(1)X k k -是利用上一状态预测的结果,(11)X k k --是上一状态最优的结果,()U k 为现在状态的控制量,如果没有控制量,它可以为0。
到现在为止,我们的系统结果已经更新了,可是,对应于(1)X k k -的协方差(协方差)还没更新。
我们用P 表示协方差:'(1)(11)P k k AP k k A Q -=--+ (3.4)式(3.4)中,(1)P k k -是(1)X k k -对应的协方差,(11)P k k --是(11)X k k --对应的协方差,'A 表示A 的转置矩阵,Q 是系统过程的协方差。
式子(3.3),(3.4)就是卡尔曼滤波器5个公式当中的前两个,也就是对系统的预测。
现在我们有了现在状态的预测结果,然后我们再收集现在状态的测量值。
结合预测值和测量值,我们可以得到现在状态()k 的最优化估算值()X k k :()(1)()(()(1))X k k X k k Kg k Z k HX k k =-+-- (3.5)其中Kg 为卡尔曼增益(Kalman Gain):''()(1)((1))Kg k P k k H HP k k H R =--+ (3.6)到现在为止,我们已经得到了k 状态下最优的估算值()X k k 。
但是为了要令卡尔曼滤波器不断的运行下去直到系统过程结束,我们还要更新k 状态下()X k k 的协方差: ()(())(1)P k k I Kg k H P k k =-- (3.7)其中I 为1的矩阵,对于单模型单测量,1I =。
当系统进入1k +状态时,()P k k 就是式子(3.4)的(11)P k k --。
这样,算法就可以自回归的运算下去。
式子(3.3),(3.4),(3.5),(3.6)和(3.7)就是卡尔曼滤波器的基本原理了。
根据这5个公式,可以很容易的实现计算机的程序。
5、卡尔曼滤波器的原理在现代,随机最优控制和随机信号处理技术中,信号和噪声往往是多维非平稳随机过程。
卡尔曼滤波理论采用时域上的递推算法在数字计算机上进行数据滤波处理。
对于离散域线性系统:()(1)(()())x k Ax k B u k w k =-++ (3.8)()()()v y k Cx k v k =+ (3.9)式中,()w k 为过程噪声信号, ()v k 为测量噪声信号。
离散卡尔曼滤波器递推算法为: ()()()T n T P k C M k CP k C R=+ (3.10) ()(1)T T P k AP k A BQB =-+ (3.11)()(())()n n P k I M k C P k =- (3.12)()(1)()(()(1))n v x k Ax k M k y k CAx k =-+-- (3.13)()()e y k Cx k = (3.14)误差的协方差为:cov()()T err k CP k C = (3.15)卡尔曼滤波器结构如图所示卡尔曼滤波器结构6、卡尔曼滤波器的应用实例6.1、基于VDLL 的GPS 信号跟踪算法图2 VDLL 的基本结构系统的状态量为用户状态( 位置、速度、用户钟差、用户钟漂移) ,观测量为所有卫星通道的码环鉴相器输出组成的矢量D(X)X =(x y z b x • y • z • b •)TD(X)=(D(Δτ1) D(Δτ2) … D(ΔτN ))T (3-1)其中x ,y ,z ,b ,x •,y •,z •,b •分别为在ECEF( Earth Centered Earth Fixed, 地心坐标系) 下的用户接收机三维位置和速度, b , b •分别为接收机钟差和钟差变化率。