loadavg.m

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

M
169
字号
% loadavg() - loading eeg average data file from Neuroscan into%             matlab. %% Usage:%  >> [signal, variance, chan_names, ...%               pnts, rate, xmin, xmax] = loadavg( filename );%% Inputs:%      filename   -  input Neuroscan .avg file      %      signal	  -  output signal	%      variance   -  variance of the signal %      chan_names -  array that represent the name of the electrodes%% Example: %  % load data into the array named 'signal'%  [signal]=loadavg( 'test.avg' );     %  % plot the signal for the first electrode%  plot( signal(1,:) );	  		%% See also: eeglab()%123456789012345678901234567890123456789012345678901234567890123456789012% Copyright (C) 2001 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% Average binary file format% Average data is stored as 4-byte floats in vectored format for each% channel. Each channel has a 5-byte header that is no longer used. Thus,% after the main file header, there is an unused 5-byte header followed by% erp.pnts of 4-byte floating point numbers for the first channel; then a% 5-byte header for channel two followed by erp.pnts*sizeof(float) bytes,% etc. Therefore, the total number of bytes after the main header is:% erp.nchannels * (5 + erp.pnts*sizeof(float)). To scale a data point to% microvolts, multiply by the channel-specific calibration factor (i.e., for% electrode j: channel[j]->calib) and divide by the number of sweeps in the% average (i.e., channel[j]->n).% $Log: loadavg.m,v $% Revision 1.2  2002/11/04 02:31:51  arno% adding sweeps%% Revision 1.1  2002/04/05 17:39:45  jorn% Initial revision%function [signal, variance, chan_names, pnts, rate, xmin, xmax]=loadavg( FILENAME)if nargin<1 	help loadavg 	return; end;%if isempty(find(FILENAME=='.')) FILENAME=[FILENAME '.eeg']; end;BOOL='int16';ULONG='int32'; FLOAT='float32';fid=fopen(FILENAME,'r','ieee-le');if fid<0	fprintf(2,['Error LOADEEG: File ' FILENAME ' not found\n']);  	return;end;S_nsweeps_offset 		= 362;S_pnts_offset 			= 368;S_nchans_offset 		= 370;S_variance_offset 		= 375;S_rate_offset 			= 376;S_xmin_offset 			= 505;S_xmax_offset 			= 509;packed_sizeof_SETUP 		= 900;% read general part of the erp header and set variables% -----------------------------------------------------%erp = fread(fid, 362, 'uchar');	% skip the firsts 368 bytes%nsweeps = fread(fid, 1, 'ushort');	% number of sweeps%erp = fread(fid, 4, 'uchar'); 	% skip 4 bytes %pnts= fread(fid, 1, 'ushort');	% number of point per waveform%chan= fread(fid, 1, 'ushort');  % number of channels%erp = fread(fid, 4, 'uchar'); 	% skip 4 bytes %rate= fread(fid, 1, 'ushort');  % sample rate (Hz)%erp = fread(fid, 127, 'uchar');	% skip 125 bytes %xmin= fread(fid, 1, 'float32'); % in s%xmax= fread(fid, 1, 'float32'); % in s%erp = fread(fid, 387, 'uchar');	% skip 387 bytes % read # of channels, # of samples, variance flag, and real time bounds% ---------------------------------------------------------------------fseek(fid, S_nsweeps_offset, 'bof');  	nsweeps = fread(fid, 1, 'ushort');fseek(fid, S_pnts_offset, 'bof');  		pnts = fread(fid, 1, 'ushort');fseek(fid, S_nchans_offset, 'bof');	  	chan = fread(fid, 1, 'ushort');fseek(fid, S_variance_offset, 'bof');  	variance_flag = fread(fid, 1, 'uchar');fseek(fid, S_rate_offset, 'bof');  		rate = fread(fid, 1, 'ushort');fseek(fid, S_xmin_offset, 'bof');  		xmin = fread(fid, 1, 'float32');fseek(fid, S_xmax_offset, 'bof');  		xmax = fread(fid, 1, 'float32');fseek(fid, packed_sizeof_SETUP, 'bof');fprintf('number of channels         : %d\n', chan);fprintf('number of points per trial : %d\n', pnts);fprintf('sampling rate (Hz)         : %f\n', rate);fprintf('xmin (s)                   : %f\n', xmin);fprintf('xmax (s)                   : %f\n', xmax);fprintf('number of trials (s)       : %d\n', nsweeps);% read electrode configuration% ----------------------------fprintf('Electrode configuration\n');for elec = 1:chan   	channel_label_tmp = fread(fid, 10, 'uchar');	chan_names(elec,:) = channel_label_tmp';	for index = 2:9 if chan_names(elec,index) == 0 chan_names(elec,index)=' '; end; end;	erp = fread(fid, 47-10, 'uchar');	baseline(elec) = fread(fid, 1, 'ushort');	erp = fread(fid, 10, 'uchar');	sensitivity(elec) = fread(fid, 1, 'float32');	erp = fread(fid, 8, 'uchar');	calib(elec) = fread(fid, 1, 'float32');	fprintf('%s: baseline: %d\tsensitivity: %f\tcalibration: %f\n', chan_names(elec,1:4), baseline(elec), sensitivity(elec), calib(elec));	factor(elec) = calib(elec) * sensitivity(elec) / 204.8;end;xsize    = chan * pnts;buf_size = chan * pnts ;			% size in shortscount_selected = 1;fprintf('Reserving array (can take some time)\n');signal = zeros( chan, pnts*nsweeps);fprintf('Array reserved, scanning file\n');signal   = zeros(pnts, chan);variance = zeros(pnts, chan);for elec = 1:chan	% skip sweeps header and read data		% --------------------------------	fseek(fid, 5, 'cof');	signal(:, elec) = fread(fid, pnts, 'float32') * calib(elec) / nsweeps;end;if variance_flag	for elec = 1:chan		variance(:, elec) = fread(fid, pnts, 'float32');	end;else	variance = 'novariance';end;	signal = signal';variance = variance';fclose(fid);return;

⌨️ 快捷键说明

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