首页 > 编程语言 >卡尔曼滤波算法的学习总结

卡尔曼滤波算法的学习总结

时间:2024-09-03 12:55:45浏览次数:14  
标签:总结 噪声 卡尔曼滤波 估计值 观测 协方差 算法 先验

本文为作者学习卡尔曼滤波算法后的学习总结,如有错误请指正,万分感谢!


前言

本文学自B站up主华南小虎队,原视频讲得很好,推荐去观看。原视频卡尔曼滤波讲解

一、简介

(1)作用

在学习卡尔曼滤波之前,我们首先要明白在使用该滤波器后,可以给我们带来什么好处?

在此给读者举出一个例子,方便更加直观地理解。

假若这是一个超声波测距输出的距离信号与时间关系的坐标轴。

红色波浪线代表为滤波的信号,可以看到未滤波前的信号起伏较大,导致其所产生的误差会对我们的信号采集产生影响。

为了得到一个相对稳定的信号,我们需要对信号进行滤波,图中的紫色波浪线就是滤波后的信号,可以看到数据平稳了很多,能够更好的被我们使用。

(2)应用系统

卡尔曼滤波适用于线性、高斯系统。

1.线性

线性指的是输入对输出造成影响,例如 y = kx+b。x的改变会对输出 y 的结果进行改变。

2.高斯 

信号的噪声满足高斯分布,即在均值的某一方差范围内,噪声出现的概率普遍较高。

(3)原理

从宏观意义上来看,卡尔曼滤波的本质是对数据权重的调整

在卡尔曼中,有一个估计值和观测值,我们通过对两个值的权重调整,得到最优结果

二、状态空间表达式

在上文的简介中,我们初步了解了卡尔曼滤波的概念,此时我们需要引入两个方程来进一步学习。

(1)状态方程

X_{k}  =  AX_{k-1} + Bu_{k} + W_{k}

  • X_{k} 是当前状态的当前值
  • AX_{k-1}就是 A * 上一个时刻的值,A 是某种关系,可以理解成一个系数。
  • Bu_{k} 是 B * 当前状态的输入值,同理,B也可以理解成一个系数。
  • W_{k}是过程中产生的噪声,指外界条件(非人为)对当前状态产生影响。

(2)观测方程

Y_{k} = C*X_{k} + v_{k}

  • X_{k} 就是状态方程的输出结果。
  • v_{k} 是观测噪声,与观测仪器的误差有关。
  • C 是一个系数。

从状态方程和观测方程的表达式中,我们可以得到以下框图

(3)示例

这里用一个对水壶加热的例子来进行理解加深

在这个例子中

我们可以对状态方程的表达式进行拆解   X_{k}  =  AX_{k-1} + Bu_{k} + W_{k}

AX_{k-1} 是上一时刻的水温。

Bu_{k} 是在这一时段内,水上升的温度。

W_{k} 是外界条件造成的噪声影响

由此我们可得出 X_{k} 的值

再将其带入观测方程表达式,加上 v_{k} 观测器的误差,即可获得 Y_{k} 的值。

三、参数分析

(1)高斯白分布

W_{k} (过程噪声)和 v_{k}(观测噪声) 都符合高斯白分布,即均值为0的高斯分布

(2)参数定义

因为 v_{k} 符合 正态分布,所以可以设它的均值为0,方差为R_{k}

例:我们可以根据 GPS 来定位一个物体的位置,此时可以确定该物体在 1000m处,误差在8米之内,那么此时8米就是 v_{k}(观测噪声), 方差R_{k}可以是1m。

同理,可以设W_{k} 的均值为0,方差为Q_{k}

例:若现有一个滑板以 5m/s 的速度在运动,此时可能有一股8m/s的顺风来加快滑板的运动,那么8m/s就是 W_{k}(过程噪声),方差 Q_{k} 可以是1m/s。

(3)超参数

使用卡尔曼滤波时需要调节Q、R这两个参数的值,也就是过程噪声的方差和观测噪声的方差。

如果运动状态很理想,几乎没有噪声,那么Q就可以调小,反之则调大。

若观测器精度较高,那么R就可以调小,反之则调大。

四、卡尔曼公式理解

(1)汇总

先分析公式之前,我们首先需要先知道卡尔曼滤波的实现过程,简单来说,该过程就是使⽤上⼀次 的最优结果预测当前的值,同时使⽤观测值修正当前值,得到最优结果。 

(2)先验估计

这个公式左边的值被称为先验估计值。

右边的第一个部分为 F * 上一个时刻的最优估计值(最终滤波结果),F为状态转移矩阵。

第二部分则是控制输入部分,B为控制矩阵。

(3)先验估计协方差

这个公式的左边是先验估计值的协方差,并且它是由先验估计值推算而来的。

 在进行推算之前,我先引入两种协方差的表达公式,如下图所示

由于这个公式是求的先验估计值的协方差,所以我们可以直接将式子的左边替换,具体推算过程如下图。 

 

(4)修正估计

 

这个公式的左边部分是卡尔曼滤波的最终结果。

右边部分是先验估计值 加上 K_{t}(卡尔曼增益)*(观测值 - 先验估计值)。

如果状态模型很理想,几乎没有误差,那么先验估计值就为可信, K_{t}可以调小。

如果观测器更为精准,则调大 K_{t},增加观测值的权重。

 (5)更新卡尔曼增益

 

可以根据先验估计协方差的结果来对这里进行推导。 由于只需要求一个状态量,所以H矩阵可以简化成 1。

 

(6)更新后验估计协方差 

 

