GEDAI online🔗

This tutorial demonstrates how to use GEDAI for online (real-time) denoising.

from mne import make_fixed_length_epochs
from mne.datasets import eegbci
from mne.io import concatenate_raws, read_raw_edf

from gedai import Gedai
subjects = [1]  # may vary
runs = [4, 8, 12]  # may vary
raw_fnames = eegbci.load_data(subjects, runs, update_path=True)
raws = [read_raw_edf(f, preload=True) for f in raw_fnames]
# Concatenate runs from the same subject
raw = concatenate_raws(raws)
# Make channel names follow standard conventions
eegbci.standardize(raw)

# Crop to the first 15 seconds for demonstration purposes
# (Remove or adjust this for full data analysis)
raw.crop(0, 30)
raw.pick("eeg").load_data().apply_proj()

# Apply average reference (standard preprocessing for EEG)
raw.set_eeg_reference("average", projection=False)
General
Filename(s) S001R04.edf
MNE object type RawEDF
Measurement date 2009-08-12 at 16:15:00 UTC
Participant X
Experimenter Unknown
Acquisition
Duration 00:00:31 (HH:MM:SS)
Sampling frequency 160.00 Hz
Time points 4,801
Channels
EEG
Head & sensor digitization Not available
Filters
Highpass 0.00 Hz
Lowpass 80.00 Hz


For this example, we will use the standard broadband GEDAI. However, the same principles apply to the spectral GEDAI as well. For real-time applications, data is typically processed in chunks (e.g., sliding windows). To simulate this, we will first convert the raw data into overlapping epochs.

epochs = make_fixed_length_epochs(raw, duration=1.0, overlap=0.5, preload=True)

We first fit need to fit the GEDAI model on some initial data segment. This segment should be representative of the data to be denoised, including typical artifacts. A common approach is to use a baseline period at the beginning of the recording for this purpose.

gedai = Gedai()

# In this example, we use the first 10 seconds (i.e., first 20 epochs) for
# model fitting. The baseline period
baseline_epochs = epochs[:20]
gedai.fit_epochs(baseline_epochs, verbose=True)
    343 x 343 full covariance (kind = 1) found.
[gedai.fit_epochs] INFO: Setting average reference.
EEG channel type selected for re-referencing
Applying average reference.
Applying a custom ('EEG',) reference.
    343 x 343 full covariance (kind = 1) found.

After fitting, we can apply the fitted GEDAI model to each incoming epoch for denoising.

for i in range(20, len(epochs)):
    epoch = epochs[i : i + 1]  # Get the current epoch
    denoised_epoch = gedai.transform_epochs(epoch)

Total running time of the script: (0 minutes 9.268 seconds)

Estimated memory usage: 262 MB

Gallery generated by Sphinx-Gallery