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

使用小波变换在 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

根据峰值属性在信号内查找峰值。

注释

这种方法是为在噪声数据中查找尖锐峰值而设计的,但是通过适当的参数选择,它应该能够很好地处理不同的峰值形状。

算法如下
  1. vector 执行连续小波变换,针对提供的 widths。这是 vectorwavelet(width) 的卷积,其中 widths 中的每个宽度都对应一个 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]))