I was interested in knowing whether it was possible to observe a P300 with a Muse 2016 EEG headset. EEG channels on the Muse are not positioned ideally for P300. However, EEG potentials diffuses on the whole scalp and it is very likely that we will be able to observe a P300 ERP even if the electrode are far away from the region of interest. The real question is How reliable will be this observation.

So I designed a simple Oddball Paradigm using visual stimulus. I used two type of stimulus, frequent stimulus consisting in a grating with vertical stripes, and rare (target) stimulus with horizontal stripes. The task was to count the number of time I saw the stimulus with horizontal stripes.

Stimulus were presented for 200ms at an interval of 600ms with a random jitter of +- 100ms. I recorded 6 runs of 2 minutes, for a total count of 960 Non-target and 184 Target stimulus.

Epoch average

As preprocessing, I simply filter the signal with a 1 to 30 Hz bandpass filter. Then, Data are epoched from -100ms to 800ms after the stimuli onset. No baseline correction is needed (signal is bandpass filtered) and we reject every epochs were the signal exceed 100uV. This concerns mainly blinks. We then plot the average ERP for both condition, and see if there is something

As we can see, there is a clear and identifiable P300 on electrodes TP9 and TP10. We can see a little bit of activity on AF8 but not on AF7.

The reference of the Muse headset is on FPz, very close to the two frontal electrode. This means that unless there is a left-right local gradient of the potential on the forehead, it is very unlikely that we will observe anything on this two electrodes. This also means that any potential local to the reference will be projected negatively on the TP electrodes. This is why you will only see blinks on the TP electrodes and not on frontal electrodes.

Anyway, here there is no doubt about the presence of a P300 potential.


By averaging the epochs, we can clearly identify and ERP. However this does not tell us anything about the SNR of the P300. I like using a classification pipeline to get a sense of the strength of the P300 response on a single trial basis.

Here I will use 4 different pipelines :

  • Vect + LR : Vectorization of the trial + Logistic Regression. This can be considered as the standard decoding pipeline in MEG / EEG.
  • Vect + RegLDA : Vectorization of the trial + Regularized LDA. This one is very used in P300 BCI. It can outperform the previous one but can become unusable if the number of dimension is too high.
  • ERPCov + TS: ErpCovariance + Tangent space mapping. One of my favorite Riemannian geometry based pipeline.
  • ERPCov + MDM: ErpCovariance + MDM. A very simple, yet effective (for low channel count), Riemannian geometry classifier.

Evaluation is done in cross-validation (20 random split with 25% of the data as validation set), with AUC as metric (AUC is probably the best metric for binary and unbalanced classification problem)

The best pipeline is ERPCov + MDM and yield an average AUC of 0.8. This AUC can be considered as good. An AUC of 1 would mean a perfect classification score, while an AUC of 0.5 corresponds to the change level.


Based on this initial results, we can say that it is possible to observe a P300 with the muse headset. Considering the AUC of 0.8, this can even be used for some BCI application, even if one should not expect outstanding results.

The code and data to reproduce this experiment is available in this repository.