Привет, кодач девеЛОРч, продолжаю делать очередное OpenSource поделие.
Само поделие тут.
Это будет либа с оценивающими фильтрами.
Особенности:
- Старался писать КАК ДИДЫ в программе «Аполон».
- No dynamic memory allocation.
- Использование [ну типа] cache-aware алгоритмов.
- Выполнение на архитектурах с аппаратной плавающей точкой.
- Использование стабилизированных численных методов.
- Принятие того факта, что у нас тут не NASA, соответственно, пользователи могут косячить в моделях процессов и наблюдений. Использование алгоритмов, которые позволяют хоть как-то сгладить последствия этих косяков.
- Принятие того факта, что шумы могут быть не Гауссовы. Использование алгоритмов, которые позволяют хоть как-то сгладить последствия неверных гипотез о шумах.
- Прототипирование на Python c использованием буквально тех же реализаций алгоритмов, что и в продакшоне, посредством Cython-обертки над либой.
Итак, ближе к сути: есть несколько версий функций (в данный момент - две, запланировано до четырёх), например: раз и два.
Отличаются они тем, что первая - обычная реализация, как в учебнике, а вторая - с адаптивной коррекцией, на случай, если пользователь накосячил в модели процесса, или что-то «поломалось» в объекте наблюдения.
Отличия могут быть довольно небольшими, но они сожрут какое-то количество мегафлопс и памяти.
Вопрос к знатокам:
Стоит ли делать несколько вариантов функций, как сейчас, или оставить самый сложный?
З.Ы.: И да, если это применять, например, при адаптивном подавлении шумов от производственного оборудования в наушниках у рабочего, то частоты вызова могут быть несколько килогерц (в данном случае - от восьми) для нескольких объектов, и звук будет идти с нескольких микрофонов.