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

Можно оценить модели Хаммерстайна-Винера после выполнения следующих задач:

Оцените модель Используя nlhw

Используйте nlhw и создать и оценить модель Хаммерстайна-Винера. После каждой оценки подтвердите модель путем сравнения его с другими моделями и симуляции или предсказания ответа модели.

Основная оценка

Начните с самой простой оценки с помощью m = nlhw(data,[nb nf nk]). Например:

load iddata3;
% nb = nf = 2 and nk = 1 
m = nlhw(z3,[2 2 1])
m =
Hammerstein-Wiener model with 1 output and 1 input
 Linear transfer function corresponding to the orders nb = 2, nf = 2, nk = 1
 Input nonlinearity: pwlinear with 10 units
 Output nonlinearity: pwlinear with 10 units
Sample time: 1 seconds

Status:                                       
Estimated using NLHW on time domain data "z3".
Fit to estimation data: 75.31%                
FPE: 2.019, MSE: 1.472

Второй входной параметр [nb nf nk] устанавливает порядок линейной передаточной функции, где nb количество нулей плюс 1, nf количество полюсов и nk входная задержка. По умолчанию, оба, средства оценки нелинейности ввода и вывода являются кусочными линейными функциями (см. pwlinear страница с описанием). m idnlhw объект.

Для систем MIMO, nb, nf, и nk ny-by-nu матрицы. Смотрите nlhw страница с описанием для получения дополнительной информации об оценке MIMO.

Сконфигурируйте средства оценки нелинейности

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

m = nlhw(data,[nb,nf,nk],InputNL,OutputNL)

InputNL и OutputNL объекты средства оценки нелинейности. Если ваш входной сигнал является бинарным, набор InputNL к unitgain.

Чтобы использовать средства оценки нелинейности с настройками по умолчанию, задайте InputNL и OutputNL использование векторов символов (таких как 'wavenet' для сети вейвлета или 'sigmoidnet' для сигмоидальной сети).

load iddata3;
m = nlhw(z3,[2 2 1],'sigmoidnet','deadzone');

Если необходимо сконфигурировать свойства средства оценки нелинейности, используйте его объектное представление. Например, чтобы оценить модель Хаммерстайна-Винера, которая использует насыщение в качестве его входной нелинейности и одномерного полинома степени 3 как его выходная нелинейность:

m = nlhw(z3,[2 2 1],'saturation',poly1d('Degree',3));

Третий вход 'saturation' задает нелинейность насыщения со значениями свойств по умолчанию. poly1d('Degree',3) создает одномерный полиномиальный объект степени 3.

Для моделей MIMO задайте объекты использования нелинейности, если вы не хотите использовать ту же нелинейность с настройкой по умолчанию для всех каналов.

Эта таблица суммирует значения, которые задают средства оценки нелинейности.

НелинейностьЗначение (настройка нелинейности по умолчанию)Класс
Кусочный линейный
(значение по умолчанию)
'pwlinear' pwlinear
Один слой сигмоидальная сеть'sigmoidnet' sigmoidnet
Сеть Wavelet'wavenet' wavenet
Насыщение'saturation' saturation
Мертвая зона'deadzone' deadzone
Один -
размерный полином
'poly1d' poly1d
Модульное усиление'unitgain' или [ ]unitgain

Дополнительная доступная нелинейность включает пользовательские сети, которые вы создаете. Задайте пользовательскую сеть путем определения функции под названием gaussunit.m, как описано в customnet страница с описанием. Задайте пользовательский сетевой объект CNetw как:

Для получения дополнительной информации смотрите Доступные Средства оценки Нелинейности для Моделей Хаммерстайна-Винера.

Исключите нелинейность ввода или вывода

Исключите нелинейность для определенного канала путем определения unitgain значение для InputNonlinearity или OutputNonlinearity свойства.

Если входной сигнал является бинарным, набор InputNL к unitgain.

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

Для описания каждого средства оценки нелинейности смотрите Доступные Средства оценки Нелинейности для Моделей Хаммерстайна-Винера.

Итеративно совершенствуйте модель

Оцените модель Хаммерстайна-Винера и затем используйте nlhw команда, чтобы итеративно совершенствовать модель.

load iddata3;
m1 = nlhw(z3,[2 2 1],'sigmoidnet','wavenet');
m2 = nlhw(z3,m1);

