diff m-toolbox/test/test_ao_fromCSD.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_ao_fromCSD.m	Wed Nov 23 19:22:13 2011 +0100
@@ -0,0 +1,265 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% TEST ao/fromCSD
+% 
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% HISTORY:     23-04-2009 L Ferraioli
+%                 Creation
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% VERSION
+
+'$Id: test_ao_fromCSD.m,v 1.3 2009/04/23 16:03:55 luigi Exp $';
+
+%% Loading spectra
+
+load ..\m-toolbox\test\mpsd.mat % load mpsd.mat first column is f then psd1, csd and psd2
+
+f = mpsd(:,1);
+psd = mpsd(:,2);
+fs = 10;
+
+% 1dim model
+mod1D = ao(plist('xvals', f, 'yvals', psd, 'fs', fs, 'dtype', 'fsdata','description','MDC1 IFO CH1'));
+mod1D.setName;
+
+% 2dim model
+csd11 = ao(plist('xvals', f, 'yvals', mpsd(:,2), 'fs', fs, 'dtype', 'fsdata','description','MDC1 IFO CH1 PSD'));
+csd11.setName;
+csd12 = ao(plist('xvals', f, 'yvals', mpsd(:,3), 'fs', fs, 'dtype', 'fsdata','description','MDC1 IFO CH12 CSD'));
+csd12.setName;
+csd21 = ao(plist('xvals', f, 'yvals', conj(mpsd(:,3)), 'fs', fs, 'dtype', 'fsdata','description','MDC1 IFO CH21 CSD'));
+csd21.setName;
+csd22 = ao(plist('xvals', f, 'yvals', mpsd(:,4), 'fs', fs, 'dtype', 'fsdata','description','MDC1 IFO CH2 PSD'));
+csd22.setName;
+
+mod2D = [csd11 csd12;csd21 csd22];
+
+
+%% Generate 1D Noise
+
+% plist for noise generation
+
+plns = plist(...
+  'csd',       mod1D, ...
+  'Nsecs',     1e4, ...
+  'fs',        fs, ...
+  'xunits',    's', ...
+  'yunits',    '', ...
+  'MaxIter',   50, ...
+  'PoleType',  3, ...
+  'MinOrder',  7, ...
+  'MaxOrder',  35, ...
+  'Weights',   2, ...
+  'Plot',      false,...
+  'MSEVARTOL', 1e-2,...
+  'FITTOL',    1e-2);
+
+na = ao(plns);
+
+%% Compare with Noisegen1D
+
+aw = ao(plist('tsfcn', 'randn(size(t))', 'fs', fs, 'nsecs', 1e4));
+
+pl = plist(...
+    'model', mod1D, ...
+    'MaxIter', 50, ...
+    'PoleType', 3, ...
+    'MinOrder', 7, ...
+    'MaxOrder', 35, ...
+    'Weights', 2, ...
+    'Plot', false,...
+    'Disp', false,...
+    'MSEVARTOL', 1e-2,...
+    'FITTOL', 1e-2);
+
+nat = noisegen1D(aw, pl);
+
+%% Make psd
+
+naxx = na.lpsd;
+natxx = nat.lpsd;
+
+
+iplot(naxx,natxx,mod1D)
+
+%% 2 dim noise generation
+
+% plist for noise generation
+
+plns = plist(...
+  'csd',       mod2D, ...
+  'Nsecs',     1e4, ...
+  'fs',        fs, ...
+  'xunits',    's', ...
+  'yunits',    '', ...
+  'MaxIter',   70, ...
+  'PoleType',  3, ...
+  'MinOrder',  20, ...
+  'MaxOrder',  40, ...
+  'Weights',   2, ...
+  'Plot',      false,...
+  'MSEVARTOL', 1e-2,...
+  'FITTOL',    1e-2);
+
+na = ao(plns);
+
+%% Compare with Noisegen2D
+
+aw1 = ao(plist('tsfcn', 'randn(size(t))', 'fs', fs, 'nsecs', 1e4));
+aw2 = ao(plist('tsfcn', 'randn(size(t))', 'fs', fs, 'nsecs', 1e4));
+
+pl = plist(...
+    'csd11', csd11, ...
+    'csd12', csd12, ...
+    'csd21', csd21, ...
+    'csd22', csd22, ...
+    'MaxIter', 70, ...
+    'PoleType', 3, ...
+    'MinOrder', 20, ...
+    'MaxOrder', 40, ...
+    'Weights', 2, ...
+    'Plot', false,...
+    'Disp', false,...
+    'MSEVARTOL', 1e-2,...
+    'FITTOL', 1e-2);
+
+[nat1,nat2] = noisegen2D(aw1,aw2, pl);
+
+%% Make psd
+
+naxx1 = na(1).lpsd;
+natxx1 = nat1.lpsd;
+naxx2 = na(2).lpsd;
+natxx2 = nat2.lpsd;
+
+
+iplot(naxx1,natxx1,csd11)
+iplot(naxx2,natxx2,csd22)
+
+
+%% 3 Dim noise generation
+
+% sampling frequency
+fs = 1; % Hz
+% frequency vector
+f = logspace(-6,log10(0.5),300);
+f = f.';
+
+%%% Set the 3 channel model
+h11 = pzmodel(plist('GAIN', [0.01], 'POLES', [pz(9.9999999999999995e-007,NaN) pz(0.01,NaN) pz(0.02,NaN)], 'ZEROS', [pz(0.0001,NaN) pz(0.002,NaN)]));
+h12 = pzmodel(plist('GAIN', [0.0001], 'POLES', [pz(0.10000000000000001,NaN) pz(0.0030000000000000001,NaN) pz(0.0050000000000000001,NaN) pz(1.0000000000000001e-005,NaN)], 'ZEROS', [pz(0.00050000000000000001,NaN) pz(0.001,NaN)]));
+h13 = pzmodel(plist('GAIN', [0.00001], 'POLES', [pz(5.0000000000000004e-006,NaN) pz(0.02,NaN)], 'ZEROS', pz(0.00040000000000000002,NaN)));
+
+h21 = pzmodel(plist('GAIN', [0.00001], 'POLES', [pz(5.0000000000000004e-006,NaN) pz(0.10000000000000001,NaN) pz(0.050000000000000003,NaN)], 'ZEROS', [pz(0.002,NaN) pz(0.00020000000000000001,NaN)]));
+h22 = pzmodel(plist('GAIN', [0.001], 'POLES', [pz(0.01,NaN) pz(9.9999999999999995e-008,NaN) pz(0.002,NaN) pz(0.001,NaN)], 'ZEROS', [pz(1.0000000000000001e-005,NaN) pz(2.0000000000000002e-005,NaN) pz(5.0000000000000002e-005,NaN) pz(0.20000000000000001,NaN)]));
+h23 = pzmodel(plist('GAIN', [0.0001], 'POLES', [pz(0.01,NaN) pz(0.029999999999999999,NaN) pz(0.10000000000000001,NaN) pz(5.0000000000000002e-005,NaN)], 'ZEROS', [pz(0.0001,NaN) pz(0.0050000000000000001,NaN)]));
+
+h31 = pzmodel(plist('GAIN', [0.001], 'POLES', [pz(0.01,NaN) pz(0.029999999999999999,NaN) pz(0.10000000000000001,NaN) pz(0.00050000000000000001,NaN)], 'ZEROS', [pz(0.0001,NaN) pz(0.0050000000000000001,NaN)]));
+h32 = pzmodel(plist('GAIN', [0.00001], 'POLES', [pz(0.01,NaN) pz(0.029999999999999999,NaN) pz(0.10000000000000001,NaN) pz(0.00050000000000000001,NaN) pz(0.00029999999999999997,NaN)], 'ZEROS', [pz(0.002,NaN) pz(0.059999999999999998,NaN)]));
+h33 = pzmodel(plist('GAIN', [0.05], 'POLES', [pz(0.0001,NaN) pz(9.9999999999999995e-008,NaN) pz(0.002,NaN)], 'ZEROS', [pz(3.0000000000000001e-005,NaN) pz(5.0000000000000002e-005,NaN) pz(0.10000000000000001,NaN)]));
+
+%%% TFs resps
+% filters response
+plresp = plist('f',f);
+
+rh11 = resp(h11,plresp);
+rh12 = resp(h12,plresp);
+rh13 = resp(h13,plresp);
+
+rh21 = resp(h21,plresp);
+rh22 = resp(h22,plresp);
+rh23 = resp(h23,plresp);
+
+rh31 = resp(h31,plresp);
+rh32 = resp(h32,plresp);
+rh33 = resp(h33,plresp);
+
+%%% Spectra calculation with Kay style method
+% Note that the definition of cross-spectral matrix follows that of s M
+% Kay, Modern Spectral Estimation
+
+% csd11 
+G11 = rh11.y.*conj(rh11.y) + rh12.y.*conj(rh12.y) + rh13.y.*conj(rh13.y);
+G11 = ao(plist('xvals', f, 'yvals', G11, 'fs', fs, 'dtype', 'fsdata', 'yunits', unit('m^2').*unit('Hz^-1')));
+G11.setName;
+
+% csd12
+G12 = conj(rh11.y).*rh21.y + conj(rh12.y).*rh22.y + conj(rh13.y).*rh23.y;
+G12 = ao(plist('xvals', f, 'yvals', G12, 'fs', fs, 'dtype', 'fsdata', 'yunits', unit('m^2').*unit('Hz^-1')));
+G12.setName;
+
+% csd13
+G13 = conj(rh11.y).*rh31.y + conj(rh12.y).*rh32.y + conj(rh13.y).*rh33.y;
+G13 = ao(plist('xvals', f, 'yvals', G13, 'fs', fs, 'dtype', 'fsdata', 'yunits', unit('m^2').*unit('Hz^-1')));
+G13.setName;
+
+% csd21
+G21 = conj(G12);
+G21.setName;
+
+% csd22
+G22 = rh21.y.*conj(rh21.y) + rh22.y.*conj(rh22.y) + rh23.y.*conj(rh23.y);
+G22 = ao(plist('xvals', f, 'yvals', G22, 'fs', fs, 'dtype', 'fsdata', 'yunits', unit('m^2').*unit('Hz^-1')));
+G22.setName;
+
+% csd23
+G23 = conj(rh21.y).*rh31.y + conj(rh22.y).*rh32.y + conj(rh23.y).*rh33.y;
+G23 = ao(plist('xvals', f, 'yvals', G23, 'fs', fs, 'dtype', 'fsdata', 'yunits', unit('m^2').*unit('Hz^-1')));
+G23.setName;
+
+% csd31
+G31 = conj(G13);
+G31.setName;
+
+% csd32
+G32 = conj(G23);
+G32.setName;
+
+% csd33
+G33 = conj(rh31.y).*rh31.y + conj(rh32.y).*rh32.y + conj(rh33.y).*rh33.y;
+G33 = ao(plist('xvals', f, 'yvals', G33, 'fs', fs, 'dtype', 'fsdata', 'yunits', unit('m^2').*unit('Hz^-1')));
+G33.setName;
+
+%%% Build CSD matrix
+mod3D = [G11 G12 G13;G21 G22 G23;G31 G32 G33];
+
+%% noise generation
+
+% plist for noise generation
+
+plns = plist(...
+  'csd',       mod3D, ...
+  'Nsecs',     1e4, ...
+  'fs',        fs, ...
+  'xunits',    's', ...
+  'yunits',    '', ...
+  'MaxIter',   90, ...
+  'PoleType',  3, ...
+  'MinOrder',  20, ...
+  'MaxOrder',  50, ...
+  'Weights',   2, ...
+  'Plot',      false,...
+  'MSEVARTOL', 1e-2,...
+  'FITTOL',    1e-2);
+
+na = ao(plns);
+
+%% Make psd
+
+naxx1 = na(1).psd;
+
+naxx2 = na(2).psd;
+
+naxx3 = na(3).psd;
+
+
+
+iplot(naxx1,G11)
+iplot(naxx2,G22)
+iplot(naxx3,G33)
+
+
+
+
+
+
+