Этот пример показывает, как оценить модели Гаммерштейна-Винера с помощью линейных моделей OE.
Загрузите данные оценки.
load throttledata.mat
Эта команда загружает объект данных ThrottleData
в рабочую область. Объект содержит входную и выходную выборки, собранные из дроссельной системы двигателя, отобранные со скоростью 100Hz.
Двигатель постоянного тока управляет углом открытия дроссельного клапана в дроссельной системе. Шаговый сигнал (в вольтах) управляет двигателем постоянного тока. Выходным выходом является угловое положение (в степенях) клапана.
Постройте график данных для просмотра и анализа характеристик данных.
plot(ThrottleData)
В нормальной рабочей области значений 15-90 степеней входная и выходная переменные имеют линейную зависимость. Вы используете линейную модель низкого порядка, чтобы смоделировать эту связь.
В дроссельной системе жёсткого упора ограничивает положение клапана 90
степени, и пружина приводит клапан в 15
степени, когда двигатель постоянного тока повернут. Эти физические компоненты вводят нелинейности, которые линейная модель не может захватить.
Оцените модель Гаммерштейна-Винера, чтобы смоделировать линейное поведение этой системы с одним входом с одним выходом в нормальной рабочей области значений.
% Detrend the data because linear models cannot capture offsets. Tr = getTrend(ThrottleData); Tr.OutputOffset = 15; DetrendedData = detrend(ThrottleData,Tr); % Estimate a linear OE model with na=2, nb=1, nk=1. opt = oeOptions('Focus','simulation'); LinearModel = oe(DetrendedData,[2 1 1],opt);
Сравните моделируемый ответ модели с данными оценки.
compare(DetrendedData, LinearModel)
Линейная модель захватывает поведение подъема и осаждения в линейной рабочей области значений, но не учитывает насыщение выхода при 90 степенях.
Оцените модель Гаммерштейна-Винера, чтобы смоделировать насыщенность выхода.
NonlinearModel = nlhw(ThrottleData, LinearModel, [], 'saturation');
Программа использует порядки и задержку линейной модели для порядков нелинейной модели. В сложение программа использует полиномы B и F линейной передаточной функции.
Сравните нелинейную модель с данными.
compare(ThrottleData, NonlinearModel)