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

📄 sload.m

📁 matlab数字信号处理工具箱
💻 M
📖 第 1 页 / 共 2 页
字号:
                else
                        fprintf(H.FILE.stderr,'Error SLOAD: no data file found\n');
                        return;
                end;
                
                H.NS = size(signal,2);
                %scale  = tmp.P_C_DAQ_S.sens;      
                H.Cal = tmp.P_C_DAQ_S.sens*(2.^(1-tmp.P_C_DAQ_S.daqboard{1}.HwInfo.Bits));
                
                if all(tmp.P_C_DAQ_S.unit==1)
                        H.PhysDim='uV';
                else
                        H.PhysDim='[?]';
                end;
                
                H.SampleRate = tmp.P_C_DAQ_S.samplingfrequency;
                sz     = size(signal);
                if length(sz)==2, sz=[1,sz]; end;
                H.NRec = sz(1);
                H.Dur  = sz(2)/H.SampleRate;
                H.NS   = sz(3);
                H.FLAG.TRIGGERED = H.NRec>1;
                H.Filter.LowPass = tmp.P_C_DAQ_S.lowpass;
                H.Filter.HighPass = tmp.P_C_DAQ_S.highpass;
                H.Filter.Notch = tmp.P_C_DAQ_S.notch;
                if any(CHAN),
                        signal=signal(:,CHAN);
                else
                        CHAN=1:H.NS;
                end; 
                if ~H.FLAG.UCAL,
			signal=signal*diag(H.Cal(CHAN));                	        
                end;
                
        elseif isfield(tmp,'data');	% Mueller, Scherer ? 
                H.NS = size(tmp.data,2);
                fprintf(H.FILE.stderr,'Warning SLOAD: Sensitivity not known in %s,\n',FILENAME);
                if ~isfield(tmp,'SampleRate')
                        fprintf(H.FILE.stderr,'Warning SLOAD: Samplerate not known in %s. 125Hz is chosen\n',FILENAME);
                        H.SampleRate=125;
                else
                        H.SampleRate=tmp.SampleRate;
                end;
                if any(CHAN),
                        signal = tmp.data(:,CHAN);
                else
        	        signal = tmp.data;
                end;
                if isfield(tmp,'classlabel'),
                	H.Classlabel = tmp.classlabel;
                end;        
                if isfield(tmp,'artifact'),
                	H.ArtifactSelection = zeros(size(tmp.classlabel));
                        H.ArtifactSelection(tmp.artifact)=1;
                end;        
                
        elseif isfield(tmp,'EEGdata');  % Telemonitoring Daten (Reinhold Scherer)
                H.NS = size(tmp.EEGdata,2);
                H.Classlabel = tmp.classlabel;
                if ~isfield(tmp,'SampleRate')
                        fprintf(H.FILE.stderr,'Warning SLOAD: Samplerate not known in %s. 125Hz is chosen\n',FILENAME);
                        H.SampleRate=125;
                else
                        H.SampleRate=tmp.SampleRate;
                end;
                H.PhysDim = '礦';
                fprintf(H.FILE.stderr,'Sensitivity not known in %s. 50礦 is chosen\n',FILENAME);
                if any(CHAN),
                        signal = tmp.EEGdata(:,CHAN)*50;
                else
                        signal = tmp.EEGdata*50;
                end;
                

        elseif isfield(tmp,'daten');	% EP Daten von Michael Woertz
                H.NS = size(tmp.daten.raw,2)-1;
                if ~isfield(tmp,'SampleRate')
                        fprintf(H.FILE.stderr,'Warning SLOAD: Samplerate not known in %s. 2000Hz is chosen\n',FILENAME);
                        H.SampleRate=2000;
                else
                        H.SampleRate=tmp.SampleRate;
                end;
                H.PhysDim = '礦';
                fprintf(H.FILE.stderr,'Sensitivity not known in %s. 100礦 is chosen\n',FILENAME);
                %signal=tmp.daten.raw(:,1:H.NS)*100;
                if any(CHAN),
                        signal = tmp.daten.raw(:,CHAN)*100;
                else
                        signal = tmp.daten.raw*100;
                end;
                
        elseif isfield(tmp,'neun') & isfield(tmp,'zehn') & isfield(tmp,'trig');	% guger, 
                H.NS=3;
                if ~isfield(tmp,'SampleRate')
                        fprintf(H.FILE.stderr,'Warning SLOAD: Samplerate not known in %s. 125Hz is chosen\n',FILENAME);
                        H.SampleRate=125;
                else
                        H.SampleRate=tmp.SampleRate;
                end;
                fprintf(H.FILE.stderr,'Sensitivity not known in %s. \n',FILENAME);
                signal  = [tmp.neun;tmp.zehn;tmp.trig];
                H.Label = {'Neun','Zehn','TRIG'};
                if any(CHAN),
                        signal=signal(:,CHAN);
                end;        
                
        elseif isfield(tmp,'header')    % Scherer
                signal =[];
                H = tmp.header;
                
        elseif isfield(tmp,'Recorder1')    % Nicolet NRF format converted into Matlab 
                for k = 1:length(s.Recorder1.Channels.ChannelInfos);
                        HDR.Label{k} = s.Recorder1.Channels.ChannelInfos(k).ChannelInfo.Name;
                        HDR.PhysDim{k} = s.Recorder1.Channels.ChannelInfos(k).ChannelInfo.YUnits;
                end;
                signal = [];
                T = [];
                for k = 1:length(s.Recorder1.Channels.Segments)
                        tmp = s.Recorder1.Channels.Segments(k).Data;
                        sz = size(tmp.Samples);
                        signal = [signal; repmat(nan,100,sz(1)); tmp.Samples'];
                        T = [T;repmat(nan,100,1);tmp.dX0+(1:sz(2))'*tmp.dXstep ]
                        fs = 1./tmp.dXstep;
                        if k==1,
                                HDR.SampleRate = fs;
                        elseif HDR.SampleRate ~= fs; 
                                fprintf(2,'Error SLOAD (NRF): different Sampling rates not supported, yet.\n');
                        end;
                end;
                
        else
		signal = [];
                fprintf(H.FILE.stderr,'Warning SLOAD: MAT-file %s not identified as BIOSIG signal\n',FILENAME);
                whos('-file',FILENAME);
        end;        

        
elseif strcmp(H.TYPE,'BIFF'),
	try, 
                [H.TFM.S,H.TFM.E] = xlsread(H.FileName,'Beat-To-Beat');
                if size(H.TFM.S,1)+1==size(H.TFM.E,1),
                        H.TFM.S = [repmat(NaN,1,size(H.TFM.S,2));H.TFM.S];
                end;

                H.TYPE = 'TFM_EXCEL_Beat_to_Beat'; 
                if ~isempty(findstr(H.TFM.E{3,1},'---'))
                        H.TFM.S(3,:) = [];    
                        H.TFM.E(3,:) = [];    
                end;
                
                H.Label   = H.TFM.E(4,:)';
                H.PhysDim = H.TFM.E(5,:)';
           
                H.TFM.S = H.TFM.S(6:end,:);
                H.TFM.E = H.TFM.E(6:end,:);
                
                ix = find(isnan(H.TFM.S(:,2)) & ~isnan(H.TFM.S(:,1)));
                
                H.EVENT.Desc = H.TFM.E(ix,2);
                H.EVENT.POS  = ix;
                
                S(:,3) = S(:,3)/1000;   % convert RRI from [ms] into [s]
                HDR.PhysDim{3} = '[s]';

                if ~CHAN,
			signal  = H.TFM.S;
		else
			signal  = H.TFM.S(:,CHAN);
		end;
	catch,

        end;


elseif strcmp(H.TYPE,'BMP'),
                H.FILE.FID = fopen(H.FileName,'rb','ieee-le');
		fseek(H.FILE.FID,10,-1);

		tmp = fread(H.FILE.FID,4,'uint32');
		H.HeadLen = tmp(1);
		H.BMP.sizeBitmapInfoHeader = tmp(2);
		H.BMP.Size = tmp(3:4)';

		tmp = fread(H.FILE.FID,2,'uint16');
		H.BMP.biPlanes = tmp(1);
		H.bits = tmp(2);

		tmp = fread(H.FILE.FID,6,'uint32');
		H.BMP.biCompression = tmp(1);
		H.BMP.biImageSize = tmp(2);
		H.BMP.biXPelsPerMeter = tmp(3);
		H.BMP.biYPelsPerMeter = tmp(4);
		H.BMP.biColorUsed = tmp(5);
		H.BMP.biColorImportant = tmp(6);
		
		fseek(H.FILE.FID,H.HeadLen,'bof');
		nc = ceil((H.bits*H.BMP.Size(1))/32)*4;

		if (H.bits==1)
			signal = fread(H.FILE.FID,[nc,H.BMP.Size(2)*8],'ubit1');
			signal = signal(1:H.BMP.Size(1),:)';

		elseif (H.bits==4)
			palr   = [  0,128,  0,128,  0,128,  0,192,128,255,  0,255,  0,255,  0,255]; 
			palg   = [  0,  0,128,128,  0,  0,128,192,128,  0,255,255,  0,  0,255,255]; 
			palb   = [  0,  0,  0,  0,128,128,128,192,128,  0,  0,  0,255,255,255,255]; 
			tmp    = uint8(fread(H.FILE.FID,[nc,H.BMP.Size(2)*2],'ubit4'));
			signal        = palr(tmp(1:H.BMP.Size(1),:)'+1);
			signal(:,:,2) = palg(tmp(1:H.BMP.Size(1),:)'+1);
			signal(:,:,3) = palb(tmp(1:H.BMP.Size(1),:)'+1);
	    		signal = signal(H.BMP.Size(2):-1:1,:,:);

		elseif (H.bits==8)
			pal = uint8(colormap*256);
			tmp = fread(H.FILE.FID,[nc,H.BMP.Size(2)],'uint8');
			signal        = pal(tmp(1:H.BMP.Size(1),:)'+1,1);
			signal(:,:,2) = pal(tmp(1:H.BMP.Size(1),:)'+1,2);
			signal(:,:,3) = pal(tmp(1:H.BMP.Size(1),:)'+1,3);
	    		signal = signal(H.BMP.Size(2):-1:1,:,:);

		elseif (H.bits==24)
			[signal]    = uint8(fread(H.FILE.FID,[nc,H.BMP.Size(2)],'uint8'));
			H.BMP.Red   = signal((1:H.BMP.Size(1))*3,:)';
			H.BMP.Green = signal((1:H.BMP.Size(1))*3-1,:)';
			H.BMP.Blue  = signal((1:H.BMP.Size(1))*3-2,:)';
			signal = H.BMP.Red;
			signal(:,:,2) = H.BMP.Green;
			signal(:,:,3) = H.BMP.Blue;
	    		signal = signal(H.BMP.Size(2):-1:1,:,:);
		else

		end;
                fclose(H.FILE.FID);

        
elseif strcmp(H.TYPE,'unknown')
        TYPE = upper(H.FILE.Ext);
        if strcmp(TYPE,'DAT')
                loaddat;     
                signal = Voltage(:,CHAN);
        elseif strcmp(TYPE,'RAW')
                loadraw;
        elseif strcmp(TYPE,'RDT')
                [signal] = loadrdt(FILENAME,CHAN);
                fs = 128;
        elseif strcmp(TYPE,'XLS')
                loadxls;
        elseif strcmp(TYPE,'DA_')
                fprintf('Warning SLOAD: Format DA# in testing state and is not supported\n');
                loadda_;
        elseif strcmp(TYPE,'RG64')
                [signal,H.SampleRate,H.Label,H.PhysDim,H.NS]=loadrg64(FILENAME,CHAN);
                %loadrg64;
        else
                fprintf('Error SLOAD: Unknown Data Format\n');
                signal = [];
        end;
        
        
end;


if strcmp(H.TYPE,'CNT');    
        f = fullfile(H.FILE.Path, [H.FILE.Name,'.txt']); 
        if exist(f,'file'),
                fid = fopen(f,'r');
		tmp = fread(fid,inf,'char');
		fclose(fid);
		[tmp,v] = str2double(char(tmp'));
		if ~any(v), 
            		H.Classlabel=tmp(:);                        
	        end;
        end
        f = fullfile(H.FILE.Path, [H.FILE.Name,'.mat']);
        if exist(f,'file'),
                tmp = load(f);
                if isfield(tmp,'classlabel') & ~isfield(H,'Classlabel')
                        H.Classlabel=tmp.classlabel(:);                        
                elseif isfield(tmp,'classlabel') & isfield(tmp,'header') & isfield(tmp.header,'iniFile') & strcmp(tmp.header.iniFile,'oom.ini'), %%% for OOM study only. 
                        H.Classlabel=tmp.classlabel(:);                        
                end;
        end;
        f = fullfile(H.FILE.Path, [H.FILE.Name,'c.mat']);
        if exist(f,'file'),
                tmp = load(f);
                if isfield(tmp,'classlabel') & ~isfield(H,'Classlabel')
                        H.Classlabel=tmp.classlabel(:);                        
                end;
        end;
end;

if ~isempty(findstr(upper(MODE),'TSD'));
        f = fullfile(H.FILE.Path, [H.FILE.Name,'.tsd']);
        if ~exist(f,'file'),
                        fprintf(2,'Warning SLOAD-TSD: file %s.tsd found\n',H.FILE(1).Name,H.FILE(1).Name);
        else
                fid = fopen(f,'rb');
                tsd = fread(fid,inf,'float');
                fclose(fid);
                nc = size(signal,1)\size(tsd,1);
                if (nc == round(nc)),
                        signal = [signal, reshape(tsd,nc,size(tsd,1)/nc)'];
                else
                        fprintf(2,'Warning SLOAD: size of %s.tsd does not fit to size of %s.bkr\n',H.FILE(1).Name,H.FILE(1).Name);
                end;
        end;
end;

%%%%% if possible, load Reinhold's configuration files
if any(strmatch(H.TYPE,{'BKR','GDF'}));
        f = fullfile(H.FILE.Path, [H.FILE.Name,'.mat']);
        if exist(f,'file'),
                x = load(f,'header');
		if isfield(x,'header'),
	                H.BCI.Paradigm = x.header.Paradigm;
    		        if isfield(H.BCI.Paradigm,'TriggerTiming');
    		                H.TriggerOffset = H.BCI.Paradigm.TriggerTiming;
            		elseif isfield(H.BCI.Paradigm,'TriggerOnset');
                    		H.TriggerOffset = H.BCI.Paradigm.TriggerOnset;
            		end;
                        
                        if isempty(H.Classlabel),
                                H.Classlabel = x.header.Paradigm.Classlabel;
                        end;
		end;
        end;
end;

% resampling 
if ~isnan(Fs) & (H.SampleRate~=Fs);
        tmp = ~mod(H.SampleRate,Fs) | ~mod(Fs,H.SampleRate);
        tmp2= ~mod(H.SampleRate,Fs*2.56);
        if tmp,
                signal = rs(signal,H.SampleRate,Fs);
                H.EVENT.POS = H.EVENT.POS/H.SampleRate*Fs;
                if isfield(H.EVENT,'DUR');
                        H.EVENT.DUR = H.EVENT.DUR/H.SampleRate*Fs;
                end;
                H.SampleRate = Fs;
        elseif tmp2,
                x = load('resample_matrix.mat');
                signal = rs(signal,x.T256100);
                if H.SampleRate*100~=Fs*256,
                        signal = rs(signal,H.SampleRate/(Fs*2.56),1);
                end;
                H.EVENT.POS = H.EVENT.POS/H.SampleRate*Fs;
                if isfield(H.EVENT,'DUR');
                        H.EVENT.DUR = H.EVENT.DUR/H.SampleRate*Fs;
                end;
                H.SampleRate = Fs;
        else 
                fprintf(2,'Warning SLOAD: resampling %f Hz to %f Hz not implemented.\n',H.SampleRate,Fs);
        end;                
end;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -