Documentation of iddemo2


Global Index (short | long) | Local contents | Local Index (short | long)


Help text

   In this example we compare several different methods of
   identification.

Cross-Reference Information

This script calls This script is called by

Listing of script iddemo2


echo on

echo off
%   Lennart Ljung
%   Copyright (c) 1986-98 by The MathWorks, Inc.
%   $Revision: 2.3 $  $Date: 1997/12/02 03:43:09 $
echo on

%       We start by forming some simulated data.  Here are the
%       numerator and denominator coefficients of the transfer
%       function model of a system:

B = [0 1 0.5];
A = [1 -1.5 0.7];

%       These can be put into the special "theta" structure used by
%       the toolbox:

th0 = poly2th(A,B,[1 -1 0.2]);

%       The third argument, [1 -1 0.2], gives a characterization
%       of the disturbances that act on the system.

pause   % Press any key to continue.


%       Now we generate an input signal U, a disturbance signal E,
%       and simulate the response of the model to these inputs:

u = sign(randn(350,1));
e = randn(350,1);
y = idsim([u e],th0);
z = [y u]; % A matrix with the output and inputs as column vectors.

%       Plot first 100 values of the input U and the output Y.

pause, idplot(z,1:100), pause  % Press any key for plot.

%       Now that we have corrupted, simulated data, we can estimate models
%       and make comparisons.  Let's start with spectral analysis.  We
%       invoke SPA which returns a spectral analysis estimate of
%       the transfer function GS and the noise spectrum NSS:

[GS,NSS] = spa(z);

pause, bodeplot(GS), pause   % Press any key for plot.


%       Now use the Least Squares method to find an ARX-model with
%       two poles, one zero, and a single delay on the input:

a2 = arx(z,[2 2 1]);

pause, present(a2), pause   % Press any key to present results.


%       Now use the instrumental variable method (IV4) to find a model
%       with two poles, one zero, and a single delay on the input:

i2 = iv4(z,[2 2 1]);


pause, present(i2), pause     % Press any key to present results.

%       Calculate transfer functions for the two models obtained by
%       ARX and IV4.  Show Bode plots comparing the Spectral Analysis
%       estimate with the ARX and IV4 estimates:

[Ga2,NSa2] = th2ff(a2);         % From ARX
Gi2 = th2ff(i2);                        % From IV4

pause, bodeplot([GS Ga2 Gi2]), pause  % Press any key for plots.


%       Calculate and plot residuals for the model obtained by IV4:

e = resid(z,i2); pause
plot(e), title('Residuals, IV4 method'), pause


%       Now compute second order ARMAX model:

am2 = armax(z,[2 2 2 1]);

pause   % Press any key to continue.

%       Now compute second order BOX-JENKINS model:

bj2 = bj(z,[2 2 2 2 1]);

%       Compute transfer functions and noise spectra for these models:

[Gam2,NSam2] = th2ff(am2);
[Gbj2,NSbj2] = th2ff(bj2);

%       Compare these transfer functions with those obtained by the
%       IV4 method and the spectral analysis method:

pause   % Press any key for plots.

bodeplot([Gam2 Gbj2 Gi2 GS]), pause
bodeplot([NSam2 NSbj2 NSS]), pause,

%       Plot residuals for the ARMAX and BOX-JENKINS models

e1 = resid(z,am2); pause
e2 = resid(z,bj2); pause
plot([e1 e2]), title('ARMAX and BOX-JENKINS residuals'), pause

%       Simulate the ARMAX and BOX-JENKINS models with the real input

yham2 = idsim(u,am2);
yhbj2 = idsim(u,bj2);

pause   % Press any key for plot.

plot([y yham2 yhbj2]), ...
 title('Real output and simulated model outputs '), pause

%       Now we'll compute the poles and zeros of the ARMAX and
%       BOX-JENKINS models

zpam2 = th2zp(am2);
zpbj2 = th2zp(bj2);

        % Press any key for plot.
pause   % Press keys to advance poles and zeros on plot, from the ARMAX
        % model to the Box-Jenkins model.

zpplot([zpam2 zpbj2]), pause,

% Clearly, AM2 and BJ2 both give good residuals and simulated outputs.
% They are also in good mutual agreement. Let's check which has the
% smaller AIC:

[am2(2,1) bj2(2,1)]
pause   % Press any key to continue.

%       Since we generated the data,  we enjoy the luxury of comparing
%       the model to the true system:

[G0,NS0] = th2ff(th0);
zp0 = th2zp(th0);

pause   % Press any key for plots of comparisons.

bodeplot([G0 Gam2]), pause
bodeplot([NS0 NSam2]), pause
zpplot([zp0 zpam2]), pause
echo off
set(gcf,'NextPlot','replace');