def test_fec_conv_viterbi_decoder(self): cc1 = fec_conv.FECConv() x = np.random.randint(0, 2, 20) state = '00' y, state = cc1.conv_encoder(x, state) z_test = [0., 0., 1., 1., 1., 1., 0., 0., 0., 0., 0.] yn = dc.cpx_awgn(2 * y - 1, 5, 1) yn = (yn.real + 1) / 2 * 7 z = cc1.viterbi_decoder(yn) npt.assert_almost_equal(z_test, z)
def test_fec_conv_puncture(self): yp_test = [ 0., 0., 0., 1., 0., 1., 1., 0., 0., 1., 1., 0., 0., 0., 0., 1., 1., 0., 1., 0., 0., 0., 1., 0. ] cc1 = fec_conv.FECConv() x = np.random.randint(0, 2, 20) state = '00' y, state = cc1.conv_encoder(x, state) yp = cc1.puncture(y, ('110', '101')) npt.assert_almost_equal(yp_test, yp)
def test_fec_conv_conv_encoder(self): cc1 = fec_conv.FECConv() x = np.random.randint(0, 2, 20) state = '00' y_test, state_test = (np.array([ 0., 0., 0., 0., 1., 1., 0., 1., 1., 0., 1., 0., 0., 1., 1., 1., 0., 0., 0., 0., 0., 0., 1., 1., 1., 0., 1., 1., 0., 0., 0., 0., 1., 1., 1., 0., 1., 1., 1., 1. ]), '10') y, state = cc1.conv_encoder(x, state) npt.assert_almost_equal(y_test, y) self.assertEqual(state_test, state)
def test_fec_conv_depuncture(self): zdpn_test = [ -0.18077499, 0.24326595, -0.43694799, 3.5, 3.5, 7.41513671, -0.55673726, 7.77925472, 7.64176133, 3.5, 3.5, -0.09960601, -0.50683017, 7.98234306, 6.58202794, 3.5, 3.5, -1.0668518, 1.54447404, 1.47065852, -0.24028734, 3.5, 3.5, 6.19633424, 7.1760269, 0.89395647, 7.69735877, 3.5, 3.5, 1.29889556, -0.31122416, 0.05311373, 7.21216449, 3.5, 3.5, -1.37679829 ] cc1 = fec_conv.FECConv() x = np.random.randint(0, 2, 20) state = '00' y, state = cc1.conv_encoder(x, state) yp = cc1.puncture(y, ('110', '101')) ypn = dc.cpx_awgn(2 * yp - 1, 8, 1) ypn = (ypn.real + 1) / 2 * 7 zdpn = cc1.depuncture(ypn, ('110', '101'), 3.5) # set erase threshold to 7/2 npt.assert_almost_equal(zdpn_test, zdpn)
def test_fec_conv_Nstates(self): G = ('111', '101') cc = fec_conv.FECConv(G) self.assertEqual(4, cc.Nstates)
def test_fec_conv_inst(self): cc1 = fec_conv.FECConv(('101', '111'), Depth=10) # decision depth is 10