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

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

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

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

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

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

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

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

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

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

Программное обеспечение 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 = fullfile(matlabroot,'examples','ident','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 = fullfile(matlabroot,'examples','ident','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.

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

| | | |

Похожие темы