Le bruit thermique, ou bruit de Johnson-Nyquist, est un phénomène physique qui se manifeste par des fluctuations aléatoires des grandeurs électriques dans un conducteur en raison de l’agitation des porteurs de charge (électrons).
Pour le modéliser, on s’intéresse à des électrons dans un conducteur soumis à un champ électrique . On suppose que les électrons se déplacent dans la seule direction .
1/ Que représente ?
2/ En l’absence de choc, écrire l’équation différentielle vérifiée par la vitesse de l’électron.
La loi de la quantité de mouvement donne , d’où
3/ On souhaite simuler l’évolution de la vitesse de l’électron grâce à la méthode d’Euler. Compléter le code suivant qui calcule la vitesse de l’électron au cours du temps en l’absence de choc.
import numpy as np
N = 1000 # nombre de pas de temps
E = 100 # champ électrique en V/m
e = ... # charge de l'électron en C
m = ... # masse de l'électron en kg
l = 1e-2 # longueur du conducteur en m
T = 1e-12 # temps total de la simulation en s
dt = ... # pas de temps en s
t = ... # array numpy contenant tous les temps de la simulation
def V():
v = ... # initialisation du array des vitesses par des vitesses nulles
for i in range(N-1):
v[i+1] = ... # calcul de la vitesse à l'instant t[i+1] en fonction de la vitesse à
# l'instant t[i] grâce à la méthode d'Euler
return vnp.linspace(a, b, N) crée un array numpy de N valeurs régulièrement espacées entre a et b. On peut s’en servir pour créer le array t.np.zeros(N) crée un array numpy de N valeurs nulles. On peut s’en servir pour initialiser le array des vitesses.v[i+1] et v[i].import numpy as np
N = 1000 # nombre de pas de temps
E = 100 # champ électrique en V/m
e = 1.6e-19 # charge de l'électron en C
m = 9.11e-31 # masse de l'électron en kg
l = 1e-2 # longueur du conducteur en m
T = 1e-12 # temps total de la simulation en s
dt = T / N # pas de temps en s
t = np.linspace(0, T, N) # array numpy contenant tous les temps de la simulation
def V():
v = np.zeros(N) # initialisation du array des vitesses par des vitesses nulles
for i in range(N-1):
v[i+1] = v[i] + (-e * E / m) * dt # calcul de la vitesse à l'instant t[i+1] en fonction de la vitesse à
# l'instant t[i] grâce à la méthode d'Euler
return vEntre et , l’électron a une probabilité de subir une collision. Lors d’une collision, l’électron repart avec une vitesse aléatoire suivant une distribution gaussienne de moyenne nulle et d’écart-type .
4/ On modifie la fonction V() définie précédemment pour prendre en compte les collisions :
from random import random, gauss
tau = 1e-14 # temps moyen entre deux collisions en s
v0 = 1 # écart-type de la distribution des vitesses après choc en m/s
def V():
v = ... # initialisation du array des vitesses par des vitesses nulles
for i in range(N-1):
if random() < dt/tau: # l'électron subit une collision
v[i+1] = gauss(0, v0) # l'électron subit une collision et repart avec une vitesse aléatoire de
# moyenne nulle et d'écart-type v0
else: # l'électron ne subit pas de collision
v[i+1] = ... # calcul de la vitesse à l'instant t[i+1] en fonction de la vitesse à
# l'instant t[i] grâce à la méthode d'Euler
return vSachant que la fonction random() renvoie un nombre aléatoire uniformément distribué entre 0 et 1, expliquer la ligne 9.
random() < dt/tau: renvoie True ?random() < dt/tau: soit vraie est égale à , ce qui correspond à la probabilité que l’électron subisse une collision entre et .5/ Justifier que le courant traversant le conducteur s’exprime comme
Si on considère un seul électron, sa “densité particulaire” est
6/ Compléter le code précédent pour qu’il simule le courant traversant le conducteur en fonction du temps pour électrons. Tracer le graphe .
import matplotlib.pyplot as plt
Ne = 1000 # nombre d'électrons
I = np.zeros(N) # initialisation du array des courants par des courants nuls
for j in range(Ne):
v = V() # calcul de la vitesse de l'électron j
I += ... # ajout de la contribution de l'électron j au courant total
import matplotlib.pyplot as plt
Ne = 1000 # nombre d'électrons
I = np.zeros(N) # initialisation du array des courants par des courants nuls
for j in range(Ne):
v = V() # calcul de la vitesse de l'électron j
I += -e/l * v # ajout de la contribution de l'électron j au courant total
plt.plot(t, I)
plt.xlabel("Temps (s)")
plt.ylabel("Courant (A)")
plt.title("Courant traversant le conducteur en fonction du temps")
plt.show()7/ Graphiquement, estimer un ordre de grandeur de la durée du régime transitoire.
Le coefficient de variation, aussi appelé écart-type relatif est défini par où est l’écart-type et la moyenne.
8/ Calculer le coefficient de variation du courant en régime permanent. L’écart-type peut être calculé avec np.std() et la moyenne avec np.mean().
i correspondant ?I[i:] renvoie un array numpy contenant les valeurs de I à partir de l’indice i jusqu’à la fin.i = int(3e-14 / dt) # indice correspondant à la fin du régime transitoire
CV = np.std(I[i:]) / np.mean(I[i:])
print("Coefficient de variation du courant en régime permanent :", CV)