Note
Go to the end to download the full example code.
Comprehensive Preprocessing with MNE-based Classes#
This example demonstrates the various preprocessing classes available in Braindecode that wrap MNE-Python functionality. These classes provide a convenient and type-safe way to preprocess EEG data.
# Authors: Bruno Aristimunha <b.aristimunha@gmail.com>
#
# License: BSD (3-clause)
import mne
from braindecode.datasets import MOABBDataset
from braindecode.preprocessing import (
Anonymize,
ApplyHilbert,
Crop,
Filter,
Pick,
Resample,
SetEEGReference,
SetMontage,
preprocess,
)
Load a sample dataset#
We’ll use a small MOABB dataset for demonstration
dataset = MOABBDataset(dataset_name="BNCI2014_001", subject_ids=[1])
0%| | 0.00/42.8M [00:00<?, ?B/s]
0%| | 8.19k/42.8M [00:00<14:22, 49.6kB/s]
0%| | 56.3k/42.8M [00:00<03:44, 190kB/s]
0%|▏ | 144k/42.8M [00:00<02:04, 344kB/s]
0%|▏ | 193k/42.8M [00:00<02:12, 321kB/s]
1%|▎ | 321k/42.8M [00:00<01:28, 481kB/s]
1%|▍ | 472k/42.8M [00:01<01:07, 626kB/s]
2%|▌ | 648k/42.8M [00:01<00:55, 763kB/s]
2%|▋ | 808k/42.8M [00:01<00:50, 824kB/s]
2%|▉ | 1.03M/42.8M [00:01<00:42, 985kB/s]
3%|█ | 1.23M/42.8M [00:01<00:39, 1.05MB/s]
4%|█▎ | 1.54M/42.8M [00:01<00:32, 1.28MB/s]
5%|█▋ | 1.93M/42.8M [00:02<00:25, 1.61MB/s]
6%|██ | 2.36M/42.8M [00:02<00:19, 2.07MB/s]
6%|██▎ | 2.74M/42.8M [00:02<00:17, 2.33MB/s]
8%|██▉ | 3.35M/42.8M [00:02<00:13, 3.02MB/s]
9%|███▎ | 3.90M/42.8M [00:02<00:11, 3.36MB/s]
11%|████ | 4.74M/42.8M [00:02<00:08, 4.35MB/s]
13%|████▉ | 5.74M/42.8M [00:02<00:06, 5.42MB/s]
16%|█████▉ | 6.83M/42.8M [00:02<00:05, 6.37MB/s]
19%|██████▉ | 8.00M/42.8M [00:03<00:04, 7.17MB/s]
24%|█████████ | 10.4M/42.8M [00:03<00:02, 10.9MB/s]
30%|██████████▉ | 12.7M/42.8M [00:03<00:02, 12.9MB/s]
35%|████████████▉ | 14.9M/42.8M [00:03<00:01, 15.3MB/s]
43%|████████████████ | 18.5M/42.8M [00:03<00:01, 20.4MB/s]
51%|██████████████████▉ | 21.9M/42.8M [00:03<00:00, 23.9MB/s]
58%|█████████████████████▍ | 24.8M/42.8M [00:03<00:00, 24.8MB/s]
68%|█████████████████████████▏ | 29.1M/42.8M [00:03<00:00, 27.8MB/s]
75%|███████████████████████████▋ | 32.0M/42.8M [00:03<00:00, 28.2MB/s]
88%|████████████████████████████████▌ | 37.7M/42.8M [00:04<00:00, 36.0MB/s]
97%|███████████████████████████████████▋ | 41.4M/42.8M [00:04<00:00, 35.7MB/s]
0%| | 0.00/42.8M [00:00<?, ?B/s]
100%|██████████████████████████████████████| 42.8M/42.8M [00:00<00:00, 169GB/s]
0%| | 0.00/43.8M [00:00<?, ?B/s]
0%| | 16.4k/43.8M [00:00<07:03, 103kB/s]
0%| | 56.3k/43.8M [00:00<03:50, 190kB/s]
0%| | 113k/43.8M [00:00<02:44, 265kB/s]
0%|▏ | 184k/43.8M [00:00<02:09, 338kB/s]
1%|▏ | 224k/43.8M [00:00<02:22, 306kB/s]
1%|▎ | 344k/43.8M [00:00<01:34, 458kB/s]
1%|▎ | 417k/43.8M [00:01<01:34, 457kB/s]
1%|▌ | 585k/43.8M [00:01<01:06, 647kB/s]
2%|▋ | 768k/43.8M [00:01<00:53, 804kB/s]
2%|▊ | 944k/43.8M [00:01<00:47, 896kB/s]
3%|▉ | 1.18M/43.8M [00:01<00:39, 1.07MB/s]
3%|█▏ | 1.34M/43.8M [00:01<00:40, 1.05MB/s]
4%|█▍ | 1.72M/43.8M [00:02<00:28, 1.46MB/s]
4%|█▋ | 1.93M/43.8M [00:02<00:29, 1.41MB/s]
6%|██▏ | 2.55M/43.8M [00:02<00:19, 2.17MB/s]
7%|██▋ | 3.18M/43.8M [00:02<00:14, 2.71MB/s]
9%|███▍ | 4.02M/43.8M [00:02<00:11, 3.46MB/s]
11%|████ | 4.85M/43.8M [00:02<00:09, 3.99MB/s]
14%|█████▏ | 6.06M/43.8M [00:03<00:07, 5.08MB/s]
16%|██████ | 7.10M/43.8M [00:03<00:06, 5.52MB/s]
21%|███████▋ | 9.13M/43.8M [00:03<00:04, 7.67MB/s]
26%|█████████▍ | 11.2M/43.8M [00:03<00:03, 9.25MB/s]
33%|████████████▏ | 14.4M/43.8M [00:03<00:02, 12.5MB/s]
41%|███████████████▏ | 17.9M/43.8M [00:03<00:01, 15.4MB/s]
52%|███████████████████▏ | 22.7M/43.8M [00:03<00:01, 19.7MB/s]
64%|███████████████████████▋ | 28.0M/43.8M [00:04<00:00, 23.7MB/s]
75%|███████████████████████████▋ | 32.8M/43.8M [00:04<00:00, 25.5MB/s]
90%|█████████████████████████████████▏ | 39.3M/43.8M [00:04<00:00, 29.7MB/s]
0%| | 0.00/43.8M [00:00<?, ?B/s]
100%|██████████████████████████████████████| 43.8M/43.8M [00:00<00:00, 188GB/s]
Signal Processing#
Apply common signal processing operations
# 1. Resample to reduce computational load
print(f"Original sampling frequency: {dataset.datasets[0].raw.info['sfreq']} Hz")
preprocessors_signal = [
Resample(sfreq=100), # Downsample to 100 Hz
]
preprocess(dataset, preprocessors_signal)
print(f"After resampling: {dataset.datasets[0].raw.info['sfreq']} Hz")
# 2. Remove power line noise and apply bandpass filter
preprocessors_filtering = [
Filter(l_freq=4, h_freq=30), # Bandpass filter 4-30 Hz
]
preprocess(dataset, preprocessors_filtering)
print("Applied bandpass filter 4-30 Hz")
Original sampling frequency: 250.0 Hz
Finding events on: STI
48 events found on stim channel STI
Event IDs: [1 2 3 4]
Finding events on: STI
48 events found on stim channel STI
Event IDs: [1 2 3 4]
Finding events on: STI
48 events found on stim channel STI
Event IDs: [1 2 3 4]
Finding events on: STI
48 events found on stim channel STI
Event IDs: [1 2 3 4]
Finding events on: STI
48 events found on stim channel STI
Event IDs: [1 2 3 4]
Finding events on: STI
48 events found on stim channel STI
Event IDs: [1 2 3 4]
Finding events on: STI
48 events found on stim channel STI
Event IDs: [1 2 3 4]
Finding events on: STI
48 events found on stim channel STI
Event IDs: [1 2 3 4]
Finding events on: STI
48 events found on stim channel STI
Event IDs: [1 2 3 4]
Finding events on: STI
48 events found on stim channel STI
Event IDs: [1 2 3 4]
Finding events on: STI
48 events found on stim channel STI
Event IDs: [1 2 3 4]
Finding events on: STI
48 events found on stim channel STI
Event IDs: [1 2 3 4]
Finding events on: STI
48 events found on stim channel STI
Event IDs: [1 2 3 4]
Finding events on: STI
48 events found on stim channel STI
Event IDs: [1 2 3 4]
Finding events on: STI
48 events found on stim channel STI
Event IDs: [1 2 3 4]
Finding events on: STI
48 events found on stim channel STI
Event IDs: [1 2 3 4]
Finding events on: STI
48 events found on stim channel STI
Event IDs: [1 2 3 4]
Finding events on: STI
48 events found on stim channel STI
Event IDs: [1 2 3 4]
Finding events on: STI
48 events found on stim channel STI
Event IDs: [1 2 3 4]
Finding events on: STI
48 events found on stim channel STI
Event IDs: [1 2 3 4]
Finding events on: STI
48 events found on stim channel STI
Event IDs: [1 2 3 4]
Finding events on: STI
48 events found on stim channel STI
Event IDs: [1 2 3 4]
Finding events on: STI
48 events found on stim channel STI
Event IDs: [1 2 3 4]
Finding events on: STI
48 events found on stim channel STI
Event IDs: [1 2 3 4]
After resampling: 100.0 Hz
Filtering raw data in 1 contiguous segment
Setting up band-pass filter from 4 - 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: 4.00
- Lower transition bandwidth: 2.00 Hz (-6 dB cutoff frequency: 3.00 Hz)
- Upper passband edge: 30.00 Hz
- Upper transition bandwidth: 7.50 Hz (-6 dB cutoff frequency: 33.75 Hz)
- Filter length: 165 samples (1.650 s)
Filtering raw data in 1 contiguous segment
Setting up band-pass filter from 4 - 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: 4.00
- Lower transition bandwidth: 2.00 Hz (-6 dB cutoff frequency: 3.00 Hz)
- Upper passband edge: 30.00 Hz
- Upper transition bandwidth: 7.50 Hz (-6 dB cutoff frequency: 33.75 Hz)
- Filter length: 165 samples (1.650 s)
Filtering raw data in 1 contiguous segment
Setting up band-pass filter from 4 - 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: 4.00
- Lower transition bandwidth: 2.00 Hz (-6 dB cutoff frequency: 3.00 Hz)
- Upper passband edge: 30.00 Hz
- Upper transition bandwidth: 7.50 Hz (-6 dB cutoff frequency: 33.75 Hz)
- Filter length: 165 samples (1.650 s)
Filtering raw data in 1 contiguous segment
Setting up band-pass filter from 4 - 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: 4.00
- Lower transition bandwidth: 2.00 Hz (-6 dB cutoff frequency: 3.00 Hz)
- Upper passband edge: 30.00 Hz
- Upper transition bandwidth: 7.50 Hz (-6 dB cutoff frequency: 33.75 Hz)
- Filter length: 165 samples (1.650 s)
Filtering raw data in 1 contiguous segment
Setting up band-pass filter from 4 - 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: 4.00
- Lower transition bandwidth: 2.00 Hz (-6 dB cutoff frequency: 3.00 Hz)
- Upper passband edge: 30.00 Hz
- Upper transition bandwidth: 7.50 Hz (-6 dB cutoff frequency: 33.75 Hz)
- Filter length: 165 samples (1.650 s)
Filtering raw data in 1 contiguous segment
Setting up band-pass filter from 4 - 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: 4.00
- Lower transition bandwidth: 2.00 Hz (-6 dB cutoff frequency: 3.00 Hz)
- Upper passband edge: 30.00 Hz
- Upper transition bandwidth: 7.50 Hz (-6 dB cutoff frequency: 33.75 Hz)
- Filter length: 165 samples (1.650 s)
Filtering raw data in 1 contiguous segment
Setting up band-pass filter from 4 - 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: 4.00
- Lower transition bandwidth: 2.00 Hz (-6 dB cutoff frequency: 3.00 Hz)
- Upper passband edge: 30.00 Hz
- Upper transition bandwidth: 7.50 Hz (-6 dB cutoff frequency: 33.75 Hz)
- Filter length: 165 samples (1.650 s)
Filtering raw data in 1 contiguous segment
Setting up band-pass filter from 4 - 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: 4.00
- Lower transition bandwidth: 2.00 Hz (-6 dB cutoff frequency: 3.00 Hz)
- Upper passband edge: 30.00 Hz
- Upper transition bandwidth: 7.50 Hz (-6 dB cutoff frequency: 33.75 Hz)
- Filter length: 165 samples (1.650 s)
Filtering raw data in 1 contiguous segment
Setting up band-pass filter from 4 - 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: 4.00
- Lower transition bandwidth: 2.00 Hz (-6 dB cutoff frequency: 3.00 Hz)
- Upper passband edge: 30.00 Hz
- Upper transition bandwidth: 7.50 Hz (-6 dB cutoff frequency: 33.75 Hz)
- Filter length: 165 samples (1.650 s)
Filtering raw data in 1 contiguous segment
Setting up band-pass filter from 4 - 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: 4.00
- Lower transition bandwidth: 2.00 Hz (-6 dB cutoff frequency: 3.00 Hz)
- Upper passband edge: 30.00 Hz
- Upper transition bandwidth: 7.50 Hz (-6 dB cutoff frequency: 33.75 Hz)
- Filter length: 165 samples (1.650 s)
Filtering raw data in 1 contiguous segment
Setting up band-pass filter from 4 - 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: 4.00
- Lower transition bandwidth: 2.00 Hz (-6 dB cutoff frequency: 3.00 Hz)
- Upper passband edge: 30.00 Hz
- Upper transition bandwidth: 7.50 Hz (-6 dB cutoff frequency: 33.75 Hz)
- Filter length: 165 samples (1.650 s)
Filtering raw data in 1 contiguous segment
Setting up band-pass filter from 4 - 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: 4.00
- Lower transition bandwidth: 2.00 Hz (-6 dB cutoff frequency: 3.00 Hz)
- Upper passband edge: 30.00 Hz
- Upper transition bandwidth: 7.50 Hz (-6 dB cutoff frequency: 33.75 Hz)
- Filter length: 165 samples (1.650 s)
Applied bandpass filter 4-30 Hz
Channel Management#
Select and manipulate channels
# 3. Pick only EEG channels
preprocessors_channels = [
Pick(picks="eeg"), # Select only EEG channels
]
print(f"Channels before pick: {len(dataset.datasets[0].raw.ch_names)}")
preprocess(dataset, preprocessors_channels)
print(f"Channels after pick: {len(dataset.datasets[0].raw.ch_names)}")
# 4. Rename channels (example - just for demonstration)
original_names = dataset.datasets[0].raw.ch_names[:3]
print(f"Original channel names (first 3): {original_names}")
# Note: We won't actually rename to avoid breaking the example,
# but this is how you would do it:
# preprocessors_rename = [
# RenameChannels(mapping={'C3': 'C3_renamed', 'C4': 'C4_renamed'}),
# ]
# preprocess(dataset, preprocessors_rename)
Channels before pick: 26
Channels after pick: 22
Original channel names (first 3): ['Fz', 'FC3', 'FC1']
Reference & Montage#
Set reference and channel positions
# 5. Set EEG reference to average
preprocessors_reference = [
SetEEGReference(ref_channels="average"),
]
preprocess(dataset, preprocessors_reference)
print("Set EEG reference to average")
# 6. Set montage for proper channel positions
montage = mne.channels.make_standard_montage("standard_1020")
preprocessors_montage = [
SetMontage(montage=montage, match_case=False, on_missing="ignore"),
]
preprocess(dataset, preprocessors_montage)
print(
f"Set montage, number of positions: {len(dataset.datasets[0].raw.get_montage().get_positions()['ch_pos'])}"
)
EEG channel type selected for re-referencing
Applying average reference.
Applying a custom ('EEG',) reference.
EEG channel type selected for re-referencing
Applying average reference.
Applying a custom ('EEG',) reference.
EEG channel type selected for re-referencing
Applying average reference.
Applying a custom ('EEG',) reference.
EEG channel type selected for re-referencing
Applying average reference.
Applying a custom ('EEG',) reference.
EEG channel type selected for re-referencing
Applying average reference.
Applying a custom ('EEG',) reference.
EEG channel type selected for re-referencing
Applying average reference.
Applying a custom ('EEG',) reference.
EEG channel type selected for re-referencing
Applying average reference.
Applying a custom ('EEG',) reference.
EEG channel type selected for re-referencing
Applying average reference.
Applying a custom ('EEG',) reference.
EEG channel type selected for re-referencing
Applying average reference.
Applying a custom ('EEG',) reference.
EEG channel type selected for re-referencing
Applying average reference.
Applying a custom ('EEG',) reference.
EEG channel type selected for re-referencing
Applying average reference.
Applying a custom ('EEG',) reference.
EEG channel type selected for re-referencing
Applying average reference.
Applying a custom ('EEG',) reference.
Set EEG reference to average
Set montage, number of positions: 22
Data Transformation#
Apply transformations to the data
# 7. Crop data to specific time range
preprocessors_crop = [
Crop(tmin=0, tmax=60), # Keep only first 60 seconds
]
print(f"Data duration before crop: {dataset.datasets[0].raw.times[-1]:.1f} s")
preprocess(dataset, preprocessors_crop)
print(f"Data duration after crop: {dataset.datasets[0].raw.times[-1]:.1f} s")
Data duration before crop: 386.9 s
Data duration after crop: 60.0 s
Metadata & Configuration#
Modify metadata and configuration
# 8. Anonymize measurement information
preprocessors_anonymize = [
Anonymize(),
]
preprocess(dataset, preprocessors_anonymize)
print("Anonymized measurement information")
Anonymized measurement information
Advanced: Envelope Extraction#
Extract signal envelope using Hilbert transform
# 9. Compute envelope (useful for some analyses)
# Note: This modifies the data, so use carefully
preprocessors_envelope = [
ApplyHilbert(envelope=True),
]
preprocess(dataset, preprocessors_envelope)
print("Computed signal envelope")
Computed signal envelope
Combining Multiple Preprocessing Steps#
You can combine multiple preprocessing steps in a single pipeline
print("\n" + "=" * 60)
print("Complete Preprocessing Pipeline Example")
print("=" * 60)
# Reload dataset for complete pipeline demonstration
dataset_complete = MOABBDataset(dataset_name="BNCI2014_001", subject_ids=[1])
# Set montage first (needed for interpolation)
montage = mne.channels.make_standard_montage("standard_1020")
complete_pipeline = [
# 1. Set montage
SetMontage(montage=montage, match_case=False, on_missing="ignore"),
# 2. Set reference
SetEEGReference(ref_channels="average"),
# 3. Bandpass filter
Filter(l_freq=4, h_freq=30),
# 4. Downsample
Resample(sfreq=100),
# 5. Select only EEG channels
Pick(picks="eeg"),
# 6. Crop to region of interest
Crop(tmin=0, tmax=60),
# 7. Anonymize
Anonymize(),
]
print(
f"Original: {dataset_complete.datasets[0].raw.info['sfreq']} Hz, "
f"{dataset_complete.datasets[0].raw.times[-1]:.1f} s, "
f"{len(dataset_complete.datasets[0].raw.ch_names)} channels"
)
preprocess(dataset_complete, complete_pipeline)
print(
f"After preprocessing: {dataset_complete.datasets[0].raw.info['sfreq']} Hz, "
f"{dataset_complete.datasets[0].raw.times[-1]:.1f} s, "
f"{len(dataset_complete.datasets[0].raw.ch_names)} channels"
)
print("\nPreprocessing complete!")
============================================================
Complete Preprocessing Pipeline Example
============================================================
Original: 250.0 Hz, 386.9 s, 26 channels
EEG channel type selected for re-referencing
Applying average reference.
Applying a custom ('EEG',) reference.
Filtering raw data in 1 contiguous segment
Setting up band-pass filter from 4 - 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: 4.00
- Lower transition bandwidth: 2.00 Hz (-6 dB cutoff frequency: 3.00 Hz)
- Upper passband edge: 30.00 Hz
- Upper transition bandwidth: 7.50 Hz (-6 dB cutoff frequency: 33.75 Hz)
- Filter length: 413 samples (1.652 s)
Finding events on: STI
48 events found on stim channel STI
Event IDs: [1 2 3 4]
Finding events on: STI
48 events found on stim channel STI
Event IDs: [1 2 3 4]
EEG channel type selected for re-referencing
Applying average reference.
Applying a custom ('EEG',) reference.
Filtering raw data in 1 contiguous segment
Setting up band-pass filter from 4 - 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: 4.00
- Lower transition bandwidth: 2.00 Hz (-6 dB cutoff frequency: 3.00 Hz)
- Upper passband edge: 30.00 Hz
- Upper transition bandwidth: 7.50 Hz (-6 dB cutoff frequency: 33.75 Hz)
- Filter length: 413 samples (1.652 s)
Finding events on: STI
48 events found on stim channel STI
Event IDs: [1 2 3 4]
Finding events on: STI
48 events found on stim channel STI
Event IDs: [1 2 3 4]
EEG channel type selected for re-referencing
Applying average reference.
Applying a custom ('EEG',) reference.
Filtering raw data in 1 contiguous segment
Setting up band-pass filter from 4 - 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: 4.00
- Lower transition bandwidth: 2.00 Hz (-6 dB cutoff frequency: 3.00 Hz)
- Upper passband edge: 30.00 Hz
- Upper transition bandwidth: 7.50 Hz (-6 dB cutoff frequency: 33.75 Hz)
- Filter length: 413 samples (1.652 s)
Finding events on: STI
48 events found on stim channel STI
Event IDs: [1 2 3 4]
Finding events on: STI
48 events found on stim channel STI
Event IDs: [1 2 3 4]
EEG channel type selected for re-referencing
Applying average reference.
Applying a custom ('EEG',) reference.
Filtering raw data in 1 contiguous segment
Setting up band-pass filter from 4 - 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: 4.00
- Lower transition bandwidth: 2.00 Hz (-6 dB cutoff frequency: 3.00 Hz)
- Upper passband edge: 30.00 Hz
- Upper transition bandwidth: 7.50 Hz (-6 dB cutoff frequency: 33.75 Hz)
- Filter length: 413 samples (1.652 s)
Finding events on: STI
48 events found on stim channel STI
Event IDs: [1 2 3 4]
Finding events on: STI
48 events found on stim channel STI
Event IDs: [1 2 3 4]
EEG channel type selected for re-referencing
Applying average reference.
Applying a custom ('EEG',) reference.
Filtering raw data in 1 contiguous segment
Setting up band-pass filter from 4 - 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: 4.00
- Lower transition bandwidth: 2.00 Hz (-6 dB cutoff frequency: 3.00 Hz)
- Upper passband edge: 30.00 Hz
- Upper transition bandwidth: 7.50 Hz (-6 dB cutoff frequency: 33.75 Hz)
- Filter length: 413 samples (1.652 s)
Finding events on: STI
48 events found on stim channel STI
Event IDs: [1 2 3 4]
Finding events on: STI
48 events found on stim channel STI
Event IDs: [1 2 3 4]
EEG channel type selected for re-referencing
Applying average reference.
Applying a custom ('EEG',) reference.
Filtering raw data in 1 contiguous segment
Setting up band-pass filter from 4 - 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: 4.00
- Lower transition bandwidth: 2.00 Hz (-6 dB cutoff frequency: 3.00 Hz)
- Upper passband edge: 30.00 Hz
- Upper transition bandwidth: 7.50 Hz (-6 dB cutoff frequency: 33.75 Hz)
- Filter length: 413 samples (1.652 s)
Finding events on: STI
48 events found on stim channel STI
Event IDs: [1 2 3 4]
Finding events on: STI
48 events found on stim channel STI
Event IDs: [1 2 3 4]
EEG channel type selected for re-referencing
Applying average reference.
Applying a custom ('EEG',) reference.
Filtering raw data in 1 contiguous segment
Setting up band-pass filter from 4 - 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: 4.00
- Lower transition bandwidth: 2.00 Hz (-6 dB cutoff frequency: 3.00 Hz)
- Upper passband edge: 30.00 Hz
- Upper transition bandwidth: 7.50 Hz (-6 dB cutoff frequency: 33.75 Hz)
- Filter length: 413 samples (1.652 s)
Finding events on: STI
48 events found on stim channel STI
Event IDs: [1 2 3 4]
Finding events on: STI
48 events found on stim channel STI
Event IDs: [1 2 3 4]
EEG channel type selected for re-referencing
Applying average reference.
Applying a custom ('EEG',) reference.
Filtering raw data in 1 contiguous segment
Setting up band-pass filter from 4 - 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: 4.00
- Lower transition bandwidth: 2.00 Hz (-6 dB cutoff frequency: 3.00 Hz)
- Upper passband edge: 30.00 Hz
- Upper transition bandwidth: 7.50 Hz (-6 dB cutoff frequency: 33.75 Hz)
- Filter length: 413 samples (1.652 s)
Finding events on: STI
48 events found on stim channel STI
Event IDs: [1 2 3 4]
Finding events on: STI
48 events found on stim channel STI
Event IDs: [1 2 3 4]
EEG channel type selected for re-referencing
Applying average reference.
Applying a custom ('EEG',) reference.
Filtering raw data in 1 contiguous segment
Setting up band-pass filter from 4 - 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: 4.00
- Lower transition bandwidth: 2.00 Hz (-6 dB cutoff frequency: 3.00 Hz)
- Upper passband edge: 30.00 Hz
- Upper transition bandwidth: 7.50 Hz (-6 dB cutoff frequency: 33.75 Hz)
- Filter length: 413 samples (1.652 s)
Finding events on: STI
48 events found on stim channel STI
Event IDs: [1 2 3 4]
Finding events on: STI
48 events found on stim channel STI
Event IDs: [1 2 3 4]
EEG channel type selected for re-referencing
Applying average reference.
Applying a custom ('EEG',) reference.
Filtering raw data in 1 contiguous segment
Setting up band-pass filter from 4 - 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: 4.00
- Lower transition bandwidth: 2.00 Hz (-6 dB cutoff frequency: 3.00 Hz)
- Upper passband edge: 30.00 Hz
- Upper transition bandwidth: 7.50 Hz (-6 dB cutoff frequency: 33.75 Hz)
- Filter length: 413 samples (1.652 s)
Finding events on: STI
48 events found on stim channel STI
Event IDs: [1 2 3 4]
Finding events on: STI
48 events found on stim channel STI
Event IDs: [1 2 3 4]
EEG channel type selected for re-referencing
Applying average reference.
Applying a custom ('EEG',) reference.
Filtering raw data in 1 contiguous segment
Setting up band-pass filter from 4 - 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: 4.00
- Lower transition bandwidth: 2.00 Hz (-6 dB cutoff frequency: 3.00 Hz)
- Upper passband edge: 30.00 Hz
- Upper transition bandwidth: 7.50 Hz (-6 dB cutoff frequency: 33.75 Hz)
- Filter length: 413 samples (1.652 s)
Finding events on: STI
48 events found on stim channel STI
Event IDs: [1 2 3 4]
Finding events on: STI
48 events found on stim channel STI
Event IDs: [1 2 3 4]
EEG channel type selected for re-referencing
Applying average reference.
Applying a custom ('EEG',) reference.
Filtering raw data in 1 contiguous segment
Setting up band-pass filter from 4 - 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: 4.00
- Lower transition bandwidth: 2.00 Hz (-6 dB cutoff frequency: 3.00 Hz)
- Upper passband edge: 30.00 Hz
- Upper transition bandwidth: 7.50 Hz (-6 dB cutoff frequency: 33.75 Hz)
- Filter length: 413 samples (1.652 s)
Finding events on: STI
48 events found on stim channel STI
Event IDs: [1 2 3 4]
Finding events on: STI
48 events found on stim channel STI
Event IDs: [1 2 3 4]
After preprocessing: 100.0 Hz, 60.0 s, 22 channels
Preprocessing complete!
Summary#
Braindecode provides 45 preprocessing classes that wrap MNE-Python functionality:
Signal Processing: Resample, Filter, NotchFilter, SavgolFilter, ApplyHilbert, Rescale, OversampledTemporalProjection
Channel Management: Pick, PickChannels, PickTypes, DropChannels, AddChannels, CombineChannels, RenameChannels, ReorderChannels, SetChannelTypes, InterpolateBads, InterpolateTo, InterpolateBridgedElectrodes, ComputeBridgedElectrodes, EqualizeChannels
Reference & Montage: SetEEGReference, AddReferenceChannels, SetMontage
SSP Projections: AddProj, ApplyProj, DelProj
Data Transformation: Crop, CropByAnnotations, ComputeCurrentSourceDensity, FixStimArtifact, MaxwellFilter, RealignRaw, RegressArtifact
Artifact Detection & Annotation: AnnotateAmplitude, AnnotateBreak, AnnotateMovement, AnnotateMuscleZscore, AnnotateNan
Metadata & Configuration: Anonymize, SetAnnotations, SetMeasDate, AddEvents, FixMagCoilTypes, ApplyGradientCompensation
See the API documentation for details on each class and their parameters.
Total running time of the script: (0 minutes 23.826 seconds)
Estimated memory usage: 853 MB