1. 序章

データを処理するときの一般的なタスクは、入力信号のピークを見つけることができるようにすることです。

たとえば、測定された電気信号、地震波、風速などです。 これを実現するためのいくつかの手法と、それらを使用する理由を検討します。

2. ナイーブ処理

これを実現する最も簡単な方法は、データを処理して最も高いスパイクを探すことです。多くの場合、これで十分です。

たとえば、データのストリームが与えられた場合:

このデータをすばやく処理して、時間18のピークを見つけることができます。

このアルゴリズムは、バックグラウンドデータと比較してピークが著しく明らかな場合に最適です。 上記の場合、バックグラウンドデータは1から3の間で変動し、ピークは11にあります。

2.1. アルゴリズム

アルゴリズムは単純です。 各ポイントを順番に見て、これまでに見た中で最も高いポイントを記録します。

データの最後に到達すると、記録された最高値がピークになります。

3. 複数のピークの検索–ベースライン

最初のアルゴリズムは、比較的単純なデータで単一のピークを探している場合にうまく機能します。 同じ信号で複数のピークを探している場合はまったく機能しません–ただし、最も高いピークしか見つけることができません。

たとえば、次の信号では:

3つの顕著なピークがあることがわかりますが、最初のアルゴリズムでは、値が最も高いピークであるため、時間24で1つしか検出されません。

ここでの最も簡単なオプションの1つは、ベースラインを生成することです。信号を処理しているときに、現在の値がこのベースラインを下回った場合は、現在のピークを出力に追加してから、再開する。

使用するのが最も簡単なベースラインは、信号のすべての値の単純な平均です。 上記のデータでは、平均は4.325です。 信号がこの値を下回ると(14、26、および38の時点で発生します)、ピークを記録して最初からやり直します。

3.1. アルゴリズム

この場合のアルゴリズムは最初のアルゴリズムとほぼ同じで、必要な場合にのみ複数のピークを記録します。

4. ノイズの多い信号

信号自体と比較してノイズレベルが大きい信号を処理しなければならない場合があります。 このような場合、ノイズ自体が多くの誤検知を引き起こし、信号のピークを見つけるための誤った結果をもたらす可能性があります。

たとえば、次の信号は、ノイズが追加されただけの正弦波です。

これだけから、ピークがどこにあるかを確認することは困難です。 以前に見たようなベースライン平均は、実際の信号と比較してノイズが非常に大きいため、役に立ちません。この場合、2つしかない場合、この信号で7つの異なるピークが検出されます。

代わりに、信号の移動平均を計算できます。 データセット全体を表す単一の値の代わりに、周囲のポイントを表すすべての単一のポイントの平均を計算できます。

たとえば、両側の2ポイントの移動平均を取るとすると、信号は次のようになります。

すぐに、信号がどのように見えるか、そしてピークが何であるかをはるかに明確に見ることができます。

特に、新しい平均信号のピークは、元の信号のピークに常に対応しているわけではありませんが、常に最も高い値のクラスターの真ん中にあります。

4.1. アルゴリズム

このためのアルゴリズムは以前と非常に似ていますが、ピークを見つける前に信号を前処理する必要があります。

5. 広いピークの検出

これまで見てきたことはすべて、信号の単一の高点を検出します。 ただし、これでは不十分な場合もあります。 一部の信号では、ピーク全体を構成する値の範囲を検出できる必要があります。これは、信号が「オン」と見なされる領域を探す場合に特に役立ちます。

たとえば、次の信号では、信号の残りの部分の上に明確な領域があり、その範囲全体を同じピークと見なす必要があります。

これは、単一の最も高いポイントを探すのではなく、ベースラインより上のすべてのポイントを追跡することで実現できます。次に、ピークが単一の値ではなく、値の範囲であるという事実を処理するように適応する必要があります。 1。

たとえば、上記の信号のピークを平均4.2を超えるものとして追跡すると、次のようになります。

正確なニーズに応じて、実際の要望は、ピーク全体を知ることである場合もあれば、ピークのエッジを知ることである場合もあります。

たとえば、トリガーされているセンサーを検出するために電気信号を監視している場合、ピークがいつ開始および終了するかを知りたいと思いますが、その間の期間は気にしない場合があります。

5.1. アルゴリズム

この状況には、さまざまなアルゴリズムを適用できます。 この場合、全体的なベースラインを使用して物事を単純化する方法を見てみましょう。

これは、ベースラインを超えるすべてのインデックスを返すだけです。 ベースラインを超えるインデックスのグループを返すことが望ましい場合があります。各グループは単一のピークを表します。

あるいは、高い値を引き出すだけでなく、信号を高い/低い値のストリームに変換したい場合もあります。

6. 標準偏差による分散

分散とは、「分布が伸びる程度」です。 これを利用して、信号が通常より一時的に伸びていることを検出できます。 これは、移動平均を追跡し、これから一定数の標準偏差を超えるポイントを探すことで実行できます。

ここでは、直線のベースラインの代わりに標準偏差を使用することで、信号の正常なピークと異常なピークの違いを検出できます。ここで、異常なピークが探しています。

たとえば、次の信号があるとします。

ベースラインより上にいくつかの小さなピークがありますが、検出しようとしているのは2つの非常に明白なピークです。 直線的なベースラインでは、全体の平均3.29が使用される可能性が高く、3、6、および18の時点でもピークが検出されます。

分散アルゴリズムを使用することにより、これらは重要ではないと見落とされ、代わりに、2つの主要なピークのみが検出されます。

6.1. アルゴリズム

このアルゴリズムは、以前のどのアルゴリズムよりも複雑ですが、必要な場合にメリットがあります。 先行するポイントの数に基づいてすべてのポイントの新しい値を計算することにより、移動するベースラインを生成します。次に、現在のポイントがこのベースラインからどの程度変化するかを確認します。

このアルゴリズムには、信号だけでなく、他の入力も含まれています。 私たちは知る必要がある:

  • ラグ–移動ベースラインの計算に使用する現在の値より前の値の数。
  • しきい値–カウントするためにピークを超える必要がある移動ベースラインからの標準偏差の数。
  • 影響–ピークが移動ベースラインに与える影響の量。 これは0から1の間でなければなりません。

アルゴリズムは、各ポイントを前のlagポイントの平均と比較します。 ただし、この平均を計算するときは、ピークと見なされるポイントの値を調整します。そうしないと、移動するベースラインとして表示したいものが歪むためです。

これらのポイントを調整する量は影響と呼ばれ、ベース信号と比較したピークの予想サイズに基づいて選択する必要があります。 ピークが大きいほど、移動するベースラインに影響を与えることが少なくなります。

7. 概要

ここでは、信号のピークを検出するためのいくつかの異なる手法を見てきましたが、ここでも調べていないものがたくさんあります。

使用する正確なアルゴリズムは、処理している信号とそれから何を取得する必要があるかによって異なります。