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.
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.
Um die Leistung von find_peaks effektiv nutzen zu können, ist es wichtig, seine Parameter zu verstehen:
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.
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.
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.
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