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
Beispiel #2
0
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
Beispiel #4
0
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]
Beispiel #5
0
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],
Beispiel #6
0
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],