Exemple #1
0
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')
Exemple #2
0
    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()
Exemple #3
0
 def psd_welch(self, data, parameter_list):
     feature_data = []
     for i in range(parameter_list[-1]):
         DataFilter.detrend(data[i], 1)
         DataFilter.detrend(data[i], 2)
         new_data = DataFilter.get_psd_welch(data[i], parameter_list[1], parameter_list[2], parameter_list[3],
                                             parameter_list[4])
         feature_data.append(new_data[0])
     feature_data = np.array(feature_data)
     return feature_data
 def on_next(self, eeg_channels, nfft):
     data = self.board.get_current_board_data(
         max(self.sampling_rate, nfft) +
         1)  #get_board_data () we are taking ~1 sec data ~10 times a sec
     for channel in self.channels.keys():
         channel_data = data[channel]
         DataFilter.detrend(channel_data, DetrendOperations.LINEAR.value)
         psd = DataFilter.get_psd_welch(
             channel_data, nfft, nfft // 2, self.sampling_rate,
             WindowFunctions.BLACKMAN_HARRIS.value)
         for component in self.channels[channel]:
             component.add_band_power_value(psd)
Exemple #5
0
 def on_next(self, eeg_channels, nfft):
     data = self.board.get_current_board_data(
         max(self.sampling_rate, nfft) +
         1)  #get_board_data () we are taking ~1 sec data ~10 times a sec
     bands_sum = collections.defaultdict(float)
     for channel in self.protocol:
         channel_data = data[eeg_channels[channel.channel_inx]]
         DataFilter.detrend(channel_data, DetrendOperations.LINEAR.value)
         psd = DataFilter.get_psd_welch(
             channel_data, nfft, nfft // 2, self.sampling_rate,
             WindowFunctions.BLACKMAN_HARRIS.value)
         for band in channel.bands:
             band.add_band_power_value(psd)
             bands_sum[band.name] += band.get_signal()
     return bands_sum
 def on_next(self, eeg_channels, nfft):
     time.sleep(.3)
     data = self.board.get_current_board_data(
         max(self.sampling_rate, nfft) +
         1)  #get_board_data () we are taking ~1 sec data ~3 times a sec
     for channel in self.protocol:
         channel_data = data[eeg_channels[channel.channel_inx]]
         DataFilter.detrend(channel_data, DetrendOperations.LINEAR.value)
         psd = DataFilter.get_psd_welch(
             channel_data, nfft, nfft // 2, self.sampling_rate,
             WindowFunctions.BLACKMAN_HARRIS.value)
         for band in channel.bands:
             band.add_band_power_value(psd, 30)
         #print(f'channel: {channel.channel_inx} positive_signals: {channel.get_positive_signals_count()} avg_power: {channel.get_avg_bands()}')
     return sum([i.get_positive_signals_count() for i in self.protocol])
Exemple #7
0
    def update(self):
        data = self.board_shim.get_current_board_data(self.num_points)
        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,
                                        51.0, 100.0, 2,
                                        FilterTypes.BUTTERWORTH.value, 0)
            DataFilter.perform_bandpass(data[channel], self.sampling_rate,
                                        51.0, 100.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())

        self.app.processEvents()