Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
sp_rms = np.zeros(n_sp)
sp_osc = np.zeros(n_sp)
sp_sym = np.zeros(n_sp)
sp_abs = np.zeros(n_sp)
sp_rel = np.zeros(n_sp)
sp_sta = np.zeros(n_sp)
# Number of oscillations (= number of peaks separated by at least 60 ms)
# --> 60 ms because 1000 ms / 16 Hz = 62.5 ms, in other words, at 16 Hz,
# peaks are separated by 62.5 ms. At 11 Hz, peaks are separated by 90 ms.
distance = 60 * sf / 1000
for i in np.arange(len(sp))[good_dur]:
# Important: detrend the signal to avoid wrong peak-to-peak amplitude
sp_x = np.arange(data[sp[i]].size, dtype=np.float64)
sp_det = _detrend(sp_x, data[sp[i]])
# sp_det = signal.detrend(data[sp[i]], type='linear')
sp_amp[i] = np.ptp(sp_det) # Peak-to-peak amplitude
sp_rms[i] = _rms(sp_det) # Root mean square
sp_rel[i] = np.median(rel_pow[sp[i]]) # Median relative power
# Hilbert-based instantaneous properties
sp_inst_freq = inst_freq[sp[i]]
sp_inst_pow = inst_pow[sp[i]]
sp_abs[i] = np.median(np.log10(sp_inst_pow[sp_inst_pow > 0]))
sp_freq[i] = np.median(sp_inst_freq[sp_inst_freq > 0])
# Number of oscillations
peaks, peaks_params = signal.find_peaks(sp_det,
distance=distance,
prominence=(None, None))
sp_osc[i] = len(peaks)