pysim/bode.py
2024-05-21 04:23:33 +02:00

38 lines
977 B
Python

import numpy as np
import matplotlib.pyplot as plt
# Define the frequency range for the Bode plot
omega = np.logspace(-2, 2, 1000) # Frequency range from 0.01 to 100 rad/s
# Define the transfer function parameters
T_values = [0.2, 1, 5]
# Create subplots
fig, (ax_mag, ax_phase) = plt.subplots(2, 1, figsize=(10, 8))
# Plot for each T value
for T in T_values:
G_mag = 20 * np.log10(1 / np.sqrt(1 + (omega * T)**2))
G_phase = -np.degrees(np.arctan(omega * T))
ax_mag.plot(omega, G_mag, label=f'T = {T}')
ax_phase.plot(omega, G_phase, label=f'T = {T}')
# Magnitude plot settings
ax_mag.set_xscale('log')
ax_mag.set_title('Bode Magnitude Plot')
ax_mag.set_ylabel('Magnitude (dB)')
ax_mag.grid(True)
ax_mag.legend()
# Phase plot settings
ax_phase.set_xscale('log')
ax_phase.set_title('Bode Phase Plot')
ax_phase.set_ylabel('Phase (degrees)')
ax_phase.set_xlabel('Frequency (rad/s)')
ax_phase.grid(True)
ax_phase.legend()
plt.tight_layout()
plt.show()