卡尔曼滤波器第 2 部分 - 贝叶斯滤波器

news2024/11/18 10:46:48

一、说明

        这是卡尔曼滤波器系列的第二部分,我们在概念和代码方面对卡尔曼滤波器进行了基于示例的理解。在第一部分中,我们对卡尔曼滤波器有了直观的理解,然后是基于数值的 Alpha-Beta 滤波器(构成卡尔曼滤波器的基础)的正式示例。

在本文中,我们正式介绍贝叶斯滤波器和卡尔曼滤波器。在我们在下一篇文章中正式介绍卡尔曼滤波器之前,这篇文章将介绍贝叶斯滤波器。

但您可能会问,为什么要使用贝叶斯过滤器呢?稍安毋躁!我们很快就会做到这一点 🙂

如果您还没有阅读第一部分,本系列分为以下几个部分:

  1. 直观了解卡尔曼滤波器、Alpha-Beta滤波器;
  2. 正式贝叶斯过滤器(我们在这里!);
  3. 形式卡尔曼滤波器;
  4. Python 中的一维卡尔曼滤波器从头开始;
  5. Python 中的二维卡尔曼滤波器从头开始。

二、快速回顾

        如果我们要总结上一篇文章第 1 部分,要点如下!

卡尔曼滤波器是一种工具,可以帮助您高精度地估计状态,即使传感器测量结果存在噪声和/或不确定。

它使用数学模型来预测时间实例t的状态值,基于状态值在前一个时间实例t-1中的位置以及它应如何在数学上演化(状态估计)。然后,它将该预测与在时间 t 接收到的传感器测量值进行比较,并根据差异调整其估计(状态更新)。

        使这个稍微正式一些,卡尔曼滤波器有两个步骤

  1. 状态预测:根据 t-1 时刻的估计值,预测t时刻的状态值。它使用状态传播/外推模型来预测该值;
  2. 状态更新:将状态预测的预测与测量值(均针对时间t)进行比较,并根据差异更新/调整其对时间t的最终估计。此步骤使用传感器/探测器。

如果这个回顾没有让你说“呃!我已经知道了”,请看第 1 部分。

我们现在要更深入地了解卡尔曼滤波器吗?不,不!还没有!为此,我们首先要看看它的父亲——贝叶斯过滤器。当然,我们还将它连接到我们之前探索过的 Alpha-Beta 过滤器。

三、贝叶斯过滤器 — 基于示例的推导

        自动赛车远离天线的示例,该天线测量其在不同时间戳中的位置。

        在第 1 部分中,我们介绍了需要及时定位/跟踪的自动驾驶汽车的示例。假设速度恒定,汽车沿直线行驶。对于每个时间戳t,我们根据恒定速度假设和天线测量来估计汽车的行驶距离。简单易行,对吧?

        为了形式化这一点,我们在示例中将变量分配给不同的值 -

  • z——传感器观测(天线测量);
  • u — 控制数据(在我们的例子中为恒定速度);
  • x — 系统状态(汽车距原点的距离,这里恰好是天线)。

        因此,我们有传感器观测值z、控制数据u和系统状态x。这些变量对于我们的示例来说是明确定义的,但它们可能会根据问题陈述和方法而有所不同。例如,系统的状态可以是机器人在环境中的位置,或者世界上地标的位置,即我们想要估计的任何东西。如果我们能够感知环境,并可能通过执行任何操作来修改它,我们就可以对其进行估计。

        注 - 在许多示例中,系统状态包括位置和速度。在这种情况下,控制数据 u 可以是加速度。如果我们遵循该模型,则 u=0(恒定速度)。但我们仍然会有相同的模型行为。如果这还没有意义,别担心!

        现在是时候解释这些变量在概率世界中是如何相关的了。由于我们知道传感器观测值z和控制数据u,因此只有系统状态x未知。因此,我们问自己:“给定传感器观测值 z 和控制数据 u,系统的状态 x 是什么?” 这本质上就是我们的问题陈述,对吗?

