Source code for nabu.estimation.utils

import numpy as np
from scipy.signal import find_peaks


[docs] def is_fullturn_scan(angles): """ Return True if the angles correspond to a full-turn (360 degrees) scan. """ angles = angles % (2 * np.pi) angles -= angles.min() sin_angles = np.sin(angles) min_dist = 5 # TODO find a more robust angles-based min distance, though this should cover most of the cases maxima = find_peaks(sin_angles, distance=min_dist)[0] minima = find_peaks(-sin_angles, distance=min_dist)[0] n_max = maxima.size n_min = minima.size # abs(n_max - n_min) actually means the following: # * 0: All turns are full (eg. 2pi, 4pi) # * 1: At least one half-turn remains (eg. pi, 3pi) if abs(n_max - n_min) == 0: return True else: return False
[docs] def get_halfturn_indices(angles): angles = angles % (2 * np.pi) angles -= angles.min() sin_angles = np.sin(angles) min_dist = 5 # TODO find a more robust angles-based min distance, though this should cover most of the cases maxima = find_peaks(sin_angles, distance=min_dist)[0] minima = find_peaks(-sin_angles, distance=min_dist)[0] extrema = np.sort(np.hstack([maxima, minima])) extrema -= extrema.min() extrema = np.hstack([extrema, [angles.size - 1]]) res = [] for i in range(extrema.size - 1): res.append((extrema[i], extrema[i + 1])) return res