Replace relay, saturation and dead-zone nonlinearities with an amplitude-dependent equivalent gain N(A), then predict the amplitude and frequency of a limit cycle (self-sustained oscillation) from the intersection of the linear-part locus L(jw) with the critical curve -1/N(A). Change the nonlinearity or the parameters and see in real time whether an oscillation appears.
Parameters
Nonlinear element
Selects the type of describing function N(A)
Nonlinear parameter p
Saturation level M or dead-zone width delta
Input sinusoid amplitude A
Current amplitude at which N(A) is evaluated
Linear-part gain K
Proportional gain of L(s)=K/(s(tau s+1)^2)
Linear-part time constant tau
s
Double-lag time constant. w_pc = 1/tau
Results
—
Describing function N(A) (current amp.)
—
Limit-cycle frequency w (rad/s)
—
Limit-cycle amplitude A_lc
—
Limit-cycle period T (s)
—
Linear gain at crossover |L|
—
Limit-cycle verdict
—
Complex plane — L(jw) and the critical locus -1/N(A)
The blue curve is the linear-part locus L(jw); the orange curve is the critical locus -1/N(A). Their intersection (yellow) is the predicted limit cycle, and the white dot marks the -1 point. The marker travels along L(jw) as w increases.
N(A) is the amplitude-dependent equivalent gain of the nonlinearity (the ratio of the fundamental Fourier component of the output to the input). A limit cycle is predicted where L(jw) crosses the critical curve -1/N(A).
The linear part is a type-1 (integrator) double-lag system. w_pc is the phase-crossover frequency where the phase reaches -180 degrees, and |L| is the gain there.
The limit-cycle amplitude A_lc is found by solving N(A)=1/|L|. For a relay A_lc=4M|L|/pi; for the other elements it is solved numerically by bisection. The period T_lc follows from w_pc.
What is the Describing Function Method?
🙋
I have only ever heard the name "describing function method" in a control class. What does it actually do?
🎓
In a nutshell, it is a trick to "make a nonlinear element pretend to be linear". When you have an element that bends sharply, like a relay, saturation or dead zone, you cannot apply frequency-domain analysis such as the Nyquist diagram directly. So you feed a sinusoid into the nonlinearity, keep only the component of the output at the same frequency (the fundamental harmonic), and treat the ratio to the input as a gain. That is the describing function N(A), and the key point is that its value changes with the amplitude A.
🙋
A gain that changes with amplitude — that is different from an ordinary transfer function. What do we gain from that?
🎓
The biggest payoff is that you can predict limit cycles. A limit cycle is a phenomenon where the system keeps oscillating at a fixed amplitude all by itself, with nothing fed in from outside. In the describing function method you draw the linear-part locus L(jw) and the critical curve -1/N(A) on the same complex plane. If those two cross, an oscillation occurs at the amplitude and frequency of that intersection. The yellow dot where the blue and orange curves meet on the canvas above is exactly that predicted limit cycle.
🙋
I see. With the default relay it says "occurs". Is relay control really that prone to oscillation?
🎓
Very prone. The relay's describing function is N(A)=4M/(pi A), so the gain shoots up as the amplitude A gets small. Think of a thermostat: near the set temperature the relay can only choose "fully on or fully off", so it overshoots and then swings the other way. That back-and-forth is hunting, and it is exactly a limit cycle. With the describing function method you can estimate at the design stage "by how many degrees the room temperature swings and with what period". Increase the time constant tau on the left and you will see the period T=2pi/w_pc grow.
🙋
When I switch to saturation or dead zone, the shape of the N(A) curve is completely different. What does that mean?
🎓
Good observation. Saturation has slope 1 at small amplitudes (N=1), and once the amplitude exceeds the saturation level N falls off — its gain "fades away". The dead zone is the opposite: zero output at small amplitudes (N=0), and N only rises once the input exceeds the dead-zone width. Only the relay has N diverging to infinity as the amplitude gets small. From how N(A) moves you can even argue whether a limit cycle stays stable or vanishes if the amplitude drifts. So the shape of the N(A) curve is the character of the nonlinearity itself.
🙋
Isn't that too convenient? Can the whole of nonlinear control be solved with just this?
🎓
That is where you have to be careful. The describing function method is only an approximation. Because it looks at only the fundamental harmonic of the output and discards the rest, it assumes the linear part attenuates the harmonics well (a strong low-pass character). When that assumption is weak, the prediction drifts. In practice you use the describing function method to get a first read, and always confirm with a time-domain simulation at the end. Think of it as a handy "look-ahead tool".
Frequently Asked Questions
The describing function N(A) approximates a static nonlinearity such as a relay, saturation or dead zone with an equivalent gain that depends on the input amplitude A. You pass a sinusoid of amplitude A through the nonlinearity, keep only the fundamental harmonic of the output (the component at the same frequency), and take the ratio to the input. This lets a nonlinear system be treated almost like a linear one, so limit cycles can be predicted with a Nyquist-style construction.
A limit cycle (self-sustained oscillation) occurs where the linear-part frequency response L(jw) crosses the critical locus -1/N(A). For the linear part used here, L(s)=K/(s(tau s+1)^2), there is a single phase-crossover frequency w_pc=1/tau where the phase reaches -180 degrees and L(jw_pc) is a negative real number. If an amplitude A satisfies N(A)=1/|L(jw_pc)|, a limit cycle is predicted at that amplitude and frequency w_pc.
The describing function of a relay (on-off) element is N(A)=4M/(pi A), so its gain rises as the amplitude A becomes smaller. In systems whose actuator can only output +/-M, such as a thermostat or an on-off valve, the gain is high while the error is small, the control overshoots and then swings back the other way, repeating endlessly. This self-sustained oscillation is hunting, and the describing function method gives an a priori estimate of its amplitude and period.
It is an approximate method. It assumes the linear part is enough of a low-pass filter to attenuate the output harmonics of the nonlinearity (the filter hypothesis), and that the nonlinearity is static (memoryless) and odd-symmetric. Predictions drift when the linear part attenuates harmonics weakly, when several limit cycles lie close together, or when the signal departs strongly from a sinusoid. The final check should always be a time-domain simulation.
Real-World Applications
Design of relay and on-off control: Home thermostats, refrigerator compressor control, on-off control of electric heaters — there are countless systems whose actuator can only choose "fully on or fully off". These inherently carry a limit cycle, and the room temperature or process variable keeps swinging at a fixed amplitude. With the describing function method you can estimate the swing magnitude and period from the hysteresis width and the linear-part time constant at the design stage, and select constants that keep them within an acceptable range.
Actuator saturation and limit cycles: Servo motors, hydraulic valves and power amplifiers all have an upper limit on their output (saturation). In a high-gain feedback system this saturation can cause a sustained oscillation. By replacing the saturation element with the equivalent gain N(A), the describing function method predicts how far the gain can be raised before oscillation sets in, and how large the amplitude becomes if it does — a useful guideline for gain design.
Small oscillations from friction and backlash in mechanical systems: Gear play (backlash) and static or Coulomb friction can be modelled as a dead zone or hysteresis. On positioning stages and machine-tool feed axes these cause small limit cycles near the target (limit-cycle vibration, stick-slip). The describing function method is a classic tool for assessing whether such friction-driven oscillations die out or persist.
Preliminary study and education in nonlinear control: Before running a detailed nonlinear simulation or phase-plane analysis, the describing function method quickly gives a first read on "whether a limit cycle is likely". It is computationally light and gives the intuitive picture of an intersection on the complex plane, so it is widely used in control engineering education as an entry point to nonlinear systems. Plotting L(jw) and -1/N(A) together, as this tool does, makes the meaning of the intersection clear at a glance.
Common Misconceptions and Pitfalls
The biggest misconception is "the describing function method gives an exact solution". The method keeps only the fundamental harmonic of the output and discards the third, fifth and higher harmonics — it is an approximation. This holds only when the "filter hypothesis" is satisfied, i.e. the linear part attenuates the harmonics sufficiently. When harmonic attenuation is weak, the predicted amplitude and frequency of the limit cycle drift from reality. The linear part in this tool is an integrator plus a double lag, so its low-pass character is strong and the approximation is good; in general, however, a describing function result is a "ballpark figure" and the final check should be a time-domain simulation.
Next, assuming "an intersection always means a sustained oscillation". An intersection of L(jw) and -1/N(A) is a "limit-cycle candidate"; whether that oscillation is stable (it returns if a disturbance shifts the amplitude) or unstable (a shift leads it to grow or vanish) is a separate question. Stability is judged by whether, when the amplitude A is nudged up or down near the intersection, the system moves back toward that amplitude. Saturation systems tend to show a stable limit cycle and dead-zone systems an unstable one — the behaviour depends on the character of the nonlinearity. This tool shows the candidate point; a stability assessment requires separate analysis.
Finally, "N(A) is not necessarily real". The relay (without hysteresis), saturation and dead zone treated in this tool are all odd-symmetric single-valued static nonlinearities, so N(A) is real. But for nonlinearities with "memory" such as a relay with hysteresis or backlash, N(A) becomes complex, and the critical locus -1/N(A) leaves the real axis and traces a curve. Because a real relay always has some hysteresis, remember that real-world design often has to go all the way to the complex describing function.
How to Use
Select nonlinearity type (relay, saturation, or dead-zone) and set its parameters using nlParamNum and nlParamRange—for example, relay hysteresis width = 0.5 V or saturation limits ±10 A.
Specify input signal amplitude (inputAmpNum/inputAmpRange, typically 0.1–5.0 units) and linear plant gain (linGainNum/linGainRange, e.g., 2.5 for a proportional controller).
Enter plant time constant (linTauNum/linTauRange in seconds, common range 0.01–1.0 s for industrial servo loops) and run the simulator to compute describing function N(A), limit-cycle frequency ω, amplitude A_lc, and stability verdict.
Worked Example
A DC motor servo with saturation at ±8 V output, linear gain K = 3.2, and plant τ = 0.15 s. Setting inputAmp = 2.0 V gives N(A) ≈ 0.78 (amplitude-dependent nonlinear gain). The simulator predicts limit-cycle amplitude A_lc = 1.85 V at ω = 18.5 rad/s (frequency = 2.94 Hz), period T = 0.34 s, and |L| = 2.49 at crossover, indicating stable oscillation margin. Relay hysteresis of 0.3 V in the same plant increases N(A) to 0.92 and raises A_lc to 2.15 V.
Practical Notes
Describing function accuracy degrades for high nonlinearity (saturation limit much smaller than linear loop gain × input); validate predictions against time-domain simulation for relay deadbands below 0.1 V in high-gain loops.
Dead-zone nonlinearities with threshold ±0.5 units commonly appear in mechanical backlash; increasing plant τ above 0.2 s typically reduces limit-cycle amplitude by 30–50%.
When |L| crossover approaches unity, the system enters bifurcation region—small parameter changes (±2% gain drift) can eliminate or amplify oscillations; document operating point for manufacturing tolerance analysis.