Diff of /rdecg.m [000000] .. [eaa663]

Switch to side-by-side view

--- a
+++ b/rdecg.m
@@ -0,0 +1,109 @@
+function [ M,ANNOTD,ATRTIMED ] = rdecg( PATH, filename,samples2read )
+% 读取ECG信号,返回信号向量,专家标记,专家标记位置
+% 
+
+HEADERFILE= strcat(filename,'.hea');      
+ATRFILE= strcat(filename,'.atr');         
+DATAFILE=strcat(filename,'.dat');         
+SAMPLES2READ=samples2read;          
+                          
+
+
+fprintf(1,'\\n$> WORKING ON %s ...\n', HEADERFILE); 
+signalh= fullfile(PATH, HEADERFILE);    
+fid1=fopen(signalh,'r');    
+z= fgetl(fid1);             
+A= sscanf(z, '%*s %d %d %d',[1,3]); 
+nosig= A(1);    
+sfreq=A(2);     
+clear A;        
+for k=1:nosig         
+    z= fgetl(fid1);
+    A= sscanf(z, '%*s %d %d %d %d %d',[1,5]);
+    dformat(k)= A(1);           
+    gain(k)= A(2);              
+    bitres(k)= A(3);           
+    zerovalue(k)= A(4);         
+    firstvalue(k)= A(5);        
+end
+fclose(fid1);
+clear A;
+
+if dformat~= [212,212], error('this script does not apply binary formats different to 212.'); end
+signald= fullfile(PATH, DATAFILE);           
+fid2=fopen(signald,'r');
+A= fread(fid2, [3, SAMPLES2READ], 'uint8')';  
+fclose(fid2);
+M2H= bitshift(A(:,2), -4);        
+M1H= bitand(A(:,2), 15);          
+PRL=bitshift(bitand(A(:,2),8),9);     
+PRR=bitshift(bitand(A(:,2),128),5);   
+M( : , 1)= bitshift(M1H,8)+ A(:,1)-PRL;
+M( : , 2)= bitshift(M2H,8)+ A(:,3)-PRR;
+if M(1,:) ~= firstvalue, error('inconsistency in the first bit values'); end
+switch nosig
+case 2
+    M( : , 1)= (M( : , 1)- zerovalue(1))/gain(1);
+    M( : , 2)= (M( : , 2)- zerovalue(2))/gain(2);
+    TIME=(0:(SAMPLES2READ-1))/sfreq;
+case 1
+    M( : , 1)= (M( : , 1)- zerovalue(1));
+    M( : , 2)= (M( : , 2)- zerovalue(1));
+    M=M';
+    M(1)=[];
+    sM=size(M);
+    sM=sM(2)+1;
+    M(sM)=0;
+    M=M';
+    M=M/gain(1);
+    TIME=(0:2*(SAMPLES2READ)-1)/sfreq;
+otherwise  
+    disp('Sorting algorithm for more than 2 signals not programmed yet!');
+end
+clear A M1H M2H PRR PRL;
+fprintf(1,'\\n$> LOADING DATA FINISHED \n');
+atrd= fullfile(PATH, ATRFILE);      
+fid3=fopen(atrd,'r');
+A= fread(fid3, [2, inf], 'uint8')';
+fclose(fid3);
+ATRTIME=[];
+ANNOT=[];
+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))=[];       
+ATRTIME(length(ATRTIME))=[];  
+clear A;
+ATRTIME= (cumsum(ATRTIME))/sfreq;
+ind= find(ATRTIME <= TIME(end));
+ATRTIMED= ATRTIME(ind);
+ANNOT=round(ANNOT);
+ANNOTD= ANNOT(ind);
+
+% -------------------------------------------------------------------------
+fprintf(1,'\\n$> ALL FINISHED \n');
+end
+