exponenta event banner

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

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

Добавьте блоки моделирования модели в модель Simulink из библиотеки блоков Toolbox™ идентификации системы, если необходимо:

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

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

Сводка блоков моделирования

Следующие блоки модели доступны в библиотеке инструментов идентификации системы в Simulink.

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

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

  • Использование блока «Из рабочей области», если один образец входных данных является скаляром или вектором

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

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

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

Если модель не находится в состоянии покоя в начале моделирования, необходимо указать исходные условия. Модель может не начинаться в состоянии покоя, например, в следующих случаях:

  • Сравнение отклика модели с измеренными выходными данными или предыдущим моделированием

  • Продолжение предыдущего моделирования

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

  • Инициирование моделирования из заданного рабочего состояния

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

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

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

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

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

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

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

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

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

mss = idss(m);
Затем использовать mss в параметре Identified блока 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 Source, Idmodel и Scope. Следующие параметры блока были предварительно сконфигурированы для определения данных моделирования, расчетной модели и начальных условий.

Параметры блока источника Iddata:

  • Объект IDDATA - z2

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

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

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

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

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

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

X0est = 0*X0est;

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

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

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

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

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

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

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

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

Загрузите образцы данных.

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 Source, Hammerstein-Wiener Model и Scope. Следующие параметры блока предварительно сконфигурированы для определения оценочных данных, оценочной модели и начальных условий:

Параметры блока источника Iddata:

  • Объект IDDATA - z1

Параметры блока модели Хаммерштейна-Винера:

  • Модель - mw1

  • Исходные условия - Zero (по умолчанию)

Запустите моделирование.

Просмотрите разницу между измеренными выходными данными и выходными данными модели с помощью блока «Область».

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

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

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

Установите значение параметра Initial conditions block блока Hammerstein-Wiener Model в значение State Values. Начальные состояния по умолчанию: x0.

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

Снова запустите моделирование и просмотрите разницу между измеренными выходными данными и выходными данными модели в блоке «Область». Теперь разница между измеренными и смоделированными откликами уменьшается.

simOut = sim(model);

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

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

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

Моделирование нелинейной модели ARX в Simulink

В этом примере показано, как сравнить моделируемый выходной сигнал блока нелинейной модели 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 Source, Nonlinear ARX Model и Scope. Для определения оценочных данных, оценочной модели и уровней ввода и вывода предварительно сконфигурированы следующие параметры блока:

Параметры блока источника Iddata:

  • Объект IDDATA - z1

Параметры блока нелинейной модели ARX:

  • Модель - mnlarx1

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

  • Входной уровень - 10

  • Уровень выхода - 0,1

Запустите моделирование.

Просмотрите разницу между измеренными выходными данными и выходными данными модели с помощью блока «Область».

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

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

x0 = findstates(mnlarx1,z1,Inf);

Задайте значение параметра Initial Conditions для блока Nonlinear ARX Model равным State Values. Укажите начальные состояния как x0.

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

Снова запустите моделирование и просмотрите разницу между измеренными выходными данными и выходными данными модели в блоке «Область». Теперь разница между измеренными и смоделированными откликами уменьшается.

simOut = sim(model);

См. также

| | | |

Связанные темы