卡尔曼滤波的一个典型实例是从一组有限的,包含噪声的,对物体位置的观察序列(可能有偏差)预测出物体的位置的坐标及速度。在很多工程应用(如
雷达、
计算机视觉)中都可以找到它的身影。同时,卡尔曼滤波也是
控制理论以及
控制系统工程中的一个重要课题。
例如,对于
雷达来说,人们感兴趣的是其能够跟踪目标。但目标的位置、速度、加速度的测量值往往在任何时候都有噪声。卡尔曼滤波利用目标的动态信息,设法去掉噪声的影响,得到一个关于目标位置的好的
估计。这个估计可以是对当前目标位置的估计(滤波),也可以是对于将来位置的估计(预测),也可以是对过去位置的估计(插值或平滑)。
Z=(1:100); %观测值
noise=randn(1,100); %方差为1的高斯噪声
Z=Z+noise;
X=[0;0]; %状态
P=[10;01]; %状态协方差矩阵
F=[11;01]; %状态转移矩阵
Q=[0.0001,0;00.0001]; %状态转移协方差矩阵
H=[10]; %观测矩阵
R=1; %观测噪声方差
figure;
hold on;
fori=1:100
X_ = F*X;
P_ = F*P*F'+Q;
K = P_*H'/(H*P_*H'+R);
X = X_+K*(Z(i)-H*X_);
P = (eye(2)-K*H)*P_;
plot(X(1), X(2)); %画点,横轴表示位置,纵轴表示速度
end