Add closed-loop shaping section
This commit is contained in:
42
matlab/src/plotMagUncertainty.m
Normal file
42
matlab/src/plotMagUncertainty.m
Normal file
@@ -0,0 +1,42 @@
|
||||
function [p] = plotMagUncertainty(W, freqs, args)
|
||||
% plotMagUncertainty -
|
||||
%
|
||||
% Syntax: [p] = plotMagUncertainty(W, freqs, args)
|
||||
%
|
||||
% Inputs:
|
||||
% - W - Multiplicative Uncertainty Weight
|
||||
% - freqs - Frequency Vector [Hz]
|
||||
% - args - Optional Arguments:
|
||||
% - G
|
||||
% - color_i
|
||||
% - opacity
|
||||
%
|
||||
% Outputs:
|
||||
% - p - Plot Handle
|
||||
|
||||
arguments
|
||||
W
|
||||
freqs double {mustBeNumeric, mustBeNonnegative}
|
||||
args.G = tf(1)
|
||||
args.color_i (1,1) double {mustBeInteger, mustBeNonnegative} = 0
|
||||
args.opacity (1,1) double {mustBeNumeric, mustBeNonnegative} = 0.3
|
||||
args.DisplayName char = ''
|
||||
end
|
||||
|
||||
% Get defaults colors
|
||||
colors = get(groot, 'defaultAxesColorOrder');
|
||||
|
||||
p = patch([freqs flip(freqs)], ...
|
||||
[abs(squeeze(freqresp(args.G, freqs, 'Hz'))).*(1 + abs(squeeze(freqresp(W, freqs, 'Hz')))); ...
|
||||
flip(abs(squeeze(freqresp(args.G, freqs, 'Hz'))).*max(1 - abs(squeeze(freqresp(W, freqs, 'Hz'))), 1e-6))], 'w', ...
|
||||
'DisplayName', args.DisplayName);
|
||||
|
||||
if args.color_i == 0
|
||||
p.FaceColor = [0; 0; 0];
|
||||
else
|
||||
p.FaceColor = colors(args.color_i, :);
|
||||
end
|
||||
p.EdgeColor = 'none';
|
||||
p.FaceAlpha = args.opacity;
|
||||
|
||||
end
|
47
matlab/src/plotPhaseUncertainty.m
Normal file
47
matlab/src/plotPhaseUncertainty.m
Normal file
@@ -0,0 +1,47 @@
|
||||
function [p] = plotPhaseUncertainty(W, freqs, args)
|
||||
% plotPhaseUncertainty -
|
||||
%
|
||||
% Syntax: [p] = plotPhaseUncertainty(W, freqs, args)
|
||||
%
|
||||
% Inputs:
|
||||
% - W - Multiplicative Uncertainty Weight
|
||||
% - freqs - Frequency Vector [Hz]
|
||||
% - args - Optional Arguments:
|
||||
% - G
|
||||
% - color_i
|
||||
% - opacity
|
||||
%
|
||||
% Outputs:
|
||||
% - p - Plot Handle
|
||||
|
||||
arguments
|
||||
W
|
||||
freqs double {mustBeNumeric, mustBeNonnegative}
|
||||
args.G = tf(1)
|
||||
args.color_i (1,1) double {mustBeInteger, mustBeNonnegative} = 0
|
||||
args.opacity (1,1) double {mustBeNumeric, mustBePositive} = 0.3
|
||||
args.DisplayName char = ''
|
||||
end
|
||||
|
||||
% Get defaults colors
|
||||
colors = get(groot, 'defaultAxesColorOrder');
|
||||
|
||||
% Compute Phase Uncertainty
|
||||
Dphi = 180/pi*asin(abs(squeeze(freqresp(W, freqs, 'Hz'))));
|
||||
Dphi(abs(squeeze(freqresp(W, freqs, 'Hz'))) > 1) = 360;
|
||||
|
||||
% Compute Plant Phase
|
||||
G_ang = 180/pi*angle(squeeze(freqresp(args.G, freqs, 'Hz')));
|
||||
|
||||
p = patch([freqs flip(freqs)], [G_ang+Dphi; flip(G_ang-Dphi)], 'w', ...
|
||||
'DisplayName', args.DisplayName);
|
||||
|
||||
if args.color_i == 0
|
||||
p.FaceColor = [0; 0; 0];
|
||||
else
|
||||
p.FaceColor = colors(args.color_i, :);
|
||||
end
|
||||
p.EdgeColor = 'none';
|
||||
p.FaceAlpha = args.opacity;
|
||||
|
||||
end
|
Reference in New Issue
Block a user