2013-11-25 30 views
0

这是一个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] 
+0

我不明白为什么输出的顺序。 – Emily

+0

使用虚拟值创建的输出。我对微不足道的价值感兴趣。在上面的例子中,只有三个重要的值。 – User1551892

+0

@ User1551892:我认为你不应该使用“显着”这个词,因为它在统计学上有技术含义,而你的问题不是关于统计。 –

回答

0

生成逻辑阵列ind指示局部最小值的位置:

d = diff(y); 
ind = [1, d(1 : end) < 0] & [d(1 : end) > 0, 1]; 

由第一提取是局部极小值,则构成输出其他(逻辑否定ind),并将它们放在一个阵列中:

output = [y(ind), y(~ind)] 
+0

为什么你采取y的差异。其实y是diff(x)。 – User1551892

+0

好吧,你叫变量'y',所以我用'y'。我拿'diff'是因为对于离散数据,局部最小值被定义为前一个差值为负的地方,后面的差值为正值。你想要'y'的局部最小值,对吗?如果没有,你必须编辑你的问题,以更好地解释你想要的。我们无法读懂你的想法,你知道吗? –

0

它在逻辑上非常简单。你如何陈述它的所有数据必须小于某个阈值。

试试这个:

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! 
相关问题