Lab Streaming Layer (LSL)
Notes on the data
EDF files
EEG and motion data are stored by EmotivPRO in a standard binary format, EDF, which is compatible with many EEG analysis programs. Following the initial information line, each successive row in the data file corresponds to one data sample, or 1/32, 1/64, 1/128 or 1/256 second time slice of data (depending on your headset’s frequency rate and if the data file is EEG or motion data). Successive rows correspond to successive time slices and each column of the data file corresponds to to an individual sensor location or other information tag.
Emotiv PRO exports your record in 2 separate EDF files:
  • 1 file with the EEG data, the contact quality and the EEG quality
  • 1 file with the motion data
These EDF files follow the EDF specification.

Columns of the EEG file

The EEG file includes these columns:
Column name
Value
TIME_STAMP_s
See below for details
TIME_STAMP_ms
See below for details
COUNTER
Increment by 1 for each sample, reset to zero every second.
INTERPOLATED
0 if this EEG sample was received from the headset. Greater than 0 if this sample was interpolated by Cortex.
<sensor>
Examples: AF3, T7, Pz, T8
For each EEG sensor, you get 1 value in microvolt.
BATTERY
The battery level of the headset, from 0 to 4.
BATTERY_PERCENT
The battery level of the headset, from 0 to 100. It has the same purpose as the column "Battery", but it is more precise.
MARKER_HARDWARE
1 if a hardware marker was received for this EEG sample.
0 otherwise.
Hardware markers are created with the Extender.
CQ_<sensor>
Examples: CQ_AF3, CQ_T7, CQ_Pz, CQ_T8
The contact quality of each EEG sensor, from 0 to 4.
CQ_OVERALL
The overall contact quality is a value from 0 to 100 that is calculated from the contact quality of all the EEG sensors.
EQ_<sensor>
Examples: EQ_AF3, EQ_T7, EQ_Pz, EQ_T8
The EEG quality of each EEG sensor, from 0 to 4.
EQ_SampleRateQua
A float value from 0 to 1 that evaluates the actual sample rate of the EEG data coming from the headset.
If the wireless connection between the headset and the computer is perfect (no data loss) then the sample rate quality is 1. If X percent of the EEG samples were lost over the last 2 seconds, then the SRQ is (100 - X) / 100.
If we lost more than 300 ms of data over the last 2 seconds, then the SRQ takes the special value -1.
EQ_OVERALL
A value from 0 to 100 that is calculated from the EEG quality of all the EEG sensors.

Columns of the motion file

When you export a recording, you will also get an EDF file for the motion data (named "xxx.md.edf"), if that data was collected from your headset. This file is in the same format as the EEG file and with the same descriptive tags.
Column name
Value
TIME_STAMP_s
See below for details
TIME_STAMP_ms
See below for details
COUNTER_MEMS
Increment by 1 for each motion sample, reset to zero every second.
INTERPOLATED_MEM
0 if this motion sample was received from the headset. Greater than 0 if this sample was interpolated by Cortex.
Q0, Q1, Q2, Q3
Quaternions of the gyroscope (newer EMOTIV headsets)
GYROX, GYROY, GYROZ
X, Y, Z axis of the gyroscope (older EMOTIV headsets)
ACCX, ACCY, ACCZ
X, Y, Z axis of the accelerometer.
MAGX, MAGY, MAGZ
X, Y, Z axis of the magnetometer.

The timestamp columns

The EDF files includes 2 columns named "TIME_STAMP_s" and "TIME_STAMP_ms". You need to combine them in order to get a usable timestamp for each sample:
RELATIVE_TIME = TIME_STAMP_s + (TIME_STAMP_ms / 1000)
RELATIVE_TIME is the number of seconds elapsed since the beginning of the record. So it means that the first EEG sample of record has a relative timestamp of zero. The relative timestamp of the last EEG sample gives you the duration of the record.
To get the start date and time of the record, you can read the fields startdate and starttime from the header of the EDF file. However, the field starttime has a precision of 1 second, which is not enough to combine it with the relative timestamps.
Instead, you should read the field reserved of the EDF header. This field stores the start date and time of the record as a string, with a precision of 1 microsecond. The format is YYYY-MM-DDThh:mm:ss.mmmmmm+TIMEZONE Example: 2020-06-19T15:36:47.256794+07:00