Diviser pour régner (suite) - documents.lamacs.frdocuments.lamacs.fr/cours/macs1/infochap5s.pdf ·...

Preview:

Citation preview

1

Chapitre 5

Diviser pour régner(suite)

Convolution et FFT

FFT = Fast Fourier Transform(Transformée de Fourier rapide)

3

FFT : Applications

Applications.■ Optique, acoustique, physique quantique, télécommunications,

systèmes de contrôle, traitement du signal, reconnaissance de la parole, compression de données, traitement des images.

■ Lecture DVD, JPEG, MP3, MRI, CAT.■ Solutions numériques de l’équation de Poisson.

The FFT is one of the truly great computational developments of this [20th] century. It has changed the face of science and engineering so much that it is not an exaggeration to say that life as we know it would be very different without the FFT. -Charles van Loan

4

FFT : un peu d’histoire

Gauss (1805, 1866). Analyse du mouvement périodique de Céres.

Runge-König (1924). Fondations théoriques.

Danielson-Lanczos (1942). Algorithme efficace.

Cooley-Tukey (1965). Utilisé pour le contrôle des tests nucléaires en URSS et pour le pistage des sous-marins. FFT redécouvert et rendu populaire.

L’ importance de FFT ne fut pleinement reconnue qu’avec l’utilisation massive des ordinateurs.

5

Polynômes : représentation par coefficients

Polynôme. [représentation par coefficients]

Addition : O(n) opérations arithmétiques.

Evaluation : O(n) opérations arithmétiques (méthode de Horner.)

Multiplication (convolution) : O(n2) en utilisant la méthode brutale.

A x =a0a1 xa2x2Lan−1 x

n−1

B x =b0b1 xb2 x2Lbn−1x

n−1

A x B x =a0b0 a1b1 xLan−1bn−1 xn−1

A x =a0 x a1x a2Lx an−2x an−1 L

A x ´ B x = ∑i=0

2n−2

c i xi , where c i=∑

j=0

i

a jbi− j

6

Polynômes : représentation par couples (point,valeur)

Théorème fondamental de l’algèbre. [Gauss] Un polynôme de degré n à coefficients complexes a n racines complexes (avec multiplicités.)

Corollaire. Un polynôme de degré n-1 A(x) est entièrement déterminé par son évaluation en n valeurs distinctes de x.

x

y

xj

yj = A(xj)

7

Polynômes : représentation par couples (point,valeur)

Polynôme. [représentation points-valeurs]

Addition : O(n) opérations arithmétiques.

Multiplication : O(n), mais 2n-1 points sont nécessaires.

Evaluation : O(n2), en utilisant la formule de Lagrange.

A x : x0 , y0 ,K , xn-1 , yn−1

B x : x0 , z0 ,K , xn-1 ,zn−1

A x B x : x0 , y0z0 ,K , xn-1 , yn−1zn−1

A x =∑k=0

n−1

yk

∏j¹k

x−x j

∏j¹k

x k−x j

A x ´ B x : x0 ,y0´ z0 ,K , x2n-1 ,y2n−1´ z2n−1

8

Passage d’une représentation à l’autre

Compromis. Évaluation rapide ou multiplication rapide. On veut les deux !

But. Rendre toutes les opérations rapides en permettant des conversions efficaces entre les deux représentations.

Coefficients

Représentation

O(n2)

Multiplication

O(n)

Evaluation

Points-valeurs O(n) O(n2)

a0 ,a1 ,K ,an-1 x0 , y0 ,K , xn−1 , yn−1

représentation par coefficients

représentation parpoints-valeurs

9

Passage d’une représentation à l’autre : méthode brutale

Coefficients vers Points-valeurs. Étant donné un polynôme a0 + a1 x + ... + an-1 xn-1, l’évaluer en n points distincts x0, ... , xn-1.

Points-valeurs vers Coefficients. Étant donnés n points distincts x0, ..., xn-1 et n valeurs y0, ..., yn-1, trouver l’unique polynôme A(x) = a0 + a1 x + ... + an-1 xn-1 tel que A(xi) = yi, pour i = 1,…, n-1 .

[y0

y1

y2

Myn−1

]=[1 x0 x0

2 L x0n−1

1 x1 x12 L x1

n−1

1 x2 x22 L x2

n−1

M M M O M1 xn−1 xn−1

2 L xn−1n−1

][a0

a1

a2

Man−1

]la matrice de Vandermonde est inversible ssi les xi sont deux à deux distincts

O(n3) pour l’élimination de Gauss

O(n2) pour la multiplication matrice x vecteur

10

Coefficient vers points-valeurs : intuition

Coefficients vers Points-valeurs. Étant donné un polynôme a0 + a1 x + ... + an-1 xn-1, l’évaluer en n points distincts x0, ... , xn-1.

Divide. Casser le polynôme selon la parité des puissances.■ A(x) = a0 + a1x + a2x2 + a3x3 + a4x4 + a5x5 + a6x6 + a7x7.■ Aeven(x) = a0 + a2x + a4x2 + a6x3.■ Aodd (x) = a1 + a3x + a5x2 + a7x3.■ A(-x) = Aeven(x2) + x Aodd(x2).■ A(-x) = Aeven(x2) - x Aodd(x2).

Intuition. On choisit les deux points ±1.■ A(-1) = Aeven(1) + 1 Aodd(1). ■ A(-1) = Aeven(1) - 1 Aodd(1). Pour évaluer un polynôme de degré ≤ n

en 2 points, il suffit d’évaluer deux polynômes de degré ≤ ½n en 1 point.

11

Coefficient vers points-valeurs : intuition

Coefficients vers Points-valeurs. Étant donné un polynôme a0 + a1 x + ... + an-1 xn-1, l’évaluer en n points distincts x0, ... , xn-1.

Divide. Casser le polynôme selon la parité des puissances.■ A(x) = a0 + a1x + a2x2 + a3x3 + a4x4 + a5x5 + a6x6 + a7x7.■ Aeven(x) = a0 + a2x + a4x2 + a6x3.■ Aodd (x) = a1 + a3x + a5x2 + a7x3.■ A(-x) = Aeven(x2) + x Aodd(x2).■ A(-x) = Aeven(x2) - x Aodd(x2).

Intuition. On choisit les quatre points ±1, ±i.■ A(-1) = Aeven(-1) + 1 Aodd( 1). ■ A(-1) = Aeven(-1) - 1 Aodd(-1).■ A(-i) = Aeven(-1) + i Aodd(-1). ■ A(-i) = Aeven(-1) - i Aodd(-1).

Pour évaluer un polynôme de degré ≤ nen 4 points, il suffit d’évaluer deux polynômess de degré ≤ ½n en 2 points.

12

Transformée de Fourier discrète

Coefficients vers Points-valeurs. Étant donné un polynôme a0 + a1 x + ... + an-1 xn-1, l’évaluer en n points distincts x0, ... , xn-1.

Idée clé : choisir xk = ωk où ω est la ne racine principale de l’unité.

Transformée de Fourier discrète

[y0

y1

y2

y3

Myn−1

]=[1 1 1 1 L 11 w1 w2 w3 L wn−1

1 w2 w4 w6 L w2 n−1

1 w3 w6 w9 L w3 n−1

M M M M O M1 wn−1 w2 n−1 w3 n−1 L wn−1 n−1

] [a0

a1

a2

a3

Man−1

]Matrice de Fourier Fn

13

Rappel sur les racines de l’unité

Déf. Une ne racine de l’unité est un nombre complexe x tel que xn = 1.

Fait. Les ne racines de l’ unité sont : ω0, ω1, …, ωn-1 où ω = e 2π i / n.Preuve. (ωk)n = (e 2π i k / n) n = (e π i ) 2k = (-1) 2k = 1.

Fait. Les ½ne racines de l’ unité sont : ν0, ν1, …, νn/2-1 où ν = e 4π i / n.Fait. ω2 = ν et (ω2)k = νk.

ω0 = ν0 = 1

ω1

ω2 = ν1 = i

ω3

ω4 = ν2 = -1

ω5

ω6 = ν3 = -i

ω7

n = 8

14

Transformée de Fourier rapide

But. Evaluer un polynôme de degré n-1 A(x) = a0 + ... + an-1 xn-1 en les ne racines de l’unité : ω0, ω1, …, ωn-1.

