\documentclass[a4paper,14pt]{extarticle}

% ----------------------- PACKAGES --------------------------
\usepackage[utf8]{inputenc}
\usepackage[T2A]{fontenc}
\usepackage[russian]{babel}

\usepackage[a4paper,margin=2.5cm]{geometry}
\usepackage{array}
\usepackage{booktabs}
\usepackage{tabularx}
\usepackage{amsmath,amssymb}
\usepackage{graphicx}
\usepackage{caption}
\usepackage{subcaption}
\usepackage{float}
\usepackage{titlesec}
\usepackage{indentfirst}
\usepackage{newtxtext,newtxmath}

\linespread{1.3}
\frenchspacing
\setlength{\parindent}{1.25cm}
\setlength{\parskip}{0pt}

\usepackage{xcolor}
\usepackage{matlab-prettifier}

\lstset{
  style=Matlab-editor,
  basicstyle=\mlttfamily\small,
  numbers=left,
  numberstyle=\tiny,
  stepnumber=1,
  numbersep=5pt,
  frame=single,
  breaklines=true,
  captionpos=b,
  keepspaces=true,
  columns=fullflexible,
}
\lstset{style=matlabstyle}

% ----------------------- DOCUMENT --------------------------
\begin{document}

\pagenumbering{gobble}
\tableofcontents
\clearpage
\pagenumbering{arabic}

% -----------------------------------------------------------
\section{Введение}

Современные системы автоматического управления широко используют
методы модального синтеза, позволяющие размещать полюса дискретной
или непрерывной системы в заранее выбранных положениях.
Одновременно с регулятором состояния нередко применяется наблюдатель,
предоставляющий оценки недоступных напрямую переменных состояния.
Качество функционирования замкнутой системы определяется не только
выбором матрицы усиления регулятора, но и динамическими свойствами
наблюдателя.

В данной лабораторной работе исследуются:

\begin{itemize}
    \item влияние периода дискретизации $T_0$ на переходные процессы;
    \item влияние быстродействия наблюдателя на качество регулирования;
    \item влияние ошибки начальных условий наблюдателя.
\end{itemize}

Для варианта~1 задана матричная модель непрерывного объекта в
пространстве состояний, по которой выполняется дискретизация и
синтез регулятора состояния методом размещения полюсов.

% -----------------------------------------------------------
\section{Цель работы}

Цель лабораторной работы — изучить методы дискретизации
непрерывных систем и синтезировать дискретный регулятор состояния и
наблюдатель, исследовав влияние динамики наблюдателя и периода
дискретизации на поведение замкнутой системы.

% -----------------------------------------------------------
\section{Постановка задач}

В соответствии с заданием необходимо:

\begin{enumerate}
    \item Выполнить дискретизацию непрерывной системы при нескольких периодах дискретизации $T_0$.
    \item Проверить управляемость и наблюдаемость дискретной модели.
    \item Синтезировать регулятор состояния методом размещения полюсов.
    \item Найти коэффициент $k_0$, обеспечивающий нулевую статическую ошибку.
    \item Синтезировать наблюдатель с «быстрыми» полюсами, а также наблюдатель с «медленными» полюсами.
    \item Исследовать влияние:
          \begin{itemize}
              \item периода дискретизации;
              \item выбора полюсов наблюдателя;
              \item ошибки начальных условий $\hat{x}(0)\neq x(0)$.
          \end{itemize}
    \item Выполнить моделирование переходных процессов.
\end{enumerate}

% -----------------------------------------------------------
\section{Структурная схема модели}

Моделирование проводилось в среде \texttt{Simulink}. Используемая
структура системы показана на рис.~\ref{fig:scheme}.

\begin{figure}[H]
    \centering
    \includegraphics[width=0.95\linewidth]{img/scheme.png}
    \caption{Схема системы с регулятором и наблюдателем}
    \label{fig:scheme}
\end{figure}

На схеме видно:

\begin{itemize}
    \item блок \texttt{State-Space} реализует объект управления;
    \item регулятор формирует $u(k) = -K\hat{x}(k) + k_0 w(k)$;
    \item наблюдатель реализован по уравнению:
          \[
              \hat{x}(k+1) = A_d\hat{x}(k) + B_d u(k) + L \big(y(k)-\hat{y}(k)\big);
          \]
    \item выход объекта положительной обратной связью подаётся на наблюдатель.
\end{itemize}

Такая структура полностью соответствует аналитической модели.

