Eric Brasseur Accueil    |    Liens    |    Contact    |   
   



La transformation en série de Fourier numérique

Les formules mathématiques complexes contenues dans le présent texte sont données à titre de référence. Elles ne sont pas nécessaires à la compréhension du texte.




Qu'est-ce qu'une transformation en série de Fourier ?

Supposons un signal audio échantillonné à 8kHz. Ceci signifie que tous les huitièmes de millisecondes, on fait une mesure de l'intensité du signal.

Pour le reste de l'exposé, nous considérerons que nous travaillons sur un échantillon de HUIT mesures.

Par exemple, la suite d'échantillons :


50 mV   206 mV   -100 mV   -65 mV   -50 mV   -6 mV   100 mV   -135 mV


Que nous pourrions représenter par le graphe :




L'intersection de la première barre verticale avec le dessin du signal se trouve à 50 mV, la deuxième à 206 mV, etc...

Le but est de décomposer ce signal en une somme de sinusoïdes. Dans le cas de notre exemple, cela donne :




(En faisant la somme de ces sinusoïdes, on obtient comme résultat notre signal initial.)

Soit :

Dit mathématiquement :

S(t) =   50mV . sin (2 pi 1000 t + pi/2) +
        100mV . sin (2 pi 2000 t + 0   ) +
        100mV . sin (2 pi 3000 t + 0   )  


ou :

S(t) =   50mV . sin (2 pi 1000 (t + 2/8000)) +
        100mV . sin (2 pi 2000 (t + 0     )) +
        100mV . sin (2 pi 3000 (t + 0     ))  


La façon dont on réalise cette décomposition est traditionnellement la suivante :

On DECIDE que le signal est composé de sinusoïdes de 0 kHz, 1 kHz, 2 kHz, 3 kHz, et 4 kHz.

Reste à déterminer l'amplitude et le déphasage de ces sinusoïdes.

