Ejemplo n.º 1
0
def denoise(sample, num_channels=16):
    for channel in range(num_channels):
        DataFilter.perform_rolling_filter(sample[0][channel], 3,
                                          AggOperations.MEDIAN.value)
        DataFilter.perform_wavelet_denoising(sample[0][channel], 'db6', 3)
    sample = sample / np.expand_dims(sample.std(axis=-1), axis=-1)
    return sample
Ejemplo n.º 2
0
 def rolling_filter(self, data, parameter_list):
     filter_data = []
     for i in range(parameter_list[-1]):
         DataFilter.perform_rolling_filter(data[i], parameter_list[1],
                                           parameter_list[2])
         filter_data.append(data[i])
     filter_data = np.array(filter_data)
     return filter_data
Ejemplo n.º 3
0
def main():
    BoardShim.enable_dev_board_logger()

    # use synthetic board for demo
    params = BrainFlowInputParams()
    board_id = BoardIds.SYNTHETIC_BOARD.value
    board = BoardShim(board_id, params)
    board.prepare_session()
    board.start_stream()
    BoardShim.log_message(LogLevels.LEVEL_INFO.value,
                          'start sleeping in the main thread')
    time.sleep(10)
    data = board.get_board_data()
    board.stop_stream()
    board.release_session()

    # demo how to convert it to pandas DF and plot data
    eeg_channels = BoardShim.get_eeg_channels(board_id)
    df = pd.DataFrame(np.transpose(data))
    plt.figure()
    df[eeg_channels].plot(subplots=True)
    plt.savefig('before_processing.png')

    # for demo apply different filters to different channels, in production choose one
    for count, channel in enumerate(eeg_channels):
        # filters work in-place
        if count == 0:
            DataFilter.perform_bandpass(data[channel],
                                        BoardShim.get_sampling_rate(board_id),
                                        15.0, 6.0, 4, FilterTypes.BESSEL.value,
                                        0)
        elif count == 1:
            DataFilter.perform_bandstop(data[channel],
                                        BoardShim.get_sampling_rate(board_id),
                                        30.0, 1.0, 3,
                                        FilterTypes.BUTTERWORTH.value, 0)
        elif count == 2:
            DataFilter.perform_lowpass(data[channel],
                                       BoardShim.get_sampling_rate(board_id),
                                       20.0, 5,
                                       FilterTypes.CHEBYSHEV_TYPE_1.value, 1)
        elif count == 3:
            DataFilter.perform_highpass(data[channel],
                                        BoardShim.get_sampling_rate(board_id),
                                        3.0, 4, FilterTypes.BUTTERWORTH.value,
                                        0)
        elif count == 4:
            DataFilter.perform_rolling_filter(data[channel], 3,
                                              AggOperations.MEAN.value)
        else:
            DataFilter.remove_environmental_noise(
                data[channel], BoardShim.get_sampling_rate(board_id),
                NoiseTypes.FIFTY.value)

    df = pd.DataFrame(np.transpose(data))
    plt.figure()
    df[eeg_channels].plot(subplots=True)
    plt.savefig('after_processing.png')
Ejemplo n.º 4
0
 def denoise_data_pre_raw(self, data, denoise_method):
     for channel in self.eeg_info[0]:
         if denoise_method == 'mean':
             DataFilter.perform_rolling_filter(data[channel], 3,
                                               AggOperations.MEAN.value)
         elif denoise_method == 'median':
             DataFilter.perform_rolling_filter(data[channel], 3,
                                               AggOperations.MEDIAN.value)
         else:
             DataFilter.perform_wavelet_denoising(data[channel],
                                                  denoise_method, 3)
     return data
Ejemplo n.º 5
0
def main():
    BoardShim.enable_dev_board_logger()

    # use synthetic board for demo
    params = BrainFlowInputParams()
    board_id = BoardIds.SYNTHETIC_BOARD.value
    board = BoardShim(board_id, params)
    board.prepare_session()
    board.start_stream()
    BoardShim.log_message(LogLevels.LEVEL_INFO.value,
                          'start sleeping in the main thread')
    time.sleep(20)
    data = board.get_board_data()
    board.stop_stream()
    board.release_session()

    # demo how to convert it to pandas DF and plot data
    eeg_channels = BoardShim.get_eeg_channels(board_id)
    df = pd.DataFrame(np.transpose(data))
    plt.figure()
    df[eeg_channels].plot(subplots=True)
    plt.savefig('before_processing.png')

    # demo for denoising, apply different methods to different channels for demo
    for count, channel in enumerate(eeg_channels):
        # first of all you can try simple moving median or moving average with different window size
        if count == 0:
            DataFilter.perform_rolling_filter(data[channel], 3,
                                              AggOperations.MEAN.value)
        elif count == 1:
            DataFilter.perform_rolling_filter(data[channel], 3,
                                              AggOperations.MEDIAN.value)
        # if methods above dont work for your signal you can try wavelet based denoising
        # feel free to try different functions and decomposition levels
        elif count == 2:
            DataFilter.perform_wavelet_denoising(data[channel], 'db6', 3)
        elif count == 3:
            DataFilter.perform_wavelet_denoising(data[channel], 'bior3.9', 3)
        elif count == 4:
            DataFilter.perform_wavelet_denoising(data[channel], 'sym7', 3)
        elif count == 5:
            # with synthetic board this one looks like the best option, but it depends on many circumstances
            DataFilter.perform_wavelet_denoising(data[channel], 'coif3', 3)

    df = pd.DataFrame(np.transpose(data))
    plt.figure()
    df[eeg_channels].plot(subplots=True)
    plt.savefig('after_processing.png')
Ejemplo n.º 6
0
def main ():

    params = BrainFlowInputParams ()
    params.board_id = 1
    board_id = 1
    params.serial_port = 'COM3'
    sampling_rate = BoardShim.get_sampling_rate (board_id)

    time_thres =  100
    max_val = -100000000000
    vals_mean = 0
    num_samples = 5000
    samples = 0

    BoardShim.enable_dev_board_logger ()

    board = BoardShim (board_id, params)
    board.prepare_session ()


    if board_id == brainflow.board_shim.BoardIds.GANGLION_BOARD.value:
        board.config_board ('x1060000X')

    board.start_stream (45000)


    print("starting calibration")
    time.sleep(5)
    data = board.get_board_data()

    print("start blinking")

    while(samples < num_samples):

        data = board.get_board_data() 
        if(len(data[1]) > 0):
            DataFilter.perform_rolling_filter (data[1], 2, AggOperations.MEAN.value)
            vals_mean += sum([data[1,i]/num_samples for i in range(len(data[1]))]) 
            samples += len(data[1])
            if(np.amax(data[1]) > max_val):
                max_val = np.amax(data[1])
 
    blink_thres = 0.5*((max_val - vals_mean)**2) 

    print("mean value")
    print(vals_mean)
    print("max value")
    print(max_val)
    print("threshold")
    print(blink_thres)


    print("CALIBRATION DONE START PLAYING")
    prev_time = int(round(time.time() * 1000))

    while True:

        data = board.get_board_data()

        if(len(data[1]) > 0):
            DataFilter.perform_rolling_filter (data[1], 2, AggOperations.MEAN.value) 
            if((int(round(time.time() * 1000)) - time_thres) > prev_time): 
                prev_time = int(round(time.time() * 1000))
                for element in data[1]:
                    if(((element - vals_mean)**2) >= blink_thres):
                        pydirectinput.press('space')
                        break                 

    board.stop_stream ()                   
    board.release_session ()