2013-11-25 69 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! 
相關問題