Как программное обеспечение вычисляет выходы модели Гаммерштейна-Винера

В этой теме описывается, как программное обеспечение оценивает выходы оценщиков нелинейности и использует этот выход для вычисления отклика модели Гаммерштейна-Винера.

Оценка нелинейности (SISO)

Оценка выхода нелинейности для входа 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)

Для моделей 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')

Figure contains an axes. The axes contains 2 objects of type line.

График указывает, что y и ysim те же самые.

См. также

Похожие темы