使用MATLAB从周期性数据中删除尖峰

时间:2017-07-29 14:45:11

标签: matlab outliers

我有一些数据是由NMEA GPS字符串标记的时间戳,我为了获得单个数据点年,月,日等而解码。

问题在于,在很少的情况下,GPS(可能是由于一些信号丢失)变得笨拙,并且它吐出非常非常错误的东西。这会在时间戳数据中产生峰值,如附图所示,该图描绘了GPS输出的天数向量。

Random spikes in timestamp

正如您所看到的,GPS数据通常表现良好,每个月的日期在1到30/31之间,然后在下个月回落到1。但在某些时刻,GPS会随机吐出一天。

我尝试了所有标准的MATLAB函数来进行despiking(例如medfilt1和findpeaks),但要么它们不适合任务,要么我不知道如何正确设置它们。

我的另一个想法是循环相邻元素之间的差异,但向量太大,以至于计算机无法真正处理它。

是否有任何矢量化的方式走这条路并检测到这些尖峰?

非常感谢!

1 个答案:

答案 0 :(得分:0)

您需要使用简单的低通过滤数据以消除异常值:

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

FILTERED_DATA = filter(b,a,YOUR_DATA);

只需使用windowSize播放一下,直到获得所需的平滑度。