A couple of weeks ago, I received the new Ganglion board from OpenBCI. This 200$, 4 channels EEG amplifier looks quite promizing. The board has a very interesting design. They got rid of the expensive ADS1299 EEG front-end for a fully custom solution made of discrete components. The amplification relies on the AD8237 differential amplifier and the digitalization is achieved by the MCP3912, a 4 channels, 24-bits ADC designed for power meters. I happen to know well this ADC since I also use the 6-channels version for my own EEG amplifier.

One very interesting feature of the amplification front-end is that they implemented a feedback loop to correct DC-offset of the differential signal. In practice, it means that it will keep the signal centered so the amplifier will not saturates when the offset between the reference electrode and the signal electrode is very large. This was a common issue with the previous OpenBCI board. This is great because we can finally try to play with electrodes materials that generate bigger offset. This was the case for my gold-platted Dry electrodes.

They also implemented an electrode impedance measurement system. This is not a feature I will use (I have enough EEG experience to visually detect bad channels) but I understand it can be useful for less experienced users.

Data streaming is done through Bluetooth Low Energy, which impose strong limitation on the sampling frequency. They even had to compress signals to be able to get the 4 channels at 200Hz. Anyway, 200Hz is more than enough for a lot of application so it won’t be an issue. The ADC is capable of sampling at much higher frequency without major degradation of SNR, so to unlock the full potential of this board, we have to wait for the WIFI shield.

Okay, let’s record some signals.

Input Noise

One test I like to do when I can is to measure the Input refered Noise of the Amplifier. This can be achieved by connecting all inputs (and reference) to the ground, and record 2 minutes of signal. All inputs being shorted, the signal you will get is only composed from the internal noise of the amplifier.

Noise

On the left, we have the histogram of the signal (after detrending). The input noise is 1.5uV RMS. This is a decent value, a bit high under some standards. For comparison, The OpenBCI Cyton around 0.15uV RMS (source).

On the right, we have the Noise Voltage density. We hit around 150nV / sqrt(Hz) at 10 Hz. The differential amplifier noise is given at 70nV, so here there is clearly some additional noise source. But I did not bother looking for them. More surprising is the decrease of noise below 10Hz. This is clearly due to a high pass filter, but the cut-off frequency seems way too high.

The problem comes from the feedback loop for the offset correction. The integrator is designed with a resistor of 1M and a capacitor of 3.3uF, which should lead to a cut-off frequency of 0.05Hz. However, this is without taking into account the Gain (51) of the amplifier in the loop, which brings the real cut-off frequency to 2.4 Hz.

For comparison, here is the response of such a filter, with an attenuation of 10dB at 1Hz.

Noise

The problem is that any signal with a frequency inferior to 10Hz will be strongly attenuated. This is a very important frequency band in EEG, containing most of the Information coming from evoked potentials. In addition, the phase shift will be different for the frequency in the EEG band, which can lead to deformation of ERPs.

So here we clearly have a design flaw. The good news is that you can fix it by changing some resistors on the board. (but you have to be handy to replace a SMT 0603 resistor.) In the meantime, let’s hope it won’t impact too much the signal quality.

EDIT : This problem has been confirmed with Spice simulations and by Joel’s (@openBCI) own tests. He is activelly looking at optimal resistors/capacitors values for the next round of production. If you want to do the modification on your Ganglion board, you can replae capacitors C9, C37, C39 and C44 with 22uF capacitors (0603 SMT package).

Alpha

So I hooked up the ganglion on my headset. I chose to connect the 4 channels to the electrodes O1, O2, POz and Pz. The Board is attached on the back of the head and is powered with a LiPo battery.

Noise

I generally start with a visual inspection of the signal. I did not have to tweak too much the electrode before getting a good signal. Not surprisingly (with this 2.4Hz high pass filter), I had no problem of saturation with my gold-platted dry electrodes.

Noise

The signal looks okay, with some alpha burst at -8 and -2 second. I have around 10 uV of standard deviation, which is usually the case for EEG.

P300

Now it’s time to get some real brain signal. I followed the same exact odd-ball protocol I described in my previous post P300 With muse.

P300

We can clearly see the P300 response. I guess the high pass filter did not attenuate too much the signal.

Amplifiers Comparison

Since I do the same experiment with every amplifier I can get my hands on, I can push further the analysis and make a simple comparison. I have data with 4 headset:

  • Interaxeon Muse 2016
  • Neuroelectrics Enobio32 : a 32 channel dry EEG headset.
  • Alex EEG : my own 24 channel dry EEG amplifier.
  • OpenBCI Ganglion

All the data have been recorded on different day, so the comparison is not fair. In addition, I had some trouble with the Enobio32 so results for this one have to be taken with a grain of salt.

Given that electrodes montages and reference channels are different, direct comparison of ERP are difficult. I also don’t think comparing ERP is relevant, since averaging individual response boost the SNR and hide difference in signal quality. Instead I will compare Accuracy in a classification task “Target” versus “Non-Target”. For those who are familiar with my toolbox pyRiemann, I used the following pipeline (after a 1-30Hz bandpass filter) :

clf = make_pipeline(XdawnCovariances(nfilter=4, estimator='lwf'),
                    TangentSpace(),
                    LogisticRegression())

Evaluation is done in cross validation, and AUC is used as metric.

classification

The muse headset achieves 0.74 AUC. This is a bit lower than the results from my previous post, but the pipeline is different. Next in line is the Enobio restricted to 4 channels (Pz, O1,Oz and O2) and Enobio with 32 channels. Performance are relatively low, and I suspect I could do better with more care during the headset set-up.

Alex EEG and the ganglion (using the 4 same channels and headset, just a different amplifier) obtain the same performance of 0.95 AUC. This is even more remarkable that data have been recorded on two different days. Finally, using all 24 channel increase a little the performance, but non siginficantly.

Of course, this is only one subject so I would not make any definitive conclusion.

PS : You can see why I don’t like ERP comparison. Despite having relatively similar ERP responses, the muse SNR is really lower and lead to a dramatic decrease in performances.

Wrap Up

Overall, I’m quite pleased with this new board. I had a lot of issue with the previous openBCI board. The Bluetooth connection was unreliable and I was unable to record signal with anything else than silver-based electrodes. These two issues have been addressed with the Ganglion.

As we can see with performance in classification, having only 4 channels is not too limiting, and we can achieve equivalent performance by placing electrodes correctly.

At the moment, my main concern is the problem of the high pass filter. This did not have an impact on the test I made, but will surely have with another setup.