这个公式的左边部分是最优估计值的协方差,右边部分是 先验估计值协方差 * 一个矩阵关系。

I 是一个单位矩阵。

(7)小结

在分析完这五个公式后,我们可以得知这是一个循环的过程,使得最终滤波结果会越来越精准。 

简单来说,可以理解为:

  • 先验估计值 = 上一时刻的最优估计值*矩阵 + 控制输入
  • 先验估计协方差 = 上一时刻的最优估计值*矩阵 + 过程噪声协方差
  • 卡尔曼增益 可以看似与 Q和R有关的表达式
  • 最优估计值 = 先验估计值 + 卡尔曼增益*(测量值 - 先验估计值)
  • 最优估计协方差 = (单位矩阵 - 卡尔曼增益)*先验估计协方差 

五、卡尔曼滤波的使用

  1. 选择状态量、观测量
  2. 根据状态模型、观测模型构建方程
  3. 初始化参数(Q、R、P等等)
  4. 代入公式迭代
  5. 调节超参数

总结

本文简单分析了卡尔曼滤波的原理和公式,希望对各位读者有所帮助。

标签:总结,噪声,卡尔曼滤波,估计值,观测,协方差,算法,先验
From: https://blog.csdn.net/aaajjz/article/details/141723164

相关文章

  • 代码随想录训练营完结总结
    在参加代码随想录的很久之前,我就听闻了卡哥的大名,也在B站上看到了相关的视频,但由于自制力一直不行,所有总是坚持不下去,当时好像就只看到了数组,甚至于链表都没开始看,就已经放弃了。想着这个暑假不能荒废了,就狠下心报名了训练营。并在这个暑假完成了代码随想录的一刷,自我感觉对于算法......
  • 【数据结构与算法】:十大经典排序算法
    文章目录前言一、冒泡排序(BubbleSort)1.1冒泡排序原理1.2冒泡排序代码1.3输出结果二、选择排序(SelectionSort)2.1选择排序原理2.2选择排序代码2.3输出结果三、插入排序(InsertionSort)3.1插入排序原理3.2插入排序代码3.3输出结果四、希尔排序4.1希尔排序原......
  • 基于SIR模型的疫情发展趋势预测算法matlab仿真
    1.程序功能描述基于SIR模型的疫情发展趋势预测算法.对病例增长进行SIR模型拟合分析,并采用模型参数拟合结果对疫情防控力度进行比较。整体思路为采用SIR微分方程模型,对疫情发展进行过程进行拟合。2.测试软件版本以及运行结果展示MATLAB2022a版本运行3.核心程序Opt.LargeScale......
  • C++ 设计模式——设计模式总结
    目录C++设计模式——设计模式总结1.面向对象程序设计的几个原则2.设计模式的分类3.设计模式的定义3.1创建型设计模式的定义3.2结构型设计模式的定义3.3行为型设计模式的定义4.重要提示C++设计模式——设计模式总结设计模式是软件设计中常见问题的典型解决......
  • 常见算法和lambda的使用
    常见的七种查找算法:数据结构是数据存储的方式,算法是数据计算的方式。所以在开发中,算法和数据结构息息相关。今天的讲义中会涉及部分数据结构的专业名词,如果各位铁粉有疑惑,可以先看一下哥们后面录制的数据结构,再回头看算法。1.基本查找也叫做顺序查找说明:顺序查找适合于存储结......
  • 图的广度优先搜索(BFS)算法与邻接矩阵表示
    图的广度优先搜索(BFS)算法与邻接矩阵表示1.图的表示2.广度优先搜索(BFS)BFS算法步骤:3.使用邻接矩阵的BFS实现4.运行时间分析时间复杂度:空间复杂度:5.BFS使用邻接列表与邻接矩阵的比较BFS在邻接列表上的运行时间:6.结论在计算机科学中,图......
  • 基于SIR模型的疫情发展趋势预测算法matlab仿真
    1.程序功能描述基于SIR模型的疫情发展趋势预测算法.对病例增长进行SIR模型拟合分析,并采用模型参数拟合结果对疫情防控力度进行比较。整体思路为采用SIR微分方程模型,对疫情发展进行过程进行拟合。2.测试软件版本以及运行结果展示MATLAB2022a版本运行 3.核心程序Opt=o......
  • 基于LK光流提取算法的图像序列晃动程度计算matlab仿真
    1.算法运行效果图预览(完整程序运行后无水印) 2.算法运行软件版本matlab2022a 3.部分核心程序(完整版代码包含详细中文注释和操作步骤视频) %晃动指标axes(handles.axes1);imshow(uint8(I0{kk}));axes(handles.axes2);quiver(x,y,hor,ve......
  • 算法与数据结构——二叉树数组表示
    二叉树数组表示在链表表示下,二叉树的存储单元为节点TreeNode,节点之间通过指针相连接。同前面的队列或栈,二叉树同样可以使用数组来表示。表示完美二叉树给定一棵完美二叉树,我们将所有节点按照层序遍历的顺序存储在一个数组中,则每个节点都对应唯一的数组索引。按照层序遍历的特......
  • 海马算法(SHO)优化支持向量机原理及Matlab代码
    目录0引言1数学模型2优化方式3Maltab代码3.1伪代码3.2SHO主函数代码3.3SHO-SVM4视频讲解0引言海马算法(SeaHorseOptimizer,SHO)是ShijieZhao于2023年基于自然界中海马的运动、捕食和繁殖行为提出的群体智能算法。SHO算法两个阶段,SHO分别模拟了海马的不同运......