# -*- coding: utf-8 -*-
"""
Created on Mon Aug 29 18:04:57 2022

@author: benja
"""

## Bibliotheques ecessaires
import matplotlib.pyplot as plt # pour les graphes
import numpy as np # pour manipuler les tableaux
from cmath import * # pour manipuler les complexes : abs pour le module et phase pour l'argument

## Definition de la fonction de transfert
def passe_bas(H0,fc,f):  # Passe bas ordre 1 de gain statique H0 et frequence de coupure fc
    return                    # a completer




## Fonction qui genere un signal temporel a partir du spectre
# frequence, amplitude et phase sont les tableaux contenant respectivement les infos des composantes du signal
# t est le tableau des instants ou on veut calculer le signal
def gene_signal(frequence,amplitude,phase,t):
    s = np.zeros(len(t))  # intialisation du signal : tableau de 0
    # Somme sur toutes les harmoniques voulues : 2 lignes a completer
    for i in range(
        s += 
    return s



## Generation d'un signal d'entree en creneau
f0 = 1        # frequence du fondamental du creneau en Hz
A = 2          # amplitude du creneau en V
n = 100        # nombre d'harmoniques souhaitees

# liste des frequences pour n composantes
freq = [(2*i - 1) *f0 for i in range(1,n+1)]
# liste des amplitudes pour n composantes
ampl = [4*A /((2*i -1) *pi) for i in range(1,n+1)]
# liste des phase a l'origine pour n composantes
phie = [ pi/2 for i in range(1,n+1) ]

# instants de calculs
Nt = 100000 # nb de pts dans le domaine temporel
t = np.linspace(0,3/f0,Nt) # sur trois periodes

# generation du creneau
entree = gene_signal(freq,ampl,phie,t)



## Determination du signal de sortie apres filtrage
sortie = np.zeros(Nt) # initialisation

# filtre passe-bas de frequence de coupure et gain statique H0
H0 = 1
fc = 20
# Appliquer le filtre a chque composante de frequence f_i
for i in range(len(freq)):
    H = passe_bas(H0,fc,freq[i]) # calcul de la fonction de transfert en f_i
    G = abs(H)     # calcul du gain a f_i
    phi = phase(H)    # calcul du dephasage a f_i
    # ajout de la composante filtree
    sortie = sortie + gene_signal([freq[i]],[ampl[i]*G],[phie[i] + phi],t)

# graphe
plt.plot(t,entree, label =' entrée ')
plt.plot(t,sortie, label = 'sortie ')
plt.legend(loc='lower right')
plt.grid()
plt.xlabel('t (s)')
plt.ylabel('tension (V)')
plt.show()


