Добавил:
ИВТ (советую зайти в "Несортированное") Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
2
Добавлен:
11.12.2024
Размер:
215.24 Кб
Скачать
Задание 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 градусов при более высоких частотах, что отражает фазовый сдвиг в колебательных системах.

Соседние файлы в папке новая (готовая)