心胸决定格局,眼界决定境界...

如何通俗并尽可能详细解释卡尔曼滤波?

https://www.zhihu.com/question/23971601

 

先来点背景音乐:我种下一颗种子,终于长出了果实。。

 

好吧,假设你在去一个风景区旅游的时候,种下了一棵果树,但显然从果树幼苗到果实不是一天两天能完成的啊,需要慢慢长高。而你又不可能经常去看,但又想知道果树的高度,那怎么办?

所以要解决的问题是:如何正确估计一棵果树的高度?

我们把想要知道的果树高度叫做待估的状态变量。我们想一年知道一次,这就叫做步长。

你需要知道种下果树的时候大概高度啊,于是你想了想,大概1米吧,但我也不确定,有可能90公分也有可能110公分。于是这个1米,叫做你的初始状态估计,这个10公分的不确定性,叫做状态估计的误差协方差矩阵,后续它会随着你的下一步估计而变化。

 

怎么办呢?

你在网上查了查,这种果树差不多每年都比前一年生长10%的高度(纯假设而已哈),这个生长的规律/模型就叫做状态转移矩阵。于是根据模型,假如2017年有1米,2018年就大概有1.1米。

但显然这个模型不适用于任意一棵果树和你种植当地的实际日照风土情况,而且你明明知道果树不可能无限增长。所以咱们的模型不可能是100%准确的,我们用一个叫做过程噪声的东西来衡量它。可以理解为模型递推下去的不准确度。比如假设这个估计模型误差在0.3米,这叫做白噪声。过程噪声越小就意味着你相信生长模型很准确,越大就表示模型越垃圾。

 

但尽管如此还是不靠谱啊,闭门猜果树高度肯定不可能一直准,这个时候我们需要找一下本地的朋友们定期去看一眼。由于是拜托他们帮忙,也不想真要求他们爬上去拿尺子量,大概给个数就行,这个朋友帮忙看到的高度就是我们的测量值。

假设有朋友A和B,朋友A很认真,每次都拿尺子大概比一比,告诉你都用大概多少分米来说,比如大概1米8到1米9吧;而朋友B不认真,只瞄一眼说大概1.5-2米吧。但是A有一个坏处,比较懒,两年才给你发个短信;B比较勤快,每年就有。这个2年或者1年就叫做测量更新频率。我们需要他们尽可能提供数据,所以两个都要采纳。而且这两个测量一个来自尺子一个来自视力,不同的测量类型我们都能同时使用,太好了!

你明显觉得A比B要靠谱一些,于是认为A的精度在分米级,B的精度在半米级,这个分米和半米叫做他俩的测量噪声。基于这个测量噪声你可以建立一个测量噪声矩阵,衡量在参考时对A和B观测值的权重。

 

那么你现在明白了,既需要果树生长模型,这样即便A和B不给我数据,我也大概能估计出明年这个树的高度。但也不能只依靠模型,比如果树进入成熟期慢慢就不长了,我们也需要A和B的观测值去校正估计,那么就需要把他们融合在一起。

 

于是,从模型这里,有一个衡量初始估计是否准确的矩阵叫做状态估计协方差矩阵,有一个衡量生长模型准确度的过程噪声矩阵;从观测那里有一个衡量观测是否准确的矩阵叫做观测噪声协方差矩阵。

我们把它和模型融合在一起,就变成了一个叫做增益矩阵的东西。糊涂了?别着急,其实增益矩阵就是一件事情:我到底是应该相信我推的模型多,还是应该相信来自A和B的测量多呢?

 

于是通过增益矩阵和这一系列矩阵,你建立了一套系统:当模型比较准确时,我相信模型多一点,当它不准时我相信实际测量多一些。而且还有一个优势,测量帮助我校正模型准确度;当A和B突然不给我测量时,我也能通过已经建立好的这套体系估计在下一个步长(明年)果树的高度。

 

卡尔曼滤波就这样建立起来了。

最理想的情况是怎样?

最准确的果树初始高度估计,=较小的状态估计误差

最准确的果树生长状态模型,=较小的过程噪声

最准确的果树测量值,=较小的测量噪声,而且测量类型越多越好(尺子和视力)



卡尔曼博士在1960年去了NASA访问,把这套理论首次提出,震惊了NASA,于是很快采用。美国的标志性阿波罗登月任务,就是使用这套崭新的估计理论,登上月球的!

