„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > 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?

Veröffentlicht am 09.11.2024
Durchsuche:736

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 hervor, wenn es darum geht, echte Spitzen von Rauschen zu unterscheiden. Seine Definition beinhaltet 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:

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

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

Freigabeerklärung Dieser Artikel wird reproduziert unter: 1729588640 Wenn ein Verstoß vorliegt, wenden Sie sich bitte an [email protected], um ihn zu löschen.
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3