exponenta event banner

Как программное обеспечение вычисляет выходные данные модели Hammerstein-Wiener

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

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

См. также

Связанные темы