卡尔曼滤波器使用系统的动态模型(例如,运动的物理定律),该系统的已知控制输入以及多个顺序的测量值(例如来自传感器的测量值)来形成对系统变化量(其状态)更好的估计,其精度比仅使用一种测量获得的估算值高。它是一种常见的
感测器融合和
数据融合算法。
感测器数据的杂讯,描述系统演化的方程式的近似值以及未考虑所有因素的外部因素都限制了确定系统状态的能力。卡尔曼滤波器有效地处理了由于感测器数据杂讯引起的不确定性,并在一定程度上处理了随机外部因素。卡尔曼滤波器使用
加权平均值生成系统状态的估计值,作为系统预测状态和新测量值的平均值。权重的目的是估计值具有更好(即较小)的不确定性的值会被更多“信任”。权重是根据
共变异数来计算的,共变异数是对系统状态预测的估计不确定性的度量。加权平均值的结果是介于预测状态和测量状态之间的新状态估计,并且比任何一个状态都有更好的估计不确定性。在每个时间步重复此过程,新的估计值及其共变异数将通知后续迭代中使用的预测。这意味著卡尔曼滤波器可以
递回地工作,并且只需要系统状态的最后“最佳猜测”,而不是整个历史,就可以计算新状态。
测量和当前状态估计的相对确定性是重要的考虑因素,通常根据卡尔曼滤波器的
增益来讨论滤波器的反应。卡尔曼增益是赋予测量值和当前状态估计值的相对权重,可以进行“调整”以获得特定的性能。增益高时,滤波器将更多的精力放在最新的测量上,因此反应速度更快。增益较低时,滤波器会更紧密地遵循模型预测。在极端情况下,接近1的高增益将导致估计的轨迹更加跳跃,而接近零的低增益将消除杂讯,但会降低反应速度。
在执行滤波器的实际计算时(如下所述),状态估计值和共变异数被编码到
矩阵中,以处理单个计算集中涉及的多个维度。这允许在任何过渡模型或共变异数中表示不同状态变量(例如位置,速度和加速度)之间的线性关系。
基本动态系统模型
卡尔曼滤波建立在
线性代数和
隐马尔可夫模型(hidden Markov model)上。其基本动态系统可以用一个
马尔可夫链表示,该马尔可夫链建立在一个被高斯
噪声(即正态分布的噪声)干扰的
线性算子上的。系统的
状态可以用一个元素为实数的
向量表示。随着
离散时间的每一个增加,这个线性算子就会作用在当前状态上,产生一个新的状态,并也会带入一些噪声,同时系统的一些已知的控制器的控制信息也会被加入。同时,另一个受噪声干扰的线性算子产生出这些隐含状态的可见输出。
为了从一系列有噪声的观察数据中用卡尔曼滤波器估计出被观察过程的内部状态,必须把这个过程在卡尔曼滤波的框架下建立模型。也就是说对于每一步
k,定义
矩阵Fk,
Hk,
Qk,
Rk,有时也需要定义
Bk,如下。
卡尔曼滤波器的模型。圆圈代表向量,方块代表矩阵,星号代表高斯噪声,其协方差矩阵在右下方标出。卡尔曼滤波模型假设k时刻的真实状态是从(k − 1)时刻的状态演化而来,符合下式:
xk=Fkxk−1+Bkuk+wk
其中
- Fk是作用在xk−1上的状态变换模型(/矩阵/向量)。
- Bk是作用在控制器向量uk上的输入-控制模型。
- wk是过程噪声,并假定其符合均值为零,协方差矩阵为Qk的多元正态分布。
wk∼N(0,Qk)
时刻k,对真实状态xk的一个测量zk满足下式:
zk=Hkxk+vk
其中
Hk是观测模型,它把真实状态空间映射成观测空间,
vk是观测噪声,其均值为零,协方差矩阵为
Rk,且服从
正态分布。
vk∼N(0,Rk)
初始状态以及每一时刻的噪声{
x0,
w1, ...,
wk,
v1 ...
vk}都认为是互相
独立的。
实际上,很多真实世界的动态系统都并不确切的符合这个模型;但是由于卡尔曼滤波器被设计在有噪声的情况下工作,一个近似的符合已经可以使这个滤波器非常有用了。更多其它更复杂的卡尔曼滤波器的变种,在下边讨论中有描述。
卡尔曼滤波器
卡尔曼滤波是一种
递归的估计,即只要获知上一时刻状态的估计值以及当前状态的观测值就可以计算出当前状态的估计值,因此不需要记录观测或者估计的历史信息。卡尔曼滤波器与大多数滤波器不同之处,在于它是一种纯粹的
时域滤波器,它不需要像
低通滤波器等
频域滤波器那样,需要在频域设计再转换到时域实现。
卡尔曼滤波器的状态由以下两个变量表示:
- x^k|k
,在时刻k的状态的估计; - Pk|k
,后验估计误差协方差矩阵,度量估计值的精确程度。
卡尔曼滤波器的操作包括两个阶段:预测与更新。在预测阶段,滤波器使用上一状态的估计,做出对当前状态的估计。在更新阶段,滤波器利用对当前状态的观测值优化在预测阶段获得的预测值,以获得一个更精确的新估计值。
预测
x^k|k−1=Fkx^k−1|k−1+Bkuk
(预测状态)Pk|k−1=FkPk−1|k−1FkT+Qk
(预测估计协方差矩阵)
更新
首先要算出以下三个量:
y~k=zk−Hkx^k|k−1
(测量残差)Sk=HkPk|k−1HkT+Rk
(测量残差协方差)Kk=Pk|k−1HkTSk−1
(最优卡尔曼增益)然后用它们来更新滤波器变量x与P:
x^k|k=x^k|k−1+Kky~k
(更新的状态估计)Pk|k=(I−KkHk)Pk|k−1
(更新的协方差估计)使用上述公式计算Pk|k

