卡尔曼滤波学习笔记

2023-11-04

这篇文章参考博客

介绍

卡尔曼滤波的一个典型事例是从一组有限的,包含噪声的对物体位置的观察序列(可能有偏差)预测出物体的位置的坐标速度
卡尔曼最初提出的滤波器形式现在一般称为简单卡尔曼滤波器,除此之外还有施密特扩展滤波器信息滤波器以及很多平方根滤波器的变种,也许最常见的卡尔曼滤波器是锁相环,它在收音机、计算机和几乎任何视频或通讯设备中存在。
简单来说卡尔曼滤波器是一个‘optimal recursive data processing algorithm(最优化自回归数据处理算法)’,它广泛应用于机器人导航控制传感器数据融合甚至在军事方面的雷达系统以及导弹追踪等等。

卡尔曼滤波算法(The Kalman Filter Algorithm)

首先引入一个离散控制过程系统。该系统通过一个线性随机微分方程(Linear Stochastic Difference equation)来描述,如下:
基本假设:

  • 后验概率分布为高斯分布
  • 动态系统是线性的

  • 系统噪声和测量噪声都是高斯分布的,协方差矩阵分别为和。

上两式子中,x(k)是k时刻的系统状态,u(k)是k时刻对系统的控制量。A和B是系统参数,对于多模型系统,他们为矩阵。y(k)是k时刻的测量值,H是测量系统的参数,对于多测量系统,H为矩阵。q(k)和r(k)分别表示过程和测量的噪声。他们被假设成高斯白噪声(White Gaussian Noise),他们的covariance分别是Q,R()。
对于满足上面的条件(预测系统为:线性随机微分系统,预测和测量过程中的噪声为高斯白噪声),卡尔曼滤波器是最优的信息处理器,KF算法的流程和五个核心更新方程如下:

KF算法流程

卡尔曼滤波器的更新分为时间更新和状态更新两个阶段,状态更新的结果可以作为下一次时间更新的初值,状态更新的作用是修正时间更新阶段产生的结果,如下图所示:
五个更新方程

下面是一个例子:

假设我们要研究的对象是一个房间的温度。根据你的经验判断,这个房间的温度是恒定的,也就是下一分钟的温度等于现在这一分钟的温度(假设我们用一分钟来做时间单位)。假设你对你的经验不是100%的相信,可能会有上下偏差几度。我们把这些偏差看成是高斯白噪声(White Gaussian Noise),也就是这些偏差跟前后时间是没有关系的而且符合高斯分配(Gaussian Distribution)。另外,我们在房间里放一个温度计,但是这个温度计也不准确的,测量值会比实际值偏差。我们也把这些偏差看成是高斯白噪声。
好了,现在对于某一分钟我们有两个有关于该房间的温度值:你根据经验的预测值(系统的预测值)和温度计的值(测量值)。下面我们要用这两个值结合他们各自的噪声来估算出房间的实际温度值。
假如我们要估算k时刻的是实际温度值。首先你要根据k-1时刻的温度值,来预测k时刻的温度。因为你相信温度是恒定的,所以你会得到k时刻的温度预测值是跟k-1时刻一样的,假设是23度,同时该值的高斯噪声的偏差是5度(5是这样得到的:如果k-1时刻估算出的最优温度值的偏差是3,你对自己预测的不确定度是4度,他们平方相加再开方,就是5)。然后,你从温度计那里得到了k时刻的温度值,假设是25度,同时该值的偏差是4度。
由于我们用于估算k时刻的实际温度有两个温度值,分别是23度和25度。究竟实际温度是多少呢?相信自己还是相信温度计呢?究竟相信谁多一点,我们可以用他们的covariance来判断。因为Kg2=52/(52+42),所以Kg=0.78,我们可以估算出k时刻的实际温度值是:23+0.78*(25-23)=24.56度。可以看出,因为温度计的covariance比较小(比较相信温度计),所以估算出的最优温度值偏向温度计的值。
现在我们已经得到k时刻的最优温度值了,下一步就是要进入k+1时刻,进行新的最优估算。到现在为止,好像还没看到什么自回归的东西出现。对了,在进入k+1时刻之前,我们还要算出k时刻那个最优值(24.56度)的偏差。算法如下:((1-Kg)*52)0.5=2.35。这里的5就是上面的k时刻你预测的那个23度温度值的偏差,得出的2.35就是进入k+1时刻以后k时刻估算出的最优温度值的偏差(对应于上面的3)。
就是这样,卡尔曼滤波器就不断的把covariance递归,从而估算出最优的温度值。他运行的很快,而且它只保留了上一时刻的covariance。上面的Kg,就是卡尔曼增益(Kalman Gain)。他可以随不同的时刻而改变他自己的值,是不是很神奇!

