卡尔曼滤波是一种最优的递归数据处理算法。对于解决大多数问题,他是最好的,最有效率的,甚至是最有用的。它已经被广泛应用了30多年,包括机器人导航、控制、传感器数据融合甚至军用雷达系统和导弹跟踪。近年来,它被应用于计算机图像处理,如人脸识别、图像分割、图像边缘检测等。
最佳线性滤波理论起源于20世纪40年代美国科学家维纳和前苏联科学家K等人的研究工作,后世统称为维纳滤波理论。理论上,维纳滤波最大的缺点是必须使用无限过去的数据,不适合实时处理。为了克服这一缺点,卡尔曼在20世纪60年代将状态空间模型引入滤波理论,并推导出一套递归估计算法,后来被称为卡尔曼滤波理论。卡尔曼滤波是以最小均方误差为最佳估计准则的递归估计算法。其基本思想是:利用信号和噪声的状态空间模型,利用前一时刻的估计值和当前时刻的观测值,更新状态变量的估计,求出当前时刻的估计值。适用于实时处理和计算机操作。
设线性时变系统的离散状态保护和观测方程如下:
X(k)=F(k,k-1) X(k-1) T(k,k-1) U(k-1)
Y(k)=H(k) X(k) N(k)
在…之中
X(k)和Y(k)分别是k时刻的状态向量和观测向量。
F(k,k-1)是一个状态转移矩阵。
U(k)是时间k的动态噪声。
T(k,k-1)是系统控制矩阵。
H(k)是k时刻的观测矩阵。
N(k)是k时刻的观测噪声。
那么卡尔曼滤波的算法流程如下:
估计x (k)=f (k,k-1) x (k-1)
计算预先估计的协方差矩阵
c(k)^=f(k,k-1)c(k)f(k,k-1)' t(k,k-1)Q(k)T(k,k-1)
q(k)=U(k)U(k)
计算卡尔曼增益矩阵
k(k)=c(k)^h(k)'[h(k)c(k)^h(k)' r(k)]^(-1)
r(k)=N(k)N(k)
更新
x(k)~=x(k)^ k(k)[y(k)-h(k)x(k)^]
最新估计协同矩阵
c(k)~=[i-k(k)h(k)]c(k)^[i-k(k)h(k)]' k(k)r(k)k(k)
X(k ^ 1)=X(k)~
C(k 1)=C(k)~