Этот пример показывает нелинейное моделирование черного ящика динамического поведения магнитореологического жидкого демпфера. Это показывает, как создать Нелинейный ARX и модели Хаммерстайна-Винера демпфера с помощью измерений его скорости и силы затухания.
Данные, используемые в этом примере, были обеспечены доктором Акирой Сано (Университет Кэйо, Япония) и доктором Джиэндонгом Ваном (Пекинский университет, Китай), кто выполнил эксперименты в лаборатории Университета Кэйо. Смотрите следующую ссылку для более подробного описания экспериментальной системы и некоторых связанных исследований.
J.Wang, А. Сано, Т. Чен и Б. Хуан. Идентификация систем Хаммерстайна без явной параметризации нелинейности. Международный журнал Управления, В нажатии, 2008. DOI: 10.1080/00207170802382376.
Магнитореологические (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, заданных порядками, называется "регрессорами".
Поскольку Хаммерстайн-Винер моделирует, которые представляют линейные модели статической нелинейностью ввода-вывода, порядки задают количество полюсов и нулей и вводят задержку линейного компонента. Они заданы числами 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).
Для получения дополнительной информации о выборе порядка модели смотрите пример, названный "Выбор Структуры модели: Определение Задержки Порядка и Входа Модели" (iddemo4.m).
Желательно попробовать линейные модели сначала, потому что они более просты создать. Если линейные модели не обеспечивают удовлетворительные результаты, результаты обеспечивают основание для исследования нелинейных моделей.
Давайте оценим линейные модели 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 обеспечила меньше чем 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 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.
Модели Nonlinear ARX могут быть рассмотрены как нелинейные дубликаты моделей ARX, которые обеспечивают большую гибкость моделирования двумя средними значениями:
Регрессоры могут быть объединены с помощью нелинейной функции, а не взвешенной суммы, используемой моделями ARX. Могут использоваться нелинейные функции, такие как сигмоидальная сеть, двоичное дерево и сеть вейвлета. В идентификационном контексте эти функции вызваны "средства оценки нелинейности".
Регрессоры могут самостоятельно быть произвольными (возможно нелинейный) функции переменных I/O в дополнение к задержанным временем значениям переменных, используемым моделями ARX. Они называются "пользовательскими регрессорами", в отличие от задержанных временем переменных I/O, которые называются "стандартными регрессорами".
Мы исследуем использующие различные порядки модели (которые задают стандартные регрессоры), и использование различных средств оценки нелинейности. Использование пользовательских регрессоров не исследуется. Для способов задать пользовательские регрессоры в моделях IDNLARX, смотрите пример, названный "Нелинейные Модели ARX с Пользовательскими Регрессорами" (idnlbbdemo_customreg.m).
Чтобы начаться, давайте оценим модель IDNLARX порядка [2 4 1] и сигмоидальная сеть как тип нелинейности. Мы будем использовать MaxIterations = 50 и метод поиска Levenberg-Marquardt как опции оценки для всех оценок ниже.
Options = nlarxOptions('SearchMethod', 'lm'); Options.SearchOptions.MaxIterations = 50; Narx1 = nlarx(ze, [2 4 1], 'sigmoidnet',Options)
Narx1 = Nonlinear ARX model with 1 output and 1 input Inputs: v Outputs: f Standard regressors corresponding to the orders: na = 2, nb = 4, nk = 1 No custom regressor Nonlinear regressors: f(t-1) f(t-2) v(t-1) v(t-2) v(t-3) v(t-4) Nonlinearity: sigmoidnet 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)]. Нелинейностью является sigmoidnet
это использует комбинацию сигмоидальных модульных функций и линейную взвешенную сумму регрессоров, чтобы вычислить выход.
Исследуйте качество модели путем сравнения симулированного выхода с предполагаемыми и подтвержденными наборами данных ze и zv:
compare(ze, Narx1); % comparison to estimation data
compare(zv, Narx1); % comparison to validation data
Мы видим лучшую подгонку по сравнению с линейными моделями тех же порядков. Затем мы можем попробовать другие порядки около предложенных SELSTRUC.
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)] как набор регрессоров.
Затем давайте исследуем структуру Сигмоидального Сетевого средства оценки нелинейности. Самое соответствующее свойство этого средства оценки является количеством сигмоидальных модулей, которые это использует. Чтобы смочь задать количество модулей, мы задаем нелинейность в команде NLARX (третий входной параметр) использование объекта, созданного при помощи его конструктора: sigmoidnet
. В объектной форме мы можем запросить и сконфигурировать различные свойства средства оценки.
Sig = sigmoidnet('NumberOfUnits',12); % create a SIGMOIDNET object 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). Если количество регрессоров является большим, это может увеличить сложность модели. Возможно выбрать подмножество регрессоров, которые будут использоваться сигмоидальными модульными функциями, не изменяя порядки модели. Это упрощено свойством под названием 'NonlinearRegressors', который может быть задан к команде NLARX как входной параметр. Например, мы можем исследовать использование только те регрессоры, которые внесены входными переменными, которые будут использоваться сигмоидальными функциями. Это будет достигнуто:
Sig = sigmoidnet('NumberOfUnits',10); Narx4 = nlarx(ze, [1 3 1], Sig, 'NonlinearRegressors', 'input', Options);
Это заставляет регрессоры v (t-1), v (t-2), и v (t-3) использоваться сигмоидальными модульными функциями. Основанный на выходной переменной регрессор f (t-1) не используется. Обратите внимание на то, что sigmoidnet средство оценки также содержит линейный член, представленный взвешенной суммой всех регрессоров. Линейный член использует полный набор регрессоров.
Мы можем выбрать подмножество регрессоров их индексами также, на основе их порядка, показанного getreg
. Например, мы можем выбрать регрессоры f (t-1), v (t-1), и v (t-2) в модели с помощью порядков = [2 3 1] путем определения [1 3 4] как значение свойства NonlinearRegressors.
getreg(Narx2{5}) % view the order of regressors in a model of order [2 3 1] % Choose regressors no. 1, 3 and 4: Narx5 = nlarx(ze, [2 3 1], Sig, 'NonlinearRegressors', [1 3 4], Options);
Regressors: f(t-1) f(t-2) v(t-1) v(t-2) v(t-3)
Модель Narx5, кажется, выполняет очень хорошо и для наборов данных оценки и для валидации.
compare(ze, Narx5); % comparison to estimation data
compare(zv, Narx5); % comparison to validation data
До сих пор мы исследовали различные порядки модели, количество модулей, которые будут использоваться в Сигмоидальном Сетевом средстве оценки и спецификации подмножества регрессоров, которые будут использоваться нелинейным фрагментом сигмоидальной сети. Затем мы пытаемся использовать другие типы средств оценки нелинейности. Для использования средств оценки нелинейности со свойствами по умолчанию мы можем задать ее имя как вектор символов к команде оценки, например, 'wavenet'
. Однако, если мы хотим настроить свойства средств оценки (таких как количество модулей), объектная форма должна использоваться (создайте объект средства оценки нелинейности путем вызова его конструктора и затем установки его свойств).
Используйте средство оценки нелинейности Сети Вейвлета со свойствами по умолчанию:
Narx6 = nlarx(ze, [1 3 1], 'wavenet', 'nlr', [1 3]); % use 'wavenet' as name for Wavelet Network
В вышеупомянутом 'nlr' используется в качестве ярлыка для 'NonlinearRegressors'.
Используйте Древовидное средство оценки нелинейности Раздела с 20 модулями:
TreeNet = treepartition; TreeNet.NumberOfUnits = 20; Narx7 = nlarx(ze, [1 3 1], TreeNet, 'nlr', [1 3]); % IDNLARX model using tree partition
Сравните результаты с 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, несмотря на то, что мы не исследовали все опции, сопоставленные с их оценкой (такие как выбор нелинейных регрессоров, количество модулей и других порядков модели).
Если модель была идентифицирована и подтвердила использование compare
команда, мы можем предварительно выбрать ту, которая обеспечивает лучшие результаты, не добавляя слишком много дополнительной сложности. Выбранная модель может затем анализироваться дальнейшая команда использования, такая как ГРАФИК и resid
.
Чтобы получить некоторое понимание природы нелинейности модели, смотрите поперечные сечения нелинейной функции F () в предполагаемой модели f (t) = F (f (t-1), f (t-2), v (t-1)..., v (t-4)). Например, в модели Narx5, функция F () является сигмоидальной сетью. Чтобы исследовать форму выхода этой функции как функция регрессоров, используйте Команду plot на модели:
plot(Narx5)
Окно графика предлагает инструменты для выбора регрессоров поперечного сечения и их областей значений. Для получения дополнительной информации введите "справку idnlarx/plot" в командном окне MATLAB.
Остаточный тест может использоваться, чтобы далее смотреть модель. Этот тест показывает, являются ли ошибки предсказания белыми и некоррелироваными к входным данным.
set(gcf,'DefaultAxesTitleFontSizeMultiplier',1,... 'DefaultAxesTitleFontWeight','normal',... 'Position',[100 100 780 520]); resid(zv, Narx5)
Отказ остаточного теста может указать на динамику, не полученную моделью. Для модели, Narx5, остаточные значения, кажется, в основном в 99% доверительных границ.
Ранее предполагаемые нелинейные модели являются всем Нелинейным ARX (IDNLARX) тип. Давайте теперь попробуем модели (IDNLHW) Хаммерстайна-Винера. Эти модели представляют последовательную связь статических нелинейных элементов с линейной моделью. Мы можем думать о них как о расширениях линейной ошибки на выходе (OE) модели, где мы подвергаем сигналы ввода и вывода линейной модели к статической нелинейности, такой как насыщение или мертвые зоны.
Линейная модель LinMod2 OE была оценена с помощью порядков 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: sigmoidnet with 10 units Output nonlinearity: sigmoidnet 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.
Что касается моделей Nonlinear ARX, модели Хаммерстайна-Винера могут смотреться для их характера нелинейности ввода-вывода и поведения линейного компонента с помощью Команды plot. Для получения дополнительной информации введите "справку idnlhw/plot" в командном окне MATLAB.
plot(Nhw1)
По умолчанию входная нелинейность построена, показав, что это может быть просто функция насыщения.
Путем нажатия на значок Y_NL выходная нелинейность похожа на кусочную линейную функцию.
Нажмите на Линейный значок Блока и выберите Pole-Zero Map в выпадающем меню, затем замечено, что нуль и полюс вполне друг близко к другу, указывая, что они могут быть удалены, таким образом, уменьшая порядки модели.
Мы будем использовать эту информацию, чтобы сконфигурировать структуру модели как показано затем.
Используйте насыщение для входной нелинейности и сигмоидальную сеть для выходной нелинейности, сохраняя порядок линейного компонента неизменным:
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.
compare(zv, LinMod2, Narx2{6}, Narx5, Nhw1)
Мы нашли, что существует несколько опций, доступных с каждым типом модели, чтобы подстроить качество результатов. Для моделей Nonlinear ARX мы можем не только задать порядки модели и тип средства оценки нелинейности, но также и сконфигурировать, как регрессоры используются и настраивают свойства выбранного средства (средств) оценки. Поскольку Хаммерстайн-Винер моделирует, мы можем выбрать тип средств оценки нелинейности ввода и вывода, а также порядок линейного компонента. Для обоих типов модели мы имеем много вариантов в наличии средств оценки нелинейности в нашем распоряжении, чтобы попытаться использовать. В отсутствии конкретной настройки структуре модели или знанию базовой динамики, рекомендуется попробовать различный выбор и анализировать их эффект на качестве получившихся моделей.