尖峰去除算法

时间:2011-05-24 15:07:09

标签: objective-c c algorithm

我的数值范围从30到300.我想以某种方式进行加权平均,其中,如果我有5个值而且其中一个比其余值(尖峰)大很多,则不会影响如果我只是算术平均值那么平均得多:例如:(n1+n2+n3+n4+n5)/5

有没有人知道如何制作一个简单的算法来做到这一点,或者在哪里看?

6 个答案:

答案 0 :(得分:4)

听起来您正在寻找丢弃超出您指定的某个参数范围的数据。您可以通过计算中值/模式并在计算平均值时忽略此范围之外的值来实现。当然,您必须相应地调整除数,以计算丢弃值的数量。这个“可容忍的”范围应由您决定,并且可能取决于您的具体应用需求。

或者,您可以尝试将项目消除r%超出总平均值范围。像这样(在javascript中):

function RangedAverage(arr, r)
{
    x = Average(arr);
    //now eliminate items r% out of range
    for(var i=0; i<arr.length; i++)
        if(arr[i] < (x/r) || arr[i]>(x*(1+r)))
            arr.splice(i,1);
    x = Average(arr); //compute new average
    return x;
}

答案 1 :(得分:1)

您可以尝试median filter而不是均值过滤器。它通常用于图像处理,以减少虚假像素值(与白噪声相反)。

答案 2 :(得分:1)

正如您所注意到的那样,平均值很容易受到尖峰的影响。也许中位数或模式可能是一个更好的统计数据,因为它们往往不那么倾斜?

这应该是一个评论,但js似乎对我来说是破坏的:它不是很清楚你是在追踪一个特征数组的数字(即平均值)还是删除了尖峰的新数组(中位数)过滤器)

作为对此的回应我建议你先看看中位数或模式是否更适合作为统计数据。如果没有那么应用中值滤波器(非常擅长去除尖峰)然后平均

答案 3 :(得分:0)

Kalman filter经常用于类似的应用程序。我不知道它是否符合“简单”的要求,但它很强大且众所周知。

答案 4 :(得分:0)

有很多方法可以实现:low-pass digital filter.

或者,如果您只关心从统计摘要中删除异常值,您可以在平均之前从数据集中删除数据值的最高和最低N%。

答案 5 :(得分:0)

&#34;强大的统计数据&#34;是一个可以让你进入文献的搜索词。卡尔曼滤波器的一个优点是,您可以对数据的可变性进行运行估计,这样您最终可以放弃超过x%的观察值,因为到目前为止,整个观察结果都是假的。 #34 ;.