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