本文简要介绍 python 语言中 scipy.signal.peak_widths
的用法。
用法:
scipy.signal.peak_widths(x, peaks, rel_height=0.5, prominence_data=None, wlen=None)#
计算信号中每个峰的宽度。
此函数计算样品中与峰高和突出度相对距离的峰宽。
- x: 序列
带有峰值的信号。
- peaks: 序列
x 中的峰值索引。
- rel_height: 浮点数,可选
选择测量峰宽的相对高度,作为其突出度的百分比。 1.0 计算峰在其最低轮廓线的宽度,而 0.5 计算突出高度的一半。必须至少为 0。有关详细说明,请参阅注释。
- prominence_data: 元组,可选
匹配输出的三个数组的元组scipy.signal.peak_prominences当使用相同的参数调用时x和山峰.如果未提供,此数据将在内部计算。
- wlen: 整数,可选
样本中的窗口长度传递给scipy.signal.peak_prominences作为内部计算的可选参数prominence_data.如果prominence_data给出。
- widths: ndarray
样本中每个峰的宽度。
- width_heights: ndarray
评估宽度的轮廓线的高度。
- left_ips, right_ips: ndarray
水平线的左右交点在各自评估高度的插值位置。
- ValueError
如果prominence_data提供但不满足条件
0 <= left_base <= peak <= right_base < x.shape[0]
对于每个峰,具有错误的 dtype,不是 C-contiguous 或不具有相同的形状。
- PeakPropertyWarning
如果任何计算的宽度为 0,则引发。这可能源于提供的 prominence_data 或 rel_height 设置为 0。
参数 ::
返回 ::
抛出 ::
警告 ::
警告
对于包含 NaN 的数据,此函数可能会返回意外结果。为了避免这种情况,应该删除或替换NaNs。
注意:
计算峰宽的基本算法如下:
计算评估高度
用公式 ,其中 是峰本身的高度, 是峰的突出和 用参数指定的正比率rel_height.在两侧的评估高度处绘制一条水平线,从峰的当前垂直位置开始,直到该线与斜率、信号边界相交或穿过峰底的垂直位置(有关定义,请参见
peak_prominences
)。对于第一种情况,与信号相交,用线性插值估计真正的相交点。将宽度计算为两侧所选端点之间的水平距离。因此,每个峰的最大可能宽度是其底部之间的水平距离。
如上所示,要计算峰宽,必须知道其突出度和碱基。您可以自己提供这些参数prominence_data.否则,它们是内部计算的(参见scipy.signal.peak_prominences)。
例子:
>>> import numpy as np >>> from scipy.signal import chirp, find_peaks, peak_widths >>> import matplotlib.pyplot as plt
创建具有两个重叠谐波的测试信号
>>> x = np.linspace(0, 6 * np.pi, 1000) >>> x = np.sin(x) + 0.6 * np.sin(2.6 * x)
找到所有峰并计算它们在相对高度 0.5(突出高度一半处的轮廓线)和 1(完全突出高度处的最低轮廓线处)的宽度。
>>> peaks, _ = find_peaks(x) >>> results_half = peak_widths(x, peaks, rel_height=0.5) >>> results_half[0] # widths array([ 64.25172825, 41.29465463, 35.46943289, 104.71586081, 35.46729324, 41.30429622, 181.93835853, 45.37078546]) >>> results_full = peak_widths(x, peaks, rel_height=1) >>> results_full[0] # widths array([181.9396084 , 72.99284945, 61.28657872, 373.84622694, 61.78404617, 72.48822812, 253.09161876, 79.36860878])
绘制计算宽度的信号、峰值和等高线
>>> plt.plot(x) >>> plt.plot(peaks, x[peaks], "x") >>> plt.hlines(*results_half[1:], color="C2") >>> plt.hlines(*results_full[1:], color="C3") >>> plt.show()
相关用法
- Python SciPy signal.peak_prominences用法及代码示例
- Python SciPy signal.periodogram用法及代码示例
- Python SciPy signal.place_poles用法及代码示例
- Python SciPy signal.czt_points用法及代码示例
- Python SciPy signal.chirp用法及代码示例
- Python SciPy signal.residue用法及代码示例
- Python SciPy signal.iirdesign用法及代码示例
- Python SciPy signal.max_len_seq用法及代码示例
- Python SciPy signal.kaiser_atten用法及代码示例
- Python SciPy signal.oaconvolve用法及代码示例
- Python SciPy signal.hilbert用法及代码示例
- Python SciPy signal.ricker用法及代码示例
- Python SciPy signal.group_delay用法及代码示例
- Python SciPy signal.cheb2ord用法及代码示例
- Python SciPy signal.get_window用法及代码示例
- Python SciPy signal.lfilter用法及代码示例
- Python SciPy signal.morlet用法及代码示例
- Python SciPy signal.coherence用法及代码示例
- Python SciPy signal.dfreqresp用法及代码示例
- Python SciPy signal.TransferFunction用法及代码示例
- Python SciPy signal.dbode用法及代码示例
- Python SciPy signal.residuez用法及代码示例
- Python SciPy signal.bilinear_zpk用法及代码示例
- Python SciPy signal.firls用法及代码示例
- Python SciPy signal.impulse用法及代码示例
注:本文由纯净天空筛选整理自scipy.org大神的英文原创作品 scipy.signal.peak_widths。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。