% Очищаем всё
clear; clc; close all;
% --- ПАРАМЕТРЫ АПЕРИОДИЧЕСКОГО ЗВЕНА ---
k = 1; % Коэффициент усиления
T = 1; % Постоянная времени
% Создаем массив частот
w = logspace(-2, 2, 1000);
% --- СЧИТАЕМ ФОРМУЛЫ ---
A = k ./ sqrt(T^2 .* w.^2 + 1); % АЧХ
phi = -atan(T .* w) * (180/pi); % ФЧХ (в градусах)
L = 20 * log10(A); % ЛАЧХ (в дБ)
% Комплексная передаточная функция (для годографа)
Re = k ./ (T^2 .* w.^2 + 1);
Im = -k .* T .* w ./ (T^2 .* w.^2 + 1);
% --- СТРОИМ ГРАФИКИ ---
figure('Name', 'Апериодическое звено', 'NumberTitle', 'off', 'Position', [100 100 800 800]);
% 1. ЛАЧХ
subplot(3, 1, 1);
semilogx(w, L, 'b', 'LineWidth', 2);
grid on;
title(['ЛАЧХ апериодического звена (k=', num2str(k), ', T=', num2str(T), ')']);
ylabel('L(\omega), дБ');
% 2. ЛФЧХ
subplot(3, 1, 2);
semilogx(w, phi, 'r', 'LineWidth', 2);
grid on;
title('ЛФЧХ апериодического звена');
ylabel('\phi(\omega), град');
ylim([-100 10]);
% 3. Годограф Найквиста + Радиус-вектор
subplot(3, 1, 3);
plot(Re, Im, 'k', 'LineWidth', 2); % Сам годограф
hold on;
grid on;
title('Годограф Найквиста с радиус-вектором');
xlabel('Re(W)');
ylabel('Im(W)');
axis equal; % Чтобы круг был круглым
% --- ДОБАВЛЯЕМ РАДИУС-ВЕКТОР ---
% Выбираем точку на частоте сопряжения w = 1/T
w_point = 1/T;
% Считаем координаты этой точки по формулам
Re_point = k / (T^2 * w_point^2 + 1);
Im_point = -k * T * w_point / (T^2 * w_point^2 + 1);
% Рисуем стрелку (радиус-вектор) из (0,0) в эту точку
quiver(0, 0, Re_point, Im_point, 0, 'r', 'LineWidth', 2, 'MaxHeadSize', 0.5);
% Рисуем точку на конце вектора
plot(Re_point, Im_point, 'ro', 'MarkerSize', 8, 'MarkerFaceColor', 'r');
% Подписываем вектор
text(Re_point/2, Im_point/2, ' W(j\omega)', 'Color', 'r', 'FontSize', 12, 'FontWeight', 'bold');
% Добавляем пунктирные линии для наглядности (проекции на оси)
plot([Re_point Re_point], [0 Im_point], 'r--'); % Вертикальная проекция
plot([0 Re_point], [Im_point Im_point], 'r--'); % Горизонтальная проекция
% Подписываем оси
text(Re_point, -0.05, 'Re', 'Color', 'r');
text(-0.05, Im_point, 'Im', 'Color', 'r');
disp(['Радиус-вектор построен для частоты \omega = ', num2str(w_point), ' рад/с']);
disp('Красная стрелка — это и есть вектор W(j\omega).');
disp('Его длина — это АЧХ, а угол наклона — это ФЧХ.');