"""
Exemple de plot ... fréquentiel retour sur les filtres de physique, d'où le Q facteur de qualité !!
Sous graphiques : subplots
"""

from scipy import *
from pylab import *

w = logspace(-2,4, 1000)	                        # w omega = Abscisses en puissance de 10

def H(w, w0,z):
        # Fonction de transfert 
        return 1/(1+1j*2*z/w0*w-(w/w0)**2)

Zvaleurs = [5,1, sqrt(2)/2, 0.1]                  # Valeurs désirées du facteur de qualité

fig = plt.figure()
fig.subplots_adjust(hspace=0.1)                 # Espace entre les graphiques


"""
### Graphique de l'amplitude
"""

ax = fig.add_subplot(211)

for z in Zvaleurs :                             # Boucle for pour tracer les graphiques
        legende=u"$z = %4.1f$" %(z)             # Légende automatique : conversion en str du facteur de qualité
        plot(log10(w), 20*log10(abs(H(w,10, z)) ), label=legende,lw=1.5) # Graphiques pour w0=10rd/s

xlim(-2, 4)                                                             # Limites de l'axe des abscisses
ax.set_xticklabels([])                                                  # Pas de labels sur l'axe des x
ylim(-60., 20)                                                          # Limites de l'axe des ordonnées
ylabel("$G^{dB}=20.log_{10}(|H|)$", fontsize=16)                      # Label de l'axe des ordonnées

legend()                                        # Appel de la légende
grid(True)                                      # Grille

"""
### Graphique de la phase
"""

ax2 = fig.add_subplot(212)

for z in Zvaleurs :                             # Boucle for pour tracer les graphiques
        legende=u"$z = %4.0f$" %(z)
        plot(log10(w), 180/3.1416*angle(H(w,10, z)), label=legende,lw=1.5)  #  w0=10rd/s

xlim(-2, 4)                                                             # Limites de l'axe des abscisses
xlabel("$log_{10}(\omega)$"+"pour $\omega_{0}=10rd/s$", fontsize=16)    # Label de l'axe des abscisses
ylim(-180., 0)                                                          # Limites de l'axe des ordonnées
ylabel("$\phi \, (^\circ)$", fontsize=16)                             # Label de l'axe des ordonnées

grid(True)                                      # Grille

show()