Есть ли у кого-нибудь опыт использования библиотеки Commpy (https://commpy.readthedocs.io/en/latest/) для создания турбокодеров / турбодекодеров?
Я написал простой код для тестирования турбокодов, но в канале без шума i не могу расшифровать сообщение ... Где я ошибся?
Мой код:
import numpy as np
import commpy.channelcoding as cc
import commpy.utilities as cu
memory = np.array([2]) # D
g_matrix = np.array([[0o5, 0o7]]) # G(D) = [1+D^2, 1+D+D^2]
trellis_1 = cc.Trellis(memory, g_matrix)
msg = "test-test-test"
msg = np.concatenate([cu.dec2bitarray(ord(chr), 8) for chr in msg])
print("MSG: \n{}".format(msg))
interleaver = cc.RandInterlv(len(msg), 1667)
turbo_enc = cc.turbo_encode(msg, trellis_1, trellis_1, interleaver)
sys_stream, non_sys_stream_1, non_sys_stream_2 = turbo_enc
print("\nEncoded MSG:",
"\nsys_stream: {} \nnon_sys_stream_1: {} \nnon_sys_stream_2: {}".format(*turbo_enc))
l_ext, dec_result = cc.map_decode(sys_stream, non_sys_stream_1, trellis_1,
1., np.zeros(len(msg)))
print("\nMAP decode result: {}\nhamming_dist={}".format(
dec_result, cu.hamming_dist(msg, dec_result)))
dec_result = cc.turbo_decode(sys_stream, non_sys_stream_1, non_sys_stream_2, trellis_1,
1., 8, interleaver, np.zeros(len(msg)))
print("\nTurboDecoder decode result: {}\nhamming_dist={}".format(
dec_result, cu.hamming_dist(msg, dec_result)))