Par groupe
L’objectif de ce TP est d’étudier le filtre de Wien et sa fonction de transfert afin de la confronter à son expression théorique.
Le filtre de Wien sera réalisé avec les composants accessibles dans la salle de TP (voir Annexe B) de sorte que
Choisir des valeurs pour et .
Les composants utilisés en TP ont une incertitude-type de . Calculer l’incertitude sur la fréquence caractéristique .
Réaliser le filtre de Wien sur une platine d’essai.
Relier son entrée à un GBF et observer sa sortie sur un oscilloscope.
Vérifier rapidement et qualitativement que la nature du filtre et la fréquence caractéristique sont conformes aux attentes.
L’enseignant dérègle l’oscilloscope et le binôme le re-règle sans utiliser le bouton auto-scale.
Le binôme montre ensuite comment il estime la fréquence caractéristique en utilisant l’amplitude.
L’enseignant dérègle l’oscilloscope et le binôme le re-règle sans utiliser le bouton auto-scale.
Le binôme montre ensuite comment il estime la fréquence caractéristique en utilisant la phase.
Le diagramme de Bode (en gain et en phase) sera tracé après un relevé point par point réalisé à l’aide du GBF et de l’oscilloscope. Les tracés seront réalisés avec Python grâce à la bibliothèque pyplot, notamment la fonction semilogx de la bibliothèque matplotlib.pyplot qui fait le tracé avec les abscisses en échelle logarithmique (voir Annexe A).
Mesurer pour chaque point
On répartira les points pour des fréquences entre et en choisissant 5 points avant la fréquence caractéristique et 5 points après.
Les données seront rentrées directement dans des variables dans Python.
Tracer le diagramme de Bode en gain et en phase grâce à Python.
L’enseignant dérègle l’oscilloscope et le binôme le re-règle sans utiliser le bouton auto-scale.
Le binôme montre ensuite comment il mesure les grandeurs d’intérêt.
L’analyse manuelle du diagramme de Bode ne peut être faite qu’à partir des asymptotes. Dans ce TP, comme les données sont numérisées, on peut faire des traitements plus avancés et notamment un ajustement de la fonction de transfert théorique sur les données expérimentales.
Pour cela, il est nécessaire de définir en Python la fonction de Bode théorique du filtre de Wien.
Compléter le code suivant qui renvoie le gain en décibels du filtre de Wien.
def GdB(f, A, f0, Q):
# f : fréquence en Hz
# A : constante sans dimension
# f0 : fréquence caractéristique
# Q : facteur de qualité
return ...Pour vérifier l’adéquation entre les diagrammes de Bode théorique et expérimental, et pour déterminer les paramètres , et , on peut effectuer un ajustement (fit en anglais), c’est-à-dire chercher la courbe théorique passant au plus près des points expérimentaux.
On utilisera la fonction curve_fit de la bibliothèque scipy.optimize (voir Annexe A).
Écrire des instructions Python permettant d’effectuer l’ajustement de la fonction définie à l’application 3.
Les instructions devront afficher les valeurs des paramètres , et pour lesquelles la fonction de transfert théorique passe au plus près des points expérimentaux.
Pour savoir si l’ajustement est correct, il est d’usage de tracer sur le même graphique les points expérimentaux et la courbe théorique obtenue avec les paramètres optimaux.
Conclure sur la compatibilité ou non entre les valeurs attendues et les valeurs expérimentales nécessite une estimation des incertitudes.
Estimer l’incertitude relative sur la mesure du retard sur l’oscilloscope. On généralisera cette valeur à tous les points de mesure.
Estimer l’incertitude absolue sur la mesure de l’amplitude sur l’oscilloscope. On généralisera cette valeur à tous les points de mesure.
Il reste alors à propager cette incertitude sur la fréquence caractéristique , le facteur de qualité et sur . On utilisera pour cela la méthode de Monte-Carlo.
Il est maintenant possible de conclure sur l’adéquation des valeurs attendues aux valeurs mesurées pour , et .
Annexe A : Fonctions Python utiles dans ce TP
plt.clf1plt.clf()plt.plot1plt.plot(x, y)plt.plot(x, y, format: str)y en fonction de x ; format (ex. "r+", "g-") fixe couleur et styleplt.semilogx1plt.semilogx(x, y)plot, avec l’axe des abscisses en échelle logarithmiqueplt.xlabel1plt.xlabel(texte: str)plt.ylabel1plt.ylabel(texte: str)plt.title1plt.title(texte: str)plt.show1plt.show()curve_fit2curve_fit(f: fonction, xdata: array, ydata: array) -> tuplepopt, pcov = curve_fit(f: fonction, xdata: array, ydata: array, p0: list, bounds=(0, np.inf): tuple)f (dont le premier argument est l’abscisse) aux données ; popt : paramètres optimaux, p0 : estimation initiale des valeurs des paramètres (facultatif), bounds : bornes sur les paramètres (facultatif)np.pi3np.pi -> floatnp.linspace3x = np.linspace(début: float, fin: float, nombre_de_points: int) -> arraydébut et fin (bornes incluses)np.logspace3f = np.logspace(début: float, fin: float, nombre_de_points: int) -> arraylinspace, mais les points sont espacés logarithmiquement entre et np.random.normal3x = np.random.normal(moyenne: float, écart_type: float) -> floatx = np.random.normal(moyennes: array, écarts_types: array) -> arraymoyenne avec un écart-type écart_typeimport matplotlib.pyplot as plt2 from scipy.optimize import curve_fit3 import numpy as npAnnexe B : Composants disponibles dans la salle de TP
| | | | | | | | | | |