home *** CD-ROM | disk | FTP | other *** search
- echo on
- clc
- % 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.
-
- load iddemo6m.mat
-
- % First, take a look at the data:
-
- clf reset
- pause, idplot(z), pause % Press any key for plot.
- clc
- % 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 may be estimated
- % automatically:
-
- nn = [1 2 1];
- seg = segment(z,nn);
-
- pause % Press any key to continue.
- clc
- % Let's take a look at the segmented model. Solid/red line
- % is for the a-parameter. Dashed/green is for b1 and dotted/blue
- % for the parameter b2.
-
- pause, plot(seg), pause % Press any key for plot.
- hold on
- clc
- % We see clearly the jump at sample number 20. 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
- clc
- % It is usually better to provide a guess of the variance r2
- % than to estimate it, and the rule of thumb is that it is
- % better to overestimate it than to underestimate it. Assuming
- % that the variance r2 is 0.1 gives
-
- [seg,v,tvmod] = segment(z,[1 2 1],0.1);
-
- pause % Press any key for plot.
- plot(seg), hold on, plot(pars), hold off, pause
- clc
- % 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.
- clc
- % The SEGMENT M-file is thus an alternative to the recursive
- % algorithms RPEM, RARX etc for tracking time varying systems.
- % It is particularily suited for systems that may change rapidly.
-
- % From the tracking model, SEGMENT estimates the time points when
- % jumps have occured, 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.
- clc
- % 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 horisontal 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.
- clc
- % 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, solid/red: correlation, dashed/green: distance'),pause
- clc
- % 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 may 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);
- clf reset
- pause, plot(s),hold on, pause % Press any key for plot.
- clc
- % 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
- clc
-
- % SEGMENT thus correctly finds that no jumps have occured, and
- % also gives good estimates of the parameters.
-
- pause % Press any key to continue.
-
- set(gcf,'NextPlot','replace');
-
-