007 Kalman Filters

其实就是Matlab教学视频的理解

视频地址
https://www.mathworks.com/videos/series/understanding-kalman-filters.html
知乎大神的解释
https://zhuanlan.zhihu.com/p/129370341
https://zhuanlan.zhihu.com/p/129694693
wiki
https://en.wikipedia.org/wiki/Kalman_filter

你碰到一个人,给你的帅气打十分,你自己给自己打八分,那你实际有多帅呢?你不断地碰到更多的人,怎么用这些数据估计自己最真实客观的颜值呢?Kalman Filters可以神奇地帮你去除那些噪声

简介

在统计和控制理论中,卡尔曼滤波(也称为线性二次估计(LQE))是一种算法,该算法使用随时间推移观察到的一系列测量值(包含统计噪声和其他误差),并生成未知变量的估计,而这些估计往往会通过估计每个时间范围内变量的联合概率分布,比仅基于单个测量的结果更准确

通俗解释

1 房间温度

你在一个房间,可以通过温度计和自己的感觉获得两个温度(包含噪声),然后根据这两个温度你给出一个实际温度的猜测温度,随着时间的推移,你不断地重复这个操作,你怎么让猜测的温度更接近实际温度,更可靠准确。直接取两个温度的平均值吗?

2 火箭尾焰温度

007 Kalman Filters
火箭的尾焰温度很高,不能直接测量,需要把传感器放在紧靠尾焰,温度较低的外部。
007 Kalman Filters
通过一个温度传导公式,你可以通过外部温度获得尾焰温度,你也可以根据以前加入的所有燃料,通过火箭模型,计算出外部温度,尾焰温度,燃料在不断地添加的过程中,你怎么通过测量获得估计和火箭模型获得的估计,估计真实的尾焰温度。注意这是一个过程,你在不断地给出估计值,你要做的是,让你的估计不要偏离实际温度,并且尽可能越来越接近真实值,即使被外星人攻击了,短暂地偏离了,也能快速地拉回来

3 自动驾驶

007 Kalman Filters
你很缺钱,参加一个自动驾驶比赛,比赛规定每辆车跑1km,测试100次,谁的车停的离终点线最近,谁就赢得100万。要想赢,这一百次你的平均距离要接近1km(均值接近1km),并且每次都尽可能接近1km(方差小)。
007 Kalman Filters

你很牛,知道了每个加速减速的操作以后,车子不用跑,用一个模型就计算出了每个时间的位置,速度,你还能通过GPS实时获取车子的位置,然后你有了两个位置,怎么通过这两个位置估计车子实际跑时候的位置,并且使得这个估计越来越准?

为什么这个问题可以有解

虽然测量估计和实际环境都有噪声,但这个噪声一般来说都是服从高斯分布或者其他分布的。测量估计和模型估计的可信度可以通过大量实验增加其可靠度,即使你刚开始的猜测不靠谱,这个算法也可以像梯度下降那样,让你很快变得可靠

State Estimator(状态估计器)

火箭尾焰温度的估计可以用下图的状态估计器描述。T^in\hat{T}_{in}T^ext\hat{T}_{ext}是模型预测的内部温度。通过K将模型预测值T^ext\hat{T}_{ext}和测量值Text{T}_{ext}联系起来,将他们的差反馈给模型,用于改进预测可靠度。
007 Kalman Filters

  • xx:当前状态(k时刻实际内部温度)
  • yy:测量状态(k时刻测量外部温度)
  • uu:控制向量(k时刻添加燃料量)
  • AA:状态转移模型(k时刻状态转向k+1时刻)
  • BB:输入控制模型(输入对状态转移的作用)
  • CC:观测模型(真实值转向观察值)
  • KK:Kalman 增益
  • x˙\dot{x}:当前状态的一阶导数,也就是当前状态的变化趋势,有时这里会是x(k+1)x(k+1),也就是下一状态,其实都是一样的
  • 戴帽子的其他变量都是模型预测值
  • eobs{e}_{obs}:预测的误差,我们希望它越小越好。

从下图可以看出,通过调节AKCA-KC我们可以让我的估计误差以指数性质逼近实际值
007 Kalman Filters
没有KK其实也可以,但是有了KK可以更方便调节,也更快
007 Kalman Filters

Kalman Filters

自动驾驶的例子也是相似的,只不过多了两个噪声wkw_kvkv_k,他们满足正态分布。从概率分布来看,通过将预测值x^k\hat{x}_k和观察值yky_k的概率分布相乘,我们可以得到一个更可靠的预测值x^k\hat{x}_k
007 Kalman Filters
从State observer到Kalman filter,Kalman filter其实就是一种State observer。

  • x^k\hat{x}^-_k:模型预测值的预测值
  • x^k\hat{x}_k:同时考虑测量值和模型预测值的预测值
    007 Kalman Filters
    007 Kalman Filters
    Kalman filter是处理一种动态的过程,也就是不断有新的观测值和测量值,要不断地更新预测值,不断地靠近真实值,如何更新呢
  • Pk{P}_k:模型预测值x^k\hat{x}_k的variance(变动)
  • QQRR:白噪声的方差,也是一种变动
    007 Kalman Filters
    更新过程:
  • 知道了AABBQQu1{u}_1P0{P}_0(初始值)、x^0\hat{x}^-_0(初始值),可以得到x^1\hat{x}^-_1P1{P}^-_1
  • 知道了CCRR、计算得到的P1{P}^-_1,算出K1{K}_1P1{P}_1,根据你的测量值y1{y}_1,计算同时考虑了模型前预测值、测量的后预测值
  • 周而复始

视频介绍了两种极端情况便于理解。

RR=0,这说明测量时,内部温度到外部温度的转移模型非常好,基本没有噪声,那测量值的可信度就非常高
007 Kalman Filters
Pk{P}^-_k=0,这说明数学模型很好,预测出来的变化很小,预测的可信度很高
007 Kalman Filters
这些公式怎么推导的?数学不好,请自行搜索

EKF、UKF、PF

KF是针对线性系统的,对于非线性系统,又出现了一些扩展
007 Kalman Filters
007 Kalman Filters