【问题标题】:Matlab: Eliminating freak values in datasetMatlab:消除数据集中的异常值
【发布时间】:2015-12-16 18:20:17
【问题描述】:

我正在寻找一种方法来消除给定数据集中的异常值。例如:

应该消除所有这些峰值。我尝试了不同的过滤器,如medfilt,但峰值仍然存在。我也试过低通滤波器,但也没有用。我是过滤信号的初学者,所以我可能做错了。

您可以下载x array herey array here 的数据集。

我也可以想象一个循环来比较相邻的值,但我确定必须有一个内置函数?

这是使用medfilt1(input,15)的结果:

山峰正在消失,但随后我得到了这些丑陋的台阶,这是我不想要的。

【问题讨论】:

  • 一个简单的方法是对你的数据进行比较,看看哪里的值变化超过了某个阈值。
  • This 是我在阅读“数据集中的异常值”时所关联的。
  • 哈哈安德拉斯,实际上我只是翻译了德语单词,我得到了“怪胎值”=D excaza,所以你的意思是要循环遍历数据,检查某个差异并消除它?我也有这个想法,但我认为可能有一个内置功能......
  • 您是想用附近样本的插值替换“怪胎”值,还是只想删除“怪胎”值?
  • 您遇到问题的原因之一是您的 x 数据 v_Rolle1 看起来也已损坏并且不是单调递增的。放大你的第一个情节。您可以尝试对数据进行排序:[X,idx] = sort(v_Rolle1);plot(X,P1(idx));

标签: matlab filter


【解决方案1】:

只需使用中值过滤器!如果这是一个 1 像素的“宇宙”尖峰,medfilt1(data,3) 就可以了。如果峰值仍然存在,请将窗口大小增加到 5 或更多...

编辑: 所以这就是 op 的数据的样子:

所以我们看到数据不是完全统一或有序的,并且在尖峰中有很多数据点,这与从问题中第一次理解的不同(请大家正确绘制数据!)现在的问题是,数据在基线中的尖峰还是开启?

【讨论】:

  • 我再次尝试了 medfilt1 函数,但我需要至少 15 个才能消除最多的峰值,但是我不仅消除了峰值,还得到了图表中的步骤...我将添加图表在问题中...
  • 更好的是,在 .mat 文件中提供指向数据本身的链接
  • 只需使用至少两倍于您选择宽度的窗口大小
  • 我试过了,但是我的图表看起来像一个楼梯......如第二张图表所示
  • 这有点复杂,因为 x 数据不是单调的。
猜你喜欢
  • 1970-01-01
  • 2015-12-24
  • 2017-08-28
  • 2011-06-14
  • 2021-05-03
  • 2020-12-10
  • 2016-01-11
  • 1970-01-01
相关资源
最近更新 更多