当前位置:网站首页>KaFormer个人笔记整理
KaFormer个人笔记整理
2022-06-24 07:07:00 【思考实践】

好处很多:实现简单, 是一个纯时域的filter,不需要进行频域变换,所以在工程上有很多应用。
举个经典的例子:
有辆汽车在行驶,我们用位置和速度表示它当前的状态,写成矩阵形式就是一个二维的列向量,这个列向量里面的两个元素就是它的状态,位置
与速度
,另外驾驶员可以踩油门或者刹车,有一个向前或者向后的加速度
,
表示对车的一个控制量,如果驾驶员没有踩油门或者刹车,
就等于0,车就会做匀速直线运动。
如果我们已知上一时刻的状态
,那么当前状态表达会是什么呢,如图所示

我们观察这两个公式发现输出变量都只是输入变量的线性组合,这就是我们为什么说卡尔曼滤波器是最佳的线性滤波器,因为它只能描述状态与状态之间的线性关系,既然是线性关系,我们就可以把它写成矩阵的形式,我们再进一步的把两个状态变换矩阵提取出来,然后公式可以简化成右下角所示公式 。

这个公式就是卡尔曼滤波器第一个公式(状态预测公式),其中
就叫做状态转移矩阵,它表示我们如何从上一时刻的状态来推测当前时刻的状态,其中
叫做控制矩阵,它表示控制量
如何作用于当前状态(看左上角公式能很好的理解)

这里。
表示对
的估计量,而不是
的真实值,因为汽车的真实状态我们是无法知道的,我们只能通过观测来尽可能的估计
的值。还有个减号的上标,表示这个值是通过上一时刻的状态推测而来的,待会儿我们还要通过观测量来修正
的值,修正之后才可以算是最佳的估计值。也就是没有减号上标的
,有了状态预测公式,我们就可以推测当前时刻的状态,但我们知道所有的推测都是包含噪声的,噪声越大不确定性就越大,我们如何来表示推测带来多少不确定性呢,这时候我们就要用协方差矩阵来表示,那么什么是协方差矩阵呢?我们从一维简单情况来解释一下···
假设我们有一个一维包含噪声的数据,每次测量的值都不同,但都是围绕在一个中心值的周围,那我们表示它们分布状况最简单的方法就是记下它的中心值和方差,这实际上是假设这些数据是高斯的一个分布

我们再来看看二维的情况,把二维数据分别在两个坐标轴上进行投影,在两个轴上都是高斯分布(图左),那我们在表示它的分布的时候,是不是分别记下来两个高斯分布的中心值和方差就可以了呢。如果两个噪声是独立的时候,是可以这么表示的,但是两个维度有相关性的情况下,比如在一个维度噪声增大的时候,另一个维度噪声也增大(图中),比如在一个维度噪声增大的时候,另一个维度噪声减小(图右),这时候在两个坐标轴的投影与图左是完全没有差别的,仍然是高斯分布,所以为了表示这两个维度之间的相关性,除了要记录两个维度的方差外,还要有一个协方差来表示两个维度之间的相关程度。 
把二维(位置,速度)的协方差写成矩阵的形式就是这样的,对角线的两个值是两个维度各自的方差,反对角线上的两个值是相等的,是这堆二维数据的协方差。在这三种情况中,协方差=0(独立),>0(正相关),<0(负相关).

重点 :在卡尔曼滤波器中所有关于不确定性的表述都要用到协方差矩阵
在我们小汽车的例子中,每一个时刻状态的不确定性都是由协方差矩阵P来表示的,那么下一个问题就是,我们如何让这种不确定性在每个时刻之间传递呢?答案就是乘上状态转移矩阵F,这次是要在左右两边各乘一次

写的具体一点就是这样的,从上一时刻推测当前时刻的协方差,就等于上一时刻协方差的两边乘以状态转移矩阵,至于为什么要乘以两边,这是协方差矩阵的一个性质,

x的协方差是P,想计算FX的协方差,就可以把F从里面提到两边来,这时候我们还要考虑一件事情,就是我们的预测模型并不是100%准确的,它本身也是包含噪声的,

所以我们要在后面加上一个协方差矩阵Q来表示预测模型本身带来的噪声,
这个公式代表卡尔曼滤波器第二个公式,它表示不确定性在各个时刻之间的传递关系。

回到我们这个小汽车的模型,假设我们在公路的一端放置激光测距仪,在每个时刻都可以观测到汽车的位置,观测到的值记作Zt,那么从汽车本身的状态Xt到观测状态Zt之间有一个变换关系,我们记作H,当然这个关系也只能是线性关系,因为卡尔曼滤波器是线性滤波器,所以我们理所当然的要把H写成矩阵形式,X与Z的维度不一定是相同的,在我们的例子里,X是一个二维的列向量,Z只是一个标量的值,H应该是一个一行两列的矩阵,里面的元素分别是1和0,这样H和X相乘的时候就可以得到一个标量的值Z,而Z也就是汽车的位置,它和X第一个元素是相等的,那为什么后面加一个小写的v呢,因为我们观测值也不是100%可靠,所以我们后面要加上一个v来表示观测噪声,而这个噪声的协方差矩阵,我们用R来表示,由于在我们这个例子里,观测值是一个一维的值, 所以这个R的形式也不是一个矩阵而是一个单独的值,仅仅表示Z的方差,假设我们除了激光测距仪外,还有别的测量方法可以观察到汽车的某项特征,那么Z就会变成一个多维的列向量,它会包含每一种测量方式的测量值,而每一个测量值都只是真实状态的一种不完全的表现,我们可以从几种不完整的表述里面推断出真实的状态,而卡尔曼滤波器数据融合的功能,就正是在这个测量矩阵中体现出来的,

