Salta al contenuto
Note per Studenti Trasformata di Fourier discreta (DFT) e FFT

Trasformata di Fourier discreta (DFT) e FFT

In questa pagina 6

I segnali discreti periodici sono gli unici rappresentabili esattamente in un calcolatore, perché sono specificati da un numero finito di valori (quelli di un periodo). Anche le loro trasformate sono discrete e periodiche: la trasformata di Fourier discreta (DFT, discrete Fourier transform) è lo strumento con cui si studiano al calcolatore tutti i segnali, previa un'opportuna approssimazione.

Le quattro trasformate: il quadro

Lo studio di un segnale dipende da due caratteristiche: il dominio (R\mathbb R continuo oppure Z(T)\mathbb Z(T) discreto) e la periodicità (aperiodico oppure periodico di periodo TpT_p). Ogni classe ha la propria trasformata, e la regola per trovare il dominio in frequenza è la stessa: se il tempo ha "quanto" TT e "periodo" TpT_p (con le convenzioni T=0T=0 per il continuo e Tp=∞T_p=\infty per l'aperiodico), la frequenza ha quanto F=1TpF=\frac1{T_p} e periodo Fp=1TF_p=\frac1T.

segnale dominio / periodicità trasformata
continuo aperiodico R\mathbb R continua aperiodica (f∈Rf\in\mathbb R): Trasformata di FourierLa trasformata di Fourier $S(f)=\int s(t)e^{-i2\pi ft}dt$ associa a un segnale continuo (anche aperiodico) la sua rappresentazione in frequenza; l'antitrasformata $s(t)=\int S(f)e^{i2\pi ft}df$ lo ricostruisce, perché gli esponenziali $e^{i2\pi ft}$ sono ortogonali su tutto $\mathbb R$ ($\int e^{i2\pi ft}dt=\delta(f)$). Per un segnale reale $S(-f)=S^*(f)$. Si calcola per i segnali notevoli (rect $\leftrightarrow$ sinc, $e^{-\alpha t}\mathbf 1(t)\leftrightarrow\frac1{\alpha+i2\pi f}$, gaussiana, $\delta\leftrightarrow1$, $1\leftrightarrow\delta$, gradino) e per i segnali periodici, la cui trasformata è un treno di impulsi di area $S_n$ in $nF$.Trasformata di Fourier →
continuo periodico (TpT_p) R/Z(Tp)\mathbb R/\mathbb Z(T_p) discreta aperiodica (righe in nFnF): Serie di FourierUn segnale periodico di periodo $T_p$ si scrive come somma di esponenziali alle frequenze multiple della fondamentale $F=1/T_p$: $s(t)=\sum_nS_ne^{i2\pi nFt}$, con $S_n=\frac1{T_p}\int_{T_p}s(t)e^{-i2\pi nFt}dt$. Si basa sull'ortogonalità degli esponenziali su un periodo. $S_0$ è il valor medio; per segnali reali $S_{-n}=S_n^*$ e si passa alla forma con coseni e seni; vale il teorema di Parseval $P=\sum
discreto aperiodico (TT) Z(T)\mathbb Z(T) continua periodica (periodo Fp=1/TF_p=1/T): Trasformata di Fourier a tempo discretoLa trasformata di Fourier di un segnale discreto è $S(f)=\sum_nT,s(nT),e^{-i2\pi fnT}$: una funzione continua e periodica in $f$ di periodo $F_p=1/T$. L'antitrasformata è l'integrale su un periodo, $s(nT)=\int_0^{F_p}S(f)e^{i2\pi fnT}df$. Le regole sono quelle del caso continuo (traslazione, convoluzione $\leftrightarrow$ prodotto, Parseval $\sum T
discreto periodico (Tp=NTT_p=NT) Z(T)/Z(Tp)\mathbb Z(T)/\mathbb Z(T_p) discreta periodica (quanto FF, periodo Fp=NFF_p=NF): DFT

In forma unificata, tutte hanno lo stesso aspetto, S(f)=∫Idt s(t)e−i2πftS(f)=\int_I dt\,s(t)e^{-i2\pi ft} e s(t)=∫I^df S(f)ei2πfts(t)=\int_{\hat I}df\,S(f)e^{i2\pi ft}, dove ∫I\int_I è l'integrale di Haar: integrale su R\mathbb R, integrale su un periodo, somma ∑T s(nT)\sum T\,s(nT) su tutti gli interi, somma su un periodo, a seconda della classe. Le regole di calcolo (linearità, traslazione, convoluzione ↔\leftrightarrow prodotto, simmetria) e il teorema di Parseval ∫I∣s∣2=∫I^∣S∣2\int_I|s|^2=\int_{\hat I}|S|^2 valgono in forma unica; le formule per le singole classi sono casi particolari, e alcune regole (derivazione) esistono solo per i segnali continui.

Definizione della DFT

Sia s(nT)s(nT) periodico di periodo Tp=NTT_p=NT (NN campioni per periodo). La frequenza fondamentale è F=1NTF=\frac1{NT} e la trasformata vive su Z(F)\mathbb Z(F) con periodo Fp=1T=NFF_p=\frac1T=NF.

Definizione (DFT e DFT inversa). S(kF)=∑n=0N−1T s(nT) e−i2πkn/N,s(nT)=∑k=0N−1F S(kF) ei2πkn/N.S(kF)=\sum_{n=0}^{N-1}T\,s(nT)\,e^{-i2\pi kn/N},\qquad s(nT)=\sum_{k=0}^{N-1}F\,S(kF)\,e^{i2\pi kn/N}. S(kF)S(kF) è periodica in kk di periodo NN (perché e−i2π(k+N)n/N=e−i2πkn/Ne^{-i2\pi(k+N)n/N}=e^{-i2\pi kn/N}) ed è specificata da NN valori, k=0,…,N−1k=0,\dots,N-1. I coefficienti di Fourier del segnale periodico sono Sk=F S(kF)=1N∑n=0N−1s(nT)e−i2πkn/NS_k=F\,S(kF)=\frac1N\sum_{n=0}^{N-1}s(nT)e^{-i2\pi kn/N}.

Esempio. Con N=4N=4, T=1T=1 e s=(1,2,0,−1)s=(1,2,0,-1): S(kF)=(2, 1−3i, 0, 1+3i)S(kF)=(2,\ 1-3i,\ 0,\ 1+3i) e i coefficienti Sk=14S(kF)=(0,5, 0,25−0,75i, 0, 0,25+0,75i)S_k=\frac14S(kF)=(0{,}5,\ 0{,}25-0{,}75i,\ 0,\ 0{,}25+0{,}75i). Il primo è il valor medio 1+2+0−14\frac{1+2+0-1}4.

La seconda formula discende da ∑k=0N−1ei2πk(n−m)/N=Nδnm\sum_{k=0}^{N-1}e^{i2\pi k(n-m)/N}=N\delta_{nm} (ortogonalità su NN punti, somma geometrica di ragione ei2π(n−m)/Ne^{i2\pi(n-m)/N}). Proprietà:

Che cosa rappresenta la DFT

1. Segnale periodico di partenza discreto

È il caso diretto: i SkS_k sono i coefficienti della serie di Fourier del segnale discreto, le uniche NN frequenze distinguibili.

2. Campionamento di un segnale continuo periodico

Se i campioni s(nT)s(nT), n=0,…,N−1n=0,\dots,N-1, vengono da un segnale continuo periodico s0s_0 di periodo NTNT con coefficienti Sh0S^0_h, i coefficienti del campionato sono Sk=∑m=−∞+∞Sk+mN0:S_k=\sum_{m=-\infty}^{+\infty}S^0_{k+mN}: la ripetizione periodica dei coefficienti con periodo NN (è il teorema di campionamento in forma di serie, Campionamento e ricostruzioneIl campionamento $s_c(nT)=s(nT)$ trasforma un segnale continuo in uno discreto e, in frequenza, ripete lo spettro con periodo $F_c=1/T$: $S_c(f)=\sum_kS(f-kF_c)$. Se le repliche si sovrappongono si ha aliasing e il segnale non è recuperabile. Un interpolatore $\mathbb Z(T)\to\mathbb R$ con risposta impulsiva $g$ produce $\tilde s(t)=\sum_nT g(t-nT)s(nT)$ e $\tilde S=G,S_c$. Teorema del campionamento: se $s$ ha banda $B$ e $F_c\ge2B$, l'interpolatore ideale $G=\operatorname{rect}(f/F_c)$ ricostruisce esattamente $s(t)=\sum s(nT)\operatorname{sinc}(F_c(t-nT))$. Se le ipotesi non valgono c'è un errore, in banda e fuori banda, riducibile con un prefiltro anti-aliasing.Campionamento e ricostruzione →). Se s0s_0 contiene solo armoniche ∣h∣<N/2|h|<N/2 non c'è sovrapposizione e Sk=Sk0S_k=S^0_k per ∣k∣<N/2|k|<N/2 (esatto).

Esempio. L'onda quadra di periodo 11 (vale 11 per ∣t∣<14|t|<\frac14, coefficienti Sh0=12sinc⁡h2S^0_h=\frac12\operatorname{sinc}\frac h2) campionata con N=8N=8 (valori 1,1,12,0,0,0,12,11,1,\frac12,0,0,0,\frac12,1 ai tempi 0,18,…0,\frac18,\dots; i campioni nei salti valgono 12\frac12) dà S0=0,5S_0=0{,}5, S1=0,3018S_1=0{,}3018, S3=−0,0518S_3=-0{,}0518, S2=S4=0S_2=S_4=0: coincidono con ∑mSk+8m0\sum_mS^0_{k+8m}. Per esempio S1S_1 vale 0,30180{,}3018 e non S10=0,3183S^0_1=0{,}3183 perché si sommano i contributi delle armoniche −7-7 e 99, −15-15 e 1717, ...: 0,3183−0,0455+0,0354−…0{,}3183-0{,}0455+0{,}0354-\dots (aliasing).

3. Campioni della trasformata di un segnale a durata limitata

Se s(nT)s(nT) è un segnale discreto aperiodico con estensione contenuta in NN campioni, lo si considera il periodo di un segnale periodico (le repliche non si sovrappongono nel tempo). Allora S(kF)=∑n=0N−1T s(nT)e−i2πkn/N=S(f)∣f=kF,S(kF)=\sum_{n=0}^{N-1}T\,s(nT)e^{-i2\pi kn/N}=S(f)\Big|_{f=kF}, cioè la DFT è un campionamento della trasformata S(f)S(f) del segnale originario (quella di Trasformata di Fourier a tempo discretoLa trasformata di Fourier di un segnale discreto è $S(f)=\sum_nT,s(nT),e^{-i2\pi fnT}$: una funzione continua e periodica in $f$ di periodo $F_p=1/T$. L'antitrasformata è l'integrale su un periodo, $s(nT)=\int_0^{F_p}S(f)e^{i2\pi fnT}df$. Le regole sono quelle del caso continuo (traslazione, convoluzione $\leftrightarrow$ prodotto, Parseval $\sum T|s|^2=\int_0^{F_p}|S|^2$), con incremento e somma corrente al posto di derivata e integrale. Per segnali reali $S(f)=S^*(-f)$, quindi basta $[0,F_p/2]$. Esempi: $\delta\to1$, $1\to\delta_{F_p}$, rect $\to$ sinc periodico, $a^n\mathbf 1_0\to\frac T{1-ae^{-i2\pi fT}}$.Trasformata di Fourier a tempo discreto →) nei punti kF=kNTkF=\frac k{NT}.

Esempio. Il rect con 44 campioni unitari (T=1T=1) ha S(f)=sin⁡4πfsin⁡πfe−i3πfS(f)=\frac{\sin4\pi f}{\sin\pi f}e^{-i3\pi f}. Con N=4N=4 la DFT dà solo 44 valori (4,0,0,04,0,0,0). Aggiungendo zeri fino a N=16N=16 (zero-padding) si ottengono 1616 campioni della stessa S(f)S(f) in f=k16f=\frac k{16}: la DFT lunga 1616 coincide con la formula (verificato), perché il segnale è sempre lo stesso con più zeri.

Lo zero-padding non aumenta la risoluzione (due componenti vicine restano indistinguibili se la durata del segnale è breve) ma infittisce i punti in cui si valuta la trasformata, e quindi rende il grafico più liscio. Per spaziare di più i campioni in frequenza (F=1NTF=\frac1{NT} più piccolo) si deve avere NN più grande, cioè estendere il segnale nel tempo.

4. Approssimazione della trasformata di un segnale continuo

Per un segnale continuo s0(t)s_0(t) aperiodico a durata (circa) limitata in [−T1,T1)[-T_1,T_1), lo si campiona con passo T=2T1NT=\frac{2T_1}N e si usa S0(kF)≈T fftS_0(kF)\approx T\,\mathrm{fft} con F=1NT=12T1F=\frac1{NT}=\frac1{2T_1} (come nei laboratori, Esercizio - laboratorio 4, segnali continui aperiodici e risoluzione). Due scelte progettuali:

  • il passo in frequenza F=1NT=12T1F=\frac1{NT}=\frac1{2T_1} (risoluzione) dipende solo dalla durata osservata 2T12T_1;
  • l'estensione dell'asse delle frequenze, ±Fp2=±12T\pm\frac{F_p}2=\pm\frac1{2T}, dipende dal passo di campionamento: se il segnale non è a banda limitata entro quel valore c'è aliasing.

FFT: come si calcola

Il calcolo diretto di NN valori con NN moltiplicazioni ciascuno richiede circa N2N^2 operazioni. La FFT (fast Fourier transform) abbassa il costo a circa Nlog⁡2NN\log_2N. L'idea (decimazione nel tempo, per NN potenza di 22): si separano i campioni di indice pari e dispari, Xk=∑mx2me−i2πkm/(N/2)⏟Ek+e−i2πk/N∑mx2m+1e−i2πkm/(N/2)⏟Ok,Xk+N/2=Ek−e−i2πk/NOk,X_k=\underbrace{\sum_m x_{2m}e^{-i2\pi km/(N/2)}}_{E_k}+e^{-i2\pi k/N}\underbrace{\sum_m x_{2m+1}e^{-i2\pi km/(N/2)}}_{O_k},\qquad X_{k+N/2}=E_k-e^{-i2\pi k/N}O_k, dove EkE_k e OkO_k sono DFT di lunghezza N/2N/2, e si ripete la divisione fino a lunghezza 11. Per N=1024N=1024: circa 51205120 moltiplicazioni complesse contro oltre 10610^6. Il risultato è identico alla DFT diretta (verificato: l'implementazione ricorsiva coincide con np.fft.fft per N=16N=16).

Convenzioni numeriche (NumPy / MATLAB)

np.fft.fft(x) (come fft di MATLAB) calcola ∑n=0N−1xne−i2πkn/N\sum_{n=0}^{N-1}x_ne^{-i2\pi kn/N} senza fattori. Quindi con le convenzioni del corso:

quantità come si calcola
DFT del corso S(kF)S(kF) T * np.fft.fft(x)
coefficienti di Fourier SkS_k np.fft.fft(x) / N
segnale dalla DFT np.fft.ifft(S) / T (se S è la DFT del corso)
asse delle frequenze k * F, F=1NTF=\frac1{NT}, k=0,…,N−1k=0,\dots,N-1 (oppure np.fft.fftfreq(N, T))
asse centrato in 00 np.fft.fftshift(...) sia sui valori sia sull'asse, per NN pari k=−N/2,…,N/2−1k=-N/2,\dots,N/2-1

I primi N/2N/2 valori sono le frequenze positive 0,…,Fp20,\dots,\frac{F_p}2, gli altri le frequenze negative (per la periodicità k≡k−Nk\equiv k-N). Se il segnale discreto non parte da n=0n=0 ma è centrato in 00 (segnale non causale), la fase della DFT contiene un termine lineare dovuto allo spostamento: si ottiene la fase attesa riordinando le due metà del vettore (equivale a ifftshift) prima della FFT. Il leakage compare se il segnale periodico non ha un numero intero di periodi nella finestra: la DFT di un coseno con f0f_0 non multiplo di FF non è una sola riga ma si distribuisce su molti kk.

Esercizi collegati

Vedi anche la materia gemella: Trasformata di Fourier discreta (TFD)La TFD è la serie di Fourier dei segnali discreti periodici di periodo $N$: servono solo $N$ armoniche, $X(k)=\frac1N\sum_{n=0}^{N-1}x(n)e^{-j2\pi kn/N}$ e $x(n)=\sum_{k=0}^{N-1}X(k)e^{j2\pi kn/N}$. È un prodotto matrice-vettore in $\mathbb{C}^N$ (la matrice di Fourier); la convoluzione circolare diventa prodotto, $N X(k)Y(k)$. La FFT la calcola in $O(N\log N)$.Trasformata di Fourier discreta (TFD) → e FFT e zero-padding - TF, TFtd e asse delle pulsazioniLa FFT dei campioni di un segnale a durata finita, moltiplicata per il passo $T_c$, approssima la trasformata di Fourier: $X(\omega_k)\approx T_c,\mathtt{fft}(x,M)[k]$ con $\omega_k=\frac{2\pi k}{MT_c}$ (e fattore di fase $e^{-j\omega t_0}$ se l'asse parte da $t_0$). Lo zero-padding ($M>N$) infittisce i punti della stessa TFtd senza aggiungere informazione; la risoluzione dipende dalla durata osservata. Per un segnale reale $|X|$ è simmetrico: il picco in $k$ ha un gemello in $M-k$.FFT e zero-padding - TF, TFtd e asse delle pulsazioni →.

Versione ripasso

Errori tipici:

  • Confondere la DFT del corso (con TT) con la fft di NumPy (senza fattori).
  • Dimenticare la normalizzazione 1N\frac1N nei coefficienti Sk=F S(kF)S_k=F\,S(kF).
  • Pensare che lo zero-padding migliori la risoluzione: migliora solo il campionamento in frequenza.
  • Leggere le frequenze oltre N2\frac{N}2 come positive: per k>N2k>\frac N2 sono negative.
  • Dimenticare che senza fftshift l'asse parte da 00 e non da −Fp2-\frac{F_p}2.

Esercizi su questo argomento

Teoria collegata