La Transformée de Fourier

Etude analytique

C'est une extension des séries de Fourier, mais pouvant s'appliquer à des fonctions non périodiques. Elle permet d'obtenir le spectre (fréquentiel) d'une fonction (qui peut être périodique mais pas nécessairement). Comme je l'ai déjà écrit à propos des séries de Fourier, les transformées de Fourier constituent le domaine de l'analyse harmonique qui est une branche des mathématiques très importante pour les physiciens et les électroniciens, au même titre que les équations aux dérivées partielles. (Voyez comme j'aime parler de ce que je vous présenterai plus tard dès que j'expose une chose...)

Je ne vais pas développer ici toutes les propriétés de la transformée de Fourier (comme la translation, le produit de convolution, de corrélation, la dérivation, la transformée inverse de Fourier, etc...) beaucoup de personnes le font mieux que moi. Je veux aller à l'essentiel : comprendre de quoi il s'agit, d'une manière théorique puis pratique par le calcul des transformées de Fourier sur ordinateur. C'est ainsi que je vous donne un programme graphique en C++ et Qt4 que j'ai écrit sous Linux Mint avec QT Creator, directement calqué sur les équations ci-dessous, qui calcule et trace des TF.

Remarque 1. Nous utiliserons la lettre j pour désigner le nombre imaginaire au lieu de la lettre i afin de ne pas confondre avec l'intensité i(du courant électrique).

1Définition de la Transformée de Fourier:

1.1Domaine général

soit la fonction (pas obligatoirement périodique) de la variable réelle :

sa Transformé de Fourier (de la variable réelle également ) sera:

où:

1.2Domaine temporel

C'est celui qui nous intéresse particulièrement, pour le traitement des signaux, en électronique.

Dans le cas où est une fonction du temps, nous écrirons:

Remarque 2. Le coefficient placé devant l'intégrale est arbitraire, cette valeur est souvent choisie afin d'obtenir une symétrie entre la transformée de Fourier et la transformée de Fourier inverse. Ce qui est doit être respecté c'est que le produit de ce coefficient avec celui choisi pour la transformée inverse soit égal à

est la pulsation en radians /s

le de la ligne ci-dessus est la fréquence en Hertz. Ne pas confondre avec la fonction

ici aussi et

On voit donc que la transformée de Fourier d'une fonction appartenant au domaine temporel est une fonction appartenant au domaine fréquentiel. Elle permet d'obtenir le spectre fréquentiel d'un signal.

1.2.1Transformée de Fourier discrète

Le but que je me fixe est d'écrire un programme (sur PC puis que nous adapterons sur un microcontôleur), capable de représenter le spectre d'un signal en temps réel. Cela passera par une transformée de Fourier rapide (FFT = Fast Fourier Transform). Mais procédons par étapes.

Je vais développer le cas où le signal analogique à transformer est au préalable numérisé, c'est à dire rendu disponible (échantillonné) sous la forme d'une suite discrète de valeurs numériques (d'échantillons). Ces échantillons auront été acquis à des instants régulièrement espacés (par la période Te, c'est à dire à la fréquence d'échantillonage )

Nous disposons de N échantillons

prélevés à des temps ...

Dans ce cas où l'on a pas une infinité de valeurs infiniment brèves mais une collection de valeurs discrètes, l'intégrale utilisée dans la définition de la transformée de Fourier se transforme en une somme discrète.

Remarque 3. Puisque le nombre d'échantillons est fini, le temps d'acquisition total sera également fini, égale à l'intervalle

La fréquence d'échantillonage est

Comme l'analyse du signal se fera (par le microcontrôleur) en un nombre fini de points dans l'espace des fréquences, en k points, k étant un nombre entier tout comme N.

Pour chacun de ces k points, il faudra calculer la somme de N termes.

On choisit

Le pas d'incrémentation en fréquence sera

les fréquences à explorer sont

elles couvrent la plage qui s'étend de (pour ) à (presque) (pour )

Comme nous ne disposont pas de la fonction réelle mais seulement de quelques valeurs échantillonées, on ne peut pas obtenir d'informations fréquentielles pour des valeurs de fréquences supérieures à la fréquence d'échantillonnage. Ce qui implique que dans le cas de l'analyse d'une fonction périodique, la fréquence de cette dernière doit obligatoirement être inférieure à la fréquence d'échantillonnage.

Théorème de Shannon:

La fréquence d'échantillonnage doit être >2 fois la fréquence à analyser.

Remplaçons dans la formule précedente, par sa valeur discrète

comme ,

Notre jolie formule devient:

posons :

ce sont les N échantillons du signal.

ce sont les N termes de la transformée de Fourier de ce signal ( puisque )

La transformée de Fourier discrète s'écrit maintenant:

avec

Pour calculer cette transformée de Fourier on doit donc calculer k fois N valeurs de cette formule, soit multiplications de nombres complexes.

Pour pouvoir calculer une exponentielle complexe sur ordinateur, on utilisera une propriété vue précédemment sur ce site :

Rappel de mathématiques:

Les termes de la somme se décomposent chacun en

- une partie réelle (R)

- une partie imaginaire (I)

L'amplitude de la sinusoïde étant le module de ce nombre complexe :

Il reste à calculer le module ce nombre complexe, pour chaque valeur de k :

J'ai écrit un programme en C++ et Qt4 qui calcule et trace cette tranformée de Fourier. Je vous fournis le code source.

Nous étudierons un procédé simple (fenêtre de Hamming) qui permet de diminuer les lobes latéraux (la transformée de Fourier d'une sinusoïde pure allant dans le temps de à est une simple raie pour sa fréquence et 0 partout ailleurs. Nous verrons que le fait d'échantillonner la fonction sur un intervalle restreint donne un résultat plus « étendu » fréquentiellement. Dès à présent je vous invite à consulter la page de Wikipédia concernant le fenêtrage que je trouve vraiment bien faite:

http://fr.wikipedia.org/wiki/Fen%C3%AAtrage

)

Puis il nous restera à tirer parti de simplifications de l'algorithme afin de réduire le nombre de calculs élémentaires d'un facteur 100 (permettant l'implémentation sur un microcontrôleur en vue d'un traitement en temps réel, ce qui constitue un analyseur de spectre).

Le programme en C++ Qt4 est >> ici << .



Copie d'écran du programme en C++ et Qt4:




Silicium628
22722