import numpy as np
from numpy import pi 
from scipy.integrate import *
import matplotlib.pyplot as plt

#paramètres des filtres
H0=1
E0=1
fc=1000
fr=1000
omegac=2*pi*fc
Ne=50 #nombre d'échantillons

def passeBas(f,tf,choixAffichage):
plt.figure()
    plt.title("Passe-bas, f="+str(f))
    T=np.linspace(0,tf,2000)
    #.............................................
    def entree(t):
        return E0*np.cos(2*pi*f*t)
    if choixAffichage[3]:
        plt.plot(T,entree(T),"-",label="e(t)")
    #..............................................
    def ED(s,t):
        return omegac*(H0*entree(t)-s)        
    if choixAffichage[1] :
        repC=odeint(ED,E0,T)
        plt.plot(T,repC,"-",label="s(t) [ana]")  
    # réponse du filtre numérique (équation discrète)
    if choixAffichage[0]:
        #échantillonnage des temps
        Tech=np.linspace(0,tf,Ne)
        fe=Ne/tf  
        repD=np.zeros(Ne)
        repD[0]=E0
        #..............A COMPLETER................
        plt.plot(Tech,repD,"o",label="s(t) [num]")
    #.............................................
    if choixAffichage[2]:
        etab=np.real(H0*E0*np.exp(2*pi*f*T*1j)/(1+1j*f/fc))
        plt.plot(T,etab,"-",label="établi")
    plt.legend()
    plt.show()

def passeHaut(f,tf,choixAffichage,tronque=False):
    pass

def passeBande(Q,f,tf,choixAffichage,tronque=False):
    pass

#choisir le type d'affichage
afficheEntree=True
solAna=False
solNum=True
regimeEtabli=False
choixAffichage=[solNum,solAna,regimeEtabli,afficheEntree]

#Choisir une ligne à décommenter
#NB : pour la fréquence 10 il y a souvent à faire attention #au choix de la fenêtre d'affichage et à l'échantillonnage
#passeBas(10,0.1,choixAffichage)
#zoomons car peu de différence transitoire établi
#passeBas(10,0.001,choixAffichage)
#passeBas(1000,0.005,choixAffichage)
#passeBas(10000,0.001,choixAffichage)

#passeHaut(10,0.1,choixAffichage)
#zoomons, peu de différence transitoire établi
#passeHaut(10,0.1,choixAffichage,tronque=True)
#passeHaut(1000,0.001,choixAffichage)
#passeHaut(10000,0.00015,choixAffichage)


#pour les deux premiers (fréquence 10), 
#la solution discrète ne marche que si on augmente Ne
#passeBande(10,10,0.1,choixAffichage)  
#passeBande(10,10,0.1,choixAffichage,tronque=True)
#passeBande(10,1000,0.001,choixAffichage)
#passeBande(10,10000,0.01,choixAffichage)
#passeBande(1,10000,0.002,choixAffichage)

