【问题标题】:Removing extreme values in moving average (MATLAB)去除移动平均线中的极值(MATLAB)
【发布时间】:2014-08-18 12:51:32
【问题描述】:

我有一个测量矩阵:

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

我的设备受到了一些干扰, 所以我想删除超过相邻点之间平均值(平均 y 值)10 倍的测量值(行)。

示例:

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

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

谢谢

【问题讨论】:

  • stackoverflow.com/questions/25361871/… ==> 为什么你又问了?答案没有帮助?
  • 帮助很大! :) 但我现在需要使用移动平均线,而不是总移动平均线.. 因为合身看起来仍然很糟糕
  • 在这里你可以找到一些答案:Matlab filter electical spikes in accelerometric data的可能重复
  • 谢谢,但这里又是总平均线,而不是移动平均线..
  • @RonMaor 你的意思是因为有一个一般的门槛?好吧,您可以使阈值动态化,变化不大。

标签: matlab matrix outliers


【解决方案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),:)

【讨论】:

  • 谢谢!但是 A 是一个矩阵,我不能用 K 卷积它
  • 你可以改为conv(A(2,:),k,'same')
  • @RonMaor 抱歉,我应该使用conv2(我认为)与[conv(A(1,:),k,'same'), conv(A(2,:),k,'same')] 相同。我已经在您的示例 A 上对此进行了测试,它删除了正确的行。
  • @RonMaor 但是,如果您知道第一列肯定会按顺序进行并且不会遇到异常(即时间数据),那么您应该按照其他 cmets 的建议进行操作,然后与第二列进行卷积,并与第二列进行比较,您将不再需要any
猜你喜欢
  • 2021-01-18
  • 1970-01-01
  • 2017-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-19
  • 2013-12-22
  • 1970-01-01
相关资源
最近更新 更多