如何过滤数组以去除错误的值(如噪声)
本文关键字:错误 噪声 数组 何过滤 过滤 | 更新日期: 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; //??
}