🖥️ Démodulation par détection d’enveloppe

Notebook Capytale de cet exercice : 2a1c-11678449

On souhaite démoduler un signal modulé en amplitude 𝑒(𝑡)=𝐴0(1+𝑘𝑠(𝑡))cos(2𝜋𝑓𝑝𝑡). On utilise pour cela le montage ci-dessous, appelé détecteur d’enveloppe.

1/ Montrer que lorsque la diode est passante (c’est-à-dire qu’elle se comporte comme un fil) 𝑠(𝑡)=𝑒(𝑡).

Coup de pouce 1
Redessiner le schéma en remplaçant la diode par un fil.
Coup de pouce 2
Quelle est la différence de potentiel aux bornes d’un fil ?
Corrigé

Lorsque la diode est passante, elle se comporte comme un simple fil : le point d’entrée 𝑒(𝑡) et le nœud de sortie sont directement reliés, sans qu’aucune différence de potentiel n’apparaisse à ses bornes. On a donc directement

𝑠(𝑡)=𝑒(𝑡)

2/ Déterminer l’équation différentielle vérifiée par 𝑠(𝑡) lorsque la diode est bloquée (c’est-à-dire qu’elle se comporte comme un interrupteur ouvert).

Coup de pouce 1
Redessiner le schéma en remplaçant la diode par un interrupteur ouvert.
Coup de pouce 2
Introduire le courant passant dans le circuit.
Coup de pouce 3
En utilisant la relation entre tension et courant pour un condensateur et la loi d’Ohm, obtenir l’équation différentielle demandée.
Corrigé

Lorsque la diode est bloquée, elle se comporte comme un interrupteur ouvert : aucun courant 𝑖 ne peut plus provenir de l’entrée 𝑒(𝑡). Le courant 𝑖=0 se répartit alors entre 𝑅 et 𝐶, en parallèle : 𝑖=𝑖1+𝑖2=0, donc 𝑖1=−𝑖2, soit

𝑠𝑅=−𝐶d𝑠d𝑡d𝑠d𝑡+𝑠𝑅𝐶=0

Le condensateur 𝐶, chargé lorsque la diode conduisait, se décharge alors dans 𝑅.

On utilise Python pour simuler l’évolution de 𝑠(𝑡) sur l’exemple d’un signal à transmettre sinusoïdal : 𝑒(𝑡)=𝐴0cos(𝜔𝑝𝑡)(1+𝑚cos(𝜔𝑠𝑡))

3/ Compléter le code ci-dessous pour tracer 𝑒(𝑡).

import numpy as np
import matplotlib.pyplot as plt
omega_p = 2*np.pi*200 # (rad/s) pulsation de la porteuse
omega_s = 2*np.pi*1.5 # (rad/s) pulsation du signal
A0 = 2 # (V) amplitude du signal
m = 0.7 # taux de modulation

t = np.linspace(0,1,2000) # temps (s)
e = ... # signal modulé en amplitude

plt.clf() #effacement de précédents tracés
plt.plot(t, e, label="signal modulé")
plt.legend()
plt.show()
Coup de pouce 1
La fonction cos de la bibliothèque numpy accepte en argument un tableau de valeurs et renvoie un tableau de valeurs cosinus correspondantes.
Corrigé
import numpy as np
import matplotlib.pyplot as plt
omega_p = 2*np.pi*200 # pulsation de la porteuse
omega_s = 2*np.pi*1.5 # pulsation du signal
A0 = 2 # (V) amplitude du signal
m = 0.7 # taux de modulation

t = np.linspace(0,1,2000) # temps (s)
e = A0 * np.cos(omega_p*t) * (1+m*np.cos(omega_s*t)) # signal modulé en amplitude

plt.clf() #effacement de précédents tracés
plt.plot(t, e, label="signal modulé")
plt.xlabel("temps (s)")
plt.ylabel("tension (V)")
plt.legend()
plt.show()

Pour résoudre numériquement l’équation différentielle obtenue précédemment, on utilise la méthode d’Euler.

4/ Montrer que l’équation différentielle mène, une fois discrétisée, à la relation de récurrence

𝑠𝑖=(1−Δ𝑡𝑅𝐶)𝑠𝑖−1

