diff m-toolbox/test/test_matrix_linfitsvd.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/test/test_matrix_linfitsvd.m	Wed Nov 23 19:22:13 2011 +0100
@@ -0,0 +1,197 @@
+% test for matrix/linfitsvd
+% 
+% 17-11-2009 L Ferraioli
+%       CREATION
+% 
+% 
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% $Id: test_matrix_linfitsvd.m,v 1.3 2010/04/25 21:27:57 mauro Exp $
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Definitions
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+pl_retrieve = plist('hostname', 'btlab.science.unitn.it', 'database', 'algo_testing');
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%% Loading data %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Loading parameters cells
+
+fprintf('===== loading data... =====\n')
+
+% define parameters names and values
+parnames = { 'S11',  'S1D', 'SD1', 'SDD', ...
+  'TH', 'Th2', 'dH', ...
+  'dS11', 'dS1D', 'dSD1', 'dSDD', ...
+  'dh1', 'dh2', ...
+  'dsH', 'dsh1', 'dsh2', ...
+  'dx1', 'dx2', ...
+  'w0', 'w1', 'w2'};
+
+exp3_nomvalues = {1 0 0 1 ...
+  0.35 0.28 0 ...
+  0 0 0 0, ...
+  0 0, ...
+  0 0 0, ...
+  0 0, ...
+  0.188 0 + 0.00114i 0 + 0.00141i ...
+  };
+
+exp3_truevalues = {1 0 0 1 ...
+  0.35 0.28 0.0526103537824434 ...
+  0 0 -0.0001 0, ...
+  0.0753993274155418 0.0569786061730967, ...
+  0.0670701072189726 0.00576108053758739 -0.0846457231187905, ...
+  -0.0456546316180145 0.0395739758886965, ...
+  0.188 0 + 0.00114i 0 + 0.00141i ...
+  };
+
+% set ordered used parameters
+usedparams = {'dH','dsH','dS11','dS1D','dSD1','dSDD',...
+  'dh2','dsh2','dx1','dx2'};
+
+%% get non-linear response model
+% the model is non-linear in the parameter dependence
+fprintf('===== Get TF Model... =====\n')
+
+H = matrix(plist('built-in','mdc3_ifo2ifo_v2'));
+
+%% load input signal
+% those are the same of exp 1
+
+fprintf('===== Loading input signals... =====\n')
+
+oi1 = ao(pl_retrieve.pset('id', 1));
+oid = ao(pl_retrieve.pset('id', 2));
+
+%% load Coloring filters
+
+fprintf('===== loading coloring filters... =====\n')
+
+cf = matrix(pl_retrieve.pset('id', 26));
+cf11 = cf.getObjectAtIndex(1, 1);
+cf12 = cf.getObjectAtIndex(1, 2);
+cf21 = cf.getObjectAtIndex(2, 1);
+cf22 = cf.getObjectAtIndex(2, 2);
+
+%% load Whitening filters
+
+fprintf('===== loading whitening filters... =====\n')
+
+WF = matrix(pl_retrieve.pset('id', 27));
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%% Generating signals %%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Get signals output of the system
+
+fprintf('===== get true values... =====\n')
+
+mod = copy(H, true);
+
+% get response with true params
+for ii = 1:numel(H.objs)
+  mod.objs(ii).setParams(parnames,exp3_truevalues);
+end
+
+plfft = plist('Npad',[]);
+
+s11 = fftfilt(oi1,mod.objs(1,1),plfft);
+s12 = fftfilt(oid,mod.objs(1,2),plfft);
+s21 = fftfilt(oi1,mod.objs(2,1),plfft);
+s22 = fftfilt(oid,mod.objs(2,2),plfft);
+
+% get signals for exp 3.1
+s1_exp_3_1 = s11;
+s1_exp_3_1.setName;
+sd_exp_3_1 = s21;
+sd_exp_3_1.setName;
+
+% get signals for exp 3.2
+s1_exp_3_2 = s12;
+s1_exp_3_2.setName;
+sd_exp_3_2 = s22;
+sd_exp_3_2.setName;
+
+
+%% Adding noise to signals
+
+fprintf('===== adding noise to signals... =====\n')
+
+% get params
+Nsecs = s1_exp_3_1.nsecs;
+fs    = s1_exp_3_1.fs;
+plcf = plist('bank','parallel');
+pl_noise    = plist('tsfcn', 'randn(size(t))', 'fs', fs, 'nsecs', Nsecs);
+
+% starting noise generation exp1.1
+a1_exp_3_1 = ao(pl_noise);
+a2_exp_3_1 = ao(pl_noise);
+
+% coloring noise exp 1.1
+na1_exp_3_1 = filter(a1_exp_3_1,cf11,plcf) + filter(a2_exp_3_1,cf12,plcf);
+na2_exp_3_1 = filter(a1_exp_3_1,cf21,plcf) + filter(a2_exp_3_1,cf22,plcf);
+
+% starting noise generation exp 1.2
+a1_exp_3_2 = ao(pl_noise);
+a2_exp_3_2 = ao(pl_noise);
+
+% coloring noise exp 1.2
+na1_exp_3_2 = filter(a1_exp_3_2,cf11,plcf) + filter(a2_exp_3_2,cf12,plcf);
+na2_exp_3_2 = filter(a1_exp_3_2,cf21,plcf) + filter(a2_exp_3_2,cf22,plcf);
+
+% adding noise to signals
+o1_exp_3_1 = s1_exp_3_1 + na1_exp_3_1;
+od_exp_3_1 = sd_exp_3_1 + na2_exp_3_1;
+
+o1_exp_3_2 = s1_exp_3_2 + na1_exp_3_2;
+od_exp_3_2 = sd_exp_3_2 + na2_exp_3_2;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%% Build input for linfitsvd %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Build input objects
+
+% empty ao
+eao = ao();
+
+%%
+%%% Model %%%
+% get response with nominal params
+for ii = 1:numel(H.objs)
+  H.objs(ii).setParams(parnames,exp3_nomvalues);
+end
+
+%%% exp_3_1 %%%
+os1 = matrix(o1_exp_3_1,od_exp_3_1,plist('shape',[2 1]));
+is1 = matrix(oi1,eao,plist('shape',[2 1]));
+
+%%% exp_3_2 %%%
+os2 = matrix(o1_exp_3_2,od_exp_3_2,plist('shape',[2 1]));
+is2 = matrix(eao,oid,plist('shape',[2 1]));
+
+%%
+%%% Input signals
+iS = collection(is1,is2);
+
+%%% Known parameters
+vals = [0 0 0];
+nms  = {'dS11','dS1D','dSDD'};
+errs = [1e-4 1e-3 1e-4];
+kwnpar = pest(vals, nms, errs);
+
+
+%% do fit
+
+plfit = plist(...
+  'FitParams',usedparams,...
+  'Model',H,...
+  'Input',iS,...
+  'WhiteningFilter',WF,...
+  'Nloops',30,...
+  'Ncut',100,...
+  'KnownParams',kwnpar);
+
+opars = linfitsvd(os1,os2,plfit);