📄 scpopen.m
字号:
end;
while (c > 7) & (l < Ntmp),
l = l+1;
c = c-8;
accu = accu + tmp(l)*(2^c);
end;
%accu,
end;
%HDR.SCP6.S(:,k) = x(1:end-1)';
x = x(1:end-1)';
if k==1,
S2=x;
elseif size(x,1)==size(S2,1),
S2(:,k) = x;
else
fprintf(HDR.FILE.stderr,'Error SCPOPEN: Huffman decoding failed (%i) \n',size(x,1));
HDR.data=S2;
return;
end;
end;
elseif (HDR.SCP2.NHT==1) & (HDR.SCP2.NCT==1) & (HDR.SCP2.prefix==0),
codelength = HDR.SCP.HT(1,4);
if (codelength==16)
S2 = fread(fid,[HDR.N,HDR.NS],'int16');
elseif (codelength==8)
S2 = fread(fid,[HDR.N,HDR.NS],'int8');
else
fprintf(HDR.FILE.stderr,'Warning SCPOPEN: codelength %i is not supported yet.',codelength);
fprintf(HDR.FILE.stderr,' Contact <a.schloegl@ieee.org>\n');
return;
end;
elseif HDR.SCP2.NHT~=19999,
fprintf(HDR.FILE.stderr,'Warning SOPEN SCP-ECG: user specified Huffman Table not supported\n');
HDR.SCP = SCP;
return;
else
HDR.SCP2,
end;
% Decoding of Difference encoding
if SCP.FLAG.DIFF==2,
for k1 = 3:size(S2,1);
S2(k1,:) = S2(k1,:) + [2,-1] * S2(k1-(1:2),:);
end;
elseif SCP.FLAG.DIFF==1,
S2 = cumsum(S2);
end;
S2 = S2 * SCP.Cal;
if section.ID==5,
HDR.SCP5 = SCP;
HDR.SCP5.data = S2;
HDR.SampleRate = SCP.SampleRate;
elseif section.ID==6,
HDR.SCP6 = SCP;
HDR.SampleRate = SCP.SampleRate;
HDR.PhysDim = HDR.SCP6.PhysDim;
HDR.data = S2;
if HDR.SCP6.FLAG.bimodal_compression,
F = HDR.SCP5.SampleRate/HDR.SCP6.SampleRate;
HDR.SampleRate = HDR.SCP5.SampleRate;
HDR.FLAG.F = F;
tmp=[HDR.SCP4.PA(:,1);HDR.LeadPos(1,2)]-[1;HDR.SCP4.PA(:,2)+1];
if ~all(tmp==floor(tmp))
tmp,
end;
t = (1:HDR.N) / HDR.SampleRate;
S1 = zeros(HDR.N, HDR.NS);
p = 1;
k2 = 1;
pa = [HDR.SCP4.PA;NaN,NaN];
flag = 1;
for k1 = 1:HDR.N,
if k1 == pa(p,2)+1,
flag = 1;
p = p+1;
accu = S2(k2,:);
elseif k1 == pa(p,1),
flag = 0;
k2 = ceil(k2);
end;
if flag,
S1(k1,:) = ((F-1)*accu + S2(fix(k2),:)) / F;
k2 = k2 + 1/F;
else
S1(k1,:) = S2(k2,:);
k2 = k2 + 1;
end;
end;
HDR.SCP.S2 = S2;
HDR.SCP.S1 = S1;
S2 = S1;
end;
if HDR.FLAG.ReferenceBeat,
for k = find(~HDR.SCP4.type(:,1)'),
t1 = (HDR.SCP4.type(k,2):HDR.SCP4.type(k,4));
t0 = t1 - HDR.SCP4.type(k,3) + HDR.SCP4.fc0;
S2(t1,:) = S2(t1,:) + HDR.SCP5.data(t0,:);
end;
end;
HDR.data = S2;
end;
elseif section.ID==7,
HDR.SCP7.byte1 = fread(fid,1,'uint8');
HDR.SCP7.Nspikes = fread(fid,1,'uint8');
HDR.SCP7.meanPPI = fread(fid,1,'uint16');
HDR.SCP7.avePPI = fread(fid,1,'uint16');
for k=1:HDR.SCP7.byte1,
HDR.SCP7.RefBeat{k} = fread(fid,16,'uint8');
%HDR.SCP7.RefBeat1 = fread(fid,16,'uint8');
end;
for k=1:HDR.SCP7.Nspikes,
tmp = fread(fid,16,'uint16');
tmp(1,2) = fread(fid,16,'int16');
tmp(1,3) = fread(fid,16,'uint16');
tmp(1,4) = fread(fid,16,'int16');
HDR.SCP7.ST(k,:) = tmp;
end;
for k=1:HDR.SCP7.Nspikes,
tmp = fread(fid,6,'uint8');
HDR.SCP7.ST2(k,:) = tmp;
end;
HDR.SCP7.Nqrs = fread(fid,1,'uint16');
HDR.SCP7.beattype = fread(fid,HDR.SCP7.Nqrs,'uint8');
HDR.SCP7.VentricularRate = fread(fid,1,'uint16');
HDR.SCP7.AterialRate = fread(fid,1,'uint16');
HDR.SCP7.QTcorrected = fread(fid,1,'uint16');
HDR.SCP7.TypeHRcorr = fread(fid,1,'uint8');
len = fread(fid,1,'uint16');
tag = 255*(len==0);
k1 = 0;
while tag~=255,
tag = fread(fid,1,'uchar');
len = fread(fid,1,'uint16');
field = fread(fid,[1,len],'uchar');
if tag == 0,
HDR.Patient.LastName = char(field);
elseif tag == 1,
end;
end;
HDR.SCP7.P_onset = fread(fid,1,'uint16');
HDR.SCP7.P_offset = fread(fid,1,'uint16');
HDR.SCP7.QRS_onset = fread(fid,1,'uint16');
HDR.SCP7.QRS_offset = fread(fid,1,'uint16');
HDR.SCP7.T_offset = fread(fid,1,'uint16');
HDR.SCP7.P_axis = fread(fid,1,'uint16');
HDR.SCP7.QRS_axis = fread(fid,1,'uint16');
HDR.SCP7.T_axis = fread(fid,1,'uint16');
elseif section.ID==8,
tmp = fread(fid,9,'uint8');
HDR.SCP8.Report = tmp(1);
HDR.SCP8.Time = [[1,256]*tmp(2:3),tmp(4:8)'];
HDR.SCP8.N = tmp(9);
for k = 1:HDR.SCP8.N,
ix = fread(fid,1,'uint8');
len = fread(fid,1,'uint16');
tmp = fread(fid,[1,len],'uchar');
HDR.SCP8.Statement{k} = char(tmp);
end
elseif section.ID==9,
HDR.SCP9.byte1 = fread(fid,1,'uint8');
elseif section.ID==10,
HDR.SCP10.byte1 = fread(fid,1,'uint8');
elseif section.ID==11,
end;
%tmp = fread(fid,min(section.Length-16,1000),'uchar');
fseek(fid, pos+section.Length-2, -1);
section.CRC = fread(fid,1,'uint16');
end;
HDR.FILE.FID = fid;
HDR.FILE.OPEN = 1;
HDR.FILE.POS = 0;
[HDR.SPR, HDR.NS] = size(HDR.data);
HDR.NRec = 1;
HDR.AS.endpos = HDR.SPR;
end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -