卡尔曼滤波器-Kalmen Filter-1

        卡尔曼滤波器是一种最优递归数据处理算法,它更像是一种观测器,而不是一般意义上的滤波器。卡曼滤波器的应用非常广泛,尤其是在导航当中。它的广泛应用是因为我们生活的世界中存在着大量的不确定性,当我们去描述一个系统的时候,这个不确定性主要体现在三个方面

  1. 不存在完美的数学模型。
  2. 系统的扰动往往是不可控的,也很难建模的。
  3. 测量的传感器本身存在着误差。

        在进行硬币直径的测量实验中,我们用Z_{k}​ 来表示第 k次的测量结果。由于每位测量者的操作差异以及测量工具本身的误差,每次测量得到的数据都可能有所不同。例如,测量者 C_{1}​ 第一次测量得到的结果是 50.1 毫米,测量者 C_{2}​ 的结果是 50.4 毫米,而测量者 C_{3} 的结果是 50.2 毫米。面对这些不同的测量结果,一个直观的方法是计算这些测量值的平均数,以此来估计硬币直径的真实值。

\begin{aligned}\hat{x}_{k}&=\frac{1}{k}\left(z_{i}+z_{2}+\cdots+z_{k}\right)\\&=\frac{1}{k}\left(z_{i}+z_{2}+\cdots+z_{k-1}\right)+\frac{1}{k}z_{k}\\&=\frac{k-1}{k}\hat{\chi}_{k-1}+\frac{1}{k}z_{k}\\&=\hat{\chi}_{k-1}-\frac{1}{k}\hat{\chi}_{k-1}+\frac{1}{k}z_{k}\end{aligned}

\hat{x}_{k}=\hat{x}_{k-1}+\frac{1}{k}(z_{k}-\hat{x}_{k-1})\left ( 1.1 \right )

\frac{1}{k}\rightarrow0\:,\:\hat{\chi}_{k}\rightarrow\hat{\chi}_{k-1}\left ( 1.2 \right )

随着k的增加,测量的结果趋于稳定。

\frac1k写为k_{k}

\hat{\chi}_{k}=\hat{\chi}_{k-1}+k_{k}\left(z_{k}-\hat{\chi}_{k-1}\right)\left ( 1.3 \right )

表示:当前的估计值=上一次的估计值+系救×(当前测量值-上次的估计值),其中,系数k_{k}即为Kalman Gain,卡尔曼增益/因数

        这种思想体现了递归算法的特点,而这也是卡尔曼滤波器的一个显著优势:它不需要回溯并处理很久以前的数据,仅需依赖于上一次的估计结果。在卡尔曼滤波器的实现中,这一点尤为重要,因为它允许算法在每次迭代中仅利用最新的观测数据和前一步的状态估计,从而有效降低了计算复杂度和存储需求。

        关于卡尔曼因数k_{k},这里引入两个参数,一个是估计误差,也就是估计值和真实值的差距,这里用e_{EST}来表示,e表示误差,est表示估计,一个是测量误差,也就是测量值和真实值的差距,这里用e_{MEA}来表示,MEA 就是 measurement 测量。

k_{k}=\frac{e_{\mathrm{EST}_{k-1}}}{e_{\mathrm{EST}_{k-1}}+e_{\mathrm{MEA}_{k}}}\left ( 1.4 \right )

        这个公式实际是卡尔曼滤波器的核心公式,会在后面的文章当中去详细的讲解它是怎么被推导出来的。

        当e_{EST_{k-1}} > >e_{MEA_{k}}的时候,此时卡尔曼因数接近1,第k次的估计值接近测量值

k_{k}\rightarrow1\quad,\quad\hat{\chi}_{k}\rightarrow\hat{\chi}_{k-1}+z_{h}-\hat{\chi}_{k-1}=z_{k}\left ( 1.5 \right )

        当e_{EST_{k-1}}<<\mathrm{e}_{MEA_k}的时候,此时卡尔曼因数接近0,第k次的估计值接近上一次估计值

k_{k}\rightarrow0\quad\hat{x}_{k}=\hat{x}_{k-1}\left ( 1.6 \right )

下面看一个用卡尔曼滤波思想解决问题的例子

Step1:计算Kalman Gain

k_{k}=\frac{e_{\mathrm{EST}_{k-1}}}{e_{\mathrm{EST}_{k-1}}+e_{\mathrm{MEA}_{k}}}

Step2:计算 

\hat{x}_{k}\quad=\:\hat{\chi}_{k-1}+k_{k}(\:z_{k}-\hat{\chi}_{k-1})

Step3:更新

