# REPRÉSENTATION DES COURBES DE RÉSONANCE
import numpy as np
import matplotlib.pyplot as plt



# définition du module de la fonction de transfert d'un passe bande
# ex: circuit R, L, C aux bornes de R, résonance en vitesse d'un oscillateur
# mécanique...
# x=w/w0 pulsation dite 'réduite'
def H(x):
    return 1/(1+(Q*(x-1/x))**2)

x=np.linspace(1e-9,4,1000)

plt.figure(figsize=(15,7))

for Q in [0.5,1,2,10]:
        plt.plot(x,H(x),label='Q='+str(Q))
plt.legend()
plt.grid()
plt.title('Résonance type passe-bande, bande passante = w0/Q')
plt.xlabel('w/w0')
plt.ylabel('|H|')
plt.axhline(1/2**0.5,color='black',linestyle='--')
plt.text(-0.35,1/2**0.5,'1/√2')
plt.show()




# passe bas 2nd ordre, RLC aux bornes de C, résonance mécanique en ammplitude
# pour un oscillateur soumis à une force sinusoïdale
def H(x):
    return 1/((1-x**2)**2+(x/Q)**2)**0.5

x=np.linspace(1e-9,4,1000)

plt.figure(figsize=(15,7))

for Q in [0.3,1/2**0.5,2,5,10]:
        plt.plot(x,H(x),label='Q='+str(round(Q,3)))
plt.legend()
plt.grid()
plt.title('Résonance type passe-bas, H(w0)=Q.H0')
plt.xlabel('w/w0')
plt.ylabel('|H|')

plt.text(-0.35,1/2**0.5,'1/√2')
plt.show()


# passe haut 2nd ordre, RLC aux bornes de L, résonance mécanique en ammplitude
# pour un oscillateur ressort dont le point d'attache oscille.
def H(x):
    return 1/((1-1/x**2)**2+(1/(Q*x))**2)**0.5

x=np.linspace(1e-9,4,1000)

plt.figure(figsize=(15,7))

for Q in [0.3,1/2**0.5,2,5,10]:
        plt.plot(x,H(x),label='Q='+str(round(Q,3)))
plt.legend()
plt.grid()
plt.title('Résonance type passe-haut, H(w0)=Q.H0')
plt.xlabel('w/w0')
plt.ylabel('|H|')

plt.text(-0.35,1/2**0.5,'1/√2')
plt.show()