Heim >Backend-Entwicklung >Python-Tutorial >Wie kann die Funktion find_peaks effektiv zur genauen Peak-Identifizierung in Python/SciPy genutzt werden?
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 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.
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:
<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!