在Python/SciPy 中尋找峰值
在資料中尋找峰值是各個領域的常見任務,包括訊號處理、影像分析和數據分析。 Python 提供了多個用於峰值檢測的套件和函數,包括 SciPy 的 scipy.signal.find_peaks 函數。
SciPy 的峰值查找演算法
find_peaks 函數將一維數組作為輸入並傳回峰值的索引。它採用峰值查找演算法,根據多個參數檢測峰值:
雜訊抑制的突出度
突出度參數對於區分顯著峰值和雜訊引起的峰值特別有用。突出度定義為從山頂到達任何更高地形的最小高度下降。透過設定較高的突出閾值,演算法可以有效地濾除雜訊引起的小峰值。
使用範例
以下程式碼示範了在雜訊頻率下尋找峰值- 使用find_peaks 函數改變正弦曲線:
<code class="python">import numpy as np import matplotlib.pyplot as plt from scipy.signal import find_peaks x = np.sin(2*np.pi*(2**np.linspace(2,10,1000))*np.arange(1000)/48000) + np.random.normal(0, 1, 1000) * 0.15 peaks_prominence, _ = find_peaks(x, prominence=1) plt.plot(x) plt.plot(peaks_prominence, x[peaks_prominence], "ob") plt.legend(['Signal', 'Peaks (prominence)']) plt.show()</code>
如圖所所示,find_peaks 函數找到高振幅和突出度的峰值,有效濾除雜訊所造成的峰值。
其他尋峰選項
除了 find_peaks 之外,SciPy 還提供其他尋峰功能,例如peak_widths 和 argrelmax。這些函數可能更適合特定的應用或調整。
結論
SciPy 的 scipy.signal.find_peaks 函數為 Python 中的峰值查找提供了強大且通用的解決方案。其可調節參數(包括突出度)允許進行自訂以檢測各種類型資料中的顯著峰值。
以上是如何使用 SciPy 的 find_peaks 函數在 Python 中尋找顯著峰值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!