Шаг фильтра Измерить Исправить

Фильтр Калмана дискретного времени

На этом занятии рассмотрим принцип работы одного, довольно популярного фильтра, который известен под названием «фильтр Кламана». Чтобы лучше понять этот материал, я решил рассмотреть его с позиций конкретного примера.

Предположим, что производятся наблюдения текущего местоположения координаты x стоящего на одном месте человека, используя два источника информации: ГЛОНАСС и GPS:

В определенный момент времени на входе устройства фиксируются наблюдения от этих систем навигации:

Причем, текущее значение полезного сигнала (координата x) искажаются аддитивными шумами: — от GPS и — от ГЛОНАСС. На практике часто такие шумы подчиняются нормальному закону распределения и имеют нулевое МО:

Здесь — дисперсия (мера разброса значений от истинного значения x) для GPS, а — для ГЛОНАСС. Причем, эти величины заранее известны из характеристик систем, и для простоты восприятия, можно положить:

Это примерные значения, используемые исключительно для этого занятия. Настоящие нужно смотреть по документации этих систем или из результатов предварительных экспериментов.

Итак, мы имеем два наблюдения и задача прибора на основе этих величин вычислить значение полезного параметра x – координаты стоящего человека. Как бы мы ни старались, в общем случае найти точное значение x невозможно. Но можно вычислить приближенную величину (оценку), которую обозначим через . То есть, у нас должен быть некий математический алгоритм, который на выходе формирует эту оценку:

Здесь возникает две задачи: во-первых, как построить этот алгоритм и, во-вторых, как оценить качество работы этого алгоритма. Начнем со второй задачи, так как именно от критерия качества зависит вид алгоритма. Очевидно, что любой алгоритм будет приводить к ошибкам оценивания:

При наилучшем алгоритме эти ошибки от эксперимента к эксперименту будут, в среднем, колебаться вокруг нулевого значения, то есть, иметь нулевое МО:

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

Но и здесь есть подводный камень: при одном эксперименте эта величина может быть небольшой, а при другом – намного больше. Поэтому логичнее было бы построить алгоритм, который бы минимизировал не конкретный квадрат ошибки, а в среднем давал бы как можно меньшие ошибки. Понятие в среднем – это, фактически, математическое ожидание, то есть, окончательно, наш критерий качества принимает вид:

Таким образом, нам нужно минимизировать дисперсию (разброс) ошибок оценивания.

Отлично, с этим разобрались. Как нам теперь построить алгоритм, который бы минимизировал этот критерий? Было доказано, что в случае гауссовских шумов минимум дисперсии ошибки обеспечивает следующий алгоритм:

где — некие (пока неизвестные) весовые коэффициенты. И в данном случае от этих коэффициентов зависит величина критерия качества:

Однако, здесь задачу поиска двух коэффициентов можно свести к нахождению всего одного, если заметить, что:

Почему это так? Когда мы с вами определяли величину ошибки:

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

В результате, наш алгоритм обработки наблюдений, принимает вид:

и критерий качества:

Распишем выражение под МО, учитывая, что

Учитывая независимость наблюдений и шумов, квадрат суммы распадается на сумму квадратов:

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

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

или, учитывая, что

приходим к виду:

Что, фактически, означает эта формула? В действительности, мы здесь как бы взвешиваем два наблюдения и большее значение (вес) отдается тому, которое имеет меньшую дисперсию шума. Например, для значений

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

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

Для оценки качества работы этого алгоритма, мы можем в формулу дисперсии ошибки оценивания:

подставить вычисленные значения для и , получим:

Причем, отсюда видно, что оптимальное значение параметра α также равно отношению дисперсии ошибки оценивания на дисперсию шума второго наблюдения:

Сделаем последний шаг и приведем форму записи фильтра Калмана к рекуррентному виду. Смотрите, вот эту формулу:

можно представить и в таком виде:

или, подставляя вместо α выражение через дисперсию ошибок оценивания:

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

с ошибкой оценивания

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

а, затем, уточняется оценка:

Получаем алгоритм рекуррентного построения оценок. Далее, когда придет еще одно наблюдение, допустим от GPS в следующий момент времени:

с дисперсией шума , мы можем уточнить ранее полученную оценку. Снова пересчитываем дисперсию ошибки оценивания:

и пересчитываем оценку:

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

Вот это выражение и представляет собой фильтр Калмана в дискретном времени.

То есть, по мере увеличения числа наблюдений мы будем получать все более точную оценку , доходя до определенного предельного уровня точности:

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

Видео по теме

#1: Метод наименьших квадратов

#2: Метод градиентного спуска

#3: Метод градиентного спуска для двух параметров

#4: Марковские процессы в дискретном времени

Читайте также:  Мопед Racer Рейсер Trophy RC110N

#5: Фильтр Калмана дискретного времени

