Vous êtes sur la page 1sur 11

Calibrage d’une transformée de F OURIER rapide

Repliement, théorème de S HANNON


UEF MINA – Mathématiques et informatique du signal
séance de TD SIG1

Jean-Luc C HARLES
Éric D UCASSE
Thomas M ILCENT

L’intégralité des exercices proposés sera rédigée à l’aide du langage Python et du module
MathInfo_BX_Signal1 fourni sous forme de fichier Python disponible sur la plateforme pédagogique SAVOIR.
On prendra bien soin à se créer un répertoire de travail, signal par exemple.

ÉD, JLC, TM (Arts & Métiers ParisTech) Utilisation d’une FFT V2.02 Mars 2022 1 / 11
Première partie Définition et tracé d’un signal numérique

Partie 1 – Définition et tracé d’un signal numérique


Un signal numérique est caractérisé par une liste s = sk⋆ 0⩽k ⩽n −1 de valeurs numériques,

t
un intervalle de temps Ts séparant deux instants consécutifs, et l’instant t0 de début du signal.
La classe numSig modélise ce concept de signal numérique :
classe numSig
« attributs » en lecture-écriture
+ Ts : float Période d’échantillonnage
+ t0 : float Instant de début du signal
+ label : string Étiquette du signal
« attributs » en lecture seule
+ values : vector of floats Valeurs du signal
+ nt : integer Nombre de valeurs
+ timeValues : vector of floats Instants d’échantillonnage
..........................................
« variable de classe » en lecture seule
+ instances : list of numSig Tous les signaux numériques créés
Méthodes publiques
+ numSig( values : floats, Ts : float, t0 : float, label : string )
+ copy() : numSig Renvoie une copie du signal
Restriction On fera toujours en sorte que le nombre de valeurs soit pair. Le constructeur
rajoute automatiquement un zéro à la fin si la liste de valeurs qu’on lui fournit comporte un
nombre impair de valeurs.

ÉD, JLC, TM (Arts & Métiers ParisTech) Utilisation d’une FFT V2.02 Mars 2022 2 / 11
Première partie Définition et tracé d’un signal numérique

Partie 1 – Définition et tracé d’un signal numérique


1.1 – Prise en main des classes numSig et signalPlotter
Dans un fichier signal_TD1.py qui importe la définition de la classe numSig à partir du
fichier MathInfo_BX_Signal1.py, créer un signal numérique s0 très simple (quelques
valeurs), instance de la classe numSig portant l’étiquette ’Test’.
Dans le shell, tester les attributs et les méthodes de ce signal.
Terminer en important la définition de la classe signalPlotter puis instancier celle-ci pour
lancer l’interface graphique de tracé de signaux. Faire tracer le signal d’étiquette ’Test’.

1.2 – Outil de création d’un signal numérique par échantillonnage


Créer ensuite dans signal_TD1.py la fonction ech de 5 variables s, n, Ts , t0 , et label qui
crée puis renvoie le signal numérique (une instance de la classe numSig) issu de
l’échantillonnage du signal à temps continu s (une fonction à variable et à valeurs réelles)
avec une période d’échantillonnage Ts , un instant t0 de début d’échantillonnage, un nombre
de valeurs égal à n, où n est un nombre pair, et l’étiquette label. Les valeurs du signal
numérique sont les sj⋆ = s(t0 + j Ts ) pour j entier variant de 0 à (n−1). Si n est impair, on
prendra une valeur de plus du signal à temps continu.
On fera en sorte que l’échantillonnage soit vectorisé, c’est-à-dire ne fasse pas appel à une
boucle explicite, lorsque la fonction s le permet.
Tester la fonction ech par cn=ech(np.cos,10,0.3,-1.5,"cosinus"), où np désigne le
module numpy.

ÉD, JLC, TM (Arts & Métiers ParisTech) Utilisation d’une FFT V2.02 Mars 2022 3 / 11
Première partie Définition et tracé d’un signal numérique

Partie 1 – Définition et tracé d’un signal numérique


