Mercurial > hg > ltpda
diff m-toolbox/m/mdcs/mdc1/ltpda_mdc1_input_noises.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/ltpda_mdc1_input_noises.m Wed Nov 23 19:22:13 2011 +0100 @@ -0,0 +1,199 @@ + % LTPDA_MDC1_IFO_NOISE returns a model spectrum of the IFO sensing noise for MDC1. + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % DESCRIPTION: LTPDA_MDC1_IFO_NOISE returns a model spectrum of the IFO + % sensing noise for MDC1. + % + % CALL: b = ltpda_mdc1_ifo_noise(pl) + % + % PARAMETERS: + % + % 'source' - Choose source of noise [default: 'ifo'] + % 'ifo' - IFO sensing noise [m^2/Hz] + % 'sc' - Spacecraft force noise [m^4s^{-2}/Hz] + % 'tm' - Test-mass force noise [m^4s^{-2}/Hz] + % '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_input_noises.m,v 1.2 2008/08/08 13:35:23 anneke Exp $ + % + % The following call returns a parameter list object that contains the + % default parameter values: + % + % >> pl = ltpda_mdc1_ifo_noise(ao, 'Params') + % + % The following call returns a string that contains the routine CVS version: + % + % >> version = ltpda_mdc1_ifo_noise(ao,'Version') + % + % The following call returns a string that contains the routine category: + % + % >> category = ltpda_mdc1_ifo_noise(ao,'Category') + % + % HISTORY: 11-04-08 M Hewitson + % Creation + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + function varargout = ltpda_mdc1_input_noises(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 + + source = find(pl, 'source'); + + %% Compute response for frequencies f + + switch source + case 'ifo' + a = getIfoNoise(f); + case 'tm' + a = getTMNoise(f); + case 'sc' + a = getSCNoise(f); + otherwise + error('### Unknown noise source requested.'); + end + + varargout{1} = a; + end + %-------------------------------------------------------------------------- + % Get IFO noise for each frequency + function o = getIfoNoise(f) + + % Description of the noise + fcn = '0.5*(5e-12)^2 * ( 1 + (1+1e8)./(1+f.^2/1e-12) .* (1 + (1+9e6)./(1+f.^2/1e-14) ))'; + % Pack in a plist + pl = plist('fsfcn', fcn, 'f', f); + + % Build AO from plist + o = ao(pl); + o.setName('o_nxx', 'internal'); + o.setXunits('Hz'); + o.setYunits('m^2/Hz'); + end + %-------------------------------------------------------------------------- + % Get SC noise for each frequency + function o = getSCNoise(f) + + % Zeros as constant factors + z1 = 1 + (10e-3/1e-6)^2; + z2 = 1 + (0.1e-3/0.1e-6)^2; + % AOs for frequency-dependent parts + p1 = ao(plist('fsfcn', '1 + (f./100).^2', 'f', f)); + p2 = ao(plist('fsfcn', '1 + (f/1e-6).^2', 'f', f)); + p3 = ao(plist('fsfcn', '1 + (f/0.1e-6).^2', 'f', f)); + + % Combine the parts + G = (0.1e-6/436)^2; + o = G .* (1./p1 + (z1./p2).*(1 + z2./p3 )); + + % Set properties of final AO + o.setName('A_nxx', 'internal'); + o.setXunits('Hz'); + o.setYunits('m^2s^{-4}/ Hz'); + + end + %-------------------------------------------------------------------------- + % Get TM noise for each frequency + function o = getTMNoise(f) + + % Construct the various parts of the spectrum + + % zeros + z1 = ao(plist('fsfcn', '(1 + (f./100).^2)', 'f', f)); + z2 = (1 + (3e-3/1e-6).^2); + z3 = ao(plist('fsfcn', '(1 + (f./1e-6).^2)', 'f', f)); + z4 = (1 + (0.1e-3./0.1e-6).^2); + z5 = ao(plist('fsfcn', '(1 + (f./0.1e-6).^2)', 'f', f)); + + % poles + p1 = (1 + (1e-3./100).^2); + p2 = (1 + (3e-3./1e-6).^2); + p3 = (1 + (1e-3./1e-6).^2); + p4 = (1 + (0.1e-3./0.1e-6).^2); + p5 = (1 + (1e-3./0.1e-6).^2); + + % Combine the parts + o = (30e-15)^2 .* ( (1./z1 + z2./z3.*(1 + z4./z5)) ./ (1./p1 + p2./p3.*(1 + p4./p5))); + + % Set properties of final AO + o.setName('A_1xx', 'internal'); + o.setXunits('Hz'); + o.setYunits('m^2s^{-4}/ Hz'); + + end + %% Default parameters + function plo = getDefaultPlist(varargin) + % List of available parameter sets + sets = {'List', 'Range'}; + if nargin == 0 + plo = sets; + return + end + set = varargin{1}; + switch set + case 'List' + plo = plist('source', 'ifo', 'f', [1]); + case 'Range' + plo = plist('source', 'ifo', ... + 'f1', 1e-6,... + 'f2', 5,... + 'nf', 1000,... + 'scale', 'log'); + otherwise + plo = plist(); + end + end + + %-------------------------------------------------------------------------- + function ii = getInfo(varargin) + if nargin == 1 && strcmpi(varargin{1}, 'None') + sets = {}; + pl = []; + else + sets = {'Default'}; + pl = getDefaultPlist; + end + % Build info object + ii = minfo(mfilename, 'CLASS', '', 'CATEGORY', '$Id: ltpda_mdc1_input_noises.m,v 1.2 2008/08/08 13:35:23 anneke Exp $', sets, pl); + end