Эта тема описывает, как программное обеспечение оценивает выход средств оценки нелинейности и использует этот выход, чтобы вычислить ответ модели Хаммерстайна-Винера.
Оценка выхода нелинейности для входа u требует, чтобы вы сначала извлекли нелинейность ввода или вывода из модели:
F = M.InputNonlinearity; H = M.OutputNonlinearity;
Оцените F (u):
w = evaluate(F,u)
где u
скаляр, представляющий значение входного сигнала в установленный срок.
Можно оценить выход в моменты нескольких времени путем оценки F для нескольких временных стоимостей одновременно с помощью вектор-столбца входных значений:
w = evaluate(F,[u1;u2;u3])
Точно так же можно оценить значение нелинейности H с помощью выхода линейного блока x (t) как его вход:
y = evaluate(H,x)
Для моделей MIMO F и H являются векторами из длины nu и ny, соответственно. nu является количеством входных параметров, и ny является количеством выходных параметров. В этом случае необходимо оценить предсказанный выход каждой нелинейности отдельно.
Например, предположите, что вы оцениваете 2D входную модель:
M = nlhw(data,[nb nf nk],[wavenet;poly1d],'saturation')
Во входной нелинейности:
F = M.InputNonlinearity F1 = F(1); F2 = F(2);
F
вектор-функция, содержащая два элемента: F=[F1(u1_value);F2(u2_value)]
, где F1
isa wavenet
объект и F2
isa poly1d
объект. u1_value
первый входной сигнал и u2_value
второй входной сигнал.
Оцените F
путем оценки F1
и F2
отдельно:
w1 = evaluate(F(1),u1_value); w2 = evaluate(F(2),u2_value);
Общие затраты с линейным блоком, w
, вектор из w1
и w2
(w = [w1 w2]
).
Точно так же можно оценить значение нелинейности H:
H = M.OutputNonlinearity;
В этом примере показано, как программное обеспечение оценивает симулированный выход первым вычислением выхода средств оценки нелинейности ввода и вывода.
Оцените модель Хаммерстайна-Винера.
load twotankdata estData = iddata(y,u,0.2); M = nlhw(estData,[1 5 3],'pwlinear','poly1d');
Извлеките входную нелинейность, линейную модель, и выведите нелинейность как отдельные переменные.
uNL = M.InputNonlinearity; linModel = M.LinearModel; yNL = M.OutputNonlinearity;
Симулируйте выход входного средства оценки нелинейности.
Входные данные для симуляции
u = estData.u;
Вычислите выход входной нелинейности
w = evaluate(uNL,u);
Вычислите ответ линейной модели к входу w
и нулевые начальные условия.
x = sim(linModel,w);
Вычислите выход модели M
Хаммерстайна-Винера как выход выходного средства оценки нелинейности к входу
x
.
y = evaluate(yNL,x);
Предыдущий набор команд эквивалентен прямой симуляции выхода M
использование sim
команда.
ysim = sim(M,u);
Постройте y
и ysim
, ручные и прямые результаты симуляции, соответственно.
time = estData.SamplingInstants; plot(time,y,'b',time,ysim,'--r'); xlabel('Time'); ylabel('Simulated Output')
График показывает тот y
и ysim
то же самое.