def test_003_small_frame_mod(self): num_frames = 300 total_subcarriers = 8 used_subcarriers = 4 channel_map = np.array( (0, 0, 1, 1, 1, 1, 0, 0)) #ft.get_channel_map(used_subcarriers, total_subcarriers) payload_symbols = 8 overlap = 4 taps = ft.generate_phydyas_filter(total_subcarriers, overlap) preamble = ft.get_preamble(total_subcarriers) num_preamble_symbols = len(preamble) // total_subcarriers payload = ft.get_payload(payload_symbols, used_subcarriers) payload = np.tile(payload, num_frames).flatten() src = blocks.vector_source_b(payload, repeat=False) framer = fbmc.frame_generator_bvc(used_subcarriers, total_subcarriers, payload_symbols, overlap, channel_map, preamble) snk_frame = blocks.vector_sink_c(total_subcarriers) # a debug output mod = fbmc.tx_sdft_vcc(taps, total_subcarriers) demod = fbmc.rx_sdft_cvc(taps, total_subcarriers) skipper = blocks.skiphead(8 * total_subcarriers, 4) snk_rx = blocks.vector_sink_c(total_subcarriers) deframer = fbmc.deframer_vcb(used_subcarriers, total_subcarriers, num_preamble_symbols, payload_symbols, overlap, channel_map) snk = blocks.vector_sink_b(1) self.tb.connect(src, framer, mod, demod, skipper, deframer, snk) self.tb.connect(framer, snk_frame) self.tb.connect(skipper, snk_rx) self.tb.run() res = np.array(snk.data()) print "len(res) = ", len(res), ", len(payload) = ", len(payload) print "ref: ", payload print "res: ", res moddata = np.array(snk_frame.data()) print "len(moddata) = ", len(moddata) rxdata = np.array(snk_rx.data()) print "len(rxdata) = ", len( rxdata), " diff: ", len(moddata) - len(rxdata) # plt.plot(rxdata.real * 0.03) # for i in range(len(moddata)): # if (i + 1) % total_subcarriers == 0: # plt.axvline(i) # plt.plot(moddata.real) # plt.grid() # plt.show() print "len(payload) = ", len(payload) print "len(result ) = ", len(res) self.assertTupleEqual(tuple(payload[:len(res)]), tuple(res))
def test_004_config_frame_mod(self): num_frames = 10 cfg = fbmc.fbmc_config(num_used_subcarriers=20, num_payload_sym=16, num_overlap_sym=4, modulation="QPSK", preamble="IAM", samp_rate=250000) total_subcarriers = cfg.num_total_subcarriers() # 8 used_subcarriers = cfg.num_used_subcarriers() # 4 channel_map = cfg.channel_map() # ft.get_channel_map(used_subcarriers, total_subcarriers) payload_symbols = cfg.num_payload_sym() # 8 overlap = cfg.num_overlap_sym() # 4 taps = cfg.phydyas_impulse_taps(cfg.num_total_subcarriers(), cfg.num_overlap_sym()) # ft.generate_phydyas_filter(total_subcarriers, overlap) preamble = ft.get_preamble(total_subcarriers) num_preamble_symbols = len(preamble) // total_subcarriers payload = ft.get_payload(payload_symbols, used_subcarriers) payload = np.tile(payload, num_frames).flatten() src = blocks.vector_source_b(payload, repeat=False) framer = fbmc.frame_generator_bvc(used_subcarriers, total_subcarriers, payload_symbols, overlap, channel_map, preamble) snk_frame = blocks.vector_sink_c(total_subcarriers) # a debug output mod = fbmc.tx_sdft_vcc(taps, total_subcarriers) demod = fbmc.rx_sdft_cvc(taps, total_subcarriers) skipper = blocks.skiphead(8 * total_subcarriers, 4) snk_rx = blocks.vector_sink_c(total_subcarriers) deframer = fbmc.deframer_vcb(used_subcarriers, total_subcarriers, num_preamble_symbols, payload_symbols, overlap, channel_map) snk = blocks.vector_sink_b(1) self.tb.connect(src, framer, mod, demod, skipper, deframer, snk) self.tb.connect(framer, snk_frame) self.tb.connect(skipper, snk_rx) self.tb.run() res = np.array(snk.data()) print res print payload moddata = np.array(snk_frame.data()) print "len(moddata) = ", len(moddata) rxdata = np.array(snk_rx.data()) print "len(rxdata) = ", len(rxdata) # plt.plot(rxdata.real * 0.03) # for i in range(len(moddata)): # if (i + 1) % total_subcarriers == 0: # plt.axvline(i) # plt.plot(moddata.real) # plt.grid() # plt.show() print "len(payload) = ", len(payload) print "len(result) = ", len(res) self.assertTupleEqual(tuple(payload[:len(res)]), tuple(res))
def test_003_small_frame_mod(self): num_frames = 300 total_subcarriers = 8 used_subcarriers = 4 channel_map = np.array((0, 0, 1, 1, 1, 1, 0, 0)) #ft.get_channel_map(used_subcarriers, total_subcarriers) payload_symbols = 8 overlap = 4 taps = ft.generate_phydyas_filter(total_subcarriers, overlap) preamble = ft.get_preamble(total_subcarriers) num_preamble_symbols = len(preamble) // total_subcarriers payload = ft.get_payload(payload_symbols, used_subcarriers) payload = np.tile(payload, num_frames).flatten() src = blocks.vector_source_b(payload, repeat=False) framer = fbmc.frame_generator_bvc(used_subcarriers, total_subcarriers, payload_symbols, overlap, channel_map, preamble) snk_frame = blocks.vector_sink_c(total_subcarriers) # a debug output mod = fbmc.tx_sdft_vcc(taps, total_subcarriers) demod = fbmc.rx_sdft_cvc(taps, total_subcarriers) skipper = blocks.skiphead(8 * total_subcarriers, 4) snk_rx = blocks.vector_sink_c(total_subcarriers) deframer = fbmc.deframer_vcb(used_subcarriers, total_subcarriers, num_preamble_symbols, payload_symbols, overlap, channel_map) snk = blocks.vector_sink_b(1) self.tb.connect(src, framer, mod, demod, skipper, deframer, snk) self.tb.connect(framer, snk_frame) self.tb.connect(skipper, snk_rx) self.tb.run() res = np.array(snk.data()) print "len(res) = ", len(res), ", len(payload) = ", len(payload) print "ref: ", payload print "res: ", res moddata = np.array(snk_frame.data()) print "len(moddata) = ", len(moddata) rxdata = np.array(snk_rx.data()) print "len(rxdata) = ", len(rxdata), " diff: ", len(moddata) - len(rxdata) # plt.plot(rxdata.real * 0.03) # for i in range(len(moddata)): # if (i + 1) % total_subcarriers == 0: # plt.axvline(i) # plt.plot(moddata.real) # plt.grid() # plt.show() print "len(payload) = ", len(payload) print "len(result ) = ", len(res) self.assertTupleEqual(tuple(payload[:len(res)]), tuple(res))
def test_001_setUp(self): print "test_001_setUp" # test if flowgraph is set up as expected! # does not throw any runtime errors unexpectedly! overlap = 4 L = 4 taps = np.ones(overlap * L, dtype=float) taps = np.append(taps, [0.0, ]) phydyas = fbmc.rx_sdft_cvc(taps, L) print "overlap: ", phydyas.overlap() print "L: ", phydyas.L() assert phydyas.overlap() == overlap assert phydyas.L() == L
def test_001_setUp(self): print "test_001_setUp" # test if flowgraph is set up as expected! # does not throw any runtime errors unexpectedly! overlap = 4 L = 4 taps = np.ones(overlap * L, dtype=float) taps = np.append(taps, [ 0.0, ]) phydyas = fbmc.rx_sdft_cvc(taps, L) print "overlap: ", phydyas.overlap() print "L: ", phydyas.L() assert phydyas.overlap() == overlap assert phydyas.L() == L
def test_005_legacy(self): print "\ntest_005_legacy" # test if flowgraph is set up as expected! multiple = 9 overlap = 4 L = 32 taps = ft.generate_phydyas_filter(L, overlap) data = np.arange(1, multiple * L // 2 + 1 + 1, dtype=np.complex) # instatiated blocks and flowgraph phydyas = fbmc.rx_sdft_cvc(taps, L) pfb = fbmc.rx_polyphase_cvc(taps, L) print "phydyas: L = ", phydyas.L(), ", overlap = ", phydyas.overlap() src = blocks.vector_source_c(data, vlen=1) snk0 = blocks.vector_sink_c(L) snk1 = blocks.vector_sink_c(L) tb = gr.top_block() tb.connect(src, phydyas, snk0) tb.connect(src, pfb, snk1) # run fg and get results tb.run() res0 = np.array(snk0.data()) res1 = np.array(snk1.data()) ref = self.get_reference_output(data, taps, L, overlap, multiple) ftref = ft.rx(data[:-L // 2], taps, L) print "\nFBMC blocks" print ftref lcut = 2 rcut = 5 print "\nGR blocks" print res0[lcut * L:-rcut * L].reshape((-1, L)).T print "\nIOTA blocks" print res1[8 * L:].reshape((-1, L)).T ftref = ftref.T ftref = ftref.flatten() self.assertComplexTuplesAlmostEqual(ftref, res0[lcut * L:-rcut * L], 3) self.assertComplexTuplesAlmostEqual(ftref, res1[8 * L:], 3)
def test_005_legacy(self): print "\ntest_005_legacy" # test if flowgraph is set up as expected! multiple = 9 overlap = 4 L = 32 taps = ft.generate_phydyas_filter(L, overlap) data = np.arange(1, multiple * L // 2 + 1 + 1, dtype=np.complex) # instatiated blocks and flowgraph phydyas = fbmc.rx_sdft_cvc(taps, L) pfb = fbmc.rx_polyphase_cvc(taps, L) print "phydyas: L = ", phydyas.L(), ", overlap = ", phydyas.overlap() src = blocks.vector_source_c(data, vlen=1) snk0 = blocks.vector_sink_c(L) snk1 = blocks.vector_sink_c(L) tb = gr.top_block() tb.connect(src, phydyas, snk0) tb.connect(src, pfb, snk1) # run fg and get results tb.run() res0 = np.array(snk0.data()) res1 = np.array(snk1.data()) ref = self.get_reference_output(data, taps, L, overlap, multiple) ftref = ft.rx(data[: -L // 2], taps, L) print "\nFBMC blocks" print ftref lcut = 2 rcut = 5 print "\nGR blocks" print res0[lcut * L: -rcut * L].reshape((-1, L)).T print "\nIOTA blocks" print res1[8 * L:].reshape((-1, L)).T ftref = ftref.T ftref = ftref.flatten() self.assertComplexTuplesAlmostEqual(ftref, res0[lcut * L: -rcut * L], 3) self.assertComplexTuplesAlmostEqual(ftref, res1[8 * L:], 3)
def test_003_filter(self): print "\ntest003_filter" multiple = 9 overlap = 2 L = 4 taps = np.append([ 0.0, ], np.ones(overlap * L - 1, dtype=float)) taps = np.append(taps, [ 0.0, ]) data = np.arange(1, multiple * L // 2 + 1 + 1, dtype=np.complex) print "len(data) = ", len(data) print taps print data # instatiated blocks and flowgraph phydyas = fbmc.rx_sdft_cvc(taps, L) print "phydyas: L = ", phydyas.L(), ", overlap = ", phydyas.overlap( ), ", history() = ", phydyas.history() src = blocks.vector_source_c(data, vlen=1) snk = blocks.vector_sink_c(L) tb = gr.top_block() tb.connect(src, phydyas, snk) # run fg and get results tb.run() res = np.array(snk.data()) print "len(res) = ", len(res) ref = self.get_reference_output(data, taps, L, overlap, multiple) ftref = ft.rx(data[:-L // 2], taps, L) print "\nFBMC blocks" print ftref print "\nGR blocks" print res.reshape((-1, L)).T ftref = ftref.T ftref = ftref.flatten() self.assertComplexTuplesAlmostEqual(ftref, res[2 * L:-L])
def test_002_modulation(self): total_subcarriers = 8 overlap = 4 taps = ft.generate_phydyas_filter(total_subcarriers, overlap) zvals = np.zeros(overlap * total_subcarriers, dtype=complex) rvals = np.arange(1, total_subcarriers + 1, dtype=complex) dummy_frame = np.concatenate((zvals, rvals)) data = np.tile(dummy_frame, 4).flatten() src = blocks.vector_source_c(data, repeat=False, vlen=total_subcarriers) mod = fbmc.tx_sdft_vcc(taps, total_subcarriers) demod = fbmc.rx_sdft_cvc(taps, total_subcarriers) snk = blocks.vector_sink_c(total_subcarriers) self.tb.connect(src, mod, demod, snk) self.tb.run() res = np.array(snk.data())
def test_004_phydyas_taps(self): print "\ntest_004_phydyas_taps" # test if flowgraph is set up as expected! multiple = 9 overlap = 4 L = 32 taps = ft.generate_phydyas_filter(L, overlap) # taps = np.append([0.0, ], np.ones(overlap * L - 1, dtype=float)) # taps = np.append(taps, [0.0, ]) data = np.arange(1, multiple * L // 2 + 1 + 1, dtype=np.complex) # instatiated blocks and flowgraph phydyas = fbmc.rx_sdft_cvc(taps, L) print "phydyas: L = ", phydyas.L(), ", overlap = ", phydyas.overlap() src = blocks.vector_source_c(data, vlen=1) snk = blocks.vector_sink_c(L) tb = gr.top_block() tb.connect(src, phydyas, snk) # run fg and get results tb.run() res = np.array(snk.data()) ref = self.get_reference_output(data, taps, L, overlap, multiple) ftref = ft.rx(data[:-L // 2], taps, L) print "\nFBMC blocks" print np.shape(ftref) print ftref lcut = 2 rcut = 5 print "\nGR blocks" print np.shape(res) print res[lcut * L:-rcut * L].reshape((-1, L)).T # print res.reshape((-1, L)).T ftref = ftref.T ftref = ftref.flatten() self.assertComplexTuplesAlmostEqual(ftref, res[lcut * L:-rcut * L], 3)
def test_004_phydyas_taps(self): print "\ntest_004_phydyas_taps" # test if flowgraph is set up as expected! multiple = 9 overlap = 4 L = 32 taps = ft.generate_phydyas_filter(L, overlap) # taps = np.append([0.0, ], np.ones(overlap * L - 1, dtype=float)) # taps = np.append(taps, [0.0, ]) data = np.arange(1, multiple * L // 2 + 1 + 1, dtype=np.complex) # instatiated blocks and flowgraph phydyas = fbmc.rx_sdft_cvc(taps, L) print "phydyas: L = ", phydyas.L(), ", overlap = ", phydyas.overlap() src = blocks.vector_source_c(data, vlen=1) snk = blocks.vector_sink_c(L) tb = gr.top_block() tb.connect(src, phydyas, snk) # run fg and get results tb.run() res = np.array(snk.data()) ref = self.get_reference_output(data, taps, L, overlap, multiple) ftref = ft.rx(data[: -L // 2], taps, L) print "\nFBMC blocks" print np.shape(ftref) print ftref lcut = 2 rcut = 5 print "\nGR blocks" print np.shape(res) print res[lcut * L: -rcut * L].reshape((-1, L)).T # print res.reshape((-1, L)).T ftref = ftref.T ftref = ftref.flatten() self.assertComplexTuplesAlmostEqual(ftref, res[lcut * L: -rcut * L], 3)
def test_002_modulation(self): total_subcarriers = 8 overlap = 4 taps = ft.generate_phydyas_filter(total_subcarriers, overlap) zvals = np.zeros(overlap * total_subcarriers, dtype=complex) rvals = np.arange(1, total_subcarriers + 1, dtype=complex) dummy_frame = np.concatenate((zvals, rvals)) data = np.tile(dummy_frame, 4).flatten() src = blocks.vector_source_c(data, repeat=False, vlen=total_subcarriers) mod = fbmc.tx_sdft_vcc(taps, total_subcarriers) demod = fbmc.rx_sdft_cvc(taps, total_subcarriers) snk = blocks.vector_sink_c(total_subcarriers) self.tb.connect(src, mod, demod, snk) self.tb.run() res = np.array(snk.data())
def test_002_buffers(self): print "\ntest002_buffers" # test if fg runs as expected on a minimum example! multiple = 5 overlap = 1 # must be 1 in this test! L = 4 taps = np.array([0, 1, 2, 1]) # np.ones(overlap * L, dtype=float) taps = np.append(taps, [ 0.0, ]) data = np.arange(1, multiple * L // 2 + 1 + 1, dtype=np.complex) # set Up flowgraph phydyas = fbmc.rx_sdft_cvc(taps, L) print "phydyas: L = ", phydyas.L(), ", overlap = ", phydyas.overlap() src = blocks.vector_source_c(data, vlen=1) snk = blocks.vector_sink_c(L) tb = gr.top_block() tb.connect(src, phydyas, snk) # run fg and get results tb.run() res = np.array(snk.data()) # check results ref = self.get_reference_output(data, taps, L, overlap, multiple) print "\nJohannes test" print ref.reshape((-1, L)).T ftref = ft.rx(data[:-L // 2], taps, L) print "\nFBMC blocks" print ftref print "\nGR blocks" print res.reshape((-1, L)).T ftref = ftref.T self.assertComplexTuplesAlmostEqual(ftref.flatten(), res.flatten()[2 * L:])
def test_003_filter(self): print "\ntest003_filter" multiple = 9 overlap = 2 L = 4 taps = np.append([0.0, ], np.ones(overlap * L - 1, dtype=float)) taps = np.append(taps, [0.0, ]) data = np.arange(1, multiple * L // 2 + 1 + 1, dtype=np.complex) print "len(data) = ", len(data) print taps print data # instatiated blocks and flowgraph phydyas = fbmc.rx_sdft_cvc(taps, L) print "phydyas: L = ", phydyas.L(), ", overlap = ", phydyas.overlap(), ", history() = ", phydyas.history() src = blocks.vector_source_c(data, vlen=1) snk = blocks.vector_sink_c(L) tb = gr.top_block() tb.connect(src, phydyas, snk) # run fg and get results tb.run() res = np.array(snk.data()) print "len(res) = ", len(res) ref = self.get_reference_output(data, taps, L, overlap, multiple) ftref = ft.rx(data[: -L // 2], taps, L) print "\nFBMC blocks" print ftref print "\nGR blocks" print res.reshape((-1, L)).T ftref = ftref.T ftref = ftref.flatten() self.assertComplexTuplesAlmostEqual(ftref, res[2 * L: -L])
def test_002_buffers(self): print "\ntest002_buffers" # test if fg runs as expected on a minimum example! multiple = 5 overlap = 1 # must be 1 in this test! L = 4 taps = np.array([0, 1, 2, 1]) # np.ones(overlap * L, dtype=float) taps = np.append(taps, [0.0, ]) data = np.arange(1, multiple * L // 2 + 1 + 1, dtype=np.complex) # set Up flowgraph phydyas = fbmc.rx_sdft_cvc(taps, L) print "phydyas: L = ", phydyas.L(), ", overlap = ", phydyas.overlap() src = blocks.vector_source_c(data, vlen=1) snk = blocks.vector_sink_c(L) tb = gr.top_block() tb.connect(src, phydyas, snk) # run fg and get results tb.run() res = np.array(snk.data()) # check results ref = self.get_reference_output(data, taps, L, overlap, multiple) print "\nJohannes test" print ref.reshape((-1, L)).T ftref = ft.rx(data[: -L // 2], taps, L) print "\nFBMC blocks" print ftref print "\nGR blocks" print res.reshape((-1, L)).T ftref = ftref.T self.assertComplexTuplesAlmostEqual(ftref.flatten(), res.flatten()[2*L:])
def test_004_config_frame_mod(self): num_frames = 10 cfg = fbmc.fbmc_config(num_used_subcarriers=20, num_payload_sym=16, num_overlap_sym=4, modulation="QPSK", preamble="IAM", samp_rate=250000) total_subcarriers = cfg.num_total_subcarriers() # 8 used_subcarriers = cfg.num_used_subcarriers() # 4 channel_map = cfg.channel_map( ) # ft.get_channel_map(used_subcarriers, total_subcarriers) payload_symbols = cfg.num_payload_sym() # 8 overlap = cfg.num_overlap_sym() # 4 taps = cfg.phydyas_impulse_taps( cfg.num_total_subcarriers(), cfg.num_overlap_sym( )) # ft.generate_phydyas_filter(total_subcarriers, overlap) preamble = ft.get_preamble(total_subcarriers) num_preamble_symbols = len(preamble) // total_subcarriers payload = ft.get_payload(payload_symbols, used_subcarriers) payload = np.tile(payload, num_frames).flatten() src = blocks.vector_source_b(payload, repeat=False) framer = fbmc.frame_generator_bvc(used_subcarriers, total_subcarriers, payload_symbols, overlap, channel_map, preamble) snk_frame = blocks.vector_sink_c(total_subcarriers) # a debug output mod = fbmc.tx_sdft_vcc(taps, total_subcarriers) demod = fbmc.rx_sdft_cvc(taps, total_subcarriers) skipper = blocks.skiphead(8 * total_subcarriers, 4) snk_rx = blocks.vector_sink_c(total_subcarriers) deframer = fbmc.deframer_vcb(used_subcarriers, total_subcarriers, num_preamble_symbols, payload_symbols, overlap, channel_map) snk = blocks.vector_sink_b(1) self.tb.connect(src, framer, mod, demod, skipper, deframer, snk) self.tb.connect(framer, snk_frame) self.tb.connect(skipper, snk_rx) self.tb.run() res = np.array(snk.data()) print res print payload moddata = np.array(snk_frame.data()) print "len(moddata) = ", len(moddata) rxdata = np.array(snk_rx.data()) print "len(rxdata) = ", len(rxdata) # plt.plot(rxdata.real * 0.03) # for i in range(len(moddata)): # if (i + 1) % total_subcarriers == 0: # plt.axvline(i) # plt.plot(moddata.real) # plt.grid() # plt.show() print "len(payload) = ", len(payload) print "len(result) = ", len(res) self.assertTupleEqual(tuple(payload[:len(res)]), tuple(res))