Mercurial > hg > ltpda
view m-toolbox/classes/@pz/pz.m @ 43:bc767aaa99a8
CVS Update
author | Daniele Nicolodi <nicolodi@science.unitn.it> |
---|---|
date | Tue, 06 Dec 2011 11:09:25 +0100 |
parents | f0afece42f48 |
children |
line wrap: on
line source
% PZ is the ltpda class that provides a common definition of poles and zeros. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % DESCRIPTION: PZ is the ltpda class that provides a common definition of % poles and zeros. % % SUPERCLASSES: ltpda_nuo < ltpda_obj % % CONSTRUCTORS: % % p = pz(f) % specify frequency % p = pz(f,q) % specify frequency and Q % p = pz(c) % create with complex representation % p = pz({[f,q]}) % p = pz({[f1,q1], f2, [f3, q3]}) -> creates three objects % % VERSION: $Id: pz.m,v 1.48 2011/11/02 06:41:17 hewitson Exp $ % % SEE ALSO: ltpda_obj, ltpda_nuo, pzmodel % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% classdef (Hidden = true) pz < ltpda_nuo %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Property definition % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %---------- Public (read/write) Properties ---------- properties end %---------- Protected read-only Properties ---------- properties (SetAccess = protected) f = NaN; % frequency of pole/zero q = NaN; % quality factor of pole/zero ri = NaN; % complex representation of pole/zero end %---------- Private Properties ---------- properties (GetAccess = protected, SetAccess = protected) end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Check property setting % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% methods function set.f(obj, val) if ~isnumeric(val) || isempty(val) || ~isreal(val) error('### The value for the property ''f'' must be a real positive number'); end obj.f = val; end function set.q(obj, val) if ~isnumeric(val) || isempty(val) || ~isreal(val) error('### The value for the property ''q'' must be a real positive number'); end obj.q = val; end function set.ri(obj, val) if ~isnumeric(val) || isempty(val) error('### The value for the property ''ri'' must be a number'); end % Have 'ri' always as a column vector if size(val,2) ~= 1 val = val.'; end obj.ri = val; end end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Constructor % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% methods function obj = pz(varargin) switch nargin case 0 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%% no inputs %%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% case 1 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%% one input %%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% if isa(varargin{1}, 'pz') %%%%%%%%%% Copy ltpda_obj Object %%%%%%%%%% %%%%%%%%%% p1 = pz(pz-object) %%%%%%%%%% obj = copy(varargin{1}, 1); elseif isnumeric(varargin{1}) %%%%%%%%%% real or complex pole/zero %%%%%%%%%% if isempty(varargin{1}) % do nothing elseif length(varargin{1}) == 1 if isreal(varargin{1}) %%%%%%%%%% p1 = pz(3) %%%%%%%%%% obj.setF(varargin{1}); obj.setQ(NaN); else %%%%%%%%%% p1 = pz(1+3i) %%%%%%%%%% obj.setRI(varargin{1}); if (obj.q - 0.5) < 1e-10 % if complex vale is Q = 0.5 return two equal real poles disp('!!! Q = 0.5! Returning two equal real poles/zeros;') obj.setQ(NaN); obj = [obj obj]; end end elseif length(varargin{1}) == 2 %%%%%%%%%% p1 = pz([1 2]) %%%%%%%%%% Q = varargin{1}(2); if (Q>0.5) obj.setF(varargin{1}(1)); obj.setQ(varargin{1}(2)); elseif (Q<=0.5 && Q>=0) % interpret as 2 real poles ffs = pz.fq2ri(varargin{1}(1), varargin{1}(2)); obj = [pz(ffs(1)/2/pi) pz(ffs(2)/2/pi)]; else error('### Q must be a positive value'); end else error('### Unknown constructor for the input %s', mat2str(varargin{1})); end elseif isa(varargin{1}, 'plist') %%%%%%%%%% p1 = pz(plist-object) %%%%%%%%%% pl = varargin{1}; pl_f = find(pl, 'f'); pl_q = find(pl, 'q'); pl_ri = find(pl, 'ri'); if ~isempty(pl_f) obj.setF(pl_f); if ~isempty(pl_q) obj.setQ(pl_q); end elseif ~isempty(pl_ri) obj.setRI(pl_ri); else error('### Unknown plist constructor'); end elseif isstruct(varargin{1}) %%%%%%%%%% p1 = pz(structure) %%%%%%%%%% obj = fromStruct(obj, varargin{1}); elseif iscell(varargin{1}) %%%%%%%%%% p1 = pz({[1 2], 1+2i, 3}) %%%%%%%%%% if isempty(varargin{1}) return end obj = pz.initObjectWithSize(size(varargin{1})); for kk = 1:numel(varargin{1}) obj = [obj pz(varargin{1}{kk})]; end elseif ischar(varargin{1}) %%%%%%%%%% p1 = pz('{[1 2], 1+2i, 3}') %%%%%%%%%% obj = feval('pz', eval(varargin{1})); else error('### Unknown call of the pz constructor.'); end case 2 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%% two inputs %%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% if isa(varargin{1}, 'org.apache.xerces.dom.DeferredElementImpl') && ... isa(varargin{2}, 'history') %%%%%%%%%% obj = pz(DOM node, history-objects) %%%%%%%%%% obj = fromDom(obj, varargin{1}, varargin{2}); else %%%%%%%%%% obj = pz(f, q) %%%%%%%%%% % f,q constructor obj.setF(varargin{1}); obj.setQ(varargin{2}); end otherwise error('### Unknown number of arguments.'); end end end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Methods (public) % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% methods varargout = cp2iir(varargin) varargout = cz2iir(varargin) varargout = rz2iir(varargin) varargout = rp2iir(varargin) varargout = copy(varargin) varargout = string(varargin) [f,r] = resp(varargin) end methods (Hidden = true) varargout = attachToDom(varargin) end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Methods (protected) % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% methods (Access = protected) ii = setF(ii, val) ii = setQ(ii, val) ii = setRI(ii, val) varargout = fromStruct(varargin) varargout = fromDom(varargin) end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Methods (private) % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% methods (Access = private) end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Methods (static, protected) % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% methods (Access = protected, Static) [f0, q] = ri2fq(c); ri = fq2ri(f0, Q); end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Methods (Static, Private) % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% methods (Static = true, Access = private) end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Methods (static) % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% methods (Static) function out = VEROUT() out = '$Id: pz.m,v 1.48 2011/11/02 06:41:17 hewitson Exp $'; end function ii = getInfo(varargin) ii = utils.helper.generic_getInfo(varargin{:}, 'pz'); end function out = SETS() out = {'Default'}; end function out = getDefaultPlist(set) switch lower(set) case 'default' out = plist(); otherwise error('### Unknown set [%s]', set); end end function obj = initObjectWithSize(n,m) if numel(n) > 1 obj = pz.newarray([n(1) n(2)]); else obj = pz.newarray([n m]); end end end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Methods (static, hidden) % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% methods (Static = true, Hidden = true) varargout = loadobj(varargin) varargout = update_struct(varargin); end end % End classdef