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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Инициирование вашей симуляции из предопределенного рабочего условия

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

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

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

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

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

Если вы уже выполнили симуляцию, используя compare, simили System Identification приложение, и вы хотите проверить свою реализацию Simulink путем точного воспроизведения ваших более ранних результатов, см., Воспроизведение командной строки или Системы идентификации результатов симуляции приложения в 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 Source, Idmodel и Scope. Следующие параметры блоков были предварительно сконфигурированы, чтобы задать данные моделирования, предполагаемую модель и начальные условия.

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

  • Объект IDDATA - z2

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

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

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

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

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

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

X0est = 0*X0est;

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

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

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

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

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

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

Симулируйте модель Гаммерштейна-Винера в Simulink

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

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

  • Объект IDDATA - z1

Параметры блоков блока Hammerstein-Wiener 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);

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

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

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

simOut = sim(model);

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

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

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

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

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

Загрузите выборочные данные и создайте 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

Параметры блоков блока Nonlinear ARX Model:

  • Модель - mnlarx1

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

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

  • Выходной уровень - 0,1

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

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

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

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

x0 = findstates(mnlarx1,z1,Inf);

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

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

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

simOut = sim(model);

См. также

| | | |

Похожие темы