Travaux Pratiques 3

的 Joseph Razik, last modified 在 2018-12-03

Application de la Transformée de Fourier Discrète

Objectif

L'objectif de ce TP est d'utiliser la transformée de Fourier discrète afin d'extraire une information d'un signal acoustique.

Préambule

Pour effectuer les quelques exercices de ce TP, vous allez travailler dans l'environnement notebook d'IPython/Jupyter. Pour cela, créez un répertoire pour cette matière, déplacez-vous dans celui-ci et exécutez les commandes suivantes :

$> module load python/3.6.5
$> jupyter-notebook

Ceci va ouvrir votre navigateur sur un explorateur de fichier du répertoire dans lequel vous avez lancé la commande.

Si vous obtenez un message d'erreur comme quoi la commande module n'existe pas, exécutez la commande suivante :

$> source /usr/local/Modules/init/profile.sh

Créez un nouveau projet Python3, que vous nommerez tp3.

Au début, dans la première cellule, pour activer le remplissage de l'espace de nommage avec les modules Numpy et Matplotlib (et math), écrivez la commande suivante et exécutez la cellule avec la séquence de touche Ctrl-Enter ou Shift-Enter

%pylab inline

Les fonctions de base

Pour ce TP, vous aurez besoin de deux fonctions que vous avez défini dans le TP précédent:

  • La fonction w_k() qui définie le k-ième vecteur de la base de l'espace vectoriel \(\mathbb{C}^N\),
  • La fonction dft qui calcul les coefficients de Fourier d'un signal s donné en paramètre, sur la base \(\mathbb{C}^N\) formée des \(w_k\).

Dans ce TP, vous allez également manipuler des sons au format WAV. Pour cela, vous exécuterez dans une cellule (la seconde) l'instruction suivante:

from scipy.io.wavfile import read as wread

Ainsi vous aurez ajouté dans votre espace de nommage la fonction wread qui permet de lire un fichier audio au format WAV.

Analyse d'un fichier identifié

Les sons que vous allez traiter sont des signaux de codes DTMF (Dual Tone Multiple Frequency) utilisés pour distinguer par le son les touches numérotées d'un clavier téléphonique (DTMF sur wikipedia).

L'appuie sur une touche génère un son composé de deux fréquences, selon le tableau suivant :

- 1 209 Hz 1 336 Hz 1 477 Hz 1 633 Hz
697 Hz 1 2 3 A
770 Hz 4 5 6 B
852 Hz 7 8 9 C
941 Hz * 0 # D
  1. Lisez le fichier son_1 et affichez ses caractéristiques : sa fréquence d'échantillonnage, le nombre d'échantillons et sa durée.
  2. La seconde étape consiste à appliquer la DFT sur le signal en entier pour en connaître sa composition fréquentielle. Toutefois, votre fonction de calcul de la DFT n'est pas optimisé et un tel calcul serait très long. C'est pourquoi nous allons artificiellement sous-échantillonner le signal d'origine d'un facteur 4. Quelle est la nouvelle fréquence d'échantillonnage ? le nouveau nombre d'échantilons ? la nouvelle durée du signal ? la nouvelle résolution temporelle ? la nouvelle résolution fréquentielle ?
  3. Calculez et affichez le module (en dB) du spectre de la DFT de ce signal sous-échantillonné.
  4. Quelles sont les fréquences de forte intensité ? Cela correspond-t-il avec les fréquences DTMF associées à la touche appuyée ?

Analyse du signal d'une touche mystère

  1. Refaites les mêmes analyse que dans la partie précédente avec le fichier mystere.
  2. Quelle touche a été appuyée ?

Repliement de spectre

  1. Connaissant les fréquences de la touche mystère et la fréquence d'échantillonnage du signal initial, quel facteur de sous-échantillonnage (entier) faudrait-il appliquer au minimum pour qu'il y ait un possible effet de repliement de spectre ?
  2. Refaites les mêmes analyse que dans la première partie mais avec ce facteur de sous-échantillonnage. Observez-vous le phénomène de repliement ?

Analyse d'un signal presque quelconque

Cette fois-ci, le signal n'est pas forcément celui de l'appuie d'une touche DTMF. Pour savoir ce qu'il contient, vous allez commencer par procéder à la analyse spectrale que précédemment.

  1. Refaites les mêmes analyse que dans la première partie avec le fichier etrange, mais appliqué cette fois un sous-échantillonnage de facteur 8.
  2. Est-ce un signal d'une touche DTMF ?

Spectre et spectrogramme

Vous allez poursuivre les investigations spectrales sur le fichier etrange. Cependant, vous allez dorénavant pouvoir utiliser la fonction optimisée du module Numpy pour calculer la DFT.

Exécutez cette instruction dans une cellule du notebook  :

from numpy.fft import fft

La fonction fft (Fast Fourier Transform) permet de calculer la DFT avec une complexité en \(N\log(N)\) au lieu de \(N^2\) dans la méthode naïve.

  1. Refaites les mêmes analyse que dans la première partie avec le fichier etrange, mais sans appliquer de sous-échantillonnage. Les résultats correspondent-ils avec vos résultats précédents  ? N,hésitez pas à « zoomer » sur la partie des pics de fréquence.

Bien que ce ne soit pas le spectre d'un signal DTMF, sa composition laisse penser que ce signal est peut-être composé de l'appuie de deux touches mais sans connaître l'ordre temporel (simultané, consécutive, autre combinaison). En effet, en appliquant la DFT sur le signal en entier, on déduit la composition fréquentielle mais nous n'avons aucune information temporelle.

Pour essayer de répondre à ces questions, vous allez analyser le signal par fenêtre temporelle glissante pour obtenir une meilleure résolution temporelle. Vous obtiendrez ainsi ce qui s'appelle un spectrogramme.

  1. Définissez une fonction spectro qui va calculer le spectrogramme d'un signal en le découpant en N fenêtres non recouvrantes. Le résultat, le spetrogramme, sera un tableau de N spectres.
  2. Pour N=2, quelle sera la résolution fréquentielle  ? Calculez le spectrogramme associé. Affichez le spectrogramme obtenu à l'aide de la fonction imshow avec les paramètres suivants : interpolation='nearest', origin='lower' et aspect='auto'. Affichez également la barre des couleurs pour estimer la puissance des fréquences.
  3. Refaites l'étape précédente mais en « zoomant » sur la partie des fréquences intéressante.
  4. Réitérez l'analyse mais cette fois en découpant le signal en 3 fenêtres, puis 4, puis 100.
  5. Que concluez-vous quant à la composition de ce signal ?