cupyx.scipy.signal.find_peaks#

cupyx.scipy.signal.find_peaks(x, height=None, threshold=None, distance=None, prominence=None, width=None, wlen=None, rel_height=0.5, plateau_size=None)[源代码]#

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

此函数接受一个一维数组,通过简单地比较相邻值来查找所有局部极大值。可选地,可以通过指定峰值属性的条件来选择这些峰值的一个子集。

参数:
  • x (序列) – 包含峰值的信号。

  • height (数字ndarray序列, 可选) – 所需峰高。可以是数字、None、与 x 形状匹配的数组或包含前述两种类型的 2 元素序列。第一个元素始终解释为最小所需高度,第二个(如果提供)解释为最大所需高度。

  • threshold (数字ndarray序列, 可选) – 所需峰值阈值,即到其相邻样本的垂直距离。可以是数字、None、与 x 形状匹配的数组或包含前述两种类型的 2 元素序列。第一个元素始终解释为最小所需阈值,第二个(如果提供)解释为最大所需阈值。

  • distance (数字, 可选) – 相邻峰值之间所需的最小水平距离(>= 1),单位为样本数。首先移除较小的峰值,直到所有剩余峰值满足条件。

  • prominence (数字ndarray序列, 可选) – 所需峰值突出度。可以是数字、None、与 x 形状匹配的数组或包含前述两种类型的 2 元素序列。第一个元素始终解释为最小所需突出度,第二个(如果提供)解释为最大所需突出度。

  • width (数字ndarray序列, 可选) – 所需峰值宽度,单位为样本数。可以是数字、None、与 x 形状匹配的数组或包含前述两种类型的 2 元素序列。第一个元素始终解释为最小所需宽度,第二个(如果提供)解释为最大所需宽度。

  • wlen (int, 可选) – 用于计算峰值突出度,因此仅在提供了参数 prominencewidth 时使用。有关其效果的完整说明,请参阅 peak_prominences 中的参数 wlen

  • rel_height (float, 可选) – 用于计算峰值宽度,因此仅在提供了 width 时使用。有关其效果的完整说明,请参阅 peak_widths 中的参数 rel_height

  • plateau_size (数字ndarray序列, 可选) –

    所需峰值平顶的大小,单位为样本数。可以是数字、None、与 x 形状匹配的数组或包含前述两种类型的 2 元素序列。第一个元素始终解释为最小所需平顶大小,第二个(如果提供)解释为最大所需平顶大小。

    1.2.0 版新增。

返回:

  • peaks (ndarray) – 满足所有给定条件的 x 中的峰值索引。

  • properties (dict) – 一个字典,包含返回的峰值的属性,这些属性是在评估指定条件期间计算的中间结果

    • ’peak_heights’

      如果给定了 height,则表示 x 中每个峰值的高度。

    • ’left_thresholds’, ‘right_thresholds’

      如果给定了 threshold,则这些键包含峰值到其相邻样本的垂直距离。

    • ’prominences’, ‘right_bases’, ‘left_bases’

      如果给定了 prominence,则可以访问这些键。有关其内容的描述,请参阅 peak_prominences

    • ’width_heights’, ‘left_ips’, ‘right_ips’

      如果给定了 width,则可以访问这些键。有关其内容的描述,请参阅 peak_widths

    • ’plateau_sizes’, left_edges’, ‘right_edges’

      如果给定了 plateau_size,则可以访问这些键,其中包含峰值边缘(边缘仍是平顶的一部分)的索引和计算出的平顶大小。

    要计算并返回属性而不排除峰值,请为相应的参数(distance 除外)提供开放区间 (None, None) 作为值。

警告:

PeakPropertyWarning – 如果峰值属性具有意外值(请参阅 peak_prominencespeak_widths),则引发此警告。

警告

对于包含 NaNs 的数据,此函数可能会返回意外结果。为避免这种情况,应移除或替换 NaNs。

另请参见

find_peaks_cwt

使用小波变换查找峰值。

peak_prominences

直接计算峰值的突出度。

peak_widths

直接计算峰值的宽度。

说明

在此函数中,峰值或局部极大值被定义为其两个直接相邻样本具有较小幅度的任何样本。对于平顶峰值(具有多个相等幅度的样本),返回中间样本的索引(样本数为偶数时向下取整)。对于噪声信号,由于噪声可能改变局部极大值的位置,峰值位置可能不准确。在这种情况下,考虑在寻找峰值之前对信号进行平滑处理,或使用其他峰值查找和拟合方法(例如 find_peaks_cwt)。

关于指定条件的一些补充说明

  • 几乎所有条件(distance 除外)都可以指定为半开或闭区间,例如,1(1, None) 定义了半开区间 \([1, \infty]\),而 (None, 1) 定义了区间 \([-\infty, 1]\)。也可以指定开放区间 (None, None),这将返回匹配的属性而不排除峰值。

  • 用于选择有效峰值的区间始终包含边界。

  • 对于某些条件,区间边界可以指定为与 x 形状匹配的数组,这使得可以根据样本位置设置动态约束。

  • 条件的评估顺序如下:plateau_sizeheightthresholddistanceprominencewidth。在大多数情况下,这个顺序是最快的,因为首先应用更快的操作来减少稍后需要评估的峰值数量。

  • 虽然 peaks 中的索引保证至少相距 distance 个样本,但平顶峰值的边缘可能比允许的 distance 更近。

  • 如果 x 很大或有许多局部极大值,可以使用 wlen 减少评估 prominencewidth 条件所需的时间(请参阅 peak_prominences)。