Douzième Exemple: La transformée de Fourier

Ce paragraphe est le premier à sortir du cadre strictement "tracé de courbes". Il s'agit au contraire de fournir une aide mathématique à la compréhension comme à la manipulation de la transformée de Fourier. Plus exactement, SEG va utiliser la FFT (Fast Fourier Transform) pour montrer les éléments de décomposition d'un signal périodique.

Deux fonctions spécifiques ont été établies pour utiliser la FFT.

Nom Rôle Particularités
FFT(x0, x1, Nb, Section) Calcule une FFT x0, x1 définissent à priori une période. Nb, nombre d'échantillons de la FFT doit être une puissance de 2 (32768 au maximum), et Section est le nom de la section qui décrit la fonction périodique de type y=f(x) sur la période. Ex: FFT(0, 1, 1024, "[Fct]")
DrawFFT(x, n) Calcul de la FFTI en x renvoie la valeur de la transformée de Fourier inverse au point x, en utilisant les coefficients de la FFT jusqu'à l'ordre n. La fonction FFT doit avoir été appelée et la valeur de n doit être inférieur à Nb/2.

Pour mieux comprendre, voici un exemple tiré de l'épreuve de mathématiques de la session 2005 du BTS IRIS. Le sujet donnait une fonction périodique paire de période 1 définie par :

x appartient à [0, Tau [ y = 0.5 - Tau
x appartient à [Tau, 0.5] y = -Tau

Avec Script Equation Grapher, la fonction f(x) se code de la manière suivante:

[init]
{
    Global Tau
;
    Tau = 0.2
}

[Body]
{
    y=-Tau
    u=x%%1
    if(u>1-Tau)  u--;
    if(u<Tau)  y=0.5-Tau
}

Nous pouvons ajouter à cette courbe une seconde courbe utilisant la FFT de la manière suivante:

[init]
{
    Global Tau
;
    Global Nb
;
    Nb=15

    FFT(-0.5, 0.5, 2048, "[Fct]")
;
}

[Fct]
{

    y=-Tau
    if(abs(x)
<= Tau) y += 0.5
}

[Body]
{
    y=DrawFFT(x, Nb)
}

L'étude mathématiques de cette fonction montre que sa transformée de Fourier est telle que:

a0 = 0 valeur moyenne de f(x)
bn = 0 fonction paire
an = 1/(n*PI)*sin(2*PI*n*Tau) calculé par une intégration par parties

Il est alors possible de visualiser cette transformée avec le script:

[init]
{
    Global Tau
;
    Global Nb
;
}

[Body]
{
    y = 0
    for(n =1 ; n<=Nb; n++)
    {
        y += 1/(n*PI)*sin(2*PI*n*TAU)*cos(2*PI*n*x)
    }
}

Note: Le dessin ci dessus zoome une partie de la courbe et montre la toute petite différence due aux nombres d'échantillons de la FFT. Essayez avec 32768 échantillons.

 

 

 

Interactivité de la FFT...