移除移动平均值中的极值(MATLAB)

时间:2014-08-18 12:51:32

标签: matlab matrix outliers

我有一个测量矩阵:

A=[x1,y1;x2,y2;x3,y3]

我的设备有一些干扰, 所以我想删除高于相邻点之间平均值10倍的测量值(行数)(平均y值)。

示例:

如果A=[1,1; 2,300; 3,2; 4;4]

在这种情况下,我想删除第二行(它显然是一个异常)。

谢谢

1 个答案:

答案 0 :(得分:1)

找到移动平均线(考虑n-1个邻居,n必须是奇数):

n = 3;
k = ones(n,1)/(n-1);
k((n+1)/2) = 0; %//leave out the point you're considering i.e. you kernel will be like [0.5,0,0.5] or [0.25,0.25,0,0.25,0.25] etc
av = conv2(A, k, 'same');

现在比较它们是否比当地平均值大10倍

ind = A >= av*10;

然后删除行:

A(~any(ind,2),:)