e_{EST_{k}}=(1-k_{k})\:e_{EST_{k-1}} 

        对于Step3,后续解释推导过程。即增加测量值后,分别更新估计值和卡尔曼因数。

        还是估计物体长度测量的过程中,假设物体的实际长度为50毫米,而我们第一次的估计值为40毫米,这是一个随机给出的估计值。在此基础上,我们定义第一次的估计误差e_{EST_{0}}为5毫米,这个值也是人为设定的,用于量化我们估计值与实际值之间的偏差。

\hat{\chi}_{0}=40mm\\e_{EST_{0}}=5mm

        对于测量来说,比如说第一次的测量值是 51 毫米,然后测量误差我们知道有 3 毫米,也就是说它测出来是 51 毫米,所以它有可能是在 48 到 54 毫米之间的一个值,然后使用同样的一个测量工具,所以它第几次的测量误差都是 3 毫米。

z_{1}=5\mathrm{lmm}\\e_{MEA_{k}}=3mm

        蓝色代表测量结果,而红色代表估计结果。初始估计值设定为40,这是我们的起始点。通过卡尔曼滤波器的迭代过程,我们可以看到,经过一步、两步、三步、四步、五步的更新后,估计值逐渐接近至49mm。值得注意的是,物体的实际长度为50mm。随着更多数据的不断输入和迭代过程的持续进行,估计值越来越接近实际值。

        这一过程体现了卡尔曼滤波器的递归特性。随着新数据的不断加入和更新,估计值逐步逼近真实值。这是一个简单而直观的例子,展示了如何利用卡尔曼滤波器的递归思想来进行状态估计。通过这种递归迭代的方式,卡尔曼滤波器能够有效地融合先验估计和新的测量数据,以实现对系统状态的准确估计。

参考资料

【卡尔曼滤波器】1_递归算法_Recursive Processing

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++ | Leetcode C++题解之第519题随机翻转矩阵

题目&#xff1a; 题解&#xff1a; class Solution { public:Solution(int m, int n) {this->m m;this->n n;this->total m * n;srand(time(nullptr));}vector<int> flip() {int x rand() % total;vector<int> ans;total--; // 查找位置 x 对应的…

电子电气架构 --- 车载诊断的快速入门

我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 所有人的看法和评价都是暂时的&#xff0c;只有自己的经历是伴随一生的&#xff0c;几乎所有的担忧和畏惧…

【云备份项目】json以及jsoncpp库的使用

目录 1.JSON 2.什么是 JSON&#xff1f; 3.JSON 发展史 4.为什么要使用 JSON&#xff1f; 5.JSON 的不足 6.JSON 应该如何存储&#xff1f; 7.什么时候会使用 JSON 7.1.定义接口 7.2.序列化 7.3.生成 Token 7.4.配置文件 8.JSON的语法规则 8.1.对象和数组 8.2.JS…

DNS服务部署

DNS服务部署 1.要求 1.搭建dns服务器能够对自定义的正向或者反向域完成数据解析查询。 2.配置从DNS服务器&#xff0c;对主dns服务器进行数据备份。 2.配置 主服务器&#xff1a; 1.安装BIND [rootlocalhost xzy]# sudo dnf install bind bind-utils2.配置正向区域 [roo…

Python酷库之旅-第三方库Pandas(191)

目录 一、用法精讲 886、pandas.Index.repeat方法 886-1、语法 886-2、参数 886-3、功能 886-4、返回值 886-5、说明 886-6、用法 886-6-1、数据准备 886-6-2、代码示例 886-6-3、结果输出 887、pandas.Index.where方法 887-1、语法 887-2、参数 887-3、功能 8…

【C++】类和对象(十二):实现日期类

大家好&#xff0c;我是苏貝&#xff0c;本篇博客带大家了解C的实现日期类&#xff0c;如果你觉得我写的还不错的话&#xff0c;可以给我一个赞&#x1f44d;吗&#xff0c;感谢❤️ 目录 1 /!/>/</>/<运算符重载2 /-//-运算符重载(A) 先写&#xff0c;再通过写(B…

免费送源码:Java+Springboot+MySQL Springboot酒店客房管理系统的设计与实现 计算机毕业设计原创定制

摘 要 信息化社会内需要与之针对性的信息获取途径&#xff0c;但是途径的扩展基本上为人们所努力的方向&#xff0c;由于站在的角度存在偏差&#xff0c;人们经常能够获得不同类型信息&#xff0c;这也是技术最为难以攻克的课题。针对酒店客房管理等问题&#xff0c;对酒店客房…

无线配置实验

