Можно оценить модели Гаммерштейна-Винера после выполнения следующих задач:
Подготовьте свои данные, как описано в Подготовке данных для нелинейной идентификации.
(Необязательно) Выберите оценщик нелинейности в доступных оценщиках нелинейности для моделей Гаммерштейна-Винера.
(Необязательно) Оцените или создайте полиномиальную модель ввода-вывода структуры Output-Error (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);