def preprocess(data, events, matlab=False, spectral=True): ''' preprocessing pipeline for EEG data from the buffer Parameters ---------- data : a list of datapoints (numpy arrays) events : a list of fieldtrip events or a numpy array spectral: Whether you want to compute a spectrogram (default False) matlab: Whether the data comes from a .mat file (default False) Examples -------- >>> data, events = ftc.getData(0,100) >>> data, events = preprocess(data, events) >>> data, events = ftc.getData(0,100) >>> data, events = preprocess(data, events, spectral=True) ''' if matlab: data, events = reformat(data, events) data = preproc.detrend(data, dim=0) data, badch = preproc.badchannelremoval(data) data = preproc.spatialfilter(data, type='whiten') if spectral: data = preproc.spectralfilter(data, (1, 40), fSample) data, events, badtrials = preproc.badtrailremoval(data, events) return data, events
cname = 'clsfr' print("Training classifier") f = pickle.load(open(dname + '.pk', 'rb')) data = f['data'] events = f['events'] hdr = f['hdr'] # ------------------------------------------------------------------- # Run the standard pre-processing and analysis pipeline # 1: detrend data = [d[:, :10] for d in data] data = preproc.detrend(data) # 2: bad-channel removal data, bad_channels = preproc.badchannelremoval(data) print(f'Removed channels: {bad_channels}') # 3: apply spatial filter data = preproc.spatialfilter(data, type='car') # 4 & 5: map to frequencies and select frequencies of interest data = preproc.spectralfilter(data, (5, 6, 31, 32), hdr.fSample) # 6 : bad-trial removal data, events, bad_trials = preproc.badtrialremoval(data, events) print(f'Removed trials: {bad_trials}') with open('processed_data.pkl', 'wb') as f: pickle.dump({'X': data, 'events': events, 'hdr': hdr}, f) # Reduce the number of features per channel freqs = np.linspace(0, hdr.fSample/2, len(data[0])) data = [d[(5 <= freqs) & (freqs <= 32)] for d in data]
print ("Waiting for startPhase.cmd event.") while run: e = bufhelp.waitforevent("startPhase.cmd",1000, True) print("Got startPhase event: %s"%e) if e is not None: if e.value == "calibration": print("Calibration phase") data, events, stopevents = bufhelp.gatherdata("stimulus.tgtFlash",trlen_ms,("stimulus.training","end"), milliseconds=True) pickle.dump({"events":events,"data":data}, open("subject_data", "w")) elif e.value == "train": print("Training classifier") data = preproc.detrend(data) data, badch = preproc.badchannelremoval(data) data = preproc.spatialfilter(data) data = preproc.spectralfilter(data, (0, .1, 10, 12), bufhelp.fSample) data, events, badtrials = preproc.badtrailremoval(data, events) mapping = {('stimulus.tgtFlash', '0'): 0, ('stimulus.tgtFlash', '1'): 1} linear.fit(data,events,mapping) bufhelp.update() bufhelp.sendevent("sigproc.training","done") elif e.value =="testing": print("Feedback phase") while True: data, events, stopevents = bufhelp.gatherdata(["stimulus.columnFlash","stimulus.rowFlash"],trlen_ms,[("stimulus.feedback","end"), ("stimulus.sequence","end")], milliseconds=True) if isinstance(stopevents, list): if any(["stimulus.feedback" in x.type for x in stopevents]):
if e.value == "calibration": print("Calibration phase") data, events, stopevents = bufhelp.gatherdata( "stimulus.tgtFlash", trlen_ms, ("stimulus.training", "end"), milliseconds=True) pickle.dump({ "events": events, "data": data }, open("subject_data", "w")) elif e.value == "train": print("Training classifier") data = preproc.detrend(data) data, badch = preproc.badchannelremoval(data) data = preproc.spatialfilter(data) data = preproc.spectralfilter(data, (0, .1, 10, 12), bufhelp.fSample) data, events, badtrials = preproc.badtrailremoval(data, events) mapping = { ('stimulus.tgtFlash', '0'): 0, ('stimulus.tgtFlash', '1'): 1 } linear.fit(data, events, mapping) bufhelp.update() bufhelp.sendevent("sigproc.training", "done") elif e.value == "testing": print("Feedback phase") while True:
print("Calibration phase") data, events, stopevents = bufhelp.gatherdata( "stimulus.hybrid", trlen_ms, ("stimulus.training", "end"), milliseconds=True) pickle.dump({ "events": events, "data": data }, open("subject_data", "wb")) elif e.value == "training": print("Training classifier") data = preproc.detrend(data) data, badch = preproc.badchannelremoval(data) data = preproc.spatialfilter(data) data = preproc.spectralfilter(data, (1, 10, 15, 25), bufhelp.fSample) data, events, badtrials = preproc.badtrailremoval(data, events) mapping = { ('stimulus.hybrid', 'left'): -1, ('stimulus.hybrid', 'right'): 1 } classifier = linear.fit(data, events, mapping) bufhelp.update() bufhelp.sendEvent("sigproc.training", "done") elif e.value == "contfeedback": print("Feedback phase") while True:
for element in original: if hasattr(element,"deepcopy"): clone.append(element.deepcopy()) elif hasattr(element,"copy"): clone.append(element.copy()) else: clone.append(element) return clone if __name__=="main": #%pdb import preproc import numpy fs = 40 data = numpy.random.randn(3,fs,5) # 1s of data ppdata=preproc.detrend(data,0) ppdata=preproc.spatialfilter(data,'car') ppdata=preproc.spatialfilter(data,'whiten') ppdata,goodch=preproc.badchannelremoval(data) ppdata,goodtr=preproc.badtrialremoval(data) goodtr,badtr=preproc.outlierdetection(data,-1) Fdata,freqs=preproc.fouriertransform(data, 2, fSamples=1, posFreq=True) Fdata,freqs=preproc.powerspectrum(data, 1, dim=2) filt=preproc.mkFilter(10,[0,4,6,7],1) filt=preproc.mkFilter(numpy.abs(numpy.arange(-10,10,1)),[0,4,6,7]) ppdata=preproc.fftfilter(data,1,[0,3,4,6],fs) ppdata,keep=preproc.selectbands(data,[4,5,10,15],1); ppdata.shape