赞
踩
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)
输出结果:
'''
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[:,:]
'''
案例:获取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')
'''
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')
'''
绘制各通道的功率谱密度
'''
raw.plot_psd()
plt.show()
'''
绘制SSP矢量图
SSP为信号空间投影
'''
raw.plot_projs_topomap()
plt.show()
按道理说应该出现这样子的图
但是不知道为什么我这边总是报错,且没有解决这个错误,希望有人知道怎样解决这个错误的话可以指点我一下
'''
绘制通道频谱图作为topography
'''
raw.plot_psd_topo()
plt.show()
'''
绘制电极位置
'''
raw.plot_sensors()
plt.show()
按道理说这些电极位置都应该在框框里,不知道为什么我画出来都越界了,希望有人知道的话可以指点我一下
''' 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
#引入Python库
import mne
import numpy as np
import matplotlib.pyplot as plt
''' 生成一个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)
从打印的信息中可以看出,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()
##########案例2
import numpy as np
import neo
import mne
import matplotlib.pyplot as plt
'''
构建正余弦数据模拟mag,grad信号
其中采样频率为1000Hz,时间为0-10s
'''
#创建任意数据 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']
###创建info对象
info=mne.create_info(ch_names=ch_names,
sfreq=sfreq,
ch_types=ch_types)
''' 利用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()
今天的学习还是有些懵,也有很多不懂的地方,希望有大佬可以指点一下
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。