"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo utilizar eficazmente la función find_peaks para una identificación precisa de picos en Python/SciPy?

¿Cómo utilizar eficazmente la función find_peaks para una identificación precisa de picos en Python/SciPy?

Publicado el 2024-11-09
Navegar:369

How to Effectively Utilize the find_peaks Function for Accurate Peak Identification in Python/SciPy?

Algoritmo de búsqueda de picos para Python/SciPy

Declaración del problema

La tarea de identificar picos surge en diversas aplicaciones, que van desde encontrar picos en Fourier transformaciones (FFT) para extraer picos de matrices 2D. Un desafío común es distinguir los picos verdaderos de las fluctuaciones inducidas por el ruido.

Funciones de búsqueda de picos existentes en Python/SciPy

En lugar de implementar un algoritmo de búsqueda de picos desde cero, considere utilizar scipy Función .signal.find_peaks. Esta función proporciona opciones para filtrar e identificar picos según criterios específicos.

Comprensión de los parámetros de find_peaks

Para aprovechar el poder de find_peaks de manera efectiva, es fundamental comprender sus parámetros:

  • ancho: ancho mínimo de un pico.
  • umbral: diferencia mínima entre el pico y sus vecinos.
  • distancia : Distancia mínima entre picos consecutivos.
  • prominencia: Altura mínima necesaria para descender de un pico para alcanzar terreno más alto.

Énfasis en prominencia

De todos los parámetros, prominence destaca como el más eficaz para distinguir los picos verdaderos del ruido. Su definición implica el descenso vertical mínimo requerido para alcanzar un pico más alto.

Aplicación de ejemplo: sinusoide variable en frecuencia

Para ilustrar su utilidad, considere una sinusoide variable en frecuencia contaminada con ruido. La solución ideal sería identificar los picos con precisión sin sucumbir a picos de ruido falsos.

Demostración de código

El siguiente código demuestra cómo utilizar la función find_peaks con varias combinaciones de parámetros:

import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import find_peaks

# Generate signal
x = np.sin(2*np.pi*(2**np.linspace(2,10,1000))*np.arange(1000)/48000)   np.random.normal(0, 1, 1000) * 0.15

# Find peaks using different parameters
peaks, _ = find_peaks(x, distance=20)
peaks2, _ = find_peaks(x, prominence=1)
peaks3, _ = find_peaks(x, width=20)
peaks4, _ = find_peaks(x, threshold=0.4)

# Plot results
plt.subplot(2, 2, 1)
plt.plot(peaks, x[peaks], "xr"); plt.plot(x); plt.legend(['distance'])
plt.subplot(2, 2, 2)
plt.plot(peaks2, x[peaks2], "ob"); plt.plot(x); plt.legend(['prominence'])
plt.subplot(2, 2, 3)
plt.plot(peaks3, x[peaks3], "vg"); plt.plot(x); plt.legend(['width'])
plt.subplot(2, 2, 4)
plt.plot(peaks4, x[peaks4], "xk"); plt.plot(x); plt.legend(['threshold'])
plt.show()

Como se observa en los resultados, el uso de la prominencia (la línea azul en el segundo subgráfico) aísla efectivamente los picos verdaderos, mientras que la distancia, el ancho y el umbral ofrecen un rendimiento inferior en presencia de ruido.

Declaración de liberación Este artículo se reimprime en: 1729588640 Si hay alguna infracción, comuníquese con [email protected] para eliminarla.
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3