卡尔曼

2024-02-29 13:32
文章标签 卡尔曼

本文主要是介绍卡尔曼,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

断断续续,大概弄了将近一个月的时间,今天总算是把卡尔曼滤波器用于流量矩阵估计的问题给解决了。实验结果很理想,和作者的实验结果差不多。

      回顾整个过程:

      1,觉得卡尔曼有现成的预测和更新公式,只要确定参数C、Q、R就可以使用,很简单,便用最小二乘从直接测量的一天的数据算出C,再根据样本方差确定Q,由于Y是直接通过恒定的Y计算得来,所以假设R=0。但是,通过这些参数,使用卡尔曼进行估计时,发现估计的值是发散的,相对误差几乎成指数增长,令人费解。

      2,反省,觉得还是由于对卡尔曼理解不够,所以导致不知道问题出在哪。于是开始着手对卡尔曼滤波的两个方程的理解,包括公式的推导。主要是其中的增益矩阵K的推导,soul的那篇论文里并没有给出推导公式,我又看了其参考文献的关于卡尔曼的介绍,也没有给出推导,后来反而是在网上瞎找时,偶然在维基百科上找到了关于卡尔曼滤波的完整介绍,包括各个公式所依据的理论和推导过程,知道原来卡尔曼的理论基础原来是马尔可夫过程和贝叶斯统计。通过这上面的介绍也消除了我以前在看卡尔曼的一个疑问,就是关于更新公式中的估计方差的公式不一致的问题,有的论文(流量估计方面的论文中关于卡尔曼滤波)提出Pe = (I-KA)Pp(I - KA)'   (1)而有的论文(专门单独介绍卡尔曼滤波的论文)为Pe = (I-KA)Pp   (2)。其实两种写法都对,当K取最优增益时(使估计误差最小),(1)可以通过一系列推导简写为(2) ,当然在实际应用时,K都是取的最优增益,所以便取(2)。

       3,通过2对卡尔曼滤波的理解,我觉得可能是由于参数的确定出了问题,因为soul提出用最大似然估计的EM算法确定C和Q,而我用的是最小二乘,而我们知道卡尔曼滤波在使用时是假设X(t)=CX(t-1)+W(t),即X为马尔可夫链式的高斯分布,所以明显地用最大似然估计得到的参数更适用于卡尔曼估计。今天的实验结论也证明了这一点。但是问题又来了,soul本人的论文中关于怎么样求参数这一问题却写的相当简略而且有点自相矛盾,而实际上,卡尔曼滤波的参数确定需要根据实际的问题来决定,这也是卡尔曼滤波应用的难点和关键点。soul的混乱与矛盾在于,论文的第一段说通过24小时直接测量到的X 算出C,第二段又笔锋一转:只测量X0,根据观测数据Y,通过EM算法确定参数C、Q的最大似然估计。这二段文字我读了很多遍,联系上下文揣摩了很多遍,觉得还是矛盾,后来我又在其参考文献里专门琢磨其EM算法,由于引入了SWITCH,导致公式符号复杂化,看起来很吃力,后来终于搞定。为了弄清楚EM算法,我又专门看了些专门介绍EM算法的论文,茹正亮的《EM算法在不完全参数估计中的应用》写的比较好,至少容易看懂,至此我明白了EM算法的原理,知道了soul论文中的矛盾不矛盾的唯一可能性:如果EM算法的的输入数据包括24小时直接测量到的X和Y,那么这个矛盾就不矛盾了。但我知道这是不可能的,因为EM算法在E步和M步递推时,必须要借助于隐藏数据X的概率密度,这样才能从上一下的参数确定出下一步的参数。

      4,在这一矛盾下,我选择了后者(只测量到X的一个初始态和24小时的Y,假设其余的X为未知的马尔可夫高斯分布),因为作者对于后者的介绍的多一些,于是我用代码直接编写的参数估计的EM最大似然估计算法,其具体的EM公式实在是很难看懂,运行后发现结果很不理想,因为中间根据上一步参数求出下一步参数时,需要用到卡尔曼平滑器(根据24小时的Y对X和P进行平滑处理),这样首先又需要应用卡尔曼滤波求出预测的估计的所有X,算法代码在运行时往往会发散。我昨天去图书馆借了几本关于卡尔曼的书,了解到原来是当P在小型机上计算时中间有一个矩阵减法,这样容易导致其不正定,进而导致迭代计算时会发散。由于初始参数的选取我是采用了过程1中提到的最小二乘算出的C和Q,所以便出现了1中出现的发散现象。总之EM算法对参数的初始值很敏感,这样,初值的选定成了问题。这一部分现在我还没有搞清楚。

      5,我决定走自己的路,选择矛盾的前者,即通过直接测量的24小时的X,通过最大似然估计求出C才Q(假设R=0,即Y的测量无误差),这一条路其实中间我尝试过,似然函数为矩阵C和Q的函数,由于无法用EM算法求解,所以只好直接求偏导算极值,但是遇到了函数矩阵的问题,即把C和Q这样的矩阵看作变量,如何求导?查阅矩阵分析的书,都是介绍矩阵函数的(矩阵的元素为函数),昨天在图书馆看到一本特殊矩阵的书,里面才有提到函数矩阵的概念,和一些性质(这时候我才知道这个叫函数矩阵)。至此我已经觉得彻底无路可走了,因为函数矩阵的问题我是无法搞定了。

      6,转念一想,既然写成矩阵无法求解,那我就再将矩阵的各个元素分别列出来,独立求解,昨天晚上推导了一会,发现了可行性,便编写了代码验证,由于算法比较粗糙,用MATLAB运行了1个多小时,未出结果,因为矩阵过大,MATLAB存不下。今天上午重新对算法改进,一行一行的求解C,这样终出求了出来。根据C再求出Q,将C和Q代入之前的卡尔曼,经过对一些错误的修正,终于取了满意的实验结果。

  整个过程中,一方面碰到矛盾、问题时好多次都绝望了,想过放弃,改做别的方法,中间我还做了一些实验,关于相关系数平稳性的实验,发现任何周期的相关系数都极不稳定,没有任何规律可言,而OD流的周期性通过我采用的一种独特的平滑技术才表现出天的周期性。这让我觉得卡尔曼在用于TM估计时是无力的,因为24小时估计出来的时空关系C(为常数)是粗糙的。我还据此产生的新的想法,略去卡尔曼的传输过程,直接通过Y求X,运用平滑技术的周期性,但广义逆的问题不好解决,这样做出来的东西是个什么东西,没有理论支持,就暂且搁下了。

  今天的实验结果让我看到了卡尔曼的强大,它的优秀自适应调整能力。到目前为止,我还是很惊异于它居然有这么好的实验结果。我的关于卡尔曼的改进还有没有可提升的空间?这一问题变得更容易被否定。目前周静静提出了一种UD分解的平方根卡尔曼滤波,对我的研究冲击很大。我也是因此而昨天去的图书馆,找到了卡尔曼发散的原因呵。

  先写到这里。路还很长,而且分岔口很多。

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/vert_/archive/2009/11/08/4785179.aspx

这篇关于卡尔曼的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/758969

相关文章

带交互的卡尔曼滤滤波|一维滤波|源代码

背景 一维卡尔曼滤波的MATLAB例程,​背景为温度估计。 代码介绍 运行程序后,可以自己输入温度真实值: 以20℃为例,得到如下的估计值​: 滤波前的值和滤波后的值分别于期望值(真实值)作差,可以得到​误差​曲线图:​ 误差统计特性 源代码 程序源码下载: https://download.csdn.net/download/callmeup/89389486 更多关

【目标定位】基于matlab扩展卡尔曼算法SLAM(运动轨迹+误差 )【含Matlab源码 1637期】

⛄一、获取代码方式 获取代码方式1: 完整代码已上传我的资源: 【目标定位】基于matlab扩展卡尔曼算法SLAM(运动轨迹+误差 )【含Matlab源码 1637期】 点击上面蓝色字体,直接付费下载,即可。 获取代码方式2: 付费专栏Matlab信号处理(初级版) 备注: 点击上面蓝色字体付费专栏Matlab信号处理(初级版),扫描上面二维码,付费29.9元订阅海神之光博客付费专栏Matl

SOC仿真-无迹卡尔曼UKF在电池荷电状态SOC的仿真应用

在前面得到了AFFRLS参数辨识结果,将动态的辨识参数用于SOC估算,估算方法为无迹卡尔曼滤波算法。刚开始学习不太确定自己的结果是不是正确的话,可以参考一下下面的图形。工况为FUDS工况,结果如下  估计器1为AFFRLS参数下的UKF估算,估计器2为辨识结果取平均值后的估算结果。 误差图:  Q或R参数需要调试到合适的数值,曲线有高有低说明UKF有对安时积分法其修正作用。后

35、卡尔曼滤算法的理解和编程实现其基本思想

基本思想:对卡尔曼滤波的算法的学习、理解及其应用; 代表t-1时刻时,小车的位置;代表t时刻时,小车移动的位置代表t-1时刻时,小车的速度;代表t时刻时,小车的速度=t时刻与t-1时刻的时间差 公式一:位移量

算法项目(2)—— LSTM、RNN、GRU(SE注意力)、卡尔曼轨迹预测

本文包含什么? 项目运行的方式(包教会)项目代码LSTM、RNN、GRU(SE注意力)、卡尔曼四种算法进行轨迹预测.各种效果图运行有问题? csdn上后台随时售后. 项目说明 本文实现了三种深度学习算法加传统算法卡尔曼滤波进行轨迹预测, 预测效果图 首先看下不同模型的指标: 模型RMSELSTM0.002884796078706592LSTM+SE0.00275518011984951

对Kalman(卡尔曼)滤波器的理解

1.简介(Brief Introduction) 在学习卡尔曼滤波器之前,首先看看为什么叫“卡尔曼”。跟其他著名的理论(例如傅立叶变换,泰勒级数等等)一样,卡尔曼也是一个人的名字,而跟他们不同的是,他是个现代人! 卡尔曼全名Rudolf Emil Kalman,匈牙利数学家,1930年出生于匈牙利首都布达佩斯。1953,1954年于麻省理工学院分别获得电机工程学士及硕士学位。1957年于哥伦比

运动模型非线性测量非线性扩展卡尔曼跟踪融合滤波算法(Matlab仿真)

卡尔曼滤波的原理和理论在CSDN已有很多文章,这里不再赘述,仅分享个人的理解和Matlab仿真代码。         之前的博文运动模型非线性扩展卡尔曼跟踪融合滤波算法(Matlab仿真)-CSDN博客使用扩展卡尔曼滤波算法将非线性的运动模型线性化,但测量值仍旧是线性的,不需要雅可比矩阵。这里考虑测量值也为非线性的情况,并用Matlab做仿真。       如果估计值为[x,y

[ROS] 多传感器卡尔曼融合框架 Ethzasl MSF Framework 编译与使用

转载自:http://www.liuxiao.org/2016/07/ros-%E5%A4%9A%E4%BC%A0%E6%84%9F%E5%99%A8%E5%8D%A1%E5%B0%94%E6%9B%BC%E8%9E%8D%E5%90%88%E6%A1%86%E6%9E%B6-ethzasl-msf-framework-%E7%BC%96%E8%AF%91%E4%B8%8E%E4%BD%BF%E7

卡尔曼家族从零解剖-(04)贝叶斯滤波→细节讨论,逻辑梳理

讲解关于slam一系列文章汇总链接:史上最全slam从零开始,针对于本栏目讲解的 卡尔曼家族从零解剖 链接 :卡尔曼家族从零解剖-(00)目录最新无死角讲解:https://blog.csdn.net/weixin_43013761/article/details/133846882   文末正下方中心提供了本人 联系方式, 点击本人照片即可显示 W X → 官方认证 {\color{blue}

卡尔曼家族从零解剖-(03)贝叶斯滤波→公式推导与示例

讲解关于slam一系列文章汇总链接:史上最全slam从零开始,针对于本栏目讲解的 卡尔曼家族从零解剖 链接 :卡尔曼家族从零解剖-(00)目录最新无死角讲解:https://blog.csdn.net/weixin_43013761/article/details/133846882   文末正下方中心提供了本人 联系方式, 点击本人照片即可显示 W X → 官方认证 {\color{blue}