import numpy as np
import matplotlib.pyplot as plt
import math
import scipy.signal as sig
from scipy.fftpack import fft

pi=np.pi

# paramètres du signal triangulaire analogique
Um=??
Umoy=??
f1=???


# Echantillonnage
fe=???   # fréquence échantillonnage
N=5002
t=np.linspace(0,N/fe,N)

# expression numérique du signal analogique

s = Umoy+Um*sig.sawtooth(2*pi*f1*t,0.5)


#paramètres du CAN
Umin=??? #valeur minimale de la tension pleine échelle
DU=??? #tension pleine échelle
n=??? #résolution du CAN

Umax=DU+Umin #Valeur maximale
q=??????     #expression littérale du pas de quantification

#signal quantifié

def quant(x,nbit,xmin,xmax):
    q=(xmax-xmin)/(2**nbit)
    M=??????? #nombre décimal en sortie
    xq=Umin+M*q
    xq=np.minimum(xq,xmax-q)#saturation haute
    xq=np.maximum(xq,xmin)#saturation basse
    return(xq)

sq=quant(s,n,Umin,Umax)


###Graphes
plt.figure('0')
plt.title('Représentation temporelle')
plt.plot(t,s,'k-', label='signal analogique')
plt.plot(t,s,'k+', label='signal échantillonné')

# signal échantillonné et bloqué
n2=int(1.5*fe/f1)
for i in range (0,n2,1):
    plt.hlines(s[i],t[i],t[i+1], colors='g', linestyles='solid')

# valeurs quantifiées autorisées
niveau=[]
for i in range (0,2**n+1,1):
    y=Umin+i*q
    niveau=np.append(niveau,y)
    plt.axhline(y,color='k',linewidth='1',linestyle='--')

#signal quantifié
for i in range (0,n2,1):
    plt.hlines(sq[i],t[i],t[i+1], colors='r', linestyles='solid')

plt.legend()
plt.xlim([0,1.5/f1])
plt.ylim([-Um-2,Um+2])
plt.xlabel('t(s)')
plt.ylabel('tension(V)')
plt.grid()

plt.show()





