Source code for crappy.blocks.generator_path.sine

# coding: utf-8

from time import time
from numpy import sin, pi
from typing import Union, Dict
import logging

from .meta_path import Path, ConditionType


[docs] class Sine(Path): """This Path generates a sine wave varying with time until the stop condition is met. .. versionadded:: 1.4.0 """
[docs] def __init__(self, condition: Union[str, ConditionType], freq: float, amplitude: float, offset: float = 0, phase: float = 0) -> None: """Sets the arguments and initializes the parent class. Args: condition: The condition for switching to the next Path. Refer to :class:`~crappy.blocks.generator_path.meta_path.Path` for more information. freq: The frequency of the sine in `Hz`. amplitude: The amplitude of the sine wave (peak to peak). offset: The offset of the sine (average value). phase: The phase of the sine (in radians). .. versionchanged:: 1.5.10 renamed *time* argument to *_last_time* .. versionchanged:: 1.5.10 renamed *cmd* argument to *_last_cmd* .. versionremoved:: 2.0.0 *_last_time* and *_last_cmd* arguments """ super().__init__() # Setting the attributes self._condition = self.parse_condition(condition) self._amplitude = amplitude / 2 self._offset = offset self._phase = phase self._k = 2 * pi * freq
[docs] def get_cmd(self, data: Dict[str, list]) -> float: """Returns the value to send or raises :exc:`StopIteration` if the stop condition is met.""" # Checking if the stop condition is met if self._condition(data): self.log(logging.DEBUG, "Stop condition met") raise StopIteration # Returning the current signal value return sin((time() - self.t0) * self._k - self._phase) * \ self._amplitude + self._offset