Anda di halaman 1dari 8

Fast Fourier Transform (FFT)

Bibliographie Ce document sinspire du livre Traitement de linformation Murat Kunt,


Presses Polytechniques Romandes.

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

Le rapport du nombre de multiplication par rapport la DFT s'exprime ainsi :


R=

N2
N
log 2 N
2

Denis Prtre, dernire rvision : 19/01/2004

2N
log 2 N

Fast Fourier Transform (FFT)


Le tableau suivant nous donne le gain (multiplications complexes seulement) R pour quelques
valeurs de N :
Nombre d'chantillons N
8
128
512
1024
2048
4096

Rapport du nombre de multiplications DFT/FFT


5.3
36.6
113.7
204.8
372.2
682.7
Tableau 1

Posons :
WNnk = e

j2

kn
N

(2)

L'quation (1) peut alors tre rcrite :


N 1

S k = s k WNnk

(3)

n =0

L'quation (2) a les deux caractristiques suivantes :


a)

WN2 nk = e

j2

kn
N/2

= W Nnk

(4)

b)

( nk +

WN

N
)
2

=e

j2

kn + N / 2
N

= WNnk

(pour n < N/2)

(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

Fast Fourier Transform (FFT)


En sparant les chantillons pairs et impairs et en factorisant les nombres impairs, on peut
mettre en vidence des similitudes entre les oprations pratiques sur ces chantillons.
Prenons comme exemple la ligne S1, en sparant les chantillons pairs/impairs, puis en
factorisant les chantillons impairs.

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

Traduction en langage mathmatique :


3

i =0

i =0

S1 = s 2i W4i + W81 s 2i +1 W4i

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

Fast Fourier Transform (FFT)


On voit qu'en factorisant, on arrive former les couples s0s4, s2s6, s1s5, s3s7, puis
remonter dans les parenthses pour arriver S1.
Si on prend en compte les huit lignes, cela nous donne :
S 0 = s 0 e j0 + s 4 e
S1 = s 0 e j0 + s 4 e

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

+
+
+
+
+
+
+
+

W82 (s3W80 + s7W80 )]


W82 (s3W80 + s7W84 )]
W84 (s3W80 + s7W88 )]
W86 (s3W80 + s7W812)]
W88 (s3W80 + s7W816)]
W810(s3W80 + s7W820)]
W812(s3W80 + s7W824)]
W814(s3W80 + s7W828)]

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

En langage plus mathmatique :


S0
S1
S2
S3
S4
S5
S6
S7

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)

Fast Fourier Transform (FFT)


2.1

Opration "Butterfly"

L'opration "butterfly" ou papillon est la suivante :

Calcul "Butterfly"
a

a + WNnb

WNn

a - WNnb

Figure 1
2.2

Application la FFT

L'opration "Butterfly" est particulirement adapte l'algorithme FFT, comme on peut le


voir dans la Figure 2. Cette figure correspond directement la rsolution de l'nonc (6).
Etape calcul 1

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

Fast Fourier Transform (FFT)


2.3

L'incrment en "reverse carry"

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

Fast Fourier Transform (FFT)


2.4

Rduction dans le domaine frquentiel

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

Fast Fourier Transform (FFT)


2.5

FFT base d'un nombre d'chantillons N quelconque

2.5.1 L'algorithme FFT pour N=k*j


A partir des rgles (4) et (5), on peut crer des algorithmes de FTT pour N=kj avec k et j
entiers. L'efficacit est cependant moindre que lorsque N est une puissance de 2.
2.5.2 L'algorithme de base mixte
Selon 2.5.1, il est tout fait possible de travailler avec une base (radix) diffrente de deux.
Parfois, la base change au cours d'opration (split-radix) ! Par exemple, les premires
"butterfly" travaillent en 2x2, puis les suivantes en 4x4.
2.5.3 L'algorithme de Rader
Lorsque N est premier, on peut imaginer que la DFT est irrductible. Ce n'est pas le cas, un
algorithme particulier (l'algorithme de Rader) est au contraire trs performant !
2.6

Nombre de points pour une FFT

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

Anda mungkin juga menyukai