卡尔曼滤波原理及应用(一)

一.状态空间方程

        系统的状态空间方程描述了系统的动态行为和状态演化过程。它由两个方程组成:状态方程和观测方程。系统的状态空间表达式简写为:

        eq?%5Cleft%5C%7B%5Cbegin%7Bmatrix%7D%20%5Cdot%7Bx%7D%28t%29%3DAx%28t%29+Bu%28t%29%26%20%5C%5C%20y%28t%29%3DCx%28t%29+Du%28t%29%26%20%5Cend%7Bmatrix%7D%5Cright.

变量描述如下:

  • x(t) 是系统的状态向量,表示系统在时间 𝑡的状态。
  • 𝑢(𝑡) 是系统的输入向量,表示系统在时间 𝑡的输入。
  • 𝑦(𝑡) 是系统的输出向量,表示系统在时间 𝑡的观测输出。
  • A 是状态矩阵,描述系统状态的演化规律。
  • B 是输入矩阵,描述输入对系统状态的影响。
  • C 是观测矩阵,描述状态对观测输出的映射关系。
  • D 是直接传递矩阵,描述输入对观测输出的直接影响。

框图如下:

 4b3a46f73a0e44b69c1ce3c4ec5380ff.png

        观测器(也称为状态观测器)是一种用于估计系统状态的非递归算法。观测器通常基于系统的输出(观测)和已知的系统模型,通过最小化观测误差来估计系统的状态。观测器可以是线性的或非线性的,它们的设计依赖于系统的特性和观测数据的可用性,下图为一个开环的观测器:

0b2ac080b3ab497cb11a270e31278b57.png

        事实上,若没有反馈的话,开环观测器的误差会不断增大,最后导致观测器不再贴合观测的系统,我们可以引入反馈环节用于修正误差。卡尔曼滤波器可以看作是一种特殊的观测器,它利用系统的动态模型和观测数据来估计状态。卡尔曼滤波器中的状态估计和协方差更新步骤与观测器中的状态估计和观测误差最小化步骤类似。在卡尔曼观测器中,反馈增益K就为卡尔曼增益:

b150406c7b0f43a487908c9480c03ee8.png

其中eq?%5Ctilde%7Bx%7D为引入反馈增益修正后的后验估计,eq?%5Chat%7Bx%7D为先验估计。在没有反馈机制的情况下,观测器的输出不会受到状态估计误差的修正。如果观测噪声较大或者观测模型不准确,观测器的输出可能会与真实状态之间存在较大的误差。随着时间的推移,这些误差可能会逐渐累积并导致状态估计的误差增大。因此在引入反馈增益K的基础上,将上述框图改为离散化得到:

7a67bfa16b764dfca7f8fe7cbdc36008.png

因此,要确定的就是卡尔曼增益K。

二.理论推导部分

        由上图可知,卡尔曼滤波器,实际上就是反馈增益K为卡尔曼增益的观测器,核心在于找到一个K使得误差的协方差最小,记后验估计误差如下:

eq?e_%7Bk%7D%3Dx_%7Bk%7D-%5Ctilde%7Bx%7D_%7Bk%7D

        当eq?Deq?e_%7Bk%7D)越小时,也就是误差协方差越小时,观测器越逼近于真实系统,故实际需要求的卡尔曼增益就是使得eq?Deq?e_%7Bk%7D)最小时的eq?K,即:

eq?D%28e_%7Bk%7D%29%3DE%28e_%7Bk%7De_%7Bk%7D%5E%7BT%7D%29%3DE%28%5Bx_%7Bk%7D-%5Ctilde%7Bx%7D_%7Bk%7D%5D%5Bx_%7Bk%7D-%5Ctilde%7Bx%7D_%7Bk%7D%5D%5ET%29

考虑过程噪声以及观测噪声,得到系统的状态空间方程:

eq?%5Cleft%5C%7B%5Cbegin%7Bmatrix%7D%20x_%7Bk+1%7D%3DAx_%7Bk%7D+Bu_%7Bk%7D+v_%7Bk%7D%26%20%5C%5C%20y_%7Bk%7D%3DCx_%7Bk%7D+w_%7Bk%7D%26%20%5Cend%7Bmatrix%7D%5Cright.

        又由于:

eq?%5Ctilde%7Bx%7D_%7Bk%7D%3D%5Chat%7Bx%7D_%7Bk%7D+K%28y_%7Bk%7D-%5Chat%7By%7D_%7Bk%7D%29%3D%5Chat%7Bx%7D_%7Bk%7D+K%28y_%7Bk%7D-C%5Chat%7Bx%7D_%7Bk%7D%29%3D%5Chat%7Bx%7D_%7Bk%7D+K%28Cx_%7Bk%7D+v_%7Bk%7D-C%5Chat%7Bx%7D_%7Bk%7D%29

        则化简得到:

        eq?-%5Ctilde%7Bx%7D_%7Bk%7D%3D-KC%28x_%7Bk%7D-%5Chat%7Bx%7D_%7Bk%7D%29+Kv_%7Bk%7D-%5Chat%7Bx%7D_%7Bk%7D

        两边同时加上eq?%7Bx%7D_%7Bk%7D得到:

        eq?x_%7Bk%7D-%5Ctilde%7Bx%7D_%7Bk%7D%3Dx_%7Bk%7D-%5Chat%7Bx%7D_%7Bk%7D-KC%28x_%7Bk%7D-%5Chat%7Bx%7D_%7Bk%7D%29+Kv_%7Bk%7D%3D%28I-KC%29%28x_%7Bk%7D-%5Chat%7Bx%7D_%7Bk%7D%29+Kv_%7Bk%7D

        记后验误差为:

        记先验误差为:

        其中eq?I为单位矩阵,将本式带入到误差表达式中得到:6fd80ac42c44477695c57cc8135b1ae3.png

        为简化计算,将后验误差协方差矩阵记作eq?P_%7Bk%7D,先验误差协方差矩阵记作eq?P_%7Bk%7D%5E%7B-%7D,观测噪声的协方差矩阵为eq?R得到:

60b7946a509348a5abae88c0cf1c1478.png

        最终要求得的最小化的目标值,实际上就是协方差矩阵对角线的元素和:

d34111f03dc747228593e344dfa2210c.png

        化简得到:

a8e0e1eed660475e8eb75a46d2a11f9e.png

        考虑到7bf47020f6d34cc1ab72e8e8812b504a.png则上述方程对卡尔曼增益eq?k求导,解出使误差协方差最小时的卡尔曼增益eq?k

4b7868bd1e344dd298967b79230e34a2.png

        将所求的卡尔曼增益代入到后验误差协方差矩阵eq?P_%7Bk%7D的表达式中得出:

1147719798db41139af398f41ffa6f49.png

        故在上述所有公式中,唯一还没有确定的只剩下先验误差协方差矩阵eq?P_%7Bk%7D%5E%7B-%7D,确定过程如下:

三.总结

        至此卡尔曼滤波的五个公式均推导完毕,总结一下就是:

1)状态观测器:

570e4da2a668480db1362355266e6a2b.png

2)预测部分:

①先验估计:

3745478b833b4081920e3cbc99cd0f35.png

②先验协方差误差:

3)校正部分:

①卡尔曼增益:

42dc03ce67d44a0980f8664045318aad.png

②更新协方差误差:

1147719798db41139af398f41ffa6f49.png

③后验估计:

308a9818d1cb4e7e91f83b4517274ed8.png

        

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

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

相关文章

【2024亲测无坑】Oracle--19C在Centos7上的静默安装(rpm版)

一、Oracle 19c Linux安装(Centos 7) 1.查看磁盘可用空间及配置ip地址 [rootlocalhost /]# df -h 文件系统 容量 已用 可用 已用% 挂载点 devtmpfs 1.4G 0 1.4G 0% /dev tmpfs 1.4G …

程序猿大战Python——函数——拆包和交换变量值与引用

拆包 目标:了解拆包的使用。 先来看看在现实生活中的拆包。比如,张同学背着背包来教室上课后,需要从背包中拿出电脑、鼠标、数据线、电源线等,这个过程就是拆包! 接着,看一下在Python程序中的拆包:把组合形…

阅读笔记:明朝那些事儿太监弄乱的王朝

阅读豆评高分作品《明朝那些事儿太监弄乱的王朝》第三部,截止到今天告一段落了,前两部皇帝,太子相对比较少,了解故事的主线,分支不算多,记忆起来还能应付过来,第三部皇帝,太子更换的…

c语言回顾-结构体

前言 在前面的学习中,我们知道C语言提供了许多内置类型,如:char、short、int、long、float、double等,但是只有这些内置类型还是不够的。当我们想描述学生,描述一本书,这时单一的内置类型是不行的。描述一个…

R语言数据分析案例29-基于ARIMA模型的武汉市房价趋势与预测研究

一、选题背景 房地产行业对于国民经济和社会及居民的发展和生活具有很大的影响,而房价能够体现经济运转的好坏,因而房价的波动牵动着开发商和购房者的关注,城市房价预测是一个研究的热点问题,研究房价对民生问题具有重要意义。 …

拍抖音素材段子去哪里找?哪里有搞笑段子文案以及视频素材?

拍抖音视频非常火爆,很多人都在为找素材发愁。别担心,今天我给大家推荐几个非常不错的网站,保证你们找到满满的灵感,拍出更有趣的段子视频! 蛙学府 首先要推荐的是蛙学府。这个网站不仅素材多,还提供各种段…

监控室,屏幕显示不支持码流

1号屏,出现不支持码流 如下原因 老是录像机 无法关闭自动添加摄像头功能, 其他杂牌摄像头 会自动还ip 最终导致 ip冲突 更换ip 可以解决

Base64编码的工作原理与实际应用

目录 前言 一、什么是Base64编码? 二、Base64编码的原理 三、Base64编码的应用场景 四、为什么要使用Base 64 五、Base64加密解密的实现 前言 当你需要将二进制数据转换为可传输和存储的文本格式时,Base64编码是一个常用的选择。在这篇博客中&#…

Qwen2大语言模型微调、导出、部署实践

上篇文章: Qwen1.5大语言模型微调实践_qwen1.5 7b微调-CSDN博客 我们介绍了Qwen1.5 大语言模型使用LLaMA-Factory 来微调,这篇文章我们介绍一下微调后模型的导出、部署。 一、模型导出 在webui 界面训练好模型之后点击“Export”选项卡,然…

Qt 实战(4)信号与槽 | 4.1、信号与槽机制

文章目录 一、信号与槽机制1、基本概念2、信号与槽函数连接2.1、connect宏实现信号与槽连接2.2、Qt5新connect函数2.3、使用函数指针2.4、使用lambda表达式2.5、使用Qt Creator添加信号的槽函数 3、结论 前言: Qt信号与槽机制是一种用于处理对象间通信的强大机制&am…

详解 std::array

已经有了传统数组,为什么要用 std::array? 在C编程中,数组是一种基本的数据结构,用于存储相同类型的元素集合。然而,传统C风格数组(C-style array)虽然简单,但在使用上也存在诸多限制和潜在问…

技巧栏练习题

136. 只出现一次的数字 题干中要求做到线性时间复杂度和常数空间复杂度。 考虑使用位运算。使用异或运算有以下三个性质: 任何数和0 做异或运算,结果仍然是原来的数。 任何数和其自身做异或运算,结果是 0。 异或运算满足交换律和结合律。 …

快速LLaMA:面向大型语言模型的查询感知推理加速 论文摘要翻译与评论

论文摘要翻译与评论 论文标题: QuickLLaMA: Query-aware Inference Acceleration for Large Language Models 提出的框架 我们Q-LLM框架的示意图。来自记忆上下文的输入被分割成记忆块,通过查询感知的上下文查找来搜索与查询相关的块。目前的键值缓存…

ATMEGA16读写24C256

代码&#xff1a; #include <mega16.h> #include <stdio.h> #include <i2c.h> #include <delay.h> // Declare your global variables here #define EEPROM_BUS_ADDRESS 0xa0 #asm.equ __i2c_port0x15.equ __sda_bit1 .equ __scl_bit0 #endasm uns…

【深度学习】TCN,An Empirical Evaluation of Generic Convolutional【二】

文章目录 膨胀卷积什么是膨胀卷积膨胀卷积公式PyTorch代码 从零开始手动实现一个1D膨胀卷积&#xff0c;不使用PyTorch的nn.Conv1d1. 基本概念2. 手动实现1D膨胀卷积 TCN结构如何使用TCN源码说明1. Chomp1d 类2. TemporalBlock 类3. TemporalConvNet 类 使用方法 膨胀卷积 什么…

DC/AC电源模块:为电动车充电基础设施提供高效能源转换

BOSHIDA DC/AC电源模块&#xff1a;为电动车充电基础设施提供高效能源转换 DC/AC电源模块是一种用于电动车充电基础设施的重要组件&#xff0c;它能够实现高效能源转换。在电动车的普及和推广过程中&#xff0c;DC/AC电源模块的重要性日益凸显。本文将从DC/AC电源模块的基本原…

281 基于matlab的路径规划GUI交互

基于matlab的路径规划GUI交互。包括蚁量系统、蚁周系统、蚁密系统、蚁群系统、免疫混合算法。11种路径规划数据&#xff0c;最多225个规划点。蚁群和免疫算法的参数可进行设置&#xff0c;使得效果最佳。动态显示可视化规划结果。程序已调通&#xff0c;可直接运行。

JVM 性能分析——jdk 自带命令分析工具(jps/jstat/jinfo/jmap/jhat/jstack)

文章目录 jps&#xff08;Java Process Status&#xff09;&#xff1a;查看正在运行的Java进程jstat&#xff08;JVM Statistics Monitoring Tool&#xff09;&#xff1a;查看 JVM 的统计信息jinfo&#xff08;Configuration Info for Java&#xff09;&#xff1a;实时查看和…

ORDER BY FIELD

ORDER BY FIELD 是MySQL中的一个特殊排序函数&#xff0c;它允许你基于一个自定义的值列表对查询结果进行排序。这在你需要对结果集按照特定顺序展示时非常有用&#xff0c;而不是默认的升序或降序排列。下面是如何使用ORDER BY FIELD的简要说明和示例&#xff1a; 基本语法 SE…

python的变量的引用与赋值的学习

看代码&#xff1a; a 1 # 初始化变量a&#xff0c;赋值为1 b a # 变量b被赋值为变量a的值&#xff0c;此时b的值也为1 b 2 # 变量b被重新赋值为2 print(a) # 打印变量a的值 执行过程如下&#xff1a; a 1&#xff1a;变量a被赋值为1。b a&#xff1a;变量b被赋值为…