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

问题描述 投票:1回答:1

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

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

有几个问题需要注意:我不能为所有主题创建一个向量。这将是不准确的,因为心脏测量对于每个个体是可变的。

因此,简而言之我需要为每个参与者移动时间向量,使其从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中做...

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

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

也许这可能有点工作,除非如果我有一个主题开始,比如说,11:55:05:00

谢谢大家的帮助。

Gluce

matlab date time
1个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.