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

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

Оценка нелинейности (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 является количеством выходных параметров. В этом случае необходимо оценить предсказанный вывод каждой нелинейности отдельно.

Например, предположите, что вы оцениваете 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 является объектом 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 являются тем же самым.

Смотрите также

Похожие темы