Adloun

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 rfft renvoie-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

Exercice suivant et tuteur

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.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant et tuteur →