【问题标题】:How to filter an array to remove wrong values (like noise)?如何过滤数组以删除错误值(如噪声)?
【发布时间】:2013-08-29 21:35:21
【问题描述】:

我有一个包含 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;
}

感谢大家的帮助

【问题讨论】:

    标签: c# arrays algorithm filter noise


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      您似乎听说过中值过滤器(由于短语that compares always three values 短语)。当您必须删除罕见的峰时,它会很好地工作。

      示例:对于数据点三元组 [3, 100, 7] 算法发现该三元组的 median (not mean!) 值为 7,并且 (100)数据点被 (7) 值替换。

      【讨论】:

        【解决方案3】:
        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; //??
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-06-13
          • 2022-01-06
          • 1970-01-01
          • 1970-01-01
          • 2021-06-22
          • 1970-01-01
          • 1970-01-01
          • 2021-06-16
          相关资源
          最近更新 更多