## Describing Function Analysis Software

Under Construction

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 supported.
• 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 downloaded here; 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 download here. 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) are evaluated.

• The first thing you need is the master routine to generate G(jw,a) models, 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 downloaded here.

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!