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

В этом примере показано, как идентифицировать один вход один выход (SISO) нелинейные модели черного квадрата с помощью измеренных данных ввода - вывода. Пример использует результаты измерений от системы 2D бака, чтобы исследовать различные структуры модели и идентификационный выбор.

Набор данных ввода - вывода

В этом примере переменные данных сохранены в twotankdata.mat файл будет использоваться. Это содержит 3 000 выборок данных ввода - вывода системы 2D бака, сгенерированной с помощью интервала выборки 0,2 секунд. Вход u (t) является напряжением [V], применился к насосу, который генерирует приток в верхний бак. Довольно маленькое отверстие в нижней части этого верхнего бака дает к оттоку, который входит в более низкий бак, и выход y (t) двух систем бака является затем уровнем жидкости [m] более низкого бака. Мы создаем объект IDDATA z инкапсулировать загруженные данные:

Этот набор данных также используется в нелинейном сером примере поля "Две Системы Бака: Моделирование Файла MEX на C Непрерывной Системы SISO", где физические уравнения, описывающие систему, приняты. Этот пример о моделях черного квадрата, таким образом никакое физическое уравнение не принято.

load twotankdata
z = iddata(y, u, 0.2, 'Name', 'Two tank system');

Отображение на графике данных

Давайте построим целые 3 000 выборок данных, в течение времени в пределах от от 0 до 600 секунд.

Вход является многоступенчатым сигналом с различными уровнями.

plot(z)

Разделение данных

Разделите этот набор данных в 3 подмножества равного размера, каждый содержащий 1 000 выборок.

Согласно графику данных, сигналы ввода и вывода z2 (средняя треть графика) похожи на сигналы z1, но те z3 очень отличаются, немного вне областей значений ввода и вывода z1.

Мы оценим модели с z1 и оценим их на z2 и z3. В некотором смысле z2 позволяет оценивать способность к интерполяции моделей, и z3 позволяет оценивать их способность к экстраполяции в некоторой степени.

z1 = z(1:1000); z2 = z(1001:2000); z3 = z(2001:3000);

Выбор порядка модели

Первый шаг в оценке нелинейных моделей черного квадрата должен выбрать порядки модели. Для модели IDNLARX Порядки = [na nb nk], задавая количества мимо выходных параметров, прошлых входных параметров и входной задержки раньше предсказывали текущую производительность.

Порядки модели Usually выбраны испытаниями и ошибками. Иногда полезно попробовать линейные модели ARX сначала для того, чтобы получить подсказки о порядках модели. Таким образом давайте сначала попробуем инструмент для линейного выбора порядков модели ARX.

V = arxstruc(z1,z2,struc(1:5, 1:5,1:5));
nn = selstruc(V,'aic') % selection of nn=[na nb nk] by Akaike's information criterion (AIC)
nn =

     5     1     3

Критерий AIC выбрал nn = [na nb nk] = [5 1 3], означая, что в выбранной структуре модели ARX y (t) предсказан этими 6 регрессорами y (t-1), y (t-1)..., y (t-5) и u (t-3). Мы попытаемся использовать эти значения в нелинейных моделях.

Нелинейный ARX (IDNLARX) модели

В модели IDNLARX выход модели является нелинейной функцией регрессоров, как model_output (t) = F (y (t-1), y (t-1)..., y (t-5), u (t-3)).

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

M = NLARX(Data, Orders, Nonlinearity).

Это похоже на линейную команду ARX с дополнительным аргументом Nonlinearity, задающим тип средства оценки нелинейности.

Чтобы оценить модель IDNLARX, после выбора порядков модели, мы должны выбрать средство оценки нелинейности, которое будет использоваться. Давайте сначала попробуем средство оценки WAVENET.

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

Количество модулей (wavenet функции) в средстве оценки WAVENET было автоматически выбрано. К этому можно получить доступ как показано ниже.

mw1.Nonlinearity.NumberOfUnits
ans =

     3

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

compare(z1,mw1);

Проигрывание со свойствами модели

Первая модель была не совсем удовлетворительной, таким образом давайте попытаемся изменить некоторые свойства модели. Вместо того, чтобы позволить алгоритму оценки автоматически выбрать количество модулей в средстве оценки WAVENET, может быть явным образом задан этот номер.

mw2 = nlarx(z1,[5 1 3], wavenet('NumberOfUnits',8));

InputName по умолчанию и OutputName использовались.

mw2.InputName
mw2.OutputName
ans =

  1x1 cell array

    {'u1'}


ans =

  1x1 cell array

    {'y1'}

Регрессоры модели IDNLARX могут быть просмотрены с командой getreg. Регрессоры сделаны из mw2.InputName, mw2.OutputName и задержки.

