首页 > 其他分享 >卡尔曼滤波器理论基础

卡尔曼滤波器理论基础

时间:2023-06-02 23:36:01浏览次数:42  
标签:frac 卡尔曼滤波 基础 overline 协方差 end aligned hat 理论

强推DR_CAN的视频教学,讲的很清楚,而且例子举得也很通俗易懂。 [点击这里跳转](https://www.bilibili.com/video/BV1ez4y1X7eR/?spm_id_from=333.788&vd_source=c2b3fa1e2440ee7e7443aca0df4fb0bb)

### 1.本质:递归算法

引入一个情景,有一个人拿一个尺子去测量一个硬币的直径。共测量k次。这里每次的测量都不可避免的出现误差。

那我们怎么去估计这个硬币的真实直径呢? 最直观简单的方式就是去计算k次测量值的平均值。
$$
记录第k次的测量结果为z_k。记录这个估计值为\hat{x}_k \\
\begin{aligned}
\hat{x}_k&=\frac{1}{k}(z_1+z_2+ \cdots z_k) \\
&=\frac{1}{k}(z_1+z_2+ \cdots z_{k-1})+\frac{1}{k}z_k \\
&=\frac{1}{k}\frac{k-1}{k-1}(z_1+z_2+ \cdots z_{k-1})+\frac{1}{k}z_k\\
&=\frac{k-1}{k}\hat{x}_{k-1}+\frac{1}{k}z_k \\
&=\hat{x}_{k-1}-\frac{1}{k}\hat{x}_{k-1}+\frac{1}{k}z_k
\end{aligned}\\
经过这一系列化简,最终可以得到如下的式子\\
\hat{x}_k=\hat{x}_{k-1}+\frac{1}{k}(z_k-x_{k-1})\\
由此获得一个结论,随着k的不断增加,\frac{1}{k}不断减少,\hat{x}_k越趋近于\hat{x}_{k-1}。即随着测量次数增加,测量结果就不在重要了。同理测量次数越少,测量结果的重要性越大。
$$
整理以上式子,将1/k等效于K<sub>k</sub>。就有如下结论
$$
\hat{x}_k=\hat{x}_{k-1}+K_k(z_k-x_{k-1}) \\
K_k我们称为卡尔曼增益或卡尔曼因数\\
即:当前估计值=上一次的估计值+系数*(当前测量值-上一次估计值)
$$
从式子中我们知道,每一次的估计值都与上一次的估计值有关,这就是一种递归的思想。

 

接下来我们引进两个值,分布是估计误差e<sub>EST</sub>,和测量误差e<sub>MEA</sub>。关于K<sub>k</sub>存在下列关系式
$$
K_k=\frac{e_{ESTk-1}}{e_{ESTk-1}+e_{MEAk}} \\
推导过程暂略,后续将给出详细证明 \\\\
我们接下来讨论在k时刻: \\
1.e_{ESTk-1}>>e_{MEAk},即K_k\approx1,得出\hat{x}_k=z_k,可以理解为估计误差过大,我们就更倾向于相信我们的测量结果\\
2.e_{ESTk-1}<<e_{MEAk},即K_k\approx0,得出\hat{x}_k=\hat{x}_{k-1},可以理解为测量误差过大,我们就更倾向于相信我们的估计结果
$$


卡尔曼滤波器的简单应用过程如下
$$
\begin{aligned}
&第一步:计算K_k=\frac{e_{ESTk-1}}{e_{ESTk-1}+e_{MEAk}}\\
&第二步:计算\hat{x}_k=\hat{x}_{k-1}+K_k(z_k-x_{k-1})\\
&第三步:更新e_{ESTk}=(1-K_k)e_{ESTk-1} 后续将给出这个式子详细推导过程

\end{aligned}
$$

### 2.数学基础:数据融合、协方差矩阵、状态空间方程、观测器问题

#### (1)数据融合

再引入一个情境,现在要获取一个物体质量,我手头有两个称A和B,已知两个称都存在误差。A称出来的质量为z<sub>1</sub>,标准差为σ<sub>1</sub>,B称出来的质量为z<sub>2</sub>,标准差为σ<sub>2</sub>,两个称的测量结果都符合高斯分布。(z<sub>1</sub>和z<sub>2</sub>相互独立)

![](https://img01.anzhiy.cn/useruploads/163/2023/05/21/646a1464a111d.png)
$$
记录估计真实值为\hat{z},求K_k使的σ_{\hat{z}}^2,也就是方差var(\hat{z})最小\\
\begin{aligned}
σ_{\hat{z}}^2&=var(z_1+K_k(z_1-z_2))\\
&=var(z_1-K_kz_1+K_kz_2)\\
&=var((1-K_k)z_1+K_kz_2)\\
&=var((1-K_k)z_1)+var(K_kz_2)\\
&=(1-K_k)^2var(z_1)+K_k^2var(z_2)\\
&=(1-K_k)^2σ_1^2+K_k^2σ_2^2\\
\end{aligned}\\
之后对化简完的式子进行求导,使\frac{dσ_{\hat{z}}^2}{dK_k}=0\\
得到 -σ_1^2+K_kσ_1^2+K_kσ_2^2=0 \\
K_k=\frac{σ_1^2}{σ_1^2+σ_2^2}\\
带入可求\hat{z}最优解(期望)和σ_{\hat{z}}^2
$$

最后大致图解为

![](https://img01.anzhiy.cn/useruploads/163/2023/05/21/646a1464a1073.png)

#### (2)协方差矩阵

即方差,协方差在一个矩阵中表示出来,表示变量之间的联动关系。(不详细解释了,说的简单,但还是希望有一点点概率论基础)

以三种数据x,y,z举例,数据共有三组即x<sub>1</sub>,x<sub>2</sub>,x<sub>3</sub>,y<sub>1</sub>,y<sub>2</sub>,y<sub>3</sub>,z<sub>1</sub>,z<sub>2</sub>,z<sub>3</sub>
$$
P=\begin{bmatrix}
σ_x^2 & σ_xσ_y & σ_xσ_z \\
σ_yσ_x & σ_y^2 & σ_yσ_z \\
σ_zσ_x & σ_zσ_y & σ_z^2
\end{bmatrix}
$$
提一下如何计算协方差矩阵
$$
记录a为一个过渡矩阵\\
a=\begin{bmatrix}
x_1 & y_1 & z_3 \\
x_2 & y_2 & z_2 \\
x_3 & y_3 & z_3
\end{bmatrix}-\frac{1}{3}\begin{bmatrix}
1 & 1 & 1 \\
1 & 1 & 1 \\
1 & 1 & 1
\end{bmatrix}
\begin{bmatrix}
x_1 & y_1 & z_3 \\
x_2 & y_2 & z_2 \\
x_3 & y_3 & z_3
\end{bmatrix}\\
P=\frac{1}{3}a^Ta
$$


#### (3)状态空间方程和观测器

$$
记录u_k为我们第k次的输入值\\
计算值:x_k=Ax_{k-1}+Bu_k+w_k\\
测量值:z_k=Hz_{k-1}+v_k
$$

$$
由于我们的模型不完全完美,势必会存在不确定性,故有着w_k,v_k两个不确定量,我们分别称为过程噪音和\\
测量噪音。通过一个不太准的计算值和一个不太准的测量值得出一个相对准确的估计值\hat{x}_k就是卡尔曼滤波器的作用
$$

### (4)卡尔曼增益和误差协方差矩阵详细推导(可以跳过直接看公式)

具体过程比较繁琐,下面是我的学习笔记,建议搭配视频食用

![](https://img01.anzhiy.cn/useruploads/163/2023/05/21/646a16e82e2a7.jpg)

![](https://img01.anzhiy.cn/useruploads/163/2023/05/21/646a16e80d697.jpg)

![](https://img01.anzhiy.cn/useruploads/163/2023/05/21/646a16e80d625.jpg)

### (5)卡尔曼滤波器完整公式

由预测和校正两个部分组成

1.预测
$$
先验估计:\hat{x}_k^-=A\hat{x}_{k-1}+Bu_{k-1}\\
先验误差协方差:P_k^-=AP_{k-1}A^T+Q
$$
2.校正
$$
卡尔曼增益:K_k=\frac{P_k^-H^T}{HP_k^-H^T+R}\\
后验估计:\hat{x}_k=\hat{x}_k^-+K_k(z_k-H\hat{x}_k^-)\\
更新误差协方差:P_k=(I-K_kH)P_k^-
$$


### (6)扩展卡尔曼滤波器(同样可以直接拖到最后看公式)

以上都是卡尔曼滤波器在线性系统中的应用,这里我们说一下卡尔曼滤波器在非线性系统中的应用
$$
\begin{aligned}
x_k&=f(x_{k-1},u_{k-1},w_{k-1})\\
z_k&=h(x_k,v_k)\\
\end{aligned}\\
$$
其中P(w)~N(0,Q); P(v)~N(0,Q)

正态分布的随机变量通过非线性系统后就不再是线性的了,所以我们需要对系统进行线性化,我们这里使用泰勒展开
$$
f(x)=f(x_0)+\frac{\partial{f}}{\partial{x}}(x-x_0)
$$


由于系统存在误差,我们无法在真实点处进行线性化,所以我们退而求其次,在上一次的后验估计处进行线性化
$$
x_k=f(\hat{x}_{k-1},u_{k-1},w_{k-1})+A(x_k-\hat{x}_{k-1})+w_{w_{k-1}}\\
将误差w_{k-1}假设为0,f(\hat{x}_{k-1},u_{k-1},w_{k-1})用\overline{x}_k代替\\
z_k在\overline{x}线性化\\
z_k=h(\overline{x}_k,v_k)+H(x_k-\overline{x}_k)+v_{v_k}\\
将误差v_{k-1}假设为0,h(\overline{x}_k,v_k)用\overline{z}_k代替\\
\begin{aligned}
x_k&=\overline{x}_k+A(x_{k-1}-\overline{x}_{k-1})+w_{w_{k-1}}\\
z_k&=\overline{z}_k+H(x_{k}-\overline{x}_{k})+v_{v_k}\\
\end{aligned}\\
$$
这里P(w<sub>w</sub>)~N(0,wQw<sup>T</sup>),P(v<sub>v</sub>)同理

经过上述替换,可以得到如下公式

1.预测
$$
先验估计:\hat{x}_k^-=f(\hat{x}_{k-1},u_{k-1},0)\\
先验误差协方差:P_k^-=AP_{k-1}A^T+wQw^T
$$
2.校正
$$
卡尔曼增益:K_k=\frac{P_k^-H^T}{HP_k^-H^T+vRv^T}\\
后验估计:\hat{x}_k=\hat{x}_k^-+K_k(z_k-h(\hat{x}_k^-,0))\\
更新误差协方差:P_k=(I-K_kH)P_k^-
$$

标签:frac,卡尔曼滤波,基础,overline,协方差,end,aligned,hat,理论
From: https://www.cnblogs.com/nobodyx/p/17453102.html

相关文章

  • 接口基础
    服务器地址-接口地址api.keyou.site:8000/configures接口分类1、硬件接口:指的是两个硬件设备之间的连接方式(比如:鼠标和电脑通过usb接口进行连接)2、软件接口:简单来说就说软件程序之间数据交互的通道软件接口分类:1、程序内部接口:是客户端与服务器的接口,用来实现客户端和服务......
  • 03web安全学习---前端基础
    一、前端是什么?二、HTML最简单的架构三、JS的妙用......
  • kotlin-基础
    文章目录var和val的区别使用is运算符进行类型检测字符串与其模版表达式when表达式for循环标签(Label)this关键字super关键字的使用操作符和操作符的重载一元操作符递增和递减二元操作符字符串+的运算符重载in操作符调用操作符用infix函数自定义中缀操作符函数扩展和属性扩展(Exte......
  • IOS基础-UICollectionView
    资料UICollectionView详解(一)——基本使用自定义UICollectionviewCell简述iOS-自定义UICollectionViewCell注册问题UICollectionView详解:(Header/Footer)iOSUICollectionView中添加边框UICollectionview设置sectionbackground自定义UICollectionReusableViewUICollectionView......
  • Redis(一) -- 基础
    RedisRedis是一个开源(BSD许可高性能的内存存储的key-value数据库!可用作数据库,高速缓存和消息队列代理。它支持字符串、哈希表、列表(List)、集合(Set)、有序集合(OrderedSets),位图(bitmap),hyperloglogs,GEO等数据类型。内置复制、Lua脚本、LRU收回、事务以及不同级别磁盘持久化功......
  • flutter-基础控件
    资料Flutter控件之ScaffoldWidgetScaffoldScaffold有下面几个主要属性:appBar:显示在界面顶部的一个AppBar,也就是Android中的ActionBar、Toolbarbody:当前界面所显示的主要内容WidgetfloatingActionButton:纸墨设计中所定义的FAB,界面的主要功能按钮persistentFooterButtons:固......
  • android基础-ConstraintLayout
    资料约束布局ConstraintLayout看这一篇就够了ConstraintLayout布局居中|居右实现。ConstraintLayout中TextView文字超过屏幕问题ConstraintLayoutConstraintLayout字体超出屏幕解决方法约束布局ConstraintLayout看这一篇就够了具体的方法layout_constraintLeft_toLeftOflayout_c......
  • KOOM原理分析之一些基础知识
    文章目录资料Profile工具的使用内存性能分析器概览内存计算方式查看内存分配情况(Record一段)查看全局JNI引用原生内存性能分析器将堆转储另存为HPROF文件HPROFAgentBinaryDumpFormat(format=b)HandlingofArrays资料使用内存性能分析器查看应用的内存使用情况HPROFAgentPr......
  • 动态规划基础之矩阵取数问题 51nod1083
    题目地址:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1083题目:1083 矩阵取数问题基准时间限制:1 秒空间限制:131072 KB分值: 5 难度:1级算法题例如:3*3的方格。133213221......
  • 51nod 1298 圆与三角形(基础题,计算几何)
    题目链接:点击打开链接1298 圆与三角形题目来源: HackerRank基准时间限制:1 秒空间限制:131072 KB分值: 0 难度:基础给出圆的圆心和半径,以及三角形的三个顶点,问圆同三角形是否相交。相交输出"Yes",否则输出"No"。(三角形的面积大于0)。Inp......