Superposition de deux ondes sinusoïdales de même fréquence¶

Objectif
Représenter, à l’aide d’un langage de programmation, la somme de deux signaux sinusoïdaux périodiques synchrones en faisant varier la phase à l’origine de l’un des deux. Cas particulier des ondes lumineuses.

Q1. Représentation d'une onde progressive sinusoïdale au cours du temps¶

  • Faire varier l’amplitude A et la phase à l’origine φ. Comparer les variations de l’élongation avec l'élongation de référence.
  • Compléter le titre de la courbe et les étiquettes des axes.
In [1]:
### Import des librairies utiles
from matplotlib import pyplot as plt
from math import pi
import numpy as np
plt.rcParams['figure.figsize'] = [9,5]

### Initialisations
t=np.linspace(0,4,400) # Définition du tableau des dates en ms 400 dates entre 0 et 4 ms
T=1    # Période commune en ms

### Variables à modifier
# Élongation maximale en m − Tester 0.25E-2, 0.5E-2, ... ⩽ 1.5E-2
A=1.0E-2
# Phase φ à l'origine − Tester −π, −π/2, 0, π/2, π, k×π ...
phi=-pi/4

### Définition de l'élongation
y=A*np.cos(2*pi*t/T + phi)

############ Ne pas éditer #############
##### Signal de référence et tracé #####
y0=1.5E-2*np.cos(2*pi*t/T)
plt.plot(t,y0,"r:",label='Référence : $0.015×\cos({2\pi}\dfrac{t}{T}+0)$')
########################################

### Courbes

# Tracé des points
plt.plot(t,y,label=r'$A\cos({2\pi}\dfrac{t}{T}+\varphi)$')

# Étiquettes impératives
plt.title("Influence de l'amplitude et/ou de la phase à l'origine\nsur un onde progressive sinusoïdale")
plt.xlabel("t (ms)")
plt.ylabel("y(t) (m)")

# Limites des axes (min,max)
plt.xlim(0,4)
plt.ylim(-1.6E-2,1.6E-2) # Fixe pour observer l'influence de la valeur de A

# Grille et légende
plt.grid()
plt.legend(bbox_to_anchor=(1, 0.5), loc="lower left")
# Place le coin lower left de la légende aux positions 1, 0.5 de la boite de tracé

# Affichage
plt.show()

Q2. Somme des élongations de deux ondes sinusoïdales en un même point au cours du temps¶

  • Compléter le code pour afficher la somme des élongations y1(t) et y2(t).

  • Étudier l'influence de la phase à l'origine de y2(t) sur la somme des deux ondes, pour des valeurs de φ2 comprises entre −π et π.

  • Étudier l'influence des amplitudes A1 et A2 sur la somme lorsque φ2 vaut 0, π/2 et kπ avec k∈ℤ.

  • Compléter le titre de la courbe et les étiquettes des axes.

  • Quelles sont les meilleures valeurs pour un casque antibruit ?

In [2]:
### Import des librairies utiles
from matplotlib import pyplot as plt
from math import pi
import numpy as np
plt.rcParams['figure.figsize'] = [9,5]

### Initialisations
t=np.linspace(0,4,400) # Définition du tableau des dates en ms 400 dates entre 0 et 4 ms
T=1    # Période en ms

### Variables à modifier
# Élongation maximale de y1 en mètres ⩽ 1.5E-2
A1=1.5E-2
# Élongation maximale en mètres de y2 ⩽ 1.5E-2
A2=1.5E-2
# Phase φ à l'origine de y2 − Tester 0, π/2, π/4, π, k×π
phi2=2*pi

### Définition des élongations
y1=A1*np.cos(2*pi*t/T)
y2=A2*np.cos(2*pi*t/T + phi2)
y3=y1+y2

### Courbes

# Tracé des point
plt.plot(t,y1,":",label=r'$A_{1}\cos({2\pi}\dfrac{t}{T}+0)$')
plt.plot(t,y2,"--",label=r'$A_{2}\cos({2\pi}\dfrac{t}{T}+\varphi_{2})$')
plt.plot(t,y3,label=r'$A_{1}\cos({2\pi}\dfrac{t}{T})+A_{2}\cos({2\pi}\dfrac{t}{T}+\varphi_{2})$')

