load_neuroscan.m

来自「绝对经典,老外制作的功能强大的matlab实现PLS_TOOBOX」· M 代码 · 共 1,009 行 · 第 1/4 页

M
1,009
字号
   SETUP.NotchFilter	= fread(fid,1,'char')';			% 682 + 1
   SETUP.HeadGain	= fread(fid,1,'int16')';		% 683 + 2
   SETUP.AdditionalFiles = fread(fid,1,'int32')';		% 685 + 4
   SETUP.unused		= fread(fid,5,'*char')';		% 689 + 5
   SETUP.FspStopMethod	= fread(fid,1,'int16')';		% 694 + 2
   SETUP.FspStopMode	= fread(fid,1,'int16')';		% 696 + 2
   SETUP.FspFvalue	= fread(fid,1,'float32')';		% 698 + 4
   SETUP.FspPoint	= fread(fid,1,'int16')';		% 702 + 2
   SETUP.FspBlockSize	= fread(fid,1,'int16')';		% 704 + 2
   SETUP.FspP1		= fread(fid,1,'uint16')';		% 706 + 2
   SETUP.FspP2		= fread(fid,1,'uint16')';		% 708 + 2
   SETUP.FspAlpha	= fread(fid,1,'float32')';		% 710 + 4
   SETUP.FspNoise	= fread(fid,1,'float32')';		% 714 + 4
   SETUP.FspV1		= fread(fid,1,'int16')';		% 718 + 2
   SETUP.montage	= fread(fid,40,'*char')';		% 720 + 40
   SETUP.EventFile	= fread(fid,40,'*char')';		% 760 + 40
   SETUP.fratio		= fread(fid,1,'float32')';		% 800 + 4
   SETUP.minor_rev	= fread(fid,1,'char')';			% 804 + 1
   SETUP.eegupdate	= fread(fid,1,'int16')';		% 805 + 2
   SETUP.compressed	= fread(fid,1,'char')';			% 807 + 1
   SETUP.xscale		= fread(fid,1,'float32')';		% 808 + 4
   SETUP.yscale		= fread(fid,1,'float32')';		% 812 + 4
   SETUP.xsize		= fread(fid,1,'float32')';		% 816 + 4
   SETUP.ysize		= fread(fid,1,'float32')';		% 820 + 4
   SETUP.ACmode		= fread(fid,1,'char')';			% 824 + 1
   SETUP.CommonChnl	= fread(fid,1,'char')';			% 825 + 1
   SETUP.Xtics		= fread(fid,1,'char')';			% 826 + 1
   SETUP.Xrange		= fread(fid,1,'char')';			% 827 + 1
   SETUP.Ytics		= fread(fid,1,'char')';			% 828 + 1
   SETUP.Yrange		= fread(fid,1,'char')';			% 829 + 1
   SETUP.XScaleValue	= fread(fid,1,'float32')';		% 830 + 4
   SETUP.XScaleInterval	= fread(fid,1,'float32')';		% 834 + 4
   SETUP.YScaleValue	= fread(fid,1,'float32')';		% 838 + 4
   SETUP.YScaleInterval	= fread(fid,1,'float32')';		% 842 + 4
   SETUP.ScaleToolX1	= fread(fid,1,'float32')';		% 846 + 4
   SETUP.ScaleToolY1	= fread(fid,1,'float32')';		% 850 + 4
   SETUP.ScaleToolX2	= fread(fid,1,'float32')';		% 854 + 4
   SETUP.ScaleToolY2	= fread(fid,1,'float32')';		% 858 + 4
   SETUP.port		= fread(fid,1,'int16')';		% 862 + 2
   SETUP.NumSamples	= fread(fid,1,'int32')';		% 864 + 4
   SETUP.FilterFlag	= fread(fid,1,'char')';			% 868 + 1
   SETUP.LowCutoff	= fread(fid,1,'float32')';		% 869 + 4
   SETUP.LowPoles	= fread(fid,1,'int16')';		% 873 + 2
   SETUP.HighCutoff	= fread(fid,1,'float32')';		% 875 + 4
   SETUP.HighPoles	= fread(fid,1,'int16')';		% 879 + 2
   SETUP.FilterType	= fread(fid,1,'char')';			% 881 + 1
   SETUP.FilterDomain	= fread(fid,1,'char')';			% 882 + 1
   SETUP.SnrFlag	= fread(fid,1,'char')';			% 883 + 1
   SETUP.CoherenceFlag	= fread(fid,1,'char')';			% 884 + 1
   SETUP.ContinuousType	= fread(fid,1,'char')';			% 885 + 1
   SETUP.EventTablePos	= fread(fid,1,'int32')';		% 886 + 4
   SETUP.ContinuousSeconds = fread(fid,1,'float32')';		% 890 + 4
   SETUP.ChannelOffset	= fread(fid,1,'int32')';		% 894 + 4
   SETUP.AutoCorrectFlag = fread(fid,1,'char')';		% 898 + 1
   SETUP.DCThreshold	= fread(fid,1,'char')';			% 899 + 1
								% 900 total
   return;					% read_SETUP


