Acquiring high quality electroencephalogram (EEG) signals within indoor environments is challenging. The high impedance nature of the measurement allows AC power frequencies to easily couple, overwhelming the tiny signals which correspond to muscle responses and brain activity.

This project aims to create a high performance but easy-to-use Arduino library which manages the simultaneous acquisition of many EEG signals. The powerful 32 bit ARM hardware of Teensy 3.1 will be used to acquire many channels at precisely 600 or 900 Hz sample rate... much faster than can be done on regular 8 bit microcontrollers which lack DMA and SPI FIFO buffering. The DSP extensions of the ARM Cortex-M4 processor will be used to implement deep notch filters to remove 50 or 60 Hz AC coupled noise, and other filter to reduce the data rate to usable levels without nyquist aliasing. The Cortex-M nested priority interrupt controller will be used to schedule the acquisition and filtering operations to occur automatically, so the Arduino sketch code is relieved of any responsibility for rapid, low-latency response.

Ultimately, the goal of this project is to make receiving high quality EEG measurements, free of corruption from AC power coupling, as simple as fully buffered Serial communication.

void loop() {
  if (Biopotential.available()) {
    float channel0 =;
    float channel1 =;
    float channel2 =;
    float channel3 =;
    // do something with the EEG readings...... ;-)

Initially, the Texas Instruments ADS129x chips (24 bit ADC, programmable gain, 4 to 8 simultaneous channels) will be supported. Other analog chips may be added later...

This project is NOT a final finished product. It's a software library with reference hardware, intended to allow makers to easily acquire high quality EEG and similar biopotential signals, solving the tough problems of fast, low latency signal acquisition and complex real-time digital signal processing to reject AC noise coupling.