【问题标题】:How to sort signal data, dropping noise?如何对信号数据进行排序,去除噪声?
【发布时间】:2013-11-25 14:49:35
【问题描述】:

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

【问题讨论】:

  • 我不明白为什么输出是这个顺序。
  • 使用虚拟值创建的输出。我对微不足道的价值感兴趣。在上面的示例中,只有三个有效值。
  • @User1551892:我认为你不应该使用“显着”这个词,因为它在统计中具有技术意义,而你的问题与统计无关。

标签: matlab


【解决方案1】:

生成一个逻辑数组ind,表示局部最小值的位置:

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

首先提取局部最小值,然后提取其他值(ind 的逻辑否定)来构造输出,并将它们放在一个数组中:

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

【讨论】:

  • 为什么你要对 y 进行 diff。实际上 y 是 diff(x)。
  • 嗯,你称变量为y,所以我使用了y。我采用diff,因为对于离散数据,局部最小值被定义为前面差为负而后面差为正的地方。你想要y 的局部最小值,对吧?如果没有,您必须编辑您的问题以更好地解释您想要什么。我们无法读懂你的想法,你知道吗?
【解决方案2】:

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

试试这个:

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!

【讨论】:

    猜你喜欢
    • 2011-10-15
    • 1970-01-01
    • 2018-07-18
    • 2016-06-05
    • 2012-11-14
    • 1970-01-01
    • 2022-10-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多