时间序列八: 以NASA之名: 卡尔曼滤波器

摘要:
现在,时光飞逝,回到1969年7月,阿姆斯特朗坐在阿波罗11号上飞向月球。在此期间,掌握航天器的位置和速度非常重要,因为只要偏差超过一定阈值,航天器的超高速就会迅速放大偏差,然后航天器就会偏离预定轨道。最后,飞船很有可能飞到太空,再也回不来了。如何在某个时间点获得飞船的位置和速度?在这个关键时刻,荣耀骑士-卡尔曼滤波器出现了。它的出现就是为了解决这些难题。卡尔曼滤波器是如何工作的?
以NASA之名: 卡尔曼滤波器

'That's one small step for man,one giant leap for mankind.'Neil Alden Armstron

目录

引言

二十世纪的阿波罗登月计划在人类历史上是浓墨重彩的一笔, 是人类科学发展极其重要的里程碑. 在此计划中, 阿姆斯特朗在月球上说出了上面的一句话,是对此计划最最恰当的注释. 说起来这个计划很''简单'': 送人到月球转一圈,然后再回来. 这么一个'简单'的计划实施起来得有多困难大家心中早有尺度.而卡尔曼滤波器(Kalman filter)就是其中的功臣.

荣耀骑士

卡尔曼滤波(器)是以其主要贡献者 Rudolf Emil Kalman 命名的. 这个滤波器做什么的呢?

现在,时间闪回到 1969年 七月, 当时 Armstrong 正坐在阿波罗11号中,飞向月球. 在此期间掌握飞船的位置及其速度是非常重要的.因为只要偏差超过一定阈值, 飞船的超高速就会将这偏差迅速放大,进而飞船就会偏离预定轨道,最终,极有可能飞向太空就再也回不来了.

那要如何得到飞船在某个时间点的位置与速度呢?

我们知道地面上的科学家在将阿波罗11号发射升空之前肯定会预先计算飞船每个点的位置,或者一定有一个计算精确的计算公式.但, 无论多么精确的公式都无法包含所有因素,不确定性是无法避免的. 而阿波罗上面肯定会有一套复杂的传感系统来测算飞船的位置与速度, 然而, 传感觉器必然地会有偏差. 也就是说我们会从两种不同的途径获得两套参数(位置与速度), 这两套参数一般是不同的,却又都是不准确的.

我们当然会想到:能不能综合地考虑这两套参数,从而获得一套靠谱的参数,来指导飞船航行? 那这两个参数如何综合考虑呢? 在此关键时刻,荣耀骑士 — 卡尔曼滤波器登场了.它的出现就是解决此等棘手问题的.

卡尔曼滤波器是如何工作的呢? 我们知道科学家的公式是不会错的,只不过外界因素干扰,才使其失准的.因此我们以其为基准,用传感器的参数来对基校准. 传感器的参数也有不确定性. 我们的目的是获得更精准的参数, 故需要在传感参数校正公式参数时,首要任务即是在当前所有信息面前最小化不确定性.这就是卡尔曼滤波器的作用. 至于它是如何最小化不确定性的,就要涉及公式了, 你确定要上吗? 如果是,请继续~

卡尔曼滤波器*

卡尔曼滤波(器)基于线性动态系统,是建立在线性模型上的带有白噪声的马氏链. 其与隐马尔可夫模型(HMM)很相像,最主要的不同点在其隐状态是连续的,而HMM是离散的.

模型:

