def test_different_classes(self): code1 = BinaryLinearBlockCode( parityCheckMatrix=testData('Alist_N23_M11.txt')) code2 = HammingCode(3) for code in code1, code2: channel = AWGNC(0, code.rate, seed=1337) decoders = [ cls(code, maxRPCrounds=0) for cls in (AdaptiveLPDecoder, AdaptiveLPDecoderGurobi) ] sig = channel.signalGenerator(code, wordSeed=1337) for i in range(1000): llr = next(sig) for decoder in decoders: decoder.decode(llr) for decoder in decoders[1:]: self.assertTrue( np.allclose(decoder.solution, decoders[0].solution))
class TestCodePersistence(TestCase): def setUp(self): database.init('sqlite:///:memory:', testMode=True) self.code = HammingCode(4) database.checkCode(self.code, insert=True) def tearDown(self): database.teardown() def test_persistence(self): retrieved = database.get('code', self.code.name) self.assertEqual(retrieved.toJSON(), self.code.toJSON()) def test_wrongName(self): code = HammingCode(3) code.name = self.code.name self.assertRaises(database.DatabaseException, database.checkCode, code)
def test_decoding(self): code1 = BinaryLinearBlockCode( parityCheckMatrix=testData('Alist_N23_M11.txt')) code2 = HammingCode(3) for code in code1, code2: channel = AWGNC(0, code.rate, seed=1337) decoders = [ AdaptiveLPDecoder(code, maxRPCrounds=i) for i in [0, 3, -1] ] sig = channel.signalGenerator(code, wordSeed=1337) errors = {decoder: 0 for decoder in decoders} for i in range(100): llr = next(sig) for decoder in decoders: solution = decoder.decode(llr) if not np.allclose(solution, sig.codeword): errors[decoder] += 1 for i in range(len(decoders) - 1): self.assertGreaterEqual(errors[decoders[i]], errors[decoders[i + 1]])
for ti in T: if delta / zeta > ti: nu = delta / zeta return nu else: delta = delta - ti zeta = zeta - 1 nu = delta / zeta return nu if __name__ == "__main__": from lpdec.codes.classic import HammingCode from lpdec.codes.ldpc import ArrayLDPCCode from lpdec.channels import AWGNC code = HammingCode(3) #code = ArrayLDPCCode(q=7, m=4) decoder = ADMMDecoder(code, name="Test Decoder") channel = AWGNC(1, code.rate, seed=12565) sig = channel.signalGenerator(code, wordSeed=1) #u = np.array([-1,2,2,1,-1,0]) #print "z = ", decoder.proj(u) signal = next(sig) decoder.decode(signal) print(decoder.objectiveValue) print(decoder.solution) H = code.parityCheckMatrix print("solution x = ", decoder.solution) print("objective value f = ", decoder.objectiveValue) print("Hx = ", np.dot(H, decoder.solution)) print("signal = ", signal)
def test_wrongName(self): code = HammingCode(3) code.name = self.code.name self.assertRaises(database.DatabaseException, database.checkCode, code)
def setUp(self): database.init('sqlite:///:memory:', testMode=True) self.code = HammingCode(4) database.checkCode(self.code, insert=True)
def codes(self): yield BinaryLinearBlockCode( parityCheckMatrix=testData('Alist_N23_M11.txt')), 7 yield BinaryLinearBlockCode( parityCheckMatrix=testData('Alist_N155_M93.txt')), 20 yield HammingCode(4), 3
def setUp(self): self.code = HammingCode(4)