欢迎访问宙启技术站
智能推送

使用MNE数据集分析脑电图中的频率变化特征

发布时间:2024-01-08 07:27:38

脑电图(Electroencephalogram,EEG)是一种用于记录人类或动物大脑电活动的非侵入性技术。EEG信号可以通过频率分析来研究脑功能,在诸如睡眠、注意力、认知和情绪方面具有重要的应用价值。

MNE是一个用于处理EEG/MEG数据的Python库,提供了强大的工具和方法来分析和可视化脑电图数据。以下是一个使用MNE数据集分析脑电图中频率变化特征的示例。

首先,我们需要导入MNE库和一些数据集,例如MNE自带的示例数据集:

import numpy as np
import matplotlib.pyplot as plt
import mne

# 导入MNE自带的数据集
from mne.datasets import sample

# 设置数据集路径
data_path = sample.data_path()

接下来,我们可以加载示例数据集中的一个主题的EEG数据。例如,我们可以加载示例数据集中的一个睡眠样本数据:

# 设置文件路径
file_path = data_path + '/MEG/sample/sample_audvis_filt-0-40_raw.fif'

# 读取原始数据
raw = mne.io.read_raw_fif(file_path, preload=True)

# 打印原始数据信息
print(raw.info)

然后,我们可以进行一些数据预处理操作,例如重新参考数据、滤波和剔除伪迹等:

# 重新参考数据
raw.set_eeg_reference()

# 设置刺激标记
events = mne.find_events(raw)

# 滤波处理
raw.filter(1, 40)

# 剔除伪迹
picks = mne.pick_types(raw.info, meg=False, eeg=True)
raw.plot(duration=60, order=picks, n_channels=len(picks), remove_dc=False)

接下来,我们可以使用MNE库中的频率分析方法来计算频谱图和功率谱密度。频率分析可以帮助我们了解不同频率带中的脑电图活动。

例如,我们可以计算脑电图不同频率带的能量谱密度:

# 定义不同频率带的范围
freq_bands = {'alpha': [8, 12],
              'beta': [13, 30],
              'gamma': [30, 80]}

# 基于不同频率带计算能量谱密度
psds, freqs = mne.time_frequency.psd_welch(raw, fmin=1, fmax=40)

# 绘制不同频率带的能量谱密度图
plt.figure(figsize=(10, 6))
for band in freq_bands:
    freq_range = freq_bands[band]
    band_power = psds[:, :, (freqs >= freq_range[0]) & (freqs <= freq_range[1])].mean(axis=(2))
    plt.plot(raw.times, band_power[0], label=band)
plt.xlabel('Time (s)')
plt.ylabel('Power Spectral Density (dB/Hz)')
plt.legend()
plt.show()

最后,我们可以通过定义不同的试验条件或任务,进一步研究EEG信号中不同频率带的变化特征。例如,我们可以比较不同试验条件下的频率变化特征:

# 定义试验条件
conditions = ['Condition 1', 'Condition 2', 'Condition 3']

# 计算不同试验条件下的频率变化特征
freq_changes = []
for condition in conditions:
    epochs = mne.Epochs(raw, events, event_id=condition, tmin=-0.5, tmax=1.5, baseline=None)
    psds, freqs = mne.time_frequency.psd_welch(epochs, fmin=1, fmax=40)
    freq_changes.append(psds.mean(axis=0))

# 绘制不同试验条件下的频率变化特征
plt.figure(figsize=(10, 6))
for i, condition in enumerate(conditions):
    freq_change = freq_changes[i]
    plt.plot(freqs, freq_change.mean(axis=0), label=condition)
plt.xlabel('Frequency (Hz)')
plt.ylabel('Power Spectral Density (dB/Hz)')
plt.legend()
plt.show()

通过以上例子,你可以使用MNE库对脑电图数据进行频率分析,并研究不同频率带中的变化特征。这些分析技术可以帮助我们深入了解脑电活动与脑功能之间的关系,并在医学诊断、脑神经科学研究和脑机接口等领域发挥重要作用。