В качестве альтернативы используйте pem совершенствовать модель.

m2 = pem(z3,m1);

Проверяйте поисковый критерий завершения в m.Report.Termination.WhyStop. Если WhyStop указывает, что оценка достигла максимального количества итераций, попытайтесь повторить оценку и возможно задать большее значение для MaxIterations.

Запустите еще 30 итераций, запускающихся в модели m1.

opt = nlhwOptions;
opt.SearchOptions.MaxIterations = 30;
m2 = nlhw(z3,m1,opt);

Когда m.Report.Termination.WhyStop значением является Near (local) minimum, (norm(g) < tol или No improvement along the search direction with line search, подтвердите свою модель, чтобы видеть, соответствует ли эта модель соответственно данным. В противном случае решение может застрять в локальном минимуме поверхности функции стоимости. Попытайтесь настроить SearchOptions.Tolerance или SearchMethod опция nlhw набор опции и повторение оценка.

Можно также попытаться тревожить параметры последней модели с помощью init, и затем совершенствуйте модель с помощью nlhw команда.

Случайным образом встревожьте параметры исходной модели m1 о номинальной стоимости.

m1p = init(m1);

Оцените параметры встревоженной модели.

M2 = nlhw(z3,m1p);

Обратите внимание на то, что использование init не гарантирует лучшего решения на дальнейшем улучшении.

Улучшите результаты оценки Используя начальные состояния

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

Задавать оценку начальных состояний во время оценки модели:

load iddata3;
opt = nlhwOptions('InitialCondition', 'estimate');
m = nlhw(z3,[2 2 1],sigmoidnet,[],opt);

Диагностируйте оценку

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

Нелинейная система идентификации черного ящика обычно требует, чтобы больше данных, чем линейная идентификация модели получило достаточно информации о системе. См. также Оценку Модели Поиска и устранения проблем.

Оцените несколько моделей Хаммерстайна-Винера

В этом примере показано, как оценить и сравнить несколько моделей Хаммерстайна-Винера с помощью измеренных данных ввода - вывода.

Загрузите данные об оценке и валидации.

load twotankdata
z = iddata(y,u,0.2);
ze = z(1:1000); 
zv = z(1001:3000);

Оцените несколько моделей с помощью данных об оценке ze и различные порядки модели, задержки и настройки нелинейности.

m1 = nlhw(ze,[2 3 1]);
m2 = nlhw(ze,[2 2 3]);
m3 = nlhw(ze,[2 2 3],pwlinear('NumberofUnits',13),pwlinear('NumberofUnits',10));
m4 = nlhw(ze,[2 2 3],sigmoidnet('NumberofUnits',2),pwlinear('NumberofUnits',10));

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

m5 = idnlhw([2 2 3],'deadzone','saturation');
m5 = nlhw(ze,m5);

Сравните получившиеся модели путем графического вывода выходных параметров модели и измеренного выхода в данных о валидации zv.

compare(zv,m1,m2,m3,m4,m5)

Улучшите линейную модель Используя структуру Хаммерстайна-Винера

В этом примере показано, как использовать структуру модели Хаммерстайна-Винера, чтобы улучшить ранее предполагаемую линейную модель.

После оценки линейной модели вставьте его в структуру Хаммерстайна-Винера, которая включает нелинейность ввода или вывода.

Оцените линейную модель.

load iddata1
LM = arx(z1,[2 2 1]);

Извлеките коэффициенты передаточной функции из линейной модели.

[Num,Den] = tfdata(LM);

Создайте модель Хаммерстайна-Винера, где вы инициализируете линейные свойства B блока и F использование Num и Den, соответственно.

nb = 1;       % In general, nb = ones(ny,nu)
              % ny is number of outputs and nu is number of inputs
nf = nb;
nk = 0;       % In general, nk = zeros(ny,nu)
              % ny is number of outputs and nu is number of inputs
M = idnlhw([nb nf nk],[],'pwlinear');
M.B = Num;
M.F = Den;

Оцените коэффициенты модели, который совершенствовал линейные коэффициенты модели в Num и Den .

M = nlhw(z1,M);

Сравните ответы линейной и нелинейной модели против результатов измерений.

compare(z1,LM,M);

Похожие темы