کار با دادههای حوزهی فرکانس در پکیج 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)
دیدگاه ها