Upload
others
View
8
Download
0
Embed Size (px)
Citation preview
MDC2 and SSM models
M HewitsonLTP DA MeetingTrento November 2008
LTPDA Meeting, Trento Nov 2008
SSM Tutorials
2
A beginner’s guide to using the SSM class for LTP folks -- Part 1
M Hewitson, 06-10-08
Here are my experiences while learning how to use the SSM class of LTPDA. It might be useful to others.
NOTE: the following examples require a CVS tree that is up-to-date as of 10:45 am 06-10-08 CET.
Introduction
The following set of tutorials assume you have the LTP SSM models installed (cvs checkout of the ltpda_ssm_models module) and added to your ltpda_startup file. Here’s how it looks
in my ltpda_startup.
SSM_MODELS = '/Users/hewitson/working/ltp/ltp_ssm_models';
Now we can easily build our first model. All models are built by calling the SSM constructor: ssm(). To see which built-in models are available to you:
>> ssm(plist('built-in', ''))001: DFACS_10_Drift_Mode_3_1_closed_loop_phase002: DFACS_11_Drift_Mode_3_2_open_loop_phase003: DFACS_12_Drift_Mode_4_1_closed_loop_phase004: DFACS_13_Drift_Mode_4_2_open_loop_phase005: DFACS_14_Drift_Mode_5_1_closed_loop_phase006: DFACS_15_Drift_Mode_5_2_open_loop_phase007: DFACS_16_Drift_Mode_6_1_closed_loop_phase008: DFACS_17_Drift_Mode_6_2_open_loop_phase009: DFACS_18_Drift_Mode_7_1_closed_loop_phase010: DFACS_19_Drift_Mode_7_2_open_loop_phase011: DFACS_1_Normal_Mode_Default012: DFACS_20_Drift_Mode_8_open_loop_phase013: DFACS_21_Drift_Mode_9_open_loop_phase014: DFACS_22_Drift_Mode_10_open_loop_phase015: DFACS_2_Science_Mode_1_M3016: DFACS_3_Science_Mode_2_Submode_1_M1_Transition017: DFACS_4_Science_Mode_2_Submode_2_M1_Performance018: DFACS_5_Science_Mode_1_All_Optical_Readouts019: DFACS_6_Science_Mode_2_custom1_shared_controlled020: DFACS_7_Science_Mode_2_custom2_x_not_controlled021: DFACS_8_Drift_Mode_2_1_closed_loop_phase022: DFACS_9_Drift_Mode_2_2_open_loop_phase023: IS_readout_xcpl
A beginner’s guide to using the SSM class for
LTP folks -- Part 2
M Hewitson, 06-10-08
Tutorial 2
Let’s try making a simple SSM object of our own. For example, suppose we want a simple
model of the OMS on LTP with only a simple cross-coupling matrix.
We can build an SSM object by describing it in a plist. The things we need to specify are:
Key Name Description
name A name for the object
timestep The sample rate for the mode (0 is continuous)
paramnames The names of any parameters in the model (give a cell-array)
inputnames The names of any input blocks
inputvarnames The names of the input ports for each input block (cell-array of cell-arrays)
outputvarnames The names of the output ports for each output block (cell-array of cell-arrays)
amats The A matrices of the statespace model
bmats The B matrices of the statespace model
cmats The C matrices of the statespace model
dmats The D matrices of the statespace model
ssnames State names
A beginner’s guide to using the SSM class for LTP folks -- Part 3
M Hewitson, 06-10-08
In this part we carry from parts 1 and 2 and try connect up the DFACS model with the IFO model.
Putting systems together is done using the assemble command.
To put together the DFACS model, C, and the IFO model, I, we do
>> DFACS_I = assemble(I, C)
------ ssm/1 ------- description: amats: { [78x78] } [1x1] mmats: { [78x78] } [1x1] bmats: { [78x2] [78x2] [] [] [78x2] [78x4] [] } [1x7] cmats: { [] [3x78] } [2x1] dmats: { [2x2] [2x2] [] [] [] [] [] [3x2] [3x2] [] [] [3x2] [3x4] [3x3] } [2x7] isnumerical: false timestep: 0 nonlin: {} [0x6] inputnames: { 'SC_TM_attitude' 'Dist_Ifo_readout' 'ST_readout_delayed' 'IS_readout_delayed' 'Ifo_readout_delayed' 'bias' 'test signal' } [1x7] inputvarnames: { { 'rx1_H1' 'rx2_H2' } { 'Dist_x1_Ifo_ro' 'Dist_dx_Ifo_ro' } { } { 'rx1_H1_IS_delayed' 'rx2_H2_IS_delayed' } { 'rx1_H1_Ifo_delayed' 'dx_Ifo_delayed' } { 'rx1_H1_IS_bias' 'rx2_H2_IS_bias' 'rx1_H1_Ifo_bias' 'dx_Ifo_bias' } { 'fx_mps_ts' 'fx1_TMAct_ts' 'fx2_TMAct_ts' } } [1x7] inputsizes: [2 2 0 2 2 4 3] inputconn: [1 1 1 1 2 1 1] Ninputs: 7 ssnames: { '1D_n_DFACS_5_Science_Mode_1_All_Optical_Readouts' } [1x1] ssvarnames: { { '1D_n_DFACS_5_Science_Mode_1_All_Optical_Readouts>1 ' '1D_n_DFACS_5_Science_Mode_1_All_Optical_Readouts>2 ' '1D_n_DFACS_5_Science_Mode_1_All_Optical_Readouts>3 ' '1D_n_DFACS_5_Science_Mode_1_All_Optical_Readouts>4 ' '1D_n_DFACS_5_Science_Mode_1_All_Optical_Readouts>5 ' '1D_n_DFACS_5_Science_Mode_1_All_Optical_Readouts>6 ' '1D_n_DFACS_5_Science_Mode_1_All_Optical_Readouts>7 ' '1D_n_DFACS_5_Science_Mode_1_All_Optical_Readouts>8 ' '1D_n_DFACS_5_Science_Mode_1_All_Optical_Readouts>9 ' '1D_n_DFACS_5_Science_Mode_1_All_Optical_Readouts>10 '
A beginner’s guide to using the SSM class for
LTP folks -- Part 4
M Hewitson, 06-10-08
In this part we build some more parts of the LTP simulation. We want to build thrusters,
electro-static actuators, and a dynamical model.
The three new commands are:
Thrusters = ssm(plist('built-in', 'MPS', ...
'dim', 1, ...
'withParams', true));
ESS = ssm(plist('built-in', 'TMActuation_xcpl', ...
'dim', 1, ...
'withParams', true));
D = ssm(plist('built-in', 'LPF_Dynamics', ...
'dim', 1, ...
'withParams', true));
We can now assemble these with the other parts, the IFO and the
DFACs. Before we can do that, we need to assemble all the
continuous models and discretize the result, before combining with the
A beginner’s guide to using the SSM class for
LTP folks -- Part 5
M Hewitson, 09-10-08
In Part 4 we ended with a closed-loop model of LTP. Now we will introduce some further
elements to the model: noise shape filter inputs.
First a note: the IFO model introduced in Part 2 (and used in Parts 3 and 4) was not correct.
For this tutorial we take a simple non-parametric model for the IFO and return to
parameterising it in a later tutorial.
So now the IFO is
I = ssm(plist('name', 'IFO-1D-Xcpl', 'timestep', 0, ...
'inputnames', { 'SC_TM_attitude' 'Dist_Ifo_readout' }, ...
'inputvarnames', { { 'rx1_H1' 'rx2_H2' } { 'Dist_x1_Ifo_ro'
'Dist_dx_Ifo_ro' } }, ...
'outputnames', { 'Ifo_readout_delayed' }, ...
'outputvarnames', { { 'rx1_H1_Ifo' 'dx_Ifo' } }, ...
'amats', cell(0,0), ...
'bmats', cell(0,2), ...
'cmats', cell(1,0), ...
'dmats', {[1 0; -1 1], [1 0; 0 1]}, ...
'ssnames', cell(1,0)));
which simulates:
Interferometer Sensing Noise
Let’s now get a noise-shape filter for the sensing noise from the built-in models:
ifo_sense_noise = ssm(plist('built-in', 'NSF_Interferometer_readout', ...
'dim', 1, ...
'withParams', true));
The ‘NSF’ in the name stands for noise-shape-filter (obviously). The parameters in the model
are defined according to the equation for the filter transfer function:
�o1
o12
⇥=
�1 0�1 1
⇥ �x1
x2
⇥
A beginner’s guide to using the SSM class for
LTP folks -- Part 6
M Hewitson, 09-10-08
This time we will look at injecting signals to the model during the simulation.
Let’s build a white-noise source and inject it into the bias input of DFACS for the differential
channel.
First we build an AO containing the noise:
fs = 1./loop.timestep;
nsecs = 10000;
a = ao(plist('tsfcn', '1e-9*randn(size(t))', 'fs', fs, 'nsecs', nsecs));
Now we can tell simulate where to inject this AO. We specify this in the plist with the key
‘aos variable names’:
pl = plist('aos variable names', {'dx_Ifo_bias'}, 'aos', a, ...
'return outputs', {'rx1_H1_Ifo', 'dx_Ifo'},...
'noise variable names', ...
{'thrust_noise_in', 'n_x_Ifo_ro', 'n_dx_Ifo_ro', 'n_fx1_TM', 'n_fx2_TM'}, ...
'covariance', diag([1 0.1 0.1 1 1]));
In contrast to last time, we no
longer need to specify the
simulation length; it is taken
from the input AO(s).
We then run the simulation as
before:
[b, plout] =
loop.simulate(pl)
Here we see that the differential
output has some excess noise:
1 of 4
LTPDA Meeting, Trento Nov 2008
Other SSM notes
3
Comparing SSM models to MDC1
M Hewitson 10-10-08
The purpose of this note is to compare various elements of the SSM 1D model of LTP to the
components we are familiar with from MDC1 and MDC2.
DFACS
We compare the two x controllers.
First build the SSM model:
C = ssm(plist('built-in',
'DFACS_5_Science_Mode_1_All_Optical_Readouts', ...
'dim', 1, 'withParams', true));
Now extract the two transfer functions we are interested in:
% The controller that takes o1 and feeds back to FEEPs.
pl = plist('inputs', {'rx1_H1_Ifo_delayed'}, 'outputs',
{'fx_mps_c'});
o1toFeeps = bode(C, pl);
% The controller that takes o12 and feeds back to TM2
actuator
pl = plist('inputs', {'dx_Ifo_delayed'}, 'outputs',
{'fx2_TMAct_c'});
o12toTM2 = bode(C, pl);
Now load the two models from MDC1
o1toFeeps_mdc1 = df_controller(o1toFeeps.data.getX);
o12toTM2_mdc1 = sus_controller(o12toTM2.data.getX);
and then compare them:
iplot(o1toFeeps, o1toFeeps_mdc1)
iplot(o1toFeeps./ o1toFeeps_mdc1)
and
iplot(o12toTM2, o12toTM2_mdc1)
iplot(o12toTM2./ o12toTM2_mdc1, plist('Yscales', {'all', 'lin'}))
Comparing SSM models to MDC2
M Hewitson 10-10-08
The purpose of this note is to compare various elements of the SSM 1D model of LTP to the
components we are familiar with from MDC1 and MDC2. This follows on from the document
“Comparing SSM models to MDC1”.
We assume the results from that document and add here the measured open-loop gains of
the MDC2 model. Since we can’t directly measure the open-loop gain, we have to measure
the transfer function
T = O/(1-O)
and convert this to an open loop measurement by
O = T/(1+T)
The measurement of the drag-free loop at low-frequency is quite difficult because the loop
gain is so high and the data length is relatively short.
Anyway, the comparison for the drag-free loop is:
Comparing SSM models to MDC2
M Hewitson 10-10-08
The purpose of this note is to compare the output of ssm/simulate and the output of ssm/
bode. The model used for the analysis is a 1D model of LTP.
Using simulate we generate simulated outputs of the model and measure the transfer
functions of interest by injecting white-noise. Using bode() we extract the transfer functions
directly from the statespace equations.
The model
The model used for the simulation is depicted here:
And the code listing is:
%% Build simulation
% Controllers
C = ssm(plist('built-in',
'DFACS_5_Science_Mode_1_All_Optical_Readouts', ...
'dim', 1, ...
'withParams', true));
C.setName;
% Actuators
Thrusters = ssm(plist('built-in', 'MPS', ...
'dim', 1, ...
'withParams', true));
Thrusters.setName;
ESS = ssm(plist('built-in', 'TMActuation_xcpl', ...
'dim', 1, ...
'withParams', true));
ESS.setName;
% Dynamics
D = ssm(plist('built-in', 'LPF_Dynamics', ...
'dim', 1, ...
'withParams', true));
D.setName;
Simulating MDC2 with SSM models
M Hewitson 10-10-08
The purpose of this note is to simulate MDC2 outputs using SSM models to decouple the
analysis methods from the model differences.
Using the SSM model of LTP described in previous notes, the outputs of the IFO were
simulated using the injected signals from MDC2.
The input signals are:
The output signals are:
LTPDA Meeting, Trento Nov 2008
Simulate MDC2 with SSM models
• Why?• To have the same model for data generation and analysis
• to have control over both ends of the process• to de-couple data production from tool development
4
LTPDA Meeting, Trento Nov 2008
MDC2 model
5
i2
i1
Csus
CDFGDF
Gsus
D(�21)
o1
o12
�21
D(�23)
�12
interferometer
�2�
LTPDA Meeting, Trento Nov 2008
SSM Parts
• DFACS• Thruster Actuation• Capacitive Actuation of TM2• Dynamics• Interferometer• Sensing Noise• TM Force Noise• Thruster Noise
6
All 1D, parametric
LTPDA Meeting, Trento Nov 2008
SSM: DFACs
7
C = ssm(plist('built-in', 'DFACS_5_Science_Mode_1_All_Optical_Readouts', ... 'dim', 1, ... 'withParams', true));
C
IS_readout_delayed
Ifo_readout_delayed
bias
test signal
DFACS_command
rx1_H1_IS_delayed
rx2_H2_IS_delayed
rx1_H1_Ifo_delayed
dx_Ifo_delayed
rx1_H1_IS_bias
rx2_H2_IS_bias
rx1_H1_Ifo_bias
dx_Ifo_bias
fx_mps_ts
fx1_TMAct_ts
fx2_TMAct_ts
fx_mps_c
fx1_TMAct_c
fx2_TMAct_c
LTPDA Meeting, Trento Nov 2008
Thruster Actuation
8
Thrusters = ssm(plist('built-in', 'MPS', ... 'dim', 1, ... 'withParams', true));
Thrusters
DFACS_command
F_mps
fx_mps_c
fx1_TMAct_c
fx2_TMAct_c
fx_mps
LTPDA Meeting, Trento Nov 2008
Capacitive Actuation
9
ESS = ssm(plist('built-in', 'TMActuation_xcpl', ... 'dim', 1, ... 'withParams', true));
ESS
DFACS_command
Dist_F_TMAct
F_TMAct
fx_mps_c
fx1_TMAct_c
fx2_TMAct_c
Dist_fx1_TMAct
Dist_fx2_TMAct
fx1_TMAct
fx2_TMAct
LTPDA Meeting, Trento Nov 2008
Dynamics
10
D = ssm(plist('built-in', 'LPF_Dynamics', ... 'dim', 1, ... 'withParams', true));
D
F_mps
Dist_F_MPS
F_TMAct
Dist_F_solar
Dist_F_infrared
Dist_F_TM
Dist_F_TM_SC
Dist_F_gravity
SC_TM_attitude
fx_mps
Dist_fx_mps
fx1_TMAct
fx2_TMAct
Dist_fx_solar
Dist_fx_infrared
Dist_fx1_TM
Dist_fx2_TM
Dist_fx1_TM_SC
Dist_fx2_TM_SC
Dist_fx_gravity
rx1_H1
rx2_H2
D
F_mps
Dist_F_MPS
F_TMAct
Dist_F_solar
Dist_F_infrared
Dist_F_TM
Dist_F_TM_SC
Dist_F_gravity
SC_TM_attitude
fx_mps
Dist_fx_mps
fx1_TMAct
fx2_TMAct
Dist_fx_solar
Dist_fx_infrared
Dist_fx1_TM
Dist_fx2_TM
Dist_fx1_TM_SC
Dist_fx2_TM_SC
Dist_fx_gravity
rx1_H1
rx2_H2
LTPDA Meeting, Trento Nov 2008
Interferometer
11
I = ssm(plist('name', 'IFO-1D-Xcpl', 'timestep', 0, ... 'paramnames', {'delta'},'paramvalues', 1e-4, ... 'inputnames', { 'SC_TM_attitude' 'Dist_Ifo_readout' }, ... 'inputvarnames', { { 'rx1_H1' 'rx2_H2' } { 'Dist_x1_Ifo_ro' 'Dist_dx_Ifo_ro' } }, ... 'outputnames', { 'Ifo_readout_delayed' }, ... 'outputvarnames', { { 'rx1_H1_Ifo' 'dx_Ifo' } }, ... 'amats', cell(0,0), ... 'bmats', cell(0,2), ... 'cmats', cell(1,0), ... 'dmats', {[1 0; -1+sym('delta') 1], [1 0; 0 1]}, ... 'ssnames', cell(1,0)));
�o1
o12
⇥=
�1 0
�1 + � 1
⇥ �x1
x2
⇥
IFO-1D-Xcpl
SC_TM_attitude
Dist_Ifo_readout
Ifo_readout_delayed
rx1_H1
rx2_H2
Dist_x1_Ifo_ro
Dist_dx_Ifo_ro
rx1_H1_Ifo
dx_Ifo
LTPDA Meeting, Trento Nov 2008
Sensing Noise
12
ifo_sense_noise = ssm(plist('built-in', 'NSF_Interferometer_readout', 'dim', 1, ... 'withParams', true));
NSF_Interferometer_readout reduced
Noise_Ifo_readout
DC_Ifo_readout
Dist_Ifo_readout
n_x_Ifo_ro
n_dx_Ifo_ro
DC_x_Ifo_ro
DC_dx_Ifo_ro
Dist_x1_Ifo_ro
Dist_dx_Ifo_ro
LTPDA Meeting, Trento Nov 2008
TM Force Noise
13
tm_noise = ssm(plist('built-in', 'NSF_TM', 'dim', 1, ... 'withParams', true));
NSF_TM reduced
Noise_F_TM
DC_F_TM
Dist_F_TM
n_fx1_TM
n_fx2_TM
DC_fx1_TM
DC_fx2_TM
Dist_fx1_TM
Dist_fx2_TM
LTPDA Meeting, Trento Nov 2008
Thruster Force Noise
14
pzm = pzmodel(1000e-6, {[1e-4], 1e-4}, {1e-2, 1e-2});thrust_noise = ssm(pzm);thrust_noise.modify(plist('commands', {'outputnames = {''Dist_F_solar''}', ... 'inputvarnames = {{''thrust_noise_in''}}'}));thrust_noise.setName('Thrust Noise');
Thrust Noise
U
Dist_F_solar
thrust_noise_in
Y>1
LTPDA Meeting, Trento Nov 2008
Assemble the model
• First we need to assemble continuous parts:
• Then substitute all parameters for their values:
• Now we can make this discrete:
• Now assemble with DFACS (already discrete):
15
Cparts = assemble(Thrusters, ESS, D, I,ifo_sense_noise, thrust_noise, tm_noise);
Cparts.modifparams;
Cparts.modiftimestep(0.1);
loop = assemble(C,Cparts_D);
LTPDA Meeting, Trento Nov 2008
The full loop
16
C
IS_readout_delayed
Ifo_readout_delayed
bias
test signal
DFACS_command
Thrusters
DFACS_command
F_mps
ESS
DFACS_command
Dist_F_TMAct
F_TMAct
D
F_mps
Dist_F_MPS
F_TMAct
Dist_F_solar
Dist_F_infrared
Dist_F_TM
Dist_F_TM_SC
Dist_F_gravity
SC_TM_attitude
IFO-1D-Xcpl
SC_TM_attitude
Dist_Ifo_readout
Ifo_readout_delayed
NSF_Interferometer_readout reduced
Noise_Ifo_readout
DC_Ifo_readout
Dist_Ifo_readout
Thrust Noise
U
Dist_F_solar
NSF_TM reduced
Noise_F_TM
DC_F_TM
Dist_F_TM
rx1_H1_IS_delayed
rx2_H2_IS_delayed
rx1_H1_Ifo_delayed
dx_Ifo_delayed
rx1_H1_IS_bias
rx2_H2_IS_bias
rx1_H1_Ifo_bias
dx_Ifo_bias
fx_mps_ts
fx1_TMAct_ts
fx2_TMAct_ts
fx_mps_c
fx_mps_c
fx_mps_c
fx1_TMAct_c
fx1_TMAct_c
fx1_TMAct_c
fx2_TMAct_c
fx2_TMAct_c
fx2_TMAct_c
fx_mps
fx_mps
Dist_fx1_TMAct
Dist_fx2_TMAct
fx1_TMAct fx1_TMAct
fx2_TMAct fx2_TMAct
Dist_fx_mps
Dist_fx_solar
Dist_fx_infrared
Dist_fx1_TM
Dist_fx2_TM
Dist_fx1_TM_SC
Dist_fx2_TM_SC
Dist_fx_gravity
rx1_H1 rx1_H1
rx2_H2 rx2_H2
Dist_x1_Ifo_ro
Dist_dx_Ifo_ro
rx1_H1_Ifo
dx_Ifo
n_x_Ifo_ro
n_dx_Ifo_ro
DC_x_Ifo_ro
DC_dx_Ifo_ro
Dist_x1_Ifo_ro
Dist_dx_Ifo_ro
thrust_noise_in
Y>1
n_fx1_TM
n_fx2_TM
DC_fx1_TM
DC_fx2_TM
Dist_fx1_TM
Dist_fx2_TM
LTPDA Meeting, Trento Nov 2008
Measurement campaign
• Want to measure 4 parameters
• Make 4 measurements:1.inject into drag-free loop (i1) and measure at o12.inject into suspension loop (i12) and measure at o123.match stiffness of TM1 and TM2 (IS bias equal along x for both TMs),
inject into drag-free loop and measure at o124.bias off for TM1, inject into i1 and measure at o12
• Inject two signals per parameter/measurement
17
Gsus Gdf �12 �2�
GsusGdf
�12
�2�
LTPDA Meeting, Trento Nov 2008
Choosing injection signals
• look at the Transfer Functions, i1o1, i12o12, i1o12 for different parameter values
• First for Gsus:• take values 0.5 and
1.5• inject at 3.2mHz and
7mHz
18
LTPDA Meeting, Trento Nov 2008
Signals for Gdf
• For Gdf:• take values 0.5 and 1.5• inject at 45mHz and
185mHz
19
LTPDA Meeting, Trento Nov 2008
Signals for delta
• For delta:• take values 1e-4 and
2e-4• we can inject
anywhere, but overall TF amplitude is an issue
• I took 3.2mHz and 7mHz
20
LTPDA Meeting, Trento Nov 2008
Signals for omega-delta
• For omega-delta:• take values of
1.3e-6 and 2e-6 for stiffness of TM2
• inject at 1.1mHz and 2.3mHz
21
LTPDA Meeting, Trento Nov 2008
Simulation for Gsus
• simulate IFO outputs with the injected signal described earlier and nominal noise levels
22
LTPDA Meeting, Trento Nov 2008
Simulation for Gsus
23
LTPDA Meeting, Trento Nov 2008
Simulation for delta
24
LTPDA Meeting, Trento Nov 2008
Simulation for omega-delta
25
LTPDA Meeting, Trento Nov 2008
Measure TFs
• measuring the TFs was done very simply:• ratio of FFTs
26
tf = fft(o12)./fft(is1);
GsusGdf delta
omega-delta
LTPDA Meeting, Trento Nov 2008
Target functions for MDC2 parameters
• need special target functions to minimise• these need to
• take assembled continuous parts and DFACS as inputs• change parameter values in continuous parts• substitute parameter values (go numeric) in continuous part• discretize continuos part• assemble loop• return transfer function with bode()
27
% Set parameters Cparts = Cparts_in.setparams(... {'delta', 'p_mps_11', 'p_TM2Act11', 'p_dyn_w_TM1_11','p_dyn_w_TM2_11'}, ... [ delta Gdf Gsus w1 w3 ]); % Go numeric Cparts.modifparams; % discretize Cparts.modiftimestep(0.1); % assemble discrete parts loop = assemble(C,Cparts); % get TFs out = bode(loop, plist('inputs', 'rx1_H1_Ifo_bias', 'outputs', 'dx_Ifo', 'f', f));
LTPDA Meeting, Trento Nov 2008
Fit Gsus
• pass target function and measured TF to curvefit:
• Only fit between 1 and 10 mHz• Running this gives parameter estimate:
• 1.27283 + 0.0102614 - 0.0100718 [0.806185%,0.791292%]• underlying value is 1.23 so we see some bias
28
pl = plist('Function', 'fitGsus(Xdata, P, ADDP)', ... 'P0', 1, 'LB', 0.5, 'UB', 2, ... 'ADDP', {w1 w3 1 delta C Cparts}, ... 'FitFuncReturn', 'abs'); % Do fit [Gsus, GsusL, GsusU] = curvefit(abs(find(tf, 'x<10e-3 & x>1e-3')), pl);
LTPDA Meeting, Trento Nov 2008
Gsus: fit Vs SNR
• Run the fit for different amplitudes of input signal
29
LTPDA Meeting, Trento Nov 2008
Residual of fit
• simulate IFO outputs (no noise) using the fit value for Gsus• subtract from the original simulated output
30
LTPDA Meeting, Trento Nov 2008
Fit Gdf
• pass target function and measured TF to curvefit:
• Only fit between 0.01 and 0.1 Hz• Running this gives parameter estimate:
• 0.900852 + 0.00151525 - 0.00146102 [0.168201%,0.162182%]• underlying value is 0.9
31
pl = plist('Function', 'fitGdf(Xdata, P, ADDP)', ... 'P0', 1, 'LB', 0.5, 'UB', 2, ... 'ADDP', {w1 w3 1 delta C Cparts}, ... 'FitFuncReturn', 'real');% Do fit[Gdf, GdfL, GdfU] = curvefit(real(find(tf, 'x<0.1 & x>1e-2')), pl);
LTPDA Meeting, Trento Nov 2008
Gdf: fit Vs SNR
32
LTPDA Meeting, Trento Nov 2008
Residual of fit
• simulate IFO outputs (no noise) using the fit value for Gdf• subtract from the original simulated output
33
LTPDA Meeting, Trento Nov 2008
Fit delta
• pass target function and measured TF to curvefit:
• Only fit between 2mHz and 60mHz• Running this gives parameter estimate:
• 0.000204385 + 2.97566e-06 - 2.97567e-06 [1.45591%,1.45591%]• underlying value is 2e-4
34
pl = plist('Function', 'fitDelta(Xdata, P, ADDP)', ... 'P0', 1e-4, 'LB', 1e-5, 'UB', 1e-3, ... 'ADDP', {w1 w3 Gdf Gsus C Cparts}, ... 'FitFuncReturn', 'abs');% Do fit[delta, deltaL, deltaU] = curvefit(abs(find(tf, 'x<60e-3 & x>2e-3')), pl);
LTPDA Meeting, Trento Nov 2008
delta: fit Vs SNR
35
LTPDA Meeting, Trento Nov 2008
Residual of fit
• simulate IFO outputs (no noise) using the fit value for delta• subtract from the original simulated output
36
LTPDA Meeting, Trento Nov 2008
Fit omega-delta
• pass target function and measured TF to curvefit:
• Only fit between 0.8mHz and 2.5 mHz• Running this gives parameter estimate:
• -6.95641e-07 + 1.85882e-08 - 1.86007e-08 [2.6721%,2.67389%]• underlying value is -7e-7
37
pl = plist('Function', 'fitOmegaDelta(Xdata, P, ADDP)', ... 'P0', 0, 'LB', -1e-6, 'UB', 1e-6, ... 'ADDP', {w1 delta Gdf Gsus C Cparts}, ... 'FitFuncReturn', 'abs');% Do fit[od, odL, odU] = curvefit(abs(find(tf, 'x>0.8e-3 & x<2.5e-3')), pl);
LTPDA Meeting, Trento Nov 2008
omega-delta: fit Vs SNR
38
LTPDA Meeting, Trento Nov 2008
Residual of fit
• simulate IFO outputs (no noise) using the fit value for delta• subtract from the original simulated output
39
LTPDA Meeting, Trento Nov 2008
Summary
• The SSM modelling seems to do well as a template generator• we have to worry about higher frequencies
• approximation of simulation Vs bode()• discretization of filters
• Fitting seems not too bad• needs checking for multi-parameter fitting• better scaling of the problem
40