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=5
Umoy=0
f1=100


# Echantillonnage
fe=1000    # fréquence échantillonnage
N=500
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=-5 #valeur minimale de la tension pleine échelle
DU=10 #tension pleine échelle
n=3 #résolution du CAN

Umax=DU+Umin #Valeur maximale
q=DU/(2**n)     #expression littérale du pas de quantification

#signal quantifié

def quant(x,nbit,xmin,xmax):
    q=(xmax-xmin)/(2**nbit)
    M=np.floor((x-Umin)/q)
    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.plot(s,sq,'k+', label='Caractéristique du CAN par valeur inférieure')
plt.plot(s,s,'r-', label='s=sq')
plt.legend()
plt.xlabel('valeur du signal echantillonné')
plt.ylabel('valeur quantifiée du signal ')
plt.grid()

plt.show()





