﻿############################################################################
# Filtrage #
############################################################################

import matplotlib.pyplot as plt
import numpy as np
from pylab import get_current_fig_manager
import scipy.integrate as integr
from math import *
import cmath as cm




C=1e-7
R=3000
H0=1
w0=1/(R*C)


def H(w,H0,w0):
    return(H0/(1.0+1j*w/w0))


def diagramme():

    def G(w,H0,w0):
        return(20.0*np.log10(abs(H(w,H0,w0))))

    w = np.linspace(1e-6,1e8
    ,100000)
    plt.title('diagramme de Bode en gain')
    plt.grid()
    plt.semilogx(w,G(w,H0,w0))
    plt.xlabel("pulsation (w)")
    plt.ylabel("gain en dB")
    plt.show()
    get_current_fig_manager().window.raise_()


def creneau(t):
    if t<0: return(-1.0)
    else: return(4)



def spectre(signal):

    # coefficients de Fourier r�els du signal
    bnSignal = np.zeros(51)
    for k in range(1,51):
        bnSignal[k] = 2.0 * integr.quad(lambda t,k: signal(t)*sin(2*pi*k*t),-0.5,0.5,args=(k))[0]

    anSignal = np.zeros(51)
    anSignal[0] = integr.quad(lambda t: signal(t),-0.5,0.5)[0]
    for k in range(1,51):
        anSignal[k] = 2.0 * integr.quad(lambda t,k: signal(t)*cos(2*pi*k*t),-0.5,0.5,args=(k))[0]

    return anSignal,bnSignal


def trace_spectre(signalentree,Fe):

    # trace du spectre du signal d'entr�e
    an,bn=spectre(signalentree)

    for k in range(0,51):
        plt.subplot(211)
        plt.title("spectre du signal d'entrée")
        plt.xlabel("numéro de l'harmonique (1,2,3,4,5 etc...)")
        plt.plot([k,k],[0,sqrt((an[k])**2+(bn[k])**2)],'r',linewidth=4)

    for k in range(0,51):
        cn=sqrt((an[k])**2+(bn[k])**2)
        plt.subplot(212)
        plt.title("spectre du signal de sortie")
        plt.plot([k,k],[0,cn*abs(H(2*pi*k*Fe,H0,w0))],'b',linewidth=4)
    plt.show()
    get_current_fig_manager().window.raise_()
