Database 阅读mit bih的ecg注释

Database 阅读mit bih的ecg注释,database,matlab,signal-processing,biometrics,Database,Matlab,Signal Processing,Biometrics,我正在进行ECG信号处理,因为我需要从MATLAB收集所有数据作为测试信号,我发现很难读取扩展名为.atr的注释文件 我正在使用 如何读取注释文件 我试过这个 [ann,type,subtype,chan,num,comments] = rdann('102','atr'); 但是我不确定我得到的ann的长度是否正确。基于给定的实现 下面是读取注释文件的代码片段 PATH= 'PATH TO DIRECTORY'; % path, where data are saved ATRFILE=

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

我正在使用 如何读取注释文件

我试过这个

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

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

基于给定的实现

下面是读取注释文件的代码片段

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