exponenta event banner

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

Оценить модели Hammerstein-Wiener можно после выполнения следующих задач:

Оценка модели с использованием 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: Piecewise Linear
 Output nonlinearity: Piecewise Linear
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
Вейвлет-сеть'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)

Figure contains an axes. The axes contains 6 objects of type line. These objects represent zv (y1), m1: 25.42%, m2: 13.19%, m3: -9.551%, m4: 70.3%, m5: 35.13%.

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

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

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

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

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);

Figure contains an axes. The axes contains 3 objects of type line. These objects represent z1 (y1), LM: 54.22%, M: 70.56%.

Связанные темы