# -*- coding: utf-8 -*-
"""
Created on Wed Sep  6 22:53:32 2023

@author: maxim
"""
import numpy as np
import matplotlib.pyplot as plt


"ex 3 tracé bode"

w=[5*k for k in range(1,4000)] # plage de pulsation testé

w0=1000
m=0.3


"passe bas d'ordre 1"

def moduleT1(w):
    mT1=[]
    for i in w :
        T=1/(1+(i/w0)**2)**1/2
        mT1.append(T)
    return mT1

def phaseT1(w):
    pT1=[]
    for i in w :
        p=-np.arctan(i/w0)
        pdeg=p*180/np.pi
        pT1.append(pdeg)
    return pT1

    
plt.subplot(211)
plt.plot(w,20*np.log(moduleT1(w)))
plt.xscale("log")
plt.title("Gdb=f(w) passe bas du 1er ordre")
plt.xlabel("w rad/s")
plt.ylabel("Gdb dB")

plt.subplot(212)
plt.plot(w,phaseT1(w))
plt.xscale("log")
plt.title("Phi=f(w) passe bas du 1er ordre")
plt.xlabel("w rad/s")
plt.ylabel("Phi deg")
plt.show()



"passe haut d'ordre 1"


def moduleT2(w):
    mT2=[]
    for i in w :
        T2=(i/w0)/np.sqrt((1+(i/w0)**2))
        mT2.append(T2)
    return mT2

def phaseT2(w):
    pT2=[]
    for i in w :
        p=(np.pi/2)-np.arctan(i/w0)
        pdeg=p*180/np.pi
        pT2.append(pdeg)
    return pT2
    
plt.subplot(211)
plt.plot(w,20*np.log(moduleT2(w)))
plt.xscale("log")
plt.title("Gdb=f(w) passe haut du 1er ordre")
plt.xlabel("w rad/s")
plt.ylabel("Gdb dB")

plt.subplot(212)
plt.plot(w,phaseT2(w))
plt.xscale("log")
plt.title("Phi=f(w) passe haut du 1er ordre")
plt.xlabel("w rad/s")
plt.ylabel("Phi deg")
plt.show()



"passe bas 2nd ordre"


def moduleT3(w):
    mT3=[]
    for i in w :
        T3=1/((1-(i/w0)**2)**2+4*(m*i/w0)**2)**1/2
        mT3.append(T3)
    return mT3


def phaseT3(w):
    pT3=[0] #rajout d'un point au début pour que l'exclusion du cas i=w0 ne pose pas de pb de dimension
    for i in w :
        if i<w0:
            p=-np.arctan((i/w0)/(1-(i/w0)**2))
            pdeg=p*180/np.pi
            pT3.append(pdeg)
        if i>w0:
            p=-np.pi-np.arctan((i/w0)/(1-(i/w0)**2))
            pdeg=p*180/np.pi
            pT3.append(pdeg)       
    return pT3


plt.subplot(211)
plt.plot(w,20*np.log(moduleT3(w)))
plt.xscale("log")
plt.title("Gdb=f(w) passe bas du 2nd ordre")
plt.xlabel("w rad/s")
plt.ylabel("Gdb dB")

plt.subplot(212)
plt.plot(w,phaseT3(w))
plt.xscale("log")
plt.title("Phi=f(w) passe bas du 2nd ordre")
plt.xlabel("w rad/s")
plt.ylabel("Phi deg")
plt.show()

"passe bande"


def moduleT4(w):
    mT4=[]
    for i in w :
        T4=(i/w0)/(((1-(i/w0)**2)**2)+4*(m*i/w0)**2)**0.5
        mT4.append(T4)
    return mT4


def phaseT4(w):
    pT4=[90] #rajout d'un point au début pour que l'exclusion du cas i=w0 ne pose pas de pb de dimension
    for i in w :
        if i<w0:
            p=(np.pi/2)-np.arctan((i/w0)/(1-(i/w0)**2))
            pdeg=p*180/np.pi
            pT4.append(pdeg)
        if i>w0:
            p=(np.pi/2)-np.pi-np.arctan((i/w0)/(1-(i/w0)**2))
            pdeg=p*180/np.pi
            pT4.append(pdeg)       
    return pT4


plt.subplot(211)
plt.plot(w,20*np.log(moduleT4(w)))
plt.xscale("log")
plt.title("Gdb=f(w) passe haut du 2nd ordre")
plt.xlabel("w rad/s")
plt.ylabel("Gdb dB")

plt.subplot(212)
plt.plot(w,phaseT4(w))
plt.xscale("log")
plt.title("Phi=f(w) passe haut du 2nd ordre")
plt.xlabel("w rad/s")
plt.ylabel("Phi deg")
plt.show()














