import numpy as np from typing import List, AnyStr from numpy.core.numeric import identity as identity from numpy.typing import ArrayLike, NDArray from spatz.dataset import Dataset from spatz.simulations.data_source import DataSource from spatz.logger import Logger from spatz.sensors import Accelerometer, CoordSystem from spatz.transforms import Transform class H3LIS100DL(Accelerometer): def __init__(self, dataset: DataSource, logger: Logger, orientation=np.identity(3), offset: float = 0, transforms: List[Transform] = []): super().__init__(dataset, logger, orientation, offset, transforms) def _get_name(self) -> AnyStr: return "H3LIS100DL" def _sensor_specific_effects(self, x: ArrayLike) -> ArrayLike: # The sensor only measures values between -100g and +100g and in g/LSB. g = 9.81 x = np.floor(np.clip(x, -100*g, +100*g) / g) for i in range(3): value = np.random.random() if (value < 0.1): x[i] += 1 if (value > 0.9): x[i] -= 1 return x