Home > classes > @zero > zero.m

zero

PURPOSE ^

ZERO construct a pole object.

SYNOPSIS ^

function p = zero(varargin)

DESCRIPTION ^

 ZERO construct a pole object.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

 DESCRIPTION:  ZERO construct a pole object.

 CONSTRUCTORS: z = zero(f);      - frequency (Hz)
               z = zero(f,q);    - frequency (Hz), Q
               z = zero(c);      - complex number
               z = zero(pl);     - plist()

 PARAMETERS:   'f'  - frequency
               'q'  - Q
               'ri' - complex value (column vector)

 VERSION:      $Id: zero.m,v 1.23 2008/03/17 09:28:51 mauro Exp $

 HISTORY:      02-04-2007 Hewitson
                  Creation

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SUBFUNCTIONS ^

SOURCE CODE ^

0001 function p = zero(varargin)
0002 % ZERO construct a pole object.
0003 %
0004 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0005 %
0006 % DESCRIPTION:  ZERO construct a pole object.
0007 %
0008 % CONSTRUCTORS: z = zero(f);      - frequency (Hz)
0009 %               z = zero(f,q);    - frequency (Hz), Q
0010 %               z = zero(c);      - complex number
0011 %               z = zero(pl);     - plist()
0012 %
0013 % PARAMETERS:   'f'  - frequency
0014 %               'q'  - Q
0015 %               'ri' - complex value (column vector)
0016 %
0017 % VERSION:      $Id: zero.m,v 1.23 2008/03/17 09:28:51 mauro Exp $
0018 %
0019 % HISTORY:      02-04-2007 Hewitson
0020 %                  Creation
0021 %
0022 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0023 
0024 VERSION  = '$Id: zero.m,v 1.23 2008/03/17 09:28:51 mauro Exp $';
0025 CATEGORY = 'Constructor';
0026 
0027 %%%%%   Check if this is a call for parameters   %%%%%
0028 if nargin == 2
0029   if isa(varargin{1}, 'zero') && ischar(varargin{2})
0030     in = char(varargin{2});
0031     if strcmp(in, 'Params')
0032       p = plist;
0033       return
0034     elseif strcmp(in, 'Version')
0035       p = VERSION;
0036       return
0037     elseif strcmp(in, 'Category')
0038       p = CATEGORY;
0039       return
0040     end
0041   end
0042 end
0043 
0044 %%%%%%%%%%%%%%%%%%%%%%%%   define zero properties   %%%%%%%%%%%%%%%%%%%%%%%%%
0045 
0046   function p = init(version)
0047     p.name    = 'None';
0048     p.f       = NaN;
0049     p.q       = NaN;
0050     p.ri      = NaN;
0051     p.version = version;
0052     p.created = time;
0053     p.plist   = plist;
0054     p         = class(p, 'zero');
0055   end
0056 
0057 %%%%%%%%%%%%%%%%%%%%%%%%%%   Create zero object   %%%%%%%%%%%%%%%%%%%%%%%%%%%
0058 
0059 %%%%%%%%%%   p = zero()   %%%%%%%%%%
0060 if nargin == 0
0061 
0062   p = init(VERSION);
0063 
0064 elseif nargin == 1
0065 
0066   %%%%%%%%%%% From File %%%%%%%%%%%%%%%%
0067   if ischar(varargin{1})
0068 
0069     filename = varargin{1};
0070     [path, name, ext, vers] = fileparts(filename);
0071     switch ext
0072       case '.mat'
0073         p = load(filename);
0074         p = p.a;
0075       case '.xml'
0076         root_node = xmlread(filename);
0077         p = ltpda_xmlread(root_node, 'zero');
0078       otherwise
0079         error('### Unknown file type.');
0080     end
0081 
0082   %%%%%%%%%%   p = zero(number)           %%%%%%%%%%
0083   %%%%%%%%%%   p = zero(complex number)   %%%%%%%%%%
0084   elseif isnumeric(varargin{1})
0085 
0086     p = init(VERSION);
0087 
0088     if isreal(varargin{1})
0089       p.name    = 'real zero';
0090       p.f       = varargin{1};
0091       p.q       = NaN;
0092       p.ri      = pfq2ri(p.f);
0093     else
0094       p.name     = 'complex zero';
0095       [p.f, p.q] = pri2fq(varargin{1});
0096       if length(varargin{1}) == 1
0097         p.ri      = [varargin{1}; conj(varargin{1})];
0098       elseif length(varargin{1}) == 2
0099         p.ri      = varargin{1};
0100       else
0101         error('### Unknown constructor method. Please specify a complex number or a complex conjugate pair.');
0102       end
0103     end
0104 
0105   %%%%%%%%%%   p = zero(struct)   %%%%%%%%%%
0106   elseif isstruct(varargin{1})
0107 
0108     p = init(VERSION);
0109 
0110     fields = fieldnames(varargin{1});
0111     for ii = 1:length(fields)
0112       field = fields{ii};
0113       try
0114         p.(field) = varargin{1}.(field);
0115       catch
0116           error('### The field ''%s'' in the struct is not a zero property.', field)
0117       end
0118     end
0119 
0120   %%%%%%%%%%   p = zero(plist)   %%%%%%%%%%
0121   elseif isa(varargin{1}, 'plist')
0122 
0123     %% is the plist is empty then return an empty zero object
0124     if nparams(varargin{1}) == 0
0125       p = init(VERSION);
0126       p.plist = varargin{1};
0127     else
0128 
0129       p = init(VERSION);
0130       p = zeroFromPlist(p, varargin{1});
0131 
0132       % Store input plist
0133       p.plist = varargin{1};
0134     end
0135 
0136   %%%%%%%%%%   p = zero(zero)   %%%%%%%%%%
0137   elseif isa(varargin{1}, 'zero')
0138     p = varargin{1};
0139 
0140   else
0141     error('### unknown constructor method for zero class.');
0142   end
0143 
0144 elseif nargin == 2
0145   %%%%%%%%%%% From DATABASE
0146   if isa(varargin{1}, 'database')
0147     p = retrieve(varargin{1}, varargin{2:end});
0148   %%%%%%%%%%   p = zero(f, q)   %%%%%%%%%%
0149   elseif isnumeric(varargin{1}) && isnumeric(varargin{2})
0150 
0151     ri   =  pfq2ri(varargin{1}, varargin{2});
0152 
0153     if length(ri) == 2 && isreal(ri(1)) && ri(1) == ri(2)
0154       disp('- splitting to two real zeros');
0155       p      =  init(VERSION);
0156       if isnan(varargin{2})
0157         p.name = 'real zero';
0158       else
0159         p.name = 'complex zero';
0160       end
0161       p.f    =  varargin{1};
0162       p.q    =  varargin{2};
0163       p.ri   = ri;
0164       p      = [p p];
0165     else
0166       p      =  init(VERSION);
0167       if isnan(varargin{2})
0168         p.name = 'real zero';
0169       else
0170         p.name = 'complex zero';
0171       end
0172       p.f    =  varargin{1};
0173       p.q    =  varargin{2};
0174       p.ri   = ri;
0175     end
0176 
0177   else
0178     error('### unknown constructor method for zero class.');
0179   end
0180 
0181 end
0182 
0183 %--------------------------------------------------------------------------
0184 % construct a zero from plist
0185 %
0186 function p = zeroFromPlist(p, pl)
0187 
0188   f  = find(pl, 'f');
0189   q  = find(pl, 'q');
0190   ri = find(pl, 'ri');
0191 
0192   name    = find(pl, 'name');
0193   version = find(pl, 'version');
0194   created = find(pl, 'created');
0195 
0196   if ~isempty(f)
0197     if ~isempty(q)
0198       % complex zero
0199       if isnan(q)
0200         p.name    = 'real zero';
0201       else
0202         p.name    = 'complex zero';
0203       end
0204       p.f       = f;
0205       p.q       = q;
0206       p.ri      = pfq2ri(p.f, p.q);
0207 
0208     else
0209       % real zero
0210       p.name    = 'real zero';
0211       p.f       = f;
0212       p.q       = NaN;
0213       p.ri      = pfq2ri(p.f);
0214 
0215     end
0216   elseif ~isempty(ri)
0217     % complex zero
0218     p.name    = 'complex zero';
0219     [p.f, p.q] = pri2fq(ri);
0220     p.ri      = [ri; conj(ri)];
0221 
0222   else
0223     error('### unknown constructor method for zero class.');
0224   end
0225 
0226   % Set other the properties in the plist
0227   if ~isempty(name)
0228     p.name = name;
0229   end
0230   if ~isempty(version)
0231     p.version = version;
0232   end
0233   if ~isempty(created)
0234     p.created = created;
0235   end
0236 
0237 end
0238 
0239 
0240 end % function p = zero(varargin)
0241

Generated on Mon 31-Mar-2008 13:54:54 by m2html © 2003