什么是卡尔曼滤波
卡尔曼滤波的作用是在含有不确定信息的动态系统中,根据上一步状态的最优估计,对系统下一步的走向做出有根据的预测。
在连续变化的系统中使用卡尔曼滤波是非常理想的,它具有占用内存小的优点(除了前一个状态量外,不需要保留其它历史数据),并且速度很快,很适合应用于实时问题和嵌入式系统。
卡尔曼滤波原理
概念
状态变量 x: 表示系统的运动状态,如速度,位置等。
状态协方差矩阵 P: 表示各个状态变量之间的关系,将运动状态看做高斯分布,则状态变量与状态协方差矩阵分别作为高斯分布的均值与方差。
状态协方差噪声 Q: 表示由于外部环境干扰的因素,导致下一时刻状态服从的高斯分布方差的变化。
状态转移矩阵 F: 根据运动方程,时状态变量从上一时刻到下一时刻的变换矩阵。
观测变量 z: 表示系统中当前时刻的传感器的测量值。
观测协方差矩阵 R: 表示各个观测值之间的关系,将观测值看做高斯分布,则观测值与观测协方差矩阵分别作为高斯分布的均值与方差。
状态到观测的转移矩阵 H: 表示从状态变量空间到观测空间的变换矩阵。
原理
以K−1时刻的状态最优估计xK−1,预测K时刻的状态x^K,同时对K时刻的状态进行观测得到观测值zK,利用zK对x^K进行修正,最终得到K时刻的状态最优估计xK. 卡尔曼滤波算法假设状态变量与观测变量都各自符合高斯分布,融合状态变量与观测变量即将两个高斯分布融合为一个高斯分布,得到新的均值和方差,新的均值作为状态最优估计。
1、预测过程,预测K时刻的状态x^K和协方差矩阵PK
预测K时刻的状态x^K
x^K=F⋅xK−1
相应地,K−1时刻的状态协方差矩阵PK−1更新为K时刻的状态预测协方差矩阵P^k。根据协方差矩阵的计算
P^K=F⋅PK−1⋅FT+Q
2、状态更新过程,利用zK对x^K进行修正
将K时刻的状态预测x^K和协方差P^K,变换到观测变量空间
uK=H⋅x^KΣK=H⋅P^K⋅HT
K时刻的观测值和测观测协方差(zK,RK)与空间变换之后的状态预测值和协方差(uK,ΣK)是同空间中的两个高斯分布,融合两个高斯分布得到新的高斯分布的变量和协方差(融合推导见文章底部**“附:两个高斯分布的融合”**)
u=uK+ΣK⋅(ΣK+RK)−1⋅(zK−uK)Σ=ΣK−ΣK⋅(ΣK+RK)−1⋅ΣK
其中u=H⋅xK,Σ=H⋅PK⋅HT.
令K=ΣK⋅(ΣK+RK)−1,则有
H⋅xK=H⋅x^K+K⋅(zK−H⋅x^K)H⋅PK⋅HT=H⋅P^K⋅HT−K⋅ΣK
因此有
K=H⋅P^K⋅HT⋅(H⋅P^K⋅HT+RK)−1xK=x^K+H−1⋅K⋅(zK−H⋅x^K)PK=P^K−H−1⋅K⋅H⋅P^K
令K′=H−1⋅K=P^K⋅HT⋅(H⋅P^K⋅HT+RK)−1,有
K′=P^K⋅HT⋅(H⋅P^K⋅HT+RK)−1xK=x^K+K′⋅(zK−H⋅x^K)PK=P^K−K′⋅H⋅P^K
附:两个高斯分布的融合
两个n维高斯分布X∼(u1,Σ1)和Y∼(u2,Σ2),令融合后的高斯分布为Z∼(u,Σ),其中Z=AX+BY,A+B=I. 则
u=Au1+Bu2Σ=AΣ1AT+BΣ2BT
融合后的高斯分布方差越小,则均值u越接近真实情况。
将A+B=I带入Σ=AΣ1AT+BΣ2BT,得
Σ=AΣ1AT+(I−A)Σ2(I−A)T=A(Σ1+Σ2)AT+Σ2−AΣ2−Σ2AT
令dΣ=0,得
dΣ=(dA)(Σ1+Σ2)AT+A(Σ1+Σ2)(dA)T−(dA)Σ2−Σ2(dA)T=(dA)((Σ1+Σ2)AT−Σ2)+(A(Σ1+Σ2)−Σ2)(dA)T
因此A=Σ2(Σ1+Σ2)−1,B=I−Σ2(Σ1+Σ2)−1.
带入u和Σ的表达式得
u=Au1+Bu2=u2+A(u1−u2)=u2+Σ2(Σ1+Σ2)−1(u1−u2)
Σ=AΣ1AT+BΣ2BT=AΣ1AT+(I−A)Σ2(I−A)T=A(Σ1+Σ2)AT+Σ2−AΣ2−Σ2AT=Σ2AT+Σ2−AΣ2−Σ2AT=Σ2−Σ2(Σ1+Σ2)−1Σ2