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)[source]#

使用小波变换在一维数组中查找峰值。

一般方法是通过将vectorwavelet(width)widths中的每个宽度进行卷积来平滑。在足够多的长度尺度上出现且具有足够高信噪比的相对最大值将被接受。

参数:
vectorndarray

要查找峰值的一维数组。

widths浮点数或序列

用于计算CWT矩阵的单个宽度或类一维宽度数组。通常,此范围应覆盖感兴趣峰值的预期宽度。

wavelet可调用对象,可选

应接受两个参数并返回一个与vector卷积的一维数组。第一个参数确定返回的小波数组的点数,第二个参数是小波的尺度(width)。应进行归一化和对称处理。默认为ricker小波。

max_distancesndarray,可选

在每一行中,只有当row[n]处的相对最大值与row[n+1]处的相对最大值之间的距离在max_distances[n]内时,脊线才会被连接。默认值为widths/4

gap_thresh浮点数,可选

如果在max_distances内未找到相对最大值,则会出现间隙。如果存在超过gap_thresh个点未能连接新的相对最大值,则脊线将中断。默认为widths数组的第一个值,即widths[0]。

min_length整数,可选

脊线可接受的最小长度。默认值为cwt.shape[0] / 4,即宽度的1/4。

min_snr浮点数,可选

最小信噪比。默认值为1。信号是最大脊线上的最大CWT系数。噪声是包含在同一脊线内的数据点的noise_perc百分位数。

noise_perc浮点数,可选

计算噪声基底时,低于此百分位数的数据点被视为噪声。使用stats.scoreatpercentile计算。默认值为10。

window_size整数,可选

用于计算噪声基底的窗口大小。默认值为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过滤脊线。

在版本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]))