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