def main(): BoardShim.enable_dev_board_logger() # use synthetic board for demo params = BrainFlowInputParams() board_id = BoardIds.SYNTHETIC_BOARD.value sampling_rate = BoardShim.get_sampling_rate(board_id) 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) nfft = DataFilter.get_nearest_power_of_two(sampling_rate) data = board.get_board_data() board.stop_stream() board.release_session() eeg_channels = BoardShim.get_eeg_channels(board_id) # second eeg channel of synthetic board is a sine wave at 10Hz, should see huge alpha eeg_channel = eeg_channels[1] # optional detrend DataFilter.detrend(data[eeg_channel], DetrendOperations.LINEAR.value) psd = DataFilter.get_psd_welch(data[eeg_channel], nfft, nfft // 2, sampling_rate, WindowFunctions.BLACKMAN_HARRIS.value) band_power_alpha = DataFilter.get_band_power(psd, 7.0, 13.0) band_power_beta = DataFilter.get_band_power(psd, 14.0, 30.0) print("alpha/beta:%f", band_power_alpha / band_power_beta) # fail test if ratio is not smth we expect if (band_power_alpha / band_power_beta < 100): raise ValueError('Wrong Ratio')
def main(): BoardShim.enable_dev_board_logger() # use synthetic board for demo params = BrainFlowInputParams() board_id = BoardIds.SYNTHETIC_BOARD.value sampling_rate = BoardShim.get_sampling_rate(board_id) 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_current_board_data( DataFilter.get_nearest_power_of_two(sampling_rate)) board.stop_stream() board.release_session() eeg_channels = BoardShim.get_eeg_channels(board_id) for count, channel in enumerate(eeg_channels): # optional: subtract mean or detrend psd = DataFilter.get_psd(data[channel], sampling_rate, WindowFunctions.BLACKMAN_HARRIS.value) band_power_alpha = DataFilter.get_band_power(psd, 7.0, 13.0) band_power_beta = DataFilter.get_band_power(psd, 14.0, 30.0) print("alpha/beta:%f", band_power_alpha / band_power_beta)
def update(self): data = self.board_shim.get_current_board_data(self.num_points) avg_bands = [0, 0, 0, 0, 0] for count, channel in enumerate(self.exg_channels): # plot timeseries DataFilter.detrend(data[channel], DetrendOperations.CONSTANT.value) DataFilter.perform_bandpass(data[channel], self.sampling_rate, 30.0, 56.0, 2, FilterTypes.BUTTERWORTH.value, 0) DataFilter.perform_bandstop(data[channel], self.sampling_rate, 50.0, 4.0, 2, FilterTypes.BUTTERWORTH.value, 0) DataFilter.perform_bandstop(data[channel], self.sampling_rate, 60.0, 4.0, 2, FilterTypes.BUTTERWORTH.value, 0) self.curves[count].setData(data[channel].tolist()) if data.shape[1] > self.psd_size: # plot psd psd_data = DataFilter.get_psd_welch(data[channel], self.psd_size, self.psd_size // 2, self.sampling_rate, WindowFunctions.BLACKMAN_HARRIS.value) lim = min(70, len(psd_data[0])) self.psd_curves[count].setData(psd_data[1][0:lim].tolist(), psd_data[0][0:lim].tolist()) # plot bands avg_bands[0] = avg_bands[0] + DataFilter.get_band_power(psd_data, 1.0, 4.0) avg_bands[1] = avg_bands[1] + DataFilter.get_band_power(psd_data, 4.0, 8.0) avg_bands[2] = avg_bands[2] + DataFilter.get_band_power(psd_data, 8.0, 13.0) avg_bands[3] = avg_bands[3] + DataFilter.get_band_power(psd_data, 13.0, 30.0) avg_bands[4] = avg_bands[4] + DataFilter.get_band_power(psd_data, 30.0, 50.0) avg_bands = [int(x * 100 / len(self.exg_channels)) for x in avg_bands] self.band_bar.setOpts(height=avg_bands) self.app.processEvents()
def add_band_power_value(self, psd, max_size): value = DataFilter.get_band_power(psd, self.band_range_min, self.band_range_max) self.band_current_power = value self.power_values.append(value) if (len(self.power_values) > max_size): self.power_values.pop(0)
def add_band_power_value(self, psd): value = DataFilter.get_band_power(psd, self.band_range_min, self.band_range_max) if self.precentile_power == 0.0 or value < self.precentile_power * self.signal_diviation_cut: self._add_band_power_value(value)
def add_band_power_value(self, psd): value = DataFilter.get_band_power(psd, self.band_range_min, self.band_range_max) self._add_band_power_value(value)
def bp_window(self, data, low, high, n_pads): padded = np.pad(data[-self.num_points_partial:], n_pads) psd = DataFilter.get_psd(padded, self.sampling_rate, WindowFunctions.BLACKMAN_HARRIS.value) bp = DataFilter.get_band_power(psd, low, high) return bp