当前位置:   article > 正文

脑机接口基础学习02-认识MNE数据结构Raw及其用法简介_raw.plot

raw.plot

Raw对象主要用来存储连续型数据,核心数据为n_channels和times,也包括Info对象

#引入Python库
import mne 
from mne.datasets import sample
import matplotlib.pyplot as plt

#sample的存放地址
fname=r'E:\脑机接口资料\MNE-sample-data\MEG\sample\sample_audvis_raw.fif'

raw=mne.io.read_raw_fif(fname)

print(raw)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

输出结果:
在这里插入图片描述

'''
info中的信息,info中记录了raw中有哪些是不良通道(bads),通道名称:ch_names,sfreq等

'''
raw.info

#通常raw的数据访问方式如下:
# data,times=raw[picks,time_slice]
#picks:是根据条件挑选出来的索引;
#time_slice:时间切片
#想要获取raw中所有数据,以下两种方式均可:
#data,times=raw[:]
#data,times=raw[:,:]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

在这里插入图片描述

'''
案例:获取10-20s秒内良好的MEG数据

#根据type来选择,那些良好的MEG信号(良好的MEG信号,通过设置exclude='bads'),channel结果为channels所对应的的索引

'''

picks=mne.pick_types(raw.info,meg=True,exclude='bads')
t_idx=raw.time_as_index([10.,20.])
data,times=raw[picks,t_idx[0]:t_idx[1]]
plt.plot(times,data.T)
plt.title('Sample channels')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

在这里插入图片描述

'''
sfreq:采样频率

raw返回所选信道及时间段内的数据和时间点
分别赋值给data及times(即raw对象返回的是两个array)

'''

sfreq=raw.info['sfreq']
data,times=raw[:5,int(sfreq*1):int(sfreq*3)]
plt.plot(times,data.T)
plt.title('Sample channels')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

在这里插入图片描述

'''
绘制各通道的功率谱密度

'''

raw.plot_psd()
plt.show()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在这里插入图片描述

'''
绘制SSP矢量图
SSP为信号空间投影

'''

raw.plot_projs_topomap()
plt.show()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

按道理说应该出现这样子的图
在这里插入图片描述
但是不知道为什么我这边总是报错,且没有解决这个错误,希望有人知道怎样解决这个错误的话可以指点我一下
在这里插入图片描述
在这里插入图片描述

'''
绘制通道频谱图作为topography
'''

raw.plot_psd_topo()
plt.show()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

在这里插入图片描述

'''
绘制电极位置

'''

raw.plot_sensors()
plt.show()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在这里插入图片描述
按道理说这些电极位置都应该在框框里,不知道为什么我画出来都越界了,希望有人知道的话可以指点我一下

'''
MNE从头创建RAW对象

在实际过程中,有时需要从头构建数据来创建Raw对象
方式:通过mne.io.RawArray类来手动创建Raw

注:使用mne.io.RawArray创建Raw对象时,其构造函数只接受矩阵和info对象

数据对应的单位:
V:eeg,eog,seeg,emg,ecg,bio,ecog
T:mag
T/m:grad
M:hbo,hbr
Am:dipole
AU:misc

构建一个Raw对象时,需要准备两种数据,一种是data数据,一种是info数据
data数据是一个二维数据,形状为(n_channels,n_times)

'''
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
###########案例1

#引入Python库
import mne 
import numpy as np
import matplotlib.pyplot as plt
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
'''
生成一个5*1000的二维随机数据
其中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)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

在这里插入图片描述
从打印的信息中可以看出,raw对象中n_channels=5,n_times=1000

'''
对图形进行缩放

对于实际EEG/MEG数据,应使用不同的比例因子
对通道eeg、grad、eog的数据进行2倍缩小

'''

scalings={'eeg':2,'grad':2,'eog':2}
custom_raw.plot(n_channels=5,
                scalings=scalings,
                title='Data from arrays',
                show=True,block=True)

plt.show()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

在这里插入图片描述

##########案例2

import numpy as np
import neo

import mne
import matplotlib.pyplot as plt


'''
构建正余弦数据模拟mag,grad信号
其中采样频率为1000Hz,时间为0-10s

'''
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
#创建任意数据

sfreq=1000  #采样数据
times=np.arange(0,10,0.001)#Use 1000 samples(10s)

sin=np.sin(times*10) #乘以10缩短周期
cos=np.cos(times*10)

sinx2=sin*2
cosx2=cos*2

#数组大小是4*10000

data=np.array([sin,cos,sinx2,cosx2])

#定义channel types and names

ch_types=['mag','mag','grad','grad']
ch_names=['sin','cos','sinx2','cosx2']
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
###创建info对象

info=mne.create_info(ch_names=ch_names,
                    sfreq=sfreq,
                   ch_types=ch_types)
  • 1
  • 2
  • 3
  • 4
  • 5
'''
利用mne.io.RawArray创建raw对象

'''

raw=mne.io.RawArray(data,info)

'''
对图形进行缩放

对于实际的EEG/MEG数据,应使用不同的比例因子

对通道mag的数据进行2倍缩小,对grad的数据进行1.7倍缩小
'''

scalings={'mag':2,'grad':1.7}

raw.plot(n_channels=4,scalings=scalings,title='Data from arrays',
        show=True,block=True)

'''
可以采用自动缩放比例


只要设置scalinngs='auto'即可

'''

scalings='auto'
raw.plot(n_channels=4,scalings=scalings,
        title='Auto-scaled Data from arrays',
        show=True,block=True)

plt.show()

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

在这里插入图片描述
在这里插入图片描述
今天的学习还是有些懵,也有很多不懂的地方,希望有大佬可以指点一下

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/261794
推荐阅读
相关标签
  

闽ICP备14008679号