4.5 Trasformata discreta di Fourier
Disponendo di una sequenza di lunghezza
finita composta da
N valori
xn,
n = 0, 1, ..., N − 1, corrispondenti a campioni di un segnale
x(t) prelevati con ritmo
fc = 1 Tc , si indica come
Discrete Fourier Transform (
DFT) la nuova sequenza
univocamente definita per
m = 0, 1, ..., N − 1, e che costituisce una approssimazione del campionamento in frequenza della trasformata
X(f) = F {x(t)}, calcolata per
f = m N fc, e moltiplicata per
fc:
Notiamo subito che la (
10.75) è valida per qualsiasi
m, ed ha un andamento periodico con periodo
N, a cui corrisponde la frequenza
fc = 1 Tc (vedi fig.
4.24), in accordo con la periodicità in frequenza evidenziata per
X•(f) (vedi
(10.73) e
(10.67)); per questo motivo, qualora il segnale originario
x(t) contenga componenti a frequenze maggiori di
fc 2 , gli
Xm con indici prossimi ad
N2 presenteranno errore di aliasing. Notiamo inoltre come i valori
Xm siano tutti relativi a frequenze
≥ 0, ma nel caso di una sequenza
xn reale la proprietà di simmetria coniugata, associata alla periodicità in frequenza, rende il risultato interessante solo per indici
m ≤ N2, dato che successivamente si trovano valori coniugati a quelli della prima metà.
DFT come prodotto matriciale
Notiamo infine che la
(10.75) può essere espressa in forma matriciale: ad esempio, per
N = 4 si ottiene
da cui notiamo la proprietà di
simmetria per la matrice dei coefficienti.
Esempio Allo scopo di concretizzare le differenze tra la trasformata di Fourier ed i valori forniti dalla dft, in fig. 4.25-a sono riportati i valori |Xm|, normalizzati in ampiezza, per la dft di una sinusoide a 10 Hz, adottando due diverse finestre di analisi (vedi § 3.8.4), prelevando alla medesima frequenza di campionamento (100 Hz) un numero variabile di campioni (mostrato in figura), e ponendo i rimanenti a zero, per calcolare in tutti i casi la medesima DFT a 256 punti. Il risultato è quindi confrontato (fig.
4.25-b) con quello ottenibile per via analitica calcolando la
F -trasformata dello stesso segnale, adottando le medesime finestre temporali, di durata uguale al primo caso. Le curve ottenute nel caso di
80 msec (e
8 campioni!) dipendono da meno di un periodo di segnale, e perciò presentano una componente continua apprezzabile. Aumentando la durata della finestra, l’approssimazione di calcolare una
F {} mediante la
dft migliora, anche se persiste un ridotto potere di risoluzione spettrale.
Osservazione Qualche lettore potrebbe stupirsi di non trovare due linee spettrali, come da attendersi per una sinusoide. Ma questo può accadere a patto che il numero di campioni N su cui si effettua la dft sia un multiplo intero k del numero di campioni M = T⁄Tc che ricadono entro uno stesso periodo T della sinusoide, con
k che esprime quanti periodi entrano in
N campioni, ed
M quanti campioni/periodo. In tal caso l’applicazione della
idft (10.78) produce una sequenza ancora periodica. Nel nostro esempio, essendo
T = 1⁄10 = 100 msec e scegliendo
N = 64 punti e
k = 6 periodi, il vincolo
N = kM = kTfc permette di ottenere
fc = N kT = 64 6 ⋅ 10− 1 = 106, 6 Hz, ovvero
M = Tfc = 10− 1 ⋅ 106, 6 = 10, 6 campioni/periodo. La fig.
4.26 mostra questo risultato, evidenziando come la riga spettrale si manifesti per
m = 6, ossia alla frequenza
f = mN fc = 6 64 106.6 = 10 Hz, mentre la riga presente in
m = 58 è in realtà il ripiegamento periodico di quella a
− 10 Hz.
Il passaggio dai campioni nel tempo
xn a quelli in frequenza
Xm è invertibile , ricorrendo alla
Inverse Discrete Fourier Transform (
IDFT)
che per n esterno a [0, N − 1] continua a valere, ed assume valori periodici, coerentemente a quanto accade per lo sviluppo in serie di Fourier. Infatti il legame tra dft e serie di Fourier è molto stretto, in quanto i valori Xm rappresentano una approssimazione dei rispettivi coefficienti della serie di Fourier XSFm = 1 T ∫T2−T2xT(t)e −j2πm T tdt, calcolati a partire da un segmento xT(t) estratto da x(t), e moltiplicati per N:
Per approfondire i risvolti di questo risultato, affrontiamo la sezione successiva.
4.5.1 Relazione tra DTFT, DFT e trasformata zeta
Così come per i segnali analogici sussiste una relazione (vedi pag.
1) tra la trasformata di
Fourier e quella di
Laplace, così nel contesto delle sequenze, esistono legami tra
dtft e
trasformata zeta, definita quest’ultima come
X(z) = Z{xn}, funzione complessa della variabile complessa
zeta, e valutata come
che, nel caso in cui per |z| = 1 la (10.80) converga, può essere fatta corrispondere alla dtft (10.73) della stessa sequenza xn semplicemente ponendo z = e jω, ovvero calcolando X(z) sul cerchio unitario:
Infatti, nelle consuete condizioni in cui gli xn sono i campioni di un segnale x(t) limitato in banda tra ± W e prelevati con ritmo fc ≥ 2W, la (10.81) effettivamente coincide (per − π ≤ ω < π) con la X•(f) (eq. (10.73), per − fc⁄2 ≤ f ≤ fc⁄2) in cui si ponga f = ω2πTc , mettendo cioè in corrispondenza le frequenze ± fc⁄2 di X•(f) con le pulsazioni ± π di X(e jω). Al di fuori dell’intervallo − π ≤ ω < π la X(e jω) è periodica in ω con periodo 2π, analogamente a ciò che risulta (con periodo fc) per la trasformata di Fourier X•(f) di sequenze; se invece xn è sottocampionata, ossia fc < 2W, anche X(e jω) è affetta da aliasing, così come avviene per X•(f).
Esempio Consideriamo la sequenza
xn = ⎧⎨⎩ an se n ≥ 0 0 altrim. il cui andamento per
a = 0.7 è mostrato in fig.
4.28, la cui trasformata zeta
X(z) = ∑∞n = −∞an z − n risulta pari a
X(z) = 1 1 − az− 1 , ed il cui modulo, dopo aver scritto la variabile complessa
z come
z = x + jy, è espresso come
|X(z)| = 1⁄√ ⎛⎝x2 − ax + y2 x2 + y2 ⎞⎠2 + ⎛⎝ayx2 + y2 ⎞⎠2 .
Facendo ora variare
z nell’intervallo
[ −2 −j2, 2 +j2] si ottiene per il modulo di
X(z) l’andamento mostrato nella figura a lato, in cui è anche raffigurato un cilindro di raggio unitario, la cui intersezione con
|X(z)| individua la forma di
ossia della dtft della sequenza an, che a sua volta è mostrata in fig. 4.28 per
− π < ω < π, e nella figura a lato come una linea rossa.
Se la
X(e jω) ottenuta per una sequenza
xn aperiodica nel tempo
è campionata in
N punti equispaziati e disposti sul cerchio unitario, ossia ponendo
ω = 2π m N con
m = 0, 1, …, N − 1, allora si ottiene una sequenza periodica in frequenza
che può coincidere con la sequenza
Xm ottenuta calcolando la
dft (10.75) di una sequenza
xn, qualora questa abbia una durata limitata
≤ N. D’altro canto, è possibile applicare la
idft (
10.78) ad un periodo della sequenza
X̃m, ed ottenere quindi una nuova sequenza di valori nel tempo, anch’essa periodica di periodo
N, espressa come
Infatti, i valori
x̃n dipendono da quelli
xn = x(t)|t = nTc del segnale originario
x(t), campionato agli istanti
t = nTc, mediante la relazione
e quindi i primi
N valori di
x̃n coincidono con i campioni di
x(t) solo se quest’ultimo ha durata limitata, con estensione minore di
NTc, ossia se
N è sufficientemente elevato in modo che
NTc copra tutta la durata di
x(t), e la (
10.80) si riconduca alla somma di un numero finito di termini. D’altra parte, se
x(t) ha durata maggiore di
NTc, ovvero
X(z) è stata campionata su di un numero di campioni troppo ristretto, allora l’applicazione della IDFT (
10.84) ad
X̃(k) provoca il fenomeno di
aliasing temporale.
Esempio Nella parte sinistra di fig. 4.29 viene mostrato il modulo della sequenza
Xm ottenuta campionando la
X(e jω) dell’esempio precedente, utilizzando 16, 8 o 4 campioni/periodo. Nella parte destra della stessa figura sono quindi rappresentate le corrispondenti sequenze
xn ottenute mediante
idft. Si può notare che, mentre con 16 campioni/periodo la ricostruzione della sequenza
xn = an è piuttosto fedele, con 8 campioni si inizia a verificare il fenomeno di aliasing temporale, che diviene ancor più evidente per 4 campioni/periodo.
La figura
4.30 riassume le relazioni che legano la trasformata di Fourier per segnali limitati in banda ai suoi campioni ed alla relativa
dtft, così come viene illustrata la relazione tra
dtft,
dft, e trasformata zeta.
4.5.2 Fast Fourier Transform
La sigla
fft descrive una classe di algoritmi di calcolo della
dft e della sua inversa, caratterizzati dall’uso di un numero molto ridotto di operazioni, rendendo così computazionalmente praticabile l’elaborazione numerica dei segnali. Analizziamo innanzitutto come il calcolo di ognuno degli N termini
Xm della
(10.75), considerando i valori
e −j2πm N n precalcolati (vedi
(10.77)), richieda
N moltiplicazioni complesse (equivalenti ognuna a 4 moltiplicazioni e 2 somme reali) ed
N − 1 somme complesse (ognuna pari a 2 somme reali): pertanto una
dft richiede
N(N(4 + 2) + 2(N − 1)) = N(8N − 2) ≃ 8N2
operazioni.
Al contrario, gli algoritmi fft più efficienti riducono il numero di operazioni ad 8Nlog2N: ad esempio, ponendo N = 1024, si ottiene un miglioramento di 23(210)2⁄23210 ⋅ 10 = 210⁄10 ≃ 100 volte! Queste prestazioni sono legate all’adozione di un valore di N che sia una potenza di due (ossia N = 2Mcon M intero), ma successivamente sono stati individuati metodi che permettono una efficienza di calcolo comparabile anche per finestre di analisi di lunghezza qualsiasi.
4.5.3 Relazione tra DFT e DCT
Anche per la
dft risulta valida la proprietà di simmetria coniugata (§
84) e quindi, se i valori della sequenza
xn di lunghezza
N che compare nella (
10.75) sono reali anziché complessi, allora i coefficienti di
dft Xm presentano parte reale pari e parte immaginaria dispari. In particolare, se immaginiamo di
estendere la lunghezza della sequenza a
2N punti, ottenuti ribaltando sugli indici negativi la sequenza di partenza come
x − n = xn (vedi prima riga di fig.
4.31), allora siamo nelle condizioni di sequenza
reale pari, che
determina una trasformata solo reale (e pari), con parte immaginaria nulla.
Per arrivare a definire la
Discrete Cosine Transform (
dct) si calcola una
dft bilatera sulla sequenza lunga
2N ottenuta
traslando quella descritta al passo precedente in modo da renderla effettivamente pari (seconda riga di fig.
4.31). Considerando che per segnali reali pari le componenti sinusoidali della base della
dft non danno contributi al risultato , e adottando un nuovo cambio di variabile, si ottiene in definitiva la formula di calcolo della
dct come
a cui è associata la trasformazione inversa
idct
La
dct verrà usata nell’ambito della compressione di immagini (§
304). Infatti, i valori di luminanza dei pixel in cui si scompone una immagine sono tutti valori reali.
4.5.4 DFT come un banco di filtri
Un banco di filtri è qualcosa che esegue simultaneamente diverse operazioni di filtraggio sullo stesso segnale, emettendo tutti i risultati contemporaneamente. I valori
Xm = ⎲⎳N− 1n = 0 xn e −j2π m N n
di una
dft ad
N punti per una sequenza
xn equivalgono all’output decimato di
N filtri, ciascuno con risposta impulsiva
hm(n) = e j2π N m ⋅ n con
m, n = 0, 1, ⋯, N − 1, rappresentate nella figura a lato:
- viene mostrata solo la parte reale di hm(n);
- la decimazione avviene con periodo pari alla separazione delle finestre di segnale (sovrapposte o meno);
- ogni filtro hm ha il modulo della risposta in frequenza approssimativamente pari ad un sinc (dovuto ad una finestra rettangolare) centrato alla frequenza digitale 2πmN (vedi figura seguente);
- un progetto più specifico del filtro può ottenere una risposta in frequenza più selettiva, vedi cap. 5.
Un’analisi più approfondita di ciò che accade può essere fatta partendo dal filtro che produce
X0 e che è un filtro
a media mobile (pagina
1), la cui uscita è esattamente uguale a
X0 = ∑N− 1n = 0xn e −j2π 0 N n = ∑N− 1n = 0xn, che è
la media dei valori dei campioni: pertanto il filtro risultante ha una risposta in frequenza
passa-basso della forma mostrata a pagina
1, con
N − 1 zeri disposti sul cerchio unitario. Per gli altri elementi della
dft con
m ≠ 0 la risposta impulsiva a media mobile viene
modulata moltiplicandola per
e −j2πm N n, in modo che la sua risposta in frequenza
trasli verso l’indice
m, corrispondente alla frequenza digitale
ω = 2π m N . In definitiva, la risposta in frequenza composita viene mostrata sotto con una scala verticale in dB, per il caso di una
dft con 12 punti.