修改时间向量

时间:2012-06-17 19:39:58

标签: matlab datetime interpolation

我有一个时间向量(格式为h,min,sec,msec)。

TIME_=
[120844.950000000
120853.870000000
120854.120000000
120854.370000000
120854.620000000
120854.860000000
120855.100000000
120859.980000000
120900.220000000
120900.490000000

.
.
.
121024.420000000
];

现在我想用

统一
TIME_NEW=[STARTTIME: INCREMENT:ENDTIME ]; % INCREMENT=0.2sec;

我发现matlab setuniformtime中有可用的功能。

我希望有喜欢

TIME_NEW= setuniformtime(TIME_(:,1),'StartTime',TIME_(1,1),'EndTime',TIME_(end,1),'Interval',0.2);

但我没有这个matlab版本。有什么帮助吗?

我的时间格式有问题

ith element

TIME_NEW = [120859.980000000,120859.98000000 + 0.2,120860.18]

现在应该是120860.18-->120900.18.

2 个答案:

答案 0 :(得分:1)

听起来问题的根源在于,对于时间值,您使用的数值不符合正常的基数为10(或基本任意)规则。如果你想继续使用这种格式,你应该做的是什么 1)以秒为单位转换为时间(或仅在常规编号系统中转换为其他单位)
2)在几秒钟内(或其他单位)创建一个统一的矢量 3)转换回你的其他格式。

要将格式转换为秒,您可以执行以下操作:

#% format = hhmmss.msec
TIME_     = 120859.98 #% and others if you want
HOURS = floor(TIME_/10000);
MINS  = floor(mod(TIME_,10000) / 100 );
SECS  = mod(TIME_,100); #% keep the milliseconds part too
TIME_IN_S = HOURS*3600 + MINS*60 + SECS #% convert hours/mins/secs to seconds

你已经知道如何做间距了。剩下的就是转换回原来的格式。

HOURS_PLACE = floor(TIME_IN_S/3600) * 10000;
MINS_PLACE  = floor(mod(TIME_IN_S,3600),60) * 100;
SECS_PLACE  = mod(TIME_IN_S,60);
UNIFORM_TIME = HOURS_PLACE + MINS_PLACE + SECS_PLACE;

这应该消除秒数增加大于60等的“问题”

答案 1 :(得分:0)

你已经或多或少地写了答案:

time_new = [time(1):0.2:time(end)];

当然,time(end)的值很可能不会出现在输出向量中。