Страницы

Поиск по вопросам

вторник, 25 декабря 2018 г.

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


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


Ответ

Поскольку просто локальный экстремум не устраивает, надо добавить проверку превышения порога для отбраковки мелких пиков и артефактов. Порог можно вычислить как СКО выборки, умноженное на некоторую константу, соответствующую доверительному интервалу для математического ожидания. На практике эту константу принимают равной 2.5
UPD С учётом дополнительных условий задачи пиком следует считать максимум на отрезке от "верха" (начальной точки или первого значения выше q) до "низа" (первого значения ниже -q). При этом для массива размерности n возможен следующий алгоритм:
Найти СКО выборки и вычислить порог q Положить top=0 Найти координату bottom первой точки отрезка [top, n-1] со значением меньше -q. Если такой точки нет, перейти к п.7. Найти координату максимума на отрезке [top, bottom-1]. Если значение максимума больше q, записать его в массив пиков. Найти координату top первой точки отрезка [bottom+1, n-1] со значением больше q. Если такой точки нет, перейти к п.7. Перейти к п.3. Использовать массив пиков.

Комментариев нет:

Отправить комментарий