Divide. Casser le polynôme selon la parité des puissances.■ Aeven(x) = a0 + a2x + a4x2 + … + an/2-2 x(n-1)/2.■ Aodd (x) = a1 + a3x + a5x2 + … + an/2-1 x(n-1)/2.■ A(x) = Aeven(x2) + x Aodd(x2).

Conquer. Évaluer Aeven(x) et Aodd(x) en les ½ne racines de l’unité : ν0, ν1, …, νn/2-1.

Combiner. ■ A(ωk+n) = Aeven(νk) + ωk Aodd(νk), 0 ≤ k < n/2■ A(ωk+n) = Aeven(νk) - ωk Aodd(νk), 0 ≤ k < n/2

ωk+n = -ωk

νk = (ωk)2 = (ωk+n)2

15

fft(n, a0,a1,…,an-1) {

si (n == 1) retourner a0

(e0,e1,…,en/2-1) ← FFT(n/2, a0,a2,a4,…,an-2)

(d0,d1,…,dn/2-1) ← FFT(n/2, a1,a3,a5,…,an-1)

pour k = 0 à n/2 - 1 {

ωk ← e2πik/n

yk+n/2 ← ek + ωk dk

yk+n/2 ← ek - ωk dk

}

retourner (y0,y1,…,yn-1)

}

FFT : l’algorithme

16

FFT : résumé

Théorème. L’algorithme FFT évalue un polynôme de degré n-1 en chacune des ne racines de l’unité, en O(n log n) étapes de calcul.

Temps d’exécution. T(2n) = 2T(n) + O(n) ⇒ T(n) = O(n log n).

on suppose que n est une puissance de 2

a0 ,a1 ,K ,an-1 w0 , y0 ,K , wn−1 , yn−1

O(n log n)

représentation parcoefficients

représentation parpoints-valeurs

17

Arbre de récursion

a0, a1, a2, a3, a4, a5, a6, a7

a1, a3, a5, a7a0, a2, a4, a6

a3, a7a1, a5a0, a4 a2, a6

a0 a4 a2 a6 a1 a5 a3 a7

ordre "bit-reversed"

000 100 010 110 001 101 011 111

shuffle “parfait”

18

Points-valeurs vers Coefficients : transformée de Fourier discrète inverse

But. Étant données les valeurs y0, ... , yn-1, trouver l’unique polynôme A(x) = a0 + a1 x + ... + an-1 xn-1 tel que A(ωi) = yi , i = 0, …, n-1.

DFT (transformé de Fourier discrète) inverse

[a0

a1

a2

a3

Man−1

]=[1 1 1 1 L 11 w1 w2 w3 L wn−1

1 w2 w4 w6 L w2 n−1

1 w3 w6 w9 L w3 n−1

M M M M O M1 wn−1 w2 n−1 w3 n−1 L w n−1 n−1

] −1

[y0

y1

y2

y3

Myn−1

]Matrice de Fourier inverse (Fn)-1

19

Propriété. La matrice de Fourier inverse est donnée par la formule suivante :

Conséquence. Pour calculer la transformée de Fourier inverse, on reprend l’algorithme FFT en utilisant ω-1 = e -2π i / n comme ne racine principale de l’unité (et on divise par n).

Gn=1n [

1 1 1 1 L 11 w−1 w−2 w−3 L w−n−1

1 w−2 w−4 w−6 L w−2 n−1

1 w−3 w−6 w−9 L w−3 n−1

M M M M O M1 w− n−1 w−2 n−1 w−3 n−1 L w−n−1 n−1

]

FFT inverse

20

FFT inverse : preuve de correction

Proposition. Fn et Gn sont inverses l’une de l’autre.Preuve.

Lemme de sommation. Soit ω une ne racine primitive de l’unité. Alors

Preuve.■ Si k est un multiple de n, alors ωk = 1 ⇒ la somme vaut n.■ Chaque ωk est une racine de xn - 1 = (x - 1) (1 + x + x2 + ... + xn-1).■ Si ωk ≠ 1 on a : 1 + ωk + ωk(2) + . . . + ωk(n-1) = 0 ⇒ la somme 0. ▪

∑j=0

n−1

