import numpy as np
import matplotlib.pyplot as plt
from scipy import signal

# 1. Definição dos Parâmetros do Circuito RC (Filtro Acústico)
R = 500.0        # Resistor em Ohms (0.5 kOhm)
C = 0.3e-6       # Capacitor em Farads (0.3 uF)
tau = R * C      # Constante de tempo do sistema

# O parâmetro 'a' do pólo do sistema é 1/tau
a = 1 / tau 

# 2. Modelagem da Função de Transferência
# Forma padrão G(s) = a / (s + a) ou 1 / (RC*s + 1)
numerador = [1]
denominador = [tau, 1]
filtro_rc = signal.TransferFunction(numerador, denominador)

# 3. Configuração do Tempo de Simulação
# Simulando até 5 constantes de tempo para garantir que atinja o estado estacionário (99.3%)
vetor_tempo = np.linspace(0, 5 * tau, 1000)

# 4. Cálculo da Resposta ao Degrau
# Extrai o vetor de tempo de saída (t) e a amplitude da resposta (y)
t, y = signal.step(filtro_rc, T=vetor_tempo)

# 5. Plotagem da Dinâmica do Sinal de Saída
plt.figure(figsize=(9, 5))

# Converte o tempo de segundos para milissegundos (ms) para facilitar a leitura
plt.plot(t * 1000, y, label='Resposta do Capacitor $V_c(t)$', color='blue', linewidth=2)
plt.axhline(y=1, color='red', linestyle='--', label='Sinal de Entrada $E(t)$ (Degrau)')

# Destaca graficamente a Constante de Tempo (63,2% do valor final)
y_tau = 1 - np.exp(-1) # Aproximadamente 0.632
plt.plot(tau * 1000, y_tau, 'ko', label=rf'Constante $\tau$ = {tau*1000:.2f} ms')
plt.vlines(tau * 1000, 0, y_tau, colors='black', linestyles='dotted')
plt.hlines(y_tau, 0, tau * 1000, colors='black', linestyles='dotted')

# Configurações visuais do gráfico
plt.title('Resposta Transitória do Filtro RC de 1ª Ordem')
plt.xlabel('Tempo (ms)')
plt.ylabel('Amplitude / Tensão (V)')
plt.grid(True, which='both', linestyle='--', alpha=0.7)
plt.legend(loc='lower right')
plt.xlim(0, 5 * tau * 1000)
plt.ylim(0, 1.1)

# Exibe o gráfico
plt.show()
print('Hello world!')

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: