我正在研究ECG信号处理因为我需要从MATLAB收集所有数据以将其用作测试信号,我发现很难读取扩展名为.atr的注释文件。
我正在使用MIT Arrhythmia database. 如何阅读注释文件?
我试过这个
[ann,type,subtype,chan,num,comments] = rdann('102','atr');
但我不确定我得到的ann
的长度是否正确。
答案 0 :(得分:1)
基于给定here
的实施以下是读取注释文件的代码段。
PATH= 'PATH TO DIRECTORY'; % path, where data are saved
ATRFILE= '100.atr'; % attributes-file in binary format
atrd= fullfile(PATH, ATRFILE); % attribute file with annotation data
fid3=fopen(atrd,'r');
A= fread(fid3, [2, inf], 'uint8')';
sfreq=A(2);
fclose(fid3);
SAMPLES2READ=1;
ATRTIME=[];
ANNOT=[];
TIME=(0:(SAMPLES2READ-1))/sfreq;
sa=size(A);
saa=sa(1);
i=1;
while i<=saa
annoth=bitshift(A(i,2),-2);
if annoth==59
ANNOT=[ANNOT;bitshift(A(i+3,2),-2)];
ATRTIME=[ATRTIME;A(i+2,1)+bitshift(A(i+2,2),8)+...
bitshift(A(i+1,1),16)+bitshift(A(i+1,2),24)];
i=i+3;
elseif annoth==60
% nothing to do!
elseif annoth==61
% nothing to do!
elseif annoth==62
% nothing to do!
elseif annoth==63
hilfe=bitshift(bitand(A(i,2),3),8)+A(i,1);
hilfe=hilfe+mod(hilfe,2);
i=i+hilfe/2;
else
ATRTIME=[ATRTIME;bitshift(bitand(A(i,2),3),8)+A(i,1)];
ANNOT=[ANNOT;bitshift(A(i,2),-2)];
end;
i=i+1;
end;
ANNOT(length(ANNOT))=[]; % last line = EOF (=0)
ATRTIME(length(ATRTIME))=[]; % last line = EOF
clear A;
ATRTIME= (cumsum(ATRTIME))/sfreq;
ind= find(ATRTIME <= TIME(end));
ATRTIMED= ATRTIME(ind);
ANNOT=round(ANNOT);
ANNOT是一个包含所有注释的数组