0

1024 個の値の測定配列があります。しかし、この配列には、ノイズ/ピークのように間違った値がいくつかあります。配列は通常、sinus に似ているため、すべての値が適切に並んでいる必要があります。これらのピークとノイズを除去するためにアレイにフィルターを作成するにはどうすればよいですか?

常に 3 つの値を比較し、その平均値を作成するアルゴリズムについて聞いたことがありますが、この例は見つかりません。

間違った値は以前の値よりも大きい「ピーク」であるため、特定の「オフセット」の値を以前の値と比較するだけで簡単になりますか? しかし、これを行う方法は?

public int FilterArray(double[] Values, double Offset, out double[] Results)
{
    int ArrLength = Values.Length;
    Results = new double[ArrLength];
    for (int i = 0; i < ArrLength; i++)
        Values[i] = 0;

    try
    {
        for (int i = 0; i < ArrLength; i++)
        {

          if (Values[i+1] + Offset) > (Values[i]
             {
               // here someting is needed
             }
             else
             {
               // nothing to do if next value is ok
             }
        }

    }
    return 0;
}

助けてくれてありがとう

4

3 に答える 3

1

配列の代わりにリストを使用することをお勧めします。データを処理するために配列が必要な場合は、ToArray() メソッドを使用できますが、配列のサイズを変更するよりもリストからアイテムを削除/フィルタリングする方が簡単です。

于 2013-08-27T08:28:29.310 に答える
1

メディアンフィルターについて聞いたようです(フレーズthat compares always three valuesフレーズによる)。まれなピークを削除する必要がある場合に有効です。

例: データ ポイント トリプレット [3, 100, 7] の場合、アルゴリズムは、このトリプレットの中央値(意味ではない! ) が 7 であることを検出し、(100) データ ポイントは (7) 値に置き換えられます。

于 2013-08-27T11:16:31.120 に答える
0
public int FilterArray(List<double> Values, double Offset, out double[] Results)
{
    foreach(double value in new List<double>(Values))
    {
        // some logic
        Values.Remove(value);
    }
    return 0; //??
}
于 2013-08-27T08:45:45.900 に答える