diff m-toolbox/test/test_matrix_MultiChannelNoise_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_matrix_MultiChannelNoise_2.m	Wed Nov 23 19:22:13 2011 +0100
@@ -0,0 +1,613 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% 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
+
+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
+Ns = matrix(plist('built-in','mdc3_ifo2ifo_noise'));
+
+% evalueat model
+[rw,cl]=size(Ns.objs);
+for ii=1:rw
+  for jj=1:cl
+    Ns.objs(ii,jj).setParams(parnames,parvalues);
+    Ns.objs(ii,jj).setXvals(f);
+    CSD(ii,jj)=eval(Ns.objs(ii,jj));
+    if ii==jj
+      CSD(ii,jj)= abs(CSD(ii,jj));
+    end
+  end
+end
+
+%% Plot
+
+plpl = plist('Linecolors', {'k', 'r', 'b'},...
+  'LineStyles', {'-', '--', ':'},...
+  'LineWidths', {3, 3, 3},...
+  'Legends', {'S_{o_1 o_1}', 'S_{o_1 o_\Delta}', 'S_{o_\Delta o_\Delta}'});
+
+% iplot(CSD(1,1),CSD(1,2),CSD(2,1),CSD(2,2))
+iplot(CSD(1,1),CSD(1,2),CSD(2,2),plpl)
+
+%%
+%--------------------------------------------------------------------------
+% 2 Dimensional Noisegen Filter
+%--------------------------------------------------------------------------
+
+
+%% 2 dim noisegen filter in z domain - symbolic precision All pass
+
+% plist for noise generation
+plns = plist(...
+  'csd',       CSD, ...
+  'targetobj',  'miir', ...
+  'fs',        fs, ...
+  'MaxIter',   70, ...
+  'PoleType',  3, ...
+  'MinOrder',  25, ...
+  'MaxOrder',  55, ...
+  'Weights',   2, ...
+  'Plot',      false,...
+  'MSEVARTOL', 1e-1,...
+  'FITTOL',    1e-4,...
+  'UseSym',    'on',...
+  'iunits',    'm',...
+  'ounits',    'm');
+
+na = matrix(plns);
+
+%% Check response of CSD
+
+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));
+
+for kk = 1:numel(CSD)
+  CSD(kk).setYunits((unit('m')^2)*(unit('Hz')^-1));
+  CSD(kk).setXunits(unit('Hz'));
+  ECSD.objs(kk).setYunits((unit('m')^2)*(unit('Hz')^-1));
+  ECSD.objs(kk).setXunits(unit('Hz'));
+end
+
+% calculate cross-coherence
+COH = CSD(1,2)./sqrt(CSD(1,1).*CSD(2,2));
+COH.simplifyYunits;
+RCOH = real(COH);
+ICOH = imag(COH);
+
+ECOH = ECSD.objs(1,2)./sqrt(ECSD.objs(1,1).*ECSD.objs(2,2));
+ECOH.simplifyYunits;
+RECOH = real(ECOH);
+IECOH = imag(ECOH);
+
+% set plist for plotting
+
+plpl = plist('Linecolors', {'k', 'r', 'b'},...
+  'LineStyles', {'-', '--', ':'},...
+  'LineWidths', {3, 3, 3},...
+  'Legends', {'Model', 'Fit', 'Residuals'});
+
+iplot(CSD(1,1),ECSD.objs(1,1),abs(CSD(1,1)-ECSD.objs(1,1)),plpl)
+iplot(CSD(2,2),ECSD.objs(2,2),abs(CSD(2,2)-ECSD.objs(2,2)),plpl)
+
+plpl = plist('Linecolors', {'k', 'r', 'b'},...
+  'LineStyles', {'-', '--', ':'},...
+  'LineWidths', {3, 3, 3},...
+  'Legends', {'Model', 'Fit', 'Residuals'},...
+  'Yscales', {'All', 'lin'},...
+  'Ylabels', {'All', 'Re(coh)'});
+
+iplot(RCOH,RECOH,abs(RCOH-RECOH),plpl)
+
+plpl = plist('Linecolors', {'k', 'r', 'b'},...
+  'LineStyles', {'-', '--', ':'},...
+  'LineWidths', {3, 3, 3},...
+  'Legends', {'Model', 'Fit', 'Residuals'},...
+  'Yscales', {'All', 'lin'},...
+  'Ylabels', {'All', 'Im(coh)'});
+
+iplot(ICOH,IECOH,abs(ICOH-IECOH),plpl)
+
+%% Check response of Filters
+
+% 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'));
+
+
+% iplot(TF(1,1),na11,abs(TF(1,1) - na11))
+% iplot(TF(1,2),na12,abs(TF(1,2) - na12))
+% iplot(TF(2,1),na21,abs(TF(2,1) - na21))
+% iplot(TF(2,2),na22,abs(TF(2,2) - na22))
+
+iplot(na11,na12,na21,na22)
+
+%%
+%--------------------------------------------------------------------------
+% 2 Dimensional Noise Generation
+%--------------------------------------------------------------------------
+nsecs = 3e5;
+plng = plist(...
+  'model',   na,...
+  'Nsecs',   nsecs,...
+  'fs',      fs,...
+  'yunits',  'm');
+
+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
+
+no1 = no.objs(1);
+no2 = no.objs(2);
+nfft = 6e4;
+
+no12xx = cpsd(no1,no2,plist('nfft',nfft));
+no1xx = no1.psd(plist('nfft',nfft));
+no2xx = no2.psd(plist('nfft',nfft));
+%%
+
+ecoh = no12xx./(sqrt(no1xx.*no2xx));
+recoh = real(ecoh);
+iecoh = imag(ecoh);
+
+iplot(recoh,RECOH,plist('Yscales',{'All','lin'}))
+iplot(iecoh,IECOH,plist('Yscales',{'All','lin'}))
+
+%% Get averaged noise spectral curves
+
+N = 500;
+nsecs = 3e5;
+nfft = 6e4;
+
+Mnxx1 = 0; Mn2xx1 = 0;
+Mnxx2 = 0; Mn2xx2 = 0;
+
+Mnxy1 = 0; Mn2xy1 = 0;
+Mnxy2 = 0; Mn2xy2 = 0;
+
+tic
+for ii = 1:N
+  
+  fprintf('===== iter %s =====\n',num2str(ii))
+  
+  % noise generation
+  plng = plist(...
+    'model',   na,...
+    'Nsecs',   nsecs,...
+    'fs',      fs,...
+    'yunits',  'm');
+
+  no = matrix(plng);
+  
+  % periodogram calculation
+  no1 = no.objs(1);
+  no2 = no.objs(2);
+
+  no1xx = no1.psd;
+  no2xx = no2.psd;
+  f1 = no1xx.x;
+  
+  % running average and variance for periodogram
+  if ii == 1
+    Mnxx1 = no1xx.y;
+    Mnxx2 = no2xx.y;
+  else
+%     Qxx1 = no1xx.y - Mnxx1;
+    Mnxx1 = Mnxx1 + (no1xx.y - Mnxx1)./ii;
+    Mn2xx1 = Mn2xx1 + (no1xx.y - Mnxx1).*(no1xx.y - Mnxx1);
+    
+%     Qxx2 = no2xx.y - Mnxx2;
+    Mnxx2 = Mnxx2 + (no2xx.y - Mnxx2)./ii;
+    Mn2xx2 = Mn2xx2 + (no2xx.y - Mnxx2).*(no2xx.y - Mnxx2);
+  end
+  clear no1xx no2xx
+  
+  
+  % cross coherence calculation
+  no12xx = cpsd(no1,no2,plist('nfft',nfft));
+  no1xx2 = no1.psd(plist('nfft',nfft));
+  no2xx2 = no2.psd(plist('nfft',nfft));
+  f2 = no1xx2.x;
+
+  ecoh = (no12xx.y)./(sqrt((no1xx2.y).*(no2xx2.y)));
+  recoh = real(ecoh);
+  iecoh = imag(ecoh);
+  
+  clear no12xx no1xx2 no2xx2  
+  % running average and variance for cross coherence
+  if ii == 1
+    Mnxy1 = recoh;
+    Mnxy2 = iecoh;
+  else
+%     Qxy1 = recoh - Mnxy1;
+    Mnxy1 = Mnxy1 + (recoh - Mnxy1)./ii;
+    Mn2xy1 = Mn2xy1 + (recoh - Mnxy1).*(recoh - Mnxy1);
+    
+%     Qxy2 = iecoh - Mnxy2;
+    Mnxy2 = Mnxy2 + (iecoh - Mnxy2)./ii;
+    Mn2xy2 = Mn2xy2 + (iecoh - Mnxy2).*(iecoh - Mnxy2);
+  end
+  
+end
+toc
+
+% get mean and variance for psd 1
+Sxx1 = Mnxx1; % mean
+if N == 1
+  Svxx1 = Sxx1;
+else
+  Svxx1 = (Mn2xx1/(N-1))/N; % variance
+end
+% get mean and variance for psd 2
+Sxx2 = Mnxx2; % mean
+if N == 1
+  Svxx2 = Sxx2;
+else
+  Svxx2 = (Mn2xx2/(N-1))/N; % variance
+end
+% get mean and variance for real part of cross coherence
+Sxy1 = Mnxy1; % mean
+if N == 1
+  Svxy1 = Sxy1;
+else
+  Svxy1 = (Mn2xy1/(N-1))/N; % variance
+end
+% get mean and variance for imaginary part of cross coherence
+Sxy2 = Mnxy2; % mean
+if N == 1
+  Svxy2 = Sxy2;
+else
+  Svxy2 = (Mn2xy2/(N-1))/N; % variance
+end
+
+% save results
+
+save('C:\Users\Luigi\Lavori\ltp_noisegen\matlab\Sxx1.mat','Sxx1')
+save('C:\Users\Luigi\Lavori\ltp_noisegen\matlab\Svxx1.mat','Svxx1')
+save('C:\Users\Luigi\Lavori\ltp_noisegen\matlab\Sxx2.mat','Sxx2')
+save('C:\Users\Luigi\Lavori\ltp_noisegen\matlab\Svxx2.mat','Svxx2')
+save('C:\Users\Luigi\Lavori\ltp_noisegen\matlab\Sxy1.mat','Sxy1')
+save('C:\Users\Luigi\Lavori\ltp_noisegen\matlab\Svxy1.mat','Svxy1')
+save('C:\Users\Luigi\Lavori\ltp_noisegen\matlab\Sxy2.mat','Sxy2')
+save('C:\Users\Luigi\Lavori\ltp_noisegen\matlab\Svxy2.mat','Svxy2')
+save('C:\Users\Luigi\Lavori\ltp_noisegen\matlab\f1.mat','f1')
+save('C:\Users\Luigi\Lavori\ltp_noisegen\matlab\f2.mat','f2')
+save(na,'C:\Users\Luigi\Lavori\ltp_noisegen\matlab\na.mat')
+
+%% Load saved data
+
+load 'C:\Users\Luigi\Lavori\ltp_noisegen\matlab\Sxx1.mat'
+load 'C:\Users\Luigi\Lavori\ltp_noisegen\matlab\Svxx1.mat'
+load 'C:\Users\Luigi\Lavori\ltp_noisegen\matlab\Sxx2.mat'
+load 'C:\Users\Luigi\Lavori\ltp_noisegen\matlab\Svxx2.mat'
+load 'C:\Users\Luigi\Lavori\ltp_noisegen\matlab\Sxy1.mat'
+load 'C:\Users\Luigi\Lavori\ltp_noisegen\matlab\Svxy1.mat'
+load 'C:\Users\Luigi\Lavori\ltp_noisegen\matlab\Sxy2.mat'
+load 'C:\Users\Luigi\Lavori\ltp_noisegen\matlab\Svxy2.mat'
+load 'C:\Users\Luigi\Lavori\ltp_noisegen\matlab\f1.mat'
+load 'C:\Users\Luigi\Lavori\ltp_noisegen\matlab\f2.mat'
+
+%% Plot spectra
+
+figure()
+
+p22 = loglog(f1(1:end-1),Sxx1(1:end-1) + sqrt(Svxx1(1:end-1)),'b','LineWidth',3);
+hold on
+grid on
+p23 = loglog(f1(1:end-1),Sxx1(1:end-1) - sqrt(Svxx1(1:end-1)),'b','LineWidth',3);
+p21 = loglog(f1(1:end-1),Sxx1(1:end-1),'r','LineWidth',3);
+
+p11 = loglog(ECSD.objs(1,1).x,ECSD.objs(1,1).y,'k','LineWidth',3);
+
+
+xlabel('Frequency [Hz]','fontsize',18)
+ylabel('amplitude [m^2 Hz^{-1}]','fontsize',18)
+legend([p11(1) p21(1) p22(1)],'Fit Model', 'Data', 'Error \pm \sigma')
+
+figure()
+
+p22 = loglog(f1(1:end-1),Sxx2(1:end-1) + sqrt(Svxx2(1:end-1)),'b','LineWidth',3);
+hold on
+grid on
+p23 = loglog(f1(1:end-1),Sxx2(1:end-1) - sqrt(Svxx2(1:end-1)),'b','LineWidth',3);
+p21 = loglog(f1(1:end-1),Sxx2(1:end-1),'r','LineWidth',3);
+
+p11 = loglog(ECSD.objs(2,2).x,ECSD.objs(2,2).y,'k','LineWidth',3);
+
+
+xlabel('Frequency [Hz]','fontsize',18)
+ylabel('amplitude [m^2 Hz^{-1}]','fontsize',18)
+legend([p11(1) p21(1) p22(1)],'Fit Model', 'Data', 'Error \pm \sigma')
+
+
+%% Plot coherence
+
+figure()
+
+p22 = semilogx(f2,Sxy1 + sqrt(Svxy1),'b','LineWidth',3);
+hold on
+grid on
+p23 = semilogx(f2,Sxy1 - sqrt(Svxy1),'b','LineWidth',3);
+p21 = semilogx(f2,Sxy1,'r','LineWidth',3);
+
+p11 = semilogx(RECOH.x,RECOH.y,'k','LineWidth',3);
+
+
+xlabel('Frequency [Hz]','fontsize',18)
+ylabel('Re(coh) []','fontsize',18)
+legend([p11(1) p21(1) p22(1)],'Fit Model', 'Data', 'Error \pm \sigma')
+
+figure()
+
+p22 = semilogx(f2,Sxy2 + sqrt(Svxy2),'b','LineWidth',3);
+hold on
+grid on
+p23 = semilogx(f2,Sxy2 - sqrt(Svxy2),'b','LineWidth',3);
+p21 = semilogx(f2,Sxy2,'r','LineWidth',3);
+
+p11 = semilogx(IECOH.x,IECOH.y,'k','LineWidth',3);
+
+
+xlabel('Frequency [Hz]','fontsize',18)
+ylabel('Im(coh) []','fontsize',18)
+legend([p11(1) p21(1) p22(1)],'Fit Model', 'Data', 'Error \pm \sigma')
+
+%% Check response of CSD
+
+currPath = cd;
+cd MDC1 % assuming to start from ..\ltpda\software\m-toolbox\test
+[TF,CSD] = mdc1_tf_models(plist('f',f1,'fs',fs));
+cd(currPath)
+
+na11 = resp(na.objs(1,1).filters,plist('f',f1,'bank','parallel'));
+na12 = resp(na.objs(1,2).filters,plist('f',f1,'bank','parallel'));
+na21 = resp(na.objs(2,1).filters,plist('f',f1,'bank','parallel'));
+na22 = resp(na.objs(2,2).filters,plist('f',f1,'bank','parallel'));
+
+mna = matrix([na11 na12;na21 na22]);
+
+ECSD = mna*conj(transpose(mna));
+
+for kk = 1:numel(CSD)
+  CSD(kk).setYunits((unit('m')^2)*(unit('Hz')^-1));
+  CSD(kk).setXunits(unit('Hz'));
+  ECSD.objs(kk).setYunits((unit('m')^2)*(unit('Hz')^-1));
+  ECSD.objs(kk).setXunits(unit('Hz'));
+end
+
+plpl = plist('Linecolors', {'k', 'r', 'b'},...
+  'LineStyles', {'-', '--', ':'},...
+  'LineWidths', {3, 3, 3},...
+  'Legends', {'Model', 'Fit', 'Residuals'});
+
+iplot(CSD(1,1),ECSD.objs(1,1),abs(CSD(1,1)-ECSD.objs(1,1)),plpl)
+iplot(CSD(2,2),ECSD.objs(2,2),abs(CSD(2,2)-ECSD.objs(2,2)),plpl)
+
+%% get expected response + window
+
+% we should considere that the window has a spectral response that can add
+% some systematics inside our spectral estimations. Since the window is a
+% product in time domain with the time series, that it corresponds to a
+% convolution in frequency domain. We can ifft the frequency response of
+% the filters, multiply in time domain for the window and then come back to
+% freq domain by fft.
+na = matrix('C:\Users\Luigi\Lavori\ltp_noisegen\matlab\na.mat');
+%%
+% filter responses
+fs = 10;
+nsecs = 3e5;
+nfft = nsecs.*fs;
+ff1 = (0:floor(nfft/2)).*fs./nfft;
+
+rsp11 = resp(na.objs(1,1).filters,plist('f',ff1,'bank','parallel'));
+rsp11 = rsp11.y;
+% rsp11 = [rsp11(1:end-1);flipud(conj(rsp11(2:end)))];
+rsp12 = resp(na.objs(1,2).filters,plist('f',ff1,'bank','parallel'));
+rsp12 = rsp12.y;
+% rsp12 = [rsp12(1:end-1);flipud(conj(rsp12(2:end)))];
+rsp21 = resp(na.objs(2,1).filters,plist('f',ff1,'bank','parallel'));
+rsp21 = rsp21.y;
+% rsp21 = [rsp21(1:end-1);flipud(conj(rsp21(2:end)))];
+rsp22 = resp(na.objs(2,2).filters,plist('f',ff1,'bank','parallel'));
+rsp22 = rsp22.y;
+% rsp22 = [rsp22(1:end-1);flipud(conj(rsp22(2:end)))];
+clear na
+
+% psd calc (npsd should contain nfft samples)
+npsd11 = rsp11.*conj(rsp11) + rsp12.*conj(rsp12);
+% npsd11 = [npsd11;flipud(npsd11(2:end-1))];
+npsd22 = rsp21.*conj(rsp21) + rsp22.*conj(rsp22);
+% npsd22 = [npsd22;flipud(npsd22(2:end-1))];
+
+%%
+
+% get window frequency response
+
+% BH92 in frequency domain
+W = BH92(2.*pi.*ff1./fs,nfft);
+W = W./max(abs(W));
+W = W.*conj(W);
+
+%% ifft dello spettro
+
+% npsd11 = [npsd11;flipud(npsd11(2:end-1))]./2;
+% npsd22 = [npsd22;flipud(npsd22(2:end-1))]./2;
+
+% g11 = ifft(npsd11);
+% g22 = ifft(npsd22);
+
+W = blackmanharris(nfft);
+if size(W,2)>1
+  W = W.';
+end
+W = W.^2;
+W = ifftshift(W);
+
+WS11 = fft(W.*g11);
+WS22 = fft(W.*g22);
+
+WS11 = 2.*WS11(1:numel(ff1));
+WS22 = 2.*WS22(1:numel(ff1));
+
+%% get convolution
+
+% WS11 = conv(W,npsd11);
+% WS11 = WS11(1:numel(ff1));
+
+
+%% Plot spectra
+
+load 'C:\Users\Luigi\Lavori\ltp_noisegen\matlab\Sxx1.mat'
+load 'C:\Users\Luigi\Lavori\ltp_noisegen\matlab\Svxx1.mat'
+load 'C:\Users\Luigi\Lavori\ltp_noisegen\matlab\Sxx2.mat'
+load 'C:\Users\Luigi\Lavori\ltp_noisegen\matlab\Svxx2.mat'
+%%
+figure()
+
+p22 = loglog(ff1(1:end-1),Sxx1(1:end-1) + sqrt(Svxx1(1:end-1)),'b','LineWidth',3);
+hold on
+grid on
+p23 = loglog(ff1(1:end-1),Sxx1(1:end-1) - sqrt(Svxx1(1:end-1)),'b','LineWidth',3);
+p21 = loglog(ff1(1:end-1),Sxx1(1:end-1),'r','LineWidth',3);
+
+p11 = loglog(ff1(1:end),WS11(1:end),'k','LineWidth',3);
+
+
+xlabel('Frequency [Hz]','fontsize',18)
+ylabel('amplitude [m^2 Hz^{-1}]','fontsize',18)
+legend([p11(1) p21(1) p22(1)],'Fit Model', 'Data', 'Error \pm \sigma')
+
+%%
+figure()
+
+p22 = loglog(ff1(1:end-1),Sxx2(1:end-1) + sqrt(Svxx2(1:end-1)),'b','LineWidth',3);
+hold on
+grid on
+p23 = loglog(ff1(1:end-1),Sxx2(1:end-1) - sqrt(Svxx2(1:end-1)),'b','LineWidth',3);
+p21 = loglog(ff1(1:end-1),Sxx2(1:end-1),'r','LineWidth',3);
+
+p11 = loglog(ff1(1:end-1),WS22(1:end-1),'k','LineWidth',3);
+
+
+xlabel('Frequency [Hz]','fontsize',18)
+ylabel('amplitude [m^2 Hz^{-1}]','fontsize',18)
+legend([p11(1) p21(1) p22(1)],'Fit Model', 'Data', 'Error \pm \sigma')
+
+%% get statistics
+
+Sn11 = (npsd11(14:end-1)-Sxx1(14:end-1))./npsd11(14:end-1);
+Sn11 = ao(cdata(Sn11));
+Sn22 = (npsd22(14:end-1)-Sxx2(14:end-1))./npsd22(14:end-1);
+Sn22 = ao(cdata(Sn22));
+
+% get equivalent normal distribution and histogram
+hpl1 = plist('N', 50);
+hpl2 = plist('N', 200);
+
+dS11h = hist(Sn11,hpl1);
+dS11h = dS11h./max(dS11h);
+dS11n = normdist(Sn11,hpl2);
+dS11n = dS11n./max(dS11n);
+
+dS22h = hist(Sn22,hpl1);
+dS22h = dS22h./max(dS22h);
+dS22n = normdist(Sn22,hpl2);
+dS22n = dS22n./max(dS22n);
+
+%% check
+
+iplot(dS11h,dS11n)
+iplot(dS22h,dS22n)
+
+%% Plot results of the statistics analysis
+
+figure()
+
+p1 = bar(dS11h.x,dS11h.y,'b');
+hold on
+grid on
+p2 = plot(dS11n.x,dS11n.y,'r','LineWidth',3);
+ 
+xlabel('Normalized Deviation [\Deltax / x]','fontsize',18)
+ylabel('Normalized Counts','fontsize',18)
+legend([p1(1) p2(1)],'Histogram', 'Equivalent Norm. Distr.')
+
+figure()
+
+p1 = bar(dS22h.x,dS22h.y,'b');
+hold on
+grid on
+p2 = plot(dS22n.x,dS22n.y,'r','LineWidth',3);
+ 
+xlabel('Normalized Deviation [\Deltax / x]','fontsize',18)
+ylabel('Normalized Counts','fontsize',18)
+legend([p1(1) p2(1)],'Histogram', 'Equivalent Norm. Distr.')
+
+
+
+%%
+m1 = mean(Sn11.y);
+m2 = mean(Sn22.y);
+s1 = std(Sn11.y);
+s2 = std(Sn22.y);
+
+
+
+
+
+%%
+
+nfft = 1e2;
+fs = 10;
+frq = linspace(0,pi,10000);
+% D=DirichletKernel(frq,nfft);
+% D=D./max(D);
+% figure;
+% plot(frq,20.*log10(D))
+% grid on
+W=BH92(frq,nfft);
+% W=W./max(W);
+figure;
+plot(frq./pi,20.*log10(W))
+grid on
+