?? save2bkr.m
字號:
function [HDR] = save2bkr(arg1,arg2,arg3);
% SAVE2BKR loads EEG data and saves it in BKR format
% The following data formats are supported:
% CNT, EDF, BKR, MAT, etc. format
%
% HDR = save2bkr(sourcefile [, destfile [, option]]);
%
% HDR = eegchkhdr();
% HDR = save2bkr(HDR,data);
%
% sourcefile sourcefile wildcards are allowed
% destfile destination file in BKR format
% if destfile is empty or a directory, sourcefile but with extension .bkr is used.
% options
% gain Gain factor for unscaled EEG data (e.g. old Matlab files)
% 'removeDC' removes mean
% 'regressEOG k:l,m:n' removes EOG (channels m:n) from EEG (channels k:l)
% 'autoscale k:l' uses only channels from k to l for scaling
% 'detrend k:l' channels from k to l are detrended with an FIR-highpass filter.
% 'PhysMax=XXX' uses a fixed scaling factor; might be important for concanating BKR files
% +XXX and -XXX correspond to the maximum and minimum physical value, resp.
% You can concanate several options by separating with space, komma or semicolon
%
% HDR Header, HDR.FileName must contain target filename
% data data samples
%
% Examples:
% save2bkr('/tmp/*.cnt',[],'autoscale 5:30');
% converts all CNT-files from subdir /tmp/ into BKR files
% and saves them in the current directory
% save2bkr('/tmp/*.cnt','/tmp2/','autoscale 5:30, PhysMax=200');
% converts all CNT-files from subdir /tmp/ into BKR files
% and saves them in the directory /tmp2/
%
%
%
% see also: EEGCHKHDR, REGRESS_EOG, SLOAD
% $Revision: 1.22 $
% $Id: save2bkr.m,v 1.22 2004/07/07 11:34:30 schloegl Exp $
% Copyright (C) 2002-2003 by Alois Schloegl <a.schloegl@ieee.org>
% This is part of the BIOSIG-toolbox http://biosig.sf.net/
% This library is free software; you can redistribute it and/or
% modify it under the terms of the GNU Library General Public
% License as published by the Free Software Foundation; either
% Version 2 of the License, or (at your option) any later version.
%
% This library is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
% Library General Public License for more details.
%
% You should have received a copy of the GNU Library General Public
% License along with this library; if not, write to the
% Free Software Foundation, Inc., 59 Temple Place - Suite 330,
% Boston, MA 02111-1307, USA.
FLAG_REGRESS_EOG = 0;
FLAG_REMOVE_DC = 0;
FLAG_AUTOSCALE = 0;
FLAG_DETREND = 0;
FLAG_PHYSMAX = 0;
FLAG_removeDrift = 0;
chansel = 0;
if nargin<2, arg2=[]; end;
if nargin<3,
cali = NaN;
elseif isnumeric(arg3)
cali = arg3;
else
FLAG_REMOVE_DC = findstr(lower(arg3),'removedc');
tmp = findstr(arg3,'autoscale');
if ~isempty(tmp);
[chansel,tmp] = strtok(arg3(tmp+9:length(arg3)),' ;+');
tmp = str2num(chansel);
if isempty(tmp),
fprintf(2,'invalid autoscale argument %s',chansel);
return;
else
FLAG_AUTOSCALE = 1;
chansel = tmp;
end;
end;
tmp = findstr(lower(arg3),'detrend');
if ~isempty(tmp);
[chansel_dt,tmp] = strtok(arg3(tmp+7:length(arg3)),' ;,+');
tmp = str2num(chansel_dt);
if isempty(tmp),
fprintf(2,'invalid detrend argument %s',chansel_dt);
return;
else
FLAG_DETREND = 1;
chansel_dt = tmp;
end;
end;
tmp = findstr(lower(arg3),'removedrift');
if ~isempty(tmp);
[chansel_dt2,tmp] = strtok(arg3(tmp+11:length(arg3)),' ;+');
tmp = str2num(chansel_dt2);
if isempty(tmp),
fprintf(2,'invalid RemoveDrift argument %s',chansel_dt2);
return;
else
FLAG_removeDrift = 1;
chansel_dt2 = tmp;
end;
end;
tmp = findstr(lower(arg3),'regresseog');
if ~isempty(tmp);
[chansel_dt3,tmp] = strtok(arg3(tmp+11:length(arg3)),' ;,+');
[chansel_dt4,tmp] = strtok(tmp,' ;,+');
tmp = str2num(chansel_dt3);
FLAG_REGRESS_EOG = ~isempty(tmp);
if isempty(tmp),
fprintf(2,'invalid REGRESSEOG argument %s',chansel_dt3);
return;
else
FLAG_REGRESS_EOG = 1;
chansel_dt3 = tmp;
end;
tmp = str2num(chansel_dt4);
FLAG_REGRESS_EOG = FLAG_REGRESS_EOG * ~isempty(tmp);
if isempty(tmp),
fprintf(2,'invalid REGRESSEOG argument %s',chansel_dt4);
return;
else
chansel_dt4 = tmp;
end;
end;
tmp = findstr(lower(arg3),'physmax=');
if ~isempty(tmp);
[tmp,tmp1] = strtok(arg3(tmp+8:length(arg3)),' ;,');
PHYSMAX = str2num(tmp);
if isempty(PHYSMAX ),
fprintf(2,'invalid PhysMax argument %s',tmp);
return;
else
FLAG_PHYSMAX = 1;
end;
end;
end;
if isstr(arg1),
inpath = fileparts(arg1);
infile = dir(arg1); % input file
if isempty(infile)
fprintf(2,'ERROR SAVE2BKR: file %s not found.\n',arg1);
return;
end;
outfile = arg2;
elseif isstruct(arg1) & isnumeric(arg2),
HDR = arg1;
data = arg2;
else %if isstruct(arg1) & isnumeric(arg2),
fprintf(2,'Error SAVE2BKR: invalid input arguments\n');
return;
end;
if isstruct(arg1),
%HDR.FileName = destfile; % Assign Filename
if isfield(HDR,'NS')
if HDR.NS==size(data,2),
% It's ok.
elseif HDR.NS==size(data,1),
warning('data is transposed\n');
data = data';
else
fprintf(2,'HDR.NS=%i is not equal number of data columns %i\n',HDR.NS,size(data,2));
return;
end;
else
HDR.NS = size(data,2); % number of channels
end;
if ~isfield(HDR,'NRec'),
HDR.NRec = 1; % number of trials (1 for continous data)
end;
HDR.SPR = size(data,1)/HDR.NRec; % number of samples per trial
%HDR.SampleRate = 100; % Sampling rate
%HDR.Label = hdr.Label; % Labels,
%HDR.PhysMax = max(abs(data(:))); % Physical maximum
%HDR.DigMax = max(2^15-1); % Digital maximum
% --- !!! Previous scaling gave an error up to 6% and more !!! ---
%HDR.Filter.LowPass = 30; % upper cutoff frequency
%HDR.Filter.HighPass = .5; % lower cutoff frequency
HDR.FLAG.REFERENCE = ' '; % reference '', 'LOC', 'COM', 'LAP', 'WGT'
%HDR.FLAG.REFERENCE = HDR.Recording;
HDR.FLAG.TRIGGERED = HDR.NRec>1; % Trigger Flag
if FLAG_REMOVE_DC,
%y = center(y,1);
data = data - repmat(mean(data,1),size(data,1),1);
end;
if chansel == 0;
chansel=1:HDR.NS;
end;
tmp = data(:,chansel);
HDR.PhysMax = max(abs(tmp(:))); %gives max of the whole matrix
HDR.DigMax = 2^15-1; % maximum resulution
for k = 1:HDR.NS,
if any(k==chansel),
data(:,k) = data(:,k)*HDR.DigMax/HDR.PhysMax;
else
mm = max(abs(data(:,k)));
data(:,k) = data(:,k)*HDR.DigMax/mm;
end;
end;
HDR.FLAG.UCAL = 1; % data is de-calibrated, no rescaling within SWRITE
%HDR = eegchkhdr(HDR);
HDR.TYPE = 'BKR';
HDR = sopen (HDR,'w',0); % OPEN BKR FILE
HDR = swrite(HDR,data); % WRITE BKR FILE
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -