diff m-toolbox/test/test_matrix_MultiChannelNoise.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_MultiChannelNoise.m	Wed Nov 23 19:22:13 2011 +0100
@@ -0,0 +1,197 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% TEST matrix/MultiChannelNoise
+% 
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% HISTORY:     23-04-2009 L Ferraioli
+%                 Creation
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% VERSION
+
+'$Id: test_matrix_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];
+
+%%
+%--------------------------------------------------------------------------
+% 1 Dimensional Noisegen Filter
+%--------------------------------------------------------------------------
+
+%% 1 dim noisegen filter in s domain - symbolic precision All pass
+
+% plist for noise generation
+plns = plist(...
+  'csd',       mod1D, ...
+  'targetobj',  'parfrac', ...
+  'Nsecs',     1e4, ...
+  'fs',        fs, ...
+  'MaxIter',   70, ...
+  'PoleType',  3, ...
+  'MinOrder',  15, ...
+  'MaxOrder',  30, ...
+  'Weights',   2, ...
+  'Plot',      true,...
+  'MSEVARTOL', 1e-2,...
+  'FITTOL',    1e-3,...
+  'UseSym',    'on');
+
+na = matrix(plns);
+
+
+
+%% 1 dim noisegen filter in z domain - symbolic precision All pass
+
+% plist for noise generation
+plns = plist(...
+  'csd',       mod1D, ...
+  'targetobj',  'miir', ...
+  'Nsecs',     1e4, ...
+  'fs',        fs, ...
+  'MaxIter',   70, ...
+  'PoleType',  3, ...
+  'MinOrder',  10, ...
+  'MaxOrder',  30, ...
+  'Weights',   2, ...
+  'Plot',      true,...
+  'MSEVARTOL', 1e-2,...
+  'FITTOL',    1e-3,...
+  'UseSym',    'on');
+
+na = matrix(plns);
+
+%%
+%--------------------------------------------------------------------------
+% 2 Dimensional Noisegen Filter
+%--------------------------------------------------------------------------
+
+
+%% 2 dim noisegen filter in s domain - symbolic precision All pass
+
+% plist for noise generation
+plns = plist(...
+  'csd',       mod2D, ...
+  'targetobj',  'parfrac', ...
+  'MaxIter',   70, ...
+  'PoleType',  3, ...
+  'MinOrder',  25, ...
+  'MaxOrder',  40, ...
+  'Weights',   2, ...
+  'Plot',      false,...
+  'MSEVARTOL', 1e-2,...
+  'FITTOL',    1e-4,...
+  'UseSym',    'on');
+
+na = matrix(plns);
+
+%% Check response
+
+na11 = resp(na.objs(1,1),plist('f',f,'bank','parallel'));
+na12 = resp(na.objs(1,2),plist('f',f,'bank','parallel'));
+na21 = resp(na.objs(2,1),plist('f',f,'bank','parallel'));
+na22 = resp(na.objs(2,2),plist('f',f,'bank','parallel'));
+
+mna = matrix([na11 na12;na21 na22]);
+
+ECSD = mna*conj(transpose(mna));
+
+iplot(csd11,ECSD.objs(1,1))
+iplot(csd12,ECSD.objs(1,2))
+iplot(csd22,ECSD.objs(2,2))
+
+
+%% 2 dim noisegen filter in z domain - symbolic precision All pass
+
+% plist for noise generation
+plns = plist(...
+  'csd',       mod2D, ...
+  'targetobj',  'miir', ...
+  'fs',        fs, ...
+  'MaxIter',   70, ...
+  'PoleType',  3, ...
+  'MinOrder',  25, ...
+  'MaxOrder',  40, ...
+  'Weights',   2, ...
+  'Plot',      false,...
+  'MSEVARTOL', 1e-1,...
+  'FITTOL',    1e-4,...
+  'UseSym',    'on');
+
+na = matrix(plns);
+
+%% Check response
+
+na11 = resp(na.objs(1,1).filters,plist('f',f,'bank','parallel'));
+na12 = resp(na.objs(1,2).filters,plist('f',f,'bank','parallel'));
+na21 = resp(na.objs(2,1).filters,plist('f',f,'bank','parallel'));
+na22 = resp(na.objs(2,2).filters,plist('f',f,'bank','parallel'));
+
+mna = matrix([na11 na12;na21 na22]);
+
+ECSD = mna*conj(transpose(mna));
+
+iplot(csd11,ECSD.objs(1,1))
+iplot(csd12,ECSD.objs(1,2))
+iplot(csd22,ECSD.objs(2,2))
+
+%%
+%--------------------------------------------------------------------------
+% 2 Dimensional Noise Generation
+%--------------------------------------------------------------------------
+
+plng = plist('model',na,...
+  'Nsecs',2e5,...
+  'fs',fs);
+
+no = matrix(plng);
+
+%% Check psd
+
+no1 = no.objs(1);
+no2 = no.objs(2);
+
+no1xx = no1.psd;
+no2xx = no2.psd;
+
+iplot(no1xx,csd11,no2xx,csd22)
+
+%% Check cross-coherence
+
+coh = csd12./sqrt(csd11.*csd22);
+rcoh = real(coh);
+icoh = imag(coh);
+
+no12xx = cpsd(no1,no2,plist('nfft',1e4));
+no1xx = no1.psd(plist('nfft',1e4));
+no2xx = no2.psd(plist('nfft',1e4));
+
+ecoh = no12xx./(sqrt(no1xx.*no2xx));
+recoh = real(ecoh);
+iecoh = imag(ecoh);
+
+iplot(recoh,rcoh,plist('Yscales',{'All','lin'}))
+iplot(iecoh,icoh,plist('Yscales',{'All','lin'}))
+
+
+
+