From 5effadcbaf66f476c8fffefa2c349676f41c3f52 Mon Sep 17 00:00:00 2001 From: jaseg Date: Fri, 28 Feb 2020 19:30:27 +0100 Subject: LDPC decoder fully working --- controller/fw/ldpc_decoder_test.py | 35 +++++++++++++++++++++++++++-------- 1 file changed, 27 insertions(+), 8 deletions(-) (limited to 'controller/fw/ldpc_decoder_test.py') diff --git a/controller/fw/ldpc_decoder_test.py b/controller/fw/ldpc_decoder_test.py index d5cbb24..3b91bba 100644 --- a/controller/fw/ldpc_decoder_test.py +++ b/controller/fw/ldpc_decoder_test.py @@ -16,8 +16,8 @@ args = parser.parse_args() lib = C.CDLL('./ldpc_decoder_test.so') -n = 384 -nodes, bits = 6, 8 +n = 5*19 +nodes, bits = 17, 19 H, G = pyldpc.make_ldpc(n, nodes, bits, systematic=False, seed=0) _1, bits_pos, _2 = scipy.sparse.find(H) _, k = G.shape @@ -26,18 +26,23 @@ st = np.random.RandomState(seed=0) test_data = st.randint(0, 2, k) d = np.dot(G, test_data) % 2 x = (-1) ** d +x[29:] = 0 bits_pos = bits_pos.astype(np.uint32) x = x.astype(np.int8) lib.decode.argtypes = [C.c_size_t, C.c_size_t, C.c_size_t, C.POINTER(C.c_size_t), C.POINTER(C.c_int8), C.POINTER(C.c_int8), C.c_uint] +lib.get_message.argtypes = [C.c_size_t, C.c_size_t, C.POINTER(C.c_int8), C.POINTER(C.c_int8), C.POINTER(C.c_int8)] if args.reference: ref_out = test_decoder.decode(H, x, 3) print('decoder output:', ref_out, flush=True) - print('msg reconstruction:', pyldpc.get_message(G, ref_out)) - print('reference decoder: ', np.all(np.equal(pyldpc.get_message(G, ref_out), test_data)), flush=True) - print(ref_out.dtype) + print('msg reconstruction:', test_decoder.get_message(G, ref_out)) + print('reference decoder: ', np.all(np.equal(test_decoder.get_message(G, ref_out), test_data)), flush=True) + np.set_printoptions(linewidth=220) + print(test_data) + print(test_decoder.get_message(G, ref_out)) + print(test_decoder.get_message(G, ref_out) ^ test_data) else: out = np.zeros(n, dtype=np.uint8) @@ -48,6 +53,20 @@ else: out.ctypes.data_as(C.POINTER(C.c_int8)), 25), flush=True) print('decoder output:', out) - print('msg reconstruction:', pyldpc.get_message(G, out)) - print('decoder under test:', np.all(np.equal(pyldpc.get_message(G, out.astype(np.int64)), test_data))) - print(out.dtype) + print('msg reconstruction:', test_decoder.get_message(G, out.astype(np.int64))) + print('decoder under test:', np.all(np.equal(test_decoder.get_message(G, out.astype(np.int64)), test_data))) + np.set_printoptions(linewidth=220) + print(test_data) + print(test_decoder.get_message(G, out.astype(np.int64))) + G = G.astype(np.int8) + msg = np.zeros(k, dtype=np.int8) + lib.get_message( + n, k, + G.ctypes.data_as(C.POINTER(C.c_int8)), + out.astype(np.int8).ctypes.data_as(C.POINTER(C.c_int8)), + msg.ctypes.data_as(C.POINTER(C.c_int8))) + print(msg) + print(msg ^ test_data) + +print('codeword length:', len(x)) +print('data length:', len(test_data)) -- cgit