如何过滤数组以去除错误的值(如噪声)

本文关键字:错误 噪声 数组 何过滤 过滤 | 更新日期: 2023-09-27 18:29:04

我有一个1024个值的测量数组。但在这个数组中,有些值是错误的,比如噪声/峰值。阵列通常像正弦,所以所有值都应该在一条好的线上。如何为阵列创建一个滤波器来去除这些峰值和噪声?

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

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

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;
}

感谢所有的帮助

如何过滤数组以去除错误的值(如噪声)

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

您似乎听说过中值滤波器(由于短语that compares always three values短语)。当你必须去除罕见的峰值时,它效果很好。

示例:对于数据点三元组[3100,7],算法发现该三元组的中值不是均值!)值为7,并且(100)数据点被(7)值替换。

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; //??
}