繁体   English   中英

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

[英]Change limits of a time signal at matlab

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

任何想法? 谢谢!

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM