Note
Go to the end to download the full example code.
Compute a cross-spectral density (CSD) matrix#
A cross-spectral density (CSD) matrix is similar to a covariance matrix, but in the time-frequency domain. It is the first step towards computing sensor-to-sensor coherence or a DICS beamformer.
This script demonstrates the three methods that MNE-Python provides to compute the CSD:
Using short-term Fourier transform:
mne.time_frequency.csd_fourier()
Using a multitaper approach:
mne.time_frequency.csd_multitaper()
Using Morlet wavelets:
mne.time_frequency.csd_morlet()
# Author: Marijn van Vliet <w.m.vanvliet@gmail.com>
# License: BSD-3-Clause
# Copyright the MNE-Python contributors.
import mne
from mne.datasets import sample
from mne.time_frequency import csd_fourier, csd_morlet, csd_multitaper
print(__doc__)
In the following example, the computation of the CSD matrices can be
performed using multiple cores. Set n_jobs
to a value >1 to select the
number of cores to use.
n_jobs = 1
Loading the sample dataset.
data_path = sample.data_path()
meg_path = data_path / "MEG" / "sample"
fname_raw = meg_path / "sample_audvis_raw.fif"
fname_event = meg_path / "sample_audvis_raw-eve.fif"
raw = mne.io.read_raw_fif(fname_raw)
events = mne.read_events(fname_event)
Opening raw data file /home/circleci/mne_data/MNE-sample-data/MEG/sample/sample_audvis_raw.fif...
Read a total of 3 projection items:
PCA-v1 (1 x 102) idle
PCA-v2 (1 x 102) idle
PCA-v3 (1 x 102) idle
Range : 25800 ... 192599 = 42.956 ... 320.670 secs
Ready.
By default, CSD matrices are computed using all MEG/EEG channels. When interpreting a CSD matrix with mixed sensor types, be aware that the measurement units, and thus the scalings, differ across sensors. In this example, for speed and clarity, we select a single channel type: gradiometers.
picks = mne.pick_types(raw.info, meg="grad")
# Make some epochs, based on events with trigger code 1
epochs = mne.Epochs(
raw,
events,
event_id=1,
tmin=-0.2,
tmax=1,
picks=picks,
baseline=(None, 0),
reject=dict(grad=4000e-13),
preload=True,
)
Not setting metadata
72 matching events found
Setting baseline interval to [-0.19979521315838786, 0.0] s
Applying baseline correction (mode: mean)
0 projection items activated
Loading data for 72 events and 722 original time points ...
0 bad epochs dropped
Computing CSD matrices using short-term Fourier transform and (adaptive) multitapers is straightforward:
csd_fft = csd_fourier(epochs, fmin=15, fmax=20, n_jobs=n_jobs)
csd_mt = csd_multitaper(epochs, fmin=15, fmax=20, adaptive=True, n_jobs=n_jobs)
Computing cross-spectral density from epochs...
0%| | CSD epoch blocks : 0/72 [00:00<?, ?it/s]
1%|▏ | CSD epoch blocks : 1/72 [00:00<00:02, 35.16it/s]
3%|▎ | CSD epoch blocks : 2/72 [00:00<00:01, 36.79it/s]
4%|▍ | CSD epoch blocks : 3/72 [00:00<00:01, 39.04it/s]
6%|▌ | CSD epoch blocks : 4/72 [00:00<00:01, 39.22it/s]
7%|▋ | CSD epoch blocks : 5/72 [00:00<00:01, 39.80it/s]
8%|▊ | CSD epoch blocks : 6/72 [00:00<00:01, 38.72it/s]
10%|▉ | CSD epoch blocks : 7/72 [00:00<00:01, 38.95it/s]
11%|█ | CSD epoch blocks : 8/72 [00:00<00:01, 39.32it/s]
12%|█▎ | CSD epoch blocks : 9/72 [00:00<00:01, 39.56it/s]
14%|█▍ | CSD epoch blocks : 10/72 [00:00<00:01, 39.76it/s]
15%|█▌ | CSD epoch blocks : 11/72 [00:00<00:01, 40.06it/s]
17%|█▋ | CSD epoch blocks : 12/72 [00:00<00:01, 40.17it/s]
18%|█▊ | CSD epoch blocks : 13/72 [00:00<00:01, 40.54it/s]
19%|█▉ | CSD epoch blocks : 14/72 [00:00<00:01, 40.72it/s]
21%|██ | CSD epoch blocks : 15/72 [00:00<00:01, 40.61it/s]
22%|██▏ | CSD epoch blocks : 16/72 [00:00<00:01, 40.71it/s]
24%|██▎ | CSD epoch blocks : 17/72 [00:00<00:01, 40.66it/s]
25%|██▌ | CSD epoch blocks : 18/72 [00:00<00:01, 40.12it/s]
26%|██▋ | CSD epoch blocks : 19/72 [00:00<00:01, 39.79it/s]
28%|██▊ | CSD epoch blocks : 20/72 [00:00<00:01, 39.19it/s]
29%|██▉ | CSD epoch blocks : 21/72 [00:00<00:01, 39.04it/s]
31%|███ | CSD epoch blocks : 22/72 [00:00<00:01, 38.71it/s]
32%|███▏ | CSD epoch blocks : 23/72 [00:00<00:01, 38.48it/s]
33%|███▎ | CSD epoch blocks : 24/72 [00:00<00:01, 38.32it/s]
35%|███▍ | CSD epoch blocks : 25/72 [00:00<00:01, 38.55it/s]
36%|███▌ | CSD epoch blocks : 26/72 [00:00<00:01, 38.85it/s]
38%|███▊ | CSD epoch blocks : 27/72 [00:00<00:01, 39.05it/s]
39%|███▉ | CSD epoch blocks : 28/72 [00:00<00:01, 39.17it/s]
40%|████ | CSD epoch blocks : 29/72 [00:00<00:01, 39.05it/s]
42%|████▏ | CSD epoch blocks : 30/72 [00:00<00:01, 38.96it/s]
43%|████▎ | CSD epoch blocks : 31/72 [00:00<00:01, 39.16it/s]
44%|████▍ | CSD epoch blocks : 32/72 [00:00<00:01, 39.16it/s]
46%|████▌ | CSD epoch blocks : 33/72 [00:00<00:00, 39.40it/s]
47%|████▋ | CSD epoch blocks : 34/72 [00:00<00:00, 39.26it/s]
49%|████▊ | CSD epoch blocks : 35/72 [00:00<00:00, 39.49it/s]
50%|█████ | CSD epoch blocks : 36/72 [00:00<00:00, 39.43it/s]
51%|█████▏ | CSD epoch blocks : 37/72 [00:00<00:00, 39.22it/s]
53%|█████▎ | CSD epoch blocks : 38/72 [00:00<00:00, 39.30it/s]
54%|█████▍ | CSD epoch blocks : 39/72 [00:00<00:00, 39.16it/s]
56%|█████▌ | CSD epoch blocks : 40/72 [00:01<00:00, 39.00it/s]
57%|█████▋ | CSD epoch blocks : 41/72 [00:01<00:00, 39.06it/s]
58%|█████▊ | CSD epoch blocks : 42/72 [00:01<00:00, 39.01it/s]
60%|█████▉ | CSD epoch blocks : 43/72 [00:01<00:00, 39.21it/s]
61%|██████ | CSD epoch blocks : 44/72 [00:01<00:00, 39.16it/s]
62%|██████▎ | CSD epoch blocks : 45/72 [00:01<00:00, 39.23it/s]
64%|██████▍ | CSD epoch blocks : 46/72 [00:01<00:00, 39.26it/s]
65%|██████▌ | CSD epoch blocks : 47/72 [00:01<00:00, 39.24it/s]
67%|██████▋ | CSD epoch blocks : 48/72 [00:01<00:00, 39.18it/s]
68%|██████▊ | CSD epoch blocks : 49/72 [00:01<00:00, 39.35it/s]
69%|██████▉ | CSD epoch blocks : 50/72 [00:01<00:00, 39.45it/s]
71%|███████ | CSD epoch blocks : 51/72 [00:01<00:00, 39.60it/s]
72%|███████▏ | CSD epoch blocks : 52/72 [00:01<00:00, 39.66it/s]
74%|███████▎ | CSD epoch blocks : 53/72 [00:01<00:00, 39.78it/s]
75%|███████▌ | CSD epoch blocks : 54/72 [00:01<00:00, 39.71it/s]
76%|███████▋ | CSD epoch blocks : 55/72 [00:01<00:00, 39.78it/s]
78%|███████▊ | CSD epoch blocks : 56/72 [00:01<00:00, 39.66it/s]
79%|███████▉ | CSD epoch blocks : 57/72 [00:01<00:00, 39.36it/s]
81%|████████ | CSD epoch blocks : 58/72 [00:01<00:00, 38.92it/s]
82%|████████▏ | CSD epoch blocks : 59/72 [00:01<00:00, 38.58it/s]
83%|████████▎ | CSD epoch blocks : 60/72 [00:01<00:00, 38.20it/s]
85%|████████▍ | CSD epoch blocks : 61/72 [00:01<00:00, 37.94it/s]
86%|████████▌ | CSD epoch blocks : 62/72 [00:01<00:00, 37.64it/s]
88%|████████▊ | CSD epoch blocks : 63/72 [00:01<00:00, 37.47it/s]
89%|████████▉ | CSD epoch blocks : 64/72 [00:01<00:00, 37.20it/s]
90%|█████████ | CSD epoch blocks : 65/72 [00:01<00:00, 37.01it/s]
92%|█████████▏| CSD epoch blocks : 66/72 [00:01<00:00, 36.81it/s]
93%|█████████▎| CSD epoch blocks : 67/72 [00:01<00:00, 36.71it/s]
94%|█████████▍| CSD epoch blocks : 68/72 [00:01<00:00, 36.49it/s]
96%|█████████▌| CSD epoch blocks : 69/72 [00:01<00:00, 36.35it/s]
97%|█████████▋| CSD epoch blocks : 70/72 [00:01<00:00, 36.17it/s]
99%|█████████▊| CSD epoch blocks : 71/72 [00:01<00:00, 36.01it/s]
100%|██████████| CSD epoch blocks : 72/72 [00:01<00:00, 35.81it/s]
100%|██████████| CSD epoch blocks : 72/72 [00:01<00:00, 37.92it/s]
[done]
Using multitaper spectrum estimation with 7 DPSS windows
Computing cross-spectral density from epochs...
0%| | CSD epoch blocks : 0/72 [00:00<?, ?it/s]
1%|▏ | CSD epoch blocks : 1/72 [00:00<00:16, 4.35it/s]
3%|▎ | CSD epoch blocks : 2/72 [00:00<00:15, 4.56it/s]
4%|▍ | CSD epoch blocks : 3/72 [00:00<00:15, 4.60it/s]
6%|▌ | CSD epoch blocks : 4/72 [00:00<00:14, 4.65it/s]
7%|▋ | CSD epoch blocks : 5/72 [00:01<00:14, 4.67it/s]
8%|▊ | CSD epoch blocks : 6/72 [00:01<00:14, 4.68it/s]
10%|▉ | CSD epoch blocks : 7/72 [00:01<00:13, 4.77it/s]
11%|█ | CSD epoch blocks : 8/72 [00:01<00:13, 4.92it/s]
12%|█▎ | CSD epoch blocks : 9/72 [00:01<00:12, 5.05it/s]
14%|█▍ | CSD epoch blocks : 10/72 [00:01<00:11, 5.17it/s]
15%|█▌ | CSD epoch blocks : 11/72 [00:02<00:11, 5.26it/s]
17%|█▋ | CSD epoch blocks : 12/72 [00:02<00:11, 5.34it/s]
18%|█▊ | CSD epoch blocks : 13/72 [00:02<00:11, 5.36it/s]
19%|█▉ | CSD epoch blocks : 14/72 [00:02<00:10, 5.40it/s]
21%|██ | CSD epoch blocks : 15/72 [00:02<00:10, 5.47it/s]
22%|██▏ | CSD epoch blocks : 16/72 [00:02<00:10, 5.50it/s]
24%|██▎ | CSD epoch blocks : 17/72 [00:03<00:09, 5.52it/s]
25%|██▌ | CSD epoch blocks : 18/72 [00:03<00:09, 5.58it/s]
26%|██▋ | CSD epoch blocks : 19/72 [00:03<00:09, 5.60it/s]
28%|██▊ | CSD epoch blocks : 20/72 [00:03<00:09, 5.63it/s]
29%|██▉ | CSD epoch blocks : 21/72 [00:03<00:09, 5.65it/s]
31%|███ | CSD epoch blocks : 22/72 [00:03<00:08, 5.66it/s]
32%|███▏ | CSD epoch blocks : 23/72 [00:04<00:08, 5.68it/s]
33%|███▎ | CSD epoch blocks : 24/72 [00:04<00:08, 5.70it/s]
35%|███▍ | CSD epoch blocks : 25/72 [00:04<00:08, 5.72it/s]
36%|███▌ | CSD epoch blocks : 26/72 [00:04<00:08, 5.72it/s]
38%|███▊ | CSD epoch blocks : 27/72 [00:04<00:07, 5.70it/s]
39%|███▉ | CSD epoch blocks : 28/72 [00:05<00:07, 5.72it/s]
40%|████ | CSD epoch blocks : 29/72 [00:05<00:07, 5.74it/s]
42%|████▏ | CSD epoch blocks : 30/72 [00:05<00:07, 5.76it/s]
43%|████▎ | CSD epoch blocks : 31/72 [00:05<00:07, 5.78it/s]
44%|████▍ | CSD epoch blocks : 32/72 [00:05<00:06, 5.79it/s]
46%|████▌ | CSD epoch blocks : 33/72 [00:05<00:06, 5.78it/s]
47%|████▋ | CSD epoch blocks : 34/72 [00:06<00:06, 5.80it/s]
49%|████▊ | CSD epoch blocks : 35/72 [00:06<00:06, 5.82it/s]
50%|█████ | CSD epoch blocks : 36/72 [00:06<00:06, 5.79it/s]
51%|█████▏ | CSD epoch blocks : 37/72 [00:06<00:06, 5.79it/s]
53%|█████▎ | CSD epoch blocks : 38/72 [00:06<00:05, 5.79it/s]
54%|█████▍ | CSD epoch blocks : 39/72 [00:06<00:05, 5.80it/s]
56%|█████▌ | CSD epoch blocks : 40/72 [00:07<00:05, 5.81it/s]
57%|█████▋ | CSD epoch blocks : 41/72 [00:07<00:05, 5.78it/s]
58%|█████▊ | CSD epoch blocks : 42/72 [00:07<00:05, 5.80it/s]
60%|█████▉ | CSD epoch blocks : 43/72 [00:07<00:04, 5.81it/s]
61%|██████ | CSD epoch blocks : 44/72 [00:07<00:04, 5.83it/s]
62%|██████▎ | CSD epoch blocks : 45/72 [00:07<00:04, 5.82it/s]
64%|██████▍ | CSD epoch blocks : 46/72 [00:08<00:04, 5.83it/s]
65%|██████▌ | CSD epoch blocks : 47/72 [00:08<00:04, 5.82it/s]
67%|██████▋ | CSD epoch blocks : 48/72 [00:08<00:04, 5.84it/s]
68%|██████▊ | CSD epoch blocks : 49/72 [00:08<00:03, 5.89it/s]
69%|██████▉ | CSD epoch blocks : 50/72 [00:08<00:03, 5.93it/s]
71%|███████ | CSD epoch blocks : 51/72 [00:08<00:03, 5.96it/s]
72%|███████▏ | CSD epoch blocks : 52/72 [00:09<00:03, 5.98it/s]
74%|███████▎ | CSD epoch blocks : 53/72 [00:09<00:03, 5.98it/s]
75%|███████▌ | CSD epoch blocks : 54/72 [00:09<00:03, 5.98it/s]
76%|███████▋ | CSD epoch blocks : 55/72 [00:09<00:02, 6.01it/s]
78%|███████▊ | CSD epoch blocks : 56/72 [00:09<00:02, 6.05it/s]
79%|███████▉ | CSD epoch blocks : 57/72 [00:09<00:02, 6.07it/s]
81%|████████ | CSD epoch blocks : 58/72 [00:09<00:02, 6.12it/s]
82%|████████▏ | CSD epoch blocks : 59/72 [00:10<00:02, 6.11it/s]
83%|████████▎ | CSD epoch blocks : 60/72 [00:10<00:01, 6.11it/s]
85%|████████▍ | CSD epoch blocks : 61/72 [00:10<00:01, 6.10it/s]
86%|████████▌ | CSD epoch blocks : 62/72 [00:10<00:01, 6.14it/s]
88%|████████▊ | CSD epoch blocks : 63/72 [00:10<00:01, 6.15it/s]
89%|████████▉ | CSD epoch blocks : 64/72 [00:10<00:01, 6.13it/s]
90%|█████████ | CSD epoch blocks : 65/72 [00:11<00:01, 6.10it/s]
92%|█████████▏| CSD epoch blocks : 66/72 [00:11<00:00, 6.07it/s]
93%|█████████▎| CSD epoch blocks : 67/72 [00:11<00:00, 6.04it/s]
94%|█████████▍| CSD epoch blocks : 68/72 [00:11<00:00, 6.02it/s]
96%|█████████▌| CSD epoch blocks : 69/72 [00:11<00:00, 5.98it/s]
97%|█████████▋| CSD epoch blocks : 70/72 [00:11<00:00, 5.97it/s]
99%|█████████▊| CSD epoch blocks : 71/72 [00:12<00:00, 5.94it/s]
100%|██████████| CSD epoch blocks : 72/72 [00:12<00:00, 5.93it/s]
100%|██████████| CSD epoch blocks : 72/72 [00:12<00:00, 5.83it/s]
[done]
When computing the CSD with Morlet wavelets, you specify the exact frequencies at which to compute it. For each frequency, a corresponding wavelet will be constructed and convolved with the signal, resulting in a time-frequency decomposition.
The CSD is constructed by computing the correlation between the
time-frequency representations between all sensor-to-sensor pairs. The
time-frequency decomposition originally has the same sampling rate as the
signal, in our case ~600Hz. This means the decomposition is over-specified in
time and we may not need to use all samples during our CSD computation, just
enough to get a reliable correlation statistic. By specifying decim=10
,
we use every 10th sample, which will greatly speed up the computation and
will have a minimal effect on the CSD.
frequencies = [16, 17, 18, 19, 20]
csd_wav = csd_morlet(epochs, frequencies, decim=10, n_jobs=n_jobs)
Computing cross-spectral density from epochs...
0%| | CSD epoch blocks : 0/72 [00:00<?, ?it/s]
1%|▏ | CSD epoch blocks : 1/72 [00:00<00:06, 10.97it/s]
3%|▎ | CSD epoch blocks : 2/72 [00:00<00:06, 10.83it/s]
4%|▍ | CSD epoch blocks : 3/72 [00:00<00:06, 11.17it/s]
6%|▌ | CSD epoch blocks : 4/72 [00:00<00:05, 11.43it/s]
7%|▋ | CSD epoch blocks : 5/72 [00:00<00:05, 11.61it/s]
8%|▊ | CSD epoch blocks : 6/72 [00:00<00:05, 11.71it/s]
10%|▉ | CSD epoch blocks : 7/72 [00:00<00:05, 11.75it/s]
11%|█ | CSD epoch blocks : 8/72 [00:00<00:05, 11.80it/s]
12%|█▎ | CSD epoch blocks : 9/72 [00:00<00:05, 11.86it/s]
14%|█▍ | CSD epoch blocks : 10/72 [00:00<00:05, 11.90it/s]
15%|█▌ | CSD epoch blocks : 11/72 [00:00<00:05, 11.93it/s]
17%|█▋ | CSD epoch blocks : 12/72 [00:01<00:05, 11.93it/s]
18%|█▊ | CSD epoch blocks : 13/72 [00:01<00:04, 11.94it/s]
19%|█▉ | CSD epoch blocks : 14/72 [00:01<00:04, 11.97it/s]
21%|██ | CSD epoch blocks : 15/72 [00:01<00:04, 11.83it/s]
22%|██▏ | CSD epoch blocks : 16/72 [00:01<00:04, 11.73it/s]
24%|██▎ | CSD epoch blocks : 17/72 [00:01<00:04, 11.76it/s]
25%|██▌ | CSD epoch blocks : 18/72 [00:01<00:04, 11.79it/s]
26%|██▋ | CSD epoch blocks : 19/72 [00:01<00:04, 11.80it/s]
28%|██▊ | CSD epoch blocks : 20/72 [00:01<00:04, 11.83it/s]
29%|██▉ | CSD epoch blocks : 21/72 [00:01<00:04, 11.84it/s]
31%|███ | CSD epoch blocks : 22/72 [00:01<00:04, 11.86it/s]
32%|███▏ | CSD epoch blocks : 23/72 [00:01<00:04, 11.80it/s]
33%|███▎ | CSD epoch blocks : 24/72 [00:02<00:04, 11.83it/s]
35%|███▍ | CSD epoch blocks : 25/72 [00:02<00:03, 11.77it/s]
36%|███▌ | CSD epoch blocks : 26/72 [00:02<00:03, 11.77it/s]
38%|███▊ | CSD epoch blocks : 27/72 [00:02<00:03, 11.83it/s]
39%|███▉ | CSD epoch blocks : 28/72 [00:02<00:03, 11.82it/s]
40%|████ | CSD epoch blocks : 29/72 [00:02<00:03, 11.84it/s]
42%|████▏ | CSD epoch blocks : 30/72 [00:02<00:03, 11.85it/s]
43%|████▎ | CSD epoch blocks : 31/72 [00:02<00:03, 11.78it/s]
44%|████▍ | CSD epoch blocks : 32/72 [00:02<00:03, 11.79it/s]
46%|████▌ | CSD epoch blocks : 33/72 [00:02<00:03, 11.84it/s]
47%|████▋ | CSD epoch blocks : 34/72 [00:02<00:03, 11.85it/s]
49%|████▊ | CSD epoch blocks : 35/72 [00:02<00:03, 11.87it/s]
50%|█████ | CSD epoch blocks : 36/72 [00:03<00:02, 12.02it/s]
51%|█████▏ | CSD epoch blocks : 37/72 [00:03<00:02, 12.20it/s]
53%|█████▎ | CSD epoch blocks : 38/72 [00:03<00:02, 12.37it/s]
54%|█████▍ | CSD epoch blocks : 39/72 [00:03<00:02, 12.53it/s]
56%|█████▌ | CSD epoch blocks : 40/72 [00:03<00:02, 12.69it/s]
57%|█████▋ | CSD epoch blocks : 41/72 [00:03<00:02, 12.84it/s]
58%|█████▊ | CSD epoch blocks : 42/72 [00:03<00:02, 12.98it/s]
60%|█████▉ | CSD epoch blocks : 43/72 [00:03<00:02, 13.12it/s]
61%|██████ | CSD epoch blocks : 44/72 [00:03<00:02, 13.25it/s]
62%|██████▎ | CSD epoch blocks : 45/72 [00:03<00:02, 13.40it/s]
64%|██████▍ | CSD epoch blocks : 46/72 [00:03<00:01, 13.53it/s]
65%|██████▌ | CSD epoch blocks : 47/72 [00:03<00:01, 13.56it/s]
67%|██████▋ | CSD epoch blocks : 48/72 [00:03<00:01, 13.37it/s]
68%|██████▊ | CSD epoch blocks : 49/72 [00:03<00:01, 13.18it/s]
69%|██████▉ | CSD epoch blocks : 50/72 [00:04<00:01, 13.00it/s]
71%|███████ | CSD epoch blocks : 51/72 [00:04<00:01, 12.85it/s]
72%|███████▏ | CSD epoch blocks : 52/72 [00:04<00:01, 12.71it/s]
74%|███████▎ | CSD epoch blocks : 53/72 [00:04<00:01, 12.57it/s]
75%|███████▌ | CSD epoch blocks : 54/72 [00:04<00:01, 12.45it/s]
76%|███████▋ | CSD epoch blocks : 55/72 [00:04<00:01, 12.34it/s]
78%|███████▊ | CSD epoch blocks : 56/72 [00:04<00:01, 12.23it/s]
79%|███████▉ | CSD epoch blocks : 57/72 [00:04<00:01, 12.13it/s]
81%|████████ | CSD epoch blocks : 58/72 [00:04<00:01, 12.04it/s]
82%|████████▏ | CSD epoch blocks : 59/72 [00:04<00:01, 11.96it/s]
83%|████████▎ | CSD epoch blocks : 60/72 [00:04<00:01, 11.88it/s]
85%|████████▍ | CSD epoch blocks : 61/72 [00:05<00:00, 11.80it/s]
86%|████████▌ | CSD epoch blocks : 62/72 [00:05<00:00, 11.74it/s]
88%|████████▊ | CSD epoch blocks : 63/72 [00:05<00:00, 11.68it/s]
89%|████████▉ | CSD epoch blocks : 64/72 [00:05<00:00, 11.62it/s]
90%|█████████ | CSD epoch blocks : 65/72 [00:05<00:00, 11.56it/s]
92%|█████████▏| CSD epoch blocks : 66/72 [00:05<00:00, 11.49it/s]
93%|█████████▎| CSD epoch blocks : 67/72 [00:05<00:00, 11.44it/s]
94%|█████████▍| CSD epoch blocks : 68/72 [00:05<00:00, 11.39it/s]
96%|█████████▌| CSD epoch blocks : 69/72 [00:05<00:00, 11.34it/s]
97%|█████████▋| CSD epoch blocks : 70/72 [00:05<00:00, 11.28it/s]
99%|█████████▊| CSD epoch blocks : 71/72 [00:05<00:00, 11.24it/s]
100%|██████████| CSD epoch blocks : 72/72 [00:06<00:00, 11.20it/s]
100%|██████████| CSD epoch blocks : 72/72 [00:06<00:00, 11.84it/s]
[done]
The resulting mne.time_frequency.CrossSpectralDensity
objects have a
plotting function we can use to compare the results of the different methods.
We’re plotting the mean CSD across frequencies.
mne.time_frequency.CrossSpectralDensity.plot()
returns a list of
created figures; in this case, each returned list has only one figure
so we use a Python trick of including a comma after our variable name
to assign the figure (not the list) to our fig
variable:
Total running time of the script: (0 minutes 21.822 seconds)