用于EEG数据处理的MNE安装及使用

MNE安装

MNE官网:https://mne.tools/stable/auto_examples/index.html

1.安装MNE-python

conda install mne

2.原始数据raw的读入和使用

导入库

import mne
import matplotlib.pyplot as plt

#读入数据
raw = mne.io.read_raw_bdf('./Part1_IAPS_SES1_EEG_fNIRS_03082006.bdf')

#查看核心数据
raw.info

用于EEG数据处理的MNE安装及使用_第1张图片
不同的文件里面的数据不同,几个关键文件是:
bads:不良通道
ch_names:通道名称
sfreq:采样频率

#直接获取原始数据,(原始数据,时间序列)
data,times=raw[:]

获取原始数据小例子

#获取10-20s内的EEG数据例子
#根据type来选择 那些良好的MEG信号(良好的MEG信号,通过设置exclude="bads") channel,结果为 channels所对应的的索引
picks = mne.pick_types(raw.info, eeg=True, exclude=["F5","F8","AF7","AF8","AFz","Fp1","Fp2","Fpz","F7","F6","EXG1","EXG2","EXG3","EXG4","EXG5","EXG6","EXG7","EXG8","Status"]) #可以自己设置不要的通道
#picks = mne.pick_types(raw.info, meg=True, exclude='bads')#挑出非坏道的通道,第二个参数是设置数据类型,脑电数据设为eeg,近红外数据设为fnirs
t_id = raw.time_as_index([10.,20.])#获取10到20s的时间序号
data,times = raw[picks,t_id[0]:t_id[1]] #raw[通道,时间序列]
plt.plot(times,data.T)
plt.title("Sample channels")

(以下绘图数据不是上面导入的数据所画图片)
用于EEG数据处理的MNE安装及使用_第2张图片

另一种方式

# sfreq:采样频率
# raw返回所选信道以及时间段内的数据和时间点,
# 分别赋值给data以及times(即raw对象返回的是两个array)
#选择前5个通道,1-3s的数据
sfreq=raw.info['sfreq']#采样频率
data,times=raw[:5,int(sfreq*1):int(sfreq*3)]
plt.plot(times,data.T)
plt.title("Sample channels")

用于EEG数据处理的MNE安装及使用_第3张图片
绘制功率谱密度

#绘制各个通道的功率谱密度
raw.plot_psd()
plt.show()

用于EEG数据处理的MNE安装及使用_第4张图片
SSP矢量图

#绘制SSP矢量图
raw.plot_projs_topomap()
plt.show()

用于EEG数据处理的MNE安装及使用_第5张图片
通道频谱图

#绘制通道频谱图作为topography
raw.plot_psd_topo()
plt.show()

用于EEG数据处理的MNE安装及使用_第6张图片
绘制电极位置

raw.plot_sensors()
plt.show()

用于EEG数据处理的MNE安装及使用_第7张图片

2. MNE 从头创建Raw对象

对于某些数据可以通过自己创建raw数据来进行EEG分析

#导入库
import mne
import numpy as np
import matplotlib.pyplot as plt


"""
生成一个大小为5x1000的二维随机数据
其中5代表5个通道,1000代表times
"""
data = np.random.randn(5, 1000)

"""
创建info结构,
内容包括:通道名称和通道类型
设置采样频率为:sfreq=100
"""
info = mne.create_info(
    ch_names=['MEG1', 'MEG2', 'EEG1', 'EEG2', 'EOG'],
    ch_types=['grad', 'grad', 'eeg', 'eeg', 'eog'],
    sfreq=100
)
"""
利用mne.io.RawArray类创建Raw对象
"""
custom_raw = mne.io.RawArray(data, info)
print(custom_raw)

自己数据的实例
创建数据,此处直接使用上面读取文件里的data,也可以自己创建data

#读入数据
raw = mne.io.read_raw_bdf('./Part1_IAPS_SES1_EEG_fNIRS_03082006.bdf')
picks = mne.pick_types(raw.info, eeg=True, exclude=["F5","F8","AF7","AF8","AFz","Fp1","Fp2","Fpz","F7","F6","EXG1","EXG2","EXG3","EXG4","EXG5","EXG6","EXG7","EXG8","Status"]) #可以自己设置不要的通道
data,times = raw[picks,:]

用于EEG数据处理的MNE安装及使用_第8张图片

#创建info结构,
# 内容包括:通道名称和通道类型
# 设置采样频率为:sfreq=256
exclude=["F5","F8","AF7","AF8","AFz","Fp1","Fp2","Fpz","F7","F6","EXG1","EXG2","EXG3","EXG4","EXG5","EXG6","EXG7","EXG8","Status"]#设置我想要删除的通道
# for x in exclude:
#     ch_names.remove(x) #移除
#设置通道类型
ch_types = ['eeg','eeg','eeg','eeg','eeg','eeg','eeg','eeg','eeg','eeg','eeg','eeg','eeg','eeg','eeg','eeg','eeg','eeg','eeg','eeg','eeg','eeg','eeg','eeg','eeg','eeg','eeg','eeg','eeg','eeg','eeg','eeg','eeg','eeg','eeg','eeg','eeg','eeg','eeg','eeg','eeg','eeg','eeg','eeg','eeg','eeg','eeg','eeg','eeg','eeg','eeg','eeg','eeg','eeg']
info = mne.create_info(
    ch_names=ch_names,
    ch_types=ch_types,
    sfreq=256
)

整合数据,创建raw对象

#利用mne.io.RawArray类创建Raw对象
custom_raw = mne.io.RawArray(data, info)
print(custom_raw)

在这里插入图片描述
可以看出有54个通道

你可能感兴趣的:(代码,脑机接口,MNE)