仅在最优卡尔曼增益的时候有效。使用其他增益的话,公式要复杂一些,请参见
推导。
不变量(Invariant)
如果模型准确,而且x^0|0

与P0|0

的值准确的反映了最初状态的分布,那么以下不变量就保持不变:所有估计的误差均值为零
- E[xk−x^k|k]=E[xk−x^k|k−1]=0

- E[y~k]=0

- Pk|k=cov(xk−x^k|k)

- Pk|k−1=cov(xk−x^k|k−1)

- Sk=cov(y~k)

请注意,其中E[a]

表示a

的期望值, cov(a)=E[aaT]

。
实例
考虑在无摩擦的、无限长的直轨道上的一辆车。该车最初停在位置0处,但时不时受到随机的冲击。每隔
Δt秒即测量车的位置,但是这个测量是非精确的;想建立一个关于其位置以及
速度的模型。来看如何推导出这个模型以及如何从这个模型得到卡尔曼滤波器。
因为车上无动力,所以可以忽略掉Bk和uk。由于F、H、R和Q是常数,所以时间下标可以去掉。
车的位置以及速度(或者更加一般的,一个粒子的运动状态)可以被线性状态空间描述如下:
xk=[xx˙]
其中x˙

是速度,也就是位置对于时间的导数。
假设在(
k − 1)时刻与
k时刻之间,车受到
ak的加速度,其符合均值为0,标准差为
σa的
正态分布。根据
牛顿运动定律,可以推出
xk=Fxk−1+Gak
其中
F=[1Δt01]
且
G=[Δt22Δt]
可以发现
Q=cov(Ga)=E[(Ga)(Ga)T]=GE[a2]GT=G[σa2]GT=σa2GGT
(因为σa是一个标量)。在每一时刻,对其位置进行测量,测量受到噪声干扰。假设噪声服从正态分布,均值为0,标准差为σz。
zk=Hxk+vk
其中
H=[10]
且
R=E[vkvkT]=[σz2]
如果知道足够精确的车最初的位置,那么可以初始化
x^0|0=[00]
并且,若让滤波器知道确切的初始位置,可给出一个协方差矩阵:
P0|0=[0000]
如果不确切的知道最初的位置与速度,那么协方差矩阵可以初始化为一个对角线元素是B的矩阵,B取一个合适的比较大的数。
P0|0=[B00B]
此时,与使用模型中已有信息相比,滤波器更倾向于使用初次测量值的信息。
推导
推导后验协方差矩阵
按照上边的定义,从误差协方差Pk|k

开始推导如下:
Pk|k=cov(xk−x^k|k)
代入x^k|k

Pk|k=cov(xk−(x^k|k−1+Kky~k))
再代入 y~k

Pk|k=cov(xk−(x^k|k−1+Kk(zk−Hkx^k|k−1)))
与zk

Pk|k=cov(xk−(x^k|k−1+Kk(Hkxk+vk−Hkx^k|k−1)))
整理误差向量,得
Pk|k=cov((I−KkHk)(xk−x^k|k−1)−Kkvk)
因为测量误差vk与其他项是非相关的,因此有
Pk|k=cov((I−KkHk)(xk−x^k∣k−1))+cov(Kkvk)
Pk|k=(I−KkHk)cov(xk−x^k|k−1)(I−KkHk)T+Kkcov(vk)KkT
使用不变量Pk|k-1以及Rk的定义这一项可以写作 :
Pk|k=(I−KkHk)Pk|k−1(I−KkHk)T+KkRkKkT

这一公式对于任何卡尔曼增益Kk都成立。如果Kk是最优卡尔曼增益,则可以进一步简化,请见下文。
最优卡尔曼增益的推导
卡尔曼滤波器是
最小均方误差估计器,后验状态误差估计(英文:
a posteriori state estimate)是
xk−x^k|k
最小化这个矢量幅度平方的期望值,E[|xk−x^k|k|2]

