matlab - 去除具有多个连续值的异常值,类似于一个步骤
问题描述
我正在处理海浪数据,其中有一个峰值波浪周期 (Tp (s)) 的时间序列。该位置的 Tp 典型值范围为 2s-15s。但是,在暴风雨等极端事件中,它可能会在 15 秒以上达到更高的值。因此,基于阈值删除数据是不合适的。
如下图所示,有多个异常值。高值出现了一小段时间,然后下降。极端事件将持续数小时。
我已经尝试过函数filloutlier
和medfilt1
,但它们没有成功去除异常值,我认为这是因为存在多个连续的异常值数据点。
是否有内置的 Matlab 函数来处理这种情况?否则,如果我需要编写自己的函数来过滤此类信号,您能否提供一些指导。
在这里也附上一个小数据样本:下载数据
解决方案
如果我们知道我们需要值在 (2,15) 的范围内,我们可以将 > 15 到 15 的值裁剪。
另一种方法是使用观察值的高百分位数(例如 95)的值和有关它的剪辑值。
filloutlier
,medfilt1
方法不会删除像 18 这样的值,因为它们没有将它们视为异常值。18 距离 (2, 15) 的典型范围不是很远。
推荐阅读
- python - 缺少导入 cv2 - python3.7
- android - 应用程序关闭后BLE连接丢失
- c++ - 如何在 C++ 中使用向量在邻接列表中插入数组
- javascript - Rendering nested interpolation in vuejs. Render interpolation that is in a string that is being rendered through interpolation
- json - How can I get two interface from
- javascript - 使用jquery从复选框中获取价值
- java - 在我的 Androidstudio 音乐播放器暂停按钮问题
- tensorflow - 带有 RNN 的 Keras 损失函数中的梯度
- python - ElementTree find() 总是返回“无” Cisco iOS xe
- javascript - 如何在 JavaScript 中过滤具有最低值的重复项