Mercurial > hg > ltpda
diff m-toolbox/m/mdcs/mdc1_UTN/ltpda_free_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_UTN/ltpda_free_dynamics.m Wed Nov 23 19:22:13 2011 +0100 @@ -0,0 +1,193 @@ +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'); + + + + + + + +