从数学上来说,这个方程相当于

        解释该方程的另一种可能的方式是:“给定 z 和 u,系统状态为 x 的可能性有多大”。这个概率可以是均匀分布,随着我们获得更多的观察并执行操作,我们对状态更加确定。最后,我们希望得到一个围绕一个状态的峰值分布,我们也希望它是正确的。说到这里,我们永远不能说系统完全处于那个特定状态,因为我们这里有一个概率分布,而且它永远不是百分百确定的。

        该方程估计了观测和控制数据后系统的状态,这就是它也称为后验方程的原因。为了估计这样的后验,我们可以将贝叶斯规则与概率论中的其他规则结合使用。最后,我们将提出一个递归方程,使我们能够一次集成一个传感器观测和一个控制,以递归地估计系统的状态。

        所以我们从下面的第一个方程开始

        这和前面的方程一模一样,只是我们引入了时间的概念。简而言之,它表示:“给定所有观测集 z ₁:ₜ和所有控制集 u ₁:ₜ ,我对时间实例 t, bel(xₜ) 的当前状态的信念是什么?” 。那么,考虑到现在为止的所有数据,包括时间实例t,系统的状态是什么?我们可以将贝叶斯规则应用于这个方程。但首先,让我们了解什么是贝叶斯规则。

        两个不同事件ab发生的概率为

        然而, ab的概率也等于b的概率乘以b的概率。因此,

        如果我们继续从这两个方程出发,我们有

        这就是贝叶斯规则

        贝叶斯规则描述了基于可能与a相关的条件b的先验知识的事件 a 的概率。为了简化,我们可以将p(b) ⁻¹ 称为贝叶斯规则中的归一化器,然后它就变成

        现在我们了解了贝叶斯规则是什么,让我们回到我们的主要方程并继续定义信念。同样,我们有一系列传感器观测值和一系列运动(控制)数据,我们想要估计系统的当前状态

        如果我们将贝叶斯规则应用于该方程,我们最终会得到以下新方程

        我们交换了xₜzₜ(相当于p(b|a)),并将传感器观测序列的其余部分z ₁:ₜ₋₁ 留在右侧。然后我们有第二项(相当于p(a)),但仍然忽略当前传感器观测值z ₜ。这就是贝叶斯规则的基本执行,没有任何棘手的动作。

        现在我们可以根据马尔可夫假设简化这个新方程的第一部分。它假设如果未来状态的条件概率分布仅依赖于当前数据来估计未来状态,则过去的数据是不必要的。对于我们的情况,如果我们知道系统的状态xₜ,并且我们想要估计当前传感器观测值z ₜ ,那么可以忽略先前的观测值和运动数据(因为它们仅用于估计系统的状态)系统,目前已知)。因此,

        为了处理这个新方程的第二部分,我们必须理解它的含义。我们想要根据除最后一个z ₁:ₜ₋₁ 之外的所有传感器观测值以及所有控制数据u ₁:ₜ来估计系统的当前状态xₜ 。对于这种估计,我们需要使用全概率定律。它呈现了可以通过几个不同事件计算的结果的总概率。其积分版本为

        简单来说,变量x的分布等于给定y时x发生的概率乘以所有可能y的y发生的可能性。

        注意 - 该积分用于连续模型。如果您的模型是离散的,则可以使用 sigma 表示法。

        如果我们将此定律应用于bel(xₜ)方程的第二部分,以计算基于x ₜ₋₁的积分(它表示前一个时间步中系统的状态),我们有以下结果

        通过将马尔可夫假设应用于积分的第一项,我们可以简化整个方程。这个想法很简单——如果我们想要估计系统的当前状态xₜ,假设我们知道之前的状态xₜ₋₁ ,那么在t-1之前收集的所有传感器数据对我们来说都是不必要的。考虑到在时间t没有获取传感器观测值(由于z₁:ₜ₋₁),并且只有控制数据(由于u₁:ₜ),我们最终得到

        继续化简,积分的第二项也可以化简。如果我们估计时间戳t-1处的系统状态,则与当前时间t相对应的所有数据都变得不必要。这也是基于马尔可夫假设。因此,

        经过这么多工作,我们最终得到了一个很长的方程。但你看到这里有一个模式吗?
我们用下面的等式开始这个练习

        它正是积分的第二项,除了索引(从tt-1)。这意味着积分具有前一个时间戳中系统状态的置信度,即

        因此,我们可以说

