質問: python / scipyのピーク検出アルゴリズム 一次導関数のゼロクロッシングまたは何かを見つけることで自分で何かを書くことができますが、標準ライブラリに含まれる一般的な十分な関数のようです。誰もが知っていますか?私の特定のアプリケーションは2dアレイですが、通常はfftなどでピークを見つけるために使用されます。具体的には、この種の問題では、複数の強いピークがあり、無視する必要のあるノイズが原因の小さな「ピーク」がたくさんあります。これらは単なる例です。私の実際のデータではありません:1次元のピーク: 2次元のピーク:ピーク検出アルゴリズムは、これらのピークの位置(それらの値だけでなく)を見つけ、理想的には、おそらく 2次補間 を使用して、最大値を持つインデックスだけでなく、真のサンプル間ピークを見つけます何か。通常、少数の強いピークのみを気にするので、特定のしきい値を超えているか、または順序付けされた最初のnピークであるために選択されます振幅によってランク付けされたリスト。私が言ったように、私はこのようなものを自分で書く方法を知っています。うまく機能することがわかっている既存の関数またはパッケージがあるかどうかを尋ねています。更新:i matlabスクリプトの翻訳 であり、1-dの場合には適切に機能しますが、改善される可能性があります。更新された更新:sixtenbe より良いバージョンを作成 1-dの場合。
回答: 信頼できる方法でスペクトルのピークを検出することはかなり研究されてきました。たとえば、80年代の音楽/オーディオ信号の正弦波モデリングに関するすべての研究です。文献で「正弦波モデリング」を探してください。信号が例と同じくらいきれいであれば、単純な「n個の隣人よりも大きい振幅を持つものをくれ」と合理的に機能するはずです。ノイズの多い信号がある場合、シンプルで効果的な方法は、ピークを時間内に調べて追跡することです。その後、スペクトルピークの代わりにスペクトル線を検出します。 iowでは、信号のスライディングウィンドウでfftを計算し、時間内のスペクトルのセット(スペクトログラムとも呼ばれます)を取得します。次に、スペクトルピークの時間的変化(つまり、連続したウィンドウ)を確認します。