编辑:我想根据以下代码制作一个情节:
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曲线)。这可能吗? 我不知道我是否需要一个外部库,但如果有必要,我愿意去那条路。在任何数据分辨率下导出生成的(平滑)绘图都会很不错。
答案 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);