% -----------------------------------------------------------
\section{Переходные характеристики замкнутой системы}

Проведено моделирование при трёх значениях периода дискретизации:
\[
T_0 \in \{0.1;\;1;\;10\}\;\text{с}.
\]

На рис.~\ref{fig:perehod} представлены переходные характеристики $y(t)$.

\begin{figure}[H]
    \centering
    \includegraphics[width=0.95\linewidth]{img/perehodnaya_har.png}
    \caption{Переходные характеристики замкнутой системы при различных $T_0$}
    \label{fig:perehod}
\end{figure}

Анализ графиков:

\begin{itemize}
    \item при $T_0=0.1$~с система обладает наибольшим быстродействием:
          установление занимает около 2–3 секунд;
    \item при $T_0=1$~с динамика замедляется примерно в 10 раз,
          но форма переходного процесса остаётся гладкой;
    \item при $T_0=10$~с переходный процесс растягивается до сотен секунд,
          однако устойчивость не нарушается.
\end{itemize}

Таким образом, увеличение периода дискретизации приводит к ухудшению
быстродействия, но структура системы остаётся корректно функционирующей.

% -----------------------------------------------------------
\section{Влияние параметров наблюдателя}

На рис.~\ref{fig:observer} приведены переходные процессы для трёх случаев:

\begin{itemize}
    \item быстрый наблюдатель, $\hat{x}(0)=0$;
    \item медленный наблюдатель, $\hat{x}(0)=0$;
    \item быстрый наблюдатель, но $\hat{x}(0)\neq 0$.
\end{itemize}

\begin{figure}[H]
    \centering
    \includegraphics[width=0.95\linewidth]{img/nablyudatel.png}
    \caption{Влияние параметров наблюдателя на переходный процесс}
    \label{fig:observer}
\end{figure}

### Быстрый наблюдатель, $\hat{x}(0)=0$

Полюса наблюдателя заданы значительно быстрее, чем полюса системы.  
Наблюдение:

\begin{itemize}
    \item выход $y(t)$ практически совпадает с эталонным переходным процессом;
    \item наблюдатель быстро подавляет ошибку оценивания;
    \item перерегулирование отсутствует.
\end{itemize}

### Медленный наблюдатель, $\hat{x}(0)=0$

Полюса близки к единичной окружности:
\[
p_{\text{obs}} = \{0.9,\;0.92,\;0.95\}.
\]

Наблюдение:

\begin{itemize}
    \item переходный процесс становится заметно медленнее;
    \item нарастание выходного сигнала более плавное;
    \item наблюдатель «тормозит» замкнутую систему.
\end{itemize}

### Быстрый наблюдатель, $\hat{x}(0)\neq 0$

Начальная оценка задана как:
\[
\hat{x}(0)= [5\;5\;5]^T.
\]

Наблюдение:

\begin{itemize}
    \item возникает огромный бросок выхода ($\sim10^5$);
    \item быстрая динамика наблюдателя усиливает ошибку начальных условий;
    \item система после кратковременного выброса остаётся устойчивой и затухает.
\end{itemize}

Этот случай показывает: **быстрые наблюдатели требуют точной инициализации**, иначе возможны большие переходные перенапряжения.

% -----------------------------------------------------------
\section{Общие выводы}

По результатам работы можно сделать следующие выводы:

\begin{enumerate}
    \item Увеличение периода дискретизации $T_0$ приводит к замедлению переходного процесса, однако структура системы остаётся устойчивой.
    \item Быстрый наблюдатель обеспечивает высокое качество переходного процесса и быстрое затухание ошибки оценивания.
    \item Медленный наблюдатель ухудшает динамику системы и снижает быстродействие.
    \item Ошибка начальных условий наблюдателя при его высокой скорости может вызывать огромные кратковременные выбросы выходной величины.
    \item Для реальных систем важно правильно выбирать компромисс между быстродействием наблюдателя и чувствительностью к ошибкам инициализации.
\end{enumerate}

% -----------------------------------------------------------
\section*{Приложение. MATLAB-код}
\addcontentsline{toc}{section}{Приложение. MATLAB-код}

\begin{lstlisting}[caption={Основной скрипт лабораторной работы},label={lst:lab4}]
clc; clear; close all;

A = [-39   -71   -23;
      23    40    13;
     -6.6 -10.7  -3.3];

B = [0.228; -0.127; 0.038];
C = [28000 84000 112000];
D = 0;

