0

我认为该表是制表符分隔的,因此 TSV 但我的以下代码永远不会完成,因为该行ecg = tdfread(filename, '\t');建议我分隔符\t不正确,因为文件大小约为 350 MB,应该没问题。

function ecg = getECG(id, channel, timeStartIndex, timeEndIndex)
 filename = sprintf('/home/masi/Documents/NSRDB/%d.txt', id);
 ecg = tdfread(filename,'\t'); 
 ecg = ecg(timeStartIndex:timeEndIndex, channel);
end

数据样本 1 关于 AD 单元的示例

masi@masiAsus:~/Documents$ head NSRDB/16265.txt 
              0     -33     -65
              1     -31     -65
              2     -39     -61
              3     -41     -61
              4     -37     -59
              5     -31     -53
              6     -27     -47
              7     -19     -37
              8     -15     -27
              9     -13     -19

例如,在通道 1(第 1 列)、startTime 1 和 endTime 4 的情况下调用。getECG(16265, 1, 1, 4)这可以通过以下 Shai 的命令解决,但它会因第二个数据样本而失败

ecg = dlmread(filename, ' ', 2, 0); % read table with empty columns

第二个带有物理单元的数据集,因为 AD 单元在数据处理中失败

NSRDB/16265.txt

   Elapsed time    ECG1    ECG2
      (seconds)    (mV)    (mV)
        300.000  -0.005  -0.065
        300.008  -0.015  -0.055
        300.016   0.005  -0.055
        300.023   0.005  -0.075

图 1 我目前的方法ecg = dlmread(filename, ' ', 2, 0);导致 13 列

在此处输入图像描述

测试 Shai对第二个数据集的建议

% https://stackoverflow.com/a/40516998/54964
ecg = dlmread(filename, ' ', 2, 0); % read table with empty columns
ecg = ecg(:,find(any(ecg,1)));  % keep only non-empty columns

图 2 现在有六列,其中第二个数据列失败,但第一个空列仍然存在

在此处输入图像描述

数据:WFDB MIT-BIH NSRDB

4

1 回答 1

1

考虑使用dlmread代替tdfread:一些'\t'字符可能是空格......

您可以丢弃空列作为第二步

ecg = dlmread(filename, ' ', 2, 0); % read table with empty columns
ecg = ecg(:,find(any(ecg,1)));  % keep only non-empty columns
于 2016-11-09T22:22:12.267 回答