选择时间序列的一部分

LGT*_*der 3 matlab time-series

在下面的代码中,我创建了一个简单的数据系列,一个时间向量,然后是一个时间序列.绘制它们都没有问题.(它们在同一个图上并不重要.)我无法弄清楚的是如何将一部分时间序列子集化,如上一个失败的命令所示:

>> timeseriesTest
Error using timeseries/plot (line 27)
The plot method can only be used for a single timeseries object

Error in timeseriesTest (line 14)
plot(ts(25:end));

>> 
Run Code Online (Sandbox Code Playgroud)

如何提取时间序列中的最后25个(在本例中)值?重要提示:虽然在下面的代码中不是这样,但我的时间序列有每日或每周时间戳,我确实需要保留它.即:

NewData = ts.data 
Run Code Online (Sandbox Code Playgroud)

...这不是一个好的答案,除非它是获得新的提取时间序列的唯一方法.

t=[1:50];
d=sin(2*pi*t/20);

ts = timeseries(2*d, t);

%plot data and timeseries
plot(d);
hold on;
plot(ts);

figure();
plot(d(25:end));
hold on;
plot(ts(25:end));
Run Code Online (Sandbox Code Playgroud)

ray*_*ica 7

如果查看TimeSeries对象的属性,在尝试绘制代码之前运行代码时,我们会看到:

>> ts

  timeseries

  Common Properties:
            Name: 'unnamed'
            Time: [50x1 double]
        TimeInfo: [1x1 tsdata.timemetadata]
            Data: [1x1x50 double]
        DataInfo: [1x1 tsdata.datametadata]
Run Code Online (Sandbox Code Playgroud)

您会看到Data时间序列对象中有一个字段,以及Time表示每个点实例的时间值的字段.如果要单独访问字段并绘制最后25个元素,请执行以下操作:

plot(ts.Time(end-24:end), squeeze(ts.Data(end-24:end)));
Run Code Online (Sandbox Code Playgroud)

ts是您的TimeSeries对象,如果您想访问此对象中的字段,请使用点运算符(....并且您已经想到了这一点).使用点运算符后,只需使用其相应的名称即可访问所需的字段.因此,如果您需要时间值,请使用Time,如果您需要数据,请使用Data.现在,我使用的可能看起来很奇怪squeeze. squeeze删除单身尺寸.如果你能看到,Data是一个1 x 1 x 50数组,它应该只是一个50 x 1数组.目的squeeze是删除多余的维度以获取我们的实际数据.

请注意,如果您的时间序列中只有一个信号,则似乎只会发生这种情况.我们应该有多个信号......比方说,如果我们想要三个长度为50的信号,我们会创建一个50 x 3矩阵,其中每代表一个信号.它看起来像这样:

>> t = 1:50;
>> A = rand(50,3);
>> ts = timeseries(A,t)

  timeseries

  Common Properties:
            Name: 'unnamed'
            Time: [50x1 double]
        TimeInfo: [1x1 tsdata.timemetadata]
            Data: [50x3 double]
        DataInfo: [1x1 tsdata.datametadata]
Run Code Online (Sandbox Code Playgroud)

rand生成一个随机矩阵或任意大小的矢量值[0-1].你会看到我们现在的信号50 x 3.如果你想绘制它,plot每个时间帧识别多个信号....所以你可以这样做:

plot(ts.Time, ts.Data);
Run Code Online (Sandbox Code Playgroud)

这应生成三条迹线的图,每条迹线由不同的颜色描绘,并在指定的相同时间范围内ts.Time.

同样,如果您想为每个信号绘制最后25个点,只需执行以下操作:

plot(ts.Time(end-24:end), ts.Data(end-24:end,:));
Run Code Online (Sandbox Code Playgroud)

此代码将访问您的每一列的最后25行(即每个信号)Data并将它们全部绘制出来.