Моторизованная камера - мультивход Мультивыход нелинейный ARX и модели Хаммерстайна-Винера

В этом примере показано, как оценить мультивход мультивыводится (MIMO) нелинейные модели черного квадрата из данных. Два типа нелинейных моделей черного квадрата предлагаются в тулбоксе - Нелинейный ARX и модели Хаммерстайна-Винера.

Набор результатов измерений

Данные, сохраненные в файле motorizedcamera.mat, будут использоваться в этом примере. Это содержит 188 выборок данных, собранных из моторизованной камеры с шагом расчета 0,02 секунд. Входной вектор u (t) состоит из 6 переменных: 3 скоростных компонента перевода в ортогональной системе координат X-Y-Z, зафиксированной к камере [m/s] и 3 скоростным компонентам вращения вокруг X-Y-Z [rad/s]. Выходной вектор y (t) содержит 2 переменные: положение (в пикселях) точки, которая является изображением, взятым камерой фиксированной точки на 3D пробеле. Мы создаем объект IDDATA z, чтобы содержать загруженные данные:

load motorizedcamera
z = iddata(y, u, 0.02, 'Name', 'Motorized Camera', 'TimeUnit', 's');

Нелинейный ARX (IDNLARX) модель - предварительная оценка Используя Wavenet

Давайте сначала попробуем нелинейные модели ARX. Должны быть выбраны два важных элемента: порядки модели и средства оценки нелинейности. Чтобы попробовать простые вещи сначала, давайте выберем порядки [na nb nk] = [единицы (2,2), единицы (2,6), единицы (2,6)]. Это означает, что каждая выходная переменная предсказана всеми выходными и входными переменными, каждый задержанный 1 выборкой. При помощи векторных обозначений модель может быть записана в форме model_output (t) = F (y (t-1), u (t-1)). Давайте выберем Wavelet Network (wavenet) в качестве средства оценки нелинейности, таким образом векторная нелинейная функция F будет оценена двумя сетями вейвлета. Функция nlarx упрощает оценку моделей Nonlinear ARX.

mw1 = nlarx(z, [ones(2,2), ones(2,6), ones(2,6)], wavenet);

Исследуйте результат путем сравнения выхода, симулированного с предполагаемой моделью и выходом в результатах измерений z:

compare(z,mw1)

Нелинейная модель ARX - пробующий высшие порядки

Давайте смотреть, можем ли мы добиться большего успеха с высшими порядками. Обратите внимание на то, что при идентификации моделей с помощью расширений основной функции, чтобы описать нелинейность, количество параметров модели может превысить количество выборок данных. В таких случаях не могут быть надежно вычислены некоторые метрики оценки, такие как Шумовое Отклонение и Итоговая ошибка предсказания (FPE). Для текущего примера мы выключаем предупреждение, сообщающее нам об этом ограничении.

ws = warning('off','Ident:estimation:NparGTNsamp');
%
mw2 = nlarx(z, [ones(2,2), 2*ones(2,6), ones(2,6)], wavenet);
compare(z,mw2)

Вторая модель mw2 довольно хороша. Таким образом давайте сохраним этот выбор порядков модели в следующих примерах.

nanbnk = [ones(2,2), 2*ones(2,6), ones(2,6)];

Количества модулей (вейвлеты) двух средств оценки WAVENET были автоматически выбраны алгоритмом оценки. Эти числа отображены ниже. Заметьте сокращения 'nl' = 'Нелинейность' и 'цифра' = 'NumberOfUnits'.

mw2.Nonlinearity(1).NumberOfUnits %using full property names
mw2.nl(2).num                     %using short-hand notations
ans =

    27


ans =

    25

Нелинейная модель ARX - настраивающее количество модулей средств оценки нелинейности

Количество модулей в средствах оценки WAVENET может быть явным образом задано вместо того, чтобы быть автоматически выбранным алгоритмом оценки:

mw3 = nlarx(z, nanbnk, [wavenet('num',10); wavenet('num',5)]);

Нелинейная модель ARX - попытка других средств оценки нелинейности

В месте средства оценки WAVENET могут также использоваться другие средства оценки нелинейности. Давайте попробуем средство оценки TREEPARTITION.

mt1 = nlarx(z, nanbnk, 'treepartition');

В вышеупомянутом вызове мы использовали вектор символов ('treepartition') вместо объекта задать средство оценки нелинейности. Однако это работает, только если нелинейность должна использоваться со значениями свойств по умолчанию. В следующем примере treepartition конструктор Object называется, чтобы непосредственно создать объект средства оценки нелинейности.

