"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > 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 ?

Publié le 2024-11-09
Parcourir:194

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 fournit 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é.

Emphase sur la proéminence

Parmi tous les paramètres, 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 de code

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

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()

Comme observé à partir des 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.

Déclaration de sortie Cet article est réimprimé à l'adresse : 1729588640. En cas d'infraction, veuillez contacter [email protected] pour le supprimer.
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3