#6: Фильтр Калмана для авторегрессионого уравнения

#7: Векторный фильтр Калмана

#8: Фильтр Винера

#9: Байесовское построение оценок, метод максимального правдоподобия

#10: Байесовский классификатор, отношение правдоподобия

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

Источник



Фильтр Калмана в мироконтроллерах

При разработке устройств на микроконтроллере неминуемо сталкиваемся с проблемой измерения и ужасных помех. Использование сырых данных становится невозможным и на выручку приходит фильтр Калмана.

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

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

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

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

Фильтр Калмана в мироконтроллерах

где Фильтр Калмана в мироконтроллерах— результирующее значение текущего вычисления,

Фильтр Калмана в мироконтроллерах— коэффициент стабилизации,

Фильтр Калмана в мироконтроллерах— исходное значение текущего измерения,

Фильтр Калмана в мироконтроллерах— результирующее значение предыдущего вычисления.

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

Поведение при фильтрации Калмана

Для испытания я взял аналоговый акселерометр ADXL335 и подключил его к микроконтроллеру ATMega8, считывание данных идет через АЦП.

Установка для тестирования фильтрации Калмана

Код для Bascom-AVR>

Данные от микроконтроллера AVR передаются через UART на компьютер и записываются в EXEL. Для увеличения количества шума датчик закреплен на электродвигателе.

Акселерометр на моторе для тестирования фильтра

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

Фильтрация Калмена

Метод очень даже хорош. Пример аналогичного фильтра низких частот для Arduino:

Источник

Фильтр Калмана: алгоритм, позволяющий понять слияние сенсора

Вы едете на своей машине через туннель. Сигнал GPS пропал. Тем не менее, вы можете получить уведомление о том, что вам следует съездить в туннель. Как мы должны ориентироваться на автомобиле внутри туннеля, который должен знать, где он находится сейчас, учитывая только последнюю позицию?

Краткое примечание по датчикам

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

Подход, который объединяет датчики транспортного средства, может рассчитать положение.

Измерение от датчиков

Предположим, что мы были на въезде в туннель и ехали со скоростью 50 км / ч, тогда навигация действительно может быть рассчитана точно там, где (x = позиция) мы были бы на 1 минуту (t = время) спустя.

Оба датчика имеют случайные ошибки, тракт передачи имеет помехи, и разрешение шины CAN или аналого-цифровых преобразователей может вызвать много неточностей в простом выражении «скорость».

Например, сигнал скорости выглядит так:

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

Таким образом, есть одно, и действительно только одно, максимальное значение (унимодальное) и спред (дисперсия). Если это так, тем не менее, мы можем сделать расчет очень хорошо с помощью хитрости.

Идея фильтра Калмана в одном измерении

Я хотел бы сначала объяснить идею фильтра Калмана (в соответствии сРудольф Эмиль Калман) только с одним измерением. Следующее объяснение заимствовано из Udacity CS373курспоПрофессор Себастьян Трун,

Расчетный шум помогает

Чтобы выполнить расчет оптимально, несмотря на шум измерений,«как сильно»Параметр должен быть известен. Это «как сильно»выражается с дисперсией нормального распределения. Это определяется один раз для используемого датчика, а затем использует только эту «неопределенность» для расчета.

В дальнейшем он больше не рассчитывается с абсолютными значениями, а со средними значениями (μ) и отклонениями σ ² нормального распределения. Среднее значение нормального распределения — это значение, которое мы хотели бы рассчитать. Дисперсия указывает на уровень достоверности. Чем уже нормальное распределение (низкая дисперсия), тем увереннее датчики в измерениях.

Датчик, который измеряет 100% точно, имеет дисперсию σ ² = 0 (он не существует).

Давайте предположим, что сигнал GPS был только что потерян, и навигационная система совершенно неясно, где вы находитесь. Дисперсия высокая, соответствующая кривая действительно плоская. Существует неопределенность.

Нормальное распределение с дисперсией = 20 и средним = 0

Теперь идет измерение скорости от датчика, который также является «неточным» с соответствующей дисперсией. Эти две неопределенности теперь должны быть связаны друг с другом. С помощью правила Байеса выполняется сложение двух гауссовских функций. Профессор Трун объясняет это очень четко вКурс Udacity CS373,

Две части информации (одна для текущей позиции и одна для погрешности измерения датчика) на самом деле дают лучший результат! Чем уже нормальное распределение, тем увереннее результат. Движение ухудшает оценку.

Конечно, транспортное средство также движется, что отрицательно влияет на точность определения местоположения. Датчик, например, может определять вращение колеса и делать предположения о радиусе колеса и может иметь заключение о пройденном расстоянии, но это всегда будет оставаться несколько неточным. Эта неточность движения также описана с нормальным распределением. Вычисления с текущей оценкой в ​​этот раз идут немного иначе, потому что «движение» также можно назвать «прогнозированием». Вы можете оценить после расчета, где вы будете в следующий (измерение) время.

