Use ucover to retrieve multiplicative uncertainty
This commit is contained in:
parent
bc6fc0d63c
commit
3f0461070f
|
|
@ -30,17 +30,18 @@ I_m_analytic = tf(fitmagfrd(data, 2));
|
||||||
% For MIMO systems, the division in the expression for I_m doesn't make
|
% For MIMO systems, the division in the expression for I_m doesn't make
|
||||||
% sense
|
% sense
|
||||||
% This is another way to compute it:
|
% This is another way to compute it:
|
||||||
opt = wcOptions('MussvOptions','m3'); % for better lower bound
|
|
||||||
[wcg, wcu, info_num] = wcgain(G-G_nom, w);
|
|
||||||
[wcg, wcu, info_den] = wcgain(G_nom, w, opt);
|
|
||||||
|
|
||||||
resp_im = info_num.Bounds(:, 2) ./ info_den.Bounds(:, 1);
|
% generate some instances of the uss
|
||||||
|
systems = usample(G, 20);
|
||||||
|
data = frd(systems, w);
|
||||||
|
|
||||||
data_2 = frd(resp_im, w);
|
% cover the frequency response data using an order 2 multiplicative
|
||||||
% constrain the uncertainty to stay above the magnitude data
|
% uncertainty
|
||||||
Constraint.LowerBound = data_2;
|
% ucover returns [G, Info] where G is the uncertain system given by
|
||||||
Constraint.UpperBound = [];
|
% G(s) = [I+W1(s) Delta(s)] G_nom(s)
|
||||||
I_m_analytic_2 = tf(fitmagfrd(data_2, 2, [], [], Constraint));
|
% W1(s) can be recovered from Info.W1
|
||||||
|
[G2, Info] = ucover(data, G_nom, 2);
|
||||||
|
I_m_analytic_2 = tf(Info.W1);
|
||||||
|
|
||||||
sigma(I_m, w); hold;
|
sigma(I_m, w); hold;
|
||||||
semilogx(w, 20*log10(info.Bounds(:, 2)), 'green');
|
semilogx(w, 20*log10(info.Bounds(:, 2)), 'green');
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue