我是初学者,有一个简单的问题。我在y轴上有信号,在x轴上有时间信号。我需要更改时间信号的边界。它在0到18秒之间,但我想在5到10之间改变。我已经使用了“ xlim”,它适用于绘图,但实际上我想创建一个新的时间信号。
有什么主意吗?谢谢!
答案 0 :(得分:1)
由于您没有发布代码,因此我需要做一些假设。我假设您已将数据存储在行向量x
和y
中,并且x
是均匀且单调递增的。
1。。使用logical indexing构造一个截断的信号。
index = x >= 5 & x <= 10;
x_new = x(index);
y_new = y(index);
plot(x_new, y_new);
以上仅获取数据的子集,如果x
不包含5和10,则该图将被截断。如果要处理时间序列数据这可能是最合理的方法,因为它不会更改采样率。
2。使用interpolation在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);
示例
示例展示了不同方法之间的差异,为清晰起见在样品上标有附加偏移量和标记。
答案 1 :(得分:0)
如果您想从向量n
的后面删除元素y
并将结果存储在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);
希望我能帮上忙。
干杯, 西蒙