Maison  >  Article  >  développement back-end  >  Comment utiliser efficacement la fonction find_peaks pour une identification précise des pics en Python/SciPy ?

Comment utiliser efficacement la fonction find_peaks pour une identification précise des pics en Python/SciPy ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-22 19:26:34160parcourir

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

Algorithme de recherche de pics pour Python/SciPy

Énoncé du problème

La tâche d'identification des pics se pose dans diverses applications, allant de la recherche de pics dans Fourier transformations (FFT) pour extraire les pics des tableaux 2D. Un défi courant consiste à distinguer les vrais pics des fluctuations induites par le bruit.

Fonctions de recherche de pics existantes dans Python/SciPy

Au lieu d'implémenter un algorithme de recherche de pic à partir de zéro, envisagez d'utiliser scipy Fonction .signal.find_peaks. Cette fonction offre des options pour filtrer et identifier les pics en fonction de critères spécifiques.

Comprendre les paramètres find_peaks

Pour exploiter efficacement la puissance de find_peaks, il est crucial de comprendre ses paramètres :

  • largeur : Largeur minimale d'un pic.
  • seuil : Différence minimale entre le pic et ses voisins.
  • distance  : Distance minimale entre les sommets consécutifs.
  • proéminence : Hauteur minimale nécessaire pour descendre d'un sommet pour atteindre un terrain plus élevé.

L'accent est mis sur la proéminence

De tous les paramètres, la proéminence s'impose comme le plus efficace pour distinguer les vrais pics du bruit. Sa définition implique la descente verticale minimale requise pour atteindre un sommet plus élevé.

Exemple d'application : sinusoïde à fréquence variable

Pour illustrer son utilité, considérons une sinusoïde à fréquence variable contaminée par du bruit. La solution idéale identifierait les pics avec précision sans succomber aux pics de bruit parasite.

Démonstration du code

Le code suivant montre comment utiliser la fonction find_peaks avec diverses combinaisons de paramètres :

<code class="python">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()</code>

Comme l'observent les résultats, l'utilisation de la proéminence (la ligne bleue dans la deuxième sous-intrigue) isole efficacement les vrais pics, tandis que la distance, la largeur et le seuil offrent des performances inférieures à la moyenne en présence de bruit.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn