EEG Data
Data Types for EEG in Matlab
The structure holding continuous (i.e., not epoched) EEG signals is denoted by cnt. The following list shows its typical fields.
cnt |
Structure of continuous signals |
.x |
The EEG signals as 2-D array of size [T nChannels] with time along the first and channels along the second dimension. |
.fs |
The sampling rate, unit [samples per second]. |
.clab |
Channel labels, stored as strings in a cell array. |
.title |
Title of the data set (string), used by some visualization functions. (This field should not be obligatory, but some functions may try access this field, without prior checking its existance. If so the function should be corrected.) |
The structure holding epoched EEG signals (i.e., a series of short-time windows of equal length) is denoted by epo. (This structure is not resticted to time domain signals, although it is suggested by some notions, e.g. the field .t).
epo |
Structure of epoched signals. |
.x |
The EEG epochs as 3-D array of size [T nChannels nEpochs] with time along the rst, channels along the second, and epochs along the third dimension. (Thus, an epoch structure holding only one epoch is a special case of continuous signal structure.) |
.t |
Time line, vector of length T, i.e., the size of the rst dimension of epo.x. In the frequency domain, this eld holds the frequencies. |
.y |
Class labels of the epochs as 2-D array of size [nClasses nEpochs]. The i-th row indicates class membership with class i (0 means no member-ship, 1 means membership), see Sec. A.1. |
.className |
Cell array of strings defining names of the classes. |
.fs |
The sampling rate, unit [samples per second]. |
.clab |
Channel labels, stored as strings in a cell array. |
.title |
Title of the data set (string), used by some visualization functions. (This field should not be obligatory, but some functions may try access this field, without prior checking its existance. If so the function should be corrected.) |
.file |
The file name (string) of the data set (with absolute path). When the data set is a concatenation of several files, this field is a cell array of strings. (This eld is only use by some special functions.) |
The epo structure can have more optional fi elds. They should be copied by processing functions, see Sec. 4. When you include fi elds that specify data ranging over all epochs, be sure that epochs are indexed by the last dimension and define a (or extend the) field .indexedByEpochs as cell array holding the names of all such fields. (Fields .x and .y are automatically treated as indexedByEpochs.) Only then processing functions like proc_selectEpochs or proc_selectClasses can work correctly.
The structure holding marker (or event) information is denoted by mrk. Using this structure you can segment continuous EEG signals into epochs by the function makeEpochs.
mrk |
Structure of marker (or event) information: |
.pos |
Positions of markers in the continuous signals as array of size [1 nEvents]. The unit is sample, i.e., it is relative to the sampling rate mrk.fs. |
.y |
Class labels of the evnts as 2-D array of size [nClasses nEvents]. The i-th row indicates class membership with class i (0 means no membership, 1 means membership), see Sec. A.1. |
.className |
Cell array of strings defining names of the classes. |
.fs |
The sampling rate, unit [samples per second]. |
This structure can optionally have more fields, with are transfer to the epo structure, when creating epochs. See also the note in the description of the epo structure.
The electrode montage structure, denoted by mnt, holds the information of (1) the spatial arrangement of the electrodes on the scalp and (2) the arrangement of subplot axes for multi-channel plots.
mnt |
Structure of electrode montage and channel layout: |
.clab |
Channel labels, stored as strings in a cell array. |
.pos_3d |
array of size [3 nChannels] holding the 3-dimensional positions of the electrode. (Not used by the toolbox so far.) |
.x |
horizontal coordinates of 2D-projected electrode positions. ('Horizontal' refers to our standard scalp view from the top with nose up.) |
.y |
vertical coordinates of 2D-projected electrode positions. ('Vertical' refers to our standard scalp view from the top with nose up.) |
.box |
array of size [2 nChannels] or [2 nChannels+1] defining the positions of subplot axes for multi-channel views. The first row holds the horizontal, and the second row the vertical position. The positions have an arbitrary unit, they are taken relative. The optimal last column denotes the position of the legend. |
.box_sz |
array of size [2 nChannels] or [2 nChannels+1] defining the size of subplot axes for multi-channel views. The first row holds the horizontal, and the seconds row the vertical size. |
.scale_box |
optional field of size [2 1] holding the position of an axes in which the scale is indicated. |
.scale_box_sz |
optimal field of size [2 1] defining the size (horizontal and vertical) of the scale subaxes. |
Location of Data Files
The data that we record (using the BrainVision Recorder) is stored in raw format in a subdirectory of EEG_RAW_DIR (global variable). The naming scheme for the subdirectories is Subject_yy_mm_dd, e.g., Gabriel_02_11_24. One data set in BrainVision generic data format consists for three files: (1) a binary data file, extension .eeg, (2) a header file holding information on the settings of the recording as sampling rate, used channels, etc., extension .vhdr, and (3) a marker file, extension .vmrk. Data we receive in other formats from other labs are stored in a subdirectory of EEG_IMPORT_DIR.
Preprocessed data is stored in matlab format in a subdirectory of EEG_MAT_DIR. The name of this subdirectory should be the same as that of the raw data. Typically the data is stored in a version which is just downsampled and in a version which is filtered and downsampled for display purpose. The former fi le is called like the original data, and the latter has the appendix _display. Each matlab file should include the variables cnt, mrk and mnt, see Section 2.1.
Loading Data which is in the Original Generic Data Format
For the EEG experiments, that we record at our lab, we store data in "preprocessed" formats see Sec. 2.2. One version is just downsampled, which can also be done when reading the original data (using readGenericEEG). But loading the preprocessed data (using eegfile_loadMatlab) has the advantage that the markers are already brought to a nice format. If you want to load data in this convenient way, see Sec. 2.4. Otherwise read on in this section.
cnt = readGenericEEG(file, [clab, fs, from, maxlen]);
This function can be used to load data which is in BrainVision's generic data format. So far it is quite constrained to take only specific variants of the general generic data format. Data must be multiplexed and in the binary format INT16. (To read data in binary format float there is the function readGenericEEG_float: should be integrated in one function?) To determine the available channels or the length of the data use the function readGenericHeader.
file |
is taken relative to EEG_RAW_DIR, unless it starts with the character '/'. (Under Windows the condition for an absolute pathname is that the second character is a ':'.) |
clab |
labels of the channels to be loaded. |
fs |
sampling rate to which the original data are to be downsampled. The default value is 100. This works only when fs is a divisor of the original sampling rate. To read data in the original sampling rate use 'raw'. |
from |
is the start in msec from which data is to be read. |
maxlen |
is the maximum length of data in msec to be read. |
Output:
cnt |
struct of continous EEG data, as described in Section 2.1. |
See also: eegfile_loadMatlab, readGenericHeader, readGenericMarkers.
[clab, scale, fs, endian, len] = readGenericHeader(file);
This function is used by readGenericEEG. It can also be called directly to determine the original sampling rate, the length of the signals and the recorded channels.
file |
is the name of the header file (without the extension .vhdr). The same applies as for read readGenericEEG. |
Output:
clab |
cell array of electrode labels. |
scale |
vector specifying the scaling factor for each channel by which each sample value (in INT16 format) has to be multiplied to obtain the µV value. |
fs |
sampling rate in which the signals are stored. |
endian |
big ('b') or little ('l') endian byte order. |
len |
length of the EEG signals in seconds. |
Mrk = readGenerikMarkers(file, [outputStructArray]);
This function reads all markers of BrainVision's generic data format. If you are only interested in 'Stimulus' and 'Response' markers, readMarkerTable is your friend. Note: this function returns the markers in the original sampling rate. In contrast, readMarkerTable returns markers by default resampled to 100 Hz.
||file || is the name of the header file (without the extension .vmrk). The same applies as for readGenericEEG.
outputStructArray |
specifies the output format, default 1. If false the output is a struct of arrays, not a struct array. |
Output:
||Mrk|| struct array of markers with fields type, desc, pos, length, chan, time which are defined in the BrainVision generic data format, see the comment lines in any *.vmrk marker file. || || fs || sampling rate, as read from the corresponding header file. ||
See also: readMarkerTable, readGenericHeader.