本文簡要介紹 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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。