示例#1
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')
示例#2
0
 def low_pass(self, data, parameter_list):
     filter_data = []
     for i in range(parameter_list[-1]):
         DataFilter.perform_lowpass(data[i], parameter_list[1],
                                    parameter_list[2], parameter_list[3],
                                    parameter_list[4], 3)
         filter_data.append(data[i])
     filter_data = np.array(filter_data)
     return filter_data
def filtering(signal, sf, chosen_channels):
    for ch in chosen_channels:
        copy_signal = copy.deepcopy(signal[ch])

        DataFilter.perform_lowpass(copy_signal, sf, 50.0, 5,
                                   FilterTypes.CHEBYSHEV_TYPE_1.value, 1)
        DataFilter.perform_highpass(copy_signal, sf, 3.0, 4,
                                    FilterTypes.BUTTERWORTH.value, 0)

        signal[ch] = copy_signal
    return signal
def main ():
    parser = argparse.ArgumentParser ()
    # use docs to check which parameters are required for specific board, e.g. for Cyton - set serial port
    parser.add_argument ('--ip-port', type = int, help  = 'ip port', required = False, default = 0)
    parser.add_argument ('--ip-protocol', type = int, help  = 'ip protocol, check IpProtocolType enum', required = False, default = 0)
    parser.add_argument ('--ip-address', type = str, help  = 'ip address', required = False, default = '')
    parser.add_argument ('--serial-port', type = str, help  = 'serial port', required = False, default = '')
    parser.add_argument ('--mac-address', type = str, help  = 'mac address', required = False, default = '')
    parser.add_argument ('--other-info', type = str, help  = 'other info', required = False, default = '')
    parser.add_argument ('--board-id', type = int, help  = 'board id, check docs to get a list of supported boards', required = True)
    parser.add_argument ('--log', action = 'store_true')
    args = parser.parse_args ()

    params = BrainFlowInputParams ()
    params.ip_port = args.ip_port
    params.serial_port = args.serial_port
    params.mac_address = args.mac_address
    params.other_info = args.other_info
    params.ip_address = args.ip_address
    params.ip_protocol = args.ip_protocol

    if (args.log):
        BoardShim.enable_dev_board_logger ()
    else:
        BoardShim.disable_board_logger ()

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

    # disable 2nd channel for cyton use real board to check it, emulator ignores commands
    if args.board_id == brainflow.board_shim.BoardIds.CYTON_BOARD.value:
        board.config_board ('x2100000X')

    board.start_stream ()
    time.sleep (10)
    data = board.get_board_data ()
    board.stop_stream ()
    board.release_session ()

    eeg_channels = BoardShim.get_eeg_channels (args.board_id)
    for count, channel in enumerate (eeg_channels):
        if count == 0:
            DataFilter.perform_bandpass (data[channel], BoardShim.get_sampling_rate (args.board_id), 15.0, 6.0, 4, FilterTypes.BESSEL.value, 0)
        elif count == 1:
            DataFilter.perform_bandstop (data[channel], BoardShim.get_sampling_rate (args.board_id), 5.0, 1.0, 3, FilterTypes.BUTTERWORTH.value, 0)
        elif count == 2:
            DataFilter.perform_lowpass (data[channel], BoardShim.get_sampling_rate (args.board_id), 9.0, 5, FilterTypes.CHEBYSHEV_TYPE_1.value, 1)
        elif count == 3:
            DataFilter.perform_highpass (data[channel], BoardShim.get_sampling_rate (args.board_id), 3.0, 4, FilterTypes.BUTTERWORTH.value, 0)
    def update(self):
        # received_data, addr = sock.recvfrom(1024) # buffer size is 1024 bytes
        # print("Received message: ", received_data)

        data = self.board_shim.get_current_board_data(self.num_points)

        if data[0:7, 0:250].shape == (7, 250):
            for count, channel in enumerate(self.exg_channels):
                # plot timeseries
                DataFilter.perform_lowpass(
                    data[channel], BoardShim.get_sampling_rate(args.board_id),
                    high, 3, FilterTypes.BUTTERWORTH.value, 0)
                DataFilter.perform_highpass(
                    data[channel], BoardShim.get_sampling_rate(args.board_id),
                    low, 3, FilterTypes.BUTTERWORTH.value, 0)
                DataFilter.perform_bandstop(
                    data[channel], BoardShim.get_sampling_rate(args.board_id),
                    50, 2, 8, FilterTypes.BUTTERWORTH.value, 0)
                self.curves[count + 1].setData(data[channel][-1001:].tolist())

            window = data[0:8, -250:]  # input window
            window = window - window[3, :]  # Cz reference

            x = np.vstack((window[0:3, :], window[4:, :]))
            x = create_data(x, fs, 1, low, high, n_freqs, zeros,
                            length)  # convert to PSD
            x = np.reshape(x, (1, n_channels_ref, n_freqs))
            x_csp = csp2.transform(x)

            window = np.reshape(window, (1, window.shape[0], window.shape[1]))
            x_raw_csp = csp1.transform(window)

            inference = np.hstack((x_csp, x_raw_csp))

            current_time = datetime.now()
            current_time = current_time.strftime("%M:%S")
            result.append(model.predict(inference)[0])

            MESSAGE = str(model.predict(inference)[0])
            MESSAGE = bytes(MESSAGE, 'utf-8')
            sock.sendto(MESSAGE, (UDP_IP, UDP_PORT))
            pygame.time.delay(100)

            self.curves[0].setData(result[-1001:])

        self.app.processEvents()
