卡尔曼滤波(Kalman Filter) 的进一步讨论
我们在上一篇文章中通过一个简单的样例算是入门卡尔曼滤波了。本文将以此为基础讨论一些技术细节。
卡尔曼滤波(Kalman Filter)
http://blog.csdn.net/baimafujinji/article/details/50646814
在上一篇文章中。我们已经对HMM和卡尔曼滤波的关联性进行了初步的讨论。參考文献【3】中将二者之间的关系归结为下表。
上表是什么意思呢?我们事实上能够以下的式子来表示,当中,w 和 v 分别表示状态转移 和 測量 过程中的不确定性,也即是噪声,既然是噪声就能够假设它们服从一个零均值的高斯分布。这事实上跟我们在上一篇文章中所给出的形式是一致的。也就是说我们觉得过去的状态假设是 xt-1。那么当前状态xt应该是 xt-1的一个线性变换。而这个预计过程事实上是有误差的,用一个零均值的高斯噪声(概率分布)来表达。
相似地,当前的測量值yt应该是真实值 xt 的一个线性变换。而这个測量过程仍然是有误差的,也用一个零均值的高斯噪声(概率分布)来表达。
(1)
上一节中我们还讲过,在 [t0, t1] 时间段内的測量为Y,对应的预计为,则当t = t1 时,
称为X(t)的预计(或者称为滤波)。当然如今我们也只须要将注意力放在滤波上。所以终于要求的应该是以下这个式子
依据条件概率的链式法则以及马尔科夫链的无记忆性,再去掉常值系数的情况下,就能够得到以下的结论(假设你对有关数学公式记得不是非常清楚能够參考http://blog.csdn.net/baimafujinji/article/details/50441927)
当中,P( xt | y1, … , yt-1)就是Prediction(预測),由于它表示的意义是已知从1到t-1时刻的观測值y1, … , yt-1的情况下求 t 时刻的状态值xt。
还有一方面,P( xt | y1, … , yt)就是Update,由于它表示当我们已经获得yt时。再对xt 进行的一个更新(或修正)。
依据马尔科夫链的无记忆性,可知P( yt | xt, y1, … , yt-1) = P( yt | xt) 。
就预測部分而言。我们希望引入xt-1。所以能够採用以下的方法(这事实上就是我们在处理普通贝叶斯网络时所用过的方法)
到此为止。事实上你应该能够看出来卡尔曼滤波就形成了一个递归求解的过程。也就是说。我们欲求P( xt | y1, … , yt-1),就须要先求P( xt-1 | y1, … , yt-1),而欲求P( xt-1 | y1, … , yt-1),就要先求P( xt-2 | y1, … , yt-1) ……结合上一篇文章介绍的内容,事实上能够总结卡尔曼滤波的步骤例如以下
也就是说当t = 1时。我们依据观測值y1去预计真实状态x1,这个过程服从一个高斯分布。
然后。当t = 2时,我们依据上一个观測值y1去预測当前的真实状态x2,在获得该时刻的真实观測值y2后,我们又能够预计出一个新的真实状态x2。这时就要据此对由y1预測的结果进行修正(Update),如此往复。
接下来,我们引入一个服从零均值高斯分布的(噪声)变量 Δxt-1。
然后试着将Δxt和Δyt以Δxt-1的形式来给出,并且处于方便的考虑。我们忽略掉公式(1)中的控制项 B 和 C。于是有
依据独立性假设,还可知例如以下结论(这些都是兴许计算推导过程中所须要的准备):
以下我们要做的事情就是推导卡尔曼滤波的五个公式,在上一篇文章中,我们很多其它地是从感性的角度给出了这些公式。并没有给出具体的数学推导,接下来我们就要来完毕这项任务。
综上我们已经完整地给出了卡尔曼滤波的理论推导。
对于结论性的东西。你当然能够直接拿来使用。
在一些软件包中,卡尔曼滤波无非是一条命令或者一个函数就能搞定。
我们之所以还在这里给出它的具体推导,主要是鉴于这样的思想事实上在机器学习中也被广泛地用到,所以了解这些技术细节仍然十分有意义。
===================================================================================================
假设你是图像处理的同道中人,欢迎增加图像处理算法交流群(单击链接查看群号)。
參考文献:
【1】Stuart Russell and Peter Norvig. Artificial Intelligence: A Modern Approach. 3rd Edition.
【2】秦永元,张洪钺,汪叔华,卡尔曼滤波与组合导航原理,西北工业大学出版社
【3】徐亦达博士关于卡尔曼滤波的公开课,http://v.youku.com/v_show/id_XMTM2ODU1MzMzMg.html
【4】卡尔曼滤波的原理以及在MATLAB中的实现,http://blog.csdn.net/revolver/article/details/37830675
卡尔曼滤波(Kalman Filter) 的进一步讨论的更多相关文章
- 关于卡尔曼滤波(Kalman Filter)的很好讲解
http://bilgin.esme.org/BitsAndBytes/KalmanFilterforDummies C#代码: double[] Data = new double[] { 0.39 ...
- Kalman Filter、Extended Kalman Filter以及Unscented Kalman Filter介绍
模型定义 如上图所示,卡尔曼滤波(Kalman Filter)的基本模型和隐马尔可夫模型类似,不同的是隐马尔科夫模型考虑离散的状态空间,而卡尔曼滤波的状态空间以及观测空间都是连续的,并且都属于高斯分布 ...
- 卡尔曼滤波—Simple Kalman Filter for 2D tracking with OpenCV
之前有关卡尔曼滤波的例子都比较简单,只能用于简单的理解卡尔曼滤波的基本步骤.现在让我们来看看卡尔曼滤波在实际中到底能做些什么吧.这里有一个使用卡尔曼滤波在窗口内跟踪鼠标移动的例子,原作者主页:http ...
- 卡尔曼滤波(Kalman Filter)在目标边框预测中的应用
1.卡尔曼滤波的导论 卡尔曼滤波器(Kalman Filter),是由匈牙利数学家Rudolf Emil Kalman发明,并以其名字命名.卡尔曼出生于1930年匈牙利首都布达佩斯.1953,1954 ...
- 卡尔曼滤波器 Kalman Filter (转载)
在学习卡尔曼滤波器之前,首先看看为什么叫“卡尔曼”.跟其他著名的理论(例如傅立叶变换,泰勒级数等等)一样,卡尔曼也是一个人的名字,而跟他们不同的是,他是个现代人! 卡 尔曼全名Rudolf Emil ...
- 无人驾驶技术之Kalman Filter原理介绍
基本思想 以K-1时刻的最优估计Xk-1为准,预测K时刻的状态变量Xk/k-1,同时又对该状态进行观测,得到观测变量Zk,再在预测与观之间进行分析,或者说是以观测量对预测量进行修正,从而得到K时刻的最 ...
- GMM+Kalman Filter+Blob 目标跟踪
转 http://www.cnblogs.com/YangQiaoblog/p/5462453.html ==========图片版================================== ...
- kalman filter卡尔曼滤波器- 数学推导和原理理解-----网上讲的比较好的kalman filter和整理、将预测值和观测值融和
= 参考/转自: 1 ---https://blog.csdn.net/u010720661/article/details/63253509 2----http://www.bzarg.com/p/ ...
- [Math]理解卡尔曼滤波器 (Understanding Kalman Filter) zz
1. 卡尔曼滤波器介绍 卡尔曼滤波器的介绍, 见 Wiki 这篇文章主要是翻译了 Understanding the Basis of the Kalman Filter Via a Simple a ...
随机推荐
- Ubuntu 系统的常用快捷键
Ubuntu操作基本快捷键 ibus-setup :设置系统输入法 scp filename username@serverIp:/home/xxx/xxx/filename 回车输入该usern ...
- python框架之Flask基础篇(一)
一.第一个hello world程序 # coding=utf-8 from flask import Flask app = Flask(__name__) @app.route('/') def ...
- mysql中返回当前时间的函数或者常量
引用:http://blog.sina.com.cn/s/blog_6d39dc6f0100m7eo.html 1.1 获得当前日期+时间(date + time)函数:now() 除了 now() ...
- 服务器端 CentOS 下配置 JDK 和 Tonmcat 踩坑合集
一.配置 JDK 时,在 /etc/profile 文件下配置环境变量,添加 #java environment export JAVA_HOME=/usr/java/jdk- export CL ...
- IC验证概念总结
一份代码,在写完之后,一定要再经过一次或多次整理和打磨,才能算完成的:一份代码,一定要把其有效代码行,精简.锤炼到最少.最短.最有效,才能算完成的. 下面这些问题和回答是忘记是在哪里看到的了,参考 ...
- SQL基本操作——row_number() over()
row_number() 与over()是在一起使用的,作用就是对表进行排序并记数. 语法: ROW_NUMBER ( ) OVER ( [ PARTITION BY value_expression ...
- SQL基本操作——JOIN多表联查
基本概念 join :用于根据两个或多个表中的列之间的关系,从这些表中查询数据. join和key:有时为了得到完整的结果,我们需要从两个或更多的表中获取结果.我们就需要执行 join.数据库中的表可 ...
- win10系统安装postgresql后无法连接
win10系统安装postgresql后在系统服务列表中找不到,连接不上数据库. 可以尝试关闭系统防火墙后重启电脑或者重装程序.
- day2笔记
今日内容: 1.常用数据类型即数据方法 2.文件处理 3.函数 一 列表: 在[]内,可以存放多个任意类型的值,并以逗号隔开. 一般用于存放学生的爱好,课堂的周期等等 优先掌握的操作: 1.按索引取值 ...
- id 转 entity
object 是 entity原始的类 要使用id转化成entity要先将id.getobject 然后将这个值 (entity)转化成entity entity ent =id.getentity& ...