gusucode.com > 有关交互多模型matlab实现算法,仿真场景可以自己设计 > code/test_imm.m

    %测试当前统计模型算法程序
clear;
clc;
close all;
T=1;%采样时间
M=10;%monto-carlo仿真次数

RMSE_ca_cv=zeros(3,201);
RMSE_measurement=zeros(1,201);

for kk=1:M

% create_data1;
create_data2;
% create_data3;
% create_data4;

H=[1 0 0];
sigma_z=100;

for i=1:N
    v=sigma_z*randn;
    Z(:,i)=H*X(:,i)+v;
    RMSE_measurement(:,i)=RMSE_measurement(:,i)+v.^2;
end

%以下用CA和CV模型
 u_input=[1/2 1/2]';
% u_input=[0.05 0.05 0.85 0.05]';
temp_p=diag([100^2 10^2 10]);
model_number=2;%模型数
x1=[];
p1=[];
 for i=1:model_number
    x1=[x1 X00];
    p1=[p1 temp_p];
 end
u_output_ca_cv=zeros(model_number,1);

 for m=2:N
    %中间是imm算法
    [X_estimate_ca_cv(:,m),P_ca_cv(:,:,m),x_model_filter_ca_cv,p_model_filter_ca_cv,u_output_ca_cv(:,m)]=imm_ca_cv(Z(:,m),x1,p1,u_input);
    %imm结束
    x1=x_model_filter_ca_cv;
    p1=p_model_filter_ca_cv;
    u_input=u_output_ca_cv(:,m);
    %计算RMSE
    RMSE_ca_cv(:,m)=RMSE_ca_cv(:,m)+(X_estimate_ca_cv(:,m)-X(:,m)).^2;
 end

end

%输出误差曲线

RMSE_ca_cv=sqrt(RMSE_ca_cv/M);
RMSE_measurement=sqrt(RMSE_measurement/M);

%输出图形
i=1:N;
subplot(3,1,1)
plot(i,RMSE_ca_cv(1,i));
suplot(3,1.2)
plot(i,RMSE_ca_cv(2,i));
subplot(3,1,3)
plot(i,RMSE_ca_cv(1,i),i,RMSE_measurement(1,i),':');
legend('CA和CV结合的多模型','量测');