Можно оценить модели Хаммерстайна-Винера после выполнения следующих задач:
Подготовьте свои данные, как описано в Подготовка данных для Нелинейной Идентификации.
(Необязательно) Выберите средство оценки нелинейности в Доступных Средствах оценки Нелинейности для Моделей Хаммерстайна-Винера.
(Необязательно) Оценка или построение полиномиальная модель ввода - вывода структуры Ошибки на выходе (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 with 10 break-points Output nonlinearity: Piecewise linear with 10 break-points 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
входная задержка. По умолчанию, оба, средства оценки нелинейности ввода и вывода являются кусочными линейными функциями (см. idPiecewiseLinear
страница с описанием). m
idnlhw
объект.
Для систем MIMO, nb
, nf
, и nk
ny-by-nu матрицы. Смотрите nlhw
страница с описанием для получения дополнительной информации об оценке MIMO.
Можно задать различное средство оценки нелинейности, чем кусочные линейные средства оценки по умолчанию.
m = nlhw(data,[nb,nf,nk],InputNL,OutputNL)
InputNL
и OutputNL
объекты средства оценки нелинейности. Если ваш входной сигнал является бинарным, набор InputNL
к idUnitGain
.
Чтобы использовать средства оценки нелинейности с настройками по умолчанию, задайте InputNL
и OutputNL
использование конструкторов без входных параметров или их имен как векторы символов (такие как 'idWaveletNetwork' для сети вейвлета или 'idSigmoidNetwork' для сигмоидальной сети).
load iddata3; m = nlhw(z3,[2 2 1],'idSigmoidNetwork','idDeadZone');
Если необходимо сконфигурировать свойства средства оценки нелинейности, используйте его объектное представление. Например, чтобы оценить модель Хаммерстайна-Винера, которая использует насыщение в качестве его входной нелинейности и одномерного полинома степени 3 как его выходная нелинейность:
m = nlhw(z3,[2 2 1],'idSaturation',idPolynomial1D(3));
Третий вход 'idSaturation'
задает нелинейность насыщения со значениями свойств по умолчанию. idPolynomial1D(3)
создает одномерный полиномиальный объект степени 3. Конечно, вы, возможно, использовали конструктора idSaturation непосредственно вместо вектора символов 'idSaturation'.
Для моделей MIMO задайте объекты использования нелинейности или массив ячеек из символьных векторов, представляющий имена нелинейности. Если одно имя используемый (вектор символов), то же значение применяется ко всем каналам.
Эта таблица суммирует значения, которые задают средства оценки нелинейности.
Нелинейность | Значение (настройка нелинейности по умолчанию) | Класс |
---|---|---|
Кусочный линейный (значение по умолчанию) | 'idPiecewiseLinear'
| idPiecewiseLinear |
Один слой сигмоидальная сеть | 'idSigmoidNetwork'
| idSigmoidNetwork |
Сеть Wavelet | 'idWaveletNetwork'
| idWaveletNetwork |
Насыщение | 'idSaturation'
| idSaturation |
Мертвая зона | 'idDeadZone'
| idDeadZone |
Один - размерный полином | 'idPolynomial1D'
| idPolynomial1D |
Модульное усиление | 'idUnitGain' или [ ] | idUnitGain |
Дополнительная доступная нелинейность включает пользовательские сети, которые вы создаете. Задайте пользовательскую сеть путем определения функции под названием gaussunit.m
, как описано в idCustomNetwork
страница с описанием. Задайте пользовательский сетевой объект CNetw
как:
CNetw = idCustomNetwork(@gaussunit);
m = nlhw(z3,[2 2 1],'idSaturation',CNetw);
Для получения дополнительной информации смотрите Доступные Средства оценки Нелинейности для Моделей Хаммерстайна-Винера.
Исключите нелинейность для определенного канала путем определения idUnitGain
значение для InputNonlinearity
или OutputNonlinearity
свойства.
Если входной сигнал является бинарным, набор InputNL
к idUnitGain
.
Для получения дополнительной информации об оценке модели и свойствах, смотрите nlhw
и idnlhw
страницы с описанием.
Для описания каждого средства оценки нелинейности смотрите Доступные Средства оценки Нелинейности для Моделей Хаммерстайна-Винера.
Оцените модель Хаммерстайна-Винера и затем используйте nlhw
команда, чтобы итеративно совершенствовать модель.
load iddata3;
m1 = nlhw(z3,[2 2 1],idSigmoidNetwork, idWaveletNetwork);
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],idSigmoidNetwork,[],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],idPiecewiseLinear('NumberofUnits',13),idPiecewiseLinear('NumberofUnits',10)); m4 = nlhw(ze,[2 2 3],idSigmoidNetwork('NumberofUnits',2),idPiecewiseLinear('NumberofUnits',10));
Альтернативный способ выполнить оценку состоит в том, чтобы сконфигурировать структуру модели сначала с помощью idnlhw
, и затем оцените модель.
m5 = idnlhw([2 2 3],idDeadZone,idSaturation); 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],[],'idPiecewiseLinear'); M.B = Num; M.F = Den;
Оцените коэффициенты модели, который совершенствовал линейные коэффициенты модели в Num
и Den
.
M = nlhw(z1,M);
Сравните ответы линейной и нелинейной модели против результатов измерений.
compare(z1,LM,M);