最后,我们有一个递归更新方案,允许我们根据先前的状态和控制数据(当前运动)以及当前的传感器观察来估计系统的状态。

        现在我们有了递归更新方程,我们可以根据它们在整个方案中的角色来拆分它。我们将其分为两个步骤:预测和更新。看看我们如何将其与上一篇文章中的理解联系起来?

        我们现在有了预测和更新步骤的数学表示,而我们只是概念性地掌握了一些东西。

        我们方程的这一部分是预测步骤

        它考虑了对系统先前状态的置信度和控制数据(将系统从先前状态转变为当前状态的操作),以估计预测的置信度。

        基本上,它根据先前的估计和控制数据(动作)来预测状态将是什么。

这里有一个例子可以让这个方程更加直观:想象一下你在足球场中心,看着一个球门。你的位置就是你的状态,xₜ₋₁。然后你向前迈出两步,用 uₜ(控制/动作)表示。您最终所处的位置是根据前面的方程以及您对两步将引导您走向何方的内心想法来估计的。它表示为上划线{bel}(xₜ)。

        等式的另一部分是我们的更新步骤

        它依赖于预测信念和传感器观察来估计当前更新的信念。归一化因子有助于将积分结果和总体结果保持为 1(因为总和在概率上不能大于 1)。

        回到足球场的例子——现在你回头看看,大致了解自己前进了多少。这是您的测量值zₜ,更新方程使用它来估计您的当前位置bel(xₜ)以及预测位置overline{bel}(xₜ)

        但这两个方程还有更多内容!

        在预测步骤中,我们仅处理控制数据和系统的先前状态。必须对控制数据进行建模,为此,我们使用运动模型

        这同样适用于更新步骤,但适用于传感器观测。如果我们可以更新系统的状态,并且对传感器观测进行正确建模,我们就可以纠正预测。所以,

        这意味着我们现在有了预测和更新步骤的数学表示。

        顺便说一句,你最终在这里看到的是贝叶斯过滤器!我们用贝叶斯定理、概率论和我们的例子构建了一个贝叶斯过滤器。总是比乱扔行话要好,对吧?😃

本质上,贝叶斯过滤器可以写成一个两步过程——预测和更新。

        基于贝叶斯滤波器的递归遗产估计框架的介绍到此结束。它是一个通用框架,使用运动和观察两种模型来估计状态。

        注意 — 您现在是否也明白这在概念上与 Alpha-Beta 过滤器有何相似之处?您现在知道为什么我们从基本的 Alpha-Beta 过滤器开始了。您很快就会看到,与 Alpha-Beta 滤波器不同,卡尔曼滤波器如何计算运行时每次迭代的权重。但一切都来得正是时候!

四、卡尔曼滤波器与贝叶斯滤波器有何关系?

        在我们深入讨论卡尔曼滤波器和贝叶斯滤波器之间的关系之前,我们先给您一些剧透。

        卡尔曼滤波器是实现贝叶斯滤波器的一种方式。它是一个有 2 个假设的贝叶斯过滤器:

  1. 所有分布都是高斯分布;
  2. 状态外推(运动)模型和测量(观测)模型都是线性的(或线性化的)。

        现在我们再多谈谈吧。

        贝叶斯滤波器在给定先验分布和当前测量的情况下估计状态的后验概率分布。后验分布代表了我们在合并测量信息后对状态的信念。然而,在实践中,直接计算和表示完整的后验分布可能在计算上非常昂贵,甚至对于高维系统来说是不可行的。卡尔曼滤波器(贝叶斯滤波器+上面的两个假设)解决了这个问题。

        卡尔曼滤波器为具有高斯噪声的线性动态系统的贝叶斯滤波器问题提供了特定的解决方案。它假设系统动力学和测量模型都是线性的,并且噪声遵循已知统计数据的高斯分布。卡尔曼滤波器使用两步过程:预测步骤和更新步骤,正如我们已经介绍的那样。通过迭代地应用预测和更新步骤,卡尔曼滤波器提供了一种有效且最优的解决方案来估计给定噪声测量的线性系统的状态。随着新测量的出现,它不断完善状态估计。

        值得注意的是,贝叶斯滤波器还有其他变体,可以扩展卡尔曼滤波器处理非线性系统或非高斯噪声的能力。例如,在处理非线性系统动力学时,通常使用扩展卡尔曼滤波器(EKF)和无迹卡尔曼滤波器(UKF)。这些滤波器采用近似值通过非线性模型传播概率分布,并根据测量结果更新状态估计。