# Étiquettes impératives
plt.title("Somme en un point de deux ondes sinusoïdales synchrones")
plt.xlabel("t (ms)")
plt.ylabel("y(t) (m)")

# Limites des axes (min,max)
plt.xlim(0,4)
plt.ylim(-3.1E-2,3.1E-2) # Fixe pour observer l'influence la valeur de A

# Grille et légende
plt.grid()
plt.legend(bbox_to_anchor=(1, 0.5), loc="lower left")

# Affichage
plt.show()

Q3. Intensité lumineuse de la superposition de deux ondes lumineuses¶

  • Compléter le code pour afficher le carré de la somme des grandeurs lumineuses.

  • Étudier l'influence de la phase à l'origine de a2(t), sur l'intensité lumineuse reçue, pour des valeurs de φ2 comprises entre −π et π.

  • Étudier l'influence des amplitudes A1 et A2 sur l'intensité lumineuse lorsque φ2 vaut 0, π/2 et k×π avec k∈ℤ.

  • Compléter le titre de la courbe et les étiquettes des axes.

In [3]:
### Import des librairies utiles
from matplotlib import pyplot as plt
from math import pi
import numpy as np
plt.rcParams['figure.figsize'] = [9,5]


### Initialisations
t=np.linspace(0,4,400) # Définition du tableau des dates en ms 400 dates entre 0 et 4 ms
T=1    # Période en ms

### Variables à modifier
# Grandeur lumineuse maximale de a1 ⩽ 1.5
A1=1.5
# Grandeur lumineuse maximale de a2 ⩽ 1.5
A2=1.4
# La phase φ à l'origine de a2
phi2=pi/4

### Définition des grandeurs lumineuses
a1=A1*np.cos(2*pi*t/T)
a2=A2*np.cos(2*pi*t/T+phi2)
### Carré de la somme
a3=(a1+a2)*(a1+a2)

### Intensité lumineuse
# Valeur max de a3
max=np.max(a3)
# La valeur moyenne de cos² est 1/2
intensite=max/2
# Affichage
print("L'intensité lumineuse reçue vaut", np.round(intensite,2), "W/m²")

### Courbes
# Tracé des point
plt.plot(t,a1,"--",label='Grandeur lumineuse 1')
plt.plot(t,a2,":",label='Grandeur lumineuse 2')
plt.plot(t,a3,label='Carré de la somme des grandeurs lumineuses')
# Étiquettes impératives
plt.title("Somme de deux ondes lumineuses monochromatiques synchrones")
plt.xlabel("t (ms)")
plt.ylabel("a(t) & a²(t)")
# Limites des axes (min,max)
plt.xlim(0,4)
plt.ylim(-1.6,9.1) # Fixe pour observer l'influence la valeur de A
# Grille et légende
plt.grid()
plt.legend(bbox_to_anchor=(1, 0.5), loc="lower left")
# Affichage
plt.show()
L'intensité lumineuse reçue vaut 3.59 W/m²

Q4. Amplitude de la somme des élongations en fonction de φ2¶

  • Plutôt que de tatônner en testant différentes valeurs de φ2, on trace l'amplitude en fonction de φ2, pour repérer les valeurs de φ2 où l'amplitude s'annule.

  • On compare les résultats avec ceux d'une formule mathématique issue des calculs sur les interférences dans le cas de la cuve à ondes.

  • Comme φ1 est toujours nul, c'est donc en S1 qu'on calcule la somme. Tout se passe comme si on considérait des point M (c'est à dire S1) de plus en plus éloignés de S2. En terme d'interférences, la différence de marche est donc la distance S1S2.

In [4]:
### Import des librairies utiles
from matplotlib import pyplot as plt
from math import pi
import numpy as np
plt.rcParams['figure.figsize'] = [9,10]

### Initialisations
t=np.linspace(0,1,100) # Définition du tableau des dates en ms 100 dates entre 0 et 1 ms
T=1    # Période en ms

### Valeurs
# Valeur utile uniquement pour la comparaison avec l'expression mathématique
A=2
# Déclaration des listes
amplitude_fonction_de_phi, phase, amplitude_via_expression_math = [], [], []

# Renvoie l'élongation max de la somme en fonction de φ
# par calcul de toutes les sommes sur une période
# et conservation de la plus grande
def elogation_max(p) :
    y1=A*np.cos(2*pi*t/T) # Toutes les valeurs de y1 sur une période vu que t=np.linspace(0,1,100)
    y2=A*np.cos(2*pi*t/T + p) # Idem pour y2
    y3=y1+y2 # Idem pour y3
    return np.max(y3) # La valeur maximale de y3 est l'amplitude de l'onde résultante

# Balaye de -2π à 2π
for i in range(-628,628,10) :
     # φ vaut i/100 car i doit être entier
    phase.append(i/100)
    # L'amplitude courante est déterminée grâce à la fonction elogation_max pour phi courant
    amplitude_courante=elogation_max(i/100)
    # Complète la liste des amplitudes numériques
    amplitude_fonction_de_phi.append(amplitude_courante)
    # Calcule une amplitude mathématique
    amplitude_via_expression_math.append(2*A*np.cos(i/200))

# Tracé des amplitudes
plt.subplot(211)
plt.xlim(-6.3,6.3)
plt.ylim(-4.1,4.1)
plt.plot(phase, amplitude_fonction_de_phi, 'b-', linewidth=0.5, label='Amplitude en fonction de '+r'$\varphi_{2}$'+' par calcul numérique.\nLes valeurs nulles indiquent l’immobilité.\nLes maxima indiquent une vibration, creux ou sommet.')
plt.legend(bbox_to_anchor=(0, 0.5), loc="upper left")

plt.subplot(212)
plt.xlim(-6.3,6.3)
plt.ylim(-4.1,4.1)
plt.plot(phase, amplitude_via_expression_math, 'r-', linewidth=0.5, label='Amplitude en fonction de '+r'$\varphi_{2}$'+' via l’expression mathématique.\nLes valeurs négatives indiquent des creux.')
plt.legend(bbox_to_anchor=(0, 0.5), loc="upper left")

plt.savefig('Amplitudes.png')
plt.show()

Q5. Comme en Q4, mais dans le cas des ondes lumineuses¶

In [5]:
### Import des librairies utiles
from matplotlib import pyplot as plt
from math import pi
import numpy as np
plt.rcParams['figure.figsize'] = [9,10]

### Initialisations
t=np.linspace(0,1,100) # Définition du tableau des dates en ms 100 dates entre 0 et 1 ms
T=1    # Période en ms

### Valeurs
# Valeur utile uniquement pour la comparaison avec l'expression mathématique
A=2
# Déclaration des listes
intensite_fonction_de_phi, phase, intensite_via_expression_math = [], [], []

# Renvoie l'intensité en fonction de φ
# par calcul du carré de toutes de toutes les sommes sur une période
# et conservation de la plus grande
def intensite(p) :
    y1=A*np.cos(2*pi*t/T) # Toutes les valeurs de y1 sur une période vu que t=np.linspace(0,1,100)
    y2=A*np.cos(2*pi*t/T + p) # Idem pour y2
    y3=(y1+y2)*(y1+y2) # Idem pour y3 carré de y1+y2
    return np.max(y3)/2 # La moitié de valeur maximale de y3 est l'intensité lumineuse de l'onde résultante

# Balaye de -2π à 2π
for i in range(-628,628,10) :
    # φ vaut i/100 car i doit être entier
    phase.append(i/100)
    # L'intensité courante est déterminée grâce à la fonction intensite pour la valeur de φ courante
    intensite_courante=intensite(i/100)
    # Complète la liste des intensités calculées numériquement
    intensite_fonction_de_phi.append(intensite_courante)
    # Intensité calculée mathématiquement
    intensite_via_expression_math.append(A*A*(1+np.cos(i/100)))

# Tracé des intensités
plt.subplot(211)
plt.plot(phase, intensite_fonction_de_phi, 'b-', linewidth=0.5, label="Intensité en fonction de "+r'$\varphi_{2}$'+" par calcul numérique")
plt.legend(bbox_to_anchor=(0, 0.25), loc="upper left")

plt.subplot(212)
plt.plot(phase, intensite_via_expression_math, 'r-', linewidth=0.5, label="Intensité en fonction de "+r'$\varphi_{2}$'+" via l’expression mathématique")
plt.legend(bbox_to_anchor=(0, 0.25), loc="upper left")

plt.savefig('Intensités.png')
plt.show()