Esempio n. 1
0
    def __init__(self, vlen, channel_block, delay):
        gr.hier_block2.__init__(self, 'apply_channel_to_vect',
                gr.io_signature(1, 1, gr.sizeof_gr_complex * vlen),
                gr.io_signature(1, 1, gr.sizeof_gr_complex * vlen))

        self.vlen=vlen
        self.channel_block = channel_block
        self.delay = delay

        pad_len = self.vlen + self.delay*2

        if(delay>0):
            self.padding = gr.vector_source_c((0,)*(delay*2),True,delay*2)
            self.pad_cat = mlse.vector_concat_vv(vlen*gr.sizeof_gr_complex,gr.sizeof_gr_complex*2*delay)
            self.connect(self, self.pad_cat)
            self.connect(self.padding, (self.pad_cat,1))
        else:
            self.pad_cat = self 

        self.tostream = gr.vector_to_stream(gr.sizeof_gr_complex, pad_len)
        self.connect(self.pad_cat, self.tostream)

        # connect channel
        self.connect(self.tostream, self.channel_block)

        self.tovector = gr.stream_to_vector(gr.sizeof_gr_complex, pad_len)
        self.connect(self.channel_block, self.tovector)

        # cut out the proper part 
        self.trim = mlse.vector_slice_vv(
                gr.sizeof_gr_complex, 
                pad_len, 
                delay,
                vlen)
        self.connect(self.tovector, self.trim, self)
Esempio n. 2
0
    def __init__(self, vlen, channel_block, delay):
        gr.hier_block2.__init__(
            self, 'apply_channel_to_vect',
            gr.io_signature(1, 1, gr.sizeof_gr_complex * vlen),
            gr.io_signature(1, 1, gr.sizeof_gr_complex * vlen))

        self.vlen = vlen
        self.channel_block = channel_block
        self.delay = delay

        pad_len = self.vlen + self.delay * 2

        if (delay > 0):
            self.padding = gr.vector_source_c((0, ) * (delay * 2), True,
                                              delay * 2)
            self.pad_cat = mlse.vector_concat_vv(
                vlen * gr.sizeof_gr_complex, gr.sizeof_gr_complex * 2 * delay)
            self.connect(self, self.pad_cat)
            self.connect(self.padding, (self.pad_cat, 1))
        else:
            self.pad_cat = self

        self.tostream = gr.vector_to_stream(gr.sizeof_gr_complex, pad_len)
        self.connect(self.pad_cat, self.tostream)

        # connect channel
        self.connect(self.tostream, self.channel_block)

        self.tovector = gr.stream_to_vector(gr.sizeof_gr_complex, pad_len)
        self.connect(self.channel_block, self.tovector)

        # cut out the proper part
        self.trim = mlse.vector_slice_vv(gr.sizeof_gr_complex, pad_len, delay,
                                         vlen)
        self.connect(self.tovector, self.trim, self)
Esempio n. 3
0
	def test_001_vector_concat_vv (self):
		src1=gr.vector_source_f((1,2,3,4,5));
		src2=gr.vector_source_f((11,12,13));
		expected_result = (1,2,3,4,5,11,12,13)
		dst=gr.vector_sink_f()
		reor1=gr.stream_to_vector(gr.sizeof_float, 5)
		reor2=gr.stream_to_vector(gr.sizeof_float, 3)
		reor3=gr.vector_to_stream(gr.sizeof_float, 8)
		cat=mlse_swig.vector_concat_vv(gr.sizeof_float*5, gr.sizeof_float*3)
		self.tb.connect(src1,reor1,(cat,0))
		self.tb.connect(src2,reor2,(cat,1))
		self.tb.connect(cat,reor3,dst)
		self.tb.run()
		self.tb.run ()
		result_data = dst.data ()
		self.assertFloatTuplesAlmostEqual (expected_result, result_data, 6)
Esempio n. 4
0
 def test_001_vector_concat_vv(self):
     src1 = gr.vector_source_f((1, 2, 3, 4, 5))
     src2 = gr.vector_source_f((11, 12, 13))
     expected_result = (1, 2, 3, 4, 5, 11, 12, 13)
     dst = gr.vector_sink_f()
     reor1 = gr.stream_to_vector(gr.sizeof_float, 5)
     reor2 = gr.stream_to_vector(gr.sizeof_float, 3)
     reor3 = gr.vector_to_stream(gr.sizeof_float, 8)
     cat = mlse_swig.vector_concat_vv(gr.sizeof_float * 5,
                                      gr.sizeof_float * 3)
     self.tb.connect(src1, reor1, (cat, 0))
     self.tb.connect(src2, reor2, (cat, 1))
     self.tb.connect(cat, reor3, dst)
     self.tb.run()
     self.tb.run()
     result_data = dst.data()
     self.assertFloatTuplesAlmostEqual(expected_result, result_data, 6)