mt2 = nlarx(z, nanbnk, treepartition);

Средство оценки SIGMOIDNET может также использоваться. Опции оценки, такие как максимальные итерации (MaxIterations) и отображение итерации могут быть заданы с помощью команды NLARXOPTIONS.

opt = nlarxOptions('Display','on');
opt.SearchOptions.MaxIterations = 2;
ms1 = nlarx(z, nanbnk, 'sigmoidnet', opt);

Нелинейная модель ARX со смешанными средствами оценки нелинейности

Возможно использовать различные средства оценки нелинейности на различных выходных каналах в той же модели. Предположим, что мы хотим использовать древовидное средство оценки нелинейности раздела для предсказания первого выхода и использовать сеть вейвлета для предсказания второго выхода. Оценку модели показывают ниже. Третий входной параметр (нелинейность) является теперь массивом двух различных объектов средства оценки нелинейности.

mtw = nlarx(z, nanbnk, [treepartition; wavenet]);

Отсутствие нелинейности в выходном канале может быть обозначено путем выбора средства оценки LINEAR. Следующий пример означает, что, в model_output (t) = F (y (t-1), u (t-1), u (t-2)), функция F состоит из линейного компонента и нелинейного компонента (SIGMOIDNET).

opt.Display = 'off'; % do not show estimation progress anymore
mls = nlarx(z, nanbnk, [linear; sigmoidnet('NumberOfUnits',5)], opt);
% no nonlinearity on first output

Контроль результатов оценки

Различные модели могут быть сравнены в той же команде COMPARE.

compare(z, mw2, ms1, mls)

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

plot(mt1,mtw,ms1,mls)

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

Другие функции, такие как RESID, PREDICT и PE могут использоваться на предполагаемых моделях таким же образом как в случае линейных моделей.

Хаммерстайн-Винер (IDNLHW) модель - предварительная оценка

Модель Хаммерстайна-Винера состоит максимум из 3 блоков: линейному блоку передаточной функции предшествует нелинейный статический блок и/или сопровождает другой нелинейный статический блок. Это называется Винеровской моделью, если первый нелинейный статический блок отсутствует, и модель Хаммерстайна, если второй нелинейный статический блок отсутствует.

Модели IDNLHW обычно оцениваются с помощью синтаксиса:

M = NLHW(Data, Orders, InputNonlinearity, OutputNonlinearity).

где Порядки = [nb bf nk] задают порядки и задержку линейной передаточной функции. InputNonlinearity и OutputNonlinearity задают средства оценки нелинейности для двух нелинейных блоков. Линейная модель ошибки на выходе (OE) соответствует случаю тривиальной идентичности (UNITGAIN) нелинейность.

Оценка модели Хаммерстайна (никакая Выходная нелинейность)

Давайте выберем Orders = [nb bf nk] = [единицы (2,6), единицы (2,6), единицы (2,6)]. Это означает, что в линейном блоке каждый выход является суммой 6 передаточных функций первого порядка, управляемых 6 входными параметрами. Попробуйте модель Хаммерстайна (никакая выходная нелинейность) с кусочным линейным средством оценки. Заметьте, что вводимый один объект PWLINEAR автоматически расширен до всех 6 входных каналов. UNITGAIN указывает на отсутствие нелинейности.

opt = nlhwOptions();
opt.SearchOptions.MaxIterations = 2;
mhw1 = nlhw(z,[ones(2,6), ones(2,6), ones(2,6)], pwlinear, unitgain, opt);

Исследуйте результат с COMPARE.

compare(z, mhw1);

Свойства модели могут визуализироваться Командой plot.

Нажмите на блок-схему, чтобы выбрать представление входной нелинейности (UNL), линейного блока или выходной нелинейности (YNL).

Когда линейное представление блока выбрано, по умолчанию все 12 каналов показывают в очень уменьшаемых размерах. Выберите один из каналов, чтобы иметь лучшее представление. Возможно выбрать тип графиков в Переходном процессе, Диаграммы Боде, Импульсной характеристики и нулевой полюсом карты.

plot(mhw1)

Результат, показанный COMPARE, был довольно хорош, таким образом давайте сохраним те же порядки модели в следующих испытаниях.

nbnfnk = [ones(2,6), ones(2,6), ones(2,6)];

Оценка винеровской модели (никакая входная нелинейность)

Давайте попробуем Винеровскую модель. Заметьте, что отсутствие входной нелинейности может быть обозначено" []" вместо объекта UNITGAIN.

opt.SearchOptions.MaxIterations = 4;
mhw2 = nlhw(z, nbnfnk, [], 'pwlinear', opt);

Оценка модели Хаммерстайна-Винера (Обе нелинейности ввода и вывода)

Укажите на обе нелинейности ввода и вывода для модели Хаммерстайна-Винера. Как в случае моделей Nonlinear ARX, мы можем использовать вектор символов (а не объект), чтобы задать средство оценки нелинейности.

mhw3 = nlhw(z, nbnfnk,'saturation', 'pwlinear', opt);

К предельным значениям средств оценки НАСЫЩЕНИЯ можно получить доступ. Сокращения 'u' = 'вход', 'y' = 'выход' и 'nl' = 'Нелинейность' доступны.

mhw3.InputNonlinearity(1).LinearInterval % view Linear Interval of SATURATION
mhw3.unl(3).LinearInterval               % access using using short-hand notation
ans =

    0.0103    0.0562


ans =

   -0.0956   -0.0169

К точкам останова средства оценки PWLINEAR можно также получить доступ.

mhw3.OutputNonlinearity(1).BreakPoints
ans =

  Columns 1 through 7

   17.1246   34.2518   51.3765   68.5021   85.6296  102.7558  119.8835
    2.6730   16.1133   45.5627   42.0046   62.3661   84.9454  112.3400

  Columns 8 through 10

  137.0097  154.1357  171.2604
  135.5004  156.1533  173.3304

Модель Хаммерстайна-Винера - Используя смешанные средства оценки нелинейности

Различные средства оценки нелинейности могут быть смешаны в той же модели. Предположим, что мы хотим модель с: - никакая нелинейность на любых выходных каналах ("Модель Хаммерстайна") - Кусочная линейная нелинейность на входном канале № 1 с 3 модулями - нелинейность Насыщения на входном канале № 2 - Мертвая Зональная нелинейность на входном канале № 3 - Сигмоидальная Сетевая нелинейность на входном канале № 4 - Никакая нелинейность (заданный объектом unitgain) на входном канале № 5 - Сигмоидальная Сетевая нелинейность на входном канале № 6 с 5 модулями

Мы можем создать массив средств оценки объекта нелинейности выбранных типов и передать его функции оценки NLHW как входная нелинейность.

inputNL = [pwlinear('num',3); saturation; deadzone; sigmoidnet; unitgain; sigmoidnet('num',5)];
opt.SearchOptions.MaxIterations = 2;
mhw4 = nlhw(z, nbnfnk, inputNL, [], opt); % "[]" for 4th input denotes no output nonlinearity

Модель Хаммерстайна-Винера - задающий исходное предположение для НАСЫЩЕНИЯ и средств оценки DEADZONE

Исходное предположение для линейного интервала НАСЫЩЕНИЯ и нулевого интервала DEADZONE может быть непосредственно обозначено, когда объекты средства оценки создаются. Предположим, что мы хотим установить линейный интервал насыщения на [10 200] и нулевой интервал deadzone к [11 12] как исходные предположения.

mhw5 = idnlhw(nbnfnk, [], [saturation([10 200]); deadzone([11 12])],'Ts',z.Ts);
% Create  nonlinearity estimator with initial guesses for properties.
% Notice the use of the IDNLHW model object constructor idnlhw, not the
% estimator nlhw. The resulting model object mhw5 is not yet estimated from
% data.

К предельным значениям насыщения и deadzone средств оценки можно получить доступ. У них все еще есть свои начальные значения, потому что они еще не оцениваются из данных.

mhw5.outputNL(1).LinearInterval % show linear interval on saturation at first output channel after estimation
mhw5.yNL(2).ZeroInterval        % show zero interval on dead zone at second output channel after estimation
ans =

    10   200


ans =

    11    12

Каковы значения этих пределов после оценки?

opt.SearchOptions.MaxIterations = 5;
mhw5 = nlhw(z, mhw5, opt);  % estimate the model from data
mhw5.outputNL(1).LinearInterval % show linear interval on saturation at first output channel after estimation
mhw5.yNL(2).ZeroInterval        % show zero interval on dead zone at second output channel after estimation
ans =

    9.9997  199.9989


ans =

   11.0001   12.0015

Отправьте анализ оценки - сравнение различных моделей

Модели различной природы (IDNLARX и IDNLHW) могут быть сравнены в той же команде COMPARE.

compare(z,mw2,mhw1)

warning(ws) % reset the warning state