卡尔曼滤波随想

来源:互联网 发布:两点最短路径算法 编辑:程序博客网 时间:2024/04/29 07:20

       很久没有更新博客了,仿佛自己的灵魂已经弥散了一样。最近主要是在赶论文,虽然内容很水,但是好歹也要毕业啊!好不容易写完初稿,又懒得排版,即便对Word有一万个不满,还是得用下吧,不然以后怎么混?闭神的Latex模版是个不错的捷径其实~~~

    突然发现,毕业论文的受众就那么几个老师,说不定能真正搞明白你做的是神马的没几个,顿生失落与惆怅,不过还是要尽力做到最好吧。而博客上就不同了,每天登陆就会发现有好多人关注了自己,同时自己的来访量已过5000,这样的感觉很幸福,这也就是在论文这么关键的时期,我要挤出时间写点东西的缘故。同时,自己也发现来访量比较高的几篇都是自己下了心血来认真写的,这也给自己增添了不少压力。

    今天突然有写东西的冲动,主要来源于如下几点(发觉论文写多了,就喜欢列几点几点什么的):

   (1)看了篇关于卡尔曼滤波的科普文章,写的很好!关于卡尔曼滤波,还是今年智能车时,可爱的xiong学弟说他们要用这个算法来调传感器,这是我第一次听说这个名词(是不是很菜?惭愧了。。)。文章中讲到了卡尔曼滤波的核心:方差的回归问题。

   (2)同时,前几周看了几个网站上的趣题,其中有一道题是这样的:一个两轮车的左右轮分别在不同的路面上,请问你应该坐在偏左还是偏右的方向上?其实就是把路面的凹凸等效为高斯白噪声的方差,越不平的路面其方差就越大。

    我的大脑在同时接收了上面这两个信号后,它开始做检测算法了,它可以采用MRC、MMSE、LS等多种通信中常用的算法。它的目标就是从两个不同版本的信号中,提取出 上帝 传达给我的到底是什么讯息。最后,我采用的应该是MRC-A算法吧,这个名字从LTE-A中获取的灵感,加个Advance就是更高级的意思啦~。其实也可以取作E-MRC,加个Evolution,就是演进版本的MRC了,这些都是来自毕设的灵感。关于灵感,我想多说几句,一直很喜欢的一句话就是:越努力,你的运气越好!是的,灵感机会虽然都是一瞬间的事,但是为了这一瞬间,你必须付出很多。校内上毕业老师倒计时的照片很火,就是离毕业还有10100(20)天等,为什么别人用的是二进制,我们也要用二进制呢?虽然二进制象征着我们的专业,但是十六进制在你写单片机程序的时候不是用得更多?八进制也不错啊?别人用的是纸张,我们为什么还用呢?我们难道还不能自己编写个数码管程序来指示?其实只想说的是,灵感其实就是专利,它只属于努力争取的那个人。关于MRC-A,类似于最大权重合并,我是把两个版本信号中与卡尔曼滤波相关的成分赋予了足够的权重,其他的就不管了。


    今天正题开始前的杂文说的比较多,可能是很久没写的缘故吧。好了,言归正传,先谈谈那道趣题,我觉得它是一个很好的引理。


我们怎么求解呢?很简单,就是表示出来,求导外加判断就行了,下面公式就用Mathtype来敲吧,毕设就靠这个弄的,对不住Latex了。首先把S的方差表示出来,如下所示:

                                   

然后对其求一阶导,并令它等于0,求出一个a值,如下:

                             

求解出a的值为:

                                                            

同时,经过验证,它的二阶导数大于零,即所求解就是使方差最小的解。按这样的重心方式,你坐在两轮车上面就会觉得最平坦最舒服啦~


谈完了趣题后,我们回到卡尔曼滤波上来,根据那篇科普文章的说明,其实卡尔曼滤波就是根据预测值和测量值来估计准确值的过程,它里面举出了一个非常好的例子就是关于一个室内温度估计。引用过来如下:

假设我们要研究的对象是一个房间的温度。根据你的经验判断,这个房间的温度是恒定的,也就是下一分钟的温度等于现在这一分钟的温度(假设我们用一分钟来做时间单位)。假设你对你的经验不是100%的相信,可能会有上下偏差几度。我们把这些偏差看成是高斯白噪声(White Gaussian Noise),也就是这些偏差跟前后时间是没有关系的而且符合高斯分配(Gaussian Distribution)。另外,我们在房间里放一个温度计,但是这个温度计也不准确的,测量值会比实际值偏差。我们也把这些偏差看成是高斯白噪声。

好了,现在对于某一分钟我们有两个有关于该房间的温度值:你根据经验的预测值(系统的预测值)和温度计的值(测量值)。下面我们要用这两个值结合他们各自的噪声来估算出房间的实际温度值。

假如我们要估算k时刻的是实际温度值。首先你要根据k-1时刻的温度值,来预测k时刻的温度。因为你相信温度是恒定的,所以你会得到k时刻的温度预测值是跟k-1时刻一样的,假设是23度,同时该值的高斯噪声的偏差是5度(5是这样得到的:如果k-1时刻估算出的最优温度值的偏差是3,你对自己预测的不确定度是4度,他们平方相加再开方,就是5)。然后,你从温度计那里得到了k时刻的温度值,假设是25度,同时该值的偏差是4度

好了,这个不就是我们上面那道趣题的特殊情况嘛(相关系数等于0),我们这里同样是有两个方差,我们要使误差最小,即是使估计值的方差最小,而估计值就是从唯一的这两个数据源加权得到,不就是相当于我们应该把重心更偏向哪个轮子一样吗?我们猜想的确没错,卡尔曼滤波里的卡尔曼增益Kg就是这么定义的,对于上面这个情况,它的Kg值就是把上面的公式相关系数取为0,即得:

                             

注意,我们这里的Kg的平方值就是等于前面的b值,意思就是Y的权重,容易想到的就是X方差越大,它的权重越小。接下来,有了Kg,我们就可以得出最小方差意义下的估计值,如下计算:

                          

然后,我们就计算本次估算的最优值Testimation与真实值间的误差,估算前的误差是5(sqrt(3^2+4^2),其中3就是上一时刻我们估算值与最优值的偏差,4是对自己的估算不自信带来的偏差),而估算后呢?通过计算即为:((1-Kg)*5^2)^0.5=2.35,然后不断递归计算就可得最后精确值,其实就是方差的递归啦!


后记:关于Kg,其实自己还是不太明白,为什么就有个平方的关系,希望自己再多学习相关知识后,来解答吧。Mathtype的效果真丑,下次还是坚持用Latex吧!



原创粉丝点击