2013-11-15 31 views
0

我有一个问题,用实验数据过滤数组 - 数据是一个长数组(双)。这个数组的索引只是时间(秒),值可能是负值或正值。问题是,有时候实验数据是错误的(( - 这是由于我们的设备中的错误导致了 这个错误值与其他数组值非常不同,例如 前100秒的值等于+75 +(小德尔塔值)或 - 40 - (小德尔塔值),但然后,在3秒钟的值是+270(这是我上面说过的一个错误)如何从数组中清除这个值?平均值可能不是最好的方法因为如果我从数组中获取每个值作为总和,这个错误数据会破坏整个统计量(由于它的“重量”很大)。我已经绘制了这个数据 - 图片很清楚,但是..如果这个错误是由像白噪声那么我可以实现例如卡尔曼滤波器,但首先没有计算值的函数,其次这个误差不是白噪声。过期数据过滤数组

回答

1

假设我们大多数时间都有正确的值。如果信号是永久的(小的三角洲),我们可以使用中位数来过滤数据:

delta = 1e-3; 
a=[75 * ones(1,20) + rand(1,20) * delta, 270 * ones(1,3) + rand(1,3) * delta]; 
m = median(a); 
filtered_a = a(m - 2 * delta < a & a < m + 2 * delta); 
+0

谢谢你的回答,这个解决方案对于预定义的数据是完美的。但我不知道下一次会出现什么值。它可能是270,但如果下一个实验结果将有正确的(常见)值270 + - 德尔塔和坏值将是2 + - 德尔塔或1000 + - 德尔塔这种方法将无法正常工作( – curiousity

+0

我重写了上述答案。 – ilalex

+0

你能否回答一个问题 - 如果我在每个时间段内只有2个数组的值 - 现在和下一个我可以使用中值在filtered_a上获得m值吗? – curiousity