pop_readbdf.m

来自「含有多种ICA算法的eeglab工具箱」· M 代码 · 共 230 行

M
230
字号
% pop_readbdf() - Read Biosemi 24-bit BDF file %% Usage:%   >> EEG = pop_readbdf;             % an interactive window pops up%   >> EEG = pop_readbdf( filename ); % no pop-up window %   >> EEG = pop_readbdf( filename, range, eventchans, ref );%% Graphical interface:%   "Data block range to read" - {edit box] see command line %                    parameter 'range' below.%   "Event channel index(s)" - {edit box] see command line %                    parameter 'eventchans' below.%   "Index(s) of reference channel(s)" - {edit box] see command line %                    parameter 'ref' below.% Inputs:%   filename       - Biosemi 24-bit BDF file name%% Optional input:%   range          - [min max] integer range of data blocks to import.%                    Default is empty -> import all data blocks.%   eventchans     - [integer] event channel index(s). Default: none.%   ref            - [integer] channel index or index(s) for the reference.%                    Reference channels are not removed from the data,%                    allowing easy re-referencing. If more than one%                    channel, data are referenced to the average of the%                    indexed channels. WARNING! Biosemi Active II data %                    are recorded reference-free, but LOSE 40 dB of SNR %                    if no reference is used!. If you do not know which%                    channel to use, pick one and then re-reference after %                    the channel locations are read in. {default: none}% Outputs:%   EEG            - EEGLAB data structure%% Author: Arnaud Delorme, CNL / Salk Institute, 13 March 2002%% See also: openbdf(), readbdf()%123456789012345678901234567890123456789012345678901234567890123456789012% Copyright (C) 13 March 2002 Arnaud Delorme, Salk Institute, arno@salk.edu%% This program is free software; you can redistribute it and/or modify% it under the terms of the GNU General Public License as published by% the Free Software Foundation; either version 2 of the License, or% (at your option) any later version.%% This program 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 General Public License for more details.%% You should have received a copy of the GNU General Public License% along with this program; if not, write to the Free Software% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA% programmed from pop_readedf() version 1.15% $Log: pop_readbdf.m,v $% Revision 1.24  2004/05/24 21:44:32  arno% same%% Revision 1.23  2004/05/24 21:43:47  arno% show number of channels%% Revision 1.22  2004/05/15 22:56:50  scott% edit text%% Revision 1.21  2004/05/08 16:06:01  scott% edited text box, help message%% Revision 1.20  2004/03/20 00:51:25  arno% message%% Revision 1.19  2004/03/19 00:50:25  arno% header msg%% Revision 1.18  2004/03/18 02:09:13  arno% change channel event default%% Revision 1.17  2004/01/29 02:05:03  arno% gui edit%% Revision 1.16  2004/01/29 02:02:53  arno% putting block number in GUI%% Revision 1.15  2003/12/18 00:28:46  arno% reading channel label%% Revision 1.14  2003/12/18 00:10:10  arno% same%% Revision 1.13  2003/12/18 00:08:27  arno% data bug%% Revision 1.12  2003/12/18 00:03:37  arno% debug% last%% Revision 1.11  2003/12/18 00:02:00  arno% remove event channels%% Revision 1.10  2003/12/17 19:01:16  arno% do not remove reference channels%% Revision 1.9  2003/12/17 17:48:40  arno% adding entry for reference%% Revision 1.8  2003/12/11 20:07:59  arno% eventindices -> eventchans% .,%% Revision 1.7  2003/12/11 20:01:48  arno% debug history%% Revision 1.6  2003/12/11 19:23:50  arno% header and now import events automatically%% Revision 1.5  2003/11/04 01:22:40  arno% removing warnings%% Revision 1.4  2003/10/13 17:42:44  arno% fix blockrage%% Revision 1.3  2003/10/10 17:11:12  arno% fixing default arg%% Revision 1.2  2003/08/29 18:44:16  arno% adding gui for block range%% Revision 1.1  2003/06/05 15:38:44  arno% Initial revision%function [EEG, command] = pop_readbdf(filename, blockrange, eventchans, ref); EEG = [];command = '';if nargin < 2    blockrange = [];end;if nargin < 3    eventchans = [];end;if nargin < 4    ref = [];end;if nargin < 1 	% ask user	[filename, filepath] = uigetfile('*.BDF;*.bdf', 'Choose an BDF file -- pop_readbdf()');     drawnow;    	if filename == 0 return; end;	filename = [filepath filename];    disp('We highly recommend that you choose a reference channel IF these are Biosemi data');    disp('(e.g., a mastoid or other channel). Otherwise the data will lose 40 dB of SNR!');        dat = openbdf(filename);    promptstr    = { [ 'Data block range to read (default all [1 ' int2str(dat.Head.NRec) '])' ]                     [ 'Event channel number(s) (default:none [1-' int2str(dat.Head.NS)  '])' ]                     'If Biosemi data, reference chan(s) number(s)' };    inistr       = { '' '' '' };    result       = inputdlg2( promptstr, 'Import BDF file -- pop_readbdf()', 1,  inistr, 'pop_readbdf');    if length(result) == 0 return; end;    blockrange   = eval( [ '[' result{1} ']' ] );    eventchans   = eval( [ '[' result{2} ']' ] );    ref          = eval( [ '[' result{3} ']' ] );end;% load datas% ----------EEG = eeg_emptyset;fprintf('Reading BDF data in 24-bit format...\n');dat = openbdf(filename);if isempty(blockrange)    blockrange = [1 dat.Head.NRec];end;vectrange = [blockrange(1):min(blockrange(2), dat.Head.NRec)];DAT=readbdf(dat,vectrange);EEG.nbchan          = size(DAT.Record,1);EEG.srate           = dat.Head.SampleRate(1);EEG.data            = DAT.Record;EEG.pnts            = size(EEG.data,2);EEG.trials          = 1;EEG.setname 		= 'BDF file';disp('Event information might be encoded in the last channel');disp('To extract these events, use menu File > Import event info > From data channel'); EEG.filename        = filename;EEG.filepath        = '';EEG.xmin            = 0; EEG.chanlocs        = struct('labels', cellstr(dat.Head.Label));EEG = eeg_checkset(EEG);% extract events% --------------disp('Extracting events...');if ~isempty(eventchans)    if any(eventchans > EEG.nbchan) | any(eventchans < 1)        error('Event channel index or indices out of range');    end;    disp('Applying 8-bit masks to event channels (only for BIOSEMI files).');    EEG.data(eventchans,:) = bitand(EEG.data(eventchans,:), 255);    EEG = pop_chanevent(EEG, eventchans, 'edge', 'leading', 'delchan', 'on');end;% rerefencing% -----------disp('Re-referencing...');if ~isempty(ref)    if ~isempty(eventchans) & any(ref > eventchans(1))        error('Event channel index cannot be before ref channel index, contact arno@salk.edu');    end;    EEG.data = EEG.data - repmat(mean(EEG.data(ref,:),1), [size(EEG.data,1) 1]);    if length(ref) == 1        disp([ 'Warning: channel ' int2str(ref) ' is now zeroed (but still present in the data)' ]);    else        disp([ 'Warning: data matrix rank has decreased through re-referencing' ]);    end;end;% history% -------if ~isempty(blockrange) | ~isempty(eventchans)    command = sprintf('EEG = pop_readbdf(''%s'', %s);', filename, vararg2str({blockrange eventchans ref})); else    command = sprintf('EEG = pop_readbdf(''%s'');', filename); end;    return;

⌨️ 快捷键说明

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