2013-11-15 69 views
0

我有一個問題,用實驗數據過濾數組 - 數據是一個長數組(雙)。這個數組的索引只是時間(秒),值可能是負值或正值。問題是,有時候實驗數據是錯誤的(( - 這是由於我們的設備中的錯誤導致了 這個錯誤值與其他數組值非常不同,例如 前100秒的值等於+75 +(小德爾塔值)或 - 40 - (小德爾塔值),但然後,在3秒鐘的值是+270(這是我上面說過的一個錯誤)如何從數組中清除這個值?平均值可能不是最好的方法因爲如果我從數組中獲取每個值作爲總和,這個錯誤數據會破壞整個統計量(由於它的「重量」很大)。我已經繪製了這個數據 - 圖片很清楚,但是..如果這個錯誤是由像白噪聲那麼我可以實現例如卡爾曼濾波器,但首先沒有計算值的函數,其次這個誤差不是白噪聲。過期數據過濾數組

回答

1

假設我們大多數時間都有正確的值。如果信號是永久的(小的三角洲),我們可以使用中位數來過濾數據:

delta = 1e-3; 
a=[75 * ones(1,20) + rand(1,20) * delta, 270 * ones(1,3) + rand(1,3) * delta]; 
m = median(a); 
filtered_a = a(m - 2 * delta < a & a < m + 2 * delta); 
+0

謝謝你的回答,這個解決方案對於預定義的數據是完美的。但我不知道下一次會出現什麼值。它可能是270,但如果下一個實驗結果將有正確的(常見)值270 + - 德爾塔和壞值將是2 + - 德爾塔或1000 + - 德爾塔這種方法將無法正常工作( – curiousity

+0

我重寫了上述答案。 – ilalex

+0

你能否回答一個問題 - 如果我在每個時間段內只有2個數組的值 - 現在和下一個我可以使用中值在filtered_a上獲得m值嗎? – curiousity