exponenta event banner

Нелинейное моделирование магнитореологического демпфера жидкости

В этом примере показано нелинейное моделирование в черном ящике динамического поведения демпфера магнитореологической жидкости. В нем показано, как создавать нелинейные модели амортизатора ARX и Hammerstein-Wiener с помощью измерений его скорости и демпфирующей силы.

Данные, использованные в этом примере, были предоставлены доктором Акирой Сано (Университет Кэйо, Япония) и доктором Цзяньдун Ван (Пекинский университет, Китай), которые провели эксперименты в лаборатории Университета Кэйо. Более подробное описание экспериментальной системы и некоторых связанных с ней исследований см. в следующей справке.

Дж.Ванг, А. Сано, Т. Чен и Б. Хуан. Идентификация систем Хаммерштейна без явной параметризации нелинейности. International Journal of Control, In press, 2008. 10,1080/ 00207170802382376.

Экспериментальная настройка

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

Для изучения поведения таких устройств на одном конце к земле был прикреплен МР демпфер, а на другом конце - к шейкерному столу, генерирующему вибрации. Напряжение демпфера было установлено на 1,25 В. Демпфирующая сила f (t) отбиралась каждые 0,005 с. Смещение отбиралось каждые 0,001 с, что затем использовалось для оценки скорости v (t) в период отбора проб 0,005 с.

Данные ввода-вывода

Набор данных, содержащий входные и выходные измерения, был сохранен в MAT-файле mrdamper.mat. Входной сигнал v (t) представляет собой скорость [см/с] демпфера, а выходной сигнал f (t) представляет собой демпфирующую силу [N]. Файл MAT содержит 3499 выборок данных, соответствующих частоте выборки 0,005. Эти данные будут использоваться для всех задач оценки и проверки, выполняемых в этом примере.

% Let us begin by loading and inspecting the data.
load(fullfile(matlabroot, 'toolbox', 'ident', 'iddemos', 'data', 'mrdamper.mat'));
who
Your variables are:

F   Ts  V   

Упакуйте переменные F (выходная сила), V (входная скорость) и Ts (время выборки) в объект IDDATA.

z = iddata(F, V, Ts, 'Name', 'MR damper', ...
    'InputName', 'v', 'OutputName', 'f',...
    'InputUnit', 'cm/s', 'OutputUnit', 'N');

Подготовка данных для оценки и валидации

Разбейте этот набор данных z на два подмножества: первые 2000 выборок будут использоваться для оценки (ze), а остальные - для проверки результатов (zv).

ze = z(1:2000);    % estimation data
zv = z(2001:end);  % validation data

Давайте построим два набора данных вместе, чтобы визуально проверить их временные диапазоны:

plot(ze, zv)
legend('ze','zv')

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

Первым шагом в оценке моделей черного ящика является выбор заказов моделей. Определение заказов зависит от типа модели.

  • Для линейных и нелинейных моделей ARX порядки представлены тремя числами: na, nb и nk, которые определяют количество прошлых выходов, прошлых входов и входных задержек, используемых для прогнозирования значения выхода в данный момент времени. Набор временных переменных ввода-вывода, определенных порядками, называется «регрессорами».

  • Для моделей Хаммерштейна-Винера, которые представляют линейные модели со статическими нелинейностями ввода-вывода, порядки определяют количество полюсов и нулей и задержку ввода линейного компонента. Они определяются числами nb (число нулей + 1), nf (число полюсов) и nk (входная задержка в количестве лагов).

Обычно порядки моделей выбираются методом проб и ошибок. Однако порядки линейной модели ARX могут вычисляться автоматически с использованием таких функций, как arxstruc и selstruc. Полученные таким образом порядки дают намек на возможные порядки для использования и для нелинейных моделей. Давайте сначала попробуем определить наилучший порядок для линейной модели ARX.

