Simulation fréquentielle

CODE

FONCTION

G,phi,w =control.bode_plot(A, dB=True)

Trace le diagramme de Bode de A.

NB : La phase est tracée à 2π près ☹

G,phi,w =control.bode_plot(A, dB=True, margins=True)

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°}\) .

G,phi,w =control.bode_plot(A, dB=True, omega_limits=(0.1, 1000))

Précise les limites des valeurs des pulsations (alors que dans les cas précédents, elles sont déterminées automatiquement).

G,phi,w= control.freqresp(A,[0.5,8])

G = G[0][0]

phi = phi[0][0]

print("Gain :", G)

print("Gain en décibel :",20*np.log10(G))

print("Phase en degré :",phi*180/np.pi)

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)