Puedo escribir algo yo mismo al encontrar cruces por cero de la primera derivada o algo así, pero parece una función lo suficientemente común como para incluirla en las bibliotecas estándar. Alguien sabe de uno?
Mi aplicación particular es una matriz 2D, pero generalmente se usaría para encontrar picos en FFT, etc.
Específicamente, en este tipo de problemas, hay múltiples picos fuertes, y luego muchos "picos" más pequeños que son causados por el ruido que debe ignorarse. Estos son solo ejemplos; no mis datos reales:
Picos unidimensionales:
Picos bidimensionales:
El algoritmo de búsqueda de picos encontraría la ubicación de estos picos (no solo sus valores), e idealmente encontraría el verdadero pico entre muestras, no solo el índice con el valor máximo, probablemente usando interpolación cuadrática o algo así.
Por lo general, solo le interesan unos pocos picos fuertes, por lo que se elegirían porque están por encima de un cierto umbral o porque son los primeros n picos de una lista ordenada, clasificados por amplitud.
Como dije, sé cómo escribir algo como esto yo mismo. Solo pregunto si hay una función o paquete preexistente que funcione bien.
Actualizar:
Yo traduje una secuencia de comandos de MATLAB y funciona bastante bien para el caso 1-D, pero podría ser mejor.
Actualización actualizada:
sixtenbe creó una mejor versión para el caso 1-D.
find_peaks
, así que agregué esta respuesta que podría ser útil para referencia futura. (Estoy seguro de que ya ha encontrado esto desde 2009, ¡pero es para otras personas + yo mismo cuando me haga la pregunta nuevamente en unos años!)