2013-01-04 149 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