В этом примере показано, как модели, смоделированные в Simulink ®, могут быть идентифицированы с помощью Toolbox™ идентификации системы. В примере описывается, как работать с системами непрерывного времени и задержками, а также важность интерсамплярного поведения входных данных.
if exist('start_simulink','file')~=2 disp('This example requires Simulink.') return end
This example requires Simulink.
Рассмотрим систему, описанную в следующей модели Simulink:
open_system('iddemsl1') set_param('iddemsl1/Random Number','seed','0')
Красная часть - система, синяя часть - контроллер, а опорный сигнал - стреловидная синусоида (сигнал чирпа). Время выборки данных устанавливается равным 0,5 секунды.
Эта система может быть представлена с помощью idpoly структура:
m0 = idpoly(1,0.1,1,1,[1 0.5],'Ts',0,'InputDelay',1,'NoiseVariance',0.01)
Смоделировать модель iddemsl1 и сохраните данные в iddata объект:
sim('iddemsl1') dat1e = iddata(y,u,0.5); % The IDDATA object
Давайте сделаем второе моделирование режима для целей проверки.
set_param('iddemsl1/Random Number','seed','13') sim('iddemsl1') dat1v = iddata(y,u,0.5);
Рассмотрим оценочные данные, полученные при первом моделировании:
plot(dat1e)
Начнем с оценки дискретной модели порядка по умолчанию, чтобы получить некоторое предварительное представление о характеристиках данных:
m1 = n4sid(dat1e, 'best') % A default order model
Проверьте, насколько хорошо модель воспроизводит данные проверки
compare(dat1v,m1)
Как наблюдалось, данные проверки хорошо прогнозируются моделью. Чтобы подробнее изучить характеристики данных, давайте проверим непараметрическую импульсную характеристику, вычисленную с помощью dat1e где автоматически определяются отрицательные задержки для анализа:
ImpModel = impulseest(dat1e,[],'negative');
clf
h = impulseplot(ImpModel);
showConfidence(h,3)
ImpModel - FIR-модель, порядок (количество коэффициентов) которой определяется автоматически. Мы также выбираем анализ эффектов обратной связи путем вычисления импульсной характеристики для отрицательных задержек. Влияния от отрицательных лагов не все незначительны. Это связано с регулятором (выходной обратной связью). Это означает, что оценка импульсной характеристики не может быть использована для определения временной задержки. Вместо этого создайте несколько ARX-моделей низкого порядка с различными задержками и выясните наилучшее соответствие:
V = arxstruc(dat1e,dat1v,struc(1:2,1:2,1:10));
nn = selstruc(V,0) %delay is the third element of nn
Задержка определяется как 3 задержки. (Это правильно: время ожидания 1 секунды дает две задержки запаздывания, а ZOH-блок - еще одну.) Соответствующая модель ARX также может быть вычислена следующим образом:
m2 = arx(dat1e,nn) compare(dat1v,m1,m2);
Две модели m1 и m2 вести себя аналогично при моделировании. Давайте попробуем отрегулировать порядок и задержки. Зафиксируйте задержку на 2 (что в сочетании с отсутствием прохождения дает чистую задержку в 3 выборки) и найдите модель состояния-пространства заказа по умолчанию с этой задержкой:
m3 = n4sid(dat1e,'best','InputDelay',2,'Feedthrough',false); % Refinement for prediction error minimization using pem (could also use % |ssest|) m3 = pem(dat1e, m3);
Рассмотрим оценочную системную матрицу
m3.a % the A-matrix of the resulting model
Автоматически выбирается динамика третьего порядка, которая вместе с 2 «лишними» задержками даёт модель пространства состояния 5-го порядка.
Всегда желательно не полагаться вслепую на автоматический выбор заказа. На них влияют случайные ошибки. Хороший способ - посмотреть на нули и полюса модели, а также на доверительные области:
clf
h = iopzplot(m3);
showConfidence(h,2) % Confidence region corresponding to 2 standard deviations
Очевидно, что два полюса/нуля на единичной окружности, по-видимому, отменяются, что указывает на то, что динамика первого порядка может быть достаточной. Используя эту информацию, давайте сделаем новую оценку первого порядка:
m4 = ssest(dat1e,1,'Feedthrough',false,'InputDelay',2,'Ts',dat1e.Ts); compare(dat1v,m4,m3,m1)
compare график показывает, что простая модель первого порядка m4 дает очень хорошее описание данных. Таким образом, мы выберем эту модель в качестве окончательного результата.
Преобразуйте эту модель в непрерывное время и представляйте ее в виде передаточной функции:
mc = d2c(m4); idtf(mc)
Было получено хорошее описание системы, как показано выше.
Модель непрерывного времени также может быть оценена непосредственно. Дискретная модель m4 имеет 2 задержки на входе выборки, которая представляет задержку в 1 секунду. Мы используем ssest команда для этой оценки:
m5 = ssest(dat1e,1,'Feedthrough',false,'InputDelay',1); present(m5)
Параметры модели m5 демонстрируют высокие уровни неопределенности, даже если модель соответствует данным 87%. Это происходит потому, что модель использует больше параметров, чем требуется, что приводит к потере уникальности в оценках параметров. Чтобы увидеть истинный эффект неопределенности в модели, существует два возможных подхода:
Рассматривайте неопределенность как доверительные границы реакции модели, а не параметров.
Оцените модель в каноническом виде.
Позвольте использовать оба подхода. Сначала мы оцениваем модель в канонической форме.
m5Canon = ssest(dat1e,1,'Feedthrough',false,'InputDelay',1,'Form','canonical'); present(m5Canon)
m5Canon использует каноническую параметризацию модели. Он соответствует оценочным данным так же хорошо, как и модель m5. Он показывает небольшие неопределенности в значениях его параметров, что свидетельствует о его надежности. Однако, как мы видели для m5большая неопределенность не обязательно означает «плохую» модель. Чтобы установить качество этих моделей, позвольте использовать просмотр их ответов во временных и частотных областях с доверительными областями, соответствующими 3 стандартным отклонениям. Мы также построим график исходной системы m0 для сравнения.
Модный сюжет.
clf opt = bodeoptions; opt.FreqScale = 'linear'; h = bodeplot(m0,m5,m5Canon,opt); showConfidence(h,3) legend show
График шага.
clf
showConfidence(stepplot(m0,m5,m5Canon),3)
legend show
Границы неопределенности для двух моделей практически идентичны. Мы можем аналогично генерировать карту полюс-ноль (iopzplot) и Найквистский сюжет (nyquistplot) с доверительными областями для этих моделей.
idtf(m5)
При сравнении непрерывных временных моделей, вычисленных из дискретизированных данных, важно учитывать интерсимпульсное поведение входного сигнала. В данном примере вход в систему был штучным постоянным из-за схемы Zero-order-Hold (zoh) в контроллере. Теперь удалите эту цепь и подумайте о действительно непрерывной системе. Входной и выходной сигналы по-прежнему дискретизированы на частоте 2 Гц, и все остальное одинаково:
open_system('iddemsl3') sim('iddemsl3') dat2e = iddata(y,u,0.5);
Дискретные временные модели по-прежнему будут хорошо работать с этими данными, поскольку, когда они подстраиваются под измерения, они будут включать в себя свойства выборки и поведение ввода между выборками (для текущего ввода). Однако при построении непрерывных моделей времени важно знать свойства интерсампл. Сначала создайте модель так же, как для случая ZOH:
m6 = ssest(dat2e,1,'Feedthrough',false,'InputDelay',1,'Form','canonical'); idtf(m6)
Сравним оценочную модель (m6) против истинной модели (m0):
step(m6,m0) % Compare with true system
Соглашение сейчас не так уж и хорошо. Однако мы можем включить в объект данных информацию о вводе. В качестве аппроксимации пусть она будет описана как кусочно-линейная (First-order-hold, FOH) между моментами выборки. Эта информация затем используется оценщиком для надлежащей выборки:
dat2e.Intersample = 'foh'; m7 = ssest(dat2e,1,'Feedthrough',false,'InputDelay',1,'Form','canonical'); % new estimation with correct intersample behavior idtf(m7)
Рассмотрим сравнение ответа на шаг еще раз:
step(m7,m0) % Compare with true system
Эта модель (m7) дает гораздо лучший результат, чем m6. На этом этот пример завершается.
bdclose('iddemsl1'); bdclose('iddemsl3');