Interpolate Channel.

Channel interpolation example.

import os

import matplotlib.pyplot as plt
import mne
import numpy as np

from eegrasp import EEGrasp

current_dir = os.getcwd()
os.chdir(os.path.dirname(current_dir))
data_dir = './datasets'
#os.makedirs(data_dir, exist_ok=True)
#os.environ['MNE_EEGBCI_PATH'] = data_dir
subjects = np.arange(1, 10)
runs = [4, 8, 12]

# Download eegbci dataset through MNE
# Comment the following line if already downloaded

raw_fnames = [
    mne.datasets.eegbci.load_data(s, runs, path=data_dir, update_path=True)
    for s in subjects
]
raw_fnames = np.reshape(raw_fnames, -1)
raws = [mne.io.read_raw_edf(f, preload=True) for f in raw_fnames]
raw = mne.concatenate_raws(raws)
mne.datasets.eegbci.standardize(raw)
raw.annotations.rename(dict(T1='left', T2='right'))

montage = mne.channels.make_standard_montage('standard_1005')
raw.set_montage(montage)
eeg_pos = np.array(
    [pos for _, pos in raw.get_montage().get_positions()['ch_pos'].items()])
ch_names = montage.ch_names
Downloading EEGBCI data
Downloading file 'S001/S001R04.edf' from 'https://physionet.org/files/eegmmidb/1.0.0/S001/S001R04.edf' to '/home/docs/checkouts/readthedocs.org/user_builds/eegrasp/checkouts/latest/examples/datasets/MNE-eegbci-data/files/eegmmidb/1.0.0'.
Downloading file 'S001/S001R08.edf' from 'https://physionet.org/files/eegmmidb/1.0.0/S001/S001R08.edf' to '/home/docs/checkouts/readthedocs.org/user_builds/eegrasp/checkouts/latest/examples/datasets/MNE-eegbci-data/files/eegmmidb/1.0.0'.
Downloading file 'S001/S001R12.edf' from 'https://physionet.org/files/eegmmidb/1.0.0/S001/S001R12.edf' to '/home/docs/checkouts/readthedocs.org/user_builds/eegrasp/checkouts/latest/examples/datasets/MNE-eegbci-data/files/eegmmidb/1.0.0'.
Attempting to create new mne-python configuration file:
/home/docs/.mne/mne-python.json
Download complete in 34s (7.4 MB)
Downloading EEGBCI data
Downloading file 'S002/S002R04.edf' from 'https://physionet.org/files/eegmmidb/1.0.0/S002/S002R04.edf' to '/home/docs/checkouts/readthedocs.org/user_builds/eegrasp/checkouts/latest/examples/datasets/MNE-eegbci-data/files/eegmmidb/1.0.0'.
Downloading file 'S002/S002R08.edf' from 'https://physionet.org/files/eegmmidb/1.0.0/S002/S002R08.edf' to '/home/docs/checkouts/readthedocs.org/user_builds/eegrasp/checkouts/latest/examples/datasets/MNE-eegbci-data/files/eegmmidb/1.0.0'.
Downloading file 'S002/S002R12.edf' from 'https://physionet.org/files/eegmmidb/1.0.0/S002/S002R12.edf' to '/home/docs/checkouts/readthedocs.org/user_builds/eegrasp/checkouts/latest/examples/datasets/MNE-eegbci-data/files/eegmmidb/1.0.0'.
Download complete in 35s (7.3 MB)
Downloading EEGBCI data
Downloading file 'S003/S003R04.edf' from 'https://physionet.org/files/eegmmidb/1.0.0/S003/S003R04.edf' to '/home/docs/checkouts/readthedocs.org/user_builds/eegrasp/checkouts/latest/examples/datasets/MNE-eegbci-data/files/eegmmidb/1.0.0'.
Downloading file 'S003/S003R08.edf' from 'https://physionet.org/files/eegmmidb/1.0.0/S003/S003R08.edf' to '/home/docs/checkouts/readthedocs.org/user_builds/eegrasp/checkouts/latest/examples/datasets/MNE-eegbci-data/files/eegmmidb/1.0.0'.
Downloading file 'S003/S003R12.edf' from 'https://physionet.org/files/eegmmidb/1.0.0/S003/S003R12.edf' to '/home/docs/checkouts/readthedocs.org/user_builds/eegrasp/checkouts/latest/examples/datasets/MNE-eegbci-data/files/eegmmidb/1.0.0'.
Download complete in 36s (7.4 MB)
Downloading EEGBCI data
Downloading file 'S004/S004R04.edf' from 'https://physionet.org/files/eegmmidb/1.0.0/S004/S004R04.edf' to '/home/docs/checkouts/readthedocs.org/user_builds/eegrasp/checkouts/latest/examples/datasets/MNE-eegbci-data/files/eegmmidb/1.0.0'.
Downloading file 'S004/S004R08.edf' from 'https://physionet.org/files/eegmmidb/1.0.0/S004/S004R08.edf' to '/home/docs/checkouts/readthedocs.org/user_builds/eegrasp/checkouts/latest/examples/datasets/MNE-eegbci-data/files/eegmmidb/1.0.0'.
Downloading file 'S004/S004R12.edf' from 'https://physionet.org/files/eegmmidb/1.0.0/S004/S004R12.edf' to '/home/docs/checkouts/readthedocs.org/user_builds/eegrasp/checkouts/latest/examples/datasets/MNE-eegbci-data/files/eegmmidb/1.0.0'.
Download complete in 34s (7.3 MB)
Downloading EEGBCI data
Downloading file 'S005/S005R04.edf' from 'https://physionet.org/files/eegmmidb/1.0.0/S005/S005R04.edf' to '/home/docs/checkouts/readthedocs.org/user_builds/eegrasp/checkouts/latest/examples/datasets/MNE-eegbci-data/files/eegmmidb/1.0.0'.
Downloading file 'S005/S005R08.edf' from 'https://physionet.org/files/eegmmidb/1.0.0/S005/S005R08.edf' to '/home/docs/checkouts/readthedocs.org/user_builds/eegrasp/checkouts/latest/examples/datasets/MNE-eegbci-data/files/eegmmidb/1.0.0'.
Downloading file 'S005/S005R12.edf' from 'https://physionet.org/files/eegmmidb/1.0.0/S005/S005R12.edf' to '/home/docs/checkouts/readthedocs.org/user_builds/eegrasp/checkouts/latest/examples/datasets/MNE-eegbci-data/files/eegmmidb/1.0.0'.
Download complete in 35s (7.3 MB)
Downloading EEGBCI data
Downloading file 'S006/S006R04.edf' from 'https://physionet.org/files/eegmmidb/1.0.0/S006/S006R04.edf' to '/home/docs/checkouts/readthedocs.org/user_builds/eegrasp/checkouts/latest/examples/datasets/MNE-eegbci-data/files/eegmmidb/1.0.0'.
Downloading file 'S006/S006R08.edf' from 'https://physionet.org/files/eegmmidb/1.0.0/S006/S006R08.edf' to '/home/docs/checkouts/readthedocs.org/user_builds/eegrasp/checkouts/latest/examples/datasets/MNE-eegbci-data/files/eegmmidb/1.0.0'.
Downloading file 'S006/S006R12.edf' from 'https://physionet.org/files/eegmmidb/1.0.0/S006/S006R12.edf' to '/home/docs/checkouts/readthedocs.org/user_builds/eegrasp/checkouts/latest/examples/datasets/MNE-eegbci-data/files/eegmmidb/1.0.0'.
Download complete in 34s (7.3 MB)
Downloading EEGBCI data
Downloading file 'S007/S007R04.edf' from 'https://physionet.org/files/eegmmidb/1.0.0/S007/S007R04.edf' to '/home/docs/checkouts/readthedocs.org/user_builds/eegrasp/checkouts/latest/examples/datasets/MNE-eegbci-data/files/eegmmidb/1.0.0'.
Downloading file 'S007/S007R08.edf' from 'https://physionet.org/files/eegmmidb/1.0.0/S007/S007R08.edf' to '/home/docs/checkouts/readthedocs.org/user_builds/eegrasp/checkouts/latest/examples/datasets/MNE-eegbci-data/files/eegmmidb/1.0.0'.
Downloading file 'S007/S007R12.edf' from 'https://physionet.org/files/eegmmidb/1.0.0/S007/S007R12.edf' to '/home/docs/checkouts/readthedocs.org/user_builds/eegrasp/checkouts/latest/examples/datasets/MNE-eegbci-data/files/eegmmidb/1.0.0'.
Download complete in 34s (7.4 MB)
Downloading EEGBCI data
Downloading file 'S008/S008R04.edf' from 'https://physionet.org/files/eegmmidb/1.0.0/S008/S008R04.edf' to '/home/docs/checkouts/readthedocs.org/user_builds/eegrasp/checkouts/latest/examples/datasets/MNE-eegbci-data/files/eegmmidb/1.0.0'.
Downloading file 'S008/S008R08.edf' from 'https://physionet.org/files/eegmmidb/1.0.0/S008/S008R08.edf' to '/home/docs/checkouts/readthedocs.org/user_builds/eegrasp/checkouts/latest/examples/datasets/MNE-eegbci-data/files/eegmmidb/1.0.0'.
Downloading file 'S008/S008R12.edf' from 'https://physionet.org/files/eegmmidb/1.0.0/S008/S008R12.edf' to '/home/docs/checkouts/readthedocs.org/user_builds/eegrasp/checkouts/latest/examples/datasets/MNE-eegbci-data/files/eegmmidb/1.0.0'.
Download complete in 34s (7.3 MB)
Downloading EEGBCI data
Downloading file 'S009/S009R04.edf' from 'https://physionet.org/files/eegmmidb/1.0.0/S009/S009R04.edf' to '/home/docs/checkouts/readthedocs.org/user_builds/eegrasp/checkouts/latest/examples/datasets/MNE-eegbci-data/files/eegmmidb/1.0.0'.
Downloading file 'S009/S009R08.edf' from 'https://physionet.org/files/eegmmidb/1.0.0/S009/S009R08.edf' to '/home/docs/checkouts/readthedocs.org/user_builds/eegrasp/checkouts/latest/examples/datasets/MNE-eegbci-data/files/eegmmidb/1.0.0'.
Downloading file 'S009/S009R12.edf' from 'https://physionet.org/files/eegmmidb/1.0.0/S009/S009R12.edf' to '/home/docs/checkouts/readthedocs.org/user_builds/eegrasp/checkouts/latest/examples/datasets/MNE-eegbci-data/files/eegmmidb/1.0.0'.
Download complete in 34s (7.3 MB)
Extracting EDF parameters from /home/docs/checkouts/readthedocs.org/user_builds/eegrasp/checkouts/latest/examples/datasets/MNE-eegbci-data/files/eegmmidb/1.0.0/S001/S001R04.edf...
EDF file detected
Setting channel info structure...
Creating raw.info structure...
Reading 0 ... 19999  =      0.000 ...   124.994 secs...
Extracting EDF parameters from /home/docs/checkouts/readthedocs.org/user_builds/eegrasp/checkouts/latest/examples/datasets/MNE-eegbci-data/files/eegmmidb/1.0.0/S001/S001R08.edf...
EDF file detected
Setting channel info structure...
Creating raw.info structure...
Reading 0 ... 19999  =      0.000 ...   124.994 secs...
Extracting EDF parameters from /home/docs/checkouts/readthedocs.org/user_builds/eegrasp/checkouts/latest/examples/datasets/MNE-eegbci-data/files/eegmmidb/1.0.0/S001/S001R12.edf...
EDF file detected
Setting channel info structure...
Creating raw.info structure...
Reading 0 ... 19999  =      0.000 ...   124.994 secs...
Extracting EDF parameters from /home/docs/checkouts/readthedocs.org/user_builds/eegrasp/checkouts/latest/examples/datasets/MNE-eegbci-data/files/eegmmidb/1.0.0/S002/S002R04.edf...
EDF file detected
Setting channel info structure...
Creating raw.info structure...
Reading 0 ... 19679  =      0.000 ...   122.994 secs...
Extracting EDF parameters from /home/docs/checkouts/readthedocs.org/user_builds/eegrasp/checkouts/latest/examples/datasets/MNE-eegbci-data/files/eegmmidb/1.0.0/S002/S002R08.edf...
EDF file detected
Setting channel info structure...
Creating raw.info structure...
Reading 0 ... 19679  =      0.000 ...   122.994 secs...
Extracting EDF parameters from /home/docs/checkouts/readthedocs.org/user_builds/eegrasp/checkouts/latest/examples/datasets/MNE-eegbci-data/files/eegmmidb/1.0.0/S002/S002R12.edf...
EDF file detected
Setting channel info structure...
Creating raw.info structure...
Reading 0 ... 19679  =      0.000 ...   122.994 secs...
Extracting EDF parameters from /home/docs/checkouts/readthedocs.org/user_builds/eegrasp/checkouts/latest/examples/datasets/MNE-eegbci-data/files/eegmmidb/1.0.0/S003/S003R04.edf...
EDF file detected
Setting channel info structure...
Creating raw.info structure...
Reading 0 ... 19999  =      0.000 ...   124.994 secs...
Extracting EDF parameters from /home/docs/checkouts/readthedocs.org/user_builds/eegrasp/checkouts/latest/examples/datasets/MNE-eegbci-data/files/eegmmidb/1.0.0/S003/S003R08.edf...
EDF file detected
Setting channel info structure...
Creating raw.info structure...
Reading 0 ... 19999  =      0.000 ...   124.994 secs...
Extracting EDF parameters from /home/docs/checkouts/readthedocs.org/user_builds/eegrasp/checkouts/latest/examples/datasets/MNE-eegbci-data/files/eegmmidb/1.0.0/S003/S003R12.edf...
EDF file detected
Setting channel info structure...
Creating raw.info structure...
Reading 0 ... 19999  =      0.000 ...   124.994 secs...
Extracting EDF parameters from /home/docs/checkouts/readthedocs.org/user_builds/eegrasp/checkouts/latest/examples/datasets/MNE-eegbci-data/files/eegmmidb/1.0.0/S004/S004R04.edf...
EDF file detected
Setting channel info structure...
Creating raw.info structure...
Reading 0 ... 19679  =      0.000 ...   122.994 secs...
Extracting EDF parameters from /home/docs/checkouts/readthedocs.org/user_builds/eegrasp/checkouts/latest/examples/datasets/MNE-eegbci-data/files/eegmmidb/1.0.0/S004/S004R08.edf...
EDF file detected
Setting channel info structure...
Creating raw.info structure...
Reading 0 ... 19679  =      0.000 ...   122.994 secs...
Extracting EDF parameters from /home/docs/checkouts/readthedocs.org/user_builds/eegrasp/checkouts/latest/examples/datasets/MNE-eegbci-data/files/eegmmidb/1.0.0/S004/S004R12.edf...
EDF file detected
Setting channel info structure...
Creating raw.info structure...
Reading 0 ... 19679  =      0.000 ...   122.994 secs...
Extracting EDF parameters from /home/docs/checkouts/readthedocs.org/user_builds/eegrasp/checkouts/latest/examples/datasets/MNE-eegbci-data/files/eegmmidb/1.0.0/S005/S005R04.edf...
EDF file detected
Setting channel info structure...
Creating raw.info structure...
Reading 0 ... 19679  =      0.000 ...   122.994 secs...
Extracting EDF parameters from /home/docs/checkouts/readthedocs.org/user_builds/eegrasp/checkouts/latest/examples/datasets/MNE-eegbci-data/files/eegmmidb/1.0.0/S005/S005R08.edf...
EDF file detected
Setting channel info structure...
Creating raw.info structure...
Reading 0 ... 19679  =      0.000 ...   122.994 secs...
Extracting EDF parameters from /home/docs/checkouts/readthedocs.org/user_builds/eegrasp/checkouts/latest/examples/datasets/MNE-eegbci-data/files/eegmmidb/1.0.0/S005/S005R12.edf...
EDF file detected
Setting channel info structure...
Creating raw.info structure...
Reading 0 ... 19679  =      0.000 ...   122.994 secs...
Extracting EDF parameters from /home/docs/checkouts/readthedocs.org/user_builds/eegrasp/checkouts/latest/examples/datasets/MNE-eegbci-data/files/eegmmidb/1.0.0/S006/S006R04.edf...
EDF file detected
Setting channel info structure...
Creating raw.info structure...
Reading 0 ... 19679  =      0.000 ...   122.994 secs...
Extracting EDF parameters from /home/docs/checkouts/readthedocs.org/user_builds/eegrasp/checkouts/latest/examples/datasets/MNE-eegbci-data/files/eegmmidb/1.0.0/S006/S006R08.edf...
EDF file detected
Setting channel info structure...
Creating raw.info structure...
Reading 0 ... 19679  =      0.000 ...   122.994 secs...
Extracting EDF parameters from /home/docs/checkouts/readthedocs.org/user_builds/eegrasp/checkouts/latest/examples/datasets/MNE-eegbci-data/files/eegmmidb/1.0.0/S006/S006R12.edf...
EDF file detected
Setting channel info structure...
Creating raw.info structure...
Reading 0 ... 19679  =      0.000 ...   122.994 secs...
Extracting EDF parameters from /home/docs/checkouts/readthedocs.org/user_builds/eegrasp/checkouts/latest/examples/datasets/MNE-eegbci-data/files/eegmmidb/1.0.0/S007/S007R04.edf...
EDF file detected
Setting channel info structure...
Creating raw.info structure...
Reading 0 ... 19999  =      0.000 ...   124.994 secs...
Extracting EDF parameters from /home/docs/checkouts/readthedocs.org/user_builds/eegrasp/checkouts/latest/examples/datasets/MNE-eegbci-data/files/eegmmidb/1.0.0/S007/S007R08.edf...
EDF file detected
Setting channel info structure...
Creating raw.info structure...
Reading 0 ... 19999  =      0.000 ...   124.994 secs...
Extracting EDF parameters from /home/docs/checkouts/readthedocs.org/user_builds/eegrasp/checkouts/latest/examples/datasets/MNE-eegbci-data/files/eegmmidb/1.0.0/S007/S007R12.edf...
EDF file detected
Setting channel info structure...
Creating raw.info structure...
Reading 0 ... 19999  =      0.000 ...   124.994 secs...
Extracting EDF parameters from /home/docs/checkouts/readthedocs.org/user_builds/eegrasp/checkouts/latest/examples/datasets/MNE-eegbci-data/files/eegmmidb/1.0.0/S008/S008R04.edf...
EDF file detected
Setting channel info structure...
Creating raw.info structure...
Reading 0 ... 19679  =      0.000 ...   122.994 secs...
Extracting EDF parameters from /home/docs/checkouts/readthedocs.org/user_builds/eegrasp/checkouts/latest/examples/datasets/MNE-eegbci-data/files/eegmmidb/1.0.0/S008/S008R08.edf...
EDF file detected
Setting channel info structure...
Creating raw.info structure...
Reading 0 ... 19679  =      0.000 ...   122.994 secs...
Extracting EDF parameters from /home/docs/checkouts/readthedocs.org/user_builds/eegrasp/checkouts/latest/examples/datasets/MNE-eegbci-data/files/eegmmidb/1.0.0/S008/S008R12.edf...
EDF file detected
Setting channel info structure...
Creating raw.info structure...
Reading 0 ... 19679  =      0.000 ...   122.994 secs...
Extracting EDF parameters from /home/docs/checkouts/readthedocs.org/user_builds/eegrasp/checkouts/latest/examples/datasets/MNE-eegbci-data/files/eegmmidb/1.0.0/S009/S009R04.edf...
EDF file detected
Setting channel info structure...
Creating raw.info structure...
Reading 0 ... 19679  =      0.000 ...   122.994 secs...
Extracting EDF parameters from /home/docs/checkouts/readthedocs.org/user_builds/eegrasp/checkouts/latest/examples/datasets/MNE-eegbci-data/files/eegmmidb/1.0.0/S009/S009R08.edf...
EDF file detected
Setting channel info structure...
Creating raw.info structure...
Reading 0 ... 19679  =      0.000 ...   122.994 secs...
Extracting EDF parameters from /home/docs/checkouts/readthedocs.org/user_builds/eegrasp/checkouts/latest/examples/datasets/MNE-eegbci-data/files/eegmmidb/1.0.0/S009/S009R12.edf...
EDF file detected
Setting channel info structure...
Creating raw.info structure...
Reading 0 ... 19679  =      0.000 ...   122.994 secs...
L_FREQ = 1  # Hz
H_FREQ = 30  # Hz
raw.filter(L_FREQ, H_FREQ, fir_design='firwin', skip_by_annotation='edge')
raw, ref_data = mne.set_eeg_reference(raw)

