Этот пример показывает, как реализовать онлайн-рекурсивную оценку методом наименьших квадратов. Вы оцениваете нелинейную модель двигателя внутреннего сгорания и используете рекурсивные наименьшие квадраты, чтобы обнаружить изменения инерции двигателя.
Модель двигателя включает нелинейные элементы для системы дросселя и коллектора и системы сгорания. Вход модели является углом дросселя, а выход модели - скоростью вращения двигателя в об/мин.
open_system('iddemo_engine'); sim('iddemo_engine')
Модель двигателя настраивается с последовательностью импульсов, управляющим углом дросселя от открытого до закрытого. Реакция двигателя нелинейна, в частности, время отклика двигателя на частоту вращения, когда дроссель открыт и закрыт, отличается.
На 100 секундах в симуляции происходит отказ двигателя, вызывающий увеличение инерции двигателя (инерция двигателя J
, моделируется в iddemo_engine/Vehicle Dynamics
блок). Изменение инерции приводит к увеличению времени отклика двигателя при открытом и закрытом положениях дросселя. Вы используете онлайн-рекурсивные наименьшие квадраты, чтобы обнаружить изменение инерции.
open_system('iddemo_engine/trpm')
Модель двигателя является демпфированной системой второго порядка с входной и выходной нелинейностями, чтобы учесть разное время отклика при разных положениях дросселя. Используйте рекурсивный блок методом наименьших квадратов, чтобы идентифицировать следующую дискретную систему, которая моделирует двигатель:
Поскольку модель оценки явно не включает инерцию, мы ожидаем, что значения изменятся по мере изменения инерции. Мы используем изменяющиеся значения, чтобы обнаружить изменение инерции.
Механизм имеет значительную пропускную способность до 16Hz. Установите частоту дискретизации оценщика равную 2 * 160Hz или шаг расчета секунд.
Условия в предполагаемой модели являются регрессорами модели и входами в рекурсивный блок методом наименьших квадратов, который оценивает значения. Можно реализовать регрессоры, как показано на iddemo_engine/Regressors
блок.
open_system('iddemo_engine/Regressors');
Сконфигурируйте рекурсивный блок оценки методом наименьших квадратов:
Первоначальная оценка: Нет. По умолчанию программа использует значение 1.
Количество параметров: 3, по одному для каждого коэффициента регрессора.
Параметрическая ковариационная матрица: 1, величина неопределенности в исходном предположении 1. Конкретно, обработайте оцененные параметры как случайную переменную с отклонением 1.
Выборка:.
Щелкните Алгоритм и Опции блоков, чтобы задать опции оценки:
Метод оценки: Forgetting Factor
Коэффициент забывания: 1-2e-4. Поскольку предполагаемые значения, как ожидается, изменятся с инерцией, установите коэффициент забывания на значение менее 1. Выберите = 1-2e-4, что соответствует постоянной времени памяти или 15 секундам. 15-секундное время памяти гарантирует, что значительные данные как из открытого, так и из закрытого положения дросселя используются для оценки, когда положение изменяется каждые 10 секунд.
Установите флажок Выхода ошибки расчета. Вы используете этот выход блока для проверки оценки.
Установите флажок Выходной параметр ковариации матрице. Вы используете этот выход блока для проверки оценки.
Снимите флажок Добавить порт включения.
Внешний сброс: None
.
The Error
выход Recursive Least Squares Estimator
блок дает ошибку с одним шагом вперед для предполагаемой модели. Эта ошибка менее 5%, что указывает на то, что для одноэтапного предсказания предполагаемая модель является точной.
open_system('iddemo_engine/Error (%)')
Диагональ параметрической ковариационной матрицы приводит отклонения для параметров. Отклонение небольшая относительно значения параметров, указывающего на хорошее доверие в оценочном значении. Напротив, отклонения большие относительно значений параметров, указывающих на низкое доверие этих значений.
Хотя небольшая ошибка расчета и ковариации дают доверие в том, что модель оценивается правильно, она ограничена тем, что ошибка является предиктором с одним шагом вперед. Более строгой проверкой является использование предполагаемой модели в симуляционной модели и сравнение с фактическим выходом модели. Раздел Предполагаемая Модель модели simulink реализует это.
The Regressors1
блок идентичен Regressors
блочное использование в рекурсивной оценке. Единственное различие заключается в том, что сигнал y не измеряется от объекта управления, а поступает обратно с выхода предполагаемой модели. Выход блока регрессоров умножается на оцененные значения, чтобы дать оценку скорости вращения двигателя.
open_system('iddemo_engine/trpm Est')
Предполагаемый выход модели довольно хорошо соответствует выходу модели. Значения в установившемся состоянии близки, и переходное поведение немного отличается, но не значительно. Обратите внимание, что через 100 секунд, когда инерция двигателя изменяет, предполагаемый выход немного больше отличается от выходной модели. Это подразумевает, что выбранные регрессоры не могут захватывать поведение модели также и после изменения инерции. Это также предполагает изменение поведения системы.
Предполагаемая модель выхода объединенная с низкой ошибкой с одним шагом вперед и параметра ковариациями, дает нам доверие в рекурсивной оценке.
Модель двигателя настройки ввести изменение инерции 100 секунд в симуляцию. Рекурсивная оценка может использоваться, чтобы обнаружить изменение инерции.
Рекурсивная оценка занимает около 50 секунд, чтобы сходиться к начальному набору значений параметров. Чтобы обнаружить изменение инерции, мы исследуем коэффициент модели, который влияет на термин предполагаемой модели.
open_system('iddemo_engine/Detect Inertia Change')
Ковариация для, 0,05562, велика относительно значения параметров 0,1246, указывающего на низкое доверие в оцененном значении. График времени показывает, почему ковариация большая. В частности, изменяется, когда положение дросселя изменяется, что указывает на то, что оцененная модель недостаточно богата, чтобы полностью захватить разные времена нарастания при разных положениях дросселя и должна скорректироваться. Однако мы можем использовать это, чтобы идентифицировать изменения инерции как среднее значение изменений, когда изменяется инерция. Можно использовать детектор порога на движущемся среднем значении параметра, чтобы обнаружить изменения инерции двигателя.
bdclose('iddemo_engine')