2017-07-29 7 views
0

年、月、日などのデータポイントを取得するためにデコードするNMEA GPS文字列でタイムスタンプを付けたデータがあります。MATLABを使用して定期データからスパイクを削除

問題は、いくつかの機会にGPSが(おそらく何らかの信号損失のために)沸騰し、非常に間違ったものが吐き出されるということです。これは、タイムスタンプデータにスパイクを生成します。これは添付の画像から分かるように、GPSによって出力されたDaysのベクトルをプロットします。

Random spikes in timestamp

あなたが見ることができるように、GPSデータは、一般的に行儀あり、そして日が来月に戻って1に落ちる前に、毎月1と30/31の間に行きます。しかしある一定の瞬間に、GPSはランダムな日を吐き出します。

私はdespiking用の標準的なMATLAB関数(medfilt1やfindpeaksなど)を試しましたが、タスクには適していないか、正しく設定する方法がわかりません。

私の他のアイデアは、隣接する要素間の違いをループすることでしたが、ベクトルは非常に大きく、コンピュータは実際にそれを処理できません。

このような道路を降りてスパイクを検出するベクター化された方法はありますか?

ありがとうございます!

+0

あなたのデータをアップロードできますか? – shamalaia

+0

これを試すことができますか? plot(1:10、[y(1:q(1)-1)]は、d1 = [diff(y)0]; q = q = find(diff(abs(d1))== 0) )、y '(q(1)+ 2)y(q(1)+2)y 'y 'はあなたのデータです。私に教えてください。 – shamalaia

答えて

0

あなたは、外れ値を取り除くために単純な低域を使用してデータをフィルタリングする必要があります:あなたが欲しいな平滑性を得るまで

windowSize = 5; 
b = (1/windowSize)*ones(1,windowSize); 
a = 1; 

FILTERED_DATA = filter(b,a,YOUR_DATA); 

だけwindowSizeでビットを果たしています。

+0

親愛なるNoa、あなたの迅速な答えに感謝!多分私は何か間違っているかもしれませんが、スパイクを平滑化するだけでなく、フィルタリングは時系列を前方にシフトさせます(つまり、日の変化はフィルタリングされていない時系列とは異なるインデックスで起こります)。 – Mutewinter

+0

井戸フィルタリングは遅延を誘発しますが、他のデータセットもフィルタリングして一定のシフトを得ることができます –

関連する問題