diff --git a/matlab/matlab/src/generateCF.m b/matlab/matlab/src/generateCF.m index 547304d..4fdeee3 100644 --- a/matlab/matlab/src/generateCF.m +++ b/matlab/matlab/src/generateCF.m @@ -1,7 +1,7 @@ function [H1, H2] = generateCF(W1, W2, args) % createWeight - % -% Syntax: [W] = generateCF(args) +% Syntax: [H1, H2] = generateCF(W1, W2, args) % % Inputs: % - W1 - Weighting Function for H1 @@ -14,6 +14,7 @@ function [H1, H2] = generateCF(W1, W2, args) % - H1 - Generated H1 Filter % - H2 - Generated H2 Filter +%% Argument validation arguments W1 W2 @@ -21,10 +22,13 @@ arguments args.display char {mustBeMember(args.display,{'on', 'off'})} = 'on' end +%% The generalized plant is defined P = [W1 -W1; 0 W2; 1 0]; +%% The standard H-infinity synthesis is performed [H2, ~, gamma, ~] = hinfsyn(P, 1, 1,'TOLGAM', 0.001, 'METHOD', args.method, 'DISPLAY', args.display); +%% H1 is defined as the complementary of H2 H1 = 1 - H2; diff --git a/matlab/matlab/src/generateWF.m b/matlab/matlab/src/generateWF.m index 7276dd1..c4030d7 100644 --- a/matlab/matlab/src/generateWF.m +++ b/matlab/matlab/src/generateWF.m @@ -11,8 +11,9 @@ function [W] = generateWF(args) % - w0 - Frequency at which |W(j w0)| = Gc [rad/s] % % Outputs: -% - W - Generated Weight +% - W - Generated Weighting Function +%% Argument validation arguments args.n (1,1) double {mustBeInteger, mustBePositive} = 1 args.G0 (1,1) double {mustBeNumeric, mustBePositive} = 0.1 @@ -21,16 +22,19 @@ arguments args.w0 (1,1) double {mustBeNumeric, mustBePositive} = 1 end +% Verification of correct relation between G0, Gc and Ginf mustBeBetween(args.G0, args.Gc, args.Ginf); +%% Initialize the Laplace variable s = zpk('s'); +%% Create the weighting function according to formula W = (((1/args.w0)*sqrt((1-(args.G0/args.Gc)^(2/args.n))/(1-(args.Gc/args.Ginf)^(2/args.n)))*s + ... (args.G0/args.Gc)^(1/args.n))/... ((1/args.Ginf)^(1/args.n)*(1/args.w0)*sqrt((1-(args.G0/args.Gc)^(2/args.n))/(1-(args.Gc/args.Ginf)^(2/args.n)))*s + ... (1/args.Gc)^(1/args.n)))^args.n; -% Custom validation function +%% Custom validation function function mustBeBetween(a,b,c) if ~((a > b && b > c) || (c > b && b > a)) eid = 'createWeight:inputError';