El Nino - Ing. Stefano Guerra

Transcript

El Nino - Ing. Stefano Guerra
El Nino
1. DESCRIZIONE DEL PROBLEMA "El Nino"
Fare l’analisi del fenomeno climatologico El Nino, dovuto ai cambiamenti di pressione nell’Oceano Pacifico. So uthern Oscillation Index = differenza di pressione atmosferica tra l’Isola di Pasqua e Darwin(Australia) misurata a
livello del mare. Nel file elnino.mat (load –ASCII elnino.mat) vi sono tali valori, misurati ogni mese per 14 anni.
Effettuare il grafico del fenomeno, ed il periodogramma. Determinare i due picchi di massima potenza ed il corrispondente indice e periodo.
2. DESCRIZIONE DELL’ALGORITMO
Si è sviluppato uno script per poter leggere il file elnino.mat per poi visualizzare l’output richiesto.
Lo Script è:
•
elnino.m
2.1 function "elnino.m "
La function simula la trasmissione di un segnale su di un canale rumoroso.
clear all;
clc;
load -ascii elnino.mat;
data = elnino ;
t = 1:length(data);
Y = fft(data, length( data));
Y(1) = 0;
N = length(Y);
Fs = 1;
freq = (0:N/2)*1/N;
P = Y.*conj(Y)/N;
% caricamento dal file di dati
% orizzonte dei tempi
% dft dei dati
% eliminazione della componente continua
% numero campioni
% frequenza fondamentale
% orizzonte delle frequenze
% periodogramma
% Indice e valore delle due componenti a potenza massima
[picchi, ind] = sort(P(2:N/2+1), 'descend');
p1 = picchi(1);
p2 = picchi(2);
fr1 = freq(ind(1)+1);
fr2 = freq(ind(2)+1);
T1 = 1/fr1;
T2 = 1/fr2;
% menu del programma
i = -1 ;
while (i ~= 0)
clc;
disp('### EL NINO ###');
disp(sprintf('\nMENU\n----\n'));
disp('[1] Grafico Dati');
disp('[2] Spettro Dati');
Guer r a Stefano
Pagina 2
El Nino
disp('[3] Periodogramma');
disp('[4] Grafici in una Finestra');
disp('[5] Indici Fenomeno');
disp('[0] Esci');
i = input('');
i = cast(i, 'uint8');
switch(i)
case 0
clc;
case 1
figure(1)
subplot(1,1,1)
plot(t, data, 'r.', t, data); xlabel('Mesi');
title('Southern Oscillation Index');
case 2
figure(1)
subplot(1,1,1)
stem(freq(2:N/2+1), abs(Y(2:N/2+1)));
title('Grafico dello spettro');
xlabel('frequenze [Hz]');
ylabel('|Y(f)|');
grid on;
case 3
figure(1)
subplot(1,1,1)
stem(freq(2:N/2+1), P(2:N/2+1));
title('Periodogramma');
xlabel('cicli/mesi');
ylabel('potenza');
grid on;
case 4
figure(1)
subplot(3,1,1)
plot(t, data, 'r.', t, data); xlabel('Mesi');
title('Southern Oscillation Index');
subplot(3,1,2)
stem(freq(2:N/2+1), abs(Y(2:N/2+1)));
title('Grafico dello spettro');
xlabel('frequenze [Hz]');
ylabel('|Y(f)|');
grid on;
subplot(3,1,3)
stem(freq(2:N/2+1), P(2:N/2+1));
title('Periodogramma');
xlabel('cicli/mesi');
ylabel('potenza');
grid on;
case 5
clc;
disp('### EL NINO ###');
% Stampa sullo standard output dei risultati
Risultato = fprintf('\n\t\t\t\t\tIndice\tPotenza\t\tFrequenza\tPeriodo\n');
fprintf(1, 'Picco massimo\t\t%d\t\t%6.5f\t%6.5f\t\t%6.5f\n',ind(1), p1, fr1, T1);
fprintf(1, 'Picco successivo\t%d\t\t%6.5f\t%6.5f\t\t%6.5f\n',ind(2), p2, fr2, T2);
j = input('Per tornare al menu permere un tasto qualsiasi: ');
otherwise
j = input('Selezione non valida. Per tornare al menu premere un tasto qualsiasi: ');
end
clc;
end
Guer r a Stefano
Pagina 3
El Nino
Lo script realizza un menù interattivo che propone varie visualizzazioni dei dati restituendo all’ occorrenza:
[1] Grafico Dati
[2] Spettro Dati
[3] Periodogramma
[4] Grafici in una Finestra
[5] Indici Fenomeno
[0] Esci
3. ECCEZIONI PREVISTE
Non sono state previste eccezioni.
4. ESEMPI D’USO
Il menù interattivo si presenta così:
4.1 Grafico Dati
Guer r a Stefano
Pagina 4
El Nino
4.2 Spettro Dati
4.3 Periodogramma
Guer r a Stefano
Pagina 5
El Nino
4.4 Tutti i precedenti Grafici in una sola finestra
4.5 Indici del fenomeno: (potenza massima)
Guer r a Stefano
Pagina 6
El Nino
Guer r a Stefano
Pagina 7