Représentation d'une onde

Programme de première générale - Enseignement de spécialité - 2019

"Représenter un signal périodique et illustrer l’influence de ses caractéristiques (période, amplitude) sur sa représentation".

Principe

Tracer un signal sinusoïdal décrit par l'expression :

\[s(t) = A \times \cos(\dfrac{2\pi}{T}\cdot t)\]

Montrer l'influence de la période et de l'amplitude.

Exemple 1 : pour une amplitude et une période

Une simple représentation d'un signal sinusoïdal. Les valeurs des variables A (amplitude) et T (période) sont à modifier pour montrer leurs influences.

import numpy as np
import matplotlib.pyplot as plt
from math import pi

# DEFINTION DES CONSTANTES
A = 2     # Amplitude
T = 3     # Période (s)

# CALCULS
t = np.linspace(0, 10, 500)  # Tableau des valeurs du temps en seconde
s = A*np.cos(2*pi*t/T)       # Tableau des valeurs calculées du signal sinusoïdal

# COURBES
plt.plot(t, s)
plt.title("Evolution d'un signal périodique")
plt.xlabel("t (s)")
plt.ylabel("s")
plt.grid()
plt.savefig("premiere_signal_sinusoidal_1.png")
plt.show()
courbe

Exemple 2 : pour plusieurs amplitudes

Tracer plusieurs signaux sinusoïdaux pour des amplitudes différentes placée dans une liste à modifier !

import numpy as np
import matplotlib.pyplot as plt
from math import pi

# DEFINTION DES CONSTANTES
T = 3     # Période (s)

# CALCULS
t = np.linspace(0, 10, 500)  # Tableau des valeurs du temps en seconde

# COURBES
for A in [1, 2.2, 3.5, 5]:
   s = A*np.cos(2*pi*t/T)       # Tableau des valeurs calculées du signal sinusoïdal
   plt.plot(t, s, label="Amplitude A = " + str(A))

plt.legend()
plt.title("Evolution d'un signal périodique")
plt.xlabel("t (s)")
plt.ylabel("s")
plt.grid()
plt.show()
courbe

Exemple 3 : pour plusieurs périodes

Tracer plusieurs signaux sinusoïdaux pour des périodes différentes placée dans une liste à modifier !

import numpy as np
import matplotlib.pyplot as plt
from math import pi

# DEFINTION DES CONSTANTES
A = 2     # Amplitude

# CALCULS
t = np.linspace(0, 10, 500)  # Tableau des valeurs du temps en seconde

# COURBES
for T in [3, 5.2, 7.6]:
   s = A*np.cos(2*pi*t/T)       # Tableau des valeurs calculées du signal sinusoïdal
   plt.plot(t, s, label="Période T = " + str(T) + " s")

plt.legend()
plt.title("Evolution d'un signal périodique")
plt.xlabel("t (s)")
plt.ylabel("s")
plt.grid()
plt.show()
courbe

Exemple 4 : avec des curseurs

Modifier l'amplitude et/ou la période à l'aide de la souris avec des curseurs (sliders).

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.widgets import Slider # Curseur
from math import pi

# DEFINITION DES CONSTANTES
A = 4     # Amplitude initiale
T = 2     # Période initiale
dT = 0.1  # Pas de variation de la période

# CALCULS
t = np.linspace(0, 10, 1000)  # Tableau des valeurs du temps en seconde
s = A*np.cos(2*pi*t/T)        # Tableau des valeurs calculées du signal sinusoïdal

# COURBE
fig, ax = plt.subplots()          # Zone de dessin
plt.subplots_adjust( bottom=0.30) # Laisse une marge de 30% en bas de la zone de dessin pour placement des curseurs

trace, = plt.plot(t, s, lw=2)                 # Trace le signal s(t) et récupère le tracé
plt.title("Evolution d'un signal périodique") # Titre
plt.xlabel("t (s)")                           # Légende axe x
plt.ylabel("s")                               # Légende axe y
plt.grid()                                    # Affiche la grille


# AJOUT DES CURSEURS
ax_periode = plt.axes([0.25, 0.1, 0.65, 0.03], facecolor='lightgoldenrodyellow') # Zone de placement du curseur période
ax_amp = plt.axes([0.25, 0.15, 0.65, 0.03], facecolor='lightgoldenrodyellow')    # Zone de placement du curseur amplitude
s_periode = Slider(ax_periode, 'Période (s)', 0.5, 10.0, valinit=T, valstep=dT)  # Paramétrage du curseur période
s_amp = Slider(ax_amp, 'Amplitude', 0.1, 5, valinit=A)                           # Paramétrage du curseur amplitude

def update(val):
   """ Fonction d'actulisation de la courbe """
   A = s_amp.val        # Récupération de la nouvelle amplitude
   T = s_periode.val    # Récupération de la nouvelle période
   trace.set_ydata(A*np.cos(2*pi*t/T))   # Calcul du nouveau signal
   fig.canvas.draw_idle()                # Dessine la nouvelle courbe

s_periode.on_changed(update)   # Lance la fonction update(val) si le curseur période change !
s_amp.on_changed(update)       # Lance la fonction update(val) si le curseur amplitude change !

plt.show()
courbe