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 中的每個寬度,將 vector 與 wavelet(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
根據峰值屬性在訊號內尋找峰值。
註解
此方法旨在尋找雜訊資料中的尖銳峰值,但透過適當的參數選擇,它應該也能很好地適用於不同的峰值形狀。
- 演算法如下
對 vector 執行連續小波轉換,針對提供的 widths。這是 vector 與 widths 中每個寬度的 wavelet(width) 的卷積。請參閱 cwt。
識別 cwt 矩陣中的「脊線」。這些是每一列的相對極大值,跨相鄰列連接。請參閱 identify_ridge_lines
使用 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]))