dimanche 17 février 2013

Enfin une explication simple de la FFT

La FFT (transformée de Fourier rapide) est au coeur de l'analyse numérique des signaux. Depuis longtemps je cherche à comprendre son principe mais jusqu'ici je n'avais trouvé que des textes écris par des mathématiciens. Les mathématiciens adorent le langage abstrait et pour les comprendre il aurait fallu que je passes des heures à étudier ce langage. Mais moi les mathétiques ça m'intéresse pas tant que ça. Alors aujourd'hui je suis très content d'être tombé sur le blog EarLevel Engineering. J'y ai trouvé une explication simple, de la FFT. Sur cette page il y a un applet Java qui permet de contrôler la forme d'onde en ajustant les curseurs.

Quand je pense au temps que j'ai passé à essayer de décortiquer les équations des mathématiciens, j'en reviens pas que finalement c'est si simple que ça. Toute ma gratitude à Nigel Redmon, l'auteur de ce blog.

Pour une introduction à l'analyse spectrale j'ai trouvé ce vidéo en français sur youtube (durée 40 minutes).

Pour ceux qui lisent l'anglais voici un document pdf en lien avec ce sujet.

Résumé pour ceux qui ne comprennent pas l'anglais.

Tout commence avec le mathématicien Français Jean-Baptiste Fourier qui a démontré que toute fonction périodique est une somme de fonctions sinus et cosinus harmoniques de la fondamentale. Par harmonique on entend multiple entier de la fréquence fondamentale. Par exemple si on joue une note sur un instrument de musique, le son produit n'est pas pur. C'est à dire que ce n'est pas un sinusoïde mais qu'en plus de la note fondamentale, celle qu'on perçoit, il y a des harmoniques qui donnent le timbre particulier de l'instrument. Si on branche un micro sur l'entrée d'un oscilloscope et qu'on regarde la forme d'onde on vois bien que c'est périodique mais pas sinuoïdal. Pour connaître le contenu harmonique d'un signal on utilise l'analyse de Fourier. Sur les ordinateurs il existe un classe d'algorithmes appellés FFT pour Fast Fourier Transform qu'on pourrait traduire par Transformée de Fourier Rapide.

Si on considère un son quelconque par exemple le bruit d'un moteur de voiture on pourrait penser qu'il n'y a rien de périodique dans ce bruit. Mais en fait tout son est le résultat d'un vibration ou de la somme de plusieurs vibrations. On peut donc décomposer n'importe quel son en utilisant l'analyse de Fourier.

Si on multiplie 2 ondes sinusoïdales de même fréquence l'une par l'autre et qu'on calcule la valeur moyenne cette valeur sera proportielle à l'amplitude des 2 sinusoïdes. Par contre si les 2 sinusoïdes sont de fréquence différentes la moyenne sera nulle quel que soit les amplitudes de chacune d'elle.

Il faut d'abord échantillonner le signal. C'est à dire convertir le signal qui nous intéresse en une série de valeur numérique en utilisant un convertisseur analogue/numérique. Prenons l'exemple d'une carte son d'ordinateur. On branche un micro et on enregistre un son quelconque pendant une seconde à raison de 44000 échantillons par secondes. On a donc 44000 échantillons. On veut connaître le spectre de fréquences de cet enregistrement.

Donc si on veut savoir si une fréquence x est contenue dans ce signal complexe on multiple le signal par la fonction sinus(Fx). Si la fréquence x est contenue dans le signal la moyenne sera porportionnelle à l'amplitude de cette fréquence présente dans le signal. Sinon le résultat sera zéro.

Par multiplication en entends qu'on prend la valeur de la fonction sinus à chaque point et qu'on multiplie chaque échantillon par cette valeur et qu'ensuite on fait la moyenne de tous ces résultats. La fonction sinus() étant une fonction continue il y a un nombre infini de valeurs dans un cycle. Il faut donc choisir un interval régulier. Cet interval est en fait déterminer par la fréquence d'échantillonnage. Par exemple Si le signal a été échantillonné 44000/seconde pour une fréquence 100hz il y a 440 échantillons par cycles. Ici on utilise la sinus() et le cosinus() car la phase de notre sonde ne correspond pas nécessairement à la phase de cette fréquence dans le signal. En faisant le produit par le sinus et le cosinus et en calculant l'hypothénuse ça devrait nous donner la bonne amplitude de la composante signal.

C'est ce que j'ai compris mais je vous suggère de fouillez vous même l'internet afin de trouver des info supplémentaire. voici un autre lien en français, mais celui-là est plus mathématique (produit maticricel): http://perso.telecom-paristech.fr/~danger/amen_old/fft/

mise à jour 2015-09-17

Je viens de découvrir ce vidéo qui illustre bien la composition d'une onde carré à partir de l'addition d'harmoniques.


Quelques références

  • The Scientist and Engineer's Guide to Digital Signal Processing par Steven W. Smith. PDF. Le plus intéressant car pas trop mathématique.
  • Real-time digital signal processing, 2ed, Kuo,Lee,Tian. PDF
  • A technical tutorial on digital signal synthesis, Analog Device corp. PDF
  • Digital signal processing, Markus Kuhn. PDF
  • DSP and application with the C6713 and C6416 DSK. Rulph Chassaing. PDF
  • Voici un vidéo en anglais avec une explication simple de la FFT. https://youtu.be/spUNpyF58BY. Le canal 3Blue1Brown contient en fait plusieurs vidéos relié à ce sujet.

1 commentaire:

Remarque : Seuls les membres de ce blogue sont autorisés à publier des commentaires.