卡尔曼滤波:再也不用瑟瑟发抖了

news2024/11/29 0:31:39

本文来自公众号“AI大道理”

 ——————

目标跟踪中,在数据关联后往往要进行卡尔曼滤波。

数据关联算法得到了每个目标的观测数据。

卡尔曼滤波使用关联的观测数据来估计目标的状态,并预测目标的未来位置和速度等信息。

目标跟踪过程中,测量数据通常会受到各种噪声的影响,例如传感器噪声、环境干扰等。卡尔曼滤波器可以通过对测量数据和系统模型的加权处理来减少噪声的影响,提供更准确的目标状态估计。


 

1、卡尔曼滤波简介

卡尔曼滤波用来估计带噪信号中隐藏的真实信息。

卡尔曼滤波是一种利用线性状态方程,通过系统输入输出观测数据,对系统状态进行最优估计的算法。

由于观测数据中包括系统中的噪声和干扰的影响,所以最优估计也可看作是滤波过程。

卡尔曼滤波利用目标的动态信息,设法去掉噪声的影响,得到一个关于目标位置的估计。这个估计可以是对当前目标位置的估计(滤波),也可以是对将来位置的估计(预测),也可以是对过去位置的估计(插值或平滑)。

卡尔曼滤波本质上是一个数据融合算法,将具有同样测量目的、来自不同传感器、(可能) 具有不同单位 (unit) 的数据融合在一起,得到一个更精确的目的测量值。

卡尔曼滤波基于状态空间模型,将系统的状态建模为一个随时间变化的状态向量,同时考虑了系统的测量值和系统动态之间的关系。它利用贝叶斯推断的思想,在每个时刻通过融合系统的观测值和先验预测,来估计系统的当前状态。

卡尔曼滤波主要包括两个步骤:预测步骤和更新步骤。

  • 预测步骤(Prediction):根据系统的动态模型,使用上一时刻的状态估计和控制输入,预测系统的下一时刻状态和状态协方差。

  • 更新步骤(Update):通过比较系统的观测值和预测值,结合观测噪声和系统模型的不确定性,更新系统的状态估计和协方差。

卡尔曼滤波通过递归的方式进行状态估计,每个时刻的状态估计都会考虑前一时刻的估计结果和当前的观测值。

需要注意的是,卡尔曼滤波的有效性和准确性取决于系统模型和噪声模型的准确性。如果系统模型或噪声模型与实际情况不符,卡尔曼滤波可能会产生较大的估计误差。因此,在应用卡尔曼滤波时,需要合理选择模型并进行参数调整和验证,以确保其适用性和效果。

2、卡尔曼滤波适用系统

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

线性系统满足叠加性和齐次性,高斯指的噪声满足正态分布。

滤波即加权,理想状态下真实信号权重为1,噪声权重为0。

实际情况下则不是1和0,可能是0.7,0.3等。

卡尔曼滤波就是权重可选可调整的滤波,融合估计值的权重和观测值的权重得到一个修正的值。

估计的预测值不一定准,观测的(传感器的测量值、yolov5目标检测值)也不一定准,所以两者融合一下就可能得到更准确的值。

这里权重给的多少就看你更信任哪里值了。

卡尔曼滤波这个算法的作用,就是在既有“过程误差”,又有“观测误差”的真实世界里,寻找一个最优的估计。

如何从两个概率分布中找到最准确的那个估计值呢?

卡尔曼滤波直接将两个概率分布相乘!

3、卡尔曼滤波基础:状态空间表达式

因为卡尔曼滤波是基于状态方程展开讨论的,所以在介绍卡尔曼滤波器之前需要建立一个状态空间方程组。

状态空间表达式是描述系统动态行为的一种数学形式,常用于卡尔曼滤波和系统控制理论中。

它将系统的状态、输入和输出之间的关系表示为一组差分方程或微分方程。

状态方程描述了系统的状态如何随时间演变。

观测方程则表示了状态与观测输出之间的关系。

