Simulation fréquentielle
CODE | FONCTION |
---|---|
| Trace le diagramme de Bode de A. NB : La phase est tracée à 2π près ☹ |
| Fonction utile pour les étudiants de 2ème année. Trace les marges sur le diagramme de Bode de A, et donne les valeurs de marge, \(\omega_{0dB}\) et \(\omega_{-180°}\) . |
| Précise les limites des valeurs des pulsations (alors que dans les cas précédents, elles sont déterminées automatiquement). |
| Calcule le gain (non dB) et la phase (en rad) pour des valeurs de pulsations données. Ici, dans l'exemple : 0,5 et 8 rad/s NB : La phase est calculée à 2π près. |
Fonction pour remettre les valeurs de la phase comme en TD (et non pas à 2π près).
## Définition de la fonction
def phase_debug(phi): # phase en radians
# phi doit être un tableau de valeurs
n=0
for i in range(1, len(phi)):
if (phi[i] - phi[i-1] +2*n*pi) > 3 : n = n - 1
if (phi[i] - phi[i-1] +2*n*pi) < -3: n = n + 1
phi[i] = phi[i] + 2*n * pi
return phi
Fonction pour déterminer la pulsation de coupure à -3dB d'une fonction passe-bas.
## Définition de la fonction pulsation de coupure à -3dB
def wc3dB(H):
import scipy, numpy as np
G,phi,w= control.freqresp(H,[0.0000000001])
G0 = G[0][0][0]
G0dB=np.log10(G0)
w = np.logspace(-5, 5, 501) # tableau des w équireparties en log
G, phi, w = control.freqresp(H,w)
f = scipy.interpolate.interp1d(w, G-0.7*G0) # création d'une fonction à partir de points
sol=scipy.optimize.root_scalar(f, bracket=(0.1, 1000)) # recherche d'un zéro en mettant des bornes
b=sol.root
return print("wc-3dB =",format(b, '.2g'),"rad/s et G0 =",format(G0dB, '.2g'),"dB ou",format(G0, '.2g'),"(non dB)")
Exemple d'utilisation de cette fonction :
F=control.tf([1],[83,5.5,1])
wc3dB(F)