| LTPDA Toolbox™ | contents | ![]() |
This exercise starts with the generation of simulated noise data.
% set output names
outNames = {...
'DELAY_IFO.x1' ... % o1 IFO
'DELAY_IFO.x12' ... % o12 IFO
'DFACS.sc_x', ... % Commanded force F_cmd_X
'DFACS.tm2_x' ... % Commanded force F_cmd_x2
};
% Define parameters and nominal values
params = {...
'FEEPS_XX', ... % FEEPs actuation gain
'CAPACT_TM2_XX', ... % Capacitive actuation gain
'IFO_X12X1', ... % The coupling of the x position of TM1 to the estimated x position of TM2
'EOM_TM1_STIFF_XX', ... % Total stiffness of TM1 along X
'EOM_TM2_STIFF_XX' ... % Total stiffness of TM2 along X
};
% set parameters values for the conversion to acceleration
FEEPS_XX = 1;
CAPACT_TM2_XX = 1;
IFO_X12X1 = 1e-4;
EOM_TM1_STIFF_XX = 1.3e-6;
EOM_TM2_STIFF_XX = 2.0e-6;
% actual values for the parameters
values = [...
FEEPS_XX, ...
CAPACT_TM2_XX, ...
IFO_X12X1, ...
EOM_TM1_STIFF_XX, ...
EOM_TM2_STIFF_XX];
% Create LPF SSM model
pl = plist('built-in', 'LPF', ...
'DIM', 1, ... % We use a one dimensional model
'CONTINUOUS', false, ... % The model is discrete
'param names', params, ... % Parameter names
'param values', values, ... % Parameter values
'VERSION', 'Best Case June 2011'); % Model version
LPF = ssm(pl);
% Create default noise covariance, assumes independent noise sources
cov = LPF.generateCovariance;
% Create a plist to configure the simulation
plsim = plist(...
'return outputs', outNames,...
'cpsd variable names', cov.find('names'), ...
'cpsd', cov.find('cov'), ...
'Nsamples', 1e6);
% Run the simulation
out = LPF.simulate(plsim);
% Unpack the signals from the simulation output matrix
[o1, o12, F_cmd_X, F_cmd_x2] = unpack(out);
Since the method for the conversion to acceleration uses a different naming convention for the parameters, it is convenient to set the convention mapping for the parameters.
Gdf = FEEPS_XX;
Gsus = CAPACT_TM2_XX;
SD1 = IFO_X12X1;
w1 = -1*EOM_TM1_STIFF_XX;
w2 = -1*EOM_TM2_STIFF_XX;
Note that in the method for the conversion to acceleration the stiffness is negative!
'ltp_ifo2acc' likes to work with SI units and in particular the force units have to be expressed in 'kg m s^(-2)'.
F_cmd_X.yunits.toSI;
F_cmd_x2.yunits.toSI;
Now we can set the parameter list for the conversion to acceleration.
pli2a = plist(...
'SD1',SD1,...
'Gdf',Gdf,...
'Gsus',Gsus,...
'w1',w1,...
'w2',w2,...
'OMS delay o1', 0.3, ...
'OMS delay oD', 0.3, ...
'Hdf',F_cmd_X*(-1),...
'Hsus',F_cmd_x2*(-1)...
);
Note the -1 multiplying the commanded forces, this is need because of a difference of convention between 'ssm' and 'ltp_ifo2acc' on the controllers outputs.
Now the conversion to equivalent residual acceleration of the interferometer displacement signals.
[a1,a12] = ltp_ifo2acc(o1,o12,pli2a);
Calculate the square root of the power spetral density in order to check the resuls.
plpsd = plist(...
'order',1, ...
'SCALE', 'ASD' ...
);
a1xx = a1.lpsd(plpsd);
a12xx = a12.lpsd(plpsd);
Remove the first 6 samples (lowest frequencies bins) since they are corrupted by the window function.
plsp = plist(...
'samples', [7 inf] ...
);
a1xxs = a1xx.split(plsp);
a12xxs = a12xx.split(plsp);
Finally, plot the result.
plplot = plist(...
'Linecolors', {'k', 'r'}, ...
'LineStyles', {'--', '-'}, ...
'LineWidths', {3, 3}, ...
'Legends', {'a_1', 'a_{\Delta}'}, ...
'XLABELS', {'All', 'Frequency'}, ...
'YLABELS', {'All', 'PSD^{1/2}'} ...
);
iplot(a1xxs,a12xxs,plplot)
|
Tools for estimating the equivalent acceleration in LTPDA | Topic 4 - Simulating LPF with injected signals. | ![]() |
©LTP Team