Mercurial > hg > ltpda
view m-toolbox/classes/@matrix/matrix.m @ 0:f0afece42f48
Import.
author | Daniele Nicolodi <nicolodi@science.unitn.it> |
---|---|
date | Wed, 23 Nov 2011 19:22:13 +0100 |
parents | |
children | a71a40911c27 |
line wrap: on
line source
% MATRIX constructor for matrix class. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % DESCRIPTION: MATRIX constructor for matrix class. % % CONSTRUCTOR: % % fb = matrix() - creates an empty matrix object % fb = matrix(objs) - construct from an array of objects % fb = matrix(pl) - create a matrix object from a parameter list % % <a href="matlab:utils.helper.displayMethodInfo('matrix', 'matrix')">Parameters Description</a> % % VERSION: $Id: matrix.m,v 1.49 2011/08/23 13:50:46 hewitson Exp $ % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% classdef matrix < ltpda_uoh %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Property definition % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %---------- Public (read/write) Properties ---------- properties objs = []; % objects in matrix end %---------- Protected read-only Properties ---------- properties (SetAccess = protected) end %---------- Private Properties ---------- properties (GetAccess = protected, SetAccess = protected) end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Check property setting % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% methods end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Constructor % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% methods function obj = matrix(varargin) callerIsMethod = utils.helper.callerIsMethod; import utils.const.* utils.helper.msg(msg.OMNAME, 'running %s/%s', mfilename('class'), mfilename); % Collect all matrix objects [mats, invars, rest] = utils.helper.collect_objects(varargin(:), 'matrix'); if isempty(rest) && ~isempty(mats) % Do copy constructor and return utils.helper.msg(msg.OPROC1, 'copy constructor'); obj = copy(mats, 1); for kk=1:numel(obj) obj(kk).addHistory(matrix.getInfo('matrix', 'None'), [], [], obj(kk).hist); end return end switch nargin case 0 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%% no input %%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% utils.helper.msg(msg.OPROC1, 'empty constructor'); obj.addHistory(matrix.getInfo('matrix', 'None'), plist(), [], []); case 1 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%% one input %%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% if ischar(varargin{1}) %%%%%%%%%% pzm = matrix('foo.mat') %%%%%%%%%% %%%%%%%%%% pzm = matrix('foo.xml') %%%%%%%%%% utils.helper.msg(msg.OPROC1, 'constructing from file %s', varargin{1}); obj = fromFile(obj, varargin{1}); elseif isstruct(varargin{1}) %%%%%%%%%% r = matrix(struct) %%%%%%%%%% utils.helper.msg(msg.OPROC1, 'constructing from struct'); obj = fromStruct(obj, varargin{1}); elseif isa(varargin{1}, 'ltpda_uoh') %%%%%%%%%% r = matrix(<ltpda_uoh-objects>) %%%%%%%%%% obj = obj.fromInput(plist('objs', varargin), callerIsMethod); elseif isnumeric(varargin{1}) %%%%%%%%%% r = matrix(doubleArray) %%%%%%%%%% obj = obj.fromValues(plist('values', varargin{1}), callerIsMethod); elseif isa(varargin{1}, 'plist') %%%%%%%%%% r = matrix(plist) %%%%%%%%%% pl = varargin{1}; if pl.isparam('filename') utils.helper.msg(msg.PROC2, 'constructing from file %s', pl.find('filename')); obj = obj.fromFile(pl); elseif pl.isparam('hostname') || pl.isparam('conn') utils.helper.msg(msg.PROC2, 'constructing from repository %s', pl.find('hostname')); obj = obj.fromRepository(pl); elseif pl.isparam('objs') obj = obj.fromInput(pl, callerIsMethod); elseif pl.isparam('plist') obj = matrix(pl.find('plist')); elseif pl.isparam('built-in') utils.helper.msg(msg.OPROC1, 'constructing from built-in model'); obj = fromModel(obj, pl); elseif pl.isparam('csd') utils.helper.msg(msg.PROC2, 'constructing from csd %s', char(pl.find('csd'))); obj = obj.fromCSD(pl); elseif pl.isparam('model') utils.helper.msg(msg.PROC2, 'constructing Multichannel Zero Mean Gaussian Noise %s', char(pl.find('model'))); obj = obj.MultiChannelNoise(pl); elseif pl.isparam('values') obj = obj.fromValues(pl, callerIsMethod); else obj.setProperties(pl); obj.addHistory(matrix.getInfo('matrix', 'None'), pl, [], []); end else error('### Unknown single argument constructor.'); end case 2 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%% two inputs %%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% if isa(varargin{1}, 'ltpda_uoh') && isa(varargin{2}, 'ltpda_uoh') %%%%%%%%%% f = matrix(a1, a2) %%%%%%%%%% utils.helper.msg(msg.OPROC1, 'retrieve from repository'); obj = obj.fromInput(plist('objs', varargin), callerIsMethod); elseif (isa(varargin{1}, 'database') || isa(varargin{1}, 'mpipeline.repository.RepositoryConnection')) ... && isnumeric(varargin{2}) %%%%%%%%%% f = matrix(<database-object>, [IDs]) %%%%%%%%%% utils.helper.msg(msg.OPROC1, 'retrieve from repository'); obj = obj.fromRepository(plist('conn', varargin{1}, 'id', varargin{2})); elseif isa(varargin{1}, 'matrix') && isa(varargin{2}, 'plist') && isempty(varargin{2}.params) %%%%%%%%%% f = matrix(matrix-object, <empty plist>) %%%%%%%%%% obj = matrix(varargin{1}); elseif isa(varargin{1}, 'org.apache.xerces.dom.DeferredElementImpl') && ... isa(varargin{2}, 'history') %%%%%%%%%% obj = matrix(DOM node, history-objects) %%%%%%%%%% obj = fromDom(obj, varargin{1}, varargin{2}); elseif isnumeric(varargin{1}) && iscell(varargin{2}) %%%%%%%%%% r = matrix(doubleArray, cellArray) %%%%%%%%%% obj = matrix(plist('values', varargin{1}, 'yunits', varargin{2})); elseif isa(varargin{1}, 'ltpda_uoh') && isa(varargin{2}, 'plist') %%%%%%%%%%% matrix(<ltpda_uoh>-object, plist-object) %%%%%%%%%% % always recreate from plist if it contains 'objs' key % If we are trying to load from file, and the file exists, do % that. Otherwise, copy the input object. if varargin{2}.isparam('filename') if exist(fullfile('.', find(varargin{2}, 'filename')), 'file')==2 obj = matrix(varargin{2}); else obj = matrix(varargin{1}); end else if isparam(varargin{2}, 'objs') obj = matrix(varargin{2}); else obj = obj.fromInput(combine(plist('objs', varargin{1}), varargin{2}), callerIsMethod); end end else error('### Unknown 2 argument constructor.'); end otherwise %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%% any input %%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% [pls, mat_invars, rest] = utils.helper.collect_objects(varargin, 'plist'); pl = combine(plist('objs', rest), pls); obj = obj.fromInput(pl, callerIsMethod); end end % End constructor end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Methods (static) % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% methods (Static) function mdls = getBuiltInModels(varargin) mdls = ltpda_uo.getBuiltInModels('matrix'); end function out = VEROUT() out = '$Id: matrix.m,v 1.49 2011/08/23 13:50:46 hewitson Exp $'; end function ii = getInfo(varargin) ii = utils.helper.generic_getInfo(varargin{:}, 'matrix'); end function out = SETS() out = [SETS@ltpda_uoh, ... {'From Input'}, ... {'MultiChannel Noise'}, ... {'From CSD'}, ... {'From Values'}]; end function plout = getDefaultPlist(set) persistent pl; persistent lastset; if exist('pl', 'var')==0 || isempty(pl) || ~strcmp(lastset, set) pl = matrix.buildplist(set); lastset = set; end plout = pl; end function out = buildplist(set) if ~utils.helper.ismember(lower(matrix.SETS), lower(set)) error('### Unknown set [%s]', set); end out = plist(); out = matrix.addGlobalKeys(out); out = buildplist@ltpda_uoh(out, set); switch lower(set) case 'default' p = param({'shape', 'Specify the shape of the resulting matrix.'}, paramValue.EMPTY_DOUBLE); out.append(p); p = param({'objs', 'Matrix of user objects.'}, paramValue.EMPTY_DOUBLE); out.append(p); case 'from input' p = param({'shape', 'Specify the shape of the resulting matrix.'}, paramValue.EMPTY_DOUBLE); out.append(p); p = param({'objs', 'Matrix of user objects.'}, paramValue.EMPTY_DOUBLE); out.append(p); case 'from csd' % CSD p = param({'csd','A matrix of fsdata AOs containing the cross spectral density matrix elements.'}, paramValue.EMPTY_DOUBLE); out.append(p); % Target Objects p = param({'targetobj', ['Choose the type of output objects:<ul>',... '<li>''miir'' output a matrix containing filterbanks of parallel miir filters</li>',... '<li>''parfrac'' output a matrix containing parafracs objects</li>']}, ... {1, {'miir','parfrac'}, paramValue.OPTIONAL}); out.append(p); % Fs p = param({'fs', 'The sampling frequency of the discrete filters.'}, {1, {1}, paramValue.OPTIONAL}); out.append(p); % Max Iter p = param({'MaxIter', 'Maximum number of fit iterations.'}, {1, {50}, paramValue.OPTIONAL}); out.append(p); % Pole type p = param({'PoleType',['Choose the pole type for fitting initialization:<ul>',... '<li>1 == use real starting poles</li>',... '<li>2 == generates complex conjugate poles of the type <tt>a.*exp(theta*pi*j)</tt> with <tt>theta = linspace(0,pi,N/2+1)</tt></li>',... '<li>3 == generates complex conjugate poles of the type <tt>a.*exp(theta*pi*j)</tt> with <tt>theta = linspace(0,pi,N/2+2)</tt></li></ul>']}, ... {1, {1, 2, 3}, paramValue.SINGLE}); out.append(p); % Min order p = param({'MinOrder','Minimum order to fit with.'}, {1, {7}, paramValue.OPTIONAL}); out.append(p); % Max Order p = param({'MaxOrder','Maximum order to fit with.'}, {1, {35}, paramValue.OPTIONAL}); out.append(p); % Weights p = param({'Weights',['Choose weighting for the fit:<ul>',... '<li> 1 == equal weights for each point</li>',... '<li> 2 == weight with <tt>1/abs(model)</tt></li>',... '<li> 3 == weight with <tt>1/abs(model).^2</tt></li>',... '<li> 4 == weight with inverse of the square mean spread of the model</li></ul>']}, {2, {1 2 3 4}, paramValue.SINGLE}); out.append(p); % Plot p = param({'Plot', 'Plot results of each fitting step.'}, paramValue.TRUE_FALSE); p.val.setValIndex(2); out.append(p); % MSE Vartol p = param({'MSEVARTOL', ['Mean Squared Error Variation - Check if the realtive variation of the mean squared error is<br>',... 'smaller than the value specified. This option is useful for finding the minimum of Chi squared.']}, ... {1, {1e-2}, paramValue.OPTIONAL}); out.append(p); % FIT TOL p = param({'FITTOL',['Mean Squared Error Value - Check if the mean squared error value <br>',... ' is lower than the value specified.']}, {1, {1e-2}, paramValue.OPTIONAL}); out.append(p); % UseSym p = param({'UseSym', ['Use symbolic calculation in eigen-decomposition.<ul>'... '<li>''on'' - uses symbolic math toolbox calculation<br>'... 'for poles stabilization</li>'... '<li>''off'' - perform double-precision calculation<br>'... 'for poles stabilization</li>']}, {1, {'on','off'}, paramValue.SINGLE}); out.append(p); % Iunits p = param({'iunits', 'The unit to set as input unit for the output filters'}, paramValue.EMPTY_STRING); out.append(p); % Ounits p = param({'ounits', 'The unit to set as output unit for the output filters'}, paramValue.EMPTY_STRING); out.append(p); case 'multichannel noise' % Model p = param({'model','A matrix of filterbanks or parfarcs objects, modeling multichannel system response.'}, paramValue.EMPTY_DOUBLE); out.append(p); % Nsecs p = param({'nsecs', 'Number of seconds in the desired noise data series.'}, {1, {1}, paramValue.OPTIONAL}); out.append(p); % Fs p = param({'fs', 'The sampling frequency of the noise data series.'}, {1, {1}, paramValue.OPTIONAL}); out.append(p); % Yunits p = param({'yunits','Unit on Y axis.'}, paramValue.STRING_VALUE('m')); out.append(p); case 'from values' % Values p = param({'values', 'Each value will create a single AO.'}, paramValue.EMPTY_DOUBLE); out.append(p); % Yunits p = param({'yunits', 'Y-unit for the AOs which are built from the values'}, paramValue.EMPTY_CELL); out.append(p); % Names p = param({'names', 'Names for the AOs which are built from the values'}, paramValue.EMPTY_CELL); out.append(p); end end % function out = getDefaultPlist(varargin) function obj = initObjectWithSize(n,m) obj = matrix.newarray([n m]); end end % End static methods %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Methods (static, private) % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% methods (Static, Access=private) varargout = elementOp(varargin) end % End static, private methods %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Methods (static, hidden) % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% methods (Static = true, Hidden = true) varargout = loadobj(varargin) varargout = update_struct(varargin); end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Methods (public) % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% methods varargout = char(varargin) varargout = display(varargin) varargout = copy(varargin) out = det(varargin) out = inv(varargin) varargout = minus(varargin) varargout = plus(varargin) varargout = rdivide(varargin) varargout = times(varargin) varargout = mtimes(varargin) varargout = transpose(varargin) varargout = ctranspose(varargin) varargout = filter(varargin) varargout = conj(varargin) varargout = nrows(varargin) varargout = ncols(varargin) varargout = osize(varargin) varargout = setObjs(varargin) varargout = getObjectAtIndex(varargin) end methods (Hidden = true) varargout = attachToDom(varargin) end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Methods (protected) % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% methods (Access = protected) varargout = fromInput(varargin) varargout = fromStruct(varargin) varargout = fromDom(varargin) end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Methods (private) % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% methods (Access = private) % Constructors varargout = wrapper(varargin) a = fromCSD(a, pli) a = MultiChannelNoise(a, pli) end end % End classdef