当前位置: 首页 > news >正文

神奇的卡尔曼滤波,行人追踪的福音

前言

        卡尔曼滤波算法由匈牙利数学家Kalman提出,主要基于线性系统提出。这里我们将其用于行人跟踪,并对其基本原理进行介绍。


神奇的卡尔曼滤波,行人追踪的福音

前言

1.背景知识

1.1 时间序列模型

1.2. 滤波

1.3. 线性动态系统 

2.卡尔曼滤波理论知识 

2.1 状态序列的预测


1.背景知识

1.1 时间序列模型

时间序列模型都可以用如下示意图表示:

这个模型包含两个序列,一个是黄色部分的状态序列,用X表示,一个是绿色部分的观测序列(又叫测量序列、证据序列、观察序列,不同的书籍有不同的叫法,在这里统一叫观测序列。)用Y表示。状态序列反应了系统的真实状态,一般不能被直接观测,即使被直接观测也会引进噪声;观测序列是通过测量得到的数据,它与状态序列之间有规律性的联系。

上面序列中,假设初始时间为t_{1}, 则X_{1},Y_{1}t_{1}时刻的状态值和观测值,X_{2},Y_{2}t_{2}时刻的状态值和观测值...,即随着时间的流逝,序列从左向右逐渐展开。  

常见的时间序列模型主要包括三个:隐尔马尔科夫模型,卡尔曼滤波,粒子滤波

1.2. 滤波

时间序列模型中包括预测和滤波两步

  • 预测:指用当前和过去的数据来求取未来的数据。对应上述序列图中,则是利用t_{1}时刻X_{1},Y_{1}的值,估计t_{2}时刻X_{2}值。
  • 滤波是用当前和过去的数据来求取当前的数据。对应上述序列图中,则是先通过上一步的预测步骤得到X_{2}的一个预测值,再利用t_{2}时刻Y_{2}的值对这个预测值进行纠正,得到最终的X_{2}估计值。(通俗讲,就是通过X_{1}预测一个值, 通过传感器测量一个值Y_{2}, 将两者进行融合得到最终的X_{2}值)        

1.3. 线性动态系统 

        卡尔曼滤波又称为基于高斯过程的线性动态系统(Linear Dynamic System, LDS)。

        · 这里的高斯是指:状态变量X_{t}和观测变量Y_{t}都符合高斯分布;(为什么是高斯分布?因为卡尔曼滤波估计的结果是一个概率,概率不是一个固定的值,而是一个范围,而这个范围符合高斯分布。)

        · 这里的线性是指:X_{t}可以通过X_{t-1}线性表示,Y_{t}可以通过X_{t}线性表示;

如果用数学表达式来表达这两层含义如下:

上面表达式中F是一个矩阵,常称作状态转移矩阵,保证了X_{t}X_{t-1}的线性关系(线性代数中,矩阵就是线性变换);w_{t-1}常称作噪声,其服从均值为0,方差为Q的高斯分布,保证了X_{t}服从高斯分布(因为高斯分布加上一个常数后依然是高斯分布)。

同样的关于X_{t}Y_{t},也可以得到如下表示, 其中矩阵H称作状态空间到观测空间的映射矩阵, rtrt称作噪声,其服从高斯分布:

2.卡尔曼滤波理论知识 

2.1 状态序列的预测

在时间序列模型图中,这一步表示的是, 在预测序列中,从X_{t-1}X_{t}的预测步骤。

需要用到的变量含义如下:

  • x\hat{}_{k}:状态变量
  • \hat{P}_{k}: 状态变量的协方差矩阵
  • F_{k}:状态转移矩阵
  • B_{k}:控制矩阵
  • u_{k}:控制向量
  • w_{k}: 状态变量的噪声矩阵
  • Q_{k}:协方差矩阵的噪声矩阵

数学表达式如下:

未完待续... 

相关文章:

  • 第三章 教育法律法规
  • MATLAB | 全网唯一,使用MATLAB绘制好看的韦恩图(venn)
  • 2D Transpose算子GPU实现和优化
  • 软件复杂性的来源与应对
  • 11.9 表达式求值
  • 09-排序3 Insertion or Heap Sort(浙大数据结构)
  • java-python+vue社区防疫服务管理系统网站
  • sparksql insertinto 源码解析
  • 反射之获取Class
  • 【博客477】prometheus-----数值数据编码(varint与zigzag)
  • LCMXO2-2000HC-4FTG256C FPGA MachXO2系列 256-FTBGA 现场可编程门阵列
  • 初始Cpp之 四、数据类型
  • office2019如何自定义安装位置?
  • java基于ssm的汽车维修保养管理系统
  • Std::optional 源码分析
  • 分享的文章《人生如棋》
  • [LeetCode] Wiggle Sort
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • CSS实用技巧干货
  • Electron入门介绍
  • EOS是什么
  • HTML5新特性总结
  • Java的Interrupt与线程中断
  • mongo索引构建
  • supervisor 永不挂掉的进程 安装以及使用
  • Vue小说阅读器(仿追书神器)
  • Web设计流程优化:网页效果图设计新思路
  • 番外篇1:在Windows环境下安装JDK
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 前端技术周刊 2019-01-14:客户端存储
  • 首页查询功能的一次实现过程
  • 小程序01:wepy框架整合iview webapp UI
  • 支付宝花15年解决的这个问题,顶得上做出十个支付宝 ...
  • 组复制官方翻译九、Group Replication Technical Details
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • #我与Java虚拟机的故事#连载10: 如何在阿里、腾讯、百度、及字节跳动等公司面试中脱颖而出...
  • $GOPATH/go.mod exists but should not goland
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (rabbitmq的高级特性)消息可靠性
  • (vue)页面文件上传获取:action地址
  • (ZT)出版业改革:该死的死,该生的生
  • (翻译)Quartz官方教程——第一课:Quartz入门
  • (附源码)ssm高校志愿者服务系统 毕业设计 011648
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (三)elasticsearch 源码之启动流程分析
  • (四) 虚拟摄像头vivi体验
  • (原創) 如何安裝Linux版本的Quartus II? (SOC) (Quartus II) (Linux) (RedHat) (VirtualBox)
  • .bat批处理(十一):替换字符串中包含百分号%的子串
  • .NET CLR Hosting 简介
  • .NET CLR基本术语
  • .NET Core 版本不支持的问题
  • .NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划
  • .Net FrameWork总结
  • .NET/C# 获取一个正在运行的进程的命令行参数