аватар question@mail.ru · 01.01.1970 03:00

Нахождение положительных пиков функции

Требуется программно найти количество и местоположение положительных пиков на графике.
Известно, что количество пиков нечетное. Обычно 3, 5 или 7. В данном случае 3. Также известно, что за каждым положительным пиком следует отрицательный.
Как лучше решить такую проблему на Python? Желательно без подбора коэффициентов
Дополнение: Данные всегда начинаются с положительного пика и заканчиваются отрицательным.
Данные представляют собой вертикальную проекцию изображения, обработанную функцией np.gradient(projection)/projection. То есть отношение второй производной функции к её высоте.

аватар answer@mail.ru · 01.01.1970 03:00

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

UPD
С учётом дополнительных условий задачи пиком следует считать максимум на отрезке от ""верха"" (начальной точки или первого значения выше q) до ""низа"" (первого значения ниже -q).
При этом для массива размерности n возможен следующий алгоритм:

  1. Найти СКО выборки и вычислить порог q.
  2. Положить top=0.
  3. Найти координату bottom первой точки отрезка [top, n-1] со значением меньше -q. Если такой точки нет, перейти к п.7.
  4. Найти координату максимума на отрезке [top, bottom-1]. Если значение максимума больше q, записать его в массив пиков.
  5. Найти координату top первой точки отрезка [bottom+1, n-1] со значением больше q. Если такой точки нет, перейти к п.7.
  6. Перейти к п.3.
  7. Использовать массив пиков.

Последние

Похожие