После оценки модели в командной строке или в приложении 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 Source, если входные данные находится в iddata
объект
Для получения дальнейшей информации о том, как сконфигурировать блоки, смотрите соответствующие страницы с описанием блока.
Когда ваша модель не в покое в начале симуляции, необходимо задать начальные условия. Модель не может запуститься в покое, например, когда вы:
Сравнение ответа модели с измеренными выходными данными или предыдущей симуляции
Продолжение от предыдущей симуляции
Инициирование симуляции во время установившейся фазы
Инициирование симуляции от предопределенных условий работы
Если вы не задаете начальные условия, вы вводите ошибочный источник, который влияет на очевидную производительность вашей модели. Эта ошибка может быть переходной; в модели, которая слегка ослабляется или включает интегральный компонент, не может полностью вымереть ошибка.
Определение начальных условий требует двух шагов:
Определите то, чем должны быть начальные условия (см. Оценочные Начальные условия для Симуляции Идентифицированных Моделей),
Задайте эти значения как параметры в блоке модели.
Если у вас есть линейная модель, которая не является 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. Можно теперь задать начальные состояния как описано в предыдущем абзаце для моделей в пространстве состояний.В этом примере показано, как установить начальные состояния для симуляции линейной модели, таким образом, что симуляция обеспечивает лучшую подгонку к измеренным данным ввода - вывода.
Вы сначала оцениваете модель 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 Model.
Сравните симулированный выход блока 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, смотрите idnlarx
страница с описанием.
Для симуляции нелинейных моделей ARX можно задать начальные условия как значения ввода/вывода, или как вектор. Для получения дополнительной информации об определении начальных условий для симуляции, смотрите страницу с описанием IDNLARX Model.
В этом примере показано, как сравнить симулированный выход Нелинейного блока 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);
IDNLARX Model | IDNLHW Model | Iddata Sink | Iddata Source | Idmodel