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

В этом примере показано, как оценить мультивход мультивыводится (MIMO) нелинейные модели черного квадрата из данных. Два типа нелинейных моделей черного квадрата предлагаются в System Identification Toolbox™ - Нелинейный 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) модель - выбор регрессоров

Давайте сначала попробуем нелинейные модели ARX. Должны быть выбраны два важных элемента: регрессоры модели и нелинейные функции отображения.

Регрессоры являются простыми формулами на основе задержанных временем переменных I/O, самый простой случай, являющийся переменными, изолированными маленьким набором последовательных значений. Например, если "u" от имени входной переменной и "y" имя выходных переменных, то набор регрессора в качестве примера может быть {y (t-1), y (t-2), u (t), u (t-1), u (t-2)}, где "t" обозначает переменную времени. Другой пример включающие полиномиальные условия мог быть {y (t-2) ^4, y (t-2) *u (t-1), u (t-4) ^2}. Более комплексные, произвольные формулы в задержанных переменных также возможны.

Самый легкий способ задать линейные регрессоры при помощи "матрицы порядков". Эта матрица принимает форму NN = [na nb nk], и это задает тем, сколько задержек каждый выход (na) и каждая входная переменная (nb, nk) задерживаются. Это - та же идея, которая используется при оценке линейных моделей ARX (см. ARX, IDPOLY). Например, NN = [2 3 4] подразумевает набор регрессора {y (t-2), u (t-4), u (t-5), u (t-6)}. В общем случае моделей с Нью-Йорком выходные параметры и входные параметры NU, NN является матрицей с нью-йоркскими строками и строками NY+2*NU.

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

Чтобы запуститься, давайте выберем порядки NN = [na nb nk] = [единицы (2,2), единицы (2,6), единицы (2,6)]. Это означает, что каждая выходная переменная предсказана всеми выходными и входными переменными, каждый задержанный 1 выборкой. Уравнение модели может быть записано как y_i (t) = F_i (y1 (t-1), y2 (t-1), u1 (t-1), u2 (t-1), u3 (t-1)), i = 1, 2. Давайте выберем Wavelet Network (wavenet) в качестве нелинейной функции отображения для обоих выходных параметров. Функциональный NLARX оценивает параметры модели Nonlinear ARX.

NN = [ones(2,2), ones(2,6), ones(2,6)]; % the orders
mw1 = nlarx(z, NN, 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 = 

<strong>Nonlinear ARX model with 2 outputs and 6 inputs</strong>
  Inputs: u1, u2, u3, u4, u5, u6
  Outputs: y1, y2

Regressors:
  Linear regressors in variables y1, y2, u1, u2, u3, u4, u5, u6

Output functions:
  Output 1: Wavelet Network with 27 units
  Output 2: Wavelet Network with 25 units

Sample time: 0.02 seconds

Status:                                                      
Estimated using NLARX on time domain data "Motorized Camera".
Fit to estimation data: [99.22;99.15]% (prediction focus)    
FPE: 0.1262, MSE: 0.4453

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

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

Чтобы просмотреть набор регрессора, подразумеваемый этим выбором порядков, используйте команду GETREG:

getreg(mw2)
ans =

  14×1 cell array

    {'y1(t-1)'}
    {'y2(t-1)'}
    {'u1(t-1)'}
    {'u1(t-2)'}
    {'u2(t-1)'}
    {'u2(t-2)'}
    {'u3(t-1)'}
    {'u3(t-2)'}
    {'u4(t-1)'}
    {'u4(t-2)'}
    {'u5(t-1)'}
    {'u5(t-2)'}
    {'u6(t-1)'}
    {'u6(t-2)'}

Количества модулей ("вейвлеты") двух функций WAVENET были автоматически выбраны алгоритмом оценки. Эти числа отображены ниже.

mw2.OutputFcn(1).NonlinearFcn.NumberOfUnits
ans =

    27

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

Количество модулей в функции WAVENET может быть явным образом задано вместо того, чтобы быть автоматически выбранным алгоритмом оценки. Предположим, что мы хотим использовать 10 модулей для первой нелинейной функции отображения, и 5 для второго (обратите внимание, что модель для каждого выхода использует свою собственную функцию отображения; массив всех функций отображения хранится в свойстве "OutputFcn" модели).

Fcn1 = wavenet(10); % output function for the first output
Fcn2 = wavenet(5);  % output function for the second output
mw3 = nlarx(z, nanbnk, [Fcn1; Fcn2])
mw3 = 

<strong>Nonlinear ARX model with 2 outputs and 6 inputs</strong>
  Inputs: u1, u2, u3, u4, u5, u6
  Outputs: y1, y2

Regressors:
  Linear regressors in variables y1, y2, u1, u2, u3, u4, u5, u6

Output functions:
  Output 1: Wavelet Network with 10 units
  Output 2: Wavelet Network with 5 units

Sample time: 0.02 seconds

Status:                                                      
Estimated using NLARX on time domain data "Motorized Camera".
Fit to estimation data: [99.01;98.89]% (prediction focus)    
FPE: 0.2273, MSE: 0.7443

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

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

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

В вышеупомянутом вызове мы использовали строку 'treepartition' вместо объекта задать функцию отображения. Этот синтаксис упрощает быстрый способ создать модель с ограничением, что все функции отображения должны иметь тот же тип, и они должны использоваться с их значениями свойств по умолчанию. В следующем примере treepartition конструктор Object называется, чтобы непосредственно создать Древовидный раздел нелинейный функциональный объект.

mt2 = nlarx(z, nanbnk, treepartition)
mt2 = 

<strong>Nonlinear ARX model with 2 outputs and 6 inputs</strong>
  Inputs: u1, u2, u3, u4, u5, u6
  Outputs: y1, y2

Regressors:
  Linear regressors in variables y1, y2, u1, u2, u3, u4, u5, u6

Output functions:
  Output 1: Tree Partition with 7 units
  Output 2: Tree Partition with 7 units

Sample time: 0.02 seconds

Status:                                                      
Estimated using NLARX on time domain data "Motorized Camera".
Fit to estimation data: [98.56;98.34]% (prediction focus)    
MSE: 1.615

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

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

Этот синтаксис вызова для NLARX очень похож на тех используемых прежде - определение данных, порядков и нелинейных функций отображения в качестве их аргументов первичного входного параметра. Однако, чтобы изменить опции оценки от их значений по умолчанию, мы создали набор опции, opt, использование nlarxOptions команды и передало его команде NLARX как дополнительный входной параметр.

Нелинейная модель ARX со смешанными нелинейными функциями

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

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

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

Fcn1 = linear;
Fcn2 = sigmoidnet(2);
opt.Display = 'off'; % do not show estimation progress anymore
mls = nlarx(z, nanbnk, [Fcn1; Fcn2], opt)
mls = 

<strong>Nonlinear ARX model with 2 outputs and 6 inputs</strong>
  Inputs: u1, u2, u3, u4, u5, u6
  Outputs: y1, y2

Regressors:
  Linear regressors in variables y1, y2, u1, u2, u3, u4, u5, u6

Output functions:
  Output 1: Linear Function
  Output 2: Sigmoid Network with 2 units

Sample time: 0.02 seconds

Status:                                                      
Estimated using NLARX on time domain data "Motorized Camera".
Fit to estimation data: [98.72;98.79]% (prediction focus)    
FPE: 0.5594, MSE: 1.05

Нет никакой нелинейности в модели для первого выхода. Это не, однако, чисто линейно из-за присутствия срока смещения.

disp(mls.OutputFcn(1))
<strong>Linear Function</strong>
Inputs: y1(t-1), y2(t-1), u1(t-1), u1(t-2), u2(t-1), u2(t-2), u3(t-1), u3(t-2), u4(t-1), u4(t-2), u5(t-1), u5(t-2), u6(t-1), u6(t-2)
Output: y1

 Nonlinear Function: None
 Linear Function: initialized to [48.3 -32.2 -0.229 -0.0705 -0.113 -0.0516 -0.182 0.297 0.199 -0.133 -0.337 0.583 -0.448 0.167]
 Output Offset: initialized to 109

        Input: [1×1 idpack.Channel]
       Output: [1×1 idpack.Channel]
    LinearFcn: [1×1 nlident.internal.ProjectedLinearFcn]
       Offset: [1×1 nlident.internal.Offset]

У нас есть опция создания его чисто линейный путем желания не использовать термин смещения. Этот выбор может быть сделан путем фиксации смещения к нулевому значению перед оценкой.

Fcn1.Offset.Value = 0;
Fcn1.Offset.Free = false;
mlsNoOffset = nlarx(z, nanbnk, [Fcn1; Fcn2], opt);

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

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

compare(z, mw2, ms1, mls)

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

plot(mt1,mtw,ms1,mls)

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

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

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

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

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

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

где Порядки = [nb nf 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 = 15;
NN = [ones(2,6), ones(2,6), ones(2,6)];
InputNL  = pwlinear;  % input nonlinearity
OutputNL = unitgain;  % output nonlinearity
mhw1 = nlhw(z, NN, InputNL, OutputNL, opt)
mhw1 =
Hammerstein-Wiener model with 2 outputs and 6 inputs
 Linear transfer function matrix corresponding to the orders:
   nb = [1 1 1 1 1 1; 1 1 1 1 1 1]
   nf = [1 1 1 1 1 1; 1 1 1 1 1 1]
   nk = [1 1 1 1 1 1; 1 1 1 1 1 1]
 Input nonlinearities:
   Input 1: Piecewise Linear
   Input 2: Piecewise Linear
   Input 3: Piecewise Linear
   Input 4: Piecewise Linear
   Input 5: Piecewise Linear
   Input 6: Piecewise Linear
 Output nonlinearities:
   Output 1: absent
   Output 2: absent
Sample time: 0.02 seconds

Status:                                                     
Estimated using NLHW on time domain data "Motorized Camera".
Fit to estimation data: [98.46;97.93]%                      
FPE: 7.928, MSE: 2.216

Исследуйте результат с 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 = 10;
mhw2 = nlhw(z, nbnfnk, [], 'pwlinear', opt)
mhw2 =
Hammerstein-Wiener model with 2 outputs and 6 inputs
 Linear transfer function matrix corresponding to the orders:
   nb = [1 1 1 1 1 1; 1 1 1 1 1 1]
   nf = [1 1 1 1 1 1; 1 1 1 1 1 1]
   nk = [1 1 1 1 1 1; 1 1 1 1 1 1]
 Input nonlinearities:
   Input 1: absent
   Input 2: absent
   Input 3: absent
   Input 4: absent
   Input 5: absent
   Input 6: absent
 Output nonlinearities:
   Output 1: Piecewise Linear
   Output 2: Piecewise Linear
Sample time: 0.02 seconds

Status:                                                     
Estimated using NLHW on time domain data "Motorized Camera".
Fit to estimation data: [73.85;71.36]%                      
FPE: 1.314e+05, MSE: 503.8

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

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

mhw3 = nlhw(z, nbnfnk,'saturation', 'pwlinear', opt)
mhw3 =
Hammerstein-Wiener model with 2 outputs and 6 inputs
 Linear transfer function matrix corresponding to the orders:
   nb = [1 1 1 1 1 1; 1 1 1 1 1 1]
   nf = [1 1 1 1 1 1; 1 1 1 1 1 1]
   nk = [1 1 1 1 1 1; 1 1 1 1 1 1]
 Input nonlinearities:
   Input 1: Saturation
   Input 2: Saturation
   Input 3: Saturation
   Input 4: Saturation
   Input 5: Saturation
   Input 6: Saturation
 Output nonlinearities:
   Output 1: Piecewise Linear
   Output 2: Piecewise Linear
Sample time: 0.02 seconds

Status:                                                     
Estimated using NLHW on time domain data "Motorized Camera".
Fit to estimation data: [86.88;84.55]%                      
FPE: 1.111e+04, MSE: 137.3

К предельным значениям функции НАСЫЩЕНИЯ можно получить доступ можно следующим образом:

mhw3.InputNonlinearity(1).LinearInterval % view Linear Interval of SATURATION
ans =

    0.0103    0.0562

Точно так же к точкам останова функции PWLINEAR можно получить доступ можно следующим образом:

mhw3.OutputNonlinearity(1).BreakPoints
ans =

  Columns 1 through 7

   17.1233   34.2491   51.3726   68.4968   85.6230  102.7478  119.8742
    2.6184   16.0645   45.5178   41.9621   62.3246   84.9038  112.2970

  Columns 8 through 10

  136.9991  154.1238  171.2472
  135.4543  156.1016  173.2701

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

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

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

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

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

Исходное предположение для линейного интервала НАСЫЩЕНИЯ и нулевого интервала DEADZONE может быть непосредственно обозначено, когда эти объекты создаются; можно также задать ограничения на эти значения такой как, фиксируются ли они к их заданным значениям (атрибутом установки Free ко лжи), или если их оценки подвергаются минимальным/максимальным границам (использующий Минимальные и Максимальные атрибуты).

Предположим, что мы хотим установить линейный интервал насыщения на [10 200] и нулевой интервал deadzone к [11 12] как исходные предположения. Кроме того, мы хотим, чтобы верхний предел насыщения остался зафиксированным. Мы можем достигнуть этой настройки можно следующим образом.

% Create  nonlinear functions with initial guesses for properties.
OutputNL1 = saturation([10 200]);
OutputNL1.Free(2) = false; % the upper limit is a fixed value
OutputNL2 = deadzone([11 12]);

mhw5 = idnlhw(nbnfnk, [], [OutputNL1; OutputNL2], 'Ts',z.Ts);

Заметьте использование конструктора объекта модели IDNLHW idnlhw, не средство оценки nlhw. Получившийся объект модели mhw5 еще не оценивается из данных. К предельным значениям насыщения и функций deadzone можно получить доступ. У них все еще есть свои начальные значения, потому что они еще не оцениваются из данных.

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

    10   200


ans =

    11    12

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

opt.SearchOptions.MaxIterations = 15;
mhw5 = nlhw(z, mhw5, opt)  % estimate the model from data
mhw5.OutputNonlinearity(1).LinearInterval % show linear interval on saturation at first output channel after estimation
mhw5.OutputNonlinearity(2).ZeroInterval    % show zero interval on dead zone at second output channel after estimation
mhw5 =
Hammerstein-Wiener model with 2 outputs and 6 inputs
 Linear transfer function matrix corresponding to the orders:
   nb = [1 1 1 1 1 1; 1 1 1 1 1 1]
   nf = [1 1 1 1 1 1; 1 1 1 1 1 1]
   nk = [1 1 1 1 1 1; 1 1 1 1 1 1]
 Input nonlinearities:
   Input 1: absent
   Input 2: absent
   Input 3: absent
   Input 4: absent
   Input 5: absent
   Input 6: absent
 Output nonlinearities:
   Output 1: Saturation
   Output 2: Dead Zone
Sample time: 0.02 seconds

Status:                                                     
Estimated using NLHW on time domain data "Motorized Camera".
Fit to estimation data: [27.12;6.857]%                      
FPE: 3.373e+06, MSE: 4666

ans =

    9.9974  200.0000


ans =

   11.0020   12.0011

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

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

compare(z,mw2,mhw1)

warning(ws) % reset the warning state