To see how the `loopsyn`

command works in practice to address
robustness and performance tradeoffs, consider again the NASA HiMAT aircraft model taken from the
paper of Safonov, Laub, and Hartmann [8]. The longitudinal dynamics of the
HiMAT aircraft trimmed at 25000 ft and 0.9 Mach are unstable and have two right-half-plane
phugoid modes. The linear model has state-space realization *G*(*s*) = *C*(*Is* – *A*)^{–1}*B* with six states, with the first four states representing angle of attack
(*α*) and attitude angle (*θ*) and their rates of change, and
the last two representing elevon and canard control actuator dynamics — see Aircraft Configuration and Vertical Plane Geometry.

ag = [ -2.2567e-02 -3.6617e+01 -1.8897e+01 -3.2090e+01 3.2509e+00 -7.6257e-01; 9.2572e-05 -1.8997e+00 9.8312e-01 -7.2562e-04 -1.7080e-01 -4.9652e-03; 1.2338e-02 1.1720e+01 -2.6316e+00 8.7582e-04 -3.1604e+01 2.2396e+01; 0 0 1.0000e+00 0 0 0; 0 0 0 0 -3.0000e+01 0; 0 0 0 0 0 -3.0000e+01]; bg = [0 0; 0 0; 0 0; 0 0; 30 0; 0 30]; cg = [0 1 0 0 0 0; 0 0 0 1 0 0]; dg = [0 0; 0 0]; G = ss(ag,bg,cg,dg);

The control variables are elevon and canard actuators (δ_{e} and
δ_{c}). The output variables are angle of attack (α) and attitude angle
(θ).

**Aircraft Configuration and Vertical Plane Geometry**

This model is good at frequencies below 100 rad/s with less than 30% variation between the true aircraft and the model in this frequency range. However as noted in [8], it does not reliably capture very high-frequency behaviors, because it was derived by treating the aircraft as a rigid body and neglecting lightly damped fuselage bending modes that occur at somewhere between 100 and 300 rad/s. These unmodeled bending modes might cause as much as 20 dB deviation (i.e., 1000%) between the frequency response of the model and the actual aircraft for frequency ω > 100 rad/s. Other effects like control actuator time delays and fuel sloshing also contribute to model inaccuracy at even higher frequencies, but the dominant unmodeled effects are the fuselage bending modes. You can think of these unmodeled bending modes as multiplicative uncertainty of size 20 dB, and design your controller using loopsyn, by making sure that the loop has gain less than –20 dB at, and beyond, the frequency ω > 100 rad/s.

The singular value design specifications are

**Robustness Spec.**: –20 dB/decade roll-off slope and –20 dB loop gain at 100 rad/s**Performance Spec.**: Minimize the sensitivity function as much as possible.

Both specs can be accommodated by taking as the desired loop shape

*G*_{d}(*s*)=8/*s*

s = zpk('s'); % Laplace variable s Gd = 8/s; % desired loop shape % Compute the optimal loop shaping controller K [K,CL,GAM] = loopsyn(G,Gd); % Compute the loop L, sensitivity S and complementary sensitivity T: L = G*K; I = eye(size(L)); S = feedback(I,L); % S=inv(I+L); T = I-S; % Plot the results: % step response plots step(T);title('\alpha and \theta command step responses');

% frequency response plots figure; sigma(L,'r--',Gd,'k-.',Gd/GAM,'k:',Gd*GAM,'k:',{.1,100}) legend('\sigma(L) loopshape',... '\sigma(Gd) desired loop',... '\sigma(Gd) \pm GAM, dB');

figure; sigma(T,I+L,'r--',{.1,100}) legend('\sigma(T) robustness','1/\sigma(S) performance')

The number ±GAM, dB (i.e., 20log10(GAM)) tells you the accuracy with which your
`loopsyn`

control design matches the target desired loop:

$$\begin{array}{l}\overline{\sigma}\left(GK\right),\text{db}\ge \left|{\text{G}}_{\text{d}}\right|,\text{db}-\text{GAM},\text{db}\text{\hspace{1em}}(\omega {\omega}_{c})\\ \overline{\sigma}\left(GK\right),\text{db}\ge \left|{\text{G}}_{\text{d}}\right|,\text{db}+\text{GAM},\text{db}\text{\hspace{1em}}(\omega {\omega}_{c}).\end{array}$$