Sei sulla pagina 1di 83

Esercitazioni con MATLAB per il corso di TRATTAMENTO DEI SEGNALI Laurea Magistrale in Fisica

Dott. Silvia Maria Alessio - Dipartimento di Fisica Universit` di Torino - Anno Accademico 2011/2012 a 18 aprile 2012

Introduzione
In questo documento sono raccolte le esercitazioni che accompagnano il corso di Trattamento dei segnali. Esse si dividono in esercitazioni guidate, intese per essere svolte in classe sotto la diretta supervisione della docente, ed esercitazioni libere, che lo studente svolger` per proprio conto secondo le indicazioni fora nite. In seguito preparer` una breve relazione sui risultati ottenuti, da portare a allesame.

ii

Indice

Introduzione 1 Esercitazioni guidate 1.1 Un primo approccio a MATLAB . . . . . . . . . . . . . . . . . . 1.1.1 1.1.2 1.1.3 1.1.4 1.2 Premessa . . . . . . . . . . . . . . . . . . . . . . . . . . . Generalit` su MATLAB . . . . . . . . . . . . . . . . . . . a Lambiente di lavoro MATLAB . . . . . . . . . . . . . . . Generazione di dati sintetici . . . . . . . . . . . . . . . . .

ii 4 4 4 5 7 20 23 23 24 25 26 28 29 30 30 34 35

Trasformata discreta di Fourier . . . . . . . . . . . . . . . . . . . 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.2.6 Premessa . . . . . . . . . . . . . . . . . . . . . . . . . . . DFT e spettro di ampiezza: caratteristiche . . . . . . . . La function t di MATLAB . . . . . . . . . . . . . . . . . Prove con dati sintetici . . . . . . . . . . . . . . . . . . . Prova coi dati di pressione . . . . . . . . . . . . . . . . . . Aliasing . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.3

Filtraggio nel dominio del tempo . . . . . . . . . . . . . . . . . . 1.3.1 1.3.2 1.3.3 Premessa . . . . . . . . . . . . . . . . . . . . . . . . . . . Filtraggio via equazione alle dierenze . . . . . . . . . . . Filtraggio mediante convoluzione lineare . . . . . . . . . . 1

2 1.3.4 1.3.5 1.3.6 1.4

INDICE Filtraggio nel dominio della frequenza . . . . . . . . . . . Filtraggio a fase nulla . . . . . . . . . . . . . . . . . . . . Filtraggio con decimazione . . . . . . . . . . . . . . . . . 36 37 37 40 40 41 43 43 44 44 45 46 48 48 48 49 59 61 61 61 62 63 63 65 65

Caratteristiche di un ltro numerico . . . . . . . . . . . . . . . . 1.4.1 1.4.2 1.4.3 1.4.4 Premessa . . . . . . . . . . . . . . . . . . . . . . . . . . . Risposta in frequenza . . . . . . . . . . . . . . . . . . . . Risposta allimpulso . . . . . . . . . . . . . . . . . . . . . Deconvoluzione . . . . . . . . . . . . . . . . . . . . . . . .

1.5

Progetto di ltri FIR equiripple . . . . . . . . . . . . . . . . . . . 1.5.1 1.5.2 1.5.3 1.5.4 Premessa . . . . . . . . . . . . . . . . . . . . . . . . . . . Procedura di progetto: un passa-banda . . . . . . . . . . Stima dellordine minimo . . . . . . . . . . . . . . . . . . Progetto di ltri passa-basso e passa-alto . . . . . . . . .

1.6

Metodi di stima dello spettro di potenza . . . . . . . . . . . . . . 1.6.1 1.6.2 1.6.3 Premessa . . . . . . . . . . . . . . . . . . . . . . . . . . . Metodi non-parametrici . . . . . . . . . . . . . . . . . . . Metodi parametrici . . . . . . . . . . . . . . . . . . . . . .

2 Esercitazioni libere 2.1 Analisi di una serie temporale . . . . . . . . . . . . . . . . . . . . 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 Premessa . . . . . . . . . . . . . . . . . . . . . . . . . . . Analisi statistica elementare . . . . . . . . . . . . . . . . . Autocorrelazione . . . . . . . . . . . . . . . . . . . . . . . Spettro di potenza . . . . . . . . . . . . . . . . . . . . . . Signicativit` dei picchi . . . . . . . . . . . . . . . . . . . a Whitening . . . . . . . . . . . . . . . . . . . . . . . . . . .

INDICE 2.1.7 2.1.8 2.2 Rumore rosso . . . . . . . . . . . . . . . . . . . . . . . . . Stazionariet` . . . . . . . . . . . . . . . . . . . . . . . . . a

3 66 67 68 68 69 73 77 78 79 80

Analisi spettrale evolutiva: la CWT . . . . . . . . . . . . . . . . 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.2.7 Premessa . . . . . . . . . . . . . . . . . . . . . . . . . . . Le function . . . . . . . . . . . . . . . . . . . . . . . . . . Il programma . . . . . . . . . . . . . . . . . . . . . . . . . Interpretazione dello scalogramma . . . . . . . . . . . . . Prove con wavelets diverse . . . . . . . . . . . . . . . . . . Spettro globale di wavelet . . . . . . . . . . . . . . . . . . Scelta delle scale . . . . . . . . . . . . . . . . . . . . . . .

Capitolo 1

Esercitazioni guidate
1.1
1.1.1

Un primo approccio a MATLAB


Premessa

Lo scopo dellesercitazione ` quello di imparare ad usare MATLAB 1 ad un e livello di base, utilizzando questo breve testo per provare al computer alcune operazioni elementari, seguendo passo per passo le istruzioni date.

Attenzione: il testo che segue ` volto esclusivamente a fornire agli studenti e del corso di Trattamento dei Segnali le nozioni indispensabili per eseguire le esercitazioni. Non va pertanto considerato una introduzione a MATLAB con caratteristiche di generalit` e completezza. a

Nella prossima sottosezione viene data unidea generale della struttura di MATLAB e delle parti che lo compongono; nel terzo si accede a MATLAB, si introducono al suo interno alcune variabili e si impara a maneggiarle e a gracarle in modo semplice. Segue una sottosezione in cui si parla di generazione di segnali sintetici (cio` dati simulati matematicamente, non frutto di vere mie sure). Nellelaborazione numerica dei segnali si presenta spesso la necessit` di a generare tali segnali, per utilizzarli al ne di testare algoritmi e sistemi. poich, come si vedr`, dati possono essere importati in ambiente MATLAB e poi e a esportati, si consiglia di creare nella propria area di lavoro una directory o cartella apposita, in cui poi risiederanno tutti i les relativi agli scambi tra MATLAB e lambiente di lavoro esterno (les da importare e les esportati). Durante le esercitazioni si useranno alcuni les (contenenti set di dati, ltri numerici e pro1 Ci

si riferisce alla versione 7.8.0, R2009a di MATLAB.

1.1. UN PRIMO APPROCCIO A MATLAB

grammi) che lo studente dovr` copiare nella propria area di lavoro, prelevandoli a dalla pagina web del Corso su Campusnet (http://sica.campusnet.unito.it) 2 .

1.1.2

Generalit` su MATLAB a

MATLAB ` un sistema software interattivo per e calcolo, visualizzazione e graca, analisi ed elaborazione di dati, simulazione e modellazione, programmazione in un proprio linguaggio. Lelemento di base ` una matrice che non richiede dimensionamento: MATLAB e sta in eetti per Matrix Laboratory ed in esso tutte le variabili sono matrici. Il sistema software MATLAB ` costituito da un pacchetto fondamentale (MAe TLAB Toolbox), pi` numerosi Toolboxes per applicazioni speciche: ad esempio u elaborazione numerica dei segnali, wavelets, statistica, ecc... Il pacchetto-base include cinque parti principali. 1. Lambiente di lavoro MATLAB (Development Environment): set di strumenti che consentono di usare les e function di MATLAB (le function sono programmi che implementano i vari algoritmi; si veda pi` avanu ti). Tramite tali strumenti si manipolano, nel cosiddetto workspace di MATLAB, che ospita linsieme delle variabili denite in un dato istante di una sessione di lavoro, le variabili stesse; si importano ed esportano dati nel e dal workspace, ecc... Il desktop di MATLAB include la Command Window (nestra dove, al prompt di MATLAB, si possono digitare direttamente i comandi); unaltra nestra col diario dei comandi dati in precedenza (Command History); un elenco dei componenti installati 3 ; browser per accedere allhelp, per elencare le variabili contenute nel workspace, i les presenti nelle directories/cartelle... Oltre a lavorare da linea comandi, lutente pu` accedere a o vari strumenti specialistici (Tools, come ad es. sptool relativo al Toolbox di Signal Processing) che si presentano come Graphical User Interfaces (GUIs) 4 .
2 Il lettore che non disponga delle credenziali necessarie pu` richiedere il materiale o allautrice, tramite e-mail allindirizzo alessioph.unito.it. 3 I Toolboxes specialistici si acquistano separatamente dal pacchetto di base. 4 In queste esercitazioni si lavorer` prevalentemente da linea comandi e/o tramite semplici a programmi: si ` ritenuto pi` istruttivo per lo studente accedere cos` piuttosto che dalle GUIs, e u , ai vari algoritmi. Tuttavia le GUIs sono molto comode e lo studente ` caldamente incoraggiato e ad esplorarle.

CAPITOLO 1. ESERCITAZIONI GUIDATE 2. La libreria di funzioni matematiche (function): algoritmi di calcolo che vanno dalle funzioni elementari, come seno e coseno, a funzioni pi` u complicate, come ricerca degli autovalori di una matrice o FFT. Le function sono insiemi di istruzioni, cio` programmi in linguaggio MAe TLAB, indicati come M-les perch caratterizzati da una estensione .m. e Ogni Toolbox non ` nientaltro che una raccolta di M-les. Tra le categorie e di M-les disponibili nel pacchetto-base citiamo: matrici e loro manipolazione;

funzioni matematiche elementari; analisi dati e FFT;

funzioni matematiche specialistiche; interpolazione, polinomi;

soluzione di equazioni dierenziali, ecc... Gli M-les corrispondenti a funzioni relative ad un certo argomento si trovano raggruppate in una singola directory/cartella di MATLAB; per esempio, funzioni della libreria matematica si trovano in elmat manipolazione elementare di matrici, funzioni matematiche elementari,

datafun analisi dati e FFT,

elfun

polyfun interpolazione e polinomi.

3. Il sistema graco (Handle Graphics): comprende comandi high level, per visualizzare dati in due e tre dimensioni (e altro, p.es. animazioni) e comandi low level per personalizzare i graci ottenuti. Esiste anche la possibilit` di costruire GUIs (Graphical User Interfaces), con menu per a gestire le applicazioni personali, sviluppate dallutente usando il linguaggio di programmazione MATLAB. 4. Il linguaggio di programmazione MATLAB, che serve allutente per sviluppare i propri algoritmi di calcolo, i quali vengono posti in nuovi M-les (script e function). Le espressioni matematiche coinvolgono intere matrici, per cui si ha una grande concisione nel linguaggio, con conseguente rapidit` di programmazione. a Uno script le ` un M-le contenente una sequenza di istruzioni in line guaggio MATLAB. Supponiamo di aver creato, con un editor qualsiasi o con quello disponibile in MATLAB (v. descrizione del desktop nella prossima sottosezione), un nuovo M-le detto nuovo.m. Dando il comando >>nuovo le istruzioni verranno eseguite; si tratta dunque dellanalogo di una subroutine del Fortran. Un function le ` anchesso un M-le, salvo che in testa ha una denition e line in cui vengono deniti esplicitamente linput e loutput: per esempio function h = circle(x,y,r) %CIRCLE=function to draw a circle of radius r centered in x,y

1.1. UN PRIMO APPROCCIO A MATLAB %Call syntax: circle(x,y,r); %Input: (x,y) = center coordinates; r = radius %Output: none th = 0:pi/50:2*pi; xunit = r * cos(th) + x; yunit = r * sin(th) + y; h = plot(xunit, yunit); ` E quindi analogo ad una function Fortran.

5. La Application Program Interface (API): una libreria che consente di scrivere programmi in FORTRAN e C che interagiscono in vari modi con MATLAB. Le modalit` duso di MATLAB pi` complicate non verranno prese in considea u razione in queste pagine. Infatti per potere svolgere le esercitazioni gli studenti hanno soltanto bisogno di sapere: come introdurre dati nel workspace e come estrarli; come maneggiare le variabili nel workspace, anche mediante semplici espressioni matematiche che le contengano; tali espressioni spesso includeranno function di MATLAB; come produrre e stampare semplici graci bidimensionali, con assi dalle caratteristiche a piacere, delle label per gli assi stessi ed eventualmente un titolo; come scrivere e far girare semplici programmi che svolgano i compiti elencati ai punti precedenti. Pertanto nel seguito parleremo esclusivamente di quanto concerne queste operazioni di base.

1.1.3

Lambiente di lavoro MATLAB

Questa sottosezione descrive come maneggiare le variabili nel workspace e come importare ed esportare dati. 1. Per entrare in MATLAB battere al prompt del sistema 5 : matlab Appare il desktop di MATLAB, che presenta, nelle condizioni di default :
5 Dora

in poi, si consiglia di dare eettivamente i comandi citati!

CAPITOLO 1. ESERCITAZIONI GUIDATE in alto, la barra coi vari menu (File, Edit, ..., Desktop, Window, Help), il pulsante per invocare lhelp (?), leditor per M-les (icona col foglio bianco), la nestra per vedere o cambiare la directory/cartella corrente ecc... al centro, la Command Window col prompt (>>); a sinistra, lelenco dei les contenuti nella Current Directory; a destra in alto, il contenuto del workspace; a destra in basso, la Command History (storia dei comandi dati, anche nelle sessioni precedenti). Le varie nestre si possono chiudere per far pi` posto ad altre; per variare u laspetto del desktop andare su: Desktop/Desktop Layout. Nella Command Window si danno i comandi, si fanno girare gli M-les 6 , si inseriscono dati... Alcuni comandi utili: >>type nome_file mostra le istruzioni in linguaggio MATLAB contenute nel M-le il cui nome ` specicato nella stringa nome_file. Il comando non funziona per le e funzioni built-in di MATLAB, funzioni di base come seno, coseno, t ecc... >>what matlab/elfun elenca i les contiene una data directory/cartella di MATLAB (nellesempio, quella delle funzioni matematiche elementari). Inoltre funzionano sia il comando Unix ls, sia lanalogo MATLAB, che ` dir. e In ogni istante della sessione di lavoro si pu` accedere alla documentao zione su Web e allhelp per vedere quali funzioni sono disponibili e come utilizzarle. Esiste, come si ` detto, un apposito browser per lhelp; qui e facciamo solo alcuni esempi da linea comandi: >>helpbrowser richiama il browser dellhelp; >>help nome_function d` sintassi e comportamento della funzione il cui nome ` dato nella stringa a e nome_function; analogamente, >>help nome_comando d` informazioni sul comando stesso; a >>doc nome_function apre la pagina della documentazione relativa alla funzione il cui nome ` e dato nella stringa nome_function; analogamente, >>doc nome_comando apre la pagina del comando stesso; >>help elfun elenca e descrive brevemente le funzioni in una particolare directory/cartella,

6 Quando MATLAB cerca un le, lo fa secondo un certo path pressato; ogni le che si vuole chiamare deve essere o nella directory/cartella corrente, o sul path di ricerca. Per vedere quale sia il path o apportarvi cambiamenti: File/Set Path.

1.1. UN PRIMO APPROCCIO A MATLAB

qui elfun 7 ; >>help produce una lista delle directories di MATLAB con descrizione della categoria di funzioni contenute in ciascuna; >>lookfor parola_chiave cerca, tra le funzioni disponibili, quella che ha qualche cosa a che fare con la parola_chiave data. Infatti ogni function ` corredata di alcune righe e di intestazione, in cui viene spiegato lo scopo e luso della function stessa; il comando lookfor esamina la prima riga di ogni intestazione (header ) alla ricerca della data parola_chiave. Per inciso, si noti che quando si prepara un nuovo M-le, conviene sempre mettere in testa (in uno script) o dopo la linea di denizione (in una function) un header, ossia una linea commentata che spieghi concisamente lo scopo del le. In tal modo il comando lookfor potr` operare anche a sugli M-les preparati dellutente. Attenzione: quando, come accadr` nel seguito delle esercitazioni, si deve a ripetere pi` volte una certa sequenza di comandi, ` sempre consigliabile u e memorizzarla in un nuovo M-le; cos` si risparmia molto lavoro. Notiamo anche che volendo modicare una function di MATLAB (sia ad es. cwt.m), si pu` copiarla nella propria directory/cartella di lavoro ed edio tarla. MATLAB utilizzer` automaticamente la cwt.m che si trova nellarea a di lavoro dellutente: infatti quando viene dato il comando cwt, MATLAB cerca cwt.m prima nellarea dellutente e solo dopo, non trovandola, cerca nellarea di installazione. Per richiamare comandi gi` dati (e poi eventualmente modicarli) si usano a le frecce sulla tastiera; per interrompere lesecuzione di un comando, >>Ctrl c 2. Per inserire a mano una matrice 8 , sia A: si digita ad esempio >>A=[1 2 3; 4 5 6; 7 8 10] In risposta, MATLAB visualizza la matrice cos` introdotta nel workspace: A= 1 2 3 4 5 6 7 8 10 Cliccando poi sul nome della matrice nel workspace browser, si apre lArray Editor (editor di matrici 9 ) che consente di modicarla. Per indicare ( 1) nei numeri complessi si usa i oppure j, indierentemente. Bisogna per`, naturalmente, fare attenzione a non ridenire o incautamente queste variabili nei propri script e function, usandoli come indici in cicli di for (che sono gli analoghi MATLAB dei cicli di do del FORTRAN), ecc... poich inoltre alcune function di MATLAB (come, per e esempio, cwt.m del Wavelet Toolbox Wavelet) usano i o j come indice, ` e
7 Vi sono contenute le funzioni matematiche elementari; tuttavia le funzioni pi` basilari, u come seno e coseno, sono built-in, cio` parte del core di MATLAB, molto ecienti ma non e visibili come M-les. 8 Attenzione: MATLAB distingue le maiuscole dalle minuscole (come si dice, ` case e sensitive), per cui la variabile A ` diversa dalla variabile a. e 9 A tutti gli eetti pratici possiamo usare come sinonimi le parole matrix e array.

10

CAPITOLO 1. ESERCITAZIONI GUIDATE bene controllare durante la sessione di lavoro il valore di i e j, prima di o usarli come 1. In alternativa, un numero complesso pu` essere ottenuto dalle sue parti reale ed immaginaria mediante la function complex. Se non si desidera la visualizzazione del risultato di una operazione, si mette dopo il comando un punto e virgola: ad esempio >>A=[1 2 3; 4 5 6; 7 8 10]; Si possono anche dare due o pi` comandi in una stessa linea, separandoli u con una virgola: ad esempio, per assegnare due scalari scal1e scal2 si pu` digitare o >>scal1=1,scal2=2 Per continuare a nuova riga una linea comandi troppo lunga si usano tre punti: ad esempio, supponendo di aver denito degli scalari da a a g e dei vettori di ugual lunghezza da h a l, potremo scrivere >>s=a+b+c+d+e+f+g+10*log10(abs(fft(... <invio> h+i+l))) 3. Uso delle matrici e relativi indici: in MATLAB tutte le variabili sono matrici. Uno scalare ` una matrice 1x1; un vettore ` una matrice 1xN e e (vettore-riga) oppure Nx1 (vettore-colonna). Esistono non solo matrici di numeri, ma anche di stringhe character. Le dimensioni (M,N) di una matrice A contenuta nel workspace possono essere rese note e memorizzate col comando >>[M,N]=size(A) Infatti quando si desidera assegnare pi` variabili in output, le si include u in parentesi quadre, separandole con virgole. Quando non si assegna esplicitamente alcuna variabile di output, il risultato di una operazione viene di default assegnato alla variabile ans (da answer, risposta), il cui valore viene visualizzato. Se si considera, anzich` una matrice vera e propria, un semplice vettore, e ad esempio >>v=[1 2 3 4 5] per conoscerne le dimensioni si pu` usare anche la function length: o >>L=length(v) Una matrice reale (come A o v) pu` venire trasposta digitando o >>A=A, v=v; In questo modo un vettore-riga diviene un vettore-colonna, e viceversa. Se A ` complessa, A ` la trasposta complesso-coniugata, mentre la seme e plice trasposta ` A.. e Luso degli indici per maneggiare gli elementi di matrice obbedisce alle usuali regole: detta A la matrice, A(i,j) ` lelemento nella riga i e coe lonna j. Lultima riga e lultima colonna di una matrice possono essere indicate con end: ad esempio, A(1,end) indica lelemento nella prima riga e ultima colonna. Se si tenta di usare indici fuori dallintervallo denito in precedenza, si ha un errore, ma se si deniscono nuovi elementi fuori range, la matrice originaria viene allargata no a contenere i nuovi elementi. Gli elementi non deniti, posti tra quelli pre-esistenti e quelli deniti ex-novo, vengono uguagliati a zero. Ad esempio: >>A

1.1. UN PRIMO APPROCCIO A MATLAB (matrice con tre righe e tre colonne denita in precedenza...) >>A(4,4)=25 (matrice allargata).

11

Quanto al numero massimo di dimensioni di una matrice, le uniche limitazioni sono dovute alla memoria disponibile ed al massimo numero di elementi non dimensioni in una matrice. La memoria disponibile dipende dal computer in uso; il numero massimo di elementi permesso dipende dalla versione di Matlab installata. Per conoscere il numero massimo di elementi (maxsize) si usa il comando computer che fornisce informazioni sul sistema in uso: [C,maxsize]=computer Ogni matrice denita dovr` dunque avere dimensioni tali che il loro proa dotto (numero di righe numero di colonne ...) sia inferiore a (maxsize). Invece per conoscere i limti di memoria sul proprio sistema si usa il comando memory. ` E possibile maneggiare parti di matrici: ad esempio A(1:k,j) indica gli elementi nella colonna j, dalla prima alla k-esima riga; A(:,j) indica tutti gli elementi della colonna j-esima. Si possono, inne, cancellare righe e colonne: ad es. >>A(:,2)=[] cancella la seconda colonna di A. 4. Operazioni elementari con matrici (quindi con qualsiasi variabile): esempi. Nota: le operazioni qui citate sono fatte elemento per elemento. Esse richiedono che gli operandi abbiano le stesse dimensioni; se un operando ` e uno scalare, viene applicato a tutti gli elementi dellaltro operando (scalar expansion). Quando utilizzate insieme, in una determinata espressione, tutte queste operazioni hanno uguale precedenza e vengono valutate da destra verso sinistra; si pu` cambiare questordine di precedenza con luso di parentesi. o Addizione elemento per elemento: >>a=[0 1 0 1 0 1] >>b=[2 2 2 2 2 2] >>a+b Sottrazione elemento per elemento: >>a-b Cambiamento di segno: >>-a Moltiplicazione elemento per elemento >>a.*b Divisione elemento per elemento: >>a./b
10 Lo stesso comando senza il punto implementa invece il prodotto matriciale, righe per colonne.

10

12

CAPITOLO 1. ESERCITAZIONI GUIDATE Elevamento a potenza elemento per elemento: >>b.^2 Radice quadrata elemento per elemento: >>sqrt(b) che ` come e >>b.^(1/2) ma pu` risultare pi` accurato. o u Addizione di uno scalare scal a tutti gli elementi di una matrice a: >>a+scal (si ricordi la scalar expansion). Analogamente si procede per la sottrazione. Logaritmo elemento per elemento, in base e, in base 2 o in base 10: >>log(b) oppure >>log2(b) oppure ancora >>log10(b) 5. Importazione di dati in MATLAB: per farla esistono diverse possibilit`. Limitiamoci alle pi` semplici, menzionando solo il fatto che a u in MATLAB esiste anche un Import Wizard, richiamabile col comando uiimport. Fornire i dati come lista esplicita di elementi, come gi` visto; ad a esempio: >>B=[1 1 1 0] Usare leditor preferito oppure quello di MATLAB per creare un M-le che faccia la stessa cosa. Ad esempio si pu` editare un le o contenente listruzione B=[1 1 1 0], salvarlo come B.m, poi dare il comando >>B Usare lArray Editor. Caricare i dati da un le ascii esterno contenente solo la variabile da caricare. Questa diverr` una matrice MxN, se il le conteneva M righe a di N dati ciascuna. Il nome della variabile sar` quello del le, privato a dellestensione. Per provare il procedimento: copiare nella propria directory/cartella di lavoro il le pd.dat, che contiene una serie temporale di 25921 dati di pressione differenziale in Pascal 11 ; lintervallo di campionamento ` Tc = e 5 s; copiare anche tr.dat, che contiene i contemporanei dati di trasparenza atmosferica registrati con lo stesso Tc ; digitare >>load pd.dat >>load tr.dat e controllare come si presentano le nuove variabili cos` caricate.

11 Si tratta di microuttuazioni di pressione atmosferica, misurate con un microbarometro, registrate in inverno a Trino Vercellese (Torino) durante un esperimento volto a rivelare linuenza di onde di gravit` in atmosfera sulla visibilit`, durante episodi di nebbia. a a

1.1. UN PRIMO APPROCCIO A MATLAB

13

Allo scopo, da linea comandi si pu` usare o >>who oppure >>whos che per ogni variabile d` anche le dimensioni ed il tipo di array: a double array= matrice normale, char array=matrice character... 6. Workspace e uso della memoria: le variabili create o importate nel workspace si possono rimuovere; ad es., per cancellare la variabile A si digita >>clear A; mentre se si vuole ripulire tutto il workspace, >>clear Le function utilizzano, per le loro variabili, unarea di memoria distinta dal workspace principale (tant` vero che le variabili denite allinterno e di una function non sono visibili col comando who). Per ripulire anche questarea di memoria, si d` il comando a >>clear function 7. Funzioni per generare matrici speciali: >>z=zeros(2,4) z= 0 0 0 0 0 0 0 0 >>q=ones(2,3) q= 1 1 1 1 1 1 >>r=rand(3,2) (matrice con tre righe e due colonne di numeri pseudocasuali con distribuzione uniforme, compresi tra zero e uno). >>r=randn(10,1) (matrice con dieci righe e una colonna di numeri pseudocasuali con distribuzione gaussiana a media nulla e varianza unitaria). La routine rand produce numeri pseudocasuali; la sequenza di numeri eettivamente generati ` determinata dallo stato del generatore. poich e e questo ha memoria, ogni volta che lo si chiama esso genera una sequenza diversa. Se vogliamo fargli generare due volte la stessa sequenza, dobbiamo leggere lo stato interno del generatore: rand_state=rand(state); generare la prima sequenza: x1=rand(10,1); resettare lo stato interno del generatore: rand(state,rand_state); generare la seconda sequenza: x2=rand(10,1); Daltra parte, poich lo stato interno del generatore viene resettato ogni e volta che MATLAB viene lanciato, la sequenza di numeri generata la prima

14

