traitement du signal et logique (MPI) · Chapitre 2 · Application directe du cours
Calculer une TFD avec rfft : fréquences des cases, amplitudes, nombre entier de périodes
Électronique numérique : échantillonnage et filtrage · niveau 2
Énoncé
(MPI) Un accéléromètre fixé sur le carter d'une machine tournante délivre, après conditionnement, la tension
un décalage continu, la vibration à la fréquence de rotation et une composante due à un défaut d'engrènement. On l'échantillonne à . Spécification donnée : pour un tableau x de réels, numpy.fft.rfft(x) renvoie le tableau des complexes ; numpy.fft.rfftfreq(N, d) renvoie les fréquences associées.
- Écrire un programme qui calcule la TFD de échantillons et les amplitudes . Combien de valeurs
rfftrenvoie-t-elle ? À quelle fréquence correspond la case ? Jusqu'à quelle fréquence le spectre s'étend-il ? - Lire la valeur moyenne, les amplitudes et la phase de la composante à , et justifier les normalisations.
- On reprend le calcul avec (une puissance de , réflexe hérité des algorithmes de FFT). Que lit-on autour de ? Expliquer.
- Quelles valeurs de donnent une lecture exacte des deux raies ?
Corrigé
1. Le programme :
import numpy as np
fe = 1000.0
for N in (1000, 1024):
t = np.arange(N) / fe
x = 1.0 + 2.0*np.cos(2*np.pi*50*t) + 0.5*np.cos(2*np.pi*120*t + 0.7)
X = np.fft.rfft(x)
f = np.fft.rfftfreq(N, 1/fe)
A = 2*np.abs(X)/N
A[0] = np.abs(X[0])/N # case 0 : valeur moyenne
for k in np.argsort(A)[::-1][:5]:
print(N, f[k], round(A[k], 3), round(np.angle(X[k]), 3))
Pour , rfft renvoie valeurs ; la case est à la fréquence hertz, de à . La durée d'acquisition est et la résolution .
2. Le programme affiche , , , avec ; toutes les autres cases valent moins de (erreurs d'arrondi). La fenêtre d'une seconde contient exactement périodes de la vibration et périodes de la composante d'engrènement : chaque sinusoïde tombe sur une case. Écrite , une sinusoïde d'amplitude partage son poids entre la case et la case (non renvoyée par rfft) ; la somme sur les échantillons donne , d'où le facteur . La composante continue n'a pas de double : , d'où .
3. Avec , l'écart entre cases devient , et ne tombe plus sur une case. Le programme lit à (case ), soit de moins que la vraie amplitude, et des valeurs non nulles sur les cases voisines : à , à , puis et (figure). De même, est lu à , et la valeur moyenne . C'est la fuite spectrale : la fenêtre de contient périodes du ; la TFD, qui traite la fenêtre comme une période, voit un signal périodisé présentant un raccord brutal, dont le spectre s'étale. L'erreur sur la case la plus proche se prévoit (résultat admis) : pour un décalage de case, l'amplitude lue est multipliée par , soit .
4. Pour une lecture exacte, la fenêtre doit contenir un nombre entier de périodes de chaque composante : et entiers, soit multiple de , et multiple de . Quand les fréquences ne sont pas connues d'avance, on allonge l'acquisition (la fuite reste, mais les cases se resserrent) ; un « rond » pour l'algorithme n'a aucune raison d'être rond pour le signal.
Ce que l'exercice installe : la case est à ; on lit pour la moyenne et pour une amplitude ; ces lectures ne sont exactes que si la fenêtre contient un nombre entier de périodes, faute de quoi la raie fuit sur les cases voisines.
100 % gratuit
La suite du chapitre est sur Adloun
- 16 autres exercices corrigés dans ce chapitre, et 13 à chercher avec le tuteur
- Les 2 QCM du chapitre, le premier sans compte
- Le podcast et la vidéo du chapitre et la correction filmée du TD : 2 minutes sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
Sans compte : le cours, le premier QCM et 2 minutes de podcast et de vidéo. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.