Main Content

Loop Shaping Using the Glover-McFarlane Method

This example shows how to use ncfsyn to shape the open-loop response while enforcing stability and maximizing robustness. ncfsyn measures robustness in terms of the normalized coprime stability margin computed by ncfmargin.

Plant Model

The plant model is a lightly damped, second-order system.

P(s)=16s2+0.16s+16.

A Bode plot shows the resonant peak.

P = tf(16,[1 0.16 16]);
bode(P)

Figure contains 2 axes. Axes 1 contains an object of type line. This object represents P. Axes 2 contains an object of type line. This object represents P.

Design Objectives and Initial Compensator Design

The design objectives for the closed-loop are the following.

  • Insensitivity to noise, including 60dB/decade attenuation beyond 20 rad/sec

  • Integral action and a bandwidth of at least 0.5 rad/s

  • Gain crossover frequencies no larger than 7 rad/s

In loop-shaping control design, you translate these requirements into a desired shape for the open-loop gain and seek a compensator that enforces this shape. For example, a compensator consisting of a PI term in series with a high-frequency lag component achieves the desired loop shape.

K_PI = pid(1,0.8);
K_rolloff = tf(1,[1/20 1]);
Kprop = K_PI*K_rolloff;
bodemag(P*Kprop); grid

Figure contains an axes. The axes contains an object of type line. This object represents untitled1.

Unfortunately, the compensator Kprop does not stabilize the closed-loop system. Examining the closed-loop dynamics shows poles in the right half-plane.

pole(feedback(P*Kprop,1))
ans = 4×1 complex

 -20.6975 + 0.0000i
   0.4702 + 5.5210i
   0.4702 - 5.5210i
  -0.4029 + 0.0000i

Enforcing Stability and Robustness with ncfsyn

You can use ncfsyn to enforce stability and adequate stability margins without significantly altering the loop shape. Use the initial design Kprop as loop-shaping pre-filter. ncfsyn assumes a positive feedback control system (see ncfsyn), so flip the sign of Kprop and of the returned controller.

[K,~,gamma] = ncfsyn(P,-Kprop);
K = -K;   % flip sign back
gamma
gamma = 1.9885

A value of the performance gamma less than 3 indicates success (modest gain degradation along with acceptable robustness margins). The new compensator K stabilizes the plant and has good stability margins.

allmargin(P*K)
ans = struct with fields:
     GainMargin: [6.3267 11.1183]
    GMFrequency: [1.6110 15.1526]
    PhaseMargin: [80.0229 -99.6598 63.7949]
    PMFrequency: [0.4471 3.1461 5.2318]
    DelayMargin: [3.1238 1.4443 0.2128]
    DMFrequency: [0.4471 3.1461 5.2318]
         Stable: 1

With gamma approximately 2, the expect at most 20*log10(gamma) = 6dB gain reduction in the high-gain region and at most 6dB gain increase in the low-gain region. The Bode magnitude plot confirms this. Note that ncfsyn modifies the loop shape mostly around the gain crossover to achieve stability and robustness.

subplot(1,2,1)
bodemag(Kprop,'r',K,'g',{1e-2,1e4}); grid
legend('Initial design','NCFSYN design')
title('Controller Gains')
subplot(1,2,2)
bodemag(P*Kprop,'r',P*K,'g',{1e-3,1e2}); grid
legend('Initial design','NCFSYN design')
title('Open-Loop Gains')

Figure contains 2 axes. Axes 1 contains 2 objects of type line. These objects represent Initial design, NCFSYN design. Axes 2 contains 2 objects of type line. These objects represent Initial design, NCFSYN design.

Figure 1: Compensator and open-loop gains.

Impulse Response

With the ncfsyn compensator, an impulse disturbance at the plant input is damped out in a few seconds. Compare this response to the uncompensated plant response.

subplot(1,2,1)
impulse(feedback(P,K),'b',P,'r',5);
legend('Closed loop','Open loop')

Figure contains 2 axes. Axes 1 contains 2 objects of type line. These objects represent Initial design, NCFSYN design. Axes 2 contains 2 objects of type line. These objects represent Closed loop, Open loop.

subplot(1,2,2);
impulse(-feedback(K*P,1),'b',5)
title('Control action')

Figure contains 2 axes. Axes 1 contains 2 objects of type line. These objects represent Closed loop, Open loop. Axes 2 contains an object of type line. This object represents untitled1.

Figure 2: Response to impulse at plant input.

Sensitivity Functions

The closed-loop sensitivity and complementary sensitivity functions show the desired sensitivity reduction and high-frequency noise attenuation expressed in the closed-loop performance objectives.

S = feedback(1,P*K);
T = 1-S;
clf
bodemag(S,T,{1e-2,1e2}), grid
legend('S','T')

Figure contains an axes. The axes contains 2 objects of type line. These objects represent S, T.

Conclusion

In this example, you used the function ncfsyn to adjust a hand-shaped compensator to achieve closed-loop stability while approximately preserving the desired loop shape.

See Also

|