Аннотация

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

Введение

Рудольф Эмиль Калман Венгерский инженер разработал данный алгоритм, а позже алгоритм назвали в честь Р. Калмана. Основная цель алгоритма предложенного Калманом это борьба с погрешностями измерений, шумами при обработке информации, что позволяет повысить эффективность ее обработки, очевидно, что это это имеет большое значение науке и технике. Основная информация о самом алгоритме и используемых переменных представлена в работе [1]. Поэтому мы опустим описание и перейдем к реализации.

Программная реализация алгоритма

Для реализации алгоритма нам потребуются библиотеки: random и ее функция randint для генерирования случайного целочисленного ряда;

matplotlib.pyplot для построения графика;

import numpy as np для обработки массивов.

     

Визуализация на графике

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

Выводы

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

Список литературы

  1. Фильтр Калмана — Введение

Комментарии (14)


  1. wol4aravio
    22.10.2022 19:10
    +13

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

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


    1. Rive
      22.10.2022 21:44

      а не тратить много времени на перепечатывание с изображения.

      На расстановку пробелов в результате распознавания текст на картинке.


  1. mclander
    22.10.2022 20:01
    +5

    Да примерно так я писал код на своей первой и единственной олимпиаде по программированию.

    Ещё удивлялся с соседей, зачем они пишут комментарии и "говорящие" переменные, на исполнение кода это же не влияет.

    Подсказка - пара формул в начале и объяснение что такое параметры a,b,c несказанно помогут статье. Upd: Коммент выше на это же и намекает.

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


  1. Radish
    22.10.2022 20:24
    +11

    код скриншотом это сильно


  1. zlat_zlat
    22.10.2022 21:18
    +8

    Честно говоря, это не статья, а какая-то лабораторная работа. Введение, вывод и копипаст с пропавшими знаками препинания.

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


    1. DSolodukhin
      23.10.2022 00:32
      +7

      Честно говоря, это не статья, а какая-то лабораторная работа.

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


      1. zlat_zlat
        23.10.2022 08:07

        К счастью, пропустил такое явление, но это многое объясняет)

        Интересно, зачем преподавателям это? Это же даже не реклама вуза, а Хабр страдает. Внутренняя «гордость», студенты написали 100500 статей?


        1. WASD1
          23.10.2022 18:57

          Я могу увидеть как минимум 2 мотива:
          - хороший опыт для студента
          - не проверять работу, а просто согласится с мнением комментирующих.


  1. progchip666
    22.10.2022 22:08
    -4

    За что так минусовать то, человек старался всё таки. Хорошие тексты приходят с опытом.


    1. adeshere
      22.10.2022 23:35
      +10

      За что так минусовать то, человек старался всё таки. Хорошие тексты приходят с опытом.

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

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

      В-третьих, Вы приводите графики исходного и сглаженного ряда, но ни словом не поясняете цель этого сглаживания: какая задача решалась, насколько успешно она решена, почему были выбраны именно такие значения a, b и c, и что поменяется при их изменении.

      Без всего этого "руководство" получилось крайне ущербным. Слегка утрируя, вместо статьи можно было дать три ссылки: на работу [1], на скриншот с кодом и на картинку с графиками. И пусть каждый понимает, как хочет. Извините, но это больше похоже на "смотрите, как я могу!", чем на попытку системного введения в очень интересную тему, причем понятного и полезного для новичков.

      P.S. Надеюсь, что критика была конструктивной, и что автор не обидится на меня за минусование, так как его цель - это акцентировать недостатки работы, чтобы они не больше не повторились. Буду ждать публикацию по метеоданным, и очень надеюсь, что она не только позволит познакомиться с интересной задачкой и методами ее решения, но и даст повод поставить заслуженные плюсы и автору, и статье.

      Оффтопик

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


      1. sshikov
        23.10.2022 09:09
        +2

        Я бы еще добавил вот что:

        Это, между прочим, 239-й пост, упоминающий фильтр Калмана на Хабре. А первый был более 10 лет назад. А самой идее больше 60 лет.

        То есть, ничего кроме повторной реализации давно и многократно описанной идеи на известном автору языке тут нет. На сегодняшний день это даже не студенческий — это школьный уровень. Так за что плюсовать, когда все интересное тут не ново, а все новое — не интересно (с)?


    1. wataru
      24.10.2022 16:03

      человек старался всё таки.

      Что-то не видно.


  1. sunnybear
    23.10.2022 08:45
    +2

    Чем это отличается от бегущего среднего?


    1. aaa_bbb
      24.10.2022 20:59

      скользящее среднее всего лишь частный случай фильтра