events, events_id = mne.events_from_annotations(raw)
Filtering raw data in 27 contiguous segments
Setting up band-pass filter from 1 - 30 Hz

FIR filter parameters
---------------------
Designing a one-pass, zero-phase, non-causal bandpass filter:
- Windowed time-domain design (firwin) method
- Hamming window with 0.0194 passband ripple and 53 dB stopband attenuation
- Lower passband edge: 1.00
- Lower transition bandwidth: 1.00 Hz (-6 dB cutoff frequency: 0.50 Hz)
- Upper passband edge: 30.00 Hz
- Upper transition bandwidth: 7.50 Hz (-6 dB cutoff frequency: 33.75 Hz)
- Filter length: 529 samples (3.306 s)

[Parallel(n_jobs=1)]: Done  17 tasks      | elapsed:    0.0s
[Parallel(n_jobs=1)]: Done  64 out of  64 | elapsed:    0.0s finished
EEG channel type selected for re-referencing
Applying average reference.
Applying a custom ('EEG',) reference.
Used Annotations descriptions: [np.str_('T0'), np.str_('left'), np.str_('right')]

Exclude bad channels

TMIN, TMAX = -1.0, 3.0
picks = mne.pick_types(raw.info, meg=False, eeg=True, stim=False, eog=False,
                       exclude='bads')
