def select_by_peak_distance(peaks, priority, distance: float) -> np.ndarray: peaks_np, peaks = T.convert_int_array(peaks) priority_np, priority = T.convert_float_array(priority) keep_np, keep = T.create_bool_array(len(peaks_np)) keep_np[:] = 1 so = ctypes.CDLL('find_peak.so') so.select_by_peak_distance.argtypes = (T.int_p, T.int, T.float_p, T.float, T.bool_p) so.select_by_peak_distance.restype = None so.select_by_peak_distance(peaks, len(peaks_np), priority, distance, keep) del (so) return keep_np
def eeea(wave, fs: float = 12800, ts: float = 0.005, n_peak: int = 5, n_loop: int = 20) -> List[float]: wave_np, wave = T.convert_float_array(wave) evlp_np, evlp = T.create_float_array(len(wave_np)) so = ctypes.CDLL('eeea_c/eeea.so') so.eeea.argtypes = (T.float_p, T.int, T.float, T.float, T.int, T.int, T.float_p) so.eeea.restype = None so.eeea(wave, len(wave_np), fs, ts, n_peak, n_loop, evlp) return evlp_np
def peak_prominences(x, peaks, wlen: int) -> (np.ndarray, np.ndarray, np.ndarray): x_np, x = T.convert_float_array(x) peaks_np, peaks = T.convert_int_array(peaks) prominences_np, prominences = T.create_float_array(len(peaks_np)) left_bases_np, left_bases = T.create_int_array(len(peaks_np)) right_bases_np, right_bases = T.create_int_array(len(peaks_np)) so = ctypes.CDLL( '/Users/oliver/workspace/gear_fault/find_peak_c/find_peak.so') so.peak_prominences.argtypes = (T.float_p, T.int, T.int_p, T.int, T.int, T.float_p, T.int_p, T.int_p) so.peak_prominences.restype = None so.peak_prominences(x, len(x_np), peaks, len(peaks_np), wlen, prominences, left_bases, right_bases) # del(so) return prominences_np, left_bases_np, right_bases_np
def find_peaks( x: np.ndarray, distance: float = None, prominence: float = None, wlen: int = None, ) -> np.ndarray: x_np, x = T.convert_float_array(x) distance = distance if distance is not None else 1 prominence = prominence if prominence is not None else 0 wlen = wlen if wlen is not None else -1 out_peaks_np, out_peaks = T.create_int_array(len(x_np) // 2) out_peaks_len = T.int() so = ctypes.CDLL('find_peak.so') so.find_peaks.argtypes = (T.float_p, T.int, T.float, T.float, T.int, T.int_p, T.int_p) so.find_peaks.restype = None so.find_peaks(x, len(x_np), distance, prominence, wlen, out_peaks, out_peaks_len) return out_peaks_np[:out_peaks_len.value]
def local_maxima(x): x_np, x = T.convert_float_array(x) xn = len(x_np) mid_np, mid = T.create_int_array(xn) left_np, left = T.create_int_array(xn) right_np, right = T.create_int_array(xn) m = T.int() so = ctypes.CDLL('find_peak.so') so.local_maxima.argtypes = ( T.float_p, T.int, T.int_p, T.int_p, T.int_p, T.int_p, ) so.local_maxima.restype = None so.local_maxima(x, xn, mid, left, right, m) m = m.value return mid_np[:m], left_np[:m], right_np[:m],
from ctypes_util import T, np, ctypes ctypes.CDLL('/Users/oliver/workspace/gear_fault/find_peak_c/find_peak.so') def local_maxima(x): x_np, x = T.convert_float_array(x) xn = len(x_np) mid_np, mid = T.create_int_array(xn) left_np, left = T.create_int_array(xn) right_np, right = T.create_int_array(xn) m = T.int() so = ctypes.CDLL('find_peak.so') so.local_maxima.argtypes = ( T.float_p, T.int, T.int_p, T.int_p, T.int_p, T.int_p, ) so.local_maxima.restype = None so.local_maxima(x, xn, mid, left, right, m) m = m.value return mid_np[:m], left_np[:m], right_np[:m],