Besoin d'aide pour tracer plusieurs graphiques

Fermé
Lerazo - Modifié le 18 janv. 2023 à 18:28
mamiemando Messages postés 33093 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 4 mai 2024 - 18 janv. 2023 à 18:36

Bonjour,

Je cherche à avoir une solution pour faire des affichages graphiques d'un sinusoïdal à différente échelle.

Lorsque j'exécute mon programme comme vous pouvez voir sur l'image j'ai une bonne sinusoïdale mais celle-ci disparaît dès le 2ème graphique.

Je sais qu'il faut agrandir le zoom pour pouvoir mieux le visualiser mais je cherche justement une relation de proportionnalité.

Pouvez-vous m'aider ?

import numpy as np
import matplotlib.pyplot as plt
import sounddevice as sd


frequence = [20, 2240, 4460, 6680, 8900, 11120, 13340, 15560, 17780, 20000]
durée = 2
A = 1 #amplitude
fe = 44100
xmax = 0.2

#Tracé du signal 
fig, ax = plt.subplots(10, 1, figsize = (25, 25))

for i in range(len(frequence)) :
    pulsation = 2*np.pi* frequence[i]
    temps = np.arange(0, durée, 1/fe)
    sinus = A*np.sin(pulsation*temps)

    #affichage et délimitation
    ax[i].plot(temps ,sinus)
    ax[i].set_xlim([0,xmax])

    xmax = xmax/2


    #insertion des titres 
    ax[i].set_title(("Emission d'un signal sinusoïdal à", frequence[i], "Hz"))
    ax[i].set_ylabel("Amplitude")
    ax[i].set_xlabel("Temps (en seconde)")

    ax[i].grid()

plt.tight_layout()

plt.show()


Windows / Opera 93.0.0.0

2 réponses

yg_be Messages postés 22770 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 8 mai 2024 1 481
18 janv. 2023 à 16:35

bonjour,

je ne vois rien de disparu dans le deuxième graphique.

qu'appelles-tu une relation de proportionnalité?  qu'as-tu essayé?

0
mamiemando Messages postés 33093 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 4 mai 2024 7 752
Modifié le 18 janv. 2023 à 18:39

Bonjour,

J'ai l'impression que le problème est "pourquoi la qualité du tracé des 2e et 3e sinusoïdes est dégradé".

Deux explications possibles :

  • Le format d'image est non vectoriel (basé sur des pixels, comme pour png, bmp, jpg) et la résolution de l'image est trop faible pour que le rendu soit bon -- mais en l'occurrence, ça n'est pas le problème
  • Les points passés à pyplot sont trop espacés (pyplot ne fait que tracer des segments entre les points qu'on lui passe) -- et c'est dans le cas l'explication de ton problème

Le pas de temps à utiliser (actuellement, dans le code : 1/fe) dépend plus de la largeur de l'image (en pixels) que de la fréquence du signal tracé. Alors certes, si la fréquence du signal est faible, tu peux te contenter d'un pas de temps assez important, mais dès que la fréquence devient importante, il faut échantillonner plus de points.

Pour te convaincre de ce que je dis, tu peux remplacer :

temps = np.arange(0, durée, 0.00001)

par :

temps = np.arange(0, durée, 0.00001)

... et le tracé sera de meilleure qualité.

Si au contraire tu prends un pas de temps beaucoup plus faible, par exemple :

temps = np.arange(0, durée, 0.0001)

... tu verras apparaître le phénomène dont je te parle.

Ensuite, libre à toi de prendre un pas de temps multiple de fe si tu le souhaites, mais il faut que cette valeur soit de l'ordre de 0.00001 avec les paramètre actuels.

Bonne chance

0