如何在Matlab中过滤某个阈值内的数据?

问题描述 投票:0回答:2

我希望删除下图中红线上方和下方的数据,这意味着删除1.2以上和-1.2以下的数据。Figure

我使用以下功能:

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

但是发生错误:

使用isoutlier错误> parseinput(第236行)“百分位数”值必须是2元素的排序数字向量,其条目介于0到100之间。

还有其他可以用来解决问题的功能吗?

matlab filter signals outliers threshold
2个回答
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;

0
投票

如果要保持x轴变量不变(即元素数应保持不变),将离群值转换为NaN是一个好主意。

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

如果要删除元素,则可以使用[]代替NaN

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

此条件abs(y)>1.2测试的绝对(正)值大于1.2,如果阈值不同,则可以分别测试它们

y( y > 1.2 | y < -1.2 ) = NaN;
© www.soinside.com 2019 - 2024. All rights reserved.