How can I identify a stable system?
Making a good fit with stable poles is sometimes rather difficult. First
of all, it is quite likely that the data themselves contain details which
drive the identification routine to an unstable fit which is otherwise
the best available fit it LS sense. In other words: within the given quality
of the data, an unstable model is the best approximation. This means that
the data are not good enough to guarantee stability. E.g. in case of slight
nonlinear distortions, the best linear approximation might be non-stable
indeed.
In summary, possible reasons for unstability:
-
nonlinearities
-
special pattern of noise
-
too simple model for a complex system
-
unstability of the system itself (an unstable system can be measured within
a stabilizing feedback loop)
-
local minimum found (very rare)
Therefore, making repeated and improved mesurements (better SNR, odd multisine
etc) is the first advice.
In the identification of high-order systems there is a good chance that
some poles will be driven to the unstable region by the noise or by slight
nonlinearities. A natural instinct of a researcher is to try yo eliminate
these poles. Unfortunately, this is usually not a remedy. Eliminated poles
may leave a bad fit which cannot be corrected any more.
The Frequency Domain System Identification Toolbox offers some (artificial)
tools to force stable solutions. However, we would like to emphasize here
that these are artifical solutions: even reaching the best stable fit is
not guaranteed. However, weakly defined poles (overmodeling) may be effectively
driven to the stable region.
-
Command line
-
request in elis that it stabilizes all the poles by reflection or contraction.
See "help elis", "elis runmod"
Warning! elis will allow the increase of the cost function when imposing
stability. This means that iteration may easily diverge. You may want to
observe the evolution of the cost function (see elis fitinfo), and set
itmax to the desired value in a second iteration cycle.
-
in order to avoid that stabilization destroys the fit, if you are looking
for minimum phase zeros, also request the reflection/contraction of the
zeros
-
along with stabilization, allow the delay be free
-
experiment with different starting values of the delay - usually there
is a delay value which makes the fit stable
-
after an unstable fit with elis (use the new form, see "help elis"), execute
stabmod=stable(model,'with-zeros');
-
Graphical User interface
-
switch UserLevel to Advanced, and request stabilization in elis, with the
above options
-
write a vector of starting values into the delay field (works both with
fixed or variable delay)
In high-order mechanical systems, the system equations may be badly conditioned.
This may cause unstability again. A possible remedy is to switch to orthogonal
polynomials.
-
GUI: choose "Iimproved numerical stability" in the "Estimate Plant Model"
window
-
command line: see "elis runmod".
Back to the
fdident FAQ page Back
to the Developers' Page