В нашем примере μ просто v * dt, это расстояние, которое мы прошли за время расчета.

Простая реализация этого:

Измерение и обновление: фильтр Калмана

Фильтр Калмана просто вычисляет эти две функции снова и снова

Читайте также:  Формула ПРОМЕЖУТОЧНЫЕ ИТОГИ основные функции с примерами

Фильтр циклически переопределяет среднее значение и дисперсию результата. Фильтр всегда будет уверен в том, где он находится, если показания не слишком сильно отклоняются от прогнозируемого значения.

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

Без матриц вы можете рассчитывать только в одном измерении, что недостаточно для .

Многомерный фильтр Калмана

Я хотел бы объяснить процедуру еще раз на примере транспортного средства с навигационным устройством, которое въезжает в туннель. Последняя известная позиция перед потерей сигнала GPS. После этого в качестве нормальной распределенной измеряемой переменной с шумом доступна только информация о скорости транспортного средства (скорости колес и скорость рыскания). Отсюда скорость рассчитывается.

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

Начальные условия / инициализация

Состояние системы X

В начале нам придется инициализировать с начальным состоянием. В одномерном случае состояние было вектором.

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

Ковариационная матрица P

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

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

Динамическая матрица А

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

Здесь указывается, «где» вектор состояния перемещается от одного шага вычисления к следующему в пределах. Эта динамическая модель в нашем случае является моделью «с постоянной скоростью», поскольку она предполагает, что скорость остается постоянной на этапе вычисления фильтра (дт).

Это просто отражает физические отношения для равномерного движения. Более высокой формой была бы модель постоянного ускорения, которая была бы 6-D фильтром и все еще включала бы ускорения в векторе состояния. В принципе, другая динамика может быть указана здесь.

Матрица дисперсии шума процесса Q

Поскольку движение транспортного средства (в смысле наложенного, нормально распределенного шума) также может быть нарушено, именно здесь вводится матрица ковариации шума процесса. Эта матрица рассказывает нам о фильтре и о том, как состояние системы может «перепрыгивать» с одного шага на другой. Представьте себе автомобиль, который едет автономно. Это может быть нарушено порывом ветра или дорожными ударами, что имеет эффект силы. Изменение скорости водителем также является ускорением, которое действует на транспортное средство. Если ускорение теперь влияет на состояние системы, то физическая зависимость для него равна Q. Матрица представляет собой ковариационную матрицу, содержащую следующие элементы:

Это легко вычислить, поместив вектор и умножив его на предполагаемое стандартное отклонение для ускорения.

Управляющая матрица B и управляющий вход u

Внешние переменные управления (например, рулевое управление, торможение, ускорение и т. Д.) Возможны через матрицу управления. Матрица u будет содержать роботизированный вход системы, который может быть мгновенным ускорением или расстоянием, пройденным системой от IMU или датчика одометра.

Измерительная матрица H

Фильтру также необходимо указать, что измеряется и как оно соотносится с вектором состояния. В примере транспортного средства автомобиль входит в туннель с измерением только положения в первой точке, измеряется только скорость! Значения могут быть измерены непосредственно с коэффициентом 1,0 (т. Е. Скорость измеряется непосредственно в правильной единице), поэтому только в 1,0 задается соответствующая позиция.

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

Ковариационная матрица измерения шума R

Как и в одномерном случае дисперсия, неопределенность измерения также должна быть указана здесь.

Эта неопределенность измерений показывает, насколько можно доверять измеренным значениям датчиков. Поскольку мы измеряем положение и скорость, это матрица 2 × 2. Если датчик очень точный, здесь следует использовать небольшие значения. Если датчик относительно неточный, здесь следует использовать большие значения.

Единичная матрица I

И последнее, но не менее важное: необходима единичная матрица, которая будет использоваться для упрощения уравнений Калмана.

Шаг фильтрации Prediction / Predict

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

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

Это оно. Фильтр Калмана сделал прогнозирующее заявление об ожидаемом состоянии системы в будущем или в наступающем временном шаге. Теперь фильтр будет измерять / корректировать и проверять, хорошо ли соответствует прогноз состояния системы новым измерениям.

Совпадение, выбранное фильтром как меньшее, иллюстрирует определенность, если нет, то что-то не так, что делает фильтр более неопределенным.

Шаг фильтра Измерить / Исправить

Примечание: следующие математические вычисления не должны быть получены.

Из датчиков поступают текущие измеренные значения, с помощью которых инновационный коэффициент (y) получается с использованием измерений, вектора состояния с измерительной матрицей.

Читайте также:  ПлэнтиКар официальный дистрибьютор продукции Stellox

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

Это определяет так называемое усиление Калмана. В нем указывается, должны ли показания или динамика системы быть более знакомыми.

