卡尔曼滤波(2016.8.4)
卡尔曼滤波,也常被称作线性二次估计(LQE),是一种使用一段时间内的观测数据,其中观测数据中包含统计噪声和其他不确定性,来估计未知变量的值的方法。它比一般的基于单次测量的方法更加精确,因为它使用了Bayes来估计每个时间点上的联合概率分布。这个方法以 Rudolf E. Kálmán命名,他是这个理论的主要贡献者。
卡尔曼滤波器适用很广……
算法的实施过程分两个阶段:在预测阶段,Kalman filter对当前状态变量计算一个估计值,允许不确定的因素。一旦获取到下一时刻的观测值(观测值中包含了一些误差和随机噪声),Kalman filter使用一种叫做加权平均(weighted average)的策略来更新这些估计值,对可靠程度高的数据给予高的权重。算法是迭代的过程,它可以实时运行,只需要当前时刻测量值,之前计算的状态,以及状态的不确定矩阵。除此之外,不需要其他过去的信息了。
Kalman filter不要求误差是高斯分布的。但是,当误差是高斯分布时,滤波器可以求得准确的条件概率估计。
Kalman filter的拓展形式有扩展卡尔曼滤波器(EKF)和无损卡尔曼滤波器(UKF),它们可以适用在非线性系统下。这个模型本质上是一个和隐马尔科夫模型(HMM)类似的贝叶斯模型,但是它的隐含量的状态空间是连续的,而且观测量是高斯分布。
命名以及历史发展(略)
算法概览
卡尔曼滤波器使用系统的动态模型(例如动作的物理定律),给定系统的控制输入,以及多个测量序列(例如从传感器获得),来估计系统的变化量(系统的状态)。这比仅仅使用单次测量数据来估计要准确的多。正因如此,它是一种常见的考虑传感器误差和数据误差的算法。
系统的所有测量和计算在某种程度上都被估计。带噪声的传感器数据,描述系统变化的方程中的估计量,以及与推断系统状态值的不确定无关的外部原因。卡尔曼滤波器使用加权平均来根据新的测量值去估计系统的状态。加权值的大小表示该项的值是否可靠。加权值从协方差中计算得到,协方差可以估计系统状态预测的不确定性。加权平均的结果是一个处在预测状态和测量状态之间的新状态,这比单独一个具有更好的不确定性估计。以上这个步骤每个时间周期计算一次,在后续迭代中使用新的估计和协方差来预测。这表明,卡尔曼滤波器是递归算法,每次只需要上一次的最佳估计,而不是整个递归的全部状态数据,来计算新的状态。
由于测量的确定性很难精确获知,通常使用增益来表示滤波器的行为。卡尔曼增益是一个表示测量值和系统预测值相对置信度的函数,可以为了特定性能手动调节这个值。当增益很高时,滤波器给测量值很高的权重,从而更贴近测量值。当增益很低时,滤波器更加贴近系统预测值,光滑噪声但会减弱响应。极限情况,增益为1时,滤波器完全忽略系统预测,而为0时,完全忽略测量值。
当进行实际计算时,状态估计和协方差都写成矩阵形式,这样可以在一个计算单元中同时处理多维数据。这就可以给出不同状态变量的线性关系的表达(例如位置,速度,加速度)。
应用实例
现要计算一个卡车的准确位置。卡车上装了GPS,能提供包含几米误差的位置估计值。GPS的估计值是有噪声的,值总在实际位置的值附近波动。另外,由于卡车的运动遵循物理规律,它的位置也可以通过速度对时间求积分来获得,利用车轮的旋转以及角度。这个技术叫做航位推测法(dead reckoning)。一般,航位推测法会提供一个卡车位置的较光滑的值,但它会随着时间存在累计误差。
在这个例子中,卡尔曼滤波器工作在2个独立的阶段:预测和更新。在预测阶段,卡车的旧位置数据会根据航位推测法得到一个新的值。这一步不仅仅计算新位置的估计值,新的协方差也会计算得到。也许协方差和卡车的速度成正比,因为当卡车的速度比较高时,航位推测法推测的结果就越不准确,而卡车较慢时会比较准确。在下一步更新时,从GPS获得卡车位置的测量值。当然测量值里面也会有一些不确定性,它相对于上一阶段的预测结果的协方差决定了它会对更新的结果产生多大的影响。理想情况下,如果航位推测法估计的值太偏离实际位置,GPS测量值就应该把值拉回到实际位置,同时不受噪声的影响。
专业描述
卡尔曼滤波器是一个可以从一连串带有噪声的测量值中估计动态线性系统的内部状态的有效递归滤波器。广泛用于工程领域和计量经济领域,从雷达和计算机视觉,到预测宏观经济模型。它在控制领域和控制系统也是很重要的话题。除了线性二次调节器(LQR),卡尔曼滤波器还可以解决线性二次高斯控制问题(LQG)。KF,LQR,LQG是控制理论最基础的问题。
在大多数应用中,隐含变量要远远大于少数的几个可测量的观测量。结合一连串测量值,卡尔曼滤波器可以估计全部内部状态。
在Dempster–Shafer theory中,每个状态方程或者观测量被认为是线性置信函数的特殊形式。卡尔曼滤波器是在联合树(join tree)或者Markov tree中组合线性置信函数的一种特殊形式。除了这些还包括使用Bayes更新状态方程的置信滤波器。
卡尔曼滤波器产生了许多拓展形式,从卡尔曼最初的形式,现在被称为“简单卡尔曼滤波器”,到Schmidt的扩展滤波器,信息滤波器,以及Bierman,Thornton等人创造出的一系列”square-root”滤波器。也许,最简单形式的卡尔曼滤波器使用得最广泛的场合,是锁相环。
深层的动态系统模型(卡尔曼滤波器的数学模型)
卡尔曼滤波器基于离散时间域的线性动态系统模型。它是对基于线性算子(包含可能高斯误差)的markov chain进行的一种建模。系统的状态由实数组成的向量表示。每次离散时间增加一个单位,线性算子就对状态进行一次操作,获得新状态,其中可能混入噪声,也许还包括有关系统的控制信息,如果知道的话。然后,另一个混合了更多噪声的线性算子从真实(隐含)状态中产生一个观测输出。卡尔曼滤波器可以认为是隐马尔科夫模型(hidden Markov model)的模拟连续形式,关键的区别在于,隐含变量在连续空间取值(hmm模型是在离散空间取值)。卡尔曼滤波器和隐马尔科夫模型,具有很强的对偶性,这部分资料可以查看…
要想使用卡尔曼滤波器来估计指定过程的内部状态,而且只给一系列带噪声的观测量,就需要用卡尔曼滤波器的框架给问题建模。意思是,要指定一下矩阵:
Fk,状态转移矩阵;Hk,观测矩阵;Qk,过程噪声的协方差矩阵;Rk,观测量噪声的协方差矩阵;Bk,控制输入模型;k表示每一个采样时刻(each time step)。
卡尔曼滤波器假设时刻k的真实状态值和前一时刻k-1的关系如下表示:
其中,
- Fk是状态转移矩阵,作用在前一个状态x_k-1
- Bk是控制输入矩阵,作用在输入向量u_k
- wk是过程噪声,假定是0均值的正态分布
在时刻k,真实状态x_k对应的观测量(或称测量量)z_k可从下面这个式子求得:
Hk是观测矩阵,把真实状态空间映射到观测空间;v_k是观测噪声,服从如下分布:
初始状态,以及每一步的噪声向量{x_0, w_1,…, w_k, v_1, …, v_k }都被认为是互相独立的。
许多应用中的动态系统并不完全匹配这个模型。实际上,不被建模的动态部分会严重降低滤波器的性能,甚至是输入部分含有未知的随机信号。原因是,不被建模的动态部分依赖输入,这会导致算法不稳定(当它收敛时)。另一方面,独立的白噪声信号也会是算法发散。区分测量噪声和不被建模的动态性能是一个很难的问题,在鲁棒控制框架里的控制理论中被仔细研究。
卡尔曼滤波器背后的数学模型。方块代表矩阵,椭圆代表多维正态分布(附上均值和方差)。没有椭圆包围的值是向量。在一种简化情况下,各种矩阵和时间是无关的,所以可以省略下标,但是卡尔曼滤波器本身是允许它们变化的。
细节
卡尔曼滤波器是一个递归预估算法。意思是说,只需要上一个时刻的估计值和当前测量值来计算当前状态的估计值。和批量估计方法(batch estimation techniques)不同的是,更早的观测量以及估计值都不需要。
表示给定之前时刻m的观测量下,时刻n的估计值。
滤波器的状态由下面两个变量表示:
给定时刻k的观测量,时刻k的后验状态估计;
后验误差协方差矩阵(衡量状态估计的准确性)。
卡尔曼滤波器可以写成一个方程的形式。不过常常从概念上划分为预测和更新两个阶段。预测阶段使用上一个时刻的状态估计来产生当前时刻的状态估计。这个估计的状态也被称为先验状态估计,因为它没有利用当前时刻的观测信息。在更新阶段,当前的先验估计结合当前时刻的观测量,重新定义状态估计。这个改善的估计被称为后验状态估计。
一般,这两个步骤交替进行,预测会一直进行到下一次观测量产生,而更新会结合观测量。然而,这并不是必须的。有时候因为某些原因,没有观测数据,更新阶段就会跳过,而会执行多个预测环节。类似的,如果同一个时刻有多个独立的观测量,就需要在这个时刻进行多次更新(观测矩阵H_k不同)。
预测
先验状态估计
先验估计协方差
更新
Innovation or measurement residual
Innovation (or residual) covariance
理想卡尔曼增益
后验状态估计
后验估计协方差
上面的后验估计协方差仅仅适用于理想卡尔曼增益。其他增益形式的后验估计协方差可以在推导一节中找到。
不变量
如果模型是精确的,和
精确反映了初始状态的分布,那么就有下面这些不变量:
E[*]表示期望。这意味着,所有的估计值的误差期望为0。
同时,有下面这三个式子:
所以协方差矩阵准确表示了估计的协方差。
噪声协方差的估计Qk和Rk
卡尔曼滤波器的实际应用比较困难,因为很难对噪声的协方差矩阵Qk和Rk有一个很准确的估计。关于这些内容,有额外的研究。其中一个比较有意义的是ALS(autocovariance least squares)方法,Matlab有实现代码。
最优化和性能
在以下条件下,卡尔曼滤波器的性能表现最好:
1.模型和真实情况准确匹配。
2.输入噪声是白噪声而且是高斯分布。
3.准确知道噪声分布的协方差。噪声分布的协方差的估计方法有很多,包括上面提到的ALS。
估计了协方差之后,是时候估计协方差的性能了,比如如何提高状态估计的质量。如果卡尔曼滤波器工作在理想状态,输出的预测误差会是白噪声,那么就可以用这个白噪声来估计滤波器的性能。有很多方法可以实现这个目的。如果噪声项不是高斯分布的,对滤波器性能的估计,就要用其他方法了。