【问题标题】:How to filter data within certain threshold in Matlab?如何在 Matlab 中过滤特定阈值内的数据?
【发布时间】:2020-02-06 08:16:47
【问题描述】:

要删除高于 1.2 和低于 -1.2 的数据。

我使用以下函数:

threshold = [-1.2, 1.2];
y = rmoutliers(y,'percentiles',threshold);

但是发生了错误:

使用 isoutlier>parseinput 时出错(第 236 行) 'Percentiles' 值必须是已排序的 2 元素数值向量,其条目介于 0 和 100 之间。

还有什么其他功能可以解决这个问题吗?

【问题讨论】:

    标签: matlab filter signals outliers threshold


    【解决方案1】:

    删除它们是直截了当的。假设您需要从 x 和 y 轴数据中删除点,然后,

    idx_to_remove = ((y<-1.2)|(y>1.2));
    x(idx_to_remove) = [];
    y(idx_to_remove) = [];
    

    但是您是否需要删除它们或将它们饱和到适当的限制?对于饱和度x 不会改变,但您可以对y 执行以下操作,

    y(y < -1.2) = -1.2;
    y(y > 1.2) = 1.2;
    

    【讨论】:

    • 我认为y = min(max(y,-1.2),1.2)比使用索引要快,但我没有计时。
    【解决方案2】:

    如果您想保持 x 轴变量不变(即元素的数量应该保持不变),最好将异常值转换为 NaN

    y( abs(y)>1.2 ) = NaN;
    

    如果要删除元素,可以使用[],而不是NaN

    y( abs(y)>1.2 ) = [];
    

    此条件abs(y)&gt;1.2 测试大于1.2 的绝对(正)值,如果您的阈值不同,那么您可以单独测试它们

    y( y > 1.2 | y < -1.2 ) = NaN;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多