Усиление Калмана уменьшится, если показания (измерения) соответствуют прогнозируемому состоянию системы. Если измеренные значения говорят об обратном, элементы матрицы K становятся больше.

Эта информация теперь используется для обновления состояния системы.

А также определили новую ковариантность для предстоящего шага прогнозирования.

Теперь вернемся к этапу прогнозирования. Графически это выглядит так:

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

Фильтр на работе

Когда мы едем в туннель, записывается последняя известная позиция, полученная от GPS. Фильтр Калмана все еще может предсказать положение транспортного средства, хотя он не измеряется все время

Теперь предположим, что скорость автомобиля доступна примерно каждые 20 м / с черезCAN автобус, 6 итераций — всего 0,1 с. Фильтр сходится относительно быстро, в зависимости от выбора начальных условий. Например, после 100 итераций (что эквивалентно 2 секундам на транспортном средстве) дисперсия уже очень мала, поэтому фильтр уверен в своем оценочном и обновляющем состояниях. Моя реализациялинейный фильтр Калманаможно найти здесь. Результаты:

Python-реализация фильтра Калмана

Дизайн фильтра: Как выбрать Q и R?

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

Этот или / или вопрос может быть решен только на основе конкретного приложения. В некоторых случаях:

  1. Мы просто хотели бы отфильтровать плохо измеряющие датчики для относительно постоянного процесса. Например, мы можем реализовать фильтр Калмана для оптимизации регулятора температуры в печи в ракете или в химической печи.
  2. Мы также хотели бы объединить несколько датчиков, и динамика должна быть сохранена. Соответственно, матрицы должны быть выбраны. Альтернативно, конечно, фильтр может быть спроектирован так, чтобы автоматически адаптироваться во время работы.

Чем отличается фильтр Калмана от рекурсивных наименьших квадратов?

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

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

Источник

Фильтр Калмана. Алгоритм фильтрации данных.

Как то так повелось, что очень нравятся мне всякие алгоритмы, имеющие четкое и логичное математическое обоснование 🙂 Но зачастую их описание в интернете настолько перегружено формулами и расчетами, что общий смысл понять просто невозможно. А ведь понимание сути и принципа работы устройства/механизма/алгоритма намного важнее, чем заучивание огромных формул. Как это ни банально, но запоминание даже сотни формул ничем не поможет, если не знать, как и где их применить…

Собственно, к чему все это. Решил я сделать описание некоторых алгоритмов, с которыми мне приходилось сталкиваться на практике. Постараюсь не перегружать математическими выкладками, чтобы материал был понятным, а чтение легким. И сегодня мы поговорим о фильтре Калмана, разберемся, что это такое, для чего и как он применяется.

Фильтр Калмана.

Начнем с небольшого примера. Пусть перед нами стоит задача определять координату летящего самолета. Причем, естественно, координата (обозначим ее x_k ) должна определяться максимально точно.

Пример работы фильтра Калмана.

На самолете мы заранее установили датчик, который и дает нам искомые данные о местоположении, но, как и все в этом мире, наш датчик неидеален. Поэтому вместо значения x_k мы получаем:

Здесь e_k – ошибка датчика, то есть случайная величина. Таким образом, из неточных показаний измерительного оборудования мы должны получить значение координаты ( x_ ), максимально близкое к реальному положению самолета.

Задача поставлена, перейдем к ее решению!

Пусть мы знаем управляющее воздействие ( s_k ), благодаря которому летит самолет (пилот сообщил нам, какие рычаги он дергает 🙂 ). Тогда, зная координату на k-ом шаге, мы можем получить значение x_ на (k+1) шаге:

Казалось бы, вот оно, то что надо! И никакой фильтр Калмана тут не нужен. Но не все так просто… В реальности мы не можем учесть все внешние факторы, влияющие на полет, поэтому формула принимает следующий вид:

где n_k – ошибка, вызванная внешним воздействием, неидеальностью двигателя итп.

Итак, что же получается? На шаге (k+1) мы имеем, во-первых, неточное показание датчика y_ , а во-вторых, неточно рассчитанное значение x_ , полученное из значения x_ на предыдущем шаге.

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

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

А теперь предположим, что связи с пилотом нет, и мы не знаем управляющее воздействие s_k . Казалось бы, в этом случае фильтр Калмана мы использовать не можем, но это не так 🙂 Упрощаем формулу:

Получаем максимально “облегченную” формулу Калмана, которая тем не менее, несмотря на такие “жесткие” упрощения, прекрасно справляется со своей задачей. Если представить результаты графически, то получится примерно следующее:

Работа фильтра Калмана

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

На этом, пожалуй, все, вот так вот просто мы разобрались с алгоритмом фильтрации Калмана! Надеюсь, что статья оказалась полезной и понятной 🙂

Источник