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

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

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

J.Wang, А. Сано, Т. Чен и Б. Хуан. Идентификация систем Хаммерстайна без явной параметризации нелинейности. Международный журнал Управления, В нажатии, 2008. DOI: 10.1080/00207170802382376.

Экспериментальный Setup

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

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

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

Набор данных, содержащий измерения ввода и вывода, хранился в файле MAT, названном mrdamper.mat. Вход v (t) является скоростью [cm/s] демпфера, и выход f (t) является силой затухания [N]. Файл MAT содержит 3 499 выборок данных, соответствующих частоте дискретизации 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 в два подмножества, сначала 2 000 выборок, которые будут использоваться для оценки (ze) и остальных, чтобы использоваться для валидации результатов (zv).

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

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

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

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

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

  • Для линейных и нелинейных моделей ARX порядки представлены тремя числами: na, nb и nk, которые задают количество мимо выходных параметров, прошлых входных параметров и вводят задержки, используемые для предсказания значения выхода в установленный срок. Набор задержанных временем переменных I/O, заданных порядками, называется "регрессорами". Для большей гибкости в создании регрессоров можно использовать объекты спецификации регрессора (см. linearRegressor, polynomialRegressor, customRegressor).

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

Порядки модели Typically выбраны методом проб и ошибок. Однако порядки линейной модели 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 выбрал Order = [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).

Для получения дополнительной информации о выборе порядка модели смотрите пример, названный "Выбор Структуры модели: Определение Задержки Порядка и Входа Модели".

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

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

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

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%-ю подгонку к данным о валидации. Чтобы достигнуть лучших результатов, мы теперь исследуем использование моделей Nonlinear 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 idTreePartition function 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.

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

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

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

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

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

Мы исследуем использующие различные порядки модели и использование различных нелинейных функций отображения. Использование полиномиальных или пользовательских регрессоров не исследуется. Для способов задать пользовательские регрессоры в моделях IDNLARX, смотрите пример, названный, "Создавая Нелинейные Модели ARX с Нелинейными и Пользовательскими Регрессорами".

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

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

Options = nlarxOptions('SearchMethod', 'lm');
Options.SearchOptions.MaxIterations = 50;
Narx1 = nlarx(ze, [2 4 1], idSigmoidNetwork, 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 команда, используемая для оценки моделей Nonlinear ARX. Narx1 является моделью Nonlinear ARX с регрессорами R: = [f (t-1), f (t-2), v (t-1)... v (t-4)]. Нелинейность является сетью Sigmoid, которая использует комбинацию сигмоидальных модульных функций и линейную взвешенную сумму регрессоров, чтобы вычислить выход. Функция отображения хранится в 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: '<Function inputs>'
          Output: '<Function output>'
       LinearFcn: '<Linear function parameters>'
    NonlinearFcn: '<Sigmoid units and their parameters>'
          Offset: '<Offset parameters>'

Исследуйте качество модели путем сравнения симулированного выхода с предполагаемыми и подтвержденными наборами данных ze и zv:

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

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

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

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

NL = idSigmoidNetwork;
Narx2{1} = nlarx(ze, [3 4 1], NL, Options); % use na = 3, nb = 4, nk = 1.
Narx2{1}.Name = 'Narx2_1';
Narx2{2} = nlarx(ze, [2 5 1], NL, Options); Narx2{2}.Name = 'Narx2_2';
Narx2{3} = nlarx(ze, [3 5 1], NL, Options); Narx2{3}.Name = 'Narx2_3';
Narx2{4} = nlarx(ze, [1 4 1], NL, Options); Narx2{4}.Name = 'Narx2_4';
Narx2{5} = nlarx(ze, [2 3 1], NL, Options); Narx2{5}.Name = 'Narx2_5';
Narx2{6} = nlarx(ze, [1 3 1], NL, 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)] как набор регрессоров.

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

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

Sig = idSigmoidNetwork(12); % create a network 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] здесь), используются нелинейной функцией (сигмоидальная сеть). Если количество регрессоров является большим, это может увеличить сложность модели. Возможно выбрать подмножество регрессоров, которые будут использоваться компонентами сигмоидальной сети, не изменяя порядки модели. Это упрощено свойством под названием 'RegressorUsage'. Его значение является таблицей, которая задает, какой регрессор используются который компоненты. Например, мы можем исследовать использование только те регрессоры, которые внесены входными переменными, которые будут использоваться нелинейным компонентом сигмоидальной функции. Это может быть сделано можно следующим образом:

Sig = idSigmoidNetwork(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) не используется. Обратите внимание на то, что функция idSigmoidNetwork также содержит линейный член, представленный взвешенной суммой всех регрессоров. Линейный член использует полный набор регрессоров.

Создайте другую модель, которая использует регрессоры {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

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

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

Используйте функцию Сети Вейвлета со свойствами по умолчанию. Как сигмоидальная сеть, сеть вейвлета сопоставляет регрессоры с выходом при помощи суммы линейных и нелинейных компонентов; нелинейный компонент использует сумму вейвлетов.

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

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

TreeNet = idTreePartition;
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) тип. Давайте теперь попробуем модели (IDNLHW) Хаммерстайна-Винера. Эти модели представляют последовательную связь статических нелинейных элементов с линейной моделью. Мы можем думать о них как о расширениях линейной ошибки на выходе (OE) модели, где мы подвергаем сигналы ввода и вывода линейной модели к статической нелинейности, такой как насыщение или мертвые зоны.

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

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

Opt = nlhwOptions('SearchMethod','lm');
UNL = idSigmoidNetwork;
YNL = idSigmoidNetwork;
Nhw1 = nlhw(ze, [4 2 1], UNL, YNL, 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

Что касается моделей Nonlinear ARX, модели Хаммерстайна-Винера могут смотреться для их характера нелинейности ввода-вывода и поведения линейного компонента с помощью Команды plot. Для получения дополнительной информации введите "справку idnlhw/plot" в командном окне MATLAB.

plot(Nhw1)

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

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

Нажмите на Линейный значок Блока и выберите Pole-Zero Map в выпадающем меню, затем замечено, что нуль и полюс вполне друг близко к другу, указывая, что они могут быть удалены, таким образом, уменьшая порядки модели.

Мы будем использовать эту информацию, чтобы сконфигурировать структуру модели как показано затем.

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

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

Nhw2 = nlhw(ze, [4 2 1], idSaturation, idSigmoidNetwork, Opt);

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

Nhw3 = nlhw(ze, [4 2 1], idSigmoidNetwork, idPiecewiseLinear, Opt);

Используйте линейную модель более низкоуровневую:

Nhw4 = nlhw(ze, [3 1 1], idSigmoidNetwork, idPiecewiseLinear, Opt);

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

Nhw5 = nlhw(ze, [3 1 1],idSigmoidNetwork, [], 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 мы можем не только задать порядки модели и тип нелинейных функций, но также и сконфигурировать, как регрессоры используются и настраивают свойства выбранных функций. Поскольку Хаммерстайн-Винер моделирует, мы можем выбрать тип ввода и вывода нелинейные функции, а также порядок линейного компонента. Для обоих типов модели мы имеем много вариантов в наличии нелинейных функций в нашем распоряжении, чтобы попытаться использовать. В отсутствии конкретной настройки структуре модели или знанию базовой динамики, рекомендуется попробовать различный выбор и анализировать их эффект на качестве получившихся моделей.