getreg(mw2)
Regressors:
    y1(t-1)
    y1(t-2)
    y1(t-3)
    y1(t-4)
    y1(t-5)
    u1(t-3)

Нелинейные регрессоры модели IDNLARX

Важным свойством моделей IDNLARX является NonlinearRegressors. Выход модели IDNLARX является функцией регрессоров. Обычно эта функция имеет линейный блок и нелинейный блок. Выход модели является суммой выходных параметров двух блоков. Для того, чтобы уменьшать сложность модели, подмножество регрессоров может быть выбрано, чтобы ввести нелинейный блок. Эти регрессоры упоминаются как "нелинейные регрессоры".

Нелинейные регрессоры могут быть заданы как вектор из индексов регрессора в порядке регрессоров, возвращенных GETREG. Для примера mw2 целый список регрессоров отображен ниже, и NonlinearRegressors = [1 2 6] соответствует y1 (t-1), y1 (t-2) и u1 (t-3) в следующем списке.

getreg(mw2)
Regressors:
    y1(t-1)
    y1(t-2)
    y1(t-3)
    y1(t-4)
    y1(t-5)
    u1(t-3)

Нелинейные регрессоры могут быть обозначены парой Значения свойства как в следующем примере. Заметьте сокращение 'nlreg' = 'NonlinearRegressors'.

%mw3 = nlarx(z1,[5 1 3], wavenet, 'NonlinearRegressors', [1 2 6]);
mw3 = nlarx(z1,[5 1 3], wavenet, 'nlreg', [1 2 6]);  % using short-hand notation
getreg(mw3, 'nonlinear')  % get nonlinear regressors
Nonlinear regressors:
    y1(t-1)
    y1(t-2)
    u1(t-3)

Вместо индексов регрессора некоторые ключевые слова могут также использоваться, чтобы указать на нелинейные регрессоры: 'введите' для регрессоров, состоящих из задержанных входных параметров, и 'выведите' для регрессоров, состоящих из задержанных выходных параметров. В следующем примере 'вход' указывает на единственный входной регрессор u1 (t-3).

mw4 = nlarx(z1,[5 1 3],wavenet,'nlreg','input');
mw4.nlreg    % 'nlreg' is the short-hand of 'NonlinearRegressors'
getreg(mw4,'nonlinear')  % get nonlinear regressor
ans =

     6

Nonlinear regressors:
    u1(t-3)

Автоматический поиск нелинейных регрессоров

Чтобы автоматически попробовать все возможные подмножества регрессоров как нелинейные регрессоры и выбрать тот, приводящий к самой низкой ошибке симуляции, используйте значение NonlinearRegressors ='search'. Этот исчерпывающий поиск обычно занимает много времени. Рекомендуется включить отображение итерации при использовании параметра поиска.

Этот пример может занять время.

opt = nlarxOptions('Display','on');
mws = nlarx(z1,[5 1 3], wavenet, 'nlreg', 'search', opt);

К результату поиска можно получить доступ в mws.nlreg, получившееся значение mws.nlreg = [4 6] означает, что 4-е и 6-е регрессоры нелинейны в следующем списке регрессоров. Другими словами, y1 (t-4) и u1 (t-3) используются в качестве нелинейных регрессоров.

mws.nlreg
getreg(mws)
ans =

     4     6

Regressors:
    y1(t-1)
    y1(t-2)
    y1(t-3)
    y1(t-4)
    y1(t-5)
    u1(t-3)

Оценка предполагаемых моделей

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

mlin = arx(z1,[5 1 3]);

compare(z1,mlin,mw2,mws);

Теперь давайте смотреть, как mws ведет себя на наборе данных z2.

compare(z2,mws);

и на наборе данных z3.

compare(z3,mws);

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

plot(mw2,mws) % plot nonlinearity response as a function of selected regressors

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

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

ms1 = nlarx(z1,[5 1 3], sigmoidnet('NumberOfUnits', 8));
compare(z1,ms1)

Теперь оцените новую модель на наборе данных z2.

compare(z2,ms1);

и на наборе данных z3.

compare(z3,ms1);

Другие средства оценки нелинейности в модели IDNLARX

CUSTOMNET похож на SIGMOIDNET, но вместо сигмоидальной модульной функции, пользователь может задать другие модульные функции в файлах MATLAB. Этот пример использует gaussunit функцию, определяемую в функции gaussunit.m.

TREEPARTITION является другим средством оценки нелинейности.

mc1 = nlarx(z1,[5 1 3], customnet(@gaussunit),'nlreg',[3 5 6]);
mt1 = nlarx(z1,[5 1 3], treepartition);

Используя сетевой объект от Deep Learning Toolbox

