Обнаружение пиков измеренного сигнала

голоса
51

Мы используем карты сбора данных для снятия показаний с прибора, который увеличивает свой сигнал до пика, а затем падает обратно вблизи исходного значения. Чтобы найти максимальное значение в настоящее время мы искать в массиве самой высокой чтении и использовать индекс для определения времени пикового значения, которое используется в наших расчетах.

Это хорошо работает, если максимальное значение пик мы ищем, но если устройство не работает должным образом, мы можем видеть, второй пик, который может быть выше, чем начальный пик. Мы принимаем 10 отсчетов второй из 16 устройств в течение 90 второго периода.

Мои первые мысли, чтобы перебрать показания проверки, чтобы увидеть, если предыдущие и последующие точки меньше, чем ток, чтобы найти пик и построить массив пиков. Может быть, мы должны смотреть в среднем ряду точек по обе стороны от текущего положения, чтобы позволить шум в системе. Это самый лучший способ, чтобы продолжить или есть лучшие методы?


Мы используем LabVIEW и я проверил LAVA форумов и существует целый ряд интересных примеров. Это часть нашего тестового программного обеспечения , и мы стараемся избегать использования слишком много нестандартных библиотек VI , так что я в надежде на обратную связь по процессу / алгоритмов, а не конкретный кода.

Задан 06/08/2008 в 11:23
источник пользователем
На других языках...                            


9 ответов

голоса
82

Есть много и много классических методов обнаружения пика, любой из которых может работать. Вы должны видеть, что, в частности, ограничивает качество ваших данных. Вот основные характеристики:

  1. Между любыми двумя точками данных, (x(0), y(0))и (x(n), y(n)), складываются y(i + 1) - y(i)для 0 <= i < nи называют это T( «путешествие») и установить R( «подъем») , чтобы y(n) - y(0) + kпри подходящей небольшой k. T/R > 1указывает на пик. Это хорошо работает , если большие путешествия из - за шума маловероятно , или если шум распределяет симметрично вокруг формы базовой кривой. Для вашего приложения, принимает самый ранний пик со счетом выше заданного порога, или проанализировать кривую поездки на значения возрастают более интересные свойства.

  2. С помощью согласованных фильтров, чтобы набрать сходство со стандартной формой пики (по существу, использовать нормализованную точку-продукт от некоторой формы, чтобы получить косинус-метрика подобия)

  3. Деконволюции по стандартной форме пика и проверить наличие высоких значений (хотя я часто 2, чтобы быть менее чувствительны к шуму для простого вывода приборов).

  4. Гладкая данные и проверить троек равноотстоящих точек , где, если x0 < x1 < x2, y1 > 0.5 * (y0 + y2), или проверить евклидова расстояния , как это: D((x0, y0), (x1, y1)) + D((x1, y1), (x2, y2)) > D((x0, y0),(x2, y2)), которая опирается на неравенство треугольника. Использование простых соотношений вновь предоставит вам механизм подсчета очков.

  5. Fit очень простой 2-гауссовой модели смеси к данным (например, Numerical Recipes имеет хороший готовый кусок кода). Возьмите ранний пик. Это будет правильно иметь дело с перекрывающимися пиками.

  6. Найти лучший матч в данных простой гауссовой, Коши, Пуассона, или что-есть-ты кривой. Оценить эту кривую в широком диапазоне и вычесть его из копии данных после того, как отметить это местоположение максимума. Повторение. Возьмите самый ранний пик, модель параметры (стандартное отклонение возможно, но некоторые приложения могут заботиться о эксцессе или других признаках) соответствуют какому-либо критерию. Следите за артефакты, оставленных позади, когда пики вычтены из данных. Лучший матч может быть определен по виду матча скоринга предложил в # 2 выше.

Я сделал то, что вы делаете, прежде чем: нахождение пиков в данных о последовательности ДНК, поиск пиков в производных оцененных из измеренных кривых и нахождения пиков гистограмм.

Я призываю вас тщательно озаботиться правильной Baselining. Винер фильтрация или другая фильтрация или простой анализ гистограммы часто является простым способ базовой линии в присутствии шума.

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

Ответил 04/09/2008 d 19:07
источник пользователем

голоса
8

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

Я понимаю , что это зависит от конкретного языка, но предполагаю , что вы используете LabView, есть много расфасованной обработка сигналов VIs , которые приходят с LabView , которые вы можете использовать , чтобы сделать сглаживание и снижение уровня шума. На форумах NI являются отличным местом , чтобы получить более специализированную помощь на такого рода вещи.

Ответил 06/08/2008 d 12:12
источник пользователем

голоса
6

Эта проблема была изучена довольно подробно.

Есть множество очень до современных реализаций в TSpectrum*классах КОРНЯ (ядерные / физика элементарных частиц инструмента анализа). Код работает в одно- трехмерных данных.

Исходный ROOT код доступен, так что вы можете захватить эту реализацию, если вы хотите.

Из TSpectrum документации класса:

Алгоритмы, используемые в этом классе были опубликованы в следующих работах:

