首页 > 解决方案 > 去除具有多个连续值的异常值,类似于一个步骤

问题描述

我正在处理海浪数据,其中有一个峰值波浪周期 (Tp (s)) 的时间序列。该位置的 Tp 典型值范围为 2s-15s。但是,在暴风雨等极端事件中,它可能会在 15 秒以上达到更高的值。因此,基于阈值删除数据是不合适的。

如下图所示,有多个异常值。高值出现了一小段时间,然后下降。极端事件将持续数小时。

我已经尝试过函数filloutliermedfilt1,但它们没有成功去除异常值,我认为这是因为存在多个连续的异常值数据点。

是否有内置的 Matlab 函数来处理这种情况?否则,如果我需要编写自己的函数来过滤此类信号,您能否提供一些指导。

在这里也附上一个小数据样本:下载数据

数据集图(仅上面提供的数据中的段) 在此处输入图像描述

在其中一个异常值处放大图。 在此处输入图像描述

标签: matlabdata-sciencesignal-processingoutliers

解决方案


  1. 如果我们知道我们需要值在 (2,15) 的范围内,我们可以将 > 15 到 15 的值裁剪。

  2. 另一种方法是使用观察值的高百分位数(例如 95)的值和有关它的剪辑值。

filloutlier,medfilt1方法不会删除像 18 这样的值,因为它们没有将它们视为异常值。18 距离 (2, 15) 的典型范围不是很远。


推荐阅读