1 Introduction
La transforme de Fourier rapide est simplement un algorithme permettant de rduire le
nombre d'oprations pour calculer la DFT (Discrete Fourier Transform).
Rappelons la relation permettant de calculer la DFT (on omet volontairement la
pondration 1/N) :
N 1
Sk = s n e
j 2
k n
N
(1)
n =0
Par consquent, les oprations effectuer pour obtenir les N valeurs de la DFT sont :
N2
N (N1)
multiplications complexes
additions complexes
Bien entendu, les multiplications complexes ont une dure d'excution beaucoup plus longue
que les additions.
2 Algorithme de Cooley-Tukey
L'algorithme de FFT le plus connu est celui de Cooley-Tukey, galement appel algorithme
de rduction base 2 dans le domaine temporel. Cet algorithme requiert un nombre
d'chantillons qui soit une puissance de 2. Par exemple : N=128, 256, 4096, etc.
D'autres algorithmes FFT existent qui requirent d'autres exigences, mais nous ne les
considrerons pas ici.
Dans le cas d'une FFT selon l'algorithme de Cooley-Tukey, le nombre d'oprations est
considrablement rduit :
N
log 2 N
2
multiplications complexes
N2
N
log 2 N
2
2N
log 2 N
Posons :
WNnk = e
j2
kn
N
(2)
S k = s k WNnk
(3)
n =0
WN2 nk = e
j2
kn
N/2
= W Nnk
(4)
b)
( nk +
WN
N
)
2
=e
j2
kn + N / 2
N
= WNnk
(5)
Exemple :
Prenons 8 chantillons, qui ont les valeurs successives suivantes s0, s1, s2, s3, s4, s5, s6, s7. La
DFT se prsente ainsi :
S0 = s 0 e j0 + s1 e j0 + s 2 e j0 + s 3 e j0 + s 4 e j0 + s 5 e j0 + s 6 e j0 + s 7 e j0
S1 = s 0 e
j0
S2 = s 0 e
S3 = s 0 e
S4 = s 0 e
S5 = s 0 e
j0
j0
j0
j0
+ s1 e
+ s1 e
+ s1 e
2
j
4
3
j
4
+ s1 e
+ s1 e
S6 = s 0 e j0 + s1 e
S7 = s 0 e j0 + s1 e
4
j
4
5
j
4
j
6
4
7
4
HE-Arc, ingnierie
+ s2 e
+s 2 e
2
4
4
j
4
+ s2 e
+ s3 e
6
j
4
+ s2 e
+ s2 e
+ s3 e
8
j
4
10
j
4
+ s2 e
+ s2 e
12
4
14
j
4
3
4
+ s4 e
6
j
4
+ s3 e
+ s4 e
9
j
4
+ s3 e
15
j
4
+ s3 e
+ s3 e
18
4
21
4
4
4
8
j
4
+ s4 e
12
j
4
+ s3 e
+ s5 e
12
j
4
+ s4 e
+ s4 e
20
j
4
j
24
4
28
4
+ s4 e
5
4
+ s6 e
10
j
4
+ s5 e
16
j
4
+ s4 e
+ s5 e
+ s6 e
15
j
4
+ s5 e
+ s5 e
25
j
4
j
30
4
35
4
+ s5 e
6
4
+ s7 e
12
j
4
+ s6 e
20
j
4
+ s5 e
+ s7 e
18
j
4
+ s6 e
30
j
4
+ s6 e
+ s6 e
7
4
14
4
+ s7 e
24
j
4
+ s6 e
36
4
42
4
+ s7 e
21
4
+ s7 e
+ s7 e
28
4
35
4
42
4
49
4
+ s7 e
S1 = s 0 e
j0
S1 = s 0 e
j0
+ s2 e
+ s2 e
2
4
+ s4 e
+ s4 e
4
4
2
2
+ s6 e
+ s6 e
6
4
3
2
3
5
7
j
j
j
j
4
4
4
+ s1 e + s3 e
+ s5 e
+ s 7 e 4
2
3
j
j
j
j
+ e 4 s1 e j0 + s 3 e 2 + s 5 e 2 + s 7 e 2
i =0
i =0
On voit que les termes W sont identiques pour les couples s0s1, s2s3, s4s5, s6s7 un
facteur exp(j/4) prs. On peut encore subdiviser les N/2 chantillons de nos parenthses :
S1 = s 0 e
j0
+ s4 e
HE-Arc, ingnierie
4
4
+e
2
4
4
j
s 2 e j0 + s 6 e 4
4
2
4
j
j
j
j 4
+ e s1 e j0 + s 5 e 4 + e 4 s 3 e j0 + s 7 e 4
S 2 = s 0 e j0 + s 4 e
S3 = s 0 e j 0 + s 4 e
S 4 = s 0 e j0 + s 4 e
S5 = s 0 e j 0 + s 4 e
S 6 = s 0 e j0 + s 4 e
S 7 = s 0 e j0 + s 4 e
0
4
+e
4
4
+e
8
4
+e
12
j
4
20
4
24
4
28
4
0
j
s 2 e j0 + s 6 e 4
0
0
0
j
j
j
j 04
+ e s1 e j 0 + s 5 e 4 + e 4 s 3 e j 0 + s 7 e 4
2
4
4
j
s 2 e j0 + s 6 e 4
4
2
4
j
j
j
j 4
+ e s1 e j 0 + s 5 e 4 + e 4 s 3 e j 0 + s 7 e 4
4
4
8
j
s 2 e j0 + s 6 e 4
8
4
8
j
j
j
j 24
s1 e j0 + s 5 e 4 + e 4 s 3 e j0 + s 7 e 4
+e
+e
16
j
4
0
4
+e
+e
+e
+e
6
4
12
j
s 2 e j0 + s 6 e 4
12
6
12
j
j
j
j34
s1 e j 0 + s 5 e 4 + e 4 s 3 e j 0 + s 7 e 4
+e
8
4
16
j
s 2 e j0 + s 6 e 4
16
8
16
j
j
j
j 44
s1 e j 0 + s 5 e 4 + e 4 s 3 e j 0 + s 7 e 4
+e
=
=
=
=
=
=
=
=
s0W80
s0W80
s0W80
s0W80
s0W80
s0W80
s0W80
s0W80
+
+
+
+
+
+
+
+
s4W80
s4W84
s4W88
s4W812
s4W816
s4W820
s4W824
s4W828
+
+
+
+
+
+
+
+
20
j
s 2 e j0 + s 6 e 4
20
10
20
j
j
j
j54
s1 e j 0 + s 5 e 4 + e 4 s 3 e j 0 + s 7 e 4
+e
12
j
4
24
j
s 2 e j0 + s 6 e 4
24
12
24
j
j
j
j64
s1 e j 0 + s 5 e 4 + e 4 s 3 e j 0 + s 7 e 4
+e
14
j
4
28
j
s 2 e j0 + s 6 e 4
28
14
28
j
j
j
j74
s1 e j 0 + s 5 e 4 + e 4 s 3 e j 0 + s 7 e 4
+e
W80 (s2W80
W82 (s2W80
W84 (s2W80
W86 (s2W80
W88 (s2W80
W810(s2W80
W812(s2W80
W814(s2W80
+
+
+
+
+
+
+
+
s6W80 )
s6W84 )
s6W88 )
s6W812)
s6W816)
s6W820)
s6W824)
s6W828)
+
+
+
+
+
+
+
+
W81[s1W80
W81[s1W80
W82[s1W80
W83[s1W80
W84[s1W80
W85[s1W80
W86[s1W80
W87[s1W80
+
+
+
+
+
+
+
+
s5W80
s5W84
s5W88
s5W812
s5W816
s5W820
s5W824
s5W828
+
+
+
+
+
+
+
+
En appliquant les rgles (4) et (5), on simplifie aisment les facteurs WNnk. Le rsultat est le
suivant :
S0
S1
S2
S3
S4
S5
S6
S7
=
=
=
=
=
=
=
=
s0
s0
s0
s0
s0
s0
s0
s0
+
+
+
+
-
s4W20
s4W20
s4W20
s4W20
s4W20
s4W20
s4W20
s4W20
HE-Arc, ingnierie
+
+
+
+
-
10
j
4
W40(s2
W41(s2
W40(s2
W41(s2
W40(s2
W41(s2
W40(s2
W41(s2
+
+
+
+
-
s6W20)
s6W20)
s6W20)
s6W20)
s6W20)
s6W20)
s6W20)
s6W20)
+
+
+
+
-
W80[s1
W81[s1
W82[s1
W83[s1
W80[s1
W81[s1
W82[s1
W83[s1
+
+
+
+
-
s5W20
s5W20
s5W20
s5W20
s5W20
s5W20
s5W20
s5W20
+
+
+
+
-
W40(s3
W41(s3
W40(s3
W41(s3
W40(s3
W41(s3
W40(s3
W41(s3
+
+
+
+
-
s7W20)]
s7W20)]
s7W20)]
s7W20)]
s7W20)]
s7W20)]
s7W20)]
s7W20)]
(6)
Opration "Butterfly"
Calcul "Butterfly"
a
a + WNnb
WNn
a - WNnb
Figure 1
2.2
Application la FFT
Etape calcul 2
Etape calcul 3
S0
s0
W4
s4
W20
S1
W 80
S2
s2
W41
s6
W20
S3
s1
S4
W81
W40
s5
W20
S5
W 82
3
8
S6
s3
W41
s7
W20
S7
Figure 2
HE-Arc, ingnierie
Comme on peut le voir sur la Figure 2, les couples d'chantillons doivent tre choisis au
dpart selon un ordre particulier : s0-s4, s2-s6, etc.
Cette incrmentation particulire est appele "reverse carry" (retenue inverse). Elle consiste
additionner N/2 l'indice, mais reporter la retenue droite plutt qu' gauche.
Exemple pour 8 chantillons (N/2 = 4) :
Indice en base 2
000
000 + 100 = 100
100 + 100 = 010
010 + 100 = 110
110 + 100 = 001
001 + 100 = 101
101 + 100 = 011
011 + 100 = 111
Indice en base 10
0
4
2
6
1
5
3
7
Tableau 2
Les DSP proposent tous un mcanisme d'incrmentation de ce type pour leurs pointeurs.
HE-Arc, ingnierie
Les quations dcrites dans (6) peuvent encore tre arranges autrement :
S0
S1
S2
S3
S4
S5
S6
S7
=
=
=
=
=
=
=
=
s0
s0
s0
s0
s0
s0
s0
s0
+
+
+
+
-
s1W80
s1W81
s1W82
s1W83
s1W80
s1W81
s1W82
s1W83
+
+
+
+
-
W40(s2
W41(s2
W40(s2
W41(s2
W40(s2
W41(s2
W40(s2
W41(s2
+
+
+
+
-
s3W80)
s3W81)
s3W82)
s3W83)
s3W80)
s3W81)
s3W82)
s3W82)
+
+
+
+
-
W20[s4
W20[s4
W20[s4
W20[s4
W20[s4
W20[s4
W20[s4
W20[s4
+
+
+
+
-
s5W80
s5W81
s5W82
s5W83
s5W80
s5W81
s5W82
s5W83
+
+
+
+
-
W40(s6
W41(s6
W40(s6
W41(s6
W40(s6
W41(s6
W40(s6
W41(s6
+
+
+
+
-
s7W80)]
s7W81)]
s7W82)]
s7W83)] (7)
s7W80)]
s7W81)]
s7W82)]
s7W83)]
La structure de l'algorithme n'est pas diffrente, simplement ce sont les index qui changent :
les chantillons sont ordonns linairement, alors que les valeurs de frquence sont ordonns
en "reverse carry" (situation inverse de la Figure 2).
Etape calcul 1
Etape calcul 2
Etape calcul 3
s0
S0
W40
s1
W20
S4
W 80
s2
S2
W41
s3
W20
S6
s4
W4
s5
S1
W81
0
W20
S5
W 82
W83
s6
S3
W41
s7
W20
S7
Figure 3
HE-Arc, ingnierie
La frquence d'chantillonnage doit tre au moins deux fois plus leve que la bande passante
du signal (thorme de l'chantillonnage). Le rapport de 2.56 est souvent choisi pour calculer
des FFT. Imaginons que notre bande passante soit sur 100 points, le nombre d'chantillons
sera 256, soit une puissance de 2 :
X(f)
(filtre anti-aliasing)
(axe de symtrie)
(aliasing)
Bw
(100 lignes)
fs=2.56*Bw
(256 lignes)
Figure 4
Le filtre anti-aliasing doit tre relativement performant, puisque le rapport de sa frquence de
coupure sur sa bande passante doit tre au minimum de (128+28)/100=1.56
On trouve des filtres capacits commutes qui remplissent parfaitement ces exigences.
Malheureusement, leur prcision est limite aujourd'hui 12 bits. Pour plus de prcision, il
faut chantillonner avec une frquence plus leve et employer d'autres mthodes de filtrage.
HE-Arc, ingnierie