Оценить модели Hammerstein-Wiener можно после выполнения следующих задач:
Подготовьте данные, как описано в разделе Подготовка данных для нелинейной идентификации.
(Необязательно) Выберите нелинейный оценщик в разделе Доступные нелинейные оценщики для моделей Хаммерштейна-Винера.
(Необязательно) Оценка или построение полиномиальной модели «вход-выход» структуры «Ошибка вывода» (OE) (idpolyили модель состояния-пространства без компонента возмущения (idss с K = 0) для инициализации модели Хаммерштейна-Винера. См. раздел Инициализация оценки Хаммерштейна-Винера с использованием линейной модели.
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)

В этом примере показано, как использовать структуру модели Хаммерштейна-Винера для улучшения ранее оцененной линейной модели.
После оценки линейной модели вставьте ее в структуру Хаммерштейна-Винера, которая включает входные или выходные нелинейности.
Оцените линейную модель.
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);