我们已经有了观测量Z和它的噪声协方差矩阵R,那我们如何把它们整合进我们对状态X的估计呢, 我们在前面已经得到了带减号的,现在我们只需要在它的后面加上一项来修正它的值(下图公式1),就可以得到我们的最佳估计值了,那么加上的这一项是什么东西呢?先看括号里面的东西,这表示实际的观测值和我们预期的观测值之间的残差,这个残差乘上一个系数Kt,就可以用来修正
的值了,这个Kt十分关键,叫做卡尔曼系数,实际上它也是一个矩阵,它的公式是这样的(下图公式二),这个公式的推导比较复杂,所以我们只是定性的分析一下,这个卡尔曼系数K作用主要有两个方面,一是权衡预测状态协方差P和观察量的协方差矩阵R的大小,来决定我们相信预测模型多一点还是相信观察模型多一点,如果相信预测模型多一点,这个残差的权重就会小一点,反之亦然。二是把残差的表现形式从观察域转换到状态域,这什么意思呢?

我们刚才讲到观察值Z是一个一维的向量,状态X是一个二维的列向量,他们所用的单位甚至描述的特征都有可能是不同的,那我们怎么可以用观察值(只有位置信息)的残差去更新状态值(位置和速度)呢?实际上这个卡尔曼系数K呢就是在替我们做这样的一个转换,在这个小车的例子,我们只观察到汽车的位置,但K里面已经包含了协方差矩阵P的信息,所以它利用位置和速度这两个维度的相关性,从位置的残差里面来推算出了速度的残差,从而让我们可以对状态X的两个维度同时进行修正,好了,现在只差最后一步了,最后一步就是更新最佳估计值的噪声分布,这个值是留给下一轮迭代时用的,在这步里,状态的不确定性是减小的,而在下一轮迭代中呢,由于传递噪声的引入,不确定性又会增大,卡尔曼滤波器就是在这种不确定性的变化中寻求一种平衡的。

到现在为止,已经有了卡尔曼滤波器的五个公式,把他们完整的列出来看一下,在这五个公式中,前两个是通过上一时刻的状态来预测当前时刻的状态,通过这两个公式我们得到的是带减号上标的X和P,这表示这并不是最佳的估计值,减号的上标表示它们还欠缺点什么东西,这个欠缺的东西就是从观测值那儿里面带来的信息,因为我们还没考虑当前时刻的观测值,后面三个公式就是用当前观测值来更新X和P,经过更新后的值就是最佳观测值了。
用Matlab实现的例子

1.需要把变量融入nn.Parameter
2.看看Karman-attention 2020 nuerips spotlight参考资料
【不要再看那些过时的卡尔曼滤波老教程了】2022巨献,卡尔曼滤波-目标追踪从理论到实战最新版全套教程!建议收藏_哔哩哔哩_bilibili //内容大部分摘自该视频
边栏推荐
猜你喜欢

【LeetCode】541. 反转字符串 II

Database migration from PostgreSQL to MySQL

The form image uploaded in chorme cannot view the binary image information of the request body

Telnet port login method with user name for liunx server

Prompt code when MySQL inserts Chinese data due to character set problems: 1366

为什么ping不通,而traceroute却可以通

opencv最大值滤波(不局限于图像)

Pymysql inserts data into MySQL and reports an error for no reason

OpenCV每日函数 结构分析和形状描述符(7) 寻找多边形(轮廓)/旋转矩形交集

It is enough to read this article about ETL. Three minutes will let you understand what ETL is
随机推荐
用VNC Viewer的方式远程连接无需显示屏的树莓派
Xiaohei ai4code code baseline nibble 1
Video Fusion communication has become an inevitable trend of emergency command communication. How to realize it based on easyrtc?
Send custom events in QT
QT source code analysis -- QObject (2)
[pytorch basic tutorial 30] code analysis of DSSM twin tower model
所说的Get post:请求的区别,你真的知道了吗??????
China chip Unicorn Corporation
数组相向指针系列
Prompt code when MySQL inserts Chinese data due to character set problems: 1366
Win11 blank when using VIM to view content in cmder
【LeetCode】387. 字符串中的第一个唯一字符
【生活思考】计划与自律
小程序wx.show
数据库迁移从PostgreSQL迁移到 MYSQL
原生小程序用画布制作海报,等比例缩放,和uniapp差不多就是写法有点不同
数据平台简介
One article explains in detail | those things about growth
[team management] 25 tips for testing team performance management
为什么ping不通,而traceroute却可以通