16.06.2013 Views

Elaborazione Numerica dei Segnali

Elaborazione Numerica dei Segnali

Elaborazione Numerica dei Segnali

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

112 Trasformata Discreta di Fourier<br />

Poniamo k −j = s e osserviamo che se 0 ≤ k ≤ N −1 allora 〈s〉N varia in {0, 1, . . . , N −1};<br />

vale inoltre e −i2πn(k−j)<br />

N = e −i2πn〈s〉 N<br />

N .<br />

Concludiamo allora:<br />

H(n) =<br />

N−1 <br />

j=0<br />

f(j)e −i2πnj<br />

N<br />

N−1 <br />

s=0<br />

g(s)e −i2πns<br />

N = F (n)G(n).<br />

Ricordiamo infine che per la trasformata discreta di Fourier vale l’analoga della relazione<br />

di Parseval (vedi la (2.12)):<br />

N−1 <br />

k=0<br />

| f(k) | 2 = 1<br />

N−1 <br />

| F (n) |<br />

N<br />

n=0<br />

2 .<br />

5.4 Algoritmo per il Calcolo Veloce della Trasformata Discreta<br />

(FFT)<br />

Il calcolo della trasformata discreta di Fourier richiede di moltiplicare un vettore a N<br />

componenti [f(0), . . . , f(N − 1)] per la matrice N × N la cui componente alla riga n e<br />

colonna k è:<br />

e −i2πnk<br />

N .<br />

Tale calcolo può essere ovviamente effettuato con O(N 2 ) operazioni di somma e prodotto,<br />

poichè il calcolo di ognuna delle N componenti F (n) richiede O(N) operazioni. Algoritmi<br />

più efficiente per il calcolo della trasformata sono stati proposti tra gli altri da Runge e<br />

Konig nel 1924 e da Cooley e Tukey nel 1965. Questi algoritmi richiedono O(N log N)<br />

invece di O(N 2 ) operazioni e per tal motivo sono chiamati FFT (Fast Fourier Transform<br />

algorithm). Presentiamo qui l’idea base quando N è una potenza di 2.<br />

Ricordiamo che la trasformata discreta è definita da:<br />

F (n) =<br />

N−1 <br />

k=0<br />

f(k)e −i2πnk<br />

N .<br />

Separando nella sommatoria i termini di indice pari da quelli di indice dispari, si ottiene:<br />

da cui:<br />

F (n) =<br />

F (n) =<br />

N/2−1<br />

<br />

k=0<br />

N/2−1<br />

<br />

k=0<br />

f(2k)e −i2π2kn<br />

N/2−1 <br />

N +<br />

k=0<br />

f(2k)e −i2πkn<br />

N/2 + e −i2πn<br />

N/2−1 <br />

N<br />

f(2k + 1)e −i2π(2k+1)n<br />

N ,<br />

k=0<br />

f(2k + 1)e −i2πnk<br />

N/2 .<br />

Questa formula esprime la possibilità di calcolare la trasformata discreta del vettore a<br />

N componenti [f(0), . . . , f(N − 1)] usando la trasformata discreta <strong>dei</strong> 2 vettori a N/2<br />

componenti [f(0), f(2), . . . , f(N − 2)] e [f(1), f(3), . . . , f(N − 1)]. Questo suggerisce la<br />

seguente procedura ricorsiva basata sulla tecnica divide et impera:

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!