[1] M.Morhac и др .: методы ликвидации фона для многомерных совпадений спектров гамма-лучей. Ядерные приборы и методы в физических исследованиях A 401 (1997) 113- 132.

[2] M.Morhac и др .: Эффективное одно- и двумерная золота деконволюции и его применение к разложению гамма-спектров. Ядерные приборы и методы в физических исследованиях A 401 (1997) 385-408.

[3] M.Morhac и др .: Идентификация пиков в многомерный совпадений спектров гамма-лучей. Ядерные приборы и методы в области исследований физики A 443 (2000), 108-125.

Эти документы связаны с классовой документации для тех из вас, кто не имеет NIM онлайн подписки.


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

Ответил 23/08/2008 d 15:28
источник пользователем

голоса
5

Я хотел бы внести свой вклад в эту тему алгоритма , который я разработал сам :

Она основана на принципе дисперсии : если новый DataPoint заданного й числа стандартных отклонений от некоторых двигающихся средних, алгоритма сигналов (также называемых Z-оценкой ). Алгоритм очень эффективен потому , что он создает отдельное двигающееся среднее и отклонение, так что сигналы не поврежденный порога. Будущие сигналы таким образом идентифицированы приблизительно с той же точностью, независимо от количества предыдущих сигналов. Алгоритм имеет 3 входа: lag = the lag of the moving window, threshold = the z-score at which the algorithm signalsи influence = the influence (between 0 and 1) of new signals on the mean and standard deviation. Например, lag5 будет использовать последние 5 наблюдений для сглаживания данных. threshold3.5 будет сигнализировать , если DataPoint 3,5 стандартного отклонения от скользящего среднего. И influence0.5 дает сигналы половину влияния , что нормальные точки данных есть. Аналогично, influence0 игнорирует сигналы полностью перерасчет нового порога: поэтому влияние 0 является наиболее надежным вариантом.

Она работает следующим образом:

ПСЕВДОКОД

# Let y be a vector of timeseries data of at least length lag+2
# Let mean() be a function that calculates the mean
# Let std() be a function that calculates the standard deviaton
# Let absolute() be the absolute value function

# Settings (the ones below are examples: choose what is best for your data)
set lag to 5;          # lag 5 for the smoothing functions
set threshold to 3.5;  # 3.5 standard deviations for signal
set influence to 0.5;  # between 0 and 1, where 1 is normal influence, 0.5 is half

# Initialise variables
set signals to vector 0,...,0 of length of y;   # Initialise signal results
set filteredY to y(1,...,lag)                   # Initialise filtered series
set avgFilter to null;                          # Initialise average filter
set stdFilter to null;                          # Initialise std. filter
set avgFilter(lag) to mean(y(1,...,lag));       # Initialise first value
set stdFilter(lag) to std(y(1,...,lag));        # Initialise first value

for i=lag+1,...,t do
  if absolute(y(i) - avgFilter(i-1)) > threshold*stdFilter(i-1) then
    if y(i) > avgFilter(i-1)
      set signals(i) to +1;                     # Positive signal
    else
      set signals(i) to -1;                     # Negative signal
    end
    # Adjust the filters
    set filteredY(i) to influence*y(i) + (1-influence)*filteredY(i-1);
    set avgFilter(i) to mean(filteredY(i-lag,i),lag);
    set stdFilter(i) to std(filteredY(i-lag,i),lag);
  else
    set signals(i) to 0;                        # No signal
    # Adjust the filters
    set filteredY(i) to y(i);
    set avgFilter(i) to mean(filteredY(i-lag,i),lag);
    set stdFilter(i) to std(filteredY(i-lag,i),lag);
  end
end

демонстрация

Демонстрация надежного алгоритма выбора порога

> Оригинальный ответ

Ответил 03/11/2015 d 21:46
источник пользователем

голоса
4

Этот метод в основном из книги «Vision» Дэвида Марра

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

Затем края обнаружения (LOG будет делать)

Тогда ваши края были края возможностей (таких как пики). смотреть между краями для пиков, сортировки пиков по размеру, и вы сделали.

Я использовал вариации на это, и они работают очень хорошо.

Ответил 02/09/2008 d 02:00
источник пользователем

голоса
2

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

Ответил 06/08/2008 d 12:38
источник пользователем

голоса
0

Есть ли качественная разница между желаемой пикой и нежелательным вторым пиком? Если оба пики «острые» - т.е. короткого срока времени - при взгляде на сигнале в частотной области (делая FFT), вы будете получать энергию в большинстве диапазонов. Но если «хорошо» пик надежно имеет энергию, присутствующие на частотах, не существующих в «плохом» пике, или наоборот, вы можете быть в состоянии автоматически дифференцировать их таким образом.

Ответил 02/09/2008 d 13:33
источник пользователем

голоса
0

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

Ответил 06/08/2008 d 12:38
источник пользователем

голоса
0

Вы могли бы применить некоторый Standard DeVision к вашей логике и обратить внимание на пики более х%.

Ответил 06/08/2008 d 12:17
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more