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

Switch to unified view

a b/rdecg.m
1
function [ M,ANNOTD,ATRTIMED ] = rdecg( PATH, filename,samples2read )
2
% 读取ECG信号,返回信号向量,专家标记,专家标记位置
3
% 
4
5
HEADERFILE= strcat(filename,'.hea');      
6
ATRFILE= strcat(filename,'.atr');         
7
DATAFILE=strcat(filename,'.dat');         
8
SAMPLES2READ=samples2read;          
9
                          
10
11
12
fprintf(1,'\\n$> WORKING ON %s ...\n', HEADERFILE); 
13
signalh= fullfile(PATH, HEADERFILE);    
14
fid1=fopen(signalh,'r');    
15
z= fgetl(fid1);             
16
A= sscanf(z, '%*s %d %d %d',[1,3]); 
17
nosig= A(1);    
18
sfreq=A(2);     
19
clear A;        
20
for k=1:nosig         
21
    z= fgetl(fid1);
22
    A= sscanf(z, '%*s %d %d %d %d %d',[1,5]);
23
    dformat(k)= A(1);           
24
    gain(k)= A(2);              
25
    bitres(k)= A(3);           
26
    zerovalue(k)= A(4);         
27
    firstvalue(k)= A(5);        
28
end
29
fclose(fid1);
30
clear A;
31
32
if dformat~= [212,212], error('this script does not apply binary formats different to 212.'); end
33
signald= fullfile(PATH, DATAFILE);           
34
fid2=fopen(signald,'r');
35
A= fread(fid2, [3, SAMPLES2READ], 'uint8')';  
36
fclose(fid2);
37
M2H= bitshift(A(:,2), -4);        
38
M1H= bitand(A(:,2), 15);          
39
PRL=bitshift(bitand(A(:,2),8),9);     
40
PRR=bitshift(bitand(A(:,2),128),5);   
41
M( : , 1)= bitshift(M1H,8)+ A(:,1)-PRL;
42
M( : , 2)= bitshift(M2H,8)+ A(:,3)-PRR;
43
if M(1,:) ~= firstvalue, error('inconsistency in the first bit values'); end
44
switch nosig
45
case 2
46
    M( : , 1)= (M( : , 1)- zerovalue(1))/gain(1);
47
    M( : , 2)= (M( : , 2)- zerovalue(2))/gain(2);
48
    TIME=(0:(SAMPLES2READ-1))/sfreq;
49
case 1
50
    M( : , 1)= (M( : , 1)- zerovalue(1));
51
    M( : , 2)= (M( : , 2)- zerovalue(1));
52
    M=M';
53
    M(1)=[];
54
    sM=size(M);
55
    sM=sM(2)+1;
56
    M(sM)=0;
57
    M=M';
58
    M=M/gain(1);
59
    TIME=(0:2*(SAMPLES2READ)-1)/sfreq;
60
otherwise  
61
    disp('Sorting algorithm for more than 2 signals not programmed yet!');
62
end
63
clear A M1H M2H PRR PRL;
64
fprintf(1,'\\n$> LOADING DATA FINISHED \n');
65
atrd= fullfile(PATH, ATRFILE);      
66
fid3=fopen(atrd,'r');
67
A= fread(fid3, [2, inf], 'uint8')';
68
fclose(fid3);
69
ATRTIME=[];
70
ANNOT=[];
71
sa=size(A);
72
saa=sa(1);
73
i=1;
74
while i<=saa
75
    annoth=bitshift(A(i,2),-2);
76
    if annoth==59
77
        ANNOT=[ANNOT;bitshift(A(i+3,2),-2)];
78
        ATRTIME=[ATRTIME;A(i+2,1)+bitshift(A(i+2,2),8)+...
79
                bitshift(A(i+1,1),16)+bitshift(A(i+1,2),24)];
80
        i=i+3;
81
    elseif annoth==60
82
        % nothing to do!
83
    elseif annoth==61
84
        % nothing to do!
85
    elseif annoth==62
86
        % nothing to do!
87
    elseif annoth==63
88
        hilfe=bitshift(bitand(A(i,2),3),8)+A(i,1);
89
        hilfe=hilfe+mod(hilfe,2);
90
        i=i+hilfe/2;
91
    else
92
        ATRTIME=[ATRTIME;bitshift(bitand(A(i,2),3),8)+A(i,1)];
93
        ANNOT=[ANNOT;bitshift(A(i,2),-2)];
94
    end
95
   i=i+1;
96
end
97
ANNOT(length(ANNOT))=[];       
98
ATRTIME(length(ATRTIME))=[];  
99
clear A;
100
ATRTIME= (cumsum(ATRTIME))/sfreq;
101
ind= find(ATRTIME <= TIME(end));
102
ATRTIMED= ATRTIME(ind);
103
ANNOT=round(ANNOT);
104
ANNOTD= ANNOT(ind);
105
106
% -------------------------------------------------------------------------
107
fprintf(1,'\\n$> ALL FINISHED \n');
108
end
109