Describing Function Analysis Software
This site will be a growing repository of routines for Sinusoidal-Input
Describing Function analysis and design of nonlinear systems. These
routines will provide support for the methods described in my tutorial
article in the Electrical and Electronics Engineering
Encyclopedia, pp. 77-98, John Wiley & Sons, Inc., New York,
2000; you may download an extended version of the
final draft manuscript here (46 pages, 625903 bytes).
At this time, only limit cycle analysis and generation of SIDF
input/output models (quasilinear transfer functions, G(jw,a)) are
Caveat: These routines are working under MATLAB 5.3 and 6.1 under
unix - there is no guarantee they will work under any other versions!
SIDF-based limit cycle analysis --
A classical problem is the missile roll-control problem of Gibson,
as outlined in pp. 14-17 of the EEE Encyclopedia tutorial. This problem
assumes attitude control via ``bang-bang'' control, i.e., reaction thrusters
are modelled as a relay with hysteresis. The MATLAB m-file that produces
the figures in that example (Figs. 6, 7) may be
since I can't keep up with the changes in MATLAB as it evolves over time, I keep the
MATLAB 4.2 version of nyquist, which you may
If you insist on using a newer version, you may have to modify the first routine, gibson_si.m
Note: To simulate the limit cycle rigourously (Fig. 8)
you may download my modelling and simulation package for discontinuous systems;
the software is available here. In fact,
Gibson's missile roll-control problem is one of the examples.
SIDF-based generation of SIDF input/output models by simulation
-- SIDF input/output models of a nonlinear system may be very useful
for control system design. Several methods for their generation are outlined
in pp. 17-22 of the EEE Encyclopedia tutorial; the simplest approach is direct
simulation. The basic idea is to create a quasilinear frequency
response or ``transfer function'', G(jw,a) where w
is the frequency and a the amplitude of the input, by first
coding a simulation model for the nonlinear system that includes the
sinusoidal input a sin(wt) plus two additional states
that will execute Fourier integrals as the system is simulated. The simulation
is run for two cycles of the input, and the Fourier integrals are sampled.
Thereafter, the simulation is stopped every cycle, and the Fourier integrals
are checked for convergence (to eliminate transient effects). When the
convergence test is satisfied, the real and imaginary values of G(jw,a)
The first thing you need is the master routine to generate G(jw,a)
sidf_io.m; download here.
You invoke this routine to identify the simulation model for the nonlinear system and
the set of amplitudes and frequencies under consideration (plus tolerances and the
number of states).
Then you need the routine that generates a single instance of G(jw,a),
ggen.m; download here.
The previous routine, sidf_io, is the shell for ggen.
Finally, you need an example! Here is a simple second-order system with
saturation, lim_filt2.m; download
here, and a script to run it,
run_gjwa.m; download here.
This trivial example exhibits the interesting behaviour that as input ampliture increases
the low-frequency gain decreases (as one might expect) but the bandwidth seems to increase.
The plot showing this behaviour, produced by run_gjwa.m, may be
Return to my Home Page
Information supplied by: James H. Taylor
Updated by: James H. Taylor
Last update: 2002 July 23
Email comments/suggestions to: Jim Taylor (firstname.lastname@example.org)