Some (substantial) amount of initial power line filtering / reduction is handled by the DRL / Bias circuitry inside the TI ADS1299 chip. See this tech note,
What I'm referring to is the method used to reduce 'mains hum' - necessary even if the device is battery powered. I am particularly interested in getting a response from someone behind the build of the openBCI board.
Usually this is dealt with by notch filtering at 60hz/50hz. Is there such a notch filter in the OpenBCI unit? Either in the TI chip itself or in the openBCI board and is it switchable between 60hz/50hz?
I am keen to purchase a research unit but not if it has a filter set at 60hz with no way to change it to 50hz.
Yes, there is a digital FIR notch filter in the Processing module. As I mentioned previously, the Bias (Ground) connection in the hardware eliminates much of the "common mode" AC noise. This automatically works for any common mode noise, regardless of frequency, 60hz, 50hz, etc. There are no board level jumpers for analog prefilters on the board. The pdf I shared shows how they measured excellent common mode rejection ratio (CMRR), in such a configuration.
I'm one of the developers of OpenBCI working with Joel and Conor. There are no filtering features specific to 60Hz (or 50Hz) built-into the hardware. Therefore, there is nothing to switch between 60Hz/50Hz.
As stated by wjcroft, rejection of mains hum is handled automatically through the broad common-mode rejection (CMRR) of the first-stage differential amplifiier, through the broad common-mode cancellation of the DRL, and through user-written filtering in any software used to receive and visualize the data.
In other words, it should work as well in a 50 Hz environment as in a 60 Hz environment.
Actually, I believe the sampling rate is selected to produce a null at 60 Hz. If you wish to move the null to 50 Hz you'll need to slow down the sampling rate to achieve the same effect. You can see this if you take a look at the FFT spectrum data from the ADS1299 data sheet.
Typical 24 bit EEG sampling rate for the ADS1299 is 250 Hz. This can be adjusted, for example some lab or medical setups might run at 500 Hz. For EMG applications you might see rates at 1000 Hz. The Delta Sigma ADC (front end) is running at 1.024 MHz.
So sampling rate is NOT adjusted to produce a 'null' condition. See Chip's comment on August 19: "there is nothing to switch between 60Hz/50Hz" (in the hardware). Joel has measured a substantial improvement in CMRR with the V3 boards, vs. the earlier V1, V2 boards.
Please refer to page 22 of the ADS1299 data sheet.From the properties of the sinc filter and Figure 26 that for a filter of with a 250 Hz sample rate we can expect a signal at 62.5 Hz 1/4 the normalized frequency to be reduced about 2.7 dB. So... that means that if one were to reduce the sample rate to 50 Hz. for those blokes living in Australia a signal at roughly the alpha frequency would be reduced by the same 2.7 dB.
wjcroft makes a point about running the sampling rate at a much higher rate of say 500 to 1 KHz. From a signal preservation perspective this is a good idea as there will be minimal attenuation of the signals of interest at this sampling rate.
I would suggest the following. Perform an FFT of the signal with a high bandwidth sampling rate. Examine the resulting plot an filter the signal for only as much bandwidth as is necessary to contain say 95% of the power available, and no more. If you observe that your useful signal is between say a few Hz to 40 Hz, then the extra noise added to the signal between 40 Hz to 1 Khz serves no useful purpose.
However, as suggested above, you will need to use an external clock source.
On the other hand, make sure that you've done everything possible to eliminate the common mode as much as possible. Such things as keeping the electrode wires as close to each other as possible. Use shielded wires with the ground all tied to a common reference point. Make use of a single point ground. Insure that each electrode has an impedance that is close to that of all the other electrodes. Eliminate external sources of interference. It's a long list. Each will have an effect.
Make sure you have good electrodes and a reliable reference electrode. Wash you head. Surface oils on your scalp can interfere with making a good electrode contact, raising the impedance of the connection and increasing the possibility of an imbalance in the electrode impedance(s).
There are of course countless DSP techniques that one might employ. FIR, FIR, and notch filters could make quick work of the problem.
Keep at it. There is a reward at the end of the road:)
As I just posted over on this other thread (http://openbci.com/forum/index.php?p=/discussion/154/front-end-filtering-esd-cmrr-rfi#latest), my personal opinion is that way too much concern is given to CMRR and hardware notch filters, if one is mainly concerned about the 50Hz/60Hz issue. It is simply so easy to digitally filter (either in the PC or in the fast-ish microcontroller) this any 50/60 Hz interference that it's not really worth (IMHO) getting too worried about it.
Historically, it was indeed important to be very concerned with CMRR and hardware notch filters because the dynamic range of the EEG system (whether digital or analog) was so limited. With limited dynamic range, nearly any amount of 50/60Hz interference could saturate the high-gain amplifiers in an EEG system. If it didn't saturate the amplifiers, it would saturate the analog-to-digital converter (ADC). Once something saturates, you can no longer effectively filter out the interference digitally. The saturation destroys the small signals (your EEG signal) due to the presence of the large signal (the 50/60hz interference).
Withe advent of ADCs with high-bit depth, this whole part of the problem has gone away. For example, for the OpenEEG system (with its 10-bit ADC), you've got to ensure that your electrodes are well connected to your body so that your CMRR is high so that any residual 50/60Hz interefernce is kept below 500 uVp-p. By contrast, for the ADS1299 (with its 24-bit ADC) at the heart of the OpenBCI board, the system can tolerate something like 50,000-150,000 uVp-p of interference (ie, 50-150 mVp-p) before anything saturates. It's pretty easy to keep your residual 50/60 Hz interference below this level.
The high bit depth of the ADS1299, coupled with the ability of the PC to easily do filtering digitally...this combination really makes a lot of the historically-important concerns with EEG simply disappear.
Yes, the software still needs to be aware of where to place the notch filter. Or alternatively what bandpass filter to use to avoid the power line frequency. For example using a .5 hz to 40 or 50 hz bandpass will both remove the DC component AND power line noise. So in your signal processing code you can use a notch or bandpass, but both are not needed.
In the ADS1299 chip, the digitized voltage of the power line noise is greatly reduced by two factors:
* The differential nature (common mode noise removal) of the EEG input pair (INxN sensor signal and SRB2 reference) * The BIAS ("ground") signal which is injected back into the client, which is 180 degrees out of phase with the line noise, hence adding to the reduction.
These two factors bring down the digitized line noise level from the millivolt level to just a few tens of microvolts. A vast reduction. But it's never possible to cancel the line noise completely. That would require a CMRR that is impossibly high.
And as Chip points out above, the huge signal range of the 24 bit A/D converter means that nothing is ever lost, even with 100's of millivolts range.
In the OpenBCI_GUI, the switch for 50/60Hz is for filtering that is done on the computer, not on the OpenBCI hardware itself. The OpenBCI hardware has no filtering specific to 50/60Hz line noise...it's ability to reject (or tolerate) the 50/60 Hz noise is due to the features already discussed. Often, one might like even more rejection, hence the additional filtering that is available in the GUI.
Comments
http://www.ti.com/lit/an/sbaa188/sbaa188.pdf
No board level components or jumpers are needed.
Additional digital filter signal processing can be done in levels above the hardware, I think Chip has done this in some of the Processing sketches.
Typical 24 bit EEG sampling rate for the ADS1299 is 250 Hz. This can be adjusted, for example some lab or medical setups might run at 500 Hz. For EMG applications you might see rates at 1000 Hz. The Delta Sigma ADC (front end) is running at 1.024 MHz.
So sampling rate is NOT adjusted to produce a 'null' condition. See Chip's comment on August 19: "there is nothing to switch between 60Hz/50Hz" (in the hardware). Joel has measured a substantial improvement in CMRR with the V3 boards, vs. the earlier V1, V2 boards.
Regards,
William
Thanks for your comment. I don't understand what 'produce a null at 60 Hz' means. Could you explain further?
That's cleared it up for me.
Yes, the software still needs to be aware of where to place the notch filter. Or alternatively what bandpass filter to use to avoid the power line frequency. For example using a .5 hz to 40 or 50 hz bandpass will both remove the DC component AND power line noise. So in your signal processing code you can use a notch or bandpass, but both are not needed.
In the ADS1299 chip, the digitized voltage of the power line noise is greatly reduced by two factors:
* The differential nature (common mode noise removal) of the EEG input pair (INxN sensor signal and SRB2 reference)
* The BIAS ("ground") signal which is injected back into the client, which is 180 degrees out of phase with the line noise, hence adding to the reduction.
These two factors bring down the digitized line noise level from the millivolt level to just a few tens of microvolts. A vast reduction. But it's never possible to cancel the line noise completely. That would require a CMRR that is impossibly high.
And as Chip points out above, the huge signal range of the 24 bit A/D converter means that nothing is ever lost, even with 100's of millivolts range.
William
Just my two cents but if you are receiving via USB you could also use a simple USB filter - maybe make one