當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python SciPy signal.peak_widths用法及代碼示例


本文簡要介紹 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。

注意

計算峰寬的基本算法如下:

  • 計算評估高度\(h_{eval}\) 用公式\(h_{eval} = h_{Peak} - P \cdot R\) ,其中\(h_{Peak}\) 是峰本身的高度,\(P\) 是峰的突出和\(R\) 用參數指定的正比率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()
scipy-signal-peak_widths-1.png

相關用法


注:本文由純淨天空篩選整理自scipy.org大神的英文原創作品 scipy.signal.peak_widths。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。