2017-02-03 4 views
-1

Я хочу знать, есть ли какой-либо алгоритм для поиска пика сигнала в Java (Android). Я работаю над сигналами ЭКГ, и я использую алгоритм реального времени для рисования сигнала, поэтому каждая точка, которую я получаю, я рисую напрямую, поэтому у меня нет данных для следующих точек.Найти пик в сигнале

Сигнал как этот

Ecg signal

+0

Не могли бы вы рассказать немного больше о характере сигнала и о типе пика, который вы хотели бы обнаружить? – harold

+0

@harold это о графиках ЭКГ, мне нужно обнаружить пики, и я рисую сигнал в режиме реального времени, поэтому у меня нет значения следующей точки. –

+0

Голосование, чтобы закрыть как не по теме. Вероятно, вопрос принадлежит обработке сигналов. http://dsp.stackexchange.com/ –

ответ

0

Из прошлого опыта, я могу предложить следующее упрощенное представление с верхней части моей головы. Я предполагаю, что вы ищете большой шип, не так ли? Если нет, я думаю, что этот процесс будет работать. Вам просто нужно изменить свои пороговые значения. Имейте в виду, идея ниже проистекает из опыта, но не тестировалось!

  1. Запустите сигнал через фильтр скользящего среднего, чтобы сгладить его. (Критический!)
  2. Найти дискретный дифференциал этого отфильтрованного сигнала.
  3. Запуск дискретного дифференциала через другой фильтр скользящей средней. (Также критически!)
  4. При каждом пересечении нуля в сглаженном дифференциальном сигнале сравните точку n (либо левый, либо правый образец пересечения нуля) с его эквивалентом на исходном отфильтрованном сигнале (найденном в шаг 2). Если эта точка больше некоторого заданного порога, n - ваш большой шип.

Надеюсь, это поможет. Не стесняйтесь спрашивать, есть ли у вас какие-либо вопросы. Я реализовал аналогичный алгоритм на C++, который может помочь посмотреть: https://github.com/sawbg/avda/blob/master/src/process.hpp.