cupyx.scipy.signal.peak_widths#

cupyx.scipy.signal.peak_widths(x, peaks, rel_height=0.5, prominence_data=None, wlen=None)[source]#

计算信号中每个峰的宽度。

此函数计算峰在相对于峰高和峰突出度的样本宽度。

参数:
  • x (sequence) – 包含峰的信号。

  • peaks (sequence) – x 中峰的索引。

  • rel_height (float, optional) – 选择测量峰宽度的相对高度,以其突出度的百分比表示。1.0 计算峰在其最低等高线处的宽度,而 0.5 在突出度高度的一半处进行评估。必须大于等于 0。详细解释请参见注意事项。

  • prominence_data (tuple, optional) – 一个包含三个数组的元组,与使用相同参数 xpeaks 调用 peak_prominences 的输出匹配。如果未提供此数据,则会在内部计算。

  • wlen (int, optional) – 作为可选参数传递给 peak_prominences 的样本窗口长度,用于内部计算 prominence_data。如果提供了 prominence_data,则忽略此参数。

返回:

  • widths (ndarray) – 每个峰的样本宽度。

  • width_heights (ndarray) – 评估 widths 的等高线高度。

  • left_ips, right_ips (ndarray) – 在相应评估高度处,水平线与左侧和右侧交点的插值位置。

引发:

ValueError – 如果提供了 prominence_data 但不满足每个峰的条件 0 <= left_base <= peak <= right_base < x.shape[0],或者 dtype 错误,不是 C 连续的,或者形状不一致。

警告:

PeakPropertyWarning – 如果计算出的任何宽度为 0,则会引发此警告。这可能源于提供的 prominence_data 或将 rel_height 设置为 0。

警告

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

另请参阅

find_peaks

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

peak_prominences

计算峰的突出度。

注意事项

计算峰宽度的基本算法如下

  • 使用公式 \(h_{eval} = h_{Peak} - P \cdot R\) 计算评估高度 \(h_{eval}\),其中 \(h_{Peak}\) 是峰本身的高度,\(P\) 是峰的突出度,\(R\) 是通过参数 rel_height 指定的正比例。

  • 在评估高度处向两侧绘制一条水平线,从峰的当前垂直位置开始,直到线与斜坡、信号边界相交或越过峰基的垂直位置(定义请参见 peak_prominences)。对于第一种情况,即与信号相交,真实交点通过线性插值估计。

  • 将宽度计算为两侧选定端点之间的水平距离。因此,每个峰的最大可能宽度是其基点之间的水平距离。

如上所示,要计算峰的宽度,必须知道其突出度和基点。您可以使用参数 prominence_data 自行提供这些数据。否则,将在内部计算(参见 peak_prominences)。