卡尔曼滤波器综述
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
卡尔曼滤波器综述
瞿伟军
G10074
1、卡尔曼滤波的起源
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 )。他可以随不同的时刻而改变他自己的值。