详解卡尔曼滤波(Kalman Filter)

news2024/9/21 13:59:03

1. 从维纳滤波到卡尔曼滤波

黑盒(Black Box)思想最早由维纳(Wiener)在1939年提出,即假定我们对从数据到估计中间的映射过程一无所知,仅仅用线性估计(我们知道在高斯背景下,线性估计能达到克拉美劳下界,是最优估计)来掩盖我们的无知。

但是,到了二十年以后的1960年卡尔曼的年代,我们对于红框内的事(prior knowledge),很有可能是知道的,并且知道得很详细,很清楚。再这样的情况下,我们还不能有效地利用这一部分先验知识来帮助我们把估计做的更好就没有任何道理了。卡尔曼就是从红框入手,将这部分先验信息表达出来。至于怎么表达,就用到了状态空间表达(State Space Representation)

2. 状态空间表达(State Space Representation) 

我们可以写出如下一组方程:

\begin{cases}Z_n=g(Z_{n-1},v_n) & \mbox{State \ Equation}\quad (\mbox{Non-observable}) \\ X_n=h(Z_n,w_n)& \mbox{Observation\ Equation} \end{cases}

  • 状态方程(State Equation):是决定研究对象行为的关键量Z_n随时间的变化情况。Z_n我们是不能直接观测到的(因为采样的时候根本采不到这些状态,状态是隐含在观测量背后的);
  • 观测方程(Observation Equation):是状态Z_n通过某种形式、窗口、途径,让我们看到关于它的某种表现,而这种表现反映在观测量X_n当中。X_n是我们能直接观测到的。

由此可以发现,从维纳到卡尔曼有两点本质区别:

  1. 状态空间表达是我们注入先验知识的重要窗口,自此黑箱变成了白箱(White Box)因为数据\{X_n\}和估计量\{Z_n\}之间的关联关系已经完全展现在我们的面前了。
  2. Z_n时变的(Time varied),这就使得问题从平稳(Stationary)的变为非平稳的(Non-Stationary)的

值得一提的是:状态空间表达还有别的称呼,比如HMM(Hidden Markov Model)隐马尔科夫模型

3. 界定滤波问题

首先把状态空间表达进一步细化

\begin{cases} Z_n=G_nZ_{n-1}+v_n\\ X_n=H_nZ_n+w_n \end{cases}

\quad E(v_n)=E(w_n)=0,Cov(v_n)=R_n,Cov(w_n)=S_n ,

\{v_n\},\{w_n\} \mbox{ are Independent both and between}

 在此线性基础上我们来界定卡尔曼滤波的滤波问题

这里解释一下图里的逻辑脉络

  • 我们想用(X_1,...,X_n)估计Z_n
  • 虽然我们知道,条件期望是均方意义下的最优估计,但是通常在非高斯背景下我们很难求出条件期望;
  • 于是我们转而去求一个最优线性估计本质也就是把Z_n投影到由(X_1,...,X_n)张成的线性子空间里;
  • z_{n|n}中两个n的含义:第二个n表示用x_1,...,x_n的数据,第一个n表示要估计的状态是z_n。做的是线性估计,也就是上面说的投影
  • 卡尔曼滤波为了实现z_{n|n}\leftarrow z_{n-1|n-1},采用了两步走策略:第一步预测(Prediction);第二步矫正(Correction)。所以该策略也被称为预测-矫正(Prediction-Correction)策略

4. 推导细节

上面这里头核心的一步就是正交化,因为xn 和 x(1:n-1)  当然不正交,因为如果正交的话,就是高斯白噪声了。除非设备坏了,不然采出来的数据几乎不可能是个白噪声。

可以看到,方差不断地减小,这个过程是自适应完成的,非常精巧。

 5. 卡尔曼滤波总结

大名鼎鼎的卡尔曼滤波可以总结如下:

6. 理论应用

