首先,介绍一个离散控制过程系统。
该系统可用线性随机差分方程描述:X(k)= AX(k-1)+ BU(k)+ W(k)加上系统的测量值:Z(k)= HX(k) + V(k)在上述两个等式中,X(k)是时刻k的系统状态,U(k)是系统在时刻k的控制量。
A和B是系统参数,对于多模型系统,它们是矩阵。
Z(k)是时刻k的测量值,H是测量系统的参数。
对于多测量系统,H是矩阵。
W(k)和V(k)分别代表过程和测量的噪声。
假设它们是白高斯噪声,它们的协方差是Q,R(这假设它不随系统状态变化而变化)。
卡尔曼滤波器是满足上述条件的最佳信息处理器(线性随机微分系统,均为高斯白噪声)。
让我们使用它们来组合它们的协方差来估计系统的最佳输出(类似于上一节中的温度示例)。
系统的过程模型首先用于预测系统的下一个状态。
假设当前系统状态为k,根据系统模型,可以预测出现在基于系统先前状态的状态:X(k | k-1)= AX(k-1 | k-1)+ BU(k)...........(1)在等式(1)中,X(k | k-1)是从先前状态预测的结果,和X( k-1 | k-1)是先前状态的结果。
U(k)是当前状态的控制量,如果没有控制,则可以是0。
到目前为止,我们的系统结果已经更新,但是对应于X(k | k-1)的协方差尚未更新。
我们使用P来表示协方差:P(k | k-1)= AP(k-1 | k-1)A'+ Q(2)在等式(2)中,P(k | k-1)是协方差对应于X(k | k-1),P(k-1 | k-1)是对应于X(k-1 | k-1)的协方差,A'表示A的转置矩阵,Q是系统过程。
协方差。
等式1,2是卡尔曼滤波器的五个公式中的前两个,它是系统的预测。
现在我们已经预测了当前状态,然后我们收集当前状态的测量值。
结合预测值和测量值,我们可以得到当前状态的最佳估计(k)X(k | k):X(k | k)= X(k | k-1)+ Kg(k)(Z( k)-HX(k | k-1))(3)其中Kg是卡尔曼增益:Kg(k)= P(k | k-1)H'/(HP(k | K-1)H'+ R )...(4)到目前为止,我们已经获得了k状态下的最佳估计X(k | k)。
但是为了继续其他卡尔曼滤波器的操作直到系统处理结束,我们还更新了k状态下X(k | k)的协方差:P(k | k)=(I-Kg(k) )H)P(k | k-1)...(5)I为1的矩阵,对于单个模型单次测量,I = 1.当系统进入k + 1状态时,P(k | k)是式(2)的P(k-1 | k-1)。
以这种方式,算法可以进行自回归操作。
基本上描述了卡尔曼滤波器的原理。
等式1,2,3,4和5是他的五个基本公式。
根据这五个公式,可以容易地实现计算机程序。
举例说明了卡尔曼滤波器的工作过程,并给出了程序仿真结果。
将房间视为系统,然后对系统进行建模。
当然,我们看到的模型不需要非常精确。
我们知道的房间温度与前一刻的温度相同,所以A = 1。
没有控制,所以U(k)= 0。
因此,可以得出结论:X(k | k-1)= X(k-1 | k-1)............(6)等式(2)可以改为:P (k | k-1)= P(k-1 | k-1)+ Q(7)由于测量值是温度计,它直接对应于温度,因此H = 1。
等式3,4和5可以改变为以下:X(k | k)= X(k | k-1)+ Kg(k)(Z(k)-X(k | k-1))。
........(8)Kg(k)= P(k | k-1)/(P(k | k-1)+ R).........(9)P (k | k)=(1-Kg(k))P(k | k-1).........(10)现在我们模拟一组测量值作为输入。
假设房间的真实温度为25度,我模拟了200次测量,平均为25度,但增加了高斯白噪声,标准偏差为几度(图中的蓝线)。
为了使卡尔曼滤波器工作,我们需要告诉卡尔曼两个零时刻的初始值,即X(0 | 0)和P(0 | 0)。
他们的价值观不必过于粗心,只需给出一个,因为随着卡尔曼的工作,X将逐渐趋同。
但是对于P,一般不要取0,因为这可能使得卡尔曼完全相信你给定的X(0 | 0)是系统最优的,因此算法不能收敛。
我选择X(0 | 0)= 1度而P(0 | 0)= 10。
系统的实际温度为25度,如图中黑线所示。
图中的红线是卡尔曼滤波器输出的优化结果(结果在算法Q = 1e-6,R = 1e-1中设置)Kalman_filter Kalman_smoother - 实现RTS方程Learn_kalman - 找到最大似然估计使用EM Sample_lds的参数 - 生成随机样本AR_to_SS - 将阶数k的自回归模型转换为状态空间形式SS_to_AR Learn_AR - 使用最小二乘法找到参数的最大似然估计