关于卡尔曼滤波器的一个简单介绍
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
关于卡尔曼滤波器的一个简单介绍
在实际生产过程中,我们经常需要使用某种仪器测量某一物理参数。比如,用一台仪器测量大气中一氧化碳的浓度。由于测量误差永远存在,使得这样两个问题非常突出,首先,是否存在某个计算方法,能够从含有误差的测量结果中获得比较接近真实值的结果;其次,如何证明这样的结果是最优的,也就是说有没有这样一种数学方法,经过其进行处理后得到的测量结果是最接近真实值的。
为了消除测量误差,人们首先想到的方法是取平均值。通过对于同一物理量的多次测量,抵消可能存在的测量误差,从而得到真实值。但是,通过生产实践,人们很快发现这样的测量方法并不是最优的。如果参与平均值计算的数据量太小,就达不到抵消测量误差的目的,如果参与计算的数据量太多,不仅完全消除了可能的物理量变化,而且实现起来非常麻烦。
1960年,匈牙利数学家卡尔曼(Rudolf Emil Kalman,1930年出生于匈牙利首都布达佩斯。1953,1954年于麻省理工学院分别获得电机工程学士及硕士学位,1957年于哥伦比亚大学获得博士学位)在他的博士论文和1960年发表的论文《A New Approach to Linear Filtering and Prediction Problems》(线性滤波与预测问题的新方法)中提出一种计算方法,后来被称为卡尔曼滤波器。这种滤波器比较简单,但是对于绝大多数类似本文开头提出的问题,可以证明,它得出的结果是最优的。卡尔曼滤波器的最大优势是它非常简单,非常容易实现。故而在各领域广泛应用超过三十年。
下面简单介绍卡尔曼滤波器,为了便于阅读,尽量少使用数学公式。下面的用词不是非常严格的。
假如,我们需要用一个温度计测量一个房间的温度。每个1秒钟从温度计上读取一个数值。假设这个房间的真实温度是25度。
由于温度计本身有测量误差,我们得到的测量值是围绕25度上下波动的一组数值。“围绕”这一特性是符合我们的直观感受的。也就是说虽然温度计上的读数在不停的变化,但是我们知道温度计上出现26度或24度的可能性要比出现30度或20度的可能性大。这种特性在数学上被称为高斯分布。当有很多因素影响测量结果,而每种干扰因素都不起主导作用时,测量的结果呈现高斯分布。对于温度计来讲,制造工艺,空气扰动,我们读数时候的误差都可能影响测量结果。所以,温度计的读取结果是符合高斯分布的。高斯分布有两个参数,一个叫做期望,在这里可以等同于平均值,一个叫做方差。方差反映了数据的集中程度。比如一个温度计测量的结果分布在24到26度之间,另一个温度计测量结果在20到30度之间,显然,前一个温度计更好一些。它的数据方差就比较小。这里假设我们温度计的方差是3。于是,温度计的测量结果就是期望是25,方差是3的一组数据。
另外,我们可以根据经验猜测一下房间的温度(就好像把自己当成一个人体温度计),比如,我们猜测房间的温度是23度,当然,我们自己猜测的结果是有方差的,我们假设这个方差是4,于是根据人的感觉,测量结果是期望是23,方差是4的一组数据。
然后,由经验我们知道房间温度变化不大,基本可以认为,这一秒的温度和下一秒的温度是相等的。
现在,在第1秒,我们有了两个值,一个是温度计上显示的数据,25。一个是我们自己
根据感觉得出来的数据,23。那么相信谁呢?这里有一个数学公式
2
2
22
3
34
g
k=
+
,可以算出
kg=0.6,于是25×0.6+23×(1-0.6)=24.2,这个24.2就是我们在第1秒得到的测量结果。也就是说第1秒的温度是24.2度。
现在,我们进入了第2秒,这时,由于我们已经知道了第1秒的温度是24.2度,所以,
=,这里的4来自
3.0984
人体温度计的那个方差4。于是,温度计的方差已经变成了3.0984。
在第2秒,我们从温度计上获得的读数是26度,方差是3.0984。我们自己的感觉是22度,方差是4。按照第1秒的计算方法,就能得到第2秒的温度值。如此循环计算下去,就是卡尔曼滤波。
可见,卡尔曼滤波是这样一种计算方法,在两个测量值中取平衡,在第一秒,我们有60%相信温度计,40%相信自己。但是随着计算的进行,这个平衡可以改变。Kg被称为卡尔曼增益(Kalman Gain)。它可以随不同的时刻而改变他自己的值。
为什么如此计算超出了本文的范围。但是可以证明,随着时间的增加,Kg能够变化到一个合适的值,使得测量的结果最接近真实值。
卡尔曼滤波的程序实现以及仿真例子:
c1=23;假设我们的感觉是23
P1=10;初始参数,带来一个初始的kg
Q=1e-6;人体感觉的方差
R=1e-2;温度计的方差
for m=1:200 这里我模拟了两百个参数
P2=P1+Q;
c2=c1;假设室内温度不变
kg=P2/(P2+R);
c(m)=c2+kg*(b(m)-c2);b(m)代表在第m秒的温度计读数,c(m)是经过卡尔曼滤波
后得到的读数
P1=(1-kg)*P2;
c1=c(m);
end
仿真结果如上图所示,这里黑色线是由温度计测量出的结果,绿色线是真实值(25),红色线是卡尔曼滤波的结果,作为对比,蓝色线是五点平均的结果,也就是取过去的五个数值进行平均。可以看出,由于存在测量误差,温度计测出的值(黑色)围绕真实值(绿色)上下波动。直观的看,卡尔曼滤波结果(红线)比五点平均值滤波(蓝线)更接近真实值(绿线),显示出卡尔曼滤波比五点平均值滤波的结果更加优越。数学上可以证明,卡尔曼滤波得到的结果比其它的滤波器都要接近真实值,是最优结果(在最小二乘意义下)。
几点提示
1,在开始的头几个数据,卡尔曼滤波与五点平均滤波都距离绿线比较远。但是随着时间的推移,卡尔曼滤波的结果逐渐接近了绿线。实际上,对于初始参数,
例如上面的25,23,3,4的选择要求并不严格。在本文的条件下,卡尔曼滤波
结果都能接近真实值。当然,如果参数选的好,接近的就比较快。
2,假设室内温度变化不大这一提法,被称为系统建模。由于室内温度变化不大,得出程序中的C2=C1,也就是这一秒的温度等于前一秒的温度。这就是系统
的数学模型。这对于卡尔曼滤波非常重要。如果这个房间有一个电暖器和一个
大空调,导致房间温度忽上忽下,再使用C2=C1这一数学模型就得不到正确
结果了。这不是卡尔曼滤波的问题,而是系统建模的问题。比如有一个锅炉给
房间加热,这时的模型就应该写作C2=N×C1,N是一个大于1的系数。正确
的模型是卡尔曼滤波器正确工作的前提。好在大气中的CO等等变化速度都不
可能太快,所以C2=C1这一模型一般还是正确的。
3,卡尔曼滤波要求误差是正态分布的。也就是说,如果温度是25度,温度计的读数应该在25度上下,不能越来越高(对于测量误差不是正态分布的情况,人们
还设计出了改进的卡尔曼滤波器)。
4,程序中的P和Q的取值会直接影响到卡尔曼滤波器的性能。滤波结果改变的比较快,它的稳态误差就比较大,如果要求稳态误差小,滤波器的快速性就不好。
这是一对矛盾的指标。现在在工程上,P和Q的取值还是需要试凑的(即使卫
星的设计中也是如此)
几个进一步的例子