Из прошлого опыта, я могу предложить следующее упрощенное представление с верхней части моей головы. Я предполагаю, что вы ищете большой шип, не так ли? Если нет, я думаю, что этот процесс будет работать. Вам просто нужно изменить свои пороговые значения. Имейте в виду, идея ниже проистекает из опыта, но не тестировалось!
- Запустите сигнал через фильтр скользящего среднего, чтобы сгладить его. (Критический!)
- Найти дискретный дифференциал этого отфильтрованного сигнала.
- Запуск дискретного дифференциала через другой фильтр скользящей средней. (Также критически!)
- При каждом пересечении нуля в сглаженном дифференциальном сигнале сравните точку n (либо левый, либо правый образец пересечения нуля) с его эквивалентом на исходном отфильтрованном сигнале (найденном в шаг 2). Если эта точка больше некоторого заданного порога, n - ваш большой шип.
Надеюсь, это поможет. Не стесняйтесь спрашивать, есть ли у вас какие-либо вопросы. Я реализовал аналогичный алгоритм на C++, который может помочь посмотреть: https://github.com/sawbg/avda/blob/master/src/process.hpp.
Не могли бы вы рассказать немного больше о характере сигнала и о типе пика, который вы хотели бы обнаружить? – harold
@harold это о графиках ЭКГ, мне нужно обнаружить пики, и я рисую сигнал в режиме реального времени, поэтому у меня нет значения следующей точки. –
Голосование, чтобы закрыть как не по теме. Вероятно, вопрос принадлежит обработке сигналов. http://dsp.stackexchange.com/ –