Если у вас есть лицензия Deep Learning Toolbox™, можно также использовать нейронную сеть для оценки.

Здесь, мы создадим сеть одно выхода с неизвестным количеством входных параметров (обозначьте входным размером нуля в сетевом объекте). Номер входных параметров определяется к количеству регрессоров (как определено порядками модели) в модели IDNLARX во время процесса оценки автоматически.

Сравните ответы моделей mc1 и mt1 к данным z1

compare(z1, mc1, mt1)

if exist('feedforwardnet','file')==2 % Run only if Deep Learning Toolbox is available
    ff = feedforwardnet([5 20]);
    ff.layers{2}.transferFcn = 'radbas';
    ff.trainParam.epochs = 50;
    mn1 = nlarx(z1,[5 1 3], neuralnet(ff)); % estimation with neuralnet nonlinearity
    compare(z1, mn1) % compare fit to estimation data
end

Хаммерстайн-Винер (IDNLHW) Модельс

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

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

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

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

Модель Хаммерстайна-Винера с кусочным линейным средством оценки нелинейности

PWLINEAR (кусочный линейный) средство оценки нелинейности полезен в общих моделях IDNLHW.

Заметьте, что, в Порядках = [nb nf nk], nf задает количество полюсов линейной передаточной функции, несколько связанной с na порядок модели IDNLARX

mhw1 = nlhw(z1, [1 5 3], pwlinear, pwlinear);

Результат может быть оценен с COMPARE как прежде.

compare(z1,mhw1)

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

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

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

plot(mhw1)

Точки останова двух кусочных линейных средств оценки могут быть исследованы (заметьте, что сокращения 'u' = 'Вход', 'y' = 'Выход', 'nl' = 'Нелинейность' могут использоваться). Это - две матрицы строки, первая строка соответствует входу и второй строке к выходу средства оценки PWLINEAR.

mhw1.unl.BreakPoints
ans =

  Columns 1 through 7

    2.6503    3.4087    4.1672    4.9256    5.6313    6.3589    7.0864
   -2.1860   -1.6530   -0.0922    1.8048    3.2388    4.3227    5.0454

  Columns 8 through 10

    7.8140    8.3078    9.1655
    5.4403    5.5084    7.6771

Модель Хаммерстайна-Винера с насыщением и мертвой зональной нелинейностью

НАСЫЩЕНИЕ и средства оценки DEADZONE могут использоваться, если такая нелинейность, как предполагается, присутствует в системе.

mhw2 = nlhw(z1, [1 5 3], deadzone, saturation);
compare(z1,mhw2)

Отсутствие нелинейности обозначается объектом UNITGAIN, или пустым" []" значение. Сокращенные имена средств оценки нелинейности могут также использоваться.

mhw3 = nlhw(z1, [1 5 3], 'dead',unitgain);
mhw4 = nlhw(z1, [1 5 3], [],'satur');

Предельные значения DEADZONE и НАСЫЩЕНИЯ могут быть соответственно исследованы.

mhw2.unl.ZeroInterval
mhw2.ynl.LinearInterval
ans =

    0.9856    3.5657


ans =

    0.0274    0.5660

Исходное предположение ZeroInterval для DEADZONE или LinearInterval для НАСЫЩЕНИЯ может быть обозначено в средствах оценки:

mhw5 = nlhw(z1, [1 5 3], deadzone([0.1 0.2]), saturation([-1 1]));

Модель Хаммерстайна-Винера - задающий больше свойств

Опции алгоритма оценки могут быть заданы с помощью команды NLHWOPTIONS.

opt = nlhwOptions();
opt.SearchMethod = 'gna';
opt.SearchOptions.MaxIterations = 3;
mhw6 = nlhw(z1, [1 5 3], deadzone, saturation, opt);

Уже предполагаемая модель может быть усовершенствована большим количеством итераций оценки

Оцененный на данных об оценке z1, mhw7 должен иметь лучшую подгонку, чем mhw6.

mhw7 = nlhw(z1, mhw6, opt);
compare(z1, mhw6, mhw7)

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

Средства оценки нелинейности PWLINEAR, НАСЫЩЕНИЕ и DEADZONE были в основном спроектированы для использования в моделях IDNLHW. Они могут только оценить одну переменную нелинейность. Другие более общие средства оценки нелинейности, SIGMOIDNET, CUSTOMNET и WAVENET, могут также использоваться в моделях IDNLHW. Однако недифференцируемый TREEPARTITION средств оценки и NEURALNET не применимы, потому что для оценки моделей IDNLHW нужны производные средств оценки нелинейности в итеративных алгоритмах. Введите "idprops idnlestimators" для сводных данных средств оценки нелинейности.

Для просмотра документации необходимо авторизоваться на сайте