在MATLAB上更改时间信号的限制

时间:2018-07-29 16:26:50

标签: matlab signals

我是初学者,有一个简单的问题。我在y轴上有信号,在x轴上有时间信号。我需要更改时间信号的边界。它在0到18秒之间,但我想在5到10之间改变。我已经使用了“ xlim”,它适用于绘图,但实际上我想创建一个新的时间信号。

有什么主意吗?谢谢!

2 个答案:

答案 0 :(得分:1)

由于您没有发布代码,因此我需要做一些假设。我假设您已将数据存储在行向量xy中,并且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);

示例

示例展示了不同方法之间的差异,为清晰起见在样品上标有附加偏移量和标记。

enter image description here

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

希望我能帮上忙。

干杯, 西蒙