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 (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_')
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, 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
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))
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))
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)
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"))