scipy.signal.

find_peaks_cwt#

scipy.signal.find_peaks_cwt(vector, widths, wavelet=None, max_distances=None, gap_thresh=None, min_length=None, min_snr=1, noise_perc=10, window_size=None)[Quelle]#

Findet Spitzen in einem 1D-Array mittels Wavelet-Transformation.

Der allgemeine Ansatz besteht darin, vector durch Faltung mit wavelet(width) für jede Breite in widths zu glätten. Relative Maxima, die auf genügend Größenskalen und mit ausreichend hohem SNR auftreten, werden akzeptiert.

Parameter:
vectorndarray

1D-Array, in dem die Spitzen gesucht werden sollen.

widthsfloat oder Sequenz

Einzelne Breite oder 1D-Array-ähnliche Liste von Breiten zur Berechnung der CWT-Matrix. Im Allgemeinen sollte dieser Bereich die erwartete Breite der interessierenden Spitzen abdecken.

waveletcallable, optional

Soll zwei Parameter entgegennehmen und ein 1D-Array zurückgeben, das mit vector gefaltet wird. Der erste Parameter bestimmt die Anzahl der Punkte des zurückgegebenen Wavelet-Arrays, der zweite Parameter ist die Skala (width) des Wavelets. Sollte normalisiert und symmetrisch sein. Standardmäßig wird das Ricker-Wavelet verwendet.

max_distancesndarray, optional

In jeder Zeile wird eine Gratlinie nur dann verbunden, wenn das relative Maximum in row[n] innerhalb von max_distances[n] vom relativen Maximum in row[n+1] liegt. Der Standardwert ist widths/4.

gap_threshfloat, optional

Wenn innerhalb von max_distances kein relatives Maximum gefunden wird, entsteht eine Lücke. Eine Gratlinie wird unterbrochen, wenn mehr als gap_thresh Punkte vorhanden sind, ohne dass ein neues relatives Maximum verbunden wurde. Der Standardwert ist der erste Wert des Breiten-Arrays, d. h. widths[0].

min_lengthint, optional

Minimale Länge, die eine Gratlinie haben muss, um akzeptiert zu werden. Der Standardwert ist cwt.shape[0] / 4, d. h. 1/4 der Anzahl der Breiten.

min_snrfloat, optional

Minimales SNR-Verhältnis. Standardwert ist 1. Das Signal ist der maximale CWT-Koeffizient auf der größten Gratlinie. Das Rauschen ist das noise_perc-te Perzentil der Datenpunkte, die innerhalb derselben Gratlinie liegen.

noise_percfloat, optional

Beim Berechnen des Rauschbodens das Perzentil der betrachteten Datenpunkte, unterhalb dessen das Rauschen berücksichtigt wird. Berechnet mit stats.scoreatpercentile. Standardwert ist 10.

window_sizeint, optional

Größe des Fensters, das zur Berechnung des Rauschbodens verwendet wird. Der Standardwert ist cwt.shape[1] / 20.

Rückgabe:
peaks_indicesndarray

Indizes der Positionen in vector, an denen Spitzen gefunden wurden. Die Liste ist sortiert.

Siehe auch

find_peaks

Findet Spitzen in einem Signal basierend auf Gipfeleigenschaften.

Hinweise

Dieser Ansatz wurde für die Suche nach scharfen Spitzen in verrauschten Daten entwickelt. Mit entsprechender Parameterauswahl sollte er jedoch auch für andere Peak-Formen gut funktionieren.

Der Algorithmus lautet wie folgt:
  1. Führen Sie eine kontinuierliche Wavelet-Transformation auf vector für die angegebenen widths durch. Dies ist eine Faltung von vector mit wavelet(width) für jede Breite in widths. Siehe cwt.

  2. Identifizieren Sie „Gratlinien“ in der CWT-Matrix. Dies sind relative Maxima in jeder Zeile, die über benachbarte Zeilen verbunden sind. Siehe identify_ridge_lines.

  3. Filtern Sie die Gratlinien mit filter_ridge_lines.

Hinzugefügt in Version 0.11.0.

Referenzen

[1]

Bioinformatics (2006) 22 (17): 2059-2065. DOI:10.1093/bioinformatics/btl355

Beispiele

>>> import numpy as np
>>> from scipy import signal
>>> xs = np.arange(0, np.pi, 0.05)
>>> data = np.sin(xs)
>>> peakind = signal.find_peaks_cwt(data, np.arange(1,10))
>>> peakind, xs[peakind], data[peakind]
([32], array([ 1.6]), array([ 0.9995736]))