0

我有一个包含 1024 个值的测量数组。但是在这个数组中有些值是错误的,比如噪声/峰值。该数组通常像 sinus 一样,因此所有值都应该排成一行。如何为阵列创建过滤器以消除这些峰值和噪声?

我听说过一种算法,它总是比较三个值并创建它的平均值,但我找不到这样的例子。

错误的值是“峰值”,它比之前的值更大,所以如果我只是将值与给定的“偏移”之前的值进行比较,可能会更容易?但是如何做到这一点?

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

It seems you heard about Median Filter (due to phrase that compares always three values phrase). It works good when you have to remove rare peaks.

Example: for data point triplet [3, 100, 7] algorithm finds that median (not mean!) value of this triplet is 7, and (100) data point is replaced by (7) value.

于 2013-08-27T11:16:31.120 回答
1

我建议使用列表而不是数组。如果您需要一个数组来处理您的数据,您可以使用 ToArray() 方法,但从列表中删除/过滤项目比调整数组大小更容易。

于 2013-08-27T08:28:29.310 回答
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 回答