ECE7360 Project3
ECE7360 Project3
ECE7360 Project3
7-75
7-76
The dashed box represents the true airplane, with associated transfer function
G. Inside the box is the nominal model of the airplane dynamics, Gnom, and two
elements, wdel and G, which parametrize the uncertainty in the model. This
type of uncertainty is called multiplicative uncertainty at the plant input, for
obvious reasons. The transfer function wdel is assumed known, and reflects the
amount of uncertainty in the model. The transfer function G is assumed to be
stable and unknown, except for the norm condition, ||G|| < 1. The performance
objective is that the transfer function from d to e be small, in the || || sense, for
all possible uncertainty transfer functions G. The weighting function WP is
used to reflect the relative importance of various frequency ranges for which
performance is desired.
The control design objective is to design a stabilizing controller K such that for
all stable perturbations G(s), with ||G|| < 1, the perturbed closed-loop system
remains stable, and the perturbed weighted sensitivity transfer function,
S(G) := WP(I + P(I + GWdel)K)1
has ||S(G)|| < 1 for all such perturbations. Recall that these mathematical
objectives exactly fit in the structured singular value framework.
7-77
Uncertainty Models
The airplane model we consider has two inputs: elevon command (e) and
canard command (c); and two measured outputs: angle-of-attack () and pitch
angle ().
A first principles set of uncertainties about the aircraft model would include:
Uncertainty in the canard and the elevon actuators. The electrical signals
that command deflections in these surfaces must be converted to actual
mechanical deflections by the electronics and hydraulics of the actuators.
This is not done perfectly in the actual system, unlike the nominal model.
Uncertainty in the forces and moments generated on the aircraft, due to
specific deflections of the canard and elevon. As a first approximation, this
arises from the uncertainties in the aerodynamic coefficients, which vary
with flight conditions, as well as uncertainty in the exact geometry of the
airplane. An even more detailed view is that surface deflections generate the
forces and moments by changing the flow around the vehicle in very complex
ways. Thus there are uncertainties in the force and moment generation that
go beyond the quasi-steady uncertainties implied by uncertain aerodynamic
coefficients.
Uncertainty in the linear and angular accelerations produced by the
aerodynamically generated forces and moments. This arises from the
uncertainty in the various inertial parameters of the airplane, in addition to
neglected dynamics such as fuel slosh and airframe flexibility.
Other forms of uncertainty that are less well understood.
In this example, we choose not to model the uncertainty in this detailed
manner, but rather to lump all of these effects together into one full-block
uncertainty at the input of a four-state, nominal model of the aircraft rigid
body. This nominal model has no (i.e., perfect) actuators and only quasi-steady
dynamics. The nominal model for the airplane is loaded from the mutools/subs
directory.
7-78
The simple model of the airplane has four states: forward speed (v),
angle-of-attack (), pitch rate (q) and pitch angle (); two inputs: elevon
command (e) and canard command (c); and two measured outputs:
angle-of-attack () and pitch angle ().
mkhimat;
minfo(himat)
seesys(himat,'%9.le')
0.0e+00
0.0e+00
9.8e-01
0.0e+00 | -4.1e-01
0.0e+00
0.0e+00 | -7.8e+01
2.2e+01
0.0e+00
0.0e+00 |
0.0e+00
0.0e+00 -1.9e+00
0.0e+00
1.0e+00
0.0e+00
------------------------------------ |
-----------------
0.0e+00
5.7e+01
0.0e+00
0.0e+00 |
0.0e+00
0.0e+00
0.0e+00
0.0e+00
0.0e+00
5.7e+01 |
0.0e+00
0.0e+00
The partitioned matrix represents the [A B; C D] state space data. Given this
nominal model himat (i.e., Gnom(s)) we also specify a stable, 2 2 transfer
matrix Wdel(s), called the uncertainty weight. These two transfer matrices
parametrize an entire set of plants, , which must be suitably controlled by the
robust controller K.
:= {Gnom(I + GWdel) : G stable, ||G|| 1}.
All of the uncertainty in modeling the airplane is captured in the normalized,
unknown transfer function G. The unknown transfer function G(s) is used to
parametrize the potential differences between the nominal model Gnom(s), and
the actual behavior of the real airplane, denoted by G. The dependence on
frequency of the uncertainty weight indicates that the level of uncertainty in
the airplanes behavior depends on frequency.
In this example, the uncertainty weight Wdel is of the form Wdel(s) := wdel(s)I2,
for a given scalar valued function wdel(s). The fact that the uncertainty weight
is diagonal, with equal diagonal entries, indicates that the modeled
uncertainty is in some sense a round ball about the nominal model Gnom. The
scalar weight associated with the multiplicative input uncertainty is
7-79
constructed using the command nd2sys. The weight chosen for this problem is
( + 100
-----------------------------w del = 50+s10000 ) .
s
wdel = nd2sys([1 100],[1 10000],50);
50 ( s + 100 )
:= G nom I 2 + ------------------------------ G ( s ) : G ( s ) stable, G 1
s + 10000
The particular uncertainty weight chosen for this problem indicates that at low
frequency, there is potentially a 50% modeling error, and at a frequency of 173
rad/sec, the uncertainty in the model is up to 100%, and could get larger at
higher and higher frequencies. A frequency response of wdel is shown in
Figure 7-48.
7-80
10 1
10 0
10 -1
10 0
10 1
10 2
10 3
10 4
10 5
Frequency (rad/s)
1
---------wp
at every frequency.
[ ( I + GK ) ( j ) ] < 1 w p ( j ) .
omega = logspace(-3,2,50);
wp_g = frsp(wp,omega);
vplot('liv,lm',minv(wp_g))
title('Inverse of Performance Weighting function')
xlabel('Frequency (rad/s)')
This sensitivity weight indicates that at low frequency, the closed-loop (both
nominal and perturbed) should reject disturbances at the output by a factor of
50-to1. Expressed differently, steady-state tracking errors in both channels,
due to reference step-inputs in either channel should be on the order of 0.02 or
smaller. This performance requirement gets less and less stringent at higher
and higher frequencies. The closed-loop system should perform better than
7-81
10 0
10 -1
10 -2
10 -3
10 -2
10 -1
10 0
10 1
10 2
Frequency (rad/s)
7-82
7-83
pertin
himat ic
dist
control
has internal structure shown in Figure 7-50. The variables control, pertin,
dist, and y are two element vectors.
This can be produced with nine MATLAB commands, listed below. The first
eight lines describe the various aspects of the interconnection, and may appear
in any order. The last command, sysic, produces the final interconnection. The
commands can be placed in an M-file, or executed at the command line.
systemnames = ' himat wp wdel ';
inputvar = '[ pertin{2} ; dist{2} ; control{2} ]';
outputvar = '[ wdel ; wp ; himat + dist ]';
input_to_himat = '[ control + pertin ]';
input_to_wdel = '[ control ]';
input_to_wp = '[ himat + dist ]';
sysoutname = 'himat_ic';
cleanupsysic = 'yes';
sysic;
7-84
Since the system himat_ic is still open-loop, its poles are simply the poles of
the various components that make up the interconnection.
minfo(himat_ic)
spoles(himat_ic)
spoles(himat)
spoles(wdel)
spoles(wp)
1 0
22
2 2
44
: 1 C
, 2 C
:=
C
.
0 2
The first block of this structured set corresponds to the full-block uncertainty
G used in section to model the uncertainty in the airplanes behavior. The
second block, 2 is a fictitious uncertainty block, used to incorporate the H
performance objectives on the weighted output sensitivity transfer function
into the -framework.
Using theorem 4.5 from the Robust Performance section in Chapter 4, a
stabilizing controller K achieves closed-loop, robust performance if and only if
for each frequency [0, ], the structured singular value
[FL(P,K)(j)] < 1
Using the upper bound for , (recall that in this case, two full blocks, the upper
bound is exactly equal to ) we can attempt to minimize the peak closed-loop
value by posing the optimization problem
min
K
min
d(s)
stabilizing
stable,minphase
d ( s )I 2 0
0
I2
F L ( P, K )
d ( s )I 2 0
0
I2
7-85
Finding the value of this minimum and constructing controllers K that achieve
levels of performance arbitrarily close to the optimal level is called -synthesis.
A more detailed discussion of D K iteration is given in Chapter 5.
Before plunging into the D K iteration design procedure, we begin with a
controller designed via basic MIMO loop shaping methods.
7-86
10 1
10 0
10 -1
10 -2
10 -3
10 -1
10 0
10 1
10 2
10 3
10 4
Frequency (rad/s)
The open-loop gain plot satisfies both the low frequency performance objective
and the high frequency robustness goals. We have only plotted the singular
values of GKloop, but KloopG looks similar. Hence, you would expect the
controller to satisfy the robust stability and nominal performance
requirements.
The two 2 2 transfer functions associated with robust stability and nominal
performance can be evaluated for the loop shaping controller. Simply close the
open-loop interconnection P (himat_ic) with the loop shaping controller, Kloop
(kloop) and evaluate the pertinent transfer functions using the command sel.
7-87
In using sel, the desired outputs (or rows) are specified first, followed by the
desired inputs (or columns). The results are seen in Figure 7-52.
clp = starp(himat_ic,kloop,2,2);
spoles(clp)
rs_loop = sel(clp,1:2,1:2);
np_loop = sel(clp,3:4,3:4);
rs_loopg = frsp(rs_loop,omega);
np_loopg = frsp(np_loop,omega);
vplot('liv,m',vnorm(rs_loopg),vnorm(np_loopg))
tmp1 = 'ROBUST STABILITY (solid) and';
tmp2 = ' NOMINAL PERFORMANCE (dashed)';
title([tmp1 tmp2])
xlabel('Frequency(rad/s)')
ROBUST STABILITY (solid) and NOMINAL PERFORMANCE (dashed)
0.55
0.5
0.45
0.4
0.35
0.3
0.25
0.2
0.15
0.1
0.05
10 -1
10 0
10 1
10 2
10 3
10 4
Frequency (rad/s)
Figure 7-52: Robust Stability and Nominal Performance Plots for the Loop
Shaping Controller
7-88
7-89
number of measurements
nmeas
number of controls
ncons
glow
ghigh
tol
Outputs
clp
7-90
Frequency Response of k1
Log Magnitude
10
10
10
10
10
10
10
10
Frequency (radians/sec)
10
10
Phase (degrees)
200
200
400 1
10
10
10
10
Frequency (radians/sec)
10
10
Figure 7-55 shows the singular values of the closed-loop system clp1. Although
clp1 is 4 4, at each frequency it only has rank equal to 2, hence only two
singular values are nonzero.
Closed-Loop Properties
rifd(spoles(clp1))
clp1g = frsp(clp1,omega);
clp1gs = vsvd(clp1g);
vplot('liv,m',clp1gs)
title('Singular Value Plot of clp1')
xlabel('Frequency (rad/s)')
7-91
10 0
10 1
10 2
10 3
10 4
Frequency (rad/s)
The two 2 2 transfer functions associated with robust stability and nominal
performance may be evaluated separately, using the command sel. Recall that
the robust stability test is performed on the upper 2 2 transfer function in
clp1, and the nominal performance test is on the lower 2 2 transfer function
in clp1. Since a frequency response of clp1 is already available, (in clp1g) we
simply perform the sel on the frequency response, and plot the norms.
rob_stab = sel(clp1g,[1 2],[1 2]);
nom_perf = sel(clp1g,[3 4],[3 4]);
minfo(rob_stab)
minfo(nom_perf)
vplot('liv,m',vnorm(rob_stab),vnorm(nom_perf))
tmp1 = 'ROBUST STABILITY (solid) and';
tmp2 = ' NOMINAL PERFORMANCE (dashed)';
title([tmp1 tmp2])
xlabel('Frequency (rad/s)')
7-92
10 0
10 1
10 2
10 3
10 4
Frequency (rad/s)
7-93
1 0
22
2 2
: 1 C
, 2 C
:=
0 2
The -analysis program, mu, calculates upper and lower bounds for the
structured singular value of the matrix matin, with respect to the block
structure deltaset. The matrix matin can be a CONSTANT MATLAB matrix,
or a VARYING matrix, such as a frequency response matrix of a closed-loop
transfer function. In this example, the frequency response is clp1g and the
block structure is two, 2 2 full blocks. mu returns the upper and lower bounds
in 1 2 VARYING matrix bnds1, the frequency-varying D-scaling matrices in
dvec1, the frequency dependent perturbation associated with the lower bound
in rp1, and the sensitivity of the upper bound to the D-scales in sens1.
The bounds can be calculated by specifying the block structure, and running mu.
Analysis of H Design
The H design is analyzed with respect to structured uncertainty using .
First, the density of points in the frequency response is increased from 50 to
100 to yield smoother plots. Then the upper and lower bounds for are
calculated on the 4 4 closed-loop response of the matrix clp_g1. The upperand
lower bounds for are plotted (in this example they lie on top of one another)
along with the maximum singular value in Figure 7-57.
7-94
deltaset=[2 2; 2 2];
omega1 = logspace(-1,4,100);
clp_g1 = frsp(clp1,omega1);
[bnds1,dvec1,sens1,pvec1] = mu(clp_g1,deltaset);
vplot('liv,m',vnorm(clp_g1),bnds1)
title('Maximum Singular Value and mu Plot')
xlabel('Frequency (rad/s)')
text(.15,.84,'max singular value (solid)','sc')
text(.3,.4,'mu bounds (dashed)','sc')
text(.2,.15,'H-infinity Controller','sc')
Maximum Singular Value and mu Plot
1.8
1.6
1.4
1.2
1
mu bounds (dashed)
0.8
0.6
H-infinity Controller
0.4
10 -1
10 0
10 1
10 2
10 3
10 4
Frequency (rad/s)
7-95
Hence, the controlled system (from H) does not achieve robust performance.
This conclusion follows from the plot in Figure 7-57, which peaks to a value
of 1.69, at a frequency of 73.6 rad/sec. This means that there is a perturbation
1
matrix G, with ||G|| = ----------- , for which the perturbed weighted sensitivity gets
1.69
large
||WP(I + Gnom(I + WdelG)K1|| = 1.69
This perturbation, G, can be constructed using dypert. The input variables to
the command dypert consist of two outputs from , the perturbation matrix
and the bounds, along with the block structure, and the numbers of the blocks
for which the rational matrix construction should be carried out. Often times,
some of the blocks correspond to performance blocks and therefore need not be
constructed. Here, only the first block is an actual perturbation, so the
construction is only done for this 2 2 perturbation (fourth argument of
dypert).
delta_G = dypert(pvec1,deltaset,bnds1,1);
minfo(delta_G) % 2 by 2
rifd(spoles(delta_G)) % stable
hinfnorm(delta_G) % 1/1.69
clp_pert = starp(delta_G,clp1,2,2); % close top loop with delta
minfo(clp_pert)
rifd(spoles(clp_pert)) % stable, since RS passed
hinfnorm(clp_pert) % degradation of performance
- delta G
e
7-96
clp1
clp pert
However, the closed-loop system with the loop shaping controller does not
achieve robust performance. In fact, reaches a peak value of 11.7 at a
frequency of 0.202 rad/sec, as seen in Figure 7-58. This means that there is a
1
perturbation matrix G, with ||G|| = ----------- , for which the perturbed weighted
11.7
sensitivity gets large
||WP(I + Gnom(I + WdelG)K1|| = 11.7
Notice that this perturbation is 8.2 times smaller than the perturbation
associated with the H control design, but that the subsequent degradation in
closed-loop performance is 8.2 times worse. Therefore, the loop shaping
controller will most likely perform poorly on the real system.
7-97
0
10 -1
10 0
10 1
10 2
10 3
10 4
Frequency (rad/s)
The structured singular value is large in the low frequency range due to the
off-diagonal elements of clpg being large. One can see this using the command
blknorm, which outputs the individual norms of the respective blocks. The
coupling between the off-diagonal terms associated with 0.202 rads/sec point to
the problem the upper right entry is 0.14, somewhat small, but not small
7-98
enough to counteract the large (nearly 1000) lower left entry. As expected,
0.14 * 959 = 11.6 .
blkn_cl = blknorm(clpg,deltaset);
see(xtract(blkn_cl,.15,.3))
2 rows 2 columns
iv = 0.159986
4.9995e-01
5.6525e+02
1.4127e-01
1.6402e-01
iv = 0.202359
4.9991e-01
9.5950e+02
1.4193e-01
1.6520e-01
iv = 0.255955
4.9985e-01
7.5635e+02
1.4294e-01
1.6607e-01
Recapping Results
Lets summarize what has been done so far:
The generalized plant, himat_ic, which includes the aircraft model,
uncertainty and performance weighting functions, and the interconnection
of all of these components was built using sysic.
A controller was designed using hinfsyn.
The robust performance characteristics of the closed-loop system were
analyzed with a structured singular value frequency domain test using mu.
The structured singular value analysis involved computing at each frequency
of this 4 4 closed loop response, with respect to a block structure which is
made up of two 2 2 full blocks. The blocks represent, respectively, uncertainty
in the aircraft model, and the performance objectives.
At this stage, the controller which has been designed using H techniques
(nearly) minimizes the H norm of the closed loop transfer function from the
4 1 vector of perturbation inputs and disturbance inputs to the 4 1 vector of
perturbation outputs and error signals. The structured singular value analysis
7-99
shows that the analysis improves on the ( . ) bound at most frequencies, but
there is no improvement at the frequency of 73.6 rads/sec.
Hence, the peak value of the -plot is as high as the peak value on the singular
value plot, the analysis seems to have been of little use. However, at most of
the frequencies, is smaller than , and in the next iteration of synthesis, the
controller can essentially focus its efforts at the problem frequency, and lower
the peak of the -plot.
Now, the open-loop interconnection structure is the eight input, six output
linear system, shown below
z
e
y
pertin
himat ic
dist
control
7-100
The M-file mkhicn creates the plant model, weighting functions and the
interconnection structure shown in Figure 7-60. This can be produced with
nine MATLAB commands, listed below, and also in the M-file mkhicn (which
creates the plant and weighting functions).
"
w1
w2
wdel
control
pertin
+ f
-+? himat
-
dist1:2
+ ?
-+f -
wp -
+
f
+ wn
"
e1
e2
dist3:4
file: mkhicn.m
mkhimat;
wdel = nd2sys([50 5000],[1 10000]);
wp = nd2sys([0.5 0.9],[1 0.018]);
poleloc = 320;
Wn = nd2sys([2 0.008*poleloc],[1 poleloc]);
wdel = daug(wdel,wdel);
wp = daug(wp,wp);
Wn = daug(wn,wn);
systemnames = ' himat wp wdel wn ';
inputvar = '[ pertin{2} ; dist{4} ; control{2} ]';
outputvar = '[ wdel ; wp ; himat + dist(1:2) + wn ]';
input_to_himat = '[ control + pertin ]';
input_to_wdel = '[ control ]';
input_to_wp = '[ himat + dist(1:2) ]';
input_to_wn = '[ dist(3:4) ]';
sysoutname = 'himat_ic';
cleanupsysic = 'yes';
sysic;
7-101
The dkit file himat_dk has been set up with the necessary variables to design
robust controllers for HIMAT using D K iteration. A listing of the himat_dk
file follows. You can copy this file into your directory from the -Tools
subroutines directory, mutools/subs, and modify it for other problems, as
appropriate.
% himat_dk
%
% This script file contains the USER DEFINED VARIABLES for the
%mutools DKIT script file. The user MUST define the 5
%variables below.
%------------------------------------------%
REQUIRED USER DEFINED VARIABLES
%------------------------------------------%
% Nominal plant interconnection structure
NOMINAL_DK = himat_ic;
% Number of measurements
NMEAS_DK = 2;
% Number of control inputs
NCONT_DK = 2;
% Block structure for mu calculation
BLK_DK = [2 2;4 2];
% Frequency response range
OMEGA_DK = logspace(-3,3,60);
%----------------------end of himat_dk-------------------------%
7-102
After the himat_dk.m file has been set up, you need to let the dkit program
know which setup file to use. This is done by setting the string variable
DK_DEF_NAME in the MATLAB workspace equal to the setup filename. Typing
dkit at the MATLAB prompt will then begin the D K iteration procedure.
DK_DEF_NAME = 'himat_dk';
dkit
starting mu iteration #: 1
Iteration Number: 1
------------------Information about the Interconnection Structure IC_DK:
system10 states 6 outputs8 inputs
Test bounds: 0.0000 < gamma <= 100.0000
gamma hamx_eig xinf_eig hamy_eig yinf_eig
nrho_xy
p/f
100.000
2.3e-02
0.0e+00
1.8e-02
0.0e+00
0.0003
50.000
2.3e-02
0.0e+00
1.8e-02
0.0e+00
0.0011
25.000
2.3e-02
0.0e+00
1.8e-02
0.0e+00
0.0046
12.500
2.3e-02
0.0e+00
1.8e-02
0.0e+00
0.0183
6.250
2.3e-02
0.0e+00
1.8e-02
0.0e+00
0.0742
3.125
2.3e-02
0.0e+00
1.8e-02
0.0e+00
0.3117
1.562
2.3e-02
0.0e+00
1.7e-02
0.0e+00
1.5583#
2.152
2.3e-02
0.0e+00
1.8e-02
0.0e+00
0.7100
7-103
MAGNITUDE
1.4
1.2
1
0.8
0.6
0.4
0.2
0
10 -3
10 -2
10 -1
10 0
10 1
10 2
10 3
FREQUENCY (rad/s)
7-104
7-105
MAGNITUDE
1.4
1.2
1
0.8
0.6
0.4
0.2
0
10 -3
10 -2
10 -1
10 0
10 1
10 2
10 3
FREQUENCY (rad/s)
7-106
MU
1.4
1.2
1
0.8
0.6
0.4
10 -3
10 -2
10 -1
10 0
10 1
10 2
10 3
FREQUENCY (rad/s)
Proceeding with the D K iteration, we must fit the D-scaling variable that was
calculated in the upper-bound computation. This rational D-scaling will then
be absorbed into the open-loop interconnection.
7-107
A plot of the upper bound, the first frequency-dependent D-scaling data (this
is the curve we want to fit), and the sensitivity of the upper bound. The
sensitivity measure roughly shows (across frequency) the relative importance
of the accuracy of the curve fit. It is used in the curve fit optimization to weight
some frequency ranges differently than others.
MU Upper Bound
2.5
10
2
0
1.5
10
1
0.5 5
10
10
10
Sensitivity
10
10
10
10
7-108
10
10
10
10
10
10
You are prompted to enter your choice of options for fitting the D-scaling data.
Press return to see your options.
Enter Choice (return for list):
Choices:
nd
nb
apf
Auto-PreFit
mx 3
Change Max-Order to 3
at 1.01
See Status
nd and nb allow you to move from one D-scale data to another. nd moves to
the next scaling, whereas nb moves to the next scaling block. For scalar
D-scalings, these are identical operations, but for problems with full
D-scalings, (perturbations of the form I) they are different. In the (1,2)
subplot window, the title displays the D-scaling Block number, the row/
column of the scaling that is currently being fit, and the order of the current
fit (with d for data, when no fit exists).
The order of the current fit can be incremented or decremented (by 1) using
i and d.
apf automatically fits each D-scaling data. The default maximum state order
of individual D-scaling is 5. The mx variable allows you to change the
maximum D-scaling state order used in the automatic pre-fitting routine. mx
must be a positive, nonzero integer. at allows you to define how close the
rational, scaled upper bound is to approximate the actual upper bound in
a norm sense. Setting at 1 would require an exact fit of the D-scale data, and
is not allowed. Allowable values are greater than 1, and the meaning is
7-109
7-110
2.5
10
2
0
1.5
10
1
0.5 5
10
10
10
10
10
10
10
Sensitivity
10
10
10
10
10
10
In this case, the upper bound with the D-scale data is very close to the upper
bound with the rational D-scale fit. The fourth order fit is quite adequate in
scaling the closed-loop transfer function. The curve fitting procedure for this
scaling variable is concluded by entering e at the Enter Choice prompt.
Enter Choice (return for list): e
In this problem, the block structure consists of two complex full blocks: the 2
2 block associated with the multiplicative uncertainty model for the aircraft,
and the 4 2 performance block. Since there are two blocks, there is only one
D-scaling variable, and we are completely done with the curve fitting in this
iteration.
7-111
1.5
0.5
3
10
10
10
10
10
10
10
Finally, before the next H synthesis procedure, we get the option of changing
the parameters used in the hinfsyn routine. This is useful to change the lower
bound in the -iteration. In this example, we make no changes, and simply
continue.
7-112
The iteration proceeds by computing the H optimal controller for the scaled
(using the rational scalings from the curve fitting) open-loop system.
Iteration Number: 2
-------------------Information about the Interconnection Structure IC_DK:
system:26 states6 outputs8 inputs
Test bounds: 0.0000 < gamma <= 2.1461
gamma
hamx_eig
xinf_eig
hamy_eig
yinf_eig nrho_xy
p/f
2.146
2.Oe02
5.2e14
1.8e02
1.5e16
0.1557 p
1.073
1.9e02
4.6e14
1.7e02
3.4e17
0.9958
0.537
1.4e14#
*******
1.2e02
1.7e18
******
0.805
1.8e02
7.7e13
1.6e02
5.8e18 4.9336#
1.019
1.9e02
6.Oe14
1.7e02
2.4e17 1.2077#
1.055
1.9e02
2.3e13
1.7e02
3.8e17 1.0589#
7-113
MAGNITUDE
0.8
0.6
0.4
0.2
0
10 -3
10 -2
10 -1
10 0
10 1
10 2
10 3
FREQUENCY (rad/s)
7-114
MU
0.9
0.8
0.7
0.6
0.5
10 -3
10 -2
10 -1
10 0
10 1
10 2
10 3
FREQUENCY (rad/s)
7-115
MU Upper Bound
1.2
10
10
0.8
10
0.6 5
10
10
10
10
10
10
Sensitivity
10
10
10
10
10
10
7-116
10
1.2
10
10
0.8
10
0.6 5
10
10
10
10
10
10
10
Sensitivity
10
10
10
10
10
10
This fifth order fit works well in scaling the transfer function, so we exit the
curve fitting routine.
Enter Choice (return for list):e
0.9
0.8
0.7
0.6 3
10
10
10
10
10
10
10
7-117
(e) to exit: e
Iteration Number: 3
-------------------Information about the Interconnection Structure IC_DK:
system:30 states6 outputs8 inputs
Test bounds: 0.0000 < gamma <= 1.0947
gamma hamx_eig xinf_eig hamy_eig yinf_eig
nrho_xy
p/f
0.5970
1.095
2.1e-02 -1.2e-13
1.7e-02 -3.1e-18
0.547
9.1e-13#
*******
1.2e-02 -4.2e-17
******
0.821
2.Oe-02 -1.2e-11
1.6e-02 -5.5e-16
45.1126#
1.040
2.1e-02 -7.Oe-13
1.7e-02 -2.4e-16
0.7263
0.996
2.1e-02 -8.4e-13
1.6e-02 -2.9e-17
0.8741
0.961
2.1e-02 -1.8e-13
1.6e-02 -2.5e-17
1.0433#
0.970
2.1e-02 -7.9e-13
1.6e-02 -2.2e-16
0.9922
7-118
MAGNITUDE
0.7
0.6
0.5
0.4
0.3
0.2
0.1
0
10 -3
10 -2
10 -1
10 0
10 1
10 2
10 3
FREQUENCY (rad/s)
7-119
0.95
0.9
MU
0.85
0.8
0.75
0.7
0.65
0.6 3
10
10
10
10
10
FREQUENCY (rad/s)
10
10
At this point, we have achieved the robust performance objective, and we end
the D K iteration. We have designed a 30 state controller using D K
iteration which achieves a value less than 1.
In this example, it is also possible to reduce the controller order to 12, using
truncated balanced realizations, and still maintain closed-loop stability and
robust performance.
7-120
max(real(spoles(kd_k3)))
ans =
-1.6401e-02
[k_dk3bal,hsv] = sysbal(k_dk3);
[k_dk3red] = strunc(k_dk3bal,12);
clpred_12 = starp(himat_ic,k_dk3red);
max(real(spoles(clpred_12)))
ans =
-6.9102e-03
clpred_12g = frsp(clpred_12,OMEGA_DK);
[bnds] = mu(clpred_12g,[2 2;4 2],'c');
pkvnorm(sel(bnds,1,1))
ans =
9.9910e-01
Design Precompensator
First form the HIMAT system and plot its maximum singular values across
frequency (see Figure 7-61).
mkhimat
[type,p,m,n] = minfo(himat);
om = logspace(-2,4,100);
himatg = frsp(himat,om);
vplot('liv,lm',vsvd(himatg),1);
title('SINGULAR VALUES OF HIMAT')
ylabel('SINGULAR VALUES'); xlabel('FREQUENCY (RAD/SEC)');
7-121
SINGULAR VALUES
10 3
10 2
10 1
10 0
10 -1
10 -2
10 -3
10 -2
10 -1
10 0
10 1
10 2
10 3
10 4
FREQUENCY (RAD/SEC)
The singular values of himat are plotted in Figure 7-61, and although the unity
gain cross over frequency is approximately correct, the low frequency gain is
too low. We therefore introduce a proportional plus integral (P+I)
precompensator with transfer function (1 + s1)I22 to boost the low frequency
gain and give zero steady state errors. The singular values of himat and himat
augmented with the P+I compensator are shown in Figure 7-62.
sysW1 = daug(nd2sys([1 1],[1 0]),nd2sys([1 1],[1 0]));
sysGW = mmult(himat,sysW1);
sysGWg = frsp(sysGW,om);
vplot('liv,lm',vsvd(himatg),'-.',vsvd(sysGWg),'-',1,'--')
title('SINGULAR VALUES OF HIMAT AND AUGMENTED HIMAT')
ylabel('SINGULAR VALUES');
xlabel('FREQUENCY (RAD/SEC)');
7-122
SINGULAR VALUES
10 3
10 2
10 1
10 0
10 -1
10 -2
10 -3
10 -2
10 -1
10 0
10 1
10 2
10 3
10 4
FREQUENCY (RAD/SEC)
7-123
Figure 7-63:
systemnames = 'sysGw';
inputvar = '[ w12; w22; u2 ]';
outputvar = '[ u; w1+sysGw; w1+sysGw ]';
input_to_sysGw = '[ w2+u ]';
sysoutname = 'p_ic';
cleanupsysic = 'yes';
sysic;
ncf_cl = starp(p_ic,sysK1);
ncf_cl_nm = hinfnorm(ncf_cl);
1/ncf_cl_nm(1)
ans =
4.3598e-01
7-124
Now form the closed-loop and evaluate the robust performance with the H
loop shaping compensator implemented (see Figure 7-65).
clp1 = starp(himat_ic,sysKloop,2,2);
clp_g1 = frsp(clp1,om);
deltaset = [2 2; 2 2];
[bnds1,dvec1,sens1,pvec1] = mu(clp_g1,deltaset);
vplot('liv,m',bnds1);
title('ROBUST PERFORMANCE MU WITH LOOPSHAPE CONTROLLER')
ylabel('MU');
xlabel('FREQUENCY (RAD/SEC)');
disp(['mu value is ' num2str(pkvnorm(sel(bnds1,1,1)))])
mu value is 1.323
7-125
1.2
MU
0.8
0.6
0.4
0.2
0
10 -2
10 -1
10 0
10 1
10 2
10 3
10 4
FREQUENCY (RAD/SEC)
The plot of is shown in Figure 7-65 (solid line), the -value is close to that
required, giving a satisfactory design without exploiting the details of the
performance and uncertainty weights. This substantiates the claim that this
design method can give a very robust initial design which does not require
detailed trade-offs between weights to be studied.
7-126
First reduce the weighted plant model order and measure the resulting gap.
[sysGW_cf,sigGW]=sncfbal(sysGW);
sigGW
sigGW =
8.9996e-01
7.1355e-01
3.3542e-01
7.9274e-02
8.5314e-04
2.1532e-04
sysGW_4 = cf2sys(hankmr(sysGW_cf,sigGW,4,'d'));
gapGW_4 = nugap(sysGW,sysGW_4)
gapGW_4 =
8.6871e-04
This three state controller can be reduced to two states using Hankel model
reduction techniques (hankmr).
[sysK1_3_cf,sigK1_3] = sncfbal(sysK1_3);
sigK1_3
sigK1_3 =
3.1674e-01
2.7851e-01
6.9959e-02
sysK1_2 = cf2sys(hankmr(sysK1_3_cf,sigK1_3,2,'d'));
gapK_2=nugap(sysK1_3,sysK1_2)
gapK_2 =
6.9959e-02
7-127
and this can be compared with the actual stability margin with the reduced
order controller as follows.
cl_red = starp(p_ic,sysK1_2);
tmp = hinfnorm(cl_red);
e_act=1/tmp(1)
e_act =
4.0786e-01
It is seen that the actual robustness is about half way between the optimal and
this lower bound. The important use of the bounds is that they indicate what
level of reduction is guaranteed not to degrade robustness significantly.
This gives a third-order controller together with the second-order P+I term.
The -value for this controller, not shown here, turns out to have essentially
the same -value as the closed-loop system with the full order controller.
When the ncfsyn option ref is specified, the controller includes an extra set of
reference inputs. The second input argument to ncfsyn is 1.1. This implies we
are designing a suboptimal controller with 10% less performance than at the
optimal. In practice, a 10% suboptimal design often performs better in terms of
robust performance than the optimal controller on the actual system.
7-128
The last two inputs to cl_ref correspond to the reference signals, the first two
outputs are the outputs of the controller and the last two outputs are the inputs
to the controller (plant output plus observation noise). This design makes the
closed-loop transfer function from reference to plant output the numerator of a
normalized coprime factorization of sysGW. An external reference compensator
could also be added to improve the command response and there are many
possibilities. Here we first diagonalize the closed-loop reference to output
transfer function and then insert some phase advance to increase the speed of
response.
cl_ref_yr=sel(cl_ref,3:4,5:6);
P0 = transp(mmult([0 1; -1 0],cl_ref_yr,[0 1; -1 0]));
P1 = nd2sys([10 50],[1 50]);
P2 = daug(P1,P1);
sysQ = mmult(P0,P2);
Now reduce the order of sysQ to four states using the balanced realization
technique (sysbal), and incorporate into the controller.
[sysQ_b,sig_Q] = sysbal(sysQ);
sig_Q
sig_Q =
3.9665e+00
2.9126e+00
7.2360e-01
4.5915e-01
2.3600e-02
1.0016e-02
1.2526e-06
5.2197e-07
sysQ4 = strunc(sysQ_b,4);
sysK_ref = mmult(sysK3,daug(eye(2),sysQ4));
7-129
The step responses are plotted in Figure 7-66. The first output (solid) tracks the
command well with a rise time of less than 0.1 second and no overshoot. The
output of the second channel (dashed) is zero, indicating that there is no cross
coupling between the output channels in the nominal closed-loop system. The
controller output commands (dotted and dashed-dotted lines) are also plotted.
This is just the nominal step response and further tests are needed to check the
sensitivity of the closed-loop to the plant uncertainty.
CLOSED LOOP TIME RESPONSE WITH SYSK1
1
0.5
0 ...
-0.5
-1
-1.5
-2
-2.5
-3
-3.5
....................................................................................................................................................................................................................................................................................................................................
.
...........................................................................
..........
.
......
....
.
...
.
.
...
..
..
.
..
..
.
..
..
.
..
.
..
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. ..
. ..
.. ..
.... ...
..
0.05
0.1
0.15
0.2
0.25
0.3
0.35
0.4
0.45
0.5
TIME (SECONDS)
7-130
HIMAT References
Freudenberg, J., and D. Looze, Frequency domain properties of scalar and
multivariable feedback systems, Lecture Notes in Control and Information
Sciences, Springer-Verlag, 1988.
Hartman, G.L., M.F. Barrett and C.S. Greene, Control designs for an unstable
vehicle, NASA Dryden Flight Research Center, Contract Report NAS 42578,
December, 1979.
Merkel, P.A., and R.A. Whitmoyer, Development and evaluation of precision
control modes for fighter aircraft, Proceedings of the AIAA Guidance and
Control Conference, San Diego, CA, Paper 761950, 1976.
Safonov, M.G., A.J. Laub, and G.L. Hartman, Feedback properties of
multivariable systems: The role and use of the return difference matrix, IEEE
Transactions on Automatic Control, Vol. AC26, No. 1, pp. 4765, February,
1981.
7-131