def test_emg_eventrelated(): emg = nk.emg_simulate(duration=20, sampling_rate=1000, burst_number=3) emg_signals, info = nk.emg_process(emg, sampling_rate=1000) epochs = nk.epochs_create(emg_signals, events=[3000, 6000, 9000], sampling_rate=1000, epochs_start=-0.1, epochs_end=1.9) emg_eventrelated = nk.emg_eventrelated(epochs) # Test amplitude features no_activation = np.where(emg_eventrelated["EMG_Activation"] == 0)[0][0] assert int( pd.DataFrame(emg_eventrelated.values[no_activation]).isna().sum()) == 4 assert np.alltrue( np.nansum(np.array(emg_eventrelated["EMG_Amplitude_Mean"])) < np.nansum(np.array(emg_eventrelated["EMG_Amplitude_Max"]))) assert len(emg_eventrelated["Label"]) == 3 assert len(emg_eventrelated.columns) == 7 assert all(elem in [ "EMG_Activation", "EMG_Amplitude_Mean", "EMG_Amplitude_Max", "EMG_Amplitude_Max_Time", "EMG_Bursts", "Label", "Event_Onset" ] for elem in np.array(emg_eventrelated.columns.values, dtype=str))
def test_emg_plot(): sampling_rate = 1000 emg = nk.emg_simulate(duration=10, sampling_rate=1000, burst_number=3) emg_summary, _ = nk.emg_process(emg, sampling_rate=sampling_rate) # Plot data over samples. nk.emg_plot(emg_summary) # This will identify the latest figure. fig = plt.gcf() assert len(fig.axes) == 2 titles = ["Raw and Cleaned Signal", "Muscle Activation"] for (ax, title) in zip(fig.get_axes(), titles): assert ax.get_title() == title assert fig.get_axes()[1].get_xlabel() == "Samples" np.testing.assert_array_equal(fig.axes[0].get_xticks(), fig.axes[1].get_xticks()) plt.close(fig) # Plot data over time. nk.emg_plot(emg_summary, sampling_rate=sampling_rate) # This will identify the latest figure. fig = plt.gcf() assert fig.get_axes()[1].get_xlabel() == "Time (seconds)"
def test_emg_eventrelated(): emg = nk.emg_simulate(duration=20, sampling_rate=1000, burst_number=3) emg_signals, info = nk.emg_process(emg, sampling_rate=1000) epochs = nk.epochs_create(emg_signals, events=[3000, 6000, 9000], sampling_rate=1000, epochs_start=-0.1, epochs_end=1.9) emg_eventrelated = nk.emg_eventrelated(epochs) # Test amplitude features no_activation = np.where(emg_eventrelated["EMG_Activation"] == 0)[0][0] assert int( pd.DataFrame(emg_eventrelated.values[no_activation]).isna().sum()) == 4 assert np.alltrue( np.nansum(np.array(emg_eventrelated["EMG_Amplitude_Mean"])) < np.nansum(np.array(emg_eventrelated["EMG_Amplitude_Max"]))) assert len(emg_eventrelated["Label"]) == 3 # Test warning on missing columns with pytest.warns(nk.misc.NeuroKitWarning, match=r".*does not have an `EMG_Onsets`.*"): first_epoch_key = list(epochs.keys())[0] first_epoch_copy = epochs[first_epoch_key].copy() del first_epoch_copy["EMG_Onsets"] nk.emg_eventrelated({**epochs, first_epoch_key: first_epoch_copy}) with pytest.warns(nk.misc.NeuroKitWarning, match=r".*does not have an `EMG_Activity`.*"): first_epoch_key = list(epochs.keys())[0] first_epoch_copy = epochs[first_epoch_key].copy() del first_epoch_copy["EMG_Activity"] nk.emg_eventrelated({**epochs, first_epoch_key: first_epoch_copy}) with pytest.warns(nk.misc.NeuroKitWarning, match=r".*does not have an.*`EMG_Amplitude`.*"): first_epoch_key = list(epochs.keys())[0] first_epoch_copy = epochs[first_epoch_key].copy() del first_epoch_copy["EMG_Amplitude"] nk.emg_eventrelated({**epochs, first_epoch_key: first_epoch_copy})
def test_emg_intervalrelated(): emg = nk.emg_simulate(duration=40, sampling_rate=1000, burst_number=3) emg_signals, info = nk.emg_process(emg, sampling_rate=1000) columns = ['EMG_Activation_N', 'EMG_Amplitude_Mean'] # Test with signal dataframe features_df = nk.emg_intervalrelated(emg_signals) assert all(elem in columns for elem in np.array(features_df.columns.values, dtype=str)) assert features_df.shape[0] == 1 # Number of rows # Test with dict epochs = nk.epochs_create(emg_signals, events=[0, 20000], sampling_rate=1000, epochs_end=20) features_dict = nk.emg_intervalrelated(epochs) assert all(elem in columns for elem in np.array(features_dict.columns.values, dtype=str)) assert features_dict.shape[0] == 2 # Number of rows
nk.rsp_plot(signals, sampling_rate=250) # Save it plot = nk.rsp_plot(signals, sampling_rate=250) plot.set_size_inches(10, 6, forward=True) plot.savefig("README_rsp.png", dpi=300, h_pad=3) # ============================================================================= # Electromyography (EMG) processing # ============================================================================= # Generate 10 seconds of EMG signal (recorded at 250 samples / second) emg = nk.emg_simulate(duration=10, sampling_rate=250, burst_number=3) # Process it signals, _ = nk.emg_process(emg, sampling_rate=250) # Visualise the processing nk.emg_plot(signals, sampling_rate=250) # Save it plot = nk.emg_plot(signals, sampling_rate=250) plot.set_size_inches(10, 6, forward=True) plot.savefig("README_emg.png", dpi=300, h_pad=3) # ============================================================================= # Photoplethysmography (PPG/BVP) # ============================================================================= # Generate 15 seconds of PPG signal (recorded at 250 samples / second) ppg = nk.ppg_simulate(duration=15,
def my_emg_process(emg_signal, sampling_rate): return nk.emg_process(emg_signal, sample_rating=sampling_rate) # TODO update