Skip to content
This repository has been archived by the owner on Mar 19, 2024. It is now read-only.

The System

Daniellewt edited this page Mar 26, 2020 · 1 revision

Here you will find information on how the MindAffect BCI works.

System Overview

The MindAffect BCI is an easy to use BCI built on the openBCI Ganglion to run the EEG acquisition and a linux based computer to run the EEG analysis algorithms. In this case we have provided a raspberry PI model 3a to run the BCI. The system consists of 4 main components:

  1. EEG System : measures EEG from the subjects. Initially, this is the OpenBCI Ganglion with 4 EEG electrodes (+1 ref and 1 ground).
  2. Decoder: This is the system which runs the BCI algorithms. This is the rPI with the MindAffect image, containing all the code, running on it. It receives the EEG from the amplifier and the presentation information, and sends the predictions to the presentation device.
  3. Presentation device: This is the system which presents the stimulus to the user and allows them to make selections. Ie. this can be an “app” running on a tablet or a program running on a laptop/PC. This can be in different languages/platforms. Choose the repository that suits you (ie. Python, Unity).
  4. Output device: This can be the same as the presentation device (such as making selections on a keyboard presented in Python), but can also control different output devices (for example a lego-robot, or a drone).

The MindAffect BCI, is a cVEP BCI, based on code-modulated flickers, meaning that each button/object flickers with its own pattern. These patterns are referred to as Noisetags. These flickers are also represented in the occipital cortex of the brain (where your visual input comes in), this part lays in the back of the brain.

Noisetag

Noisetagging describes the flicker patterns of the stimuli. These flickers are represented by 0 (off/dark) and 1 (on/light). We tell our presentation module which pattern to use for each button, by using a codebook.

A codebook is a matrix of 1's and 0's, where each column defines the bits for one moment for all noise tags. This means that every row represents the flicker pattern for one button. Logically, the more buttons you want to use, the longer your patterns have to be (as each pattern has to be different).

An example is the mgold_61_6521_psk_60Hz.txt, which is included in the standard SDK. The mgold_61_6521_psk_60Hz.txt sequence is a modulated gold code, meaning that it follows the Gold sequence (meaning they have bounded small cross-correlations between the codes). It is modulated to have no more that two of the same bits follow each other. This helps in terms of speed of classification.

If you want to change the noisetagging patterns; follow the format of the example file. Starting with

# gold @ 60hz
#stimTime: (1,'length of pattern')
0	17	33	50	67	83	100	... etc
#stimSeq : ('number of buttons','length of pattern')
Clone this wiki locally