В этой теме описывается, как программное обеспечение оценивает выходы оценщиков нелинейности и использует этот выход для вычисления отклика модели Гаммерштейна-Винера.
Оценка выхода нелинейности для входа 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 - количество выходов. В этом случае вы должны вычислить предсказанный выход каждой нелинейности отдельно.
Например, предположим, что вы оцениваете модель с двумя входами:
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
является wavenet
объект и F2
является 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
те же самые.