Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Série de Fourier d’un créneau

On considère le signal créneau y(t)y(t) de période 2T2T défini par :

y(t)={Asi T2tT2,0sinony(t) = \begin{cases} A \quad &\text{si}\ -\frac{T}{2} \leq t \leq \frac{T}{2}, \\ 0 \quad &\text{sinon} \end{cases}

avec A=1A=1 et T=1T = 1.

On souhaite maintenant reconstruire le signal temporel en ne considérant que les KK premières harmoniques.

Transformée de Fourier discrète d’un signal numérique

On considère le signal suivant de longueur N=100N=100 échantillons :

z[n]={1si 0n<50,0sinon.z[n] = \begin{cases} 1 &\quad\text{si}\ 0 \leq n < 50, \\ 0 &\quad\text{sinon.} \end{cases}

L’algorithme FFT (Fast Fourier Transform), qui permet de calculer rapidement une TFD (transformée de Fourier discrète), est implémenté dans la fonction numpy.fft.fft. La TFD étant périodique de période NN, elle n’est tracée que sur une seule période. Les questions suivantes ont pour objectif de représenter la TFD de trois façons différentes.

Spectre non centré, en fonction des échantillons

La fonction numpy.fft.fft retourne la TFD ZZ de zz en fonction des échantillons fréquentiels kk, numérotés de 0 à N1N-1.

Spectre centré, en fonction des échantillons

En général, on préfère centrer la TFD autour de 0, donc entre les échantillons N/2-N/2 et N/21N/2-1 (si NN est pair), ou N/2-N/2 et N/2N/2 (si NN est impair).

Pour cela, il faut d’une part redéfinir le vecteur des abscisses (la fonction numpy.floor renvoie la partie entière qui permet de gérer la parité de NN) :

k = np.arange(N) - np.floor(N/2)

et d’autre part utiliser numpy.fft.fftshift qui déplace la deuxième moitié d’un vecteur au début de celui-ci, par exemple :

v=[654321]fftshift(v)=[321654]v = [6\,5\,4\,3\,2\,1] \quad\rightarrow\quad \mathrm{fftshift}(v) = [3\,2\,1\,6\,5\,4]

Spectre centré, en fonction des fréquences

Chaque échantillon du spectre peut être relié à une fréquence particulière, à condition de connaître la « période d’échantillonnage » TeT_e entre deux échantillons du signal temporel. On peut montrer (cf. Échantillonnage) que la fréquence ff correspondant à l’échantillon kk est f=k/(NTe)f = k/(N \, T_e).

Application

Représentation temps-fréquence

Le fichier gamme.wav est un enregistrement d’une gamme musicale au piano. Nous allons chercher quelles sont les notes jouées.

La représentation temps-fréquence du signal permet de retrouver très simplement la partition musicale. Par exemple, la fonction matplotlib.pyplot.specgram permet d’afficher le spectrogramme d’un signal.