"""
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 *

x = logspace(-2,2, 500)	                        # x=omega/omega0 = Abscisses

def H(x, z):
        Q=1/(2*z)                               # Fonction de transfert avec Q=1/(2z)
        return 1/(1+1j*x/Q-x**2)

"""
Rejecteur (1-x**2)/(1+1j*x/Q-x**2)
Passe haut -x**2/(1+1j*x/Q-x**2)
Passe bas 1/(1+1j*x/Q-x**2)
Passe bande 1j*x/Q/(1+1j*x/Q-x**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(x), 20*log10(abs(H(x, z)) ), label=legende,lw=1.5) # Graphiques

xlim(-2, 2)                                                             # 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(x), 180/3.1416*angle(H(x, z)), label=legende,lw=1.5)

xlim(-2, 2)                                                             # Limites de l'axe des abscisses
xlabel("$log_{10}(x) = log_{10}(\omega/\omega_{0})$", 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()