在Matlab中生成时间戳序列



all我想知道是否有一种方法可以在Matlab中生成时间戳序列?

我假设会有一个开始时间,一个结束时间和一个频率。

使用1:1:100(1到100乘1)生成正态序列很简单

如何使用类似的方法生成时间戳序列?

例如,我将开始时间指定为上午9点,一直到上午10点,我希望生成类似9:00:00:000、9:00:00:500、9:00:01:000等的内容。。。。

间隔500毫秒

或者更好的是,还包括日期。

使用datenum,您可能遇到的唯一问题是,如果您跨越了很长一段时间,您可能会与间隔秒/天或夏季储蓄时间发生冲突(但我认为datestr中没有实现这一点,正如您在这里读到的那样)。

玩datenum、now和datestr

starttime = datenum(2000, 1, 1, 9, 0, 0);
dt = 0.500/86400; % datenum is a serial time format with 1 = 1 day = 86400 sec
N = 5;
timevec = starttime + dt*(0:(N-1));
>> datestr(timevec, 'HH:MM:SS.FFF')
ans =
09:00:00.000
09:00:00.500
09:00:01.000
09:00:01.500
09:00:02.000

从2015a开始,您可以使用milliseconds函数来构建到时间点之间的时间步长向量:

start = datetime('2017/1/3 9:00:00:000','InputFormat','yyyy/MM/dd H:mm:ss:SSS');
step = milliseconds(500);
fin = datetime('2017/1/3 10:00:00:000','InputFormat','yyyy/MM/dd H:mm:ss:SSS');
time_vec = start:step:fin;

如果您没有明确定义日期,它将选择当前日期。

时间和数据也可以有一个结构,可以使用timeseries类(使用上面的start):

data = rand(7201,1);
ts = timeseries(data,'Name','MyTs');
ts.TimeInfo.StartDate = start;
ts.TimeInfo.Units = 'milliseconds';
ts = setuniformtime(ts,'Interval',500);

这将创建一个时间序列对象:

>> ts
  timeseries
  Common Properties:
            Name: 'MyTs'
            Time: [7201x1 double]
        TimeInfo: [1x1 tsdata.timemetadata]
            Data: [7201x1 double]
        DataInfo: [1x1 tsdata.datametadata]

带有以下时间信息:

>> ts.TimeInfo
  tsdata.timemetadata
  Package: tsdata
  Uniform Time:
    Length       7201
    Increment    500 milliseconds
  Time Range:
    Start        03-Jan-2017 09:00:00
    End          03-Jan-2017 10:00:00
  Common Properties:
          Units: 'milliseconds'
         Format: ''
      StartDate: '03-Jan-2017 09:00:00'

这取决于您的需求,但您可以考虑使用datetime()和一个或多个days()、hours()、minutes()和seconds()等函数的组合。

让我们写一些代码:

start=datetime(1985,07,13,9,0,0);  % your start date
steps=seconds(0:0.5:100);          % your vector with steps
timeseries=start+steps;            % your time series

您还可以设置显示满足您需要的数据的格式,为此请查看datetime属性手册。

相关内容

  • 没有找到相关文章

最新更新