'''ETUDE D'UN FILTRE PASSE BAS D'ORDRE 2'''

from scipy.optimize import curve_fit
import numpy as np
import matplotlib.pyplot as plt

## Relevé des grandeurs expérimentales

# Saisie par l'étudiant des valeurs expérimentales du filtre d'ordre 2
F2=np.array([])
Us2=np.array([])
Ue2=np.array([])

#définition du gain
G2 = Us2/Ue2


## Détermination de la fréquence de coupure

#définition de la fonction reliant gain et fréquence pour un filtre passe bas d'ordre 2

def gain_passebas2(f, fC):
    """ fC : fréquence de coupure  """
    y = 1 / np.sqrt ((1-(0.37*f/fC)**2)**2+9*(0.37*f/fC)**2)
    return y


# ajustement de la loi théorique du filtre d'ordre 2 avec les points expérimentaux
popt, pcov = curve_fit(gain_passebas, F2, G2) #popt est un tableau contenant la liste des paramètres optimisés : ici fC uniquement ; pcov permet d'estimer l'incertitude sur popt
fc2 = popt[0]
print('fréquence de coupure =',fc2, "Hz")

G_fit = gain_passebas2(F2, fc2)

##superposition des courbes de gain expérimentale et théorique pour le filtre d'ordre 2'

plt.figure(1)
plt.plot(F2, G2, 'rx', label="gain expérimental ordre 2")
plt.plot(F2, G_fit, color="black", label="gain théorique filtre ordre 2")
plt.xlabel('fréquence')
plt.ylabel('Gain')
plt.legend()
plt.grid()
plt.show()
