def test_xor_bb_2i (self):
     src1_data =       (1,  2,  3,  4,   0x50)
     src2_data =       (8,  2,  1 , 8,   0x05)
     expected_result = (9,  0,  2,  0xC, 0x55)
     op = gr.xor_bb (2)
     self.help_bb ((src1_data, src2_data),
                   expected_result, op, port_prefix='byte_in_')
Пример #2
0
 def test_xor_bb (self):
     src1_data =       (1,  2,  3,  4,   0x50)
     src2_data =       (8,  2,  1 , 8,   0x05)
     expected_result = (9,  0,  2,  0xC, 0x55)
     op = gr.xor_bb ()
     self.help_bb ((src1_data, src2_data),
                   expected_result, op)
 def test_xor_bb_3i (self):
     src1_data =       (1,  2,  3,  4,    0x50)
     src2_data =       (8,  2,  1 , 8,    0x05)
     src3_data =       (2,  2,  15 , 0,   0x00)
     expected_result = (11, 2,  13,  0xC, 0x55)
     op = gr.xor_bb (3)
     self.help_bb ((src1_data, src2_data, src3_data),
                   expected_result, op, port_prefix='byte_in_')
 def test_xor_bb_2i(self):
     src1_data = (1, 2, 3, 4, 0x50)
     src2_data = (8, 2, 1, 8, 0x05)
     expected_result = (9, 0, 2, 0xC, 0x55)
     op = gr.xor_bb(2)
     self.help_bb((src1_data, src2_data),
                  expected_result,
                  op,
                  port_prefix='byte_in_')
 def test_xor_bb_3i(self):
     src1_data = (1, 2, 3, 4, 0x50)
     src2_data = (8, 2, 1, 8, 0x05)
     src3_data = (2, 2, 15, 0, 0x00)
     expected_result = (11, 2, 13, 0xC, 0x55)
     op = gr.xor_bb(3)
     self.help_bb((src1_data, src2_data, src3_data),
                  expected_result,
                  op,
                  port_prefix='byte_in_')
Пример #6
0
    def __init__(self, bits_per_byte):
        gr.hier_block2.__init__(self, "BitErrors",
                                gr.io_signature(2, 2, gr.sizeof_char),
                                gr.io_signature(1, 1, gr.sizeof_int))

        # Bit comparison
        comp = gr.xor_bb()
        intdump_decim = 100000
        if N_BITS < intdump_decim:
            intdump_decim = int(N_BITS)
        self.connect(self, comp, gr.unpack_k_bits_bb(bits_per_byte),
                     gr.uchar_to_float(), gr.integrate_ff(intdump_decim),
                     gr.multiply_const_ff(1.0 / N_BITS), self)
        self.connect((self, 1), (comp, 1))
Пример #7
0
    def __init__(self, bits_per_byte):
        gr.hier_block2.__init__(self, "BitErrors",
                gr.io_signature(2, 2, gr.sizeof_char),
                gr.io_signature(1, 1, gr.sizeof_int))

        # Bit comparison
        comp = gr.xor_bb()
        intdump_decim = 100000
        if N_BITS < intdump_decim:
            intdump_decim = int(N_BITS)
        self.connect(self,
                     comp,
                     gr.unpack_k_bits_bb(bits_per_byte),
                     gr.uchar_to_float(),
                     gr.integrate_ff(intdump_decim),
                     gr.multiply_const_ff(1.0/N_BITS),
                     self)
        self.connect((self, 1), (comp, 1))
  def __init__( self, vlen, frame_length, no_frames,
                no_preambles, bits_per_subc, bitdata_per_frame ):
    gr.hier_block2.__init__( self,
          "ofdm_ber_estimator",
          gr.io_signature( 1, 1, gr.sizeof_gr_complex * vlen ),
          gr.io_signature(0,0,0) )

    bpsubc = [0] * ( vlen * no_preambles )
    assert( len( bits_per_subc ) == vlen )
    bpsubc.extend( bits_per_subc )


    bits_per_frame = sum( bpsubc ) * ( frame_length - no_preambles )

    bm_update_trigger = [0] * frame_length
    for i in range( no_preambles + 1 ):
      bm_update_trigger[i] = 1

    bm_update_trigger = gr.vector_source_b( bm_update_trigger, True )

    demapper = ofdm.generic_demapper_vcb( vlen )
    bitmap_src = gr.vector_source_b( bpsubc, True, vlen )

    data_ref_src = gr.vector_source_b( bitdata_per_frame, True )

    compare = gr.xor_bb()
    bitstream_c2f = gr.char_to_float()
    acc_biterr = ofdm.accumulator_ff()

    window_length = bits_per_frame * no_frames
    self.N = window_length
    dst = limit_stream_get_last_item( acc_biterr, window_length )


    self.connect( self, demapper, compare, bitstream_c2f, acc_biterr, dst )
    self.connect( bitmap_src, ( demapper, 1 ) )
    self.connect( bm_update_trigger, ( demapper, 2 ) )
    self.connect( data_ref_src, ( compare, 1 ) )

    self.vector_sources = [ bm_update_trigger, bitmap_src ]
    self.acc = acc_biterr
    self.data_ref_src = data_ref_src
    self.compare = compare
    self.dst = dst
