0

基本的に、タイムスタンプをミリ秒単位で float 値にマップするデータ オブジェクトが多数あります。基本的に、特定の範囲内のデータのピーク/最大を見つけようとしています。私は基本的に次のようなものを使用しています:

float previousValue = 0;
for (int i = 0; i < data.size(); i++) {
    MyData value = data.get(i);
    if (value.getData() < previousValue) {
        // found the peak!
        break;
    } else {
        previousValue = value.getData();
    }
}

このアルゴリズムの唯一の問題は、ノイズを考慮していないことです。基本的に、次のような値を持つことができます。

[0.1025, 0.3000, 0.3025, 0.3500, 0.3475, 0.3525, 0.1025]

実際のピークは 0.3525 ですが、上記の私のアルゴリズムでは最初に来るため 0.3500 と見なされます。私の計算の性質max()上、配列で実行して最大値を見つけることはできません。落ちる前に最初に来る最大値を見つける必要があります。

ノイズの分散を考慮しながら、ピークの頂点を見つけるにはどうすればよいですか?

4

2 に答える 2

1

2 つの問題があります。

  1. ノイズをフィルタリングします。
  2. ピークを見つける。

すでに 2 の解決策があり、1 を解決する必要があるようです。

ノイズを除去するには、ある種のローパス フィルターが必要です。移動平均はそのようなフィルターの 1 つです。たとえば、指数移動平均は実装が非常に簡単で、うまく機能するはずです。

要約すると、シリーズをフィルターに通してから、ピーク検出アルゴリズムを適用します。

于 2012-02-07T18:48:47.327 に答える