CAPITOLO 1. ESERCITAZIONI GUIDATE volta che si chiama rand in ogni sessione di lavoro sar` la stessa, a meno di a cambiare lo stato del generatore stesso. Considerazioni analoghe valgono per la function randn. 8. Funzioni speciali che danno i valori di certe costanti: pi, ;

i oppure j, ( 1) (rammentare il pericolo di ridenirli usandoli come indici);

realmin, il pi` piccolo numero reale ammesso; u realmax, il pi` grande numero reale ammesso; u Inf (o inf), innito;

eps, precisione relativa oating;

NaN (o nan), not-a-number: pu` essere, ad esempio, usato per rapo presentare dati mancanti in una serie temporale; la sua posizione nel vettore o matrice pu` poi essere rintracciata con luso di operatori o logici (v. oltre). Questi valori si possono ridenire, ad es. digitando >>eps=1.e-6, e poi riportare ai valori di default: >>clear eps 9. Espressioni matematiche: da linea comandi si possono usare le varie funzioni. Ne citiamo alcune: (a) funzioni trigonometriche: sin, asin, cos, acos, tan, atan, cot, acot ecc...; (b) funzioni esponenziali: exp, log, ,log2, log10, sqrt; (c) funzioni complesse: abs, angle, conj, real, imag, complex; (d) funzioni di arrotondamento: fix (arrotondamento verso lo zero), floor (arrotondamento verso lintero pi` vicino nella direzione di u meno innito), ceil (arrotondamento verso lintero pi` vicino nella u direzione di pi` innito), round (arrotondamento verso lintero pi` u u vicino), rem (resto dopo divisione), sign (funzione segno); (e) funzioni di statistica ed analisi dati elementare, quali la media e la deviazione standard 12 . Ad esempio: >>mupd=mean(pd) trova la media del vettore pd; >>mupd=median(pd) trova la mediana; >>sigmapd=std(pd)
12 In MATLAB, le funzioni relative a questo argomento risiedono nella directory/cartella datafun e lavorano anche su vere matrici, non soltanto su vettori. A questo proposito, notiamo che per lanalisi statistica, in generale multivariata, MATLAB ` column oriented: assume che e la matrice dei dati abbia per colonne le singole sequenze (p.es. serie temporali) di cui i dati sono composti. Pertanto le varie operazioni (di media, deviazione standard ecc...) vengono condotte per colonne e il risultato ` un vettore riga. Quali vettori di dati, MATLAB accetta e per altro sia vettori riga, sia vettori colonna.

1.1. UN PRIMO APPROCCIO A MATLAB

15

trova la deviazione standard; inoltre vi sono min (minimo assoluto), max (massimo assoluto), sum (somma degli elementi), diff (dierenze, prima approssimazione della derivata), trapz (integrazione numerica trapezoidale), ecc... Quando si cerca il massimo o minimo assoluto, si pu` nel contempo o trovare lindice del vettore a cui questo si verica: >>[mapd,indmapd]=max(pd) e analogamente >>[mipd,indmipd]=min(pd) Operando solo su parte del vettore, si possono limitare le operazioni precedenti a un dato intervallo di indici. Per togliere la media agli elementi di un vettore di dati (cio` per e centrare la sequenza), si operer` con la scalar expansion: a >>pd_c=pd-mupd; Invece per togliere la media ad una matrice vera e propria di dati bisogna matricizzare loperazione, come nellesempio che segue. >>A=[1 4 7; 2 5 8; 3 6 9] >>muA=mean(A) (vettore riga) >>[M,N]=size(A) >>e=ones(N,1) (vettore colonna) >>A_c=A-e*muA (A meno il prodotto matriciale del vettore-colonna e, fatto di N valori unitari, con il vettore-riga muA). 10. Formato dei valori numerici che appaiono sullo schermo (i calcoli vengono comunque sempre fatti in doppia precisione): ` possibile sceglierlo e col comando format. Ad esempio >>x=[4/3 1.2345e-6]; >>format short >>x 1.3333 0.0000 >>format long >>x 1.33333333333333 0.00000123450000 >>format short e >>x 1.3333e+00 1.2345e-06 ecc... Il default ` il formato short. e 11. Espressioni con operatori relazionali e logici: in esse si confrontano elementi analoghi di matrici equidimensionali (salvo scalar expansion). Gli operatori relazionali sono: < > >= <= == (equal to) ~= (not equal to) Le locazioni dove il risultato ` vero (true) ricevono il valore 1; quelle dove e

16

CAPITOLO 1. ESERCITAZIONI GUIDATE ` falso (false) ricevono il valore 0. Quindi, ad esempio, e >>A=[1 2 3 4] >>B=[1 0 0 4] >>A==B ans= 1001 Sebbene questi operatori vengano normalmente usati nella programmazione in linguaggio MATLAB, in conditional statements quali if - then - else per ramicare algoritmi, essi possono essere utilizzati per eseguire manipolazioni di matrici: per esempio >>v=[1.2 0.8660 0.3] >>u=v(v>=sin(pi/3)) trova tutti gli elementi vi del vettore v tali che vi sin( ) e li memorizza 3 nel vettore u. Gli operatori relazionali vengono valutati dopo gli operatori aritmetici. Gli operatori logici sono: & and | or ~ not ed operano come quelli relazionali. Esistono anche function logiche, su cui non ci soermiamo; citiamo solo la function find, che determina gli indici degli elementi di una matrice che soddisfano ad una data condizione logica: ad esempio >>i=find(A>2) i= 3 4 e la function isfinite(x) che esamina la variabile x alla ricerca di valori Inf o NaN: essa diverr` true (ossia 1) in corrispondenza dei valori numerici a e false (ossia 0) in corrispondenza di quelli Inf o NaN.

12. Esportazione di dati da MATLAB: il contenuto del workspace pu` o essere salvato in un le binario, detto MAT-le, con estensione .mat. Per esempio, da linea comandi, >>save 211212 salver` il contenuto del workspace nel le 211212.mat. In seguito, riena trando in MATLAB dopo esserne usciti, tutte le variabili salvate potranno essere ricollocate nel workspace con il comando load. Proviamo questa procedura: >>quit per uscire da MATLAB (attenzione a non farlo mai senza aver prima salvato il risultato delle proprie fatiche!!!). Poi al prompt del sistema matlab per rientrare; >>who per vericare che il workspace ora ` vuoto; e >>load 211212 per restaurare il precedente contenuto del workspace; >>who per vericarlo.

1.1. UN PRIMO APPROCCIO A MATLAB

17

Attenzione: variabili omonime pre-esistenti, denite tra il momento del riingresso in MATLAB ed il momento del caricamento, verranno ricoperte. Si pu` anche salvare solo certe variabili, ad esempio o >>save file1 v A (dove v, A sono le variabili da salvare), oppure decidere di salvare una variabile alla volta in un le ascii, ad esempio >>save A.dat A -ascii (8 digits) o >>save A.dat A -double (16 digits). In seguito la variabile potr` tornare nel workspace con a >>load A.dat 13. Graci in due dimensioni, nozioni essenziali: si utilizza la function plot. Si voglia gracare la variabile pd in funzione del tempo, in scala linearelineare. Allora occorre prima di tutto costruire un vettore che rappresenti la variabile indipendente (in questo caso, un vettore di tempi equispaziati, espressi, p.es., in secondi). Per questo si possono usare due comandi, di seguito esemplicati. (a) >>M=25921 >>T_c=5. >>t_i=0. >>t_f=(M-1)*T_c >>t=t_i:T_c:t_f; che crea un vettore-riga t contenente i valori da t_i a t_f, con passo T_c (se non specicato vale 1.); (b) >>M=25921 >>T_c=5. >>t_i=0. >>t_f=(M-1)*T_c >>t=linspace(t_i,t_f,M); che crea un vettore-riga con valori da t_i a t_f, contenente M valori. Ora per plottare il vettore pd in funzione di t si digita >>plot(t,pd) ed il graco appare, in una nestra separata. Al graco si pu` poi assegnare un titolo e delle label per gli assi con o lindicazione dellunit` di misura: questa ed altre operazioni sono rese a agevoli dai comandi e dai menu della barra che appare nella nestra della gura. Citiamo ad esempio Edit per FigureProperties e AxesProperties, Insert per le label degli assi, la lente per zoomare, ecc... Naturalmente le stesse operazioni sono possibili anche da linea comandi: ad esempio >>xlabel(Tempo [s]); ylabel(Pressione diff. [Pa]) >>title(Dati esperimento Trino 21.12.89) 13
13 In

questi comandi il testo tra apici viene interpretato secondo le regole di Te.

18

CAPITOLO 1. ESERCITAZIONI GUIDATE Se si desidera un grigliato di fondo, >>grid on mentre per disattivare il grigliato, >>grid off Si possono anche tracciare pi` linee su un graco, in stili o colori diversi; ad u esempio possiamo fare il graco di pd e tr sovrapposti. Lunica avvertenza ` che trattandosi in questo caso di grandezze siche diverse, dovremo prima e (centrarle e) standardizzarle, dividendole ciascuna per la loro deviazione standard. In questo modo diverranno variabili adimensionali confrontabili. Supponendo di averlo fatto, daremo poi il comando plot(t,pd,k-,t,tr,b--) graca le variabili rispettivamente in nero continuo e blu tratteggiato. Il graco pu` riguardare anche solo una parte dei dati: ad esempio o MM=fix(M/3); plot(t(1:MM),pd(1:MM),k-,t(1:MM),tr(1:MM),b--) che graca insieme il primo terzo dei valori di pressione dierenziale e trasparenza. In questo contesto pu` essere utile una legenda: o >>legend(Pressione differenziale,Trasparenza,2) (il 2 specica la posizione della legenda nel graco, in alto a sinistra). Altri possibili stili per le linee nei graci sono: : (puntinata) e -. (tratto e punto). Si possono pure fare graci per punti, usando i seguenti markers: +, o, *, x, ., s (square=quadrato), d (diamond=rombo), ^ (triangolo), ecc... Per avere markers sovrapposti a linee, occorre specicare entrambi: ad es. :^ dar` una linea puntinata con triangoli in corrispondenza dei valori. a Si pu` scegliere il colore delle linee che si tracciano; ad esempio o >>plot(t(1:200),pd(1:200),g) dar` una linea verde (su uno schermo a colori, linee multiple in un graco a appaiono automaticamente di colori diversi). Per aggiungere un ulteriore elemento (per esempio una curva) ad un graco gi` esistente, battere, prima di dare il secondo comando di plot, a >>hold on (per disattivare, >>hold off). Per stabilire esplicitamente lintervallo di valori da plottare sugli assi, si usa >>axis([xmin xmax ymin ymax]) dove ovviamente xmin ecc.. sono da sostituire coi valori desiderati. Se per uno di questi estremi si desidera un valore scelto automaticamente, lo si mette uguale a -Inf (meno innito) se ` un limite inferiore, +Inf se ` un e e limite superiore. Queste manipolazioni degli assi consentono di zoomare solo su parte della serie, esattamente come si farebbe limitando il comando plot a una parte del vettore pd o con lo strumento zoom. Anche laspect ratio degli assi si pu` scegliere: ad esempio o >>axis equal produce intervalli di uguale ampiezza sugli assi.

1.1. UN PRIMO APPROCCIO A MATLAB

19

Quanto ai tick, essi vengono automaticamente equispaziati, sebbene sia possibile controllarne la posizione con il menu Edit/CurrentObjectProperties nella nestra della gura. Si apre un Property Editor che consente di variare a piacere le propriet` delloggetto graco (sia esso gura, linea, punto, a asse, ecc...) su cui si ` cliccato per ultimo 14 . e Si pu` intervenire sui tick anche da linea comandi: ad esempio, dopo aver o dato un comando di plot (gura n.1), digitando >>h=gca(1) >>get(h) >>set(h,Ytick,[0 40 80 120 160 200]) >>set(h,YMinorTick,on) si metteranno i major ticks nelle posizioni indicate in parentesi quadre e si abiliter` il tracciamento dei minor ticks. a Per avere graci in scale diverse da quella lineare-lineare, si usano, al posto di plot, le funzioni loglog, semilogx, semilogy, con ovvio signicato. Citiamo inne il fatto che si possono fare pi` graci in una sola gura u usando listruzione subplot, creare graci con doppio asse delle ordinate usando yyplot, ecc... 14. Salvataggio di graci: una volta creato un graco, si pu` salvarlo in un o formato graco a scelta. Si esporta il graco in un le, ad es. postscript, (sia figura.ps), col comando >>print -dps2 figura.ps (b/n, postscript livello 2), oppure >>print -dpsc2 figura.ps (colore, postscript livello 2). Naturalmente sono possibili altri formati di output, quali EPS (encapsulated postscript ), TIFF, JPEG ecc... Supponiamo ora che si voglia intervenire successivamente su un certo graco che ` stato creato. Distinguiamo fra due diverse esigenze: e (a) in una stessa sessione di lavoro si desidera avere pi` nestre-gura, u richiamabili e modicabili. Ci` ` possibile col comando figure: si o e creano in successione diverse nestre-gura, ciascuna caratterizzata da un proprio handle (un numero intero), e si plottano dierenti set di dati nelle singole nestre-gura. Per esempio: >>...... >>h1=figure crea una gura vuota, caratterizzata da un handle che viene memorizzato in h1; >>...... >>plot...... riempie la gura con un graco; >>...... >>h2=figure
14 Ogni singolo oggetto graco riceve un identicatore univoco (handle) che pu` essere reo cuperato (cio` si pu` venire a conoscenza del suo valore) e poi usato per cambiare le propriet` e o a delloggetto stesso con opportuni comandi. Questa ` la base del sistema Handle graphics di e MATLAB.

20

CAPITOLO 1. ESERCITAZIONI GUIDATE crea una seconda gura vuota con un handle diverso, che viene memorizzato in h2; >>...... >>plot...... riempie la seconda gura, ecc... Ogni volta si crea una gura diversa ed il suo handle viene memorizzato. Per usare nuovamente una gura gi` creata (per aggiungervi un nuovo plot, o semplicemente rivederla a o modicarla in qualche modo) si clicca sulla gura scelta o si digita >>figure(h) dove h ` lo handle della gura voluta. Si procede poi alle modiche e desiderate. Le gure cos` create si posso chiudere, anche digitando da linea comandi >>close(h) ecc... Lo handle serve anche per modicare le propriet` della gura (o di a qualsiasi altro oggetto graco) da linea comandi, come gi` accennato: a ad es., per una gura con un handle h, digitando >>get(h) si ha una lista delle propriet`, che si possono cambiare con comandi a del tipo >>set(h,PropertyName,PropertyValue) Si pu` scegliere cos` ad esempio, il valore A3 per il formato della o , carta (mentre il default ` A4): e >>set(h,PaperType,A3) Inoltre si possono fare graci con orientamento landscape anzich e portrait, ecc... (b) Si vuole trasmettere un graco da una sessione di lavoro ad unal` tra. E in eetti possibile salvare la gura corrente (quella su cui si ` cliccato per ultima) per poi rigenerarla quando lo si desidera; e allo scopo si fa s` che MATLAB crei un M-le con i comandi utili a ricreare la gura (che pu` poi essere rilanciato a piacere) e, se neo cessario, anche un le .mat avente lo stesso nome del precedente e contenente i dati che servono per ricreare la gura medesima. Ad esempio, digitando >>print -dmfile mio_grafico dopo aver creato una gura, si otterranno un mio_grafico.m e un mio_grafico.mat; in ogni momento, poi, digitando >>mio_grafico si ricreer` la gura. a

1.1.4

Generazione di dati sintetici

Spesso, per studiare le caratteristiche e le prestazioni di algoritmi e sistemi, si eseguono simulazioni numeriche mediante segnali costruiti (sintetizzati) appositamente. Nel caso pi` comune, essi vengono composti con un numero arbitrario u di sinusoidi con certe ampiezze, frequenze e fasi iniziali. Se lo scopo ` quello e

1.1. UN PRIMO APPROCCIO A MATLAB Frequenza f0 f1 f2 f3 f4 f5 Valore 6.0 102 3.5 102 1.5 102 8.0 103 4.0 103 2.0 103

21

Hz Hz Hz Hz Hz Hz

Tabella 1.1: Frequenze analogiche delle sei sinusoidi che andranno a formare i dati sintetici. di simulare dati random da misure siche, ` bene che la fase iniziale di ogni e componente sia scelta a caso tra 0 e 2. Per la stessa ragione, alle sinusoidi si aggiunge rumore bianco gaussiano 15 con media e varianza opportuna. Nonostante nelle tecniche di elaborazione di dati a tempo discreto lintervallo di campionamento dei dati non giochi alcun ruolo, qui e nel seguito si desidera mantenere costantemente un aggancio con un ipotetico contesto sico, in cui si suppone sia esistito un segnale a tempo continuo da cui i dati a tempo discreto deriverebbero, per campionamento a passo Tc ; quindi assegneremo anche ai dati sintetici che ora genereremo un valore di Tc da noi arbitrariamente scelto. Per ssare le idee, decidiamo di generare un segnale contenente N = 8192 dati con Tc = 5 s, includendovi: sei sinusoidi, tutte di ampiezza unitaria, fase iniziale random e frequenze date nella Tabella 1.1. rumore bianco a media nulla e varianza 0.25 (r = 0.5). A tal ne creeremo un M-le, sia16 dat_sint.m, che contenga le seguenti istruzioni:
15 Campioni di rumore bianco gaussiano possono venire generati partendo da un generatore di numeri pseudo-casuali e modicandone luscita per avere la gaussianit`. a Supponiamo di scegliere una serie di numeri reali secondo le regole seguenti:

tutti i numeri devono essere compresi tra zero e uno; non si possono fare discriminazioni in favore di (o contro) alcun numero o intervallo di numeri; tutti devono avere la stessa probabilit` di essere scelti; a ogni numero deve essere scelto indipendentemente dagli altri; non si debbono ricordare i numeri gi` scelti e cambiare le proprie decisioni in base ad essi. a Cos` facendo si genera rumore bianco con distribuzione uniforme. Diverso ` il caso gaussiano. Supponiamo di captare, con unantenna, energia da tutte le e sorgenti di segnali radio dellUniverso, sommando tali energie. La tensione risultante sar` a casuale, ma non uniforme: la maggior parte del tempo questi segnali tenderanno a cancellarsi lun laltro e genereranno tensioni prossime allo zero; una volta ogni tanto invece interferiranno costruttivamente e genereranno termini elevati. La distribuzione delle tensioni sar` gaussiana; a per generare rumore bianco gaussiano, le regole di scelta sono le seguenti: i numeri devono essere estratti da una popolazione con distribuzione gaussiana; devono essere scelti indipendentemente luno dallaltro.
16 Non

si pu` assegnare lo stesso nome ad un M-le e ad una variabile. o

22

CAPITOLO 1. ESERCITAZIONI GUIDATE

N=8192 T_c=5 Nsin=6 A=[1 1 1 1 1 1] f_sint=[6e-2 3.5e-2 1.5e-2 8e-3 4e-3 2e-3] t_ds=0:T_c:(N-1)*T_c; sigmar=0.5 ds=zeros(1,N); rand(state,0) (porta il generatore rand nel suo stato iniziale) for i=1:Nsin pharand=rand(1,1)*2*pi; ds=ds+A(i)*sin(pharand+2*pi*f_sint(i)*t_ds); end randn(state,0) (porta il generatore randn nel suo stato iniziale) rumb=sigmar*randn(1,N); ds=ds+rumb; Listruzione for produce un loop sullindice i, essendo, come gi` accennato, a la versione di MATLAB di un do loop del FORTRAN.

Generati cos` i dati, sar` utile eseguire un graco complessivo ed uno espanso, a in una scala opportuna per vedere bene le uttuazioni. Si noti che con Tc = 5 s, le sinusoidi hanno periodi di 16.7, 28.6, 66.7, 125., 250. e 500. s rispettivamente. Riessione: rumore e segnale utile possono prevalere luno sullaltro, a seconda delle situazioni; pi` avanti, nelle esercitazioni sullanalisi spettrale, si parler` u a di rapporto segnale-rumore. Per ora potrebbe essere istruttivo tenere sse le ampiezze delle sinusoidi e aumentare (diminuire) la varianza del rumore, osservando no a quando ` possibile riconoscere le sinusoidi (il rumore). e

Seguendo la stessa traccia, lo studente prepari ora altri tre programmi, che serviranno per le prove successive: 1. dat_rumb.m che generi N campioni di rumore bianco gaussiano a media nulla e con varianza r ; 2. dat_sint_2sin.m che generi N campioni di rumore bianco gaussiano a media nulla e con varianza r sovrapposto una sinusoide di ampiezza A, e frequenza ssata, con fase iniziale casuale; 3. dat_sint_2sin.m che generi N campioni di rumore bianco gaussiano a media nulla e con varianza r sovrapposto a due sinusoidi di ampiezze A0 , A1 e frequenze diverse, con fasi iniziali casuali. I valori dei parametri r , A ecc... possono per ora essere ssati arbitrariamente; in seguito editeremo questi prototipi di le per inserire i valori opportuni, a

1.2. TRASFORMATA DISCRETA DI FOURIER seconda della necessit`. a

23

Concluso il lavoro, usciamo da MATLAB, con quit o selezionando Exit MATLAB dal menu File. Se al termine di una sessione si desiderasse salvare delle variabili, useremmo save e al login seguente potremmo ricaricare le variabili nel workspace con load. Nel caso di questa sessione tuttavia non serve salvare nulla.

1.2
1.2.1

Trasformata discreta di Fourier


Premessa

Con questa sezione delle esercitazioni guidate si entra nel campo specico delle applicazioni di elaborazione numerica dei segnali, che in MATLAB corrispondono a funzioni del Signal Processing (SP) Toolbox 17 . Lo scopo dellesercitazione ` il calcolo della trasformata di Fourier discreta di una sequenza di dati, una e quantit` complessa di cui si esaminer` il modulo (spettro di ampiezza). Per le a a prove pratiche useremo i dati sintetici ds e i dati veri pd. Prima di proseguire ` bene chiarire un punto concettualmente importante. La e nozione di spettro di ampiezza si applica ai segnali deterministici, mentre per i segnali casuali si adotta un approccio statistico, che porta alla nozione di spettro di potenza del processo casuale (innitamente persistente e di energia innita) sotteso alla generazione dei dati stessi. Per tale processo casuale non ` denito e alcun spettro di ampiezza, perch la DFT non esiste; esiste invece la DFT della e sequenza di autocovarianza del processo, cio`, appunto, lo spettro di potenza. e I dati utilizzati nelle presenti esercitazioni sono da un lato misure vere, da un altro lato dati sintetici, randomizzati con linserimento di rumore bianco per farli assomigliare il pi` possibile a dati veri (che sono quelli che ci interessano). A u tutti gli eetti, la loro rappresentazione in frequenza va dunque data in termini di spettro di potenza. Tuttavia, a ni esercitativi pratici, per poter ripartire adeguatamente nel tempo le esercitazioni pratiche in rapporto alla trattazione teorica, parleremo inizialmente di spettro di ampiezza anche per dati di questo tipo; semplicemente, lo faremo consapevoli del fatto che allora stiamo guardando i dati in questione non come segmenti di durata nita di realizzazioni di processi casuali ma come singole sequenze deterministiche di durata nita. Al termine dellesercitazione di questa sezione si eseguono anche alcune prove per visualizzare, nel dominio della frequenza ed in quello del tempo, il fenomeno dellaliasing. Allo scopo si generano sequenze di dati sintetici discreti (sempre pensati come derivanti per campionamento, a passo Tc arbitrariamente scelto,
17 In realt` lalgoritmo FFT ` contenuto nel Toolbox di base, ma altre function pi` a e u specialistiche sono nel Toolbox SP.

24

CAPITOLO 1. ESERCITAZIONI GUIDATE

da un segnale a tempo continuo) 18 , contenenti ciascuna una sinusoide la cui frequenza in Hz sia esterna allintervallo (0, fN y ). Successivamente viene stimato il relativo spettro di ampiezza; in questo modo ` possibile constatare che le e frequenze esterne allintervallo (0, fN y ) vengono tutte riesse al suo interno.

1.2.2

DFT e spettro di ampiezza: caratteristiche

1. La DFT X[k] di una sequenza, x[n] (n = 0, N 1), viene calcolata mediante la function che implementa lalgoritmo FFT. Per lecienza dellalgoritmo, ` bene lavorare su un numero di dati uguale ad una potenza e di due, sia M = 2 . Pertanto la sequenza di dati deve: (a) essere presa com `, se M = N ; e (b) essere allungata, aggiungendo al fondo degli zeri (padding di zeri), se si decide per M > N . Leventuale allungamento con zeri si fa sempre dopo aver ridotto i dati disponibili a media nulla, sottraendo da essi il valore medio. Questa operazione di centratura dei dati si fa sempre e comunque prima di eseguire la trasformata, anche nel caso non sia necessario alcun padding, al ne di evitare che la media (trasformata a k = 0) inuenzi i valori spettrali a bassa frequenza. La trasformata X[k] ` complessa in generale e di essa prendiamo il modulo e |X[k]|, k = 0, M 1, comprendente M valori. Per conoscere le frequenze a cui tali valori corrispondono (siano fk [Hz]) si deve tenere conto delle frequenze angolari discrete che corrispondono alle stime spettrali, k = 2k , M

dove M ` la lunghezza della DFT, e del periodo di campionamento Tc dei e dati. Infatti la relazione tra k e fk ` e fk = da cui fk = k . M Tc k 2Tc

e Lo spettro ` dunque esteso su frequenze discrete da 0 a M1 , cio` da 0 e MTc 1 alla frequenza analogica che precede la frequenza di campionamento Tc . In frequenze angolari discrete si va da 0 incluso a 2 escluso.
qui ancora una volta che nelle operazioni descritte si ` voluto mantenere il e riferimento al campionamento e al relativo passo temporale Tc , cio` alla variabile frequenza f e espressa in Hz, anche se, trattandosi di segnali a tempo discreto, sarebbe stato possibile luso della sola variabile (oppure ), che ` del tutto svincolata dallidea di campionamento e dal e Tc .
18 Ricordiamo

1.2. TRASFORMATA DISCRETA DI FOURIER

25

Il controllo del calcolo di |X[k]| va fatto vericando che sia soddisfatta la relazione di Parseval per la DFT: 1 M
M1 N

k=1

|X[k]| =

x2 [n],
n=0

dove N ` la lunghezza della sequenza utilizzata. Riassumendo, si dovr`: e a (a) costruire il vettore di dati a media nulla da trasformare, prendendo tal quale e centrando oppure centrando e allungando con zeri la sequenza x[n]; (b) fare il calcolo del secondo membro della relazione di Parseval (quello che riguarda i dati e ne rappresenta lenergia); (c) eseguire la DFT; (d) prenderne il modulo; (e) con questultimo calcolare il valore del primo membro della relazione di Parseval ed accertarsi che sia uguale al secondo (salvo errori di arrotondamento); (f) calcolare le frequenze in Hz corrispondenti alle stime eettuate; (g) gracare il risultato. 2. La X[k] ` simmetrica, essendo la trasformata di una sequenza reale; di e conseguenza anche lo spettro di ampiezza lo ` e, se M ` pari come di solito e e avviene, la seconda parte di esso (da f M +1 a fM1 ) ripete la prima parte 2 (da f1 a f M 1 ) in modo speculare:
2

|X[k]| = |X [M k]|

k = 0, M 1.

Alla frequenza zero (k = 0) e alla frequenza di Nyquist (k = M/2) la trasformata ` reale; il valore a k = 0 rappresenta la media dei dati, che e sono stati centrati, e quindi deve risultare piccolissimo (idealmente, nullo). Pertanto linformazione utile ` contenuta nella prima parte dello spettro, e 1 1 da k = 1 a k = M , cio` da f1 = MTc a f M = fN y = 2Tc , e quindi per dati e 2 2 reali centrati e M pari ` suciente gracare lo spettro su questultimo e intervallo 19 . Il graco spettrale si fa normalmente in scala log-log, ma anche scale lineari o semilineari sono talvolta utili (solo se lasse f ` lineare e si include la frequenza zero).

1.2.3

La function t di MATLAB

Attenzione: dora in poi si consideri che nella teoria si fa uso di indici che partono dal valore 0 mentre in MATLAB gli indici partono da 1.
+1 1 M dispari la situazione ` simile, per` fNy cade tra due campioni (tra M2 e M2 ) e o M 1 M +1 e i campioni da 2 a M 1 replicano in modo speculare quelli da 1 a 2 . Dora in poi assumeremo che la lunghezza della DFT sia pari; se non lo fosse, si potr` sempre aggiungere a uno zero al fondo della sequenza. 19 Per

26

CAPITOLO 1. ESERCITAZIONI GUIDATE

Per la DFT dei dati via Fast Fourier Transform si usa la function fft; essa pu` accettare in input un numero qualsiasi di dati, ma lalgoritmo veloce viene o eettivamente applicato solo se la lunghezza della trasformata da calcolare (M = nfft) ` uguale ad una potenza di due; in caso contrario viene fatto il calcolo e diretto della DFT, assai pi` lento. Per la scelta di nfft pu` essere daiuto la u o function nextpow2, che, dato un intero, calcola lesponente della pi` vicina pou tenza di due, per eccesso: ad esempio, nel caso dei dati ds, il digitare >>N=8192 >>enfft=nextpow2(N) >>nfft=2^enfft d` semplice conferma del fatto che era gi` stato scelto un N uguale ad una a a potenza di due. Invece per N = 25921, che ` la lunghezza dei dati pd, si ottiene e il valore 215 = 32768. Per usare fft, ad esempio sui dati ds generati da dat_sint, se si vuole una FFT di lunghezza uguale alla lunghezza dei dati si scrive 20 DS=fft(ds); Se la si vuole di lunghezza diversa, specicata dal valore di nfft, si scrive invece DS=fft(ds,nfft); Ove necessario, il padding di zeri viene fatto automaticamente.

1.2.4

Prove con dati sintetici

Iniziamo coi i dati sintetici ds (N = 8192), scegliendo, per la lunghezza della FFT, M = N = 8192 = 213 . Si riduce a media nulla con ds=ds-mean(ds); Si calcola poi la DFT con nfft=N; DS=fft(ds,nfft); e di essa si prende il modulo con modDS=abs(DS); Questo ` lo spettro di ampiezza. In seguito si graca il risultato in scala semie logaritmica su tutto lintervallo di frequenze con i comandi: f_Ny=1/(2*T_c) deltf=1/(length(DS)*T_c) f=0:deltf:(2*f_Ny-deltf); semilogy(f,modDS) Si noti la simmetria del graco. Poi si pu` zoomare sui particolari dello o spettro, o limitando lintervallo di indici delle variabili, o dando specici limiti per i valori sugli assi, o usando gli strumenti della nestra graca.
20 Preparando uno script sia spe amp.m con le istruzioni date in questa sottosezione per il calcolo e la visualizzazione dello spettro di ampiezza dei dati ds, si verr` a disporre di un a prototipo modicabile, utile in seguito. Questo ` conveniente anche per tutte le prove che e seguono, e non verr` ripetuto. a

1.2. TRASFORMATA DISCRETA DI FOURIER

27

Per un graco in scala log-log, da eseguire in unaltra gura, si scrive invece loglog(f,modDS) (la frequenza zero viene automaticamente esclusa), mentre per un graco linearelineare, da fare ancora in unaltra gura 21 , si scrive plot(f,modDS) Inne notiamo che talvolta si usa anche rappresentare lo spettro in dB. In tal caso il comando ` e plot(f,10*log10(modDS))

Riessione: come mai i graci in scala semilogaritmica (fatti con semilogy o in bB) appaiono cos` schiacciati? Come mai questo non succede col graco fatto con loglog? La posizione dei picchi spettrali, i quali sono superiori a 1. 103 , pu` essere o trovata coi comandi i=find(modDS>10^3); format long e fi=f(i) che danno le frequenze dei picchi che valicano il limite specicato, in forma ` di vettore-colonna facilmente leggibile. E cos` possibile vericare la simmetria attesa per la DFT e il fatto che i picchi cadono (approssimativamente) alle frequenze scelte per generare le sinusoidi 22 .

Se si desidera vedere anche lo spettro di fase, si opera cos` per calcolare la fase : angleDS=angle(DS); poi per dispiegarla, cio` per rimuovere i salti di fase maggiori di , riducendoli e al loro complemento a 2 in modo da togliere le discontinuit` ttizie introdotte a dalla funzione arcotangente usata per il calcolo della fase, uangleDS=unwrap(angleDS); e inne per gracarla in scala lineare-lineare (in una gura a parte) plot(f,uangleDS)

Ricordiamo che talvolta pu` essere utile ribaltare la parte della trasformata che o sta oltre fN y sulle frequenze negative, tra 0 e fN y . In questo modo i nuovi intervalli sono: in frequenze analogiche, da fN y inclusa a +fN y esclusa; in numeri darmonica, M k M 1. 2 2 La procedura ` la seguente: e DSshift=fftshift(DS); modDSshift=abs(DSshift); Per il graco di modDSshift occorre generare un vettore frequenze apposito: fnegpos=(-f_Ny:deltf:f_Ny-deltf);
21 Dora in avanti ` considerato implicito che sequenze diverse vadano gracate in gure e diverse se non condividono almeno in parte i valori della variabile indipendente. 22 Alcuni picchi appariranno due volte nellelenco, a causa della loro larghezza nita.

28

CAPITOLO 1. ESERCITAZIONI GUIDATE

plot(fnegpos,modDSshift) (oppure semilogy; non loglog, a causa della presenza di frequenze negative). Si ricordi di aprire una nestra separata anche questa volta.

Si osservi di nuovo la simmetria del graco; per rendersi conto quantitativamente dellaccaduto si potrebbe anche eettuare la ricerca delle frequenze di massimo pure per modDSshift e confrontarle con quelle per modDS.

Osservazioni Guardando il graco in scala log-log, si nota bene uno zoccolo di valori spettrali rapidamente variabili, specialmente evidente alle frequenze pi` u alte. Tale caratteristica ` dovuta al rumore. Lo si pu` constatare provando e o a generare un set di dati sintetici uguale al precedente ma senza rumore (con le sole sinusoidi) e vedendo che cosa cambia nello spettro. Riessione: ` la linearit` della DFT che ci consente di estendere il modello e a del segnale (segnale utile+rumore) dal dominio del tempo al dominio della frequenza. I picchi spettrali corrispondenti alle sinusoidi discrete introdotte nei dati sintetici non appaiono innitamente sottili, ma hanno piuttosto una certa larghezza nita (e infatti quando ne abbiamo determinato le posizioni, alcuni picchi sono apparsi due volte nella lista). Il fatto non sorprende, visto quanto appreso riguardo agli eetti del windowing e al campionamento spettrale e; inoltre nei dati vi ` anche del rumore. Leetto del e campionamento in frequenza pu` essere studiato generando nuovi dati o sintetici contenenti sinusoidi di frequenze esattamente uguali ad alcune delle frequenze discrete a cui lo spettro viene campionato e osservando come laspetto dello spettro si modica. Riessione: nel primo caso, con frequenze scelte come in Tabella 1.1, la sequenza generata ` periodica? Nel secondo caso ` periodica? Perch? e e e

1.2.5

Prova coi dati di pressione

Eseguiamo ora una prova coi dati pd, la cui lunghezza ` N=25921 e il cui Tc ` e e di 5 s (lo stesso valore scelto arbitrariamente per i dati sintetici), facendo una fft su un numero di punti pari alla potenza di due immediatamente superiore a N . Prima di procedere sottrarremo ai dati la media. Calcoleremo lo spettro dampiezza e faremo il graco, ad esempio con loglog. Osservando lo spettro ottenuto, come semilogy o loglog, lo studente vedr` che a esso ha una forma (tipica dei dati geosici: atmosferici, marini, sismici....) che assegna molta potenza alle basse frequenze e poi sempre meno andando verso quelle alte. Come sappiamo, un segnale con uno spettro di questo tipo ` detto e rumore di colore caldo (ad esempio rumore rosso). Esso ` tipico dellambiente e

1.2. TRASFORMATA DISCRETA DI FOURIER

29

atmosferico e oceanico e la sua forma denuncia la memoria del sistema, ossia la persistenza del fenomeno sico sotteso alla generazione dei dati (inerzia del sistema o processo che prosegue nel tempo). In altre parole, il rumore ` il e risultato dellinterazione tra una forzante di rumore bianco e i componenti, a risposta lenta, del sistema sico esaminato; ad es., in una serie climatica di temperature oceaniche, la persistenza ` dovuta al fatto che linerzia termica e delloceano integra nel tempo il forcing dovuto al tempo atmosferico (che qui viene visto come rumore). Sovrapposti a uno spettro di questo tipo possono poi esserci, nei dati geosici, picchi associati a speciche periodicit`. a

1.2.6

Aliasing

Lo scopo dellesercitazione ` la visualizzazione del fenomeno dellaliasing. Ci` si e o ottiene generando dati sintetici discreti (pensati come derivanti, tramite campionamento con un certo passo Tc arbitrario, da un segnale continuo), contenenti sinusoidi di frequenza esterna allintervallo (0, fN y ). Sia f1 una frequenza in (0, fN y ). Si considerino poi le innite frequenze f2 = k f1 Tc

con k = (0, ) intero, che invece sono esterne allintervallo in questione. Si pensi ora ad una sequenza contenente una sinusoide con una delle frequenze f2 , campionata a passo Tc : calcolando il relativo spettro di ampiezza ` possibile e constatare che f2 viene riessa in f1 , nel senso che nello spettro il picco compare a frequenza f1 .

Procedimento: 1. Generare quattro diverse sequenze sintetiche, tutte arbitrariamente riferite a Tc = 5 s, fN y = 101 Hz, contenenti ciascuna: del rumore bianco gaussiano, con valor medio nullo e deviazione standard pari a 0.05, e una sinusoide con frequenza f2 tale da riettersi, secondo la formula data sopra, in f1 = 4. 102 Hz. Ad esempio, applicare la formula per f2 , due volte con k = 1 e due volte con k = 2, una volta col segno meno ed una col segno pi` nei due casi, u ottenendo quattro valori di f2 da usare per costruire quattro sequenze diverse; 2. calcolare lo spettro di ampiezza 23 e vericare la riessione nei quattro casi, con graci in scala lineare (o anche semilogy, loglog oppure in dB). Poich la simmetria della DFT completa ` gi` stata osservata nei graci e e a
23 Attenzione: da questo momento in poi non verr` pi` ricordata ogni volta lopportunit` a u a del togliere la media ai dati prima di calcolarne lo spettro!

30

CAPITOLO 1. ESERCITAZIONI GUIDATE fatti in precedenza, dora in poi ci si pu` limitare a riportare nei graci o spettrali solo i valori da k = 0 a k = M ; in termini di indici in Matlab, ci` o 2 signica gracare gli elementi del vettore spettro di ampiezza dallindice 1 allindice M + 1 = nfft/2+1. Anzi, se usiamo semilogy o la scala di dB, 2 visto che prima di eettuare la trasformata abbiamo tolto la media ai dati e quindi il modulo della trasformata alla prima frequenza, la frequenza zero, ` piccolissimo, ` meglio partire dallindice 2: in questo modo si evita che la e e parte interessante del graco appaia schiacciata. Il problema ovviamente non si presenta in scala lineare e nemmeno con loglog, perch con esso e la frequenza zero viene automaticamente esclusa; 3. vericare laliasing anche mediante graci temporali, in una scala di tempo adatta a visualizzare qualche ciclo della sinusoide aliased ; 4. generare una quinta sequenza derivante da un segnale continuo sinusoidale di frequenza pari alla quarta precedente (f2 = 4.4 101 Hz), ma con un passo di campionamento che sia dieci volte pi` piccolo di quello usato u prima, cio` 0.5 s. Ovviamente cambia, rispetto ai casi precedenti, la free quenza di Nyquist (come diventa?). Perci` una sinusoide di tale frequenza o pu` ora essere rivelata correttamente, perch inferiore alla nuova fN y (` o e e vero?...). Vericare questo con un graco temporale ed uno spettrale.

1.3
1.3.1

Filtraggio nel dominio del tempo


Premessa

Lo scopo dellesercitazione ` eettuare, nel dominio del tempo, il ltraggio di una e serie temporale di dati con un ltro FIR di cui si conosce la risposta allimpulso h[n]. Verranno impiegate, nei prossimi due paragra, tre funzioni tra quelle disponibili in MATLAB per operazioni in questo campo. La prima ` filter, che pu` essere e o vista come una implementazione eciente dellequazione alle dierenze; quindi essa pu` servire per applicare sia ltri IIR, sia ltri FIR di cui si conoscano i o coecienti costanti dellequazione alle dierenze. Nel seguito chiameremo di tipo a i coecienti del primo membro dellequazione alle dierenze (quelli che moltiplicano la sequenza di output, ritardata o no) e di tipo b i coecienti del secondo membro (quelli che moltiplicano la sequenza di input, ritardata o no). In particolare, nel caso FIR, quello cui noi ci limiteremo, i coecienti di tipo b sono i campioni della risposta allimpulso del ltro h[n] mentre quelli di tipo a sono rappresentati da un unico valore unitario, quello che moltiplica y[n]: gli altri sono nulli. La seconda function utilizzata ` conv, che invece implementa la convoluzione e lineare della serie di dati con h[n].

1.3. FILTRAGGIO NEL DOMINIO DEL TEMPO

31

Inne, la terza function usata ` fftfilt, che implementa un eciente algoritmo e di ltraggio nel dominio della frequenza, basato sulla FFT e chiamato overlapadd. Sar` fatto anche un cenno ad un metodo di ltraggio caratterizzato da ritardo a nullo. Le operazioni di ltraggio verranno esemplicate utilizzando, come dati da ltrare, quelli sintetici ds con rumore e sei sinusoidi. Per quanto concerne il ltro, sono disponibili le risposte allimpulso di tre diversi ltri FIR passa-banda, tutte di lunghezza Mf = 55 (ordine Mf 1 = 54); i nomi dei les sono bpf_h.mat, bpf_m.mat+,bpf_l.mat+;le corrispondenti variabili si chiamano hh, hm, hl. Nelle Fig. 1.1, 1.2 e 1.3 sono mostrati i moduli delle rispettive risposte in frequenza, in unit` logaritmiche (moduli quadri) e lineari. a
10 0 10 20 30 40 50 60 70 80 90 100 110 120 130 0 0.1 0.2 1.1 1 0.9 0.8 0.7

20 log10 |H |

|H |
0.3 0.4 0.5

0.6 0.5 0.4 0.3 0.2 0.1

0 0

0.1

0.2

0.3

0.4

0.5

Figura 1.1: Filtro bpf h Risposta in frequenza: modulo quadro in dB (a sinistra) e modulo in scala lineare (a destra), in funzione della frequenza adimensionale . Le linee verdi indicano lattenuazione minima ed il ripple in banda passante. = 27 campioni: il senso La fase ` lineare e comporta un ritardo di f2 e di questo ritardo ` che se si devono gracare insieme la serie originale e quella e ltrata, in funzione del tempo, la seconda deve iniziare con un ritardo di 27 campioni rispetto al primo campione della serie originale. La serie di output, senza transitori, conta Nf = N Mf + 1 campioni, per un ingresso composto da N campioni 24 . Le bande passanti dei tre ltri passa-banda, espresse in termini di frequenze adimensionali , sono indicate in Tabella 1.2.
24 Siano x[l ], con l = (0, N 1), i dati di input. Lindice l e i successivi indici con lo 0 0 0 stesso pedice hanno valori che partono da zero.

M 1

32

CAPITOLO 1. ESERCITAZIONI GUIDATE

10 0 10 20 30 40 50 60 70 80 90 100 110 120 130 0 0.1 0.2 1.1 1 0.9 0.8 0.7

20 log10 |H |

|H |
0.3 0.4 0.5

0.6 0.5 0.4 0.3 0.2 0.1

0 0

0.1

0.2

0.3

0.4

0.5

Figura 1.2: Filtro bpf m Risposta in frequenza: modulo quadro in dB (a sinistra) e modulo in scala lineare (a destra), in funzione della frequenza adimensionale .
10 0 10 20 30 40 50 60 70 80 90 100 110 120 130 0 0.1 0.2 1.1 1 0.9 0.8 0.7

20 log10 |H |

|H |
0.3 0.4 0.5

0.6 0.5 0.4 0.3 0.2 0.1

0 0

0.1

0.2

0.3

0.4

0.5

Figura 1.3: Filtro bpf m Risposta in frequenza: modulo quadro in dB (a sinistra) e modulo in scala lineare (a destra), in funzione della frequenza adimensionale .

Se si scartano i transitori, la convoluzione con cui il ltro viene applicato,


Mf 1

y[j0 ] =
k0 =0

h[k0 ]x[j0 k0 ],

deve avere gli indici delloutput y[j0 ] compresi tra j0 = Mf 1 e j0 = N 1, in modo da avere j0 k0 0; j0 k0 N 1.

1.3. FILTRAGGIO NEL DOMINIO DEL TEMPO Filtro bpf l bpf m bpf h Intervallo passante di 0.05 0.1075 0.1075 0.232 0.232 0.4

33

Tabella 1.2: Bande passanti dei ltri citati nel testo, espresse in termini di frequenza adimensionale . Ricordando che per i dati ds si ` assunto un passo di campionamento di 5 s, e ` immediato calcolare le frequenze in Hz che limitano le bande passanti dei e tre ltri, quando applicati a dati con quellintervallo di campionamento. Quali frequenze, fra quelle contenute nei dati ds (Tabella 1.1), cadono nella banda passante del primo ltro? ...del secondo? ...del terzo? Lo studente, rispondendo a queste domande, si far` unidea dellaspetto che dovr` avere lo spettro dei a a dati ds ltrati con ciascuno dei tre ltri; poi ltrer` eettivamente, ad esempio a
Per riferirsi, come in MATLAB, ad indici che corrono da 1 anzich` da 0, linput deve per` e o essere riscritto come x[l], con l = (1, N ) e la convoluzione deve essere riscritta come
Mf

y[j] =
k=1

h[k]x[j k + 1].

Escludendo i transitori, lindice delloutput varier` da Mf a N . Per riportare allora lindice a delloutput allintervallo partente da 1, si deve passare a un indice i = j Mf + 1, col quale si scriver` la convoluzione come a
Mf

y[i] =
k=1

h[k]x[j k + 1],

dove i = 1, N Mf + 1 senza i transitori. Ma come collocheremo temporalmente il primo campione delloutput rispetto a quello dellinput? Consideriamo che un dato y[i] ` composto da una combinazione lineare di valori dellingresso e x[l] aventi indici l compresi fra l1 = j k + 1 = (i + Mf 1) Mf + 1 = i per k = Mf e l2 = j k + 1 = (i + Mf 1) 1 + 1 = i + Mf 1 per k = 1. Da ci` si ricava o l2 l1 t pertanto si assegna y[i] al tempo ti = tl + dove tl = (l 1)Tc ` il tempo di x[l]. e campioni, un Si ha dunque, come previsto, un ritardo in tempo reale corrispondente a f 2 numero che nel nostro caso ` intero perch Mf 1 = 54 ` pari; rispetto allinput, loutput e e e della convoluzione priva di transitori presenta in meno in coda.
Mf 1 2 M 1

= =

Mf 1, (l2 l1 )Tc = (Mf 1)Tc ;

Mf 1 t = tl + Tc , 2 2

campioni in meno in testa e altrettanti

34

CAPITOLO 1. ESERCITAZIONI GUIDATE

con bpf_m, e vericher` lavvenuto ltraggio mediante lesame dello spettro di a ampiezza dei dati ltrati e il suo confronto con quello dei dati ds originali, calcolato nellesercitazione della sottosezione 1.2.4. Inne, nellultima parte della presente sezione, si ltra nuovamente via convoluzione lineare, ma prima di ltrare si adotta una tecnica di decimazione dei dati, al ne di far corrispondere la banda passante del ltro usato, originariamente data in termini di frequenze adimensionali (Tabella 1.2), con un intervallo di frequenze in Hz diverso da quello su cui si cadrebbe mantenendo il passo di campionamento originale: si ricordi infatti che f = /Tc . La decimazione sposta la frequenza di Nyquist, riducendola di un fattore pari a quello di decimazione. Pertanto prima di decimare si eettua il necessario pre-ltraggio passabasso anti-aliasing, atto ad eliminare dai dati tutte le componenti di frequenza superiore alla nuova frequenza di Nyquist.

1.3.2

Filtraggio via equazione alle dierenze

Supponiamo di voler ltrare una sequenza col ltro bpf_m. Il ltraggio si si esegue fornendo in input alla function filter i coecienti hm, lunico coeciente di tipo a uguale a 1 ed i dati da ltrare: dsfed=filter(hm,1,ds); Il nome suggerito per il vettore dei dati ltrati richiama il fatto che provengono da dati ds e sono filtrati via equazione alle dierenze. Il vettore di dati ltrati, come si verica con length, ` lungo come linput, cio` ha una lunghezza e e di 8192 campioni. Per comprendere che cosa questo comporti, conviene innanzi tutto gracare i dati ltrati e specialmente la testa della sequenza: plot(dsfed(1:100)) Si nota chiaramente che ` presente un transitorio iniziale e questo ` in accordo e e col fatto che filter calcola loutput partendo dal primo passo temporale e assumendo condizioni iniziali nulle: i valori passati, cio` antecedenti a n = 0, e della sequenza di ingresso al ltro FIR sono presi uguali a zero; pertanto un numero di campioni delloutput pari allordine del ltro ` aetto dal transitorio e iniziale. Al fondo della sequenza ltrata non si nota invece niente che abbia laspetto di un transitorio: lo studente verichi questo con un graco degli ultimi 100 punti (indici end-99:end). Ci` signica che filter si ferma allultimo o campione della sequenza di ingresso. La percezione dellavvenuto ltraggio si ha calcolando e gracando lo spettro di ampiezza della sequenza di dati ltrati e confrontandolo con quello dei dati ds originali. Sceglieremo sempre nfft=N; calcoleremo come fatto nella sottosezione 1.2.4 lo spettro dei dati ds; poi faremo lo stesso con dsfed: DSFED=fft(dsfed,nfft); modDSFED=abs(DSFED);

1.3. FILTRAGGIO NEL DOMINIO DEL TEMPO loglog(f,modDSFED)

35

Il vettore frequenze ` lo stesso utilizzato per plottare modDS perch le due fft, e e di ds e dsfed, hanno la stessa lunghezza, che ` pari al numero di dati, ossia e 8192. Si vede dal graco fatto che i picchi, corrispondenti a frequenze non incluse nella banda passante del ltro usato, vengono considerevolmente attenuati: la sola componente frequenziale trasmessa ` quella a frequenza f = 3.5 102 e Hz (periodo 28.6 s) e infatti la banda passante copre, per il ltro bpf_m e con Tc = 5 s, lintervallo da 2.15 102 a 4.64 102 Hz (periodi da 21.6 a 46.5 s). Lo spettro permette di osservare periodi da 10 s a 11.4 ore, corrispondenti rispettivamente alla frequenza di Nyquist ed alla prima frequenza non nulla in assenza di padding di zeri, N1 c (frequenza di Rayleigh). T Suggerimento: gracare insieme modDS e modDSFED in colori diversi. Inoltre fare un graco del modulo quadro dello spettro in dB (gracare 20 log 10(modDS), ecc...), per poter ragionare sullattenuazione.

Scartando i primi Mf 1 = 54 campioni delloutput (cio` conservandone 8192e 54=8138) e ricalcolando lo spettro su 8192 valori di frequenza, si pu` notare che o dal punto di vista spettrale quei 54 dati iniziali cambiano poco o nulla il risultato. Ecco il procedimento: dsfed_ok=dsfed(55:8192); DSFED_OK=fft(dsfed_ok,nfft); (DFT su 8192 punti; padding automatico) modDSFED_OK=abs(DSFED_OK); loglog(f,modDSFED_OK)

1.3.3

Filtraggio mediante convoluzione lineare

Abbiamo detto che escludendo dal risultato del ltraggio i transitori iniziale e nale, con Mf = 55 campioni per la risposta allimpulso del ltro e N = 8192 dati, la convoluzione lineare contiene N Mf + 1 = 8192 55 + 1 = 8138 valori. Accettando invece i transitori iniziale e nale la convoluzione ` pi` lunga: vie u sto che ogni coda di transitorio dura quanto lordine del ltro, si avranno (N Mf + 1) + (Mf 1) = N = 8192 valori includendo il solo transitorio iniziale (` il caso corrispondente alluso di filter) e (N Mf + 1) + 2(Mf e 1) = N + Mf 1 = 8192 + 55 1 = 8246 valori includendo sia il transitorio iniziale, sia quello nale. Questultimo caso rappresenta appunto il comportamento della function conv che implementa la convoluzione lineare: questo lo si

36 vede dando i comandi


25

CAPITOLO 1. ESERCITAZIONI GUIDATE

dsfconv=conv(hm,ds); length(dsfconv) il cui risultato ` proprio 8246. Il nome dsfconv ricorda che sono dati ds filtrati e via convoluzione). Ora grachiamo i primi 100 dati, notando il transitorio iniziale: plot(dsfconv(1:100)) Poi grachiamo gli ultimi 100 dati, notando il transitorio nale: plot(dsfconv(end-99:end)) e inne i valori di dsfconv corrispondenti agli ultimi 100 di dsfed, sovrapposti a quelli, notando che sono uguali: plot(dsfconv(N-99:N),m,LineWidth,2) hold on plot(dsfed(end-99:end),k) hold off Riassumendo, per tenere in considerazione solo la parte pulita delloutput, si dovr` a usando conv, scartare Mf 1 = 54 dati in testa e in coda alla serie ltrata, conservando cos` solo 8246-108 = 8138 dati (dal 55o al 8192o); usando filter, scartare Mf 1 = 54 dati in testa, conservandone 8192-54 = 8138 (dal 55o al 8192o). Facoltativamente, lo studente ripeta ora il ltraggio con filter e/o conv ed il calcolo dello spettro di ampiezza dei dati ltrati utilizzando gli altri due ltri, bpf_h e bpf_l, e commenti i risultati.

1.3.4

Filtraggio nel dominio della frequenza

Teoricamente, questa via prevedrebbe di fare il prodotto, elemento per elemento, della trasformata dei dati con quella della risposta allimpulso del ltro (cio` con e la risposta in frequenza); in seguito, antitrasformando, si otterrebbero i dati ltrati. Le singole trasformate, per evitare laliasing nel dominio del tempo, dovrebbero essere calcolate su un numero di campioni suciente a contenere tutta la lunghezza della convoluzione. Esiste per` in MATLAB una function che implementa questo metodo: si chiao ma fftfilt e ltra una sequenza usando un eciente algoritmo, basato sulla FFT, detto overlap-add (una tecnica adatta solo a ltri FIR). Supponendo di voler ltrare i dati sintetici ds col ltro bpf_m in questo modo e controllare poi
25 Conviene, come argomenti di input a questa function, dare prima il vettore pi` corto e u poi il pi` lungo: in questo modo essa lavora pi` velocemente. u u

1.3. FILTRAGGIO NEL DOMINIO DEL TEMPO

37

il risultato ottenuto con un graco temporale e uno spettrale, si proceder` cos` a : dsff=fftfilt(hm,ds,length(ds)); length(dsff) (risulta uguale a 8192: si tratta di un caso analogo a quello di filter, con transitorio iniziale); plot(dsff(1:100)) (visualizza il transitorio iniziale, che non ci preoccuperemo di scartare). Poi calcoleremo lo spettro di ampiezza come al solito DSFF=fft(dsff,nfft); modDSFF=abs(DSFF); e lo gracheremo, sovrapposto a quello dei dati ds, in colori diversi. Il vettore frequenze ` sempre lo stesso dei casi precedenti, con 8192 frequenze. Si e pu` vedere, dal graco che si ottiene, che il risultato ` quello atteso, in base alle o e frequenze contenute nei dati sintetici ed alla banda passante del ltro usato.

1.3.5

Filtraggio a fase nulla

Accenniamo al fatto che in MATLAB ` implementato anche un metodo di le traggio detto zero-phase forward and reverse (digital) ltering, tramite la function filtfilt (sintassi: y=filtfilt(b,a,x) con ovvio signicato dei simboli). Dopo aver ltrato i dati in avanti, la sequenza ltrata viene rovesciata e ltrata nuovamente; loutput della function (y) ` il risultato del secondo ltraggio, e rovesciato temporalmente. Il risultato ` uno sfasamento nullo, ossia nessun rie tardo; lo spettro di ampiezza dellinput viene modicato secondo il quadrato del modulo della risposta in frequenza del ltro. Nella function vengono pure applicati accorgimenti volti a minimizzare i transitori iniziale e nale. Lingresso deve essere pi` lungo di tre volte lordine del ltro, che pu` essere sia FIR, sia u o IIR. Con questo metodo non verranno eseguite prove.

1.3.6

Filtraggio con decimazione

Si voglia ora ltrare gli stessi dati sintetici ds, caratterizzati da Tc = 5 s, fN y = 101 Hz, in modo tale da preservare la componente di frequenza f = 4. 103 Hz; tale frequenza dovr` allora cadere entro la banda passante del ltro che a si user`. Si supponga inoltre di voler riutilizzare il ltro bpf_m, la cui banda a passante, espressa in termini di frequenza adimensionale , va da 0.1075 a 0.232. Con Tc = 5 s ci` implicherebbe frequenze da 2.15 102 Hz a 4.64 102 Hz, o cio` un intervallo da cui f ` esclusa. e e

38

CAPITOLO 1. ESERCITAZIONI GUIDATE

Se per` si decimano i dati con un fattore K = 8, col che il passo di campionao mento passa a Tc = KTc = 40 s, lo stesso intervallo di frequenze adimensionali viene riportato ad un intervallo di frequenze in Hz contenente f .

Vericare col calcolo: qual ` il nuovo intervallo? In particolare, quanto vale la e nuova frequenza di Nyquist? Risposte: il nuovo intervallo va da 2.69 103 a 5.80 103 Hz; la nuova frequenza di Nyquist ` 1.25 102 Hz. e Per il necessario pre-ltraggio anti-aliasing occorrerebbe un ltro ideale passabasso con frequenza di taglio uguale alla nuova frequenza di Nyquist dopo la 1 1 th decimazione, ossia, in termini adimensionali, c = 2K = 16 = 0.0625. Non essendo realizzabile un tale ltro ideale, e dovendosi accontentare di un passa basso con una banda di transizione di larghezza non nulla, si progetta un ltro avente un limite di banda passante inferiore al cuto teorico, in modo tale th che alla frequenza c il modulo della risposta in frequenza del ltro anti-aliasing realizzabile sia gi` scesa ad un valore accettabilmente basso. a La risposta allimpulso di un ltro passa-basso di ordine 54 con le caratteristiche desiderate ` contenuta nel le lpf_dec.mat. e Nella Fig. 1.4 ` riportato il modulo della corrispondente risposta in frequenza: e il limite di banda ` c = 0.05 (fc = 1. 102 Hz con Tc = 5 s, contro e 1.25 102 Hz del cuto teorico) e ad una frequenza adimensionale di 0.0625 lattenuazione ` gi` di circa 11 dB (arriva a 30 dB a c = 0.07). Esso rimuover` e a a dunque ecientemente tutte le componenti frequenziali di frequenza superiore alla nuova frequenza di Nyquist. Dopo aver copiato nella propria directory/cartella di lavoro il le e aver caricato nel workspace, con load, la corrispondente risposta allimpulso che si chiama haa, si dovr`: a eseguire la convoluzione dei dati ds col ltro anti-aliasing, scartando i transitori: Mf= length(haa)% K=8% dsfaa=conv(haa,ds);% length(dsfaa) dsfaa_ok=dsfaa(Mf:N);% length(dsfaa_ok) i filtri hannola stessa lunghezza fattore di decimazione dati filtrati con filtro anti-aliasing transitori scartati = 8,

eettuare la decimazione, prendendo soltanto un dato ogni K partendo dal primo ed andando no a...?

Considerando che N = 8192 e Mf = 55 (ordine Mf 1 = 54), avendo scar-

1.3. FILTRAGGIO NEL DOMINIO DEL TEMPO

39

10 0 10 20 30 40 50 60 70 80 90 100 110 120 130 0 0.1 0.2 1.1 1 0.9 0.8 0.7

20 log10 |H |

|H |
0.3 0.4 0.5

0.6 0.5 0.4 0.3 0.2 0.1

0 0

0.1

0.2

0.3

0.4

0.5

Figura 1.4: Filtro lpf dec Risposta in frequenza: modulo quadro in dB (a sinistra) e modulo in scala lineare (a destra), in funzione della frequenza adimensionale . tato i transitori disponiano di N Mf campioni su cui eettuare la decimaN Mf +1 = 819254 zione con un fattore K = 8. La parte intera, sia NN, di K 8 ` 1017, quindi lultimo campione da prendere nella decimazione ha indice e NN*K = 10178: NN=fix((N-Mf+1)/K) dsfdec=dsfaa_ok(1:K:NN*K);%decimazione length(dsfdec) Questi dati ds ltrati con ltro anti-aliasing e decimati saranno 1017; eseguire la convoluzione dei dati decimati col ltro passa-banda: dsfdecf=conv(hm,dsfdec); length(dsfdecf) Questi dati ds ltrati con ltro anti-aliasing, decimati e nuovamente ltrati saranno di lunghezza 1017+54 = 1071 con i transitori; poi i transitori verranno scartati: dsfdecf_ok=dsfdecf(Mf:NN);%transitori scartati length(dsfdecf_ok) ottenendo una lunghezza di 1071-54*2 = 963 senza transitori; calcolarne lo spettro di ampiezza e gracarlo nel modo usuale. Attenzione al fatto che il set di frequenze discrete non ` lo stesso: decimando cambia e infatti la frequenza di Nyquist.

40

CAPITOLO 1. ESERCITAZIONI GUIDATE

Lo spettro che si otterr`, confrontato con quello dei dati di partenza, mostrer` a a con chiarezza il tipo di ltraggio eettuato. Si noti come la decimazione com1 porti, tra laltro, un fattore K = 1 sullampiezza della trasformata. 8 Riessione: Nella pratica, leliminazione dei transitori in genere non ` strettae mente necessaria, perch come gi` detto dal punto di vista spettrale i transitori e a hanno un peso non determinante. Pertanto pi` semplicemente si potrebbe procedere come segue: u ...... Mf= length(haa) K=8 ......%dati di partenza e loro spettro di ampiezza su nfft=N frequenze dsfaa=conv(haa,ds); dsfdec=dsfaa(1:K:end); dsfdecf=conv(hm,dsfdec); dsfdecf=dsfdecf-mean(dsfdecf); nfft1=2048 SPE=fft(dsfdecf,nfft1); modSPE=abs(SPE); ff_Ny=1/(2*T_c*K); deltff=1/(nfft1*T_c*K); ff=0:deltff:2*ff_Ny-deltff; loglog(ff(1:nfft1/2+1),modSPE(1:nfft1/2+1),r) Si ottiene in questo modo un graco da zero alla nuova frequenza di Nyquist e su 1025 frequenze, a cui sovrapporre un analogo graco di modDS, da zero alla vecchia frequenza di Nyquist su 4097 frequenze. In questo caso i transitori non eliminati sono due perch conv viene usata due e volte. Se si confronta lo spettro ottenuto per ultimo con quello precedente in cui i transitori venivano eliminati, si nota che il loro eetto ` visibile, ma non e tale da alterare radicalmente il risultato.

Facoltativamente, lo studente ripeta ora il ltraggio con decimazione applicando gli altri due ltri.

1.4
1.4.1

Caratteristiche di un ltro numerico


Premessa

Lo scopo dellesercitazione ` lo studio, nei domini del tempo e della frequenza, e delle caratteristiche di un ltro FIR di cui inizialmente supporremo di conoscere

1.4. CARATTERISTICHE DI UN FILTRO NUMERICO la risposta allimpulso h[n], di lunghezza Mf .

41

Si inizier` col graco (stem plot ) della h[n]. Seguir` il calcolo della risposta in a a frequenza del ltro, data dalla DTFT di h[n], secondo la formula
Mf 1

H(ej ) =
n=0

h[n]ejn .

H(ej ) verr` valutato su un insieme sucientemente tto di frequenze angolari a discrete in 0 < , in modo da poterla gracare in modulo e fase (il che in pratica corrisponde a sostituire la DTFT con una DFT, calcolata via FFT). Supponendo poi, al contrario, di conoscere H(ej ) ma non h[n], si vedr` come ` a e possibile trovare la risposta allimpulso di un ltro FIR di cui sia nota la risposta in frequenza. La procedura verr` applicata ai quattro ltri FIR a fase lineare a utilizzati per lesercitazione precedente. Come ultima fase dellesercitazione, si studier` come operare per dedurre la risposta allimpulso di un ltro, conoscendo a linput e loutput (deconvoluzione).

1.4.2

Risposta in frequenza

Prima di tutto si visualizzi landamento delle risposte allimpulso dei quattro ltri con degli stem plots: ad esempio stem(hm) Si vede bene la simmetria pari dei coecienti attorno al punto n = (di che tipo (I, II, II o IV) ` questo ltro FIR a fase lineare?). e Lo studente operi analogamente sulle altre tre risposte allimpulso. Per il calcolo della risposta in frequenza sulla met` superiore del cerchio unitaa e rio nel piano z, ad esempio su NF2F T = 512 punti, listruzione ` per il ltro bpf_m [Hm,wm]=freqz(hm,1,512); dove largomento 1 sta per lunico coeciente di tipo a, nel caso di un ltro FIR: infatti la routine pu` calcolare la risposta in frequenza di un qualsiasi o ltro, sia IIR sia FIR. Il secondo output, wm, ` il vettore di frequenze angolari discrete nellintervallo e 0 < , su cui Hm viene campionata. La separazione fra i valori di ` e 2 2 = 1024 = 0.006134. NF F T Se si desiderasse invece in output il corrispondente vettore di frequenze adimensionali nellintervallo da 0 < 0.5, si assegnerebbe una frequenza di campionamento unitaria:
M1 2

= 27

42

CAPITOLO 1. ESERCITAZIONI GUIDATE

f_c=1 [Hm,num]=freqz(hm,1,512,f_c);

Ora si grachi il modulo della risposta in frequenza: ad esempio, per un graco del modulo quadro in dB in funzione di , una forma di rappresentazione molto usata, si scrive plot(wm,20*log10(abs(Hm))) oppure per un graco del modulo in scala lineare-lineare plot(wm,abs(Hm))

Per la fase si scrive plot(wm,unwrap(angle(Hm))) dove il ruolo della function unwrap ` quello di dispiegare la fase, eliminando e i salti di fase superiori a 2, che sono discontinuit` ttizie introdotte dalluso a della funzione arcotangente nel calcolo della fase stessa: la fase infatti ` calcoe lata proprio come arcotangente del rapporto tra la parte immaginaria e quella reale di Hm.

Lo studente ripeta via via la procedura anche per gli altri tre ltri, esaminando ogni volta i graci ottenuti.

Riessioni Le gure per i moduli delle risposte in frequenza concordano con quelle date nella sezione 1.3? Con quale metodo presumibilmente sono stati progettati i ltri? Quale minima attenuazione si ha tra banda passante e banda oscura (si osservi, per ciascun ltro, il graco in dB)? Nello stesso graco, quanti dB sono ampie allincirca le oscillazioni in banda passante? Il ripple (si veda il graco in scala lineare) ` maggiore in banda passante e (p ) o attenuata (s )? Qual `, approssimativamente, il rapporto e
p s ?

Qual`, approssimativamente, la larghezza delle bande di transizione? e A proposito della fase: si pu` aermare che essa ` lineare? o e Con quale limitazione?

1.4. CARATTERISTICHE DI UN FILTRO NUMERICO

43

Come si dedurrebbe dal graco il ritardo di fase in numero di campioni, introdotto dal ltro sul segnale in uscita?

1.4.3

Risposta allimpulso

Intendiamo qui ricavare, nota che sia la risposta in frequenza di un ltro, la corrispondente risposta allimpulso. A questo scopo occorre, anzich` la risposta e in frequenza su frequenze angolari discrete 0 < (met` superiore del cera chio unitario nel piano z), che nel nostro esempio ` composta da 512 campioni, e lanalogo vettore con la lunghezza e le caratteristiche che sarebbero tipiche di una DFT ricavata via fft: un vettore, cio`, esteso a frequenze angolari discrete e nellintervallo < e soddisfacente la condizione di simmetria della trasformata per la realt` di h[n]. a

Nellesempio con 512 campioni, la trasformata completa, sia Hm_trasf, ne conta N = 1024. Per averla basta usare freqz con lopzione whole: [Hm_trasf,wm_trasf]=freqz(hm,1,1024,whole); Ora baster` prendere la trasformata inversa su 1024 punti, mediante la function a ifft: hm_comp=ifft(Hm_trasf,1024); Il vettore ottenuto ` lungo 1024 punti ed ` complesso, ma si osserva che le e e parti immaginarie dei vari elementi sono trascurabili (quindi si tratta in realt` a di un vettore reale) ed inoltre solo i primi cinquantacinque campioni sono diversi da zero (entro gli errori di approssimazione numerica). Inoltre essi risultano, come ci si attendeva, uguali a quelli della risposta allimpulso hm, da cui Hm era stata originariamente calcolata. Ci` ` vericabile anche con uno stem plot: oe hm_comp_r=real(hm_comp(1:55)); stem(hm_comp_r) che ` identico allo stem plot di hm. e

1.4.4

Deconvoluzione

La deconvoluzione ` loperazione inversa alla convoluzione. Proviamo ad utilize zarla per trovare la risposta allimpulso del ltro usato, conoscendo loutput e linput (si noti che linput deve contenere i transitori iniziale e nale, ossia la convoluzione completa). La function da usare ` deconv e la sintassi ` e e

44 [Q,R]=deconv(B,A)

CAPITOLO 1. ESERCITAZIONI GUIDATE

dove Q ` il risultato e R il residuo, di modo che e B=conv(A,Q)+R restituirebbe B. Infatti loperazione ` in sostanza una divisione polinomiale, in cui B ` il divie e dendo, A ` il divisore, Q il quoziente e R il resto. e

Per riottenere hm da dsfconv e ds quindi scriveremo [hm1,r]=deconv(dsfconv,ds); Cos` vericheremo che il resto ` nullo e hm1 ` uguale a hm. e e

1.5
1.5.1

Progetto di ltri FIR equiripple


Premessa

Lo scopo dellesercitazione consiste nel progettare ltri FIR equiripple a fase lineare, di tipo passa banda, passa alto e passa basso. Si inizia progettando un ltro che riproduca uno di quelli usati nelle esercitazioni precedenti, e precisamente bpf_m. Si tratta, ricordiamo, di un passa-banda di ordine Mf 1 = 54, i cui limiti di banda passante sono 0.1075 0.232. La fase ` lineare. Dallesame della curva del modulo quadro della risposta in e frequenza del ltro bpf_m, gracato in dB (cfr. sezione 1.4), si evince che lattenuazione minima da richiedere in banda oscura ` rs = 30 dB. Il ripple e (ampiezza delloscillazione ammessa in banda passante) ` invece meglio leggibile e nel graco del modulo della risposta in frequenza in scala lineare: si vede che esso deve essere inferiore a 0.1 (diciamo p =0.095). Nello stesso graco si vede abbastanza bene anche lampiezza delle bande di transizione, che deve essere pari a 0.02 unit` di frequenza adimensionale . a Abbiamo cos` denito le speciche del ltro da progettare; riassumendo: tipo di ltro (passa-banda con ununica banda passante); ordine pari e uguale a 54; limiti di banda passante in unit` adimensionali 0.1075 0.232; a larghezza delle bande di transizione, 0.02 unit` adimensionali; a

1.5. PROGETTO DI FILTRI FIR EQUIRIPPLE fase lineare;

45

ampiezza della risposta desiderata in banda passante 1 e relativo ripple p = 0.095 al massimo; attenuazione minima in banda oscura rs = 30 dB (ampiezza desiderata nulla). In base a queste speciche verr` eettuato il progetto passa-banda; in seguito a verranno eettuati anche progetti passa-basso e passa-alto.

1.5.2

Procedura di progetto: un passa-banda

La function di MATLAB che implementa il progetto equiripple ` firpm (infatti e il metodo utilizzato si rif` al cosiddetto algoritmo di Parks e McClellan). In a input la function richiede, per un generico ltro multibanda: lordine n scelto per il ltro; un vettore f0 di frequenze, comprese tra 0 e 1 Hz inclusi, esprimente i limiti delle bande passanti e attenuate; i valori di tali frequenze sono, 1 quindi, relativi al caso, di default in MATLAB, in cui si abbia fN y = 2Tc = 1 Hz, cio` Tc = 0.5 s, fc = 2fN y = 2 Hz (si tratta di un modo di e normalizzare le frequenze) 26 . Per un ltro che, come il nostro, sia un passa-banda con una sola banda passante, il vettore frequenze conterr` allora: a 0 come primo valore; il limite superiore della prima banda attenuata (espresso secondo la normalizzazione di default in MATLAB) come secondo valore; il limite inferiore dellunica banda passante come terzo valore; il limite superiore dellunica banda passante come quarto valore; il limite inferiore della seconda banda attenuata come quinto valore; il limite superiore della seconda banda attenuata, cio` 1 (la frequenza e di Nyquist) come sesto ed ultimo valore. Lo studente verichi che i valori numerici di frequenza da inserire in f0 sono 0, 0.1750, 0.2150, 0.4640, 0.5040, 1; un vettore a0 di valori del modulo (ampiezze) della risposta in frequenza desiderata, in corrispondenza di ciascuno dei valori di frequenza prima specicati: nel caso del nostro passa-banda tali valori saranno 0 in corrispondenza dei limiti delle bande attenuate e 1 in corrispondenza dei limiti della banda passante, cio` saranno 0, 0, 1, 1, 0, 0; e
26 Finora abbiamo sempre utilizzato le citandole come frequenze adimensionali ottenute mediante prodotto delle frequenze f [Hz] per il passo di campionamento Tc [s]. Un altro modo di vedere le ` come frequenze normalizzate espresse in Hz, riferite ad un Tc = 1 s: un modo e di normalizzare diverso da quello qui usato da MATLAB.

46

CAPITOLO 1. ESERCITAZIONI GUIDATE un vettore w0 di pesi per la minimizzazione dellerrore massimo nelle varie bande (uno per ogni banda). Nel nostro caso, fatto 1 il peso in banda passante, quelli nelle due bande attenuate saranno uguali fra loro e pari al rapporto p , dove p e s sono le ampiezze del ripple in banda passante s e nelle bande attenuate, rispettivamente. Ora, per`, bisogna dire che ` noto direttamente p ma non s , il quale o e ` dato implicitamente come attenuazione minima rs in dB. Pertanto si e dovr` utilizzare la relazione che lega s a rs e dedurre il valore del peso da a inserire nella function di progetto: la relazione ` 20 log10 s = rs , ossia e s = 10rs/20 . Lo studente verichi che si ottiene s = 0.0316, da cui il vettore w0 conterr` 3, 1, 3. a
p s

= 3.0. Pertanto

In denitiva il progetto richieder` le assegnazioni di n e dei vettori f0, a0, w0, a seguite dallo statement hm_pm=firpm(n,f0,a0,w0); che d` in output la risposta allimpulso del ltro cos` progettato. a Lo studente in seguito verichi con uno stem plot di hm_pm e per confronto diretto dei valori che la risposta allimpulso ottenuta ` uguale (alla quarta cifra e decimale!) 27 a quella a suo tempo proposta, hm.

1.5.3

Stima dellordine minimo

Nel caso particolare sopra presentato, si conosceva gi` lordine del ltro da a progettare. Normalmente per` questo parametro non ` noto ed occorre, per o e evitare lunghi e faticosi tentativi, stimare a priori lordine minimo atto a soddisfare determinate richieste sul comportamento del modulo della H(ej ), ossia determinate speciche di progetto. Ci` ` possibile, in MATLAB, con la function firpmord, il cui uso pu` essere o e o considerato preliminare a quello di firpm. In output a firpmord si ottengono i parametri di input per firpm; bisogna solo fare attenzione al fatto che talvolta, anzi spesso, si ha una sottostima dellordine, per cui occorrer` una verica a a posteriori sul comportamento della risposta in frequenza del ltro progettato, che non ` detto si attenga eettivamente alle speciche di partenza. Spesso e sar` necessario aumentare un poco lordine rispetto al valore pre-stimato, per a ottenere i risultati voluti. La sintassi di firpmord ` la seguente: e [n0,f0,a0,w0]=firpmord(f,a,dev,f_c)
27 Si

ricordi la possibilit` di formati di visualizzazione diversi dei valori numerici. a

1.5. PROGETTO DI FILTRI FIR EQUIRIPPLE

47

dove n0 ` appunto lordine stimato e gli altri parametri di output sono quelli da e dare in input a firpm, nella forma discussa nella sottosezione precedente. In input a firpmord, le frequenze-limite f per le bande di interesse sono date in una forma pi` comoda e essibile di prima. Tanto per cominciare, con f_c u si pu` specicare una frequenza di campionamento diversa dal default (che ` o e f_c= 2fN y = 2 Hz e quindi corrisponde a Tc = 0.5 s come per firpm). Perci` o dando f_c=1 si possono poi usare per i limiti di banda i valori numerici in termini di , di cui ci siamo serviti nelle esercitazioni precedenti 28 . In secondo luogo, la frequenza zero e quella di Nyquist sono omesse e si danno solo, in questo caso passa-banda, gli estremi delle due bande di transizione: limite inferiore della prima banda di transizione: 0.1075 - 0.02 = 0.0875; limite superiore di essa, ossia limite inferiore della banda passante: 0.1075; limite inferiore della seconda banda di transizione, ossia limite superiore della banda passante: 0.232; limite superiore della seconda banda di transizione: 0.232 + 0.02 = 0.252. In altre parole, i valori 0 e fN y sono impliciti in questo caso. Le corrispondenti ampiezze a sono date in numero di una per ogni banda, quindi in questo contesto sono tre: 0, 1, 0. In generale la lunghezza del vettore f ` due volte la lunghezza e a, meno due. Il vettore dev contiene inne i per le varie bande: per noi avr` tre elementi, a di cui il primo e lultimo uguali fra loro: 0.0316, 0.095, 0.0316. Lo studente provi ad usare firpmord, seguito da firpm, nel caso del ltro bpf_m, ed a correggere via via il valore dellordine, controllando ogni volta (anche solo con un graco di |H(ej )| da confrontare ad occhio con quello di riferimento del ltro bpf_m) le speciche eettive cui soddisfa il ltro ottenuto, no a riportarsi al valore precedentemente scelto e atto a soddisfare le speciche pressate, ossia n=54. Si rammenti che: nel caso di un ltro passa-banda si possono avere soluzioni non equiripple, che pur soddisfacendo il criterio minimax sono irregolari e quindi ritenute non idonee;
28 Se si preferisse, nel caso in cui si conosca leettivo passo di campionamento dei dati cui il ltro verr` applicato, dare limiti in termini di frequenze analogiche, basterebbe assegnare a 1 alla frequenza di campionamento un valore pari a T , dove Tc ` il passo di campionamento e c stesso.

48

CAPITOLO 1. ESERCITAZIONI GUIDATE per rimanere nellambito dei ltri di Tipo I, si aumenta sempre lordine di 2 unit` alla volta. a

1.5.4

Progetto di ltri passa-basso e passa-alto

Il ltro passa-banda bpf_m ha una banda passante e due bande oscure. Un ltro passa-basso o passa-alto avr` invece una sola banda passante e una sola a banda oscura. Gli argomenti in ingresso a firpm vanno modicati in accordo con questo fatto. Per esercizio, lo studente provi a progettare: un passa-basso di ordine 350, atto a rimuovere da dati campionati con Tc = 60 s tutte le componenti di periodo inferiore a 18 minuti; i pesi per la minimizzazione siano 1. in banda passante e 3. in banda attenuata e la banda di transizione sia ampia 0.003 unit` di ; a un passa-alto analogo, atto a rimuovere dagli stessi dati le componenti di periodo superiore a 1.5 ore. Allo scopo prepari in entrambi i casi un M-le apposito, prevedendo anche il graco della risposta in frequenza in dB, utile per il controllo delle performances del ltro progettato. Generati poi dei dati sintetici con Tc = 60 s e quattro sinusoidi di periodi T = 6 , 12 , 120 , 300 , pi` un fondo di rumore bianco gaussiano, provi a ltrare u ed osservi la forma del segnale ltrato nel dominio del tempo, in confronto con quella del segnale originale.

1.6
1.6.1

Metodi di stima dello spettro di potenza


Premessa

Lo scopo dellesercitazione ` una panoramica dei principali metodi implementati e in MATLAB per la stima dello spettro di potenza di una sequenza di dati casuali. Si esamineranno: metodi non parametrici: periodogramma semplice e modicato, metodo di Welch, metodo multitaper (MTM);

1.6. METODI DI STIMA DELLO SPETTRO DI POTENZA metodi parametrici: AR (autoregressivo) alla Yule-Walker, di Burg, della covarianza, della covarianza modicata.

49

Verranno invece tralasciati i metodi ad alta risoluzione, come MUSIC e EV, che pure sono disponibili nel pacchetto software. Di ogni metodo si vedr` la sintassi in MATLAB e si esamineranno brevemena te le prestazioni. I dati, sintetici, verranno generati al momento dellutilizzo; comprenderanno o rumore bianco gaussiano soltanto, o una sinusoide in rumore bianco, o due sinusoidi in rumore bianco. Sarranno utili gli M-le preparati allinizio, dat_rumb e dat_sint_2sin, da modicare di volta in volta secondo le esigenze delle varie prove. Va benissimo (una scelta vale laltra!) continuare a porre Tc = 5 s. Meglio mettere sempre in testa ai le le due istruzioni rand(state,0) randn(state,0) in modo da ricondurre ogni volta allo stato iniziale i generatori di numeri casuali. Si ricordi sempre che ai dati va tolta preliminarmente la media, specie se interessano le basse frequenze.

1.6.2

Metodi non-parametrici

Periodogramma Si tratta di una stima polarizzata, di elevata varianza e non consistente. Il periodogramma (alla Schuster) pu` ottenersi semplicemente prendendo il moo dulo quadro della fft dei dati e dividendo per il numero dei dati stessi. In MATLAB ` per` disponibile una function apposita: periodogram, che pere o mette di stimare sia il periodogramma semplice, sia quello modicato, perch e consente di applicare alla sequenza una nestra scelta dallutente. La sintassi della function ` (in sintesi): e [Pxx,f]=periodogram(x,window,nfft,fc,range); dove Pxx e f sono, rispettivamente, densit` spettrali e frequenze di output; a

50

CAPITOLO 1. ESERCITAZIONI GUIDATE x ` la sequenza di input di lunghezza N ; e window ` la nestra, che deve avere la stessa lunghezza N del segmento di e dati impiegato; sono disponibili nestre rettangolare (boxcar o rectwin), di Hamming (hamming), di Hann (hanning), ecc...; Il default ` una nestra rettangolare lunga come la sequenza. e nfft ` la lunghezza della fft; sar` maggiore o uguale a N ; sceglieremo e a una potenza di due, per lecienza dellalgoritmo; fc ` la frequenza di campionamento, pari a 2fN y = e
1 Tc ;

il default ` 1 Hz; e

range pu` essere twosided o onesided; per dati reali il default ` o e onesided. Se si desidera omettere uno o pi` degli argomenti di input (per attenersi al u default), bisogna ricordare che ad ogni argomento che non sia range e che cada in mezzo ad altri che invece vengono specicati, occorre tenere il posto con un vettore vuoto ([]). Facciamo un paio di esempi: si vuole specicare solo x e window: [Pxx,f]=periodogram(x,window); si vuole specicare x, nfft e fc: [Pxx,f]=periodogram(x,[],nfft,fc);

La normalizzazione spettrale pu` variare. o Se si specica un valore di fc, MATLAB assume che ci si voglia ricondurre alla nozione analogica di spettro, X(f ) con f [Hz]; pertanto divide |X[k]|2 /N per fc (cio` moltiplica per Tc ). e In questo caso le unit` per il graco spettrale sono [Hz] in ascisse, [poa tenza/(Hz)] in ordinate; potenza equivale a varianza, quindi a quadrato dellunit` di misura dei dati; a

se si vogliono usare le (N y = 0.5) si deve assegnare fc = 1; questo si ottiene anche ponendo fc uguale al vettore vuoto, []; se non si assegna fc, MATLAB assume che la variabile frequenziale in uso sia (in pratica assume fc= 2) e normalizza il periodogramma di conseguenza, dividendo |X[k]|2 /N per 2.

In questo caso le unit` per il graco spettrale sono: [radianti/campione] a in ascisse, [potenza/ (radianti/campione)] in ordinate.

1.6. METODI DI STIMA DELLO SPETTRO DI POTENZA

51

Inoltre, si ricordi che lo spettro one-sided ` in sostanza il doppio di quello twoe sided.

1. Per iniziare, possiamo calcolare il periodogramma semplice di una sequenza di rumore bianco, attenendoci alla normalizzazione |X[k]|2 /N , spettro two sided: generiamo dunque 64 campioni di rumore bianco gaussiano, a media nulla e con deviazione standard r = 1; calcoliamone poi lo spettro (nfft=1024); ripetiamo con 1024 campioni (nfft=1024). Facciamo graci lineari e in dB in funzione di f in Hz (avendo assunto Tc = 5 s); la quantit` da gracare nel secondo caso ` ovviamente 10 a e log(|X[k]|2 /N ). Riettiamo. Quale andamento dovrebbe avere teoricamente lo spettro di potenza e in che cosa se ne discostano gli spettri stimati? Le oscillazioni delle stime variano allaumentare di N ? Come? Perch? e Il valore mediato in frequenza di ciascuno degli spettri si accorda col valore teorico? Laccordo varia con N ? Qual ` il valore teorico espresso in dB? e ripetiamo con 256 campioni (nfft=1024);

Il livello medio delle oscillazioni in un graco in dB dovrebbe essere circa uguale al valore teorico in dB? In altre parole, media dei valori in dB e valore in dB della media sono uguali? 2. Proseguiamo aggiungendo al rumore con una sinusoide. Fissiamo i seguenti valori: ampiezza della sinusoide A = 5, frequenza angolare 0 = 0.4, 0 f0 = 2Tc = 4 102 Hz; rumore bianco gaussiano con varianza unitaria. (a) Eseguiamo prove con diversi valori di N . Con N = 40, calcoliamo il periodogramma (e sia Pxx), ponendo ancora nfft=1024. Calcoliamo la potenza media, che in base al Teorema di Parseval coincider` con la varianza del segnale (centrato). Se partiamo a da uno spettro two-sided Pxx della variabile x in versione nor2 malizzata a |X[k]| scriveremo N Power=sum(Pxx)/nfft mentre per uno spettro one-sided includeremmo un fattore 2:

52

CAPITOLO 1. ESERCITAZIONI GUIDATE Power=sum(Pxx)/nfft Facciamo il graco dello spettro in dB 29 . Da questo si vede bene che il picco ` basso e allargato. e Ripetiamo con 64 campioni (nfft=1024): vedremo il picco cominciare a restringersi. Ripetiamo con 256 campioni (nfft=1024): il picco si restringe ancora. Ripetiamo con 512 campioni (nfft=1024): ora il picco ` stretto e e alto. La forma del picco ` legata alle ben note caratteristiche del periodoe gramma. Come sappiamo, il valore atteso del periodogramma IN () non coincide col valore vero Pxx () ma con lintegrale di convoluzione di questultimo con la trasformata WB ej() della nestra triangolare di lunghezza 2N 1. Cos` lideale delta di Dirac, che si avrebbe nello spettro vero in corrispondenza della frequenza f di una sinusoide contenuta nei dati, ` sostituita da una copia di WB ej() , e il cui lobo principale ha larghezza nita non nulla e i cui lobi laterali sono responsabili del leakage di potenza verso frequenze anche molto lontane da quella della sinusoide. Il picco rivelato 30 si innalza sopra A2 2 e il fondo dovuto al rumore, r , di una ampiezza N4 , dove A ` lampiezza della sinusoide reale di frequenza f ed il fattore 4 deriva dal fatto che essa corrisponde a due esponenziali complessi di ampiezza A/2, centrati su frequenze +f e f . Ci` vale anche se sono presenti o contemporaneamente due o pi` sinusoidi. u (b) Ora esaminiamo linuenza del rapporto segnale-rumore. Mantenendo gli stessi parametri per la sinusoide e nfft=1024 per avere curve lisce, proviamo ad abbassare il rapporto segnale-rumore, portando r al valore 10: ripetendo lo spettro con 64 dati, che in precedenza erano sucienti per vedere il picco, si nota che il picco viene praticamente sommerso dal fondo. Se proseguiamo portando r a 100, il picco sparisce del tutto. Questo ` dovuto al declino del rapporto segnale-rumore in uscita, e che inizialmente era maggiore della soglia prescritta di 25, mentre qui e nel caso precedente scende sotto 25 (quanto vale nei tre casi?). (c) Se per` mentre alziamo r contemporaneamente alziamo anche A, o cos` da avere sempre lo stesso rapporto segnale-rumore assunto in zialmente, la sinusoide resta sempre visibile. 3. Ora occupiamoci di risoluzione, con un segnale fatto da due sinusoidi immerse in rumore. Assumiamo i valori seguenti: ampiezza della prima sinusoide A0 = 5, frequenza angolare 0 = 0.4, 0 f0 = 2Tc = 4 102 Hz;

29 Da 30 Ci

questo punto in poi, si intende che tutti i graci vengano fatti in dB. riferiamo al periodogramma two-sided, cio` alla quantit` |X[k]|2 /N . e a

1.6. METODI DI STIMA DELLO SPETTRO DI POTENZA

53

ampiezza della seconda A1 = 5, frequenza angolare 1 = 0.45, 1 f1 = 2Tc = 4.5 102 Hz; rumore bianco gaussiano con varianza unitaria. Calcoliamo il periodogramma. Fissiamo N = 40: constatiamo che la risoluzione ` insucente; e ripetiamo con N=256: ora le sinusoidi sono ben risolte.

ripetiamo con N = 64: siamo al limite delle possibilit` di risoluzione; a

Il periodogramma ha risoluzione ridotta rispetto al caso ideale: mentre due delta di Dirac sono sempre distinguibili, per quanto siano vicine, due picchi di larghezza nita non lo sono. Per risolvere due sinusoidi relativamente vicine in frequenza ` necessario che la loro separazione frequenziale e sia pi` grande della semilarghezza del lobo principale della WB ej() u centrata su ciascuna frequenza. Tale semilarghezza ` in genere denita e come semilarghezza a met` altezza e risulta circa 2 (fc /N = 1/(N Tc ) in a N termini analogici). In altre parole, per due sinusoidi di frequenze f0 e f1 , separate di f = f1 f0 , la condizione di risolvibilit` ` ae f > fc /N ossia N > fc /f che fornisce un limite inferiore approssimato per il numero di dati di cui disporre per risolvere due date sinusoidi: al crescere di N i picchi divengono pi` alti e stretti e quindi vi ` maggiore risoluzione. Nei nostri esempi, u e il criterio ` soddisfatto, perch fc = 2 101 Hz, f = 5 103 Hz, da e e cui N = 40; in eetti i due picchi sono appena distinguibili con N = 40, ma gi` con N = 64 la risoluzione ` suciente.. a e Naturalmente, nei ragionamenti precedenti conta anche il rapporto di ampiezza delle due sinusoidi: se una sinusoide ` molto pi` debole dellaltra, e u pu` essere disturbata non solo dal lobo principale della pi` forte, ma anche o u dai lobi laterali di questa, che nel periodogramma semplice non decrescono rapidamente allontanandosi da quello centrale. Inoltre, conta anche lentit` del rumore presente, ossia il rapporto segnale-rumore per ogni a sinusoide di ampiezza A che si voglia rivelare. Per il periodogramma semA2 e plice) sappiamo che si deve avere SN Ri = 42 25/N ; poich nei nostri r 2 dati abbiamo posto A0 = A1 = A = 5 e r = 1, abbiamo SN Ri = 6.25 e quindi con N = 40 campioni ci aspettiamo, come in eetti accade, di essere al limite di poter rivelare le singole sinusoidi. Concludiamo osservando che oltre i fatti descritti, ad allontanare lo spettro stimato da quello vero contribuiscono: lelevata varianza della stima, tipica del periodogramma, che non si ridurrebbe anche aumentando N ; il fatto che si campiona la trasformata di Fourier della sequenza su un set discreto di valori di frequenza (il che signica, tra laltro, che la

54

CAPITOLO 1. ESERCITAZIONI GUIDATE frequenza f della sinusoide presente nei dati in generale non coincide con una delle frequenze campionate fk ) 31 .

Signicativit` dei picchi a Per testare la signicativit` di un particolare picco, occorre il suo valore di a densit` spettrale e uno spettro di rumore (ipotesi nulla; spettro di fondo) contro a cui testarlo. Comunemente si assume che il fondo sia di rumore bianco (spettro piatto, valori spettrali indipendenti da f e pari alla varianza dei dati, se si denisce lo spettro come |X[k]|2 /N ); una ipotesi pi` sosticata, adatta a molti u spettri di variabili geosiche e, in generale, di variabili registrate in sistemi sici dotati di memoria, ` che si tratti di rumore rosso (processo autoregressivo di e ordine 1: AR(1)). Ricordiamo che lo spettro teorico AR(1) ` e Prr [k] = P0 (1 2 ) 1 + 2 2 cos(2k/N )

dove P0 ` il valor medio spettrale, uguale alla varianza dei dati, e ` lunico e e parametro del modello. In letteratura si suggerisce di adottare per esso = [1] + [2] , 2

dove compaiono i valori del coeciente di autocorrelazione, a lag 1 e 2, della sequenza di dati. Rappresentando sui graci spettrali il limite superiore cui il fondo di rumore pu` arrivare, ad un certo livello p % di condenza, si giudicano signicativi i o picchi che superano questo livello, detto di signicativit` al 1 p %. La formula a ` e 2 p, livello di signif. = spettro di fondo ; il risultato pu` dipendere dalla frequenza (rumore rosso) oppure no (rumore o bianco). Si noti che per trasformare, nel caso del rumore bianco, lo scalare livello di signicativit` in un vettore lungo come il vettore di frequenze e a quindi agevolmente gracabile, si usa la function ones. Supponiamo che la signicativit` scelta sia del 5 % (condenza al 95 %). Allora a ci` signica che scelte 100 frequenze a caso, solo 5 (una su 20) corrisponderebo bero ad un valore spettrale pi` alto del livello in questione, nellipotesi che si u tratti di rumore. Quindi se si guarda lo spettro e si vede che parecchi picchi
31 Il picco spettrale si avviciner` allaltezza prevista teoricamente, N A2 /4, solo se f ` coincia e dente o molto vicina ad una delle fk , cosa che accadr` o perch si ` scelta f opportunamente, a e e o perch la si ` scelta senza tener conto di ci` ma poi si ` fatto un campionamento in frequenza e e o e molto tto, mediante padding di zeri. Si ricordi comunque che il padding di zeri, in genere consigliabile per avere graci lisci e vedere tutti i dettagli degli spettri calcolati, ` solo un e articio che non altera la sostanza in fatto di risoluzione, la quale dipende dalla dimensione statistica del campione su cui basiamo la nostra stima, ossia da N .

1.6. METODI DI STIMA DELLO SPETTRO DI POTENZA

55

superano il livello, si pu` essere ragionevolmente certi (condenti) che si tratti o di picchi veri e non di rumore. Applichiamo ora questi concetti. 1. Con fondo di rumore bianco, troviamo il livello di signicativit` per lo a spettro dei dati stagionali di anomalie di SST nella regione NINO3 32 del Pacico, contenute nel le anom_nino3_stag.dat. Chimamiamo anoms questa variabile; operiamo al 95 % ed al 99.9 % di condenza. Allo scopo serve la function chi2inv (Chi-square inverse cumulative distribution function) che fa parte del Toolbox di Statistica di Matlab. Il programma per questo calcolo conterr` le istruzioni a load anom_nino3_stag.dat; anoms=anom_nino3_stag; anoms=anoms-mean(anoms); va=var(anoms) Tc=1/4;%years N=length(anoms); nfft=N; [pow,f]=periodogram(anoms,boxcar(N),nfft,1/Tc,onesided); power=pow/(2*Tc); Pbianco=va*ones(1,length(f)); fac_signif=chi2inv(.95,2)/2 semilogx(f,power,b,LineWidth,2) hold on semilogx(f,Pbianco,k--,LineWidth,2) semilogx(f,Pbianco*fac_signif,k,LineWidth,2) set(gca,Xlim,[min(f),max(f)]); set(gca,Ylim,[0,10]); hold off Tracciamo, con dierenti stili e colori le linee del fondo e dei due livelli di signicativit` su un graco, ad esempio semilogx (lineare in ordinate). a Quali picchi o gruppi di picchi superano il test al 95 %? Quali al 99.9 %? 2. Ripetiamo la prova, usando ora come fondo il rumore rosso. A questo ne servono le function modpar.m, che calcola il parametro in base ai dati, e fondorosso.m, che calcola lo spettro di rumore rosso con parametro e varianza uguale a quella dei dati. Aggiungiamo dunque al programma precedente le seguenti istruzioni: [Prosso,nurosso]=fondorosso(anoms,nfft); semilogx(nurosso/Tc,Prosso,r--,LineWidth,2) semilogx(nurosso/Tc,Prosso*fac_signif,r,LineWidth,2) Grachiamo sia la curva del fondo, sia quelle di signicativit`. a
32 Maggiori

dettagli su NINO3 sono dati nelle Esercitazioni libere.

56 Riessioni

CAPITOLO 1. ESERCITAZIONI GUIDATE

Il rumore rosso appare unipotesi pi` plausibile di quello bianco? u Vi sono picchi che passano il test con la presente ipotesi nulla? Se abbiamo un certo numero di punti nello spettro, quanti di questi possiamo aspettarci che superino accidentalmente il livello al 95 %?

Periodogramma modicato Per ridurre il leakage si usano nestre pi` graduali della rettangolare: questo u ` il cosiddetto periodogramma modicato, in cui si riduce laltezza dei lobi lae terali. Si paga per` un prezzo per questo: per queste nestre, P G assume o valori minori di 1. Mentre sar` ridotta la possibilit` di mascheramento di coma a ponenti deboli da parte dei lobi laterali di componenti forti, la rivelabilit` di a ogni picco diminuir` per il peggioramento del rapporto segnale-rumore in uscia ta. Lallargarsi/abbassarsi del lobo principale, responsabile in ultima analisi di tale diminuito rapporto, ridurr` inoltre la risoluzione. Dora in poi assumeremo a di eettuare un consistente padding di zeri per avere curve spettrali ben lisce, senza per altro ripeterlo ogni volta. Nel caso two-sided, il periodogramma modicato viene normalizzato come JN () = X(ej ) /(N U ), dove il fattore U ` la costante di normalizzazione per la nestra w[n], denita e N 1 1 come U = N n=0 w2 [n]; pertanto la scelta della nestra non inuenza la potenza media. Come esempio, confrontiamo il periodogramma semplice di un segnale con due sinusoidi immerse in rumore con un periodogramma modicato con nestra di Hamming. Assumiamo N = 128 e: ampiezza della prima sinusoide A0 = 0.1, frequenza angolare 0 = 0.225; ampiezza della seconda A1 = 1, frequenza angolare 1 = 0.3; rumore bianco gaussiano con r = 0.05. Questo ` un caso in cui il rapporto segnale-rumore ` buono per entrambe le come e ponenti; inoltre la loro separazione frequenziale sarebbe suciente a risolverle e vederle bene entrambe se fossero di ampiezza confrontabile. Invece una sinusoide ` molto pi` debole dellaltra e con il periodogramma semplice il suo picco e u viene praticamente nascosto dai lobi laterali relativi alla sinusoide pi` forte. I u lobi laterali si abbassano nel caso del periodogramma modicato, permettendo la rivelazione della componente debole. Si vede bene anche lallargamento dei picchi nel secondo caso, rispetto al primo.
2

1.6. METODI DI STIMA DELLO SPETTRO DI POTENZA Metodi di Welch e Bartlett

57

Con il metodo di Welch si divide la sequenza (supposta, come sempre, stazionaria) in sezioni e si mediano i corrispondenti periodogrammi, al ne di ridurre la varianza della stima spettrale e rendere la stima consistente. Sebbene loverlapping (sovrapposizione) tra le sezioni tenda ad introdurre informazione ridondante, leetto ` ridotto dalluso di nestre non rettangolari, che riducono e il peso statistico dei campioni di bordo (proprio quelli che poi vengono sovrapposti). Il metodo di Bartlett ` solo un caso particolare di quello di Welch, in e cui la nestra ` sempre rettangolare e non vi ` sovrapposizione delle sezioni. e e Luso contemporaneo di sequenze pi` corte della sequenza originale e di neu stre non rettangolari riduce molto la risoluzione, a causa del notevole allargamento del lobo principale della nestra spettrale; tuttavia la riduzione di varianza permette talvolta di ottenere risultati superiori a quelli ottenibili col periodogramma, specialmente quando il rapporto segnale-rumore ` basso. e Per vedere questo facciamo degli esempi; utilizziamo la function pwelch di MATLAB, la cui sintassi ` e [Pxx,f]=pwelch(x,window,noverlap,nfft,fc,range); e per la quale il signicato dei parametri ` lo stesso che per periodogram, e salvo che window, oltrech un vettore di pesi (campioni della nestra) pu` anche ese o sere un intero, nel qual caso viene usata di default una nestra di Hamming di lunghezza uguale a quellintero; noverlap ` il numero di campioni per la sovrapposizione; il default ` e e il 50 % della lunghezza della nestra e in genere quella ` la scelta pi` e u consigliabile. Anche le scelte per la normalizzazione spettrale sono le stesse del periodogramma e del periodogramma modicato. 1. Iniziamo col caso di Bartlett. Lavoriamo su N = 512 dati di rumore bianco gaussiano a varianza unitaria e ssiamo: (a) M = 512, K = 1 (periodogramma semplice); (b) M = 128, K = 4; (c) M = 32, K = 16. Osserviamo la progressiva riduzione di varianza. 2. Ora passiamo al pi` generale metodo di Welch. Analizziamo un segnale u di N = 512 campioni, fatto da rumore bianco gaussiano e due sinusoidi, con i seguenti parametri:

58

CAPITOLO 1. ESERCITAZIONI GUIDATE ampiezza della prima sinusoide A0 = 5, frequenza angolare 0 = 0.4, 0 f0 = 2Tc = 4 102 Hz; ampiezza della seconda A1 = 5, frequenza angolare 1 = 0.45, 1 f1 = 2Tc = 4.5 102 Hz;

rumore bianco gaussiano con varianza unitaria. 3. Confrontiamo tra loro (a) un periodogramma semplice, (b) una stima alla Bartlett con M = 128 e K =4, (c) una stima alla Bartlett con M = 64 e K =8,

(d) una stima alla Welch con nestra di hamming, overlap del 50 %, M = 128 e K =7. La riduzione di varianza rispetto al priodogramma ` evidente. Inoltre si e vede che a parit` approssimativa di K (un valore di 7 per il metodo di a Welch contro il valore di 8 del metodi di Bartlett) si ha circa la stessa varianza. Inne, sebbene la larghezza del lobo spettrale principale della nestra di Hamming usata nel metodo di Welch sia circa 1.46 volte quella del lobo spettrale principale della nestra rettangolare usata nel metodo di Bartlett, la risoluzione ` circa la stessa. Ci` ` dovuto al fatto che loverlap e oe del 50 % presente nel metodo di Welch consente a M di essere il doppio (128 anzich` 64). e Metodo MultiTaper Nel metodo MTM, si mediano stime spettrali relative a sequenze ottenute applicando ai dati nestre ortogonali ottimali ai ni della minimizzazione del leakage (discrete prolate spheroidal sequences o Slepian tapers). Il compromesso tra varianza delle stime e risoluzione avviene tramite la scelta del valore di un parametro, detto time-bandwidth product (sia nw ), direttamente connesso al numero di tapers usati per calcolare lo spettro (che ` 2nw + 1). Al crescere di nw , si mediano pi` stime e la varianza e u scende; nel contempo, per`, siccome la larghezza di banda di ogni taper o ` anchessa proporzionale a nw , i picchi nello spettro si allargano: c` e e maggiore polarizzazione e minore risoluzione; c` maggiore leakage. Per e ogni set di dati esiste, in genere, il miglior compromesso (il problema ` e trovarlo!). Valori comunemente usati per nw sono 3/2, 2, 5/2, 3, 7/2, 4. In MATLAB il metodo corrisponde alla function pmtm, la cui sintassi (riassumendo al massimo) ` e [Pxx,Pxxc,f]=pmtm(x,p,nfft,fc,method,p,range); Il signicato degli argomenti ` il solito, salvo che qui method specie ca come vengono combinate le varie stime spettrali (periodogrammi modicati) da mediare tra loro: la combinazione pu` essere lineare o no e o precisamente adapt: default, combinazione adaptive non lineare di Thomson;

1.6. METODI DI STIMA DELLO SPETTRO DI POTENZA unity: combinazione lineare con pesi unitari;

59

eigen: combinazione lineare con pesi uguali agli autovalori del problema variazionale di minimizzazione del leakage; noi ci atterremo al default. Per tutte le altre questioni non esplicitamente descritte si faccia riferimento a quanto detto per il periodogramma o, relativamente agli intervalli di condenza, per csd. Come esempio duso, possiamo rifare lo spettro di N = 512 campioni di rumore con due sinusoidi, usati prima (rumore: r = 1; sinusoidi: A0 = 5, A1 = 5, 0 = 0.4, 1 = 0.45) e confrontare il risultato con quanto si ottiene coi metodi trattati in precedenza. Scegliendo nfft=1024 come al solito facciamo tre prove: (a) p = 2, (b) p = 3, (c) p = 4. Vedremo lottima risoluzione ottenibile, particolarmente elevata per p = 2, al prezzo di una varianza un po pi` pronunciata. Lo studente verichi u che la potenza media ` conservata anche in questi casi. e

1.6.3

Metodi parametrici

I metodi parametrici possono dare migliore risoluzione di quelli non-parametrici, quando il segnale ` corto: ` questa la caratteristica pi` importante nelle applie e u cazioni di nostro interesse. Gli spettri che si ottengono possono avere picchi molto acuti, come conseguenza delluso di modelli all pole (autoregressivi). Non banale ` la scelta dellordine ottimale per il modello. Esistono criteri aue tomatici ma non sono implementati in MATLAB ai ni dellanalisi spettrale: nelle function di stima spettrale parametrica, lordine ` un parametro di input e che va specicato dallutente. Empiricamente, ` meglio fare varie prove, pare tendo da ordini bassi, che daranno spettri molto lisciati, e salendo via via, non oltrepassando per` mai la met` del numero di dati come ordine di grandezza. o a In MATLAB sono disponibili quattro metodi leggermente diversi tra loro nel dettaglio della stima dei parametri del modello: autoregressivo alla Yule-Walker (pyulear), di Burg (pburg), della covarianza (pcov), della covarianza modicata (pmcov).

60

CAPITOLO 1. ESERCITAZIONI GUIDATE

La documentazione on-line contiene una tabella che illustra le dierenze tra questi metodi. A ni pratici, si consiglia di scegliere pyulear se si hanno molti dati; se i dati sono pochi (meno di 200, indicativamente) e non molto rumorosi, ` meglio usare e pburg. Questo metodo d` modelli sempre stabili ma ha un difetto: per ordini a elevati si pu` avere line splitting (comparsa di picchi spuri) e per sinusoidi o immerse in rumore si pu` avere bias nella determinazione della frequenza. In o questi casi si pu` allora ricorrere al metodo della covarianza modicata, anche o se occasionalmente pu` dare modelli instabili. o Come regola generale, ` sempre meglio confrontare i risultati di pi` metodi. e u Tutte le function citate applicano le normalizzazioni discusse per il periodogramma. Tutte hanno sintassi simili: ad esempio [Pxx,f]=pburg(x,p,nfft,fc,range); dove p ` lordine del modello. e Per vedere una volta in azione questi metodi, possiamo calcolare con pburg lo spettro di quel segnale di 40 campioni per il quale il periodogramma non permise di risolvere le due sinusoidi (rumore: r = 1; sinusoidi: A0 = 5, A1 = 5, 0 = 0.4, 1 = 0.45) sebbene il rumore fosse relativamente basso. Constateremo che elevando sucientemente lordine, entro i limiti consentiti, si pu` arrivare a distinguere i due picchi; salendo ulteriormente si pu` vedere la o o comparsa di picchi spuri. Concluderemo ripetendo con pyulear e confrontando i risultati con quelli ottenuti da burg.

Capitolo 2

Esercitazioni libere
2.1
2.1.1

Analisi di una serie temporale


Premessa

Lo scopo dellesercitazione ` lanalisi di una tipica, breve serie temporale, dal e ` punto di vista statistico (semplice) e spettrale. E prevista tutta una serie di operazioni, al termine di ciascuna delle quali si giunge ad almeno un graco; per ognuna di esse, si consiglia di preparare un apposito script, in modo da potere agevolmente provarlo, eventualmente apportarvi modiche, rilanciarlo, magari usarlo come base per impostare un successivo script, ecc... Al termine del lavoro, lo studente dovr` preparare una concisa relazione, inclua dendo i graci prodotti, eventuali commenti personali e le risposte ai quesiti che verranno via via posti. Non ` invece n necessario, n richiesto includere nella e e e relazione i testi degli script. I dati che useremo sono geosici, climatologici per la precisione, e consistono nella serie temporale di medie mensili in gradi centigradi delle temperature superciali del mare 1 , mediate spazialmente sulla cosiddetta regione NINO3 (tra 50 Sud e 50 Nord di latitudine; tra 900 e 1500 Ovest di longitudine). La serie si estende dal 1871 alla prima parte del 2012; non vi sono dati mancanti. I le di dati sono sst_nino3_mensili.dat e time_nino3_mensili.dat; digitando >>load sst_nino3_mensili.dat. >>load time_nino3_mensili.dat.
1 Per indicare temperature superciali del mare si usa spesso lacronimo SST, che sta per sea surface temperature.

61

62

CAPITOLO 2. ESERCITAZIONI LIBERE

carichiamo le variabili nel workspace 2 , chiamandole sstm e tm rispettivamente. Successivamente riduciamo la lunghezza di questi vettori, conservando solo i dati dal 1880 al 2011 compreso (132 anni *12 mesi = 1584 dati). Per trovare gli indici iniziale e nale dei dati da conservare si procede cos` : usando il formato long per la visualizzazione dei numeri sullo schermo, si identica il valore di t che interessa; usando la function find si trova il corrispondente indice nel vettore t. Avremo cos` due vettori con 1584 campioni ciascuno.

2.1.2

Analisi statistica elementare

1. Eseguiamo, come prima cosa, un graco delle SST. Mettiamo un titolo e le label degli assi con le unit` di misura. a Tipicamente, un graco serve, oltre che per avere unidea generale di quale andamento e di quali valori la variabile assume, per identicare ad occhio derive, bruschi cambiamenti di valor medio o varianza, dati molto discosti dalla media e perci` sospetti (che ovviamente nei nostri dati NINO3 non ci o sono, essendo gi` il record frutto di elaborazione preliminare). Un graco a pu` mettere in evidenza anche dati mancanti, perch questi di solito sono o e marcati con valori fuori range per la variabile in questione; ad esempio: -999 per una variabile che tipicamente assuma valori tra +1 e -1, ecc... Osserviamo landamento della nostra serie e commentiamolo. 2. Ad occhio, stimiamo la media e la deviazione standard ed annotiamoceli. 3. Creiamo un istogramma dei dati, raggruppandoli in circa 30 bins (in questo modo lampiezza del bin ` circa 0.2 0 C). In MATLAB ci` si ottiene e o con la function hist: hist(sstm,30) (si vedano altre possibili opzioni con help). Mettiamo le label degli assi. Descriviamo la forma della distribuzione: appare normale (gaussiana)? Sembra avere una skewness da una parte o dallaltra? Variamo il numero di bins: che cosa cambia se si passa al doppio? Al quadruplo? Alla met`? a
dati di SST e di anomalie no al 1996 sono pubblici e scaricabili dal sito: http://paos.colorado.edu/research/wavelets/software.html sotto il nome di nino3data.asc. Per usarli come descritto nellesercitazione occorrerebbe rimuovere lintestazione (righe di commento iniziali). Gli ultimi 30 anni di dati sono invece reperibili su http://www.cpc.ncep.noaa.gov/data/indices/.
2I

2.1. ANALISI DI UNA SERIE TEMPORALE

63

4. Calcoliamo la media, la varianza e la deviazione standard dei dati. Confrontiamole con le stime ad occhio: erano ragionevoli? Inseriamo nel graco temporale le linee che rappresentano la media e -2, -1, 1, 2 deviazioni standard dalla media.

2.1.3

Autocorrelazione

Per lautocorrelazione e lautocovarianza di una sequenza di dati, in MATLAB si usano le due function xcorr e xcov. La prima stima lautocorrelazione del processo casuale che genera la sequenza in esame, a partire dal segmento di lunghezza nita di cui si dispone (sia N la sua lunghezza); la seconda esegue la stessa operazione, sottraendo per` prima ai dati o la media (perci` la stima ottenuta ` quella dellautocovarianza). In assenza di o e speciche in merito, loutput viene stimato per lag da (N 1) a +(N 1), per un totale di 2N 1 valori; lN -esimo campione delloutput corrisponde dunque a lag zero. Ciascuna di queste function accetta in input, oltre al nome del vettore di dati su cui operare, una ag character (data tra apici) che specica se si desidera in output una stima biased (cio` del tipo cxx ), unbiased (cio` del tipo c ) o e e xx ancora del tipo coe (xx = coeciente di autocorrelazione). In questultimo caso, la normalizzazione ` tale che e con xcorr, lautocorrelazione a lag zero vale 1; con xcov, lautocovarianza a lag zero vale 1. Oltre che lautocorrelazione o lautocovarianza, in output si pu` avere il vettore o dei lag corrispondenti. Se lo si desidera, si pu` specicare il lag massimo a cui o estendere il calcolo: ad esempio, se scriviamo maxlags=100 [ro,lags]=xcov(sstm,maxlags,coeff); otteniamo la sequenza dei coecienti di autocorrelazione stimata su lag da -100 a +100 (totale 201 valori), ed i corrispondenti lag (il lag zero ` il 1010 ). e Facciamo ora il graco di ro in funzione di lags: come appare? Vi sono delle oscillazioni, regolari o non regolari? Cade rapidamente o lentamente verso lo zero? Commentiamo.

2.1.4

Spettro di potenza

1. Facciamo un graco parziale dei dati, dal 1880 al 1900. Si osserva una periodicit` dominante? Se s` che ampiezza ha in gradi Celsius? Che a ,

64

CAPITOLO 2. ESERCITAZIONI LIBERE frequenza ha approssimativamente? Annotiamo queste osservazioni. 2. Togliamo ai dati la media e calcoliamo il periodogramma di tutta la serie, senza eettuare padding di zeri. Scegliamo una volta per tutte uno schema di normalizzazione spettrale. Le possibilit` pi` comuni, partendo da una sequenza x[n], sono le seguenti: a u |X[k]|2 /(N 2 ), dove 2 ` la varianza dei dati, se vogliamo rappore tare le nostre densit` spettrali di potenza two-sided a quelle di una a sequenza di rumore bianco con la stessa 2 , oppure 2|X[k]|2 /N (spettro one-sided ), scelta giusticabile col fatto che poi faremo i graci solo sullintervallo di frequenza (0, fN y ), oppure ancora 2|X[k]|2 /(N 2 ), se vogliamo rapportare le nostre densit` spettrali di a potenza one-sided a quelle di una sequenza di rumore bianco con la stessa 2 dei dati. Sebbene ai nostri ni una scelta valga laltra, decidiamo di adottare la seconda convenzione, |X[k]|2 /(N 2 ). Notiamo che otterremmo lo stesso risultato adottando la prima, |X[k]|2 /N , e standardizzando i dati prima del calcolo: anzi, questa ` probabilmente la strada migliore per evitare e errori. Facciamo un graco del periodogramma in scala lineare-lineare, con le frequenze in Hz da 0 a fN y in ascisse. Mettiamo le label degli assi con le corrette unit`. Osserviamo e commentiamo: qual ` il picco pi` prominena e u te? Ce ne sono altri? C` qualche traccia della periodicit` prima osservata e a su un piccolo intervallo di tempo? 3. A causa dellelevata ampiezza del ciclo annuale, ` dicile vedere gli altri e picchi. Proviamo a fare un graco log-log: che dierenze ci sono tra i due metodi per gracare lo spettro? Quali sono i punti forti e deboli di ciascuno? 4. Proviamo anche a fare un graco semilogaritmico, usando plot ma mettendo in ascisse il logaritmo in base 2 dei periodi (inversi delle frequenze) in anni: si tratta di una presentazione molto usata, che a volte ` di lettura e pi` immediata delle precedenti 3 . u Per questo compito ` comodo rifare innanzi tutto lo spettro ponendo la e frequenza di campionamento uguale a 12 anni1 (cio` esprimendola in e anni1 anzich` in Hz). In seguito, usando come variabile in ascisse non f e ma period=1.\f e prendendone il log2, si otterr` il graco voluto; natua ralmente la frequenza zero dovr` essere esclusa. Per maggiore chiarezza, a nel graco si usa poi spesso rovesciare lasse delle ascisse (cos` lordine dei valori ` quello delle corrispondenti frequenze) e riportare nelle sue label il e periodo, al posto del logaritmo in base 2 di esso. |X[k]|2 /N , (spettro two-sided ), oppure

3 Quanto alla scelta del modo di gracare lo spettro, (lineare, logaritmico...) non esiste un modo migliore in assoluto e tutto dipende sia dallampiezza dellintervallo di valori che si deve riportare sugli assi, sia, per le ordinate, dalla forma dello spettro. Quindi il consiglio `: e provare ogni volta vari modi!

2.1. ANALISI DI UNA SERIE TEMPORALE Ci` si ottiene con la sequenza di comandi che segue. o Xticks=2.^(fix(log2(min(period))):fix(log2(max(period)))); set(gca,XDir,reverse); set(gca,Xlim,log2([min(period),max(period)])); set(gca,XTick,log2(Xticks(:))); set(gca,XTickLabel,Xticks);

65

Esaminiamo il risultato ed assicuriamoci che il picco annuale sia allascissa di 1 anno! 5. Nellultimo graco fatto, restringiamo il range di valori in ordinata, lasciando debordare il picco annuale per vedere meglio il resto, di ampiezza relativamente bassa. Ad esempio, aggiungiamo alle precedenti la riga set(gca,Ylim,[0,21.5]); Si vedono altri picchi o gruppi di picchi? Quali sono i pi` pronunciati? u Qual ` landamento generale dello spettro? Appare piatto? e

2.1.5

Signicativit` dei picchi a

Seguendo la traccia di quanto fatto nelle esercitazioni guidate, 1. con fondo di rumore bianco, troviamo il livello di signicativit` per lo a spettro di NINO3, al 95 % ed al 99.9 % di condenza; stiamo attenti al fatto che con la normalizzazione adottata, dobbiamo riferirci a rumore bianco a varianza unitaria. Tracciamo, con dierenti stili e colori, le linee del fondo e dei due livelli di signicativit` sul graco semilogaritmico (quello con asse dei periodi a rovesciato); inseriamo una legenda per non confonderle. Quali picchi o gruppi di picchi superano il test al 95 %? Quali al 99.9 %? (Eventualmente ingrandire le gure, zoomare...) 2. Ripetiamo la prova, usando come fondo il rumore rosso e limitandoci al 95 % di condenza: grachiamo sia la curva del fondo, sia quella di signicativit`. Vi sono picchi che passano questo test oppure no? I picchi nel a range di periodi 2-7 anni lo passano? Se la risposta ` no, quale eetto pu` e o esserne responsabile?

2.1.6

Whitening

Si denisce whitening il processo di rimozione di certi segnali dominanti, per ottenere dati distribuiti pi` gaussianamente. u

66

CAPITOLO 2. ESERCITAZIONI LIBERE

Le variabili climatologiche come la nostra SST contengono al loro interno il ciclo stagionale, che per certi scopi occorre rimuovere: questa ` appunto una forma di e whitening. Un modo semplice di farlo (una sorta di ltraggio empirico) consiste nel calcolare, per dati mensili, la media di tutti i Gennai, di tutti i Febbrai ecc... e poi sottrarre da ogni dato mensile la media opportuna. Si ottengono cos` le anomalie del campo. Ad esempio: anomalia di Ottobre 1991 uguale SST di Ottobre 1991 meno media di tutti i mesi di Ottobre. Il le, contenente le anomalie da cui il ciclo annuale ` stato ltrato via, ` e e anom_nino3_mensili.dat. Accorciamo anche questa nuova serie in modo che si estenda dal 1880 al 2011 compreso con 1584 campioni, chiamiamo la variabile anom ed esaminiamone landamento. 1. Rifacciamo il calcolo della media e della deviazione standard; ripetiamo listogramma con gli stessi valori del numero di bins, usati prima. La distribuzione ` molto diversa da prima? e 2. Ricalcoliamo il coeciente di autocorrelazione e descriviamo i cambiamenti avvenuti. 3. Ricalcoliamo lo spettro, grachiamolo in scala semilogaritmica (ascisse: logaritmo in base 2 dei periodi in anni, asse rovesciato) assieme al fondo di rumore bianco gaussiano ed al relativo livello di signicativit` al 95 % a ed al 99.9 % di condenza. Essendo variato, rispetto al caso precedente, il valore assoluto dei picchi spettrali 4 , ssiamo un nuovo limite superiore per lasse delle ordinate, ad esempio set(gca,Ylim,[0,46]); 4. Confrontiamo quanto ottenuto coi risultati dellanalisi delle SST originali. Che dierenze si notano? Che ` successo al ciclo annuale ad alle sue e armoniche? Che si pu` dire della signicativit` dei picchi con periodi da o a 2 a 7 anni? C` altro da notare? e 5. Calcoliamo il fondo di rumore rosso ed i corrispondenti livelli di signicativit` al 95 % ed al 99.9 % di condenza; riportiamoli sul graco spettrale a semilogaritmico e facciamo considerazioni analoghe alle precedenti. Quali picchi risultano signicativi ora al 95 %? E al 99.9 %?

2.1.7

Rumore rosso

Facoltativamente, si confronti lo spettro teorico AR(1) con con lo spettro calcolato per una sequenza di rumore rosso, generata articialmente; si testi anche la formula per lautocorrelazione del rumore rosso, che teoricamente ` del tipo e l = l , dove 1 ` il coeciente di autocorrelazione a lag l = 1. Allo scopo: e 1
4 Questo innalzamento ` un eetto secondario della sparizione dei prominenti picchi legati e alla ciclicit` annuale, associata alla standardizzazione scelta. a

2.1. ANALISI DI UNA SERIE TEMPORALE si generi una lunga sequenza di rumore bianco, diciamo 216 dati 5 ;

67

si ltri la sequenza con un ltro IIR AR(1) con coeciente a1 = (e, naturalmente, a0 = 1); il valore di ` arbitrario, sia, per esempio, 0.72; e per questo si usi la function filter, ottenendo cos` il rumore rosso; si calcoli lo spettro con un metodo che consenta una buona riduzione della varianza della stima spettrale, come, ad es., il metodo di Welch con nestra hamming(128) e overlap del 50 %; essendovi molti dati, ci vorr` a probabilmente un poco di tempo per il calcolo; si grachi lo spettro e si sovrapponga al risultato della simulazione lo spettro teorico (attenzione alla normalizzazione: P0 deve essere uguale alla varianza dei dati di rumore rosso); si valuti anche lautocorrelazione (usando xcov con maxlags=100) e se ne confronti gracamente landamento con quello teorico, mettendo in ascissa solo lag positivi.

2.1.8

Stazionariet` a

Facoltativamente, lo studente esegua inne una semplice analisi spettrale evolutiva delle anomalie, prelevando, dalla serie di 1584 campioni, tre segmenti:

Gennaio 1890 - Dicembre 1919 (dal dato n. 121 al n. 480); Gennaio 1920 - Dicembre 1949 (dal dato n. 481 al n. 840); Gennaio 1960 - Dicembre 1989 (dal dato n. 961 al n. 1320). Calcoli tre spettri separati, con padding di zeri no a lunghezza 2048 per la trasformata. Tali spettri verranno gracati in scala semilogaritmica (con log2 del periodo in anni in ascisse; si mantenga lo stesso intervallo di valori dellasse delle ordinate usato prima, anche se uno degli spettri dovesse debordare, per poter fare i dovuti confronti). Insieme a ciascun spettro si grachi anche il fondo di rumore rosso ed i relativi livelli di signicativit` al 95 % e 99.9 % di a condenza. Si confrontino poi i tre spettri: i dati appaiono stazionari? Alla luce di quanto si nota, che considerazioni si possono fare a proposito dellanalisi condotta in precedenza?
5 Con

meno dati le basse frequenze cominceranno a deviare dallandamento teorico.

68

CAPITOLO 2. ESERCITAZIONI LIBERE

2.2
2.2.1

Analisi spettrale evolutiva: la CWT


Premessa

Lo scopo dellesercitazione ` lanalisi di una serie temporale con marcate cae ratteristiche di non stazionariet`, eseguita mediante la trasformata continua di a wavelet o CWT. Anche in questo caso ` richiesta una breve relazione sul lavoro e svolto. I dati da analizzare sono le stesse anomalie usate per lesercitazione precedente, ma questa volta su base stagionale anzich` mensile, cos` da presentare un e numero ridotto di campioni, pur mantenendo una durata del record climaticamente signicativa. I les sono anom_nino3_stag.dat e time_nino3_stag.dat e comprendono ciascuna 506 campioni. Chiameremo le variabili anoms e ts rispettivamente. Molte serie temporali mostrano caratteristiche di non stazionariet`, in geosica a ed in altri campi. In esse possono essere presenti periodicit` dominanti, che a per` possono variare nel tempo, in frequenza e/o ampiezza. Le anomalie di o SST del Pacico equatoriale ne sono un ottimo esempio: il modo dominante di variabilit` ` El Nio-Southern Oscillation (ENSO), su scala temporale di 2-7 a e n anni (interannual scale); sovrapposti a tale segnale vi sono uttuazioni a scala molto pi` lunga, dellordine dei decenni (interdecadal scale). u Si desidera quindi studiare le oscillazioni di corto periodo separatamente da quelle di lungo periodo 6 e la CWT ore proprio questa possibilit`. a Scelta una wavelet a forma di pacchetto donda (ad esempio la wavelet di Morlet complessa), ed immaginando, diciamo, di partire da una scala alla quale il supporto temporale della wavelet ` di 15 anni, troveremo la correlazione tra e essa ed i primi 15 anni della nostra serie; questunico numero complesso ci dar` a una misura della similarit` tra il pacchetto donda ed i dati dei primi 15 anni a (ossia ci dir`, con il suo modulo, quanto i dati oscillano in modo simile ad una a sinusoide della frequenza della wavelet e, con la sua fase, qual ` lo sfasamento e tra le due oscillazioni). In seguito faremo avanzare il pacchetto lungo tutta la serie, ottenendo la serie temporale della correlazione complessa con la wavelet alla scala 15 anni. Ripeteremo per tutte le scale di interesse. Variando la scala della wavelet varieremo automaticamente la sua frequenza, visto che il numero di oscillazioni contenuto nellinviluppo gaussiano resta costante. Otterremo cos` una mappa nel piano tempo-scala, traducibile in una mappa nel piano tempo-frequenza o tempo-periodo, che soddisfa le nostre richieste di alta risoluzione in frequenza a bassa frequenza (per studiare la variabilit` a di fondo),
6 La parola oscillazione ` qui usata per indicare una qualsiasi uttuazione nella serie, e che tende a ripetersi, indipendentemente dal fatto che tale ripetizione avvenga ad intervalli regolari di tempo o no; nel nostro esempio, El Nio ` senzaltro un segnale irregolare, ossia n e aperiodico.

2.2. ANALISI SPETTRALE EVOLUTIVA: LA CWT

69

alta risoluzione in tempo ad alta frequenza (per isolare eventi rapidi, temporalmente localizzati).

Di questa mappa, che costituisce la CWT, in realt` ci limiteremo qui ad esaminaa re il modulo quadro (scalogramma), ossia la potenza in funzione della frequenza (o, inversamente, del periodo) e del tempo, e di questa faremo un contour plot, per rivelare i modi dominanti di variabilit` contenuti nei dati e come questi a modi variano nel tempo. Valuteremo anche quali regioni del piano tempo-periodo corrispondano a potenza signicativa, al 95 % di condenza; ripeteremo la procedura con tre diverse wavelets madri, due complesse analitiche ed una reale. Seguir` un esame deta tagliato delle mappe ottenute: un esempio volto a fornire allo studente dele linee-guida da seguire nellinterpretazione di uno scalogramma. Lultima parte dellesercitazione riguarder` il calcolo e la discussione dello speta tro globale di wavelet. Ricordiamo qui che i calcoli per la CWT sono completamente indipendenti dal fattore dimensionale Tc (passo di campionamento dei dati); esso entra in gioco solo quando

il fattore di scala a (adimensionale) deve essere tradotto in scala s, che ` e un tempo, e quando

il fattore di scala a deve essere tradotto in frequenza f (espressa in Hz, o anni1 , ecc...) oppure in periodo P (espresso in secondi, o anni, ecc...).

2.2.2

Le function

Per svolgere lesercitazione, lo studente dovr` preparare uno script, descritto a nella prossima sottosezione, nella quale verranno chiamate alcune function che fanno parte di un software scritto dallautrice nel 2002 per scopi di ricerca e che svolgono, ciascuna, parte dei calcoli. La trasformata di wavelet viene eseguita nel dominio della frequenza, come trasformata DFT inversa del prodotto delle trasformate dei dati e della wavelet alle singole scale. Le function da usare sono w_transf.m, w_bases.m, w_param.m, w_signif.m, modpar.m. Vediamo ora quali operazioni svolge ciascuna (salvo lultima, della quale si parler` nella sottosezione sul programma da scrivere). a

70 w param.m

CAPITOLO 2. ESERCITAZIONI LIBERE

Questa function fornisce parametri caratteristici di alcune wavelets. Essa viene chiamata da w_transf e w_signif e servir` anche per lo script principale. La a sintassi di w_param ` e [consts]=w_param(mother,param); dove in input mother ` il nome della wavelet madre 0 () ( =tempo continuo adimene sionale), scelta tra Morlet, Paul e DOG, e param ` il parametro che la caratterizza: 0 nel caso della wavelet di e Morlet complessa (default 0 = 6), lordine m negli altri due casi (default: m = 4 per Paul, m = 2 per DOG; per questultima ` possibile anche e scegliere m = 6). In output, consts ` un vettore che contiene i valori di alcune costanti, tipici e della wavelet. A noi interessano: consts(1), che contiene dofmin (numero minimo di gradi di libert` o a degrees of freedom: 2 per le wavelets complesse e 1 per quelle reali), consts(2), che contiene C (costante che compare nella trasformata inversa), consts(3), che contiene il cosiddetto time decorrelation factor , utile per il calcolo di signicativit` per lo spettro globale, a consts(5), che contiene 0 (0) (valore che a sua volta ` utilizzato per la e trasformata inversa), consts(6) che ` il rapporto, diverso per ogni wavelet, tra inverso della e frequenza (periodo di Fourier P ) e scala s. Chiameremo questo rapporto anche k0 o fattore di Fourier ; e inne consts(7), che contiene il rapporto (sia c) tra s , il cosiddetto e-folding time che denisce il cono dinuenza, e la scala s.

w bases.m Questa function ` trasparente per lutente; viene chiamata da w_transf ad e ogni valore aa del fattore di scala a. La sintassi di w_bases ` e [daughter] = w_bases(om,aa,mother,param); dove in input, oltre alle quantit` mother e param gi` note ed alla particolare a a

2.2. ANALISI SPETTRALE EVOLUTIVA: LA CWT

71

scala considerata aa, compare il vettore om delle frequenze discrete k impiegate per lesecuzione della trasformata di wavelet nel dominio della frequenza. In output la function fornisce il vettore dei valori, campionati alle k , della trasformata analogica di Fourier della wavelet glia, alla scala aa. Le k sono le stesse frequenze a cui viene campionata la fft dei dati, prese nello stesso ordine.

w trans Questa function ` la principale, quella in cui viene calcolata la CWT. A tal ne, e in essa si applica ai dati un padding di zeri, per evitare laliasing nel tempo quando si calcola la CWT; la lunghezza del vettore dati passa da 506 a N = 512; si calcola la DFT dei dati via fft; a partire dai valori, dati in input, di a0 , j e J, si costruisce il vettore a dei fattori di scala come a = a0 2jj , con j = 0, J; si costruisce 7 il vettore om delle frequenze angolari k = ( N + 1, N ); 2 2
2 N k,

con k =

entro un loop sulle scale, ad ogni scala si chiama w_bases per calcolare la trasformata della wavelet glia alle frequenze k ; la si moltiplica termine a termine per la trasformata dei dati e poi si fa la DFT inversa di questo prodotto per ottenere i valori della CWT alla data scala; ` qui che il e padding di zeri eettuato protegge dallaliasing nel tempo; calcolata cos` tutta la matrice della CWT (wave), ci si libera dal pad ding, eliminando i valori con indice temporale superiore al numero di dati originario (506); si calcola lo scalogramma (power) come abs(wave).^2; si chiama w_param per ottenere i due scalari consts(6) e consts(7); dal vettore a e dal fattore di Fourier (consts(6)) si calcola il vettore period dei periodi adimensionali (inversi delle frequenze adimensionali o normalizzate); si calcola il cono dinuenza adimensionale (coi); a tal ne si calcola il rapporto tra consts(6) e consts(7); si moltiplica questo rapporto per il vettore degli indici temporali. Cos` si ottiene una serie temporale che ad ogni valore dellindice ri ad porta il valore di period critico (sia Pcoi ). Esso costituisce, nel piano
7 Si ricordi che ` del tutto arbitrario collocare, entro N valori di frequenza discreta, la e frequenza di Nyquist a + N o a N . 2 2

72

CAPITOLO 2. ESERCITAZIONI LIBERE tempo-periodo adimensionale, la linea che delimita il cono dinuenza 8 . In questo piano, si usa orientare lasse dei periodi verso il basso; allora tutta la regione che sta sotto la linea di coi (contenente periodi pi` grandi di coi) ` di dubbia adabilit`, perch entro essa power u e a e risulta ridotto rispetto al suo valore vero, a causa del padding di zeri applicato ai dati; per controllo del calcolo di wave, si esegue la trasformata di wavelet inversa, ricostruendo il segnale originario in base ai campioni di wave; si graca la serie ricostruita sovrapposta a quella originale, in una nestra separata; si calcola inoltre il mean square error ed il root mean square error di ricostruzione, nonch` la varianza della serie ricostruita, da confrontarsi con e quella dei dati di input (che post-standardizzazione vale 1).

La sintassi di w_transf ` e [wave,period,a,coi,power,xcheck] = w_transf(y,dj,a0,J,mother,param);

dove y ` la sequenza di input, dj ( = j ), a0 e J sono le costanti necessarie e alla costruzione del vettore dei fattori di scala, i cui valori verranno suggeriti pi` avanti, e le altre variabili sono gi` state descritte. u a

w signif.m Questa function si occupa dei tests di signicativit`. La sintassi di w_signif ` a e [signif,P_red] = w_signif(y,a,sigtest,rolag1,conflev,dof,mother,param); In input, y per certi usi della function ` la serie di input, per altri ` la varianza della e e serie stessa; se ` uno scalare, nella function si intende sia una varianza e e questo ` il nostro caso; e a ` il vettore dei fattori di scala; e sigtest pu` valere 0, 1 oppure 2; il valore 0 corrisponde ad un test del 2 o con dofmin gradi di libert` (2 per wavelets complesse e 1 per wavelets reali) a ed ` quindi adatto ai valori dello scalogramma, mentre il valore 1 conduce e ad un test sui valori dello spettro globale di wavelet. Il valore 2 rimanda ad un test che qui non sar` contemplato, relativo ad una procedura di a media dello scalogramma su un certo intervallo di scale;
8 Posto k = P/s e c = /s, scriviamo che ad un dato istante t, P s 0 coi (dimensionale) corrisponde a quella scala (dimensionale) scoi tale che s = cscoi = t = nTc , ossia scoi = a e ad nTc /c, da cui Pcoi = k0 scoi = k0 nTc . La corrispondente quantit` adimensionale ` Pcoi = c k0 n. c

2.2. ANALISI SPETTRALE EVOLUTIVA: LA CWT rolag1 ` il parametro per il modello AR(1) (fondo di red noise); e

73

conflev ` il livello di condenza per il test (default 95 %, ottenibile anche e ponendo conflev=-1); dof ` il numero di gradi di libert`, che dipende dal valore di sigtest (si e a veda la sottosezione che segue). Luscita signif ` il livello di signicativit` cercato. In output, oltre a signif, e a si pu` avere lo spettro di fondo, P_red (non ` per` previsto di gracarlo in o e o questa esercitazione, n` di usarlo ulteriormente). e

2.2.3

Il programma

In questa sezione verr` descritta la struttura del programma in linguaggio MAa TLAB che lo studente dovr` scrivere. In esso verranno svolti i calcoli necessari a allanalisi in CWT, chiamando le function sopra descritte, e verranno gracati i risultati; per i comandi graci ` disponibile lo script w_plot.m. e La linea da seguire nel costruire lo script ` la seguente. e 1. Fissare una wavelet madre mother (per iniziare, quella di Morlet complessa) ed il relativo parametro, param = 6. 2. Fissare, in base alla relazione scala-frequenza, il minimo fattore di scala di e interesse, amin = a0 . In generale, P = k0 s e f = k1s , dove k0 ` il fattore 0 di Fourier. Pertanto fmax = fN y = 1 1 1 = = , 2Tc k0 s0 k0 a0 Tc

2 ossia a0 = k0 . Nel caso della wavelet di Morlet con 0 = 6, k0 1, quindi a0 = 2; per una wavelet diversa, come Paul o DOG, il valore di a0 sar` diverso; nella Tabella 2.1 ` riportata lespressione analitica di k0 per a e varie wavelets. Il criterio qui indicato per la scelta di a0 ` ulteriormente e discusso al termine di questa sezione.

3. Caricare il set di dati. Il nome del le ` anom_nino3_stag.dat ed i teme pi corrispondenti sono time_nino3_stag.dat; ribattezzare anoms e ts i vettori ottenuti. 4. Calcolare la deviazione standard e la varianza di anoms. 5. Ridurre i dati anoms a media nulla (anche se tale media ` gi` molto vicina e a a zero).

74

CAPITOLO 2. ESERCITAZIONI LIBERE

Wavelet

k0
4

Morlet(0 = 6)

0 +

2 0 +2

Paul(m = 4)

4 2m+1

DOG(m = 2)

2 m+1/2

Tabella 2.1: Espressioni analitiche del fattore k0 che lega il periodo di Fourier alla scala. 6. Standardizzare i dati dividendoli per la loro deviazione standard; la varianza dei dati diviene 1 (sia vari = 1); in questo modo si otterr` uno a scalogramma a sua volta standardizzato 9 . 7. Calcolare la lunghezza N del vettore anoms. 8. Dare lintervallo di campionamento dei dati in anni, che ` Tc = 0.25 anni. e 9. Fissare dj= j = 0.05, che rappresenta linverso del numero di scale per ottava, e ssare J = J = 160, che ` il numero totale di scale considerate, e meno una. In questo modo si esaminano Jj = 8 ottave di scala, ciascuna suddivisa in 1 = 20 parti; la scelta di questi valori ` giusticata al fondo e j di questa sezione. 10. Eseguire il calcolo della CWT, chiamando la function w_transf e ottenendo in uscita, come gi` visto, a la trasformata (variabile complessa wave) che non verr` utilizzata, in a quanto in w_transf viene calcolato anche il set di fattori di scala a; lo scalogramma (power), cio` il modulo quadro della trasformata; e il vettore period contenente i periodo di Fourier adimensionali associati ad ogni valore del fattore di scala; il vettore coi che rappresenta la linea che disegna nel graco, in funzione del tempo, i bordi del cono dinuenza; anche questa ` una e quantit` adimensionale. a
9 Ricordiamo che a tempo ssato, una sezione verticale dello scalogramma ` uno spettro e di potenza, relativo al comportamento della serie nellintorno di quellistante. Per una serie non stazionaria, tale andamento spettrale varia da istante a istante attorno ad un andamento mediato temporalmente, che costituisce lo spettro globale di wavelet. Se i dati fossero di 2 rumore bianco, con varianza x , teoricamente si avrebbe ad ogni istante e scala (periodo) un 2 valore costante ` uguale a x . Se i dati vengono standardizzati, tale costante di riferimento e diviene 1.

2.2. ANALISI SPETTRALE EVOLUTIVA: LA CWT

75

11. Calcolare il parametro =rolag1 del modello AR(1) adatto ai dati (utile per il calcolo del fondo di rumore rosso), chiamando la function modpar secondo la sintassi rolag1=modpar(anoms); ` calcolato come indicato nella sottosezione 2.1.5. In questo modo e si ` pronti per il calcolo del livello di signicativit` per lo scalogramma. e a 12. Calcolare il livello di signicativit` per lo scalogramma, in funzione della a scala o periodo (vettore signif), chiamando w_signif; ulteriori dettagli sono dati tra poco. 13. Calcolare lo spettro globale di wavelet global_ws mediando, ad ogni scala, power sul tempo: global_ws=sum(power)/N; 14. Calcolare il livello di signicativit` per lo spettro globale di wavelet (veta tore global_signif) con una nuova chiamata a w_signif; per i dettagli vedere pi` avanti. u 15. Tradurre, mediante il Tc dei dati, le quantit` adimensionali coi e period a nei corrispondenti tempi in anni, senza cambiar loro il nome. Infatti il graco (cfr. w_plot) viene fatto in base alle quantit` dimensionali e non a a quelle adimensionali: qui, in un contesto non pi` esclusivamente numerico u ma sico, entra in gioco il passo di campionamento dei dati. 16. Eseguire lo script w_plot per ottenere i graci voluti (serie di input, scalograma e GWS), che appariranno tutti in una medesima nestra-gura. Con la standardizzazione eettuata, i livelli per le linee di contorno che vengono ssati nello script graco signicano un valore spettrale locale da 28.0023 = 0.0039 a 2+4.1177 = 17.36 volte la varianza. Rivediamo ora le chiamate alla function w_signif nel caso dello scalogramma e del GWS. 1. Chiamata per la signicativit` nello scalogramma: a [signif] = w_signif(variance,a,0,rolag1,conflev,-1,mother,param); In ingresso abbiamo la varianza dei dati dopo standardizzazione, quindi uguale a vari = 1; il vettore dei fattori di scala a; il valore della ag numerica sigtest che consente di scegliere il tipo di test da eettuare: 0 per il presente test dello scalogramma;

il parametro rolag1 per il calcolo dello spettro di fondo;

76

CAPITOLO 2. ESERCITAZIONI LIBERE il livello di condenza scelto conflev, che nel nostro caso ` 0.95; e poich in w_signif questo ` il default, va bene anche dare -1; e e il numero di gradi di libert` dof. Anche qui basta dare -1 in input, a attenendosi cos` al default, che ` dof=dofmin nel caso presente di e sigtest=0, con dofmin=2 per la wavelet di Morlet complessa. Infatti si assume che ogni valore dello scalogramma calcolato con una wavelet complessa sia distribuito come 2 con = 2 gradi di libert`; a la wavelet madre scelta ed il valore del suo parametro. Il vettore signif, in uscita, ` lungo come a (un valore per ogni scala); per e ottenere una quantit` gracabile con contour nel piano tempo-periodo a bisogna espandere il vettore signif, trasformandolo in una matrice (sig) di dimensioni (J + 1) N , mediante la function ones: sig = (signif)*(ones(1,N)); inoltre ` pi` comodo ai ni graci fare un passo ulteriore, ridenendo e u sig come rapporto tra power e sig stesso: sig=power./sig In questo modo nel graco viene tracciato, dove sig raggiunge il valore 1, il contorno del livello di signicativit`, che include larea con sig a 1. 2. Chiamata per la signicativit` nel GWS: a rispetto al caso precedente in cui valutavamo la signicativit` per lo scaloa gramma, qui in input a w_signif cambiano sigtest, che ora deve valere 1, e dof, che adesso vedremo come ssare. Il livello di condenza resta al 95 %. Per prima cosa occorre dare il numero di stime indipendenti che sono state mediate ad ogni scala per ottenere il campione corrispondente dello spettro globale. Per questa variabile nel presente software viene usato lo stesso nome (dof) adottato per i gradi di libert`. Pertanto a si chiama w_param per ottenere consts: [consts]=w_param(mother,param); e poi si inserisce listruzione dof=N-consts(7)*a; dove il secondo termine (-consts(7)*a) costituisce una correzione empirica, volta a tener conto della distorsione legata al padding di zeri ed al cono dinuenza; nel contempo, questa istruzione fa anche s` che dof divenga un vettore di lunghezza J + 1, cosa che ` utile e in ingresso a w_signif, dove dof verr` ulteriormente elaborato per a trasformarlo nella vera e propria espressione dei gradi di libert` per a

2.2. ANALISI SPETTRALE EVOLUTIVA: LA CWT

77

il test di signicativit` dello spettro globale; si avr` un valore per a a ogni scala. Si calcola il livello di signicativit` (global_signif), chiamando la a function w_signif: [global_signif] = ... w_signif(variance,a,1,rolag1,conflev,dof,mother,param); dove di nuovo variance = vari = 1. Tale livello avr` un valore per ogni scala, ossia per ogni periodo di a Fourier.

2.2.4

Interpretazione dello scalogramma

Osservando i graci ottenuti lanciando il programma sopra descritto, lo studente, prima di procedere nella lettura, rietta sulle seguenti questioni. 1. Quali sono gli intervalli temporali di elevata attivit` di El Nio? a n 2. Quale intervallo fu relativamente calmo? 3. Il cono dinuenza che ruolo gioca in questi ragionamenti? 4. Lo scalogramma conferma la preponderanza di pseudo-periodicit` con a periodi da 2 a 7 anni nella serie esaminata? 5. Sono visibili nello scalogramma caratteristiche che possano suggerire oscillazioni di periodo diverso, pi` lungo di 2-7 anni? u 6. Lo scalogramma d` anche informazioni su eventuali shift di frequenza, nel a tempo, della pseudo-periodicit` studiata? a Ed ecco quanto si pu` in eetti evincere dal graco: o 1. Vi ` signicativamente pi` potenza nella banda 2-7 anni, localmente, dal e u 1875 al 1920 e dal 1960 al 2000, mentre lintervallo 1920-1960 ` carattee rizzato da potenza minore (solo un paio di regioni signicative, isolate, allineate su circa 2 anni di periodo, cio` al margine della banda 2-7 anni, e tipica del fenomeno ENSO). 2. Pare esserci qualche evidenza di una modulazione di varianza su 15 anni circa, ma senza signicativit` al 95 %. a 3. A causa del cono dinuenza, non ` chiaro se la decrescita della potenza e che si nota nella banda dei 15 anni dopo il 1995 sia vera o sia un artefatto dovuto al padding di zeri, per cui pu` essere interessante, eventualmente, o ripetere lanalisi con una diversa wavelet madre, tale da dare un cono dinuenza pi` ridotto; si veda pi` avanti. u u

78

CAPITOLO 2. ESERCITAZIONI LIBERE 4. Se si calcola il numero di punti dello scalogramma che cadono sopra il livello di signicativit` al 95 % di condenza, si trova che esso corrispona de a circa il 5 % del totale. Pertanto, su questa base, la serie non pu` o essere distinta dal rumore; per` vi sono altre caratteristiche da consideo rare a proposito della casualit` (randomness) della serie. Se si calcola lo a scalogramma di una serie di rumore bianco, si osserva una distribuzione casuale di regioni signicative nel piano tempo-scala. Se si ripete rumore rosso, con parametro uguale a quello dedotto dai dati di SST, si osserva una graduale crescita di potenza con il periodo, cio` col diminuire dele la frequenza, con distribuzione random di massimi e minimi di potenza attorno a questo spettro medio. Invece nello scalogramma delle SST le regioni signicative sono organizzate in tempo e scala, il che indica una minore casualit` del processo sotteso alla generazione dei dati. a 5. Lanalisi dello scalogramma consente di apprezzare le variazioni temporali della frequenza con cui si vericano gli eventi caldi (El Ni o) e freddi (La n Nia). Tra il 1875 ed il 1920 si vericarono molti eventi caldi e freddi di n notevole ampiezza, mentre tra il 1920 ed il 1960 ve ne furono pochi, in accordo con quanto si evince dallo scalogramma delle SST. In questultimo graco si osserva inoltre che dal 1875 al 1915 si veric` o uno shift della potenza signicativa da circa 4 anni di periodo a circa 2 anni di periodo, mentre dal 1960 al 2000 lo shift fu dai periodi pi` corti u ai pi` lunghi: da un periodo dominante di circa 3 anni (1960-65) ad uno u di circa 5 anni (dal 1980 in poi).

2.2.5

Prove con wavelets diverse

Vediamo se lutilizzo di wavelet diverse modica, oppure no, le conclusioni del nostro lavoro. Si ripeta lanalisi con la wavelet complessa di Paul con m = 4. Per questo occorre cambiare mother e param e calcolare il nuovo valore di a0 in base alla relazione periodo-scala per questa wavelet (Tab. 2.1), arrotondando poi alla pi` vicina potenza di due per eccesso: ad es., trovando 0.8 si u porrebbe a0 = 20 = 1; trovando 1.4 si porrebbe a0 = 21 = 2). Si osservino le dierenze rispetto al caso della wavelet di Morlet. Lessere la wavelet di Paul pi` stretta nel tempo conduce ad una migliore u localizzazione nel tempo degli eventi, al prezzo di una peggiore localizzazione in frequenza. Possiamo comunque dire che allincirca si ritrovano le stesse caratteristiche riscontrate nello scalogramma con wavelet di Morlet complessa, nelle stesse zone del piano tempo-scala e con la stessa potenza. Si ripeta nuovamente lanalisi con la wavelet reale DOG di ordine m = 2 (Mexican Hat ) e si osservino le dierenze. La ne struttura di scala (periodo) che si osserva in questo caso ` dovuta e al fatto che la wavelet reale cattura le oscillazioni positive e negative della serie come picchi separati nella potenza di wavelet. Nel caso della wavelet

2.2. ANALISI SPETTRALE EVOLUTIVA: LA CWT

79

di Morlet, invece, non solo questa ` complessa, ma contiene sei oscillazioni e sotto la cupola gaussiana e quindi combina picchi positivi e negativi della serie in un singolo picco pi` allargato. Se si gracassero separatamente u la parte reale e la parte immaginaria della trasformata eseguita con la wavelet di Morlet, si otterrebbe una gura molto pi` simile a quella del u caso presente. Inoltre, la DOG(m = 2) `, rispetto alla wavelet di Morlet e complessa, pi` stretta in tempo e pi` larga in frequenza e infatti nello u u scalogramma i picchi sono molto allungati in periodo o scala ma molto stretti temporalmente. Inne, vi ` una grande dierenza nella relazione e tempo-scala: mentre per la wavelet di Morlet complessa si ha che il periodo di Fourier e la scala sono circa uguali, qui il periodo ` circa quattro volte e la scala. Anche in questo caso la sostanza di quanto si pu` leggere nello scao logramma resta circa inalterata, anche se il graco nellinsieme appare di lettura meno immediata rispetto al caso delle wavelet complesse. Per contro, dal punto di vista del cono dinuenza questa wavelet va meglio, essendo pi` stretta nel tempo delle altre: si noti il cono dinuenza pi` u u ridotto nella gura.

2.2.6

Spettro globale di wavelet

Esaminiamo lo spettro globale di wavelet delle SST ottenuto usando la wavelet di Morlet complessa ed il relativo livello di signicativit`. a ` interessante confrontare lo spettro globale di wavelet con lo spettro E ottenuto da metodi di Fourier, che ` stato oggetto dellesercitazione pree cedente. Per questo confronto ` utile preparare un secondo script, che e svolga le funzioni di seguito descritte. 1. Cominciamo col vedere che cosa cambia nellanalisi spettrale di Fourier sostituendo ai dati mensili, usati nellesercitazione precedente, quelli stagionali. A questo scopo, rifacciamo con i dati stagionali la gura relativa allultimo punto della sottosezione 2.1.6 (spettro delle anomalie con fondo di rumore rosso e livelli di signicativit`, a con logaritmo in base 2 del periodo in anni sulle ascisse ed asse delle ascisse rovesciato); questa volta la frequenza di campionamento sar` a 4 anni1 ; confrontiamo le due gure (quella dei dati mensili e quella degli stagionali). Poi passiamo al confronto dello spettro di Fourier con quello di wavelet. 2. Prendiamo la media corrente su 5 campioni dello spettro di Fourier dei dati stagionali calcolato al punto precedente e riportiamo il risultato su un altro graco, assieme allo spettro globale di wavelet con la sua curva di signicativit`. Sia lo spettro globale global_ws, a sia global_signif andranno, allo scopo, esportati con un save dal programma principale nel quale vengono calcolati; essi verranno poi caricati nel workspace qui, nel secondo script 10 . Anche questo graco avr` sulle ascisse, rovesciate, il logaritmo in base 2 dei periodi. a
10 Ci` non ` strettamente necessario, se si pensa di operare in sequenza con i due programmi o e allinterno della stessa sessione di lavoro, visto che in questo caso le variabili in questione, gene-

80

CAPITOLO 2. ESERCITAZIONI LIBERE Attenzione: le due curve corrispondono a due diversi set di periodi. Osserviamo analogie e dierenze fra le due curve spettrali. Quale ` pi` smooth? Quale intervallo di periodi risulta signicativo nello e u spettro globale di wavelet? 3. Ripetiamo con media corrente su 9 punti, 11 punti ecc... ed osserviamo i cambiamenti. Ed ecco ci` che si pu` evincere dai graci. o o 1. Al crescere dello smoothing applicato al periodogramma, questo spettro tende allo spettro globale di wavelet; lentit` dello smoothing ria chiesto decresce al crescere della scala, cio` al diminuire della frequene za. Ci` ` evidente nella pratica e pu` essere dimostrato teoricamente. oe o 2. Nello spettro globale di wavelet, solo il largo picco ENSO (2-4 anni) risulta signicativo al 95 % di condenza; va per` ricordato che o a periodi diversi da questi vi ` nello scalogramma potenza che, pur e essendo localmente e globalmente meno che signicativa, emerge comunque come struttura caratteristica nello scalogramma stesso (ad es. attorno ai 15 anni).

2.2.7

Scelta delle scale

Ridiscutiamo qui il criterio di scelta dellintervallo di scale. Quello dato nella sottosezione 2.2.3 per a0 ` un criterio di semplice applicazione, ma molto e approssimato. Pi` sensatamente, si potrebbe scegliere a0 richiedendo che la wau velet a quella scala sia limitatata in banda a = ; naturalmente si tratterebbe di una limitatezza in banda approssimata, imposta richiedendo che solo una percentuale trascurabile del modulo quadro della trasformata analogica della wavelet cada oltre . Detto infatti a il valore ssato in base a questultimo 0 criterio, se si sceglie a0 < a si avranno scale per le quali il prodotto X[k](ak ) 0 (input alla fft inversa che produce la trasformata di wavelet) vedr` utilizzata a solo una parte della campana che costituisce (ak ), perch il resto deborda e oltre , che ` il valore di di Nyquist per la trasformata dei dati 11 . e Un altro criterio, non slegato dal precedente, potrebbe basarsi sul richiedere per la wavelet a scala a0 una durata (in qualche modo denita quantitativamente) di almeno 2 passi temporali (che ` diverso dal chiedere che sia k0 a0 = 2). e e In considerazione del fatto che la valutazione di a per le varie wavelets non ` 0 immediata, e soprattutto del fatto che la scelta di a0 non ` cruciale per la nostra e analisi, si ` deciso in questa esercitazione di adottare il criterio approssimato e dato nel testo.
rate dal primo programma, saranno comunque presenti nel workspace quando il secondo pro` gramma verr` lanciato. E per` consigliabile, per maggiore essibilit` nelluso dei programmi a o a stessi. 11 Si ricordi che al diminuire della scala la wavelet nel dominio della frequenza si allarga.

2.2. ANALISI SPETTRALE EVOLUTIVA: LA CWT

81

Anche il fattore di scala massimo (amax ) dipende dalla wavelet scelta; i criteri potrebbero essere che la wavelet a scala massima non duri pi` del record di dati u o di una frazione di questo e/o che il suo spettro copra almeno due intervalli fra le frequenze discrete su cui lo spettro stesso ` campionato. e Limitandosi anche qui ad un criterio pi` semplice, richiediamo che sia, diciamo, u 2 1 ad fmin = N2 c , quindi min = N ; allora Pmax = min = N = k0 amax , da cui T 2 2 N amax = 2k0 . Nel contempo, abbiamo ssato a0 = k0 ; quindi amax N 506 = = = 126.5 128 = 27 , a0 4 4 indipendentemente dalla wavelet. Quindi, poich e amax = a0 2Jj , si ottiene, con j = 0.05,
amax 1 log a0 j log 2

J=

140

costante,

che ` appena un po inferiore alla scelta fatta nel costruire il programma: e abbiamo semplicemente abbondato un po e questo non comporta errori di sorta. Un valore di j pi` piccolo (e quindi un J pi` grande) darebbe una struttura u u di scala pi` ne ma anche un tempo di calcolo maggiore. u

Potrebbero piacerti anche