#250+36ohm et 253nF et 0.1H

# 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")
pi=numpy.pi








#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=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)

    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=2.85,stop=3.15,num=50)

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()
plt.plot(freq,gdb,'k+')
plt.plot(freq,gdb,'k-')
plt.title('Diagramme expérimental de Bode en gain pour le système passe-bande - ordre 2')
plt.yticks(numpy.arange(int(min(gdb))-2, int(max(gdb))+5, 1.0))
plt.xscale('log')
pylab.xlabel("f (Hz)")
pylab.ylabel("GdB")
ax = plt.gca()

ax.yaxis.set_major_locator(tck.MultipleLocator(base=5))
ax.yaxis.set_minor_locator(tck.MultipleLocator(base=1))
plt.grid(b=True, which='major', color='black', linestyle='-')
plt.grid(b=True, which='minor', color='grey', linestyle='--')






pylab.show()