où Δ𝑡 est le pas de temps et 𝑠𝑖=𝑠(𝑖×Δ𝑡).

Coup de pouce 1
La relation de Taylor d’ordre 1 permet d’écrire 𝑠(𝑡+Δ𝑡)≈𝑠(𝑡)+Δ𝑡d𝑠d𝑡.
Corrigé

La relation de Taylor d’ordre 1 permet d’écrire

𝑠(𝑡+Δ𝑡)≈𝑠(𝑡)+Δ𝑡d𝑠d𝑡

c’est-à-dire

𝑠𝑖+1≈𝑠𝑖+Δ𝑡d𝑠d𝑡

En remplaçant d𝑠d𝑡 par l’équation différentielle obtenue précédemment, on obtient

𝑠𝑖+1≈𝑠𝑖−Δ𝑡𝑅𝐶𝑠𝑖=(1−Δ𝑡𝑅𝐶)𝑠𝑖

En effectuant le changement d’indice 𝑖→𝑖−1, on obtient la relation demandée

𝑠𝑖=(1−Δ𝑡𝑅𝐶)𝑠𝑖−1

5/ Compléter le code ci-dessous pour simuler l’évolution de 𝑠(𝑡).

Dt = ... # pas de temps (s)
R = 40e3 # (Ohm) résistance
C = 1e-6 # (F) capacité

s = np.zeros(len(t)) # initialisation
for i in range(1,len(t)):
    s[i] = ... # méthode d'Euler
    if s[i] < e[i]: # si e dépasse s, la diode devient passante
        ...
Coup de pouce 1
Le pas de temps peut être calculé à partir du tableau des temps t.
Coup de pouce 2
Que vaut 𝑠 lorsque la diode est passante ?
Corrigé
Dt = t[1] - t[0] # pas de temps (s)
R = 40e3 # (Ohm) résistance
C = 1e-6 # (F) capacité

s = np.zeros(len(t)) # initialisation
for i in range(1,len(t)):
    s[i] = (1- Dt/(R*C)) * s[i-1] # méthode d'Euler
    if s[i] < e[i]: # si e dépasse s, la diode devient passante
        s[i] = e[i]

6/ Écrire les instructions permettant de tracer 𝑠 et 𝑒 sur le même graphique.

Coup de pouce 1
On peut s’inspirer du code de la question 3.
Corrigé
plt.clf()
plt.plot(t,e, label="signal modulé")
plt.plot(t,s, label="signal démodulé")
plt.xlabel("temps (s)")
plt.ylabel("tension (V)")
plt.legend()
plt.show()

En fonctions de valeurs de 𝑚, le signal démodulé peut être plus ou moins fidèle au signal à transmettre.

7/ En modifiant les valeurs de 𝑚 dans le programme, dans quelle plage de valeurs le signal démodulé 𝑠(𝑡) suit-il correctement l’enveloppe du signal modulé 𝑒(𝑡) ?

Coup de pouce 1
Pour 𝑚=0.8, le signal est-il correctement démodulé ? Même question pour 𝑚=1.2.
Corrigé
Pour que le signal démodulé 𝑠(𝑡) suive correctement l’enveloppe du signal modulé 𝑒(𝑡), il faut que le taux de modulation 𝑚 soit inférieur à 1.

8/ Quelles conditions doit vérifier le produit 𝑅𝐶 pour que le signal démodulé 𝑠(𝑡) suive correctement l’enveloppe du signal modulé 𝑒(𝑡) ?

Coup de pouce 1
𝑅𝐶 est le temps caractéristique auquel la tension 𝑠 tend vers 0.
Coup de pouce 2
Que se passe-t-il si 𝑅𝐶 est très petit ? A quoi faut-il le comparer ?
Coup de pouce 3
Que se passe-t-il si 𝑅𝐶 est très grand ? A quoi faut-il le comparer ?
Corrigé

Pour que le signal démodulé 𝑠(𝑡) suive correctement l’enveloppe du signal modulé 𝑒(𝑡), il faut que le produit 𝑅𝐶 soit grand devant la période de la porteuse et petit devant la période du signal à transmettre.

2𝜋𝜔𝑠≫𝑅𝐶≫2𝜋𝜔𝑝

c’est-à-dire

𝜔𝑠≪2𝜋𝑅𝐶≪𝜔𝑝