Calcolo della DFT Complessità del calcolo diretto N −1 X kn x(n)WN X(k) = n=0 DFT N −1 1 X −kn X(k)WN x(n) = N k = 0, . . . , N − 1 → DFT n = 0, . . . , N − 1 → DFT−1 k=0 con WN = e−j2π/N . Se x(n) è complessa: X(k) = N −1 X kn kn {<[x(n)] + j=[x(n)]}{<[WN ] + j=[WN ]} n=0 N −1 X = {<[x(n)] n=0 |{z} kn <[WN ] · ↓ 1 ∗ reale − ↓ =[x(n)] 1 + reale kn =[WN ]} · ↓ 1 ∗ reale (N −1) + reali + N −1 X n=0 |{z} j{<[x(n)] kn =[WN ] · ↓ 1 ∗ reale + ↓ 1 + reale =[x(n)] · ↓ kn <[WN ]} 1 ∗ reale (N −1) + reali 139 A cura di M. Ruggieri, M. Pratesi Calcolo della DFT ⇓ PN −1 Operazioni richieste: n=0 (1 + 1 + 1 + 1) = 4N moltiplicazioni reali. (calcolo approssimato, perché - p.e. - WN0 = 1 non richiede moltiplicazioni, ma efficace per confronto di algoritmi) N −1 X (1 + reale) + n=0 N −1 X (1 + reale) n=0 = [ (N − 1) + N ] + [ (N − 1) + N ] | {z } | {z } P P di N termini di N termini = 2N − 1 + 2N − 1 = 4N − 2 addizioni reali 140 A cura di M. Ruggieri, M. Pratesi Calcolo della DFT • Numero operazioni complesse per ogni k (k = 0, . . . , N − 1) moltiplicazioni N addizioni: N − 1 • In totale moltiplicazioni: N 2 addizioni: N (N − 1) Che equivalgono alle seguenti operazioni reali moltiplicazioni: 4N 2 addizioni: 4N 2 − 2N 141 A cura di M. Ruggieri, M. Pratesi Calcolo della DFT Per calcolare N valori X(k): con calcolo diretto DFT: ∼ N 2 ⇓ Per N grande → enorme! ⇓ Interesse per algoritmi di riduzione del numero di moltiplicazioni e addizioni 142 A cura di M. Ruggieri, M. Pratesi Calcolo della DFT Passo intermedio: l’algoritmo di Goertzel Proprietà di WNkn su cui si basano gli algoritmi di riduzione della complessità: k(N −n) 1. WN = (WNkn )∗ k(n+N ) 2. WNkn = WN n(k+N ) = WN 143 A cura di M. Ruggieri, M. Pratesi Calcolo della DFT Usando la 1.: h i kn k(N −n) <[x(n)]< WN + <[x(N − n)]< WN = kn = {<[x(n)] + <[x(N − n)]}< WN e h i kn k(N −n) = −=[x(n)]= WN − =[x(N − n)]= WN kn = −{=[x(n)] − =[x(N − n)]}= WN essendo h i kn k(N −n) < WN = < WN h i kn k(N −n) = WN = −= WN • Riduzione del numero di moltiplicazioni di un fattore circa 2 tuttavia • Numero di operazioni rimane sempre proporzionale a N 2 144 A cura di M. Ruggieri, M. Pratesi Calcolo della DFT Per ottenere una riduzione delle operazioni notevole si sfrutta: proprietà n. 2 = periodicità di sequenza WNkn ⇓ complessità proporzionale a N log N 145 A cura di M. Ruggieri, M. Pratesi Calcolo della DFT Passo intermedio: l’algoritmo di Goertzel Sfrutta periodicità di WNkn ⇒ algoritmo più efficiente del metodo diretto Per la periodicità ⇒ ⇒ WN−kN = ej(2π/N )N k = ej2πk = 1 ⇓ X(k) = N −1 X x(r)WNkr = r=0 = WN−kN N −1 X x(r)WNkr = r=0 ⇒ posto yk (n) , N −1 X −k(N −r) x(r)WN r=0 N −1 X −k(n−r) x(r)WN ⇒ r=0 X(k) = yk (n)|n=N dove yk (n) può essere interpretata come la convoluzione discreta tra x(n) a durata finita (0 6 n 6 N − 1) e WN−kn ⇓ 146 A cura di M. Ruggieri, M. Pratesi Calcolo della DFT ⇓ yk (n) è, dunque, la risposta di un sistema con h(n) = WN−kn a un ingresso x(n) In particolare: X(k) è il valore dell’uscita per n = N x(n) z −1 yk(n) a= WN−k Grafo di flusso di un sistema del primo ordine per il calcolo ricorsivo di X(k). yk (n) = x(n) + ayk (n − 1) Yk (z)[1 − az −1 ] = X(z) 1 Hk (z) = → 1 − az −1 → h(n) = an u(n) = WN−kn u(n) {|az −1 | = |z −1 | < 1} = R 147 A cura di M. Ruggieri, M. Pratesi Calcolo della DFT Numero di operazioni: essendo x(n) e WN−k complessi, dalla yk (n) = x(n) + ak yk (n − 1) ak = WN−k che richiede: 1 moltiplicazione complessa 1 addizione complessa ⇓ 4 moltiplicazioni reali 4 addizioni reali ⇓ per calcolare X(k) = yk (N ) servono: y (N − 1), yk (N − 2), . . . , yk (1) {z } |k N − 1 termini ⇓ in totale: 4N molt. reali 4N addizioni reali 148 per ogni k A cura di M. Ruggieri, M. Pratesi Calcolo della DFT Per ridurre di un fattore 2 il numero di moltiplicazioni, mantenendo la semplificazione di prima: (1 − WNk z −1 ) 1 Hk (z) = = −k −1 1 − WN z (1 − WNk z −1 )(1 − WN−k z −1 ) 1 − WNk z −1 = 2π 1 − 2 cos N k z −1 + z −2 Per realizzare i poli: solo 2 moltiplicazioni, essendo i coefficienti reali e il coefficiente (−1) non contando come moltiplicazione; • Addizioni: 4 (come prima) per realizzare i poli. • Moltiplicazione per −WNk : essendo relativa allo zero, viene eseguita solo dopo la n-sima iterazione x(n) 2cos(2πk /N) −1 z −1 yk(n) −WNk z −1 149 A cura di M. Ruggieri, M. Pratesi Calcolo della DFT Numero totale operazioni: 2N moltiplicazioni reali e 4N addizioni reali per i poli + 4 moltiplicazioni reali e 4 addizioni reali per lo zero = (2N + 4) molt. reali e (4N + 4) addiz. reali ⇒ rispetto a 4N ∗ e (4N − 2) + di caso diretto ⇒ circa dimezzato il numero di moltiplicazioni reali richieste dal metodo diretto 150 A cura di M. Ruggieri, M. Pratesi Calcolo della DFT Esempio: N = 3 Pongo Ak = 2 cos Bk = −W3k 2π 3 k reale complesso Per calcolare 1 punto di DFT (cioè per 1 k) y(1) = {Ak y(0) − y(−1)} + {x(1) + Bk x(0)} | {z } =0 = ↑ y(0)=x(0)=yc (0) = {Ak yc (0) + x(1)} + Bk yc (0) | {z } yc (1) y(2) = {Ak y(1) −y(0)} + {x(2) + Bk x(1)} |{z} = ↑ sostituisco a y(1) sua espressione = {Ak [yc (1) + Bk yc (0)] − yc (0)} + {x(2) + Bk x(1)} = {Ak yc (1) − yc (0) + x(2)} + Bk {Ak yc (0) + x(1)} | {z } | {z } yc (2) è yc (1)! 151 A cura di M. Ruggieri, M. Pratesi Calcolo della DFT y(3) = {Ak y(2) − y(1)} + {x(3) + Bk x(2)} = ↑ sostituisco a y(2) e y(1) l’espressione di sopra = {Ak yc (2) − yc (1) + x(3)} + Bk {Ak yc (1) − yc (0) + x(2)} | {z } | {z } yc (3) è yc (2)! Quindi, per calcolare y(3) serve: 1. calcolo di yc (1) (cioè 2 ∗ reali e 2 + reali e, se y(−1) 6= 0, altre 2 +) 2. calcolo di yc (2) (cioè 2 ∗ reali e 4 + reali) 3. calcolo di yc (3) (cioè 2 ∗ reali e 4 + reali) 4. calcolo di Bk yc (2) (cioè 4 ∗ reali e 2 + reali) 5. calcolo di y(3) = yc (3) + Bk yc (2) (cioè 2 + reali) 1., 2., 3. → parte poli: 3 ·2 ∗ e 3 ·4 + ↑ ↑ N N 4., 5. → parte zeri: (4 ∗ e4 + reali) 152 A cura di M. Ruggieri, M. Pratesi Calcolo della DFT In generale, l’equazione alle differenze che realizza Hk (z) nella nuova forma è 2π k yk (n − 1) − yk (n − 2) yk (n) = 2 cos N + {x(n) − WNk x(n − 1)} Per valutare yk (N ), si devono calcolare: y(1) = yc (1) + Bk yc (0) y(2) = yc (2) + Bk yc (1) .. . y(m) = yc (m) + Bk yc (m − 1) .. . y(N ) = yc (N ) + Bk yc (N − 1) N passi con yc (m) = Ak yc (m − 1) − yc (m − 2) + x(m) e yc (0) = y(0) Dunque, si devono effettuare: 2N ∗ e 4N + 4 ∗ 4 + e e 4N + 4 + ⇓ per N punti di DFT: (2N + 4)N ∗ e (4N + 4)N + 2N + 4 ∗ 153 per gli yc (m), m = 1, . . . , N per y(N ) reali c.v.d. reali A cura di M. Ruggieri, M. Pratesi Calcolo della DFT • Lo schema: - è più efficiente del precedente - conserva il vantaggio che gli unici coefficienti da calcolare e memorizzare sono 2π cos k e WNk N poiché i coefficienti WNkn sono valutati implicitamente nella iterazione ricorsiva. 154 A cura di M. Ruggieri, M. Pratesi Calcolo della DFT • Ulteriore vantaggio del metodo: per calcolo della X(z) di x(n) in punti coniugati del circolo unitario, cioè calcolo di X(k) e X(N − k) si nota che: - la rete per per calcolare X(n − k) ha gli stessi poli di quella per X(k) e per lo zero un coefficiente complesso coniugato di quello per X(k) - dal momento che l’operazione dello zero è eseguita all’ultima iterazione → le 2N moltiplicazioni e 4N addizioni necessarie per i poli possono essere usate per ricavare 2 valori di DFT ⇒ usando l’algoritmo di Goertzel per il calcolo degli N valori di DFT ⇒ circa N 2 moltiplicazioni e 2N 2 addizioni → ancora N 2 !! 155 A cura di M. Ruggieri, M. Pratesi Calcolo della DFT X(k) può essere valutata in generale su M 6 N valori di k e non, necessariamente, su tutti gli N valori ⇓ numero totale di calcoli proporzionale a M N ⇓ tecniche convenienti per M piccolo mentre sono disponibili algoritmi più sofisticati con numero di operazioni proporzionale a N log2 N se N è una potenza di 2 ⇓ • Se M < log2 N metodi Goertzel o diretto possono rappresentare tecnica più efficiente • algoritmi veloci, se sono richiesti tutti gli N valori di X(k) sono molto più efficienti (fattore N/ log2 N ) 156 A cura di M. Ruggieri, M. Pratesi Algoritmi FFT basati sulla decimazione nel tempo (FFT-DT) • FFT = Fast Fourier Transform • Si sfruttano simmetria e periodicità di WNkn • Decimazione nel tempo = scomposizione si attua suddividendo x(n) in sottosequenze via via più piccole Ipotesi: x(n) = N = 2ν xp (n) | {z } ⇒ N pari ⇒ + xd (n) | {z } lunga N/2, composta da punti di x(n) con indice dispari lunga N/2, composta da punti di x(n) con indice pari ⇓ N −1 X X(k) = x(n)WNnk n=0 k=0,...,N −1 = N −1 X [xp (n) + xd (n)]WNnk n=0 = X x(n)WNnk n pari + X x(n)WNnk n dispari ⇓ 157 A cura di M. Ruggieri, M. Pratesi Algoritmi FFT basati sulla decimazione nel tempo (FFT-DT) ⇓ n = 2r n pari n = 2r + 1 n dispari (N/2)−1 X(k) = X (N/2)−1 x(2r)WN2rk X + r=0 = (N/2)−1 x(2r)(WN2 )rk + r=0 ⇓ (2r+1)k x(2r + 1)WN r=0 (N/2)−1 X ⇓ X x(2r + 1)(WN2 )rk WNk r=0 WN2 = e−2j(2π/N ) = e−j2π/(N/2) = WN/2 158 ⇓ A cura di M. Ruggieri, M. Pratesi Algoritmi FFT basati sulla decimazione nel tempo (FFT-DT) WN2 = e−2j(2π/N ) = e−j2π/(N/2) = WN/2 ⇓ (N/2)−1 X(k) = X (N/2)−1 rk x(2r)WN/2 + r=0 = ⇓ G(k) | {z } WNk X rk x(2r + 1)WN/2 r=0 + WNk DFT su N/2 punti H(k) | {z } DFT su N/2 punti con G(k) e H(k) periodiche in k di periodo N/2 ⇓ k = 0, 1, . . . , N − 1 ma le due DFT G(k) e H(k) devono essere opportunamente combinate per ottenere la DFT X(k) su N punti 159 A cura di M. Ruggieri, M. Pratesi Algoritmi FFT basati sulla decimazione nel tempo (FFT-DT) Numero di operazioni: 2 DFT da N/2 punti rispetto a calcolo diretto • se non si sfruttano le proprietà di simmetria: se N è sufficientemente grande da porre N ' N − 1 ⇒ necessarie N 2 moltiplicazioni e addizioni complesse • 2 DFT su N/2 punti ⇒ necessarie 2(N/2)2 moltiplicazioni e circa 2(N/2)2 addizioni complesse + operazioni per combinare le 2 DFT cioè N moltiplicazioni complesse per il prodotto con WNk degli N valori H(k) e N addizioni complesse per G(k) + WNk H(k) 160 A cura di M. Ruggieri, M. Pratesi Algoritmi FFT basati sulla decimazione nel tempo (FFT-DT) Esempio N = 8 = 2ν , ν = 3 complessità iniziale: ∼ N 2 = 64 operazioni ( ∗ o +) 2 N 1a decimazione: N + 2 = 40 (DFT su 4 punti) 2 " 2 # N N 2a decimazione: N + 2 +2 = 32 (DFT su 2 punti) 2 4 N 3a decimazione: N + N + 4 = N + N + N = νN = (log2 N )N 4 ↑ (∗) (∗): la DFT su N/4 punti comporta solo le N/4 ∗ oppure + per combinare. 161 A cura di M. Ruggieri, M. Pratesi Algoritmi FFT basati sulla decimazione nel tempo (FFT-DT) 1o passo FFT-DT Esempio N = 8 Nota: i X(i) = G(i) + WN 2,3 = (N/2) − 1 H(i),j i = 0, 1, N N X(j) = G j − 2 + WN H j − 2 , j = 4 = (N/2), 5, 6, 7 = (N − 1) Perché G(k) e H(k) hanno periodo N/2 = 4 4 4 P.e. X(4) = G(4) + WN H(4) = G(0) + WN H(0) In totale: moltiplicazioni complesse: addizioni complesse: N + N 2 /2 N + N 2 /2 N2 con N + < N2 ! 2 162 A cura di M. Ruggieri, M. Pratesi Algoritmi FFT basati sulla decimazione nel tempo (FFT-DT) 2o passo: se N/2 è pari (se N = 2ν e ν > 1 è vera) =⇒ =⇒ ogni DFT su N/2 punti ⇒ 2 DFT su N/4 punti (N/2)−1 (N/4)−1 X X G(k) = rk g(r)WN/2 = r=0 2lk g(2l)WN/2 X X lk k g(2l)WN/4 +WN/2 G1 (k) | {z G2 (k) } (N/4)−1 X lk k +WN/2 h(2l)WN/4 l=0 | lk g(2l + 1)WN/4 l=0 } (N/4)−1 H(k) = g(2l + 1)WN/2 (N/4)−1 {z X (2l+1)k X l=0 l=0 | + l=0 (N/4)−1 = (N/4)−1 lk h(2l + 1)WN/4 l=0 {z H1 (k) } | {z H2 (k) 163 } A cura di M. Ruggieri, M. Pratesi Algoritmi FFT basati sulla decimazione nel tempo (FFT-DT) Numero di operazioni: Passando da DFT su N/2 punti a DFT su N/4 punti: (N/2)2 ⇒ 2(N/4)2 + N/2 ⇒ h i N 2 N N 2 calcolo totale: N + 2 2 4 + 2 = N + N + 4 4 ∗ / + complesse... ⇒ iterando al massimo la scomposizione si arriva a N log2 N ∗ / + complesse (cioè N + N + · · · + N ) | {z } ν volte 164 A cura di M. Ruggieri, M. Pratesi Algoritmi FFT basati sulla decimazione nel tempo (FFT-DT) 2o passo FFT-DT Ulteriore scomposizione delle DFT di N/2 punti in 2 da N/4 punti: Gi (k) (i = 1, 2) hanno periodo N/4 = 2. (analoga struttura per ottenere gli H(k), k = 0, . . . , 3) N.B.: 3 2 1 1. WN/2 = WN6 , WN/2 = WN4 , WN/2 = WN2 2. G(0) = G(2), G(1) = G(3) 165 A cura di M. Ruggieri, M. Pratesi Algoritmi FFT basati sulla decimazione nel tempo (FFT-DT) FFT-DT N =8 N = 8 = 23 ⇒ ν = 3 Tutti i WN di questo stadio sono k WN/2 ⇑ divenuti WN2k (con k = 0, 1, 2, 3) 166 A cura di M. Ruggieri, M. Pratesi Algoritmi FFT basati sulla decimazione nel tempo (FFT-DT) FFT-DT N =8 Grafo di flusso di una DFT su 2 punti Inserendo questo schema nel primo stadio dello schema precedente, si ottiene il seguente Grafo di flusso per la scomposizione completa del calcolo di una DFT su 8 punti, con il metodo della decimazione nel tempo. 167 A cura di M. Ruggieri, M. Pratesi Algoritmi FFT basati sulla decimazione nel tempo (FFT-DT) In generale • ν stadi di calcolo • dopo aver effettuato il max numero di iterazioni ν = log2 N =⇒ N log2 N moltiplicazioni e addizioni complesse 168 A cura di M. Ruggieri, M. Pratesi Algoritmi FFT basati sulla decimazione nel tempo (FFT-DT) Detta Xm (l), l = 0, 1, . . . , N − 1 e m = 1, 2, . . . , ν la sequenza di numeri complessi che risultano all’uscita dello m-simo stadio di calcolo (p.e. stadio 0 = ingresso: X0 (i) = x(0), x(4), x(2), x(6), x(1), x(5), x(3), x(7) per i = 0 ÷ 7, rispettivamente e stadio ν = uscita Xν (i) = X(i), i = 0 ÷ 7), in ogni stadio si ha: ( Xm+1 (p) = Xm (p) + WNr Xm (q) (r+N/2) Xm+1 (q) = Xm (p) + WN Xm (q) Grafo di flusso del calcolo base (“butterfly”) ⇓ 169 A cura di M. Ruggieri, M. Pratesi Algoritmi FFT basati sulla decimazione nel tempo (FFT-DT) per ridurre di un fattore 2 il numero di moltiplicazioni comN/2 plesse, tenendo conto che WN = e−jπ = −1, si ha una struttura di “butterfly” equivalente: ⇓ Xm+1 (p) = Xm (p) + WNr Xm (q) Xm+1 (q) = Xm (p) + WNr Xm (q) Grafo di flusso del calcolo semplificato della farfalla richiedente soltanto una moltiplicazione complessa. Numero di “butterfly” per stadio: N/2 ⇓ su ν = log2 N stadi ⇓ N log2 N “butterfly” 2 ⇓ 1 moltiplicazione complessa per butterfly ⇓ N log2 N moltiplicazioni complesse (invece di N log2 N ) 2 170 A cura di M. Ruggieri, M. Pratesi Algoritmi FFT basati sulla decimazione nel tempo (FFT-DT) p, q, r: variano in ogni stadio esempio N = 8 I calcoli sono effettuati “sul posto”, dal momento che per valutare Xm+1 (p) e Xm+1 (q) servono solo i valori della sequenza m-sima (Xm (p) e Xm (q)) ⇓ Si può usare sempre lo stesso insieme di N registri di memoria (complessi) per svolgere tutti i calcoli ⇒ serve che dati di ingresso vengano memorizzati in ordine non sequenziale 171 A cura di M. Ruggieri, M. Pratesi Algoritmi FFT basati sulla decimazione nel tempo (FFT-DT) Memorizzazione dati di ingresso a disposizione invertita di bit Diagramma ad albero raffigurante l’ordinamento dei campioni con la disposizione 172 A cura di M. Ruggieri, M. Pratesi Algoritmi FFT basati sulla decimazione nel tempo (FFT-DT) Forme alternative per FFT-DT (N = 8) 173 A cura di M. Ruggieri, M. Pratesi Algoritmi FFT basati sulla decimazione nel tempo (FFT-DT) Forme alternative per FFT-DT (N = 8) Ordinamento ingresso e uscita, ma non calcoli sul posto (servono 2 insiemi di N registri compl.) 174 A cura di M. Ruggieri, M. Pratesi Algoritmi FFT basati sulla decimazione in frequenza (FFT-DF) Suddivisione della sequenza X(k) in sottosequenze sempre più piccole: ⇓ N = 2ν (N/2)−1 X(k) X = ↑ x(n)WNnk + n=0 suddividendo x(n) in due parti N −1 X x(n)WNnk n=N/2 (N/2)−1 X = ↑ n0 n=0 = nP− in 2a N 2 | {z } 6= da DFT su N/2 punti nk ! perché c’è WN nk ) (e non WN/2 (N/2)−1 + x(n)WNnk X x n0 + 0 | n =0 N 0 (N/2)k WNn k · WN 2 {z } 6= da DFT su N/2 punti n0 k e non W n0 k ! perché c’è WN N/2 (N/2)k ⇓ WN = (−1)k 175 A cura di M. Ruggieri, M. Pratesi Algoritmi FFT basati sulla decimazione in frequenza (FFT-DF) accorpando le P (N/2)−1 ↓ = ↑ X(k) n= n0 n=0 in 2a N x(n) + (−1)k x n + 2 X WNnk P ⇓ separando k pari da k dispari (N/2)−1 X N = x(n) + x n + WN2rn 2 ↑ n=0 X(2r) (−1)k = 1 (N/2)−1 X(2r + 1) X = ↑ n=0 N x(n) − x n + 2 WNn · WN2rn k (−1) = −1 r = 0, 1, . . . , (N/2 − 1) 176 A cura di M. Ruggieri, M. Pratesi Algoritmi FFT basati sulla decimazione in frequenza (FFT-DF) Cosı̀ espresse, le X(2r) e X(2r + 1) sono due DFT su N/2 punti, essendo: • • • • • g(n) = x(n) + x(n + N/2) somma di 1a e 2a metà di x(n) h(n) = [x(n) − x(n + N/2)] differenza tra 1a e 2a metà di x(n) h(n) è moltiplicata per WNn : h(n)WNn e X(2r + 1) è sua DFT g(n) e h(n): lunghe N/2 P corrispondono a DFT su N/2 punti dal momento che: rn WN2rn = WN/2 Numero di operazioni: per N = 2ν sono richieste (N/2) log2 N moltiplicazioni complesse N log2 N addizioni complesse stessa complessità di algoritmi basati su decimazione nel tempo 177 A cura di M. Ruggieri, M. Pratesi Algoritmi FFT basati sulla decimazione in frequenza (FFT-DF) 2 Spiegazione complessità DFT-DF N ∗ / + complesse + somme complesse per costruire g(n) 2 N 2 | {z } FFT 2 N N ∗ / + complesse + somme complesse per costruire h(n) X(2r + 1) → 2 2 | {z } X(2r) → FFT N n moltiplicazioni complesse per WN 2 ⇒ In totale: 2 2 N N N N + +2 =N +2 + 2 2 2 2 2 2 N N N N ∗ +2 = +2 2 2 2 2 operazioni complesse ⇒ iterando la decimazione: N N N + →N + N + ··· + N ∗ → + + ··· + | {z } 2 {z 2} |2 ν volte + ν volte 178 A cura di M. Ruggieri, M. Pratesi Algoritmi FFT basati sulla decimazione in frequenza (FFT-DF) FFT-DF (N = 8) 1o passo 179 A cura di M. Ruggieri, M. Pratesi Algoritmi FFT basati sulla decimazione in frequenza (FFT-DF) FFT-DF (N = 8) 2o passo 180 A cura di M. Ruggieri, M. Pratesi Algoritmi FFT basati sulla decimazione in frequenza (FFT-DF) FFT-DF (N = 8) 3o passo Xm+1 (p) = Xm (p) + Xm (q) Xm+1 (q) = [Xm (p) − Xm (q)]WNr calcoli diversi da DT butterfly del generico stadio butterfly di ultimo stadio 181 A cura di M. Ruggieri, M. Pratesi Algoritmi FFT basati sulla decimazione in frequenza (FFT-DF) È il trasposto del grafo di flusso di decimazione nel tempo (stesse caratteristiche ingresso/uscita dei due grafi, inversione direzione flusso e scambio ingresso/uscita) 182 A cura di M. Ruggieri, M. Pratesi FFT Inversa (IFFT) Algoritmo di FFT Inversa (IFFT): Esempio per N = 8 Grafo di flusso di un calcolo di DFT inversa ottenuto invertendo i calcoli a farfalla 183 A cura di M. Ruggieri, M. Pratesi FFT Inversa (IFFT) Da “butterfly” di decimazione nel tempo: Xm+1 (p) = Xm (p) + WNr Xm (q) (4) Xm+1 (q) = Xm (p) − WNr Xm (q) e da struttura di decimazione nel tempo: Xν (k) = X(k) e X0 (k) = x(n) ⇓ Si invertono (4), ricavando Xm = funz(Xm+1 ): Xm (p) = [Xm+1 (p) + Xm+1 (q)]/2 (4) Xm (q) = [Xm+1 (p) − Xm+1 (q)]WN−r /2 184 A cura di M. Ruggieri, M. Pratesi FFT Inversa (IFFT) P −1 −kn • IDFT = N1 N ⇒ per calcolo IDFT si può usare algoritmo di k=0 X(k)WN FFT, usando potenze di WN−1 (invece che di WN ) e moltiplicando per N1 • Algoritmo di IFFT ⇒ può diventare algoritmo di FFT sostituendo: (1/2 WN−r ) con (WNr ), dal momento che eliminare il fattore 1/2 da ognuno dei ν stadi equivale a moltiplicare l’uscita per 2ν = N . ⇓ Operando la sostituzione e ponendo in ingresso x(n) con disposizione dei bit ordinata, si ritrova schema FFT di decimazione in frequenza. 185 A cura di M. Ruggieri, M. Pratesi Strutture alternative 186 A cura di M. Ruggieri, M. Pratesi Complessità comparata M = numero di punti di DFT richiesti. 1. Metodo diretto (M può essere uguale o diverso da N ) ∗ 4N 2 reali; N 2 complesse + 4N 2 − 2N reali; N (N − 1) complesse 2. Algoritmo di Goertzel (M può essere uguale o diverso da N ) - di base ∗ 4N 2 reali; N 2 complesse equivalenti + 4N 2 reali; N 2 complesse equivalenti - modificato N ∗ (2N + 4)N reali; 2 + 1 N complesse equivalenti + (4N + 4)N reali; 32 N + 1 N complesse equivalenti 3. Decimazione (FFT, M = N ) ∗ 2N log2 N reali equivalenti; N2 log2 N complesse equivalenti + 3N log2 N reali equivalenti; N log2 N complesse equivalenti 187 A cura di M. Ruggieri, M. Pratesi Metodo per N numero composto N= Y fattori pi = p1 p2 . . . pν i 1. Se è possibile, in molti casi si aumenta la lunghezza della sequenza con valori 0 nulli per passare a N 0 = 2ν e applicare algoritmi visti. 2. Con N 6= 2ν (p.e. decimazione nel tempo): posto q1 , ν Y pj = p2 p3 . . . p ν ⇒ N = p1 q 1 j=2 188 A cura di M. Ruggieri, M. Pratesi Metodo per N numero composto scomposizione di x(n) in p1 sequenze di q1 campioni ognuna: p.e. N = 12 = 3 · 4 (p1 = 3, q1 = 4) x(0), x(3), x(6), x(9); x(1), x(4), x(7), x(10); x(2), x(5), x(8), x(11) | {z } | {z } | {z } 1a sequenza 2a sequenza 3a =p1 -sima sequenza etc. iterando il procedimento, il numero di operazioni è: N (p1 + p2 + · · · + pν − ν) moltiplicazioni e somme complesse p.e. p1 = p2 = · · · = pν = p p1 = p = 2 → → numero di operazioni = N (p − 1)ν numero di operazioni = N ν (come noto) 189 A cura di M. Ruggieri, M. Pratesi Metodo per N numero composto Esempio: N = 18 = composto = 3 · 3 · 2 p1 = 3 q1 = 6 sequenza x(n) divisa in 3 parti (a, b, c) da 6 campioni l’una Grafo di flusso del primo stadio della scomposizione di una DFT su 18 punti X(k) = 3−1 X l=0 lr W18 6−1 X 3rk x(3r + l)W18 r=0 k 2k = G0 (k) + W18 G1 (k) + W18 G2 (k) 190 A cura di M. Ruggieri, M. Pratesi Metodo per N numero composto Uso di valori di N con fattori diversi da 2 comporta: • aumento di velocità e flessibilità in alcuni casi (vantaggio) • aumento notevole di complessità dell’algoritmo di calcolo (svantaggio) 191 A cura di M. Ruggieri, M. Pratesi Metodo per N numero composto In ogni algoritmo di calcolo FFT esistono due aspetti principali in relazione ai problemi di calcolo: a. accesso e memorizzazione dei dati negli stadi intermedi; b. effettiva realizzazione della “butterfly”, ottenuti i dati necessari. 192 A cura di M. Ruggieri, M. Pratesi Metodo per N numero composto • Negli algoritmi in cui serve l’ordine a disposizione invertita di bit, dal momento che le sequenze non si presentano in generale in tale ordine, il primo passo realizzativo consiste nella permutazione dei campioni della sequenza d’ingresso. Riordinamento è effettuabile “sul posto” (con variabile di buffer) e solo ove è necessario (p.e. N = 8, x(0), x(2), x(5) e x(7) non vanno scambiati) • Quando due trasformate sono messe in cascata si può evitare la necessità di inversione dei bit con una scelta appropriata degli algoritmi di FFT (p.e. DFT con uscita a disposizione invertita di bit e uscita in ordine normale) 193 A cura di M. Ruggieri, M. Pratesi Metodo per N numero composto Coefficienti • i coefficienti WN2 possono essere richiesti in ordine a disposizione invertita dei bit o in ordine normale ⇓ – memorizzazione di una tabella sufficientemente estesa in cui cercare tutti i valori richiesti (vantaggio: velocità; svantaggio: memoria) – calcolare i valori che servono – servono WNr r = 0, 1, . . . , (N/2) − 1 ⇒ (N/2) posizioni di memoria complesse per tabella completa • se si usa tabella incompleta di WNr , che sfrutta proprietà di simmetria, si riduce occupazione di memoria al prezzo di maggiore complessità nella ricerca. – se servono coefficienti a disposizione invertita dei bit è necessario che la tabella sia redatta di conseguenza 194 A cura di M. Ruggieri, M. Pratesi Metodo per N numero composto • Calcolo coefficienti quando servono è meno efficiente. Si migliora tale efficienza con formula ricorsiva: q(l−1) WNql = WNq WN |{z} | {z } l-simo (l−1)-simo valida se coefficienti servono in ordine normale (se in ordine invertito di bit, non è applicabile) • usando aritmetica a precisione finita ⇒ errori possono sommarsi nell’iterazione ⇒ in generale è necessario reinizializzare i valori in certi punti (p.e. N/4 WN = −j) per non rendere gli errori inaccettabili. 195 A cura di M. Ruggieri, M. Pratesi