wkj={n if kº0modn0 otherwise

FnGn kk '=1n∑j=0

n−1

wkjw− j k '

= 1n∑j=0

n−1

w k−k ' j= {1 if k=k '

0 otherwisecf. lemme de sommation ci-dessous

21

FFT inverse : l’algorithme

ffti(n, a0,a1,…,an-1) {

si (n == 1) retourner a0

(e0,e1,…,en/2-1) ← FFT(n/2, a0,a2,a4,…,an-2)

(d0,d1,…,dn/2-1) ← FFT(n/2, a1,a3,a5,…,an-1)

pour k = 0 à n/2 - 1 {

ωk ← e-2πik/n

yk+n/2 ← (ek + ωk dk) / n

yk+n/2 ← (ek - ωk dk) / n

}

retourner (y0,y1,…,yn-1)

}

22

FFT inverse : résumé

Théorème. L’algorithme FFT inverse interpole un polynôme de degré ≤ n-1 étant données les valeurs prises en chacune des ne racines de l’unité, en O(n log n) étapes de calcul.

on suppose que n est une puissance de 2

a0 ,a1 ,K ,an-1 w0 , y0 ,K , wn−1 , yn−1

O(n log n)

représentation parcoefficients

O(n log n) représentation parpoints-valeurs

23

Multiplication de polynômes

Théorème. On multiplier deux polynômes de degré n-1 en O(n log n) étapes de calcul.

a0 ,a1 ,K ,an-1

b0 ,b1 ,K ,bn-1c0 ,c1 , K ,c2n-2

A x0 ,K , A x2n-1

B x0 ,K ,B x2n-1C x0 ,C x1 ,K ,C x2n-1O(n)

Multiplication points-valeurs

O(n log n)FFT inverse FFT O(n log n)

représentation par coefficients représentation par

coefficients

24

FFT en pratique

“Fastest Fourier transform in the West.” [Frigo & Johnson]■ Bibliothèque C optimisée.■ Contient : DFT, DCT, réel, complexe, en dimension quelconque.■ Prix Wilkinson 1999 du logiciel numérique.■ Portable et compétitif.

Détails d’implémentation.■ Au lieu d’exécuter un algorithme prédéterminé, il évalue le matériel

et utilise un compilateur dédié pour engendrer un code optimisé adapté à la “forme” du problème.

■ Le coeur de l’algorithme est une version itérative du FFT binaire de Cooley-Tukey.

■ O(n log n), même si la dimension est un nombre premier.Référence: http://www.fftw.org

25

Multiplication entière

Multiplication entière. Étant donnés deux entiers de n bits a = an-1 … a1a0 et b = bn-1 … b1b0, calculer leur produit c = a × b.

Algorithme (convolution).■ On utilise deux polynômes A(x) et B(x) : a = A(2), b = B(2).■ On calcule C(x) = A(x) × B(x).■ On évalue C(2) = a × b.■ Temps d’exécution: O(n log n) opérations arithmétiques complexes.

Théorème. [Schönhage-Strassen 1971] O(n log n log log n) opérations binaires.

En pratique. [GNU Multiple Precision Arithmetic Library] GMP prétend être "the fastest bignum library on the planet." Elle utilise un algorithme brutal, Karatsuba, ou FFT, selon la dimension du problème.

A x =a0a1 xa2x2Lan−1 x

n−1

B x =b0b1 xb2 x2Lbn−1x

n−1

Un petit extra

27

Décomposition de la matrice de Fourier

Décomposition de la matrice de Fourier.

y=Fna=[ In /2 Dn/2

In /2 −Dn/2 ][Fn /2aevenFn /2aodd ]

I4=[1 0 0 00 1 0 00 0 1 00 0 0 1

]

D4=[w0 0 0 00 w1 0 00 0 w2 00 0 0 w3 ]

Fn=[1 1 1 1 L 11 w1 w2 w3 L wn−1

1 w2 w4 w6 L w2 n−1

1 w3 w6 w9 L w3 n−1

M M M M O M1 wn−1 w2 n−1 w3 n−1 L wn−1 n−1

]Fn=[In /2 Dn /2

In /2 −Dn /2 ][F n/2 0

0 Fn /2 ]PnT

P4=[1 0 0 00 0 1 00 1 0 00 0 0 1

]

Recommended