🖥️ Bruit thermique ★★

Notebook Capytale de cet exercice : 3e74-11678458

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 𝜏 ?

Coup de pouce 1
Reprendre le cours sur le modèle de Drude.
Corrigé
𝜏 est le temps moyen entre deux collisions successives d’un électron dans le conducteur.

2/ En l’absence de choc, écrire l’équation différentielle vérifiée par la vitesse 𝑣(𝑡) de l’électron.

Coup de pouce 1
Une seule force agit sur l’électron entre deux collisions. Laquelle ?
Coup de pouce 2
Écrire la loi de la quantité de mouvement en l’absence de choc.
Corrigé

La loi de la quantité de mouvement donne 𝑚d𝑣d𝑡=−𝑒𝐸, d’où

d𝑣d𝑡=−𝑒𝐸𝑚

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.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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 v
Coup de pouce 1
La fonction np.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.
Coup de pouce 2
La fonction np.zeros(N) crée un array numpy de N valeurs nulles. On peut s’en servir pour initialiser le array des vitesses.
Coup de pouce 3
Utiliser la relation de Taylor pour exprimer 𝑣(𝑡+d𝑡) en fonction de 𝑣(𝑡) et d𝑣d𝑡. En déduire une relation entre v[i+1] et v[i].
Corrigé
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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 v

Entre 𝑡 et 𝑡+d𝑡, l’électron a une probabilité d𝑡𝜏 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 𝑣0.

4/ On modifie la fonction V() définie précédemment pour prendre en compte les collisions :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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 v

Sachant que la fonction random() renvoie un nombre aléatoire uniformément distribué entre 0 et 1, expliquer la ligne 9.

Coup de pouce 1
Quelle est la probabilité que l’instruction random() < dt/tau: renvoie True ?
Corrigé
La probabilité que l’instruction random() < dt/tau: soit vraie est égale à d𝑡𝜏, ce qui correspond à la probabilité que l’électron subisse une collision entre 𝑡 et 𝑡+d𝑡.

5/ Justifier que le courant traversant le conducteur s’exprime comme

𝐼(𝑡)=−𝑒𝑙∑𝑖électrons𝑣𝑖
Coup de pouce 1
Quel est le lien entre le vecteur densité de courant 𝑗⃗ et la vitesse 𝑣 d’un électron ?
Coup de pouce 2
À quelle densité particulaire 𝑛 correspond un seul électron dans un conducteur de longueur 𝑙 et de section 𝑆 ?
Corrigé

Si on considère un seul électron, sa “densité particulaire” est 𝑛=1𝑉=1𝑙𝑆

𝐼=𝑆∑𝑗=𝑆∑1𝑙𝑆(−𝑒)𝑣𝑖=−𝑒𝑙∑𝑣𝑖

6/ Compléter le code précédent pour qu’il simule le courant traversant le conducteur en fonction du temps pour 𝑁𝑒=1000 électrons. Tracer le graphe 𝐼(𝑡).

1
2
3
4
5
6
7
8
9
10
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
Corrigé
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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.

Corrigé
Le régime transitoire dure environ 3⋅10−14⁠ ⁠s.

Le coefficient de variation, aussi appelé écart-type relatif est défini par CV=𝜎𝜇 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().

Coup de pouce 1
Quel lien existe-t-il entre un instant 𝑡 et l’indice i correspondant ?
Coup de pouce 2
On peut utiliser le slicing : I[i:] renvoie un array numpy contenant les valeurs de I à partir de l’indice i jusqu’à la fin.
Corrigé
1
2
3
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)