📄 sopen.m
字号:
if setstr(HDR.VERSION(1:3)')~='EBS'
fprintf(2,'Error LOADEBS: %s not an EBS-File',HDR.FileName);
if any(HDR.VERSION(4:8)~=hex2dec(['94';'0a';'13';'1a';'0d'])');
fprintf(2,'Warning SOPEN EBS: %s may be corrupted',HDR.FileName);
end;
end;
HDR.EncodingId = fread(HDR.FILE.FID,1,'int32'); %
HDR.NS = fread(HDR.FILE.FID,1,'uint32'); % Number of Channels
HDR.SPR = fread(HDR.FILE.FID,2,'uint32'); % Number of Samples
if HDR.SPR(1)==0,
HDR.SPR=HDR.SPR(2)
else
fprintf(2,'Error SOPEN: EBS-FILE %s too large',HDR.FileName);
end;
LenData=fread(HDR.FILE.FID,1,'int64'); % Data Length
%%%%% (2) LOAD Variable Header %%%%%
tag=fread(HDR.FILE.FID,1,'int32'); % Tag field
while (tag~=0),
l =fread(HDR.FILE.FID,1,'int32'); % length of value field
val=setstr(fread(HDR.FILE.FID,4*l,'char')'); % depends on Tag field
if tag==hex2dec('00000002'), %IGNORE
elseif tag==hex2dec('00000004') HDR.PATIENT_NAME=val;
elseif tag==hex2dec('00000006') HDR.PATIENT_ID=val;
elseif tag==hex2dec('00000008') HDR.PATIENT_BIRTHDAY=val;
elseif tag==hex2dec('0000000a') HDR.PATIENT_SEX=val;
elseif tag==hex2dec('0000000c') HDR.SHORT_DESCRIPTION=val;
elseif tag==hex2dec('0000000e') HDR.DESCRIPTION=val;
elseif tag==hex2dec('00000010') HDR.SAMPLE_RATE=str2double(val);
elseif tag==hex2dec('00000012') HDR.INSTITUTION=val;
elseif tag==hex2dec('00000014') HDR.PROCESSING_HISTORY=val;
elseif tag==hex2dec('00000016') HDR.LOCATION_DIAGRAM=val;
elseif tag==hex2dec('00000001') HDR.PREFERRED_INTEGER_RANGE=vec2matx(vec2matx(val,HDR.NS),2);
elseif tag==hex2dec('00000003') HDR.PhysDim=val;
elseif tag==hex2dec('00000005') HDR.CHANNEL_DESCRIPTION=val;
elseif tag==hex2dec('00000007') HDR.CHANNEL_GROUPS=val;
elseif tag==hex2dec('00000009') HDR.EVENTS=val;
elseif tag==hex2dec('0000000b') HDR.RECORDING_TIME=val;
elseif tag==hex2dec('0000000d') HDR.HDR.CHANNEL_LOCATIONS=val;
elseif tag==hex2dec('0000000f') HDR.FILTERS=val;
end;
tag=fread(HDR.FILE.FID,1,'int32'); % Tag field
end;
fclose(HDR.FILE.FID);
elseif strcmp(HDR.TYPE,'rhdE'),
HDR.FILE.FID = fopen(HDR.FileName,PERMISSION,'ieee-le');
%fseek(HDR.FILE.FID,4,'bof'); % skip 4 bytes ID
%HDR.HeadLen = fread(HDR.FILE.FID,1,'int32'); % Length of Header ?
%HDR.H2 = fread(HDR.FILE.FID,5,'int32');
%HDR.NS = fread(HDR.FILE.FID,1,'int32'); % ? number of channels
%HDR.H3 = fread(HDR.FILE.FID,5,'int32');
tmp = fread(HDR.FILE.FID,10,'int32');
HDR.HeadLen = tmp(2); % Length of Header ?
HDR.H2 = tmp;
HDR.NS = tmp(8); % ? number of channels
fseek(HDR.FILE.FID,0,'eof');
HDR.AS.endpos = ftell(HDR.FILE.FID);
HDR.NRec = (HDR.AS.endpos-HDR.HeadLen)/1024;
fseek(HDR.FILE.FID,HDR.HeadLen,'bof');
fprintf(1,'Warning SOPEN HolterExcel2: is under construction.\n');
if (nargout>1), % just for testing
H1 = fread(HDR.FILE.FID,[1,inf],'uchar')';
end;
fclose(HDR.FILE.FID);
elseif strcmp(HDR.TYPE,'alpha') & any(PERMISSION=='r'),
HDR.FILE.FID = -1; % make sure SLOAD does not call SREAD;
% The header files are text files (not binary).
try
PERMISSION = 'rt'; % MatLAB default is binary, force Mode='rt';
fid = fopen(fullfile(HDR.FILE.Path,'rawhead'),PERMISSION);
catch
PERMISSION = 'r'; % Octave 2.1.50 default is text, but does not support Mode='rt',
fid = fopen(fullfile(HDR.FILE.Path,'rawhead'),PERMISSION);
end;
fid = fopen(fullfile(HDR.FILE.Path,'rawhead'),PERMISSION);
if fid < 0,
fprintf(2,'Error SOPEN (alpha): couldnot open RAWHEAD\n');
else
H = []; k = 0;
HDR.TYPE = 'unknown';
while ~feof(fid),
[s] = fgetl(fid);
if ~isnumeric(s),
[tag,s] = strtok(s,'=');
[tmp,s] = strtok(s,'=');
[val,status] = str2double(tmp);
if status,
val = tmp;
end;
tag = deblank(tag);
if strcmp(tag,'Version'),
HDR.VERSION = val;
HDR.TYPE = 'alpha';
elseif strcmp(tag,'BitsPerValue'),
HDR.Bits = val;
elseif strcmp(tag,'ChanCount'),
HDR.NS = val;
elseif strcmp(tag,'SampleCount'),
HDR.SPR = val;
elseif strcmp(tag,'SampleFreq'),
HDR.SampleRate = val;
elseif strcmp(tag,'NotchFreq'),
HDR.Filter.Notch = val;
else
%fprintf(HDR.FILE.stderr,'Warning SOPEN Type=alpha: unknown Tag %s.\n',tag);
end;
end;
end;
fclose(fid);
end;
HDR.PhysDim = ' ';
fid = fopen(fullfile(HDR.FILE.Path,'cal_res'),PERMISSION);
if fid < 0,
fprintf(2,'Warning SOPEN alpha-trace: could not open CAL_RES. Data is uncalibrated.\n');
HDR.Calib = sparse(2:HDR.NS+1,1:HDR.NS,1);
else
[s] = fgetl(fid); % read version
[s] = fgetl(fid); % read calibration time
HDR.Label = char(zeros(HDR.NS,1));
HDR.Cal = repmat(NaN,HDR.NS,1);
HDR.Off = zeros(HDR.NS,1);
OK = zeros(HDR.NS,1);
for k = 1:HDR.NS,
[s] = fgetl(fid);
[tmp,s] = strtok(s,',');
[lab,ok] = strtok(tmp,' =,');
[ok] = strtok(ok,' =,');
[cal,s] = strtok(s,' ,');
cal = str2double(cal);
[off,s] = strtok(s,' ,');
off = str2double(off);
HDR.Off(k)=off;
HDR.Cal(k)=cal;
OK(k)=strcmpi(ok,'yes');
HDR.Label(k,1:length(lab))=lab;
end;
fclose(fid);
HDR.FLAG.UCAL = ~all(OK);
if ~all(OK),
fprintf(2,'Warning SOPEN (alpha): calibration not valid for some channels\n');
end;
HDR.Cal(find(~OK)) = NaN;
HDR.Calib = sparse([-HDR.Off';eye(HDR.NS*[1,1])])*sparse(1:HDR.NS,1:HDR.NS,HDR.Cal);
HDR.PhysDim = '礦';
end;
fid = fopen(fullfile(HDR.FILE.Path,'r_info'),PERMISSION);
if fid < 0,
fprintf(2,'Warning SOPEN alpha-trace: couldnot open R_INFO\n');
else
H = [];
HDR.TYPE = 'unknown';
while ~feof(fid),
[s] = fgetl(fid);
if ~isnumeric(s),
[tag,s] = strtok(s,'=');
[tmp,s] = strtok(s,'=');
[val,status] = str2double(tmp);
if status,
val = tmp;
end;
tag = deblank(tag);
if strcmp(tag,'Version'),
HDR.VERSION = val;
HDR.TYPE = 'alpha';
elseif strcmp(tag,'RecId'),
HDR.ID.Recording = val;
elseif strcmp(tag,'Laboratory'),
HDR.ID.Lab = val;
elseif strcmp(tag,'RecDate'),
pos = [1,find(val=='.'),length(val)];
tmp = [str2double(val(pos(3)+1:pos(4))),str2double(val(pos(2)+1:pos(3)-1)),str2double(val(pos(1):pos(2)-1))];
HDR.T0(1:3) = tmp;
elseif strcmp(tag,'RecTime'),
pos = [1,find(val=='.'),length(val)];
tmp = [str2double(val(pos(1):pos(2)-1)),str2double(val(pos(2)+1:pos(3)-1)),str2double(val(pos(3)+1:pos(4)))];
HDR.T0(4:6) = tmp;
else
%fprintf(HDR.FILE.stderr,'Warning SOPEN Type=alpha: unknown Tag %s.\n',tag);
end;
end;
end;
end;
fid = fopen(fullfile(HDR.FILE.Path,'digin'),PERMISSION);
if fid < 0,
fprintf(2,'Warning SOPEN alpha-trace: couldnot open DIGIN - no event information included\n');
else
[s] = fgetl(fid); % read version
k = 0; POS = []; DUR = []; TYP = []; IO = [];
while ~feof(fid),
[s] = fgetl(fid);
if ~isnumeric(s),
[timestamp,s] = strtok(s,'=');
[type,io] = strtok(s,'=,');
timestamp = str2double(timestamp);
if ~isnan(timestamp),
k = k + 1;
POS(k) = timestamp;
TYP(k) = hex2dec(type);
DUR(k) = 0;
if (k>1) & (TYP(k)==0),
DUR(k-1) = POS(k)-POS(k-1);
end;
else
fprintf(2,'Warning SOPEN: alpha: invalid Event type\n');
end;
if length(io)>1,
IO(k) = io(2);
end;
end;
end;
fclose(fid);
HDR.EVENT.N = k;
HDR.EVENT.POS = POS(:);
HDR.EVENT.DUR = DUR(:);
HDR.EVENT.TYP = TYP(:);
HDR.EVENT.IO = IO(:);
HDR.EVENT.CHN = zeros(HDR.EVENT.N,1);
end;
if all(abs(HDR.VERSION-[407.1,409.5]) > 1e-6);
fprintf(HDR.FILE.stderr,'Warning SLOAD: Format ALPHA Version %6.2f not tested yet.\n',HDR.VERSION);
end;
HDR.FILE.FID = fopen(fullfile(HDR.FILE.Path,'rawdata'),'rb');
if HDR.FILE.FID > 0,
HDR.VERSION2 = fread(HDR.FILE.FID,1,'int16');
HDR.NS = fread(HDR.FILE.FID,1,'int16');
HDR.bits = fread(HDR.FILE.FID,1,'int16');
HDR.AS.bpb = HDR.NS*HDR.bits/8;
HDR.FILE.OPEN = 1;
HDR.FILE.POS = 0;
HDR.HeadLen = ftell(HDR.FILE.FID);
fseek(HDR.FILE.FID,0,'eof');
HDR.AS.endpos = (ftell(HDR.FILE.FID)-HDR.HeadLen)/HDR.AS.bpb;
HDR.SPR = HDR.AS.endpos;
fseek(HDR.FILE.FID,HDR.HeadLen,'bof');
end;
elseif strcmp(HDR.TYPE,'DEMG'),
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -