Beispiel #1
0
def test_convolutional_stream_encoder():
    # Abrantes.10, p. 307.
    code = komm.ConvolutionalCode(feedforward_polynomials=[[0b111, 0b101]])
    convolutional_encoder = komm.ConvolutionalStreamEncoder(code)
    assert np.array_equal(convolutional_encoder([1, 0, 1, 1, 1, 0, 1, 1, 0, 0]), [1,1, 1,0, 0,0, 0,1, 1,0, 0,1, 0,0, 0,1, 0,1, 1,1])

    # Lin.Costello.04, p. 454--456.
    code = komm.ConvolutionalCode(feedforward_polynomials=[[0b1101, 0b1111]])
    convolutional_encoder = komm.ConvolutionalStreamEncoder(code)
    assert np.array_equal(convolutional_encoder([1, 0, 1, 1, 1, 0, 0, 0]), [1,1, 0,1, 0,0, 0,1, 0,1, 0,1, 0,0, 1,1])

    # Lin.Costello.04, p. 456--458.
    code = komm.ConvolutionalCode(feedforward_polynomials=[[0b11, 0b10, 0b11], [0b10, 0b1, 0b1]])
    convolutional_encoder = komm.ConvolutionalStreamEncoder(code)
    assert np.array_equal(convolutional_encoder([1,1, 0,1, 1,0, 0,0]), [1,1,0, 0,0,0, 0,0,1, 1,1,1])

    # Ryan.Lin.09, p. 154.
    code = komm.ConvolutionalCode(feedforward_polynomials=[[0b111, 0b101]])
    convolutional_encoder = komm.ConvolutionalStreamEncoder(code)
    assert np.array_equal(convolutional_encoder([1, 0, 0, 0]), [1,1, 1,0, 1,1, 0,0])

    # Ibid.
    code = komm.ConvolutionalCode(feedforward_polynomials=[[0b111, 0b101]], feedback_polynomials=[0b111])
    convolutional_encoder = komm.ConvolutionalStreamEncoder(code)
    assert np.array_equal(convolutional_encoder([1, 1, 1, 0]), [1,1, 1,0, 1,1, 0,0])
 def __init__(self, TX_BIN, SNR, MODULATION, BCH_CODE, CCODE, TBLEN, METHOD):
     self.tx_bin = TX_BIN
     self.snr = SNR
     self.modulation = MODULATION
     self.BCH_code = BCH_CODE
     self.C_encoder = komm.ConvolutionalStreamEncoder(CCODE)
     self.C_decoder = komm.ConvolutionalStreamDecoder(CCODE, traceback_length=TBLEN, input_type=METHOD)
     self.tblen = TBLEN
     self.method = METHOD
Beispiel #3
0
def test_convolutional_space_state_representation_2(feedforward_polynomials, feedback_polynomials):
    code = komm.ConvolutionalCode(feedforward_polynomials, feedback_polynomials)
    n, k, nu = code.num_output_bits, code.num_input_bits, code.overall_constraint_length

    A = code.state_matrix
    B = code.control_matrix
    C = code.observation_matrix
    D = code.transition_matrix

    input_bits = np.random.randint(2, size=100*k)
    output_bits = np.empty(n * input_bits.size // k, dtype=np.int)

    s = np.zeros(nu, dtype=np.int)

    for t, u in enumerate(np.reshape(input_bits, newshape=(-1, k))):
        s, v = (np.dot(s, A) + np.dot(u, B)) % 2, (np.dot(s, C) + np.dot(u, D)) % 2
        output_bits[t*n : (t+1)*n] = v

    convolutional_encoder = komm.ConvolutionalStreamEncoder(code)
    assert np.array_equal(output_bits, convolutional_encoder(input_bits))
Beispiel #4
0
def test_convolutional_stream_encoder_2(feedforward_polynomials, feedback_polynomials, message, codeword):
    code = komm.ConvolutionalCode(feedforward_polynomials, feedback_polynomials)
    convolutional_encoder = komm.ConvolutionalStreamEncoder(code)
    assert np.array_equal(convolutional_encoder(message), codeword)
Beispiel #5
0
    awgn = [komm.AWGNChannel(snr=10**(x / 10.)) for x in range(max_snr)]

    # array to store simulated bit error ratio
    ber = np.zeros(max_snr)
    # array to store signal-to-noise[dB] ratio for the channel
    snr = np.zeros(max_snr)

    # rate 1/2 code with [0o7, 0o5] as the feedforward polynomial
    code, tblen = FEC.ConvCode.create_conv_codes()

    # flatten the image into a 1D array and
    # append tblen zeros to compensate for the decoder delay
    tx_bin = np.append(np.unpackbits(np.array(tx_im)), np.zeros(tblen))

    # simulate channel encoding
    encoder = komm.ConvolutionalStreamEncoder(code)
    code_word = encoder(tx_bin)

    # simulate modulation
    tx_data = qpsk.modulate(code_word)

    # list containing decoding decision methods
    d = args.d
    decoder = komm.ConvolutionalStreamDecoder(code,
                                              traceback_length=tblen,
                                              input_type=d)

    string = " ".join([d, "decoding"])
    print(" ".join(["Simulating", string, "..."]))

    # loop to to simulate transmission with the SNR value in range 0 to max_snr