大家经常开玩笑,说阿波罗登月是”划着洗衣盆飘过大西洋“,那么这套估计理论大概就相当于洗衣盆上的那个舵手了。现在在航天领域,卡尔曼滤波是一种殿堂级的理论,应用的

到处都是!

到处都是!

到处都是啊!

2016年86岁的鲁道夫卡尔曼博士仙逝了,祝他在天堂里依然幸福!

 

 

作者:周啸
链接:https://www.zhihu.com/question/23971601/answer/137325095
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

觉得不够通俗的其实只用看前半段就好了…………后半段就是套公式并说明公式怎么来的

你们啊,说的还是不够通俗。
假设我养了一只猪:
一周前,这只猪的体重是46±0.5kg。注意,在这里我用了±0.5,表示其实我对这只猪一周前的体重并不是那么确定的,也就是说,46kg这个体重有0.5kg的误差。
现在,我又养了这只猪一个星期。那么我想要知道它一个星期之后多重,又大概有多少的误差?
为了得到一周后的体重,我有两种方法:一是根据我多年的养猪经验得到的猪体重公式推求出一个大概的值,另一个就是直接去称它的体重。当然,两种方法都有一定的误差。假设经验公式得到的体重是48kg,误差2kg;直接称体重得到的是49kg,误差1kg:
可是,我是一个处女座的人,不管是经验公式得到的值,还是直接称量得到的值,我都觉得不够准。我希望有一种方法,可以同时结合这只猪一周前的体重、用经验公式估计的值以及直接称量得到的值,综合考虑,得出一个最接近猪真实体重的,误差最小的值。这就是卡尔曼滤波要完成的任务。
现在我们来把养猪的模型抽象成数学公式:
上图的左边,上一周的猪的体重,可以抽象为也k-1时刻的状态值,用k-1时刻的最优估计值加上一个误差项来表示,右边同理。其中,这一项表示的是估计值的协方差。这里要说明两点:1,上图中所有的变量都是用粗体,表示这是一个向量或者一个矩阵;2,之所以用(列)向量而非一个数来表示状态值,是因为,虽然一只猪的体重可以用一个值来表示,但是在实际的应用中很多状态并不是一个数就能表示的(比如导弹在空间中的位置,同时有x、y、z三个坐标)。
上图中右边表示k时刻的状态值,这个值可以通过预测模块(也就是根据经验公式估计猪的体重)和纠错模块(也就是直接去称量猪的体重值)来估计。同样,预测模块和纠错模块都有着对应的误差和误差协方差矩阵。卡尔曼滤波要做的,就是根据贝叶斯估计的相关理论,同时考虑预测模块和纠错模块的协方差,对误差小的项赋予较大的权重,对误差大的项赋予较小的权重,并使预测的误差最小。
具体的实现过程如下:
至于具体的这个过程是怎么推求的,每个参数的详细解释又是怎么样的,这个在所有介绍卡尔曼的滤波的书上都有讲述,也并不是一个帖子就能说清楚的,这里就不展开讲了~
谢谢各位看官~

个人觉得何毓琦老师(曾与Kalman合作,何老博客里有不少介绍)的这篇博文讲得算是非常好了,虽然仍有公式。

http://blog.sciencenet.cn/blog-1565-14253.html
信号处理中的滤波实质上就是讲降噪。一个信号通常是有用的原始信号与一个噪声的叠加,噪声一般用高斯白噪声描述,它们混在一起了,我放大信号噪声也放大,缩小噪声信号也缩小,一般我没有通用办法改善信噪比。但是如果我有好几个信号,里面包含了相同的原始信号,我把它们叠加在一起,原始信号是相干叠加,幅度变成两倍功率变成了四倍,而噪声是非相干叠加,许多地方会相互抵消,功率只变成两倍,这样信噪比就提高了一倍。所有的“滤波”降噪,本质上都是通过相干叠加增强原始信号提高信噪比的。
上面的情况是信噪比相同,如果信噪比不同呢?用一步柯西不等式就能证明,对于噪声功率相同的信号,只要按各自信号功率比例混合,就能最大化信噪比。
最后,如果不是另采了一个信号,而是用历史测量值来预测,将预测值作为另一个信号,这个预测值的信噪比是可以推算出来的,再采用前面的方法就得到卡尔曼滤波
 
 
 
posted @ 2018-01-06 23:20  WELEN  阅读(938)  评论(0)    收藏  举报