V = arxstruc(ze,zv,struc(1:5, 1:5,1:5)); % try values in the range 1:5 for na, nb, nk
Order = selstruc(V,'aic') % selection of orders by Akaike's Information Criterion
Order =

     2     4     1

Критерий AIC имеет выбранный порядок = [na nb nk] = [2 4 1], что означает, что в выбранной структуре модели ARX сила демпфера f (t) прогнозируется 6 регрессорами f (t-1), f (t-2), v (t-1), v (t-2), v (t-3) и v (t-4).

Дополнительные сведения о выборе порядка модели см. в примере «Выбор структуры модели: определение порядка модели и задержки ввода» (iddemo4.m).

Предварительный анализ: создание линейных моделей

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

Оценим линейные модели ARX и Output-Error (OE) порядков, предложенных выводом SELSTRUCK выше.

LinMod1 = arx(ze, [2 4 1]); % ARX model Ay = Bu + e
LinMod2 = oe(ze, [4 2 1]);  % OE model  y = B/F u + e

Аналогично, мы можем создать линейную модель состояния-пространства, порядок (= количество состояний) которой будет определяться автоматически:

LinMod3 = ssest(ze); % creates a state-space model of order 3

Теперь сравним отклики этих моделей с измеренными выходными данными в ze:

compare(ze, LinMod1, LinMod2, LinMod3) % comparison to estimation data

Лучшим тестом на качество модели является ее проверка по независимому набору данных. Поэтому мы сравниваем ответы модели с набором данных zv.

compare(zv, LinMod1, LinMod2, LinMod3) % comparison to validation data

Как было отмечено, лучшая из этих линейных моделей имеет соответствие 51% на наборе данных проверки.

Создание нелинейных моделей ARX

Идентификация линейной модели показала, что модель ARX обеспечивала менее 50% соответствия данным проверки. Для достижения лучших результатов теперь мы изучаем использование моделей нелинейных ARX (IDNLARX). Необходимость нелинейных моделей для этих данных также предлагается advice утилита, которая может использоваться для проверки данных на потенциальное преимущество использования нелинейной модели по сравнению с линейной моделью.

advice(ze, 'nonlinearity')
There is an indication of nonlinearity in the data.
A nonlinear ARX model of order [4 4 1] and treepartition nonlinearity estimator 
performs better prediction of output than the corresponding ARX model of the 
same order. Consider using nonlinear models, such as IDNLARX, or IDNLHW. You 
may also use the "isnlarx" command to test for nonlinearity with more options.

Нелинейные модели ARX можно рассматривать как нелинейные аналоги моделей ARX, которые обеспечивают большую гибкость моделирования двумя способами:

  1. Регрессоры могут быть объединены с использованием нелинейной функции, а не взвешенной суммы, используемой ARX моделями. Могут использоваться нелинейные функции, такие как сигмоидальная сеть, двоичное дерево и вейвлет-сеть. В контексте идентификации эти функции называются «нелинейными функциями отображения».

  2. Сами регрессоры могут быть произвольными (возможно нелинейными) функциями переменных ввода-вывода в дополнение к значениям переменных с задержкой времени, используемым ARX моделями.

Создание регрессоров для нелинейных моделей ARX

Когда линейный с непрерывными лагами, регрессоры наиболее легко создаются с использованием матрицы порядка [na nb nk], как описано выше. В наиболее общем случае регрессоров с произвольными лагами, или когда регрессоры основаны на абсолютных значениях переменных, используя linearRegressor объект обеспечивает большую гибкость. Если регрессоры являются полиномами переменных с временной задержкой, они могут быть созданы с помощью polynomialRegressor объект. Для регрессоров, использующих произвольные, заданные пользователем формулы, customRegressor могут использоваться объекты.

Мы рассмотрим использование различных заказов моделей и различных функций нелинейного отображения. Использование полиномных или пользовательских регрессоров не исследуется. Способы задания пользовательских регрессоров в моделях IDNLARX см. в примере «Построение нелинейных моделей ARX с нелинейными и пользовательскими регрессорами».