通过状态方程和观测方程,可以进行状态估计、滤波、预测和控制等操作。

4、卡尔曼滤波基础:高斯分布(正态分布)

正态分布(Normal Distribution),也称常态分布,又名高斯分布(Gaussian Distribution),是一个常见的连续概率分布。

一维高斯分布:

高斯分布的形状是一个钟形曲线,其峰值位于均值处。标准差决定了曲线的宽度,标准差越大,曲线越宽,表示观测值的变异程度越大。

多维高斯分布:

高斯分布融合:

A,B为相互独立的条件:即事件A(或B)是否发生对事件B(A)发生的概率没有影响。那么,AB 同时发生P(AB)=P(A)P(B)。

假如A,B都服从高斯分布:

有高斯分布1:

有高斯分布2:

对分布进行融合:

两个高斯分布相乘依旧是高斯分布。

5、卡尔曼滤波公式推导

卡尔曼滤波使用上一次的最优结果预测当前值,使用观测结果修正当前预测值,得到当前最优结果。

先验估计:

先验估计协方差:

测量方程:

以上是预测的公式的推导,更新的公式推导稍微有点复杂,暂不推导,而是以理解为主。

6、卡尔曼滤波公式理解

修正估计也叫融合估计,也叫最优估计。

它是融合了预测值和测量值的结果。

而两个值如何融合就靠卡尔曼增益这个参数了,可以看成是这两个值的权重或者说信任度。

修正估计:

卡尔曼增益K实际上表征了状态最优估计过程中模型预测误差(Predicted error)与量测误差(Measurement error)的比重。

卡尔曼增益:

后验估计协方差:

7、卡尔曼滤波简化版

卡尔曼滤波公式看起来很是复杂不好理解。

那么就进行化繁为简,看看它到底在干嘛。

之前是匀加速直线运动,现在不加速了,不运动了,干脆静止吧。

这样就没有运动误差了,只有测量误差。

那就看你测的准不准了。

位置:由于静止,下一时刻的位置肯定等于上一时刻的位置等于初始位置。

且没有过程误差。

测量:依然存在测量误差,H等于1。

融合估计:H取1。

后验估计协方差:H取1。

卡尔曼滤波匀加速直线运动和静止情况下公式对比:

简化版卡尔曼滤波过程:

测量十次的时候卡尔曼滤波效果还不是很明显,当测量50次100次效果就出来了,在一定次数后的值明显不会偏离真实值很远。

这就是卡尔曼滤波达到的效果。

(50次,100次等每次的图不是一样的值,而是高斯分布随机生成的值,所以导致在数值上是不一样的。)

8、卡尔曼滤波简化版公式通式

进行融合估计值的计算:

最后发现相当于每个测量值权重一样了,只是权重相加不等于1,当然,当t很大的时候,就很接近1了。

卡尔曼滤波就是在求测量值的平均!

会不会是偶然所致?改变R=0.3试一下。

还是一样,权重一样,在求平均。

是什么导致了各个系数权重一样?

也就是说这个式子系数相等:

即(1-k2)k1=k2   ,即(1-kt)kt-1 =kt。

将K1的式子带入p1,最后得出一个通式:

证毕!

这就是为什么权重都一样的数学原因。

显然,当t趋于无穷大的时候,所有权重系数和就是1。

9、卡尔曼滤波类比

当我看到卡尔曼滤波的融合公式的时候,第一时间想到了Momentum的一阶动量公式,仿佛卡尔曼滤波的这个公式在哪里见过。

卡尔曼滤波能够利用前一时刻的状态和可能的测量值来得到当前时刻下的状态的最优估计。

卡尔曼滤波是一个根据未来输入不断变换并自我调整的过程。

动量梯度下降法是考虑了所有历史数据,只是分派了不同的权重,这个历史数据越近的数据权重越大。

从图形上看:

Momentum,可以看成是MBGD的滤波,数值从两边压缩。

卡尔曼滤波,将测量值的上下波动,滤波成中间数值。

从公式上看:

