44 lines
1.4 KiB
Matlab
44 lines
1.4 KiB
Matlab
function [W] = generateWF(args)
|
|
% createWeight -
|
|
%
|
|
% Syntax: [W] = generateWeight(args)
|
|
%
|
|
% Inputs:
|
|
% - n - Weight Order (integer)
|
|
% - G0 - Low frequency Gain
|
|
% - G1 - High frequency Gain
|
|
% - Gc - Gain of the weight at frequency w0
|
|
% - w0 - Frequency at which |W(j w0)| = Gc [rad/s]
|
|
%
|
|
% Outputs:
|
|
% - W - Generated Weighting Function
|
|
|
|
%% Argument validation
|
|
arguments
|
|
args.n (1,1) double {mustBeInteger, mustBePositive} = 1
|
|
args.G0 (1,1) double {mustBeNumeric, mustBePositive} = 0.1
|
|
args.Ginf (1,1) double {mustBeNumeric, mustBePositive} = 10
|
|
args.Gc (1,1) double {mustBeNumeric, mustBePositive} = 1
|
|
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
|
|
function mustBeBetween(a,b,c)
|
|
if ~((a > b && b > c) || (c > b && b > a))
|
|
eid = 'createWeight:inputError';
|
|
msg = 'Gc should be between G0 and Ginf.';
|
|
throwAsCaller(MException(eid,msg))
|
|
end
|