我有许多科目的心电图数据。对于每个主题,我可以导出具有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
答案 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