[英]Change limits of a time signal at matlab
我是一个初学者,有一个简单的问题。 我在y轴上有信号,在x轴上有时间信号。 我需要更改时间信号的边界。 它在0到18秒之间,但是我想在5到10之间改变。我已经使用了“ xlim”,它适用于绘图,但实际上我想创建一个新的时间信号。
任何想法? 谢谢!
由于您没有发布代码,因此我需要做一些假设。 我假设您将数据存储在行向量x
和y
,并且x
是均匀且单调递增的。
1.使用逻辑索引构造一个截断的信号。
index = x >= 5 & x <= 10;
x_new = x(index);
y_new = y(index);
plot(x_new, y_new);
上面只是数据的一个子集,如果x
不包含5和10,则该图将被截断。 如果您要处理时间序列数据, 这可能是最合理的方法,因为它不会更改采样率 。
2.使用插值在5到10之间重新采样信号。
num_samples = 100;
x_new = linspace(5, 10, num_samples);
y_new = interp1(x, y, x_new);
plot(x_new, y_new);
由于未保证包含原始样本,因此这可能与原始图不完全匹配。 但是,它将恰好覆盖所需的域。
3.如果您不在乎x
是统一的,而是想创建一个与原始图完全匹配的图,则可以将x
的边界附加到方法1的子集中,并使用interp1采样y
。
x_min = 5; x_max = 10;
index = x > x_min & x < x_max;
x_new = [x_min, x(index), x_max];
y_new = interp1(x, y, x_new);
plot(x_new, y_new);
例
演示不同方法之间差异的示例,为清晰起见在样品上附加了偏移量和标记。
如果要从向量y
的后面删除元素n
并将结果存储在y_cut
,则应该能够执行以下操作:
y_cut = y(1:end-n);
重要的是要知道您以哪种形式存储时间信号。 如果您每秒拥有一个值,则解决方案将是:
y_cut = y(5:10);
但是我假设您以给定的采样率fs
将y值存储为样本,然后一秒等于fs(例如CD音频文件为44100,每秒产生44100个样本),解决方案是:
y_cut = y(5*fs:10*fs);
希望我能帮上忙。
干杯,西蒙
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.