<marco />
← Tutti gli articoli
12 min di lettura

Trasformata di Fourier discreta

segnaliprogrammazione

Con questo articolo la serie passa ai sistemi dinamici. Come visto nell'introduzione, i loro ingressi e le loro uscite sono segnali: grandezze che cambiano nel tempo. Prima di identificare un sistema serve qualche strumento per descrivere i segnali, in particolare il loro contenuto in frequenza.

Segnali a tempo discreto

Un computer non vede un segnale continuo, ma i suoi campioni, presi ogni TsT_s secondi (frequenza di campionamento fs=1/Tsf_s = 1/T_s). Per semplicità si scrive u(t)u(t) al posto di u(t⋅Ts)u(t \cdot T_s): il tempo tt diventa un numero intero, il numero del campione.

Un segnale è deterministico se è completamente noto, con una formula o una registrazione; è stocastico se se ne conoscono solo le proprietà probabilistiche, come un rumore di misura o l'intensità del vento. Qui ci occupiamo dei primi.

Energia e potenza

L'energia di un segnale è la somma dei quadrati di tutti i suoi campioni:

Eu=∑t=−∞+∞u(t)2\mathcal{E}_u = \sum_{t=-\infty}^{+\infty} u(t)^2

Se è finita, uu è un segnale di energia: per esempio un segnale di durata limitata.

Una sinusoide che dura per sempre ha energia infinita. Per questi segnali si usa la potenza media:

Pu=lim⁡N→∞12N+1∑t=−NNu(t)2\mathcal{P}_u = \lim_{N \to \infty} \frac{1}{2N+1} \sum_{t=-N}^{N} u(t)^2

Se è finita, uu è un segnale di potenza: tutti i segnali periodici lo sono. La radice della potenza è il valore efficace o RMS: il valore del segnale costante che ha la stessa potenza. Per una sinusoide di ampiezza AA la potenza è A2/2A^2/2, e il valore efficace A/2≈0,707 AA/\sqrt{2} \approx 0{,}707\,A.

La trasformata di Fourier a tempo discreto (DTFT)

L'idea di Fourier è che un segnale si possa scrivere come somma di sinusoidi a frequenze diverse. La DTFT dice quanto pesa ciascuna:

U(ω)=∑t=−∞+∞u(t) e−jωtU(\omega) = \sum_{t=-\infty}^{+\infty} u(t)\, e^{-j\omega t}

U(ω)U(\omega) è un numero complesso per ogni pulsazione ω\omega: il modulo dice l'ampiezza della componente a quella frequenza, l'argomento la sua fase. Si chiama spettro del segnale, e si può tornare indietro senza perdere nulla con la DTFT inversa.

Tre proprietà da tenere a mente:

  • è periodica di periodo 2π2\pi;
  • per segnali reali, i valori a −ω-\omega sono i coniugati di quelli a ω\omega: tutta l'informazione sta tra 0 e π\pi;
  • la pulsazione ω\omega è normalizzata, in radianti per campione. La massima, ω=π\omega = \pi, corrisponde a fs/2f_s/2, la frequenza di Nyquist: la sinusoide più veloce che si può rappresentare, che cambia segno a ogni campione.

Il quadrato del modulo, ∣U(ω)∣2|U(\omega)|^2, è la densità spettrale di energia: dice come l'energia del segnale si distribuisce tra le frequenze. La sua area, divisa per 2π2\pi, è proprio l'energia (teorema di Parseval).

La trasformata di Fourier discreta (DFT)

La DTFT è uno strumento teorico: richiede infiniti campioni e dà una funzione continua di ω\omega. Nella pratica si hanno NN campioni, u(0),…,u(N−1)u(0), \dots, u(N-1), e si usa la DFT:

U˘(k)=∑t=0N−1u(t) e−j2πNkt\breve U(k) = \sum_{t=0}^{N-1} u(t)\, e^{-j \frac{2\pi}{N} k t}

con k=0,…,N−1k = 0, \dots, N-1.

Da NN numeri reali si passa a NN numeri complessi. La differenza con la DTFT è che lo spettro non si ottiene più a tutte le frequenze, ma solo a NN frequenze precise, equidistanti. Ciascuna di queste frequenze si chiama bin: il bin kk è la frequenza

fk=k fsNf_k = k\,\frac{f_s}{N}

e U˘(k)\breve U(k) è il valore dello spettro in quel punto. Per esempio, con fs=1000f_s = 1000 Hz e N=2000N = 2000 campioni (2 secondi di misura), i bin sono a 0 Hz, 0,5 Hz, 1 Hz, 1,5 Hz e così via, ogni mezzo hertz. Di quello che succede a 0,7 Hz la DFT non dice nulla direttamente.

La distanza tra due bin vicini è la risoluzione in frequenza, fs/Nf_s/N: per distinguere frequenze vicine servono più campioni, cioè una misura più lunga. Il bin k=0k = 0 è la somma dei campioni, cioè NN volte il valore medio. Per segnali reali, dopo N/2N/2 i valori si ripetono specchiati: quelli utili sono i bin da 0 a N/2N/2, fino alla frequenza di Nyquist.

La DFT calcolata direttamente costa N2N^2 operazioni. La FFT (Fast Fourier Transform) è una famiglia di algoritmi che calcola lo stesso risultato in circa Nlog⁡NN \log N.

