# -*- coding: utf-8 -*-

# ce script effectue une acquisition sur une voie
# et une analyse spectrale du signal


import pycanum.main as pycan
import matplotlib.pyplot as plt
import numpy
import math
import numpy.fft


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

# Fréquence d'échantillonnage (max 10 MHz)
fe=???
te=1.0/fe
# durée de l'acquisition
T=3.0
# nombre d'échantillons (Max 260000 environ)
N = int(T/te)
print(N)
# 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]

# Tracé temporel du signal et enregistrement de la figure dans un fichier pdf
plt.figure()
plt.plot(t0,u0,'k+')
plt.title('Représentation temporelle du signal échantillonné')
plt.xlabel("t (s)")
plt.ylabel("tension (V)")
plt.axis([0,0.05,-2,2])
plt.grid()


# Calcul du spectre par transformée de Fourier discrète
tfd=numpy.fft.fft(u0)
a =numpy.absolute(tfd)/N*2
# echelle de fréquence du spectre
f=numpy.arange(N)*1.0/T
# Tracé du spectre et enregistrement de la figure dans un fichier pdf
plt.figure()
plt.plot(f,a,'k')
plt.xlabel("f (Hz)")
plt.ylabel("Tension en volt")
plt.title('Représentation fréquentielle du signal échantillonné')

plt.axis([0,fe,0,1.2*a.max()])
plt.grid()


plt.show()
