diff m-toolbox/m/mdcs/mdc1/models/ltpda_mdc1_dynamics.m @ 0:f0afece42f48

Import.
author Daniele Nicolodi <nicolodi@science.unitn.it>
date Wed, 23 Nov 2011 19:22:13 +0100
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/m-toolbox/m/mdcs/mdc1/models/ltpda_mdc1_dynamics.m	Wed Nov 23 19:22:13 2011 +0100
@@ -0,0 +1,132 @@
+% LTPDA_MDC1_DYNAMICS returns a frequency-domain model of the dynamics for MDC1.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% DESCRIPTION: LTPDA_MDC1_DYNAMICS returns a frequency-domain model of the dynamics
+%              for MDC1.
+%
+% CALL:        b = ltpda_mdc1_dynamics(pl)
+%
+% PARAMETERS:
+% 
+%           'Omega2'   - the square of the stiffness term for the dynamical response
+%                        [default: 1.3e-6]
+%           'f'        - a vector of frequencies [default: 1]
+%    or
+%           'f1'       - start frequency [default: 1e-6]
+%           'f2'       - stop frequency  [default: 5]
+%           'nf'       - number of frequency points [default: 1000]
+%           'scale'    - frequency spacing, 'lin' or 'log' [default: 'log']
+% 
+% VERSION:     $Id: ltpda_mdc1_dynamics.m,v 1.4 2008/08/12 12:33:25 anneke Exp $
+%
+% The following call returns a parameter list object that contains the
+% default parameter values:
+%
+% >> pl = ltpda_mdc1_dynamics(ao, 'Params')
+%
+% The following call returns a string that contains the routine CVS version:
+%
+% >> version = ltpda_mdc1_dynamics(ao,'Version')
+%
+% The following call returns a string that contains the routine category:
+%
+% >> category = ltpda_mdc1_dynamics(ao,'Category')
+%
+% HISTORY: 11-04-08 M Hewitson
+%             Creation
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+function varargout = ltpda_mdc1_dynamics(varargin)
+%%% Check if this is a call for parameters
+      if utils.helper.isinfocall(varargin{:})
+        varargout{1} = getInfo(varargin{3});
+        return
+      end
+
+      %%% Collect input variable names
+      in_names = cell(size(varargin));
+      for ii = 1:nargin,in_names{ii} = inputname(ii);end
+
+      pli             = utils.helper.collect_objects(varargin(:), 'plist', in_names);
+
+      %%% Decide on a deep copy or a modify
+      %%% REMARK: If you create a new AO (call the constructor) then
+      %%%         it is not necessay to copy the input-AOs !!!!!!!!!!!!!!!!!!!!!!!!!
+
+
+      %%% Combine plists
+      pl = combine(pli, getDefaultPlist('Range'));
+
+%% Extract parameters from plist
+
+f = find(pl, 'f');
+if isempty(f)
+  f1    = find(pl, 'f1');
+  f2    = find(pl, 'f2');
+  nf    = find(pl, 'nf');
+  scale = find(pl, 'scale');
+  
+  switch scale
+    case 'lin'
+      f   = linspace(f1, f2, nf);
+    case 'log'
+      f = logspace(log10(f1), log10(f2), nf);
+  end
+end
+
+omega2 = find(pl, 'Omega2');
+
+%% Compute response for frequencies f
+
+varargout{1} = getDynamics(f, omega2);
+end
+%--------------------------------------------------------------------------
+% Get DF controller for each frequency
+function o = getDynamics(f, w2)
+
+  % We take abs() here and use +- omega later
+  w1 = sqrt(abs(w2));
+
+  % DF dynamics
+  pl  = plist('gain',(w1*w1), 'poles', [], 'zeros', [pz(w1/2/pi) pz(-w1/2/pi)]);
+  dfm  = pzmodel(pl);
+
+  % Make an AO from the pzmodel
+  o    = resp(dfm, plist('f', f))  ;
+  o.setName('s^2+\omega^2');
+  o.addHistory(getInfo,plist('Omega2', w2),[],o.hist);
+end
+
+function ii = getInfo(varargin)
+  if nargin == 1 && strcmpi(varargin{1}, 'None')
+    sets = {};
+    pls   = [];
+  elseif nargin == 1&& ~isempty(varargin{1}) && ischar(varargin{1})
+    sets{1} = varargin{1};
+    pls = getDefaultPlist(sets{1});
+  else
+    sets = {'List', 'Range'};
+    pls = [];
+    for kk=1:numel(sets)
+      pls = [pls getDefaultPlist(sets{kk})];
+    end
+  end
+  % Build info object
+  ii = minfo(mfilename, 'MDC1', '', 'Signal Processing', '$Id: ltpda_mdc1_dynamics.m,v 1.4 2008/08/12 12:33:25 anneke Exp $', sets, pls);
+end
+
+function plo = getDefaultPlist(set)
+  switch set
+    case 'List'
+      plo = plist('Omega2', 1.3e-6, 'f', [1]);
+    case 'Range'
+      plo = plist('Omega2', 1.3e-6, ...
+        'f1', 1e-6,...
+        'f2', 5,...
+        'nf', 1000,...
+        'scale', 'log');
+    otherwise
+      plo = plist();
+  end
+end