📄 sload.m
字号:
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 + -