配置 sw1 [sw1]vlan batch 10 20 100 [sw1-GigabitEthernet0/0/1]port link-type trunk [sw1-GigabitEthernet0/0/1]port trunk allow-pass vlan 10 20 100 [sw1-GigabitEthernet0/0/1]port trunk pvid vlan 100 接口g124一样的配置 [sw1-GigabitEthernet0/0/3]port link-type…

在基于AWS EC2的云端k8s环境中 搭建开发基础设施

中间件下载使用helm,这里部署的都是单机版的 aws-ebs-storageclass.yaml apiVersion: storage.k8s.io/v1 kind: StorageClass metadata:name: aws-ebs-storageclass provisioner: kubernetes.io/aws-ebs parameters:type: gp2 # 选择合适的 EBS 类型&#xff0c;如 gp2、io1…

旋转位置编码

1. Transformer为什么需要位置编码 因为 transformer 结构本身是和位置编码无关的&#xff1a; Y T ( X ) F ( A ( X ) ) Y\Tau(X)F(A(X)) YT(X)F(A(X))&#xff0c;其中 A ( ) A() A() 是 attention 变换&#xff0c;只进行了矩阵变换&#xff0c;跟位置无关&#xff0c; …

激活函数、条件熵和最大熵在机器学习的应用

文章目录 摘要Abstractsigmoid 和 softmaxsigmoid和softmax的关系 条件熵最大熵总结 摘要 本周学习内容探讨了神经网络中激活函数的选择及其对梯度消失问题的影响。通过使用 ReLU 函数替代 Sigmoid 函数来改善梯度消失问题的优化方法&#xff0c;同时分析了 Sigmoid、Softmax …

【AIGC】深入探索『后退一步』提示技巧:激发ChatGPT的智慧潜力

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: AIGC | ChatGPT 文章目录 &#x1f4af;前言&#x1f4af;“后退一步”技巧介绍技巧目的 &#x1f4af;“后退一步”原理“后退一步”提示技巧与COT和TOT的对比实验验证 &#x1f4af;如何应用“后退一步”策略强调抽象思考引导提…

uni-app 下拉刷新、 上拉触底(列表信息)、 上滑加载(短视频) 一键搞定

一、下拉刷新 1. 首先找到pages.json中 给需要进行下拉刷新的页面设置可以下拉刷新 2. 然后在需要实现下拉刷新的script标签内添加 导入onPullDownRefresh import {onPullDownRefresh} from dcloudio/uni-app 下拉刷新触发的事件 onPullDownRefresh(()> {console.log(正…

Springboot与easypoi(2):合并单元格、二级表头、动态导出

一、纵向合并单元格 使用Excel(needMerge true)标记的属性表示此单元格需要合并。ExcelCollection表示一对多的集合&#xff0c;下面是合并单元格案例。 实体类 企业类&#xff1a; package com.ywz.entity;import cn.afterturn.easypoi.excel.annotation.Excel; import cn.…

android——渐变色

1、xml的方式实现渐变色 效果图&#xff1a; xml的代码&#xff1a; <?xml version"1.0" encoding"utf-8"?> <shape xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.android.com/tools…

使用python画一颗圣诞树

具体效果&#xff1a; 完整代码&#xff1a; import random def print_christmas_tree(height): # 打印圣诞树的顶部 for i in range(height): # 打印空格&#xff0c;使树居中 for j in range(height - i - 1): print(" ", end"") # 打印星号&…

SAP ABAP开发学习——BAPI

目录 业务对象 概念 ​编辑业务对象浏览 BAPI BAPI的浏览 BAPI的调用 BAPI的确认和返回 BAPI的创建 MM/SD常用BAPI 附加&#xff1a;长文本修改 业务对象 概念 业务对象浏览 进入SWO3查看 双击BUS2012 双击下图上方红色位置可以看到BAPI方法的内容 BAPI BAPI(Busines…

MR30分布式IO:石化行业的智能化革新

在浩瀚的工业领域中&#xff0c;石化行业如同一座巨大的化工厂&#xff0c;将自然界的原始资源转化为人们日常生活中不可或缺的各种产品。然而&#xff0c;随着生产规模的扩大和工艺复杂度的提升&#xff0c;石化行业面临着前所未有的挑战&#xff1a;如何在保证生产效率的同时…

VLAN高级特性:VLAN聚合

一、VLAN聚合的概述 在一般的三层交换机中&#xff0c;通常是采用一个VLAN对应一个VLANIF接口实现广播域之间的互通&#xff0c;这导致了在一些情况下造成了IP地址的浪费。 因为一个VLAN对应的子网中&#xff0c;子网号&#xff0c;子网广播地址、子网网关地址不能用作VLAN内…