In [ ]:
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt

In [ ]:
#Termos de Fourier
N = 100

#Frequencia do sinal e de corte
f_c = 500 #Hz
f = 50 #Hz
w_c = f_c * (2 * np.pi)
w = f * (2 * np.pi)

#Amplitude da tensão de entrada
V_0 = 10 #V

#Período da simulação
T = 1 / f #s

#Número de passos temporais
n = int(1e4)
t = np.linspace(0, T, n)

In [ ]:
#Fourier
A = 4 * V_0 / np.pi

V = np.zeros((n, 1))
Vf = np.zeros((n, 1))

#Tensao de entrada
for j in range(n):
    for i in range(N):
        k = 1 + 2*i
        V[j] += A * np.sin(k * w * t[j]) / k

#Tensao de saida
for i in range(N):
    k = 1 + 2*i
    w_i = w * k
    
    G_0 = 1 / np.sqrt(1 + (w_i / w_c) ** 2)
    phi_0 = np.arctan(-w_i / w_c)
    
    for j in range(n):
        Vf[j] += G_0 * A * np.sin(w_i * t[j] + phi_0) / k

In [ ]:
plt.plot(t, V, 'b', label='Tensão de entrada')
plt.plot(t, Vf, 'r', label='Tensão de saida')
plt.legend()
desc = "$N=%s, V_0=%s, f=%s Hz, f_c =%s Hz, T=%s s$" % (N, V_0, f, f_c, T)
plt.title("Efeito de um filtro passa baixa\n%s" % desc)
plt.xlabel("Tempo (s)")
plt.ylabel("Tensão (V)")
plt.xlim(0, np.max(t))
plt.show()

In [ ]: