kalman.m

来自「基于卡尔曼滤波器的交通流量分析系统」· M 代码 · 共 43 行

M
43
字号
clear all;
close all;
N=60;                               %采样周期
a=load('speed.txt');%读取速度数据
X(1)=60;
v=randn(1,N);                       %模型噪声
w=randn(1,N)*5;                     %观测噪声
X_est(1)=60;
X_est_1(1)=60;
P(1)=1;
for k=1:N
    Y(k)=a(k);
    if k>1
        X(k)=X(k-1)+v(k-1);          %状态方程
        Y(k)=X(k)+w(k);             %测量方程
        P_1(k)=P(k-1)+cov(v);
        K(k)=P_1(k)/(P_1(k)+cov(w));%卡尔曼增益
        X_est_1(k)=X_est(k-1);
        X_est(k)=X_est_1(k)+K(k)*(Y(k)-X_est_1(k));
        P(k)=(1-K(k))*P_1(k);
    end
    rerr(k)=(X_est_1(k)-X(k))/X(k);
    rerr_1(k)=(X_est(k)-X(k))/X(k);
end
figure(1)
plot(X_est_1,'r');hold on
plot(X,'b');hold on
plot(Y,'g');
axis([0 N 10 100]);
legend('预测值','真实值','测量值');
figure(2)
plot(rerr);
legend('预测相对误差');
figure(3)
plot(X_est,'r');hold on
plot(X,'b');hold on
plot(Y,'g');
axis([0 N 10 100]);
legend('估计值','真实值','测量值');
figure(4)
plot(rerr_1);
legend('估计相对误差');

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?