Оценка нелинейной модели ARX по умолчанию

Для начала оценим модель IDNLARX порядка [2 4 1] и сигмоидальную сеть как тип нелинейности. Мы будем использовать MaxIterations = 50 и метод поиска Левенберга-Марквардта в качестве опций оценки для всех оценок ниже.

Options = nlarxOptions('SearchMethod', 'lm');
Options.SearchOptions.MaxIterations = 50;
Narx1 = nlarx(ze, [2 4 1], 'sigmoidnet',Options)
Narx1 = 

<strong>Nonlinear ARX model with 1 output and 1 input</strong>
  Inputs: v
  Outputs: f

Regressors:
  Linear regressors in variables f, v

Output function: Sigmoid Network with 10 units

Sample time: 0.005 seconds

Status:                                               
Estimated using NLARX on time domain data "MR damper".
Fit to estimation data: 95.8% (prediction focus)      
FPE: 6.648, MSE: 6.08

nlarx - команда, используемая для оценки нелинейных моделей ARX. Narx1 - нелинейная модель ARX с регрессорами R: = [f (t-1), f (t-2), v (t-1)... v (t-4)]. Нелинейность являетсяsigmoidnet который использует комбинацию сигмоидных единичных функций и линейную взвешенную сумму регрессоров для вычисления выходного сигнала. Функция мэппинга сохраняется в OutputFcn свойство модели.

disp(Narx1.OutputFcn)
<strong>Sigmoid Network</strong>
Inputs: f(t-1), f(t-2), v(t-1), v(t-2), v(t-3), v(t-4)
Output: f

 Nonlinear Function: Sigmoid network with 10 units.
 Linear Function: initialized to [48.3 -3.38 -3.34 -2.7 -1.38 2.15]
 Output Offset: initialized to -18.9

           Input: [1×1 idpack.Channel]
          Output: [1×1 idpack.Channel]
       LinearFcn: [1×1 nlident.internal.UseProjectedLinearFcn]
    NonlinearFcn: [1×1 nlident.internal.RidgenetFcn]
          Offset: [1×1 nlident.internal.ChooseableOffset]

Анализ качества модели путем сравнения смоделированных выходных данных с оцененными и проверенными наборами данных ze и zv:

compare(ze, Narx1); % comparison to estimation data

compare(zv, Narx1); % comparison to validation data

Проверка различных модельных заказов

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

Narx2{1} = nlarx(ze, [3 4 1], 'sigmoidnet',Options); % use na = 3, nb = 4, nk = 1.
Narx2{1}.Name = 'Narx2_1';
Narx2{2} = nlarx(ze, [2 5 1], 'sigmoidnet',Options); Narx2{2}.Name = 'Narx2_2';
Narx2{3} = nlarx(ze, [3 5 1], 'sigmoidnet',Options); Narx2{3}.Name = 'Narx2_3';
Narx2{4} = nlarx(ze, [1 4 1], 'sigmoidnet',Options); Narx2{4}.Name = 'Narx2_4';
Narx2{5} = nlarx(ze, [2 3 1], 'sigmoidnet',Options); Narx2{5}.Name = 'Narx2_5';
Narx2{6} = nlarx(ze, [1 3 1], 'sigmoidnet',Options); Narx2{6}.Name = 'Narx2_6';

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

compare(ze, Narx1, Narx2{:}); % comparison to estimation data

compare(zv, Narx1, Narx2{:}); % comparison to validation data

Модель Narx2 {6}, по-видимому, обеспечивает хорошее соответствие наборам данных оценки и проверки, в то время как ее порядки меньше, чем у Narx1. Основываясь на этом наблюдении, давайте используем [1 3 1] в качестве заказов для последующих испытаний и сохраняем Nlarx2 {6} для сравнения соответствия. Этот выбор порядков соответствует использованию [f (t-1), v (t-1), v (t-2), v (t-3)] в качестве набора регрессоров.

