# ce script effectue une acquisition sur une voie et réalise la FFT du signal

import pycanum.main as pycan
from scipy.fftpack import fft
import matplotlib.pyplot as plt
import numpy as np
from math import sqrt

#### Paramètres du signal étudié u0
# Fréquence du signal:
f=1000
# Nombres de motifs analysés
n=1000



# ouverture de l'interface pour SysamSP5
can = pycan.Sysam("SP5")
# configuration de l'entrée 0 avec un calibre 10.0 V
can.config_entrees([0],[10.0])

# Fréquence d'échantillonnage (max 10 MHz)
fe=100*f
te=1.0/fe
# durée de l'acquisition
T=n*1/f
# nombre d'échantillons (Max 260000 environ)
N = int(T/te)

# configuration de l'échantillonnage. La période d'échantillonnage est donnée en microsecondes
can.config_echantillon(te*10**6,N)
# acquisition
can.acquerir()
# Lecture des instants et des tensions pour la voie 0
t0=can.temps()[0]
u0=can.entrees()[0]
# fermeture de l'interface
can.fermer()


# On relie la période d'échantillonnage et la durée à partir des données
# car il peut y avoir une différence avec les valeurs spécifiées au départ
te = t0[1]-t0[0]
fe = 1.0/te
N = t0.size
T = t0[N-1]-t0[0]


def spectre(u0,Fe):
    N=len(u0)
    S = fft(u0)
    S=2/N* np.abs(S[0:N//2])
    S[0]=S[0]/2
    f = np.linspace(0.0, 1/2*Fe, N//2)
    return f,S


f,S=spectre(u0,fe)

Pnexp=?????

###tracé du spectre
plt.figure(0)
plt.plot(f,Pnexp,'k')
plt.title('Représentation fréquentielle expérimentale de la puissance du signal triangulaire')
plt.xlim(0,6000)
plt.grid()
plt.xlabel('f en Hertz')
plt.ylabel('puissance en watt')


# Tracé temporel du signal
plt.figure(1)
plt.title('Représentation temporelle expérimentale du signal u issu du GBF ')
plt.plot(t0,u0,"k-",label="u")

plt.legend()
plt.xlabel("t (s)")
plt.ylabel("u (V)")
plt.axis([0,2/1000,1.1*min(u0),1.1*max(u0)])
plt.grid()

plt.show()






