def test_1024_rate_1_code(): # effectively a Monte-Carlo simulation for channel polarization. ntests = 10000 n = 256 k = n transition_prob = 0.11 num_transitions = int(k * transition_prob) frozenbits = np.zeros(n - k) frozenbitposition = np.array((), dtype=int) encoder = PolarEncoder(n, k, frozenbitposition, frozenbits) decoder = PolarDecoder(n, k, frozenbitposition, frozenbits) channel_counter = np.zeros(k) possible_indices = np.arange(n, dtype=int) for i in range(ntests): bits = np.random.randint(2, size=k) tx = encoder.encode(bits) np.random.shuffle(possible_indices) tx[possible_indices[0:num_transitions]] = (tx[possible_indices[0:num_transitions]] + 1) % 2 rx = tx recv = decoder.decode(rx) channel_counter += (bits == recv) print channel_counter print(np.min(channel_counter), np.max(channel_counter)) np.save('channel_counter_' + str(ntests) + '.npy', channel_counter)
def systematic_encoder_decoder_chain_test(): print('systematic encoder decoder chain test') block_size = int(2 ** 8) info_bit_size = block_size // 2 ntests = 100 frozenbitposition = cc.get_frozen_bit_indices_from_z_parameters(cc.bhattacharyya_bounds(0.0, block_size), block_size - info_bit_size) encoder = PolarEncoder(block_size, info_bit_size, frozenbitposition) decoder = PolarDecoder(block_size, info_bit_size, frozenbitposition) for i in range(ntests): bits = np.random.randint(2, size=info_bit_size) y = encoder.encode_systematic(bits) u_hat = decoder.decode_systematic(y) assert (bits == u_hat).all()
def systematic_encoder_decoder_chain_test(): print('systematic encoder decoder chain test') block_size = int(2**8) info_bit_size = block_size // 2 ntests = 100 frozenbitposition = cc.get_frozen_bit_indices_from_z_parameters( cc.bhattacharyya_bounds(0.0, block_size), block_size - info_bit_size) encoder = PolarEncoder(block_size, info_bit_size, frozenbitposition) decoder = PolarDecoder(block_size, info_bit_size, frozenbitposition) for i in range(ntests): bits = np.random.randint(2, size=info_bit_size) y = encoder.encode_systematic(bits) u_hat = decoder.decode_systematic(y) assert (bits == u_hat).all()
def test_enc_dec_chain(): ntests = 100 n = 256 k = n // 2 frozenbits = np.zeros(n - k) frozenbitposition = get_frozen_bit_position() for i in range(ntests): bits = np.random.randint(2, size=k) encoder = PolarEncoder(n, k, frozenbitposition, frozenbits) decoder = PolarDecoder(n, k, frozenbitposition, frozenbits) encoded = encoder.encode(bits) rx = decoder.decode(encoded) if not is_equal(bits, rx): raise ValueError('Test #', i, 'failed, input and output differ', bits, '!=', rx) return