Задание количества единиц для функции Sigmoid Network

Далее рассмотрим структуру функции Sigmoid Network. Наиболее релевантным свойством этого оценщика является количество используемых им сигмоидных единиц. Чтобы иметь возможность задать количество единиц, мы задаем нелинейность в команде NLARX (третий входной аргумент) с помощью объекта, созданного с помощью его конструктора: sigmoidnet. В объектной форме мы можем запросить и настроить различные свойства оценщика.

Sig = sigmoidnet(12); % create a SIGMOIDNET object that uses 12 units
Narx3 = nlarx(ze, [1 3 1], Sig, Options);

Мы сравниваем эту модель с Narx1 и Narx2 {6}, по наборам данных оценки и проверки:

compare(ze, Narx3, Narx1, Narx2{6}); % comparison to estimation data

compare(zv, Narx3, Narx1, Narx2{6}); % comparison to validation data

Новая модель Narx3 обеспечивает не лучшее соответствие, чем Narx2 {6}. Следовательно, мы сохраняем количество единиц до 10 в последующих испытаниях.

Выбор поднабора регрессора для функции нелинейного отображения

Обычно все регрессоры, определенные выбранными порядками ([1 3 1] здесь), используются нелинейной функцией (sigmoidnet). Если количество регрессоров велико, это может увеличить сложность модели. Можно выбрать подмножество регрессоров для использования компонентами sigmoidnet без изменения порядка моделей. Этому способствует свойство, называемое RegingUsage. Его значение представляет собой таблицу, в которой указывается, какой регрессор используется для каких компонентов. Например, мы можем исследовать, используя только те регрессоры, которые вносятся входными переменными, которые используются нелинейным компонентом сигмоидной функции. Это можно сделать следующим образом:

Sig = sigmoidnet(10);
NarxInit = idnlarx(ze.OutputName, ze.InputName, [1 3 1], Sig);
NarxInit.RegressorUsage.("f:NonlinearFcn")(1) = false;
disp(NarxInit.RegressorUsage)
Narx4 = nlarx(ze, NarxInit, Options);
              f:LinearFcn    f:NonlinearFcn
              ___________    ______________

    f(t-1)       true            false     
    v(t-1)       true            true      
    v(t-2)       true            true      
    v(t-3)       true            true      

Это заставляет регрессоры v (t-1), v (t-2) и v (t-3) использоваться сигмоидальными единичными функциями. Регрессор f (t-1) на основе выходных переменных не используется. Следует отметить, что устройство оценки sigmoidnet также содержит линейный член, представленный взвешенной суммой всех регрессоров. Линейный член использует полный набор регрессоров.

Создайте другую модель, использующую регрессоры {y1 (t-1), u1 (t-2), u1 (t-3)} для нелинейного компонента.

Use = false(4,1);
Use([1 3 4]) = true;
NarxInit.RegressorUsage{:,2} = Use;
Narx5 = nlarx(ze, NarxInit, Options);

Модель Narx5, по-видимому, работает очень хорошо как для наборов данных оценки, так и для наборов данных проверки.

compare(ze, Narx5); % comparison to estimation data

compare(zv, Narx5); % comparison to validation data

Попытка использования различных функций нелинейного отображения

До сих пор мы исследовали различные порядки моделей, количество единиц, которые будут использоваться в оценщике Sigmoid Network, и спецификацию подмножества регрессоров, которые будут использоваться нелинейным компонентом sigmoid network. Далее мы попробуем использовать другие типы нелинейных функций. Для использования функций со свойствами по умолчанию можно указать их имя в качестве символьного вектора для команды оценки, например, 'wavenet'. Однако, если требуется изменить свойства этих функций (например, количество единиц или начальные значения их параметров), необходимо использовать форму объекта - создать объект, инкапсулирующий функцию нелинейного отображения, а затем задать его свойства.

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

