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

📄 snapread.m

📁 含有多种ICA算法的eeglab工具箱
💻 M
字号:
% snapread() - Read data in Snap-Master Standard Binary Data File Format%              Reads Snap-Master header and data matrix (nchans,nframes).%              Ref: Users Guide, Snap-Master for Windows (1997) p. 4-19% Usage:%           >> data = snapread(filename);  % read .SMA file data%           >> [data,params,events,head] = snapread(filename,seekframes); %                                          % save parameters, event list% Inputs:%        filename   = string containing whole filename of .SMA file to read%        seekframes = skip this many initial time points {default 0}% Output:%        data   = data matrix, size(nchans,nframes)%        params = [nchannels, nframes, srate]%        events = vector of event frames (lo->hi transitions on event channel);%                 See source to set EVENT_CHANNEL and EVENT_THRESH. %        head   = complete char file header %% Authors: Scott Makeig & Tzyy-Ping Jung, SCCN/INC/UCSD, La Jolla, January 31, 2000 %123456789012345678901234567890123456789012345678901234567890123456789012% Copyright (C) January 31, 2000 from plotdata() Scott Makeig & Tzyy-Ping Jung, SCCN/INC/UCSD,% scott@sccn.ucsd.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% $Log: snapread.m,v $% Revision 1.2  2002/12/06 18:42:18  arno% forcing to ieee-le for reading (-> so that it work under Macintosh)%% Revision 1.1  2002/04/05 17:36:45  jorn% Initial revision%% Scott Makeig & Tzyy-Ping Jung, CNL / Salk Institute / January 31, 2000% 7-13-00 fixed fprintf count print bug -sm% 7-13-00 added arg seekframes -sm & ss% 7-13-00 added test for file length -sm & ss% 2-15-02 change close('all') to fclose('all') -ad% 2-15-02 reformated help & license -ad function [data,params,events,head] = snapread(file,seekframes) EVENT_CHANNEL = 1;   % This channel assumed to store event pulses only!EVENT_THRESH  = 2.3; % Default event threshold (may need to adjust!!!!)if nargin < 2 seekframes = 0;end data   = [];events = [];params = [];head   = [];%%%%%%%%%%%%%%%%%%%%%%%%%%% Open file %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%fid = fopen(file,'r', 'ieee-le');if fid<1  fprintf('\nsnapread(): Could not open file %s.\n\n',file)  returnelse  fprintf('\n  Opened file %s for reading...\n',file);end%%%%%%%%%%%%%%%%%%%%%%%%%%% Read header %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Read header and extract infonumbegin=0;head = [];while ~numbegin,  line =fgets(fid);  head = [head line];  if (length(line)>=8 & line(1:8)=='"NCHAN%"')       nchans=str2num(line(findstr(line,'=')+1:end-1));  end  if (length(line)>= 12 & line(1:12)=='"NUM.POINTS"')       nframes=str2num(line(findstr(line,'=')+1:end-1));  end  if (length(line)>= 10 & line(1:10)=='"ACT.FREQ"')       srate=str2num(line(findstr(line,'=')+1:end-1));  end  if (length(line)>= 4 & line(1:4)=='"TR"')      head = head(1:length(head)-length(line));     line =fgets(fid); % get the time and date stamp line     numbegin=1;  endendparams = [nchans, nframes, srate];fprintf('  Number of channels:    %d\n',nchans);fprintf('  Number of data points: %d\n',nframes);fprintf('  Sampling rate:         %3.1f Hz\n',srate);fseek(fid,1,0); % skip final hex-AA char%%%%%%%%%%%%%%%%%%%% Test for correct file length %%%%%%%%%%%%%%%%%%%%%datstart = ftell(fid); % save current position in filefseek(fid,0,'eof');    % go to file enddatend = ftell(fid);   % report positiondiscrep = (datend-datstart) - nchans*nframes*4;if discrep ~= 0   fprintf(' ***> Note: File length does not match header information!\n')   fprintf('            Difference: %g frames\n',discrep/(4*nchans));endfseek(fid,datstart,'bof'); % seek back to data start%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Read data %%%%%%%%%%%%%%%%%%%%%%%%%%%if seekframes > 0  fprintf('  Omitting first %d frames of data.\n',seekframes)  fprintf('moving %d bytes\n',seekframes*nchans*4);  fsq = fseek(fid,seekframes*nchans*4,'cof')  if fsq<0    fsqerr = ferror(fid);    fprintf('fseek() error: %s\n',fsqerr);    return  endend[data count] = fread(fid,[nchans,nframes],'float'); % read data frameif count<nchans*(nframes-seekframes)  fprintf('\nsnapread(): Could not read %d data frames.\n             Only %g read.\n\n',...       nframes,count/nchans);  returnelse  fprintf('\n  Read %d frames, each one sync channel(%d) and %d data channels.\n',...       nframes,EVENT_CHANNEL,nchans-1);endif nargout>2  fprintf('  Finding event transitions (>%g) on channel %d ...\n',...                             EVENT_THRESH,EVENT_CHANNEL);  events = zeros(EVENT_CHANNEL,nframes);  for n=2:nframes     if abs(data(EVENT_CHANNEL,n-1)) < EVENT_THRESH ...        & abs(data(EVENT_CHANNEL,n)) > EVENT_THRESH             events(n) = 1;     end  end  fprintf('  Total of %d events found.\n',sum(events));  data = data(2:nchans,:);  % eliminate channel 1  fprintf('  Event channel %d removed from output.\n',EVENT_CHANNEL);  params(1) = nchans-1;endfprintf('\n');fclose('all');

⌨️ 快捷键说明

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