TP – Échantillonnage et analyse spectrale

Travail préparatoire
Lire l’introduction, le début de la partie 4 et faire l’application 3.
Matériel

Par groupe

  • GBF
  • Carte d'acquisition campus

Pour la classe

  • Moteur avec roue rouge marquée d'un trait noir
  • Alimentation stabilisée
  • Stroboscope à lampe Xénon

1. Introduction

La mesure d’un signal, qualifié « d’analogique », se réalise en général à l’aide d’un « capteur » auquel il faut souvent ajouter un « adaptateur ». Par exemple un microphone ne délivrera une tension que de l’ordre du mV, il faudra donc l’amplifier.

Si l’on désire réaliser un traitement numérique de ce signal, une conversion « analogique-numérique » (« CAN ») doit être réalisée. C’est par exemple ce que réalise une carte d’acquisition. On peut représenter l’ensemble de la chaine d’acquisition ainsi :

Fig. 1. – Chaine d’acquisition d’un signal analogique
Évaluation ★★⯪

Au cours de ce TP, vous rédigerez, en plus du compte-rendu habituel, une fiche méthode à la fin de votre cahier de TP. Cette fiche méthode devra contenir les points suivants :

  • Comment régler Latis-Pro quand on fait une acquisition
  • Comment tracer un spectre avec Latis-Pro
  • Comment tracer un spectre avec Python
Signification des réglages Latis-Pro
/ 2
Comment choisir les réglages Latis-Pro
/ 2
Tracé spectre Latis-Pro
/ 2
Tracé spectre Python
/ 2
Fiche qui donne envie d’être lue
/ 2
Total
/ 10

2. Première approche du critère de Shannon

L’échantillonnage est l’opération qui consiste à mesurer un signal en capturant des valeurs à intervalles réguliers.

L’intervalle de mesure s’appelle la période d’échantillonnage, notée 𝑇𝑒. Se pose alors la question de savoir si les échantillons sont représentatifs du signal initial.

Parfois, dans les vidéos montrant des objets tournant (roues de voiture, pales d’hélicoptère, …), ceux-ci ne semblent pas tourner à la « bonne » vitesse, voire dans le mauvais sens. Cela est dû à une inadéquation entre la fréquence de rafraichissement des images (24 images par seconde en général), la vitesse de rotation et le nombre de barreaux des roues. Voir par exemple : https://youtu.be/C6f0tTdba8Y?feature=shared&t=107

Manipulation 1 – Roue éclairée par un stroboscope 🙌

Observer un disque en rotation à vitesse constante, éclairé par un stroboscope.

Quelle relation doivent vérifier la fréquence du stroboscope (fréquence d’échantillonnage) et la fréquence de rotation de la roue (fréquence du signal) pour que le mouvement de la roue soit correctement observé ?

Application 1 ✍

En supposant que la roue tourne dans le sens horaire, compléter les schémas ci-dessous en représentant la position du trait sur la roue.

Fig. 2. – Roue tous les 18 de tours
Fig. 3. – Roue éclairée tous les 34 de tours

Dans les deux cas, dire si le mouvement de la roue est correctement observé.

À la suite des constatations précédentes, on admet le théorème de Nyquist-Shannon :

Point clé 1 – Théorème de Nyquist-Shannon ♥︎

Un signal est correctement représenté à partir de ses échantillons ssi 𝑓𝑒>2𝑓max

avec 𝑓𝑒 la fréquence d’échantillonnage (Hz) ; 𝑓max la fréquence maximale présente dans le spectre du signal (Hz).
Application 2 ✍
Quelle fréquence d’échantillonnage minimale faut-il pour représenter correctement un signal audio ? Est-ce cohérent avec la fréquence utilisée par les CD musicaux (44 100⁠ ⁠Hz) ?

3. Choix d’une fréquence d’échantillonnage

Pour visualiser l’influence de la fréquence d’échantillonnage sur l’acquisition, on va acquérir un signal sinusoïdal de fréquence 10⁠ ⁠kHz connue produit par un GBF puis en tracer le spectre grâce à Latis-Pro (voir Annexe A).

Manipulation 2 – Acquisition correcte 🙌

Réaliser une acquisition d’un signal sinusoïdal de fréquence 10⁠ ⁠kHz produit par un GBF en respectant largement le critère de Shannon.

En tracer le spectre et vérifier que la fréquence observée est bien la fréquence réelle.

Conserver cette acquisition qui resservira par la suite.

Manipulation 3 – Acquisition incorrecte 🙌

Réaliser une acquisition d’un signal sinusoïdal de fréquence 10⁠ ⁠kHz produit par un GBF en ne respectant pas le critère de Shannon.

En tracer le spectre et vérifier que la fréquence observée est bien différente de la fréquence réelle.

Lorsque la fréquence d’échantillonnage n’est pas suffisante, la fréquence mesurée sur le spectre n’est pas la fréquence réelle du signal. On dit qu’il y a repliement du spectre.

4. Lien entre paramètres d’acquisition et paramètres du spectre

L’acquisition est réglée par 3 nombres :

Application 3 ✍
Quelle relation lie ces 3 nombres ?

On a donc 2 « degrés de liberté » sur l’acquisition. Lorsqu’on change un des trois paramètres dans le logiciel d’acquisition, un des deux autres est nécessairement modifié.

