exponenta event banner

Интерактивная рекурсивная оценка наименьших квадратов

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

Модель двигателя

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

open_system('iddemo_engine');
sim('iddemo_engine')

Модель двигателя настраивается с импульсной передачей, приводящей угол дросселя из открытого в закрытый. Реакция двигателя является нелинейной, в частности время реакции двигателя на частоту вращения, когда дроссель открыт и закрыт, различны.

Через 100 секунд при моделировании происходит неисправность двигателя, приводящая к увеличению инерции двигателя (инерция двигателя, J, моделируется в iddemo_engine/Vehicle Dynamics блок). Изменение инерции приводит к увеличению времени срабатывания двигателя при открытом и закрытом положениях дросселя. Для обнаружения изменения инерции используются интерактивные рекурсивные наименьшие квадраты.

open_system('iddemo_engine/trpm')

Модель оценки

Модель двигателя представляет собой демпфированную систему второго порядка с входными и выходными нелинейностями для учета различного времени отклика при различных положениях дросселя. Используйте рекурсивный блок наименьших квадратов, чтобы определить следующую дискретную систему, которая моделирует механизм:

$y_n = a_1 u_{n-1} + a_2 u_{n-1}^2 + a_3 y_{n-1}$

Поскольку модель оценки явно не включает инерцию, мы ожидаем, что$a$ значения изменятся по мере изменения инерции. Мы используем изменяющиеся$a$ значения для обнаружения изменения инерции.

Двигатель имеет значительную пропускную способность до 16Hz. Установите частоту выборки оценщика в 2 * 160Hz или время выборки$T_s = 0.003$ в секундах.

Рекурсивная настройка блока оценки наименьших квадратов

$u_{n-1}, u_{n-1}^2, y_{n-1}$Члены в оцененной модели являются регрессорами модели и входами в рекурсивный блок наименьших квадратов, который оценивает$a$ значения. Можно внедрить регрессоры, как показано на iddemo_engine/Regressors блок.

open_system('iddemo_engine/Regressors');

Сконфигурируйте блок оценки рекурсивных наименьших квадратов:

  • Начальная оценка: Нет. По умолчанию используется значение 1.

  • Количество параметров: 3, по одному для каждого$a$ коэффициента-регрессора.

  • Матрица ковариации параметра: 1, величина неопределенности в начальной догадке 1. Конкретно, рассматривайте оцененные параметры как случайную величину с дисперсией 1.

  • Время выборки:.$T_s$

Щелкните Алгоритм (Algorithm) и Параметры блока (Block Options), чтобы задать опции оценки:

  • Метод оценки: Forgetting Factor

  • Коэффициент забывания: 1-2е-4. Поскольку$a$ ожидается, что расчетные значения изменятся с инерцией, установите коэффициент забывания на значение меньше 1. Выберите =$\lambda$ 1-2e-4, что соответствует постоянной времени памяти или$T_0 = \frac{T_s}{1-\lambda}$ 15 секундам. 15-секундное время памяти гарантирует, что значительные данные как из открытого, так и из закрытого положения дросселя используются для оценки, когда положение изменяется каждые 10 секунд.

  • Установите флажок Ошибка оценки вывода. Этот вывод блока используется для проверки оценки.

  • Установите флажок Матрица ковариации выходного параметра (Output parameter covariance matrix). Этот вывод блока используется для проверки оценки.

  • Снимите флажок Add enable port.

  • Внешний сброс: None.

Проверка расчетной модели

Error выходные данные Recursive Least Squares Estimator блок дает ошибку на один шаг вперед для оценочной модели. Эта ошибка составляет менее 5%, указывая, что для прогнозирования на один шаг вперед оценочная модель является точной.

open_system('iddemo_engine/Error (%)')

Диагональ матрицы ковариаций параметров дает дисперсии для$a_n$ параметров.$a_3$ Дисперсия мала относительно значения параметра, указывающего на хорошую уверенность в оцененном значении. Напротив$a_1, a_2$, отклонения являются большими относительно значений параметров, указывающих на низкую уверенность в этих значениях.

Хотя небольшая ошибка оценки и ковариации дают уверенность в том, что модель оценивается правильно, она ограничена тем, что ошибка является предиктором на один шаг вперед. Более строгой проверкой является использование расчетной модели в расчетной модели и сравнение с фактическими выходными данными модели. Это реализуется в разделе Предполагаемая модель модели simulink.

Regressors1 блок идентичен блоку Regressors использование блока в рекурсивном оценщике. Единственное различие заключается в том, что сигнал y не измеряется от установки, а подается обратно с выхода расчетной модели. Выходной сигнал блока регрессоров умножается на оценочные$a_n$ значения для получения$\hat{y}_n$ оценки частоты вращения двигателя.

open_system('iddemo_engine/trpm Est')

Оценочные выходные данные модели достаточно хорошо соответствуют выходным данным модели. Установившиеся значения близки, и переходное поведение несколько отличается, но не существенно. Обратите внимание, что через 100 секунд при изменении инерции двигателя расчетный выходной сигнал модели несколько больше отличается от выходного сигнала модели. Это означает, что выбранные регрессоры не могут также фиксировать поведение модели после изменения инерции. Это также предполагает изменение поведения системы.

Оцененный выход модели в сочетании с низкой погрешностью на один шаг вперед и ковариациями параметров дает нам уверенность в рекурсивном оценщике.

Обнаружение изменений инерции двигателя

Модель двигателя настроена на внесение изменения инерции в 100 секунд в моделирование. Рекурсивный оценщик может использоваться для обнаружения изменения инерции.

Рекурсивная оценка занимает около 50 секунд, чтобы сойтись к начальному набору значений параметров. Чтобы обнаружить изменение инерции, мы исследуем$a_1$ коэффициент модели, который влияет на$a_1 u_{n-1}$ термин расчетной модели.

open_system('iddemo_engine/Detect Inertia Change')

Ковариация для, $a_1$0,05562, является большой относительно значения параметра 0,1246 указывающей на низкую уверенность в оцененном значении. Временной график$a_1$ показывает, почему ковариация большая. В частности$a_1$, изменяется, поскольку положение дросселя изменяется, указывая на то, что расчетная модель недостаточно богата для полного захвата различных времен подъема при различных положениях дросселя и нуждается в корректировке. $a_1$Однако это можно использовать для определения изменений инерции как среднего значения$a_1$ изменений при изменении инерции. Для$a_1$ обнаружения изменений инерции двигателя можно использовать пороговый детектор скользящего среднего параметра.

bdclose('iddemo_engine')