#159nF et r=5k et R=10k
# 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
import matplotlib.ticker as tck
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=500
    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=10 # 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)
    phi = math.acos(cosphi)
    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=1,stop=4,num=40)
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 = 5
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()
plt.plot(freq,gdb,'k+')
plt.plot(freq,gdb,'k-')
plt.title('Diagramme expérimental de Bode en gain pour le système B')
plt.yticks(numpy.arange(-20, 15, 5))
ax = plt.gca()
ax.yaxis.set_minor_locator(tck.MultipleLocator(base=1))
plt.xscale('log')
pylab.xlabel("f (Hz)")
pylab.ylabel("GdB")
plt.grid(b=True, which='major', color='#000000', linestyle='-')
plt.grid(b=True, which='minor', color='#000000', linestyle='--')


pylab.show()
