С железа он только снял данные с осциллоскопа. Все графики были из Octave. На пальцах это можно показать так.
1) Поставить Octave с пакетом control (выше ссылки). Он запускал из комманд лине но там есть, что то вроде интерактивного ИДЕ в виде окон.
2) Поиграть со скриптом (сделал регресию че он там показывал а то видно небыло).
#подключаем пакет
pkg load control
#-----------------
#шаг 1 (готовим тестовые данные)
#определяем "s" - это типа пустая непрерывно временная передаточная функция
#если s появляется в выражениях, то тогда известно, что операции на полиномах передаточных функций и результат будет
#передаточная функция
s = tf('s');
#делаем модельку, скажем цепочки РЛЦ
R=1;
L=1;
C=1;
# а вот и сама передаточная функция
rlc=1/(R+L*s+1/(C*s));
# получаем ответ на еденичное возмущение
[y,ts1,x]=step(rlc);
# причесываем данные.
in = [zeros(101,1); ones(101,1)];
y = [zeros(101,1); y]
# в D данные в формате необходимом для анализа.
D = iddata(y,in,0.2);
# можно посмотреть
plot(D);
#-----------------
#шаг 2. шаг 1 нужен был только для подготовки данных для анализа.
# запускаем System Identification. на вход подаем приготовленные данные.
# Консультант взял реальные данные из файла.
# внимание начало фокуса.
model = moen4(D,2);
# все. конец фокуса. Только на основании входных данных получили модель. Правда не в виде
# передаточной функции а в виде матрицы состояния.
# можно попробовать как новая модель работает. запускаем симуляцию. на вход подаем
# тотже ступеньчатый сигнал , чтобы было удобно посмотреть на разницу
[y1, t1, x1] = lsim(model,in,200)
# смотрим. y-оригинальный выход , y1-результат с симуляторя с изпользованием найденой модели
plot([in y y1])
# а вот и боде на основании найденой модели
bode(model)
Теоретически из модели состояния можно получить передаточную функцию есть такая
ss2tf. https://octave.sourceforge.io/signal/function/ss2tf.html
но у меня чета не получилось.