221
A. APPENDICE AL CAPITOLO 5
In questa appendice verranno riportati i programmi Matlab scritti per la realizzazione dei grafici e la soluzione dei problemi relativi al capitolo 5. Per non appesantire troppo l’appendice, verrà riportato, per ogni tipologia, un solo programma esemplificativo dal quale sarà possibile risalire agli altri semplicemente effettuando le necessarie modifiche nei dati di ingresso.
222
A.1 Creazione delle curve caratteristiche
Si riporta il programma scritto per il caricamento dei dati campionati e per il plottaggio della curva dell’induttore.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Calcolo delle curve caratteristiche dell'induttore Dapamito 4 % % % % Luca Pecorari 2009 % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% close all clear all clc
% PARAMETRI INIZIALI DA IMPOSTARE
omega=3000; % [giri/minuto] velocità di rotazione dell'induttore
cas=200; % campionamenti al secondo
ntot=1000; % n°tot campionamenti per prova trasduttore=3; %scelta trasduttore differenziale
% [2]=seconda colonna (fondo scala 1,10 bar) % [3]=terza colonna (fs=7 bar)
Q=0.001*[30.04,29.41,28.36,27.33,26.31,25.40,24.20,… % [m^3/s]portata 23.27,22.36,21.32,20.20,19.32,18.31,17.24,... 16.20,15.24,14.19,13.22,12.20,11.02,10.15,… 9.13,8.02,7.13,6.10,5.01,4.03,3.02,2.06]; temperatura=[15.7,15.7,15.8,16.0,16.4,16.5,16.7,16.8,… % [°C] temperatura 17.0,17.1,15.4,15.5,15.6,15.7,15.7,15.8,... 16.0,16.0,16.2,16.3,16.5,16.5,16.6,16.7,… 16.8,17.1,17.2,17.1,17.5];
% parametri geometrici induttore
Rt=0.081; % [m] raggio tip induttore
Rh1=0.035; % [m] raggio mozzo inlet
Rh2=0.0585; % [m] raggio mozzo outlet
223
cle=0.0008; % [m] gioco radiale
batt_idro=0.06; % [bar] Correzione per il trasduttore assoluto di % pressione dovuto al battente idrostatico
% CARICAMENTO DATI Prova1=load('DAP4_1_3000.txt'); Prova1_0=load('DAP4_1_3000_0000.txt'); Prova2=load('DAP4_2_3000.txt'); Prova3=load('DAP4_3_3000.txt'); Prova4=load('DAP4_4_3000.txt'); Prova5=load('DAP4_5_3000.txt'); Prova6=load('DAP4_6_3000.txt'); Prova7=load('DAP4_7_3000.txt'); Prova8=load('DAP4_8_3000.txt'); Prova9=load('DAP4_9_3000.txt'); Prova10=load('DAP4_10_3000.txt'); Prova11=load('DAP4_11_3000.txt'); Prova12=load('DAP4_12_3000.txt'); Prova13=load('DAP4_13_3000.txt'); Prova14=load('DAP4_14_3000.txt'); Prova15=load('DAP4_15_3000.txt'); Prova16=load('DAP4_16_3000.txt'); Prova17=load('DAP4_17_3000.txt'); Prova18=load('DAP4_18_3000.txt'); Prova19=load('DAP4_19_3000.txt'); Prova20=load('DAP4_20_3000.txt'); Prova21=load('DAP4_21_3000.txt'); Prova22=load('DAP4_22_3000.txt'); Prova23=load('DAP4_23_3000.txt'); Prova24=load('DAP4_24_3000.txt'); Prova25=load('DAP4_25_3000.txt'); Prova26=load('DAP4_26_3000.txt'); Prova27=load('DAP4_27_3000.txt'); Prova28=load('DAP4_28_3000.txt'); Prova29=load('DAP4_29_3000.txt'); % OPERAZIONI DA SVOLGERE
% calcolo densità acqua in funzione della temperatura
T_vspec_vett=280:5:475; % [K] v_spec_vett=1e-003+1e-006*[0,1,1,2,4,5,7,9,11,13,… % [m^3/kg] 15,18,21,24,27,30,34,37,41,45,49,53,58,… 62,67,72,77,82,87,93,99,104,110,117,123,130,… 137,144,152,159]; T=273.15+temperatura; % [K] v_spec=interp1(T_vspec_vett,v_spec_vett,T); ro=1./v_spec; % [Kg/m^3]
% calcolo delle aree e della velocità di rotazione
w=omega/60*2*pi; % [rad/s]
R=Rt+cle; % [m] raggio del condotto
224
A2=pi*(R^2-Rh2^2); % [m^2] sezione d'uscita
% costruzione matrici D=[Prova1(:,trasduttore),Prova2(:,trasduttore),Prova3(:,trasduttore),… Prova4(:,trasduttore),Prova5(:,trasduttore),Prova6(:,trasduttore),… Prova7(:,trasduttore),Prova8(:,trasduttore),Prova9(:,trasduttore),… Prova10(:,trasduttore),Prova11(:,trasduttore),Prova12(:,trasduttore),… Prova13(:,trasduttore),Prova14(:,trasduttore),Prova15(:,trasduttore),… Prova16(:,trasduttore),Prova17(:,trasduttore),Prova18(:,trasduttore),… Prova19(:,trasduttore),Prova20(:,trasduttore),Prova21(:,trasduttore),… Prova22(:,trasduttore),Prova23(:,trasduttore),Prova24(:,trasduttore),… Prova25(:,trasduttore),Prova26(:,trasduttore),Prova27(:,trasduttore),… Prova28(:,trasduttore),Prova29(:,trasduttore)]; D_0=[Prova1_0(:,trasduttore)]; D=mean(D); D_0=mean(D_0);
dp_t=(D-D_0)*10^5; % [Pa]media del segnale epurato della % media a w=0 per trasduttore1
% calcolo parametri adimensionali
fi=Q./(pi*w*Rt^3); % coefficiente di flusso
psi=dp_t./(ro*w^2*Rt^2); % prevalenza
% PLOTTAGGIO DEI RISULTATI
% costruzione della curva caratteristica
plot(fi,psi,'*r'); grid on
title(sprintf('Curva caratteristica DAP4')) xlabel('\phi')
ylabel('\psi')
legend('\omega=3000 rpm') axis([0 0.08 0 0.3])
% costruzione della curva velocità specifica in funzione di fi
225 figure() plot(fi,w_spec,'pr') xlabel('\phi') ylabel('velocità specifica') legend('\omega=3000 rpm') grid on
% Costruzione curva raggio specifico in funzione della velocità specifica
r_spec=fi.^-0.5.*psi.^(1/4); % definizione raggio specifico figure()
loglog(w_spec,r_spec,'pr') % plottaggio nel diagramma bilogaritmico xlabel('velocità specifica')
ylabel('raggio specifico') legend('\omega=3000 rpm') grid on
% SALVATAGGIO DEI RISULTATI
fi_dap4_3000=fi; psi_dap4_3000=psi
save('Prove_DAP4_3000_nc_risultati','fi_dap4_3000','psi_dap4_3000');
A.2 Creazione delle curve di prestazione cavitante
Si riportano ora i listati utilizzati per la creazione delle curve di prestazione cavitante, in modalità discreta e continua
A.2.1 Modalità discreta
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Calcolo delle curve di cavitazione dell'induttore Dapamito4 (per punti) % % % % Luca Pecorari 2009 % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% close all clear all clc
226
% PARAMETRI INIZIALI DA IMPOSTARE
n_p=15; % numero di prove
omega=3000; % [giri al minuto] velocità di rotazione dell'induttore
cas=1000; % campionamenti al secondo
ntot=5000; % n°tot campionamenti per prova trasduttore=3; % scelta trasduttore differenziale
% [2]=seconda colonna (fondo scala 1,10 bar) % [3]=terza colonna(fs=7 bar)
temperatura=*15.3,15.7,15.8,16.0,16.5,16.7,17.0,16.8,15.6,… % [°C] 16.1,16.7,16.7,16.8,16.9,17.4];
Q=0.001**30.92,30.93,30.95,30.93,30.93,30.94,30.94,30.90,… % [m^3/s] 30.62,30.34,30.04,29.85,29.70,29.25,27.66];
% parametri geometrici induttore
Rt=0.081; % [m] raggio di estremità induttore
Rh1=0.035; % [m] raggio mozzo in ingresso
Rh2=0.0585; % [m] raggio mozzo in uscita
% parametri camera di prova
cle=0.0008; % [m] gioco radiale
batt_idro=0.06; % [bar] Correzione per il trasduttore assoluto di % pressione dovuto al battente idrostatico
% CARICAMENTO DATI P_in_1=load('pin_1_050_Q_30_94.txt'); P_in_2=load('pin_0_890_Q_30_94.txt'); P_in_3=load('pin_0_720_Q_30_94.txt'); P_in_4=load('pin_0_560_Q_30_94.txt'); P_in_5=load('pin_0_500_Q_30_94.txt'); P_in_6=load('pin_0_470_Q_30_94.txt'); P_in_7=load('pin_0_430_Q_30_94.txt'); P_in_8=load('pin_0_400_Q_30_94.txt'); P_in_9=load('pin_0_380_Q_30_94.txt'); P_in_10=load('pin_0_370_Q_30_94.txt'); P_in_11=load('pin_0_340_Q_30_94.txt'); P_in_12=load('pin_0_300_Q_30_94.txt'); P_in_13=load('pin_0_290_Q_30_94.txt'); P_in_14=load('pin_0_270_Q_30_94.txt'); P_in_15=load('pin_0_230_Q_30_94.txt'); dati_motore_fermo=load('pin_1_050_Q_30_94_0000.txt'); dati_motore_fermo_mediati=mean(dati_motore_fermo(:,trasduttore));
227
% OPERAZIONI DA SVOLGERE
% calcolo densità acqua in funzione della temperatura
T_vspec_vett=280:5:475; % [K] v_spec_vett=1e-003+1e-006*[0 1 1 2 4 5 7 9 11 13 15 18 21 24 … %[ m^3/kg] 27 30 34 37 41 45 49 53 58 62 67 72 77 82 87 … 93 99 104 110 117 123 130 137 144 152 159]; T=273.15+temperatura; % [K] v_spec=interp1(T_vspec_vett,v_spec_vett,T); ro=1./v_spec; % [kg/m^3]
% calcolo pressione di vapore in funzione della temperatura
T_vap_vett=275:5:370; % [K] p_vap_vett=1e+006*[0.0006980 0.0009912 0.001388 … % [Pa] 0.001919 0.002620 0.003536 0.004718 0.006230 … 0.008143 0.01054 0.01353 0.01721 0.02171 0.02718 ... 0.03377 0.04166 0.05105 0.06215 0.07521 0.09047]; pv=interp1(T_vap_vett,p_vap_vett,T); % [Pa]
% calcolo delle aree e della velocità di rotazione
w=omega/60*2*pi; % [rad/s] velocità di rotazione
R=Rt+cle; % [m] raggio del condotto
A1=pi*(R^2-Rh1^2); % [m^2] sezione d'ingresso
A2=pi*(R^2-Rh2^2); % [m^2] sezione d'uscita
dp_din=0.5*ro.*Q.^2.*((A1^2-A2^2)/(A1^2*A2^2)); %[Pa] variazione pressione % dinamica % costruzione matrici DP=[P_in_1(:,trasduttore),P_in_2(:,trasduttore),P_in_3(:,trasduttore),… P_in_4(:,trasduttore),P_in_5(:,trasduttore),P_in_6(:,trasduttore),… P_in_7(:,trasduttore),P_in_8(:,trasduttore),P_in_9(:,trasduttore),… P_in_10(:,trasduttore),P_in_11(:,trasduttore),P_in_12(:,trasduttore),... P_in_13(:,trasduttore),P_in_14(:,trasduttore),P_in_15(:,trasduttore)]; Pin=[P_in_1(:,1),P_in_2(:,1),P_in_3(:,1),P_in_4(:,1),P_in_5(:,1),P_in_6(:,1),… P_in_7(:,1),P_in_8(:,1),P_in_9(:,1),P_in_10(:,1),P_in_11(:,1),P_in_12(:,1),… P_in_13(:,1),P_in_14(:,1),P_in_15(:,1)];
228
% costruzione matrici dei valori mediati
j=0; g=0; for k=1:n_p g=g+1;
dp=10^5*mean(DP); % [Pa] media del segnale di prova end
for a=1:n_p j=j+1;
p_in=10^5*mean(Pin); % [Pa] pressione in ingresso end
p_motore_fermo=10^5*dati_motore_fermo_mediati;
% calcolo parametri adimensionali
batt_idro_Pa=10^5*batt_idro; dp_def=dp-p_motore_fermo;
fi=Q./(pi*w*Rt^3); % coefficiente di flusso
psi=dp_def./(ro.*w^2*Rt^2); % prevalenza
sigma=((p_in-batt_idro_Pa)-pv)./(0.5*ro.*(w.*Rt)^2); % numero di cavitazione psi_ref=psi(1); % Coefficiente di prevalenza incondizioni non cavitanti psi_per=psi./psi_ref; % Variazione percentuale del coefficiente di prevalenza
% PLOTTAGGIO DEI RISULTATI
load(‘fi_0_059d4_cont_risultati.mat') plot(sigma,psi,'marker','o','MarkerSize',6,'MarkerEdgeColor','k','MarkerFaceColor','r','Lin eStyle','-') hold on plot(sigma_dap4_0_059_cont,psi_dap4_0_059_cont,'marker','o','MarkerSize',6,'Marker EdgeColor','k','MarkerFaceColor','g','LineStyle','none')
title('Prestazioni Cavitanti DAPAMITO4') xlabel('\sigma')
ylabel('\psi')
legend('prova discreta','prova continua') grid on
229 figure(2)
plot(sigma,psi_per,'pr',sigma,psi_per,'-r') title('Variazione percentuale di \Psi') xlabel('\sigma')
ylabel('\Psi/\Psi_N_C') legend('\phi=0.059 T15') grid on
axis([0 0.6 0.5 1.2])
% SALVATAGGIO DEI RISULTATI
sigma_dap4_0_059_disc=sigma; psi_dap4_0_059_disc=psi; psi_dap4_0_059_disc_per=psi_per;
save('fi_0_059d4_disc_risultati','sigma_dap4_0_059_disc','psi_dap4_0_059_disc',… 'psi_dap4_0_059_disc_per');
A.2.2 Modalità continua
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Calcolo delle curve di cavitazione dell'induttore Dapamito4 (continue) % % % % Luca Pecorari 2009 % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% close all clear all clc
% PARAMETRI INIZIALI DA IMPOSTARE
temperatura=15.4; % temperatura in °C
omega=3000; % [giri al minuto] velocità di rotazione dell'induttore n=2400; % numero di campioni per definire un punto
ntot=240000; % n°tot campionamenti per prova
cas=1000; % campionamenti al secondo
trasduttore=3; % scelta trasduttore differenziale
% [2]=seconda colonna (fondo scala 1,10 bar) % [3]=terza colonna(fs=7 bar)
230
% parametri geometrici induttore
Rt=0.081; % [m] raggio di estremità induttore
Rh1=0.035; % [m] raggio mozzo in ingresso
Rh2=0.0585; % [m] raggio mozzo in uscita
% parametri camera di prova
cle=0.0008; % [m] gioco radiale
batt_idro=0.06; % [bar] Correzione per il trasduttore assoluto di % pressione dovuto al battente idrostatico
% CARICAMENTI DATI dati_motore_fermo=load('phi_0_059_inst_cle_08_0000.txt'); dati_motore_acceso=load('phi_0_059_inst_cle_08.txt'); Q_mamp=load('flussimetro_Q_30_94_cle_08_sincro.txt'); Q_mamp=(10^3)*Q_mamp; dati_motore_fermo_mediati=mean(dati_motore_fermo(:,trasduttore)); % OPERAZIONI DA SVOLGERE
% calcolo densità acqua in funzione della temperatura
T_vspec_vett=280:5:475; % [K] v_spec_vett=1e-003+1e-006**0 1 1 2 4 5 7 9 11 13 15 18 21 24 … %[ m^3/kg] 27 30 34 37 41 45 49 53 58 62 67 72 77 82 87 … 93 99 104 110 117 123 130 137 144 152 159]; T=273.15+temperatura; % [K] v_spec=interp1(T_vspec_vett,v_spec_vett,T); ro=1./v_spec; % [kg/m^3]
% calcolo pressione di vapore in funzione della temperatura
T_vap_vett=275:5:370; % [K] p_vap_vett=1e+006**0.0006980 0.0009912 0.001388 … % [Pa] 0.001919 0.002620 0.003536 0.004718 0.006230 … 0.008143 0.01054 0.01353 0.01721 0.02171 0.02718 ... 0.03377 0.04166 0.05105 0.06215 0.07521 0.09047]; pv=interp1(T_vap_vett,p_vap_vett,T); % [Pa]
231
% calcolo delle aree e della variazione di pressione dinamica
w=omega/60*2*pi; % [rad/s] velocità di rotazione
R=Rt+cle; % [m] raggio del condotto
A1=pi*(R^2-Rh1^2); % [m^2] sezione d'ingresso
A2=pi*(R^2-Rh2^2); % [m^2] sezione d'uscita
% costruzione matrice della portata
[np,z]=size(Q_mamp); % np=numero di valori acquisiti per la portata rap=ntot/np; Q_mamp_completa=ones(ntot,1); for a=1:np for b=1+((a-1)*rap):a*rap Q_mamp_completa(b,1)=Q_mamp(a); end end m=50/16; c=-(4*m); Q_mamp_completa=10^(-3)*((m*Q_mamp_completa)+c); % [Pa]
% costruzione matrice dei valori mediati (SENZA SOVRAPPOSIZIONE)
for j=1:ntot/n riga=0; for i=(j-1)*n+1:j*n riga=riga+1; ram1(riga,1:3)=dati_motore_acceso(i,1:3); ram2(riga,1)=Q_mamp_completa(i,1); end
dati_mediati(j,1:3)=10^5.*mean(ram1); % [Pa] matrice di tre colonne
% (Pin,Dp1,Dp2) le cui righe sono la % media di ciascun gruppo di Dn punti Q_mediato(j,1)=mean(ram2);
end
p_motore_fermo=10^5*dati_motore_fermo_mediati;
time=ntot/cas; % [sec] durata dell'acquisizione in secondi
232 vettore_secondi=(time/nv):(n/cas):time;
dp_din=0.5*ro.*Q_mediato.^2.*((A1^2-A2^2)/(A1^2*A2^2)); % [Pa]
% calcolo parametri adimensionali
batt_idro_Pa=10^5*batt_idro; % [Pa] Correzione per il trasduttore assoluto di % pressione dovuto al battente idrostatico fi=Q_mediato./(pi*w*Rt^3); % coefficiente di flusso psi=(dati_mediati(:,trasduttore)-p_motore_fermo)./(ro*w^2*Rt^2);
% prevalenza trascurando differenza di pressione dinamica sigma=((dati_mediati(:,1)-batt_idro_Pa)-pv)./(0.5*ro*(w.*Rt)^2);
% numero di cavitazione
psi_ref=psi(1); % Coefficiente di prevalenza in condizioni non cavitanti psi_per=psi./psiref; % Variazione percentuale del coefficiente di prevalenza
% PLOTTAGGIO DEI RISULTATI
plot(sigma,psi,'pg','MarkerFaceColor','g') title('Prestazioni Cavitanti Dapamito4') xlabel('\sigma') ylabel('\Psi') legend('\phi=0.059 T15') grid on axis([0 0.6 0 0.35]) figure(2) plot(sigma,psi_per,'pr','MarkerFaceColor','r') title('Variazione percentuale di \Psi')
xlabel('\sigma') ylabel('\Psi/\Psi_N_C') legend('\phi=0.059 T15') grid on axis([0 0.6 0.5 1.2]) figure(3) plot(vettore_secondi,fi./0.059,'-k')
title('Variazione percentuale di \Phi nel tempo') xlabel('Durata esperimento [s]')
233 ylabel('\Phi/\Phi_n_o_m')
grid on figure(4)
plot(vettore_secondi,((dati_mediati(:,1)-batt_idro_Pa)/10^5),'-b') title('Variazione della pressione in ingresso nel tempo')
xlabel('Durata esperimento [s]') ylabel('Pressione in ingresso [bar]') grid on
% SALVATAGGIO DEI RISULTATI
fi_dap4_0_059_cont=fi; sigma_dap4_0_059_cont=sigma; psi_dap4_0_059_cont=psi; psi_dap4_0_059_cont_per=psi_per;
save('fi_0_059d4_cont_risultati','fi_dap4_0_059_cont','sigma_dap4_0_059_cont',… 'psi_dap4_0_059_cont','psi_dap4_0_059_cont_per');
A.3 Creazione dei diagrammi a cascata
Si riportano ora i listati utilizzati per la creazione dei diagrammi a cascata, utilizzati per lo studio delle instabilità.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Studio delle instabilità fluidodinamiche sull'induttore DAPAMITO4 % % % % Lucio Torre 2004 - Piero Miloro 2009 - Luca Pecorari 2009 % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% clc close all clear all % OPERAZIONI PRELIMINARI giri=3000; % [rpm] portata=27.85; % [l/s] temperatura=74.45; % [°C] correzione=0.06; % [bar]
234
cas=1000; % campionamenti al secondo
dati0_mat=load('phi_0_053_inst_cle_08_T75_bis_0000.txt'); dati1_mat=load('phi_0_053_inst_cle_08_T75_bis.txt'); p_dati=[];
Dp_dati=[];
psi_bar=0.0689476; % fattore di conversione 1 psi =0.0689476 bar
% scelta dei trasduttori (ad ogni colonna corrisponde un trasduttore)
p_dati=1e005*dati1_mat(:,1)-(correzione*10^5); % [Pa]
PCB1_dati=psi_bar*1e005*dati1_mat(:,10); % [Pa]
PCB2_dati=psi_bar*1e005*dati1_mat(:,9); % [Pa]
% dati dell'induttore e dell'analisi da impostare
Rt=0.081; % [m] raggio induttore
n_spettri=4000; % numero di punti utilizzati per il calcolo di ciascuno spettro; % 1000 punti corrispondono a 1 sec; deve essere tale che % dim_p_dati/n_spettri sia un numero intero
% (ad esempio n_spettri=1000,3000,4000,6000,8000) dt=1/cas; % [s] intervallo di campionamento
N_av_spec=2; % numero di medie per ciascuno spettro (ad esempio 2,3,10) dim1=size(p_dati);
size(Dp_dati); dim_p_dati=dim1(1);
% CALCOLO COEFFICIENTI ADIMENSIONALI
A=pi*Rt^2; % [m^2]
RPM=giri; % [giri/min]
omega=2*pi*RPM/60; % [rad/s]
V=portata*1e-003; % [m^3/sec]
phi=V/(A*omega*Rt); % coefficiente di flusso
% calcolo densità acqua in funzione della temperatura
T_vspec_vett=280:5:475; % [K]
235 27 30 34 37 41 45 49 53 58 62 67 72 77 82 87 … 93 99 104 110 117 123 130 137 144 152 159]; T=273.15+temperatura; % [K] v_spec=interp1(T_vspec_vett,v_spec_vett,T); ro=1./v_spec; % [kg/m^3]
% calcolo pressione di vapore in funzione della temperatura
T_vap_vett=275:5:370; % [K] p_vap_vett=1e+006**0.0006980 0.0009912 0.001388 … % [Pa] 0.001919 0.002620 0.003536 0.004718 0.006230 … 0.008143 0.01054 0.01353 0.01721 0.02171 0.02718 ... 0.03377 0.04166 0.05105 0.06215 0.07521 0.09047]; pv=interp1(T_vap_vett,p_vap_vett,T); % [Pa] % CALCOLO SPETTRI
N_spettri=dim_p_dati/n_spettri; % numero di spettri p_vett_spettri=[]; p_vett_PCB1=[]; p_vett_PCB2=[];
for i=1:N_spettri p1=p_dati((n_spettri*(i-1)+1):(n_spettri*(i-1)+n_spettri)); p_vett_spettri=[p_vett_spettri p1]; p1=PCB1_dati((n_spettri*(i-1)+1):(n_spettri*(i-1)+n_spettri)); p_vett_PCB1=[p_vett_PCB1 p1]; p1=PCB2_dati((n_spettri*(i-1)+1):(n_spettri*(i-1)+n_spettri)); p_vett_PCB2=[p_vett_PCB2 p1]; end;
size(p_vett_spettri); % sono matrici (n_spettri) righe e (N_spettri) colonne size(p_vett_PCB1;
% calcolo dei valori medi di sigma
p_spettri_mean=[];
p_spettri_mean=mean(p_vett_spettri); sigma_spettri=[];
236
f_Nyq=1/(2*dt); % [Hz] frequenza di Nyquist
Tr=n_spettri/(1/dt); % [s] lunghezza totale registrazione
T=Tr/N_av_spec; % [s] lunghezza del subrecord
% il numero di punti di sampling viene aumentato, se necessario, portandolo alla potenza di 2 più vicina, in alto
N_tot=Tr/dt; % numero totale di punti di sampling, è uguale a n_spettri N=T/dt; % numero di punti di sampling in ogni sub record
% (è anche uguale a n_spettri/N_av_spec) L=[]; % calcolo del numero L di zeri da aggiungere n=log2(N); n1=ceil(n); if (n1-n)==0 L=0; else L=2^n1-N; end
% definizione della matrice dei valori del tempo per la definizione della finestra di % tapering
% il vettore dei valori del tempo è diviso in N_av_spec parti consecutive le quali sono % disposte secondo le colonne della matrice t_mat
t_mat1=[]; t_mat=[]; for i=1:(N_spettri*N_av_spec)
t_mat1=(((i-1)*(N_tot/N_av_spec)+1)*dt):dt:((i*N_tot/N_av_spec)*dt); t_mat=[t_mat t_mat1.'];
end
df=1/T; % [Hz] spaziatura delle frequenze di stima dello spettro
% definizione del vettore delle frequenze per la stima dello spettro
T_L=(N+L)*dt; df_L=1/T_L;
omega_vett=0:(2*pi/T_L):pi/dt; % [rad/s] pulsazioni
237
% divisione della matrice dei dati in N_av_spec parti
u1_T=[]; u2_T=[]; for i=1:N_spettri
p1=p_vett_PCB1(:,i); % i dati relativi a ciascuno spettro sono disposti % secondo colonne infatti il vettore di dati % iniziale,es.PCB1_dati, è un vettore colonna e % viene divisa in N_spettri parti,anch'esse vettori % colonna, e organizzata in una matrice,
% p_vett_PCB1, di dimensioni
% [dim(PCB1_dati)]/N_spettri righe e N_spettri % colonne p2=p_vett_PCB2(:,i); for j=1:N_av_spec r=(i-1)*N_av_spec+j; u1_T(:,r)=p1(((j-1)*(N_tot/N_av_spec)+1):(j*N_tot/N_av_spec)); u2_T(:,r)=p2(((j-1)*(N_tot/N_av_spec)+1):(j*N_tot/N_av_spec)); end; end;
size(u1_T); % è una matrice (n_spettri/N_av_spettri) righe e % (N_spettri*N_av_spec) colonne
% CALCOLO DFT
% calcolo della media
u_mean=[]; v_mean=[]; for i=1:(N_spettri*N_av_spec)
u_mean(i)=sum(u1_T(:,i))/N; v_mean(i)=sum(u2_T(:,i))/N; end;
% definizione delle serie {x(r)} e{y(r)} depurate dal valore medio
% i valori per ciascun subrecord vengono disposti secondo le righe delle matrici x_N e % y_N
for i=1:(N_spettri*N_av_spec)
x_N(:,i)=u1_T(:,i)-u_mean(i)*ones(N,1); y_N(:,i)=u2_T(:,i)-v_mean(i)*ones(N,1);
238 end;
size(x_N)
% tapering dei dati con Hanning
u_Hann=[]; v_Hann=[]; for i=1:(N_spettri*N_av_spec) u_Hann(:,i)=x_N(:,i).*(0.5-0.5*cos((2*pi/T)*t_mat(:,i))); v_Hann(:,i)=y_N(:,i).*(0.5-0.5*cos((2*pi/T)*t_mat(:,i))); end; x_Hann=((8/3)^0.5)*u_Hann; y_Hann=((8/3)^0.5)*v_Hann; size(x_Hann)
% aggiunta degli zeri
x_zero=zeros(L,1); y_zero=zeros(L,1); x_L=[]; y_L=[]; for i=1:(N_spettri*N_av_spec) x_L(:,i)=[x_Hann(:,i);x_zero]; y_L(:,i)=[y_Hann(:,i);x_zero]; end;
% calcolo DFT delle serie {x(r)} e {y(r)} dei singoli subrecord
X_DFT=[]; Y_DFT=[]; for i=1:(N_spettri*N_av_spec) X_1=x_L(:,i).'; X_DFT(i,:)=fft(X_1); Y_1=y_L(:,i).'; Y_DFT(i,:)=fft(Y_1); end; size(X_DFT)
239
% CALCOLO STIME DEGLI AUTOSPETTRI
% calcolo coefficienti {S(k)} degli autospettri e cross_spettri dei singoli subrecord
S_xx_mat=[]; S_xy_mat=[]; S_yx_mat=[]; S_yy_mat=[]; for i=1:(N_spettri*N_av_spec) S_xx_mat(i,:)=conj(X_DFT(i,:)).*X_DFT(i,:); S_xy_mat(i,:)=conj(X_DFT(i,:)).*Y_DFT(i,:); S_yx_mat(i,:)=conj(Y_DFT(i,:)).*X_DFT(i,:); S_yy_mat(i,:)=conj(Y_DFT(i,:)).*Y_DFT(i,:); end;
% calcolo dello spettro come media degli spettri dei subrecord
Sxx_mat=[]; S_xx=[]; Sxy_mat=[]; S_xy=[]; Syx_mat=[]; S_yx=[]; Syy_mat=[]; S_yy=[]; s=0; for i=1:N_spettri s=(i-1)*N_av_spec+1; Sxx_mat=S_xx_mat(s:(s+N_av_spec-1),:); S_xx(i,:)=(dt/(N*N_av_spec))*sum(Sxx_mat); Sxy_mat=S_xy_mat(s:(s+N_av_spec-1),:); S_xy(i,:)=(dt/(N*N_av_spec))*sum(Sxy_mat); Syx_mat=S_yx_mat(s:(s+N_av_spec-1),:); S_yx(i,:)=(dt/(N*N_av_spec))*sum(Syx_mat); Syy_mat=S_yy_mat(s:(s+N_av_spec-1),:); S_yy(i,:)=(dt/(N*N_av_spec))*sum(Syy_mat); end;
% NOTA: questi vettori sono costituiti da (N+L) elementi ma solo i primi (N+L)/2 % sono significativi, infatti dopo l'indice (N+L)/2 i coeff. si ripetono
size(S_yx)
% per i cross-spettri si calcola il modulo e la fase
240 for i=1:N_spettri S_xy_mod(i,:)=abs(S_xy(i,:)); S_xy_fase(i,:)=angle(S_xy(i,:))*180/pi; % [deg] S_yx_mod(i,:)=abs(S_yx(i,:)); S_yx_fase(i,:)=angle(S_yx(i,:))*180/pi; % [deg] end; size(S_yx_mod) size(S_yx_fase)
% calcolo della funzione di coerenza
gamma2_xy=[]; gamma2_yx=[]; for i=1:N_spettri gamma2_xy(i,:)=(S_xy_mod(i,:).*S_xy_mod(i,:))./(S_xx(i,:).*S_yy(i,:)); gamma2_yx(i,:)=(S_yx_mod(i,:).*S_yx_mod(i,:))./(S_xx(i,:).*S_yy(i,:)); end; % DATI IN USCITA T dt f_Nyq e_random_norm=1/(N_av_spec^0.5) N L T_L % GRAFICI size(sigma_spettri) size(freq_vett) size(S_xx) size(S_xx(10,1:(N+L)/2)) sigma_ref=1; figure('Name','Waterfall Sxx') clf; hold on;
241 grid on; for i=1:N_spettri sig_vett=sigma_spettri(i)*ones(1,((N+L)/2)); plot3(sig_vett./sigma_ref,freq_vett(1:(N+L)/2),S_xx(i,1:(N+L)/2)); end; xlabel('\sigma/\sigma_r_e_f'); ylabel('Frequency [Hz]'); zlabel('Amplitude S_x_x [Pa^2 s]'); title('Waterfall plot \phi=0.053');
---
% filtraggio passaggio pale per waterfall
for pippo=50:50:499 % eliminazione frequenze passaggio pale wo = pippo/500; bw = 0.006; % 0.006
[b,a] = iirnotch(wo,bw);
for ww=1:(N_spettri*N_av_spec)
x_L(:,ww)=filtfilt(b,a,x_L(:,ww)); % vettore di lunghezza N+L end
end
% calcolo DFT delle serie {x(r)} e {y(r)} dei singoli subrecord
X_DFT_filtrato=[];
for qq=1:(N_spettri*N_av_spec) X_1_filtrato=x_L(:,qq).';
X_DFT_filtrato(qq,:)=fft(X_1_filtrato); end;
% calcolo coefficienti {S(k)} degli autospettri e cross_spettri dei singoli subrecord
S_xx_mat_filtrato=[];
for rr=1:(N_spettri*N_av_spec)
S_xx_mat_filtrato(rr,:)=conj(X_DFT_filtrato(rr,:)).*X_DFT_filtrato(rr,:); end;
242 Sxx_mat_filtrato=[]; S_xx_filtrato=[]; s=0; for pp=1:N_spettri s=(pp-1)*N_av_spec+1; Sxx_mat_filtrato=S_xx_mat_filtrato(s:(s+N_av_spec-1),:); S_xx_filtrato(pp,:)=(dt/(N*N_av_spec))*sum(Sxx_mat_filtrato); end; --- figure('Name','Waterfall Sxx (filtered)') clf; hold on; grid on; for i=1:N_spettri sig_vett=sigma_spettri(i)*ones(1,((N+L)/2)); plot3(sig_vett./sigma_ref,freq_vett(1:(N+L)/2),S_xx_filtrato(i,1:(N+L)/2)); end; xlabel('\sigma/\sigma_r_e_f'); ylabel('Frequency [Hz]'); zlabel('Amplitude S_x_x [Pa^2 s]');
title('Waterfall plot \phi=0.053 (filtered)'); figure('Name','Amplitude/Phase Sxy') clf; subplot(211); hold on; grid on; for i=1:N_spettri sig_vett=sigma_spettri(i)*ones(1,((N+L)/2)); plot3(sig_vett./sigma_ref,freq_vett(1:(N+L)/2),S_xy_mod(i,1:(N+L)/2)); end; xlabel('\sigma/\sigma_r_e_f'); ylabel('Frequency [Hz]');
zlabel('Amplitude S_x_y [Pa^2 s]'); subplot(212);
hold on; grid on;
243 sig_vett=sigma_spettri(i)*ones(1,((N+L)/2)); plot3(sig_vett./sigma_ref,freq_vett(1:(N+L)/2),S_xy_fase(i,1:(N+L)/2)); end; xlabel('\sigma/\sigma_r_e_f'); ylabel('Frequency [Hz]'); zlabel('Phase [deg]'); figure('Name','Amplitude Sxy') clf; hold on; grid on; for i=1:N_spettri sig_vett=sigma_spettri(i)*ones(1,((N+L)/2)); plot3(sig_vett./sigma_ref,freq_vett(1:(N+L)/2),S_xy_mod(i,1:(N+L)/2)); end; xlabel('\sigma/\sigma_r_e_f'); ylabel('Frequency [Hz]');
zlabel('Amplitude S_x_y [Pa^2 s]'); figure('Name','Phase Sxy') clf; hold on; grid on; for i=1:N_spettri sig_vett=sigma_spettri(i)*ones(1,((N+L)/2)); plot3(sig_vett./sigma_ref,freq_vett(1:(N+L)/2),S_xy_fase(i,1:(N+L)/2)); end; xlabel('\sigma/\sigma_r_e_f'); ylabel('Frequency [Hz]'); zlabel('Phase[deg]'); figure('Name','Amplitude/Phase Syx') clf; subplot(211); hold on; grid on; for i=1:N_spettri sig_vett=sigma_spettri(i)*ones(1,((N+L)/2)); plot3(sig_vett./sigma_ref,freq_vett(1:(N+L)/2),S_yx_mod(i,1:(N+L)/2)); end; xlabel('\sigma/\sigma_r_e_f');
244 ylabel('Frequency [Hz]');
zlabel('Amplitude S_y_x [Pa^2 s]'); subplot(212); hold on; grid on; for i=1:N_spettri sig_vett=sigma_spettri(i)*ones(1,((N+L)/2)); plot3(sig_vett./sigma_ref,freq_vett(1:(N+L)/2),S_yx_fase(i,1:(N+L)/2)); end; xlabel('\sigma/\sigma_r_e_f'); ylabel('Frequency [Hz]'); zlabel('Phase [deg]') figure('Name','Waterfall Syy') clf; hold on; grid on; for i=1:N_spettri sig_vett=sigma_spettri(i)*ones(1,((N+L)/2)); plot3(sig_vett./sigma_ref,freq_vett(1:(N+L)/2),S_yy(i,1:(N+L)/2)); end; xlabel('\sigma/\sigma_r_e_f'); ylabel('Frequency [Hz]');
zlabel('Amplitude S_y_y [Pa^2 s]'); figure('Name','Coherence Sxy Syx') clf; subplot(211); hold on; grid on; for i=1:N_spettri sig_vett=sigma_spettri(i)*ones(1,((N+L)/2)); plot3(sig_vett./sigma_ref,freq_vett(1:(N+L)/2),gamma2_xy(i,1:(N+L)/2)); hold on; grid on; end; xlabel('\sigma/\sigma_r_e_f'); ylabel('Frequency [Hz]'); zlabel('Coherence_x_y'); subplot(212); hold on;
245 grid on; for i=1:N_spettri sig_vett=sigma_spettri(i)*ones(1,((N+L)/2)); plot3(sig_vett./sigma_ref,freq_vett(1:(N+L)/2),gamma2_yx(i,1:(N+L)/2)); hold on; grid on; end; xlabel('\sigma/\sigma_r_e_f'); ylabel('Frequency [Hz]'); zlabel('Coherence_y_x'); flag=1; while flag==1 per=input('inserisci % sigma') a=length(sigma_spettri); zz=ceil(a*per/100); sigma=sigma_spettri(zz) freque=input('frequenza studiata(Hz)'); a1=freque-120; if a1<0 a1=0 end a2=freque+120; if a2>f_Nyq a2=f_Nyq; end
figure('Name','Amplitude Sxx - Amplitude Sxy - Phase Sxy - Coherence Sxy') plot(freq_vett(1:(N+L)/2),S_xx(zz,1:(N+L)/2)./(5*10^2)); hold on plot(freq_vett(1:(N+L)/2),S_xy_mod(zz,1:(N+L)/2)./(5*10^2),'c'); plot(freq_vett(1:(N+L)/2),S_xy_fase(zz,1:(N+L)/2),'r'); plot(freq_vett(1:(N+L)/2),gamma2_xy(zz,1:(N+L)/2).*100,'g') axis([a1 a2 -200 200]) grid xlabel('Frequency [Hz]') for ss=1:(N+L)/2 if abs((freque-freq_vett(ss)))<((1/T_L)+0.00001*(1/T_L)) frequenza=freque fasee=S_xy_fase(zz,ss)
246 gammaa=gamma2_xy(zz,ss) break end end plot(frequenza,fasee,'or')
figure('Name','Amplitude Sxx - Phase Sxy - Coherence Sxy') subplot(3,1,1);
plot(freq_vett(1:(N+L)/2),S_xx(zz,1:(N+L)/2)); hold on
line([frequenza frequenza],[0 10000000000],'color',[0 0 0],'LineWidth',1.5); xlabel('Frequency [Hz]') ylabel('S_x_x [Pa^2/s]'); grid on mmm=max(S_xx(zz,1:(N+L)/2)); axis([a1 a2 0 400000]) subplot(3,1,2) plot(freq_vett(1:(N+L)/2),S_xy_fase(zz,1:(N+L)/2),'r'); hold on
line([frequenza frequenza],[-200 200],'color',[0 0 0],'LineWidth',1.5); xlabel('Frequency [Hz]') ylabel('Phase [deg]') grid on axis([a1 a2 -180 180]) subplot(3,1,3) plot(freq_vett(1:(N+L)/2),gamma2_xy(zz,1:(N+L)/2),'g') hold on
line([frequenza frequenza],[0 2],'color',[0 0 0],'LineWidth',1.5); xlabel('Frequency [Hz]')
ylabel('Coherence') grid on
axis([a1 a2 0 1])
flag=input('1 per continuare') end