Моделируйте идентифицированную модель в Simulink

После оценки модели в командной строке или в приложении System Identification, можно импортировать модель из рабочей области MATLAB® в Simulink® с помощью блоков модели. Можно затем моделировать образцовый вывод для начальных условий и образцовые входные параметры, которые вы задаете.

Добавьте блоки симуляции модели в свою модель Simulink от библиотеки блоков System Identification Toolbox™ когда это необходимо к:

  • Представляйте динамику физического компонента в модели Simulink с помощью основанной на данных модели

  • Замените комплексную Подсистему Simulink на более простую основанную на данных модель

Сводные данные блоков симуляции

Следующие блоки модели доступны в библиотеке System Identification Toolbox в Simulink.

БлокОписание
IdmodelМоделируйте линейную идентифицированную модель в программном обеспечении Simulink. Модель может быть процессом (idproc), линейный полином (idpoly), пространство состояний (idss), серое поле (idgrey) или модель (idtf) передаточной функции.
Нелинейная модель ARXМоделируйте модель idnlarx в Simulink.
Модель Хаммерстайна-ВинераМоделируйте модель idnlhw в Simulink.
Нелинейная модель Серого ПоляМоделируйте нелинейное ОДУ (объект модели idnlgrey) в Simulink.

В любом из этих блоков модели вы задаете образцовое имя переменной идентифицированной модели, которую вы хотите импортировать. Вы также задаете начальные условия для симуляции (см. Начальные условия Определения для Симуляции.) Можно задать входные данные временного интервала:

  • Используя блок From Workspace, если одна выборка входных данных является скаляром или вектором

  • Используя Исходный блок Iddata, если входные данные находится в объекте iddata

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

Определение начальных условий для симуляции

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

  • Сравнение образцового ответа с измеренными выходными данными или предыдущей симуляции

  • Продолжение от предыдущей симуляции

  • Инициирование симуляции во время установившейся фазы

  • Инициирование симуляции от предопределенных условий работы

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

Определение начальных условий требует двух шагов:

  1. Определите то, чем должны быть начальные условия (см. Оценочные Начальные условия для Симуляции Идентифицированных Моделей),

  2. Задайте эти значения как параметры в блоке модели.

Если у вас есть линейная модель, которая не является idss или idgrey, также необходимо преобразовать модель в форму пространства состояний перед первым шагом.

Если вы уже выполнили симуляцию с помощью compare, sim или приложения System Identification, и вы хотите проверить свою реализацию Simulink путем точного репродуцирования более ранних результатов, видеть, Воспроизводят Командную строку или Результаты симуляции Приложения System Identification в Simulink.

Определение начальных состояний линейных моделей

Задавать начальные состояния для пространства состояний линейные модели (idss, idgrey), используют параметр Initial states (state space only: idss, idgrey) в блоке Idmodel. Начальные состояния должны быть вектором длины, равной порядку модели.

Другие типы линейной модели, такие как модели формы передаточной функции (idtf), не используют явное представление состояния. Блоки модели поэтому не имеют никакого входа для спецификации начального состояния; программное обеспечение принимает начальные условия нуля. Чтобы задать начальные условия для одной из этих моделей, сначала преобразуйте свою модель m в форму пространства состояний mss в командной строке.

mss = idss(m);
Затем используйте mss в параметре Identified model блока Idmodel. Можно теперь задать начальные состояния, как описано в предыдущем абзаце для моделей в пространстве состояний.

Моделируйте идентифицированную линейную модель в Simulink с начальными условиями

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

Вы сначала оцениваете модель M с помощью набора данных нескольких-экспериментов Z, который содержит данные из трех экспериментов - z1, z2 и z3.

Загрузите данные мультиэксперимента.

load(fullfile(matlabroot,'toolbox','ident','iddemos',...
'data', 'twobodiesdata'))

Создайте объект iddata хранить данные мультиэксперимента. Установите 'Tstart' на 0 так, чтобы время начала данных совпадало со временем начала Simulink 0f 0 с.

