关于kf/pf
贝叶斯滤波算法本质上和隐马尔可夫模型是一致的,它假设当前的状态只跟前一个时刻的状态相关。
作用:像卡尔曼滤波(Kalman filters)、粒子滤波(Particle filters),隐含马尔科夫模型(Hidden Markov models),动态贝叶斯网络(Dynamic Bayesian networks)等等算法。这些算法都和贝叶斯滤波算法非常相似.因此学好了贝叶斯滤波再学其他算法那就容易很多了
贝叶斯滤波算法它做的工作就是根据已有的信息(先验知识)来计算概率。(所以不是滤波是预测?
总结一下贝叶斯滤波算法做的工作:它做的工作就是根据不断接收到的新信息和我提供的一些已经知道的统计值,来不断更新概率。更新概率值的方法是根据概率论中的条件概率计算公式来更新的。
如果我想让它根据雷达测距判断机器人离障碍物距离,那它就得计算出机器人离障碍物各种距离取值的概率(为何要计算概率?因为雷达测量会存在误差),比如计算机器人离障碍物10cm远的概率是0.87,离障碍物11cm远的概率是0.21,离障碍物9cm远的概率是0.01。那么我就认为机器人离障碍物距离是10cm。
所以贝叶斯滤波就是得到一个概率,我们通过这个概率确定当前状态的正确否
--------------------------------
首先卡尔曼滤波算法是对贝叶斯滤波的一种具体实现,那么贝叶斯滤波又是什么?贝叶斯滤波是一种思想,它告诉了我们怎么在知道观测值与根据控制命令所计算的估计值这两种值的可信度时,如何计算最终估计出的值的可信度。
但是贝叶斯滤波并没有告诉我们怎么计算观测值与估计值的可信度。
而卡尔曼滤波算法就是对贝叶斯滤波算法的一个具体实现。
卡尔曼滤波认为观测值可信度模型是一个正态分布,控制模型是一个正态分布。然后信号是线性变化的。也就是说卡尔曼假设上文中的机器人一定是匀速直线运动,机器人离障碍物距离变化肯定是随时间线性变化的。这就是kf的局限性,控制量得出的估计值必须是正态分布的。
回顾一下贝叶斯滤波算法:
卡尔曼滤波设计了观测值可信度和估计值可信度的计算模型,从而让贝叶斯算出当前状态的可信度。
缺点就在这里,必须假设所有变量值和概率全是正态分布。且信号变化还是线性的。
kf假设观测值的可信度和估计值的可信度都是高速分布的。这让求最终估计值的可信度变得容易。
-----------------
emmm 重新来
卡尔曼滤波是来帮助我们做测量的(emmm我觉得这里应该说的是滤波和预测?)
卡尔曼先生告诉我们一个办法,仍然可以估计出八九不离十的兔兔体重,这个办法其实也很直白,就是加权平均,把称称出来的结果也就是观测值和按照书本经验估算出来的结果也就是估计值分别加一个权值,再做平均。当然这两个权值加起来是等于一的。也就是说如果你有0.7分相信称出来的体重,那么就只有0.3分相信书上的估计。
卡尔曼先生也体会到了我们的苦恼,告诉我们一个办法来决定这个权值,这个办法其实也很直白,就是根据以往的表现来做决定,这其实听起来挺公平的,你以前表现好,我就相信你多一点,权值也就给的高一点,以前表现不好,我就相信你少一点,权值自然给的低一点。那么什么是表现好表现不好呢,表现好意思就是测量结果稳定,方差很小,表现不好就是估计值或观测值不稳定,方差很大。
有了这个权值,下面的事情就很好办了。很显然卡尔曼先生是利用多次观察和估计来达到目的的,我们也只能一步一步地调整我们的观察和估计值,来渐渐达到准确的测量,所以整个算法是递归的,需要多次重复调整的。调整的过程也很简单,就是把实测值(称出来的体重)和估计值(书上得来的体重)比较一下,如果估计值比测量值小,那就把估计值加上他们之间的偏差作为新的估计值,当然前面要加个系数,就是我们前面说的加权系数,这个地方我要写个公式,因为很简单就能说明白
比如我们的观测值是Z,估计值是X, 那么新的估计值就应该是 Xnew = X + K ( Z-X),从这个公式可以看到,如果X估计小了,那么新的估计值会加上一个量K ( Z-X), 如果估计值大了,大过Z了,那么新的估计值就会减去一个量K ( Z-X),这就保证新的估计值一定比现在的准确,一次一次递归下去就会越来越准却了,当然这里面很有作用的也是这个K,也就是我们前面说的权值,书上都把他叫卡尔曼增益。。。(Xnew = X + K ( Z-X) = (1-K)X+ KZ ,也就是说估计值X的权值是1-k,而观察值Z的权值是k,究竟k 取多大,全看估计值和观察值以前的表现,也就是他们的方差情况了)
所以上面说的卡尔曼滤波作用就是多次更新估计值成为一个准确值Xnew?
写的真的挺好的,但是有个小问题。体重这个比喻是不恰当的,在卡尔曼滤波中,那个估计量是系统的状态值,我们是没法测量和知道的,比如飞机在下一时刻飞行轨迹(不可测量),我们是用可以观测的速度或者加速度和先验知识进行融合,对状态量进行估计的。如果把体重换成兔子的成长速度比较合适,利用先验公式和可观测的体重去估计,这样就符合了。
--------------------------
"k时刻,用x(1:k)估计y(k),则为滤波(filter);用x(1:k)估计y(k'),其中k'>k则为预测(predict);k'<k则为平滑(smooth)"
其实卡尔曼、粒子是叫估计器estimator。估计estimate当前值叫滤波filtering,估计过去叫平滑smoothing,估计未来叫预测prediction。不过为了方便,往往就叫滤波器了。
比如steady-state时卡尔曼滤波是低通滤波,等等。
卡尔曼滤波,包括KF(线性),EKF(非线性),UKF(非线性),SRUKF(非线性)等,要求后验是高斯。PF则不仅可以处理非线性,还可以处理非高斯。
卡尔曼也好,粒子滤波之所以称之为滤波就是因为他们使用初始时刻 x(1) 到当前时刻 x(k)所有的数据估计当前时刻的值。这一类方法都可以称之为滤波。
至于他们和高通滤波,低通滤波的区别,卡尔曼/粒子滤波是在状态估计领域,也就是主要在时域工作;而高/低通滤波主要还是关注频域。
但是滤波二字应该意义相当,都是用所有历史数据估计当前时刻的值。
Kalman filter基于线性递推公式来滤波。
Particle filter基于马尔可夫蒙特卡洛方法通过抽样来滤波。------------------------------------------
卡尔曼滤波和粒子滤波是一类,但是与“高通滤波、低通滤波”不是一类分类(这个是个正交分类,如同滤波分为开环和闭环)。虽然都是滤波算法,滤波从一堆有噪声的数据中尽可能的减少噪声,获取尽可能准确的数据。卡尔曼滤波和粒子滤波我觉得把他们叫做融合滤波算法更合适,它们两都是融合现有的各个来源(各种传感器测量值,控制器等)的数据来估计真实值。
传感器得出观测值,pdr得出估计值,该信哪一个?用kf/pf做决定。
又回到那个兔子的理论了,所以融合讲的是滤波还是预测呢?我觉得大概是求当前值是预测吧?
---------------------------------------
卡尔曼认为导弹速度(得出估计值)、导弹位置、雷达测距(这个得出观测值)的测量值这些都服从正态分布。我们知道正态分布可以这么表示 N(均值,方差)。
雷达在t时刻测量到导弹离目标的距离的概率分布,为 ,这0.1就是雷达的噪声误差
在前面我们知道了卡尔曼滤波算法为了融合雷达测量值和上个时刻的导弹状态数据来减少误差,需要实施“两步走”战略。
- 根据上一秒导弹的位置 和 导弹的速度估计出当前时刻导弹的位置粗略估计值。
- 将雷达测得导弹位置测量值和我们计算出的导弹位置粗略估计值根据这两种数据可信度来进行线性加权和得到准确的导弹位置估计值。
由于正态分布是均值那个地方的概率最大,所以当前时刻导弹位置的精确估计值就是它概率分布的均值。但是现在我们还是没有回答怎么根据粗略估计值的概率分布与雷达的测量值概率分布得到精确估计值的概率分布。其实这个也很简单。直接把这两个概率分布相乘即可。
。 上式乘法的结果是: 。大家可以对比着直观理解那看看有什么相似的地方
事实上我们就是把方差作为可信度,方差越大越不可信。然后用可信度做权重进行加权和得到均值。当然加权和的权重之和应该等于1,所以分母都除个 。于是我们得到了当前时刻导弹位置的最优估计的概率分布: 。而正态分布是在均值那个地方的概率最大。所以当前时刻导弹位置的最优估计就是上面这个概率分布的均值 。而 这个东西就叫做卡尔曼增益!
-----------------------------------
关于方差以及可信度,直观角度的K怎么得来的
测量值和估计值的可信度就是kf算出来的,最终估计值的可信度是可以用在已知增益(即测量值预估计值的可信度)的前提下,可以得贝叶斯概率看这个最终估计值可不可信。
-------------------------------------
那么问题来了,PF怎么做融合的?
???
-----------------------------------
蒙特卡洛Monte Carlo方法是利用随机采样来估计积分的重要技术,什么是Monte Carlo,其实就是概率学的一种数值算法,大数定理:如果统计数据足够大,那么事物出现的频率就能无限接近期望值。说烂点就是小学学的枚举法。基于Particle filter的定位就是靠的蒙特卡洛和贝叶斯,用足够多的Particle来形成贝叶斯里面的pdf。