Воспроизведите командную строку или результаты симуляции приложения System Identification в Simulink

Если вы идентифицируете модель, можно симулировать ее в командной строке в приложении System Identification, или в Simulink®. Если вы начинаете с одного метода симуляции и мигрируете на второй метод, можно найти, что результаты точно не соответствуют. Это несоответствие не означает, что одна из симуляций реализована неправильно. Каждый метод использует уникальный алгоритм симуляции и приводит к результатам с небольшими числовыми различиями.

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

Начальные условия

Старший значащий источник изменения при попытке воспроизвести результаты обычно является начальными условиями. Начальные условия, которые вы задаете для симуляции в блоках Simulink, должны совпадать с начальными условиями, используемыми compare\sim, или приложение System Identification. Можно определить начальные условия, возвращенные в более ранних симуляциях. Или, если вы симулируете против данных об измерении, можно оценить новый набор начальных условий, которые лучше всего совпадают с теми данными. Затем примените те условия к любым методам симуляции, которые вы используете. Для получения дополнительной информации об оценке начальных условий смотрите Оценочные Начальные условия для Симуляции Идентифицированных Моделей.

Если вы определили начальные условия x0 использовать в модели m и набор данных z, реализуйте их в своем инструменте симуляции.

  • Для compare или sim, используйте compareOptions или simOptions.

  • Для Simulink используйте Idmodel, Nonlinear ARX или блок Hammerstein-Weiner, задавая m для модели и x0 для начальных состояний. Со структурами Idmodel можно задать начальные состояния только для idss и idgrey модели. Если ваша линейная модель имеет какой-либо другой тип, преобразуйте его сначала в idss. Смотрите Симулируют Идентифицированную Модель в Simulink или соответствующих страницах с описанием блока.

  • Для приложения System Identification вы не можете задать начальные условия кроме нуля. Можно задать только метод вычисления их.

Время начала входных данных

В Simulink время начала значения по умолчанию симуляции является нулем, в то время как в приложении или командной строке время начала по умолчанию является шагом расчета данных.

Прежде, чем экспортировать iddata объект для симуляции в Simulink, набор объект Tstart свойство обнулить. Затем экспортируйте объект в Simulink с помощью блока Iddata Source.

Дискретизация данных непрерывного времени

Программное обеспечение Simulink принимает интерполяцию задержки первого порядка на входных данных.

При использовании compare\sim, или приложение, набор InterSample свойство вашего iddata возразите против 'foh'.

Решатели для моделей непрерывного времени

compare команда и приложение симулируют модель непрерывного времени первой дискретизацией модели с помощью c2d и затем распространение разностных уравнений. Значения по умолчанию Simulink к переменному шагу истинный решатель ОДУ. Чтобы лучше совпадать с распространением разностного уравнения, установите решатель в Simulink к решателю фиксированного шага, такому как ode5.

Совпадайте с Выходом sim Команда и нелинейный блок Model ARX

Воспроизведите командную строку sim результаты для предполагаемой нелинейной системы в Simulink. Когда у вас есть предполагаемая системная модель, можно симулировать ее любой с командной строкой sim команда или с Simulink. Эти два выходных параметров не соответствуют точно, если вы не основываете обе симуляции на тех же начальных условиях. Можно достигнуть этого соответствия путем оценки начальных условий в модели MATLAB и применения обоих в sim команда и в вашей модели Simulink.

Поскольку вы непосредственно сравниваете sim и результаты Simulink, также необходимо синхронизировать метки времени точек First Data путем установки первой метки времени в данных, Tstart к 0. Вы устанавливаете на этот раз, потому что по умолчанию симуляция командной строки присваивает шаг расчета первой метке времени, в то время как Simulink присваивает метку времени 0 секунд.

Загрузите данные об оценке, которые вы используете, чтобы идентифицировать нелинейную модель ARX. Создайте iddata объект данных из данных. Задайте шаг расчета как 0,2 секунды и Tstart как 0 секунд.

load twotankdata
z = iddata(y,u,0.2,'Tstart',0);

Используйте первые 1 000 точек данных, чтобы оценить нелинейную модель ARX mw1 с порядками [5 1 3] и нелинейность сети вейвлета.

z1 = z(1:1000);
mw1 = nlarx(z1,[5 1 3],wavenet);

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

x0 = findstates(mw1,z1,Inf);

Симулируйте модель mw1 выведите использование x0 и первые 50 секунд (250 выборок) входных данных.

opt = simOptions('InitialCondition',x0);
data_sim = sim(mw1,z1(1:251),opt);

Теперь симулируйте выход mw1 в Simulink с помощью Нелинейного блока Model ARX, и задают те же начальные условия в блоке. Модель Simulink ex_idnlarx_block_match_sim предварительно сконфигурирован, чтобы задать данные об оценке, нелинейную модель ARX, начальные условия x0, и время симуляции 50 секунд.

