У меня есть серия данных (один массив). Если я возьму эти данные и нанесу на график, я вижу, что есть несколько пиков. Однако, если я увеличу масштаб до части данных, я вижу, что есть существенный шум.
Мне нравится определять, сколько пиков в данных, используя мало процессорного времени и энергии. Я подумал об обнаружении уклонов этих пиков (может быть резким или плавным подъемом или спадом) и смотрел на количество уклонов, чтобы определить количество пиков. (2 спада положительные и отрицательные для каждого пика)
Любые указатели, как я могу рассчитать наклоны при наличии шума?
Код попадет во встроенную систему, память ограничена, поэтому желательно, чтобы я реализовал что-то, что не требует существенного копирования данных.
peak-detection
Ktuncer
источник
источник
Ответы:
Это зависит от типа шума и типа сигнала. Покажите пример, если хотите получить хороший ответ. Но, тем не менее, в общем, вы, вероятно, хотите фильтровать сигнал низких частот. На вашем месте я бы взял спектр мощности Фурье, чтобы увидеть, является ли большая часть шума высокочастотной, а сигнал, который мне важен, - в основном, в более низком диапазоне. Если они перекрываются, да ладно, это жизнь. Мне нужно больше думать о вещах.
Один фильтр нижних частот, который во многих случаях подходит для зашумленных сигналов, - это фильтр Савицкого-Голея. Это описано в Числовых Рецептах, и для Питона есть функция в Поваренной книге Numpy Питона. Это просто свертка с маленьким ядром. Размер окна выбирается в зависимости от ширины пиков или других объектов, достаточно широких, чтобы подавлять шум, но не шире, чем функции. Это может быть маленький, скажем, пять баллов или больше, как десятки, может быть, сотня.
Вы также выбираете полиномиальный порядок - обычно я использую 2 или 4. Порядок 2 подходит для случаев, когда окно маленькое, <10 точек или оно охватывает менее половины цикла или около того (если ваш сигнал напоминает синус), в то время как порядок 4 лучше сочетается с искаженными формами пиков, но любит иметь около 9 или более точек. Но многое зависит от формы и частоты шума.
Как говорят другие в комментариях, поиск производных, вероятно, не лучшая стратегия, но если вы все равно хотите найти производные, фильтр Савицкого-Голея может сделать это - одновременно сгладить и сообщить производную вместо сигнала.
источник