Transformée de Fourier rapide - Univers TI

publicité
Transformée de Fourier rapide - Wikipédia
Page 1 sur 4
Transformée de Fourier rapide
Un article de Wikipédia, l'encyclopédie libre.
La transformée de Fourier rapide (acronyme anglais : FFT ou Fast Fourier Transform) est un
algorithme de calcul de la transformée de Fourier discrète (TFD).
Sa complexité varie en
avec le nombre de points n, alors que la complexité du calcul de
base s'exprime en
. Ainsi, pour n=1024, le temps de calcul de l'algorithme rapide peut être 100
fois plus petit que le calcul utilisant la formule de définition de la TFD.
Cet algorithme est couramment utilisé en traitement numérique du signal pour transformer des
données discrètes du domaine temporel dans le domaine fréquentiel, en particulier dans les analyseurs
de spectre. Son efficacité permet de réaliser des filtrages en passant dans le domaine transformé.
Sommaire
1 Formulation mathématique
2 L'algorithme de Cooley-Tukey
3 Autres algorithmes
4 Algorithmes spécialisés dans le traitement de données réelles ou/et symétriques
5 Problèmes numériques et approximations
6 Références
Formulation mathématique
Soient x0, ...., xn-1 des nombres complexes. La transformée de Fourier discrète est définie par la
formule suivante :
Évaluer ces sommes directement coute (n − 1)2 produits complexes et n(n − 1) sommes
complexes alors que seules (n / 2)(log2(n) − 2) produits et nlog2(n) sommes sont
nécessaires avec la version rapide. En général, de tels algorithmes dépendent de la factorisation de n
mais contrairement à une idée répandue, il y a des transformées de Fourier rapides de complexité
pour tous les n, même les n qui sont des nombres premiers.
Comme la transformée de Fourier inverse discrète est équivalente à la transformée de Fourier
discrète, à un signe et facteur 1/n près, il est possible de générer la transformation inverse de la même
manière pour la version rapide.
L'algorithme de Cooley-Tukey
http://fr.wikipedia.org/wiki/Transform%C3%A9e_de_Fourier_rapide
19/07/2008
Transformée de Fourier rapide - Wikipédia
Page 2 sur 4
Il s'agit d'un algorithme fréquemment utilisé pour calculer la transformation de Fourier rapide. Il se
base sur une approche de type « diviser pour mieux régner » par le biais d'une récursion. Celle-ci
subdivise une transformation de Fourier discrète d'une taille composite n = n1n2 en plusieurs
transformées de Fourier discrètes de tailles inférieures n1 et n2. Cet algorithme nécessite
multiplications par des racines d'unité, plus communément appelés facteurs de rotation.
C'est en 1965 que James Cooley et John Tukey publient cette méthode mais il a été découvert par la
suite que l'algorithme avait déjà été inventé par Carl Friedrich Gauss en 1805 et adapté à plusieurs
reprises sous des formes différentes.
L'utilisation la plus classique de l'algorithme de Cooley-Tukey est une division de la transformation
en deux parties de taille identique n / 2 et ceci à chaque étape. Cette contrainte limite les tailles
possibles, puisque celles-ci doivent être des puissances de deux. Toutefois, une factorisation reste
possible (principe déjà connu de Gauss). En général, les implémentations essaient d'éviter une
récursion pour des questions de performance. Il est aussi possible de mélanger plusieurs types
d'algorithme lors des subdivisions.
Autres algorithmes
Il existe d'autres algorithmes qui permettent de calculer la transformée de Fourier rapide. Pour une
taille n = n1n2, avec des nombres premiers entre eux n1 et n2, il est possible d'utiliser
l'algorithme PFA (Good-Thomas) basé sur le théorème des restes chinois. Le PFA est similaire à celui
de Cooley-Tukey.
L'algorithme de Rader-Brenner est aussi une variante de Cooley-Tukey avec des facteurs de rotation
purement imaginaires qui améliorent les performances en réduisant le nombre de multiplications mais
au détriment de la stabilité numérique et une augmentation du nombres d'additions. Les algorithmes
qui procèdent aussi par des factorisations successives sont ceux de Bruun et l'algorithme QFT. Les
versions originales travaillent sur des fenêtres dont la taille est une puissance de deux mais il est
possible de les adapter pour une taille quelconque. L'algorithme de Bruun considère la transformée de
Fourier rapide comme une factorisation récursive du polynôme zn − 1 en des polynômes avec des
coefficients réels de la forme zm − 1 et z2m + azm + 1.
L'algorithme de Winograd factorise zn − 1 en un polynôme cyclotomique, dont les coefficients
sont souvent -1,0 ou 1 ce qui réduit le nombre de multiplications. On peut voir cet algorithme comme
la version optimale en termes de multiplications. Winograd a montré que la transformée de Fourier
discrète peut être calculée avec seulement
multplications, ce qui représente une borne
inférieure atteignable pour les tailles qui sont des puissances de deux. Toutefois, des additions
supplémentaires sont nécessaires ce qui peut être pénalisant sur les processeurs modernes comportant
des unités arithmétiques performantes.
L'algorithme de Rader est quant à lui destiné aux fenêtres dont la taille est un nombre premier. Il
profite de l'existence d'une génératrice pour le groupe multiplicatif modulo n. La transformation
discrète dont la taille est un nombre premier s'exprime ainsi comme une convolution cyclique d'une
taille n − 1. On peut ensuite la calculer par une paire de transformation de Fourier rapide.
Finalement, un autre algorithme destiné aux transformations avec des tailles qui sont des nombres
premiers est due à Bluestein. On l'appelle plus souvent l'algorithme chirp-z. Ici encore, la
transformation est vue comme une convolution dont la taille est identique à la fenêtre originale. On
utilise à cet effet l'identité jk = − (j − k)2 / 2 + j2 / 2 + k2 / 2.
http://fr.wikipedia.org/wiki/Transform%C3%A9e_de_Fourier_rapide
19/07/2008
Transformée de Fourier rapide - Wikipédia
Page 3 sur 4
Algorithmes spécialisés dans le traitement de données réelles
ou/et symétriques
Dans beaucoup d'applications, les données en entrée de la transformation discrète de Fourier sont
uniquement des nombres réels. Dans ce cas, les sorties satisfont la symétrie suivante :
Des algorithmes efficaces ont été conçus pour cette situation, par exemple celui de Sorensen en 1987.
Une approche possible consiste à prendre un algorithme classique comme celui de Cooley-Tukey et à
enlever les parties inutiles dans le calcul. Cela se traduit par un gain de 50% en mémoire et en vitesse
de calcul. Alternativement, il est possible d'exprimer une transformation discrète sur des nombres
réels (avec une taille paire) en une transformation avec des nombres complexes mais dont la taille a
été divisée par deux (les parties imaginaires sont les éléments impairs et les parties réelles sont les
éléments pairs) suivie d'un décodage dont la complexité est de l'ordre de
opérations.
On pensait que les transformations avec des nombres réels pouvaient être plus efficacement calculées
via une transformation discrète de Hartley mais il a été prouvé par la suite qu'une transformation de
Fourier discrète modifiée pouvait être plus efficace que la même transformation de Hartley.
L'algorithme de Bruun était un candidat pour ces transformations mais il n'a pas eu la popularité
escomptée.
Il existe encore d'autres variantes pour les cas où les données sont symétriques (c’est-à-dire des
fonctions paires ou impaires) avec un gain supplémentaire de 50%. Dans ce cas, on utilise une
transformée en cosinus discret.
Problèmes numériques et approximations
Tous les algorithmes proposés ci-dessus calculent la transformée sans aucune erreur, de part leur
nature analytique. Toutefois, il existe des algorithmes qui peuvent s'accommoder d'une marge d'erreur
pour accélérer les calculs. En 1999, Edelman et al. proposent une approximation à la transformée de
Fourier rapide. Cette version est destinée à une implémentation en parallèle. Une approximation basée
sur les ondelettes est proposée en 1996 par H. Guo et Burrus et tient compte de la répartition dans les
entrées/sorties. Un autre algorithme a encore été proposé par Shentov et al. en 1995. Seul l'algorithme
de Edelman fonctionne bien avec n'importe quel type de données, il profite de la redondance dans la
matrice de Fourier plutôt que de la redondance dans les données initiales.
Toutefois, même les algorithmes décrits de manière analytique présentent des erreurs lorsqu'ils sont
implémentés avec des virgules flottantes dont la précision est limitée. L'erreur est cependant limitée.
Une borne supérieure d'erreur relative pour Cooley-Tukey est donnée par O(εlog(n)) alors qu'elle
est de O(εn3 / 2) pour la formulation triviale de la transformée de Fourier discrète (Gentleman et
Sande, 1966). Le terme ε représente ici la précision relative en virgule flottante. En fait, l'erreur
quadratique moyenne est encore plus limitée avec seulement
pour Cooley-Tukey et
pour la version triviale. Il ne faut malgré tout pas oublier que la stabilité peut être
perturbée par les différents facteurs de rotation qui interviennent dans les calculs. Un manque de
précision sur les fonctions trigonométriques peut fortement augmenter l'erreur. L'algorithme de Rader
est par exemple nettement moins stable que celui de Cooley-Tukey en cas d'erreurs prononcées.
Avec une arithmétique en virgule fixe, les erreurs s'accumulent encore plus vite. Avec Cooley-Tukey,
http://fr.wikipedia.org/wiki/Transform%C3%A9e_de_Fourier_rapide
19/07/2008
Transformée de Fourier rapide - Wikipédia
Page 4 sur 4
l'augmentation de l'erreur quadratique moyenne est de l'ordre de
. De plus, il faut tenir
compte de la magnitude des variables lors des différentes étapes de l'algorithme.
Il est possible de vérifier la validité de l'algorithme grâce à une procédure qui vise à déterminer la
linéarité et d'autres caractéristiques de la transformation sur des entrées aléatoires (Ergün, 1995).
Références
James W. Cooley and John W. Tukey, « An algorithm for the machine calculation of complex
Fourier series, » Math. Comput. 19, 297–301 (1965).
Carl Friedrich Gauss, « Nachlass: Theoria interpolationis methodo nova tractata, » Werke band
3, 265–327 (Königliche Gesellschaft der Wissenschaften, Göttingen, 1866). Voir aussi M. T.
Heideman, D. H. Johnson, and C. S. Burrus, « Gauss and the history of the fast Fourier
transform, » IEEE ASSP Magazine 1 (4), 14–21 (1984).
P. Duhamel and M. Vetterli, « Fast Fourier transforms: a tutorial review and a state of the art, »
Signal Processing 19, 259–299 (1990).
W. M. Gentleman and G. Sande, « Fast Fourier transforms—for fun and profit, » Proc. AFIPS
29, 563–578 (1966).
H. Guo, G. A. Sitton, and C. S. Burrus, « The Quick Discrete Fourier Transform, » Proc. IEEE
Conf. Acoust. Speech and Sig. Processing (ICASSP) 3, 445–448 (1994).
H. V. Sorensen, D. L. Jones, M. T. Heideman, and C. S. Burrus, « Real-valued fast Fourier
transform algorithms, » IEEE Trans. Acoust. Speech Sig. Processing ASSP-35, 849–863
(1987).
A. Edelman, P. McCorquodale, and S. Toledo, « The future fast Fourier transform? » SIAM J.
Sci. Computing 20, 1094–1114 (1999).
H. Guo and C. S. Burrus, « Fast approximate Fourier transform via wavelets transform, » Proc.
SPIE Intl. Soc. Opt. Eng. 2825, 250–259 (1996).
O. V. Shentov, S. K. Mitra, U. Heute, and A. N. Hossen, « Subband DFT. I. Definition,
interpretations and extensions, » Signal Processing 41 (3), 261–277 (1995).
James C. Schatzman, « Accuracy of the discrete Fourier transform and the fast Fourier
transform, » SIAM J. Sci. Comput. 17 (5), 1150–1166 (1996).
A. V. Oppenheim and R. Schafer, Digital Signal Processing (Englewood Cliffs, NJ: PrenticeHall, 1975).
Funda Ergün, « Testing multivariate linear functions: Overcoming the generator bottleneck, »
Proc. 27th ACM Symposium on the Theory of Computing, 407–416 (1995).
Matteo Frigo and Steven G. Johnson: FFTW, http://www.fftw.org/ : Une implémentation libre
(GPL) de la transformée de fourier rapide (bibliothèque C) pour des données de taille et de
dimensions arbitraires. "The Design and Implementation of FFTW3," Proceedings of the IEEE
93 (2), 216–231 (2005).
Portail des mathématiques
Récupérée de « http://fr.wikipedia.org/wiki/Transform%C3%A9e_de_Fourier_rapide »
Catégories : Transformée | Théorie de Fourier | Algorithme numérique | Transformée du signal | [+]
Catégorie cachée : Portail:Mathématiques/Articles liés
Dernière modification de cette page le 3 juillet 2008 à 22:09.
Droit d'auteur : Tous les textes sont disponibles sous les termes de la licence de documentation
libre GNU (GFDL).
Wikipedia® est une marque déposée de la Wikimedia Foundation, Inc., organisation de
bienfaisance régie par le paragraphe 501(c)(3) du code fiscal des États-Unis.
http://fr.wikipedia.org/wiki/Transform%C3%A9e_de_Fourier_rapide
19/07/2008
Téléchargement