2016-03-30 27 views
-3

我正在進行心電信號處理由於我需要從MATLAB收集所有數據以將其用作測試信號,因此我發現難以讀取擴展名爲.atr的註釋文件。我正在使用MIT Arrhythmia database. 如何讀取註釋文件?read ecg annotation mit bih

我想這

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

,但我不知道該ann我得到的長度是正確的。

回答

0

基於給定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是與所有的註釋

陣列