La classe anaSig modélise le concept de signal analogique (ou à temps continu) :
classe anaSig
« Attributs publics en lecture seule » :
+ tmin Instant avant lequel le signal est nul
+ tmax Instant après lequel le signal est nul
+ fmax Fréquence au-delà de laquelle la transformée de F OURIER du signal est nulle
+ label Étiquette du signal
[···]
Méthodes publiques :
+ anaSig(func_or_vec, t_beg, t_end, label[, f_up])
func_or_vec fonction ou vecteur de valeurs, t_beg instant de début, t_end instant
de fin, [optionnel] f_up fréquence au-delà de laquelle on est sûr que la transformée
de F OURIER est nulle, nécessaire uniquement si func_or_vec est une fonction.
+ __call__(Vt:ndarray)
nom(Vt) renvoie les valeurs du signal analogique nom aux différents instants dans Vt
+ FT(Vf:ndarray)
Renvoie les valeurs complexes de la transf. de F OURIER du signal aux différentes
fréquences dans Vf
+ write() Sauvegarde dans le dossier anaSig.sig_dir (attribut statique)
Méthodes statiques :
+ DAC(sn:numSig) Conversion numérique → analogique, renvoie une instance de anaSig
+ read(file_path:str) Renvoie une instance de anaSig à partir d’un fichier

ÉD, JLC, TM (Arts & Métiers ParisTech) Utilisation d’une FFT V2.02 Mars 2022 4 / 11
Première partie Définition et tracé d’un signal numérique

Partie 1 – Définition et tracé d’un signal numérique

1.3.a – Prise en main de la classe anaSig


Définir de façon vectorisée la fonction u suivante :
( cos(12 π t) − 0.5 cos(36 π t) ) (1 + 5 t)3 (1 − t)8 si −0.2 < t < 1
u(t) = .
0 sinon

Construire une instance sa1 de la classe anaSig correspondant à cette fonction u, en lui
donnant l’étiquette ’u’ et en spécifiant que toutes les fréquences sont inférieures à 50 Hz.
À l’aide de SignalPlotter, visualiser ce signal ainsi que sa densité spectrale d’amplitude. Le
résultat visuel doit ressembler à l’image ci-dessous.

ÉD, JLC, TM (Arts & Métiers ParisTech) Utilisation d’une FFT V2.02 Mars 2022 5 / 11
Première partie Définition et tracé d’un signal numérique

Partie 1 – Définition et tracé d’un signal numérique

1.3.b – Échantillonnage et visualisation des signaux sa1 et sn1


Échantillonner le signal analogique sa1, avec n = 64, Ts = 8×10−3 s , et t0 = −0.1 s pour
créer un signal numérique sn1, avec l’étiquette ’u éch.’.
Faire ensuite tracer ces deux signaux à l’aide de signalPlotter de manière à obtenir un
résultat voisin de celui-ci :

La méthode statique DAC de la classe anaSig permet de convertir un signal numérique en


signal analogique. L’appliquer au signal numérique sn1 et constater visuellement la
non-correspondance avec le signal analogique sa1.
Sans modifier la période d’échantillonnage, échantillonner correctement le signal
analogique sa1 pour obtenir un signal sn2.

ÉD, JLC, TM (Arts & Métiers ParisTech) Utilisation d’une FFT V2.02 Mars 2022 6 / 11
Deuxième partie Transformée de F OURIER numérique

Partie 2 – Outils de transformation de F OURIER numérique

Rappel sur la transformée de F OURIER discrète


Pour toute liste de valeurs X = {x0 , x1 , · · · , xn−1 }, on définit sa tranformée de F OURIER
discrète comme la liste Y = {y0 , y1 , · · · , yn−1 } telle que :
n−1  
X jk
yj = xk exp −2 i π . (1)
n
k =0

Préambule – Les fonctions du module numpy.fft


Les outils de transformation de F OURIER rapide sont disponibles en Python dans le module
numpy.fft : http://docs.scipy.org/doc/numpy/reference/routines.fft.html.
Dans le shell Python :
importer les fonctions fft et rfft du module numpy.fft ;
créer le vecteur >>> I8=np.array([0,1,0,0,0,0,0,0]) ;
par >>> fft(I8) , on calcule numériquement sa transformée de F OURIER
discrète ; le résultat est-il conforme à la définition ci-dessus ?
que fait >>> rfft(I8) ? Dans quel cas est-il préférable d’utiliser rfft ?

ÉD, JLC, TM (Arts & Métiers ParisTech) Utilisation d’une FFT V2.02 Mars 2022 7 / 11
Deuxième partie Transformée de F OURIER numérique

Partie 2 – Transformation de F OURIER numérique


