В этом примере показано, как оценить мультивход мультивыводится (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. Должны быть выбраны два важных элемента: порядки модели и средства оценки нелинейности. Чтобы попробовать простые вещи сначала, давайте выберем порядки [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)
Давайте смотреть, можем ли мы добиться большего успеха с высшими порядками. Обратите внимание на то, что при идентификации моделей с помощью расширений основной функции, чтобы описать нелинейность, количество параметров модели может превысить количество выборок данных. В таких случаях не могут быть надежно вычислены некоторые метрики оценки, такие как Шумовое Отклонение и Итоговая ошибка предсказания (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
Количество модулей в средствах оценки WAVENET может быть явным образом задано вместо того, чтобы быть автоматически выбранным алгоритмом оценки:
mw3 = nlarx(z, nanbnk, [wavenet('num',10); wavenet('num',5)]);
В месте средства оценки 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);
Возможно использовать различные средства оценки нелинейности на различных выходных каналах в той же модели. Предположим, что мы хотим использовать древовидное средство оценки нелинейности раздела для предсказания первого выхода и использовать сеть вейвлета для предсказания второго выхода. Оценку модели показывают ниже. Третий входной параметр (нелинейность) является теперь массивом двух различных объектов средства оценки нелинейности.
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 могут использоваться на предполагаемых моделях таким же образом как в случае линейных моделей.
Модель Хаммерстайна-Винера состоит максимум из 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 может быть непосредственно обозначено, когда объекты средства оценки создаются. Предположим, что мы хотим установить линейный интервал насыщения на [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