exponenta event banner

Оценка моделей непрерывного времени с использованием данных Simulink

В этом примере показано, как модели, смоделированные в Simulink ®, могут быть идентифицированы с помощью Toolbox™ идентификации системы. В примере описывается, как работать с системами непрерывного времени и задержками, а также важность интерсамплярного поведения входных данных.

if exist('start_simulink','file')~=2
    disp('This example requires Simulink.')
    return
end

This example requires Simulink.

Получение данных моделирования из модели 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 дает очень хорошее описание данных. Таким образом, мы выберем эту модель в качестве окончательного результата.

Преобразование дискретной модели в непрерывное время (LTI)

Преобразуйте эту модель в непрерывное время и представляйте ее в виде передаточной функции:

mc = d2c(m4);
idtf(mc)

Было получено хорошее описание системы, как показано выше.

Непосредственная оценка модели непрерывного времени

Модель непрерывного времени также может быть оценена непосредственно. Дискретная модель m4 имеет 2 задержки на входе выборки, которая представляет задержку в 1 секунду. Мы используем ssest команда для этой оценки:

m5 = ssest(dat1e,1,'Feedthrough',false,'InputDelay',1);
present(m5)

Анализ неопределенности

Параметры модели m5 демонстрируют высокие уровни неопределенности, даже если модель соответствует данным 87%. Это происходит потому, что модель использует больше параметров, чем требуется, что приводит к потере уникальности в оценках параметров. Чтобы увидеть истинный эффект неопределенности в модели, существует два возможных подхода:

  1. Рассматривайте неопределенность как доверительные границы реакции модели, а не параметров.

  2. Оцените модель в каноническом виде.

Позвольте использовать оба подхода. Сначала мы оцениваем модель в канонической форме.

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');