96 votes

Pourquoi la FFT produit-elle des nombres complexes au lieu de nombres réels ?

Toutes les implémentations de FFT que nous avons rencontrées donnent des valeurs complexes (avec des parties réelles et imaginaires), même si l'entrée de l'algorithme était un ensemble discret de nombres réels (entiers).

N'est-il pas possible de représenter le domaine des fréquences en termes de nombres réels uniquement ?

96voto

zmccord Points 1091

La FFT est fondamentalement un changement de base. La base dans laquelle la FFT transforme votre signal original est un ensemble d'ondes sinusoïdales. Pour que cette base décrive toutes les entrées possibles, elle doit être capable de représenter la phase ainsi que l'amplitude ; la phase est représentée à l'aide de nombres complexes.

Par exemple, supposons que vous fassiez une FFT d'un signal ne contenant qu'une seule onde sinusoïdale. Selon la phase, vous pourriez bien obtenir un résultat FFT tout à fait réel. Mais si vous décalez la phase de votre entrée de quelques degrés, comment la sortie de la FFT peut-elle représenter cette entrée ?

edit : C'est une explication un peu vague, mais j'essaie juste de motiver l'intuition.

3 votes

Cela aide beaucoup à répondre. Si le résultat de la FFT ne contient que la fréquence et la phase, comment capture-t-il les informations d'amplitude dans l'échantillon du domaine temporel ? En d'autres termes, comment recrée-t-il les amplitudes correctes dans la TIFI ?

7 votes

Eh bien, chaque valeur dans la FFT correspond à une composante de fréquence différente. La magnitude de cette valeur est l'amplitude de la composante et l'angle complexe est la phase de cette composante.

60voto

antijon Points 554

La FFT vous fournit l'amplitude et phase. L'amplitude est codée comme la magnitude du nombre complexe (sqrt(x^2+y^2)) tandis que la phase est codée comme l'angle (atan2(y,x)). Pour obtenir un résultat strictement réel de la FFT, le signal entrant doit avoir une symétrie paire (c'est-à-dire que x[n]=conj(x[N-n])).

Si seule l'intensité vous intéresse, la magnitude du nombre complexe est suffisante pour l'analyse.

48voto

hotpaw2 Points 40796

Oui, il est possible de représenter les résultats du domaine fréquentiel de la FFT d'une entrée strictement réelle en utilisant uniquement des nombres réels.

Ces nombres complexes dans le résultat de la FFT sont simplement deux nombres réels, qui sont tous deux nécessaires pour vous donner les coordonnées 2D d'un vecteur de résultat qui a à la fois une longueur et un angle de direction (ou une magnitude et une phase). Et chaque composante de fréquence dans le résultat de la FFT peut avoir une amplitude unique et une phase unique (par rapport à un point quelconque de l'ouverture de la FFT).

Un seul nombre réel ne peut pas représenter à la fois la magnitude et la phase. Si vous éliminez les informations de phase, vous risquez de déformer massivement le signal si vous essayez de le recréer à l'aide d'un iFFT (et le signal n'est pas symétrique). Un résultat FFT complet nécessite donc 2 nombres réels par case FFT. Ces deux nombres réels sont regroupés dans certaines FFT dans un type de données complexe par convention commune, mais le résultat de la FFT pourrait facilement (et certaines FFT le font) produire simplement deux vecteurs réels (un pour les coordonnées du cosinus et un pour les coordonnées du sinus).

Il existe également des routines FFT qui produisent directement la magnitude et la phase, mais elles fonctionnent plus lentement que les FFT qui produisent un résultat vectoriel complexe (ou deux réels). Il existe également des routines FFT qui ne calculent que la magnitude et jettent les informations de phase, mais elles ne s'exécutent généralement pas plus vite que si vous pouviez le faire vous-même après une FFT plus générale. Peut-être qu'elles permettent au codeur d'économiser quelques lignes de code au prix de ne pas être inversibles. Mais beaucoup de bibliothèques ne prennent pas la peine d'inclure ces formes plus lentes et moins générales de FFT, et laissent simplement le codeur convertir ou ignorer ce dont il a besoin ou non.

De plus, beaucoup considèrent que les mathématiques impliquées sont une lot plus élégant en utilisant l'arithmétique complexe (où, pour une entrée strictement réelle, la corrélation cosinus ou la composante paire d'un résultat FFT est placée dans la composante réelle, et la corrélation sinus ou la composante impaire du résultat FFT est placée dans la composante imaginaire d'un nombre complexe).

(Ajouté :) Et, comme autre option, vous pouvez considérer les deux composantes de chaque bin de résultat FFT, au lieu d'être des composantes réelles et imaginaires, comme des composantes paires et impaires, toutes deux réelles.

24voto

comingstorm Points 11392

Si votre coefficient FFT pour une fréquence donnée f es x + i y vous pouvez regarder x comme le coefficient d'un cosinus à cette fréquence, tandis que le y est le coefficient du sinus. Si vous additionnez ces deux ondes pour une fréquence particulière, vous obtiendrez une onde déphasée à cette fréquence ; la magnitude de cette onde est de sqrt(x*x + y*y) égale à la magnitude du coefficient complexe.

El Transformée discrète en cosinus (DCT) est un parent de la transformée de Fourier qui donne tous les coefficients réels. Une DCT bidimensionnelle est utilisée par de nombreux algorithmes de compression d'images/vidéos.

10voto

tc. Points 23958
  1. La transformée de Fourier discrète est fondamentalement une transformation d'un vecteur de nombres complexes dans le "domaine temporel" en un vecteur de nombres complexes dans le "domaine fréquentiel" (j'utilise des guillemets car si vous appliquez les bons facteurs d'échelle, la TFD est son propre inverse). Si vos entrées sont réelles, vous pouvez effectuer deux DFT à la fois : prenez les vecteurs d'entrée x y y et calculer F( x  +  i   y ). J'ai oublié comment on sépare la DFT ensuite, mais je pense que c'est une question de symétrie et de conjugués complexes.

  2. El transformée discrète en cosinus permet en quelque sorte de représenter le "domaine des fréquences" avec les réels, et est courant dans les algorithmes de compression avec perte (JPEG, MP3). Ce qui est surprenant (pour moi), c'est qu'elle fonctionne même si elle semble rejeter l'information de phase, mais cela semble aussi la rendre moins utile pour la plupart des traitements de signal (je ne connais pas de moyen facile de faire une convolution/corrélation avec une DCT).

Je me suis probablement trompé dans certains détails ;)

1 votes

J'aimerais bien trouver plus d'informations sur, comme vous le dites, la séparation de la TFD après coup, pour le cas de la transformée F(x + i y).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X