Esempio n. 1
0
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
Esempio n. 2
0
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]
Esempio n. 3
0
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]):
Esempio n. 4
0
        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:
Esempio n. 5
0
            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:
Esempio n. 6
0
    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