Esempio n. 5
0
    def __init__(self):
        gr.hier_block2.__init__(self, 'gsm_decode_harddecision',
                gr.io_signature(1, 1, gr.sizeof_gr_complex * 148 ),
                gr.io_signature(1,1,58*2))

        conf = mlse.make_packet_config_gsm()
        slice1 = conf.make_slicer(conf.PAYLOAD_FRONT)
        slice2 = conf.make_slicer(conf.PAYLOAD_REAR)
        cat = mlse.vector_concat_vv(58*gr.sizeof_gr_complex, 58*gr.sizeof_gr_complex)
        tostream = gr.vector_to_stream(gr.sizeof_gr_complex, 58*2)
        real = gr.complex_to_real()
        sign = gr.binary_slicer_fb()
        demap = gr.map_bb([1,0]) # invert 0 and 1 because in gsm 0 is mapped to +1 and 1 to -1
        tovect = gr.stream_to_vector(1, 58*2)

        self.connect(self, slice1)
        self.connect(self, slice2)
        self.connect(slice1, (cat,0))
        self.connect(slice2, (cat,1))
        self.connect(cat, tostream, real, sign, demap, tovect, self)
    def __init__(self, samples_per_symbol=1):
        gr.hier_block2.__init__(self, 'gsm_modulate_burst',
                                gr.io_signature2(2, 2, 58 * 2, 1),
                                gr.io_signature(1, 1, gr.sizeof_gr_complex))

        # take care of the packetizer
        conf = mlse.make_packet_config_gsm()
        self.packetbuilder = mlse.packetbuilder_midamble_vbb(conf)
        self.connect(self, self.packetbuilder)
        self.connect((self, 1), (self.packetbuilder, 1))  # tsc_index

        # append 8 1-bits to the packet for the idle-time between bursts.
        # This is necessary among others to flush the gmsk-modulator which is causal.
        # (We use 1-bits because that's what the gsm-standard says)
        # (we also only use 8 bits, because the specified value of 8.25 only works
        # properly with samplerates that are a multiple of 4.)
        self.guardbits = gr.vector_source_b((1, ) * 8, True, 8)
        self.guard_cat = mlse.vector_concat_vv(148, 8)
        self.connect(self.packetbuilder, self.guard_cat)
        self.connect(self.guardbits, (self.guard_cat, 1))

        # we now have a vector of bits, transform that into a stream
        self.tostream = gr.vector_to_stream(1, 148 + 8)
        # do the precoding:
        self.diffcode = gr.diff_decoder_bb(2)
        self.nrz = gr.map_bb([1, -1])
        self.connect(self.guard_cat, self.tostream, self.diffcode, self.nrz)

        # modulate
        self.mod = digital.gmskmod_bc(samples_per_symbol, 0.3, 8)

        # skip the first gmsk_length*samplerate/2 samples to make this block
        # acausal.
        #        self.skiphead = gr.skiphead(gr.sizeof_gr_complex, int(samples_per_symbol*4.5));
        #        self.connect(self.nrz, self.mod, self.skiphead, self)
        self.connect(self.nrz, self.mod,
                     self)  # workaround: we need a negative delay later,
Esempio n. 7
0
    def __init__(self):
        gr.hier_block2.__init__(
            self, 'gsm_decode_harddecision',
            gr.io_signature(1, 1, gr.sizeof_gr_complex * 148),
            gr.io_signature(1, 1, 58 * 2))

        conf = mlse.make_packet_config_gsm()
        slice1 = conf.make_slicer(conf.PAYLOAD_FRONT)
        slice2 = conf.make_slicer(conf.PAYLOAD_REAR)
        cat = mlse.vector_concat_vv(58 * gr.sizeof_gr_complex,
                                    58 * gr.sizeof_gr_complex)
        tostream = gr.vector_to_stream(gr.sizeof_gr_complex, 58 * 2)
        real = gr.complex_to_real()
        sign = gr.binary_slicer_fb()
        demap = gr.map_bb(
            [1,
             0])  # invert 0 and 1 because in gsm 0 is mapped to +1 and 1 to -1
        tovect = gr.stream_to_vector(1, 58 * 2)

        self.connect(self, slice1)
        self.connect(self, slice2)
        self.connect(slice1, (cat, 0))
        self.connect(slice2, (cat, 1))
        self.connect(cat, tostream, real, sign, demap, tovect, self)
    def __init__(self, samples_per_symbol = 1):
        gr.hier_block2.__init__(self, 'gsm_modulate_burst',
                gr.io_signature2(2,2,58*2,1),
                gr.io_signature(1, 1, gr.sizeof_gr_complex))
        
        # take care of the packetizer
        conf = mlse.make_packet_config_gsm()
        self.packetbuilder = mlse.packetbuilder_midamble_vbb(conf)
        self.connect(self, self.packetbuilder)
        self.connect((self,1), (self.packetbuilder,1)) # tsc_index

        # append 8 1-bits to the packet for the idle-time between bursts.
        # This is necessary among others to flush the gmsk-modulator which is causal.
        # (We use 1-bits because that's what the gsm-standard says)
        # (we also only use 8 bits, because the specified value of 8.25 only works 
        # properly with samplerates that are a multiple of 4.)
        self.guardbits = gr.vector_source_b((1,)*8,True,8)
        self.guard_cat = mlse.vector_concat_vv(148,8)
        self.connect(self.packetbuilder, self.guard_cat)
        self.connect(self.guardbits, (self.guard_cat,1))

        # we now have a vector of bits, transform that into a stream
        self.tostream = gr.vector_to_stream(1, 148+8)
        # do the precoding:
        self.diffcode = gr.diff_decoder_bb(2);
        self.nrz = gr.map_bb([1,-1])
        self.connect(self.guard_cat, self.tostream, self.diffcode, self.nrz)

        # modulate
        self.mod = digital.gmskmod_bc(samples_per_symbol, 0.3, 8)

        # skip the first gmsk_length*samplerate/2 samples to make this block
        # acausal.
#        self.skiphead = gr.skiphead(gr.sizeof_gr_complex, int(samples_per_symbol*4.5));
#        self.connect(self.nrz, self.mod, self.skiphead, self)
        self.connect(self.nrz, self.mod, self)  # workaround: we need a negative delay later,