卡尔曼滤波怎么用呢?只需要给定初值\Sigma_{0|0}=I,(其实初值取什么不太重要别是0就行),和参数取值G_n,H_n,就可以随着数据的到来不断递推下去,获得越来越精准的结果,因为数据当中的信息是会不断地吸收进你的滤波器当中,这个其实也就是机器学习。

 追踪模型(Target Tracking)[Z_n,Z_n^{'},Z_n^{''}]

状态方程:

假设物体做匀加速直线运动:

\left[\begin{matrix} Z_n\\ Z_n^{'}\\ Z_n^{''} \end{matrix}\right] =\left(\begin{matrix} 1&\Delta t&\frac{1}{2}(\Delta t)^2\\ 0&1&\Delta t\\ 0&0&1 \end{matrix}\right) \left[\begin{matrix} Z_{n-1}\\ Z_{n-1}^{'}\\ Z_{n-1}^{''} \end{matrix}\right] +v_n

观测方程:

X_n=[1,0,0]\left[\begin{matrix} Z_n\\ Z_n^{'}\\ Z_n^{''} \end{matrix}\right]+w_n

 7. 卡尔曼滤波的优缺点(Pros and Cons)

我们平常形容某一门信号处理技术或者别的什么技术成熟了,是什么意思?

要知道成熟绝不等于热门热门的意思是:现在研究的人特别的多,文章特别多,对于这个方法的各种各样的扩充改进更新等等层出不穷,这个叫热门,但这个时候一定是不成熟的,原因很简单,是因为大家还没有看到这个方法的缺点。当大家知道的不仅仅是它能干什么,还有它不能干什么,那么这个方法就成熟了。卡尔曼滤波的缺点主要体现在以下三个方面:

1. 模型失配(Model Mismatch)

卡尔曼滤波说到底,虽然后面的推导看起来那么复杂,但其实就干了正交化这一件事而已。

另一方面,卡尔曼滤波极度依赖状态空间表达。在上述的追踪模型中,如果物体做的不是匀加速直线运动,是由模型失配导致Z_{n|n}中的误差项(X_n-H_nZ_{n|n-1})增大,而卡尔曼滤波却依旧坚持认为这个误差项是由于噪声造成的,并且不断增大卡尔曼增益,导致错上加错,最后乱套。

对付模型失配,有一个技术叫做IMM(交互式多模型Interacting Multiple Models),其实就是准备了很多个模型,总有一款适合你。模型之间有交互,是为了确认你究竟处于哪个模型当中。

2. 非线性(Non-Linear)

卡尔曼滤波线性性。但是现实情况大多是非线性的:

\begin{cases} Z_n=g(Z_{n-1},v_n)\\ X_n=h(Z_n,w_n) \end{cases}

比如,导航信号在穿过大气层的时候,是会有很严重的电离层的散射和畸变。(因为导航星很高,要飞两万公里以上过大气层,没到3万6的同步轨道,也不是几百公里侦查星)具有很强的非线性。那么,在非线性的情况下如何使用卡尔曼滤波?

一个很简单的办法就是线性化:EKF(扩展的卡尔曼滤波 Extended Kalman Filtering)

\begin{cases} Z_n=J_g^{(1)}Z_{n-1}+J_g^{(2)}v_n)\\ X_n=J_h^{(1)}Z_n+J_h^{(2)}w_n) \end{cases}

线性化只能局部做,所以模型要隔一段时间变一下,很正常。

3. 分布本身的推演(Distribution Propagation)

我们知道高斯能够完全由均值和方差确定,而卡尔曼滤波推演的只有均值和协方差阵,是因为我们假设噪声是高斯分布。要是噪声的情况非高斯,我们面临每一时刻,状态的分布情况都不一样,所以我能不能设计一种方法,使得这个状态的分布本身(不是一阶矩、二阶矩)能够随时间演化。这个问题,人们也解决了,靠的是粒子滤波技术(Particle Filtering)

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

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

相关文章

STM32 HAL库定时器触发DMA并口数据传输

代码目的: STM32与FPGA通讯,通过8位并口线进行通讯,16byte的数据在10us之内通过8位并口数据线传给FPGA,FPGA读取该数据。 HAL库设置说明: 时钟采用80MHz,由于16byte的数据要在10us之内传完,那…

[笔记] 使用 qemu 创建虚拟磁盘并安装 grub

之前使用 wsl 进行了直接创建虚拟磁盘并安装 grub,现在希望能够直接借助 qemu 的工具创建虚拟磁盘文件并安装 grub,由于需要用到 nbd(net block device网络块设备) 模块,在 wsl 中并不支持,因此这里使用到了 Hypver-V 虚拟机创建了一个 Ubuntu 系统,在系统中安装了 qemu 和 gru…

物联网安全:保护关键网络免受数字攻击

物联网 (IoT) 彻底改变了当今互联世界中的各个行业,实现了智能家居、自动驾驶汽车和先进的工业系统。然而,随着物联网设备数量的急剧增加,这些设备和相应网络的安全性已成为人们关注的焦点。本文旨在探讨物联网安全的重要性,同时简…

Pandas教程(五)—— 数据重塑透视及批量处理

1.数据重塑 重塑数据主要有两种方式,分别是 stack(堆叠)和 unstack(拆堆),他们两个是互逆的操作 函数作用 data.stack( ) 堆叠 会“旋转”或将列中的数据透视到行 列 一一> 行…

AWS(三):如何在AwsManagedAd目录和windowsAD实例之间建立双向信任。

前提: 1.创建好了一个AWS managed AD目录,我的目录域名为:aws.managed.com 2.创建好了一个windows AD实例并提升了为域控服务器,实例域名为:aws2.com 看过我AWS 一和二的应该都会创建windows实例了,切记不能将其无缝加入到aws managed AD的…

(JAVA)-反射

什么是反射? 反射允许对成员变量,成员方法和构造方法的信息进行编程访问。 说简单点就是反射能将类里面的构造方法,成员变量,修饰符,返回值,注解,类型,甚至异常等类里面的所有东西都能够获取出来。 关于C…

打造炫酷粒子效果的前端利器tsParticles

前端潮流速递 :打造炫酷粒子效果的前端利器tsParticles 在现代前端开发中,动画和视觉效果是吸引用户的关键元素之一。而实现炫酷而引人入胜的粒子效果,常常需要耗费大量的时间和精力。然而,有了 tsParticles,这一切变…

GitHub上的15000个Go模块存储库易受劫持攻击

内容概要: 目前研究发现,GitHub上超过15000个Go模块存储库容易受到一种名为“重新劫持”的攻击。 由于GitHub用户名的更改会造成9000多个存储库容易被重新劫持,同时因为帐户删除,会对6000多个存储库造成重新劫持的危机。目前统计…

【MySQL·8.0·源码】MySQL 表的扫描方式

前言 在进一步介绍 MySQL 优化器时,先来了解一下 MySQL 单表都有哪些扫描方式。 单表扫描方法是基表的读取基础,也是完成表连接的基础,熟悉了基表的基本扫描方式, 即可以倒推理解 MySQL 优化器层的诸多考量。 基表,即…

半导体行业-SECS/GEM协议 JAVA与SECS/GEM通信 什么是配方?springboot集成SECS通信协议 配方管理S7FX

Java与SECS基础通信 Java实现SECS指令S2F17获取时间 Java实现SECS指令 S10F3 终端单个显示例子 Java实现SECS指令 S7FX配方管理 Java实现SECS指令 S5F1报警/取消报警上传 实例源码及DEMO请查阅 JAVA开发SECS快速入门资料,SECS S7F19 什么是半导体配方&…

Unity3D UGUI图集打包与动态使用(TexturePacker)

制作图集的好处: 众所周知CPU是用来处理游戏的逻辑运算的,而GPU是用来处理游戏中图像的。在GPU中,我们要绘制一个图像需要提交图片(纹理)到显存,然后再进行绘制(在这个过程中会产生一次DrawCall…

书生-浦路大模型全链路开源体系

2023年,大模型成为热门关键词 论文链接 大模型已经成为发展通用人工智能的重要途经 模型评测过程:从模型到应用 全链条开源开发体系 | 数据: 多模态融合 万卷包含文本、图像和视频等多模态数据,涵盖科技、文学、媒体、教育和法…

力扣hot100 二叉树的层序遍历 BFS 队列

👨‍🏫 题目地址 时间复杂度: O ( n ) O(n) O(n)空间复杂度: O ( n ) O(n) O(n) 😋 队列写法 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode…

Pycharm恢复默认设置

window 系统 找到下方目录-->删除. 再重新打开Pycharm C:\Users\Administrator\.PyCharm2023.3 你的不一定和我名称一样 只要是.PyCharm*因为版本不同后缀可能不一样 mac 系统 请根据需要删除下方目录 # Configuration rm -rf ~/Library/Preferences/PyCharm* # Caches …

vue的小入门

vue的快速上手 Vue概念 是一个用于构建用户界面的渐进式框架优点:大大提高开发效率缺点:需要理解记忆规则 创建Vue实例 步骤: 准备容器引包创建Vue实例new Vue()指定配置项el data>渲染数据 el指定挂载点,选择器指定控制…

OpenCV-14图片的四则运算和图片的融合

一、图片的四则运算 1. 加法运算 通过使用API add来执行图像的加法运算 cv2.add(src1, src2)需要再其中传入两张图片。 图片就是矩阵,图片的加法运算就是矩阵的加法运算。 因此加法运算中要求两张图的shape必须是相同的。 首…

【vue/uniapp】使用 uni.chooseImage 和 uni.uploadFile 实现图片上传(包含样式,可以解决手机上无法上传的问题)

引入: 之前写过一篇关于 uview 1.x 版本上传照片 的文章,但是发现如果是在微信小程序的项目中嵌入 h5 的模块,这个 h5 的项目使用 u-upload 的话,图片上传功能在电脑上正常,但是在手机的小程序上测试就不会生效&#x…

C# windows服务程序开机自启动exe程序

我们使用传统的Process.Start(".exe")启动进程会遇到无法打开UI界面的问题,尤其是我们需要进行开启自启动程序设置时出现诸多问题,于是我们就想到采用windows服务开机自启动来创建启动一个新的exe程序,并且是显式运行。 首先是打开…

19、BLIP-2

简介 github 通过利用预训练的视觉模型和语言模型来提升多模态效果和降低训练成本,预训练的视觉模型能够提供高质量的视觉表征,预训练的语言模型则提供了强大的语言生成能力。 实现过程 为了弥合模态差距,提出了一个分两个阶段预训练的 Qu…

华为端口隔离高级用法经典案例

最终效果: pc4不能ping通pc5,pc5能ping通pc4 pc1不能和pc2、pc3通,但pc2和pc3能互通 vlan batch 2 interface Vlanif1 ip address 10.0.0.254 255.255.255.0 interface Vlanif2 ip address 192.168.2.1 255.255.255.0 interface MEth0/0/1 i…