移位时间序列从零开始H:M:S:MS(可能在Matlab中)

时间:2018-03-27 18:50:03

标签: matlab date time

我有许多科目的心电图数据。对于每个主题,我可以导出具有RR间隔,心率和其他度量的excel文件。问题是我在录制时有一个时间戳(在本例中为11:22:3:00)。 我需要将日期与其他科目进行比较,我想在Matlab中自动执行该程序。

我需要灵活地比较,例如,条件1中的前3分钟与条件2中的sbj,或条件1和2的分钟4到8,依此类推。要做到这一点,我认为最好的方法是为每个主题移动时间向量,使其从0开始。

有几个问题需要注意:我不能为所有科目创建一个向量。这可能是不准确的,因为每个人的心脏测量值都是可变的。

所以, IN SHORT 我需要为每个参与者移动时间向量,使其从0开始,并且与原始参与者完全一样。所以,在这个例子中:

  H: M: S: MS    RR         HR
 11:22:03:000   0.809   74.1
 11:22:03:092   0.803   74.7
 11:22:03:895   0.768   78.1
 11:22:04:663   0.732   81.9
 11:22:05:395   0.715   83.9
 11:22:06:110   0.693   86.5
 11:22:06:803   0.705   85.1
 11:22:07:508   0.706   84.9
 11:22:08:214   0.749   80.1
 11:22:08:963   0.762   78.7
 11:22:09:725   0.766   78.3

会变成:

00:00:00:0000
00:00:00:092
00:00:00:895
00:00:01:663

依此类推......

我想在Matlab中做到这一点......

P.S。 我正在研究在4个不同变量中提取信息的想法。 然后,我可以从第一个单元格中减去每个单元格的值。 例如:

 11-11 = 0; 22-22=0; 03-03=0; ms: keep the same value

也许这可以起作用,但是如果我有一个主题开始,比如说,11:55:05:00

谢谢大家的帮助。

Gluce

1 个答案:

答案 0 :(得分:1)

基本时间戳标准化只是从其余时间中减去最小值(或者首先,假设它们是正确排序的)。

使用MATLAB的datetime对象,这只是减法,产生duration对象:

ts = ["11:22:03:000", "11:22:03:092", "11:22:03:895", "11:22:04:663"];

% Convert to datetime & normalize
t = datetime(ts, 'InputFormat', 'HH:mm:ss:SSS');
t.Format = 'HH:mm:ss:SSS';
nt = t - t(1);

% Reformat & display
nt.Format = 'hh:mm:ss.SSS';

返回:

>> nt

nt = 

  1×4 duration array

   00:00:00.000   00:00:00.092   00:00:00.895   00:00:01.663

或者,您可以规范化datetime数组本身:

ts = ["11:22:03:000", "11:22:03:092", "11:22:03:895", "11:22:04:663"];
t = datetime(ts, 'InputFormat', 'HH:mm:ss:SSS');
t.Format = 'HH:mm:ss:SSS';

[h, m, s] = hms(t);
[t.Hour, t.Minute, t.Second] = deal(h - h(1), m - m(1), s - s(1));

返回相同的内容:

>> t

t = 

  1×4 datetime array

   00:00:00:000   00:00:00:092   00:00:00:895   00:00:01:663