def test_005_t (self): # just to see if when syms_per_frame=0, it is still working. M = 256 syms_per_frame = 10 num_frame = int(math.pow(2,10)) start = 5 end = 9 zero_pads = 1 extra_pad = False sel_preamble = 0 sel_eq = 2 # preamble = [0]*M*zero_pads+[0]*4+[1, -1j, -1, 1j]*3+[0]*(M-end-1)+[0]*M*zero_pads if sel_preamble == 0: # standard one vector center preamble [1,-j,-1,j] preamble = [0]*M*zero_pads+[0]*4+[1, -1j, -1, 1j]+[1, -1j, -1]+[0]*(M-end-1-1)+[0]*M*zero_pads elif sel_preamble == 1: # standard preamble with triple repetition preamble = [0]*M*zero_pads+([0]*4+[1, -1j, -1, 1j]+[1, -1j, -1]+[0]*(M-end-1-1))*3+[0]*M*zero_pads elif sel_preamble ==2: # IAM-R preamble [1, -1,-1, 1] preamble = [0]*M*zero_pads+[0]*4+[1, -1, -1, 1]+4+[1, -1, -1]+[0]*(M-end-1-1)+[0]*M*zero_pads else: # standard one vector center preamble [1,-j,-1,j] preamble = [0]*M*zero_pads+[0]*4+[1, -1j, -1, 1j]+[1, -1j, -1]+[0]*(M-end-1-1)+[0]*M*zero_pads if extra_pad: preamble.extend(M*[0]) # for i in range(len(preamble)): # print("i= "+str(i%M)+" "+str(preamble[i])) # print("end") src_data=list() expected_result = list() # e = 0 # exp. res index for i in range(num_frame): # expected_result.extend(preamble) for k in range(M*2*syms_per_frame): temp = int(random.random()*10) src_data.append(temp) # expected_result.append(temp) expected_result.extend(src_data) src = blocks.vector_source_c(src_data,vlen=M) ipr = fbmc_insert_preamble_mu_vcvc(M=M, syms_per_frame=syms_per_frame, start=start, end=end, sel_eq=sel_eq, sel_preamble=sel_preamble, zero_pads=zero_pads, extra_pad=extra_pad) rpr = fbmc_remove_preamble_vcvc(M, syms_per_frame, sel_preamble, zero_pads, extra_pad) dst = blocks.vector_sink_c(vlen=M) self.tb.connect(src,ipr,rpr,dst) self.tb.run () # check data result_data = dst.data() # print result_data self.assertComplexTuplesAlmostEqual(tuple(expected_result),tuple(result_data))
def test_001_t (self): # set up fg src_data=(9,9j,-9,-9j,2,2j,-2,-2j,4,4j,-4,-4j,6,6j,-6,-6j) preamble = (0,0,0,0,1,-1j,-1,1j,0,0,0,0) # expected_result=(0,0,0,0,1,-1j,-1,1j,0,0,0,0, # 1,1j,-1,-1j,2,2j,-2,-2j, # 0,0,0,0,1,-1j,-1,1j,0,0,0,0, # 4,4j,-4,-4j,6,6j,-6,-6j) src = blocks.vector_source_c(src_data,vlen=4) ipr = fbmc_insert_preamble_vcvc(4,1,preamble) rpr = fbmc_remove_preamble_vcvc(4,1,len(preamble)) dst = blocks.vector_sink_c(vlen=4) self.tb.connect(src,ipr,rpr,dst) self.tb.run () # check data result_data=dst.data() # print len(preamble) self.assertEqual(src_data,result_data)
def test_001_t(self): # set up fg src_data = (9, 9j, -9, -9j, 2, 2j, -2, -2j, 4, 4j, -4, -4j, 6, 6j, -6, -6j) preamble = (0, 0, 0, 0, 1, -1j, -1, 1j, 0, 0, 0, 0) # expected_result=(0,0,0,0,1,-1j,-1,1j,0,0,0,0, # 1,1j,-1,-1j,2,2j,-2,-2j, # 0,0,0,0,1,-1j,-1,1j,0,0,0,0, # 4,4j,-4,-4j,6,6j,-6,-6j) src = blocks.vector_source_c(src_data, vlen=4) ipr = fbmc_insert_preamble_vcvc(4, 1, preamble) rpr = fbmc_remove_preamble_vcvc(4, 1, len(preamble)) dst = blocks.vector_sink_c(vlen=4) self.tb.connect(src, ipr, rpr, dst) self.tb.run() # check data result_data = dst.data() # print len(preamble) self.assertEqual(src_data, result_data)
def test_002_t(self): M=int(math.pow(2,7)) len_frame = 10 num_frame = int(math.pow(2,12)) preamble = [0]*M+[1, -1j, -1, 1j]*int(M/4)+[0]*M src_data=list() for i in range(len_frame*2*num_frame*M): src_data.append(int(random.random()*10)) src = blocks.vector_source_c(src_data,vlen=M) ipr = fbmc_insert_preamble_vcvc(M,len_frame,preamble) rpr = fbmc_remove_preamble_vcvc(M,len_frame,len(preamble)) dst = blocks.vector_sink_c(vlen=M) self.tb.connect(src,ipr,rpr,dst) self.tb.run () # check data result_data = dst.data() # print result_data self.assertComplexTuplesAlmostEqual(tuple(src_data),tuple(result_data))
def test_002_t(self): M = int(math.pow(2, 7)) len_frame = 10 num_frame = int(math.pow(2, 12)) preamble = [0] * M + [1, -1j, -1, 1j] * int(M / 4) + [0] * M src_data = list() for i in range(len_frame * 2 * num_frame * M): src_data.append(int(random.random() * 10)) src = blocks.vector_source_c(src_data, vlen=M) ipr = fbmc_insert_preamble_vcvc(M, len_frame, preamble) rpr = fbmc_remove_preamble_vcvc(M, len_frame, len(preamble)) dst = blocks.vector_sink_c(vlen=M) self.tb.connect(src, ipr, rpr, dst) self.tb.run() # check data result_data = dst.data() # print result_data self.assertComplexTuplesAlmostEqual(tuple(src_data), tuple(result_data))
def test_005_t(self): # just to see if when syms_per_frame=0, it is still working. M = 256 syms_per_frame = 10 num_frame = int(math.pow(2, 10)) start = 5 end = 9 zero_pads = 1 extra_pad = False sel_preamble = 0 sel_eq = 2 # preamble = [0]*M*zero_pads+[0]*4+[1, -1j, -1, 1j]*3+[0]*(M-end-1)+[0]*M*zero_pads if sel_preamble == 0: # standard one vector center preamble [1,-j,-1,j] preamble = [0] * M * zero_pads + [0] * 4 + [1, -1j, -1, 1j] + [ 1, -1j, -1 ] + [0] * (M - end - 1 - 1) + [0] * M * zero_pads elif sel_preamble == 1: # standard preamble with triple repetition preamble = [0] * M * zero_pads + ( [0] * 4 + [1, -1j, -1, 1j] + [1, -1j, -1] + [0] * (M - end - 1 - 1)) * 3 + [0] * M * zero_pads elif sel_preamble == 2: # IAM-R preamble [1, -1,-1, 1] preamble = [0] * M * zero_pads + [0] * 4 + [1, -1, -1, 1] + 4 + [ 1, -1, -1 ] + [0] * (M - end - 1 - 1) + [0] * M * zero_pads else: # standard one vector center preamble [1,-j,-1,j] preamble = [0] * M * zero_pads + [0] * 4 + [1, -1j, -1, 1j] + [ 1, -1j, -1 ] + [0] * (M - end - 1 - 1) + [0] * M * zero_pads if extra_pad: preamble.extend(M * [0]) # for i in range(len(preamble)): # print("i= "+str(i%M)+" "+str(preamble[i])) # print("end") src_data = list() expected_result = list() # e = 0 # exp. res index for i in range(num_frame): # expected_result.extend(preamble) for k in range(M * 2 * syms_per_frame): temp = int(random.random() * 10) src_data.append(temp) # expected_result.append(temp) expected_result.extend(src_data) src = blocks.vector_source_c(src_data, vlen=M) ipr = fbmc_insert_preamble_mu_vcvc(M=M, syms_per_frame=syms_per_frame, start=start, end=end, sel_eq=sel_eq, sel_preamble=sel_preamble, zero_pads=zero_pads, extra_pad=extra_pad) rpr = fbmc_remove_preamble_vcvc(M, syms_per_frame, sel_preamble, zero_pads, extra_pad) dst = blocks.vector_sink_c(vlen=M) self.tb.connect(src, ipr, rpr, dst) self.tb.run() # check data result_data = dst.data() # print result_data self.assertComplexTuplesAlmostEqual(tuple(expected_result), tuple(result_data))
def test_001_t(self): # set up fg M = 16 syms_per_frame = 20 num_frame = int(math.pow(2, 10)) indices = [3, 6, 10, 14] # num_users = 2 sel_preamble = 1 # triple repetition preamble zero_pads = 4 extra_pad = 1 sel_eq = 0 # one tap equalizer # prepare test data containers src_data = list() expected_result1 = list() # expected res for user 1 expected_result2 = list() # expected res for user 2 preamble = list() # prepare preamble if sel_preamble == 0: # standard one vector center preamble [1,-j,-1,j] center_preamble = [ 0, 0, 0, 1j, 1, -1j, -1, 0, 0, 0, -1, 1j, 1, -1j, -1, 0 ] elif sel_preamble == 1: # standard preamble with triple repetition tmp = [0, 0, 0, 1j, 1, -1j, -1, 0, 0, 0, -1, 1j, 1, -1j, -1, 0] center_preamble = tmp * 3 #[1/math.sqrt(3), -1j/math.sqrt(3), -1/math.sqrt(3), 1j/math.sqrt(3)]*((int)(M/4))*3 elif sel_preamble == 2: # IAM-R preamble [1, -1,-1, 1] center_preamble = [ 0, 0, 0, 1, 1, -1, -1, 0, 0, 0, -1, 1, 1, -1, -1, 0 ] else: # standard one vector center preamble [1,-j,-1,j] center_preamble = [ 0, 0, 0, 1j, 1, -1j, -1, 0, 0, 0, -1, 1j, 1, -1j, -1, 0 ] preamble.extend([0] * zero_pads * M) preamble.extend(center_preamble) preamble.extend([0] * zero_pads * M) if extra_pad: preamble.extend([0] * M) # print len(preamble) # prepare test data for k in range(num_frame): # each frame will be multiplied by a random factor. factor = int(random.random() * 10) + 1 tmp = [x * factor for x in preamble] src_data.extend(tmp) # preamble is prepended. for l in range(2 * syms_per_frame * M): if (l % M < 3) or (l % M > 14) or (l % M > 6 and l % M < 10): src_data.extend([0]) elif ((l % M >= 3) and (l % M <= 6)): #belong to user1 data = int((random.random() * 10 + 1) * abs(center_preamble[l % M])) expected_result1.append(data) src_data.append(data * factor) else: # belong to user2 data = int((random.random() * 10 + 1) * abs(center_preamble[l % M])) expected_result2.append(data) src_data.append(data * factor) # print "src:" # for k in range((syms_per_frame*2+len(preamble)/M)*num_frame): # print src_data[k*M:(k+1)*M] # print str(len(src_data)-len(preamble)*num_frame) src = blocks.vector_source_c(src_data, vlen=M) scp = ofdm.fbmc_subchannel_processing_mu_vcvc( M=M, syms_per_frame=syms_per_frame, indices=indices, sel_preamble=sel_preamble, zero_pads=zero_pads, extra_pad=extra_pad, sel_eq=sel_eq) rem = fbmc_remove_preamble_vcvc(M, syms_per_frame, sel_preamble, zero_pads, extra_pad) avm1 = ofdm.fbmc_asymmetrical_vector_mask_vcvc(M, 3, 6) avm2 = ofdm.fbmc_asymmetrical_vector_mask_vcvc(M, 10, 14) dst1 = blocks.vector_sink_c(vlen=4) dst2 = blocks.vector_sink_c(vlen=5) dst99 = blocks.vector_sink_c(vlen=M) self.tb.connect((src, 0), (scp, 0)) self.tb.connect((scp, 0), (rem, 0)) self.tb.connect((rem, 0), avm1) self.tb.connect((rem, 0), avm2) self.tb.connect((avm1, 0), dst1) self.tb.connect((avm2, 0), dst2) # estimation probe is connected to dst99 self.tb.connect((scp, 1), dst99) self.tb.run() # check data result_data1 = dst1.data() result_data2 = dst2.data() result_data99 = dst99.data() # print "res:" # for k in range(syms_per_frame*2*num_frame): # print result_data1[k*4:(k+1)*4] # print "res99:" # for k in range(syms_per_frame*2*num_frame): # print result_data99[k*M:(k+1)*M] # for i in range(len(result_data2)): # print str(i)+"\t"+str(result_data2[i]) # print result_data self.assertComplexTuplesAlmostEqual(expected_result1, result_data1, 6) self.assertComplexTuplesAlmostEqual(expected_result2, result_data2, 6)
def test_003_t(self): # set up fg M = 16 syms_per_frame = 20 num_frame = int(math.pow(2, 10)) indices = [3, 6, 10, 14] # num_users = 2 sel_preamble = 1 zero_pads = 2 extra_pad = 0 sel_eq = 4 #no eq # prepare test data containers src_data = list() expected_result = list() preamble = list() # prepare preamble if sel_preamble == 0: # standard one vector center preamble [1,-j,-1,j] center_preamble = [ 0, 0, 0, 1j, 1, -1j, -1, 0, 0, 0, -1, 1j, 1, -1j, -1, 0 ] elif sel_preamble == 1: # standard preamble with triple repetition tmp = [0, 0, 0, 1j, 1, -1j, -1, 0, 0, 0, -1, 1j, 1, -1j, -1, 0] center_preamble = tmp * 3 #[1/math.sqrt(3), -1j/math.sqrt(3), -1/math.sqrt(3), 1j/math.sqrt(3)]*((int)(M/4))*3 elif sel_preamble == 2: # IAM-R preamble [1, -1,-1, 1] center_preamble = [ 0, 0, 0, 1, 1, -1, -1, 0, 0, 0, -1, 1, 1, -1, -1, 0 ] else: # standard one vector center preamble [1,-j,-1,j] center_preamble = [ 0, 0, 0, 1j, 1, -1j, -1, 0, 0, 0, -1, 1j, 1, -1j, -1, 0 ] preamble.extend([0] * zero_pads * M) preamble.extend(center_preamble) preamble.extend([0] * zero_pads * M) if extra_pad: preamble.extend([0] * M) # print len(preamble) # prepare test data for k in range(num_frame): # each frame will be multiplied by a random factor. factor = int(random.random() * 10) + 1 tmp = [x * factor for x in preamble] src_data.extend(tmp) for l in range(2 * syms_per_frame * M): if (l % M < 3) or (l % M > 14) or (l % M > 6 and l % M < 10): data = 0 else: data = int((random.random() * 10 + 1) * abs(center_preamble[l % M])) expected_result.append(data * factor) src_data.append(data * factor) # print "exp:" # for k in range(syms_per_frame*2*num_frame): # print expected_result[k*M:(k+1)*M] # print "src:" # for k in range((syms_per_frame*2+len(preamble)/M)*num_frame): # print src_data[k*M:(k+1)*M] # # print str(len(src_data)-len(preamble)*num_frame) src = blocks.vector_source_c(src_data, vlen=M) scp = ofdm.fbmc_subchannel_processing_mu_vcvc( M=M, syms_per_frame=syms_per_frame, indices=indices, sel_preamble=sel_preamble, zero_pads=zero_pads, extra_pad=extra_pad, sel_eq=sel_eq) rem = fbmc_remove_preamble_vcvc(M, syms_per_frame, sel_preamble, zero_pads, extra_pad) dst = blocks.vector_sink_c(vlen=M) dst2 = blocks.vector_sink_c(vlen=M) self.tb.connect((src, 0), (scp, 0)) self.tb.connect((scp, 0), (rem, 0)) self.tb.connect((rem, 0), dst) self.tb.connect((scp, 1), dst2) self.tb.run() # check data result_data = dst.data() result_data2 = dst2.data() # print "res:" # for k in range(syms_per_frame*2*num_frame): # print result_data[k*M:(k+1)*M] # for i in range(len(result_data2)): # print str(i)+"\t"+str(result_data2[i]) # print result_data self.assertComplexTuplesAlmostEqual(expected_result, result_data, 6)
def test_001_t (self): # set up fg M = 16 syms_per_frame = 20 num_frame = int(math.pow(2,10)) indices = [3,6,10,14] # num_users = 2 sel_preamble = 1 # triple repetition preamble zero_pads = 4 extra_pad = 1 sel_eq = 0 # one tap equalizer # prepare test data containers src_data = list() expected_result1 = list() # expected res for user 1 expected_result2 = list() # expected res for user 2 preamble = list() # prepare preamble if sel_preamble == 0: # standard one vector center preamble [1,-j,-1,j] center_preamble = [0, 0, 0, 1j,1, -1j, -1, 0,0, 0, -1, 1j,1, -1j, -1, 0] elif sel_preamble == 1: # standard preamble with triple repetition tmp = [0, 0, 0, 1j,1, -1j, -1, 0,0, 0, -1, 1j,1, -1j, -1, 0] center_preamble = tmp*3 #[1/math.sqrt(3), -1j/math.sqrt(3), -1/math.sqrt(3), 1j/math.sqrt(3)]*((int)(M/4))*3 elif sel_preamble ==2: # IAM-R preamble [1, -1,-1, 1] center_preamble = [0, 0, 0, 1, 1, -1, -1, 0, 0, 0, -1, 1,1, -1, -1, 0] else: # standard one vector center preamble [1,-j,-1,j] center_preamble = [0, 0, 0, 1j,1, -1j, -1, 0,0, 0, -1, 1j,1, -1j, -1, 0] preamble.extend([0]*zero_pads*M) preamble.extend(center_preamble) preamble.extend([0]*zero_pads*M) if extra_pad: preamble.extend([0]*M) # print len(preamble) # prepare test data for k in range(num_frame): # each frame will be multiplied by a random factor. factor = int(random.random()*10)+1 tmp = [x*factor for x in preamble] src_data.extend(tmp) # preamble is prepended. for l in range(2*syms_per_frame*M): if (l%M<3) or (l%M>14) or (l%M>6 and l%M<10): src_data.extend([0]) elif ((l%M>=3) and (l%M<=6)): #belong to user1 data = int((random.random()*10+1)*abs(center_preamble[l%M])) expected_result1.append(data) src_data.append(data*factor) else: # belong to user2 data = int((random.random()*10+1)*abs(center_preamble[l%M])) expected_result2.append(data) src_data.append(data*factor) # print "src:" # for k in range((syms_per_frame*2+len(preamble)/M)*num_frame): # print src_data[k*M:(k+1)*M] # print str(len(src_data)-len(preamble)*num_frame) src = blocks.vector_source_c(src_data,vlen=M) scp = ofdm.fbmc_subchannel_processing_mu_vcvc(M=M,syms_per_frame=syms_per_frame,indices=indices,sel_preamble=sel_preamble,zero_pads=zero_pads,extra_pad=extra_pad,sel_eq=sel_eq) rem = fbmc_remove_preamble_vcvc(M, syms_per_frame, sel_preamble, zero_pads, extra_pad) avm1 = ofdm.fbmc_asymmetrical_vector_mask_vcvc(M,3,6) avm2 = ofdm.fbmc_asymmetrical_vector_mask_vcvc(M,10,14) dst1 = blocks.vector_sink_c(vlen=4) dst2 = blocks.vector_sink_c(vlen=5) dst99 = blocks.vector_sink_c(vlen=M) self.tb.connect((src,0),(scp,0)) self.tb.connect((scp,0),(rem,0)) self.tb.connect((rem,0),avm1) self.tb.connect((rem,0),avm2) self.tb.connect((avm1,0),dst1) self.tb.connect((avm2,0),dst2) # estimation probe is connected to dst99 self.tb.connect((scp,1),dst99) self.tb.run () # check data result_data1 = dst1.data() result_data2 = dst2.data() result_data99 = dst99.data() # print "res:" # for k in range(syms_per_frame*2*num_frame): # print result_data1[k*4:(k+1)*4] # print "res99:" # for k in range(syms_per_frame*2*num_frame): # print result_data99[k*M:(k+1)*M] # for i in range(len(result_data2)): # print str(i)+"\t"+str(result_data2[i]) # print result_data self.assertComplexTuplesAlmostEqual(expected_result1,result_data1,6) self.assertComplexTuplesAlmostEqual(expected_result2,result_data2,6)
def test_003_t(self): # set up fg M = 16 syms_per_frame = 20 num_frame = int(math.pow(2,10)) indices = [3,6,10,14] # num_users = 2 sel_preamble = 1 zero_pads = 2 extra_pad = 0 sel_eq = 4 #no eq # prepare test data containers src_data = list() expected_result = list() preamble = list() # prepare preamble if sel_preamble == 0: # standard one vector center preamble [1,-j,-1,j] center_preamble = [0, 0, 0, 1j,1, -1j, -1, 0,0, 0, -1, 1j,1, -1j, -1, 0] elif sel_preamble == 1: # standard preamble with triple repetition tmp = [0, 0, 0, 1j,1, -1j, -1, 0,0, 0, -1, 1j,1, -1j, -1, 0] center_preamble = tmp*3 #[1/math.sqrt(3), -1j/math.sqrt(3), -1/math.sqrt(3), 1j/math.sqrt(3)]*((int)(M/4))*3 elif sel_preamble ==2: # IAM-R preamble [1, -1,-1, 1] center_preamble = [0, 0, 0, 1, 1, -1, -1, 0, 0, 0, -1, 1,1, -1, -1, 0] else: # standard one vector center preamble [1,-j,-1,j] center_preamble = [0, 0, 0, 1j,1, -1j, -1, 0,0, 0, -1, 1j,1, -1j, -1, 0] preamble.extend([0]*zero_pads*M) preamble.extend(center_preamble) preamble.extend([0]*zero_pads*M) if extra_pad: preamble.extend([0]*M) # print len(preamble) # prepare test data for k in range(num_frame): # each frame will be multiplied by a random factor. factor = int(random.random()*10)+1 tmp = [x*factor for x in preamble] src_data.extend(tmp) for l in range(2*syms_per_frame*M): if (l%M<3) or (l%M>14) or (l%M>6 and l%M<10): data = 0 else: data = int((random.random()*10+1)*abs(center_preamble[l%M])) expected_result.append(data*factor) src_data.append(data*factor) # print "exp:" # for k in range(syms_per_frame*2*num_frame): # print expected_result[k*M:(k+1)*M] # print "src:" # for k in range((syms_per_frame*2+len(preamble)/M)*num_frame): # print src_data[k*M:(k+1)*M] # # print str(len(src_data)-len(preamble)*num_frame) src = blocks.vector_source_c(src_data,vlen=M) scp = ofdm.fbmc_subchannel_processing_mu_vcvc(M=M,syms_per_frame=syms_per_frame,indices=indices,sel_preamble=sel_preamble,zero_pads=zero_pads,extra_pad=extra_pad,sel_eq=sel_eq) rem = fbmc_remove_preamble_vcvc(M, syms_per_frame, sel_preamble, zero_pads, extra_pad) dst = blocks.vector_sink_c(vlen=M) dst2 = blocks.vector_sink_c(vlen=M) self.tb.connect((src,0),(scp,0)) self.tb.connect((scp,0),(rem,0)) self.tb.connect((rem,0),dst) self.tb.connect((scp,1),dst2) self.tb.run () # check data result_data = dst.data() result_data2 = dst2.data() # print "res:" # for k in range(syms_per_frame*2*num_frame): # print result_data[k*M:(k+1)*M] # for i in range(len(result_data2)): # print str(i)+"\t"+str(result_data2[i]) # print result_data self.assertComplexTuplesAlmostEqual(expected_result,result_data,6)