Пример #9
0
    def __init__(self):
        gr.top_block.__init__(self)
        #sig_src = gr.sig_source_i(512,gr.GR_SIN_WAVE,0.1,1000,3600)
        sig_src = gr.sig_source_i(200, gr.GR_CONST_WAVE, 0, 0, 3600)
        #sig_src = gr.noise_source_i(gr.GR_UNIFORM, 1000)
        src_file = "test.bmp"
        src = ofdm.imgtransfer_src(src_file)
        err_src = ofdm.bernoulli_bit_src(0.01)
        test_channel = ofdm.imgtransfer_testkanal()

        sequenz = [0] * 256
        for i in range(256):
            sample = random()
            if sample < 0.1:
                sequenz[i] = randint(-100, 100) * 3

        print sequenz

        vector_src = gr.vector_source_i(sequenz, True)
        add_block = gr.add_ii()

        self.connect(vector_src, (add_block, 0))
        self.connect(sig_src, (add_block, 1))

        xor = gr.xor_bb()

        UDP_PACKET_SIZE = 4096

        imgsink = ofdm.imgtransfer_sink(UDP_PACKET_SIZE, "127.0.0.1", 0,
                                        "127.0.0.1", 45454, src_file)

        self.connect(sig_src, (src, 0))
        self.connect(sig_src, (test_channel, 0))
        self.connect(add_block, (imgsink, 0))

        self.connect(src, (test_channel, 1))
        self.connect(vector_src, (test_channel, 2))

        self.connect(test_channel, (xor, 0))
        self.connect(err_src, (xor, 1))

        self.connect(xor, (imgsink, 1))
Пример #10
0
    def __init__(self):
        gr.top_block.__init__(self)
        #sig_src = gr.sig_source_i(512,gr.GR_SIN_WAVE,0.1,1000,3600)
        sig_src = gr.sig_source_i(200,gr.GR_CONST_WAVE,0,0,3600)
        #sig_src = gr.noise_source_i(gr.GR_UNIFORM, 1000)
        src_file = "test.bmp"
        src = ofdm.imgtransfer_src( src_file )
        err_src = ofdm.bernoulli_bit_src( 0.01 )
        test_channel = ofdm.imgtransfer_testkanal()

        sequenz = [0]*256
        for i in range(256):
          sample = random()
          if sample<0.1:
            sequenz[i]=randint(-100,100)*3

        print sequenz

        vector_src = gr.vector_source_i(sequenz,True)
        add_block = gr.add_ii()

        self.connect(vector_src,(add_block,0))
        self.connect(sig_src,(add_block,1))

        xor = gr.xor_bb()

        UDP_PACKET_SIZE = 4096

        imgsink = ofdm.imgtransfer_sink( UDP_PACKET_SIZE, "127.0.0.1", 0, "127.0.0.1", 45454, src_file )

        self.connect(sig_src,(src,0))
        self.connect(sig_src,(test_channel,0))
        self.connect(add_block,(imgsink,0))

        self.connect(src,(test_channel,1))
        self.connect(vector_src,(test_channel,2))

        self.connect(test_channel,(xor,0))
        self.connect(err_src,(xor,1))

        self.connect(xor,(imgsink,1))
Пример #11
0
  def __init__(self, framebytes, numframes, mode=0):
    gr.hier_block2.__init__(self, "BER",
      gr.io_signature2(2,2, framebytes, framebytes),
      gr.io_signature(1,1, gr.sizeof_float))

    xor = gr.xor_bb()
    self.connect((self,0), gr.vector_to_stream(gr.sizeof_char, framebytes), (xor,0))
    self.connect((self,1), gr.vector_to_stream(gr.sizeof_char, framebytes), (xor,1))

    if mode == 0:
      # one ber per packet
      ber = raw.ber_avg(1, framebytes)
      self.connect(xor,
                   ber)
    elif mode == 1:
      # one ber per byte in packet
      ber = raw.ber_avg(framebytes, numframes)
      self.connect(xor,
                   gr.stream_to_vector(gr.sizeof_char, framebytes),
                   ber)

    self.connect(ber, self)