T0_list = [0.1 1 10];
p_cl    = [0.5 0.6 0.7];
x0      = [0;0;0];
xhat0   = [0;0;0];
Nsteps  = 200;

results = struct([]);

for k = 1:numel(T0_list)

    T0 = T0_list(k);
    fprintf('\n==============================\n');
    fprintf('PERIOD T0 = %.1f s\n', T0);
    fprintf('==============================\n');

    sysd = c2d(ss(A,B,C,D), T0, 'zoh');
    [Ad,Bd,Cd,Dd] = ssdata(sysd);

    rWc = rank(ctrb(Ad,Bd));
    rWo = rank(obsv(Ad,Cd));
    fprintf('rank(Wc)=%d, rank(Wo)=%d\n', rWc, rWo);

    K = place(Ad, Bd, p_cl);
    fprintf('K =\n'); disp(K);

    sys_cl = ss(Ad - Bd*K, Bd, Cd, 0, T0);
    dc = dcgain(sys_cl);
    k0 = 1/dc;
    fprintf('k0 = %.6g\n', k0);

    p_obs = p_cl.^2;
    L = place(Ad', Cd', p_obs)';  
    fprintf('L =\n'); disp(L);

    Ablock = Ad - Bd*K - L*Cd;
    Bblock = [Bd*k0, L];
    Cblock = -K;
    Dblock = [k0, 0];

    results(k).T0 = T0;
    results(k).Ad = Ad;  results(k).Bd = Bd;  results(k).Cd = Cd;
    results(k).K  = K;   results(k).k0 = k0;
    results(k).L  = L;
    results(k).Ablock = Ablock; 
    results(k).Bblock = Bblock;
    results(k).Cblock = Cblock;
    results(k).Dblock = Dblock;
end

%% Step response of closed-loop system
figure('Name','Step responses of closed-loop system');

for k = 1:numel(T0_list)

    T0 = results(k).T0;

    Ablock = results(k).Ablock;
    Bblock = results(k).Bblock;
    Cblock = results(k).Cblock;
    Dblock = results(k).Dblock;

    sys_ctrl = ss(Ablock, Bblock, Cblock, Dblock, T0);

    Ad = results(k).Ad; Bd = results(k).Bd; Cd = results(k).Cd;
    K  = results(k).K;  k0 = results(k).k0;

    sys_closed = ss(Ad - Bd*K, Bd*k0, Cd, 0, T0);

    t = (0:Nsteps)*T0;
    w = ones(size(t));    
    y = lsim(sys_closed, w, t);

    subplot(3,1,k);
    stairs(t,y,'LineWidth',1.4);
    grid on;
    xlabel('t, s'); ylabel('y');
    title(sprintf('Closed-loop step response, T0 = %.1f',T0));
end

%% Observer influence (fast/slow, different xhat0)
T0 = 1;
idx = find([results.T0] == T0);

Ad = results(idx).Ad;
Bd = results(idx).Bd;
Cd = results(idx).Cd;

K  = results(idx).K;
k0 = results(idx).k0;

L_fast = results(idx).L;

p_obs_slow = [0.9 0.92 0.95];
L_slow = place(Ad', Cd', p_obs_slow).';

figure('Name','Observer influence on step response');

cases = { ...
    struct('L', L_fast, 'xhat0', [0;0;0], 'title', 'Fast observer, xhat(0)=0'), ...
    struct('L', L_slow, 'xhat0', [0;0;0], 'title', 'Slow observer, xhat(0)=0'), ...
    struct('L', L_fast, 'xhat0', [5;5;5], 'title', 'Fast observer, xhat(0)!=0') ...
};

x0 = [0;0;0];
t  = 0:T0:60;
w  = ones(size(t));

for i = 1:numel(cases)
    L = cases{i}.L;
    xhat0 = cases{i}.xhat0;

    Acl = [Ad          -Bd*K;
           L*Cd  Ad - Bd*K - L*Cd];

    Bcl = [Bd*k0;
           Bd*k0];

    Ccl = [Cd  zeros(size(Cd))];
    Dcl = 0;

    sys_obs = ss(Acl, Bcl, Ccl, Dcl, T0);

    z0 = [x0; xhat0];
    [y, t_out] = lsim(sys_obs, w, t, z0);

    subplot(3,1,i);
    stairs(t_out, y, 'LineWidth', 1.4);
    grid on;
    xlabel('t, s'); ylabel('y(t)');
    title(cases{i}.title);
    fprintf('y(end) = %.6f\n', y(end));
end
\end{lstlisting}

\end{document}
