Analyse d'un Circuit de Premier Ordre
Dans ce tutorial, nous allons réaliser une analyse complète d'un circuit de premier ordre (RC_LP). Le circuit considéré est le suivant :
Analyse Théorique
Fonction de Transfert
La fonction de transfert du circuit s'obtient en utilisant le pont diviseur de tension. En notant
Nous en déduisons que la fonction de transfert du système est égal à
Réponse Indicielle
Le système peut être décrit dans le domaine temporelle par l'équation suivante :
Nous allons nous intéresser à la sortie lorsque l'entrée est un échelon d'amplitude E
La sortie du système est supposée initialement nulle c-a-d
Expression de la solution complète
- Détermination des racines de l'équation caractéristique :
- Détermination du régime Libre :
- Détermination du Régime Forcé : Lorsque l'entrée est un échelon d'amplitude E, le regime permanent s'exprime sous la forme
. La valeur de s'obtient en injectant l'expression du regime permanent dans l'équation différentielle. Pour , nous obtenons :
- Détermination de la Solution Complète: Pour
, nous obtenons finalement
- Exploitation des conditions initiales. La détermination de la constante d'intégration peut s'obtenir en déterminant la valeur de
en . Il est possible de démontrer que , ce qui implique que :
Pour
Valeurs Remarquables
- Valeur initiale:
, - Valeur finale:
, - Valeur maximale:
, - Valeur en
, , - Valeur en
, .
Réponse Fréquentielle
Expression
La réponse fréquentielle s'obtient en évaluant la fonction de transfert en
- Module :
- Argument :
Valeurs Remarquables
- Basse-Fréquence : Lorsque
,
- Pulsation de coupure : Lorsque
,
- Asymptotes Haute-Fréquences :
Simulation Python
Code
import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import lti
class LTI_analysis():
def lti(self):
raise NotImplementedError("Subclasses must implement this method")
def step(self, T=None):
"""
Computes and plots the step response of the system (response to a unit step input).
Arguments:
T : time array (optional). If not specified, the time array is automatically generated.
"""
H = self.lti()
t, s = H.step(T=T)
plt.figure("Time Response")
plt.plot(t, s)
plt.grid()
plt.xlabel('time [s]')
plt.ylabel('step response')
return t, s
def freqresp(self, w=None):
"""
Computes and plots the frequency response of the system.
Arguments:
w : frequency array (in rad/s). If not specified, frequencies are automatically generated.
"""
H = self.lti()
w, Hjw = H.freqresp(w=w)
fig, axs = plt.subplots(2, 1)
fig.suptitle("Bode Diagram")
axs[0].loglog(w, np.abs(Hjw))
axs[0].set_xlabel("$\omega$ [rad/s]")
axs[0].set_ylabel("Module")
axs[0].grid()
axs[1].semilogx(w, 180*np.angle(Hjw)/np.pi)
axs[1].set_xlabel("$\omega$ [rad/s]")
axs[1].set_ylabel("Argument [deg]")
axs[1].grid()
return w, Hjw
class RC_LP_1st_order(LTI_analysis):
"""
Class representing a first-order RC low-pass filter.
This filter is modeled by a linear time-invariant (LTI) system.
"""
def __init__(self, R=10**3, C=10**-9):
"""
Initializes the class with a resistance R (in ohms) and a capacitance C (in farads).
"""
self.R = R
self.C = C
def lti(self):
"""
Creates a linear time-invariant (LTI) model for the RC circuit.
"""
tau = self.R*self.C
return lti([1], [tau, 1])
if __name__ == "__main__":
filter = RC_LP_1st_order(R=10**4, C=10**-9)
filter.step()
filter.freqresp()
plt.show()Courbes