(Si une sinusoïde n'est pas du tout présente dans le signal, son amplitude sera nulle, et son déphasage sans importance.)

(La sinusoïde de 0 kHz est en fait simplement la composante continue du signal. Une constante. Sa phase n'a pas d'importance, tant qu'elle n'est pas un infini.)

(Déterminer la phase et l'amplitude de la sinusoïde à 4 kHz est un peu bancal : plusieurs sinusoïdes, avec des amplitudes et déphasages différents, peuvent convenir pour avoir un même résultat.)

(On part du principe que le signal est répétitif : on suppose que le neuvième échantillon aurait été le même que le premier, le dixième que le deuxième...)


La façon de procéder

Le but est donc de déterminer l'amplitude et le déphasage des sinusoïdes. Pour comprendre la méthode utilisée, le lecteur doit considérer et accepter les trois faits mathématiques suivants :


1. Un signal peut être représenté comme étant la somme de plusieurs piques.




Si nous posons que l'équation d'une pique est celle ci :

y(t) = pique (a, dc, t)


avec a l'amplitude, dc le décalage dans le temps, et t le temps (l'abscisse).

Alors notre signal S(t) peut s'écrire ainsi :

S(t) =  pique (  50mV, 0,      t) +
        pique ( 206mV, 1/8000, t) +
        pique (-100mV, 2/8000, t) +
        pique ( -65mV, 3/8000, t) +
        pique ( -50mV, 4/8000, t) +
        pique (  -6mV, 5/8000, t) +
        pique ( 100mV, 6/8000, t) +
        pique (-135mV, 7/8000, t)  



2. Un signal en forme de pique peut être décomposé en une série de Fourier bien précise.

Soit fe la fréquence d'échantillonnage (8000 Hz dans notre cas)

Soit ne le nombre d'échantillons (8 dans notre cas)




(En langage humain : on fabrique un pique en faisant la somme de cossinusoïdes.)

La même chose, en notation exponentielle complexe (voir l'annexe) :




Le graphe complet d'une pique d'amplitude 200 mV et décalage 0 est :



Les cinq sinusoïdes qui la composent sont :

pique(200mV, 0, t) =  200 . 1/8 . sin (2 pi 0    (t - 0) + pi/2) +
                      200 . 1/4 . sin (2 pi 1000 (t - 0) + pi/2) +
                      200 . 1/4 . sin (2 pi 2000 (t - 0) + pi/2) +
                      200 . 1/4 . sin (2 pi 3000 (t - 0) + pi/2) +
                      200 . 1/8 . sin (2 pi 4000 (t - 0) + pi/2)  


Soit :

25 . sin (2 pi 0    t + pi/2) +
50 . sin (2 pi 1000 t + pi/2) +
50 . sin (2 pi 2000 t + pi/2) +
50 . sin (2 pi 3000 t + pi/2) +
25 . sin (2 pi 4000 t + pi/2)  


Et en exponentielles complexes :

pique(200mV, 0, t) = RE( 200 . 1/8 . 1 . e 0,2 pi 0    t  + 
                         200 . 1/4 . 1 . e 0,2 pi 1000 t  + 
                         200 . 1/4 . 1 . e 0,2 pi 2000 t  + 
                         200 . 1/4 . 1 . e 0,2 pi 3000 t  + 
                         200 . 1/8 . 1 . e 0,2 pi 4000 t  ) 


Soit :

RE( 25 e 0,2 pi 0    t  +
    50 e 0,2 pi 1000 t  +
    50 e 0,2 pi 2000 t  +
    50 e 0,2 pi 3000 t  +
    25 e 0,2 pi 4000 t  )


Le lecteur remarquera que ce graphe n'est pas nul partout hors de la pique. Ce qui compte, c'est qu'il soit nul juste aux endroits exacts où se trouvent les autres échantillons.

(Notez que ce graphe présente une autre pique, identique, dans la série d'échantillons qui suit.)


3. La somme de deux sinusoïdes de même fréquences (mais de déphasages et amplitudes différents), est une sinusoïde.




(sgn (x) donne 1 si x est positif, et -1 si x est négatif.)

En notation exponentielle complexe :




Synthèse

Si le signal est la somme de huit piques,

S(t) =  pique (a1, dc1, t) +
        pique (a2, dc2, t) +
        pique (a3, dc3, t) +
        pique (a4, dc4, t) +
        pique (a5, dc5, t) +
        pique (a6, dc6, t) +
        pique (a7, dc7, t) +
        pique (a8, dc8, t)  


et si chaque pique est la somme de cinq sinusoïdes,

alors le signal est la somme de 8 . 5 = 40 sinusoïdes.

Or, toutes les piques sont composées de cinq sinusoïdes de mêmes fréquences (0 kHz, 1 kHz, 2 kHz, 3 kHz, 4 kHz). (mais d'amplitudes et déphasages différents)

En d'autres termes; dans les 40 sinusoïdes, il y a 8 sinusoïdes de 0 kHz, 8 sinusoïdes de 1 kHz, 8 sinusoïdes de 2 kHz, 8 sinusoïdes de 3 kHz, et 8 sinusoïdes de 4 kHz.

La somme de 8 sinusoïdes de même fréquences, donne une seule sinusoïde, toujours de la même fréquence.

On peut donc simplifier la somme des 40 sinusoïdes, et ne plus en avoir que 5 :

S(t) =  a0 sin (2 pi 0    t + d0) +
        a1 sin (2 pi 1000 t + d1) +
        a2 sin (2 pi 2000 t + d2) +
        a3 sin (2 pi 3000 t + d3) +
        a4 sin (2 pi 4000 t + d4)  


En notation complexe :

S(t) =  RE( (a0, b0) e 0,2 pi 0    t  +
            (a1, b1) e 0,2 pi 1000 t  +
            (a2, b2) e 0,2 pi 2000 t  +
            (a3, b3) e 0,2 pi 3000 t  +
            (a4, b4) e 0,2 pi 4000 t  )


Notre échantillonnage de huit éléments a ainsi été décomposé, de façon mécanique et imparable, en une somme de cinq sinusoïdes.

(Le signal initial est fait de 8 nombres (50, 206, -100, -65, -50, -6, 100, -135). On décompose en 5 sinusoïdes, caractérisées chacune par 2 nombres (amplitude, phase), soit 10 nombres. Le résultat d'une transformation en série de Fourier prend il donc plus de place que le signal initial ? En fait non : on peut laisser tomber les déphasages des sinusoïdes de 0 kHz et 4 kHz.)


Application

Voici un programme en BASIC qui met en oeuvre le système des piques pour réaliser une décomposition en série de Fourier.

Dans la mesure du possible, l'auteur a essayé d'utiliser des noms de variables identiques à ceux contenus dans l'exposé, et fait en sorte que le programme fonctionne tel-quel sous la plupart des BASICs (il a été testé sous BBC BASIC et QBASIC (ce dernier était fourni en standard avec MS-DOS et est donc disponible sur tous les vieux PC)). (Ce programme utilise la fonction arctangante (ATN). Pour obtenir une version du programme qui utilise la fonction arccossinus (ACOS) à la place, cliquez ici.)

Si on lui donne les paramètres suivants :

FREQUENCE D'ECHANTILLONNAGE ? 8000
NOMBRE D'ECHANTILLONS       ? 8


Puis les huit chiffres suivants :

50   206   -100   -65   -50   -6   100   -135


Il répondra, aux erreurs d'arrondi près, ceci :

   0Hz     A=0       D=1.57079633
1000Hz     A=50      D=1.57079633
2000HZ     A=100     D=0
3000HZ     A=100     D=0
4000HZ     A=0       D=3.14159265


Ce qui correspond bien à l'exemple donné au début de cet exposé. (Les déphasages n'ont aucune importance pour les sinusoïdes dont l'amplitude ou la fréquence est nulle.)

Le programme :

PY = 4 * ATN(1) : REM 3.14159265, QUOI
INPUT "FREQUENCE D'ECHANTILLONNAGE ", FE
INPUT "NOMBRE D'ECHANTILLONS       ", NE

NS = NE / 2 + 1: REM NOMBRE DE SINUSOIDES

REM CREER UN TABLEAU C AVEC (COS(DN) , -SIN(DN)) :
DIM C(NE, NS, 2)
FOR N = 0 TO NE / 2
 FOR E = 0 TO NE - 1
  DC = E / FE
  FEN = N * FE / NE
  DN = 2 * PY * FEN * DC
  C(E, N, 1) = COS(DN)
  C(E, N, 2) = -SIN(DN)
 NEXT E
NEXT N

REM REMPLIR LE TABLEAU B AVEC
REM LES CORRECTIONS D'AMPLITUDE :
DIM B(NS)
B(0) = 1 / NE
FOR N = 1 TO NE / 2 - 1
 B(N) = 2 / NE
NEXT N
B(NE / 2) = 1 / NE

REM S EST LE TABLEAU DES ECHANTILLONS :
DIM A(NE)

REM R EST LE TABLEAU DES RESULTATS :
DIM R(NS, 2)

REM LES CONSTANTES ONT ETE CALCULEES
REM VOICI LA PARTIE "VIVANTE" :

REM ENTRER LES ECHANTILLONS :
FOR E = 0 TO NE - 1
 PRINT "COMBIEN VAUT L'ECHANTILLON  "; E; " ";
 INPUT A(E)
NEXT E

REM LE CALCUL :

FOR N = 0 TO NE / 2
 R(N, 1) = 0
 R(N, 2) = 0
 FOR E = 0 TO NE - 1
  A = A(E) * B(N) * C(E, N, 1)
  B = A(E) * B(N) * C(E, N, 2)
  R(N, 1) = R(N, 1) + A
  R(N, 2) = R(N, 2) + B
 NEXT E
NEXT N

REM SORTIR LES RESULTATS :

PRINT "COEFFICIENTS COMPLEXES :"
FOR N = 0 TO NE / 2
 PRINT N * FE / NE; "HZ ("; R(N, 1); ","; R(N, 2); ")"
NEXT N

PRINT "AMPLITUDE ET DEPHASAGE DES SINUSOIDES :"
FOR N = 0 TO NE / 2
 A = SQR(R(N, 1) ^ 2 + R(N, 2) ^ 2)
 IF -R(N, 2) = 0 THEN
  D = PY / 2
  IF R(N, 1) < 0 THEN D = -D
 ELSE
  D = ATN(R(N, 1) / -R(N, 2))
  REM PAS D'ARCCOSSINUS EN QBASIC
  IF -R(N, 2) < 0 THEN D = D + PY
 ENDIF
 PRINT N * FE / NE; "HZ A="; A; " D="; D
NEXT N



Annexe :

Rappels sur les exponentielles et les nombres complexes




Remerciements

Je voudrais remercier mes amis Frédéric Cloth et Didier Bizzarri pour leur aide et leurs renseignements.




Eric Brasseur  -  1994       [ In English ]
www.000webhost.com