
лаб 4 / новая (готовая) / Лаб4
.docxЗадание 1
Применяя рассмотренные на практических занятиях алгоритмы построения ЛАЧХ и ЛФЧХ построить эти характеристики для индивидуального задания, полученного на семинаре.
На графике должны присутствовать:
- истинная ЛАЧХ и ЛФЧХ;
- линейная кусочно-непрерывная ЛАЧХ;
- ЛФЧХ всех типовых звеньев, входящих в сложную САУ.
Программный код должен подтверждать применение изученных на практических занятиях алгоритмов построения ЛАЧХ и ЛФЧХ сложной САУ.
import numpy as np
import matplotlib.pyplot as plt
from scipy import signal
# Классы для представления типовых звеньев
class System:
def __init__(self, transfer_function, name):
self.transfer_function = transfer_function
self.name = name
def bode_plot(self, ax_magnitude, ax_phase):
"""
Строит графики ЛАЧХ (амплитудной частотной характеристики) и ЛФЧХ (фазовой частотной характеристики).
Добавляет подписи для каждого графика.
"""
w, mag, phase = signal.bode(self.transfer_function)
ax_magnitude.semilogx(w, mag, label=self.name) # Добавляем подпись к графику ЛАЧХ
ax_phase.semilogx(w, phase, label=self.name) # Добавляем подпись к графику ЛФЧХ
# Настройка графиков
ax_magnitude.set_ylabel('Амплитуда (дБ)')
ax_phase.set_ylabel('Фаза (градусы)')
ax_magnitude.grid(True, which="both")
ax_phase.grid(True, which="both")
# Классы для каждого типа звена
class Aperiodic(System):
def __init__(self, T):
transfer_function = signal.TransferFunction([1], [T, 1])
super().__init__(transfer_function, "Апериодическое звено")
class Integrator(System):
def __init__(self):
transfer_function = signal.TransferFunction([1], [1, 0])
super().__init__(transfer_function, "Интегрирующее звено")
class Differentiator(System):
def __init__(self):
transfer_function = signal.TransferFunction([1, 0], [1])
super().__init__(transfer_function, "Дифференцирующее звено")
class SecondOrderSystem(System):
def __init__(self, omega_n, zeta):
transfer_function = signal.TransferFunction([omega_n ** 2], [1, 2 * zeta * omega_n, omega_n ** 2])
super().__init__(transfer_function, "Колебательное звено")
# Основная функция для построения графиков ЛАЧХ и ЛФЧХ
def create_and_plot_systems(T_aperiodic, omega_n, zeta):
systems = [
Aperiodic(T_aperiodic),
Integrator(),
Differentiator(),
SecondOrderSystem(omega_n, zeta)
]
# Подготовка графиков
fig, axes = plt.subplots(2, 1, figsize=(12, 10), sharex=True)
fig.suptitle('ЛАЧХ и ЛФЧХ для типовых звеньев', fontsize=16)
ax_magnitude, ax_phase = axes[0], axes[1]
# Построение ЛАЧХ и ЛФЧХ для каждой системы
for sys in systems:
sys.bode_plot(ax_magnitude, ax_phase)
# Настройка оси X
ax_phase.set_xlabel('Частота (рад/с)')
# Добавляем легенду на графики
ax_magnitude.legend()
ax_phase.legend()
plt.tight_layout(rect=[0, 0.03, 1, 0.95])
plt.show()
# Построение кусочно-непрерывной ЛАЧХ
plot_linear_bode()
# Функция для построения кусочной ЛАЧХ
def plot_linear_bode():
frequencies = np.logspace(-2, 2, 100)
# linear_magnitude = -20 * np.log10(frequencies)
linear_magnitude = ((0.1*frequencies + 1)*(5*frequencies+1)**2)/(49*frequencies**2)*(0.04*frequencies**2+0.04*frequencies + 0.1)
plt.figure()
plt.semilogx(frequencies, linear_magnitude, label="Кусочно-непрерывная ЛАЧХ")
plt.xlabel("Частота (рад/с)")
plt.ylabel("Амплитуда (дБ)")
plt.title("ЛАЧХ с кусочной аппроксимацией")
plt.legend()
plt.grid(True, which="both")
plt.show()
# Задание параметров системы
T_aperiodic = 1.0 # Параметр апериодического звена
omega_n = 1.0 # Собственная частота колебательного звена
zeta = 0.5 # Коэффициент демпфирования
# Визуализация всех графиков
create_and_plot_systems(T_aperiodic, omega_n, zeta)
Апериодическое звено:
ЛАЧХ: График амплитудно-частотной характеристики (ЛАЧХ) показывает спад амплитуды при увеличении частоты. Это поведение типично для апериодического звена, у которого амплитуда уменьшается с ростом частоты.
ЛФЧХ: Фазово-частотная характеристика (ЛФЧХ) показывает, что фаза смещается от 0 градусов к -90 градусам по мере увеличения частоты.
Интегрирующее звено:
ЛАЧХ: Амплитуда линейно уменьшается с ростом частоты на -20 дБ/декаду. Это связано с тем, что интегрирующее звено действует как фильтр нижних частот.
ЛФЧХ: Фаза остаётся примерно на уровне -90 градусов на всём диапазоне частот, что соответствует постоянному фазовому сдвигу интегрирующего звена.
Дифференцирующее звено:
ЛАЧХ: Амплитуда увеличивается на +20 дБ/декаду с ростом частоты, так как дифференцирующее звено усиливает высокочастотные составляющие.
ЛФЧХ: Фаза сохраняется на уровне +90 градусов по всему диапазону частот, что характерно для дифференцирующего звена.
Колебательное звено:
ЛАЧХ: График амплитудной характеристики имеет спад с ростом частоты после пика. Поведение напоминает колебательное звено второго порядка, где амплитуда сначала увеличивается, достигает пика и затем снижается.
ЛФЧХ: Фазовая характеристика начинается с 0 градусов и постепенно снижается, достигая -180 градусов при более высоких частотах, что отражает фазовый сдвиг в колебательных системах.