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)