How to get band powers from noisy data
I have an application where I wish to collect band powers from my 16 channel EEG, globally, and buffer it (to then match it to various activities and see correlations)
Due to the nature of dry electrodes and me being a suboptimal eeg-on-head placer I expect a bunch of the electrodes will end up railed and most (all?) of them will be very noisy.
My current approach to dealing with this is, instead of using absolute power for the bands (what the GUI is doing) to use relative power on a per electrode basis.
I.e. say channel 1 has voltages:
c1 = [10, 50, 60 ... 5]
and channel 2 has:
c2 = [600, 80000, 53553 ... 12000]
My code does something like:
c1_bands = band_decomp(c1)
c2_bands = band_decomp(c2)
pct_theta = (c1_bands['theta'] / np.mean(c1_bands.values()) + (c2_bands['theta'] / np.mean(c2_bands.values())
Would this approach work "in principle" to correct for the noise ? Of course, some noise would still remain, but if the nosie is random and at least a few electrodes are functioning signal should come through.
Is there a problem inherent from not computing the bands using summed amplitude from each electrode (or however the GUI does it ?) Are there kosher approaches for doing this type of thing ?
Comments
George, hi.
Have you looked at this thread on suggestions to address railing headset channels?
https://openbci.com/forum/index.php?p=/discussion/1481/how-to-become-de-railed
Alternately, if you cannot tame a channel, have you considered just switching it off by toggling the channel number button on the time series graph?
I don't believe you can extract any useful information for channels that are showing huge numbers of microvolts. Whatever the source of the channel amplitude, it is unlikely to be authentic EEG.
You might be interested in the alternate headset frame offerings at:
https://www.shapeways.com/product/QX6FQX82D/m4-ultra-brachycephalic-headset-frame?optionId=63475545&li=shops
https://www.shapeways.com/shops/ultrabci
https://www.google.com/search?as_q=Brachycephalic&as_sitesearch=openbci.com
William
Right, but I am unsure what "huge number" means here, as in, how I determine the cutoff is my problem!
As for the headests you link... those seem to be the MK4, which I already have
Did you see the headset frames & info on 'Brachycephalic' head shape. If a large number of electrodes are having issues, it is possible that your head shape may not be matching the design criteria for the headset dimensions. 'Asian' derived genetics leads to different head shape than 'western' genetics.
https://www.google.com/search?q=Brachycephalic+human+skull
Any EEG above 80 to 100 uV is suspect. If you are seeing hundreds to thousands that is decidedly noise.
https://bigthink.com/strange-maps/cephalic-index-maps/
Didn't notice that... but I am using this with more than just myself so optimizing for the head shape is besides the point.... and their heads are quite different
Did you try the link I gave for reducing 'railed' condition? OR switching off the railing channels?
I am usually getting readings between 1 * pow(10,5) and 50 * pow(10,5)
I'm unsure what the unit used here is (?) -- I assume uv? If so it does indeed seem like everything I have is railed, but this doesn't match with what the GUI is telling me
uV is the shorthand for microvolts, as mV is millivolts. The u in uV refers to the 'micro' character, which is not on keyboards, but does have a unicode representation.
https://www.compart.com/en/unicode/U+00B5
So using that: µV
Have you tried simply TURNING OFF the railing channels. I assume this is just a few. Then your band powers will look more normal because all are below 100 uV. EEG above 100 uV is either noise or possibly muscle artifact. Try clenching your jaw or working your face / head muscles. That will produce huge readings.