H optimal controller synthesis for LTI plant




loopsyn is an H optimal method for loopshaping control synthesis. It computes a stabilizing Hcontroller K for plant G to shape the sigma plot of the loop transfer function GK to have desired loop shape Gd with accuracy γ = GAM in the sense that if ω0 is the 0 db crossover frequency of the sigma plot of Gd(jω), then, roughly,

σ¯(G(jω)K(jω))1γ σ¯(Gd(jω)) for all ω>ω0(2-14)
σ¯(G(jω)K(jω))γ σ¯(Gd(jω)) for all ω>ω0(2-15)

The STRUCT array INFO returns additional design information, including a MIMO stable min-phase shaping pre-filter W, the shaped plant Gs = GW, the controller for the shaped plant Ks = WK, as well as the frequency range {ωmin,ωmax} over which the loop shaping is achieved

Input Argument



LTI plant


Desired loop-shape (LTI model)


(optional, default {0,Inf}) Desired frequency range for loop-shaping, a 1-by-2 cell array {ωmin,ωmax}; ωmax should be at least ten times ωmin

Output Argument



LTI controller

CL= G*K/(I+GK)

LTI closed-loop system


Loop-shaping accuracy (GAM ≥ 1, with GAM=1 being perfect fit


Additional output information


LTI pre-filter W satisfying σ(Gd) = σ (GW) for all ω;

W is always minimum-phase.


LTI shaped plant: Gs = GW.


LTI controller for the shaped plant: Ks = WK.


{ωmin,ωmax} cell-array containing the approximate frequency range over which loop-shaping could be accurately achieved to with accuracy G. The output INFO.range is either the same as or a subset of the input range.


expand all

Optimal loopsyn Loop-Shaping Control

Calculate the optimal loopsyn loop shaping control for a 5-state, 4-output, 5-input plant with a full-rank nonmininum-phase zero at s = 10.

s = tf('s');
w0 = 5;
Gd = 5/s;                           % desired bandwidth w0=5
G =((s-10)/(s+100))*rss(3,4,5);     % 4-by-5 non-min-phase plant
[K,CL,GAM,INFO] = loopsyn(G,Gd);
sigma(G*K,'r',Gd*GAM,'k-.',Gd/GAM,'k-.',{.1,100})  % plot result

This plot shows that the controller K optimally fits sigma(G*K). The controller falls between sigma(Gd)+ GAM and sigma(Gd)- GAM (expressed in dB). In this example, GAM = 2.0423 = 6.2026 dB.


The plant G must be stabilizable and detectable, must have at least as many inputs as outputs, and must be full rank; i.e,

  • size(G,2) size(G,1)

  • rank(freqresp(G,w)) = size(G,1) for some frequency w.

The order of the controller K can be large. Generically, when Gd is given as a SISO LTI, then the order NK of the controller K satisfies

NK = NGs + NW

= NyNGd + NRHP + NW

= NyNGd + NRHP + NG


  • Ny denotes the number of outputs of the plant G.

  • NRHP denotes the total number of nonstable poles and nonminimum-phase zeros of the plant G, including those on the stability boundary and at infinity.

  • NG, NGs, NGd and NW denote the respective orders of G, Gs, Gd and W.

Model reduction can help reduce the order of K — see reduce and ncfmr.

More About

expand all


Using the GCD formula of Le and Safonov [1], loopsyn first computes a stable-minimum-phase loop-shaping, squaring-down prefilter W such that the shaped plant Gs = GW is square, and the desired shape Gd is achieved with good accuracy in the frequency range {ωmin,ωmax} by the shaped plant; i.e.,

σ(Gd) ≈ σ(Gs) for all ω ∊ {ωmin,ωmax}.

Then, loopsyn uses the Glover-McFarlane [2] normalized-coprime-factor control synthesis theory to compute an optimal "loop-shaping" controller for the shaped plant via Ks=ncfsyn(Gs), and returns K=W*Ks.

If the plant G is a continuous time LTI and

  1. G has a full-rank D-matrix, and

  2. no finite zeros on the jω-axis, and

  3. {ωmin,ωmax}=[0,∞],

then GW theoretically achieves a perfect accuracy fit σ(Gd) = σ(GW) for all frequency ω. Otherwise, loopsyn uses a bilinear pole-shifting bilinear transform [3] of the form


which results in a perfect fit for transformed Gshifted and an approximate fit over the smaller frequency range [ωmin,ωmax] for the original unshifted G provided that ωmax >> ωmin. For best results, you should choose ωmax to be at least 100 times greater than ωmin. In some cases, the computation of the optimal W for Gshifted may be singular or ill-conditioned for the range [ωmin,ωmax], as when Gshifted has undamped zeros or, in the continuous-time case only, Gshifted has a D-matrix that is rank-deficient); in such cases, loopsyn automatically reduces the frequency range further, and returns the reduced range [ωmin,ωmax] as a cell array in the output INFO.range={ωmin,ωmax}


[1] Le, V.X., and M.G. Safonov. Rational matrix GCD's and the design of squaring-down compensators—a state space theory. IEEE Trans. Autom.Control, AC-36(3):384–392, March 1992.

[2] Glover, K., and D. McFarlane. Robust stabilization of normalized coprime factor plant descriptions with H-bounded uncertainty. IEEE Trans. Autom. Control, AC-34(8):821–830, August 1992.

[3] Chiang, R.Y., and M.G. Safonov. H synthesis using a bilinear pole-shifting transform. AIAA J. Guidance, Control and Dynamics, 15(5):1111–1115, September–October 1992.

See Also


Was this topic helpful?