2.1 – Définition de la fonction TFdir
Dans un fichier signal_TD1.py, définir une fonction TFdir qui à tout signal numérique,
instance de la classe numSig, fait correspondre sa transformée de F OURIER numérique,
instance de la classe numFT décrite ci-dessous, conformément aux directives données
dans le support de cours (Amphi A, diapo 7).

classe numFT
« attribut » en lecture-écriture
+ df : float Pas de discrétisation en fréquences
+ label : string Étiquette de la T.F. numérique
« attributs » en lecture seule
+ values : vector of complexes Valeurs de la T.F. numérique
+ ASDValues : vector of floats Valeurs de la densité spectrale d’amplitude
+ phaseValues : vector of floats Valeurs du déphasage en radians
+ nf : integer Nombre de valeurs, nf=nt//2+1
+ nt : integer Nb val. du signal correspondant, nt=2*(nf-1)
+ frequencyValues : vector of floats Fréquences discrétisées
.............................................
« variable de classe » en lecture seule
+ instances : list of numFT Toutes les T.F. numériques créées
Méthodes publiques
+ numFT( values : complexes, df : float, label : string )
+ copy() : numFT

ÉD, JLC, TM (Arts & Métiers ParisTech) Utilisation d’une FFT V2.02 Mars 2022 8 / 11
Deuxième partie Transformée de F OURIER numérique

Partie 2 – Transformation de F OURIER numérique


2.1 – Définition de la fonction TFdir
La fonction TFdir donnera à la transformée de F OURIER numérique créée l’étiquette du
signal numérique précédée de "FT of ".
Dans le fichier signal_TD1.py, tester la fonction TFdir sur le signal numérique sn2 en
créant sa transformée de F OURIER numérique tfsn2.
Faire afficher la densité spectrale correspondante. On doit obtenir une figure ressemblant
à celle donnée ci-dessous. Vérifier aussi que les valeurs complexes de tfsn2 coïncident
bien avec la courbe de la transformée de F OURIER de sa1.
À quelle fréquence correspond le point le plus à droite ?
Expliquer la présence de deux pics sur les points de la densité spectrale.

ÉD, JLC, TM (Arts & Métiers ParisTech) Utilisation d’une FFT V2.02 Mars 2022 9 / 11
Deuxième partie Transformée de F OURIER numérique

Partie 2 – Transformation de F OURIER numérique


2.2 – Effet du prolongement de l’échantillonnage sur le spectre
Observer l’évolution de la densité spectrale du signal numérique lorsque le nombre de points
d’échantillonnage de sa1 est multiplié par 2, puis par 5, 10, 50.
Est-ce vraiment nécessaire d’échantillonner le signal analogique u pour trouver les points
supplémentaires ?
Comment se nomme la technique que nous sommes en train de mettre en œuvre ?

2.3 – Diminution de la fréquence d’échantillonnage


Créer les signaux numériques par échantillonnage du signal u à temps continu avec les
paramètres fournis dans le tableau ci-dessous.
Jeux de données nt Ts t0
Jeu n°1 512 0.0125 s −0.22
Jeu n°2 256 0.025 s −0.22
Jeu n°3 128 0.0333 s −0.22
Jeu n°4 128 0.05 s −0.22

Observer les densités spectrales de ces signaux échantillonnés.


Expliquer ce qui se passe au fur et à mesure que l’on augmente la période d’échantillon-
nage.

ÉD, JLC, TM (Arts & Métiers ParisTech) Utilisation d’une FFT V2.02 Mars 2022 10 / 11
Deuxième partie Transformée de F OURIER numérique

Partie 2 – Transformation de F OURIER numérique


2.4 – Autre signal à temps continu
Reprendre ce qui a été fait précédemment pour le signal analogique v :

( erf(2 + 5 t) + erf(2 − 5 t) ) cos(240 π t) si −1 < t < 1


v (t) = .
0 sinon

La fonction d’erreur erf sera importée du module scipy.special.


Jeux de données nt Ts t0 Critère de Nyquist-Shannon
Jeu n°1 1024 0.002 s −1.02 largement satisfait
Jeu n°2 512 0.004 s −1.02 juste satisfait
Jeu n°3 256 0.008 s −1.02 pas du tout satisfait

ÉD, JLC, TM (Arts & Métiers ParisTech) Utilisation d’une FFT V2.02 Mars 2022 11 / 11

Vous aimerez peut-être aussi