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

Trasformata di Fourier discreta (DFT) e convoluzione circolare

In questa pagina 6

La trasformata di Fourier a tempo discreto (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 →) di un segnale è una funzione continua della frequenza: un calcolatore non può calcolarla né memorizzarla. Può invece trattare un numero finito di valori: la DFT (discrete Fourier transform) trasforma NN numeri in NN numeri e dà campioni della DTFT. In questa nota si ripassano definizione e proprietà (con T=1T=1, come nel corso; la trattazione con TT esplicito è in Trasformata di Fourier discreta (DFT) e FFTUn segnale discreto periodico di periodo $NT$ ha una trasformata discreta e periodica, la DFT: $S(kF)=\sum_{n=0}^{N-1}T,s(nT)e^{-i2\pi kn/N}$, con $F=1/(NT)$, e $s(nT)=\sum_{k=0}^{N-1}F,S(kF)e^{i2\pi kn/N}$. Dipende da soli $N$ numeri, si calcola senza approssimazioni e con la FFT costa $N\log_2N$ invece di $N^2$. I coefficienti di Fourier del segnale periodico sono $S_k=F,S(kF)$. La DFT dà anche campioni della trasformata di un segnale discreto o continuo a durata limitata (con zero-padding), ma la scalatura $T$ e l'asse delle frequenze vanno gestiti con cura.Trasformata di Fourier discreta (DFT) e FFT → e in 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 →), si collega la DFT alla trasformata zeta e alla DTFT, e si studia la convoluzione circolare, che è il modo in cui la DFT "fa" la convoluzione.

Definizione

Un segnale finito x[0],…,x[N−1]x[0],\dots,x[N-1] si può vedere come un periodo di un segnale periodico x[n]=x[n+N]x[n]=x[n+N], n∈Zn\in\mathbb Z. Il periodo Tp=NTT_p=NT determina la risoluzione in frequenza F=1/TpF=1/T_p e la trasformata è periodica con periodo Fs=NFF_s=NF (Fs=1/TF_s=1/T frequenza di campionamento).

Definizione (DFT e IDFT, con T=1T=1). X[k]=∑n=0N−1x[n] e−j2πkn/N,x[n]=1N∑k=0N−1X[k] ej2πkn/N,k,n=0,…,N−1.X[k]=\sum_{n=0}^{N-1}x[n]\,e^{-j2\pi kn/N},\qquad x[n]=\frac1N\sum_{k=0}^{N-1}X[k]\,e^{j2\pi kn/N},\qquad k,n=0,\dots,N-1. Con la notazione WN=e−j2π/NW_N=e^{-j2\pi/N} (radice NN-esima primitiva dell'unità): X[k]=∑nx[n]WNknX[k]=\sum_nx[n]W_N^{kn} e x[n]=1N∑kX[k]WN−knx[n]=\frac1N\sum_kX[k]W_N^{-kn}. Gli estremi delle somme possono essere qualsiasi NN interi consecutivi, perché i termini sono periodici.

Esempio. x={1,2,3,4}x=\{1,2,3,4\}, N=4N=4: X[0]=1+2+3+4=10X[0]=1+2+3+4=10; X[1]=1+2(−j)+3(−1)+4(j)=−2+2jX[1]=1+2(-j)+3(-1)+4(j)=-2+2j; X[2]=1−2+3−4=−2X[2]=1-2+3-4=-2; X[3]=−2−2jX[3]=-2-2j. Si ottiene X={10, −2+2j, −2, −2−2j}X=\{10,\ -2+2j,\ -2,\ -2-2j\} (verificato con Python, con l'IDFT che restituisce xx).

Asse delle frequenze. L'indice kk corrisponde alla pulsazione ω^k=2πk/N\hat\omega_k=2\pi k/N e alla frequenza fk=kFs/Nf_k=kF_s/N. La risoluzione (frequency spacing) è F=Fs/NF=F_s/N. Gli indici k>N/2k>N/2 rappresentano frequenze negative: kk e k−Nk-N coincidono per periodicità.

Esempio (lezione). T=0.001 sT=0.001\ \mathrm s (Fs=1000 HzF_s=1000\ \mathrm{Hz}) e N=4N=4: F=1000/4=250 HzF=1000/4=250\ \mathrm{Hz} e i bin k=0,1,2,3k=0,1,2,3 stanno a 0, 250, 500, 750 Hz0,\ 250,\ 500,\ 750\ \mathrm{Hz}; k=4k=4 ricade a 1000 Hz1000\ \mathrm{Hz}, cioè di nuovo a 00 per periodicità.

L'ortogonalità ∑k=0N−1ej2πk(n−m)/N=Nδn−m\sum_{k=0}^{N-1}e^{j2\pi k(n-m)/N}=N\delta_{n-m} (somma geometrica, Serie notevoli - geometrica, telescopica, armonicaLe serie di cui si conosce il carattere e da usare come termine di paragone: geometrica (converge a 1/(1-q) se |q|<1), telescopiche (somma b_1 - lim b_n, come Mengoli), armonica generalizzata (1/n^alpha converge se e solo se alpha>1).Serie notevoli - geometrica, telescopica, armonica →) garantisce che l'IDFT inverta la DFT. X[k]X[k] è un numero complesso: il modulo dice quanta potenza c'è a quella frequenza, la fase di quanto è sfasata nel tempo.

DFT, trasformata zeta e DTFT

Sia x[n]x[n] un segnale aperiodico a supporto finito {0,…,M−1}\{0,\dots,M-1\}. La sua trasformata zeta è X(z)=∑n=0M−1x[n]z−nX(z)=\sum_{n=0}^{M-1}x[n]z^{-n} (Trasformata zeta - definizione e regione di convergenzaLa trasformata zeta bilatera X(z) = Σ x[n] z^{-n} associa a una sequenza una funzione della variabile complessa z, definita nella regione di convergenza (ROC), sempre una corona circolare |z| in (R1, R2). Segnale a durata finita: ROC tutto il piano (tranne eventualmente 0 e ∞); causale: |z| > R1 (teorema di Abel); anticausale: |z| < R2; bilatero: intersezione, se non vuota. La stessa espressione algebrica con ROC diverse è la trasformata di segnali diversi: la ROC fa parte della trasformata. Sulla circonferenza unitaria, se è nella ROC, X(e^{jθ}) è la trasformata di Fourier. Le ROC non contengono poli.Trasformata zeta - definizione e regione di convergenza →) e la DTFT è X(ejω^)X(e^{j\hat\omega}).

Teorema (DFT = campionamento della zeta sulla circonferenza). Per N≥MN\ge M, la DFT a NN punti di x[n]x[n] è X[k]=X(z)∣z=ej2πk/N=X(ejω^)∣ω^=2πk/N,k=0,…,N−1,X[k]=X(z)\Big|_{z=e^{j2\pi k/N}}=X\big(e^{j\hat\omega}\big)\Big|_{\hat\omega=2\pi k/N},\qquad k=0,\dots,N-1, cioè la zeta valutata nelle NN radici NN-esime dell'unità: NN punti equispaziati sulla circonferenza unitaria a partire da z=1z=1.

Esempio. x={1,1,1,1}x=\{1,1,1,1\} e N=8N=8: X[k]=sin⁡(πk/2)sin⁡(πk/8)e−j3πk/8X[k]=\frac{\sin(\pi k/2)}{\sin(\pi k/8)}e^{-j3\pi k/8}, con moduli {4, 2.613, 0, 1.082, 0, 1.082, 0, 2.613}\{4,\ 2.613,\ 0,\ 1.082,\ 0,\ 1.082,\ 0,\ 2.613\}.

Il collegamento si capisce passando dal periodo: la DFT è la trasformata di Fourier del segnale periodico x~[n]=∑ℓ∈Zx[n−ℓN]\tilde x[n]=\sum_{\ell\in\mathbb Z}x[n-\ell N] ripetizione periodica di xx (periodic repetition) con periodo NN. Infatti, con m=n−ℓNm=n-\ell N e e−j2πk(m+ℓN)/N=e−j2πkm/Ne^{-j2\pi k(m+\ell N)/N}=e^{-j2\pi km/N}, X~[k]=∑n=0N−1∑ℓx[n−ℓN] e−j2πkn/N=∑m∈Zx[m] e−j2πkm/N=X(ej2πk/N),\tilde X[k]=\sum_{n=0}^{N-1}\sum_{\ell}x[n-\ell N]\,e^{-j2\pi kn/N}=\sum_{m\in\mathbb Z}x[m]\,e^{-j2\pi km/N}=X\big(e^{j2\pi k/N}\big), perché al variare di n=0..N−1n=0..N-1 e di ℓ∈Z\ell\in\mathbb Z l'indice mm percorre una volta sola tutti gli interi.

Aliasing temporale. Campionare la DTFT in frequenza equivale a ripetere periodicamente il segnale nel tempo (dualità del Teorema del campionamento, interpolazione e aliasingTeorema di Shannon: un segnale a banda limitata $\omega_M$ si ricostruisce esattamente dai campioni se $T_c<\pi/\omega_M$ (frequenza di campionamento maggiore di quella di Nyquist $2f_{\max}$), con la formula di interpolazione ideale $x(t)=\sum_nx(nT_c)\operatorname{sinc}\left(\frac{t-nT_c}{T_c}\right)$. Sotto Nyquist c'è aliasing: le frequenze alte si confondono con quelle basse e l'informazione è persa.Teorema del campionamento, interpolazione e aliasing →).

  • Se M≤NM\le N le repliche non si sovrappongono: x~[n]=x[n]\tilde x[n]=x[n] per 0≤n≤N−10\le n\le N-1 e xx si recupera esattamente dall'IDFT; NN campioni della DTFT bastano a descrivere xx.
  • Se M>NM>N (o xx ha durata infinita) le repliche si sovrappongono (temporal aliasing): l'IDFT dà x~[n]≠x[n]\tilde x[n]\neq x[n].

Esempio (aliasing). x={1,2,3,4,5,6}x=\{1,2,3,4,5,6\} (M=6M=6) e N=4N=4: x~[0..3]={1+5, 2+6, 3, 4}={6,8,3,4}\tilde x[0..3]=\{1+5,\ 2+6,\ 3,\ 4\}=\{6,8,3,4\} (gli ultimi due campioni 5,65,6 si ripiegano sull'inizio).

Zero-padding

Se N>MN>M si aggiungono N−MN-M zeri in coda. Non si aggiunge informazione ma si infittisce il campionamento della stessa DTFT: più punti sulla curva continua, per vedere meglio dove sono i picchi. Non si migliora la risoluzione (capacità di separare due righe vicine), che dipende dalla durata MM del segnale osservato (Analisi spettrale con la DFT - finestre e leakageAnalizzare lo spettro di un segnale con la DFT vuol dire osservarne solo L campioni (finestra rettangolare) e campionare in frequenza la DTFT. Una sinusoide non dà una riga ma il nucleo di Dirichlet della finestra centrato in w0: lobo principale largo 4pi/L e lobi laterali (il primo a -13.3 dB). Due toni più vicini della mezza larghezza del lobo non si separano (risoluzione, che dipende solo da L), e i lobi laterali di un tono mascherano i toni deboli (leakage). La DFT campiona la DTFT a 2pi k/N: l'ampiezza è corretta solo se il tono cade su un bin (periodi interi nella finestra), altrimenti si perde fino a 3.9 dB; lo zero-padding infittisce i campioni ma non migliora la risoluzione. Le finestre rastremate (Hann, Hamming, Blackman) abbassano i lobi laterali (-31, -42, -58 dB) a prezzo di un lobo principale più largo.Analisi spettrale con la DFT - finestre e leakage →).

Esempio. x={1,1}x=\{1,1\} (due campioni). Con N=4N=4: X[k]=1+e−jπk/2={2, 1−j, 0, 1+j}X[k]=1+e^{-j\pi k/2}=\{2,\ 1-j,\ 0,\ 1+j\}. Con N=8N=8 (zero-padding): Y[k]=1+e−jπk/4Y[k]=1+e^{-j\pi k/4}, otto punti della stessa curva 1+e−jω^1+e^{-j\hat\omega}, e Y[0]=X[0]Y[0]=X[0], Y[2]=X[1]Y[2]=X[1], Y[4]=X[2]Y[4]=X[2], Y[6]=X[3]Y[6]=X[3]. In generale raddoppiando NN i valori di indice pari coincidono con i vecchi e quelli dispari sono nuovi.

Grafico interattivo: Modulo della DTFT di x = {1,1,1,1} (curva) e della sua DFT a N = 8 punti (punti): zero-padding = più campioni della stessa curva. Con N = 4 la DFT sarebbe {4, 0, 0, 0}

Proprietà

Le proprietà sono quelle della trasformata di Fourier, con la differenza che gli indici sono modulo NN: (n)N=n mod N(n)_N=n\bmod N è il resto della divisione per NN (per esempio (−1)4=3(-1)_4=3, (5)4=1(5)_4=1).

Proprietà della DFT (x[n]↔X[k]x[n]\leftrightarrow X[k], NN punti).

  • Linearità: αx+βy↔αX+βY\alpha x+\beta y\leftrightarrow\alpha X+\beta Y.
  • Traslazione circolare (circular shift): x[(n−n0)N]↔e−j2πkn0/NX[k]x[(n-n_0)_N]\leftrightarrow e^{-j2\pi kn_0/N}X[k]: il modulo non cambia, la fase sì. Traslare di NN campioni (o multipli) non cambia il segnale.
  • Simmetria coniugata: se xx è reale, X[k]=X∗[N−k]X[k]=X^*[N-k] (=X∗[(−k)N]=X^*[(-k)_N]): parte reale pari, parte immaginaria dispari, modulo pari, fase dispari. Allora X[0]=∑x[n]X[0]=\sum x[n] è reale e, se NN è pari, anche X[N/2]=∑x[n](−1)nX[N/2]=\sum x[n](-1)^n è reale. Bastano ⌊N/2⌋+1\lfloor N/2\rfloor+1 valori complessi per descrivere la DFT di un segnale reale.
  • Convoluzione circolare: X[k]H[k]↔y[n]=∑ℓ=0N−1x[ℓ] h[(n−ℓ)N]=(x⊛h)[n]X[k]H[k]\leftrightarrow y[n]=\sum_{\ell=0}^{N-1}x[\ell]\,h[(n-\ell)_N]=(x\circledast h)[n].
  • Parseval: ∑n∣x[n]∣2=1N∑k∣X[k]∣2\sum_n\lvert x[n]\rvert^2=\frac1N\sum_k\lvert X[k]\rvert^2.

Esempio (traslazione). x={1,2,3,4}x=\{1,2,3,4\}, X={10,−2+2j,−2,−2−2j}X=\{10,-2+2j,-2,-2-2j\}. Il segnale traslato di un campione, x[(n−1)4]={4,1,2,3}x[(n-1)_4]=\{4,1,2,3\}, ha DFT {10, 2+2j, 2, 2−2j}\{10,\ 2+2j,\ 2,\ 2-2j\}, uguale a X[k]e−j2πk/4X[k]e^{-j2\pi k/4}: i moduli sono invariati (10, 22, 2, 2210,\ 2\sqrt2,\ 2,\ 2\sqrt2).

Esempio (simmetria e Parseval). Per x={1,2,3,4}x=\{1,2,3,4\}: X[3]=X∗[1]=−2−2jX[3]=X^*[1]=-2-2j ✓ e ∑x2=30=14(100+8+4+8)\sum x^2=30=\frac14(100+8+4+8) ✓.

Esempio (sinusoide su un bin). x[n]=cos⁡(2π⋅2n/8)x[n]=\cos(2\pi\cdot2n/8) con N=8N=8: X[2]=X[6]=N/2=4X[2]=X[6]=N/2=4 e tutti gli altri zero. In generale cos⁡(2πPn/N)↔N2{δ[k−P]+δ[k−(N−P)]}\cos(2\pi Pn/N)\leftrightarrow\frac N2\{\delta[k-P]+\delta[k-(N-P)]\}, e se P=0P=0 o P=N/2P=N/2 le due righe coincidono e danno X=NX=N.

Per la dimostrazione della convoluzione circolare: partendo da Y[k]=X[k]H[k]Y[k]=X[k]H[k] si antitrasforma y[n]=1N∑kX[k]H[k]ej2πkn/Ny[n]=\frac1N\sum_kX[k]H[k]e^{j2\pi kn/N}, si sostituisce H[k]=∑mh[m]e−j2πkm/NH[k]=\sum_mh[m]e^{-j2\pi km/N} e si scambiano le somme: y[n]=∑mh[m]⋅1N∑kX[k]ej2πk(n−m)/N=∑mh[m] x[(n−m)N]y[n]=\sum_mh[m]\cdot\frac1N\sum_kX[k]e^{j2\pi k(n-m)/N}=\sum_mh[m]\,x[(n-m)_N], dove l'ultima somma è l'IDFT di XX calcolata in n−mn-m, periodica di periodo NN.

Convoluzione circolare e convoluzione lineare

La convoluzione circolare (circular convolution) è una convoluzione "su una circonferenza": per ogni nn si prende hh riflessa e traslata, ma gli indici fuori da 0..N−10..N-1 rientrano dall'altra parte. Nell'esempio con N=4N=4: y[0]=x[0]h[0]+x[1]h[(−1)4]+x[2]h[(−2)4]+x[3]h[(−3)4]=x[0]h[0]+x[1]h[3]+x[2]h[2]+x[3]h[1],y[0]=x[0]h[0]+x[1]h[(-1)_4]+x[2]h[(-2)_4]+x[3]h[(-3)_4]=x[0]h[0]+x[1]h[3]+x[2]h[2]+x[3]h[1], perché (−1)4=3(-1)_4=3, (−2)4=2(-2)_4=2, (−3)4=1(-3)_4=1. È commutativa e si calcola come IDFT del prodotto delle DFT.

Per un filtro FIR serve invece la convoluzione lineare, di lunghezza Dy=Dx+M−1D_y=D_x+M-1 (Sistemi LTI e convoluzione discretaUn sistema lineare e tempo-invariante (LTI) è completamente descritto dalla sua risposta impulsiva h[n]: y[n] = Σ x[k] h[n-k] = x[n] * h[n] (somma di convoluzione). Si ricava scomponendo x in impulsi traslati e usando linearità e invarianza. La convoluzione è commutativa, associativa e distributiva; una cascata di LTI equivale a un solo filtro con h = h1 * h2 e l'ordine non conta. Se x ha lunghezza N e h lunghezza L, y ha lunghezza N+L-1. Si calcola col metodo della finestra scorrevole o a tabella. I FIR sono LTI; altri sistemi (n·x[n], x[-n], x²) non lo sono.Sistemi LTI e convoluzione discreta →). Le due coincidono solo se non c'è aliasing temporale.

Teorema (convoluzione lineare tramite DFT). Se xx ha lunghezza DxD_x e hh lunghezza MM, e si sceglie N ≥ Dy=Dx+M−1,N\ \ge\ D_y=D_x+M-1, allora, dopo aver completato xx e hh con zeri fino a NN campioni, la convoluzione circolare a NN punti coincide con quella lineare: ylin[n]=ycirc[n]y_{\rm lin}[n]=y_{\rm circ}[n] per 0≤n≤N−10\le n\le N-1. Con N<DyN<D_y la coda di yliny_{\rm lin} (gli ultimi Dy−ND_y-N campioni) si ripiega sull'inizio.

Esempio (lezione). x={1,2,3,4}x=\{1,2,3,4\} e h={1,1,1,1}h=\{1,1,1,1\}. Convoluzione lineare: ylin={1,3,6,10,9,7,4}y_{\rm lin}=\{1,3,6,10,9,7,4\}, lunghezza 4+4−1=74+4-1=7. Convoluzione circolare con N=4N=4: ycirc={10,10,10,10}y_{\rm circ}=\{10,10,10,10\} (lunghezza 44): infatti ycirc[0]=ylin[0]+ylin[4]=1+9y_{\rm circ}[0]=y_{\rm lin}[0]+y_{\rm lin}[4]=1+9, ycirc[1]=3+7y_{\rm circ}[1]=3+7, ycirc[2]=6+4y_{\rm circ}[2]=6+4 e ycirc[3]=10y_{\rm circ}[3]=10: le somme valgono tutte 1010. Per evitare l'aliasing si completa con zeri a N=8≥7N=8\ge7 (x={1,2,3,4,0,0,0,0}x=\{1,2,3,4,0,0,0,0\}, h={1,1,1,1,0,0,0,0}h=\{1,1,1,1,0,0,0,0\}) e si ottiene ycirc={1,3,6,10,9,7,4,0}=yliny_{\rm circ}=\{1,3,6,10,9,7,4,0\}=y_{\rm lin} più uno zero.

Esempio (filtro corto). x={1,2,3,4}x=\{1,2,3,4\}, h={1,1}h=\{1,1\}, N=4N=4: ycirc={5,3,5,7}y_{\rm circ}=\{5,3,5,7\}, mentre ylin={1,3,5,7,4}y_{\rm lin}=\{1,3,5,7,4\}: l'ultimo campione 44 si somma al primo (1+4=51+4=5).

Grafico interattivo: Convoluzione lineare di x = {1,2,3,4} con h = {1,1,1,1}: y = {1, 3, 6, 10, 9, 7, 4}, lunghezza 7

Grafico interattivo: Convoluzione circolare a N = 4 degli stessi segnali: y = {10, 10, 10, 10}. Gli ultimi 3 campioni della lineare (9, 7, 4) si sommano ai primi (1, 3, 6)

Quando conviene la DFT. Con la FFT il costo della convoluzione cala molto per filtri lunghi; il confronto dei costi e i metodi per segnali lunghi sono nella nota Convoluzione a blocchi - overlap-add e overlap-saveLa convoluzione lineare y = x * h (h lungo M) si può calcolare con la FFT scegliendo N >= Dx + M - 1 (potenza di 2): costo per campione circa 3 k log2 N contro k M del calcolo diretto, quindi la FFT conviene per M abbastanza grande (con Dx circa M, già da M = 16). Per segnali lunghi o infiniti si divide x in blocchi. Overlap-add: blocchi disgiunti di lunghezza L, ognuno convoluto con h (lunghezza L+M-1 con FFT di N >= L+M-1) e le code di M-1 campioni si sommano. Overlap-save: blocchi di N campioni sovrapposti di M-1, convoluzione circolare, si scartano i primi M-1 campioni di ogni uscita (corrotti dall'aliasing). Stesso costo.Convoluzione a blocchi - overlap-add e overlap-save →.

La FFT

Calcolare la DFT con la definizione richiede, per ogni kk, NN moltiplicazioni complesse e N−1N-1 somme: in tutto O(N2)\mathcal O(N^2) operazioni. La FFT (fast Fourier transform) è una famiglia di algoritmi con costo O(Nlog⁡2N)\mathcal O(N\log_2N), basati su "divide et impera" (divide and conquer): si spezza il problema in due di dimensione metà, si risolvono e si ricombinano le soluzioni con costo lineare; iterando fino a dimensione 11 ci sono log⁡2N\log_2N livelli.

Decimazione in tempo (decimation in time, N=2mN=2^m). Si dividono i campioni in quelli di indice pari x[2r]x[2r] e dispari x[2r+1]x[2r+1]. Con WN2=WN/2W_N^2=W_{N/2}: X[k]=∑rx[2r]WN/2rk⏟E[k]+WNk∑rx[2r+1]WN/2rk⏟O[k],k=0,…,N−1,X[k]=\underbrace{\sum_{r}x[2r]W_{N/2}^{rk}}_{E[k]}+W_N^k\underbrace{\sum_rx[2r+1]W_{N/2}^{rk}}_{O[k]},\qquad k=0,\dots,N-1, dove EE e OO sono due DFT a N/2N/2 punti, periodiche di periodo N/2N/2. Poiché WNk+N/2=−WNkW_N^{k+N/2}=-W_N^k, bastano E[k]E[k] e O[k]O[k] per k=0,…,N/2−1k=0,\dots,N/2-1: X[k]=E[k]+WNkO[k],X ⁣[k+N2]=E[k]−WNkO[k].X[k]=E[k]+W_N^kO[k],\qquad X\!\left[k+\tfrac N2\right]=E[k]-W_N^kO[k]. Questa coppia di operazioni (una moltiplicazione, una somma e una differenza) è la farfalla (butterfly). La ricombinazione costa N/2N/2 moltiplicazioni per livello, in tutto N2log⁡2N\frac N2\log_2N moltiplicazioni invece di N2N^2.

Esempio. x={1,2,3,4}x=\{1,2,3,4\}: pari {1,3}\{1,3\} danno E={4,−2}E=\{4,-2\}, dispari {2,4}\{2,4\} danno O={6,−2}O=\{6,-2\}, con W40=1W_4^0=1 e W41=−jW_4^1=-j. Allora X[0]=4+6=10X[0]=4+6=10, X[1]=−2+(−j)(−2)=−2+2jX[1]=-2+(-j)(-2)=-2+2j, X[2]=4−6=−2X[2]=4-6=-2, X[3]=−2−2jX[3]=-2-2j: coincide con la DFT calcolata sopra. Per N=1024N=1024: N2log⁡2N=5120\frac N2\log_2N=5120 moltiplicazioni contro 1 048 5761\,048\,576, un fattore ≈205\approx205.

Domande d'esame

  1. Definire la DFT e spiegarne il legame con la DTFT e con la trasformata zeta. Che cosa succede se il segnale è più lungo di NN? Traccia: X[k]=X(ej2πk/N)X[k]=X(e^{j2\pi k/N}), radici NN-esime dell'unità; ripetizione periodica x~[n]=∑ℓx[n−ℓN]\tilde x[n]=\sum_\ell x[n-\ell N] e dimostrazione del cambio di indice; M≤NM\le N nessun aliasing, M>NM>N aliasing temporale (esempio numerico); zero-padding infittisce ma non migliora la risoluzione.
  2. Enunciare la proprietà della convoluzione circolare e le condizioni sotto cui coincide con la lineare. Traccia: Y=XH↔∑x[ℓ]h[(n−ℓ)N]Y=XH\leftrightarrow\sum x[\ell]h[(n-\ell)_N] con derivazione; lunghezza Dx+M−1D_x+M-1; N≥Dx+M−1N\ge D_x+M-1 con zero-padding; esempio {1,2,3,4}\{1,2,3,4\} e {1,1,1,1}\{1,1,1,1\} ({10,10,10,10}\{10,10,10,10\} contro {1,3,6,10,9,7,4}\{1,3,6,10,9,7,4\}).
  3. Ricavare la FFT a decimazione in tempo e il suo costo. Traccia: separazione pari/dispari, WN2=WN/2W_N^2=W_{N/2}, X[k]=E[k]+WNkO[k]X[k]=E[k]+W_N^kO[k] e X[k+N/2]=E[k]−WNkO[k]X[k+N/2]=E[k]-W_N^kO[k], N2log⁡2N\frac N2\log_2N moltiplicazioni, confronto con N2N^2.

Versione ripasso

  • Definizione. X[k]=∑n=0N−1x[n] e−j2πkn/NX[k]=\sum_{n=0}^{N-1}x[n]\,e^{-j2\pi kn/N}, x[n]=1N∑k=0N−1X[k] ej2πkn/Nx[n]=\frac1N\sum_{k=0}^{N-1}X[k]\,e^{j2\pi kn/N}, con k,n=0,…,N−1k,n=0,\dots,N-1. Asse delle frequenze: ω^k=2πk/N\hat\omega_k=2\pi k/N, fk=kFs/Nf_k=kF_s/N, risoluzione Fs/NF_s/N; gli indici k>N/2k>N/2 sono frequenze negative.
  • Esempio. x={1,2,3,4}x=\{1,2,3,4\}: X={10, −2+2j, −2, −2−2j}X=\{10,\ -2+2j,\ -2,\ -2-2j\}.
  • DFT come campionamento della zeta. Per N≥MN\ge M: X[k]=X(z)∣z=ej2πk/NX[k]=X(z)\big|_{z=e^{j2\pi k/N}}, cioè NN punti equispaziati della DTFT, a partire da z=1z=1. Equivale a ripetere xx con periodo NN.
  • Aliasing temporale. Se M≤NM\le N non c'è aliasing e xx si recupera dall'IDFT. Se M>NM>N le repliche si sovrappongono. Esempio: x={1,2,3,4,5,6}x=\{1,2,3,4,5,6\} con N=4N=4 dà x~={6,8,3,4}\tilde x=\{6,8,3,4\}.
  • Zero-padding. Infittisce i campioni della stessa DTFT, ma non migliora la risoluzione, che dipende dalla durata MM. Esempio: x={1,1}x=\{1,1\} con N=8N=8 ha valori di indice pari uguali a quelli con N=4N=4.
  • Proprietà (indici modulo NN). Linearità. Traslazione circolare: x[(n−n0)N]↔e−j2πkn0/NX[k]x[(n-n_0)_N]\leftrightarrow e^{-j2\pi kn_0/N}X[k], il modulo non cambia. Simmetria coniugata per xx reale: X[k]=X∗[N−k]X[k]=X^*[N-k]; X[0]X[0] e, per NN pari, X[N/2]X[N/2] sono reali. Convoluzione circolare: X[k]H[k]↔∑ℓx[ℓ] h[(n−ℓ)N]X[k]H[k]\leftrightarrow\sum_\ell x[\ell]\,h[(n-\ell)_N]. Parseval: ∑∣x∣2=1N∑∣X∣2\sum\lvert x\rvert^2=\frac1N\sum\lvert X\rvert^2.
  • Esempio di Parseval. ∑x2=30=14(100+8+4+8)\sum x^2=30=\frac14(100+8+4+8).
  • Convoluzione circolare. Gli indici fuori da 0..N−10..N-1 rientrano dall'altra parte. Con N=4N=4: y[0]=x[0]h[0]+x[1]h[3]+x[2]h[2]+x[3]h[1]y[0]=x[0]h[0]+x[1]h[3]+x[2]h[2]+x[3]h[1].
  • Teorema. Se xx ha lunghezza DxD_x e hh lunghezza MM, con N≥Dx+M−1N\ge D_x+M-1 e zeri di completamento, la circolare coincide con la lineare. Con N<DyN<D_y la coda si ripiega sull'inizio.
  • Esempio di lezione. x={1,2,3,4}x=\{1,2,3,4\}, h={1,1,1,1}h=\{1,1,1,1\}: lineare {1,3,6,10,9,7,4}\{1,3,6,10,9,7,4\}; circolare con N=4N=4 dà {10,10,10,10}\{10,10,10,10\}; con N=8N=8 si ottiene la lineare più uno zero.
  • Filtro corto. x={1,2,3,4}x=\{1,2,3,4\}, h={1,1}h=\{1,1\}, N=4N=4: circolare {5,3,5,7}\{5,3,5,7\}, lineare {1,3,5,7,4}\{1,3,5,7,4\}.
  • FFT a decimazione in tempo (N=2mN=2^m). Con WN2=WN/2W_N^2=W_{N/2}: X[k]=E[k]+WNkO[k]X[k]=E[k]+W_N^kO[k] e X[k+N/2]=E[k]−WNkO[k]X[k+N/2]=E[k]-W_N^kO[k], dove EE e OO sono DFT a N/2N/2 punti dei campioni pari e dispari. Costo N2log⁡2N\frac N2\log_2N moltiplicazioni contro N2N^2. Esempio: per N=1024N=1024 si ha 51205120 contro 1 048 5761\,048\,576.
  • Notazione. WN=e−j2π/NW_N=e^{-j2\pi/N}: X[k]=∑nx[n]WNknX[k]=\sum_nx[n]W_N^{kn} e x[n]=1N∑kX[k]WN−knx[n]=\frac1N\sum_kX[k]W_N^{-kn}. Gli estremi delle somme possono essere NN interi consecutivi qualsiasi, perché i termini sono periodici.
  • Esempio di calcolo. Per x={1,2,3,4}x=\{1,2,3,4\}: X[1]=1+2(−j)+3(−1)+4j=−2+2jX[1]=1+2(-j)+3(-1)+4j=-2+2j e X[2]=1−2+3−4=−2X[2]=1-2+3-4=-2.
  • Ortogonalità. ∑k=0N−1ej2πk(n−m)/N=Nδn−m\sum_{k=0}^{N-1}e^{j2\pi k(n-m)/N}=N\delta_{n-m}: garantisce che l'IDFT inverta la DFT. Il modulo di X[k]X[k] dice quanta potenza c'è a quella frequenza, la fase lo sfasamento nel tempo.
  • Esempio di aliasing. Con M>NM>N l'IDFT dà x~[n]≠x[n]\tilde x[n]\neq x[n].
  • Esempio di DFT. x={1,1,1,1}x=\{1,1,1,1\} con N=8N=8: X[k]=sin⁡(πk/2)sin⁡(πk/8)e−j3πk/8X[k]=\frac{\sin(\pi k/2)}{\sin(\pi k/8)}e^{-j3\pi k/8}, moduli {4; 2,613; 0; 1,082; 0; 1,082; 0; 2,613}\{4;\ 2{,}613;\ 0;\ 1{,}082;\ 0;\ 1{,}082;\ 0;\ 2{,}613\}.
  • Traslazione. Il segnale x[(n−1)4]={4,1,2,3}x[(n-1)_4]=\{4,1,2,3\} ha DFT {10, 2+2j, 2, 2−2j}\{10,\ 2+2j,\ 2,\ 2-2j\}, uguale a X[k]e−j2πk/4X[k]e^{-j2\pi k/4}.
  • Sinusoide su un bin. cos⁡(2πPn/N)↔N2{δ[k−P]+δ[k−(N−P)]}\cos(2\pi Pn/N)\leftrightarrow\frac N2\{\delta[k-P]+\delta[k-(N-P)]\}: con N=8N=8, P=2P=2, si ha X[2]=X[6]=4X[2]=X[6]=4.
  • Dimostrazione della convoluzione circolare. Si antitrasforma X[k]H[k]X[k]H[k], si sostituisce H[k]H[k] e si scambiano le somme: resta ∑mh[m] x[(n−m)N]\sum_mh[m]\,x[(n-m)_N].
  • Costo. Filtri lunghi: la convoluzione con la FFT costa molto meno; metodi per segnali lunghi in Convoluzione a blocchi - overlap-add e overlap-saveLa convoluzione lineare y = x * h (h lungo M) si può calcolare con la FFT scegliendo N >= Dx + M - 1 (potenza di 2): costo per campione circa 3 k log2 N contro k M del calcolo diretto, quindi la FFT conviene per M abbastanza grande (con Dx circa M, già da M = 16). Per segnali lunghi o infiniti si divide x in blocchi. Overlap-add: blocchi disgiunti di lunghezza L, ognuno convoluto con h (lunghezza L+M-1 con FFT di N >= L+M-1) e le code di M-1 campioni si sommano. Overlap-save: blocchi di N campioni sovrapposti di M-1, convoluzione circolare, si scartano i primi M-1 campioni di ogni uscita (corrotti dall'aliasing). Stesso costo.Convoluzione a blocchi - overlap-add e overlap-save →.
  • Errore tipico. Pensare che lo zero-padding migliori la risoluzione: aggiunge campioni alla stessa curva.

Esercizi su questo argomento

Teoria collegata