کار با داده‌های حوزه‌ی فرکانس در پکیج MNE پایتون


در این مقاله یاد می‌گیریم که با استفاده از پکیج MNE پایتون چطور بازنمایی‌های حوزه فرکانس داده‌ی خود را تجسم سازی کنیم و برای این منظور کلاس‌های Spectrum و EpochsSpectrum را معرفی می‌کنیم.

ابتدا لازم است ماژول‌های موردنیاز خود را import کنیم و دیتاست sample خود را لود کنیم.

Python

import numpy as np
import mne
sample_data_folder = mne.datasets.sample.data_path()
sample_data_raw_file = sample_data_folder / "MEG" / "sample" / "sample_audvis_raw.fif"
raw = mne.io.read_raw_fif(sample_data_raw_file, verbose=False).crop(tmax=60)

ممکن است داده‌ی ما پیوسته باشد برای این منظور از Raw استفاده می‌کنیم و اگر داده‌ی ما پیوسته نباشد از متد Epochs پکیج MNE استفاده می‌کنیم و یا برای داده‌های میانگین‌گیری شده از Evoked استفاده می‌کنیم. هر سه این توابع (Raw, Epochs, Evoked) یک متد به نام ()compute_psd با گزینه‌های مشابه دارند.

Python

raw.compute_psd()
output:
Effective window size : 3.410 (s)

به طور پیش فرض، روش برآورد طیفی برای داده‌ی پیوسته، Welch method و برای داده‌ی میانگین گیری شده یا جدا شده در سطح ترایال، multitaper method است. این مقادیر پیش فرض را می‌توان با وارد کردن method=’welch’ یا method=’multitaper’ به متد ()compute_psd مشخص کرد. همچنین گزینه‌های دیگر به عنوان ورودی این متد در نظر گرفته شده‌اند؛ برای مثال می‌توانیم طیف یک محدوده‌ی زمانی مشخص، یک محدوده‌ی فرکانسی مشخص و زیرمجموعه‌ای از کانال‌های موردنظر محاسبه کنیم:

Python

raw.compute_psd(method="multitaper", tmin=10, tmax=20, fmin=5, fmax=30, picks="eeg")
output:
Using multitaper spectrum estimation with 7 DPSS windows

می توانیم به تابع برآورد طیفی، پارامترهایی اضافه کنیم، مانند طول پنجره FFT و همپوشانی برای متد Welch، برای این منظور باید از توابع mne.time_frequency.spectrum و توابع برآورد طیفی ()psd_array_welch و ()psd_array_multitaper استفاده کرد.

برای داده‌های epoched (یا داده‌هایی که در سطح ترایال جدا شده‌اند)، کلاس برآورد طیفی mne.time_frequency.EpochsSpectrum است. هر دوی این کلاس‌ها دارای متد ()get_data هستند:

Python

with mne.use_log_level("WARNING"):  # hide some irrelevant info messages
        events = mne.find_events(raw, stim_channel="STI 014")   
        event_dict = {        
                      "auditory/left": 1,        
                      "auditory/right": 2,        
                      "visual/left": 3,        
                      "visual/right": 4,}
        epochs = mne.Epochs(raw, events, tmin=-0.3, tmax=0.7, event_id=event_dict, preload=True)
epo_spectrum = epochs.compute_psd()
psds,freqs = epo_spectrum.get_data(return_freqs=True)
print(f"\nPSDs shape: {psds.shape}, freqs shape: {freqs.shape}")
epo_spectrum

output:
Using multitaper spectrum estimation with 7 DPSS windows PSDs shape: (77, 364, 301), freqs shape: (301,)

علاوه بر این هر دو کلاس Spectrum و EpochsSpectrum دارای متد __getitem__ هستند. برای آبجکت‌های Spectrum، ایندکس‌ها مشابه به آبجکت Raw یا آرایه‌ی Numpy پایتون هستند:

Python

evoked = epochs["auditory"].average()
evk_spectrum = evoked.compute_psd()
# the first 3 frequency bins for the first 4 channels:
print(evk_spectrum[:4, :3])
output:
    Using multitaper spectrum estimation with 7 DPSS windows
    [[5.61863537e-23 1.13487136e-22 9.88010499e-23] 
     [2.89065956e-23 4.24056397e-23 3.91160668e-23] 
     [1.56762015e-25 2.65842303e-25 2.39426775e-25] 
     [5.38758770e-23 1.03771739e-22 9.98519756e-23]]

تجسم سازی آبجکت‌های طیفی با پکیج MNE پایتون

هر دو آبجکت Spectrum و EpochsSpectrum دارای متدهای نمایش ()plot (فرکانس*توان)، plot_topo() (فرکانس* توان به طور جداگانه برای هر سنسور) و ()plot_topomap (توپوگرافی توان در باندهای فرکانسی خاص) هستند. تعدادی نمودار در ادامه نشان داده شده‌اند:

Python

evk_spectrum.plot(picks="data", exclude="bads")
evk_spectrum.plot_topo(color="k", fig_facecolor="w", axis_facecolor="w")


Python

evk_spectrum.plot_topomap(ch_type="eeg", agg_fun=np.median)

دیدگاه ها

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

code