Этот пример показывает, как реализовать онлайновую рекурсивную оценочную функцию методом наименьших квадратов. Вы оцениваете нелинейную модель двигателя внутреннего сгорания и используете рекурсивные наименьшие квадраты, чтобы обнаружить изменения в инерции механизма.
Модель механизма включает нелинейные элементы для дросселя и разнообразной системы и системы сгорания. Образцовый вход является углом дросселя, и образцовый вывод является скоростью вращения двигателя в об/мин.
open_system('iddemo_engine'); sim('iddemo_engine')
Модель механизма настраивается с импульсным train, выгоняющим угол дросселя, открытый для закрытого. Ответ механизма нелинеен, в частности время отклика об/мин механизма, когда дроссель открыт и закрывается, отличается.
В 100 секунд в симуляцию отказ механизма происходит, заставляя инерцию механизма увеличиться (инерция механизма, J
, моделируется в блоке iddemo_engine/Vehicle Dynamics
). Изменение инерции заставляет время отклика механизма в открытых и закрытых положениях дросселя увеличиваться. Вы используете онлайновые рекурсивные наименьшие квадраты, чтобы обнаружить изменение инерции.
open_system('iddemo_engine/trpm')
Модель механизма является ослабленной системой второго порядка с нелинейностью ввода и вывода, чтобы считать в течение различного времени отклика в различных положениях дросселя. Используйте рекурсивный блок наименьших квадратов, чтобы идентифицировать следующую дискретную систему, которая моделирует механизм:
Поскольку модель оценки явным образом не включает инерцию, которую мы ожидаем, что значения изменят, когда инерция изменяется. Мы используем изменяющиеся значения, чтобы обнаружить изменение инерции.
Механизм имеет значительную пропускную способность до 16 Гц. Установите частоту дискретизации средства оценки на 2*160 Гц или шаг расчета секунд.
Условия в предполагаемой модели являются образцовыми регрессорами и входными параметрами к рекурсивному блоку наименьших квадратов, который оценивает значения. Можно реализовать регрессоры как показано в блоке iddemo_engine/Regressors
.
open_system('iddemo_engine/Regressors');
Сконфигурируйте блок Recursive Least Squares Estimator:
Первоначальная оценка: 'none'. По умолчанию программное обеспечение использует значение 1.
Количество параметров: 3, один для каждого коэффициента регрессора.
Ковариационная матрица параметра: 1, сумма неуверенности в исходном предположении 1. Конкретно обработайте предполагаемые параметры как случайную переменную с отклонением 1.
'SampleTime' .
Нажмите Algorithm и Block Options, чтобы установить опции оценки:
Метод оценки: Forgetting Factor
Упущение Фактора: 1-2e-4. Поскольку ориентировочные стоимости, как ожидают, изменятся с инерцией, установят фактор упущения на значение меньше чем 1. Выберите = 1-2e-4, который соответствует временной константе памяти или 15 секунд. 15 вторых раз памяти гарантируют, что значительные данные от обоих, открытое и закрытое положение дросселя используется для оценки в качестве положения, изменяются каждые 10 секунд.
Выберите Выходное поле проверки на ошибки оценки. Вы используете этот блок вывод, чтобы подтвердить оценку.
Установите флажок ковариационной матрицы Выходного параметра. Вы используете этот блок вывод, чтобы подтвердить оценку.
Очиститесь Добавление включают флажок порта.
Внешний сброс: 'none'.
Error
вывод блока Recursive Least Squares Estimator
дает ошибку "один шаг вперед" для предполагаемой модели. Эта ошибка составляет меньше чем 5%, указывающих, что для прогноза "один шаг вперед" предполагаемая модель точен.
open_system('iddemo_engine/Error (%)')
Диагональ матрицы ковариаций параметра дает отклонения для параметров. Отклонение является небольшим относительно значения параметров, указывающего на хорошую уверенность в ориентировочной стоимости. Напротив, отклонения являются большими относительно значений параметров, указывающих на низкую уверенность в этих значениях.
В то время как небольшая ошибка оценки и ковариации вселяют веру, что модель оценивается правильно, это ограничивается, в котором ошибка является предиктором "один шаг вперед". Более строгая проверка должна использовать предполагаемую модель в имитационной модели и соответствовать фактическому образцовому выводу. Раздел Estimated Model simulink модели реализует это.
Блок 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')