Extracting frequency bands (alpha, beta, gamma etc.) from raw EEG data

eeg
Tags: #<Tag:0x00007fcb74bc9bd8>
#1

I recently bought a NeuroSky MindWave Mobile headset. So far, I have written a simple Visual C# program that reads raw EEG data from the headset (via Bluetooth).

I would like to process this raw data and display the EEG band frequencies (delta, theta, alpha, beta & gamma) to the user. From what I have understood, this will most likely require a Fast Fourier Transform.

I have also read that ocular artefacts (e.g. eye blinks) and other noise needs to be filtered prior to extracting these frequencies.

Which filters should I use and what are the best open-source .NET libraries with implementations of these filters? Code examples would be lovely as well!

Many thanks in advance for any help whatsoever! I really appreciate it.

0 Likes

#2

You can use some of FFT libraries for C#
Roughly, you can do the following.
Divide your signal into epoch (for example 1-4 seconds long).
For each of the epochs, calculate FFT.
Average for all epochs.
If your epoch is for example 1 second long, and sampling rate is Fs = 250 HZ, then you shall obtain 125 samples of FFT. This is related to the frequency ranges from 0 - 125Hz (Fs/2). Then you need to sum samples in the rage of interest. For example, teh sample related to 12 Hz =
If you need any help, you can send me the file so that I can try and give you the code.
There are better ways to do this, with Hamming or other averaging windows, but this is the most basic way.

0 Likes

#3

If you just want SOME of the bands, for example if you are doing a neurofeedback program that rewards / inhibits certain bands – the alternative is to use band filters instead of FFT. This is a common approach used in VPL’s such as BrainBay, BioEra, Bioexplorer, OpenViBE, neuromore, etc.

An excellent C language IIR filter design library is Jim Peters FIDLIB. It’s actually the engine used by BioEra and BrainBay. A great feature of this library is that the filter type (bandpass, lowpass, highpass, notch; Butterworth, Bessel, etc.) and band edges can all be specified at runtime. This is how the VPL’s allow dynamic changing of these parameters.

http://uazu.net/fidlib/

William

0 Likes