⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sopen.m

📁 matlab数字信号处理工具箱
💻 M
📖 第 1 页 / 共 5 页
字号:
        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 + -