ホームページ  >  記事  >  バックエンド開発  >  Python/SciPy で正確なピークを特定するために find_peaks 関数を効果的に利用する方法は?

Python/SciPy で正確なピークを特定するために find_peaks 関数を効果的に利用する方法は?

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-22 19:26:34252ブラウズ

How to Effectively Utilize the find_peaks Function for Accurate Peak Identification in Python/SciPy?

Python/SciPy のピーク検出アルゴリズム

問題ステートメント

ピークを識別するタスクは、フーリエでのピークの検出に至るまで、さまざまなアプリケーションで発生します。変換 (FFT) を使用して 2D 配列からピークを抽出します。一般的な課題は、真のピークとノイズによる変動を区別することです。

Python/SciPy の既存のピーク検出関数

ピーク検出アルゴリズムを最初から実装する代わりに、scipy の利用を検討してください。 .signal.find_peaks 関数。この関数には、特定の基準に基づいてピークをフィルタリングして識別するためのオプションが用意されています。

find_peaks パラメータについて理解する

find_peaks の力を効果的に利用するには、そのパラメータを理解することが重要です。

  • : ピークの最小幅。
  • 閾値: ピークとその隣接ピーク間の最小差。
  • 距離: 連続するピーク間の最小距離。
  • プロミネンス: より高い地形に到達するためにピークから下降するために必要な最小高さ。

プロミネンスの強調

すべてのパラメータの中で、プロミネンス は、真のピークとノイズを区別するのに最も効果的です。その定義には、より高いピークに到達するために必要な最小の垂直降下が含まれます。

アプリケーション例: 周波数変化正弦波

その有用性を説明するために、ノイズが混入した周波数変化正弦波を考えてみましょう。理想的なソリューションは、スプリアス ノイズ ピークに屈することなくピークを正確に識別することです。

コードのデモ

次のコードは、さまざまなパラメーターの組み合わせで find_peaks 関数を使用する方法を示しています。

<code class="python">import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import find_peaks

# Generate signal
x = np.sin(2*np.pi*(2**np.linspace(2,10,1000))*np.arange(1000)/48000) + np.random.normal(0, 1, 1000) * 0.15

# Find peaks using different parameters
peaks, _ = find_peaks(x, distance=20)
peaks2, _ = find_peaks(x, prominence=1)
peaks3, _ = find_peaks(x, width=20)
peaks4, _ = find_peaks(x, threshold=0.4)

# Plot results
plt.subplot(2, 2, 1)
plt.plot(peaks, x[peaks], "xr"); plt.plot(x); plt.legend(['distance'])
plt.subplot(2, 2, 2)
plt.plot(peaks2, x[peaks2], "ob"); plt.plot(x); plt.legend(['prominence'])
plt.subplot(2, 2, 3)
plt.plot(peaks3, x[peaks3], "vg"); plt.plot(x); plt.legend(['width'])
plt.subplot(2, 2, 4)
plt.plot(peaks4, x[peaks4], "xk"); plt.plot(x); plt.legend(['threshold'])
plt.show()</code>

結果からわかるように、プロミネンス (2 番目のサブプロットの青い線) を使用すると、真のピークが効果的に分離されますが、距離、幅、およびしきい値では、ノイズが存在する場合のパフォーマンスが標準以下になります。

以上がPython/SciPy で正確なピークを特定するために find_peaks 関数を効果的に利用する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。