Besoin d'aide pour tracer plusieurs graphiques

Lerazo -  
mamiemando Messages postés 33769 Date d'inscription   Statut Modérateur Dernière intervention   -

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

A voir également:

2 réponses

yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 

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 33769 Date d'inscription   Statut Modérateur Dernière intervention   7 879
 

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