Documentation of iddemo6


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


Help text

   The command SEGMENT segments data that are generated from
   systems that may undergo abrupt changes. Typical applications
   for data segmentation are segmentation of speech signals (each
   segment corresponds to a phonem), failure detection (the segments
   correspond to operation with and without failures) and estimating
   different working modes of a system.  We shall study a system
   whose time delay changes from two to one.

Cross-Reference Information

This script calls This script is called by

Listing of script iddemo6


echo on

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

load iddemo6m.mat

%       First, take a look at the data:

newplot;
pause, idplot(z), pause   % Press any key for plot.

%       The change takes place at sample number 20, but this is not
%       so easy to see.
%
%       We would like to estimate the system as an ARX-structure model
%       with one a-parameter, two b-parameters and one delay:

%       y(t) + a*y(t-1) = b1*u(t-1) + b2*u(t-2)

%       The information to be given is the data, the model orders
%       and a guess of the variance (r2) of the noise that affects
%       the system. If this is entirely unknown, it can be estimated
%       automatically. Here we set it to 0.1:

nn = [1 2 1];
[seg,v,tvmod] = segment(z,nn,0.1);

pause % Press any key to continue.

%       Let's take a look at the segmented model. Blue(yellow) line
%       is for the a-parameter. Green(magneta) is for b1 and Red(cyan)
%       for the parameter b2.

pause, plot(seg), pause     % Press any key for plot.
hold on

%       We see clearly the jump around sample number 19. b1 goes from
%       0 to 1 and b2 vice versa, which shows the change of the
%       delay. The true values can also be shown:

pause, plot(pars), pause   % Press any key for plot.
hold off
pause

%       The method for segmentation is based on AFMM (adaptive
%       forgetting through multiple models), Andersson, Int. J.
%       Control Nov 1985.  A multi-model approach is used in a first
%       step to track the time varying system. The resulting tracking
%       model could be of interest in its own right, and are given by
%       the third output argument of SEGMENT (tvmod in our case). They
%       look as follows:

pause, plot(tvmod), pause     % Press any key for plot.

%       The SEGMENT M-file is thus an alternative to the recursive
%       algorithms RPEM, RARX etc for tracking time varying systems.
%       It is particularly suited for systems that may change rapidly.

%       From the tracking model, SEGMENT estimates the time points when
%       jumps have occurred, and constructs the segmented model by a
%       smoothing procedure over the tracking model.

%       The two most important "knobs" for the algorithm are r2, as
%       mentioned before, and the guessed probability of jumps, q, the
%       fourth input argument to SEGMENT.  The smaller r2 and the larger
%       q, the more willing SEGMENT will be to indicate segmentation
%       points. In an off line situation, the user will have to try a
%       couple of choices (r2 is usually more sensitive than q). The
%       second output argument to SEGMENT, v, is the loss function for
%       the segmented model (i.e. the estimated prediction error variance
%       for the segmented model). A goal will be to minimize this value.

pause   % Press any key to continue.

%       OBJECT DETECTION IN LASER RANGE DATA
%
%       The reflected signal from a laser (or radar) beam contains
%       information about the distance to the reflecting object. The
%       signals can be quite noisy.  The presence of objects affects
%       both the distance information and the correlation between
%       neighbouring points. (A smooth object increases the
%       correlation between nearby points.)
%
%       In the following we study some quite noisy laser range data.
%       They are obtained by one horizontal sweep, like one line on
%       a TV-screen. The value is the distance to the reflecting object.
%       We happen to know that an object of interest hides between
%       sample numbers 17 and 48.

pause, plot(hline), pause   % Press any key for plot.

%       The eye is not good at detecting the object. We shall use
%       "segment".  First we detrend and normalize the data to a
%       variance about one. (This is not necessary, but it means that
%       the default choices in the algorithm are better tuned.)

hline = dtrend(hline)/200;

%       We shall now build a model of the kind:
%
%          y(t) + a y(t-1) = b
%
%       The coefficient 'a' will pick up correlation information.  The
%       value 'b' takes up the possible changes in level. We thus
%       introduce a fake input of all ones:


[m,n]=size(hline);
zline = [hline ones(m,n)];
s = segment(zline,[1 1 1],0.2);

pause   % Press any key to check segmentation.
subplot(211),plot(hline),title('LASER RANGE DATA')
subplot(212),plot(s)
title('SEGMENTED MODELS, blue/solid: correlation, green/dashed: distance'),pause

%       The segmentation has thus been quite successful.

%       SEGMENT is capable of handling multi-input systems, and of using
%       ARMAX models for the added noise.  We can try this on the test
%       data iddata1.mat (which contains no jumps):

load iddata1.mat
s = segment(z1(1:100,:),[2 2 2 1],1);
newplot;
pause, plot(s),hold on, pause  % Press any key for plot.

%       Compare this with the true values:

pause   % Press any key for plot.
plot([ ones(100,1)*[-1.5 0.7],ones(100,1)*[1 0.5],ones(100,1)*[-1 0.2]]),pause
hold off


%       SEGMENT thus correctly finds that no jumps have occurred, and
%       also gives good estimates of the parameters.

pause   % Press any key to continue.
echo off
set(gcf,'NextPlot','replace');