如何使用曲线绘制稀疏数据流

时间:2013-01-04 03:14:21

标签: plot gnuplot octave

编辑:我想根据以下代码制作一个情节:

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

......问题是,我不希望它只是跳跃点。很高兴看到这些值从一个到另一个平滑起伏(如bezier曲线)。这可能吗? 我不知道我是否需要一个外部库,但如果有必要,我愿意去那条路。在任何数据分辨率下导出生成的(平滑)绘图都会很不错。

1 个答案:

答案 0 :(得分:1)

如果我正确地阅读此内容,您只想对此信息进行缩减采样,这在八度音阶中是一项非常简单,高效的任务。

将xi,yi作为原始数据集,并且您希望进行大约10倍的下采样:

生成一个新的x向量xp(假设xi是单调增加的):

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);