五、总结

        到目前为止,我们已经深入研究了状态估计的迷人世界,并探索了贝叶斯滤波器的强大技术,它构成了卡尔曼滤波器的基础。让我们回顾一下本系列到目前为止所涵盖的内容

  • 在上一篇文章中,我们讨论了在存在噪声和不确定性的情况下估计系统状态的挑战。通过移动汽车的例子,我们引入了状态估计的概念。我们谈到了结合测量和先验知识来完善我们对系统真实状态的理解的重要性。我们还引入了 alpha-beta 滤波器,以了解预测和更新步骤如何帮助离散状态估计
  • 在这篇文章中,我们重点关注贝叶斯过滤器,这是一种利用贝叶斯推理的递归状态估计的通用框架。我们了解到,贝叶斯滤波器的目的是在给定先验分布和当前测量的情况下计算系统状态的后验概率分布。随着时间的推移,我们可以根据新信息更新我们对国家的信念,从而获得越来越准确的估计;
  • 为了更好地掌握贝叶斯滤波器的数学基础,我们研究了它的关键方程。我们探索了先验分布、动态模型和测量模型如何结合起来计算后验分布。理解这些方程有助于我们理解状态估计的概率本质以及如何迭代地改进它;
  • 我们还发现了贝叶斯滤波器和卡尔曼滤波器之间的密切关系。卡尔曼滤波器是贝叶斯滤波器的具体实现,专为具有高斯噪声的线性动态系统而定制。虽然贝叶斯滤波器提供了一个通用框架,但卡尔曼滤波器的线性和高斯噪声假设允许更有效和最佳的状态估计

        现在我们对贝叶斯滤波器有了很好的了解,我们在下一部分中继续讨论卡尔曼滤波器。

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

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

相关文章

云服务器如何选?腾讯云2核2G3M云服务器88元一年!

作为一名程序员,在选择云服务器时,我们需要关注几个要点:网络稳定性、价格以及云服务商的规模。这些要素将直接影响到我们的使用体验和成本效益。接下来,我将为大家推荐一款性价比较高的轻应用云服务器。 腾讯云双11活动 腾讯云…

PC6410 DC-DC降压调整器低纹波高效率低功耗

PC6410是一款由基准电压源、振荡电路、比较器、PWM/PFM 控制电路等构成的CMOS降压DC/DC调整器。利用PWM/PFM自动切换控制电路达到可调占空比,具有全输入电压范围内的低纹波、高效率和大输出电流等特点。PC6410内置功率MOSFET,使用过压、过流、过热、短路…

AM335x USB Boot详细说明

首先,要rev2.1的芯片才支持,以前的cpu有bug,无法使用usb boot 上位机需要uniflash, 以太网上截取的报文,可以进入第一阶段 AM335x自动从c:\am335x_flashtool\images目录下下载u-boot-spl-restore.bin http://process…

3ds Max渲染用专业显卡还是游戏显卡?

使用3dsmax建模时,会面临诸多选择,除了用vr还是cr的决策,硬件选择上也存在着疑问,比如用专业显卡还是消费级游戏显卡?一般来说,除非是特别专业的大型项目和软件,且预算在5位数以上,常…

ssm047网上服装销售系统+jsp

ssm047网上服装销售系统jsp 交流学习: 更多项目: 全网最全的Java成品项目列表 https://docs.qq.com/doc/DUXdsVlhIdVlsemdX 演示 项目功能演示: ————————————————

spring cloud之服务熔断

四、Hystrix组件(*) - 官网:https://github.com/Netflix/Hystrix - 在分布式环境中,许多服务依赖项不可避免的会失败。Hystrix是一个库,它通过添加延迟容忍和容错逻辑来帮助您控制这些分布式服务之间的交互。Hystrix通过隔离服务之间的访问点…

【【OpenCV实现图像:用OpenCV进行模板匹配】

文章目录 概要整体架构流程图像灰度化结论 概要 模板匹配是一种在图像处理领域广泛应用的技术,旨在寻找目标模板在源图像中的位置。该算法的核心思想是通过比较模板与源图像的局部区域,逐像素滑动,创建一个相似度图,反映了模板与…

【React】Redux基本使用

什么情况使用 Redux ? Redux 适用于多交互、多数据源的场景。简单理解就是复杂 从组件角度去考虑的话,当我们有以下的应用场景时,我们可以尝试采用 Redux 来实现 某个组件的状态需要共享时 一个组件需要改变其他组件的状态时 一个组件需要…

