Неверные значения, полученные при генерации непрерывного дискретного сигнала с использованием функции эпохи MNE - PullRequest
0 голосов
/ 26 октября 2019

Идея заключалась в том, чтобы передавать непрерывные данные ЭЭГ длиной 386,936 с в не перекрывающееся окно эпох, размером 20 с. При частоте дискретизации 250 Гц теоретически каждая эпоха должна содержать 5000 точек данных за эпоху.

Для достижения цели использовался следующий код:

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

Чтобы подтвердить, было ли значение, возвращаемое из mne.Epoch, правильным или нет,Я создал скрипт, который может выполнять эпоху вручную. Вывод из скрипта был проверен визуально и работал как задумано. Тем не менее, я заметил, что между выводом скрипта и значением из dataframe MneApproach было другое. Помимо различных значений, MneApproach содержал только 176 наборов данных за эпоху.

Могу ли я знать, что я сделал неправильно при вводе функции mne.Epoch.

Приведенную выше проблему можно воспроизвести изследующий ipynb через Google Colab или из кода ниже

Очень благодарен за любые отзывы и помощь.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...