下面解释上面的计算过程
1、由k - 1时刻的最优温度值去预测k时刻的系统状态值,如更新方程1所示,对应于上例中就是
2、由上一次的误差协方差和预测过程噪声Q预测新的误差协方差,如更新方程2所示,对应于上例中。
3、计算卡尔曼增益,如更新方程3所示,对应上例中
4、对系统当前状态的预测值进行校正,如更新方程4所示,对应于上例中,即为此次迭代的估计出的系统当前状态的最优值。
5、对当前系统预测误差值进行校正,并作为下次迭代的初始值,如更新方程5所示,对应上例中

卡尔曼滤波用于跟踪定位

定位跟踪时,假设我们利用某种定位技术得到了目标位置的观测值,根据经验(往往是物体的运动规律)得到了物体的当前位置的预测值,那么为了使目标跟踪更加精确,往往需要对观测值预测值进行加权平均来获得定位结果,权值大小取值取决于观测值预测值各自的不确定程度。
数上可以证明:当预测系统为线性随机微分系统,预测和测量过程中的噪声为高斯白噪声时,按照科尔曼滤波来加权是最优的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

卡尔曼滤波学习笔记 的相关文章

  • Functional Programming in Java venkat(15) Being Lazy part2

    Functional Programming in Java venkat 15 Being Lazy part2 这里是记录学习这本书 Functional Programming in Java Harnessing the Power
  • 双向可控硅

    转载于 http www baiheee com Documents 100830 100830085212 htm 双向可控硅是在单向可控硅的基础上发展起来的 顾名思义 它是 种具有双向导电特从外形上看双向可控硅和单向可控硅很相似 同样有
  • Qt绘制指针时钟

    Qt绘制指针时钟 什么是Qt Qt是一款跨平台的C 应用程序开发框架 它提供了一套完整的工具和库 可以帮助开发者快速构建高质量的应用程序 Qt支持多种操作系统和开发语言 包括Windows Linux macOS Android iOS等
  • spring boot学习(转)

    玩转Spring Boot 前言 首先在这里对Spring Boot做个简单的介绍 对Spring Boot也关注了挺久了 Spring Boot是由Pivotal团队提供的全新框架 Pivotal团队在2014年4月份发布第一个GA版本
  • SpringBoot学习笔记

    微服务阶段 JavaSE 面向对象 MySql JDBC 持久化存储 html css JavaScript Jquery 框架 视图 框架 JavaWeb 开始独立开发MVC三层架构的网站 原始 SSM 框架 简化了我们的开发流程 配置也
  • Lady General Hua Mu-lan花木兰剧本

    Lady General Hua Mu lan花木兰剧本 Gary专业版 Scene 0 Narrator N Oh come here little girl tell me do you want to become a woman a
  • 组件间通信方式

    方式一 props 适用于 父子组件间通信 1 父给子 父组件给子组件传递数据 非函数 本质其实是父组件 gt 子组件传递数据 父组件App vue
  • open/read/write和fopen/fread/fwrite的区别

    open read write和fopen fread fwrite的区别 open 系统调用 返回的是文件描述符 即文件句柄 是文件在文件描述副表里的索引 fopen C语言库函数 返回的是一个指向文件结构的指针 fopen是ANSI C
  • 进程之间为什么需要通信?

    进程是一个独立的资源分配单元 不同进程 这里所说的进程通常指的是用户进程 之间的资源是独立的 没有关联 不能在一个进程中直接访问另一个进程的资源 例如打开的文件描述符 但是 进程不是孤立的 不同的进程需要进行信息的交互和状态的传递等 因此需
  • 已解决io = ExcelFile(io,storage_options=storage.options, engine=engine)

    已解决 Python pandas read excel读取Excel文件报错 io ExcelFile io storage options storage options engine engine 文章目录 报错代码 报错原因 解决方
  • 渗透测试流程&信息收集

    渗透测试是一种评估方法 一种通过模拟黑客的攻击方式 来评估网站安全的方法 渗透测试流程分为7个阶段 信息收集 漏洞扫描 漏洞利用 内网转发 内网渗透 痕迹清除 编写报告 但在这7个阶段之前还有一个前提 就是授权 这个授权包括渗透测试的目标
  • Hbase Compaction 队列数量较大分析(压缩队列、刷新队列)

    前几天朋友公司Hbase集群出现Compaction队列持续处于比较大的情况 并且mem flush队列也比较大 一起看了下问题 大概情况如下图 从图中可以看出来压缩队列总和持续在1000 2000 平对压缩队列在200左右 刷新队列也比较
  • 三菱触摸屏怎么改时间_三菱plc的触摸屏程序,三菱触摸屏如何更改时间

    三菱plc的触摸屏程序 D8013D8014D8015D8016D8017D8018D8019秒 分钟 小时 日 月 年和周 假定上述时间需要改变 屏幕D10D11D12D13D14D15D16秒 分钟 天 月 年和周按钮M0程序LDM0设
  • Hive 用户自定义函数UDF详解

    本例自定义一个Hive UDF函数 功能是将从Hive数据仓库查询出来的字符串进行大小写转换 第一步 创建java工程 添加jar包 导入Hive的lib目录下的jar包以及hadoop安装目录下的hadoop core jar 第二步 新
  • RuoYi实现数据分页

    目录 一 实例简介 登录日志查询 数据分页作用 二 前端代码 1 打开操作日志页面源码文件 2 函数调用链 3 开发者工具查看前端访问后端信息 编辑 三 后端代码 函数startPage 和getDataTable 输出结果 一 实例简介
  • 栈 - 关于出栈序列,判断合法的出栈序列

    文章目录 1 引例 2 做题方法 3 原因 3 1 选项D 4 3 1 2 的模拟 1 引例 例 设栈的入栈序列是 1 2 3 4 则下列不可能是其出栈序列的是 A 1 2 4 3 B 2 1 3 4 C 1 4 3 2 D 4 3 1 2
  • MySQL数据库总体知识架构

    一 关系型数据库设计理论 一些重要术语 属性 attribute 列的名字 我们在开发中一般称为字段 依赖 relation 字段之间存在的关系 元祖 tuple 每一个行 如第二行 1301 小明 13班 篮球 英语 赵英 70 就是一个
  • Murmurhash 哈希算法 介绍与实现

    最近在项目代码中看到了一种hash算法 以前没有遇见过 在此记录下来 一 介绍 MurmurHash 是一种非加密型哈希函数 适用于一般的哈希检索操作 由Austin Appleby在2008年发明 并出现了多个变种 都已经发布到了公有领域
  • 基于单向链表实现LRU缓存淘汰算法

    准备工作 思考 链表是由一个一个结点单向连接而成 因此我们需要创建一个结点类 该类包含结点数据 以及下一个结点的位置信息 一 结点类 package com linkTest public class Node
  • golang反编译_【Golang】脱胎换骨的defer(一)

    Go语言的defer是一个很方便的机制 能够把某些函数调用推迟到当前函数返回前才实际执行 我们可以很方便的用defer关闭一个打开的文件 释放一个Redis连接 或者解锁一个Mutex 而且Go语言在设计上保证 即使发生panic 所有的d

