Mercurial > hg > ltpda
diff m-toolbox/test/utils/test_ndeigcsd.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/utils/test_ndeigcsd.m Wed Nov 23 19:22:13 2011 +0100 @@ -0,0 +1,660 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% TEST ndeigcsd +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% HISTORY: 23-04-2009 L Ferraioli +% Creation +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + + +%% 2 Dim Test + +%%% Define startinf TFs + +fs = 10; +f = [logspace(-6,log10(fs/2),2000)]'; + +% Model Stefano TF11 +dRes11 = [2.44554138162509e-011 - 1.79482547894083e-011i; +2.44554138162509e-011 + 1.79482547894083e-011i; +2.66402334803101e-009 + 1.1025122049153e-009i; +2.66402334803101e-009 - 1.1025122049153e-009i; +-7.3560293387644e-009; +-1.82811618589835e-009 - 1.21803627800855e-009i; +-1.82811618589835e-009 + 1.21803627800855e-009i; +1.16258677367555e-009; +1.65216557639319e-016; +-1.78092396888606e-016; +-2.80420398962379e-017; +9.21305973049041e-013 - 8.24686706827269e-014i; +9.21305973049041e-013 + 8.24686706827269e-014i; +5.10730060739905e-010 - 3.76571756625722e-011i; +5.10730060739905e-010 + 3.76571756625722e-011i; +3.45893698149735e-009; +3.98139182134446e-014 - 8.25503935419059e-014i; +3.98139182134446e-014 + 8.25503935419059e-014i; +-1.40595719147164e-011]; + +dPoles11 = [0.843464045655194 - 0.0959986292915475i; +0.843464045655194 + 0.0959986292915475i; +0.953187595424927 - 0.0190043625473383i; +0.953187595424927 + 0.0190043625473383i; +0.967176277937188; +0.995012027005247 - 0.00268322602801729i; +0.995012027005247 + 0.00268322602801729i; +0.996564761885673; +0.999999366165445; +0.999981722418555; +0.999921882627659; +0.999624431675213 - 0.000813407848742761i; +0.999624431675213 + 0.000813407848742761i; +0.997312006278751 - 0.00265611346834941i; +0.997312006278751 + 0.00265611346834941i; +0.990516544257531; +0.477796923118318 - 0.311064085401834i; +0.477796923118318 + 0.311064085401834i; +0]; + +dDTerms11 = 0; + +% Model Stefano TF12 +dRes12 = [1.44258422208796e-017 + 7.07359428613009e-019i; +1.44258422208796e-017 - 7.07359428613009e-019i; +-3.4918408053655e-021 - 1.05662874569329e-021i; +-3.4918408053655e-021 + 1.05662874569329e-021i; +-7.61773292876976e-021; +4.84357724603939e-020 + 2.38824204294595e-019i; +4.84357724603939e-020 - 2.38824204294595e-019i; +-4.07088520945753e-020 - 2.31474543846105e-019i; +-4.07088520945753e-020 + 2.31474543846105e-019i; +8.73316588658882e-023; +-5.21840635377469e-020; +1.8461911504859e-023; +5.20105247464461e-020; +-4.68960092394415e-022; +-1.44261407664171e-017 + 6.8922564526833e-019i; +-1.44261407664171e-017 - 6.8922564526833e-019i; +3.13688133935426e-022]; + +dPoles12 = [0.477546340377332 - 0.310830571032376i; + 0.477546340377332 + 0.310830571032376i; + 0.99790715414307 - 0.0028490561287024i; + 0.99790715414307 + 0.0028490561287024i; + 0.998014205354671 ; + 0.999585354543332 - 0.000780408757425194i; + 0.999585354543332 + 0.000780408757425194i; + 0.99966003029931 - 0.000830944038363768i; + 0.99966003029931 + 0.000830944038363768i; + 0.999962770401331 ; + 0.999981881865521 ; + 0.999999365763457 ; + 0.999981706320212 ; + 0.99992421574188 ; + 0.477898460791003 + 0.311001926610074i; + 0.477898460791003 - 0.311001926610074i; + 0]; +dDTerms12 = 0; + +% Model Stefano Tf21 +dRes21 = [-1.80035241582968e-016 + 1.99543917791863e-015i; + -1.80035241582968e-016 - 1.99543917791863e-015i; + -1.85590889333759e-013 - 1.23844418827409e-014i; + -1.85590889333759e-013 + 1.23844418827409e-014i; + 5.03656596876842e-013 ; + -2.62470963499904e-013 + 2.30024232938878e-012i; + -2.62470963499904e-013 - 2.30024232938878e-012i; + -9.83780507870955e-018 ; + 3.40426735130194e-021 ; + 9.78322351492755e-018 ; + -1.65010934542937e-020 ; + 2.60918565203438e-015 + 1.0546609464659e-015i; + 2.60918565203438e-015 - 1.0546609464659e-015i; + 3.18105585405455e-014 + 2.48839990780042e-013i; + 3.18105585405455e-014 - 2.48839990780042e-013i; + 3.23021641947666e-013 ; + 4.81265000078114e-016 - 3.18269170053848e-017i; + 4.81265000078114e-016 + 3.18269170053848e-017i; + 5.16260024128201e-018]; + +dPoles21 = [0.872004077421604 - 0.110344282822693i; + 0.872004077421604 + 0.110344282822693i; + 0.956884129232757 - 0.0225532091775074i; + 0.956884129232757 + 0.0225532091775074i; + 0.966514825697177 ; + 0.995140550419744 - 0.000755127639524413i; + 0.995140550419744 + 0.000755127639524413i; + 0.999981802194393 ; + 0.99999936576546 ; + 0.999981722418555 ; + 0.999921882627659 ; + 0.999624431675213 + 0.000813407848742761i; + 0.999624431675213 - 0.000813407848742761i; + 0.997312006278751 + 0.00265611346834941i; + 0.997312006278751 - 0.00265611346834941i; + 0.990516544257531 ; + 0.477796923118318 + 0.311064085401834i; + 0.477796923118318 - 0.311064085401834i; + 0]; + +dDTerms21 = 0; + +% Model Stefano Tf22 +dRes22 = [1.1284521501259e-014; + -3.72133611555879e-014 - 2.08232683444075e-014i; + -3.72133611555879e-014 + 2.08232683444075e-014i; + 9.84930639106637e-014 - 1.46640810672565e-013i; + 9.84930639106637e-014 + 1.46640810672565e-013i; + 2.51323684013671e-014 ; + -5.64078525288305e-014 ; + -1.62476406586366e-014 ; + -1.08424815979566e-011 + 8.32328079357669e-012i; + -1.08424815979566e-011 - 8.32328079357669e-012i; + 2.41831559776112e-011]; + +dPoles22 = [0.988511243978897; + 0.997305870640646 + 0.00211760900132725i; + 0.997305870640646 - 0.00211760900132725i; + 0.999626453270255 + 0.0008125673525946i; + 0.999626453270255 - 0.0008125673525946i; + 0.999999366366222 ; + 0.999981706320212 ; + 0.99992421574188 ; + 0.477898460791003 - 0.311001926610074i; + 0.477898460791003 + 0.311001926610074i; + 0]; + +dDTerms22 = 0; + +% response calculation + +pfparams.type = 'disc'; +pfparams.freq = f; +pfparams.fs = 10; + +% TF11 +pfparams.res = dRes11; +pfparams.pol = dPoles11; +pfparams.dterm = dDTerms11; +pfr = utils.math.pfresp(pfparams); +mtf11 = pfr.resp; + +% TF12 +pfparams.res = dRes12; +pfparams.pol = dPoles12; +pfparams.dterm = dDTerms12; +pfr = utils.math.pfresp(pfparams); +mtf12 = pfr.resp; + +% TF21 +pfparams.res = dRes21; +pfparams.pol = dPoles21; +pfparams.dterm = dDTerms21; +pfr = utils.math.pfresp(pfparams); +mtf21 = pfr.resp; + +% TF22 +pfparams.res = dRes22; +pfparams.pol = dPoles22; +pfparams.dterm = dDTerms22; +pfr = utils.math.pfresp(pfparams); +mtf22 = pfr.resp; + +% CSD calculation with Papoulis Method Style +% csd11 = mtf11.*conj(mtf11)+mtf12.*conj(mtf12); +% csd12 = mtf11.*conj(mtf21)+mtf12.*conj(mtf22); +% csd22 = mtf22.*conj(mtf22)+mtf21.*conj(mtf21); +% csd21 = conj(csd12); + +% CSD = zeros(2,2,length(f)); +% for hh = 1:length(f) +% CSD(:,:,hh) = [csd11(hh) csd12(hh);csd21(hh) csd22(hh)]; +% end + +% CSD = zeros(2,2,length(f)); +% for hh = 1:length(f) +% CSD(:,:,hh) = [csd11(hh) 0;0 csd22(hh)]; +% end + + +%% Get CSD Model + +fs = 10; +f = [logspace(-6,log10(fs/2),2000)]'; + +% currPath = cd; +% cd MDC1 % assuming to start from ..\ltpda\software\m-toolbox\test +% [TF,CSD] = mdc1_tf_models(plist('f',f,'fs',fs)); +% cd(currPath) + +% get noise psd shapes +% parameters names +parnames = {'DH','S11','S1D','SD1','SDD','Dh1','Dh2','w1','w2',... + 'TH','Th1','Th2'}; + +% nominal params values +parvalues = {1,1,0,-1e-4,1,1,1,-1.3e-6,-2.0e-6,0.35,0.25,0.28}; + +% Noise model +N = matrix(plist('built-in','mdc3_ifo2ifo_noise')); + +% evalueat model +[rw,cl]=size(N.objs); +for ii=1:rw + for jj=1:cl + N.objs(ii,jj).setParams(parnames,parvalues); + N.objs(ii,jj).setXvals(f); + sp(ii,jj)=eval(N.objs(ii,jj)); + if ii==jj + sp(ii,jj)= abs(sp(ii,jj)); + end + end +end + +csd11 = sp(1,1).y; +csd12 = sp(1,2).y; +csd21 = sp(2,1).y; +csd22 = sp(2,2).y; + +CSD = zeros(2,2,length(f)); +for hh = 1:length(f) + CSD(:,:,hh) = [csd11(hh) csd12(hh);csd21(hh) csd22(hh)]; +end + +%% Eigcsd 2-dim + +h = utils.math.ndeigcsd(CSD,'MTD','PAP'); + +%% Test eigenshuffle + +[l,m,npts] = size(CSD); + +% Finding suppression +k = min(sqrt(csd11./csd22)); +if k>=1 + suppr = floor(k); +else + n=0; + while k<1 + k=k*10; + n=n+1; + end + k = floor(k); + suppr = k*10^(-n); +end + +supmat = [1 0;0 suppr]; +% isupmat = [1 0;0 1/suppr]; +isupmat = inv(supmat); + +PP = CSD; +for ii=1:npts + PP(:,:,ii)=supmat*CSD(:,:,npts)*supmat; +end + +[V,D] = eigenshuffle(CSD); +h = ones(l,m,npts); + +for ii=1:npts + HH = isupmat*V(:,:,ii)*sqrt(diag(D(:,ii))); + h(:,:,ii) = HH; +end + +%% Plot CSD + +% CSD calculation +ncsd11 = squeeze(h(1,1,:).*conj(h(1,1,:))+h(1,2,:).*conj(h(1,2,:))); +ncsd12 = squeeze(h(1,1,:).*conj(h(2,1,:))+h(1,2,:).*conj(h(2,2,:))); +ncsd22 = squeeze(h(2,2,:).*conj(h(2,2,:))+h(2,1,:).*conj(h(2,1,:))); +ncsd21 = conj(csd12); + +figure() +loglog(f,abs(csd11),'k') +hold on +grid on +loglog(f,abs(ncsd11),'r') + +figure() +loglog(f,abs(csd12),'k') +hold on +grid on +loglog(f,abs(ncsd12),'r') + +figure() +semilogx(f,angle(csd12),'k') +hold on +grid on +semilogx(f,angle(ncsd12),'r') + +figure() +loglog(f,abs(csd22),'k') +hold on +grid on +loglog(f,abs(ncsd22),'r') + +%% plot TFs + +figure() +loglog(f,abs(mtf11),'k') +hold on +grid on +loglog(f,abs(squeeze(h(1,1,:))),'r') + +figure() +loglog(f,abs(mtf12),'k') +hold on +grid on +loglog(f,abs(squeeze(h(1,2,:))),'r') + +figure() +loglog(f,abs(mtf21),'k') +hold on +grid on +loglog(f,abs(squeeze(h(2,1,:))),'r') + +figure() +loglog(f,abs(mtf22),'k') +hold on +grid on +loglog(f,abs(squeeze(h(2,2,:))),'r') + +%% plot TFs phase + +figure() +semilogx(f,angle(mtf11),'k') +hold on +grid on +semilogx(f,angle(squeeze(h(1,1,:))),'r') + +figure() +semilogx(f,angle(mtf12),'k') +hold on +grid on +semilogx(f,angle(squeeze(h(1,2,:))),'r') + +figure() +semilogx(f,angle(mtf21),'k') +hold on +grid on +semilogx(f,angle(squeeze(h(2,1,:))),'r') + +figure() +semilogx(f,angle(mtf22),'k') +hold on +grid on +semilogx(f,angle(squeeze(h(2,2,:))),'r') + + + +%% 3 Dim Test + + +% sampling frequency +fs = 1; % Hz +% frequency vector +f = logspace(-6,log10(0.5),300); +f = f.'; + +%%% Set the 3 channel model + +% d = [1 -1.1 0.5 0.02]; +% +% h11 = miir(1e-1.*[1 -0.5],d,fs); +% h12 = miir(1e-4.*[0 -0.5],d,fs); +% h13 = miir(1e-2.*[1 0.2],d,fs); +% +% h21 = miir(1e-3.*[0 0.4],d,fs); +% h22 = miir(1e-5.*[1 -0.6],d,fs); +% h23 = miir(1e-6.*[1 0.3],d,fs); +% +% h31 = miir(1e-4.*[0 0.1 -0.2],d,fs); +% h32 = miir(1e-7.*[0 -0.6],d,fs); +% h33 = miir(1e-5.*[1 0.05 0.3],d,fs); + + +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); + +% iplot(rh11,rh12,rh13) +% iplot(rh21,rh22,rh23) +% iplot(rh31,rh32,rh33) + +% iplot(rh11,rh22,rh33) + +%%% Spectra calculation with Kay style method + +% Note that the definition of cross-spectral matrix follows that of s M +% Kay, Modern Spectral Estimation +fs = 1; % Hz +% 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; + +% iplot(G11,G12,G13,G22,G23,G33) + +% iplot(G11,G22,G33) + +%%% Build CSD matrix + +CSD = zeros(3,3,length(f)); +for hh = 1:length(f) + CSD(:,:,hh) = [G11.y(hh) G12.y(hh) G13.y(hh);G21.y(hh) G22.y(hh) G23.y(hh);G31.y(hh) G32.y(hh) G33.y(hh)]; +end + +% for hh = 1:length(f) +% CSD(:,:,hh) = [G11.y(hh) 0 0;0 G22.y(hh) 0;0 0 G33.y(hh)]; +% end + +%%% 3-dim Eigcsd with kay method stule +h = utils.math.ndeigcsd(CSD,'MTD','KAY'); + +% %%% Eigenshuffle +% +% [l,m,kk] = size(CSD); +% suppr = ones(l,l); +% for ii = 2:l +% k = ones(l,1); +% +% for jj = ii-1:-1:1 +% k(jj) = min(sqrt(CSD(jj,jj,:)./CSD(ii,ii,:))); +% if k(jj)>=1 +% suppr(jj,ii) = floor(k(jj)); +% else +% n=0; +% while k(jj)<1 +% k(jj)=k(jj)*10; +% n=n+1; +% end +% k(jj) = floor(k(jj)); +% suppr(jj,ii) = k(jj)*10^(-n); +% % suppr(ii) = suppr(ii)*suppr(ii-1); +% end +% end +% % csuppr(ii) = prod(suppr(:,ii)); +% end +% csuppr = prod(suppr,2); +% supmat = diag(csuppr); +% % ssup = rot90(rot90(supmat)); +% ssup = supmat; +% % ssup = eye(3); +% % ssup = supmat*supmat.'; +% issup = inv(ssup); +% +% for jj = 1:kk +% nCSD(:,:,jj) = ssup*CSD(:,:,jj)*ssup; +% end +% +% [Vseq,Dseq] = eigenshuffle(nCSD); +% +% % get h = V*sqrt(D); +% [nn,mm,kk] = size(Vseq); +% h = zeros(nn,mm,kk); +% for dd = 1:kk +% % h(:,:,dd) = rot90(issup*Vseq(:,:,dd)*sqrt(diag(Dseq(:,dd)))); +% h(:,:,dd) = issup*Vseq(:,:,dd)*sqrt(diag(Dseq(:,dd))); +% end + +%% Build TF AOs + +nh11 = ao(plist('xvals', f, 'yvals', squeeze(h(1,1,:)), 'fs', fs, 'dtype', 'fsdata')); +nh11.setName; + +nh12 = ao(plist('xvals', f, 'yvals', squeeze(h(1,2,:)), 'fs', fs, 'dtype', 'fsdata')); +nh12.setName; + +nh13 = ao(plist('xvals', f, 'yvals', squeeze(h(1,3,:)), 'fs', fs, 'dtype', 'fsdata')); +nh13.setName; + +nh21 = ao(plist('xvals', f, 'yvals', squeeze(h(2,1,:)), 'fs', fs, 'dtype', 'fsdata')); +nh21.setName; + +nh22 = ao(plist('xvals', f, 'yvals', squeeze(h(2,2,:)), 'fs', fs, 'dtype', 'fsdata')); +nh22.setName; + +nh23 = ao(plist('xvals', f, 'yvals', squeeze(h(2,3,:)), 'fs', fs, 'dtype', 'fsdata')); +nh23.setName; + +nh31 = ao(plist('xvals', f, 'yvals', squeeze(h(3,1,:)), 'fs', fs, 'dtype', 'fsdata')); +nh31.setName; + +nh32 = ao(plist('xvals', f, 'yvals', squeeze(h(3,2,:)), 'fs', fs, 'dtype', 'fsdata')); +nh32.setName; + +nh33 = ao(plist('xvals', f, 'yvals', squeeze(h(3,3,:)), 'fs', fs, 'dtype', 'fsdata')); +nh33.setName; + +iplot(rh11,nh11) +iplot(rh12,nh12) +iplot(rh13,nh13) +iplot(rh21,nh21) +iplot(rh22,nh22) +iplot(rh23,nh23) +iplot(rh31,nh31) +iplot(rh32,nh32) +iplot(rh33,nh33) + +%% Build CSD AOs + +% Note that the definition of cross-spectral matrix follows that of s M +% Kay, Modern Spectral Estimation + +% csd11 +H11 = nh11.y.*conj(nh11.y) + nh12.y.*conj(nh12.y) + nh13.y.*conj(nh13.y); +H11 = ao(plist('xvals', f, 'yvals', H11, 'fs', fs, 'dtype', 'fsdata', 'yunits', unit('m^2').*unit('Hz^-1'))); +H11.setName; + +% csd12 +H12 = conj(nh11.y).*nh21.y + conj(nh12.y).*nh22.y + conj(nh13.y).*nh23.y; +H12 = ao(plist('xvals', f, 'yvals', H12, 'fs', fs, 'dtype', 'fsdata', 'yunits', unit('m^2').*unit('Hz^-1'))); +H12.setName; + +% csd13 +H13 = conj(nh11.y).*nh31.y + conj(nh12.y).*nh32.y + conj(nh13.y).*nh33.y; +H13 = ao(plist('xvals', f, 'yvals', H13, 'fs', fs, 'dtype', 'fsdata', 'yunits', unit('m^2').*unit('Hz^-1'))); +H13.setName; + +% csd21 +H21 = conj(H12); +H21.setName; + +% csd22 +H22 = nh21.y.*conj(nh21.y) + nh22.y.*conj(nh22.y) + nh23.y.*conj(nh23.y); +H22 = ao(plist('xvals', f, 'yvals', H22, 'fs', fs, 'dtype', 'fsdata', 'yunits', unit('m^2').*unit('Hz^-1'))); +H22.setName; + +% csd23 +H23 = conj(nh21.y).*nh31.y + conj(nh22.y).*nh32.y + conj(nh23.y).*nh33.y; +H23 = ao(plist('xvals', f, 'yvals', H23, 'fs', fs, 'dtype', 'fsdata', 'yunits', unit('m^2').*unit('Hz^-1'))); +H23.setName; + +% csd31 +H31 = conj(H13); +H31.setName; + +% csd32 +H32 = conj(H23); +H32.setName; + +% csd33 +H33 = conj(nh31.y).*nh31.y + conj(nh32.y).*nh32.y + conj(nh33.y).*nh33.y; +H33 = ao(plist('xvals', f, 'yvals', H33, 'fs', fs, 'dtype', 'fsdata', 'yunits', unit('m^2').*unit('Hz^-1'))); +H33.setName; + +iplot(G11,H11) +iplot(G12,H12) +iplot(G13,H13) +iplot(G22,H22) +iplot(G23,H23) +iplot(G33,H33) + + + + + + + +