Mercurial > hg > ltpda
view m-toolbox/m/mdcs/mdc1_UTN/ltpda_free_dynamics.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
function varargout = ltpda_free_dynamics(varargin) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % DESCRIPTION: DATA_REDUCTION converts interferometer data to acceleration % data. This function returns the free dynamics without the action of the % controller circuit. The commanded force has to be subtracted in order to % obtain the output force noise % % % CALL: b = ltpda_free_dynamics(varargin); % ltpda_free_dynamics(varargin); % % INPUTS: % - Aos containing the interferometer data. Aos must be supplied in % couples. % - plist containing the parasitic stiffness and the cross talk % coefficient. The default structure of the plist is: % plo = plist('pstiff1', -13e-7,'pstiff2', -20e-7,'cross_talk', % -1e-4, 'METHOD', 'PARFIT') % - 'pstiff1' is the square of the parasitic stiffness per unit of mass of TM1 % - 'pstiff2' is the square of the parasitic stiffness per unit of mass of TM2 % - 'cross_talk' is the sensitivity of the differential channel % to x1 % - 'METHOD' define the method you want to use for the % calculation of the derivatives. Possible values are: % - 'PARFIT' makes use of the five points stencil parabolic % fit approximation [1] to calculate the derivatives % - 'SERIES' makes use of the five points stencil taylor % series approximation [2] to calculate the derivatives % % Es: b = ltpda_free_dynamics(ao1, ao2); % % Es: b = ltpda_free_dynamics(ao1, ao2, pl); % % % % OUTPUTS: % a vector of Aos containing the data obtained by the application of % the free dynamics to the input data (interferometer data) % % REFERENCES: % [1] L. Carbone et al., Physical Review D 75, 042001 (2007) % [2] S. E. Koonin and D. C. Meredith, COMPUTATIONAL PHYSICS - % Fortran Version, 1990, Westview Press % % VERSION: $Id: ltpda_free_dynamics.m,v 1.1 2008/04/24 16:13:12 luigi Exp $ % % HISTORY: 18-03-2008 L Ferraioli % Creation % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Standard history variables ALGONAME = mfilename; VERSION = '$Id: ltpda_free_dynamics.m,v 1.1 2008/04/24 16:13:12 luigi Exp $'; CATEGORY = 'Signal Processing'; %% Check if this is a call for parameters, the CVS version string % or the method category if nargin == 1 && ischar(varargin{1}) in = char(varargin{1}); if strcmpi(in, 'Params') varargout{1} = getDefaultPL(); return elseif strcmpi(in, 'Version') varargout{1} = VERSION; return elseif strcmpi(in, 'Category') varargout{1} = CATEGORY; return end end %% Collect input ao's, plist's and ao variable names in_names = {}; for ii = 1:nargin in_names{end+1} = inputname(ii); end [as, pl, invars] = collect_inputs(varargin, in_names); % Checks that the input AOs come in pairs if rem(length(as),2) warning('The input AOs must come in pairs!'); return end % produce one parameter list if isa(pl, 'plist') pl = combine(pl, getDefaultPL()); else pl = getDefaultPL(); end %% Initialize outputs % bs = []; %% Defining Constants fs = get(as(1),'fs'); wpx1 = find(pl, 'pstiff1'); wpx2 = find(pl, 'pstiff2'); dSD1 = find(pl, 'cross_talk'); T = 1/fs; %% Defining plist for derivative functions % In this case we need only second order derivatives and zero order in % case we want to use the parabolic fit method pl_2diff = plist('NAME', 'Second deriv plist', 'ORDER', 'SECOND'); pl_0diff = plist('NAME', 'Zero deriv plist', 'ORDER', 'ZERO'); %% Going through analysis objects for jj = 1:2:numel(as)/2 % Extracts the input data a1 = as(jj); a2 = as(jj+1); %% Applying "free dynamics" to data using the differentiation method %% defined in the input plist switch find(pl, 'METHOD') case 'PARFIT' d2_a1 = ltpda_parfit_derivative(a1, pl_2diff); d0_a1 = ltpda_parfit_derivative(a1, pl_0diff); d2_a2 = ltpda_parfit_derivative(a2, pl_2diff); d0_a2 = ltpda_parfit_derivative(a2, pl_0diff); b1 = d2_a1 + wpx1.*d0_a1; b12 = -dSD1.*d2_a1 + (wpx2-wpx1-(dSD1*wpx2)).*d0_a1; b22 = d2_a2 + wpx2.*d0_a2; b2 = b12 + b22; clear b12 b22 case 'SERIES' d2_a1 = ltpda_series_derivative(a1, pl_2diff); d2_a2 = ltpda_series_derivative(a2, pl_2diff); b1 = d2_a1 + wpx1.*a1; b12 = -dSD1.*d2_a1 + (wpx2-wpx1-(dSD1*wpx2)).*a1; b22 = d2_a2 + wpx2.*a2; b2 = b12 + b22; clear b12 b22 end % name, mfilename, description for these objects b1 = setnh(b1, 'name', sprintf('ltpda_free_dynamics(%s)', invars{jj}),... 'description', find(pl,'description')); b2 = setnh(b2, 'name', sprintf('ltpda_free_dynamics(%s)', invars{jj+1}),... 'description', find(pl,'description')); % bs = [bs b1 b2]; % clear('b1', 'b2'); end % %% Reshape the ouput to the same size of the input % % varargout{1} = reshape(bs, size(as)); %% outputs if nargout == 2 varargout{1} = b1; varargout{2} = b2; elseif nargout == 1 varargout{1} = [b1 b2]; end %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % FUNCTION: getDefaultPL % % DESCRIPTION: Get default params % % HISTORY: 01-02-2008 M Hueller % Creation % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function plo = getDefaultPL() plo = plist('pstiff1', -13e-7,'pstiff2', -20e-7,'cross_talk', -1e-4,'METHOD', 'PARFIT', ... 'DESCRIPTION','Application of the free dynamics to interferometer data');