Comments 8
Моя проблема с популярными статьями про фильтр Калмана в том, что они развивают какое-то магическое мышление у пользователя, давая ему формулы из ниоткуда и рассказывая о чудесных результатах. Чтобы объяснить суть происходящего, совсем не надо залезать в сложные формулы.
Есть линейные фильтры, которые фильтруют сигналы. Чтобы посчитать фильтр, нужно выбрать желаемые частотные характеристики, например, полосу пропускания.
Если мы знаем модель процесса, генерирующего наш сигнал, и эта модель линейна, то можно построить фильтр с учётом этой модели, встроить её в фильтр. Такие штуки называются линейными наблюдателями, они же наблюдатели Люенбергера (Luenberger observer). Но опять же, чтобы построить такой наблюдатель, нам надо выбрать какие-то желаемые характеристики. Обычно - быстродействие.
Теперь вопрос - а как выбрать быстродействие наилучшим способом? Если бы в системе не было помех, то загнали быстродействие в потолок, на сколько скорость вычислений позволяет - и хорошо. Но при шумах сделать слишком быстрый фильтр значит пропускать больше шумов, хуже фильтрация. Слишком медленно - будет плохо реагировать на изменения, запаздывать.
И тут идея - а давайте выберем быстродействие так, чтобы средний квадрат ошибки был минимален! Что, по сути, значит минимальная дисперсия ошибки оценивания, хороший компромис между шумами и отставанием. Ок, получили задачу на оптимизациию: надо найти коэффициенты усиления таки, что итоговая дисперсия минимальна. Решили аналитически эту задачу и получили уравнения коэффициентов фильтра Калмана.
Теперь важное:
Eсли ваши матрицы системы и предположения о шумах постоянны, то никаких пошаговых рассчетов для коэффициентов K и матрицы P не нужно. Не надо путать читателя формулами - все эти пошаговые обновления P и K не нужны, они быстро сходятся к постоянным значениям, которые проще и лучше посчитать заранее. То есть, для систем с постоянными параметрами фильтр Калмана это обычный линейный наблюдатель, где быстродействие выбрано для минимизации дисперсии.
Если же модель системы или параметры шумов меняются во времени, тогда да, надо на каждом шаге пересчитывать коэффициенты. Но суть этих пересчетов теперь понятна - это всё то же решение задачи оптимизации, но с меняющимися параметрами.
Не могу с этим полностью согласиться. Сводить фильтр Калмана исключительно к наблюдателю Люенбергера, коэффициенты которого константы, значит упускать саму суть алгоритма — работу со статистическими параметрами неопределенности. Наблюдатель Люенбергера — это детерминированная система. Такой наблюдатель математически вырождается в комбинацию обычных рекурсивных IIR-фильтров. Для системы второго порядка это, по сути, буквально эквивалентно расчету двух биквадратных секций с постоянными коэффициентами. Фильтр Калмана фундаментально отличается тем, что он оперирует ковариационными матрицами шумов процесса Q и измерений R. И главное — в реальных задачах эти параметры вовсе не обязаны быть константами даже для линейных стационарных систем. В реальной железке статистика шума часто меняется. Например, дисперсия шума датчика R может вырасти из-за внешних наводок, деградации сигнала или кратковременной потери связи (в этом случае R можно динамически устремить к бесконечности). Набор статичных биквадратных секций (или классический наблюдатель Люенбергера) в такой ситуации просто пропустит этот выброс в оценку, так как его реакция жестко зашита. Рекурсивный же фильтр Калмана за счет пошагового обновления матрицы ковариации ошибки P и коэффициента K адаптируется на лету, автоматически снижая доверие к «испорченным» измерениям. Так что рекурсивный пересчет — это не «магическое мышление» и не запудривание мозгов читателю, а критически важный механизм адаптации к изменяющейся статистике сигналов, который обычными фильтрами с постоянными коэффициентами не реализуется в принципе.
Суть фильтра Калмана очень проста - вместо явного указания желаемого быстродействия мы будем решать оптимизационную квадратичную задачу (минимизировать дисперсию). Далее возмём стандартную структуру наблюдателя и используем коэффициенты, полученные из этого решения. Всё, отсюда получаются все формулы, имеющие разный вид в разных задачах и разные интерпретации.
Причем сам фильтр Калмана никак не адаптируется к шумам. Легко видеть из формул, что рассчет коэффициентов не зависит от измерений. Это вы сами должны построить какую-то внешнюю по отношению к фильтру логику, оценить изменения дисперсии и сообщить фильтру новые оценки Q и R. Сам фильтр Калмана этого не делает.
суть фильтра Калмана та же, что была в 1960, когда алгоритм был предложен в NASA для оценки состояния нелинейной системы (= траектории движения) при последовательном получении новых измерений возможно экономным итерационным способом на бортовом компьютере, в принципе эквивалентен мнк, который бортовые машины того времени просто не могли реализовать, с тех пор используется всеми кому не лень, допускает различные обобщения
Вроде, рекурсивный мнк уже был в 50-ых. Впрочем, я не спец по истории техники, могу не знать.
про это не слышал, а двух словах история фильтра Калмана - в 1959 директор Goddard Space Center NASA где занимались баллистикой поставил задачу подготовки к проекту Apollo, Dr. Kalman предложил удачный алгоритм, который промоделировали на IBM 704, и далее использовали на бортовой машине,
если Вы имеете в виду пошаговые методы поиска в мнк, это другое
Ещё пара замечаний.
Для стационарной системы (постоянные матрицы модели и постоянные параметры шумов) фильтр Калмана эквивалентен стационарному наблюдателю Люенбергера со специально выбранным постоянным коэффициентом усиления. Никакого смысла в рекурсивном рассчете для стационарной модели нет.
Если у вас нестационарная модель, то вы можете построить нестационарный наблюдатель Люенбергера. Никто вас не заставляет использовать стационарный наблюдатель для нестационарной системы.
Ммм, фильтр Калмана... делал в студенческие годы на нём алгоритм постобработки измерений в GPS для неподвижного наблюдателя. Сравнивал с методом наименьших квадратов. Особенно интеоесный был случай, когда в вектор состояния наблюдателя кроме собственно координат (и часов) добавлялась оценка тропосферной задержки (из модели Хопфилда, кажется). Тогда автоматом из оценок клординат вычитались систематические тропосферные ошибки.
Фильтр Калмана: от простого к сложному