Module rpps.coding.types.linear
Functions
def generate(length: int, data_bits: int, p: numpy.ndarray)-
Expand source code
def generate(length: int, data_bits: int, p: np.ndarray): # length: n # data_bits: k def make_id(size: int): idm = np.zeros((size, size)) idm[np.arange(size),np.arange(size)] = 1 return idm redundant = length - data_bits g_id = make_id(data_bits) c_id = make_id(redundant) print(f"n: {length}") print(f"k: {data_bits}") print(f"r: {redundant}") print() print(f"generator id:\n{g_id.astype(int)}") print(f"parity check id:\n{c_id.astype(int)}") if p.shape[0] == data_bits and p.shape[1] == redundant: pass elif p.shape[0] == redundant and p.shape[0] == data_bits: p = np.transpose(p) else: print(f"p must be shape ({data_bits},{redundant}) or ({redundant},{data_bits})") exit() g_matrix = np.zeros((data_bits,length)) for i in range(data_bits): g_matrix[i,0:data_bits] = g_id[i] g_matrix[i,data_bits:] = p[i] print(f"parity matrix:\n{p.astype(int)}") print(f"generator:\n{g_matrix.astype(int)}") p = np.transpose(p) c_matrix = np.zeros((redundant,length)) for i in range(redundant): c_matrix[i,0:data_bits] = p[i] c_matrix[i,data_bits:] = c_id[i] print(f"parity matrix:\n{p.astype(int)}") print(f"parity check:\n{c_matrix.astype(int)}")
Classes
class linear (generator, check)-
Expand source code
class linear(_code): def __init__(self, generator, check): super().__init__(generator.shape[0], generator.shape[1]) self.generator = generator self.check = np.transpose(check) def encode(self, bits: np.ndarray): blocks = block(bits, self.num) encoded = np.empty((len(blocks), self.den), dtype=int) for i, blk in enumerate(blocks): encoded[i] = np.matmul(blk.astype(int), self.generator) encoded = unblock(encoded) % 2 return encoded.astype(bool) def decode(self, bits: np.ndarray): blocks = block(bits, self.den) decoded = np.empty((len(blocks), self.den - self.num), dtype=int) for i, blk in enumerate(blocks): decoded[i] = np.matmul(blk.astype(int), self.check) decoded = unblock(decoded) parity_bits = decoded % 2 if sum(parity_bits) == 0: return unblock(blocks[:,0:self.num]) print(f"{parity_bits}") raise NotImplementedError("Bit error!")Ancestors
- rpps.coding.types._code._code
Methods
def decode(self, bits: numpy.ndarray)-
Expand source code
def decode(self, bits: np.ndarray): blocks = block(bits, self.den) decoded = np.empty((len(blocks), self.den - self.num), dtype=int) for i, blk in enumerate(blocks): decoded[i] = np.matmul(blk.astype(int), self.check) decoded = unblock(decoded) parity_bits = decoded % 2 if sum(parity_bits) == 0: return unblock(blocks[:,0:self.num]) print(f"{parity_bits}") raise NotImplementedError("Bit error!")Decode bits
def encode(self, bits: numpy.ndarray)-
Expand source code
def encode(self, bits: np.ndarray): blocks = block(bits, self.num) encoded = np.empty((len(blocks), self.den), dtype=int) for i, blk in enumerate(blocks): encoded[i] = np.matmul(blk.astype(int), self.generator) encoded = unblock(encoded) % 2 return encoded.astype(bool)Encode bits