Производный расчет

9

У меня есть серия данных (один массив). Если я возьму эти данные и нанесу на график, я вижу, что есть несколько пиков. Однако, если я увеличу масштаб до части данных, я вижу, что есть существенный шум.

Мне нравится определять, сколько пиков в данных, используя мало процессорного времени и энергии. Я подумал об обнаружении уклонов этих пиков (может быть резким или плавным подъемом или спадом) и смотрел на количество уклонов, чтобы определить количество пиков. (2 спада положительные и отрицательные для каждого пика)

Любые указатели, как я могу рассчитать наклоны при наличии шума?

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

Ktuncer
источник
1
Вы говорите как в магазине, прося что-то, что вам нужно
2
Если шум относительно высок по частоте, вы можете отфильтровать данные на низких частотах
Пол Р
4
Можете ли вы опубликовать один или несколько примеров графиков ваших данных? Это поможет нам увидеть, как это выглядит. Обнаружение пика обычно не выполняется с помощью оценки производной, так как расчет производной сигнала очень чувствителен к шуму (это высокочастотная операция). В сигнале интереса могут быть характеристики, которые вы можете использовать. Кроме того, всегда существует компромисс между вероятностью правильного определения пика и вероятностью ложного объявления пика, который действительно не представляет интереса. Что важнее для вашего приложения?
Джейсон Р
2
Если вы можете подготовить сюжет, это будет полезно.
Джейсон Р
1
Вы хотите обнаруживать пики, вы можете искать для обнаружения пиков (посмотрите на dsp.stackexchange.com/questions/1302/peak-detection-approach ).
Гертен

Ответы:

1

Это зависит от типа шума и типа сигнала. Покажите пример, если хотите получить хороший ответ. Но, тем не менее, в общем, вы, вероятно, хотите фильтровать сигнал низких частот. На вашем месте я бы взял спектр мощности Фурье, чтобы увидеть, является ли большая часть шума высокочастотной, а сигнал, который мне важен, - в основном, в более низком диапазоне. Если они перекрываются, да ладно, это жизнь. Мне нужно больше думать о вещах.

Один фильтр нижних частот, который во многих случаях подходит для зашумленных сигналов, - это фильтр Савицкого-Голея. Это описано в Числовых Рецептах, и для Питона есть функция в Поваренной книге Numpy Питона. Это просто свертка с маленьким ядром. Размер окна выбирается в зависимости от ширины пиков или других объектов, достаточно широких, чтобы подавлять шум, но не шире, чем функции. Это может быть маленький, скажем, пять баллов или больше, как десятки, может быть, сотня.

Вы также выбираете полиномиальный порядок - обычно я использую 2 или 4. Порядок 2 подходит для случаев, когда окно маленькое, <10 точек или оно охватывает менее половины цикла или около того (если ваш сигнал напоминает синус), в то время как порядок 4 лучше сочетается с искаженными формами пиков, но любит иметь около 9 или более точек. Но многое зависит от формы и частоты шума.

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

DarenW
источник