📄 mwfopen.m
字号:
HDR.Xphysdim = 's';
HDR.SampleRate= 1/(tmp*e);
elseif tmp1(1)==2,
HDR.Xphysdim = 'm';
HDR.SampleRate=tmp*e;
end;
elseif tag==12; % sensitivity, resolution, gain, calibration,
[tmp,count] = fread(HDR.FILE.FID,2,'int8');
if tmp(1)==0, HDR.PhysDim = 'V';
elseif tmp(1)==1, HDR.PhysDim = 'mmHg';
elseif tmp(1)==2, HDR.PhysDim = 'Pa';
elseif tmp(1)==3, HDR.PhysDim = 'cmH2O';
elseif tmp(1)==4, HDR.PhysDim = 'mmHg';
elseif tmp(1)==5, HDR.PhysDim = 'dyne';
elseif tmp(1)==6, HDR.PhysDim = 'N';
elseif tmp(1)==7, HDR.PhysDim = '%';
elseif tmp(1)==8, HDR.PhysDim = '癈';
elseif tmp(1)==9, HDR.PhysDim = '/m';
elseif tmp(1)==10, HDR.PhysDim = '/s';
elseif tmp(1)==11, HDR.PhysDim = 'Ohm';
elseif tmp(1)==12, HDR.PhysDim = 'A';
elseif tmp(1)==13, HDR.PhysDim = 'r.p.m.';
elseif tmp(1)==14, HDR.PhysDim = 'W';
elseif tmp(1)==15, HDR.PhysDim = 'dB';
elseif tmp(1)==16, HDR.PhysDim = 'kg';
elseif tmp(1)==17, HDR.PhysDim = 'J';
elseif tmp(1)==18, HDR.PhysDim = 'dyne s m-2 cm-5';
elseif tmp(1)==19, HDR.PhysDim = 'L';
elseif tmp(1)==20, HDR.PhysDim = 'L/s';
elseif tmp(1)==21, HDR.PhysDim = 'L/m';
elseif tmp(1)==22, HDR.PhysDim = 'cd';
elseif tmp(1)==23, HDR.PhysDim = '';
elseif tmp(1)==24, HDR.PhysDim = '';
elseif tmp(1)==25, HDR.PhysDim = '';
end;
e = 10^tmp(2);
len = len - 2;
if len == 1;
[tmp,count] = fread(HDR.FILE.FID,1,'int8');
elseif len == 2;
[tmp,count] = fread(HDR.FILE.FID,1,'int16');
elseif len == 3;
[tmp,count] = fread(HDR.FILE.FID,1,'bit24');
elseif len == 4;
[tmp,count] = fread(HDR.FILE.FID,1,'int32');
end;
HDR.Cal = tmp*e;
elseif tag==13; % offset
[tmp,count] = fread(HDR.FILE.FID,1,gdfdatatype(HDR.GDFTYP));
HDR.Off=tmp;
elseif tag==14; % compression
%[tmp,count] = fread(HDR.FILE.FID,[1,len],'uchar')
[HDR.MFER.CompressionCode,count] = fread(HDR.FILE.FID,1,'uint16');
[HDR.MFER.DataLength1,count] = fread(HDR.FILE.FID,1,'uint32');
[HDR.MFER.DataLength2,count] = fread(HDR.FILE.FID,1,'uint32');
[tmp,count] = fread(HDR.FILE.FID,[1,len],'uchar');
HDR.tag14=char(tmp);
HDR.FLAG.Compresssion=tmp;
elseif tag==17;
[tmp,count] = fread(HDR.FILE.FID,[1,len],'uchar');
HDR.tag17 = tmp;
elseif tag==18; % null value
[tmp,count] = fread(HDR.FILE.FID,1,gdfdatatype(HDR.GDFTYP));
HDR.MFER.NullValue = tmp;
elseif tag==21; %
[tmp,count] = fread(HDR.FILE.FID,[1,len],'uchar');
HDR.tag21=char(tmp);
elseif tag==22; %
[tmp,count] = fread(HDR.FILE.FID,[1,len],'uchar');
HDR.comment=char(tmp);
elseif tag==23; %
[tmp,count] = fread(HDR.FILE.FID,[1,len],'uchar');
HDR.tag23 = char(tmp);
elseif tag==30; %
if isfield(HDR,'MFER');
if isfield(HDR.MFER,'SPR');
HDR.AS.spb = sum(HDR.MFER.SPR);
else
HDR.AS.spb = HDR.SPR*HDR.NS;
HDR.MFER.SPR = HDR.SPR(ones(1,HDR.NS));
end;
end;
HDR.SPR = HDR.MFER.SPR(1);
for k=2:HDR.NS,
HDR.SPR = lcm(HDR.SPR,HDR.MFER.SPR(k));
end;
HDR.FRAME.N = HDR.FRAME.N + 1;
HDR.FRAME.POS(HDR.FRAME.N) = ftell(HDR.FILE.FID);
HDR.FRAME.TYP(HDR.FRAME.N) = HDR.GDFTYP;
nos = len/(HDR.AS.bps*HDR.AS.spb);
HDR.FRAME.sz(HDR.FRAME.N,1:5) = [HDR.AS.spb,nos,HDR.NRec,HDR.NS,len];
HDR.FRAME.Fs(HDR.FRAME.N) = HDR.SampleRate;
fseek(HDR.FILE.FID,len,'cof');
elseif tag==63;
chansel = mod(len,128)+1;
k = 1;
while len > 127,
[len, count] = fread(HDR.FILE.FID,1,'uchar');
k = k + 1;
chansel(k) = mod(len,128)+1;
end
[len, count] = fread(HDR.FILE.FID,1,'uchar');
if 0,
elseif len<128,
while len,
tag2 = fread(HDR.FILE.FID,1,'uchar');
len2 = fread(HDR.FILE.FID,1,'char');
len = len - 2 - len2;
if 0,
elseif (tag2 == 4),
if len == 0;
tmp = NaN;
elseif len == 1;
[tmp,count] = fread(HDR.FILE.FID,1,'int8');
elseif len == 2;
[tmp,count] = fread(HDR.FILE.FID,1,'int16');
elseif len == 3;
[tmp,count] = fread(HDR.FILE.FID,1,'bit24');
elseif len == 4;
[tmp,count] = fread(HDR.FILE.FID,1,'int32');
else
fprintf(2,'Error MWFOPEN: len=%i exceeds max length (4) in tag 04h\n',len);
end;
%[HDR.SPR,count] = fread(HDR.FILE.FID,[1,len],'uchar');
HDR.MFER.SPR(chansel) = tmp;
HDR.SPR = lcm(tmp,HDR.SPR);
elseif (tag2 == 12),
[tmp, count] = fread(HDR.FILE.FID,1,gdfdatatype(HDR.GDFTYP));
HDR.Cal(chansel) = tmp;
elseif (tag2 == 13),
[tmp, count] = fread(HDR.FILE.FID,1,gdfdatatype(HDR.GDFTYP));
HDR.Off(chansel) = tmp;
elseif (tag2 == 9),
[tmp, count] = fread(HDR.FILE.FID,[1,len2],'uchar');
if ~isfield(HDR,'Label')
HDR.Label(chansel,:) = ECG12LeadsCodes{tmp};
else
HDR.Label(chansel,1:length(ECG12LeadsCodes{tmp})) = ECG12LeadsCodes{tmp};
end;
else % if (tag2 == 10),
fprintf(2,'Error MWFOPEN: Tag %i in channel-specific section not supported \n',tag2);
fclose(HDR.FILE.FID);
HDR.FILE.OPEN=0;
return;
end;
%fprintf(1,'\t%i',chansel);
%fprintf(1,'> [%i] Tag %i = %i: (%i) \n',ftell(HDR.FILE.FID),tag2,tmp,len2);
end;
else
tag2 = 1; len2=1;
while (tag2 | len2),
tag2 = fread(HDR.FILE.FID,1,'uchar');
len2 = fread(HDR.FILE.FID,1,'char');
%% this part is not tested yet
fprintf(1,'\t%i',chansel);
fprintf(1,'> [%i] Tag %i: (%i)\n',ftell(HDR.FILE.FID),tag2,len2);
if (len2 < 0) | (len2 > 127),
l = mod(len2,128);
len2 = fread(HDR.FILE.FID,[l,1],'uchar');
%len = 256.^[0:l-1]*len;
len2 = 256.^[l-1:-1:0]*len2;
end;
[tmp, count] = fread(HDR.FILE.FID,[1,len],'uchar');
end;
end;
if isfield(HDR,'Label')
HDR.Label = char(HDR.Label);
end;
elseif tag==64; % Preamble
[tmp,count] = fread(HDR.FILE.FID,[1,len],'char');
HDR.TYPE='MFER';
elseif tag==65; % Events
N = HDR.EVENT.N + 1;
HDR.EVENT.N = N;
[HDR.EVENT.TYP(N),count] = fread(HDR.FILE.FID,1,'uint16');
if len>5,
[HDR.EVENT.POS(N),count] = fread(HDR.FILE.FID,1,'uint32');
end;
if len>9,
[HDR.EVENT.DUR(N),count] = fread(HDR.FILE.FID,1,'uint32');
end;
if len>10,
[HDR.EVENT.Desc{N},count] = fread(HDR.FILE.FID,len-10,'char');
end;
elseif tag==67; % Sample Skew
[tmp,count] = fread(HDR.FILE.FID,1,'int16');
HDR.SampleSkew = tmp;
elseif tag==129; % Patient Name
[tmp,count] = fread(HDR.FILE.FID,[1,len],'char');
HDR.Patient.Name = char(tmp);
elseif tag==130; % Patient Id
[tmp,count] = fread(HDR.FILE.FID,[1,len],'char');
HDR.PID = char(tmp);
elseif tag==131; % Patient Age
[tmp,count] = fread(HDR.FILE.FID,[1,len],'char');
HDR.Patient.Age = char(tmp);
elseif tag==132; % Patient Age
[tmp,count] = fread(HDR.FILE.FID,[1,len],'char');
HDR.Patient.Sex = char(tmp);
elseif tag==133; % recording time
[HDR.T0(1),count] = fread(HDR.FILE.FID,1,'int16');
[HDR.T0(2:6),count] = fread(HDR.FILE.FID,[1,5],'uint8');
[tmp,count] = fread(HDR.FILE.FID,[1,2],'int16');
HDR.T0(6) = HDR.T0(6) + tmp(1)*1e-3 + tmp(2)+1e-6;
else
[tmp,count] = fread(HDR.FILE.FID,[1,len],'char');
%fprintf(1,'[%i %i] Tag %i: (%i) %s\n',ftell(HDR.FILE.FID),count,tag,len,char(tmp));
end;
% fprintf(1,'[%i %i] Tag %i: (%i)\n',ftell(HDR.FILE.FID),count,tag,len);
% count = 1;
% pause
end;
HDR.HeadLen = ftell(HDR.FILE.FID);
HDR.FILE.POS = 0;
HDR.Calib = sparse([HDR.Off(ones(1,HDR.NS/length(HDR.Off)));eye(HDR.NS)]);
HDR.Calib = HDR.Calib * sparse(1:HDR.NS,1:HDR.NS,HDR.Cal);
end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -