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)[源代码]#
使用小波变换在一维数组中查找峰值。
一般方法是用 wavelet(width) 与 vector 进行卷积,对 vector 进行平滑处理,其中宽度为 widths 中的每个宽度。出现在足够长度尺度上且具有足够高信噪比的相对最大值会被接受。
- 参数:
- vectorndarray
要查找峰值的一维数组。
- widthsfloat 或 sequence
用于计算 CWT 矩阵的单个宽度或类似一维数组的宽度。通常,此范围应涵盖感兴趣的峰值的预期宽度。
- waveletcallable, optional
应该接受两个参数并返回一个一维数组,与 vector 进行卷积。第一个参数确定返回的小波数组的点数,第二个参数是小波的尺度(width)。应进行归一化和对称化。默认值为 ricker 小波。
- max_distancesndarray, optional
在每一行,只有当 row[n] 处的相对最大值与
row[n+1]
处的相对最大值之间的距离在max_distances[n]
内时,才会连接脊线。默认值为widths/4
。- gap_threshfloat, optional
如果在 max_distances 内没有找到相对最大值,则会出现间隙。如果超过 gap_thresh 个点没有连接新的相对最大值,则脊线会中断。默认值是宽度数组的第一个值,即 widths[0]。
- min_lengthint, optional
可接受的脊线的最小长度。默认值为
cwt.shape[0] / 4
,即宽度数量的 1/4。- min_snrfloat, optional
最小信噪比。默认值为 1。信号是最大脊线上的最大 CWT 系数。噪声是包含在同一脊线内的数据点的 noise_perc 百分位数。
- noise_percfloat, optional
在计算噪声基底时,要考虑为噪声的数据点百分位数。使用 stats.scoreatpercentile 计算。默认值为 10。
- window_sizeint, optional
用于计算噪声基底的窗口大小。默认值为
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]生物信息学 (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]))