Calcolo della DFT - Università degli Studi di Roma "Tor Vergata"

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