使用MNE epoch函数生成连续离散信号时产生的错误值

2024-07-04 13:57:06 发布

您现在位置:Python中文网/ 问答频道 /正文

其思想是将386.936s长的连续脑电数据划时代到大小为20s的不重叠的划时代窗口中。在采样频率为250hz的情况下,理论上每个划时代应包含5000个数据点。你知道吗

为了实现这一目标,采用了以下准则:

epochs = mne.Epochs(raw, events=events, event_id=event_id, baseline=None, verbose=True) MneApproach=epochs.to_data_frame()

确认值是否从新纪元不管正确与否,我已经创建了一个可以手动执行epoching的脚本。脚本的输出已经过可视化验证,并按预期工作。 但是,我注意到脚本输出和dataframe方法的值之间存在差异。除了不同的值,该方法每个历元只包含176个数据集。你知道吗

我可以知道我在输入数据时做错了什么吗新纪元功能。你知道吗

上面的问题可以通过googlecolab从下面的ipynb或下面的代码中重现

非常感谢您的反馈和帮助。你知道吗

import urllib.request

print('Beginning file download with urllib2...')

url = 'http://bnci-horizon-2020.eu/database/data-sets/001-2014/A01T.mat'
urllib.request.urlretrieve(url, '/content/A01T.mat')

mat = loadmat("/content/A01T.mat")
# eeg = mat["data"][0, 3]["X"][0, 0] * 10e-6
eeg = mat["data"][0, 3]["X"][0, 0]
ch_names = ["Fz", "FC3", "FC1", "FCz", "FC2", "FC4", "C5", "C3", "C1", "Cz",
            "C2", "C4", "C6", "CP3", "CP1", "CPz", "CP2", "CP4", "P1", "Pz",
            "P2", "POz", "EOG1", "EOG2", "EOG3"]
info = mne.create_info(ch_names, 250, ch_types=["eeg"] * 22 + ["eog"] * 3)
raw = mne.io.RawArray(eeg.T, info)

raw.set_montage("standard_1020")

人工进近

raw_b = raw.copy()

values = raw_b.get_data()
# values = numpy.zeros(20, dtype=dtype)
index = ['Row'+str(i) for i in range(1, len(values)+1)]

df = pd.DataFrame(values, index=index).transpose() 
df.columns = raw_b.ch_names[:]
# df.head()
event_id = 1  # This is used to identify the events.
duration = 20. # Unit in second

# create a fixed size events array
# start=0 and stop=None by default
events = mne.make_fixed_length_events(raw_b, event_id,duration=duration)
print(events)

NoEpochs=len(events)-1
Epoch = range(0, len(events)-1, 1)

NameEpochs = pd.DataFrame(NoEpochs*(np.ones((df.shape[0], 1))), columns=['Epochs'])

for f in Epoch:
 NameEpochs.Epochs.iloc[events[f][0]:events[f+1][0]] = Epoch[f]

df = pd.concat([df,  NameEpochs], axis = 1)
df.reset_index(drop=True, inplace=True)

df.set_index([df.Epochs, df.index], inplace=True)
del df['Epochs'] ## Delete extra column
df.loc[0.0] # Extrach only epoch 0

MNE方法

epochs = mne.Epochs(raw, events=events, event_id=event_id,  baseline=None, verbose=True)
MneApproach=epochs.to_data_frame()
MneApproach
MneApproach.xs(0, level='epoch') # Extrach epoch 0

Tags: 数据eventidtruedfdataindexraw

热门问题