求助,Matlab中 ARx模型的使用?
这是个系统辨识方面的,先用resample()对数据长度进行了一致化,之后零均值化,然后应用Arx(),但是为什么拟合的效果这么差呢?还采用了armax(),及相关分析-最小二乘法,都不理想,而且,相关分析-最小二乘过程中,还出现了反相的现象,求助高人指点啊? 急啊:)
Zww.mat 是 原始数据
zww.m是 程序
可以直接运行的。。。。。。。。。。在线等待啊!!!!!!!
急啊!!
弄了一个星期了,就是不知道为什么??? 哪位达人知道的吗? 急啊这是源程序:
clear;clf;
load zww.mat; % 导入原始数据
%out=pressure_out; % 蒸汽压力
%out=tangwen_out; % 炉膛温度
out=t_zhenqi; % 蒸汽温度
%--------------------------------------------------------------------
% in,out是原始的输入输出数据,长度和采样间隔可能不匹配,
% 以长度大的为基准重采样,
% in1,out1是重采样后,数据长度匹配的数据
%--------------------------------------------------------------------
if length(in)~=length(out)
if length(in)<length(out)
in1=DataResample(in,length(in),length(out));% match both demision
out1=out;
else
out1=DataResample(out,length(out),length(in));% 以长度大的为基准重采样
in1=in;
end
else
in1=in;
out1=out;
end
%--------------------------------------------------------------------
% 对in1,out1采用Dtrend分段趋势化方法,作零均值化处理,
% in2,out2为处理后的数据
%--------------------------------------------------------------------
t='; % 对in1作趋势化处理
clf;
plot(t,in1,'r'); % the inital output figure
hold on;
in2=dtrend(in1,1,); % 分段线性趋势化--2 []--1[]--3
plot(t,in2,'b'); % 消除趋势后的数据
hold on;
plot(t,in1-in2,'k:'); % 趋势值
%----------------------------------------------------
clf; % 对out1作趋势化处理
plot(t,out1,'r');
hold on;
out2=dtrend(out1,1,); % 分段线性趋势化--2 []--1[]--3
plot(t,out2,'b'); % 消除趋势后的数据
hold on;
plot(t,out1-out2,'k:'); % 趋势值
%-----------------------------------------------------------------
na=10;
nb=na; % A B的阶次
nk=5; % 纯延迟
nc=10; % 噪声模型阶次
%--------------------------------------------------------------
% 对in2,out2使用arx模型建模,得出二次多项式m_arx
% 使用函数arx(),基于最小二乘估计的ARX模型辨识
%--------------------------------------------------------------
if 0
z0=iddata(out2,in2,14);
m_arx=arx(z0,);
y_model=sim(m_arx,in2);
v_fpe=fpe(m_arx);
end
%---------------------------------------------------------------
% 对in2,out2使用armax模型建模,得出二次多项式m_armax
% 使用函数armax(),估计ARMAX或ARMA模型的参数
%---------------------------------------------------------------
if 0
z0=iddata(out2,in2,14);
m_armax=armax(z0,);
y_model=sim(m_armax,in2);
v_fpe=fpe(m_armax);
end
%---------------------------------------------------------------
% 对in2,out2使用cor_ls模型建模,得出二次多项式m_cor_ls
% 使用函数xcorr()及arx()或armax(),基于相关分析-最小二乘的方法
%---------------------------------------------------------------
if 1
u1=xcorr(in2,in2);
y1=xcorr(in2,out2);
z1=;
m_cor_ls=arx(z1,);
y_model=sim(m_cor_ls,in2); %相关分析
v_fpe=fpe(m_cor_ls);
end
%---------------------------------------------------------------
%
%---------------------------------------------------------------
t=1:1:length(out2);
clf;
plot(t,out2,'b',t,y_model,'k:');% 显示拟合的函数图形
if 0
hold on;
y1=out2-y_model;
plot(y1,'r');
plot(xcorr(y1)); % 显示残差的自相关函数图形
end 没人做过类似的吗? 呜呜。。。 时序中差分定阶是个难点,不同的定阶方式,不同的阶数都会对结果产生很大的影响.楼主可以调整AR模型的阶数在不断对照结果,直到满意. 多维的na,nb,nc怎么确定啊? 我也遇到了这样的问题,你的问题解决了没,用的啥方法阿 没有数据呀
你没上传?
页:
[1]