?? sitrun.m
字號(hào):
function [sys0,sys1]=SITrun(mode)
clc;
ts=0.001; %數(shù)據(jù)采樣周期
N=1000; %數(shù)據(jù)采樣點(diǎn)數(shù)
if mode==0
load SIdata.mat %導(dǎo)入用于模型辨識(shí)的數(shù)據(jù)
servo=iddata(z,u,ts);
servo.InputName='position';
servo.OutputName='distance';
ze=servo(1:N);
%figure, plot(ze(1:1000))
%ze=dtrend(ze);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%ARX模型辨識(shí)及最優(yōu)模型選擇
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
nns=[1 1 0];nnt=[10 10 0]; %設(shè)置ARX模型結(jié)構(gòu)參數(shù)的范圍
%獲取模型結(jié)構(gòu)參數(shù)范圍
nas=nns(1);nat=nnt(1);
nbs=nns(2);nbt=nnt(2);
nk=nns(3);
if (nat-nas+1)*(nbt-nbs+1)>150
return
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%ARX模型檢驗(yàn)及最優(yōu)模型選擇
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
temp=0;
for k1=nas:nat
for k2=nbs:nbt
m11=arx(ze,[k1 k2 nk]); %采用基于最小二乘法估計(jì)的ARX模型辨識(shí)
[yh,fit]=compare(ze,m11); %計(jì)算不同結(jié)構(gòu)模型的的適應(yīng)度
if fit>temp
temp=fit;m1=m11; %選擇適應(yīng)度最高的模型
nn=[k1 k2 nk];
end
clc;
end
end
%figure, compare(ze,m); %模型檢驗(yàn)
[yh1,fit1]=compare(ze,m1);
save SIdata.mat
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%ARMAX模型辨識(shí)及最優(yōu)模型選擇
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
disp('按任一鍵繼續(xù)!')
pause
nns=[6 6 6 0];nnt=[10 10 10 0]; %設(shè)置ARMAX模型結(jié)構(gòu)參數(shù)的范圍
%獲取模型結(jié)構(gòu)參數(shù)范圍
nas=nns(1);nat=nnt(1);
nbs=nns(2);nbt=nnt(2);
ncs=nns(3);nct=nnt(3);
nk=nns(4);
if (nat-nas+1)*(nbt-nbs+1)*(nct-ncs+1)>150
return
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%ARMAX模型檢驗(yàn)及最優(yōu)模型選擇
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
temp=0;
for k1=nas:nat
for k2=nbs:nbt
for k3=ncs:nct
m22=armax(ze,[k1 k2 k3 nk]); %采用基于最小二乘法估計(jì)的ARMAX模型辨識(shí)
[yh,fit]=compare(ze,m22); %計(jì)算不同結(jié)構(gòu)模型的的適應(yīng)度
if fit>temp
temp=fit;m2=m22; %選擇適應(yīng)度最高的模型
nn=[k1 k2 k3 nk];
end
clc;
end
end
end
%figure, compare(ze,m); %模型檢驗(yàn)
[yh2,fit2]=compare(ze,m2);
save SIdata.mat %模型及吻合程度存盤
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%BJ模型辨識(shí)及最優(yōu)模型選擇
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
disp('按任一鍵繼續(xù)!')
pause
nns=[7 8 8 7 0];nnt=[10 10 10 10 0]; %設(shè)置BJ模型結(jié)構(gòu)參數(shù)的范圍
%獲取模型結(jié)構(gòu)參數(shù)范圍
nbs=nns(1);nbt=nnt(1);
ncs=nns(2);nct=nnt(2);
nds=nns(3);ndt=nnt(3);
nfs=nns(4);nft=nnt(4);
nk=nns(5);
if (nbt-nbs+1)*(nct-ncs+1)*(ndt-nds+1)*(nft-nfs+1)>150
return
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%BJ模型檢驗(yàn)及最優(yōu)模型選擇
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
temp=0;
for k1=nbs:nbt
for k2=ncs:nct
for k3=nds:ndt
for k4=nfs:nft
m33=bj(ze,[k1 k2 k3 k4 nk]); %采用基于最小二乘法估計(jì)的ARMAX模型辨識(shí)
[yh,fit]=compare(ze,m33); %計(jì)算不同結(jié)構(gòu)模型的的適應(yīng)度
if fit>temp
temp=fit;m3=m33; %選擇適應(yīng)度最高的模型
nn=[k1 k2 k3 k4 nk];
end
clc;
end
end
end
end
%figure, compare(ze,m); %模型檢驗(yàn)
[yh3,fit3]=compare(ze,m3);
save SIdata.mat %模型及吻合程度存盤
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%最優(yōu)模型及降階模型分析
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
load SIdata.mat; %導(dǎo)入已辨識(shí)的模型和吻合程度及檢驗(yàn)用的數(shù)據(jù)
svo=iddata(z,u,ts);svo.InputName='position';
svo.OutputName='distance';ze=svo(N+1:N*2);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%最優(yōu)模型選擇,并求取其傳遞函數(shù)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
fit=max([fit1 fit2 fit3]); %選擇吻合程度最高的模型
switch fit
case fit1
m=m1;disp('最優(yōu)模型為ARX模型')
case fit2
m=m2;disp('最優(yōu)模型為ARMAX模型')
case fit3
m=m3;disp('最優(yōu)模型為Box-Jenkins模型')
end
%求最優(yōu)模型的傳遞函數(shù)
my=noisecnv(m);
s=tf(m); %將模型轉(zhuǎn)化為傳遞函數(shù)
sys0=s(1); %最優(yōu)模型的傳遞函數(shù)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%最優(yōu)模型降階,并轉(zhuǎn)化為傳遞函數(shù)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
mj=idmodred(m); %模型降階
mjj=noisecnv(mj);
sy=tf(mjj); %降階模型轉(zhuǎn)化為傳遞函數(shù)
sys1=sy(1); %降階模型的傳遞函數(shù)
disp('降階后模型的傳遞函數(shù):')
sys1
[num,den]=tfdata(sys1);
disp('傳遞函數(shù)的系數(shù)向量:')
num=num{1}
den=den{1}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%最優(yōu)模型及降階后的模型與實(shí)際系統(tǒng)的吻合程度分析
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
disp('檢驗(yàn)數(shù)據(jù)下最優(yōu)模型與實(shí)際系統(tǒng)的吻合程度:')
[yh1,f1]=compare(ze,m);
fit=f1
disp('按任意鍵繼續(xù)!')
pause
disp('檢驗(yàn)數(shù)據(jù)下降階模型與實(shí)際系統(tǒng)的吻合程度:')
[yh1,f1]=compare(ze,mj);
fit=f1
figure,compare(ze,m,mj);
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -