Mercurial > hg > ltpda
diff m-toolbox/test/MDC2/test_mdc2_noisegen_accuracy.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/MDC2/test_mdc2_noisegen_accuracy.m Wed Nov 23 19:22:13 2011 +0100 @@ -0,0 +1,283 @@ +% A test script for to check the accuracy of the noise generation procedure +% for the MDC2 +% +% +% L. Ferraioli 04-02-2009 +% +% $Id: test_mdc2_noisegen_accuracy.m,v 1.4 2009/04/20 14:34:12 luigi Exp $ +% + +%% General use variables and vectors + +fs = 1; +f = logspace(-6,log10(fs/2),300); +f = f.'; +Nsecs = 1e6; % number of seconds + +%% MDC2 Models + +b = ao(plist('built-in','mdc2r2_fd_ltpnoise','f',f)); + +%% + +iplot(b) + +%% + +CSD = [b(1) b(2);conj(b(2)) b(3)]; +MSC = b(2).*conj(b(2))./(b(1).*b(3)); + +%% some ploting + +iplot(CSD(1,1),CSD(2,2),MSC) +iplot(CSD(1,1),CSD(2,2),CSD(1,2),CSD(2,1)) + +%% Make white noise + +a1 = ao(plist('tsfcn', 'randn(size(t))', 'fs', fs, 'nsecs', Nsecs, 'yunits', 'm')); +a2 = ao(plist('tsfcn', 'randn(size(t))', 'fs', fs, 'nsecs', Nsecs, 'yunits', 'm')); + +%% Noise generation + +plng = plist(... + 'csd11', CSD(1,1), ... + 'csd12', CSD(1,2), ... + 'csd21', CSD(2,1), ... + 'csd22', CSD(2,2), ... + 'MaxIter', 80, ... + 'PoleType', 2, ... + 'MinOrder', 35, ... + 'MaxOrder', 40, ... + 'Weights', 2, ... + 'Plot', false,... + 'MSEVARTOL', 1e-2,... + 'FITTOL', 1e-5,... + 'UseSym', 0,... + 'Disp', false); + +[ac1,ac2] = noisegen2D(a1,a2, plng); + +% extracting filters +h11 = ac1.procinfo.find('Filt11'); +h12 = ac1.procinfo.find('Filt12'); +h21 = ac2.procinfo.find('Filt21'); +h22 = ac2.procinfo.find('Filt22'); + + +%% spectra calculation + +acxx1 = lpsd(ac1); +acxx2 = lpsd(ac2); +acxx12 = lcohere(ac1,ac2); + +% get dofs +dof1 = getdof(acxx1,plist('method','lpsd')); +dof2 = getdof(acxx2,plist('method','lpsd')); +dof12 = getdof(acxx12,plist('method','mslcohere')); + +% Interpolate theorethical data +CSD11 = interp(CSD(1,1),plist('vertices',acxx1.data.x)); +CSD22 = interp(CSD(2,2),plist('vertices',acxx2.data.x)); +MSC = interp(MSC,plist('vertices',acxx12.data.x)); + +% getting variance +[lw1,up1,sig1] = confint(acxx1,plist('method','lpsd')); +[lw2,up2,sig2] = confint(acxx2,plist('method','lpsd')); +[lw12,up12,sig12] = confint(acxx12,plist('method','mslcohere')); + +% chi square +k1 = acxx1 - CSD11; +k1 = k1.^2; +k1 = k1./sig1; +chi1 = sum(k1)./length(k1.data.x); + +k2 = acxx2 - CSD22; +k2 = k2.^2; +k2 = k2./sig2; +chi2 = sum(k2)./length(k2.data.x); + +k12 = acxx12 - MSC; +k12= k12.^2; +k12 = k12./sig12; +k12 = split(k12,plist('split_type','samples','samples',[3 342])); +chi12 = sum(k12)./length(k12.data.x); + +proc1 = acxx1.procinfo; +proc2 = acxx2.procinfo; +proc12 = acxx12.procinfo; + +%% + +iplot(CSD11,acxx1,lw1,up1) +iplot(CSD22,acxx2,lw2,up2) +iplot(MSC,acxx12,lw12,up12) + +%% Running the loop + +N = 100; + +for ii = 2:N + disp(num2str(ii)) + + a1 = ao(plist('tsfcn', 'randn(size(t))', 'fs', fs, 'nsecs', Nsecs, 'yunits', 'm')); + a2 = ao(plist('tsfcn', 'randn(size(t))', 'fs', fs, 'nsecs', Nsecs, 'yunits', 'm')); + + x11 = filter(a1,h11); + x12 = filter(a2,h12); + x21 = filter(a1,h21); + x22 = filter(a2,h22); + + x1 = x11 + x12; + x2 = x21 + x22; + + % sectra + xx1 = lpsd(x1); + xx2 = lpsd(x2); + xx12 = lcohere(x1,x2); + + % sum spectra + acxx1 = acxx1 + xx1; + acxx2 = acxx2 + xx2; + acxx12 = acxx12 + xx12; + + % getting variance + [lw,up,sig1] = confint(xx1,plist('method','lpsd')); + [lw,up,sig2] = confint(xx2,plist('method','lpsd')); + [lw,up,sig12] = confint(xx12,plist('method','mslcohere')); + + % chi square + k1 = xx1 - CSD11; + k1 = k1.^2; + k1 = k1./sig1; + xc1 = sum(k1)./length(k1.data.x); + + k2 = xx2 - CSD22; + k2 = k2.^2; + k2 = k2./sig2; + xc2 = sum(k2)./length(k2.data.x); + + k12 = xx12 - MSC; + k12= k12.^2; + k12 = k12./sig12; + k12 = split(k12,plist('split_type','samples','samples',[3 342])); + xc12 = sum(k12)./length(k12.data.x); + + % adding chisquare + chi1 = chi1 + xc1; + chi2 = chi2 + xc2; + chi12 = chi12 + xc12; + +end + +%% Do Averages + +% do average +acxx1 = acxx1./N; +acxx1.setName; +acxx2 = acxx2./N; +acxx2.setName; +acxx12 = acxx12./N; +acxx12.setName; + +% average chi square +chi1 = chi1./N; +chi2 = chi2./N; +chi12 = chi12./N; + +% dofs for the averages +adof1 = dof1.*N; +adof2 = dof2.*N; +adof12 = dof12.*N; + +% get confidence bounds for the 'true' spactra +[lw1,up1,sig1] = confint(acxx1,plist('method','lpsd','dof',adof1)); +[lw2,up2,sig2] = confint(acxx2,plist('method','lpsd','dof',adof2)); +[lw12,up12,sig12] = confint(acxx12,plist('method','mslcohere','dof',adof12)); + +%% plotting + +iplot(CSD(1,1),acxx1) +iplot(CSD(2,2),acxx2) +iplot(MSC,acxx12) + +iplot(CSD(1,1),lw1,up1) +iplot(CSD(2,2),lw2,up2) +iplot(MSC,lw12,up12) + +%% plotting conflevels 1 + +x = lw1.data.x; +y1 = lw1.data.y; +y2 = up1.data.y; + +figure +y = [y1 (y2-y1)]; % y1 and y2 are columns +ha = area(x, y); +set(ha(1), 'FaceColor', 'none') % this makes the bottom area invisible +set(ha(2), 'FaceColor', 'r') +set(ha, 'LineStyle', 'none') +grid on + +% plot the line edges +hold on +hb = plot(x, y1, 'LineWidth', 1, 'Color', 'r'); +hc = plot(x, y2, 'LineWidth', 1, 'Color', 'r'); +hd = plot(CSD(1,1).data.x, CSD(1,1).data.y); + +set(gca,'xscale','log','yscale','log'); +% set(gca,'Layer','top') +ylabel('Power Spectrum [m^{2} / Hz]'); +xlabel('Frequency [Hz]'); +legend([hd hb],{'Model CSD(1,1)','95% Conf. level'}); + +%% plotting conflevels 2 + +x = lw2.data.x; +y1 = lw2.data.y; +y2 = up2.data.y; + +figure +y = [y1 (y2-y1)]; % y1 and y2 are columns +ha = area(x, y); +set(ha(1), 'FaceColor', 'none') % this makes the bottom area invisible +set(ha(2), 'FaceColor', 'r') +set(ha, 'LineStyle', 'none') +grid on + +% plot the line edges +hold on +hb = plot(x, y1, 'LineWidth', 1, 'Color', 'r'); +hc = plot(x, y2, 'LineWidth', 1, 'Color', 'r'); +hd = plot(CSD(2,2).data.x, CSD(2,2).data.y); + +set(gca,'xscale','log','yscale','log'); +% set(gca,'Layer','top') +ylabel('Power Spectrum [m^{2} / Hz]'); +xlabel('Frequency [Hz]'); +legend([hd hb],{'Model CSD(2,2)','95% Conf. level'}); + +%% plotting conflevels 3 + +x = lw12.data.x; +y1 = lw12.data.y; +y2 = up12.data.y; + +figure +y = [y1 (y2-y1)]; % y1 and y2 are columns +ha = area(x, y); +set(ha(1), 'FaceColor', 'none') % this makes the bottom area invisible +set(ha(2), 'FaceColor', 'r') +set(ha, 'LineStyle', 'none') +grid on + +% plot the line edges +hold on +hb = plot(x, y1, 'LineWidth', 1, 'Color', 'r'); +hc = plot(x, y2, 'LineWidth', 1, 'Color', 'r'); +hd = plot(MSC.data.x, MSC.data.y); + +set(gca,'xscale','log','yscale','log'); +% set(gca,'Layer','top') +ylabel('Magnitude Square Coherence'); +xlabel('Frequency [Hz]'); +legend([hd hb],{'Model MSC','95% Conf. level'});