def start_recording(total_sec, max_samples, params, args):
    board = BoardShim(args.board_id, params)
    board.prepare_session()

    # board.start_stream () # use this for default options
    board.start_stream(max_samples, args.streamer_params)
    time.sleep(total_sec)
    # data = board.get_current_board_data (256) # get latest 256 packages or less, doesnt remove them from internal buffer
    data = board.get_board_data(
    )  # get all data and remove it from internal buffer
    timestamp_channel = board.get_timestamp_channel(board_id=0)

    board.stop_stream()
    board.release_session()

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

    # for demo apply different filters to different channels, in production choose one
    for count, channel in enumerate(eeg_channels):
        DataFilter.perform_lowpass(data[channel],
                                   BoardShim.get_sampling_rate(args.board_id),
                                   30, 3, FilterTypes.BUTTERWORTH.value, 0)
        DataFilter.perform_highpass(data[channel],
                                    BoardShim.get_sampling_rate(args.board_id),
                                    5, 3, FilterTypes.BUTTERWORTH.value, 0)
        DataFilter.perform_bandstop(data[channel],
                                    BoardShim.get_sampling_rate(args.board_id),
                                    50, 2, 8, FilterTypes.BUTTERWORTH.value, 0)

    df = pd.DataFrame(np.transpose(
        data[:, 1000:]))  # Usable after 1000 given order of filters are 3
    plt.figure()
    df[eeg_channels].plot(subplots=True)
    plt.savefig('data/after_processing.png')

    return data, timestamp_channel
def main():
    parser = argparse.ArgumentParser()
    # use docs to check which parameters are required for specific board, e.g. for Cyton - set serial port,
    parser.add_argument('--ip-port',
                        type=int,
                        help='ip port',
                        required=False,
                        default=0)
    parser.add_argument('--ip-protocol',
                        type=int,
                        help='ip protocol, check IpProtocolType enum',
                        required=False,
                        default=0)
    parser.add_argument('--ip-address',
                        type=str,
                        help='ip address',
                        required=False,
                        default='')
    parser.add_argument('--serial-port',
                        type=str,
                        help='serial port',
                        required=False,
                        default='')
    parser.add_argument('--mac-address',
                        type=str,
                        help='mac address',
                        required=False,
                        default='')
    parser.add_argument('--other-info',
                        type=str,
                        help='other info',
                        required=False,
                        default='')
    parser.add_argument(
        '--board-id',
        type=int,
        help='board id, check docs to get a list of supported boards',
        required=True)
    parser.add_argument('--log', action='store_true')
    args = parser.parse_args()

    params = BrainFlowInputParams()
    params.ip_port = args.ip_port
    params.serial_port = args.serial_port
    params.mac_address = args.mac_address
    params.other_info = args.other_info
    params.ip_address = args.ip_address
    params.ip_protocol = args.ip_protocol

    if (args.log):
        BoardShim.enable_dev_board_logger()
    else:
        BoardShim.disable_board_logger()

    # demo how to read data as 2d numpy array
    board = BoardShim(args.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_current_board_data (256) # get latest 256 packages or less, doesnt remove them from internal buffer
    data = board.get_board_data(
    )  # get all data and remove it from internal buffer
    board.stop_stream()
    board.release_session()

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

    # demo for data serialization
    DataFilter.write_file(data, 'test.csv', 'w')
    restored_data = DataFilter.read_file('test.csv')
    restored_df = pd.DataFrame(np.transpose(restored_data))
    print('Data From the File')
    print(restored_df.head())

    # demo how to perform signal processing
    for count, channel in enumerate(eeg_channels):
        if count == 0:
            DataFilter.perform_bandpass(
                data[channel], BoardShim.get_sampling_rate(args.board_id),
                15.0, 6.0, 4, FilterTypes.BESSEL.value, 0)
        elif count == 1:
            DataFilter.perform_bandstop(
                data[channel], BoardShim.get_sampling_rate(args.board_id), 5.0,
                1.0, 3, FilterTypes.BUTTERWORTH.value, 0)
        elif count == 2:
            DataFilter.perform_lowpass(
                data[channel], BoardShim.get_sampling_rate(args.board_id), 9.0,
                5, FilterTypes.CHEBYSHEV_TYPE_1.value, 1)
        elif count == 3:
            DataFilter.perform_highpass(
                data[channel], BoardShim.get_sampling_rate(args.board_id), 3.0,
                4, FilterTypes.BUTTERWORTH.value, 0)

    df = pd.DataFrame(np.transpose(data))
    print('Data After Processing')
    print(df.head())
    plt.figure()
    df[eeg_channels].plot(subplots=True)
    plt.savefig('after_processing.png')