3 Recap — Fourier
Ultimo recap, le trasformate di Fourier, che ci serviranno spesso per analizzare il contenuto spettrale dei segnali misurati durante le esperienze. Serve anche da preparazione al capitolo che viene subito dopo: un dato acquisito è discretizzato in due modi indipendenti — nel tempo, perché lo si campiona a istanti separati, e nel valore, perché lo si rappresenta con un numero finito di cifre — e qui affrontiamo il primo dei due. Che cosa si può ricostruire di un segnale campionato, e quali artefatti compaiono se si esagera, si decide tutto in trasformata.
3.1 La serie di Fourier
Più che di trasformatA di Fourier bisognerebbe parlare di trasformatE, dato che esistono varie possibilità illustrate in tabella, in base al tipo di segnale e alla natura discreta o continua dei suoi valori
| aperiodico | periodico | |
|---|---|---|
| continuo | trasformata di Fourier | serie di Fourier |
| discreto | trasformata a tempo discreto | trasformata di Fourier discreta |
Lasciando la trasformata di Fourier ad altri corsi, qui è utile rivedere rapidamente la serie, per poi passare alla sua versione discreta (DFT, Discrete Fourier Transform). La serie di Fourier descrive le funzioni date da somme di seni e coseni, ovvero anche di esponenziali complessi,
\[f(t) = \sum_{k=-\infty}^{+\infty} \hat f_k \, e^{+j\,\omega_k t}, \qquad \omega_k = \frac{2\pi}{T}\,k, \tag{3.1}\]
dove \(T\) è il periodo e \(\omega _k\) è la frequenza angolare dell’armonica \(k\)-esima. I coefficienti di Fourier \(\hat{f}_k\) si possono ricavare proiettando \(f\) sulla \(k\)-esima armonica
\[\hat f_k = \frac{1}{T}\int_0^T f(t)\, e^{-j\omega_k t}dt. \tag{3.2}\]
In un laboratorio è sensato by-passare le questioni di convergenza, infatti siamo partiti assumendo che \(f(t)\) sia una somma in serie di armoniche. Un problema interessante è se/quando una funzione periodica generica sia esprimibile come una tale serie: questo è sempre possibile se \(f(t)\) è una funzione smooth e derivabile infinite volte, cosa sempre vera in un laboratorio, un po’ meno in un corso di matematica. Qui al massimo potrebbe capitare di trattare alcuni casi limite ideali con discontinuità o funzioni impulsive, che possono tuttavia essere viste come limiti di funzioni smooth.
Esempi di sviluppi in serie. Alcuni sviluppi di base è bene saperli o almeno rivedere più o meno come si calcolano. Le funzioni a seguire hanno ampiezza \(1\) e periodo \(T\), ma diverse armoniche con diverse fasi e diverse velocità di decrescita al crescere di \(k\).
Onda quadra — armoniche dispari \(\propto 1/(2n+1)\)
\[f_\square(t) = \frac{4}{\pi} \sum_{n=0}^{\infty} \frac{1}{2n+1}\, \sin\!\left[\frac{2\pi}{T}(2n+1)\,t\right]. \tag{3.3}\]
È dispari, quindi solo seni; e le armoniche pari sono assenti e le ampiezze scendono come \(1/(2n+1)\), cioè lentamente. Questo è direttamente connesso con la discontinuità dell’onda quadra, che infatti è il punto dove la convergenza è più “complicata” (convergenza non uniforme, fenomeno di Gibbs… lasciamo tutto questo ai corsi di matematica).
Onda triangolare — armoniche dispari \(\propto 1/(2n+1)^2\)
\[f_\triangle(t) = -\frac{8}{\pi^2} \sum_{n=0}^{\infty} \frac{1}{(2n+1)^2}\, \cos\!\left[\frac{2\pi}{T}(2n+1)\,t\right]. \tag{3.4}\]
Si ottiene integrando la quadra (a meno del fattore \(4/T\)), e integrare porta un \(1/\omega_k\) in più: da qui il quadrato al denominatore. La serie converge molto meglio, e non ha discontinuità.
Dente di sega — tutte le armoniche, ampiezze \(\propto 1/n\)
\[f_\diagup(t) = -\frac{2}{\pi} \sum_{n=1}^{\infty} \frac{1}{n}\, \sin\!\left[\frac{2\pi}{T}\,n\,t\right]. \tag{3.5}\]
Qui ci sono tutte le armoniche, pari comprese, con ampiezze \(1/n\): è il segnale più ricco dei tre, ed è per questo che si usa quando si vuole mettere alla prova un campionamento (Sezione 3.4).
La velocità di convergenza si legge a occhio nella figura Figura 3.1: la triangolare è indistinguibile dall’onda ideale già con pochi termini, mentre quadra e dente di sega non «chiudono» mai del tutto sui salti.
3.2 Trasformata di Fourier discreta
Passiamo subito al nocciolo della questione: in laboratorio non abbiamo \(f(t)\) su tutto il continuo del tempo, dato che richiederebbe una acquisizione a velocità infinita, cosa palesemente infattibile. Semmai avremo sempre un insieme finito di campioni presi a tempi discreti. Fissato un intervallo di campionamento \(\Delta t\), le misure saranno
\[f(t) \;\rightsquigarrow\; f_m = f(t_m), \qquad t_m = m\,\Delta t, \quad m = 0, 1, \dots, N-1,\]
con la frequenza di campionamento \(f_s = 1/\Delta t\), il numero di campioni \(N\) e il tempo di acquisizione \(T=N\Delta t\), come illustrato in Figura 3.2. Come vedremo questo ha delle conseguenze su cosa possiamo ricostruire e cosa no del segnale originale \(f(t)\) che stiamo misurando.
La ricetta della DFT nasce discretizzando l’integrale Equazione 3.2 e assumendo che \(f(t)\) sia costante a tratti. La somma di Riemann porterebbe con sé un fattore \(\Delta t/T = 1/N\): lo si lascia cadere, ed è la normalizzazione più comune, quella che scarica tutto il \(1/N\) sull’antitrasformata. Abbiamo quindi
\[\hat f_k = \sum_{m=0}^{N-1} f(t_m)\,e^{-j\,\omega_k t_m}, \tag{3.6}\]
dove è utile notare che non c’è necessità di tenere traccia di alcun fattore temporale in realtà, dato che \(\omega_k = 2\pi k/T\) e \(t_m = m\Delta t\) dove \(T = N\Delta t\) è il periodo totale di acquisizione. Infatti possiamo scrivere
\[\omega_k t_m = 2\pi \frac{km}{N}.\]
TeoremaTrasformata di Fourier discreta
La trasformata di Fourier discreta è definita dalla formula (si riporta la normalizzazione più comune)
\[\hat{f}_k = \sum_{m=0}^{N-1} f_m\, e^{-2j\pi km/N}, \qquad k = 0,\dots,N-1,\]
e si può invertire tramite l’antitrasformata
\[f_m = \frac{1}{N}\sum_{k=0}^{N-1} \hat f_k\, e^{+2j\pi km/N}, \qquad m = 0,\dots,N-1.\]
Uno dei benefit del passare ad un numero discreto e finito di valori è che queste equazioni sono esattamente valide, non c’è mai alcun problema di convergenza o validità. Tuttavia come vedremo ci sono delle conseguenze subdole sul significato di questa operazione.
Dimostrazione
Posto \(x = e^{2j\pi m/N}\), la chiave di volta è riconoscere la somma notevole
\[ \sum_{k=0}^{N-1}e^{2j\pi mk/N} = \sum_{k=0}^{N-1} x^k = \frac{1-x^N}{1-x} = \begin{cases} N &{\rm se}\,\,m=0\,\,({\rm mod} N) \\ 0 &{\rm altrimenti} \end{cases} \tag{3.7}\]
come si deduce facilmente dal fatto che \(x^N=1\) quindi la somma è sempre zero, eccetto quando \(x=1\) dove si ottiene la forma indefinita \(0/0\). Questo caso specifico può essere banalmente risolto osservando che abbiamo una banale somma di \(N\) termini uguali a \(1\). Sostituendo la definizione di \(\hat f_k\) nell’antitrasformata e scambiando le somme,
\[ \begin{aligned} f_m &= \frac{1}{N}\sum_{k=0}^{N-1} \hat f_k\, e^{+2j\pi km/N}\\ &=\frac{1}{N}\sum_{k=0}^{N-1}\Big(\sum_{m'=0}^{N-1} f_{m'}\, e^{-j2\pi km'/N}\Big) e^{+j2\pi km/N}\\ &= \frac{1}{N}\sum_{m'=0}^{N-1} f_{m'} \sum_{k=0}^{N-1} e^{\,j2\pi k(m-m')/N}\\ &= \frac{1}{N}\sum_{m'} f_{m'}\, N\,\delta_{m,m'} = f_m, \end{aligned} \]
perché la somma interna vale \(N\) solo quando \(m' = m\) (entro la finestra \(0,\dots,N-1\)) e \(0\) altrimenti. \(\blacksquare\)
Seguono varie osservazioni sulle proprietà di questa trasformazione, che sono utili nel suo utilizzo.
DefinizioneProprietà — Risoluzione spettrale
Dato che \(\omega_k=2\pi k/T\), la distanza fra due componenti consecutive della DFT è
\[\Delta f =\frac{\Delta \omega}{2\pi} = \frac{1}{T} = \frac{f_s}{N} \tag{3.8}\]
dove \(T\) è il periodo totale di acquisizione. Quindi: la risoluzione non dipende da quanto fitto si campiona, ma da quanto a lungo. Come sempre, la risoluzione non è necessariamente uguale alla precisione né all’accuratezza, ma comunque per stimare bene una frequenza è genericamente utile misurare a lungo.
DefinizioneProprietà — Le repliche spettrali o alias
I coefficienti \(\hat f_k\) non sono infiniti come nella serie continua e dopo un poco sono matematicamente identici
\[\hat f_{k+N} = \sum_{m=0}^{N-1} f_m\, e^{-2j\pi (k+N)m/N} = \sum_{m=0}^{N-1} f_m\, e^{-2j\pi km/N} = \hat f_k,\]
dato che \(2\pi (k+N)m/N = 2\pi km/N + 2\pi m\). Questo è normale: partendo da \(N\) campioni è normale che questa trasformazione produca \(N\) ampiezze e non un numero infinito. Il Teorema 3.1 più avanti dà ulteriori dettagli.
DefinizioneProprietà — Frequenze positive o negative?
Proprio perché \(\hat f_{k+N} = \hat f_k\), chiamare una frequenza “positiva” o “negativa” è solo questione di convenzioni: le componenti si potrebbero elencare da \(0\) a \((N-1)f_s/N\), e sarebbe legittimo. Fra tutte le repliche si sceglie spesso quella di modulo minimo, quindi le frequenze con \(k>N/2\) sono considerate negative con
\[\omega_k = (k-N)\frac{2\pi}{T}.\]
In questo modo lo spettro copre l’intervallo \([-f_s/2,\,+f_s/2]\).
DefinizioneProprietà — Trasformata di un segnale reale
Dato che i segnali che trattiamo sono reali, e quindi \(f_m^*=f_m,\) ne consegue la relazione
\[\hat f_{-k} = \hat f^*_k \tag{3.9}\]
come facilmente verificabile svolgendo il coniugato della trasformata discreta. Quindi l’informazione delle frequenze negative in questo caso è ridondante.
3.3 Rappresentazione dello spettro
Data la corrispondenza di Equazione 3.9, spesso si mostra solo la parte a frequenze positive, quello che si chiama uno spettro unilaterale. Questo è in contrasto con la possibilità di tracciare uno spettro bilaterale inclusivo di frequenze negative. Si noti che il risultato della trasformata è in unità non sempre ovvie, per esempio \(\hat f_0\) che è connesso con il valore medio del segnale è in realtà \(N\) volte il valore medio. Per questo è utile specificare come ottenere uno spettro unilaterale che illustri la vera ampiezza delle componenti spettrali.
TeoremaAmpiezza nello spettro unilaterale
L’ampiezza fisica della componente a pulsazione \(\omega_k\) (assumendo \(0 < k < N/2\)) è
\[A_k = \frac{2\,|\hat f_k|}{N}. \tag{3.10}\]
Il fattore \(2\) raccoglie i contributi gemelli a \(\pm\omega_k\); il \(1/N\) è la normalizzazione dell’antitrasformata. L’ampiezza zero va invece considerata come \(A_0=|\hat f_0|/N\). Per la potenza si usa l’ampiezza quadra media
\[\langle x^2\rangle_k = \frac{2\,|\hat f_k|^2}{N^2}, \tag{3.11}\]
che è quella da sommare quando si vuole l’energia contenuta in una regione spettrale.
Dimostrazione
La verifica è immediata su un coseno puro. Se \(\hat f_k = \hat f_{-k} = 1\) (e tutti gli altri coefficienti nulli), l’antitrasformata dà
\[f(t_m) = \frac{1}{N}\big(e^{+j\omega_k t_m} + e^{-j\omega_k t_m}\big) = \frac{2}{N}\,\cos(\omega_k t_m):\]
l’ampiezza fisica è \(2/N\) volte il modulo del coefficiente, esattamente Equazione 3.10. È la normalizzazione con cui si disegna lo spettro unilaterale: nel caso senza leakage il picco vale \(A_k = 1\), cioè l’ampiezza vera della sinusoide.
Le ampiezze possono essere calcolate con i seguenti codici MATLAB e python, si assume \(N\) pari:
% Non è necessario importare nulla
XTv = fft(xv); % trasformata
fv = (0:(N/2))*fs/N; % calcolo frequenze
Av = abs(XTv(1:N/2+1))/N; % calcolo ampiezze
Av(2:end-1) = 2*Av(2:end-1); % correzione ampiezze ACimport numpy as np
XTv = np.fft.fft(xv) # trasformata
fv = np.arange(0,N//2+1)*(fs/N) # calcolo frequenze
Av = np.abs(XTv[:N//2+1])/N # calcolo ampiezze
Av[1:-1] = 2*Av[1:-1] # correzione ampiezze ACRaccomandazioni su come disegnare gli spettri. Alcune raccomandazioni pratiche, che valgono per tutte le relazioni del corso:
- Normalmente vogliamo mostrare solo lo spettro unilaterale, con l’ampiezza data da Equazione 3.10.
- Per evitare di confondersi, chiediamo di usare tassativamente le unità Hz per i grafici in funzione della frequenza \(f\) e rad/s per i grafici in funzione della frequenza angolare \(\omega\).
- Consigliato l’uso degli istogrammi quando si vuole rappresentare un contenuto spettrale. Se è importante mostrare una sequenza di armoniche, è meglio una scala lineare.
- Consigliato l’uso di punti o (se non fuorviante, è sempre un poco opinabile) punti più spezzata per mostrare \(|\mathcal{H}(\omega)|\). Nel caso dei diagrammi di Bode va usata la scala bilogaritmica.
AttenzioneFluttuazioni statistiche in trasformata
Probabilmente Figura 3.3 stimola la semplice domanda: come è fatto il rumore in trasformata? La risposta è relativamente semplice se tutte le misure hanno un rumore temporalmente scorrelato, in questo caso la matrice di covarianza fra le varie misure è diagonale. Possiamo ragionare in molti modi diversi, ma probabilmente il più semplice è in termini di propagazione dell’errore nella trasformazione
\[\hat f_k = \sum_{m=0}^{N-1} f_m e^{-2j\pi mk/N},\]
che suggerisce che ogni singola misura \(f_m\) con un rumore \(\sigma\) contribuisce in maniera identica alle fluttuazioni del modulo \(|\hat f_k|\). Ne consegue semplicemente che ci aspettiamo
\[\sigma^2_{\hat f_k} = N\sigma^2\]
con una interessante osservazione: il rumore temporalmente scorrelato non dipende dalla frequenza, e un rumore che non dipende dalla frequenza si dice rumore bianco. Questa non è l’unica opzione possibile, ma sarà quella con cui ci troveremo tipicamente a che fare.
Altri tipi di rumore. Li citiamo solamente. Un rumore che varia con la frequenza è temporalmente correlato. Per esempio, un disturbo a \(50\,{\rm Hz}\) ha ovviamente un picco in trasformata a \(50\,{\rm Hz}\). Un processo di diffusione, che è l’integrale di una velocità scorrelata, ha una dipendenza dalla frequenza pari a \(\sigma^2\propto 1/\omega^2\propto 1/f^2\) e cresce a frequenze basse, consistentemente col fatto che sui tempi lunghi una quantità che drifta tende a deviare molto dalla sua posizione originaria. Un altro tipo di rumore molto pervasivo è il rumore \(1/f\), di cui citiamo solo l’esistenza.
3.4 Artefatti della DFT
La Equazione 3.6 è una trasformazione esatta, che però può facilmente essere letta in maniera errata. Gli artefatti a cui è necessario fare attenzione sono sostanzialmente due:
Aliasing - le repliche spettrali
Come già mostrato, in DFT abbiamo \(\hat f_k=\hat f_{k+N}\): questo segnala una semplice verità: le frequenze \(\omega_k\) e \(\omega_{k+N}=\omega_k+2\pi f_s\) sono completamente indistinguibili quando campionate a frequenza \(f_s\). Di conseguenza, quando campioniamo un segnale e ne facciamo la DFT, lo spettro originario compare in un numero infinito di copie, traslate di multipli di \(f_s\), chiamate repliche o alias.
Questo fa sì che qualsiasi frequenza più alta di \(f_s/2\) in valore assoluto, comparirà anche sotto \(f_s/2\) come replica: è quindi importante non confondere una armonica vera con una replica. La regola per evitarlo è abbastanza banale: la posizione delle repliche dipende da \(f_s\) e basta cambiare campionamento e vedere se si spostano o meno. Si consiglia di usare Figura 3.5 per prendere confidenza con il concetto.
Contromisure. L’aliasing è un problema serio e viene tipicamente risolto con dei filtri anti-aliasing, che semplicemente filtrano il segnale prima del campionamento, in modo che non contenga più frequenze problematiche, che potrebbero essere male interpretate. In pratica, questo significa sopprimere qualsiasi armonica che abbia una frequenza in valore assoluto più alta di \(f_s/2\). L’esistenza di questo limite intrinseco è formalizzata nel seguente teorema.
Teorema 3.1: Teorema del campionamento (Nyquist–Shannon)
Il teorema stabilisce la condizione minima necessaria per ricostruire in maniera fedele un segnale, che si suppone abbia componenti spettrali fino ad una data \(f_{\rm max}\). La frequenza di campionamento deve soddisfare come minimo
\[f_s>2f_{\rm max}\]
dove \(2f_{\rm max}\) è anche detto tasso di Nyquist, da non confondere con la frequenza di Nyquist \(f_s/2\), che è il bordo superiore della banda ricostruibile a campionamento dato. Questa prescrizione serve ad evitare di ritrovarsi parte del segnale a frequenze finte per via dell’aliasing. Esistono anche condizioni pragmaticamente più solide che prescrivono un limite di \(2.5f_{\rm max}\) o perfino \(4f_{\rm max}\).
Si noti che nessuna delle onde mostrate in precedenza (quadra, triangolare, ecc) è veramente campionabile in maniera buona qui, perché contengono tutte un numero infinito di armoniche: non c’è alcun \(f_{\rm max}\) e una ricostruzione completa non è possibile ad alcun campionamento finito.
Leakage - quando la frequenza del segnale… non c’è!
Le frequenze della DFT sono discrete, e pari ai multipli di \(1/T\). Quando il segnale analizzato tramite DFT fa un numero intero \(k\) di oscillazioni in \(T\), la sua frequenza \(k/T\) è una di quelle previste e in effetti la DFT fa quello che ci si aspetta: ne estrae l’ampiezza. Che succede se invece il segnale ha una frequenza che non appartiene a nessuna di quelle “previste” dalla DFT? La risposta è il leakage spettrale: la potenza del segnale si sparpaglia sulle frequenze vicine, rendendo meno immediato determinare ampiezza, frequenza e fase del segnale originario.
Quanto è grande il leakage? Il modo più pulito per vederlo è con un semplice calcolo: prendiamo un coseno \(f(t) = \cos(\omega t) = (e^{+j\omega t} + e^{-j\omega t})/2\) e calcoliamone la DFT. Il termine \(e^{+j\omega t}\) dà
\[ \hat f_k = \frac{1}{2}\sum_{m=0}^{N-1} e^{j\omega m\Delta t}e^{-2j\pi mk/N} + \cdots = \frac{1}{2}\,\frac{1 - x^N} {1 - x} + \cdots, \tag{3.12}\]
dove \(x=\exp[\,j\,\omega\Delta t - j\,2\pi k/N\,]=e^{j\theta}\) e i puntini indicano il termine analogo con \(e^{-j\omega t}\), il picco “gemello” a frequenza negativa. Consideriamo ora l’identità \(1-x=1-e^{j\theta} = -2j\,e^{j\theta/2}\sin(\theta/2)\): applicata a numeratore e denominatore, fa semplificare i prefattori e lascia
\[ \hat f_k = \frac{1}{2}\;e^{\,j(N-1)\theta/2}\; \frac{\sin(N\theta/2)}{\sin(\theta/2)} + \cdots, \qquad \theta \equiv \omega\Delta t - \frac{2\pi k}{N}. \tag{3.13}\]
Se la nostra \(\omega\) è sufficientemente lontana da zero, possiamo trascurare il secondo termine omesso e
\[ |\hat f_k | = \frac{1}{2}\left| \frac{\sin(N\theta/2)}{\sin(\theta/2)}\right|. \tag{3.14}\]
Quando \(\theta=0\) per un qualche valore di \(k\), il picco di questa funzione visibile in tratteggio in Figura 3.4 cade su uno dei bin della trasformata, dove prende il valore \(N/2\), mentre tutti gli altri bin finiscono sui nodi in cui si annulla. Ergo, la trasformata è diversa da zero solo per la frequenza \(\omega_k\) pari all’omega del segnale (salvo aliasing). Diversamente, questa funzione descrive come la trasformata si “sparpaglia” sui bin vicini della trasformata.
La Figura 3.4 riporta una prima illustrazione di entrambi gli artefatti: in base al numero di periodi la trasformata mostra un unico bin popolato o molti vicini; in base alla frequenza del segnale ad un certo punto la frequenza riportata in trasformata non coincide più con quella reale ma con una replica.
AttenzioneLeggere l’ampiezza quando c’è leakage
L’Equazione 3.10 dà l’ampiezza vera solo se la riga sta tutta in un bin, cioè se nella finestra c’è un numero intero di periodi. Se non c’è, il picco si divide fra i bin vicini e leggerne uno solo sottostima l’ampiezza.
Che cosa fare per determinare l’ampiezza dell’armonica? In ordine di preferenza è possibile:
- Aggiustare l’acquisizione. Se c’è libertà di campionamento si può cercare di acquisire un numero intero di periodi in modo da minimizzare l’effetto.
- Sommare il lobo in quadratura. Si può mostrare che la somma dei moduli quadri dei vari bin interessati dal leakage è pari al quadrato dell’ampiezza dell’armonica. Tuttavia, questo è solo vero finché non ci sono effetti di interferenza e somma con altre componenti spettrali.
ImportanteTake-home
Dopo il recap ci si aspetta che ricordiate:
- Definizioni di base, \(\Delta t\), \(f_s\), tempo di misura \(T=N\Delta t\); connessione di queste con le frequenze della trasformata.
- Definizione di trasformata e antitrasformata e proprietà chiave
- Come rappresentare una trasformata come uno spettro unilaterale delle ampiezze
- Artefatti: cosa è l’aliasing, cosa è il leakage, come riconoscerli e gestirli in un dato trasformato.
- Come scegliere un campionamento per raggiungere una certa risoluzione in frequenza, per minimizzare aliasing e/o leakage.
3.5 Testa la tua comprensione
La Figura 3.5 permette di giocare con le trasformate e di rendersi conto di prima mano di quali sono gli effetti del campionamento, quali artefatti emergono e quando e come si possono distinguere dalle caratteristiche “vere” della trasformata. Si consiglia di partire con un segnale semplice come una sinusoide per poi passare a quelli più problematici e con moltissime componenti spettrali, come per esempio una onda quadra.