Heim >Backend-Entwicklung >Python-Tutorial >Wie kann die Funktion find_peaks effektiv zur genauen Peak-Identifizierung in Python/SciPy genutzt werden?

Wie kann die Funktion find_peaks effektiv zur genauen Peak-Identifizierung in Python/SciPy genutzt werden?

Patricia Arquette
Patricia ArquetteOriginal
2024-10-22 19:26:34258Durchsuche

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

Peak-Finding-Algorithmus für Python/SciPy

Problemstellung

Die Aufgabe, Peaks zu identifizieren, stellt sich in verschiedenen Anwendungen, angefangen beim Finden von Peaks in Fourier Transformationen (FFTs) zum Extrahieren von Peaks aus 2D-Arrays. Eine häufige Herausforderung besteht darin, echte Peaks von durch Rauschen verursachten Schwankungen zu unterscheiden.

Bestehende Peak-Finding-Funktionen in Python/SciPy

Anstatt einen Peak-Finding-Algorithmus von Grund auf zu implementieren, sollten Sie die Verwendung von Scipy in Betracht ziehen .signal.find_peaks-Funktion. Diese Funktion bietet Optionen zum Filtern und Identifizieren von Peaks basierend auf bestimmten Kriterien.

Verstehen der find_peaks-Parameter

Um die Leistung von find_peaks effektiv nutzen zu können, ist es wichtig, seine Parameter zu verstehen:

  • Breite: Mindestbreite eines Peaks.
  • Schwellenwert: Minimaler Unterschied zwischen Peak und seinen Nachbarn.
  • Abstand : Mindestabstand zwischen aufeinanderfolgenden Gipfeln.
  • Prominenz: Mindesthöhe, die erforderlich ist, um von einem Gipfel abzusteigen, um höheres Gelände zu erreichen.

Schwerpunkt auf Prominenz

Von allen Parametern sticht Prominenz als der effektivste bei der Unterscheidung echter Spitzen von Rauschen hervor. Seine Definition umfasst den minimalen vertikalen Abstieg, der erforderlich ist, um einen höheren Gipfel zu erreichen.

Beispielanwendung: Frequenzvariierende Sinuskurve

Um seinen Nutzen zu veranschaulichen, betrachten Sie eine frequenzvariierende Sinuskurve, die mit Rauschen kontaminiert ist. Die ideale Lösung würde die Spitzen genau identifizieren, ohne dass es zu unerwünschten Rauschspitzen kommt.

Code-Demonstration

Der folgende Code zeigt, wie die Funktion „find_peaks“ mit verschiedenen Parameterkombinationen verwendet wird:

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

Wie aus den Ergebnissen hervorgeht, isoliert die Verwendung von Prominenz (die blaue Linie im zweiten Unterdiagramm) effektiv die wahren Spitzen, während Abstand, Breite und Schwellenwert bei Vorhandensein von Rauschen eine unterdurchschnittliche Leistung bieten.

Das obige ist der detaillierte Inhalt vonWie kann die Funktion find_peaks effektiv zur genauen Peak-Identifizierung in Python/SciPy genutzt werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn