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)[source]#
使用小波变换在 1 维数组中查找峰值。
一般方法是对 vector 进行平滑处理,方法是将其与 wavelet(width) 进行卷积,其中 widths 中的每个宽度都对应一个 width。在足够长的尺度上出现的相对最大值,并且信噪比足够高,会被接受。
- 参数::
- vectorndarray
要查找峰值的 1 维数组。
- widthsfloat 或序列
用于计算 CWT 矩阵的单个宽度或 1 维类似数组的宽度。一般来说,此范围应涵盖感兴趣峰值的预期宽度。
- wavelet可调用函数,可选
应接受两个参数并返回一个 1 维数组,与 vector 进行卷积。第一个参数决定返回的小波数组的点数,第二个参数是小波的尺度 (width)。应该被归一化并对称。默认值为 ricker 小波。
- max_distancesndarray,可选
在每行中,只有当 row[n] 处的相对最大值距离 row[n+1] 处的相对最大值小于
max_distances[n]
时,才会连接脊线。默认值为widths/4
。- gap_threshfloat,可选
如果没有在 max_distances 内找到相对最大值,将出现间隙。如果超过 gap_thresh 个点没有连接新的相对最大值,则脊线会中断。默认值为宽度数组的第一个值,即 widths[0]。
- min_lengthint,可选
脊线需要被接受的最小长度。默认值为
cwt.shape[0] / 4
,即宽度的 1/4。- min_snrfloat,可选
最小信噪比。默认值为 1。信号是最大脊线上最大 CWT 系数。噪声是 noise_perc 百分位数内的同一脊线中的数据点的百分位数。
- noise_percfloat,可选
在计算噪声底限时,检查数据点的百分位数,低于该百分位数将被视为噪声。使用 stats.scoreatpercentile 计算。默认值为 10。
- window_sizeint,可选
用于计算噪声底限的窗口大小。默认值为
cwt.shape[1] / 20
。
- 返回::
- peaks_indicesndarray
在 vector 中找到峰值的位置的索引。列表按排序顺序排列。
另请参见
cwt
连续小波变换。
find_peaks
根据峰值属性在信号内查找峰值。
注释
这种方法是为在噪声数据中查找尖锐峰值而设计的,但是通过适当的参数选择,它应该能够很好地处理不同的峰值形状。
- 算法如下
对 vector 执行连续小波变换,针对提供的 widths。这是 vector 与 wavelet(width) 的卷积,其中 widths 中的每个宽度都对应一个 width。参见
cwt
.在 cwt 矩阵中识别“脊线”。这些是每行的相对最大值,跨相邻行连接。参见 identify_ridge_lines
使用 filter_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]))