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')
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')