Comments 35
Но главная разница — в том что фильтр Калмана позволяет оценивать состояние системы когда оно изменяется во времени. В примере с равноускоренным движением фильтр Калмана оценивает ускорение и «догоняет» график. При усреднении же просто накапливалось бы отставание оценки от реального значения.
А как определить применимость фильтра Калмана к объекту, модель поведения которого неизвестна? С физическими телами — понятно, даже неизвестный для нас объект будет подчиняться физическим законам.
А вот например пользовательский трафик на сайт — нужно сначала подобрать какую-то правдоподобную модель сначала? Есть какие-то методики?
Без модели фильтр Калмана теряет часть своих магических свойств и становится g-h (или альфа-бета) фильтром.
Вопросом построения моделей динамических систем занимается идентификация систем (https://ru.wikipedia.org/wiki/Идентификация_систем). Насколько я знаю, универсальной методики построения модели для произвольного процесса не существует.
От обычного LowPass фильтра (ФНЧ) до экспоненциального сглаживания (обычного, двойного, тройного...)
В каких-то случаях может подойти метод Хольта (развитие экспоненциального сглаживания).
Также может оказаться интересным фильтр Ходрика-Прескотта.
Тут надо смотреть по ситуации что лучше подойдет в том или ином случае. Иногда бывает достаточно B-сплайна или сглаживающего сплайна (с подбором коэффициента сглаживания)
С другой стороны, если пофантазировать то можно например представить трафик на сайт как сумму какой-то реальной модели (органический ретеншн, объем рекламы, сезонность, переходы из поиска) плюс какой-то случайный шум (случайно зашли, кто-то опубликовал ссылку). В этом случае можно было бы вычленить тренд даже в случае ускорения. Другое дело что модели нет, ускорения добиться очень сложно, да и кейс не совсем про реальное время.
Делал компас на Unity и для стабилизации сначала написал «усреднение в окне», но когда показания были в районе 0(360) градусов, то усреднение играло злую шутку. Удалось решить проблему только фильтром Калмана.
фильтром который просто усредняет значение в каком-то окнеВы придумали фильтр скользящего среднего. Так себе фильтр, главный недостаток — вносит постоянную задержку.
вносит постоянную задержку.Не посоветуете литературу, где бы это пояснялось с формулами? На пальцах-то понимаю, а вот доказать не возьмусь.
Не посоветуете литературу, где бы это пояснялось с формулами?Не посоветую по одной причине: не погружался в дебри литературы. Мне доказательство не требуется: я это отставание своими глазами видел, и как этот фильтр работает понимаю.
На самом деле, это предельно просто. У вас есть N последних измерений, и за отфильтрованное значение вы принимаете их среднее арифметическое, без весовых коэффициентов.
Обработка сигналов это совсем не моя область, но вроде как любой FIR фильтр вносит задержку в половину размерности?
Можно привести внятный пример — вот у нас такие-то датчики измеряют то-то. У нас есть такие-то проблемы или мы хотим то-то. Мы взяли фильтр Калмана (я так и не понял, что это), который нужен вот для чего, применили и всё стало вот так — т.е. хорошо.
У вас статья построена по принципу от общего к частному, а это предполагает, что читатель понимает, что скрывается за обобщенными формулировками. А то вопросы возникают сходу.
1. Речь о фильтре? Что фильтруется? Фильтры сигнала типа Бесселя и т.п. — это понятно, а здесь?
2. «фильтр Калмана может предугадывать, каким будет состояние системы в следующий момент времени» — если есть модель — то я и сам предскажу, в чем тут роль фильтра?
3. Так что мы получаем в результате?
Речь о фильтре? Что фильтруется? Фильтры сигнала типа Бесселя и т.п. — это понятно, а здесь?
Фильтруется случайный шум датчиков.
«фильтр Калмана может предугадывать, каким будет состояние системы в следующий момент времени» — если есть модель — то я и сам предскажу, в чем тут роль фильтра?
Фильтр использует предсказание следующего состояния на основе предыдущего для повышения эффективности фильтрации шума.
хрестоматийное применение фильтра калмана - стабилизация оси диаграммы направленности чего нибудь на корабле с заданной точноостью в условиях морской качки
Нет, это больше похоже на наблюдаемость. Вообще состояния и передаточные функции это разные сущности. В передаточных функциях нет состояний, они про модель вход-выход, и переход от передоточных функций к модели вход-состояние-выход неоднозначный.
Есть классификация линейная-нелинейная, а есть классификация дискретная-непрерывная. Это две отдельные классификации. Линейность это больше про суперпозицию, f(aX+bY) = af(X)+bf(Y). В линейных системах реакция на сумму входных воздействий это сумма реакций на отдельные компоненты. В нелинейных такого нет. Всё, что про передаточные функции, это линейные системы.
Небольшая ремарка. Стоит помнить, что при постоянных матрицах Q, R фильтр Калмана это не какая-то специальная штука, а обычный линейный наблюдатель, в котором коэффициенты посчитаны как оптимальные относительно заданного шума. Так что если матрицы Q, R не соответствуют реальной физике, а берутся из головы и итеративно подгоняются по месту, то это уже и не совсем фильтр Калмана, а просто какое-то устройство оценивания.
Например, стоило сказать, что благодаря фильтру Калмана мы можем объединять измерения из нескольких источников так, что конечная точность в результате будет превышать точность каждого из источника по-отдельности.
Для интересующихся узнать, что представляет собой фильтр Калмана, рекомендую:
How a Kalman filter works, in pictures.
Честно говоря, ожидал реализацию фильтра Калмана "на пальцах".
А вот это вот всё - "возьмём библиотеку, и вуаля", вообще фигня какая-то
Фильтр Калмана — это легко