卡尔曼滤波器-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

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

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

相关文章

Python OpenCV图像复原

文章目录 一、理论背景二、去噪方法三、具体实现步骤四、模糊处理&#xff08;可选&#xff09;五、注意事项 Python OpenCV图像复原是一个涉及去除噪声、模糊等失真的过程&#xff0c;旨在恢复图像的原始质量。以下是一个详细的案例教程&#xff0c;包括理论背景和具体实现步骤…

使用docker-compose部署一个springboot项目(包含Postgres\redis\Mongo\Nginx等环境)

准备 Docker 环境 Linux # 安装 Docker curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun systemctl enable --now docker # 安装 docker-compose curl -L https://github.com/docker/compose/releases/download/v2.20.3/docker-compose-`uname -s`-

YOLOV8 |搞懂检测头

代码: yaml结构的最后一层&#xff0c;接了前面三个层的&#xff0c;有3个检测头&#xff1a; # YOLOv8.0n head head:- [-1, 1, nn.Upsample, [None, 2, "nearest"]]- [[-1, 6], 1, Concat, [1]] # cat backbone P4- [-1, 3, C2f, [512]] # 12- [-1, 1, nn.Upsam…

池化层笔记

池化层 文章目录 池化层二维池化层超参数池化层的分类代码实现填充和步幅 多个通道 总结 卷积对位置敏感&#xff0c;可以检测垂直边缘。需要有一定程度的平移不变性&#xff0c;而在平时图片的拍摄&#xff0c;会因为图片的照明&#xff0c;物体位置&#xff0c;比例&#xff…

大数据-191 Elasticsearch - ES 集群模式 配置启动 规划调优

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

mysql 5.7实现组内排序(连续xx天数)

需求&#xff1a;查询出连续登录的用户及其连续登录的天数 我先说一下思路&#xff1a;要实现连续登录的判断&#xff0c;可以找一下他们之间的规律。这里我拿一个用户来说&#xff0c;如果这个用户在1、2、3号都有登录记录&#xff0c;可以对这个用户的数据按照时间排序&…

从零学习大模型(九)-----P-Tuning(下)

代码展示P-Tuning的全过程 import torch from torch import nn from transformers import BertTokenizer, BertForSequenceClassification, Trainer, TrainingArguments from datasets import load_dataset# 1. 数据准备 dataset load_dataset("imdb")# 2. 构建提示…

什么是安全组件?

安全组件是信息系统中用于保护数据和系统安全的关键部分。它们通常包括一系列的软件和硬件组件&#xff0c;旨在提供身份验证、授权、数据加密、防病毒、入侵检测等功能。这些组件可以是独立的软件程序&#xff0c;也可以是嵌入到操作系统或应用程序中的模块&#xff0c;或者作…

J3学习打卡

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 DensNet模型 import matplotlib.pyplot as plt import tensorflow as tf from tensorflow.keras import layers, models, initializersclass DenseLayer(lay…

基于微信小程序的小区管理系统设计与实现(lw+演示+源码+运行)

摘 要 社会发展日新月异&#xff0c;用计算机应用实现数据管理功能已经算是很完善的了&#xff0c;但是随着移动互联网的到来&#xff0c;处理信息不再受制于地理位置的限制&#xff0c;处理信息及时高效&#xff0c;备受人们的喜爱。所以各大互联网厂商都瞄准移动互联网这个潮…

随机变量、取值、样本和统计量之间的关系

1. 随机变量 (Random Variable) 随机变量是用来量化随机现象结果的一种数学工具。随机变量是一个函数&#xff0c;它将实验结果映射到数值。随机变量可以是离散的或连续的。 离散随机变量&#xff1a;取有限或可数无限个值。例如&#xff0c;掷骰子的结果。连续随机变量&…

Matlab实现蚁群算法求解旅行商优化问题(TSP)(理论+例子+程序)

一、蚁群算法 蚁群算法由意大利学者Dorigo M等根据自然界蚂蚁觅食行为提岀。蚂蚁觅食行为表示大量蚂蚁组成的群体构成一个信息正反馈机制&#xff0c;在同一时间内路径越短蚂蚁分泌的信息就越多&#xff0c;蚂蚁选择该路径的概率就更大。 蚁群算法的思想来源于自然界蚂蚁觅食&a…

Pandas行转列与列装行

实际上&#xff0c;两种操作的核心代码确实非常相似&#xff0c;因为它们都涉及到将 JSON 数据解析并进行拆分。主要的区别在于操作的顺序和处理的对象&#xff1a; 一列转多列&#xff1a; 首先&#xff0c;我们将 JSON 数据列中的每个 JSON 对象解析为 Python 字典&#xff…

物联网智能项目实战:智能温室监控系统

物联网&#xff08;Internet of Things, IoT&#xff09;技术正在以前所未有的速度改变着我们的生活方式。通过将传感器、执行器和其他物理设备连接到互联网&#xff0c;物联网技术可以实现远程监测和控制。本文将通过一个具体的物联网智能项目——智能温室监控系统的实现&…

给哔哩哔哩bilibili电脑版做个手机遥控器

前言 bilibili电脑版可以在电脑屏幕上观看bilibili视频。然而&#xff0c;电脑版的bilibili不能通过手机控制视频翻页和调节音量&#xff0c;这意味着观看视频时需要一直坐在电脑旁边。那么&#xff0c;有没有办法制作一个手机遥控器来控制bilibili电脑版呢&#xff1f; 首先…

JavaEE初阶---网络原理之TCP篇(二)

文章目录 1.断开连接--四次挥手1.1 TCP状态1.2四次挥手的过程1.3time_wait等待1.4三次四次的总结 2.前段时间总结3.滑动窗口---传输效率机制3.1原理分析3.2丢包的处理3.3快速重传 4.流量控制---接收方安全机制4.1流量控制思路4.2剩余空间大小4.3探测包的机制 5.拥塞控制---考虑…

【C语言刷力扣】3216.交换后字典序最小的字符串

题目&#xff1a; 解题思路&#xff1a; 字典序最小的字符串&#xff1a;是指按照字母表顺序排列最前的字符串。即字符串在更靠前的位置出现比原字符串对应字符在字母表更早出现的字符。 枚举数组元素&#xff0c;尽早将较小的同奇偶的相邻字符交换。 char* getSmallestString…

定时器(多线程)

标准库中的定时器 • 标准库中提供了⼀个 Timer 类. Timer 类的 核⼼⽅法为 schedule . • schedule 包含两个参数. 第⼀个参数指定即将要执⾏的任务代码, 第⼆个参数指定多⻓时间之后 执⾏ (单位为毫秒). Timer timer new Timer (); timer.schedule( new TimerTas…

Linux(centOS)的安全命令

先全部列出来&#xff1a; 命令及其作用&#xff1a; - setenforce 0&#xff1a;将 SELinux 临时切换为宽松模式&#xff08;permissive&#xff09; - setenforce 1&#xff1a;将 SELinux 临时切换为强制模式&#xff08;enforcing&#xff09; - selinux的配置文件在/e…

Java:Map和Set练习

目录 查找字母出现的次数 只出现一次的数字 坏键盘打字 查找字母出现的次数 这道题的思路在后面的题目过程中能用到&#xff0c;所以先把这题给写出来 题目要求&#xff1a;给出一个字符串数组&#xff0c;要求输出结果为其中每个字符串及其出现次数。 思路&#xff1a;我…