Mercurial > hg > ltpda
diff m-toolbox/test/test_ao_whiten2D_2.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_whiten2D_2.m Wed Nov 23 19:22:13 2011 +0100 @@ -0,0 +1,224 @@ +% A test script for ao/whiten2D +% +% L. Ferraioli 18-11-08 +% +% $Id: test_ao_whiten2D_2.m,v 1.3 2009/08/26 18:27:06 luigi Exp $ +% + +%% + +clear all + +%% CSD Noise models and TF + +[CSD,TF] = get_2D_test_obj_tf_psd(); + +% get noise coherence +coh = CSD(1,2)./sqrt(abs(CSD(1,1).*CSD(2,2))); +rcoh = real(coh); +rcoh.setName; +icoh = imag(coh); +icoh.setName; + +%% Colored Noise generation + +% Make white noise + +a1 = ao(plist('tsfcn', 'randn(size(t))', 'fs', 10, 'nsecs', 5e5)); +a2 = ao(plist('tsfcn', 'randn(size(t))', 'fs', 10, 'nsecs', 5e5)); + +% Generation from white noise + +pl = plist(... + 'csd11', CSD(1,1),... + 'csd12', CSD(1,2),... + 'csd21', CSD(2,1),... + 'csd22', CSD(2,2),... + 'MaxIter', 70, ... + 'PoleType', 2, ... + 'MinOrder', 25, ... + 'MaxOrder', 35, ... + 'Weights', 2, ... + 'Plot', false,... + 'MSEVARTOL', 1e-2,... + 'FITTOL', 1e-4,... + 'UseSym', 0,... + 'Disp', false); + +[ac1,ac2] = noisegen2D(a1,a2, pl); + +ac1.setYunits('m'); +ac2.setYunits('m'); + +%% Checking generated noise + +acxx1 = ac1.psd(plist('Nfft',1e6)); +acxx2 = ac2.psd(plist('Nfft',1e6)); + +acxy = cohere(ac1,ac2,plist('Nfft',5e4)); +racxy = real(acxy); +racxy.setName; +iacxy = imag(acxy); +iacxy.setName; + +iplot(abs(acxx1),abs(CSD(1,1))) +iplot(abs(acxx2),abs(CSD(2,2))) + +iplot(racxy,rcoh,plist('Yscales',{'All','lin'})) +iplot(iacxy,icoh,plist('Yscales',{'All','lin'})) + +%% +iplot(abs(acxx1),abs(acxx2)) + +%% Get Coloring filters + +cf11 = ac1.procinfo.find('Filt11'); +cf12 = ac1.procinfo.find('Filt12'); +cf21 = ac2.procinfo.find('FILT21'); +cf22 = ac2.procinfo.find('FILT22'); + +%% Get Theoretical CSD from coloring filters + +rc11 = resp(cf11,plist('f',CSD(1,1).x,'bank','parallel')); +rc12 = resp(cf12,plist('f',CSD(1,1).x,'bank','parallel')); +rc21 = resp(cf21,plist('f',CSD(1,1).x,'bank','parallel')); +rc22 = resp(cf22,plist('f',CSD(1,1).x,'bank','parallel')); + + +psd11 = rc11.*conj(rc11)+rc12.*conj(rc12); +psd22 = rc21.*conj(rc21)+rc22.*conj(rc22); +psd12 = rc11.*conj(rc21)+rc12.*conj(rc22); +psd21 = conj(psd12); +coher = psd12./sqrt(abs(psd11).*abs(psd22)); +rcoher = real(coher); +rcoher.setName; +icoher = imag(coher); +icoher.setName; + +% compare with data +iplot(racxy,rcoher,plist('Yscales',{'All','lin'})) +iplot(iacxy,icoher,plist('Yscales',{'All','lin'})) + +%% Noise whitening + +pl = plist(... + 'csd11', CSD(1,1),... + 'csd12', CSD(1,2),... + 'csd21', CSD(2,1),... + 'csd22', CSD(2,2),... + 'MaxIter', 75, ... + 'PoleType', 3, ... + 'MinOrder', 25, ... + 'MaxOrder', 40, ... + 'Weights', 2, ... + 'Plot', false,... + 'MSEVARTOL', 1e-2,... + 'FITTOL', 1e-3,... + 'UseSym', 0,... + 'Disp', false); + +[aw1,aw2] = whiten2D(ac1,ac2, pl); + +aw1.setYunits('m'); +aw2.setYunits('m'); + +%% Checking whitened noise + +awxx1 = aw1.psd(plist('Nfft',1e6)); +awxx2 = aw2.psd(plist('Nfft',1e6)); +%% +iplot(awxx1,awxx2) + +%% Get coherence + +awxy = cohere(aw1,aw2,plist('Nfft',6e4)); +rawxy = real(awxy); +rawxy.setName; +iawxy = imag(awxy); +iawxy.setName; + +%% Check whitened data coherence +racxy.setName('a_xy'); +iacxy.setName('a_xy'); +rawxy.setName('wa_xy'); +iawxy.setName('wa_xy'); +iplot(racxy.split(plist('split_type','frequencies','frequencies',[4e-4 5])),rcoh.split(plist('split_type','frequencies','frequencies',[1e-4 5])),rawxy.split(plist('split_type','frequencies','frequencies',[4e-4 5])),plist('Yscales',{'All','lin'},'Ylabels',{'All','Re(coh)'})) +iplot(iacxy.split(plist('split_type','frequencies','frequencies',[4e-4 5])),icoh.split(plist('split_type','frequencies','frequencies',[1e-4 5])),iawxy.split(plist('split_type','frequencies','frequencies',[4e-4 5])),plist('Yscales',{'All','lin'},'Ylabels',{'All','Im(coh)'})) + +%% Get whitening filters + +wf11 = aw1.procinfo.find('Filt11'); +wf12 = aw1.procinfo.find('Filt12'); +wf21 = aw2.procinfo.find('FILT21'); +wf22 = aw2.procinfo.find('FILT22'); + +% filters respose +rw11 = resp(wf11,plist('f',CSD(1,1).x,'bank','parallel')); +rw12 = resp(wf12,plist('f',CSD(1,1).x,'bank','parallel')); +rw21 = resp(wf21,plist('f',CSD(1,1).x,'bank','parallel')); +rw22 = resp(wf22,plist('f',CSD(1,1).x,'bank','parallel')); + +%% Build expected csd and coherence of whitened data + +wp11 = conj(rw11).*psd11+psd12.*conj(rw12); +wp12 = psd11.*conj(rw21)+psd12.*conj(rw22); +wp21 = psd21.*conj(rw11)+psd22.*conj(rw12); +wp22 = psd21.*conj(rw21)+psd22.*conj(rw22); + +u11 = rw11.*wp11+rw12.*wp21; +u11.setName; +u12 = rw11.*wp12+rw12.*wp22; +u12.setName; +u21 = rw21.*wp11+rw22.*wp21; +u21.setName; +u22 = rw21.*wp12+rw22.*wp22; +u22.setName; +wcoher = u12./sqrt(abs(u11).*abs(u22)); +rwcoher = real(wcoher); +rwcoher.setName; +iwcoher = imag(wcoher); +iwcoher.setName; + +% compare with data +iplot(rawxy,rwcoher,plist('Yscales',{'All','lin'})) +iplot(iawxy,iwcoher,plist('Yscales',{'All','lin'})) + +%% Coherence of starting data + +axy = cohere(a1,a2,plist('Nfft',1e4)); +raxy = real(axy); +raxy.setName; +iaxy = imag(axy); +iaxy.setName; + +% compare with whitened +iplot(rawxy,raxy,plist('Yscales',{'All','lin'})) +iplot(iawxy,iaxy,plist('Yscales',{'All','lin'})) + +%% Comparing Theoretical data + +iplot(rcoher,rwcoher,plist('Yscales',{'All','lin'})) +iplot(icoher,iwcoher,plist('Yscales',{'All','lin'})) + +iplot(rcoh,rwcoher,plist('Yscales',{'All','lin'})) +iplot(icoh,iwcoher,plist('Yscales',{'All','lin'})) + + + + + + + + + + + + + + + + + + + +% END \ No newline at end of file