私は本質的に、タイムスタンプをミリ秒単位で浮動小数点数にマッピングするデータオブジェクトをたくさん持っています。私は本質的に特定の範囲内のデータのピーク/最大値を見つけることを検討しています。アルゴリズムのノイズを取り除く
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()
を実行して最大の値を見つけ出すことはできません。その値が下がる前に最初に来る最大の値を見つける必要があります。
ノイズの変動を考慮しながら、ピークのトップを見つけるにはどうすればよいですか?
どのようにピークを定義しますか? .3500の後の値と.3525の後の値が下がります。違いは何ですか? –
懸念事項を分ける:まず、スライディングウィンドウを使用してデータを平均化する。これによりノイズが除去される。その後、自分の方法や他の方法で簡単にピークを見つけることができます。 – alf