def __init__(self, signal, freq, file=False, filename=None, show_plot=False): self._y = signal self._freq = freq self._derivative = self._get_derivative(signal) if file: self.data = nk.eda_process(signal, sampling_rate=freq) if show_plot: nk.plot_events_in_signal(nk.z_score(self.data["df"]), self.data["EDA"]["SCR_Peaks_Indexes"]) print(self.data["EDA"]["SCR_Peaks_Indexes"]) plt.show() self.save_to_file(filename, self.data) else: self.data = self.read_from_file(filename)
def test_create_epochs(df): df = pd.DataFrame({ "Trigger": pd.Series( scipy.signal.square(1 * np.pi * 5 * np.linspace(0, 1, 2000, endpoint=False))), "Signal": pd.Series(np.sin(20 * np.pi * np.linspace(0, 1, 2000, endpoint=False))) * np.random.normal(0, 1, 2000), "Signal2": pd.Series(np.sin(60 * np.pi * np.linspace(0, 1, 2000, endpoint=False))) * np.random.normal(0, 2, 2000) }) df.plot() events = nk.find_events(df["Trigger"], cut="lower") assert len(events) == 2 fig = nk.plot_events_in_signal(df, events["onsets"]) epochs = nk.create_epochs(df, events["onsets"], duration=0.1) assert len(epochs) == 2
import neurokit as nk df = nk.read_acqknowledge("abnormal_ECG.acq") events = nk.find_events(df["Photosensor"], cut="lower") df = nk.create_epochs(df, events["onsets"], duration=events["durations"])[0] #df["Photosensor"].plot() df = nk.ecg_process(df['ECG, X, RSPEC-R']) ecg = df["ECG"] df = df["df"] #rpeaks = nk.ecg_find_peaks(df['ECG_Filtered']) nk.plot_events_in_signal(df['ECG_Filtered'], ecg["R_Peaks"]) #df['ECG, X, RSPEC-R'].iloc[104000:140000].plot()
threshold = 0.5*np.std(decg_power) threshold = np.median(thresholds) max_power = np.median(max_powers) decg_power[decg_power < threshold] = 0 decg_power = decg_power/max_power decg_power[decg_power > 1.0] = 1.0 square_decg_power = decg_power**2 # shannon_energy = -square_decg_power*np.log(square_decg_power) # This errors # shannon_energy[np.where(np.isfinite(shannon_energy) == False)] = 0.0 shannon_energy = -square_decg_power*np.log(square_decg_power.clip(min=1e-6)) shannon_energy[np.where(shannon_energy <= 0)] = 0.0 mean_window_len = int(sampling_rate*0.125+1) lp_energy = np.convolve(shannon_energy, [1.0/mean_window_len]*mean_window_len, mode='same') #lp_energy = scipy.signal.filtfilt(*lowpass2, x=shannon_energy) lp_energy = scipy.ndimage.gaussian_filter1d(lp_energy, sampling_rate/8.0) lp_energy_diff = np.diff(lp_energy) rpeaks = (lp_energy_diff[:-1] > 0) & (lp_energy_diff[1:] < 0) rpeaks = np.flatnonzero(rpeaks) rpeaks -= 1 return(rpeaks) rpeaks = segmenter_pekkanen(df["ECG_Raw"], 1000) nk.plot_events_in_signal(df["ECG_Raw"], rpeaks)