Comment faites-vous exactement calculer la transformée de Fourier rapide Stack Overflow
J'ai lu beaucoup de choses sur Transformée de Fourier rapide et essaie de comprendre l'aspect faible niveau de celui-ci. Malheureusement, Google et Wikipédia ne contribuent pas beaucoup à tous. et j'ai comme 5 livres algorithme différents ouverts qui ne sont pas non plus beaucoup aident.
Je suis en train de trouver la FFT de quelque chose de simple comme un vecteur [1,0,0,0]. Bien sûr, je pouvais brancher Matlab mais cela ne me aider à comprendre ce qui se passe en dessous. Aussi, quand je dis que je veux trouver la FFT d'un vecteur, est la même chose que de dire que je veux trouver la TFD d'un vecteur juste avec un algorithme plus efficace?
a demandé le 11 juillet '10 à 22h17
Vous avez raison, « la » transformée de Fourier rapide est juste un nom pour tout algorithme qui calcule la transformée de Fourier discrète en O (n log n), et il existe plusieurs algorithmes.
Transformée de Fourier discrète
Compte tenu des chiffres N f0. f1. f2. ..., fN-1. la TFD donne un ensemble différent de N nombres.
Plus précisément: Soit ω être un N ième racine primitive de 1 (soit dans les nombres complexes ou dans un champ fini), ce qui signifie que ω N = 1, mais pas de puissance plus faible est égal à 1. On peut penser que les coefficients de l » fk d'un polynôme P (x) = x k Σfk. Les nouveaux numéros N F0. F1. ..., FN-1 que la DFT donne sont les résultats de l'évaluation du polynôme à des puissances de ω. Autrement dit, pour chaque n allant de 0 à N-1, le nouveau numéro Fn est P (ω n) = fk-1 Σ0≤k≤N ω nk.
[La raison du choix ω est que l'inverse DFT a une forme agréable, très semblable à la DFT lui-même.]
Notez que la recherche de ces F est O prend naïvement opérations (N 2). Mais nous pouvons exploiter la structure spéciale qui vient des oméga de nous avons choisi, et qui nous permet de le faire en O (N log N). Un tel algorithme est appelé la transformée de Fourier rapide.
Transformée de Fourier Rapide
Voici donc une façon de faire la FFT. Je vais remplacer N avec 2N pour simplifier la notation. Nous avons f0. f1. f2. ..., F2N-1. et nous voulons calculer P (ω 0), P (ω 1), ... P (ω 2N-1) où l'on peut écrire
P (x) = Q (x) + ω N R (x) avec
Maintenant, voici la beauté de la chose. Remarquez que la valeur à ω k + N est tout simplement liée à la valeur à ω k:
P (ω k + N) = ω N (Q (ω k) + ω N R (ω k)) = R (ω k) + ω N Q (ω k). Ainsi, les évaluations de Q et R à ω 0 à ω N-1 suffisent.
Cela signifie que le problème initial - d'évaluer le polynôme 2N terme P à 2N points de co 0 à ω 2N-1 - a été réduite à deux problèmes de l'évaluation du polynôme N-terme Q et R aux points N ω 0 à ω N-1. Donc, le temps d'exécution T (2N) = 2T (N) + O (N) et tout ce qui donne T (N) = O (N log N).
Des exemples de DFT
Notez que d'autres définitions mettent facteurs de 1 / N ou 1 / √N.
Pour N = 2, ω = -1, et la transformée de Fourier (a, b) est (a + b, a-b).
Pour N = 3, ω est la racine cubique complexe de 1, et la transformée de Fourier (a, b, c) est (a + b + c, a + bω + cQ 2. a + bω 2 + cQ). (Etant donné que ω = ω 4).
Pour N = 4 et ω = i, et la transformée de Fourier (a, b, c, d) est (a + b + c + d, a + bi-c-di, a-b + cd, a-bi di -c +). En particulier, l'exemple dans votre question: la TFD sur (1,0,0,0) donne (1,1,1,1), peut-être pas très éclairante.
La FFT est juste une mise en œuvre efficace de la DFT. Les résultats devraient être identiques pour les deux, mais en général la FFT sera beaucoup plus rapide. Assurez-vous de comprendre comment fonctionne le DFT d'abord, car il est beaucoup plus simple et beaucoup plus facile à saisir.
Un bon livre pratique à lire sur le sujet est transformée de Fourier rapide et ses applications par E. Brigham.