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

...问题是,我不希望它只是跳跃点。很高兴看到值从一个到下一个平滑波动(如贝塞尔曲线)。这可能吗?我不知道我是否需要一个外部库,但如果有必要我愿意走那条路。以任何数据分辨率导出结果(平滑)图会很好。

4

1 回答 1

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);
于 2013-01-20T22:12:52.783 回答