[left{ egin{array} x_{k} = A_kx_{k-1}+B_k u_k + w_k\ y_k = C_k x_k + v_k end{array} ight. ]

其中所有变量均为矩阵(或向量), (x_k): k 时刻的状态向量; (A_k): 状态转移矩阵; (B_k): 控制矩阵,(u_k): 控制向量; 一般,将此控制部分当作确定部分而不包含在模型中,因此上式可简化为:

[left{ egin{array} x_{k} = A_kx_{k-1} + w_k\ y_k = C_k x_k + v_k end{array} ight. ]

(y_k) : k时刻的观测向量; (C_k) : 观测矩阵; (w_k, v_k)均为零均值白噪声,方差分别为 (Q_k, R_k), 其互不相关,并与初始状态亦不相关:

[w_k : E[w_k] = 0,sigma_k^2 = Q_k;\ v_k: E[v_k] = 0,sigma_k^2 = R_k;\ cov[x_0, w_k] = 0;\ cov(x_0,v_k) = 0;\ E[w_kv_k^T] = 0.\ ]

卡尔曼滤波器即是利用递推方法及状态方程(式1或式2) 寻找最小均方误差状态变量 (x_k) 的估计值 (hat{x}_k):

[ ilde{x}_k = x_k - hat{x}_k\ min E[ ilde{x}_k ilde{x}_k^T] ightarrow hat{x}_k ]

当不考虑白噪声时:

[hat{x}'_k = A_k hat{x}_{k-1}\ hat{y}_k = C_k hat{x}'_k = C_k A_k hat{x}_{k-1} ]

其中 (hat{x}'_k) 为 k 时刻状态的估计值(由上一时刻状态经转移矩阵得到), (hat{y}_k) 为测量值的估计值(由状态估计值推出), 而 (hat{x}_k) 现在称为状态校正后的估计值.

观测向量的误差(也即新息):

[ ilde{y}_k = y_k - hat{y}_k ]

用观测值来校正状态变量:

[egin{array} \ hat{x}_k &=&A_k hat{x}_{k-1} + H_k (y_k - hat{y}_k)\ &=&A_k hat{x}_{k-1} + H_k (y_k - C_k A_k hat{x}_{k-1}) end{array} ]

其中, (H_k)称为增益矩阵,即为一新息加权矩阵.

新息(Innovation)( ilde{y}_k)即是在 k 时刻之前没有但在 t 时刻产生的新的新信息. 用代数的语言即是 新息与过去的信息是正交的:

[E[ ilde{y}_ky_j^T] = oldsymbol{O}, qquad 1le j<k ]

而且可以容易的推论出, 新息之间也是正交的:

[E[ ilde{y}_i ilde{y}_j^T] =oldsymbol{O},qquad i e j, andquad 1le i,jle k ]

从而可知, 新息( ilde{y}_k)是一个与k 之前时刻的数据不相关,且有白噪声性质的随机过程.

校正后的状态变量估计误差及其均方值 ((P_k)) 还有未经校正的状态变量估计误差的均方值 ((P_k')):

[egin{array}\ ilde{x}_k &=& x_k - hat{x}_k\ P_k &=& E[ ilde{x}_k ilde{x}_k^T] = E[(x_k - hat{x}_k)(x_k - hat{x}_k)^T] \ P_k' &=& E[(x_k - hat{x}_k')(x_k - hat{x}_k')^T]\ end{array} ]

卡尔曼滤波器即是最小化 (P_k)(不确定性) 的方式来得到 (H_k) ,最终得到 (hat{x}_k) :

[min P_k ightarrow H_k ightarrow hat{x}_k ]

[egin{array}\ ilde{x}_k &=& x_k - hat{x}_k\ &=& A_kx_{k-1} + w_k -(A_k hat{x}_{k-1} + H_k (y_k - C_k A_k hat{x}_{k-1}))\ &=& A_kx_{k-1} + w_k\ &&-(A_k hat{x}_{k-1} + H_k ( C_k (A_k x_{k-1}+w_k)+ v_k - C_k A_k hat{x}_{k-1}))\ &=& (A_k -H_kC_kA_k)(x_{k-1} - hat{x}_{k-1}) + (I - H_kC_k)w_k - H_k v_k\ end{array} ]

偷个懒吧, 接着就是'暴力'推导, 没有什么技术含量, 只看你有没有仔细,否则结果一定会出来.

经过几张(A_4) 纸的推导, 你可以得到以下几个重要公式:

[left{egin{array}\ hat{x}_k &=& A_k hat{x}_{k-1} + H_k(y_k - C_kA_khat{x}_{k-1})\ H_k &=& P_k'C_k^T(C_kP'_kC_k^T+R_k)^{-1}\ P_k' &=& A_kP_{k-1}A_k^T + Q_{k-1}\ P_k &=& (I - H_kC_k)P_k' end{array} ight. ]

这就是卡尔曼滤波器的递推公式了.

参考文献:

  1. 现代信号处理(第二版), 张贤达, 2002, 清华大学出版社.
  2. How a Kalman filter works, in pictures, 2015, bzarg.com.
  3. Kalman filter with Real-Time Applications, 2009,Springer.
  4. Understanding the Basis of the Kalman filter via a simple and intuitive derivation.

免责声明:文章转载自《时间序列八: 以NASA之名: 卡尔曼滤波器》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇这个好像、也许、或许、大概、应该、Maybe真的可以算是传说中的简单工厂了吧window 服务(一)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

如何预测股票分析--先知(Prophet)

在上一篇中,我们探讨了自动ARIMA,但是好像表现的还是不够完善,接下来看看先知的力量! 先知(Prophet) 有许多时间序列技术可以用在股票预测数据集上,但是大多数技术在拟合模型之前需要大量的数据预处理。Prophet(先知)由Facebook设计和开发,是一个时间序列预测库,不需要数据预处理,并且非常容易实现。先知的输入是一个带有两列的数据框:日期和...

【时间序列】-航空数据预测

学习预测时序数据,如有侵权,请联系删除。 主要参考: A comprehensive beginner’s guide to create a Time Series Forecast (with Codes in Python)   目的: 翻译学习文章编写方式 学习解决时间序列问题的基本步骤   介绍 时间序列(从现在开始称为TS)被认为是数据科学...

R语言从经济时间序列中用HP滤波器,小波滤波和经验模式分解等提取周期性成分分析

原文链接:http://tecdat.cn/?p=9350 经济时间序列的分析通常需要提取其周期性成分。这篇文章介绍了一些方法,可用于将时间序列分解为它们的不同部分。它基于《宏观经济学手册》中Stock和Watson(1999)关于商业周期的章节,但也介绍了一些较新的方法,例如汉密尔顿(2018)替代HP滤波器,小波滤波和经验模式分解。 数据 我使用从...

入选 SIGMOD2021 的时间序列多周期检测通用框架 RobustPeriod 如何支撑阿里业务场景?

简介: 本文除了介绍RobustPeriod的核心技术亮点,还将重点解释如何将它构筑成服务来解决阿里云的业务痛点。 近日,由阿里云计算平台和阿里云达摩院合作的时序多周期检测相关论文RobustPeriod: Robust Time-Frequency Mining for Multiple Periodicity Detection被SIGMOD 2021...

PromQL-基础

一【简介】 Prometheus提供了一种称为PromQL(Prometheus查询语言)的函数查询语言,允许用户查询和聚合时间序列类型的数据。表达式的结果即可以显示为图形,也可在Prometheus的表达式浏览器中显示为表格数据,除此之外,也可以由外部系统通过HTTP API使用。 二 数据类型 1、即时向量(Instant vector):一组时间序列...

python代写用广义加性模型GAM进行时间序列分析

原文:http://tecdat.cn/?p=4130 每当你发现一个与时间对应的趋势时,你就会看到一个时间序列。研究金融市场表现和天气预报的事实上的选择,时间序列是最普遍的分析技术之一,因为它与时间有着不可分割的关系 - 我们总是有兴趣预测未来。 时间相关模型一种直观的预测方法是参考最近的时间点。今天的股价可能会比昨天的价格更接近五年前的价格。因此,在...