sqli-labs(Less-2)

1.进入环境就是这样的界面 2. id1 and 11 页面返回正常 3. id1 and 12 页面显示不正常 由此可确实是数字型注入 4. 使用 order by 语句进行字段查询 说明页面存在三个字段 5. 使用联合查询 union select 6. 查询当前数据库的所有表 7. 查询某表的所有字段名 8. 查用户…

Linux信号量以及基于环形队列的生产者消费者模型

文章目录 信号量信号量的接口初始化销毁等待信号量发布信号量 环形队列结合信号量设计模型 实现基于环形队列的生产者消费者模型Task.hppRingQueue.hppmain.cc效果对于多生产多消费的情况 信号量 信号量的本质是一个计数器 首先一份公共资源在实际情况中可能存在不同的线程可…

关于修改了mysql的my_conf文件之后,不能生效问题

个人名片: 🐅作者简介:一名大三在校生,热爱生活,爱好敲码! \ 💅个人主页 🥇:holy-wangle ➡系列内容: 🖼️ tkinter前端窗口界面创建与优化 &…

相关关系与因果关系

本文来自:https://towardsdatascience.com/a-step-by-step-guide-in-detecting-causal-relationships-using-bayesian-structure-learning-in-python-c20c6b31cee5 作者:Erdogan Taskesen 在机器学任务中,确定变量间的因果关系(c…

CentOS修改root用户密码

一、适用场景 1、太久没有登录CentOS系统,忘记管理密码。 2、曾经备份的虚拟化OVA或OVF模板,使用模板部署新系统后,忘记root密码。 3、被恶意攻击修改root密码后的紧急修复。 二、实验环境 1、VMware虚拟化的ESXI6.7下,通过曾经…

基于PyTorch搭建你的生成对抗性网络

前言 你听说过GANs吗?还是你才刚刚开始学?GANs是2014年由蒙特利尔大学的学生 Ian Goodfellow 博士首次提出的。GANs最常见的例子是生成图像。有一个网站包含了不存在的人的面孔,便是一个常见的GANs应用示例。也是我们将要在本文中进行分享的…

11.3SpringMVC

一.概念 1.SpringMvc: a.构建在Servlet(api)基础上. b.是一个Web框架(HTTP). c.来自于Spring webMVC模块. 2.MVC 二.注册路由的注解 1.RequestMapping("/test") // 路由注册 注意: 这个注解在类和方法上都要使用,代表不同等级的路由. 2.RestController a)R…

FPGA_边沿检测电路设计

FPGA_边沿检测电路设计 边沿检测原理图波形图分析实现方法方法一:与逻辑实现方法二:或逻辑实现方法三:与逻辑实现 边沿检测原理图 由状态转移表可以看出,其转换条件中需要检测到下降沿以及上升沿,而边沿检测其原理就是…

「题解」相交链表

🍉题目 题目链接 🍉解析 “提示”部分有提示链表数不为零,所以讨论链表为空的情况。 最简单粗暴的思路就是:遍历链表,先使用循环遍历A链表,然后嵌套循环遍历B,比对A、B是否存在地址相同的…

Windows10配置深度学习环境

一、Anaconda安装与虚拟环境创建 Anaconda的出现极大的方便了研究人员的Python开发工作,anaconda可以创建多个虚拟环境,这些虚拟环境就像一间间教室一样,虚拟环境彼此之间、虚拟环境与基础环境(base)之间互不影响&…

C++之Max

背景 想学习数据结构,这是看的课程的习题,讲课老师用的是类C语言,具体的实现还是得自己来。 准备工作 用开发工具Microsoft Visual Studio(VS)建立一个空白的C控制台项目 选择项目的存储路径 成功建立 我在 Microsoft Visual Studio中用…

VSCode配置msvc编译调试环境

1.VS Code简介 VS Code 使用 Electron 框架构建用户界面,该框架使用 Chromium 和 Node.js 构建桌面应用程序。这使得 VS Code 能够在 Windows、Linux 和 macOS 上运行,并且可以使用 Web 技术 (HTML、CSS 和 JavaScript) 构建用户界面。 VS Code 使用 Monaco 引擎来提供文本编辑…