随机推荐

  • Maximum String Length

    The latest version of this topic can be found at Maximum String Length Microsoft Specific ANSI compatibility requires a
  • Flutter的TextButton的最小高度受限的问题

    用ConstrainedBox或SizedBox作TextButton的父级来控制TextButton的Size时 可以加大TextButton 但是用上面的方式设TextButton的高度小于44时 就会失效 可以用下面的方式来解决最小高
  • 判断鼠标是否点击在UI上

    EventSystem current IsPointerOverGameObject 方法 作用 判断鼠标是否点击在UI上 在窗口端进行判断时使用 如果按下了鼠标左键并且 鼠标点击的不是UI if Input GetMouseButton
  • 常见排序算法(c++)

    插入排序 直接插入排序 直接插入排序 Straight Insertion Sort 是一种最简单的排序方法 其基本操作是将一条记录插入到已排好序的有序表中 从而得到一个新的 记录数量增1的有序表 include
  • k-means聚类算法及matlab实现(简单实现)

    k means简介 k means算法也称k均值算法 是一种常用的聚类算法 聚类算法是研究最多 应用最广的一种无监督学习算法 聚类试图将数据集中的样本划分为若干个通常是不相交的子集 每个子集称为一个 簇 通过这样的划分 每个簇里的样本可能具
  • Python封装了很好用的结构和方法,为啥还要学数据结构?

    文章目录 前言 Python内置数据类型性能分析 timeit模块 列表内置方法性能分析 列表内置操作的时间复杂度 字典内置操作时间复杂度 最后 前言 大家前面学过Python基础知识的都知道 Python为我们封装了列表 字典等高级数据类
  • Linux查询java服务占用的内存

    使用top命令可以查询 top o MEM b n 1 grep java awk print PID 1 t MEM 6 t CPU 9 t MEM 10 使用jps l 可以查询jar包名称和PID
  • kvm虚拟管理之kvm热迁移

    上一篇写不下了 补在这一篇 kvm虚拟管理之kvm热迁移 热迁移的原理如下 想将一台正在运行的虚拟机迁移过去必须借助共享存储 将磁盘挂载到共享存储上 谁想用就挂载 三台机器的环境配置如下 在nfs主机上的文件配置如下命令 root nfs0
  • 五年测试工程师一上来就要18K薪资,结果一问三不知

    现在招个合适的人可真难呀 不是这不会就是那不会 没有一个让我满意的 公司前段时间缺人 面试了不少的测试 结果居然没有一个符合要求的 一开始瞄准的就是中级测试工程师的水准 也没指望来技术大牛 提供的薪资在10 20k 面试的人很多 但平均水平
  • QT项目开发-多界面平台构建-1

    好久不发博文了 发一下关于QT项目开发 对于平台搭建一块 新手也可以看看 1 安装好QT 网上有很多教程可以参考 我用的5 9 如果有需要可以留言 2 首先建立一个QT Widget Application项目 3 一开始建立的项目有 pr
  • 条件查询LambdaQueryWrapper

    MyBatis Plus QueryWrapper及LambdaQueryWrapper的使用 假如我们有一张user表 现需要通过user name查出所有数据 ApiModel description 用户实体 public class
  • Dynamics CRM 2016 Word Template Feature

    Word Template 是Dynamics CRM 2016的新功能 功能比较强大 完全可以替代简单的自定义报表 更重要的是 这个功能使用简单 终端用户完全有能力自己实现自己想要的报表 不需要任何的开发经验 今天博主给大家简单介绍下怎么
  • ViT-YOLO论文解读

    论文 ViT YOLO Transformer Based YOLO for Object Detection https openaccess thecvf com content ICCV2021W VisDrone papers Zh
  • ubuntu登录桌面后只显示壁纸,排查方案

    起因 有一台压力测试机器 登录后只显示壁纸 这就奇怪了 难道是桌面出了问题 我当时先把桌面服务都重新安装了一遍 还是一样 我就想起之前写的一篇文章ubuntu任务栏菜单不见了 我抱着试了一下的心态 然后重启了lightdm 然后显示了桌面
  • Linux(Ubuntu或CentOS) Docker 安装 Python2.7及PIP的Dockerfile文件

    Docker镜像中若要安装Python2 7和PIP 需要使用Dockerfile文件来进行安装 Dockerfile 是一个用来构建镜像的文本文件 本文主要介绍Docker 在Linux Ubuntu或CentOS 上安装 Python2
  • Sqlserver——用IP连接多个实例问题

    一 配置configure 二 重启实例服务 services msc 三 利用SSMS连接实例 地址 实例名 端口号 例 107 212 10 172 53214 四 连接语句
  • 时序预测

    时序预测 MATLAB实现CNN LSTM卷积长短期记忆神经网络时间序列预测 风电功率预测 目录 时序预测 MATLAB实现CNN LSTM卷积长短期记忆神经网络时间序列预测 风电功率预测 预测效果 基本介绍 程序设计 参考资料 预测效果
  • Timing Modeling--时序模型

    The cell timing models are intended to provide accurate timing for various instances of the cell in the design environme
  • c++实现进制转换

    目录 进制的相关概念 十进制转非十进制 非十进制转十进制 二进制转八进制 八进制转二进制 二进制转十六进制 十六进制转二进制 八进制转十六进制 十六进制转八进制 进制的相关概念 1 数码 在数制中表示数制大小的符号 比如十进制的数码 0 1
  • 卡尔曼滤波学习笔记

    这篇文章参考博客 介绍 卡尔曼滤波的一个典型事例是从一组有限的 包含噪声的对物体位置的观察序列 可能有偏差 预测出物体的位置的坐标及速度 卡尔曼最初提出的滤波器形式现在一般称为简单卡尔曼滤波器 除此之外还有施密特扩展滤波器 信息滤波器以及很