Leakage

Prendiamo un segnale fatto di tre pezzi: una costante 5, una sinusoide a 1 Hz di ampiezza 0,8 e una a 2 Hz di ampiezza 0,3.

u(t)=5+0,8 sin⁡(2π⋅1 t)+0,3 sin⁡(2π⋅2 t)\begin{aligned} u(t) = 5 &+ 0{,}8\,\sin(2\pi \cdot 1\,t) \\ &+ 0{,}3\,\sin(2\pi \cdot 2\,t) \end{aligned}

Lo campioniamo a 1000 Hz (qui tt è il tempo in secondi) e calcoliamo la FFT. I numeri che escono non sono subito le ampiezze: vanno sistemati in due passi.

  1. Dividere per NN. La DFT somma NN campioni, quindi più la misura è lunga, più i valori sono grandi. Dividendo per NN il risultato non dipende più dalla durata, e il bin a 0 Hz diventa la media dei campioni.
  2. Raddoppiare tutti i bin, tranne quello a 0 Hz e quello di Nyquist. Lo spettro di un segnale reale è specchiato: metà dell'ampiezza di ogni sinusoide sta nel suo bin, l'altra metà nel bin simmetrico oltre N/2N/2. Guardando solo la prima metà, si raddoppia per riavere l'ampiezza intera.

Facciamo il calcolo due volte, cambiando solo la durata della misura. Prima, attenzione a non confondere due numeri:

  • la frequenza di campionamento, fs=1000f_s = 1000 Hz, dice quanti campioni si prendono al secondo. Resta sempre la stessa, e fissa la frequenza più alta che si può vedere: Nyquist, 500 Hz;
  • la distanza tra i bin è fs/Nf_s/N. Siccome N=fs⋅TN = f_s \cdot T, dove TT è la durata della misura, vale semplicemente 1/T1/T: dipende solo dalla durata.

Con 2 secondi si hanno N=2000N = 2000 campioni e i bin sono distanti 1000/2000=0,51000/2000 = 0{,}5 Hz. Con 2,5 secondi si hanno N=2500N = 2500 campioni e i bin sono distanti 1000/2500=0,41000/2500 = 0{,}4 Hz. In entrambi i casi i bin arrivano fino a 500 Hz; il grafico mostra solo il tratto tra 0 e 3 Hz, dove si trovano le componenti del segnale.

2 s di misura: un bin ogni 0,5 Hz 1 Hz e 2 Hz cadono esattamente su un bin Hz 0 0,5 1 5 ↑ 0 0,5 1 1,5 2 2,5 3 0,8 0,3 2,5 s di misura: un bin ogni 0,4 Hz 1 Hz cade tra i bin di 0,8 e 1,2 Hz Hz 0 0,5 1 5,10 ↑ 0 0,4 0,8 1,2 1,6 2 2,4 2,8 0,57 0,46 0,31 vera: 0,8 valore della DFT nei bin ampiezza vera

Con 2 secondi (N=2000N = 2000) i bin sono ogni 0,5 Hz. Le frequenze 1 e 2 Hz cadono esattamente su un bin, e la FFT restituisce i valori giusti: 5 a 0 Hz, 0,8 a 1 Hz, 0,3 a 2 Hz, zero altrove.

Con 2,5 secondi (N=2500N = 2500) i bin sono ogni 0,4 Hz: ce n'è uno a 0,8 e uno a 1,2 Hz, ma nessuno a 1 Hz. L'ampiezza della sinusoide a 1 Hz si sparge sui bin vicini (0,57 e 0,46) e un po' anche su quelli lontani. Non si "divide" nel senso della somma, perché 0,57 + 0,46 supera 0,8: quella che si conserva è la potenza, cioè la somma dei quadrati. Il leakage arriva anche nei bin delle altre componenti: il bin a 2 Hz vale 0,31 invece di 0,3, quello a 0 Hz 5,10 invece di 5. Questo effetto si chiama leakage spettrale (leakage in inglese vuol dire "fuoriuscita").

Perché succede. La DFT dà per scontato che gli NN campioni siano un periodo di un segnale che si ripete all'infinito. In 2 secondi la sinusoide a 1 Hz fa due giri completi: ripetendo la misura, la fine si raccorda con l'inizio. In 2,5 secondi fa due giri e mezzo: ripetendola, alla giunzione c'è un salto. Un salto non è una sinusoide, e per descriverlo servono componenti a molte frequenze.

Con segnali reali le frequenze non si conoscono in anticipo, quindi il leakage c'è quasi sempre. Per limitarlo si può misurare più a lungo, così i bin sono più fitti e l'ampiezza si sparge su una banda più stretta attorno alla frequenza vera.

  • Un segnale discreto è una sequenza di campioni; si misura con l'energia se è finita, altrimenti con la potenza (e il valore efficace).
  • La DTFT scompone il segnale in sinusoidi: è periodica di 2π2\pi, e per segnali reali basta guardarla tra 0 e π\pi, cioè fino a fs/2f_s/2.
  • La DFT è la versione calcolabile, su NN campioni: bin a kfs/Nk f_s/N, risoluzione fs/Nf_s/N. La FFT la calcola in fretta.
  • La DFT presuppone un segnale periodico: se la misura non contiene periodi interi, l'ampiezza si sparge sui bin vicini (leakage).