Momentum,考虑了所有历史数据,这个历史数据越近的数据权重越大,太遥远的数据几乎可以忽略不计。

卡尔曼滤波,也考虑了所有历史数据,但这些历史数据权重一样,不可忽略。

10、卡尔曼滤波实例

上述忽略了过程噪声的影响,现在加上这个因素。

11、总结

目标跟踪中,在数据关联后往往要进行卡尔曼滤波。

数据关联算法得到了每个目标的观测数据。

卡尔曼滤波使用关联的观测数据来估计目标的状态,并预测目标的未来位置和速度等信息。

 ——————

浅谈则止,细致入微AI大道理

扫描下方“AI大道理”,选择“关注”公众号

—————————————————————

 

—————————————————————

投稿吧   | 留言吧

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/763668.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

0基础学习VR全景平台篇 第62篇:基本功能-如何发布VR视频

戳我先了解“全景视频上传规范” 1、点击【上传】按钮,打开本地文件夹,上传符合要求的全景视频素材,可以选择单个或多个视频同时上传。 2、视频上传成功以后,需要处理一段时间,请耐心等待。 视频处理好以后&#xff0…

编程语言有哪些?介绍常见的编程语言

(又是水文章的一天):) 在当今数字化时代,编程语言成为了连接人类与计算机的关键工具。无论是网页开发、移动应用程序还是大规模软件开发,选择合适的编程语言对于开发人员来说至关重要。本文将介绍一些常见的…

Cesium-源码打包1.106

在有Cesium源码打包的需求下,可以这样进行, 1.106的源码目录结构如下: 1.在下载的源码目录中运行 npm install 出现node_modules文件夹,然后我们就可以根据需求去修改源码,本文用的版本是1.106, packag…

C语言--动态内存管理(图解)

文章目录 C程序的内存开辟为什么存在动态内存分配动态内存分配函数malloc和freecallocrealloc 常见的动态内存错误对空指针的解引用操作对动态开辟空间的越界访问对非动态开辟内存使用free释放使用free释放一块动态开辟内存的一部分对同一块动态内存多次释放动态开辟内存忘记释…

浅析电力企业一体化云运维管理平台

摘要:电力的发展,关系着我国社会和谐和稳定,在当今科学技术不断向前发展的时代,在电力企业发展中须要结合现今的科学技术,保证电力企业的信息化建设水平能够符合时代的发展趋势。本文主要分析当前电力企业一体化云运维管理的重要性,并就云运维管理中存在的问题进行有…

Spring 6【BeanFactory代码演示、实例化Bean的两种方式】(三)-全面详解(学习总结---从入门到深化)

目录 六、BeanFactory代码演示 七、实例化Bean的两种方式 六、BeanFactory代码演示 上面的案例代码就是我们平时使用Spring Framework的代码。 为了让小伙伴们能感受到BeanFactory,我们还是用实际代码来进行演示一下。毕竟 ApplicationContext在牛,对…

hadoop学习之hdfs学习

HDFS 文件系统,可以说是分布式数据库吧 结构是 目录树 适用场景:一次写入,多次读出.好像不太支持改删 优点: 1.高容错: 因为他会备份,所以一份出问题了,并不影响其他几份 如果副本丢失后,定时恢复.应该是定时检查然后恢复 每次启动,DN向NN汇报备份的存储情况.默认每个6个小时重…

波奇学Linux:git和gdb调试

git用来版本控制,同样是版本控制的软件还有svn等。 git的特定是具有网络功能的版本控制器,开源,client和server是一体的。(去中心化分布式管理) client和server一体意味着远程仓库和本地仓库是平等地位,远程仓库是特殊的仓库而已…

rtmp推流

目录 1、解压代码工程2、进入工程文件夹3、修改Makefile中的交叉编译路径4、编译5、板子上6、window上打开ffplay进行拉流注意:推流之前要先搭建好nginx服务器 1、解压代码工程 sudo unzip ffmpeg_rv1126_network_project_mark_finally.zip 2、进入工程文件夹 cd ffmpeg_rv…

