|
@@ -1,4 +1,5 @@
|
|
|
import numpy as np
|
|
|
+import mne
|
|
|
import itertools
|
|
|
from datetime import datetime
|
|
|
import joblib
|
|
@@ -10,6 +11,32 @@ import os
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
|
|
|
+def events_filter(epoch_data, fs, events):
|
|
|
+ """
|
|
|
+ 按照hg能量去除异常数据
|
|
|
+ """
|
|
|
+ def exclude_outlier(epoch_data, lower=1.5, upper=1.5):
|
|
|
+ epoch_power = np.sqrt(np.mean(epoch_data ** 2, axis=(1, 2)))
|
|
|
+ mean_, std_ = epoch_power.mean(), epoch_power.std()
|
|
|
+ indices = (epoch_power < mean_ + upper * std_) & (epoch_power > mean_ - lower * std_)
|
|
|
+ return indices
|
|
|
+
|
|
|
+ # extract hg
|
|
|
+ epoch_hg = mne.filter.filter_data(epoch_data, fs, 60, 90)
|
|
|
+
|
|
|
+ ind_cls = np.unique(events[:, 2])
|
|
|
+ mov_ind = [i for i in ind_cls if i != 0]
|
|
|
+ rest_ind = 0
|
|
|
+ epoch_rest = epoch_hg[events[:, 2] == rest_ind]
|
|
|
+ rest_indices = np.flatnonzero(events[:, 2] == rest_ind)
|
|
|
+ epoch_mov = epoch_hg[np.isin(events[:, 2], mov_ind)]
|
|
|
+ mov_indices = np.flatnonzero(np.isin(events[:, 2], mov_ind))
|
|
|
+
|
|
|
+ rest_filtered_indices = rest_indices[exclude_outlier(epoch_rest, 1.5, 1.5)]
|
|
|
+ mov_filtered_indices = mov_indices[exclude_outlier(epoch_mov, 1., 2)]
|
|
|
+ return np.sort(np.concatenate((rest_filtered_indices, mov_filtered_indices)))
|
|
|
+
|
|
|
+
|
|
|
def event_to_stim_channel(events, time_length, trial_length=None):
|
|
|
x = np.zeros(time_length, dtype=np.int32)
|
|
|
if trial_length is not None:
|