%---------------------------------------------------------------------
function ELECTLOC = read_ELECTLOC(fid)

   %  Original structures	 
   %  typedef struct {          /* Electrode structure  ------------------- */
   %    char  lab[10];          /* Electrode label - last bye contains NULL */
   %    char  reference;        /* Reference electrode number               */
   %    char  skip;             /* Skip electrode flag ON=1 OFF=0           */
   %    char  reject;           /* Artifact reject flag                     */
   %    char  display;          /* Display flag for 'STACK' display         */
   %    char  bad;              /* Bad electrode flag                       */
   %    unsigned short int n;   /* Number of observations                   */
   %    char  avg_reference;    /* Average reference status                 */
   %    char  ClipAdd;          /* Automatically add to clipboard           */
   %    float x_coord;          /* X screen coord. for 'TOP' display        */
   %    float y_coord;          /* Y screen coord. for 'TOP' display        */
   %    float veog_wt;          /* VEOG correction weight                   */
   %    float veog_std;         /* VEOG std dev. for weight                 */
   %    float snr;              /* signal-to-noise statistic                */
   %    float heog_wt;          /* HEOG Correction weight                   */
   %    float heog_std;         /* HEOG Std dev. for weight                 */
   %    short int baseline;     /* Baseline correction value in raw ad units*/
   %    char  Filtered;         /* Toggel indicating file has be filtered   */
   %    char  Fsp;              /* Extra data                               */
   %    float aux1_wt;          /* AUX1 Correction weight                   */ 
   %    float aux1_std;         /* AUX1 Std dev. for weight                 */
   %    float sensitivity;      /* electrode sensitivity                    */
   %    char  Gain;             /* Amplifier gain                           */
   %    char  HiPass;           /* Hi Pass value                            */
   %    char  LoPass;           /* Lo Pass value                            */
   %    unsigned char Page;     /* Display page                             */
   %    unsigned char Size;     /* Electrode window display size            */
   %    unsigned char Impedance;/* Impedance test                           */
   %    unsigned char PhysicalChnl; /* Physical channel used                */
   %    char  Rectify;           /* Free space                              */
   %    float calib;            /* Calibration factor                       */
   %  }ELECTLOC;

   %  Struct							% off + size
   ELECTLOC.lab			= fread(fid,10,'*char')';	% 0 + 10
   ELECTLOC.reference		= fread(fid,1,'char')';		% 10 + 1
   ELECTLOC.skip		= fread(fid,1,'char')';		% 11 + 1
   ELECTLOC.reject		= fread(fid,1,'char')';		% 12 + 1
   ELECTLOC.display		= fread(fid,1,'char')';		% 13 + 1
   ELECTLOC.bad			= fread(fid,1,'char')';		% 14 + 1
   ELECTLOC.n			= fread(fid,1,'uint16')';	% 15 + 2
   ELECTLOC.avg_reference	= fread(fid,1,'char')';		% 17 + 1
   ELECTLOC.ClipAdd		= fread(fid,1,'char')';		% 18 + 1
   ELECTLOC.x_coord		= fread(fid,1,'float32')';	% 19 + 4
   ELECTLOC.y_coord		= fread(fid,1,'float32')';	% 23 + 4
   ELECTLOC.veog_wt		= fread(fid,1,'float32')';	% 27 + 4
   ELECTLOC.veog_std		= fread(fid,1,'float32')';	% 31 + 4
   ELECTLOC.snr			= fread(fid,1,'float32')';	% 35 + 4
   ELECTLOC.heog_wt		= fread(fid,1,'float32')';	% 39 + 4
   ELECTLOC.heog_std		= fread(fid,1,'float32')';	% 43 + 4
   ELECTLOC.baseline		= fread(fid,1,'int16')';	% 47 + 2
   ELECTLOC.Filtered		= fread(fid,1,'char')';		% 49 + 1
   ELECTLOC.Fsp			= fread(fid,1,'char')';		% 50 + 1
   ELECTLOC.aux1_wt		= fread(fid,1,'float32')';	% 51 + 4
   ELECTLOC.aux1_std		= fread(fid,1,'float32')';	% 55 + 4
   ELECTLOC.sensitivity		= fread(fid,1,'float32')';	% 59 + 4
   ELECTLOC.Gain		= fread(fid,1,'char')';		% 63 + 1
   ELECTLOC.HiPass		= fread(fid,1,'char')';		% 64 + 1
   ELECTLOC.LoPass		= fread(fid,1,'char')';		% 65 + 1
   ELECTLOC.Page		= fread(fid,1,'char')';		% 66 + 1
   ELECTLOC.Size		= fread(fid,1,'char')';		% 67 + 1
   ELECTLOC.Impedance		= fread(fid,1,'char')';		% 68 + 1
   ELECTLOC.Physicalchnl	= fread(fid,1,'char')';		% 69 + 1
   ELECTLOC.Rectify		= fread(fid,1,'char')';		% 70 + 1
   ELECTLOC.calib		= fread(fid,1,'float32')';	% 71 + 4
								% 75 total
   return;					% read_ELECTLOC