Откройте модель Simulink.

model = 'ex_idnlarx_block_match_sim';
open_system(model);

Симулируйте нелинейную модель ARX выход в течение 50 секунд.

sim(model);

Блок IDDATA Sink выводит симулированный выход, data, к рабочей области MATLAB®.

Постройте и сравните симулированные выходные параметры, вы получили использование sim команда и блок Nonlinear ARX.

figure
plot(data_sim.SamplingInstants,data_sim.OutputData,'b*',...
    data.SamplingInstants,data.OutputData,'-r')
xlabel('Time(sec)');
ylabel('Simulated output');
legend('Output of sim command','Output of Nonlinear ARX block','location','southeast')
title('Estimated Initial Conditions for Simulink')

Симулированные выходные параметры являются тем же самым, потому что вы задали то же начальное условие при использовании sim и Нелинейный блок Model ARX.

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

Аннулируйте вектор начального условия x0, и симулируйте в течение 50 секунд как прежде. Эта пустая установка x0 эквивалентно значению по умолчанию начальных условий Simulink.

x0 = [0;0;0;0;0;0;0;0];
sim(model);

Постройте различие между командной строкой и методами Simulink для этого случая.

figure
plot(data_sim.SamplingInstants,data_sim.OutputData,'b*',...
    data.SamplingInstants,data.OutputData,'-r')
xlabel('Time(sec)');
ylabel('Simulated output');
legend('Output of sim command','Output of Nonlinear ARX block','location','southeast')
title('Default Initial Conditions for Simulink')

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

Совпадайте с Выходом compare Команда и нелинейный блок Model ARX

В этом примере вы сначала используете compare команда, чтобы совпадать с симулированным выходом нелинейной модели ARX к результатам измерений. Вы затем воспроизводите симулированный выход с помощью Нелинейного блока Model ARX.

Загрузите данные об оценке, чтобы оценить нелинейную модель ARX. Создайте iddata объект из данных. Задайте шаг расчета как 0,2 секунды и время начала данных как 0 секунд.

load twotankdata
z = iddata(y,u,0.2,'Tstart',0);

Используйте первые 1 000 точек данных, чтобы оценить нелинейную модель ARX mw1 с порядками [5 1 3] и нелинейность сети вейвлета.

z1 = z(1:1000);
mw1 = nlarx(z1,[5 1 3],wavenet);

Используйте compare команда, чтобы совпадать с симулированным ответом mw1 к измеренным выходным данным в z1.

data_compare = compare(mw1,z1);

compare функционируйте использует первый nx выборки данных ввода - вывода как прошлые данные, где nx самая большая задержка регрессора модели. compare использование эти прошлые данные, чтобы вычислить начальные состояния, и затем симулирует выход модели для остающегося nx+1:end входные данные.

Чтобы воспроизвести этот результат в Simulink, вычислите значения начального состояния, используемые compare, и задайте значения в Нелинейном блоке Model ARX. Сначала вычислите самую большую задержку регрессора модели. Используйте эту задержку, чтобы вычислить прошлые данные для начальной оценки условия.

nx = max(getDelayInfo(mw1));
past_data = z1(1:nx);

Используйте data2state получить значения состояния с помощью прошлых данных.

x0 = data2state(mw1,z1(1:nx));

Теперь симулируйте выход mw1 в Simulink с помощью Нелинейного блока Model ARX, и задают x0 как начальные условия в блоке. Используйте остающийся nx+1:end данные для симуляции.

zz = z1(nx+1:end);
zz.Tstart = 0;

Модель Simulink ex_idnlarx_block_match_compare предварительно сконфигурирован, чтобы задать данные об оценке, нелинейную модель ARX и начальные условия.

Откройте модель Simulink.

model = 'ex_idnlarx_block_match_compare';
open_system(model);

Симулируйте нелинейную модель ARX выход в течение 200 секунд.

sim(model);

Блок IDDATA Sink выводит симулированный выход, data, к рабочей области MATLAB®.

Сравните симулированные выходные параметры, вы получили использование compare команда и блок Nonlinear ARX. Для этого постройте симулированные выходные параметры.

Сравнить выход compare к выходу Нелинейного блока Model ARX отбросьте первый nx выборки data_compare.

data_compare = data_compare(nx+1:end);
data.Tstart=1;
plot(data_compare,data,'r--')
xlabel('Time(sec)');
legend('compare','Nonlinear ARX Model block')

Симулированные выходные параметры являются тем же самым, потому что вы задали то же начальное условие при использовании compare и Нелинейный блок Model ARX.

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

| | | |

Похожие темы