Пример #12
0
	def __init__(self, dab_params, verbose=True, debug=False):
		"""
		Hierarchical block for FIC decoding
		
		@param dab_params DAB parameter object (dab.parameters.dab_parameters)
		"""
		gr.hier_block2.__init__(self,"fic",
					gr.io_signature2(2, 2, gr.sizeof_float*dab_params.num_carriers*2, gr.sizeof_char), # input
					gr.io_signature(0, 0, 0)) # output signature

		self.dp = dab_params
		self.verbose = verbose
		self.debug = debug
		
		
		# FIB selection and block partitioning
		self.select_fic_syms = dab_swig.select_vectors(gr.sizeof_float, self.dp.num_carriers*2, self.dp.num_fic_syms, 0)
		self.repartition_fic = dab_swig.repartition_vectors(gr.sizeof_float, self.dp.num_carriers*2, self.dp.fic_punctured_codeword_length, self.dp.num_fic_syms, self.dp.num_cifs)

		# unpuncturing
		self.unpuncture = dab_swig.unpuncture_vff(self.dp.assembled_fic_puncturing_sequence)

		# convolutional coding
		# self.fsm = trellis.fsm(self.dp.conv_code_in_bits, self.dp.conv_code_out_bits, self.dp.conv_code_generator_polynomials)
		self.fsm = trellis.fsm(1, 4, [0133, 0171, 0145, 0133]) # OK (dumped to text and verified partially)
		self.conv_v2s = gr.vector_to_stream(gr.sizeof_float, self.dp.fic_conv_codeword_length)
		# self.conv_decode = trellis.viterbi_combined_fb(self.fsm, 20, 0, 0, 1, [1./sqrt(2),-1/sqrt(2)] , trellis.TRELLIS_EUCLIDEAN)
		table = [ 
			  0,0,0,0,
			  0,0,0,1,
			  0,0,1,0,
			  0,0,1,1,
			  0,1,0,0,
			  0,1,0,1,
			  0,1,1,0,
			  0,1,1,1,
			  1,0,0,0,
			  1,0,0,1,
			  1,0,1,0,
			  1,0,1,1,
			  1,1,0,0,
			  1,1,0,1,
			  1,1,1,0,
			  1,1,1,1
			]
		assert(len(table)/4==self.fsm.O())
		table = [(1-2*x)/sqrt(2) for x in table]
		self.conv_decode = trellis.viterbi_combined_fb(self.fsm, 774, 0, 0, 4, table, trellis.TRELLIS_EUCLIDEAN)
		self.conv_s2v = gr.stream_to_vector(gr.sizeof_char, 774)
		self.conv_prune = dab_swig.prune_vectors(gr.sizeof_char, self.dp.fic_conv_codeword_length/4, 0, self.dp.conv_code_add_bits_input)

		# energy dispersal
		self.prbs_src   = gr.vector_source_b(self.dp.prbs(self.dp.energy_dispersal_fic_vector_length), True)
		self.energy_v2s = gr.vector_to_stream(gr.sizeof_char, self.dp.energy_dispersal_fic_vector_length)
		self.add_mod_2  = gr.xor_bb()
		self.energy_s2v = gr.stream_to_vector(gr.sizeof_char, self.dp.energy_dispersal_fic_vector_length)
		self.cut_into_fibs = dab_swig.repartition_vectors(gr.sizeof_char, self.dp.energy_dispersal_fic_vector_length, self.dp.fib_bits, 1, self.dp.energy_dispersal_fic_fibs_per_vector)
		
		# connect all
		self.nullsink = gr.null_sink(gr.sizeof_char)
		# self.filesink = gr.file_sink(gr.sizeof_char, "debug/fic.dat")
		self.fibsink = dab_swig.fib_sink_vb()
		
		# self.connect((self,0), (self.select_fic_syms,0), (self.repartition_fic,0), self.unpuncture, self.conv_v2s, self.conv_decode, self.conv_s2v, self.conv_prune, self.energy_v2s, self.add_mod_2, self.energy_s2v, (self.cut_into_fibs,0), gr.vector_to_stream(1,256), gr.unpacked_to_packed_bb(1,gr.GR_MSB_FIRST), self.filesink)
		self.connect((self,0), (self.select_fic_syms,0), (self.repartition_fic,0), self.unpuncture, self.conv_v2s, self.conv_decode, self.conv_s2v, self.conv_prune, self.energy_v2s, self.add_mod_2, self.energy_s2v, (self.cut_into_fibs,0), gr.vector_to_stream(1,256), gr.unpacked_to_packed_bb(1,gr.GR_MSB_FIRST), gr.stream_to_vector(1,32), self.fibsink)
		self.connect(self.prbs_src, (self.add_mod_2,1))
		self.connect((self,1), (self.select_fic_syms,1), (self.repartition_fic,1), (self.cut_into_fibs,1), self.nullsink)

		if self.debug:
			self.connect(self.select_fic_syms, gr.file_sink(gr.sizeof_float*self.dp.num_carriers*2, "debug/fic_select_syms.dat"))
			self.connect(self.repartition_fic, gr.file_sink(gr.sizeof_float*self.dp.fic_punctured_codeword_length, "debug/fic_repartitioned.dat"))
			self.connect(self.unpuncture, gr.file_sink(gr.sizeof_float*self.dp.fic_conv_codeword_length, "debug/fic_unpunctured.dat"))
			self.connect(self.conv_decode, gr.file_sink(gr.sizeof_char, "debug/fic_decoded.dat"))
			self.connect(self.energy_s2v, gr.file_sink(gr.sizeof_char*self.dp.energy_dispersal_fic_vector_length, "debug/fic_energy_dispersal_undone.dat"))