Воспроизведение результатов симуляции командной строки или приложения для системы идентификации в 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 Model или Hammerstein-Wiener Model блок, задавая 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 Команда и нелинейные ARX Блока Model

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

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

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

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

Используйте первые 1000 точек данных для оценки нелинейной модели 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 с использованием блока Nonlinear ARX Model и задайте те же начальные условия в блоке. Модель 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 командный и нелинейный 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 и блок Нелинейная модель ARX.

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

Обнулите вектор начальных условий x0и моделируйте в течение 50 секунд, как и прежде. Это значение null для 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 Команда и нелинейные ARX Блока Model

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

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

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

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

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

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

data_compare = compare(mw1,z1);

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

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

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

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

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

Теперь симулируйте выход mw1 в Simulink с использованием блока Nonlinear ARX Model и задайте 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 командный и нелинейный ARX блок. Для этого постройте график моделируемых выходов.

Сравнение выходов compare на выход блока Nonlinear ARX Model, сбросьте первый 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 и блок Нелинейная модель ARX.

См. также

| | | |

Похожие темы