2013-01-04 148 views
0
稀疏數據流

編輯:我想提出基於以下代碼一個情節:如何繪製與曲線

function one(varargin) 
    thresh = 200; 
    setenv GNUTERM 'x11'; 
    x = [0.05:0.05:10]; 
    x = transpose(x); 
    y = rand(200, 1); 
    y(y <= 0.9) = 0.9; 
    plot(x, y); 
    xlabel('time'); 
    ylabel('values above thresh'); 
end 

...問題是,我不希望它只是跳躍點。很高興看到值從一個到另一個(如貝塞爾曲線)平滑起伏。這可能嗎? 我不知道我是否需要一個外部圖書館,但我願意在必要時走這條路。在任何數據分辨率下導出結果(平滑)圖將是一件好事。

回答

1

如果我正確閱讀這個內容,您只是想對這些信息進行縮減採樣,這是一個相當簡單,高效的八度音任務。

鑑於喜,義爲你的原始數據集,以及你想要做大約10倍下采樣:

生成一個新的x向量,XP(假定xi是montotonic增加):

xp = linspace(xi(1),xi(end),round(length(xi)/10)); 

然後使用樣條方法插值:

yp = interp1(xi,yi,xp,'spline'); 

但是,這隻能平滑插值數據。

我沒有真正遵循你的問題的一部分 - 你如何定義基本部分?

另一種方法是在下采樣之前過濾數據,例如使用Savitsky-Golay濾波器。這裏有趣的是有幾個參數可以使用。默認設置:

yp = sgolayfilt (yi); 

此過濾器使用順序爲p和長度爲n的平滑多項式來處理數據。如果你指定p和n,你可以玩什麼可能最好:

yp = sgolayfilt (yi, p, n); 
+0

這是偉大的,非常有趣!不幸的是,我正在尋找的是一種在點之間繪製平滑曲線的方式,以便繪圖顯示更漂亮。這不是我想要更改數據集的地方。讓我知道我是否應該更新我的問題。 – jml

+0

我已經修改了我的問題,希望它現在更清晰,包括我希望平滑繪製的數據流類型的一個非常直接的示例。謝謝! – jml