Appendice 1
Listato della funzione irregolarità.m
function[ ]=irregolarità() load g6820ma1.txt load g6820ma2.txt; ... ... load g6820ma50.txt; pressione1=g6820ma1(:,2); [pmax(1),Ind(1)]=max(pressione1); pressione2=g6820ma2(:,2); [pmax(2),Ind(2)]=max(pressione2); ……… ……… pressione50=g6820ma50(:,2); [pmax(50),Ind(50)]=max(pressione50); pmaxmax=max(pmax); pmaxmin=min(pmax); pmaxmean=mean(pmax); risultatip = [pmaxmax,pmaxmean,pmaxmin]; disp(' '); disp(' ');
disp(' Pmax_max Pmax_mean Pmax_min'); disp(risultatip); somma=0; for i = 1:50 scartoq=(pmax(i)-pmaxmean)*(pmax(i)-pmaxmean); somma=somma+scartoq; end sigma=sqrt(somma/50); COV=sigma/pmaxmean*100; Statp=[sigma,COV];
disp(' Sigma_Pmax COV_Pmax'); disp(Statp); lambda1=g6820ma1(:,3); lambda(1)=mean(lambda1); lambda2=g6820ma2(:,3); lambda(2)=mean(lambda2); ………. ………. lambda50=g6820ma50(:,3); lambda(50)=mean(lambda50); lambda50=mean(lambda);
disp(' Lambda medio'); disp(lambda50); angolo1=g6820ma1(:,1); angolo2=g6820ma2(:,1); ……… ……… angolo50=g6820ma50(:,1); Imep(1)=imep(angolo1,pressione1); Imep(2)=imep(angolo2,pressione2); ………. ………. Imep(50)=imep(angolo50,pressione50); imepmax=max(Imep); imepmean=mean(Imep); imepmin=min(Imep); Risultati_im=[imepmax,imepmean,imepmin]; disp(' Imep_max Imep_mean Imep_min'); disp(Risultati_im);
somma=0; for i = 1:50
somma=somma+scartoq; end
sigma_i=sqrt(somma/50); COV_i=sigma_i/imepmean*100; stat_i=[sigma_i,COV_i]; disp(' Sigma_i COV_i') disp(stat_i); AngPmax(1)=angolo1(Ind(1)); AngPmax(2)=angolo2(Ind(2)); ………. ………. AngPmax(50)=angolo50(Ind(50)); AngPmaxmean=mean(AngPmax); AngPmaxmax=max(AngPmax); AngPmaxmin=min(AngPmax); Risultati_a=[AngPmaxmax,AngPmaxmean,AngPmaxmin]; disp(' An_max_Pmax An_mean_Pmax An_min_Pmax'); disp(Risultati_a); somma=0; for i = 1:50 scartoqang=(AngPmax(i)-AngPmaxmean)*(AngPmax(i)-AngPmaxmean); somma=somma+scartoqang; end sigma_a=sqrt(somma/50); COV_a=sigma_a/AngPmaxmean*100; stat_a=[sigma_a,COV_a];
disp(' Sigma_a COV_a') disp(stat_a);
Listato della funzione imep.m
function[imep]=imep(angolo,pressione) % Dati motore alesaggio=71; lman=49.33/2; lbiel=88.70; lam=lman/lbiel;
%Fine dati motore
angolorad=angolo*pi/180;
s=lman*(1+lam/4-cos(angolorad)-lam/4*cos(2*angolorad));
% Calcolo del lavoro indicato
Li=0;
for i = 2:3600,
dV(i)=pi*(alesaggio^2)/4*(s(i)-s(i-1));
Li=Li+pressione(i-1)*dV(i)+(pressione(i)-pressione(i-1))*dV(i)/2; end
% Fine calcolo del lavoro indicato
Appendice 2
Listato di analisi_30.m
function[] = analisi(ciclo,velo,getto)
%Calcola la durata dell'acquisizione e il vettore angolo T=60/velo*2;
angolo=ciclo(:,1);
%Calcola il numero di campioni acquisiti N_camp=length(angolo);
%Calcola la frequenza di campionamento e quella di Nyquist freq_camp=N_camp/T;
freq_nyq=freq_camp/2;
%Estrazione dati dall'array multidimensionale ciclo detonazione=ciclo(:,4);
lambda=ciclo(:,3); pressione=ciclo(:,2);
%Calcolo grandezze di riferimento nel ciclo lambdamedio=mean(lambda)
[pmax,indice_pmax]=max(pressione); pmax
angolo_del_picco_di_pressione=angolo (indice_pmax)
[b,a] = butter(4,[6000/freq_nyq, 10000/freq_nyq]);%filtro passabanda di butterworth M è l'ordine, poi la frequenza di filtraggio/freq di nyquist
%[b,a] = butter (8, 8000/freq_nyq); detonazione=filter(b,a,detonazione); [c,d] = butter (9, 10000/freq_nyq); %pressione = filter (b,a,pressione); %Andamento delle grandezze rilevate figure(1); [Ax]=plotyy(angolo,pressione,angolo,detonazione); grid on; xlabel('Angolo [°]'); set(get(Ax(1),'Ylabel'),'String','Pressione [bar]') set(get(Ax(2),'Ylabel'),'String','Vibrazione [V]')
title(['Ciclo rilevato a ',int2str(velo),' giri e per lambda = ',num2str(lambdamedio), ' con getto = ', int2str(getto),'micron; Pmax= ', int2str(pmax),' bar ']);
%Fine
risposta=input('Si desidera limitare l''analisi della detonazione ai 120° successivi alla scintilla?(1/0) ');
if risposta==1
%Analisi in frequenza detonazione filtrata in fase %Filtro in fase (120° è un sesto di 720°)
N_fil=N_camp/6; down_fase=1; while angolo(down_fase)<(-30), down_fase=down_fase+1; end %Filtro in fase detonazione=detonazione(down_fase:(down_fase+(N_fil-1))); %Fine filtro in fase
%Analisi in frequenza del sensore di detonazione f_det=fft(detonazione);
N=length(f_det);
f_det_n=f_det(1:N_fil/2+1); a_f_det=abs(f_det_n);
i=(0:1:N_fil/2); k_freq=i*(6/T)/1000;
%Fine analisi in frequenza detonazione
%Analisi in frequenza pressione %pressione = filter (b,a,pressione);
pressione=pressione(down_fase:(down_fase+(N_fil-1))); f_pre=fft(pressione);
Np=length(f_pre);
f_pre2=f_pre(1:Np/2+1); a_f_pre=abs(f_pre2);
%Fine analisi in frequenza pressione
%Non visualizziamo le frequenze al di fuori del range di funzionamento del sensore
down=1; while k_freq(down)<1, down=down+1; end up=length(k_freq); while k_freq(up)>15, up=up-1; end
%Fine filtraggio sensore
%Grafico della risposta in ampiezza del sensore di detonazione figure(2);
plot(k_freq(down:up),a_f_det(down:up));
%Grafico di confronto dei due spettri figure(3);
subplot(2,1,1);
plot(k_freq(down:up),a_f_det(down:up)); xlabel('f [kHz]');
ylabel('Ampiezza');
title('Risposta in frequenza sensore di detonazione'); subplot(2,1,2);
plot(k_freq(down:up),a_f_pre(down:up),'g'); xlabel('f [kHz]');
ylabel('Ampiezza');
title('Risposta in frequenza sensore di pressione'); angolo=angolo(down_fase:(down_fase+(N_fil-1)));
% Grafico nel dominio del tempo dei due segnali filtrati in frequenza e % fase figure(4); [Ax]=plotyy(angolo,pressione,angolo,detonazione); grid on; xlabel('Angolo [°]'); set(get(Ax(1),'Ylabel'),'String','Pressione [bar]') set(get(Ax(2),'Ylabel'),'String','Vibrazione [V]')
title(['Ciclo rilevato a ',int2str(velo),' giri e per lambda = ',num2str(lambdamedio), ' con getto = ', int2str(getto),'micron; Pmax= ', int2str(pmax),' bar ']);
[detmax,indice_detmax]=max(detonazione); detmax
angolo_picco_detonazione=angolo (indice_detmax)
% Densità spettrale del sensore di detonazione e suo confronto con lo
% spettro del segnale medesimo %h=length(f_det);
%Pyy = f_det .*conj(f_det)/h; %Pyy(N_fil/2+2:N_fil) = [] ; %Pyy(2:N_fil/2+1) = 2*Pyy(2:N_fil/2+1); %figure(4) %plot(k_freq(down:up),Pyy(down:up),k_freq(down:up),a_f_det(down:up)); else
%Analisi in frequenza detonazione f_det=fft(detonazione); N=length(f_det); f_det2=f_det(1:N/2+1); a_f_det=abs(f_det2); i=(0:1:N/2); k_freq=i*(1/T)/1000;
%Fine analisi in frequenza detonazione %Analisi in frequenza pressione
f_pre=fft(pressione); Np=length(f_pre);
f_pre2=f_pre(1:Np/2+1); a_f_pre=abs(f_pre2);
%Fine analisi in frequenza pressione figure(2);
plot(k_freq,a_f_det); xlabel('f [kHz]'); ylabel('Ampiezza');
title('Risposta in frequenza');
%Il range scelto elimina le frequenze al di fuori della caratteristica del sensore
down=1; while k_freq(down)<5, down=down+1; end up=length(k_freq); while k_freq(up)>22 up=up-1; end
%Fine filtraggio sensore figure(3);
subplot(2,1,1);
plot(k_freq(down:up),a_f_det(down:up)); xlabel('f [kHz]');
ylabel('Ampiezza');
title('Risposta in frequenza sensore di detonazione'); subplot(2,1,2);
plot(k_freq(down:up),a_f_pre(down:up),'g'); xlabel('f [kHz]');
ylabel('Ampiezza');
title('Risposta in frequenza sensore di pressione'); end