如何使用 SciPy 的 find_peaks 函數在 Python 中尋找顯著峰值?

DDD
發布: 2024-10-22 20:33:13
原創
330 人瀏覽過

How to Find Significant Peaks in Python Using SciPy's find_peaks Function?

在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中文網其他相關文章!

來源:php
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板