【问题标题】:Remove Spikes from Periodic Data with MATLAB使用 MATLAB 从周期性数据中去除尖峰
【发布时间】:2017-07-29 14:45:10
【问题描述】:

我有一些由 NMEA GPS 字符串加时间戳的数据,我对其进行解码以获得单个数据点年、月、日等。

问题在于,在少数情况下 GPS(可能是由于某些信号丢失)会出现故障,并且会吐出非常非常错误的信息。这会在时间戳数据中产生尖峰,您可以从所附图片中看到,该图片绘制了 GPS 输出的 Days 向量。

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

我尝试了所有用于去尖峰的标准 MATLAB 函数(例如 medfilt1 和 findpeaks),但要么它们不适合该任务,要么我不知道如何正确设置它们。

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

是否有任何矢量化方法可以沿着这条路走并检测那些尖峰?

非常感谢!

【问题讨论】:

  • 你能上传你的数据吗?
  • 你可以试试这个吗? d1=[diff(y) 0];q=q=find(diff(abs(d1))==0);plot(1:10,[y(1:q(1)-1) y(q(1)+2) y(q(1)+2) y(q(1)+2:end)],'r')y 是您的数据。请告诉我。

标签: matlab outliers


【解决方案1】:

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

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

FILTERED_DATA = filter(b,a,YOUR_DATA);

只需稍微调整一下 windowSize 即可获得所需的平滑度。

【讨论】:

  • 亲爱的诺亚,感谢您的快速回答!也许我做错了什么,但是过滤,除了平滑尖峰之外,还会将时间序列向前移动(即:一天的变化发生在与未过滤时间序列不同的索引处)。
  • 良好的过滤确实会导致延迟,您也可以过滤其他数据集以获得恒定的偏移
猜你喜欢
  • 2017-08-14
  • 1970-01-01
  • 2012-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-29
  • 1970-01-01
  • 2017-02-27
相关资源
最近更新 更多