ICA on very long EEG

If we have very long EEG recording like an hour recording and want to clean it fast and well, what would be the best way?

I can think of two options (there could be more though):

  1. ICA on the whole EEG recording: it may takes a quite long to run ICA as well as the statistical (independence) assumption among estimated independent components may not hold because the underlying sources and mixing process are non-stationary.

  2. ICA on the short time chunks: we can chop the whole recording into many small segments (e.g., 5 min EEG segments), and apply ICA separately to each segments. In this case, there could be the discontinuity of cleaned EEGs between neighboring segments because we can get different independent components and bad component selection results between them. I am not sure whether this approach performs fast either.

It would be great I could hear what others think of this issue or there are some previous study on this.


Approach #1 would always work, but it can be time- and resource-consuming.

Approach #2 is to be avoided if the signals are to be processed within the same study: you don't want to introduce any processing bias between different segments of your recordings.

An in-between solution that can work very decently for noise with patterns that do not change much over time: compute the ICA unmixing matrix on a shorter segment of data, and apply it to all the data (after making sure that it does remove your artifacts efficiently in the entire recording session). This is what is illustrated in the brief ICA tutorial on the website:

And as I replied for your other ICA question: I recommend you seek advice in the EEGLAB community.

Thank you so much for your feedback, Francois. I will ask in EEGLAB community as well.

as the ICA solvers you are using are processing time instants as independent data points you can subsample (eg take one every 10 samples). This is a better idea that taking only a window of data as you may miss some sources that are appearing later in the recording.

Also if it's still too slow you can try our faster ICA solver called PICARD: https://pierreablin.github.io/picard/ You can find a matlab implementation at:

it's already available via EEGLAB.

You can have a look at speed comparisons with fastica at:


note that PICARD is based on the same ICA principles as Infomax or FastICA (namely non-Gaussianity). It just uses a faster quasi-Newton solver to compute the parameters.

References if you are curious:

[1] Pierre Ablin, Jean-Francois Cardoso, and Alexandre Gramfort “Faster independent component analysis by preconditioning with Hessian approximations” IEEE Transactions on Signal Processing, 2018, https://arxiv.org/abs/1706.08171

[2] Pierre Ablin, Jean-Francois Cardoso, and Alexandre Gramfort “Faster ICA under orthogonal constraint” ICASSP, 2018, https://arxiv.org/abs/1711.10873