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
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))
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)
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