NarxInit = idnlarx(ze.OutputName, ze.InputName, [1 3 1], 'wavenet');
% Use only regressors 1 and 3 for the nonlinear component of wavenet
NarxInit.RegressorUsage.("f:NonlinearFcn")([2 4]) = false;
Narx6 = nlarx(ze, NarxInit, Options);

Используйте нелинейную функцию «Раздел дерева» с 20 единицами измерения:

TreeNet = treepartition;
TreeNet.NonlinearFcn.NumberOfUnits = 20;
NarxInit.OutputFcn = TreeNet;
Narx7 = nlarx(ze, NarxInit, Options);

Сравнение результатов с Narx3 и Narx5

compare(ze, Narx3, Narx5, Narx6, Narx7) % comparison to estimation data

compare(zv, Narx3, Narx5, Narx6, Narx7) % comparison to validation data

Модели Narx6 и Narx7, кажется, работают хуже, чем Narx5, хотя мы не исследовали все варианты, связанные с их оценкой (такие как выбор нелинейных регрессоров, количество единиц и другие порядки моделей).

Анализ расчетных моделей IDNLARX

После определения и проверки модели с помощью compare команда, мы можем предварительно выбрать тот, который обеспечивает лучшие результаты, не добавляя слишком много дополнительной сложности. Затем выбранная модель может быть проанализирована с помощью таких команд, как PLOT и resid.

Чтобы получить некоторое представление о характере нелинейности модели, проверьте поперечные сечения нелинейной функции F () в расчетной модели f (t) = F (f (t-1), f (t-2), v (t-1),..., v (t-4)). Например, в модели Narx5 функция F () является сигмоидной сетью. Чтобы исследовать форму выходного сигнала F () как функции регрессоров, используйте команду PLOT на модели:

plot(Narx5)

В окне печати представлены инструменты для выбора регрессоров поперечного сечения и их диапазонов. Дополнительные сведения см. в разделе «Справка idnlarx/plot».

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

set(gcf,'DefaultAxesTitleFontSizeMultiplier',1,...
   'DefaultAxesTitleFontWeight','normal',...
   'Position',[100 100 780 520]);
resid(zv, Narx3, Narx5)

Неудача остаточного теста может указывать на динамику, не зафиксированную моделью. Для модели, Narx3, остатки, по-видимому, в основном находятся в пределах 99% доверительных границ.

Создание моделей Хаммерштейна-Винера

Все ранее оцененные нелинейные модели относятся к типу Нелинейные ARX (IDNLARX). Давайте теперь попробуем модели Hammerstein-Wiener (IDNLHW). Эти модели представляют собой последовательное соединение статических нелинейных элементов с линейной моделью. Мы можем рассматривать их как расширения линейных моделей ошибок вывода (OE), в которых мы подвергаем входные и выходные сигналы линейной модели статическим нелинейностям, таким как насыщение или мертвые зоны.

Оценка модели IDNLHW того же порядка, что и линейная модель OE

Линейную модель ОЭ LinMod2 оценивали с использованием порядков nb = 4, nf = 2 и nk = 1. Давайте использовать те же заказы для оценки модели IDNLHW. Мы будем использовать сигмоидальную сеть как нелинейность как для входных, так и для выходных нелинейностей. Оценка облегчается nlhw команда. Это аналогично oe используется для оценки линейной модели OE. Однако в дополнение к заказам моделей необходимо также указать имена или объекты для нелинейных операций ввода-вывода.

Opt = nlhwOptions('SearchMethod','lm');
Nhw1 = nlhw(ze, [4 2 1], 'sigmoidnet', 'sigmoidnet', Opt)
Nhw1 =
Hammerstein-Wiener model with 1 output and 1 input
 Linear transfer function corresponding to the orders nb = 4, nf = 2, nk = 1
 Input nonlinearity: Sigmoid Network with 10 units
 Output nonlinearity: Sigmoid Network with 10 units
