当前位置: 首页 > news >正文

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

一.状态空间方程

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

        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

        

相关文章:

  • Web前端后端架构:构建高效、稳定与可扩展的互联网应用
  • cnvd_2015_07557-redis未授权访问rce漏洞复现-vulfocus复现
  • 【0基础学爬虫】爬虫基础之自动化工具 DrissionPage 的使用
  • vite-plugin-mock前端自行模拟接口返回数据的插件
  • PHP开发的爱情盲盒交友系统网站源码
  • 数据结构——排序
  • 矩阵的迹(Trace)
  • 基于ChatGPT的大型语言模型试用心得
  • 【日记】第一次养植物,没什么经验……(781 字)
  • AI时代新爬虫:网站自动转LLM数据,firecrawl深度玩法解读
  • Footer组件在home 、search 显示,在登录、注册隐藏
  • 课设--学生成绩管理系统(一)
  • Nexus搭建maven私有仓库
  • 把本机的bash构建到docker镜像里面
  • 【源码】16国语言交易所源码/币币交易+期权交易+秒合约交易+永续合约+交割合约+新币申购+投资理财/手机端uniapp纯源码+PC纯源码+后端PHP
  • 【笔记】你不知道的JS读书笔记——Promise
  • Asm.js的简单介绍
  • java中的hashCode
  • Joomla 2.x, 3.x useful code cheatsheet
  • JS笔记四:作用域、变量(函数)提升
  • js对象的深浅拷贝
  • MYSQL 的 IF 函数
  • Perseus-BERT——业内性能极致优化的BERT训练方案
  • python大佬养成计划----difflib模块
  • Python中eval与exec的使用及区别
  • SpiderData 2019年2月16日 DApp数据排行榜
  • swift基础之_对象 实例方法 对象方法。
  • vue 个人积累(使用工具,组件)
  • yii2中session跨域名的问题
  • 翻译 | 老司机带你秒懂内存管理 - 第一部(共三部)
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 区块链技术特点之去中心化特性
  • 少走弯路,给Java 1~5 年程序员的建议
  • 算法-插入排序
  • 微信开放平台全网发布【失败】的几点排查方法
  • 我是如何设计 Upload 上传组件的
  • 用 Swift 编写面向协议的视图
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • ​软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】​
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • #{}和${}的区别?
  • #每天一道面试题# 什么是MySQL的回表查询
  • $.each()与$(selector).each()
  • (1)svelte 教程:hello world
  • (MATLAB)第五章-矩阵运算
  • (SpringBoot)第七章:SpringBoot日志文件
  • (多级缓存)多级缓存
  • (附源码)springboot 房产中介系统 毕业设计 312341
  • (顺序)容器的好伴侣 --- 容器适配器
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • (转)利用PHP的debug_backtrace函数,实现PHP文件权限管理、动态加载 【反射】...
  • .form文件_一篇文章学会文件上传
  • .Net CF下精确的计时器
  • .NET Core中Emit的使用