我有一些数据是由NMEA GPS字符串标记的时间戳,我为了获得单个数据点年,月,日等而解码。
问题在于,在很少的情况下,GPS(可能是由于一些信号丢失)变得笨拙,并且它吐出非常非常错误的东西。这会在时间戳数据中产生峰值,如附图所示,该图描绘了GPS输出的天数向量。
正如您所看到的,GPS数据通常表现良好,每个月的日期在1到30/31之间,然后在下个月回落到1。但在某些时刻,GPS会随机吐出一天。
我尝试了所有标准的MATLAB函数来进行despiking(例如medfilt1和findpeaks),但要么它们不适合任务,要么我不知道如何正确设置它们。
我的另一个想法是循环相邻元素之间的差异,但向量太大,以至于计算机无法真正处理它。
是否有任何矢量化的方式走这条路并检测到这些尖峰?
非常感谢!
答案 0 :(得分:0)
您需要使用简单的低通过滤数据以消除异常值:
windowSize = 5;
b = (1/windowSize)*ones(1,windowSize);
a = 1;
FILTERED_DATA = filter(b,a,YOUR_DATA);
只需使用windowSize播放一下,直到获得所需的平滑度。