4.1. Durée d’acquisition et résolution spectrale

La résolution spectrale (écart de fréquence entre 2 points successifs sur le spectre) est liée à la durée de l’acquisition.

Point clé 2 – Résolution spectrale ♥︎
Δ𝑓=1𝐷
avec Δ𝑓 la résolution spectrale (Hz) ; 𝐷 la durée d’acquisition (s).

Si on veut plus de détails sur le spectre, il faut acquérir plus longtemps.

Manipulation 4 – Lien entre durée d’acquisition et résolution spectrale 🙌
Vérifier cette relation sur l’acquisition réalisée précédemment.

4.2. Période d’échantillonnage et étendue spectrale

La fréquence la plus grande observable sur le spectre est la fréquence donnée par le critère de Shannon : 𝑓𝑒2.

Manipulation 5 – Fréquence maximale présente sur le spectre 🙌
Vérifier cette relation sur l’acquisition réalisée précédemment.

Si on veut observer des fréquences plus élevées, il faut acquérir plus vite.

5. Calcul de spectre avec Python

Le calcul du spectre à partir du signal est effectué avec un algorithme appelé FFT (Fast Fourier Transform). Cet algorithme, de complexité quasi-linéaire et utilisant le principe « diviser pour régner », est implanté par exemple dans les oscilloscopes numériques, dans Latis-Pro et dans la bibliothèque numpy de Python, notamment les fonctions np.fft.rfft et np.fft.rfftfreq.

Le spectre d’un signal peut être calculé à partir des lignes suivantes, à supposer que le signal soit dans la variable s et la période d’échantillonnage dans la variable Te.

1
2
3
import numpy as np
s_fourier = np.abs(np.fft.rfft(s)) # Calcul de spectre
freqs = np.fft.rfftfreq(len(s), Te) # Calcul des fréquences en Hz
Manipulation 6 – Tracé du spectre avec Python 🙌
Exporter les données de l’acquisition dans un fichier texte, les importer dans Python et tracer le spectre. Ce spectre est-il cohérent avec celui tracé par Latis-Pro ?

6. Visualisation du critère de Shannon avec Python

On souhaite tracer le signal cos(2𝜋𝑓𝑡) avec 𝑓=100 Hz sur une durée de 0,5 s. Réaliser le tracé pour des périodes d’échantillonnage de 0,001⁠ ⁠s, 0,01⁠ ⁠s et 0,011⁠ ⁠s. On pourra utiliser les fonctions arange ou linspace pour créer les vecteurs de temps.

Manipulation 7 – Simulation numérique d’un repliement de spectre 🙌

Avec Python, définir les variables t1, t2 et t3 correspondant aux 3 périodes d’échantillonnage, puis tracer les 3 signaux sur le même graphique. Lequel est fidèle au signal réel ? Est-ce cohérent avec le critère de Shannon ? Les signaux seront affichés par des points non reliés.

Tracer ensuite le spectre de ces 3 signaux. Lequel est fidèle au signal réel ? Est-ce cohérent avec le critère de Shannon ?

Annexe A : Tracé de spectre avec Latis-Pro

Pour tracer le spectre avec Latis-Pro, il faut cliquer sur « Traitements » puis « Calculs spécifiques » puis « Analyse de Fourier » ou appuyer sur la touche F6 du clavier. Une fenêtre s’ouvre alors. On peut alors ouvrir le menu « Avancé » et mettre le niveau de validité1 à 0⁠ ⁠%. Il ne reste alors plus qu’à faire glisser la courbe dont on souhaite tracer le spectre dans le cadre « Courbe ».

Fig. 4. – Fenêtre de calcul du spectre avec Latis-Pro

Annexe B : Transférer des données de à Python

Pour traiter avec Python des données acquise avec Latis-Pro, il faut les exporter (« Fichier » puis « Exportation »). Le format le plus pratique est le format TXT, avec comme séparateur décimal le point et entre les données le point-virgule. Il faut ensuite faire glisser les courbes à exporter vers la colonne de droite.

Pour importer les données avec Python, on utilise la fonction loadtxt de la bibliothèque numpy. Le paramètre skiprows permet d’ignorer les premières lignes qui contiennent des en-têtes (une seule pour Latis-Pro).

1
2
3
4
data = np.loadtxt(nom_fichier, skiprows = 1, delimiter = ";")
t = data[:,0] # la première colonne contient les temps
s1 = data[:,1] # la seconde colonne contient le premier signal
... # on fait de même pour tous les signaux à importer

Annexe C : Tracer un spectre avec Python

La bibliothèque numpy implémente l’algorithme FFT (pour Fast Fourier Transform) dans son sous-module numpy.fft. En particulier, la fonctions np.fft.rfft permet de calculer le spectre d’un signal et np.fft.rfftfreq les fréquences associées.

Le spectre d’un signal s échantillonné avec la période d’échantillonnage Te peut être calculé à partir des lignes suivantes.

1
2
s_fourier = np.abs(np.fft.rfft(s)) # Calcul de spectre
freqs = np.fft.rfftfreq(len(s), Te) # Calcul des fréquences en Hz
  1. 1Par défaut, Latis-Pro retire du spectre tous les points inférieurs à ce seuil ce qui n’est généralement pas un comportement désiré.