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 + -
显示快捷键?