,这等同于最小化后验估计协方差矩阵
Pk|
k的
迹(trace)。将上面方程中的项展开、抵消,得到:
Pk|k
=Pk|k−1−KkHkPk|k−1−Pk|k−1HkTKkT+Kk(HkPk|k−1HkT+Rk)KkT
=Pk|k−1−KkHkPk|k−1−Pk|k−1HkTKkT+KkSkKkT
当
矩阵导数是0的时候得到
Pk|
k的
迹(trace)的最小值:
dtr(Pk|k)dKk=−2(HkPk|k−1)T+2KkSk=0
此处须用到一个常用的式子,如下:
dtr(BAC)dA=BTCT
从这个方程解出卡尔曼增益Kk:
KkSk=(HkPk|k−1)T=Pk|k−1HkT
Kk=Pk|k−1HkTSk−1
后验误差协方差公式的化简
在卡尔曼增益等于上面导出的最优值时,计算后验协方差的公式可以进行简化。在卡尔曼增益公式两侧的右边都乘以SkKkT得到
KkSkKkT=Pk|k−1HkTKkT
根据上面后验误差协方差展开公式,
Pk|k=Pk|k−1−KkHkPk|k−1−Pk|k−1HkTKkT+KkSkKkT
最后两项可以抵消,得到
Pk|k=Pk|k−1−KkHkPk|k−1=(I−KkHk)Pk|k−1
.这个公式的计算比较简单,所以实际中总是使用这个公式,但是需注意这公式仅在使用最优卡尔曼增益的时候它才成立。如果算术精度总是很低而导致
数值稳定性出现问题,或者特意使用非最优卡尔曼增益,那么就不能使用这个简化;必须使用上面导出的后验误差协方差公式。
与递归贝叶斯估计之间的关系
假设真正的状态是无法观察的
马尔可夫过程,测量结果是从隐性马尔可夫模型观察到的状态。

根据马尔可夫假设,真正的状态仅受最近一个状态影响而与其它以前状态无关。
p(xk|x0,…,xk−1)=p(xk|xk−1)
与此类似,在时刻k测量只与当前状态有关而与其它状态无关。
p(zk|x0,…,xk)=p(zk|xk)
根据这些假设,隐性马尔可夫模型所有状态的概率分布可以简化为:
p(x0,…,xk,z1,…,zk)=p(x0)∏i=1kp(zi|xi)p(xi|xi−1)
然而,当卡尔曼滤波器用来估计状态x时,感兴趣的机率分布,是基于目前为止所有个测量值来得到的当前状态之机率分布
p(xk|Zk−1)=∫p(xk|xk−1)p(xk−1|Zk−1)dxk−1
信息滤波器
在信息滤波器或逆共变异数滤波器中,估计的共变异数和估计状态分别由
信息矩阵和
信息向量代替。 这些定义为:
Yk∣k=Pk∣k−1y^k∣k=Pk∣k−1x^k∣k
同样,预测的共变异数和状态具有等效的信息形式,定义为:
Yk∣k−1=Pk∣k−1−1y^k∣k−1=Pk∣k−1−1x^k∣k−1
以及测量共变异数和测量向量,它们定义为:
Ik=HkTRk−1Hkik=HkTRk−1zk
信息更新现在变得微不足道了。
Yk∣k=Yk∣k−1+Iky^k∣k=y^k∣k−1+ik
信息过滤器的主要优点是,只需将其测量信息矩阵和向量相加即可在每个时间步长过滤N个测量值。
Yk∣k=Yk∣k−1+∑j=1NIk,jy^k∣k=y^k∣k−1+∑j=1Nik,j
为了预测信息过滤器,可以将信息矩阵和向量转换回它们的状态空间等效项,或者可以使用信息空间预测。
Mk=[Fk−1]TYk−1∣k−1Fk−1Ck=Mk[Mk+Qk−1]−1Lk=I−CkYk∣k−1=LkMkLkT+CkQk−1CkTy^k∣k−1=Lk[Fk−1]Ty^k−1∣k−1
如果F和Q是非时变的,则可以将这些值缓存起来,并且F和Q必须是可逆的。
频率加权卡尔曼滤波器
在1930年代,Fletcher和Munson进行了有关不同频率的声音感知的开创性研究。他们的工作导致了在工业杂讯和听力损失调查中加权测得的声音水平的标准方法。此后,已在滤波器和控制器设计中使用了频率 加权,以管理目标频段内的性能。
通常,频率整形函数用于加权指定频段中误差频谱密度的平均功率。 令 y−y^

表示由 传统的卡尔曼滤波器。 同样,让 W

表示因果频率加权传递函数。 最小化 W(y−y^)

是通过简单地构建 W−1y^

而产生的。
W

的设计仍然是一个悬而未决的问题。 一种进行方式是识别产生估计误差的系统,并将 W

设置为等于该系统的倒数。 可以重复执行此过程,以提高均方误差为代价,增加滤波器阶数。可以将相同的技术应用于平滑器。