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
def wavelet_filter(self, data, parameter_list): filter_data = [] for i in range(parameter_list[-1]): # print(parameter_list[-1]) # print(i) DataFilter.perform_wavelet_denoising(data[i], parameter_list[1], parameter_list[2]) filter_data.append(data[i]) filter_data = np.array(filter_data) return filter_data
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
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')