Diagramme de Bode Compétence visée : Utilisation de quelques fonctions d’une bibliothèque et de leur documentation en ligne. Le but de ce TP est d’étudier les bibliothèques python permettant de tracer des graphiques. Introduction : matplotlib.pyplot La bibliothèque matplotlib.pyplot permet de tracer des graphiques mathématiques. Programme permettant de tracer un segment : # On importe les bibliothèques from matplotlib.pyplot import * xA=0 xB=1 yA=0 yB=1 # On trace le segment AB plot([xA,xB],[yA,yB]) #On montre le graphique show() Programme permettant de représenter graphiquement une fonction : # On importe les bibliothèques from matplotlib.pyplot import * from numpy import * # On définit la fonction que l’on souhaite tracer def fonction_1(x): """ fonction_1(x) -> réel renvoie la valeur en t de la fonction """ return x**2+2*x+1 # On définit l’ensemble des abscisses des points qu’on veut représenter. ## Soit on définit le pas x=arange(x_min,x_max,pas) ##Soit on définit par le nombre de points x=linspace(x_min,x_max,nombre_points) #On demande de tracer la fonction avec comme étiquette ou descriptif pour la courbe « legende » plot(x,fonction_1(x),label=’legende’) #On écrit une légende qui reprend les étiquettes renseignées dans les des plots legend() labels #On met un titre title(‘titre’) PCSI – Lycée Brizeux Informatique Pour Tous #On met des légendes sur les axes xlabel(‘légende des abscisses’) ylabel(‘légende des ordonnées’) #On écrit un texte text(abscisse,ordonnée,'texte') #On fixe les bornes du tracé xlim(min,max) ylim(min,max) #On trace une grille grid(True) #On montre le graphique show() Il est possible de modifier la couleur du segment, le type de trait (pointillés, …), la largeur du trait, une légende… (Voir : aide python ou sur le site http://matplotlib.org/api/pyplot_summary.html). Programme permettant de représenter graphiquement un diagramme de Bode : # On from from from importe les bibliothèques matplotlib.pyplot import * numpy import * pylab import * # La fonction de transfert ici H(j.w)=1/(1+0.01.j.w-w²) def H(w): return 1/(1 + 0.01*1j*w - w*w) # Découpage régulier des puissances en base 10 de la pulsation ici de 10^-2 à 10^3 puissance_w = arange(-2,3,0.01) # Les pulsations w W = 10**puissance_w # La phase en degré phase = angle(H(W),'deg') # Le module en dB module = 20*log(absolute(H(W))) #Tracer du diagramme de Bode subplot(211) # Permet d’afficher plusieurs graphes (nombre de graphe (2), colonne (1), ligne (1)) semilogx(W,module) # Tracé en semilog du module grid(True) # Activation de la grille subplot(212) semilogx(W,phase) #Tracé en semilog du module grid(True) #Activation de la grille #On montre le graphique show() Remarque : Si on veut deux axes logarithmiques on utilise la fonction loglog()avant un simple plot(x,y). PCSI – Lycée Brizeux Informatique Pour Tous 1. Problématique Madame Petitjean dispose d’un filtre électrique intégré dans une boite noire. Sur la boite est écrit : Filtre passe bas d’ordre 1 de fréquence de coupure de 1 𝑘𝐻𝑧. Madame Petitjean veut vérifier si la nature du filtre est correcte. Avec un GBF, Madame Petitjean crée des signaux sinusoïdaux d’amplitude 10 𝑉, de pulsation variable et de phase nulle. Elle choisit 4 fréquences quelconque pour ces signaux : 10 𝐻𝑧, 100 𝐻𝑧, 1 𝑘𝐻𝑧 et 10 𝑘𝐻𝑧. A l’aide de l’oscilloscope elle récupère pour chaque signaux d’entrée un fichier texte (.csv). Ce fichier comprend trois colonnes : une colonne temps (en seconde), une colonne tension d’entrée du filtre (en volts) et une colonne pour la tension de sortie du filtre (en volts). Exemple de fichier : x-axis,1,2 second,Volt,Volt -2.500000E-03,+804.020107E-03,+2.613065347E+00 ... Madame Petitjean dispose donc de 4 fichiers : 10Hz.csv, 100Hz.csv, 1kHz.csv et 10kHz.csv. Pour effectuer votre programme python, vous utiliserez le fichier élève disponible sur l’espace d’échange. 2. Modélisation On cherche à modéliser la tension en entrée du filtre par une fonction mathématique de la forme 𝑢𝑒 (𝑡) = 𝑈𝑒 𝑐𝑜𝑠(2𝜋𝑓𝑡 + 𝜑𝑒 ) avec 𝑈𝑒 l’amplitude, 𝜑𝑒 la phase, 𝑓 la fréquence de la tension d’entrée et 𝑡 le temps. Ecrire une fonction tension_entree(Ue,phie,f,t) ayant pour paramètres 𝑈𝑒 l’amplitude, 𝜑𝑒 la phase, 𝑓 la fréquence de la tension d’entrée et 𝑡 le temps et renvoyant la tension d’entrée 𝑢𝑒 (𝑡). Reproduire le graphique suivant à l’aide de la fonction précédente. PCSI – Lycée Brizeux Informatique Pour Tous 3. Lecture des données - A partir du fichier texte créer trois listes : Une liste L_temps constituée des valeurs des temps en seconde contenues dans la première colonne. Une liste L_tension_entree constituée des valeurs des tensions en entrée du filtre en volts contenues dans la deuxième colonne. Une liste L_tension_sortie constituée des valeurs des tensions en sortie du filtre en volts contenues dans la troisième colonne. On pourra utiliser la fonction split() qui transforme une chaine de caractère. Exemple d’utilisation de la fonction split() : chaine_caractere='abc,def,ghi' Liste=chaine_caractere.split(',') # Alors print(Liste) renvoie la liste ['abc', 'def', 'ghi'] Madame Petitjean souhaite retracer sur python le graphe observé sur l’oscilloscope. Tracer le graphe représentant les tensions en entrée et en sortie en fonction du temps à partir des trois listes L_temps et L_tension_entree et L_tension_sortie. Mettre un titre au graphe, aux axes, préciser les unités et ajouter une légende. 4. Filtre passe bas d’ordre 1 Madame Petitjean souhaite maintenant tracer le diagramme de Bode d’un filtre passe bas d’ordre 1 de fonction de transfert : 𝐺0 𝐻 (𝜔 ) = 𝜔 1+𝑗𝜔 𝑐 Avec 𝐺0 le gain statique sans dimension et 𝜔𝑐 = 2𝜋𝑓𝑐 la pulsation de coupure du filtre en 𝑟𝑎𝑑. 𝑠 −1 . On rappelle que : - La réponse en gain : 𝐺𝑑𝐵 (𝜔) = 20 log (|𝐻(𝜔)|) - La phase : 𝜑(𝜔) = arg (𝐻 (𝑗𝜔)) Le logarithme en base 10 s’écrit dans python : log10() Ecrire une fonction Transfert(G0,wc,w)ayant pour paramètres 𝐺0 le gain statique et 𝜔𝑐 la pulsation de coupure du filtre et 𝜔 une pulsation et renvoyant la fonction de transfert complexe 𝐻(𝜔). Tracer le diagramme de Bode de ce filtre d’ordre 1 de fréquence de coupure 𝜔𝑐 = 1000 𝑟𝑎𝑑. 𝑠 −1 et de gain statique 𝐺0 = 1 pour des pulsations comprissent entre 100 𝑟𝑎𝑑. 𝑠 −1 et 100000 𝑟𝑎𝑑. 𝑠 −1 . PCSI – Lycée Brizeux Informatique Pour Tous 5. Point expérimental Dans cette partie on dispose donc d’une fonction dephasage_gain qui détermine à partir les trois listes L_temps et L_tension_entree et L_tension_sortie et de la fréquence du signal : - Le gain entre le tension d’entrée et la tension de sortie. - Déphasage entre le tension d’entrée et la tension de sortie. Cette fonction utilise un ajustement curve_fit de la bibliothèque optimize qui permet d'obtenir le déphasage et le gain pour nos courbes expérimentales. Cette fonction cherche le cosinus qui passe au mieux par tous les points expérimentaux. Compléter la fonction lecture_donnees ayant comme paramètre un fichier expérimental et renvoyant les trois listes L_temps et L_tension_entree et L_tension_sortie. Déterminer le gain et le déphasage entre le tension d’entrée et la tension de sortie pour les fichiers disponibles. Placer alors les points expérimentaux correspondants aux fichiers étudiés sur le diagramme de Bode tracé dans la partie précédente. 6. Filtre passe bas d’ordre 2 Madame Petitjean souhaite bien vérifier que le filtre n’est pas d’ordre 2. On étudie maintenant un filtre passe bas d’ordre 2 de fonction de transfert : 𝐺0 𝐻 (𝑗𝜔) = 𝑗 𝜔 𝜔 2 1 + 𝑄 𝜔 − (𝜔 ) 0 0 Avec 𝐺0 le gain statique sans dimension et 𝜔0 la pulsation propre du circuit en 𝑟𝑎𝑑. 𝑠 −1 et 𝑄 le facteur de qualité. Ecrire une fonction Transfert_2(G0,w0,w,Q)ayant pour paramètres 𝐺0 le gain statique, 𝑄 le facteur de qualité et 𝜔0 la pulsation propre du circuit et 𝜔 une pulsation et renvoyant la fonction de transfert complexe 𝐻 (𝜔). Tracer le diagramme de Bode de ce filtre d’ordre 2 de pulsation propre 𝜔0 = 1000 𝑟𝑎𝑑. 𝑠 −1 , de facteur de qualité 𝑄 = 0,1 et de gain statique 𝐺0 = 1 pour des pulsations comprissent entre 100 𝑟𝑎𝑑. 𝑠 −1 et 100000 𝑟𝑎𝑑. 𝑠 −1 . Placer alors les points expérimentaux correspondants aux fichiers étudiés sur le diagramme de Bode. PCSI – Lycée Brizeux Informatique Pour Tous