Linear Parameter Estimation


At this point we have all the data we need to perform a linear fir to the IFO output data. We start by loading the data we need that we have produced in the previous sections. In particulr:

  1. IFO signals
  2. Inputs for the experiments
  3. Whitening filters
  4. Fit model
    
    odat = matrix('output.mat');
    idat = matrix('input.mat');
    wf   = matrix('whitening_filter.mat');
    H    = ssm('fitting_model.mat');

  

Then we define input ports, output ports and parameters names.

    
    % define input port-names for the different experiments
    InputNames = {{'GUIDANCE.ifo_x1'}, {'GUIDANCE.ifo_x12'}};

    % define output port-names for the different experiments
    OutputNames = {{'DELAY_IFO.x1', 'DELAY_IFO.x12'}, {'DELAY_IFO.x1','DELAY_IFO.x12'}};

    % parameters names
    params = {'FEEPS_XX', 'CAPACT_TM2_XX', 'IFO_X12X1', 'EOM_TM1_STIFF_XX', 'EOM_TM2_STIFF_XX'};

  
Then we can define the input 'aos' for the different experiments and the step that will be used for numerical differentiation. Such step is chosen as the 1% of the nominal parameters values.
    
    % Input signals
    is1ao = idat(1).getObjectAtIndex(1); % extract the AOs
    is2ao = idat(2).getObjectAtIndex(2);
    iS    = collection(is1ao, is2ao); % put inputs inside a collection

    % set numerical derivative step as 1% of the nominal values
    diffStep = [1, 1, 1e-4, 1.935e-06, 2.0e-6] .* 0.01;

  

We have all the data we need for starting the fit. We start defining a 'plist' with all the parameters we need for the current fit session.

    
    plfit = plist(...
            'FitParams', params ,...
            'diffStep', diffStep, ...
            'Model', H, ...
            'Input', iS, ...
            'INNAMES', InputNames, ...
            'OUTNAMES', OutputNames, ...
            'WhiteningFilter', wf, ...
            'tol', 1, ...
            'Nloops', 10, ...
            'Ncut', 1e3);

  
Ready to fit now!
    
    fpars = linfitsvd(odat, plfit);

  

If you want more information about 'linfitsvd' you have to type in MATLAB command line:

    
    help matrix/linfisvd

  
With a click on the link you get the full list of parameters and a brief explanation. In particular, for the parameters we are currently interested the list read:

Default

no description
Key Default Value Options Description
MODEL [] none System model. It have to be parametric. A matrix of smodel objects or a ssm object
INNAMES {} [0x0] none A cell array containing cell arrays of the input ports names for each experiment. Used only with ssm models.
OUTNAMES {} [0x0] none A cell array containing cell arrays of the output ports names for each experiment. Used only with ssm models.
FITPARAMS {} [0x0] none A cell array with the names of the fit parameters
INPUT [] none Collection of input signals
WHITENINGFILTER [] none The multichannel whitening filter. A matrix object of filters
NLOOPS 1 none Number of desired iteration loops.
NCUT 100 none Number of bins to be discharged in order to cut whitening filter transients
TOL 1 none Convergence threshold for fit parameters
DIFFSTEP [] none Numerical differentiation step for ssm models
In particular the parameter 'TOL' is the variable controlling fit convergence. 'TOL' define the ratio between the square of the parameters increment and corresponding parameters variance. Where parameter increment is the difference between a parameter value after and before the fit. If all ratios are lower than 'TOL' then fit convergence is declared and loop is stopped. 'linfitsvd' provides at the output the parameter set that is minimizing Mean Squared Error over the current loop. Output is packed in a 'pest' object.

We are now ready to save our fit results.

    
    fpars.save('fit_linear.mat');

  



©LTP Team