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 :
- Une sinusoïde de 1 kHz avec une amplitude de 50 mV, et un
déphasage de pi/2. (ou un décalage dans le temps de
2 huit-millièmes de seconde)
- Une sinusoïde de 2 kHz avec une amplitude de 100 mV, et un
déphasage de 0.
- Une sinusoïde de 3 kHz avec une amplitude de 100 mV, et un
déphasage de 0.
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.