epochs = mne.Epochs(raw, events, events_id, picks=picks, tmin=TMIN, tmax=TMAX,
                    baseline=(-1, 0), detrend=1)

data = epochs.average().get_data()
Not setting metadata
810 matching events found
Applying baseline correction (mode: mean)
0 projection items activated
  1. Define index of the missing channel

MISSING_IDX = 5
lost_ch = data[MISSING_IDX, :].copy()
data[MISSING_IDX, :] = np.nan  # delete channel info from array
# 2. Initialize instance of EEGrasp
eegsp = EEGrasp(data, eeg_pos, ch_names)
# 3. Compute the electrode distance matrix
dist_mat = eegsp.compute_distance(normalize=True)
# 4. Compute the graph weights and make graph structure
graph = eegsp.compute_graph(epsilon=0.5, sigma=0.1)
W = eegsp.graph_weights
# 5. Interpolate missing channel
interpolated = eegsp.interpolate_channel(missing_idx=MISSING_IDX, graph=graph)
fs = epochs.info['sfreq']
t = np.arange(0, len(lost_ch) / fs, 1 / fs)
plt.close('all')
plt.figure(figsize=(6.5, 3.5))
plt.plot(t, lost_ch * 1e6, label='Original')
plt.plot(t, interpolated[MISSING_IDX] * 1e6, label='Interpolated')
plt.legend()
plt.xlabel('tiempo [s]')
plt.ylabel('voltaje [uV]')
plt.title('Imputación de datos faltantes de un electrodo')
plt.tight_layout()
plt.show()
Imputación de datos faltantes de un electrodo

Total running time of the script: (5 minutes 18.805 seconds)

Estimated memory usage: 1230 MB

Gallery generated by Sphinx-Gallery