Module rpps.coding.coding
Coding parent classes
Classes
class Block (e_impl, d_impl)-
Expand source code
class Block(Coding): """Parent block coding""" def encode(self, dobj): """Encode dobject using specified coding""" return dobject.CodingData(self._enc.encode(dobj.data)) def decode(self, dobj): """Decode dobject using specified coding""" return dobject.BitObject(self._dec.decode(dobj.data)) @staticmethod def load(name, obj): i_code = getattr(types, obj["type"]) if obj["type"] == "linear": gen = np.array(obj["generator"], dtype=bool) chk = np.array(obj["check"], dtype=bool) i_code = i_code(gen, chk) impl = type(name, (Block,), dict()) impl.name = name return impl(i_code, i_code) if obj["type"] == "repeat": i_code = i_code(obj["count"]) impl = type(name, (Block,), dict()) impl.name = name return impl(i_code, i_code) raise NotImplementedError(f"{name} is not implemented")Parent block coding
Ancestors
Inherited members
class Coding (e_impl, d_impl)-
Expand source code
class Coding(base.rpps.Pipe): """Coding Pipe""" name = "Coding" decision = Decision.HARD def __init__(self, e_impl, d_impl): self.log = Logger().Child("Coding", Level.WARN).Child(type(self).__name__, Level.WARN) self._enc = e_impl self._dec = d_impl def __str__(self) -> str: return f"{self.name}:{self.decision.name}:{type(self._enc).__name__}:{self.num}/{self.den}" @property def num(self): """Return number of data bits""" return self._enc.num @property def den(self): """Return number of encoded bits""" return self._enc.den @property def rate(self): """Return bits/parity rate""" return self.num/self.den @abstractmethod def encode(self, dobj: dobject.BitObject) -> dobject.CodingData: """Encode dobject using specified coding""" @abstractmethod def decode(self, dobj: dobject.BitObject) -> dobject.BitObject: """Decode dobject using specified coding""" @staticmethod @abstractmethod def load(name: str, obj: dict): """Load coding from json""" def __rmul__(self, other): return self.encode(dobject.ensure_bit(other)) def __rtruediv__(self, other): if issubclass(type(other), dobject.ModData): if self.decision == Decision.HARD: other = dobject.ModData(other.hard) return self.decode(other)Coding Pipe
Ancestors
- Pipe
- abc.ABC
Subclasses
Class variables
var decisionvar name
Static methods
def load(name: str, obj: dict)-
Expand source code
@staticmethod @abstractmethod def load(name: str, obj: dict): """Load coding from json"""Load coding from json
Instance variables
prop den-
Expand source code
@property def den(self): """Return number of encoded bits""" return self._enc.denReturn number of encoded bits
prop num-
Expand source code
@property def num(self): """Return number of data bits""" return self._enc.numReturn number of data bits
prop rate-
Expand source code
@property def rate(self): """Return bits/parity rate""" return self.num/self.denReturn bits/parity rate
Methods
def decode(self,
dobj: BitObject) ‑> BitObject-
Expand source code
@abstractmethod def decode(self, dobj: dobject.BitObject) -> dobject.BitObject: """Decode dobject using specified coding"""Decode dobject using specified coding
def encode(self,
dobj: BitObject) ‑> CodingData-
Expand source code
@abstractmethod def encode(self, dobj: dobject.BitObject) -> dobject.CodingData: """Encode dobject using specified coding"""Encode dobject using specified coding
class Convolutional (e_impl, d_impl)-
Expand source code
class Convolutional(Coding): """Parent convolutional coding""" def encode(self, dobj): return dobject.CodingData(self._enc.encode(dobj.data)) def decode(self, dobj): return dobject.BitObject(self._dec.decode(dobj.data)) @staticmethod def load(name, obj): if obj["type"] == "split": i_e_code = getattr(types, obj["encode"]["type"]) i_d_code = getattr(types, obj["decode"]["type"]) i_e_num = obj["encode"]["num"] i_e_den = obj["encode"]["den"] i_e_gen = np.array(obj["encode"]["generator"], dtype=bool) i_e_con = obj["encode"]["constraint"] i_e_code = i_e_code(i_e_num, i_e_den, i_e_gen, i_e_con) i_d_num = obj["decode"]["num"] i_d_den = obj["decode"]["den"] i_d_con = obj["decode"]["constraint"] i_d_gen = np.array(obj["decode"]["generator"], dtype=bool) i_d_code = i_d_code(i_d_num, i_d_den, i_d_con, i_d_gen) impl = type(name, (Convolutional,), dict()) impl.name = name return impl(i_e_code, i_d_code) raise NotImplementedError(f"{name} is not implemented")Parent convolutional coding
Ancestors
Inherited members
class Decision (*args, **kwds)-
Expand source code
class Decision(Enum): """Coding decision type""" HARD = 0 SOFT = 1Coding decision type
Ancestors
- enum.Enum
Class variables
var HARDvar SOFT