Note
Go to the end to download the full example code.
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...
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
Not setting metadata
810 matching events found
Applying baseline correction (mode: mean)
0 projection items activated
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()

Total running time of the script: (5 minutes 18.805 seconds)
Estimated memory usage: 1230 MB