Contributions:Emotiv

From BCI2000 Wiki
Jump to navigation Jump to search

Synopsis

The Emotiv DAQ is an in-expensive yet fully featured EEG device. It is aimed toward the gaming market, but with a purchase of the "Research Edition" of the Emotiv SDK, raw EEG can be acquired from the device for use in BCI2000. This documentation details the Emotiv source module.

Location

http://www.bci2000.org/svn/branches/3.0/src/contrib/SignalSource/Emotiv

Versioning

Authors

Griffin Milsap (griffin.milsap@gmail.com) Rensselaer Polytechnic Institute

Version History

Source Code Revisions

Functional Description

Acquires signal data from the Emotiv device. Also captures gyro data and writes it to states.

The output from the Emotiv is in muV, however it has quite a large DC Offset of about 4000~4200 units. The remaining DC offset comes from such factors as stored potential in the subject, and offsets added in the library to facilitate plotting. As such, a 0.1 Hz high pass filter is applied in the source module to the output signal. This effectively eliminates extra DC Offset. You will notice a "Settling Time" before the signals all reach an approximate 0 DC Offset. This time is about 10 to 15 seconds. It would be advisable to wait until the signal has settled out before proceeding.

Installation

Compile the Emotiv module using CMake and your compiler. Currently only Visual Studio libraries for the Emotiv API are provided. The resulting Emotiv.exe should be placed in the prog directory automatically. Copy the edk.dll and edk_utils.dll found in http://www.bci2000.org/svn/branches/3.0/src/contrib/SignalSource/Emotiv/dll to the prog directory for the module to work.

It is advisable to run the "Emotiv Testbench" alongside the BCI2000 module for a realtime visualization of the Emotiv Contact Quality and other important states.

Parameters

  • SourceCh must be set to 14. The Emotiv has 14 channels not counting the ground and ref.
  • SamplingRate must be set to 128. The current Emotiv device only outputs 128 samples per second, though its internal sample rate before filtering is 2048 Hz.
  • SampleBlockSize is the number of samples to acquire for every system clock. The recommended value here is 4, causing 128/4 or 32 system clocks per second.
  • ChannelNames is a list of names for the channels in the output signal. According to the 10-20 International system, this should be set to "AF3 F7 F3 FC5 T7 P7, O1, O2 P8 T8 FC6 F4 F8 AF4" . You can set the channel names to whatever you would like, but the module will still warn you if the channel names are not set likewise.
  • SourceChOffset is a list of DC offsets to be applied to the signal output before the signal leaves the source module. Due to the filtering done by the source module, a DC Offset of 0 is required for each channel
  • SourceChGain is a list of signal gains which transform the signal output to muV. The API already provides output in muV. The SourceChGain must be set to 1 for each channel.
  • ConnectionType defines the way you would like to connect to the device. If you're using SDKLite, you'll need to connect to the device through the EmoComposer program. If you choose "EmoComposer" for this parameter, you must also set EmoComposerIP. If you're using a direct connection and you have a research edition of the Emotiv device connected to the same computer, just leave this parameter as "Direct". NOTE: EmoComposer connections are untested in this program, though they should work. It should be noted, however, that connecting to the device through EmoComposer may result in poor system performance due to the nature of a socketed connection to another program which is acquiring the signal.
  • EmoComposerIP is where you put the IP of the computer running the EmoComposer software. This parameter is NOT REQUIRED if you're using a "Direct" connection. See "ConnectionType" for more details.

States

  • EmotivGyroX is a 32 bit floating point number which represents the x axis of the onboard Emotiv gyro.
  • EmotivGyroY is a 32 bit floating point number which represents the y axis of the onboard Emotiv gyro.

These states are helpful for distinguishing head movements and using them to filter artifacts from your signal. Note: These states are interpreted by the BCI2000 system to be 32 bit integers. If you interpret these numbers at the bit level to be IEEE 754 Floating point numbers, you get the gyro output.

  • EmotivCQXXX is a 4 bit integer which corresponds to the contact quality of a specific electrode on the Emotiv EPOC. The possible values are as follows:

0: No Contact. Appears black in TestBench.

1: Very Bad Contact. Appears red in TestBench.

2: Poor Contact. Appears orange in TestBench.

3: Fair Contact. Appears yellow in TestBench.

4: Good Contact. Appears green in TestBench.

Future Work

Due to the nature of the signal processing that the Emotiv Software suite provides, it is possible to record facial movements such as eye blinks and jaw clenching into the states as well. This could allow for detailed filtering of signal artifacts from the output and could greatly enhance the quality of the final recording. These states are in the works.

See also

User Reference:Filters, Contributions:ADCs