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)[原始碼]#

使用小波轉換在 1 維陣列中尋找峰值。

一般方法是針對 widths 中的每個寬度,將 vectorwavelet(width) 進行卷積來平滑 vector。接受在足夠長度尺度上出現且具有足夠高 SNR 的相對極大值。

參數:
vectorndarray

要在其中尋找峰值的 1 維陣列。

widthsfloat 或序列

用於計算 CWT 矩陣的單個寬度或 1 維類陣列寬度。一般來說,此範圍應涵蓋感興趣峰值的預期寬度。

waveletcallable,選用

應接受兩個參數並傳回 1 維陣列,以與 vector 進行卷積。第一個參數決定傳回的小波陣列的點數,第二個參數是小波的尺度(width)。應為標準化和對稱的。預設值為 ricker 小波。

max_distancesndarray,選用

在每一列,只有當 row[n] 的相對極大值在 max_distances[n] 範圍內時,脊線才會連接到 row[n+1] 的相對極大值。預設值為 widths/4

gap_threshfloat,選用

如果在 max_distances 範圍內未找到相對極大值,則會出現間隙。如果超過 gap_thresh 個點未連接新的相對極大值,則脊線會中斷。預設值為 widths 陣列的第一個值,即 widths[0]。

min_lengthint,選用

脊線可接受的最小長度。預設值為 cwt.shape[0] / 4,即寬度數量的 1/4。

min_snrfloat,選用

最小 SNR 比率。預設值為 1。訊號是最大脊線上的最大 CWT 係數。雜訊是在同一脊線內包含的資料點的第 noise_perc 個百分位數。

noise_percfloat,選用

在計算雜訊基底時,要視為雜訊的檢查資料點的百分位數。使用 stats.scoreatpercentile 計算。預設值為 10。

window_sizeint,選用

用於計算雜訊基底的視窗大小。預設值為 cwt.shape[1] / 20

傳回值:
peaks_indicesndarray

vector 中找到峰值的位置索引。列表已排序。

另請參閱

find_peaks

根據峰值屬性在訊號內尋找峰值。

註解

此方法旨在尋找雜訊資料中的尖銳峰值,但透過適當的參數選擇,它應該也能很好地適用於不同的峰值形狀。

演算法如下
  1. vector 執行連續小波轉換,針對提供的 widths。這是 vectorwidths 中每個寬度的 wavelet(width) 的卷積。請參閱 cwt

  2. 識別 cwt 矩陣中的「脊線」。這些是每一列的相對極大值,跨相鄰列連接。請參閱 identify_ridge_lines

  3. 使用 filter_ridge_lines 過濾 ridge_lines。

在版本 0.11.0 中新增。

參考文獻

[1]

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

範例

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