Exercices sur machine#

Repliement spectral#

En musique, la note la correspond à une sinusoïde de fréquence 440 Hz.

  • Représentez la note la sur 100 ms en réglant le pas de temps pour obtenir une courbe qui soit jolie. Quelle fréquence d’échantillonnage correspond au pas de temps choisi ? Affichez la TFD du signal : y a-t-il repliement spectral ?

  • Représentez la note la sur 100 ms avec une fréquence d’échantillonnage de 1000 Hz. Affichez la TFD du signal : y a-t-il repliement spectral ?

  • Représentez la note la sur 100 ms avec une fréquence d’échantillonnage de 700 Hz. Affichez la TFD du signal : y a-t-il repliement spectral ? Quelle est la conséquence sur le signal sonore numérisé ?

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.

  • Chargez (scipy.io.wavfile.read) et affichez le signal.

  • Vérifiez sur la TFD qu’il n’est pas facile de trouver la partition musicale correspondante.

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.

  • Affichez le spectrogramme du signal en conservant les paramètres par défaut.

  • Étudiez l’influence des paramètres principaux de la fonction matplotlib.pyplot.specgram pour comprendre leur signification.

  • Déterminez alors les notes jouées à partir de leur fréquence.

Interpolation#

Le fichier 8820Hz.csv contient un signal échantillonné à 8 820 Hz. La première colonne correspond aux échantillons temporels, et la seconde colonne aux amplitudes du signal.

  • Affichez ce signal, noté \(x\), en mettant en évidence les échantillons, par exemple avec la commande plot(t,x,'-*').

  • Générez et affichez la transformée de Fourier discrète (TFD) de \(x\) en centrant l’axe des fréquences.

On souhaite augmenter la fréquence d’échantillonnage de \(x\) d’un facteur cinq, ce qui implique d’ajouter quatre échantillons entre chaque échantillons existants. Il faut donc effectuer une interpolation du signal, c’est-à-dire calculer de nouveaux échantillons à l’intérieur du signal.

La technique de « zero-padding fréquentiel » consiste à ajouter des zéros de part et d’autre du spectre de Fourier pour obtenir un spectre (et donc un signal temporel) contenant cinq fois plus d’échantillons.

  • En notant \(X\) la TFD du signal \(x\) et \(N\) son nombre d’échantillons, ajoutez \(M\) zéros de part et d’autre de la TFD de manière à créer un vecteur \(Y\) cinq fois plus long que \(X\) :

    Y = np.concatenate([np.zeros(M), X, np.zeros(M)])
    
  • Affichez la TFD \(Y\) (après avoir redéfini son axe des fréquences).

  • Affichez le signal interpolé, issu de la TFD inverse de \(Y\), et comparez-le au signal original \(x\) (après avoir défini son axe des temps).