z1=iddata(y1,u1,0.005,'Tstart',0);
z2=iddata(y2,u2,0.005,'Tstart',0);
z3=iddata(y3,u3,0.005,'Tstart',0);
Z = merge(z1,z2,z3);

Оцените 5-ю модель в пространстве состояний порядка.

[M,x0] = n4sid(Z,5);

Чтобы моделировать модель с помощью входа u2, используйте x0(:,2) в качестве начальных состояний. x0(:,2) вычисляется, чтобы максимизировать подгонку между измеренным выводом y2 и моделируемым ответом M.

Извлеките начальные состояния, которые максимизируют подгонку к соответствующему выводу y2 и моделируют модель в Simulink с помощью второго эксперимента, z2.

X0est = x0(:,2);

Откройте предварительно сконфигурированную модель Simulink.

mdl = 'ex_idmodel_block';
open_system(mdl)

Модель использует Источник Iddata, Idmodel и блоки Осциллографа. Следующие параметры блоков были предварительно сконфигурированы, чтобы задать данные моделирования, оцененную модель и начальные условия.

Параметры блоков Исходного блока Iddata:

  • Объект IDDATA - z2

Параметры блоков блока Idmodel:

  • Идентифицированная модель - M

  • Начальные состояния - X0est

Моделируйте модель в течение двух секунд и сравните моделируемый вывод ysim с измеренным выводом ymeasured с помощью блока Scope.

simOut = sim(mdl);
open_system([mdl '/Scope'])

Сравните этот результат с результатом, который вы получили бы, не устанавливая начальные условия. Можно аннулировать X0 в поле начальных состояний блока модели Simulink, заменив переменную X0est на 0. Можно также аннулировать сам X0est в командной строке, как показано здесь.

X0est = 0*X0est;

Запустите симуляцию и просмотрите новые результаты.

simOut = sim(mdl);
open_system([mdl '/Scope'])

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

Определение начальных состояний моделей Хаммерстайна-Винера

Состояния модели Хаммерстайна-Винера соответствуют состояниям встроенного линейного (idpoly или idss) модель. Для получения дополнительной информации о состояниях модели Хаммерстайна-Винера, смотрите страницу с описанием idnlhw.

Начальное состояние по умолчанию для симуляции модели Хаммерстайна-Винера 0. Для получения дополнительной информации об определении начальных условий для симуляции, смотрите страницу Модели - ссылки IDNLHW.

Моделируйте модель Хаммерстайна-Винера в Simulink

Сравните моделируемый вывод блока Model Хаммерстайна-Винера к измеренному выводу системы. Вы улучшаете соглашение между измеренными и моделируемыми ответами путем оценки значений начального состояния.

Загрузите выборочные данные.

load twotankdata

Создайте объект iddata из выборочных данных. Установите 'Tstart' на 0 так, чтобы время начала данных совпадало со временем начала Simulink 0f 0 с.

z1 = iddata(y,u,0.2,'Tstart',0,'Name','Two tank system');

Оцените модель Хаммерстайна-Винера использование данных.

mw1 = nlhw(z1,[1 5 3],pwlinear,pwlinear);

Можно теперь моделировать вывод предполагаемой модели в Simulink с помощью входных данных в z1. Для этого откройте предварительно сконфигурированную модель Simulink.

model = 'ex_idnlhw_block';
open_system(model);

Модель использует Источник Iddata, Модель Хаммерстайна-Винера и блоки Осциллографа. Следующие параметры блоков были предварительно сконфигурированы, чтобы задать данные об оценке, оцененную модель и начальные условия:

Параметры блоков Исходного блока Iddata:

  • Объект IDDATA - z1

Параметры блоков блока Model Хаммерстайна-Винера:

  • Модель - mw1

  • Начальные условия - Zero (значение по умолчанию)

Запустите симуляцию.

Просмотрите различие между измеренным выводом и образцовым выводом при помощи блока Scope.

simOut = sim(model);
open_system([model '/Scope'])

Чтобы улучшить соглашение между измеренными и моделируемыми ответами, оцените вектор начального состояния для модели от данных об оценке z1, с помощью findstates. Задайте максимальное количество итераций для оценки как 100. Задайте горизонт прогноза как Inf, так, чтобы алгоритм вычислил начальные состояния, которые минимизируют ошибку симуляции.

opt = findstatesOptions;
opt.SearchOptions.MaxIterations = 100;
x0 = findstates(mw1,z1,Inf,opt);

Установите значение параметров блоков Начальных условий блока Model Хаммерстайна-Винера к State Values. Начальными состояниями по умолчанию является x0.

set_param([model '/Hammerstein-Wiener Model'],'IC','State values');

Запустите симуляцию снова и просмотрите различие между измеренным выводом и образцовым выводом в блоке Scope. Различие между измеренными и моделируемыми ответами теперь уменьшается.

simOut = sim(model);

Определение начальных состояний нелинейных моделей ARX

Состояния нелинейной модели ARX соответствуют динамическим элементам нелинейной структуры модели ARX, которые являются образцовыми регрессорами. Регрессоры могут быть задержанными переменными ввода/вывода (стандартные регрессоры) или пользовательские преобразования задержанных переменных ввода/вывода (пользовательские регрессоры). Для получения дополнительной информации о состояниях нелинейной модели ARX, смотрите страницу с описанием idnlarx.

Для симуляции нелинейных моделей ARX можно задать начальные условия как значения ввода/вывода, или как вектор. Для получения дополнительной информации об определении начальных условий для симуляции, смотрите страницу Модели - ссылки IDNLARX.

Моделируйте нелинейную модель ARX в Simulink

Этот пример показывает, как сравнить моделируемый вывод Нелинейного блока Model ARX к измеренному выводу системы. Вы улучшаете соглашение между измеренными и моделируемыми ответами путем оценки значений начального состояния.

Загрузите выборочные данные и создайте объект iddata. Установите 'Tstart' на 0 так, чтобы время начала данных совпадало со временем начала Simulink 0f 0 с.

load twotankdata
z = iddata(y,u,0.2,'Tstart',0,'Name','Two tank system');
z1 = z(1:1000);

Оцените нелинейную модель ARX.

mnlarx1 = nlarx(z1,[5 1 3],wavenet('NumberOfUnits',8));

Можно теперь моделировать вывод предполагаемой модели в Simulink с помощью входных данных в z1. Для этого откройте предварительно сконфигурированную модель Simulink.

model = 'ex_idnlarx_block';
open_system(model);

Модель использует Источник Iddata, Нелинейную Модель ARX и блоки Осциллографа. Следующие параметры блоков были предварительно сконфигурированы, чтобы задать данные об оценке, оцененную модель и уровни ввода и вывода:

Параметры блоков Исходного блока Iddata:

  • Объект IDDATA - z1

Параметры блоков Нелинейного блока Model ARX:

  • Модель - mnlarx1

  • Начальные условия - значения Ввода и вывода (значение по умолчанию)

  • Уровень на входе - 10

  • Уровень на выходе - 0.1

Запустите симуляцию.

Просмотрите различие между измеренным выводом и образцовым выводом при помощи блока Scope.

simOut = sim(model);
open_system([model '/Scope'])

Чтобы улучшить соглашение между измеренными и моделируемыми ответами, оцените вектор начального состояния для модели от данных об оценке, z1.

x0 = findstates(mnlarx1,z1,Inf);

Установите значение параметров блоков Начальных условий Нелинейного блока Model ARX к State Values. Задайте начальные состояния как x0.

set_param([model '/Nonlinear ARX Model'],'ICspec','State values','X0','x0');

Запустите симуляцию снова и просмотрите различие между измеренным выводом и образцовым выводом в блоке Scope. Различие между измеренными и моделируемыми ответами теперь уменьшается.

simOut = sim(model);

Смотрите также

| | | |

Похожие темы