%---------------------------------------------------------------------
function TEEG = read_TEEG(fid, SETUP)

   fseek(fid,SETUP.EventTablePos,'bof');

   %  Original structures
   %  typedef struct{
   %     unsigned char Teeg;	// 1 for event type 1; 2 for event type 2
   %     long Size;
   %     union {
   %         void *Ptr;      //Memory pointer
   %         long Offset;    //Relative file position 
   %                         //0 Means the data start immediately
   %                         //>0 Means the data starts at a relative offset
   %                         // from current position at the end of the tag
   %     };
   %  } TEEG;

   %  Struct							% off + size
   TEEG.Teeg	= fread(fid,1,'char')';				% 0 + 1
   TEEG.Size	= fread(fid,1,'int32')';			% 1 + 4
   TEEG.Offset	= fread(fid,1,'int32')';			% 5 + 4
								% 9 total
   return;					% read_TEEG


%---------------------------------------------------------------------
function EVENT = read_EVENT(fid, ns)

   if ns.TEEG.Teeg == 1				% event type 1

      %  Original structures
      %  typedef struct{
      %     unsigned short	StimType; //range  0-65535
      %     unsigned char	KeyBoard; // corresponding to function keys+1
      %     unsigned char	KeyPad:4; //range  0-15  bit coded response pad
      %					  //values 0xd=Accept 0xc=Reject 
      %     long 		Offset;   //file offset of event  
      %  } EVENT1;

      %  Struct							% off + size
      EVENT.StimType	= fread(fid,1,'uint16')';		% 0 + 2
      EVENT.Keyboard	= fread(fid,1,'char')';			% 2 + 1
      EVENT.KeyPad	= fread(fid,1,'char')';			% 3 + 1
      EVENT.Offset	= fread(fid,1,'int32')';		% 4 + 4
								% 8 total
   elseif ns.TEEG.Teeg == 2			% event type 2

      %  Original structures
      %  typedef struct{
      %     EVENT1	Event1; 
      %     short	Type;
      %     short	Code;       
      %     float32	Latency;
      %     char	EpochEvent;
      %     char	Accept;
      %     char	Accuracy;
      %  } EVENT2;

      %  Struct							% off + size
      EVENT.StimType	= fread(fid,1,'uint16')';		% 0 + 2
      EVENT.Keyboard	= fread(fid,1,'char')';			% 2 + 1
      EVENT.KeyPad	= fread(fid,1,'char')';			% 3 + 1
      EVENT.Offset	= fread(fid,1,'int32')';		% 4 + 4
      EVENT.Type	= fread(fid,1,'int16')';		% 8 + 2
      EVENT.Code	= fread(fid,1,'int16')';		% 10 + 2
      EVENT.Latency	= fread(fid,1,'float32')';		% 12 + 4
      EVENT.EpochEvent	= fread(fid,1,'char')';			% 16 + 1
      EVENT.Accept	= fread(fid,1,'char')';			% 17 + 1
      EVENT.Accuracy	= fread(fid,1,'char')';			% 18 + 1
								% 19 total
   else
      error('Invalid Event table for continuous NeuroScan data');
   end

   %  Make EVENT.Offset relative to the first time point
   %  (original EVENT.Offset was file offset position)
   %
   EVENT.Offset = ...
	( EVENT.Offset - (900 + 75 * ns.SETUP.nchannels) ) / ns.SETUP.nchannels;

   %  Convert EVENT.Offset (in bytes) to EVENT.Offset (in data points)
   %  since each data point is 2-byte (16-bit short integer)
   %
   if strcmpi(ns.precision, 'int32')
      EVENT.Offset = EVENT.Offset / 4;
   else
      EVENT.Offset = EVENT.Offset / 2;
   end;

   return;					% read_EVENT


%---------------------------------------------------------------------
function SWEEP = read_SWEEP(fid, SETUP)

   %  Original structures
   %  typedef struct{
   %     char accept;		/* accept byte	*/
   %     short ttype;		/* trial type	*/
   %     short correct;		/* accuracy	*/
   %     float rt;		/* reaction time */
   %     short response;	/* response type */
   %     short reserved;	/* not used	*/
   %  } SWEEP_HEAD;

   %  Struct							% off + size
   SWEEP.accept	  = fread(fid,1,'char')';			% 0 + 1
   SWEEP.ttype	  = fread(fid,1,'int16')';			% 1 + 2
   SWEEP.correct  = fread(fid,1,'int16')';			% 3 + 2
   SWEEP.rt	  = fread(fid,1,'float32')';			% 5 + 4
   SWEEP.response = fread(fid,1,'int16')';			% 9 + 2
   SWEEP.reserved = fread(fid,1,'int16')';			% 11 + 2
								% 13 total
   return;					% read_SWEEP

⌨️ 快捷键说明

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