Sample time: 0.005 seconds

Status:                                              
Estimated using NLHW on time domain data "MR damper".
Fit to estimation data: 83.72%                       
FPE: 97.72, MSE: 91.2

Сравните отклик этой модели с наборами данных оценки и проверки:

clf
compare(ze, Nhw1); % comparison to estimation data

compare(zv, Nhw1); % comparison to validation data

Мы наблюдаем примерно 70% соответствия данным проверки с помощью модели Nhw1.

Анализ расчетной модели IDNLHW

Что касается нелинейных моделей ARX, то модели Хаммерштейна-Винера могут быть проверены на предмет их природы нелинейности ввода-вывода и поведения линейного компонента с помощью команды ГРАФИК. Для получения дополнительной информации введите «help idnlhw/plot» в окне команд MATLAB.

plot(Nhw1)

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

Щелчком по значку Y_NL выходная нелинейность выглядит как кусочно-линейная функция.

Щелкните значок «Линейный блок» и выберите в выпадающем меню «Карта полюсов-нулей», после чего видно, что нуль и полюс находятся довольно близко друг к другу, что указывает на возможность их удаления, уменьшая тем самым порядки модели.

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

Проверка различных нелинейных функций и порядка моделей

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

Nhw2 = nlhw(ze, [4 2 1], 'saturation', 'sigmoidnet', Opt);

Используйте кусочно-линейную нелинейность для вывода и сигмоидальную сеть для ввода:

Nhw3 = nlhw(ze, [4 2 1],'sigmoidnet', 'pwlinear', Opt);

Используйте линейную модель нижнего порядка:

Nhw4 = nlhw(ze, [3 1 1],'sigmoidnet', 'pwlinear', Opt);

Мы также можем выбрать «удаление» нелинейности на входе, выходе или обоих. Например, чтобы использовать только входную нелинейность (такие модели называются моделями Хаммерштейна), можно указать [] как выходную нелинейность:

Nhw5 = nlhw(ze, [3 1 1],'sigmoidnet', [], Opt);

Сравнение всех моделей

compare(ze, Nhw1, Nhw2, Nhw3, Nhw4, Nhw5) % comparison to estimation data

compare(zv, Nhw1, Nhw2, Nhw3, Nhw4, Nhw5) % comparison to validation data

Nhw1 остается лучшей среди всех моделей, как показывает сравнение с данными проверки, но другие модели, за исключением Nhw5, имеют аналогичную производительность.

Заключения

Мы исследовали различные нелинейные модели для описания взаимосвязи между входом напряжения и выходом демпфирующей силы. Было замечено, что среди моделей Nonlinear ARX Narx2 {6} и Narx5 выступали лучше всех, в то время как модель Nhw1 была лучшей среди моделей Хаммерштейна-Винера. Мы также обнаружили, что модели Nonlinear ARX предоставили наилучший вариант (наилучшие соответствия) для описания динамики демпфера MR.

Narx5.Name = 'Narx5';
Nhw1.Name = 'Nhw1';
compare(zv, LinMod2, Narx2{6}, Narx5, Nhw1)

Мы обнаружили, что для каждого типа модели доступно несколько опций для точной настройки качества результатов. Для моделей Nonlinear ARX можно не только указать порядки моделей и тип нелинейных функций, но и настроить, как используются регрессоры, и изменить свойства выбранных функций. Для моделей Хаммерштейна-Винера можно выбрать тип входных и выходных нелинейных функций, а также порядок линейной составляющей. Для обоих типов моделей в нашем распоряжении имеется множество вариантов нелинейных функций, которые можно использовать. В отсутствие особого предпочтения в отношении структуры модели или знания базовой динамики рекомендуется попробовать различные варианты и проанализировать их влияние на качество полученных моделей.