AudioFocus源码分析

使用情景 在音视频app开发中一般会遵循音频焦点的机制,播放时申请音频焦点,丢失焦点后暂停播放,恢复焦点后继续播放等。尤其在车载开发时,涉及到三方应用和自研应用,导致经常出现音频焦点混乱混音等问题。 private f…

分享几个不常用的web api

分享几个不常用的web api 屏幕捕获 顾名思义&#xff0c;屏幕捕获 API 允许我们捕获屏幕内容&#xff0c;从而使构建屏幕录制的过程变得轻而易举。 在示例中我们使用video标签来显示捕获屏幕内容。 <video id"preview" autoplay>不支持HTML5 </video>…

Jmeter(119)-函数threadNum妙用

今天的接口场景是&#xff1a;有N个用户需要每隔5秒去查询一次数据&#xff0c;也就是说N个用户会去循环执行同一个接口。一开始的时候将用户参数化时使用了counter&#xff0c; 要执行2个线程3次循环&#xff0c;发现每次循环时&#xff0c;接口中用户参数的数据就会不一样&am…

统计页面左右+上下自适应布局

1:如果需要调整分栏数量,那么只需要删除对应数据,修改百分比即可. <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><style type"text/css" lang"less" >body{margin: 0px ;}.box…

2.1Label Button 标签和按钮

2.1Label & Button 标签和按钮 窗口主体框架 每一个 tkinter 应用的主体框架都可以包含下面这部分. 定义 window 窗口 和 window的一些属性, 然后书写窗口内容, 最后执行window.mainloop让窗口活起来. import tkinter as tkwindow tk.Tk() window.title(my window) wind…

【C语言高阶篇】成为编程高手必学内容,程序中的动态内存分配我不允许还有人不会!

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏:《快速入门C语言》《C语言高阶篇》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 前言&#x1f4ac; 为什么存在动态内存分配&#x1f4ac; 动态内存函数的介绍1️⃣ 动态内存函数 malloc&#…

西门子PLC上位机测试

上一篇我们讲了三菱PLC的数据通信方法&#xff0c;今天我们讲讲另外一个PLC巨头--西门子。 西门子有很多系列&#xff0c;今天讲到的是用S7协议的S71200。西门子同样提供了丰富的集成库&#xff0c;例如S7.NET&#xff0c;对于C#上位机开发&#xff0c;是非常容易的事情。 首…

API开发,机器人api二次开发

由于自身在机器人方面滚爬多年&#xff0c;尝试了很多次&#xff0c;选择了一个信任的工具 可以给有需要的朋友们借鉴一下 开发起来很方便&#xff0c;技术也已经挺成熟的了 贴一点简单的给大家看下呢 测试文档&#xff1a;https://www.wkteam.cn/ 简要描述&#xff1a; …

10.Ceph接口使用

文章目录 Ceph接口使用CephFS文件系统服务端添加mds服务创建存储池授权用户权限 客户端前期准备客户端挂载方式一&#xff1a;基于内核方式二&#xff1a;基于 fuse 工具 Ceph 块存储系统 RBD 接口服务端创建存储池和镜像管理镜像 客户端镜像挂载快照管理快照分层快照展平镜像的…

Ubuntu20.04升级到Ubuntu 22.04

升级Ubuntu到最新版本 执行如下命令将Ubuntu升级到最新的版本&#xff1a; $ sudo apt update && sudo apt upgrade -y升级完成后&#xff0c;重启系统 reboot重启成功之后&#xff0c;查看系统的当前版本 $ lsb_release -a最新版本应该是20.04.6&#xff0c;如下图…

JTS-Orientation方向计算

org.locationtech.jts.algorithm.Orientation 使用说明 用于计算基本几何结构(包括点三重体(三角形)和环)的方向的函数。方向是平面几何的基本属性。 Orientation.index(Coordinate p1, Coordinate p2, Coordinate q) 说明 计算q点处在p1点->p2点方向的左侧还是右侧,左侧…