这是一个Matlab问题。
我有一组数字。其中一些对应于实际信号,另一些对应于噪声。我知道
- 与实际信号相对应的数字都是负数
- 噪声的幅度都比任何信号值的幅度小得多
如何对数组进行排序,以便
- 与实际信号相对应的值都在噪声值之前
- 与实际信号相对应的值的顺序由它们在给定阵列中的原始顺序来确定
例如
input = [-0.0002, -0.00058, -0.28, -0.0008, -0.25,-0.0006,-0.00004,-0.26]
output = [-0.28, -0.25, -0.26, -0.0002, -0.00058,-0.0008, -0.0006,-0.00004]
生成指示局部最小值位置的逻辑数组ind
:
d = diff(y);
ind = [1, d(1 : end) < 0] & [d(1 : end) > 0, 1];
通过首先提取局部最小值,然后提取其他值(ind
的逻辑否定),并将它们放在一个数组中来构造输出:
output = [y(ind), y(~ind)]
这在逻辑上非常简单。如何声明所有数据必须少于某些非法占用。
试试这个:
input = [-0.0002, -0.00058, -0.28, -0.0008, -0.25,-0.0006,-0.00004,-0.26]
output = [-0.28, -0.25, -0.26, -0.0002, -0.00058,-0.0008, -0.0006,-0.00004]
is_data=input<-0.001;
res = [input(is_data) input(~is_data)]
res - output % = 0!