Аннотация
Метод Р. Калмана используется для сглаживания рядов, которые используются повсеместно, так как любую функцию можно представить в виде ряда.Поэтому он получил большое распространение в области обработки научной информации, в анализе информации получаемой с датчиков. В этой статье мы реализуем алгоритм Калмана на языке Python и наглядно увидим его работу.
Введение
Рудольф Эмиль Калман Венгерский инженер разработал данный алгоритм, а позже алгоритм назвали в честь Р. Калмана. Основная цель алгоритма предложенного Калманом это борьба с погрешностями измерений, шумами при обработке информации, что позволяет повысить эффективность ее обработки, очевидно, что это это имеет большое значение науке и технике. Основная информация о самом алгоритме и используемых переменных представлена в работе [1]. Поэтому мы опустим описание и перейдем к реализации.
Программная реализация алгоритма
Для реализации алгоритма нам потребуются библиотеки: random и ее функция randint для генерирования случайного целочисленного ряда;
matplotlib.pyplot для построения графика;
import numpy as np для обработки массивов.
![](https://habrastorage.org/getpro/habr/upload_files/788/21c/fa9/78821cfa930162d1913761c7e25eff1a.png)
Визуализация на графике
На графике оранжевым цветом обозначен ряд сгенерированный функцией random.randint. Синим цветом изображен сглаженный исходный ряд. Несложно заметить, что многочисленные пики исходного ряда были преобразованы в гладкие отображения.
![](https://habrastorage.org/getpro/habr/upload_files/77a/1dc/52c/77a1dc52c3302219fab1e94e14ea5d1e.png)
Выводы
Таким образом, мы реализовали алгоритм Калмана на языке Python и построили его график для визуального отображения его работы. Рассмотренный пример, это иллюстрация работы алгоритма Калмана. Автор, данной статьи, использует его для сглаживания метеоданных в своих проектах, но это уже другая история.
Список литературы
Комментарии (14)
mclander
22.10.2022 20:01+5Да примерно так я писал код на своей первой и единственной олимпиаде по программированию.
Ещё удивлялся с соседей, зачем они пишут комментарии и "говорящие" переменные, на исполнение кода это же не влияет.
Подсказка - пара формул в начале и объяснение что такое параметры a,b,c несказанно помогут статье. Upd: Коммент выше на это же и намекает.
И, кстати, тот же код было бы круче переписать на JS и разместить в одной из песочниц, дабы желающие могли его примучать прямо в браузере. Считай - киллер фича.
zlat_zlat
22.10.2022 21:18+8Честно говоря, это не статья, а какая-то лабораторная работа. Введение, вывод и копипаст с пропавшими знаками препинания.
Возможно, статью про метеоданные и связанные проекты удастся написать более интересной?
DSolodukhin
23.10.2022 00:32+7Честно говоря, это не статья, а какая-то лабораторная работа.
Зима близко, а с ней зачётная неделя. Некоторые ушлые преподаватели принимают зачёты статьями на Хабре. В прошлом году тут уже был наплыв недостатей от студентов.
zlat_zlat
23.10.2022 08:07К счастью, пропустил такое явление, но это многое объясняет)
Интересно, зачем преподавателям это? Это же даже не реклама вуза, а Хабр страдает. Внутренняя «гордость», студенты написали 100500 статей?
WASD1
23.10.2022 18:57Я могу увидеть как минимум 2 мотива:
- хороший опыт для студента
- не проверять работу, а просто согласится с мнением комментирующих.
progchip666
22.10.2022 22:08-4За что так минусовать то, человек старался всё таки. Хорошие тексты приходят с опытом.
adeshere
22.10.2022 23:35+10За что так минусовать то, человек старался всё таки. Хорошие тексты приходят с опытом.
Я обычно ставлю плюсы раз в десять чаще, чем минусы... Но конкретно вот этой статье просто невозможно дать другую оценку, кроме минуса. Во-первых, остро не хватает пояснения, чем отличается фильтр Калмана от других фильтров, предназначенных для сглаживания рядов. Ведь таких методов (фильтров) - вагон и маленькая тележка. Вот я хочу сгладить ряд - почему (в какой ситуации) я должен выбрать именно фильтр Калмана, а в каком случае лучше подойдет что-то другое? Ведь при анализе данных идти надо всегда от задачи, подбирая наиболее подходящий инструмент под нее. А не наоборот (как известно, когда в руках молоток, то все вокруг похоже на гвозди).
Во-вторых, если уж Вы даете код в виде скриншота, то хотя бы продублируйте его в виде в текста (можно под спойлером). Иначе как мы, читатели, должны использовать этот код?
В-третьих, Вы приводите графики исходного и сглаженного ряда, но ни словом не поясняете цель этого сглаживания: какая задача решалась, насколько успешно она решена, почему были выбраны именно такие значения a, b и c, и что поменяется при их изменении.
Без всего этого "руководство" получилось крайне ущербным. Слегка утрируя, вместо статьи можно было дать три ссылки: на работу [1], на скриншот с кодом и на картинку с графиками. И пусть каждый понимает, как хочет. Извините, но это больше похоже на "смотрите, как я могу!", чем на попытку системного введения в очень интересную тему, причем понятного и полезного для новичков.
P.S. Надеюсь, что критика была конструктивной, и что автор не обидится на меня за минусование, так как его цель - это акцентировать недостатки работы, чтобы они не больше не повторились. Буду ждать публикацию по метеоданным, и очень надеюсь, что она не только позволит познакомиться с интересной задачкой и методами ее решения, но и даст повод поставить заслуженные плюсы и автору, и статье.
Оффтопик
Кстати, не подскажет ли кто: а где можно посмотреть статистику своих оценок? Сколько я поставил плюсов и минусов за последнее время, и по какой причине? В своем профиле что-то такой опции не нашел...
sshikov
23.10.2022 09:09+2Я бы еще добавил вот что:
Это, между прочим, 239-й пост, упоминающий фильтр Калмана на Хабре. А первый был более 10 лет назад. А самой идее больше 60 лет.
То есть, ничего кроме повторной реализации давно и многократно описанной идеи на известном автору языке тут нет. На сегодняшний день это даже не студенческий — это школьный уровень. Так за что плюсовать, когда все интересное тут не ново, а все новое — не интересно (с)?
wol4aravio
Приветствую! Мне кажется, было бы здорово добавить в работу несколько больше вводных об используемом математическом аппарате, ограничениях и достоинствах подхода.
Кроме того, для удобства работы с представленными материалами было бы здорово код размещать не скриншотами, а с помощью доступных инструментов разметки. Это позволит заинтересовавшимся в вашей работе самостоятельно поработать с материалом, а не тратить много времени на перепечатывание с изображения.
Rive
На расстановку пробелов в результате распознавания текст на картинке.