阅读ecg annotation mit bih

时间:2016-03-30 18:30:01

标签: database matlab signal-processing biometrics

我正在研究ECG信号处理因为我需要从MATLAB收集所有数据以将其用作测试信号,我发现很难读取扩展名为.atr的注释文件。

我正在使用MIT Arrhythmia database. 如何阅读注释文件?

我试过这个

[ann,type,subtype,chan,num,comments] = rdann('102','atr');

但我不确定我得到的ann的长度是否正确。

1 个答案:

答案 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是一个包含所有注释的数组