2017-02-02 7 views
0

各列の標準偏差の4倍のしきい値を超えるすべてのデータ点を、隣接する2つのデータ点の平均値で置き換えることによって、フィルタリングしたい加速度(10240x31) 。標準偏差をループでフィルタリングする

まず、すべてのデータポイントを最大値を超える場合は0に置き換えたいと考えました。これは私のループです:

for w = 1:31 
    Sigma(w) = std(zacceleration(:,w)); 
    zacceleration(zacceleration<(-4*Sigma(w))) = 0; 
    zacceleration(zacceleration>(4*Sigma(w))) = 0; 
end 

このコードは、例えばただ1番号、あるワットあれば動作します:

w = 1; 

しかし、ワットの変更反復ごと、フィルタリングされたデータだけでない値が含まれています最後のデータセットであるSigma(31)のしきい値を超えています。 だから、私は自分のデータなどを上書きすると思いますが、私は解決策を見つけることができません。

誰でも私にヒントを教えていただけますか?

ありがとうございます。

+0

この範囲を超える連続したデータポイントが2つある場合はどうなりますか?スパイクを除去するためにメジアンフィルタを使用するだけでも価値があります。 – Suever

+0

これは決して起こったことがないので、私はそれについて考えなかった。アドバイスをいただきありがとうございます。メジアンフィルタを使用するとどういう意味ですか?私はまだ私のすべてのデータポイントを持っていたい、私はそれらをマージしたくない。 – Tierce

+0

メジアンフィルタは、https://www.mathworks.com/help/signal/ref/medfilt1.html – Suever

答えて

0

私は今それを得たと思う。

Sigma = std(zacceleration); 
for a = 1:10240; 
    for b = 1:31; 
     if zacceleration(a,b)<(-4*Sigma(b)) 
      zacceleration(a,b) = 0; 
     end 
     if zacceleration(a,b)>(4*Sigma(b)) 
      zacceleration(a,b) = 0; 
     end 
    end 
end