m-thesis-introduction/simulations/lib/location/antenna.py

43 lines
1.1 KiB
Python

from functools import partial
from .location import Location
from ..signals import Signal
class Antenna(Location):
"""
A location able to interact with a signal.
Either emitting or receiving.
Optionally applies a transformation to the traced signal.
"""
def __repr__(self):
return "Antenna({})".format(repr(self.x))
def emit(self, signal: Signal) -> callable:
return partial(signal, x_0=self.x)
def recv(self, signal: Signal) -> callable:
"""
Return a function that traces the signal as a function of time
at the antenna's location
"""
return partial(signal, x_f=self.x)
receive = recv
class Receiver(Antenna):
"""
An antenna which main purpose is to trace a signal over time.
Optionally applies a transformation to the traced signal.
"""
def __repr__(self):
return "Receiver({})".format(repr(self.x))
class Emitter(Antenna):
"""
An antenna which main purpose is to emit a signal.
"""
def __repr__(self):
return "Emitter({})".format(repr(self.x))