# -*- coding: utf-8 -*-
"""
Created on Mon Dec 12 23:06:56 2022

@author: EYER
"""

import random
import numpy as np
import matplotlib.pyplot as plt

def f(t):
    return t**3-5*t**2+5*random.random() ## je rajoute 5* random pour une meilleure visualisation

Ti = np.linspace(-2,2,100) ## instants ti pour mesure du signal
Ei = [f(ti) for ti in Ti]  ## "faux" signal mesuré ei = E(ti)
plt.scatter(Ti,Ei,s=10,label='mesure') ## tracé

## Filtrage avec moyenne glissante et k = 2
Tfiltre = []
Ffiltre = []

k = 2
for j in range(k-1,len(Ti)):
    Ffiltre_j = 0
    for i in range(j-k+1,j+1):
        Ffiltre_j += Ei[i]
    Tfiltre.append(Ti[j])
    Ffiltre.append(Ffiltre_j/k)
    
plt.plot(Tfiltre,Ffiltre,color='red',label='signal filtre par moyenne glissante et k = '+str(k)) ## tracé

  


## Filtre ordre 1 et constante de temps tau
Tf1 = Ti[:]
Ff1 = []

tau = 0.05
Te = Ti[1] - Ti[0] ## durée d'échantillonnage constante

# initialisation
# Tf1 = Ti[0]
Ff1.append(Ei[0])

for j in range(1,len(Ti)):
    si = (Te/(Te+tau))*Ei[j] + (tau/(Te+tau))*Ff1[-1]
    Ff1.append(si)
    
    
plt.plot(Tf1,Ff1,color='blue',label='signal filtre par 1er ordre : tau = '+str(tau)+' s') ## tracé




## Filtre ordre 2 et constante de temps tau
Tf2 = Ti[:]
Ff2 = []

xi = 5
w0 = 100

Te = Ti[1] - Ti[0] ## durée d'échantillonnage constante

# initialisation
# Tf1 = Ti[0]
Ff2.append(Ei[0])
Ff2.append(Ei[1])

for j in range(2,len(Ti)):
    
    
    
    si = (Ei[j] + (2*xi/(w0*Te)) * Ff2[-1] + (1/(w0**2 * Te**2)) * Ff2[-2] )/(1 + (2*xi/(w0*Te)) + (1/(w0**2 * Te**2)))
    Ff2.append(si)
    
    
plt.plot(Tf2,Ff2,color='green',label='signal filtre par 2eme ordre : $\\xi$ = '+str(xi)+' et $\\omega_0 = $'+str(w0)+' rad/s') ## tracé




## Affichage de la légende et de la grille
plt.legend()
plt.grid(True)








## Affichage de la légende et de la grille
plt.legend()
plt.grid(True)














