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

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

Модель Engine

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

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$ значения, чтобы обнаружить изменение инерции.

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

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

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

open_system('iddemo_engine/Regressors');

Сконфигурируйте блок Recursive Least Squares Estimator:

  • Первоначальная оценка: 'none'. По умолчанию программное обеспечение использует значение 1.

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

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

  • 'SampleTime' .$T_s$

Нажмите Algorithm и Block Options, чтобы установить опции оценки:

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

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

  • Выберите Выходное поле проверки на ошибки оценки. Вы используете этот блок выход, чтобы подтвердить оценку.

  • Установите флажок ковариационной матрицы Выходного параметра. Вы используете этот блок выход, чтобы подтвердить оценку.

  • Очиститесь Добавление включают флажок порта.

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

Проверка предполагаемой модели

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

open_system('iddemo_engine/Error (%)')

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

В то время как небольшая ошибка оценки и ковариации вселяют веру, что модель оценивается правильно, это ограничивается, в котором ошибка является предиктором "один шаг вперед". Более строгая проверка должна использовать предполагаемую модель в имитационной модели и соответствовать фактическому выходу модели. Раздел Estimated Model simulink модели реализует это.

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

open_system('iddemo_engine/trpm Est')

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

Предполагаемый выход модели, объединенный с низкой ошибкой "один шаг вперед" и ковариации параметра, вселяет в нас веру в рекурсивном средстве оценки.

Обнаружение изменений в инерции Engine

Модель механизма является настройкой, чтобы ввести изменение инерции 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')