
# Importation des modules et ouverture le l'interface :
import pycanum.main as pycan
import numpy
import math
import matplotlib.pyplot as plt
import time
import pylab
sys = pycan.Sysam("SP5")



#On encapsule tout l'analyse de la réponse sinusoïdale dans une fonction dont les arguments sont : l'objet Sysam, la fréquence et l'amplitude de la sinusoïde à appliquer :

def analyser(sys,f,a):
    print("Frequence = %f"%f)
    ne =50
    T=1.0/f
    te=T/ne
    v1 = numpy.zeros(ne,numpy.double)
    for k in range(ne):
        phi = 2.0*math.pi/ne*k
        v1[k] = a*math.sin(phi)
    sys.config_sortie(1,te*10**6,v1,-1)
    sys.config_entrees([0,1],[10.0,10.0])
    np=50 # nombre de périodes de l'acquisition
    nea = ne*np
    duree = nea*te
    sys.config_echantillon(te*10**6,nea)
    sys.declencher_sorties(1,0)
    time.sleep(1)
    sys.acquerir()
    sys.stopper_sorties(1,0)
    t=sys.temps()
    u=sys.entrees()
    mu0 = numpy.mean(u[0])
    mu1 = numpy.mean(u[1])
    rms0 = numpy.std(u[0])
    rms1 = numpy.std(u[1])
    g = rms1/rms0
    gdb = 20.0*math.log10(g)
    print("GdB = %f"%(gdb))
    cosphi = numpy.mean((u[0]-mu0)*(u[1]-mu1))/(rms0*rms1)
    print("cosphi = %f"%cosphi)
    if f<1000: phi = math.acos(cosphi)
    else: phi= math.acos(cosphi)*(-1)

    print("phi = %f deg"%phi)
    return gdb,cosphi,phi
            
#Choix des fréquences sur une échelle logarithmique et création des différents tableaux :

freq = numpy.logspace(start=4.4,stop=4.9,num=200)
gdb = numpy.zeros(freq.size,dtype=numpy.float32)
cosphi = numpy.zeros(freq.size,dtype=numpy.float32)
phi = numpy.zeros(freq.size,dtype=numpy.float32)
            
#Choix de l'amplitude et boucle de calcul :

amplitude = 10.
for k in range(freq.size):
    gdb[k],cosphi[k],phi[k] = analyser(sys,freq[k],amplitude)
sys.fermer()


            
#Tracé du diagramme de Bode :

pylab.figure()

pylab.semilogx(freq,gdb,'-')
plt.title('Diagramme de Bode en gain')
pylab.xlabel("f (Hz)")
plt.grid(b=True, which='major', color='#000000', linestyle='-')
plt.grid(b=True, which='minor', color='#000000', linestyle='--')
pylab.ylabel("GdB")
plt.grid(b=True, which='major', color='#000000', linestyle='-')
plt.grid(b=True, which='minor', color='#000000', linestyle='--')





pylab.show()
