Skip to content
Snippets Groups Projects
Commit 0be589c8 authored by Oscar Gustafsson's avatar Oscar Gustafsson :bicyclist:
Browse files

Add Delay signal generator

parent 4eeb7920
No related branches found
No related tags found
1 merge request!222Add Delay signal generator
Pipeline #90243 passed
......@@ -268,6 +268,34 @@ class Uniform(SignalGenerator):
return f"Uniform({args})"
class Delay(SignalGenerator):
"""
Signal generator that delays the value of another signal generator.
This can used to easily delay a sequence during simulation.
.. note:: Although the purpose is to delay, it is also possible to look ahead by
providing a negative delay.
Parameters
----------
generator : SignalGenerator
The signal generator to delay the output of.
delay : int, default: 1
The number of time units to delay the generated signal.
"""
def __init__(self, generator: SignalGenerator, delay: int = 1) -> None:
self._generator = generator
self._delay = delay
def __call__(self, time: int) -> complex:
return self._generator(time - self._delay)
def __repr__(self) -> str:
return f"Delay({self._generator!r}, {self._delay})"
class _AddGenerator(SignalGenerator):
"""
Signal generator that adds two signals.
......
......@@ -4,6 +4,7 @@ import pytest
from b_asic.signal_generator import (
Constant,
Delay,
Gaussian,
Impulse,
Sinusoid,
......@@ -99,6 +100,22 @@ def test_sinusoid():
assert str(g) == "Sinusoid(0.5, 0.25)"
def test_delay():
gref = Sinusoid(0.5)
g = Delay(gref)
assert g(0) == gref(-1)
assert g(2) == gref(1)
assert str(g) == "Delay(Sinusoid(0.5), 1)"
gref = Sinusoid(0.5)
g = Delay(gref, 3)
assert g(0) == gref(-3)
assert g(5) == gref(2)
assert str(g) == "Delay(Sinusoid(0.5), 3)"
def test_gaussian():
g = Gaussian(1234)
assert g(0) == pytest.approx(-1.6038368053963015)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment