Esempio n. 1
0
 def __init__(self, item_size, num_outputs, default_output):
     """
     Selector constructor.
     Args:
         item_size: the size of the gr data stream in bytes
         num_inputs: the number of inputs (integer)
         num_outputs: the number of outputs (integer)
         input_index: the index for the source data
         output_index: the index for the destination data
     """
     gr.hier_block2.__init__(
         self, 'selector',
         gr.io_signature(1, 1, item_size),
         gr.io_signature(num_outputs, num_outputs, item_size),
     )
     num_inputs = 1
     # Terminator blocks for unused inputs and outputs
     self.input_terminators = [blocks.null_sink(item_size) for i in range(num_inputs)]
     self.output_terminators = [blocks.head(item_size, 0) for i in range(num_outputs)]
     self.copy = blocks.copy(item_size)
     # Connections
     for i in range(num_inputs): self.connect((self, i), self.input_terminators[i])
     for i in range(num_outputs): self.connect(blocks.null_source(item_size), self.output_terminators[i], (self, i))
     # Set parameters
     self.num_outputs = num_outputs
     self.input_index = 0
     self.output_index = default_output
     # Register the message port
     self.message_port_register_hier_in("selection")
     self.mb = message_receiver(self);
     # Connect message port
     self.msg_connect(self, "selection", self.mb,"selection")
     # Connect default
     self._connect_current()
Esempio n. 2
0
	def __init__(self, item_size, num_inputs, num_outputs, input_index, output_index):
		"""
		Selector constructor.
		
		Args:
		    item_size: the size of the gr data stream in bytes
		    num_inputs: the number of inputs (integer)
		    num_outputs: the number of outputs (integer)
		    input_index: the index for the source data
		    output_index: the index for the destination data
		"""
		gr.hier_block2.__init__(
			self, 'selector',
			gr.io_signature(num_inputs, num_inputs, item_size),
			gr.io_signature(num_outputs, num_outputs, item_size),
		)
		#terminator blocks for unused inputs and outputs
		self.input_terminators = [blocks.null_sink(item_size) for i in range(num_inputs)]
		self.output_terminators = [blocks.head(item_size, 0) for i in range(num_outputs)]
		self.copy = blocks.copy(item_size)
		#connections
		for i in range(num_inputs): self.connect((self, i), self.input_terminators[i])
		for i in range(num_outputs): self.connect(blocks.null_source(item_size),
                                                          self.output_terminators[i], (self, i))
		self.item_size = item_size
		self.input_index = input_index
		self.output_index = output_index
		self.num_inputs = num_inputs
		self.num_outputs = num_outputs
		self._connect_current()
Esempio n. 3
0
    def __init__(self):
        gr.top_block.__init__(self, "Strobe")

        ##################################################
        # Blocks
        ##################################################
        self.blocks_tagged_stream_to_pdu_0 = blocks.tagged_stream_to_pdu(
            blocks.byte_t, "packet_len")
        self.blocks_pdu_to_tagged_stream_0 = blocks.pdu_to_tagged_stream(
            blocks.byte_t, "packet_len")
        self.blocks_message_strobe_0_0 = blocks.message_strobe(
            pmt.cons(pmt.PMT_NIL, pmt.make_u8vector(64, 0)), 750)
        self.blocks_message_strobe_0 = blocks.message_strobe(
            pmt.intern("TEST"), 1000)
        self.blocks_message_debug_0 = blocks.message_debug()
        self.blocks_copy_0 = blocks.copy(gr.sizeof_char * 1)
        self.blocks_copy_0.set_enabled(True)

        ##################################################
        # Connections
        ##################################################
        self.connect((self.blocks_copy_0, 0),
                     (self.blocks_tagged_stream_to_pdu_0, 0))
        self.connect((self.blocks_pdu_to_tagged_stream_0, 0),
                     (self.blocks_copy_0, 0))

        ##################################################
        # Asynch Message Connections
        ##################################################
        self.msg_connect(self.blocks_message_strobe_0, "strobe",
                         self.blocks_message_debug_0, "print")
        self.msg_connect(self.blocks_message_strobe_0_0, "strobe",
                         self.blocks_pdu_to_tagged_stream_0, "pdus")
        self.msg_connect(self.blocks_tagged_stream_to_pdu_0, "pdus",
                         self.blocks_message_debug_0, "print_pdu")
Esempio n. 4
0
    def __init__(self):
        gr.top_block.__init__(self, "Strobe")

        ##################################################
        # Blocks
        ##################################################
        self.blocks_tagged_stream_to_pdu_0 = blocks.tagged_stream_to_pdu(blocks.byte_t, "packet_len")
        self.blocks_pdu_to_tagged_stream_0 = blocks.pdu_to_tagged_stream(blocks.byte_t, "packet_len")
        self.blocks_message_strobe_0_0 = blocks.message_strobe(pmt.cons( pmt.PMT_NIL, pmt.make_u8vector(64,0) ), 750)
        self.blocks_message_strobe_0 = blocks.message_strobe(pmt.intern("TEST"), 1000)
        self.blocks_message_debug_0 = blocks.message_debug()
        self.blocks_copy_0 = blocks.copy(gr.sizeof_char*1)
        self.blocks_copy_0.set_enabled(True)

        ##################################################
        # Connections
        ##################################################
        self.connect((self.blocks_copy_0, 0), (self.blocks_tagged_stream_to_pdu_0, 0))
        self.connect((self.blocks_pdu_to_tagged_stream_0, 0), (self.blocks_copy_0, 0))

        ##################################################
        # Asynch Message Connections
        ##################################################
        self.msg_connect(self.blocks_message_strobe_0, "strobe", self.blocks_message_debug_0, "print")
        self.msg_connect(self.blocks_message_strobe_0_0, "strobe", self.blocks_pdu_to_tagged_stream_0, "pdus")
        self.msg_connect(self.blocks_tagged_stream_to_pdu_0, "pdus", self.blocks_message_debug_0, "print_pdu")
Esempio n. 5
0
    def set_rowsandcols(self, rows, cols, deint):
        self.disconnect_all()

        self.passthrough = None
        self.interleaver = None
        self.deinterleaver = None

        ##################################################
        # Parameters
        ##################################################
        self.rows = rows
        self.cols = cols
        self.deint = deint

        ##################################################
        # Blocks
        ##################################################
        # short circuit for unitary rows / columns
        if rows == 1 or cols == 1:
          self.passthrough = blocks.copy(self.itemsize)
          self.connect((self, 0), (self.passthrough, 0), (self, 0))
          return

        self.deinterleaver = blocks.deinterleave(self.itemsize, 1 if deint else cols)
        self.interleaver = blocks.interleave(self.itemsize, cols if deint else 1)

        ##################################################
        # Connections
        ##################################################
        self.connect((self, 0), (self.deinterleaver, 0))
        for n in range(rows):
            self.connect((self.deinterleaver, n), (self.interleaver, n))
        self.connect((self.interleaver, 0), (self, 0))
Esempio n. 6
0
 def __init__(self, item_size, num_inputs, num_outputs, input_index, output_index):
     """
     Selector constructor.
     
     Args:
         item_size: the size of the gr data stream in bytes
         num_inputs: the number of inputs (integer)
         num_outputs: the number of outputs (integer)
         input_index: the index for the source data
         output_index: the index for the destination data
     """
     gr.hier_block2.__init__(
         self, 'selector',
         gr.io_signature(num_inputs, num_inputs, item_size),
         gr.io_signature(num_outputs, num_outputs, item_size),
     )
     #terminator blocks for unused inputs and outputs
     self.input_terminators = [blocks.null_sink(item_size) for i in range(num_inputs)]
     self.output_terminators = [blocks.head(item_size, 0) for i in range(num_outputs)]
     self.copy = blocks.copy(item_size)
     #connections
     for i in range(num_inputs): self.connect((self, i), self.input_terminators[i])
     for i in range(num_outputs): self.connect(blocks.null_source(item_size),
                                                       self.output_terminators[i], (self, i))
     self.item_size = item_size
     self.input_index = input_index
     self.output_index = output_index
     self.num_inputs = num_inputs
     self.num_outputs = num_outputs
     self._connect_current()
Esempio n. 7
0
    def __init__(self, size, factor, itemsize=gr.sizeof_gr_complex):
        """
        size: (int) vector size (FFT size) of next block
        factor: (int) output will have this many more samples than input
        
        If size is not divisible by factor, then the output will necessarily have jitter.
        """
        size = int(size)
        factor = int(factor)
        # assert size % factor == 0
        offset = size // factor

        gr.hier_block2.__init__(
            self, type(self).__name__,
            gr.io_signature(1, 1, itemsize),
            gr.io_signature(1, 1, itemsize),
        )
        
        if factor == 1:
            # No duplication needed; simplify flowgraph
            # GR refused to connect self to self, so insert a dummy block
            self.connect(self, blocks.copy(itemsize), self)
        else:
            interleave = blocks.interleave(itemsize * size)
            self.connect(
                interleave,
                blocks.vector_to_stream(itemsize, size),
                self)
        
            for i in xrange(0, factor):
                self.connect(
                    self,
                    blocks.delay(itemsize, (factor - 1 - i) * offset),
                    blocks.stream_to_vector(itemsize, size),
                    (interleave, i))
Esempio n. 8
0
def ConnectionCanarySource(graph):
    """
    Set up a partial graph to detect its output not being connected
    """
    source = blocks.vector_source_f([])
    copy = blocks.copy(gr.sizeof_float)
    graph.connect(source, copy)
    return copy
Esempio n. 9
0
def ConnectionCanarySource(graph):
    """
    Set up a partial graph to detect its output not being connected
    """
    source = blocks.vector_source_f([])
    copy = blocks.copy(gr.sizeof_float)
    graph.connect(source, copy)
    return copy
Esempio n. 10
0
    def __init__(self,
                 generic_encoder=0,
                 generic_decoder=0,
                 esno=0,
                 samp_rate=3200000,
                 threading="capillary",
                 puncpat='11',
                 seed=0):
        gr.hier_block2.__init__(self, "fec_test",
                                gr.io_signature(1, 1, gr.sizeof_char * 1),
                                gr.io_signature(2, 2, gr.sizeof_char * 1))

        self.generic_encoder = generic_encoder
        self.generic_decoder = generic_decoder
        self.esno = esno
        self.samp_rate = samp_rate
        self.threading = threading
        self.puncpat = puncpat

        self.map_bb = digital.map_bb(([-1, 1]))
        self.b2f = blocks.char_to_float(1, 1)

        self.unpack8 = blocks.unpack_k_bits_bb(8)
        self.pack8 = blocks.pack_k_bits_bb(8)

        self.encoder = extended_encoder(encoder_obj_list=generic_encoder,
                                        threading=threading,
                                        puncpat=puncpat)

        self.decoder = extended_decoder(decoder_obj_list=generic_decoder,
                                        threading=threading,
                                        ann=None,
                                        puncpat=puncpat,
                                        integration_period=10000,
                                        rotator=None)

        noise = math.sqrt((10.0**(-esno / 10.0)) / 2.0)
        #self.fastnoise = analog.fastnoise_source_f(analog.GR_GAUSSIAN, noise, seed, 8192)
        self.fastnoise = analog.noise_source_f(analog.GR_GAUSSIAN, noise, seed)
        self.addnoise = blocks.add_ff(1)

        # Send packed input directly to the second output
        self.copy_packed = blocks.copy(gr.sizeof_char)
        self.connect(self, self.copy_packed)
        self.connect(self.copy_packed, (self, 1))

        # Unpack inputl encode, convert to +/-1, add noise, decode, repack
        self.connect(self, self.unpack8)
        self.connect(self.unpack8, self.encoder)
        self.connect(self.encoder, self.map_bb)
        self.connect(self.map_bb, self.b2f)
        self.connect(self.b2f, (self.addnoise, 0))
        self.connect(self.fastnoise, (self.addnoise, 1))
        self.connect(self.addnoise, self.decoder)
        self.connect(self.decoder, self.pack8)
        self.connect(self.pack8, (self, 0))
Esempio n. 11
0
    def __rebuild(self):
        if self.__signal_type.is_analytic():
            input_length = self.__freq_resolution
            output_length = self.__freq_resolution
            self.__after_fft = None
        else:
            # use vector_to_streams to cut the output in half and discard the redundant part
            input_length = self.__freq_resolution * 2
            output_length = self.__freq_resolution
            self.__after_fft = blocks.vector_to_streams(
                itemsize=output_length * gr.sizeof_float, nstreams=2)

        sample_rate = self.__signal_type.get_sample_rate()
        overlap_factor = int(
            math.ceil(_maximum_fft_rate * input_length / sample_rate))
        # sanity limit -- OverlapGimmick is not free
        overlap_factor = min(16, overlap_factor)

        self.__gate = blocks.copy(gr.sizeof_gr_complex)
        self.__gate.set_enabled(not self.__paused)

        self.__fft_sink = MessageDistributorSink(
            itemsize=output_length * gr.sizeof_char,
            context=self.__context,
            migrate=self.__fft_sink,
            notify=self.__update_interested)
        self.__overlapper = _OverlapGimmick(size=input_length,
                                            factor=overlap_factor,
                                            itemsize=self.__itemsize)

        # Adjusts units so displayed level is independent of resolution and sample rate. Also throw in the packing offset
        compensation = to_dB(input_length / sample_rate) + self.__power_offset
        # TODO: Consider not using the logpwrfft block

        self.__logpwrfft = logpwrfft.logpwrfft_c(
            sample_rate=sample_rate * overlap_factor,
            fft_size=input_length,
            ref_scale=10.0**(-compensation / 20.0) *
            2,  # not actually using this as a reference scale value but avoiding needing to use a separate add operation to apply the unit change -- this expression is the inverse of what logpwrfft does internally
            frame_rate=self.__frame_rate,
            avg_alpha=1.0,
            average=False)
        # It would make slightly more sense to use unsigned chars, but blocks.float_to_uchar does not support vlen.
        self.__fft_converter = blocks.float_to_char(
            vlen=self.__freq_resolution, scale=1.0)

        self.__scope_sink = MessageDistributorSink(
            itemsize=self.__time_length * gr.sizeof_gr_complex,
            context=self.__context,
            migrate=self.__scope_sink,
            notify=self.__update_interested)
        self.__scope_chunker = blocks.stream_to_vector_decimator(
            item_size=gr.sizeof_gr_complex,
            sample_rate=sample_rate,
            vec_rate=self.__frame_rate,  # TODO doesn't need to be coupled
            vec_len=self.__time_length)
Esempio n. 12
0
 def test_copy(self):
     src_data = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
     expected_result = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
     src = blocks.vector_source_b(src_data)
     op = blocks.copy(gr.sizeof_char)
     dst = blocks.vector_sink_b()
     self.tb.connect(src, op, dst)
     self.tb.run()
     dst_data = dst.data()
     self.assertEqual(expected_result, dst_data)
Esempio n. 13
0
 def test_copy(self):
     src_data = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
     expected_result = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
     src = blocks.vector_source_b(src_data)
     op = blocks.copy(gr.sizeof_char)
     dst = blocks.vector_sink_b()
     self.tb.connect(src, op, dst)
     self.tb.run()
     dst_data = dst.data()
     self.assertEqual(expected_result, dst_data)
Esempio n. 14
0
 def test_copy_drop(self):
     src_data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
     expected_result = []
     src = blocks.vector_source_b(src_data)
     op = blocks.copy(gr.sizeof_char)
     op.set_enabled(False)
     dst = blocks.vector_sink_b()
     self.tb.connect(src, op, dst)
     self.tb.run()
     dst_data = dst.data()
     self.assertEqual(expected_result, dst_data)
Esempio n. 15
0
    def __init__(self, num_ports=2, config_filename=''):
        gr.hier_block2.__init__(
            self,
            "Phase Correct Chains",
            gr.io_signaturev(num_ports, num_ports,
                             gen_sig_io(num_ports, gr.sizeof_gr_complex)),
            gr.io_signaturev(num_ports, num_ports,
                             gen_sig_io(num_ports, gr.sizeof_gr_complex)),
        )

        ##################################################
        # Parameters
        ##################################################
        self.num_ports = num_ports
        self.config_filename = config_filename
        # Check file
        try:
            file = open(self.config_filename, 'r')
            file.close()
        except:
            sys.stderr.write("Configuration " + config_filename +
                             ", not valid\n")
            print(sys.stderr)
            sys.exit(1)
        # Check that we have enough measurments
        self.phases = read_config_file(config_filename)
        if len(self.phases) != (num_ports - 1):
            sys.stderr.write("Configuration " + config_filename +
                             ". Not valid number of phase estimates\n")
            print(sys.stderr)
            sys.exit(1)

        ##################################################
        # Blocks
        ##################################################

        # Connect first signal directly to output
        self.nop = blocks.copy(gr.sizeof_gr_complex * 1)
        self.nop.set_enabled(True)
        self.connect((self, 0), self.nop)
        self.connect(self.nop, (self, 0))

        for p in range(num_ports - 1):
            ## Add blocks
            # Place multiply object
            object_name_mc = 'multiply_const_' + str(p)
            gain = numpy.exp(1j * self.phases[p])
            setattr(self, object_name_mc, blocks.multiply_const_vcc((gain, )))

            ## Make Connections
            # Top to multiply
            self.connect((self, p + 1), (getattr(self, object_name_mc), 0))
            # Multiply to top
            self.connect((getattr(self, object_name_mc), 0), (self, p + 1))
Esempio n. 16
0
 def __rebuild(self):
     if self.__signal_type.is_analytic():
         input_length = self.__freq_resolution
         output_length = self.__freq_resolution
         self.__after_fft = None
     else:
         # use vector_to_streams to cut the output in half and discard the redundant part
         input_length = self.__freq_resolution * 2
         output_length = self.__freq_resolution
         self.__after_fft = blocks.vector_to_streams(itemsize=output_length * gr.sizeof_float, nstreams=2)
     
     sample_rate = self.__signal_type.get_sample_rate()
     overlap_factor = int(math.ceil(_maximum_fft_rate * input_length / sample_rate))
     # sanity limit -- OverlapGimmick is not free
     overlap_factor = min(16, overlap_factor)
     
     self.__gate = blocks.copy(gr.sizeof_gr_complex)
     self.__gate.set_enabled(not self.__paused)
     
     self.__fft_sink = MessageDistributorSink(
         itemsize=output_length * gr.sizeof_char,
         context=self.__context,
         migrate=self.__fft_sink,
         notify=self.__update_interested)
     self.__overlapper = _OverlapGimmick(
         size=input_length,
         factor=overlap_factor,
         itemsize=self.__itemsize)
     
     # Adjusts units so displayed level is independent of resolution and sample rate. Also throw in the packing offset
     compensation = to_dB(input_length / sample_rate) + self.__power_offset
     # TODO: Consider not using the logpwrfft block
     
     self.__logpwrfft = logpwrfft.logpwrfft_c(
         sample_rate=sample_rate * overlap_factor,
         fft_size=input_length,
         ref_scale=10.0 ** (-compensation / 20.0) * 2,  # not actually using this as a reference scale value but avoiding needing to use a separate add operation to apply the unit change -- this expression is the inverse of what logpwrfft does internally
         frame_rate=self.__frame_rate,
         avg_alpha=1.0,
         average=False)
     # It would make slightly more sense to use unsigned chars, but blocks.float_to_uchar does not support vlen.
     self.__fft_converter = blocks.float_to_char(vlen=self.__freq_resolution, scale=1.0)
 
     self.__scope_sink = MessageDistributorSink(
         itemsize=self.__time_length * gr.sizeof_gr_complex,
         context=self.__context,
         migrate=self.__scope_sink,
         notify=self.__update_interested)
     self.__scope_chunker = blocks.stream_to_vector_decimator(
         item_size=gr.sizeof_gr_complex,
         sample_rate=sample_rate,
         vec_rate=self.__frame_rate,  # TODO doesn't need to be coupled
         vec_len=self.__time_length)
Esempio n. 17
0
    def __init__(self, dest, debug, input_rate, deviation, squelch, gain,
                 msgq_id, msg_q):

        gr.hier_block2.__init__(
            self,
            "op25_nbfm_c",
            gr.io_signature(1, 1, gr.sizeof_gr_complex),  # Input signature
            gr.io_signature(0, 0, 0))  # Output signature

        self.debug = debug
        self.msgq_id = msgq_id

        # 'switch' enables the analog decoding to be turned on/off
        self.switch = blocks.copy(gr.sizeof_gr_complex)
        self.switch.set_enabled(False)

        # power squelch
        self.squelch = analog.simple_squelch_cc(squelch, gain)

        # quadrature demod
        fm_demod_gain = input_rate / (4 * pi * deviation)
        self.fm_demod = analog.quadrature_demod_cf(fm_demod_gain)

        # fm deemphasis
        self.deemph = analog.fm_deemph(input_rate, 0.00075)

        # decimate and filter
        audio_decim = input_rate // _PCM_RATE
        lpf_taps = filter.firdes.low_pass(
            1.0,  # gain
            input_rate,  # sampling rate
            3000.0,  # Audio high cutoff (remove aliasing)
            200.0,  # transition
            filter.firdes.WIN_HAMMING)  # filter type
        hpf_taps = filter.firdes.high_pass(
            1.0,  # gain
            _PCM_RATE,  # sampling rate
            200.0,  # Audio low cutoff  (remove sub-audio signaling)
            10.0,  # Sharp transition band
            filter.firdes.WIN_HAMMING)  # filter type
        self.lp_filter = filter.fir_filter_fff(audio_decim, lpf_taps)
        self.hp_filter = filter.fir_filter_fff(1, hpf_taps)

        # analog_udp block converts +/-1.0 float samples to S16LE PCM and sends over UDP
        self.analog_udp = op25_repeater.analog_udp(dest, debug, msgq_id, msg_q)

        self.connect(self, self.switch, self.squelch, self.fm_demod,
                     self.deemph, self.lp_filter, self.hp_filter,
                     self.analog_udp)
        sys.stderr.write("%s [%d] Enabling nbfm analog audio\n" %
                         (log_ts.get(), msgq_id))
Esempio n. 18
0
    def __init__(self, generic_encoder=0, generic_decoder=0, esno=0,
                 samp_rate=3200000, threading="capillary", puncpat='11',
                 seed=0):
        gr.hier_block2.__init__(self, "fec_test",
                                gr.io_signature(1, 1, gr.sizeof_char*1),
                                gr.io_signature(2, 2, gr.sizeof_char*1))

        self.generic_encoder = generic_encoder
        self.generic_decoder = generic_decoder
        self.esno = esno
        self.samp_rate = samp_rate
        self.threading = threading
        self.puncpat = puncpat

        self.map_bb = digital.map_bb(([-1, 1]))
        self.b2f = blocks.char_to_float(1, 1)

        self.unpack8 = blocks.unpack_k_bits_bb(8)
        self.pack8 = blocks.pack_k_bits_bb(8)

        self.encoder = extended_encoder(encoder_obj_list=generic_encoder,
                                        threading=threading,
                                        puncpat=puncpat)

        self.decoder = extended_decoder(decoder_obj_list=generic_decoder,
                                        threading=threading,
                                        ann=None, puncpat=puncpat,
                                        integration_period=10000, rotator=None)

        noise = math.sqrt((10.0**(-esno/10.0))/2.0)
        #self.fastnoise = analog.fastnoise_source_f(analog.GR_GAUSSIAN, noise, seed, 8192)
        self.fastnoise = analog.noise_source_f(analog.GR_GAUSSIAN, noise, seed)
        self.addnoise = blocks.add_ff(1)

        # Send packed input directly to the second output
        self.copy_packed = blocks.copy(gr.sizeof_char)
        self.connect(self, self.copy_packed)
        self.connect(self.copy_packed, (self, 1))

        # Unpack inputl encode, convert to +/-1, add noise, decode, repack
        self.connect(self, self.unpack8)
        self.connect(self.unpack8, self.encoder)
        self.connect(self.encoder, self.map_bb)
        self.connect(self.map_bb, self.b2f)
        self.connect(self.b2f, (self.addnoise, 0))
        self.connect(self.fastnoise, (self.addnoise,1))
        self.connect(self.addnoise, self.decoder)
        self.connect(self.decoder, self.pack8)
        self.connect(self.pack8, (self, 0))
Esempio n. 19
0
 def test_030_nested_input(self):
     tb = gr.top_block()
     src = blocks.vector_source_b([1,])
     hb1 = gr.hier_block2("hb1",
                          gr.io_signature(1, 1, gr.sizeof_char),
                          gr.io_signature(0, 0, 0))
     hb2 = gr.hier_block2("hb2",
                          gr.io_signature(1, 1, gr.sizeof_char),
                          gr.io_signature(0, 0, 0))
     dst = blocks.vector_sink_b()
     tb.connect(src, hb1)
     hb1.connect(hb1, hb2)
     hb2.connect(hb2, blocks.copy(gr.sizeof_char), dst)
     tb.run()
     self.assertEqual(dst.data(), (1,))
 def test_030_nested_input(self):
     tb = gr.top_block()
     src = blocks.vector_source_b([
         1,
     ])
     hb1 = gr.hier_block2("hb1", gr.io_signature(1, 1, gr.sizeof_char),
                          gr.io_signature(0, 0, 0))
     hb2 = gr.hier_block2("hb2", gr.io_signature(1, 1, gr.sizeof_char),
                          gr.io_signature(0, 0, 0))
     dst = blocks.vector_sink_b()
     tb.connect(src, hb1)
     hb1.connect(hb1, hb2)
     hb2.connect(hb2, blocks.copy(gr.sizeof_char), dst)
     tb.run()
     self.assertEquals(dst.data(), (1, ))
Esempio n. 21
0
    def create_fork(self):

        src = blocks.null_source(gr.sizeof_float)
        head = blocks.head(gr.sizeof_float, self.samples)
        self.connect(src, head)

        for pipe in range(self.pipes):
            block = filter.fir_filter_fff(1, self.taps)
            self.connect(head, block)
            self.fir_blocks.append(block)

            for stage in range(1, self.stages):
                block = filter.fir_filter_fff(1, self.taps)
                self.connect(self.fir_blocks[-1], block)
                self.fir_blocks.append(block)

            copy = blocks.copy(gr.sizeof_float)
            copy.set_enabled(True)
            sink = blocks.null_sink(gr.sizeof_float)
            self.connect(self.fir_blocks[-1], copy, sink)
Esempio n. 22
0
	def wxgui_connect(self, *points):
		"""
		Use wxgui connect when the first point is the self source of the hb.
		The win property of this object should be set to the wx window.
		When this method tries to connect self to the next point,
		it will conditionally make this connection based on the visibility state.
		All other points will be connected normally.
		"""
		try:
			assert points[0] == self or points[0][0] == self
			copy = blocks.copy(self._hb.input_signature().sizeof_stream_item(0))
			handler = self._handler_factory(copy.set_enabled)
			if RUN_ALWAYS == False:
				handler(False) #initially disable the copy block
			else:
				handler(True) #initially enable the copy block
			self._bind_to_visible_event(win=self.win, handler=handler)
			points = list(points)
			points.insert(1, copy) #insert the copy block into the chain
		except (AssertionError, IndexError): pass
		self.connect(*points) #actually connect the blocks
Esempio n. 23
0
 def wxgui_connect(self, *points):
     """
     Use wxgui connect when the first point is the self source of the hb.
     The win property of this object should be set to the wx window.
     When this method tries to connect self to the next point,
     it will conditionally make this connection based on the visibility state.
     All other points will be connected normally.
     """
     try:
         assert points[0] == self or points[0][0] == self
         copy = blocks.copy(self.input_signature().sizeof_stream_item(0))
         handler = self._handler_factory(copy.set_enabled)
         if not RUN_ALWAYS:
             handler(False)  # initially disable the copy block
         else:
             handler(True)  # initially enable the copy block
         self._bind_to_visible_event(win=self.win, handler=handler)
         points = list(points)
         points.insert(1, copy) # insert the copy block into the chain
     except (AssertionError, IndexError): pass
     self.connect(*points)  # actually connect the blocks
Esempio n. 24
0
    def __init__(self, args):
        gr.top_block.__init__(self, "Benchmark Fanout", catch_exceptions=True)

        ##################################################
        # Variables
        ##################################################
        nsamples = args.samples
        veclen = args.veclen
        self.actual_samples = actual_samples = int(nsamples / veclen)
        num_blocks = args.nblocks

        ##################################################
        # Blocks
        ##################################################
        copy_blocks = []
        sink_blocks = []
        for i in range(num_blocks):
            copy_blocks.append(
                blocks.copy(
                    gr.sizeof_gr_complex * veclen)
            )
            sink_blocks.append(blocks.null_sink(
                gr.sizeof_gr_complex*veclen)
            )

        self.src = blocks.null_source(
            gr.sizeof_gr_complex*veclen)

        self.head_blk = blocks.head(
            gr.sizeof_gr_complex*veclen, actual_samples)

        ##################################################
        # Connections
        ##################################################
        self.connect((self.src, 0), (self.head_blk, 0))
        for i in range(num_blocks):
            self.connect((self.head_blk, 0), (copy_blocks[i], 0))
        
        for i in range(num_blocks):
            self.connect((copy_blocks[i], 0), (sink_blocks[i], 0))
Esempio n. 25
0
    def __init__(self, args):
        gr.top_block.__init__(self, "Benchmark Copy", catch_exceptions=True)

        ##################################################
        # Variables
        ##################################################
        nsamples = args.samples
        veclen = args.veclen
        self.actual_samples = actual_samples = int(nsamples / veclen)
        num_blocks = args.nblocks

        ##################################################
        # Blocks
        ##################################################
        copy_blocks = []
        for i in range(num_blocks):
            copy_blocks.append(blocks.copy(gr.sizeof_gr_complex * veclen))

        # self.src = blocks.null_source(
        # gr.sizeof_gr_complex*veclen)
        # self.snk = blocks.null_sink(
        #     gr.sizeof_gr_complex*veclen)
        rollover = 1234
        input_data = [complex(i, -i) for i in range(rollover + 1)]
        self.src = blocks.vector_source_c(input_data, True)
        self.snk = bench.seqval_c(rollover)
        self.head_blk = blocks.head(gr.sizeof_gr_complex * veclen,
                                    actual_samples)

        ##################################################
        # Connections
        ##################################################
        self.connect((self.head_blk, 0), (copy_blocks[0], 0))
        self.connect((self.src, 0), (self.head_blk, 0))

        for i in range(1, num_blocks):
            self.connect((copy_blocks[i - 1], 0), (copy_blocks[i], 0))

        self.connect((copy_blocks[num_blocks - 1], 0), (self.snk, 0))
Esempio n. 26
0
    def __init__(self):
        gr.top_block.__init__(self, "Latencytest")

        ##################################################
        # Variables
        ##################################################
        self.spp = spp = 4
        self.vlb = vlb = spp * 4
        self.device3 = variable_uhd_device3_0 = ettus.device3(
            uhd.device_addr_t(",".join(('type=x300', 'args'))))
        self.samp_rate = samp_rate = 500000

        ##################################################
        # Blocks
        ##################################################
        self.uhd_rfnoc_streamer_fifo_0 = ettus.rfnoc_generic(
            self.device3,
            uhd.stream_args(  # TX Stream Args
                cpu_format="u8",
                otw_format="u8",
                args="gr_vlen={0},{1}".format(
                    vlb, "" if vlb == 1 else "spp={0}".format(vlb)),
            ),
            uhd.stream_args(  # RX Stream Args
                cpu_format="u8",
                otw_format="u8",
                args="gr_vlen={0},{1}".format(
                    vlb, "" if vlb == 1 else "spp={0}".format(vlb)),
            ),
            "FIFO",
            -1,
            -1,
        )
        self.blocks_throttle_0_0 = blocks.throttle(gr.sizeof_int * spp,
                                                   samp_rate, True)
        self.blocks_file_source_0 = blocks.file_source(
            gr.sizeof_int * spp,
            '/home/vivado/rfnoc/src/rfnoc-Kwan/test_in.bin', False)
        self.blocks_file_source_0.set_begin_tag(pmt.PMT_NIL)
        self.blocks_file_sink_0 = blocks.file_sink(
            gr.sizeof_int * spp, '/home/vivado/rfnoc/src/rfnoc-Kwan/out.bin',
            False)
        self.blocks_file_sink_0.set_unbuffered(False)
        self.blocks_copy_0 = blocks.copy(gr.sizeof_int * spp)
        self.blocks_copy_0.set_enabled(True)
        self.Kwan_latencytest_0 = Kwan.latencytest(
            self.device3,
            uhd.stream_args(  # TX Stream Args
                cpu_format="u8",
                otw_format="u8",
                args="gr_vlen={0},{1}".format(
                    vlb, "" if vlb == 1 else "spp={0}".format(vlb)),
            ),
            uhd.stream_args(  # RX Stream Args
                cpu_format="u8",
                otw_format="u8",
                args="gr_vlen={0},{1}".format(
                    vlb, "" if vlb == 1 else "spp={0}".format(vlb)),
            ),
            -1,
            -1)

        ##################################################
        # Connections
        ##################################################
        self.connect((self.blocks_copy_0, 0), (self.blocks_file_sink_0, 0))
        self.connect((self.blocks_file_source_0, 0),
                     (self.blocks_throttle_0_0, 0))
        self.connect((self.blocks_throttle_0_0, 0),
                     (self.uhd_rfnoc_streamer_fifo_0, 0))
        self.connect((self.Kwan_latencytest_0, 0), (self.blocks_copy_0, 0))
        self.device3.connect(self.uhd_rfnoc_streamer_fifo_0.get_block_id(), 0,
                             self.Kwan_latencytest_0.get_block_id(), 0)
    def __init__(self):
        gr.top_block.__init__(self, "Top Block")
        Qt.QWidget.__init__(self)
        self.setWindowTitle("Top Block")
        try:
            self.setWindowIcon(Qt.QIcon.fromTheme('gnuradio-grc'))
        except:
            pass
        self.top_scroll_layout = Qt.QVBoxLayout()
        self.setLayout(self.top_scroll_layout)
        self.top_scroll = Qt.QScrollArea()
        self.top_scroll.setFrameStyle(Qt.QFrame.NoFrame)
        self.top_scroll_layout.addWidget(self.top_scroll)
        self.top_scroll.setWidgetResizable(True)
        self.top_widget = Qt.QWidget()
        self.top_scroll.setWidget(self.top_widget)
        self.top_layout = Qt.QVBoxLayout(self.top_widget)
        self.top_grid_layout = Qt.QGridLayout()
        self.top_layout.addLayout(self.top_grid_layout)

        self.settings = Qt.QSettings("GNU Radio", "top_block")
        self.restoreGeometry(self.settings.value("geometry").toByteArray())

        ##################################################
        # Variables
        ##################################################
        self.samp_rate = samp_rate = 15e6
        self.if_bandwidth_1 = if_bandwidth_1 = 2e6
        self.sdr_gain = sdr_gain = 60
        self.integration_bandwidth = integration_bandwidth = 5e3
        self.if_filter_decimation_rate = if_filter_decimation_rate = int(samp_rate/(1.1*if_bandwidth_1))
        self.sdr_power_offset = sdr_power_offset = 1.0
        self.sdr_gain_lin = sdr_gain_lin = 10**(sdr_gain/20)
        self.num_channels = num_channels = int((samp_rate/if_filter_decimation_rate)/integration_bandwidth)
        self.lna_gain_measured = lna_gain_measured = 33.33
        self.integration_time = integration_time = 10
        self.if_samp_rate = if_samp_rate = samp_rate/if_filter_decimation_rate
        self.cable_loss = cable_loss = 0.25
        self.variable_function_probe = variable_function_probe = 0
        self.sdr_frequency = sdr_frequency = 1420.406e6
        self.output_vector_bandwidth = output_vector_bandwidth = samp_rate/if_filter_decimation_rate
        self.offset_frequency = offset_frequency = if_bandwidth_1/2+1e5
        self.integration_scale_factor = integration_scale_factor = np.full((num_channels),float(1.0/(integration_time*integration_bandwidth*50)),dtype=float)
        self.integration_dec_rate = integration_dec_rate = int(integration_time*if_samp_rate/num_channels)
        self.if_filter_gain = if_filter_gain = 1/(lna_gain_measured*cable_loss*sdr_gain_lin*sdr_power_offset)
        self.if_bandwidth_0 = if_bandwidth_0 = 5.5e6
        self.channel_skirt = channel_skirt = integration_bandwidth/100
        self.channel_map = channel_map = range(int(num_channels/2.0+1.0),num_channels,1)+range(0,int(num_channels/2.0+1.0),1)
        self.antenna_gain_estimated = antenna_gain_estimated = 173

        ##################################################
        # Blocks
        ##################################################
        self.probe_signal = blocks.probe_signal_vf(num_channels)
        
        def _variable_function_probe_probe():
            while True:
                val = self.probe_signal.level()
                try:
                    self.set_variable_function_probe(val)
                except AttributeError:
                    pass
                time.sleep(1.0 / (10))
        _variable_function_probe_thread = threading.Thread(target=_variable_function_probe_probe)
        _variable_function_probe_thread.daemon = True
        _variable_function_probe_thread.start()
            
        self.pfb_channelizer_ccf_0 = pfb.channelizer_ccf(
              num_channels,
              (firdes.low_pass(1, if_samp_rate, (integration_bandwidth/2-channel_skirt), channel_skirt, firdes.WIN_HAMMING)),
              1.0,
              0)
        self.pfb_channelizer_ccf_0.set_channel_map((channel_map))
        self.pfb_channelizer_ccf_0.declare_sample_delay(0)
            
        self.low_pass_filter_1 = filter.fir_filter_ccf(if_filter_decimation_rate, firdes.low_pass(
            if_filter_gain, samp_rate, if_bandwidth_1/2, 1e5, firdes.WIN_HAMMING, 6.76))
        self.limesdr_source_2 = limesdr.source('0009060B00471B22',
                     2,
                     1,
                     0,
                     0,
                     '',
                     sdr_frequency-offset_frequency,
                     samp_rate,
                     0,
                     1,
                     15e6,
                     0,
                     10e6,
                     3,
                     2,
                     2,
                     1,
                     if_bandwidth_0,
                     1,
                     5e6,
                     1,
                     if_bandwidth_0,
                     0,
                     0,
                     sdr_gain,
                     30,
                     0,
                     0,
                     0,
                     0)
        self.blocks_streams_to_vector_0 = blocks.streams_to_vector(gr.sizeof_gr_complex*1, num_channels)
        self.blocks_multiply_xx_1 = blocks.multiply_vcc(1)
        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vff((integration_scale_factor))
        self.blocks_integrate_xx_0_0 = blocks.integrate_ff(integration_dec_rate, num_channels)
        self.blocks_file_sink_0 = blocks.file_sink(gr.sizeof_gr_complex*1, '/home/w1xm-admin/Documents/DSP/data_out/recieve_block_sink', False)
        self.blocks_file_sink_0.set_unbuffered(False)
        self.blocks_copy_0_0 = blocks.copy(gr.sizeof_gr_complex*1)
        self.blocks_copy_0_0.set_enabled(False)
        self.blocks_copy_0 = blocks.copy(gr.sizeof_gr_complex*1)
        self.blocks_copy_0.set_enabled(True)
        self.blocks_complex_to_mag_squared_0 = blocks.complex_to_mag_squared(num_channels)
        self.analog_sig_source_x_0 = analog.sig_source_c(samp_rate, analog.GR_SIN_WAVE, -offset_frequency, 1, 0)

        ##################################################
        # Connections
        ##################################################
        self.connect((self.analog_sig_source_x_0, 0), (self.blocks_multiply_xx_1, 1))    
        self.connect((self.blocks_complex_to_mag_squared_0, 0), (self.blocks_integrate_xx_0_0, 0))    
        self.connect((self.blocks_copy_0, 0), (self.blocks_multiply_xx_1, 0))    
        self.connect((self.blocks_copy_0_0, 0), (self.blocks_file_sink_0, 0))    
        self.connect((self.blocks_integrate_xx_0_0, 0), (self.blocks_multiply_const_vxx_0, 0))    
        self.connect((self.blocks_multiply_const_vxx_0, 0), (self.probe_signal, 0))    
        self.connect((self.blocks_multiply_xx_1, 0), (self.low_pass_filter_1, 0))    
        self.connect((self.blocks_streams_to_vector_0, 0), (self.blocks_complex_to_mag_squared_0, 0))    
        self.connect((self.limesdr_source_2, 0), (self.blocks_copy_0, 0))    
        self.connect((self.limesdr_source_2, 0), (self.blocks_copy_0_0, 0))    
        self.connect((self.low_pass_filter_1, 0), (self.pfb_channelizer_ccf_0, 0))    
        
        for i in range(num_channels):
            self.connect((self.pfb_channelizer_ccf_0, i), (self.blocks_streams_to_vector_0, i))
Esempio n. 28
0
    def __do_connect(self):
        itemsize = self.__itemsize

        if self.__signal_type.is_analytic():
            input_length = self.__freq_resolution
            output_length = self.__freq_resolution
            self.__after_fft = None
        else:
            # use vector_to_streams to cut the output in half and discard the redundant part
            input_length = self.__freq_resolution * 2
            output_length = self.__freq_resolution
            self.__after_fft = blocks.vector_to_streams(
                itemsize=output_length * gr.sizeof_float, nstreams=2)

        sample_rate = self.__signal_type.get_sample_rate()
        overlap_factor = int(
            math.ceil(_maximum_fft_rate * input_length / sample_rate))
        # sanity limit -- OverlapGimmick is not free
        overlap_factor = min(16, overlap_factor)

        self.__frame_rate_to_decimation_conversion = sample_rate * overlap_factor / input_length

        self.__gate = blocks.copy(itemsize)
        self.__gate.set_enabled(not self.__paused)

        overlapper = _OverlappedStreamToVector(size=input_length,
                                               factor=overlap_factor,
                                               itemsize=itemsize)

        self.__frame_dec = blocks.keep_one_in_n(
            itemsize=itemsize * input_length,
            n=max(
                1,
                int(
                    round(self.__frame_rate_to_decimation_conversion /
                          self.__frame_rate))))

        # the actual FFT logic, which is similar to GR's logpwrfft_c
        window = windows.build(self.__window_type, input_length, 6.76)
        window_power = sum(x * x for x in window)
        # TODO: use fft_vfc when applicable
        fft_block = (fft_vcc if itemsize == gr.sizeof_gr_complex else fft_vfc)(
            fft_size=input_length, forward=True, window=window)
        mag_squared = blocks.complex_to_mag_squared(input_length)
        logarithmizer = blocks.nlog10_ff(
            n=10,  # the "deci" in "decibel"
            vlen=input_length,
            k=(
                -to_dB(window_power) +  # compensate for window
                -to_dB(sample_rate)
                +  # convert from power-per-sample to power-per-Hz
                self.__power_offset  # offset for packing into bytes
            ))

        # It would make slightly more sense to use unsigned chars, but blocks.float_to_uchar does not support vlen.
        self.__fft_converter = blocks.float_to_char(
            vlen=self.__freq_resolution, scale=1.0)

        fft_sink = self.__fft_cell.create_sink_internal(
            numpy.dtype((numpy.int8, output_length)))
        scope_sink = self.__scope_cell.create_sink_internal(
            numpy.dtype(('c8', self.__time_length)))
        scope_chunker = blocks.stream_to_vector_decimator(
            item_size=gr.sizeof_gr_complex,
            sample_rate=sample_rate,
            vec_rate=self.__frame_rate,  # TODO doesn't need to be coupled
            vec_len=self.__time_length)

        # connect everything
        self.__context.lock()
        try:
            self.disconnect_all()
            self.connect(self, self.__gate, overlapper, self.__frame_dec,
                         fft_block, mag_squared, logarithmizer)
            if self.__after_fft is not None:
                self.connect(logarithmizer, self.__after_fft)
                self.connect(self.__after_fft, self.__fft_converter, fft_sink)
                self.connect(
                    (self.__after_fft, 1),
                    blocks.null_sink(gr.sizeof_float * self.__freq_resolution))
            else:
                self.connect(logarithmizer, self.__fft_converter, fft_sink)
            if self.__enable_scope:
                self.connect(self.__gate, scope_chunker, scope_sink)
        finally:
            self.__context.unlock()
Esempio n. 29
0
    def __do_connect(self):
        itemsize = self.__itemsize
        
        if self.__signal_type.is_analytic():
            input_length = self.__freq_resolution
            output_length = self.__freq_resolution
            self.__after_fft = None
        else:
            # use vector_to_streams to cut the output in half and discard the redundant part
            input_length = self.__freq_resolution * 2
            output_length = self.__freq_resolution
            self.__after_fft = blocks.vector_to_streams(itemsize=output_length * gr.sizeof_float, nstreams=2)
        
        sample_rate = self.__signal_type.get_sample_rate()
        overlap_factor = int(math.ceil(_maximum_fft_rate * input_length / sample_rate))
        # sanity limit -- OverlapGimmick is not free
        overlap_factor = min(16, overlap_factor)
        
        self.__frame_rate_to_decimation_conversion = sample_rate * overlap_factor / input_length
        
        self.__gate = blocks.copy(itemsize)
        self.__gate.set_enabled(not self.__paused)
        
        overlapper = _OverlappedStreamToVector(
            size=input_length,
            factor=overlap_factor,
            itemsize=itemsize)
        
        self.__frame_dec = blocks.keep_one_in_n(
            itemsize=itemsize * input_length,
            n=int(round(self.__frame_rate_to_decimation_conversion / self.__frame_rate)))
        
        # the actual FFT logic, which is similar to GR's logpwrfft_c
        window = windows.blackmanharris(input_length)
        window_power = sum(x * x for x in window)
        # TODO: use fft_vfc when applicable
        fft_block = (fft_vcc if itemsize == gr.sizeof_gr_complex else fft_vfc)(
            fft_size=input_length,
            forward=True,
            window=window)
        mag_squared = blocks.complex_to_mag_squared(input_length)
        logarithmizer = blocks.nlog10_ff(
            n=10,  # the "deci" in "decibel"
            vlen=input_length,
            k=(
                -to_dB(window_power) +  # compensate for window
                -to_dB(sample_rate) +  # convert from power-per-sample to power-per-Hz
                self.__power_offset  # offset for packing into bytes
            ))
        
        # It would make slightly more sense to use unsigned chars, but blocks.float_to_uchar does not support vlen.
        self.__fft_converter = blocks.float_to_char(vlen=self.__freq_resolution, scale=1.0)
        
        self.__fft_sink = MessageDistributorSink(
            itemsize=output_length * gr.sizeof_char,
            context=self.__context,
            migrate=self.__fft_sink,
            notify=self.__update_interested)
    
        self.__scope_sink = MessageDistributorSink(
            itemsize=self.__time_length * gr.sizeof_gr_complex,
            context=self.__context,
            migrate=self.__scope_sink,
            notify=self.__update_interested)
        scope_chunker = blocks.stream_to_vector_decimator(
            item_size=gr.sizeof_gr_complex,
            sample_rate=sample_rate,
            vec_rate=self.__frame_rate,  # TODO doesn't need to be coupled
            vec_len=self.__time_length)

        # connect everything
        self.__context.lock()
        try:
            self.disconnect_all()
            self.connect(
                self,
                self.__gate,
                overlapper,
                self.__frame_dec,
                fft_block,
                mag_squared,
                logarithmizer)
            if self.__after_fft is not None:
                self.connect(logarithmizer, self.__after_fft)
                self.connect(self.__after_fft, self.__fft_converter, self.__fft_sink)
                self.connect((self.__after_fft, 1), blocks.null_sink(gr.sizeof_float * self.__freq_resolution))
            else:
                self.connect(logarithmizer, self.__fft_converter, self.__fft_sink)
            if self.__enable_scope:
                self.connect(
                    self.__gate,
                    scope_chunker,
                    self.__scope_sink)
        finally:
            self.__context.unlock()
Esempio n. 30
0
    def __init__(self):
        gr.top_block.__init__(self, "Bob")
        Qt.QWidget.__init__(self)
        self.setWindowTitle("Bob")
        qtgui.util.check_set_qss()
        try:
            self.setWindowIcon(Qt.QIcon.fromTheme('gnuradio-grc'))
        except:
            pass
        self.top_scroll_layout = Qt.QVBoxLayout()
        self.setLayout(self.top_scroll_layout)
        self.top_scroll = Qt.QScrollArea()
        self.top_scroll.setFrameStyle(Qt.QFrame.NoFrame)
        self.top_scroll_layout.addWidget(self.top_scroll)
        self.top_scroll.setWidgetResizable(True)
        self.top_widget = Qt.QWidget()
        self.top_scroll.setWidget(self.top_widget)
        self.top_layout = Qt.QVBoxLayout(self.top_widget)
        self.top_grid_layout = Qt.QGridLayout()
        self.top_layout.addLayout(self.top_grid_layout)

        self.settings = Qt.QSettings("GNU Radio", "bob")
        self.restoreGeometry(self.settings.value("geometry").toByteArray())

        ##################################################
        # Variables
        ##################################################
        self.samp_rate_array_MCR = samp_rate_array_MCR = [
            7500000, 5000000, 3750000, 3000000, 2500000, 2000000, 1500000,
            1000000, 937500, 882352, 833333, 714285, 533333, 500000, 421052,
            400000, 380952
        ]
        self.variable_qtgui_range_0_1 = variable_qtgui_range_0_1 = 30
        self.variable_qtgui_range_0_0 = variable_qtgui_range_0_0 = 52
        self.variable_qtgui_check_box_0 = variable_qtgui_check_box_0 = True
        self.sps = sps = 4
        self.samp_rate = samp_rate = samp_rate_array_MCR[15]
        self.frequencia_usrp = frequencia_usrp = 484e6
        self.MCR = MCR = "master_clock_rate=60e6"

        ##################################################
        # Blocks
        ##################################################
        self._variable_qtgui_range_0_1_range = Range(0, 73, 1, 30, 200)
        self._variable_qtgui_range_0_1_win = RangeWidget(
            self._variable_qtgui_range_0_1_range,
            self.set_variable_qtgui_range_0_1, 'Gain_RX', "counter_slider",
            float)
        self.top_grid_layout.addWidget(self._variable_qtgui_range_0_1_win, 0,
                                       2, 1, 1)
        for r in range(0, 1):
            self.top_grid_layout.setRowStretch(r, 1)
        for c in range(2, 3):
            self.top_grid_layout.setColumnStretch(c, 1)
        self._variable_qtgui_range_0_0_range = Range(0, 90, 1, 52, 200)
        self._variable_qtgui_range_0_0_win = RangeWidget(
            self._variable_qtgui_range_0_0_range,
            self.set_variable_qtgui_range_0_0, 'Gain_Jamming',
            "counter_slider", float)
        self.top_grid_layout.addWidget(self._variable_qtgui_range_0_0_win, 0,
                                       3, 1, 1)
        for r in range(0, 1):
            self.top_grid_layout.setRowStretch(r, 1)
        for c in range(3, 4):
            self.top_grid_layout.setColumnStretch(c, 1)
        _variable_qtgui_check_box_0_check_box = Qt.QCheckBox('ENABLE JAM')
        self._variable_qtgui_check_box_0_choices = {True: True, False: False}
        self._variable_qtgui_check_box_0_choices_inv = dict(
            (v, k)
            for k, v in self._variable_qtgui_check_box_0_choices.iteritems())
        self._variable_qtgui_check_box_0_callback = lambda i: Qt.QMetaObject.invokeMethod(
            _variable_qtgui_check_box_0_check_box, "setChecked",
            Qt.Q_ARG("bool", self._variable_qtgui_check_box_0_choices_inv[i]))
        self._variable_qtgui_check_box_0_callback(
            self.variable_qtgui_check_box_0)
        _variable_qtgui_check_box_0_check_box.stateChanged.connect(
            lambda i: self.set_variable_qtgui_check_box_0(
                self._variable_qtgui_check_box_0_choices[bool(i)]))
        self.top_grid_layout.addWidget(_variable_qtgui_check_box_0_check_box,
                                       0, 1, 1, 1)
        for r in range(0, 1):
            self.top_grid_layout.setRowStretch(r, 1)
        for c in range(1, 2):
            self.top_grid_layout.setColumnStretch(c, 1)
        self.uhd_usrp_source_0_0 = uhd.usrp_source(
            ",".join(("serial=F5EAC0", MCR)),
            uhd.stream_args(
                cpu_format="fc32",
                channels=range(1),
            ),
        )
        self.uhd_usrp_source_0_0.set_samp_rate(samp_rate)
        self.uhd_usrp_source_0_0.set_time_now(uhd.time_spec(time.time()),
                                              uhd.ALL_MBOARDS)
        self.uhd_usrp_source_0_0.set_center_freq(frequencia_usrp, 0)
        self.uhd_usrp_source_0_0.set_gain(variable_qtgui_range_0_1, 0)
        self.uhd_usrp_source_0_0.set_antenna('TX/RX', 0)
        self.uhd_usrp_source_0_0.set_auto_dc_offset(True, 0)
        self.uhd_usrp_source_0_0.set_auto_iq_balance(True, 0)
        self.uhd_usrp_sink_0 = uhd.usrp_sink(
            ",".join(("serial=F5EAC0", "")),
            uhd.stream_args(
                cpu_format="fc32",
                channels=range(1),
            ),
        )
        self.uhd_usrp_sink_0.set_subdev_spec('A:B', 0)
        self.uhd_usrp_sink_0.set_samp_rate(samp_rate)
        self.uhd_usrp_sink_0.set_time_now(uhd.time_spec(time.time()),
                                          uhd.ALL_MBOARDS)
        self.uhd_usrp_sink_0.set_center_freq(frequencia_usrp, 0)
        self.uhd_usrp_sink_0.set_gain(variable_qtgui_range_0_0, 0)
        self.uhd_usrp_sink_0.set_antenna('TX/RX', 0)
        self.qtgui_time_sink_x_1_0_0 = qtgui.time_sink_c(
            1024,  #size
            samp_rate,  #samp_rate
            "TX JAMMING USRP",  #name
            1  #number of inputs
        )
        self.qtgui_time_sink_x_1_0_0.set_update_time(0.10)
        self.qtgui_time_sink_x_1_0_0.set_y_axis(-1, 1)

        self.qtgui_time_sink_x_1_0_0.set_y_label('Amplitude', "")

        self.qtgui_time_sink_x_1_0_0.enable_tags(-1, True)
        self.qtgui_time_sink_x_1_0_0.set_trigger_mode(qtgui.TRIG_MODE_FREE,
                                                      qtgui.TRIG_SLOPE_POS,
                                                      0.0, 0, 0, "")
        self.qtgui_time_sink_x_1_0_0.enable_autoscale(False)
        self.qtgui_time_sink_x_1_0_0.enable_grid(False)
        self.qtgui_time_sink_x_1_0_0.enable_axis_labels(True)
        self.qtgui_time_sink_x_1_0_0.enable_control_panel(False)
        self.qtgui_time_sink_x_1_0_0.enable_stem_plot(False)

        if not True:
            self.qtgui_time_sink_x_1_0_0.disable_legend()

        labels = ['', '', '', '', '', '', '', '', '', '']
        widths = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
        colors = [
            "blue", "red", "green", "black", "cyan", "magenta", "yellow",
            "dark red", "dark green", "blue"
        ]
        styles = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
        markers = [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1]
        alphas = [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]

        for i in xrange(2):
            if len(labels[i]) == 0:
                if (i % 2 == 0):
                    self.qtgui_time_sink_x_1_0_0.set_line_label(
                        i, "Re{{Data {0}}}".format(i / 2))
                else:
                    self.qtgui_time_sink_x_1_0_0.set_line_label(
                        i, "Im{{Data {0}}}".format(i / 2))
            else:
                self.qtgui_time_sink_x_1_0_0.set_line_label(i, labels[i])
            self.qtgui_time_sink_x_1_0_0.set_line_width(i, widths[i])
            self.qtgui_time_sink_x_1_0_0.set_line_color(i, colors[i])
            self.qtgui_time_sink_x_1_0_0.set_line_style(i, styles[i])
            self.qtgui_time_sink_x_1_0_0.set_line_marker(i, markers[i])
            self.qtgui_time_sink_x_1_0_0.set_line_alpha(i, alphas[i])

        self._qtgui_time_sink_x_1_0_0_win = sip.wrapinstance(
            self.qtgui_time_sink_x_1_0_0.pyqwidget(), Qt.QWidget)
        self.top_grid_layout.addWidget(self._qtgui_time_sink_x_1_0_0_win, 1, 1,
                                       1, 1)
        for r in range(1, 2):
            self.top_grid_layout.setRowStretch(r, 1)
        for c in range(1, 2):
            self.top_grid_layout.setColumnStretch(c, 1)
        self.qtgui_time_sink_x_1_0 = qtgui.time_sink_c(
            1024,  #size
            samp_rate,  #samp_rate
            "RX USRP",  #name
            1  #number of inputs
        )
        self.qtgui_time_sink_x_1_0.set_update_time(0.10)
        self.qtgui_time_sink_x_1_0.set_y_axis(-1, 1)

        self.qtgui_time_sink_x_1_0.set_y_label('Amplitude', "")

        self.qtgui_time_sink_x_1_0.enable_tags(-1, True)
        self.qtgui_time_sink_x_1_0.set_trigger_mode(qtgui.TRIG_MODE_FREE,
                                                    qtgui.TRIG_SLOPE_POS, 0.0,
                                                    0, 0, "")
        self.qtgui_time_sink_x_1_0.enable_autoscale(False)
        self.qtgui_time_sink_x_1_0.enable_grid(False)
        self.qtgui_time_sink_x_1_0.enable_axis_labels(True)
        self.qtgui_time_sink_x_1_0.enable_control_panel(False)
        self.qtgui_time_sink_x_1_0.enable_stem_plot(False)

        if not True:
            self.qtgui_time_sink_x_1_0.disable_legend()

        labels = ['', '', '', '', '', '', '', '', '', '']
        widths = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
        colors = [
            "blue", "red", "green", "black", "cyan", "magenta", "yellow",
            "dark red", "dark green", "blue"
        ]
        styles = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
        markers = [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1]
        alphas = [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]

        for i in xrange(2):
            if len(labels[i]) == 0:
                if (i % 2 == 0):
                    self.qtgui_time_sink_x_1_0.set_line_label(
                        i, "Re{{Data {0}}}".format(i / 2))
                else:
                    self.qtgui_time_sink_x_1_0.set_line_label(
                        i, "Im{{Data {0}}}".format(i / 2))
            else:
                self.qtgui_time_sink_x_1_0.set_line_label(i, labels[i])
            self.qtgui_time_sink_x_1_0.set_line_width(i, widths[i])
            self.qtgui_time_sink_x_1_0.set_line_color(i, colors[i])
            self.qtgui_time_sink_x_1_0.set_line_style(i, styles[i])
            self.qtgui_time_sink_x_1_0.set_line_marker(i, markers[i])
            self.qtgui_time_sink_x_1_0.set_line_alpha(i, alphas[i])

        self._qtgui_time_sink_x_1_0_win = sip.wrapinstance(
            self.qtgui_time_sink_x_1_0.pyqwidget(), Qt.QWidget)
        self.top_grid_layout.addWidget(self._qtgui_time_sink_x_1_0_win, 1, 3,
                                       1, 1)
        for r in range(1, 2):
            self.top_grid_layout.setRowStretch(r, 1)
        for c in range(3, 4):
            self.top_grid_layout.setColumnStretch(c, 1)
        self.qtgui_time_sink_x_0_1 = qtgui.time_sink_f(
            100 * 2,  #size
            samp_rate,  #samp_rate
            'Rx Data',  #name
            1  #number of inputs
        )
        self.qtgui_time_sink_x_0_1.set_update_time(0.10)
        self.qtgui_time_sink_x_0_1.set_y_axis(-1, 256)

        self.qtgui_time_sink_x_0_1.set_y_label('Amplitude', "")

        self.qtgui_time_sink_x_0_1.enable_tags(-1, True)
        self.qtgui_time_sink_x_0_1.set_trigger_mode(qtgui.TRIG_MODE_FREE,
                                                    qtgui.TRIG_SLOPE_POS, 0.0,
                                                    0, 0,
                                                    'packet_length_tag_key')
        self.qtgui_time_sink_x_0_1.enable_autoscale(True)
        self.qtgui_time_sink_x_0_1.enable_grid(True)
        self.qtgui_time_sink_x_0_1.enable_axis_labels(True)
        self.qtgui_time_sink_x_0_1.enable_control_panel(False)
        self.qtgui_time_sink_x_0_1.enable_stem_plot(False)

        if not True:
            self.qtgui_time_sink_x_0_1.disable_legend()

        labels = ['', '', '', '', '', '', '', '', '', '']
        widths = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
        colors = [
            "blue", "red", "green", "black", "cyan", "magenta", "yellow",
            "dark red", "dark green", "blue"
        ]
        styles = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
        markers = [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1]
        alphas = [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]

        for i in xrange(1):
            if len(labels[i]) == 0:
                self.qtgui_time_sink_x_0_1.set_line_label(
                    i, "Data {0}".format(i))
            else:
                self.qtgui_time_sink_x_0_1.set_line_label(i, labels[i])
            self.qtgui_time_sink_x_0_1.set_line_width(i, widths[i])
            self.qtgui_time_sink_x_0_1.set_line_color(i, colors[i])
            self.qtgui_time_sink_x_0_1.set_line_style(i, styles[i])
            self.qtgui_time_sink_x_0_1.set_line_marker(i, markers[i])
            self.qtgui_time_sink_x_0_1.set_line_alpha(i, alphas[i])

        self._qtgui_time_sink_x_0_1_win = sip.wrapinstance(
            self.qtgui_time_sink_x_0_1.pyqwidget(), Qt.QWidget)
        self.top_grid_layout.addWidget(self._qtgui_time_sink_x_0_1_win, 2, 3,
                                       1, 1)
        for r in range(2, 3):
            self.top_grid_layout.setRowStretch(r, 1)
        for c in range(3, 4):
            self.top_grid_layout.setColumnStretch(c, 1)
        self.qtgui_freq_sink_x_1 = qtgui.freq_sink_c(
            1024,  #size
            firdes.WIN_BLACKMAN_hARRIS,  #wintype
            0,  #fc
            samp_rate,  #bw
            "",  #name
            1  #number of inputs
        )
        self.qtgui_freq_sink_x_1.set_update_time(0.10)
        self.qtgui_freq_sink_x_1.set_y_axis(-140, 10)
        self.qtgui_freq_sink_x_1.set_y_label('Relative Gain', 'dB')
        self.qtgui_freq_sink_x_1.set_trigger_mode(qtgui.TRIG_MODE_FREE, 0.0, 0,
                                                  "")
        self.qtgui_freq_sink_x_1.enable_autoscale(False)
        self.qtgui_freq_sink_x_1.enable_grid(False)
        self.qtgui_freq_sink_x_1.set_fft_average(1.0)
        self.qtgui_freq_sink_x_1.enable_axis_labels(True)
        self.qtgui_freq_sink_x_1.enable_control_panel(False)

        if not True:
            self.qtgui_freq_sink_x_1.disable_legend()

        if "complex" == "float" or "complex" == "msg_float":
            self.qtgui_freq_sink_x_1.set_plot_pos_half(not True)

        labels = ['', '', '', '', '', '', '', '', '', '']
        widths = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
        colors = [
            "blue", "red", "green", "black", "cyan", "magenta", "yellow",
            "dark red", "dark green", "dark blue"
        ]
        alphas = [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]
        for i in xrange(1):
            if len(labels[i]) == 0:
                self.qtgui_freq_sink_x_1.set_line_label(
                    i, "Data {0}".format(i))
            else:
                self.qtgui_freq_sink_x_1.set_line_label(i, labels[i])
            self.qtgui_freq_sink_x_1.set_line_width(i, widths[i])
            self.qtgui_freq_sink_x_1.set_line_color(i, colors[i])
            self.qtgui_freq_sink_x_1.set_line_alpha(i, alphas[i])

        self._qtgui_freq_sink_x_1_win = sip.wrapinstance(
            self.qtgui_freq_sink_x_1.pyqwidget(), Qt.QWidget)
        self.top_grid_layout.addWidget(self._qtgui_freq_sink_x_1_win, 1, 2, 1,
                                       1)
        for r in range(1, 2):
            self.top_grid_layout.setRowStretch(r, 1)
        for c in range(2, 3):
            self.top_grid_layout.setColumnStretch(c, 1)
        self.qtgui_const_sink_x_0_0_0_1 = qtgui.const_sink_c(
            1024,  #size
            "RX Const",  #name
            1  #number of inputs
        )
        self.qtgui_const_sink_x_0_0_0_1.set_update_time(0.10)
        self.qtgui_const_sink_x_0_0_0_1.set_y_axis(-2, 2)
        self.qtgui_const_sink_x_0_0_0_1.set_x_axis(-2, 2)
        self.qtgui_const_sink_x_0_0_0_1.set_trigger_mode(
            qtgui.TRIG_MODE_FREE, qtgui.TRIG_SLOPE_POS, 0.0, 0, "")
        self.qtgui_const_sink_x_0_0_0_1.enable_autoscale(False)
        self.qtgui_const_sink_x_0_0_0_1.enable_grid(False)
        self.qtgui_const_sink_x_0_0_0_1.enable_axis_labels(True)

        if not True:
            self.qtgui_const_sink_x_0_0_0_1.disable_legend()

        labels = ['', '', '', '', '', '', '', '', '', '']
        widths = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
        colors = [
            "blue", "red", "red", "red", "red", "red", "red", "red", "red",
            "red"
        ]
        styles = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
        markers = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
        alphas = [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]
        for i in xrange(1):
            if len(labels[i]) == 0:
                self.qtgui_const_sink_x_0_0_0_1.set_line_label(
                    i, "Data {0}".format(i))
            else:
                self.qtgui_const_sink_x_0_0_0_1.set_line_label(i, labels[i])
            self.qtgui_const_sink_x_0_0_0_1.set_line_width(i, widths[i])
            self.qtgui_const_sink_x_0_0_0_1.set_line_color(i, colors[i])
            self.qtgui_const_sink_x_0_0_0_1.set_line_style(i, styles[i])
            self.qtgui_const_sink_x_0_0_0_1.set_line_marker(i, markers[i])
            self.qtgui_const_sink_x_0_0_0_1.set_line_alpha(i, alphas[i])

        self._qtgui_const_sink_x_0_0_0_1_win = sip.wrapinstance(
            self.qtgui_const_sink_x_0_0_0_1.pyqwidget(), Qt.QWidget)
        self.top_grid_layout.addWidget(self._qtgui_const_sink_x_0_0_0_1_win, 2,
                                       1, 1, 1)
        for r in range(2, 3):
            self.top_grid_layout.setRowStretch(r, 1)
        for c in range(1, 2):
            self.top_grid_layout.setColumnStretch(c, 1)
        self.qtgui_const_sink_x_0_0_0 = qtgui.const_sink_c(
            1024,  #size
            "RX Treated",  #name
            1  #number of inputs
        )
        self.qtgui_const_sink_x_0_0_0.set_update_time(0.10)
        self.qtgui_const_sink_x_0_0_0.set_y_axis(-2, 2)
        self.qtgui_const_sink_x_0_0_0.set_x_axis(-2, 2)
        self.qtgui_const_sink_x_0_0_0.set_trigger_mode(qtgui.TRIG_MODE_FREE,
                                                       qtgui.TRIG_SLOPE_POS,
                                                       0.0, 0, "")
        self.qtgui_const_sink_x_0_0_0.enable_autoscale(False)
        self.qtgui_const_sink_x_0_0_0.enable_grid(False)
        self.qtgui_const_sink_x_0_0_0.enable_axis_labels(True)

        if not True:
            self.qtgui_const_sink_x_0_0_0.disable_legend()

        labels = ['', '', '', '', '', '', '', '', '', '']
        widths = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
        colors = [
            "blue", "red", "red", "red", "red", "red", "red", "red", "red",
            "red"
        ]
        styles = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
        markers = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
        alphas = [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]
        for i in xrange(1):
            if len(labels[i]) == 0:
                self.qtgui_const_sink_x_0_0_0.set_line_label(
                    i, "Data {0}".format(i))
            else:
                self.qtgui_const_sink_x_0_0_0.set_line_label(i, labels[i])
            self.qtgui_const_sink_x_0_0_0.set_line_width(i, widths[i])
            self.qtgui_const_sink_x_0_0_0.set_line_color(i, colors[i])
            self.qtgui_const_sink_x_0_0_0.set_line_style(i, styles[i])
            self.qtgui_const_sink_x_0_0_0.set_line_marker(i, markers[i])
            self.qtgui_const_sink_x_0_0_0.set_line_alpha(i, alphas[i])

        self._qtgui_const_sink_x_0_0_0_win = sip.wrapinstance(
            self.qtgui_const_sink_x_0_0_0.pyqwidget(), Qt.QWidget)
        self.top_grid_layout.addWidget(self._qtgui_const_sink_x_0_0_0_win, 2,
                                       2, 1, 1)
        for r in range(2, 3):
            self.top_grid_layout.setRowStretch(r, 1)
        for c in range(2, 3):
            self.top_grid_layout.setColumnStretch(c, 1)
        self.interp_fir_filter_xxx_1 = filter.interp_fir_filter_ccc(
            4, ([1, 0, 0, 0]))
        self.interp_fir_filter_xxx_1.declare_sample_delay(0)
        self.custom_corr = correlate_and_delay.corr_and_delay(
            200 * sps, 0, 0.99, sps)
        self.bob_hier = bob_hier(samp_rate=samp_rate, )
        self.blocks_null_sink_1 = blocks.null_sink(gr.sizeof_gr_complex * 1)
        self.blocks_null_sink_0 = blocks.null_sink(gr.sizeof_gr_complex * 1)
        self.blocks_multiply_const_vxx_1_0 = blocks.multiply_const_vcc((0.5, ))
        self.blocks_file_sink_0_0_0_0_2 = blocks.file_sink(
            gr.sizeof_char * 1, '/home/it/Desktop/Trasmited/depois.txt', False)
        self.blocks_file_sink_0_0_0_0_2.set_unbuffered(False)
        self.blocks_copy_0 = blocks.copy(gr.sizeof_gr_complex * 1)
        self.blocks_copy_0.set_enabled(variable_qtgui_check_box_0)
        self.blocks_char_to_float_1_0_1 = blocks.char_to_float(1, 1)
        self.analog_noise_source_x_0_0 = analog.noise_source_c(
            analog.GR_GAUSSIAN, 1, -5)
        self.adapt_lms_filter_xx_0 = adapt.lms_filter_cc(
            True, 32, 0.0001, 0, 1, True, False, False)

        ##################################################
        # Connections
        ##################################################
        self.connect((self.adapt_lms_filter_xx_0, 0),
                     (self.blocks_null_sink_0, 0))
        self.connect((self.adapt_lms_filter_xx_0, 1), (self.bob_hier, 0))
        self.connect((self.analog_noise_source_x_0_0, 0),
                     (self.interp_fir_filter_xxx_1, 0))
        self.connect((self.blocks_char_to_float_1_0_1, 0),
                     (self.qtgui_time_sink_x_0_1, 0))
        self.connect((self.blocks_copy_0, 0), (self.uhd_usrp_sink_0, 0))
        self.connect((self.blocks_multiply_const_vxx_1_0, 0),
                     (self.blocks_copy_0, 0))
        self.connect((self.blocks_multiply_const_vxx_1_0, 0),
                     (self.custom_corr, 0))
        self.connect((self.blocks_multiply_const_vxx_1_0, 0),
                     (self.qtgui_freq_sink_x_1, 0))
        self.connect((self.blocks_multiply_const_vxx_1_0, 0),
                     (self.qtgui_time_sink_x_1_0_0, 0))
        self.connect((self.bob_hier, 1), (self.blocks_char_to_float_1_0_1, 0))
        self.connect((self.bob_hier, 1), (self.blocks_file_sink_0_0_0_0_2, 0))
        self.connect((self.bob_hier, 0), (self.qtgui_const_sink_x_0_0_0, 0))
        self.connect((self.custom_corr, 0), (self.adapt_lms_filter_xx_0, 1))
        self.connect((self.custom_corr, 1), (self.adapt_lms_filter_xx_0, 0))
        self.connect((self.custom_corr, 2), (self.blocks_null_sink_1, 0))
        self.connect((self.interp_fir_filter_xxx_1, 0),
                     (self.blocks_multiply_const_vxx_1_0, 0))
        self.connect((self.uhd_usrp_source_0_0, 0), (self.custom_corr, 1))
        self.connect((self.uhd_usrp_source_0_0, 0),
                     (self.qtgui_const_sink_x_0_0_0_1, 0))
        self.connect((self.uhd_usrp_source_0_0, 0),
                     (self.qtgui_time_sink_x_1_0, 0))
Esempio n. 31
0
    def __init__(self, cal_freq=1, samp_rate=1):
        gr.top_block.__init__(self, "Top Block")
        Qt.QWidget.__init__(self)
        self.setWindowTitle("Top Block")
        try:
             self.setWindowIcon(Qt.QIcon.fromTheme('gnuradio-grc'))
        except:
             pass
        self.top_scroll_layout = Qt.QVBoxLayout()
        self.setLayout(self.top_scroll_layout)
        self.top_scroll = Qt.QScrollArea()
        self.top_scroll.setFrameStyle(Qt.QFrame.NoFrame)
        self.top_scroll_layout.addWidget(self.top_scroll)
        self.top_scroll.setWidgetResizable(True)
        self.top_widget = Qt.QWidget()
        self.top_scroll.setWidget(self.top_widget)
        self.top_layout = Qt.QVBoxLayout(self.top_widget)
        self.top_grid_layout = Qt.QGridLayout()
        self.top_layout.addLayout(self.top_grid_layout)

        self.settings = Qt.QSettings("GNU Radio", "top_block")
        self.restoreGeometry(self.settings.value("geometry").toByteArray())

        ##################################################
        # Parameters
        ##################################################
        self.cal_freq = cal_freq
        self.samp_rate = samp_rate

        ##################################################
        # Blocks
        ##################################################
        self.wifius_correct_input_0_1 = wifius.correct_input(1)
        self.wifius_correct_input_0_0 = wifius.correct_input(1)
        self.wifius_correct_input_0 = wifius.correct_input(1)
        self.delay_correct_hier_0_0_0 = delay_correct_hier(
            cal_tone_freq=cal_freq,
            mu=0.0001,
            samp_rate=samp_rate,
        )
        self.delay_correct_hier_0_0 = delay_correct_hier(
            cal_tone_freq=cal_freq,
            mu=0.0001,
            samp_rate=samp_rate,
        )
        self.delay_correct_hier_0 = delay_correct_hier(
            cal_tone_freq=cal_freq,
            mu=0.0001,
            samp_rate=samp_rate,
        )
        self.correct_gains_hier_0 = correct_gains_hier(
            cal_tone_freq=cal_freq,
            samp_rate_0=samp_rate,
        )
        self.blocks_null_sink_0 = blocks.null_sink(gr.sizeof_gr_complex*1)
        self.blocks_copy_0 = blocks.copy(gr.sizeof_gr_complex*1)
        self.blocks_copy_0.set_enabled(True)

        ##################################################
        # Connections
        ##################################################
        self.msg_connect((self.delay_correct_hier_0, 'offset'), (self.wifius_correct_input_0, 'set_delay'))    
        self.msg_connect((self.delay_correct_hier_0_0, 'offset'), (self.wifius_correct_input_0_0, 'set_delay'))    
        self.msg_connect((self.delay_correct_hier_0_0_0, 'offset'), (self.wifius_correct_input_0_1, 'set_delay'))    
        self.msg_connect((self, 'in'), (self.correct_gains_hier_0, 'Trigger'))    
        self.msg_connect((self, 'in'), (self.delay_correct_hier_0, 'enable_sync'))    
        self.msg_connect((self, 'in'), (self.delay_correct_hier_0_0, 'enable_sync'))    
        self.msg_connect((self, 'in'), (self.delay_correct_hier_0_0_0, 'enable_sync'))    
        self.connect((self.blocks_copy_0, 0), (self, 0))    
        self.connect((self.correct_gains_hier_0, 0), (self.delay_correct_hier_0, 1))    
        self.connect((self.correct_gains_hier_0, 1), (self.delay_correct_hier_0, 0))    
        self.connect((self.correct_gains_hier_0, 0), (self.delay_correct_hier_0_0, 1))    
        self.connect((self.correct_gains_hier_0, 2), (self.delay_correct_hier_0_0, 0))    
        self.connect((self.correct_gains_hier_0, 0), (self.delay_correct_hier_0_0_0, 1))    
        self.connect((self.correct_gains_hier_0, 3), (self.delay_correct_hier_0_0_0, 0))    
        self.connect((self.delay_correct_hier_0, 0), (self.blocks_null_sink_0, 0))    
        self.connect((self.delay_correct_hier_0_0, 0), (self.blocks_null_sink_0, 1))    
        self.connect((self.delay_correct_hier_0_0_0, 0), (self.blocks_null_sink_0, 2))    
        self.connect((self, 0), (self.blocks_copy_0, 0))    
        self.connect((self, 0), (self.correct_gains_hier_0, 0))    
        self.connect((self, 1), (self.correct_gains_hier_0, 1))    
        self.connect((self, 2), (self.correct_gains_hier_0, 2))    
        self.connect((self, 3), (self.correct_gains_hier_0, 3))    
        self.connect((self, 1), (self.wifius_correct_input_0, 0))    
        self.connect((self, 2), (self.wifius_correct_input_0_0, 0))    
        self.connect((self, 3), (self.wifius_correct_input_0_1, 0))    
        self.connect((self.wifius_correct_input_0, 0), (self, 1))    
        self.connect((self.wifius_correct_input_0_0, 0), (self, 2))    
        self.connect((self.wifius_correct_input_0_1, 0), (self, 3))    
Esempio n. 32
0
    def __init__(self):
        grc_wxgui.top_block_gui.__init__(self, title="Top Block")
        _icon_path = "C:\Program Files\GNURadio-3.7\share\icons\hicolor\scalable/apps\gnuradio-grc.png"
        self.SetIcon(wx.Icon(_icon_path, wx.BITMAP_TYPE_ANY))

        ##################################################
        # Variables
        ##################################################
        self.noise_volt_db = noise_volt_db = -30
        self.symb_rate = symb_rate = 10000
        self.samp_rate = samp_rate = 100000
        self.pi = pi = 3.14152
        self.noise_volt = noise_volt = math.pow(10, noise_volt_db / 20)
        self.freq_offset = freq_offset = 0
        self.error_count_decim = error_count_decim = 100000.0
        self.delay = delay = 2

        ##################################################
        # Blocks
        ##################################################
        _freq_offset_sizer = wx.BoxSizer(wx.VERTICAL)
        self._freq_offset_text_box = forms.text_box(
            parent=self.GetWin(),
            sizer=_freq_offset_sizer,
            value=self.freq_offset,
            callback=self.set_freq_offset,
            label='freq_offset',
            converter=forms.float_converter(),
            proportion=0,
        )
        self._freq_offset_slider = forms.slider(
            parent=self.GetWin(),
            sizer=_freq_offset_sizer,
            value=self.freq_offset,
            callback=self.set_freq_offset,
            minimum=0,
            maximum=0.01,
            num_steps=100,
            style=wx.SL_HORIZONTAL,
            cast=float,
            proportion=1,
        )
        self.Add(_freq_offset_sizer)
        self.wxgui_scopesink2_1 = scopesink2.scope_sink_f(
            self.GetWin(),
            title='Scope Plot',
            sample_rate=symb_rate,
            v_scale=0,
            v_offset=0,
            t_scale=0,
            ac_couple=False,
            xy_mode=False,
            num_inputs=1,
            trig_mode=wxgui.TRIG_MODE_AUTO,
            y_axis_label='Counts',
        )
        self.Add(self.wxgui_scopesink2_1.win)
        self.wxgui_scopesink2_0 = scopesink2.scope_sink_f(
            self.GetWin(),
            title='Scope Plot',
            sample_rate=samp_rate,
            v_scale=0,
            v_offset=0,
            t_scale=0,
            ac_couple=False,
            xy_mode=False,
            num_inputs=3,
            trig_mode=wxgui.TRIG_MODE_AUTO,
            y_axis_label='Counts',
        )
        self.Add(self.wxgui_scopesink2_0.win)
        _noise_volt_db_sizer = wx.BoxSizer(wx.VERTICAL)
        self._noise_volt_db_text_box = forms.text_box(
            parent=self.GetWin(),
            sizer=_noise_volt_db_sizer,
            value=self.noise_volt_db,
            callback=self.set_noise_volt_db,
            label='noise_volt_db',
            converter=forms.float_converter(),
            proportion=0,
        )
        self._noise_volt_db_slider = forms.slider(
            parent=self.GetWin(),
            sizer=_noise_volt_db_sizer,
            value=self.noise_volt_db,
            callback=self.set_noise_volt_db,
            minimum=-30,
            maximum=5,
            num_steps=35,
            style=wx.SL_HORIZONTAL,
            cast=float,
            proportion=1,
        )
        self.Add(_noise_volt_db_sizer)
        self.fsk_transm_0 = fsk_transm(
            samp_rate=samp_rate,
            symb_rate=symb_rate,
        )
        _delay_sizer = wx.BoxSizer(wx.VERTICAL)
        self._delay_text_box = forms.text_box(
            parent=self.GetWin(),
            sizer=_delay_sizer,
            value=self.delay,
            callback=self.set_delay,
            label='delay',
            converter=forms.int_converter(),
            proportion=0,
        )
        self._delay_slider = forms.slider(
            parent=self.GetWin(),
            sizer=_delay_sizer,
            value=self.delay,
            callback=self.set_delay,
            minimum=0,
            maximum=100,
            num_steps=100,
            style=wx.SL_HORIZONTAL,
            cast=int,
            proportion=1,
        )
        self.Add(_delay_sizer)
        self.channels_channel_model_0_0 = channels.channel_model(
            noise_voltage=noise_volt,
            frequency_offset=freq_offset,
            epsilon=1.0,
            taps=(1.0, ),
            noise_seed=0,
            block_tags=False)
        self.blocks_vector_source_x_0_0 = blocks.vector_source_b(
            (0, 1, 1, 1, 1, 1), True, 1, [])
        self.blocks_throttle_0 = blocks.throttle(gr.sizeof_gr_complex * 1,
                                                 samp_rate, True)
        self.blocks_copy_0 = blocks.copy(gr.sizeof_char * 1)
        self.blocks_copy_0.set_enabled(True)
        self.blocks_char_to_float_1 = blocks.char_to_float(1, 1)
        self.bfsk_rcv_0 = bfsk_rcv(
            samp_rate=samp_rate,
            symb_rate=symb_rate,
        )

        ##################################################
        # Connections
        ##################################################
        self.connect((self.bfsk_rcv_0, 3), (self.blocks_char_to_float_1, 0))
        self.connect((self.bfsk_rcv_0, 0), (self.wxgui_scopesink2_0, 0))
        self.connect((self.bfsk_rcv_0, 1), (self.wxgui_scopesink2_0, 1))
        self.connect((self.bfsk_rcv_0, 2), (self.wxgui_scopesink2_0, 2))
        self.connect((self.blocks_char_to_float_1, 0),
                     (self.wxgui_scopesink2_1, 0))
        self.connect((self.blocks_copy_0, 0), (self.fsk_transm_0, 0))
        self.connect((self.blocks_throttle_0, 0),
                     (self.channels_channel_model_0_0, 0))
        self.connect((self.blocks_vector_source_x_0_0, 0),
                     (self.blocks_copy_0, 0))
        self.connect((self.channels_channel_model_0_0, 0),
                     (self.bfsk_rcv_0, 0))
        self.connect((self.fsk_transm_0, 0), (self.blocks_throttle_0, 0))
Esempio n. 33
0
    def __init__(self, dest, debug, config, msgq_id, msg_q):

        gr.hier_block2.__init__(
            self,
            "op25_nbfm_c",
            gr.io_signature(1, 1, gr.sizeof_gr_complex),  # Input signature
            gr.io_signature(0, 0, 0))  # Output signature

        self.debug = debug
        self.config = config
        self.msgq_id = msgq_id

        sys.stderr.write("%s [%d] Enabling nbfm analog audio\n" %
                         (log_ts.get(), msgq_id))

        # load config
        input_rate = int(from_dict(config, 'if_rate', 24000))
        deviation = int(from_dict(config, 'nbfm_deviation', 4000))
        squelch = int(from_dict(config, 'nbfm_squelch_threshold', -60))
        gain = float(from_dict(config, 'nbfm_squelch_gain', 0.0015))
        subchannel_enabled = bool(
            from_dict(config, 'nbfm_enable_subchannel', False))
        raw_in = str(from_dict(config, 'nbfm_raw_input', ""))
        raw_out = str(from_dict(config, 'nbfm_raw_output', ""))

        # 'switch' enables the analog decoding to be turned on/off
        self.switch = blocks.copy(gr.sizeof_gr_complex)
        self.switch.set_enabled(False)

        # power squelch
        self.squelch = analog.simple_squelch_cc(squelch, gain)

        # quadrature demod
        fm_demod_gain = input_rate / (4 * pi * deviation)
        self.fm_demod = analog.quadrature_demod_cf(fm_demod_gain)

        # fm deemphasis
        self.deemph = analog.fm_deemph(input_rate, 0.00075)

        # decimate and filter
        audio_decim = input_rate // _PCM_RATE
        lpf_taps = filter.firdes.low_pass(
            1.0,  # gain
            input_rate,  # sampling rate
            3000.0,  # Audio high cutoff (remove aliasing)
            200.0,  # transition
            filter.firdes.WIN_HAMMING)  # filter type
        hpf_taps = filter.firdes.high_pass(
            1.0,  # gain
            _PCM_RATE,  # sampling rate
            200.0,  # Audio low cutoff  (remove sub-audio signaling)
            10.0,  # Sharp transition band
            filter.firdes.WIN_HAMMING)  # filter type
        self.lp_filter = filter.fir_filter_fff(audio_decim, lpf_taps)
        self.hp_filter = filter.fir_filter_fff(1, hpf_taps)

        # analog_udp block converts +/-1.0 float samples to S16LE PCM and sends over UDP
        self.analog_udp = op25_repeater.analog_udp(dest, debug, msgq_id, msg_q)

        # raw playback
        if raw_in != "":
            self.null_sink = blocks.null_sink(gr.sizeof_gr_complex)
            self.connect(self, self.null_sink)  # dispose of regular input
            self.raw_file = blocks.file_source(gr.sizeof_float, raw_in, False)
            self.throttle = blocks.throttle(gr.sizeof_float, input_rate)
            self.throttle.set_max_noutput_items(input_rate / 50)
            self.fm_demod = self.throttle  # and replace fm_demod with throttled file source
            self.connect(self.raw_file, self.throttle)
            sys.stderr.write("%s [%d] Reading nbfm demod from file: %s\n" %
                             (log_ts.get(), msgq_id, raw_in))

        else:
            self.connect(self, self.switch, self.squelch, self.fm_demod)

        self.connect(self.fm_demod, self.deemph, self.lp_filter,
                     self.hp_filter, self.analog_udp)

        # raw capture
        if raw_in == "" and raw_out != "":
            sys.stderr.write("%s [%d] Saving nbfm demod to file: %s\n" %
                             (log_ts.get(), msgq_id, raw_out))
            self.raw_sink = blocks.file_sink(gr.sizeof_float, raw_out)
            self.connect(self.fm_demod, self.raw_sink)

        # subchannel signaling
        if subchannel_enabled:
            self.subchannel_decimation = 25
            self.subchannel_gain = 10
            self.subchannelfilttaps = filter.firdes.low_pass(
                self.subchannel_gain, input_rate, 200, 40,
                filter.firdes.WIN_HANN)
            self.subchannelfilt = filter.fir_filter_fff(
                self.subchannel_decimation, self.subchannelfilttaps)
            self.subchannel_syms_per_sec = 150
            self.subchannel_samples_per_symbol = (
                input_rate /
                self.subchannel_decimation) / self.subchannel_syms_per_sec
            sys.stderr.write(
                "%s [%d] Subchannel samples per symbol: %f\n" %
                (log_ts.get(), msgq_id, self.subchannel_samples_per_symbol))
            self.subchannel_clockrec = digital.clock_recovery_mm_ff(
                self.subchannel_samples_per_symbol, 0.25 * 0.01 * 0.01, 0.5,
                0.01, 0.3)
            self.subchannel_slicer = digital.binary_slicer_fb()
            #self.subchannel_correlator = digital.correlate_access_code_bb("01000", 0)
            self.subchannel_framer = op25_repeater.frame_assembler(
                "subchannel", debug, msgq_id, msg_q)
            self.connect(self.fm_demod, self.subchannelfilt,
                         self.subchannel_clockrec, self.subchannel_slicer,
                         self.subchannel_framer)
Esempio n. 34
0
    def __init__(self):
        gr.top_block.__init__(self, "Top Block")
        Qt.QWidget.__init__(self)
        self.setWindowTitle("Top Block")
        try:
            self.setWindowIcon(Qt.QIcon.fromTheme('gnuradio-grc'))
        except:
            pass
        self.top_scroll_layout = Qt.QVBoxLayout()
        self.setLayout(self.top_scroll_layout)
        self.top_scroll = Qt.QScrollArea()
        self.top_scroll.setFrameStyle(Qt.QFrame.NoFrame)
        self.top_scroll_layout.addWidget(self.top_scroll)
        self.top_scroll.setWidgetResizable(True)
        self.top_widget = Qt.QWidget()
        self.top_scroll.setWidget(self.top_widget)
        self.top_layout = Qt.QVBoxLayout(self.top_widget)
        self.top_grid_layout = Qt.QGridLayout()
        self.top_layout.addLayout(self.top_grid_layout)

        self.settings = Qt.QSettings("GNU Radio", "top_block")
        self.restoreGeometry(self.settings.value("geometry").toByteArray())

        ##################################################
        # Variables
        ##################################################
        self.samp_rate = samp_rate = 15e6
        self.integration_bandwidth = integration_bandwidth = 2.5e3
        self.if_bandwidth_2 = if_bandwidth_2 = .75e6
        self.dec_rate_1 = dec_rate_1 = 5
        self.samp_rate_2 = samp_rate_2 = samp_rate / dec_rate_1
        self.num_channels = num_channels = int(if_bandwidth_2 /
                                               integration_bandwidth)
        self.samp_rate_3 = samp_rate_3 = samp_rate_2 / num_channels
        self.integration_time = integration_time = .5
        self.variable_function_probe = variable_function_probe = 0
        self.output_samp_rate = output_samp_rate = 1.0 / integration_time
        self.integration_dec_rate = integration_dec_rate = int(
            integration_time * samp_rate_3 / 2)
        self.if_bandwidth_0 = if_bandwidth_0 = 4.5e6
        self.gain = gain = 60
        self.freq = freq = 1.4204e9
        self.channel_map = channel_map = range(
            int(num_channels / 2.0 + 1.0), num_channels, 1) + range(
                0, int(num_channels / 2.0 + 1.0), 1)

        ##################################################
        # Blocks
        ##################################################
        self.probe_signal = blocks.probe_signal_vf(num_channels)
        self._gain_range = Range(0, 70, 1, 60, 200)
        self._gain_win = RangeWidget(self._gain_range, self.set_gain, "gain",
                                     "counter_slider", int)
        self.top_layout.addWidget(self._gain_win)

        def _variable_function_probe_probe():
            while True:
                val = self.probe_signal.level()
                try:
                    self.set_variable_function_probe(val)
                except AttributeError:
                    pass
                pytime.sleep(1.0 / (10))

        _variable_function_probe_thread = threading.Thread(
            target=_variable_function_probe_probe)
        _variable_function_probe_thread.daemon = True
        _variable_function_probe_thread.start()

        self.pfb_channelizer_ccf_0 = pfb.channelizer_ccf(
            num_channels,
            (firdes.low_pass(1, samp_rate_2, integration_bandwidth, 250,
                             firdes.WIN_HAMMING)), 1.0, 0)
        self.pfb_channelizer_ccf_0.set_channel_map((channel_map))
        self.pfb_channelizer_ccf_0.declare_sample_delay(0)

        self.low_pass_filter_1 = filter.fir_filter_ccf(
            dec_rate_1,
            firdes.low_pass(10, samp_rate, if_bandwidth_2, 1e5,
                            firdes.WIN_HAMMING, 6.76))
        self.limesdr_source_2 = limesdr.source('0009072C02873717', 2, 1, 0, 0,
                                               '', freq - 800e3, samp_rate, 0,
                                               1, 15e6, 0, 10e6, 3, 2, 2, 1,
                                               if_bandwidth_0, 1, 5e6, 1,
                                               if_bandwidth_0, 0, 0, gain, 30,
                                               0, 0, 0, 0)
        self.blocks_streams_to_vector_0 = blocks.streams_to_vector(
            gr.sizeof_gr_complex * 1, num_channels)
        self.blocks_multiply_xx_1 = blocks.multiply_vcc(1)
        self.blocks_integrate_xx_0_0 = blocks.integrate_ff(
            integration_dec_rate, num_channels)
        self.blocks_file_sink_0 = blocks.file_sink(
            gr.sizeof_gr_complex * 1,
            '/home/w1xm-admin/Documents/DSP/data_out/recieve_block_sink',
            False)
        self.blocks_file_sink_0.set_unbuffered(False)
        self.blocks_copy_0_0 = blocks.copy(gr.sizeof_gr_complex * 1)
        self.blocks_copy_0_0.set_enabled(False)
        self.blocks_copy_0 = blocks.copy(gr.sizeof_gr_complex * 1)
        self.blocks_copy_0.set_enabled(True)
        self.blocks_complex_to_mag_squared_0 = blocks.complex_to_mag_squared(
            num_channels)
        self.analog_sig_source_x_0 = analog.sig_source_c(
            samp_rate, analog.GR_SIN_WAVE, -800e3, 1, 0)

        ##################################################
        # Connections
        ##################################################
        self.connect((self.analog_sig_source_x_0, 0),
                     (self.blocks_multiply_xx_1, 1))
        self.connect((self.blocks_complex_to_mag_squared_0, 0),
                     (self.blocks_integrate_xx_0_0, 0))
        self.connect((self.blocks_copy_0, 0), (self.blocks_multiply_xx_1, 0))
        self.connect((self.blocks_copy_0_0, 0), (self.blocks_file_sink_0, 0))
        self.connect((self.blocks_integrate_xx_0_0, 0), (self.probe_signal, 0))
        self.connect((self.blocks_multiply_xx_1, 0),
                     (self.low_pass_filter_1, 0))
        self.connect((self.blocks_streams_to_vector_0, 0),
                     (self.blocks_complex_to_mag_squared_0, 0))
        self.connect((self.limesdr_source_2, 0), (self.blocks_copy_0, 0))
        self.connect((self.limesdr_source_2, 0), (self.blocks_copy_0_0, 0))
        self.connect((self.low_pass_filter_1, 0),
                     (self.pfb_channelizer_ccf_0, 0))

        for i in range(num_channels):
            self.connect((self.pfb_channelizer_ccf_0, i),
                         (self.blocks_streams_to_vector_0, i))
Esempio n. 35
0
    def __init__(self):
        gr.top_block.__init__(self, "Transimeter")
        Qt.QWidget.__init__(self)
        self.setWindowTitle("Transimeter")
        qtgui.util.check_set_qss()
        try:
            self.setWindowIcon(Qt.QIcon.fromTheme('gnuradio-grc'))
        except:
            pass
        self.top_scroll_layout = Qt.QVBoxLayout()
        self.setLayout(self.top_scroll_layout)
        self.top_scroll = Qt.QScrollArea()
        self.top_scroll.setFrameStyle(Qt.QFrame.NoFrame)
        self.top_scroll_layout.addWidget(self.top_scroll)
        self.top_scroll.setWidgetResizable(True)
        self.top_widget = Qt.QWidget()
        self.top_scroll.setWidget(self.top_widget)
        self.top_layout = Qt.QVBoxLayout(self.top_widget)
        self.top_grid_layout = Qt.QGridLayout()
        self.top_layout.addLayout(self.top_grid_layout)

        self.settings = Qt.QSettings("GNU Radio", "transimeter")
        self.restoreGeometry(self.settings.value("geometry").toByteArray())

        ##################################################
        # Variables
        ##################################################
        # self.home_dir = pjoin(os.path.expanduser("~"), ".uhd_ui")
        self.home_dir = pjoin(os.getcwd(), ".uhd_ui")
        if not os.path.exists(self.home_dir):
            os.makedirs(self.home_dir)

        self.config_path = pjoin(self.home_dir, "config.json")
        self.config_keys = [
            'center_freq', 'samp_rate', 'tran_address_h', 'rf_gain_tran',
            "tran_kind", 'tran_model', 'tran_address_u', 'stop_len',
            'if_gain_tran', 'tran_data_path_modulated',
            'tran_data_path_unmodulated', 'bb_gain_tran'
        ]
        self.CONFIG = {}
        if not os.path.exists(self.config_path):
            # 初始化CONFIG,方便保存数据
            for key in self.config_keys:
                self.CONFIG[key] = _config[key]
            self.save_config()
        else:
            with open(self.config_path, "r") as f:
                self.CONFIG = json.load(f)
                for key in self.config_keys:
                    if key not in self.CONFIG:
                        self.CONFIG[key] = _config[key]
        self.rf_gain_tran = self.CONFIG["rf_gain_tran"]
        self.if_gain_tran = self.CONFIG["if_gain_tran"]
        self.bb_gain_tran = self.CONFIG["bb_gain_tran"]
        self.tran_kind = self.CONFIG["tran_kind"].encode('gbk')
        self.tran_address_u = self.CONFIG["tran_address_u"].encode('gbk')
        self.tran_address_h = self.CONFIG["tran_address_h"].encode('gbk')
        self.stop_len = self.CONFIG["stop_len"]
        self.tran_model = self.CONFIG["tran_model"].encode('gbk')
        self.tran_data_path_unmodulated = self.CONFIG[
            "tran_data_path_unmodulated"].encode('gbk')
        self.tran_data_path_modulated = self.CONFIG[
            "tran_data_path_modulated"].encode('gbk')

        self.center_freq = self.CONFIG["center_freq"]
        self.samp_rate = self.CONFIG["samp_rate"]

        self.add_SNR_value = add_SNR_value = 20.0
        self.trans_test = trans_test = False
        self.Add_SNR = Add_SNR = False
        self.volume = volume = 1

        ##################################################
        # Blocks
        ##################################################
        _trans_test_check_box = Qt.QCheckBox(u"发射信号")
        self._trans_test_choices = {True: True, False: False}
        self._trans_test_choices_inv = dict(
            (v, k) for k, v in self._trans_test_choices.iteritems())
        self._trans_test_callback = lambda i: Qt.QMetaObject.invokeMethod(
            _trans_test_check_box, "setChecked",
            Qt.Q_ARG("bool", self._trans_test_choices_inv[i]))
        self._trans_test_callback(self.trans_test)
        _trans_test_check_box.stateChanged.connect(
            lambda i: self.set_trans_test(self._trans_test_choices[bool(i)]))
        self.top_grid_layout.addWidget(_trans_test_check_box, 3, 0, 1, 1)

        self._tran_model_options = (
            'gmsk',
            'bpsk',
            'qpsk',
            '8psk',
            'qam8',
            'qam16',
            'qam64',
            'others',
        )
        self._tran_model_labels = (str(self._tran_model_options[0]),
                                   str(self._tran_model_options[1]),
                                   str(self._tran_model_options[2]),
                                   str(self._tran_model_options[3]),
                                   str(self._tran_model_options[4]),
                                   str(self._tran_model_options[5]),
                                   str(self._tran_model_options[6]),
                                   str(self._tran_model_options[7]))
        self._tran_model_tool_bar = Qt.QToolBar(self)
        self._tran_model_tool_bar.addWidget(Qt.QLabel(u"调制方式" + ": "))
        self._tran_model_combo_box = Qt.QComboBox()
        self._tran_model_tool_bar.addWidget(self._tran_model_combo_box)
        for label in self._tran_model_labels:
            self._tran_model_combo_box.addItem(label)
        self._tran_model_callback = lambda i: Qt.QMetaObject.invokeMethod(
            self._tran_model_combo_box, "setCurrentIndex",
            Qt.Q_ARG("int", self._tran_model_options.index(i)))
        self._tran_model_callback(self.tran_model)
        self._tran_model_combo_box.currentIndexChanged.connect(
            lambda i: self.set_tran_model(self._tran_model_options[i]))
        self.top_grid_layout.addWidget(self._tran_model_tool_bar, 1, 0, 1, 1)

        self._tran_kind_options = (
            'hackrf',
            'usrp',
        )
        self._tran_kind_labels = (
            str(self._tran_kind_options[0]),
            str(self._tran_kind_options[1]),
        )
        self._tran_kind_tool_bar = Qt.QToolBar(self)
        self._tran_kind_tool_bar.addWidget(Qt.QLabel(u"发射机种类" + ": "))
        self._tran_kind_combo_box = Qt.QComboBox()
        self._tran_kind_tool_bar.addWidget(self._tran_kind_combo_box)
        for label in self._tran_kind_labels:
            self._tran_kind_combo_box.addItem(label)
        self._tran_kind_callback = lambda i: Qt.QMetaObject.invokeMethod(
            self._tran_kind_combo_box, "setCurrentIndex",
            Qt.Q_ARG("int", self._tran_kind_options.index(i)))
        self._tran_kind_callback(self.tran_kind)
        self._tran_kind_combo_box.currentIndexChanged.connect(
            lambda i: self.set_tran_kind(self._tran_kind_options[i]))
        self.top_grid_layout.addWidget(self._tran_kind_tool_bar, 2, 6, 1, 1)

        self._tran_address_tool_bar = Qt.QToolBar(self)
        self._tran_address_tool_bar.addWidget(Qt.QLabel(u"发射机地址" + ": "))
        if self.tran_kind == 'usrp':
            self._tran_address_line_edit = Qt.QLineEdit(
                str(self.tran_address_u))
        else:
            self._tran_address_line_edit = Qt.QLineEdit(
                str(self.tran_address_h))
        self._tran_address_tool_bar.addWidget(self._tran_address_line_edit)
        self._tran_address_line_edit.returnPressed.connect(
            lambda: self.set_tran_address(
                str(self._tran_address_line_edit.text().toAscii())))
        self.top_grid_layout.addWidget(self._tran_address_tool_bar, 2, 7, 1, 1)

        self._center_freq_tool_bar = Qt.QToolBar(self)
        self._center_freq_tool_bar.addWidget(Qt.QLabel(u"载频" + ": "))
        self._center_freq_line_edit = Qt.QLineEdit(
            eng_notation.num_to_str(self.center_freq))
        self._center_freq_tool_bar.addWidget(self._center_freq_line_edit)
        self._center_freq_line_edit.returnPressed.connect(
            lambda: self.set_center_freq(
                eng_notation.str_to_num(
                    str(self._center_freq_line_edit.text().toAscii()))))
        self.top_grid_layout.addWidget(self._center_freq_tool_bar, 2, 0, 1, 1)

        self._samp_rate_tool_bar = Qt.QToolBar(self)
        self._samp_rate_tool_bar.addWidget(Qt.QLabel(u"采样率" + ": "))
        self._samp_rate_line_edit = Qt.QLineEdit(
            eng_notation.num_to_str(self.samp_rate))
        self._samp_rate_tool_bar.addWidget(self._samp_rate_line_edit)
        self._samp_rate_line_edit.returnPressed.connect(
            lambda: self.set_samp_rate(
                eng_notation.str_to_num(
                    str(self._samp_rate_line_edit.text().toAscii()))))
        self.top_grid_layout.addWidget(self._samp_rate_tool_bar, 3, 6, 1, 1)

        self._stop_len_tool_bar = Qt.QToolBar(self)
        self._stop_len_tool_bar.addWidget(Qt.QLabel(u"发射机方波长度" + ": "))
        self._stop_len_line_edit = Qt.QLineEdit(
            eng_notation.num_to_str(self.stop_len))
        self._stop_len_tool_bar.addWidget(self._stop_len_line_edit)
        self._stop_len_line_edit.returnPressed.connect(
            lambda: self.set_stop_len(
                eng_notation.str_to_num(
                    str(self._stop_len_line_edit.text().toAscii()))))
        self.top_grid_layout.addWidget(self._stop_len_tool_bar, 3, 2, 1, 1)

        self._rf_gain_tran_range = Range(-50, 100, 1, self.rf_gain_tran, 200)
        self._rf_gain_tran_win = RangeWidget(self._rf_gain_tran_range,
                                             self.set_rf_gain_tran, u"发射机增益",
                                             "counter_slider", float)
        self.top_grid_layout.addWidget(self._rf_gain_tran_win, 4, 0, 1, 3)

        self._if_gain_tran_range = Range(-50, 100, 1, self.if_gain_tran, 200)
        self._if_gain_tran_win = RangeWidget(self._if_gain_tran_range,
                                             self.set_if_gain_tran,
                                             u"发射机if增益(仅对hackrf有效)",
                                             "counter_slider", float)
        self.top_grid_layout.addWidget(self._if_gain_tran_win, 4, 3, 1, 3)

        self._bb_gain_tran_range = Range(-50, 100, 1, self.bb_gain_tran, 200)
        self._bb_gain_tran_win = RangeWidget(self._bb_gain_tran_range,
                                             self.set_bb_gain_tran,
                                             u"发射机bb增益(仅对hackrf有效)",
                                             "counter_slider", float)
        self.top_grid_layout.addWidget(self._bb_gain_tran_win, 4, 6, 1, 3)

        _Add_SNR_check_box = Qt.QCheckBox(u'额外信噪比')
        self._Add_SNR_choices = {True: True, False: False}
        self._Add_SNR_choices_inv = dict(
            (v, k) for k, v in self._Add_SNR_choices.iteritems())
        self._Add_SNR_callback = lambda i: Qt.QMetaObject.invokeMethod(
            _Add_SNR_check_box, "setChecked",
            Qt.Q_ARG("bool", self._Add_SNR_choices_inv[i]))
        self._Add_SNR_callback(self.Add_SNR)
        _Add_SNR_check_box.stateChanged.connect(
            lambda i: self.set_Add_SNR(self._Add_SNR_choices[bool(i)]))
        self.top_grid_layout.addWidget(_Add_SNR_check_box, 3, 3, 1, 1)

        self._add_SNR_value_tool_bar = Qt.QToolBar(self)
        self._add_SNR_value_line_edit = Qt.QLineEdit(
            eng_notation.num_to_str(self.add_SNR_value))
        self._add_SNR_value_tool_bar.addWidget(self._add_SNR_value_line_edit)
        self._add_SNR_value_line_edit.returnPressed.connect(
            lambda: self.set_add_SNR_value(
                eng_notation.str_to_num(
                    str(self._add_SNR_value_line_edit.text().toAscii()))))
        self.top_grid_layout.addWidget(self._add_SNR_value_tool_bar, 3, 5, 1,
                                       1)

        self.textBrowser = Qt.QTextBrowser()
        self.textBrowser.setObjectName(u"当前状态")
        self.top_grid_layout.addWidget(self.textBrowser, 5, 3, 1, 3)

        ##################################################
        # transimeter
        ##################################################
        _wave_nums = 10
        wave_width = _wave_nums * MS  # 50ms
        gui_update_time_interval = 1.0  # _wave_nums/200
        self.qtgui_time_sink_x_1_0 = qtgui.time_sink_c(
            wave_width,  #size
            self.samp_rate,  #samp_rate
            "trans_time",  #name
            1  #number of inputs
        )
        self.qtgui_time_sink_x_1_0.set_update_time(gui_update_time_interval)
        self.qtgui_time_sink_x_1_0.set_y_axis(-1, 1)

        self.qtgui_time_sink_x_1_0.set_y_label('Amplitude', "")

        self.qtgui_time_sink_x_1_0.enable_tags(-1, True)
        self.qtgui_time_sink_x_1_0.set_trigger_mode(qtgui.TRIG_MODE_FREE,
                                                    qtgui.TRIG_SLOPE_POS, 0.0,
                                                    0, 0, "")
        self.qtgui_time_sink_x_1_0.enable_autoscale(True)
        self.qtgui_time_sink_x_1_0.enable_grid(False)
        self.qtgui_time_sink_x_1_0.enable_axis_labels(True)
        self.qtgui_time_sink_x_1_0.enable_control_panel(False)
        self.qtgui_time_sink_x_1_0.enable_stem_plot(False)

        if not True:
            self.qtgui_time_sink_x_1_0.disable_legend()

        labels = ['', '', '', '', '', '', '', '', '', '']
        widths = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
        colors = [
            "blue", "red", "green", "black", "cyan", "magenta", "yellow",
            "dark red", "dark green", "blue"
        ]
        styles = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
        markers = [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1]
        alphas = [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]

        for i in xrange(2):
            if len(labels[i]) == 0:
                if (i % 2 == 0):
                    self.qtgui_time_sink_x_1_0.set_line_label(
                        i, "Re{{Data {0}}}".format(i / 2))
                else:
                    self.qtgui_time_sink_x_1_0.set_line_label(
                        i, "Im{{Data {0}}}".format(i / 2))
            else:
                self.qtgui_time_sink_x_1_0.set_line_label(i, labels[i])
            self.qtgui_time_sink_x_1_0.set_line_width(i, widths[i])
            self.qtgui_time_sink_x_1_0.set_line_color(i, colors[i])
            self.qtgui_time_sink_x_1_0.set_line_style(i, styles[i])
            self.qtgui_time_sink_x_1_0.set_line_marker(i, markers[i])
            self.qtgui_time_sink_x_1_0.set_line_alpha(i, alphas[i])

        self._qtgui_time_sink_x_1_0_win = sip.wrapinstance(
            self.qtgui_time_sink_x_1_0.pyqwidget(), Qt.QWidget)
        self.top_grid_layout.addWidget(self._qtgui_time_sink_x_1_0_win, 5, 0,
                                       1, 3)
        self.qtgui_freq_sink_x_1_0 = qtgui.freq_sink_c(
            1024,  #size
            firdes.WIN_BLACKMAN_hARRIS,  #wintype
            self.center_freq,  #fc
            self.samp_rate,  #bw
            "trans_fre",  #name
            1  #number of inputs
        )
        self.qtgui_freq_sink_x_1_0.set_update_time(0.10)
        self.qtgui_freq_sink_x_1_0.set_y_axis(-140, 10)
        self.qtgui_freq_sink_x_1_0.set_y_label('Relative Gain', 'dB')
        self.qtgui_freq_sink_x_1_0.set_trigger_mode(qtgui.TRIG_MODE_FREE, 0.0,
                                                    0, "")
        self.qtgui_freq_sink_x_1_0.enable_autoscale(False)
        self.qtgui_freq_sink_x_1_0.enable_grid(False)
        self.qtgui_freq_sink_x_1_0.set_fft_average(1.0)
        self.qtgui_freq_sink_x_1_0.enable_axis_labels(True)
        self.qtgui_freq_sink_x_1_0.enable_control_panel(False)

        if not True:
            self.qtgui_freq_sink_x_1_0.disable_legend()

        if "complex" == "float" or "complex" == "msg_float":
            self.qtgui_freq_sink_x_1_0.set_plot_pos_half(not True)

        labels = ['', '', '', '', '', '', '', '', '', '']
        widths = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
        colors = [
            "blue", "red", "green", "black", "cyan", "magenta", "yellow",
            "dark red", "dark green", "dark blue"
        ]
        alphas = [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]
        for i in xrange(1):
            if len(labels[i]) == 0:
                self.qtgui_freq_sink_x_1_0.set_line_label(
                    i, "Data {0}".format(i))
            else:
                self.qtgui_freq_sink_x_1_0.set_line_label(i, labels[i])
            self.qtgui_freq_sink_x_1_0.set_line_width(i, widths[i])
            self.qtgui_freq_sink_x_1_0.set_line_color(i, colors[i])
            self.qtgui_freq_sink_x_1_0.set_line_alpha(i, alphas[i])

        self._qtgui_freq_sink_x_1_0_win = sip.wrapinstance(
            self.qtgui_freq_sink_x_1_0.pyqwidget(), Qt.QWidget)
        self.top_grid_layout.addWidget(self._qtgui_freq_sink_x_1_0_win, 5, 6,
                                       1, 3)

        if self.tran_kind == 'usrp':
            self.uhd_usrp_sink_0 = uhd.usrp_sink(
                ",".join((self.tran_address_u, self.tran_address_u)),
                uhd.stream_args(
                    cpu_format="fc32",
                    channels=range(1),
                ),
            )
            self.uhd_usrp_sink_0.set_samp_rate(self.samp_rate)
            self.uhd_usrp_sink_0.set_time_now(uhd.time_spec(time.time()),
                                              uhd.ALL_MBOARDS)
            self.uhd_usrp_sink_0.set_center_freq(self.center_freq, 0)
            self.uhd_usrp_sink_0.set_gain(self.rf_gain_tran, 0)
            self.uhd_usrp_sink_0.set_antenna('TX/RX', 0)
        else:
            self.osmosdr_sink_0 = osmosdr.sink(args="numchan=" + str(1) + " " +
                                               self.tran_address_h)
            self.osmosdr_sink_0.set_sample_rate(self.samp_rate)
            self.osmosdr_sink_0.set_time_now(osmosdr.time_spec_t(time.time()),
                                             osmosdr.ALL_MBOARDS)
            self.osmosdr_sink_0.set_freq_corr(0, 0)
            self.osmosdr_sink_0.set_center_freq(self.center_freq, 0)
            self.osmosdr_sink_0.set_gain(self.rf_gain_tran, 0)
            self.osmosdr_sink_0.set_if_gain(self.if_gain_tran, 0)
            self.osmosdr_sink_0.set_bb_gain(self.bb_gain_tran, 0)
            self.osmosdr_sink_0.set_antenna('', 0)
            self.osmosdr_sink_0.set_bandwidth(0, 0)

        if self.tran_model in ['bpsk', 'gmsk']:
            constellation_points_use = 2
            bits_per_symbol_use = 1
        elif self.tran_model in ['qpsk']:
            constellation_points_use = 4
            bits_per_symbol_use = 2
        elif self.tran_model in ['8psk', 'qam8']:
            constellation_points_use = 8
            bits_per_symbol_use = 3
        elif self.tran_model in ['qam16']:
            constellation_points_use = 16
            bits_per_symbol_use = 4
        elif self.tran_model in ['qam64']:
            constellation_points_use = 64
            bits_per_symbol_use = 6
        elif self.tran_model in ['others']:
            pass
        else:
            constellation_points_use = 1
            bits_per_symbol_use = 1
            self.textBrowser.append(u'所选调制类型暂不支持')

        if self.tran_model == 'gmsk':
            self.digital_gmsk_mod_0 = digital.gmsk_mod(
                samples_per_symbol=2,
                bt=0.35,
                verbose=False,
                log=False,
            )
        elif self.tran_model in [
                'bpsk',
                'qpsk',
                '8psk',
                'qam8',
                'qam16',
                'qam64',
        ]:
            self.digital_psk_mod_0 = digital.psk.psk_mod(
                constellation_points=constellation_points_use,
                mod_code="gray",
                differential=True,
                samples_per_symbol=2,
                excess_bw=0.35,
                verbose=False,
                log=False,
            )
        else:
            pass

        if self.tran_model in [
                'gmsk',
                'bpsk',
                'qpsk',
                '8psk',
                'qam8',
                'qam16',
                'qam64',
        ]:
            self.blocks_file_source_0 = blocks.file_source(
                gr.sizeof_char * 1, self.tran_data_path_unmodulated, True)
            self.blocks_file_source_0.set_begin_tag(pmt.PMT_NIL)
        else:
            self.blocks_file_source_0 = blocks.file_source(
                gr.sizeof_gr_complex * 1, self.tran_data_path_modulated, True)
            self.blocks_file_source_0.set_begin_tag(pmt.PMT_NIL)

        self.blocks_copy_0 = blocks.copy(gr.sizeof_gr_complex * 1)
        self.blocks_copy_0.set_enabled(False)

        if self.tran_model in [
                'gmsk',
                'bpsk',
                'qpsk',
                '8psk',
                'qam8',
                'qam16',
                'qam64',
        ]:
            self.blks2_packet_encoder_0 = grc_blks2.packet_mod_b(
                grc_blks2.packet_encoder(
                    samples_per_symbol=8,
                    bits_per_symbol=bits_per_symbol_use,
                    preamble='',
                    access_code='',
                    pad_for_usrp=False,
                ),
                payload_length=200,
            )

            self.analog_sig_source_x_0 = analog.sig_source_c(
                self.samp_rate, analog.GR_SQR_WAVE,
                self.samp_rate / self.stop_len, 1, 0)

            self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
            self.blocks_multiply_xx_1 = blocks.multiply_vcc(1)
            self.blocks_throttle_0 = blocks.throttle(gr.sizeof_char * 1,
                                                     self.samp_rate, True)
        else:
            self.blocks_throttle_0 = blocks.throttle(gr.sizeof_gr_complex * 1,
                                                     self.samp_rate, True)
            self.blocks_multiply_xx_1 = blocks.multiply_vcc(1)

        self.analog_noise_source_x_0 = analog.noise_source_c(
            analog.GR_GAUSSIAN, 0, 0)

        self.blocks_add_xx_0 = blocks.add_vcc(1)

        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc(
            (self.volume, ))

        ##################################################
        # Connections
        ##################################################
        # tran
        self.connect((self.blocks_add_xx_0, 0),
                     (self.blocks_multiply_const_vxx_0, 0))
        self.connect((self.blocks_multiply_const_vxx_0, 0),
                     (self.blocks_copy_0, 0))
        self.connect((self.blocks_copy_0, 0), (self.qtgui_freq_sink_x_1_0, 0))
        self.connect((self.blocks_copy_0, 0), (self.qtgui_time_sink_x_1_0, 0))
        if self.tran_model in [
                'gmsk',
                'bpsk',
                'qpsk',
                '8psk',
                'qam8',
                'qam16',
                'qam64',
        ]:
            self.connect((self.blocks_file_source_0, 0),
                         (self.blocks_throttle_0, 0))
            self.connect((self.blocks_throttle_0, 0),
                         (self.blks2_packet_encoder_0, 0))
            self.connect((self.analog_sig_source_x_0, 0),
                         (self.blocks_multiply_xx_0, 1))
            self.connect((self.blocks_multiply_xx_0, 0),
                         (self.blocks_add_xx_0, 1))
            self.connect((self.analog_noise_source_x_0, 0),
                         (self.blocks_multiply_xx_1, 1))
            self.connect((self.blocks_multiply_xx_0, 0),
                         (self.blocks_multiply_xx_1, 0))
            self.connect((self.blocks_multiply_xx_1, 0),
                         (self.blocks_add_xx_0, 0))
            if self.tran_model == 'gmsk':
                self.connect((self.digital_gmsk_mod_0, 0),
                             (self.blocks_multiply_xx_0, 0))
                self.connect((self.blks2_packet_encoder_0, 0),
                             (self.digital_gmsk_mod_0, 0))
            else:
                self.connect((self.digital_psk_mod_0, 0),
                             (self.blocks_multiply_xx_0, 0))
                self.connect((self.blks2_packet_encoder_0, 0),
                             (self.digital_psk_mod_0, 0))
        else:
            self.connect((self.blocks_file_source_0, 0),
                         (self.blocks_throttle_0, 0))
            self.connect((self.blocks_throttle_0, 0),
                         (self.blocks_add_xx_0, 1))
            self.connect((self.analog_noise_source_x_0, 0),
                         (self.blocks_multiply_xx_1, 1))
            self.connect((self.blocks_throttle_0, 0),
                         (self.blocks_multiply_xx_1, 0))
            self.connect((self.blocks_multiply_xx_1, 0),
                         (self.blocks_add_xx_0, 0))

        if self.tran_kind == 'usrp':
            self.connect((self.blocks_copy_0, 0), (self.uhd_usrp_sink_0, 0))
        else:
            self.connect((self.blocks_copy_0, 0), (self.osmosdr_sink_0, 0))
Esempio n. 36
0
    def __init__(self, puncpat='11'):
        gr.top_block.__init__(self, "Rx")
        Qt.QWidget.__init__(self)
        self.setWindowTitle("Rx")
        qtgui.util.check_set_qss()
        try:
            self.setWindowIcon(Qt.QIcon.fromTheme('gnuradio-grc'))
        except:
            pass
        self.top_scroll_layout = Qt.QVBoxLayout()
        self.setLayout(self.top_scroll_layout)
        self.top_scroll = Qt.QScrollArea()
        self.top_scroll.setFrameStyle(Qt.QFrame.NoFrame)
        self.top_scroll_layout.addWidget(self.top_scroll)
        self.top_scroll.setWidgetResizable(True)
        self.top_widget = Qt.QWidget()
        self.top_scroll.setWidget(self.top_widget)
        self.top_layout = Qt.QVBoxLayout(self.top_widget)
        self.top_grid_layout = Qt.QGridLayout()
        self.top_layout.addLayout(self.top_grid_layout)

        self.settings = Qt.QSettings("GNU Radio", "rx")
        self.restoreGeometry(self.settings.value("geometry").toByteArray())

        ##################################################
        # Parameters
        ##################################################
        self.puncpat = puncpat

        ##################################################
        # Variables
        ##################################################
        self.sps = sps = 4
        self.samp_rate_array_MCR = samp_rate_array_MCR = [
            7500000, 5000000, 3750000, 3000000, 2500000, 2000000, 1500000,
            1000000, 937500, 882352, 833333, 714285, 533333, 500000, 421052,
            400000, 380952
        ]
        self.nfilts = nfilts = 32
        self.eb = eb = 0.22
        self.H_dec = H_dec = fec.ldpc_H_matrix(
            '/usr/local/share/gnuradio/fec/ldpc/n_1100_k_0442_gap_24.alist',
            24)
        self.variable_qtgui_range_0_1 = variable_qtgui_range_0_1 = 30
        self.variable_qtgui_range_0_0 = variable_qtgui_range_0_0 = 52
        self.variable_qtgui_check_box_0 = variable_qtgui_check_box_0 = True
        self.samp_rate = samp_rate = samp_rate_array_MCR[15]

        self.rx_rrc_taps = rx_rrc_taps = firdes.root_raised_cosine(
            nfilts, nfilts * sps, 1.0, eb, 11 * sps * nfilts)

        self.pld_dec = pld_dec = map((lambda a: fec.ldpc_bit_flip_decoder.make(
            H_dec.get_base_sptr(), 100)), range(0, 8))
        self.pld_const = pld_const = digital.constellation_rect(([
            0.707 + 0.707j, -0.707 + 0.707j, -0.707 - 0.707j, 0.707 - 0.707j
        ]), ([0, 1, 2, 3]), 4, 2, 2, 1, 1).base()
        self.pld_const.gen_soft_dec_lut(8)
        self.frequencia_usrp = frequencia_usrp = 484e6
        self.MCR = MCR = "master_clock_rate=60e6"

        ##################################################
        # Blocks
        ##################################################
        self._variable_qtgui_range_0_1_range = Range(0, 73, 1, 30, 200)
        self._variable_qtgui_range_0_1_win = RangeWidget(
            self._variable_qtgui_range_0_1_range,
            self.set_variable_qtgui_range_0_1, 'Gain_RX', "counter_slider",
            float)
        self.top_grid_layout.addWidget(self._variable_qtgui_range_0_1_win, 0,
                                       2, 1, 1)
        for r in range(0, 1):
            self.top_grid_layout.setRowStretch(r, 1)
        for c in range(2, 3):
            self.top_grid_layout.setColumnStretch(c, 1)
        self._variable_qtgui_range_0_0_range = Range(0, 90, 1, 52, 200)
        self._variable_qtgui_range_0_0_win = RangeWidget(
            self._variable_qtgui_range_0_0_range,
            self.set_variable_qtgui_range_0_0, 'Gain_Jamming',
            "counter_slider", float)
        self.top_grid_layout.addWidget(self._variable_qtgui_range_0_0_win, 0,
                                       3, 1, 1)
        for r in range(0, 1):
            self.top_grid_layout.setRowStretch(r, 1)
        for c in range(3, 4):
            self.top_grid_layout.setColumnStretch(c, 1)
        _variable_qtgui_check_box_0_check_box = Qt.QCheckBox('ENABLE JAM')
        self._variable_qtgui_check_box_0_choices = {True: True, False: False}
        self._variable_qtgui_check_box_0_choices_inv = dict(
            (v, k)
            for k, v in self._variable_qtgui_check_box_0_choices.iteritems())
        self._variable_qtgui_check_box_0_callback = lambda i: Qt.QMetaObject.invokeMethod(
            _variable_qtgui_check_box_0_check_box, "setChecked",
            Qt.Q_ARG("bool", self._variable_qtgui_check_box_0_choices_inv[i]))
        self._variable_qtgui_check_box_0_callback(
            self.variable_qtgui_check_box_0)
        _variable_qtgui_check_box_0_check_box.stateChanged.connect(
            lambda i: self.set_variable_qtgui_check_box_0(
                self._variable_qtgui_check_box_0_choices[bool(i)]))
        self.top_grid_layout.addWidget(_variable_qtgui_check_box_0_check_box,
                                       0, 1, 1, 1)
        for r in range(0, 1):
            self.top_grid_layout.setRowStretch(r, 1)
        for c in range(1, 2):
            self.top_grid_layout.setColumnStretch(c, 1)
        self.uhd_usrp_source_0_0 = uhd.usrp_source(
            ",".join(("serial=F5EAC0", MCR)),
            uhd.stream_args(
                cpu_format="fc32",
                channels=range(1),
            ),
        )
        self.uhd_usrp_source_0_0.set_samp_rate(samp_rate)
        self.uhd_usrp_source_0_0.set_time_now(uhd.time_spec(time.time()),
                                              uhd.ALL_MBOARDS)
        self.uhd_usrp_source_0_0.set_center_freq(frequencia_usrp, 0)
        self.uhd_usrp_source_0_0.set_gain(variable_qtgui_range_0_1, 0)
        self.uhd_usrp_source_0_0.set_antenna('TX/RX', 0)
        self.uhd_usrp_source_0_0.set_auto_dc_offset(True, 0)
        self.uhd_usrp_source_0_0.set_auto_iq_balance(True, 0)
        self.uhd_usrp_sink_0 = uhd.usrp_sink(
            ",".join(("serial=F5EAC0", "")),
            uhd.stream_args(
                cpu_format="fc32",
                channels=range(1),
            ),
        )
        self.uhd_usrp_sink_0.set_subdev_spec('A:B', 0)
        self.uhd_usrp_sink_0.set_samp_rate(samp_rate)
        self.uhd_usrp_sink_0.set_time_now(uhd.time_spec(time.time()),
                                          uhd.ALL_MBOARDS)
        self.uhd_usrp_sink_0.set_center_freq(frequencia_usrp, 0)
        self.uhd_usrp_sink_0.set_gain(variable_qtgui_range_0_0, 0)
        self.uhd_usrp_sink_0.set_antenna('TX/RX', 0)
        self.scrambler_cpp_additive_descrambler_0 = scrambler_cpp.additive_descrambler(
            0x8A, 0x7F, 7, 440 - 32)
        self.qtgui_time_sink_x_1_0_0 = qtgui.time_sink_c(
            1024,  #size
            samp_rate,  #samp_rate
            "TX JAMMING USRP",  #name
            1  #number of inputs
        )
        self.qtgui_time_sink_x_1_0_0.set_update_time(0.10)
        self.qtgui_time_sink_x_1_0_0.set_y_axis(-1, 1)

        self.qtgui_time_sink_x_1_0_0.set_y_label('Amplitude', "")

        self.qtgui_time_sink_x_1_0_0.enable_tags(-1, True)
        self.qtgui_time_sink_x_1_0_0.set_trigger_mode(qtgui.TRIG_MODE_FREE,
                                                      qtgui.TRIG_SLOPE_POS,
                                                      0.0, 0, 0, "")
        self.qtgui_time_sink_x_1_0_0.enable_autoscale(False)
        self.qtgui_time_sink_x_1_0_0.enable_grid(False)
        self.qtgui_time_sink_x_1_0_0.enable_axis_labels(True)
        self.qtgui_time_sink_x_1_0_0.enable_control_panel(False)
        self.qtgui_time_sink_x_1_0_0.enable_stem_plot(False)

        if not True:
            self.qtgui_time_sink_x_1_0_0.disable_legend()

        labels = ['', '', '', '', '', '', '', '', '', '']
        widths = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
        colors = [
            "blue", "red", "green", "black", "cyan", "magenta", "yellow",
            "dark red", "dark green", "blue"
        ]
        styles = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
        markers = [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1]
        alphas = [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]

        for i in xrange(2):
            if len(labels[i]) == 0:
                if (i % 2 == 0):
                    self.qtgui_time_sink_x_1_0_0.set_line_label(
                        i, "Re{{Data {0}}}".format(i / 2))
                else:
                    self.qtgui_time_sink_x_1_0_0.set_line_label(
                        i, "Im{{Data {0}}}".format(i / 2))
            else:
                self.qtgui_time_sink_x_1_0_0.set_line_label(i, labels[i])
            self.qtgui_time_sink_x_1_0_0.set_line_width(i, widths[i])
            self.qtgui_time_sink_x_1_0_0.set_line_color(i, colors[i])
            self.qtgui_time_sink_x_1_0_0.set_line_style(i, styles[i])
            self.qtgui_time_sink_x_1_0_0.set_line_marker(i, markers[i])
            self.qtgui_time_sink_x_1_0_0.set_line_alpha(i, alphas[i])

        self._qtgui_time_sink_x_1_0_0_win = sip.wrapinstance(
            self.qtgui_time_sink_x_1_0_0.pyqwidget(), Qt.QWidget)
        self.top_grid_layout.addWidget(self._qtgui_time_sink_x_1_0_0_win, 1, 1,
                                       1, 1)
        for r in range(1, 2):
            self.top_grid_layout.setRowStretch(r, 1)
        for c in range(1, 2):
            self.top_grid_layout.setColumnStretch(c, 1)
        self.qtgui_time_sink_x_1_0 = qtgui.time_sink_c(
            1024,  #size
            samp_rate,  #samp_rate
            "RX USRP",  #name
            1  #number of inputs
        )
        self.qtgui_time_sink_x_1_0.set_update_time(0.10)
        self.qtgui_time_sink_x_1_0.set_y_axis(-1, 1)

        self.qtgui_time_sink_x_1_0.set_y_label('Amplitude', "")

        self.qtgui_time_sink_x_1_0.enable_tags(-1, True)
        self.qtgui_time_sink_x_1_0.set_trigger_mode(qtgui.TRIG_MODE_FREE,
                                                    qtgui.TRIG_SLOPE_POS, 0.0,
                                                    0, 0, "")
        self.qtgui_time_sink_x_1_0.enable_autoscale(False)
        self.qtgui_time_sink_x_1_0.enable_grid(False)
        self.qtgui_time_sink_x_1_0.enable_axis_labels(True)
        self.qtgui_time_sink_x_1_0.enable_control_panel(False)
        self.qtgui_time_sink_x_1_0.enable_stem_plot(False)

        if not True:
            self.qtgui_time_sink_x_1_0.disable_legend()

        labels = ['', '', '', '', '', '', '', '', '', '']
        widths = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
        colors = [
            "blue", "red", "green", "black", "cyan", "magenta", "yellow",
            "dark red", "dark green", "blue"
        ]
        styles = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
        markers = [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1]
        alphas = [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]

        for i in xrange(2):
            if len(labels[i]) == 0:
                if (i % 2 == 0):
                    self.qtgui_time_sink_x_1_0.set_line_label(
                        i, "Re{{Data {0}}}".format(i / 2))
                else:
                    self.qtgui_time_sink_x_1_0.set_line_label(
                        i, "Im{{Data {0}}}".format(i / 2))
            else:
                self.qtgui_time_sink_x_1_0.set_line_label(i, labels[i])
            self.qtgui_time_sink_x_1_0.set_line_width(i, widths[i])
            self.qtgui_time_sink_x_1_0.set_line_color(i, colors[i])
            self.qtgui_time_sink_x_1_0.set_line_style(i, styles[i])
            self.qtgui_time_sink_x_1_0.set_line_marker(i, markers[i])
            self.qtgui_time_sink_x_1_0.set_line_alpha(i, alphas[i])

        self._qtgui_time_sink_x_1_0_win = sip.wrapinstance(
            self.qtgui_time_sink_x_1_0.pyqwidget(), Qt.QWidget)
        self.top_grid_layout.addWidget(self._qtgui_time_sink_x_1_0_win, 1, 3,
                                       1, 1)
        for r in range(1, 2):
            self.top_grid_layout.setRowStretch(r, 1)
        for c in range(3, 4):
            self.top_grid_layout.setColumnStretch(c, 1)
        self.qtgui_time_sink_x_0_1 = qtgui.time_sink_f(
            100 * 2,  #size
            samp_rate,  #samp_rate
            'Rx Data',  #name
            1  #number of inputs
        )
        self.qtgui_time_sink_x_0_1.set_update_time(0.10)
        self.qtgui_time_sink_x_0_1.set_y_axis(-1, 256)

        self.qtgui_time_sink_x_0_1.set_y_label('Amplitude', "")

        self.qtgui_time_sink_x_0_1.enable_tags(-1, True)
        self.qtgui_time_sink_x_0_1.set_trigger_mode(qtgui.TRIG_MODE_FREE,
                                                    qtgui.TRIG_SLOPE_POS, 0.0,
                                                    0, 0,
                                                    'packet_length_tag_key')
        self.qtgui_time_sink_x_0_1.enable_autoscale(True)
        self.qtgui_time_sink_x_0_1.enable_grid(True)
        self.qtgui_time_sink_x_0_1.enable_axis_labels(True)
        self.qtgui_time_sink_x_0_1.enable_control_panel(False)
        self.qtgui_time_sink_x_0_1.enable_stem_plot(False)

        if not True:
            self.qtgui_time_sink_x_0_1.disable_legend()

        labels = ['', '', '', '', '', '', '', '', '', '']
        widths = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
        colors = [
            "blue", "red", "green", "black", "cyan", "magenta", "yellow",
            "dark red", "dark green", "blue"
        ]
        styles = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
        markers = [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1]
        alphas = [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]

        for i in xrange(1):
            if len(labels[i]) == 0:
                self.qtgui_time_sink_x_0_1.set_line_label(
                    i, "Data {0}".format(i))
            else:
                self.qtgui_time_sink_x_0_1.set_line_label(i, labels[i])
            self.qtgui_time_sink_x_0_1.set_line_width(i, widths[i])
            self.qtgui_time_sink_x_0_1.set_line_color(i, colors[i])
            self.qtgui_time_sink_x_0_1.set_line_style(i, styles[i])
            self.qtgui_time_sink_x_0_1.set_line_marker(i, markers[i])
            self.qtgui_time_sink_x_0_1.set_line_alpha(i, alphas[i])

        self._qtgui_time_sink_x_0_1_win = sip.wrapinstance(
            self.qtgui_time_sink_x_0_1.pyqwidget(), Qt.QWidget)
        self.top_grid_layout.addWidget(self._qtgui_time_sink_x_0_1_win, 2, 3,
                                       1, 1)
        for r in range(2, 3):
            self.top_grid_layout.setRowStretch(r, 1)
        for c in range(3, 4):
            self.top_grid_layout.setColumnStretch(c, 1)
        self.qtgui_freq_sink_x_1 = qtgui.freq_sink_c(
            1024,  #size
            firdes.WIN_BLACKMAN_hARRIS,  #wintype
            0,  #fc
            samp_rate,  #bw
            "",  #name
            1  #number of inputs
        )
        self.qtgui_freq_sink_x_1.set_update_time(0.10)
        self.qtgui_freq_sink_x_1.set_y_axis(-140, 10)
        self.qtgui_freq_sink_x_1.set_y_label('Relative Gain', 'dB')
        self.qtgui_freq_sink_x_1.set_trigger_mode(qtgui.TRIG_MODE_FREE, 0.0, 0,
                                                  "")
        self.qtgui_freq_sink_x_1.enable_autoscale(False)
        self.qtgui_freq_sink_x_1.enable_grid(False)
        self.qtgui_freq_sink_x_1.set_fft_average(1.0)
        self.qtgui_freq_sink_x_1.enable_axis_labels(True)
        self.qtgui_freq_sink_x_1.enable_control_panel(False)

        if not True:
            self.qtgui_freq_sink_x_1.disable_legend()

        if "complex" == "float" or "complex" == "msg_float":
            self.qtgui_freq_sink_x_1.set_plot_pos_half(not True)

        labels = ['', '', '', '', '', '', '', '', '', '']
        widths = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
        colors = [
            "blue", "red", "green", "black", "cyan", "magenta", "yellow",
            "dark red", "dark green", "dark blue"
        ]
        alphas = [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]
        for i in xrange(1):
            if len(labels[i]) == 0:
                self.qtgui_freq_sink_x_1.set_line_label(
                    i, "Data {0}".format(i))
            else:
                self.qtgui_freq_sink_x_1.set_line_label(i, labels[i])
            self.qtgui_freq_sink_x_1.set_line_width(i, widths[i])
            self.qtgui_freq_sink_x_1.set_line_color(i, colors[i])
            self.qtgui_freq_sink_x_1.set_line_alpha(i, alphas[i])

        self._qtgui_freq_sink_x_1_win = sip.wrapinstance(
            self.qtgui_freq_sink_x_1.pyqwidget(), Qt.QWidget)
        self.top_grid_layout.addWidget(self._qtgui_freq_sink_x_1_win, 1, 2, 1,
                                       1)
        for r in range(1, 2):
            self.top_grid_layout.setRowStretch(r, 1)
        for c in range(2, 3):
            self.top_grid_layout.setColumnStretch(c, 1)
        self.qtgui_const_sink_x_0_0_0_1 = qtgui.const_sink_c(
            1024,  #size
            "RX Const",  #name
            1  #number of inputs
        )
        self.qtgui_const_sink_x_0_0_0_1.set_update_time(0.10)
        self.qtgui_const_sink_x_0_0_0_1.set_y_axis(-2, 2)
        self.qtgui_const_sink_x_0_0_0_1.set_x_axis(-2, 2)
        self.qtgui_const_sink_x_0_0_0_1.set_trigger_mode(
            qtgui.TRIG_MODE_FREE, qtgui.TRIG_SLOPE_POS, 0.0, 0, "")
        self.qtgui_const_sink_x_0_0_0_1.enable_autoscale(False)
        self.qtgui_const_sink_x_0_0_0_1.enable_grid(False)
        self.qtgui_const_sink_x_0_0_0_1.enable_axis_labels(True)

        if not True:
            self.qtgui_const_sink_x_0_0_0_1.disable_legend()

        labels = ['', '', '', '', '', '', '', '', '', '']
        widths = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
        colors = [
            "blue", "red", "red", "red", "red", "red", "red", "red", "red",
            "red"
        ]
        styles = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
        markers = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
        alphas = [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]
        for i in xrange(1):
            if len(labels[i]) == 0:
                self.qtgui_const_sink_x_0_0_0_1.set_line_label(
                    i, "Data {0}".format(i))
            else:
                self.qtgui_const_sink_x_0_0_0_1.set_line_label(i, labels[i])
            self.qtgui_const_sink_x_0_0_0_1.set_line_width(i, widths[i])
            self.qtgui_const_sink_x_0_0_0_1.set_line_color(i, colors[i])
            self.qtgui_const_sink_x_0_0_0_1.set_line_style(i, styles[i])
            self.qtgui_const_sink_x_0_0_0_1.set_line_marker(i, markers[i])
            self.qtgui_const_sink_x_0_0_0_1.set_line_alpha(i, alphas[i])

        self._qtgui_const_sink_x_0_0_0_1_win = sip.wrapinstance(
            self.qtgui_const_sink_x_0_0_0_1.pyqwidget(), Qt.QWidget)
        self.top_grid_layout.addWidget(self._qtgui_const_sink_x_0_0_0_1_win, 2,
                                       1, 1, 1)
        for r in range(2, 3):
            self.top_grid_layout.setRowStretch(r, 1)
        for c in range(1, 2):
            self.top_grid_layout.setColumnStretch(c, 1)
        self.qtgui_const_sink_x_0_0_0 = qtgui.const_sink_c(
            1024,  #size
            "RX Treated",  #name
            1  #number of inputs
        )
        self.qtgui_const_sink_x_0_0_0.set_update_time(0.10)
        self.qtgui_const_sink_x_0_0_0.set_y_axis(-2, 2)
        self.qtgui_const_sink_x_0_0_0.set_x_axis(-2, 2)
        self.qtgui_const_sink_x_0_0_0.set_trigger_mode(qtgui.TRIG_MODE_FREE,
                                                       qtgui.TRIG_SLOPE_POS,
                                                       0.0, 0, "")
        self.qtgui_const_sink_x_0_0_0.enable_autoscale(False)
        self.qtgui_const_sink_x_0_0_0.enable_grid(False)
        self.qtgui_const_sink_x_0_0_0.enable_axis_labels(True)

        if not True:
            self.qtgui_const_sink_x_0_0_0.disable_legend()

        labels = ['', '', '', '', '', '', '', '', '', '']
        widths = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
        colors = [
            "blue", "red", "red", "red", "red", "red", "red", "red", "red",
            "red"
        ]
        styles = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
        markers = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
        alphas = [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]
        for i in xrange(1):
            if len(labels[i]) == 0:
                self.qtgui_const_sink_x_0_0_0.set_line_label(
                    i, "Data {0}".format(i))
            else:
                self.qtgui_const_sink_x_0_0_0.set_line_label(i, labels[i])
            self.qtgui_const_sink_x_0_0_0.set_line_width(i, widths[i])
            self.qtgui_const_sink_x_0_0_0.set_line_color(i, colors[i])
            self.qtgui_const_sink_x_0_0_0.set_line_style(i, styles[i])
            self.qtgui_const_sink_x_0_0_0.set_line_marker(i, markers[i])
            self.qtgui_const_sink_x_0_0_0.set_line_alpha(i, alphas[i])

        self._qtgui_const_sink_x_0_0_0_win = sip.wrapinstance(
            self.qtgui_const_sink_x_0_0_0.pyqwidget(), Qt.QWidget)
        self.top_grid_layout.addWidget(self._qtgui_const_sink_x_0_0_0_win, 2,
                                       2, 1, 1)
        for r in range(2, 3):
            self.top_grid_layout.setRowStretch(r, 1)
        for c in range(2, 3):
            self.top_grid_layout.setColumnStretch(c, 1)
        self.interp_fir_filter_xxx_1 = filter.interp_fir_filter_ccc(
            4, ([1, 0, 0, 0]))
        self.interp_fir_filter_xxx_1.declare_sample_delay(0)
        self.fec_extended_decoder_0_0_1_0_1_0_0 = fec.extended_decoder(
            decoder_obj_list=pld_dec,
            threading='capillary',
            ann=None,
            puncpat=puncpat,
            integration_period=10000)
        self.digital_pfb_clock_sync_xxx_0 = digital.pfb_clock_sync_ccf(
            sps, 6.28 / 100.0, (rx_rrc_taps), nfilts, nfilts / 2, 1.5, 1)
        self.digital_map_bb_0_0_0_0_0_0 = digital.map_bb(([-1, 1]))
        self.digital_diff_decoder_bb_0 = digital.diff_decoder_bb(
            pld_const.arity())
        self.digital_costas_loop_cc_0_0 = digital.costas_loop_cc(
            6.28 / 100.0, pld_const.arity(), False)
        self.digital_correlate_access_code_xx_ts_0_0 = digital.correlate_access_code_bb_ts(
            digital.packet_utils.default_access_code, 4, 'packet_len')
        self.digital_constellation_decoder_cb_0 = digital.constellation_decoder_cb(
            pld_const)
        self.custom_corr = correlate_and_delay.corr_and_delay(
            200 * sps, 0, 0.99, sps)
        self.blocks_repack_bits_bb_0_0_0_1_0 = blocks.repack_bits_bb(
            1, 8, '', False, gr.GR_MSB_FIRST)
        self.blocks_repack_bits_bb_0_0 = blocks.repack_bits_bb(
            pld_const.bits_per_symbol(), 8, '', False, gr.GR_MSB_FIRST)
        self.blocks_repack_bits_bb_0 = blocks.repack_bits_bb(
            pld_const.bits_per_symbol(), 1, '', False, gr.GR_MSB_FIRST)
        self.blocks_null_sink_1 = blocks.null_sink(gr.sizeof_gr_complex * 1)
        self.blocks_null_sink_0 = blocks.null_sink(gr.sizeof_gr_complex * 1)
        self.blocks_multiply_const_vxx_1_0 = blocks.multiply_const_vcc((0.5, ))
        self.blocks_keep_m_in_n_0_1_1_0 = blocks.keep_m_in_n(
            gr.sizeof_char, 440, 442, 0)
        self.blocks_keep_m_in_n_0_0_2_0_0 = blocks.keep_m_in_n(
            gr.sizeof_char, 1100, 1104, 0)
        self.blocks_file_sink_0_0_0_0_2 = blocks.file_sink(
            gr.sizeof_char * 1, '/home/it/Desktop/Trasmited/depois.txt', False)
        self.blocks_file_sink_0_0_0_0_2.set_unbuffered(False)
        self.blocks_file_sink_0 = blocks.file_sink(gr.sizeof_char * 1,
                                                   'rx_ber.txt', False)
        self.blocks_file_sink_0.set_unbuffered(False)
        self.blocks_copy_0 = blocks.copy(gr.sizeof_gr_complex * 1)
        self.blocks_copy_0.set_enabled(variable_qtgui_check_box_0)
        self.blocks_char_to_float_1_0_1 = blocks.char_to_float(1, 1)
        self.blocks_char_to_float_0_2_0_0_0 = blocks.char_to_float(1, 1)
        self.analog_noise_source_x_0_0 = analog.noise_source_c(
            analog.GR_GAUSSIAN, 1, -5)
        self.adapt_lms_filter_xx_0 = adapt.lms_filter_cc(
            True, 32, 0.0001, 0, 1, True, False, False)

        ##################################################
        # Connections
        ##################################################
        self.connect((self.adapt_lms_filter_xx_0, 0),
                     (self.blocks_null_sink_0, 0))
        self.connect((self.adapt_lms_filter_xx_0, 1),
                     (self.digital_pfb_clock_sync_xxx_0, 0))
        self.connect((self.analog_noise_source_x_0_0, 0),
                     (self.interp_fir_filter_xxx_1, 0))
        self.connect((self.blocks_char_to_float_0_2_0_0_0, 0),
                     (self.fec_extended_decoder_0_0_1_0_1_0_0, 0))
        self.connect((self.blocks_char_to_float_1_0_1, 0),
                     (self.qtgui_time_sink_x_0_1, 0))
        self.connect((self.blocks_copy_0, 0), (self.uhd_usrp_sink_0, 0))
        self.connect((self.blocks_keep_m_in_n_0_0_2_0_0, 0),
                     (self.digital_map_bb_0_0_0_0_0_0, 0))
        self.connect((self.blocks_keep_m_in_n_0_1_1_0, 0),
                     (self.scrambler_cpp_additive_descrambler_0, 0))
        self.connect((self.blocks_multiply_const_vxx_1_0, 0),
                     (self.blocks_copy_0, 0))
        self.connect((self.blocks_multiply_const_vxx_1_0, 0),
                     (self.custom_corr, 0))
        self.connect((self.blocks_multiply_const_vxx_1_0, 0),
                     (self.qtgui_freq_sink_x_1, 0))
        self.connect((self.blocks_multiply_const_vxx_1_0, 0),
                     (self.qtgui_time_sink_x_1_0_0, 0))
        self.connect((self.blocks_repack_bits_bb_0, 0),
                     (self.digital_correlate_access_code_xx_ts_0_0, 0))
        self.connect((self.blocks_repack_bits_bb_0_0, 0),
                     (self.blocks_file_sink_0, 0))
        self.connect((self.blocks_repack_bits_bb_0_0_0_1_0, 0),
                     (self.blocks_char_to_float_1_0_1, 0))
        self.connect((self.blocks_repack_bits_bb_0_0_0_1_0, 0),
                     (self.blocks_file_sink_0_0_0_0_2, 0))
        self.connect((self.custom_corr, 0), (self.adapt_lms_filter_xx_0, 1))
        self.connect((self.custom_corr, 1), (self.adapt_lms_filter_xx_0, 0))
        self.connect((self.custom_corr, 2), (self.blocks_null_sink_1, 0))
        self.connect((self.digital_constellation_decoder_cb_0, 0),
                     (self.digital_diff_decoder_bb_0, 0))
        self.connect((self.digital_correlate_access_code_xx_ts_0_0, 0),
                     (self.blocks_keep_m_in_n_0_0_2_0_0, 0))
        self.connect((self.digital_costas_loop_cc_0_0, 0),
                     (self.digital_constellation_decoder_cb_0, 0))
        self.connect((self.digital_costas_loop_cc_0_0, 0),
                     (self.qtgui_const_sink_x_0_0_0, 0))
        self.connect((self.digital_diff_decoder_bb_0, 0),
                     (self.blocks_repack_bits_bb_0, 0))
        self.connect((self.digital_diff_decoder_bb_0, 0),
                     (self.blocks_repack_bits_bb_0_0, 0))
        self.connect((self.digital_map_bb_0_0_0_0_0_0, 0),
                     (self.blocks_char_to_float_0_2_0_0_0, 0))
        self.connect((self.digital_pfb_clock_sync_xxx_0, 0),
                     (self.digital_costas_loop_cc_0_0, 0))
        self.connect((self.fec_extended_decoder_0_0_1_0_1_0_0, 0),
                     (self.blocks_keep_m_in_n_0_1_1_0, 0))
        self.connect((self.interp_fir_filter_xxx_1, 0),
                     (self.blocks_multiply_const_vxx_1_0, 0))
        self.connect((self.scrambler_cpp_additive_descrambler_0, 0),
                     (self.blocks_repack_bits_bb_0_0_0_1_0, 0))
        self.connect((self.uhd_usrp_source_0_0, 0), (self.custom_corr, 1))
        self.connect((self.uhd_usrp_source_0_0, 0),
                     (self.qtgui_const_sink_x_0_0_0_1, 0))
        self.connect((self.uhd_usrp_source_0_0, 0),
                     (self.qtgui_time_sink_x_1_0, 0))
Esempio n. 37
0
    def configure(self, initial=False):
        """Configure or reconfigure the flowgraph"""

        self.lock()

        if self.usrp.apply_cfg(self.pending_cfg):
            self.pending_cfg = copy(self.usrp.get_cfg())

        # Apply any pending configuration changes
        cfg = self.cfg = copy(self.pending_cfg)

        if not initial:
            self.disconnect_all()
            self.msg_disconnect(self.plot, "gui_busy_notifier",
                                self.copy_if_gui_idle, "en")

        self.ctrl = usrp_controller_cc(self.usrp.uhd, cfg.center_freqs,
                                       cfg.lo_offset, cfg.skip_initial,
                                       cfg.tune_delay,
                                       cfg.fft_size * cfg.nframes)

        if cfg.continuous_run:
            self.set_continuous_run()
        else:
            self.set_single_run()

        self.scaleV = blocks.multiply_const_cc(cfg.scale)

        timedata_vlen = 1
        self.timedata_sink = blocks.vector_sink_c(timedata_vlen)

        stream_to_fft_vec = blocks.stream_to_vector(gr.sizeof_gr_complex,
                                                    cfg.fft_size)

        forward = True
        shift = True
        self.fft = fft.fft_vcc(cfg.fft_size, forward, cfg.window_coefficients,
                               shift)

        freqdata_vlen = cfg.fft_size
        self.freqdata_sink = blocks.vector_sink_c(freqdata_vlen)

        c2mag_sq = blocks.complex_to_mag_squared(cfg.fft_size)

        stats = bin_statistics_ff(cfg.fft_size, cfg.nframes, cfg.detector)

        power = sum(tap * tap for tap in cfg.window_coefficients)

        # Divide magnitude-square by a constant to obtain power
        # in Watts. Assumes unit of USRP source is volts.
        impedance = 50.0  # ohms
        Vsq2W_dB = -10.0 * math.log10(cfg.fft_size * power * impedance)
        # Convert from Watts to dBm.
        W2dBm = blocks.nlog10_ff(10.0, cfg.fft_size, 30 + Vsq2W_dB)

        stitch = stitch_fft_segments_ff(cfg.fft_size, cfg.n_segments,
                                        cfg.overlap)

        fft_vec_to_stream = blocks.vector_to_stream(gr.sizeof_float,
                                                    cfg.fft_size)
        n_valid_bins = cfg.fft_size - (cfg.fft_size * (cfg.overlap / 2) * 2)
        # FIXME: think about whether to cast to int vs round vs...
        stitch_vec_len = int(cfg.n_segments * cfg.fft_size)
        stream_to_stitch_vec = blocks.stream_to_vector(gr.sizeof_float,
                                                       stitch_vec_len)

        plot_vec_len = int(cfg.n_segments * n_valid_bins)

        # Only copy sample to plot if enabled to avoid overwhelming gui thread
        self.copy_if_gui_idle = blocks.copy(gr.sizeof_float * plot_vec_len)

        self.plot = plotter_f(self, plot_vec_len)

        # Create the flowgraph:
        #
        # USRP   - hardware source output stream of 32bit complex floats
        # ctrl   - copy N samples then call retune callback and loop
        # scaleV - scale voltage by scalar to get calibrated output
        # fft    - compute forward FFT, complex in complex out
        # mag^2  - convert vectors from complex to real by taking mag squared
        # stats  - linear average or peak detect vectors if nframes > 1
        # W2dBm  - convert volt to dBm
        # stitch - overlap FFT segments by a certain number of bins
        # copy   - copy if gui thread is idle, else drop
        # plot   - plot data
        #
        # USRP > ctrl > fft > mag^2 > stats > W2dBm > stitch > copy > plot

        self.connect(self.usrp.uhd, self.ctrl, self.scaleV)
        if self.single_run.is_set():
            self.logger.debug("Connected timedata_sink")
            self.connect((self.scaleV, 0), self.timedata_sink)
        else:
            self.logger.debug("Disconnected timedata_sink")
        self.connect((self.scaleV, 0), stream_to_fft_vec, self.fft)
        if self.single_run.is_set():
            self.logger.debug("Connected freqdata_sink")
            self.connect((self.fft, 0), self.freqdata_sink)
        else:
            self.logger.debug("Disconnected freqdata_sink")
        self.connect((self.fft, 0), c2mag_sq, stats, W2dBm, fft_vec_to_stream)
        self.connect(fft_vec_to_stream, stream_to_stitch_vec, stitch)
        self.connect(stitch, self.copy_if_gui_idle, self.plot)

        self.msg_connect(self.plot, "gui_busy_notifier", self.copy_if_gui_idle,
                         "en")

        self.unlock()
Esempio n. 38
0
    def __init__(self):
        gr.top_block.__init__(self, "WDA Channel Simulator v2")
        Qt.QWidget.__init__(self)
        self.setWindowTitle("WDA Channel Simulator v2")
        try:
            self.setWindowIcon(Qt.QIcon.fromTheme('gnuradio-grc'))
        except:
            pass
        self.top_scroll_layout = Qt.QVBoxLayout()
        self.setLayout(self.top_scroll_layout)
        self.top_scroll = Qt.QScrollArea()
        self.top_scroll.setFrameStyle(Qt.QFrame.NoFrame)
        self.top_scroll_layout.addWidget(self.top_scroll)
        self.top_scroll.setWidgetResizable(True)
        self.top_widget = Qt.QWidget()
        self.top_scroll.setWidget(self.top_widget)
        self.top_layout = Qt.QVBoxLayout(self.top_widget)
        self.top_grid_layout = Qt.QGridLayout()
        self.top_layout.addLayout(self.top_grid_layout)

        self.settings = Qt.QSettings("GNU Radio", "top_block")
        self.restoreGeometry(self.settings.value("geometry").toByteArray())

        ##################################################
        # Variables
        ##################################################
        self.sps = sps = 200
        self.excess_bw = excess_bw = 0.35
        self.QAM = QAM = digital.constellation_calcdist(
            ([-1 - 1j, -1 + 1j, 1 + 1j, 1 - 1j]), ([0, 1, 3, 2]), 4, 1).base()
        self.symbol_reflection_offset = symbol_reflection_offset = 0
        self.symbol_reflection_ampl = symbol_reflection_ampl = 0
        self.samp_rate = samp_rate = 1e6
        self.rrc_taps = rrc_taps = firdes.root_raised_cosine(
            1, sps, 1, excess_bw, 45)
        self.refl_delay = refl_delay = 0
        self.refl_amplitude = refl_amplitude = 0
        self.noise_level = noise_level = 0
        self.max_phase_offset_ratio = max_phase_offset_ratio = 1
        self.direct_amplitude = direct_amplitude = 1
        self.constellation = constellation = QAM
        self.carrier_frequency = carrier_frequency = 10e3
        self.bits_per_symbol = bits_per_symbol = 2
        self.PSK = PSK = digital.constellation_calcdist(([1 + 0j, -1 + 0j]),
                                                        ([0, 1]), 2, 1).base()

        ##################################################
        # Blocks
        ##################################################
        self.tab = Qt.QTabWidget()
        self.tab_widget_0 = Qt.QWidget()
        self.tab_layout_0 = Qt.QBoxLayout(Qt.QBoxLayout.TopToBottom,
                                          self.tab_widget_0)
        self.tab_grid_layout_0 = Qt.QGridLayout()
        self.tab_layout_0.addLayout(self.tab_grid_layout_0)
        self.tab.addTab(self.tab_widget_0, "Time")
        self.tab_widget_1 = Qt.QWidget()
        self.tab_layout_1 = Qt.QBoxLayout(Qt.QBoxLayout.TopToBottom,
                                          self.tab_widget_1)
        self.tab_grid_layout_1 = Qt.QGridLayout()
        self.tab_layout_1.addLayout(self.tab_grid_layout_1)
        self.tab.addTab(self.tab_widget_1, "Frequency")
        self.tab_widget_2 = Qt.QWidget()
        self.tab_layout_2 = Qt.QBoxLayout(Qt.QBoxLayout.TopToBottom,
                                          self.tab_widget_2)
        self.tab_grid_layout_2 = Qt.QGridLayout()
        self.tab_layout_2.addLayout(self.tab_grid_layout_2)
        self.tab.addTab(self.tab_widget_2, "Windowed Constellation")
        self.top_grid_layout.addWidget(self.tab, 0, 0, 1, 7)
        self._symbol_reflection_offset_range = Range(0, 1, 0.01, 0, 100)
        self._symbol_reflection_offset_win = RangeWidget(
            self._symbol_reflection_offset_range,
            self.set_symbol_reflection_offset, "Offset (% of Symbol)",
            "counter_slider", float)
        self.top_grid_layout.addWidget(self._symbol_reflection_offset_win, 3,
                                       5, 1, 3)
        self._symbol_reflection_ampl_range = Range(0, 1, 0.001, 0, 100)
        self._symbol_reflection_ampl_win = RangeWidget(
            self._symbol_reflection_ampl_range,
            self.set_symbol_reflection_ampl, "Distant Reflection Amplitude",
            "counter_slider", float)
        self.top_grid_layout.addWidget(self._symbol_reflection_ampl_win, 3, 0,
                                       1, 5)
        self._refl_delay_range = Range(0, 360, 1, 0, 100)
        self._refl_delay_win = RangeWidget(self._refl_delay_range,
                                           self.set_refl_delay,
                                           "Phase Offset (Degrees)",
                                           "counter_slider", float)
        self.top_grid_layout.addWidget(self._refl_delay_win, 2, 5, 1, 3)
        self._refl_amplitude_range = Range(0, 1, 0.001, 0, 100)
        self._refl_amplitude_win = RangeWidget(self._refl_amplitude_range,
                                               self.set_refl_amplitude,
                                               "Nearby Reflection Amplitude",
                                               "counter_slider", float)
        self.top_grid_layout.addWidget(self._refl_amplitude_win, 2, 0, 1, 5)
        self._noise_level_range = Range(0, 160, 1, 0, 100)
        self._noise_level_win = RangeWidget(self._noise_level_range,
                                            self.set_noise_level,
                                            "Noise Level (dB)",
                                            "counter_slider", float)
        self.top_grid_layout.addWidget(self._noise_level_win, 4, 0, 1, 8)
        self._direct_amplitude_range = Range(0, 1, 0.01, 1, 1000)
        self._direct_amplitude_win = RangeWidget(
            self._direct_amplitude_range, self.set_direct_amplitude,
            "Transmitted Signal Amplitude", "counter_slider", float)
        self.top_grid_layout.addWidget(self._direct_amplitude_win, 1, 0, 1, 8)
        self.up_convert = blocks.multiply_vcc(1)
        self.rational_resampler_xxx_0_0 = filter.rational_resampler_ccc(
            interpolation=1,
            decimation=sps,
            taps=None,
            fractional_bw=None,
        )
        self.rational_resampler_xxx_0 = filter.rational_resampler_ccc(
            interpolation=1,
            decimation=sps,
            taps=None,
            fractional_bw=None,
        )
        self.qtgui_time_sink_x_1 = qtgui.time_sink_f(
            1024,  #size
            samp_rate,  #samp_rate
            "Transmitted and Received Signals",  #name
            5  #number of inputs
        )
        self.qtgui_time_sink_x_1.set_update_time(0.10)
        self.qtgui_time_sink_x_1.set_y_axis(-3, 3)

        self.qtgui_time_sink_x_1.set_y_label("Amplitude", "")

        self.qtgui_time_sink_x_1.enable_tags(-1, True)
        self.qtgui_time_sink_x_1.set_trigger_mode(qtgui.TRIG_MODE_FREE,
                                                  qtgui.TRIG_SLOPE_POS, 0.0, 0,
                                                  0, "")
        self.qtgui_time_sink_x_1.enable_autoscale(False)
        self.qtgui_time_sink_x_1.enable_grid(False)
        self.qtgui_time_sink_x_1.enable_control_panel(True)

        if not True:
            self.qtgui_time_sink_x_1.disable_legend()

        labels = [
            "Transmitted Signal", "Nearby Reflection", "Distant Reflection",
            "Noise", "Channel Total", "", "", "", "", ""
        ]
        widths = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
        colors = [
            "blue", "red", "green", "black", "cyan", "magenta", "yellow",
            "dark red", "dark green", "blue"
        ]
        styles = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
        markers = [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1]
        alphas = [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]

        for i in xrange(5):
            if len(labels[i]) == 0:
                self.qtgui_time_sink_x_1.set_line_label(
                    i, "Data {0}".format(i))
            else:
                self.qtgui_time_sink_x_1.set_line_label(i, labels[i])
            self.qtgui_time_sink_x_1.set_line_width(i, widths[i])
            self.qtgui_time_sink_x_1.set_line_color(i, colors[i])
            self.qtgui_time_sink_x_1.set_line_style(i, styles[i])
            self.qtgui_time_sink_x_1.set_line_marker(i, markers[i])
            self.qtgui_time_sink_x_1.set_line_alpha(i, alphas[i])

        self._qtgui_time_sink_x_1_win = sip.wrapinstance(
            self.qtgui_time_sink_x_1.pyqwidget(), Qt.QWidget)
        self.tab_layout_0.addWidget(self._qtgui_time_sink_x_1_win)
        self.qtgui_freq_sink_x_0 = qtgui.freq_sink_c(
            1024,  #size
            firdes.WIN_BLACKMAN_hARRIS,  #wintype
            0,  #fc
            samp_rate,  #bw
            "Transmitted and Received Signals",  #name
            2  #number of inputs
        )
        self.qtgui_freq_sink_x_0.set_update_time(0.10)
        self.qtgui_freq_sink_x_0.set_y_axis(-200, 0)
        self.qtgui_freq_sink_x_0.set_trigger_mode(qtgui.TRIG_MODE_FREE, 0.0, 0,
                                                  "")
        self.qtgui_freq_sink_x_0.enable_autoscale(False)
        self.qtgui_freq_sink_x_0.enable_grid(True)
        self.qtgui_freq_sink_x_0.set_fft_average(0.2)
        self.qtgui_freq_sink_x_0.enable_control_panel(True)

        if not True:
            self.qtgui_freq_sink_x_0.disable_legend()

        if "complex" == "float" or "complex" == "msg_float":
            self.qtgui_freq_sink_x_0.set_plot_pos_half(not True)

        labels = [
            "Received Signal", "Transmitted Signal", "", "", "", "", "", "",
            "", ""
        ]
        widths = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
        colors = [
            "blue", "red", "green", "black", "cyan", "magenta", "yellow",
            "dark red", "dark green", "dark blue"
        ]
        alphas = [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]
        for i in xrange(2):
            if len(labels[i]) == 0:
                self.qtgui_freq_sink_x_0.set_line_label(
                    i, "Data {0}".format(i))
            else:
                self.qtgui_freq_sink_x_0.set_line_label(i, labels[i])
            self.qtgui_freq_sink_x_0.set_line_width(i, widths[i])
            self.qtgui_freq_sink_x_0.set_line_color(i, colors[i])
            self.qtgui_freq_sink_x_0.set_line_alpha(i, alphas[i])

        self._qtgui_freq_sink_x_0_win = sip.wrapinstance(
            self.qtgui_freq_sink_x_0.pyqwidget(), Qt.QWidget)
        self.tab_layout_1.addWidget(self._qtgui_freq_sink_x_0_win)
        self.qtgui_const_sink_x_0 = qtgui.const_sink_c(
            512,  #size
            "Windowed Constellation",  #name
            2  #number of inputs
        )
        self.qtgui_const_sink_x_0.set_update_time(0.10)
        self.qtgui_const_sink_x_0.set_y_axis(-2, 2)
        self.qtgui_const_sink_x_0.set_x_axis(-2, 2)
        self.qtgui_const_sink_x_0.set_trigger_mode(qtgui.TRIG_MODE_FREE,
                                                   qtgui.TRIG_SLOPE_POS, 0.75,
                                                   0, "")
        self.qtgui_const_sink_x_0.enable_autoscale(False)
        self.qtgui_const_sink_x_0.enable_grid(True)

        if not True:
            self.qtgui_const_sink_x_0.disable_legend()

        labels = [
            "Decoded Data", "Expected Data", "", "", "", "", "", "", "", ""
        ]
        widths = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
        colors = [
            "blue", "red", "red", "red", "red", "red", "red", "red", "red",
            "red"
        ]
        styles = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
        markers = [0, 2, 0, 0, 0, 0, 0, 0, 0, 0]
        alphas = [0.5, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]
        for i in xrange(2):
            if len(labels[i]) == 0:
                self.qtgui_const_sink_x_0.set_line_label(
                    i, "Data {0}".format(i))
            else:
                self.qtgui_const_sink_x_0.set_line_label(i, labels[i])
            self.qtgui_const_sink_x_0.set_line_width(i, widths[i])
            self.qtgui_const_sink_x_0.set_line_color(i, colors[i])
            self.qtgui_const_sink_x_0.set_line_style(i, styles[i])
            self.qtgui_const_sink_x_0.set_line_marker(i, markers[i])
            self.qtgui_const_sink_x_0.set_line_alpha(i, alphas[i])

        self._qtgui_const_sink_x_0_win = sip.wrapinstance(
            self.qtgui_const_sink_x_0.pyqwidget(), Qt.QWidget)
        self.tab_layout_2.addWidget(self._qtgui_const_sink_x_0_win)
        self.fir_filter_xxx_0_0 = filter.fir_filter_ccc(1, (rrc_taps))
        self.fir_filter_xxx_0_0.declare_sample_delay(0)
        self.down_convert = blocks.multiply_vcc(1)
        self.digital_constellation_modulator_0 = digital.generic_mod(
            constellation=constellation,
            differential=True,
            samples_per_symbol=sps,
            pre_diff_code=True,
            excess_bw=excess_bw,
            verbose=True,
            log=False,
        )
        self.digital_constellation_decoder_cb_1 = digital.constellation_decoder_cb(
            constellation)
        self.digital_constellation_decoder_cb_0 = digital.constellation_decoder_cb(
            constellation)
        self.carrier_source_0 = analog.sig_source_c(samp_rate,
                                                    analog.GR_COS_WAVE,
                                                    -carrier_frequency, 1, 0)
        self.carrier_source = analog.sig_source_c(samp_rate,
                                                  analog.GR_COS_WAVE,
                                                  carrier_frequency, 1, 0)
        self.blocks_throttle_0 = blocks.throttle(gr.sizeof_gr_complex * 1,
                                                 samp_rate, True)
        self.blocks_multiply_const_vxx_1_0 = blocks.multiply_const_vcc(
            (symbol_reflection_ampl, ))
        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_vcc(
            (refl_amplitude, ))
        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc(
            (direct_amplitude, ))
        self.blocks_delay_2_0 = blocks.delay(gr.sizeof_gr_complex * 1, sps / 4)
        self.blocks_delay_2 = blocks.delay(gr.sizeof_gr_complex * 1, sps / 4)
        self.blocks_delay_0_0 = blocks.delay(
            gr.sizeof_gr_complex * 1, int(symbol_reflection_offset * sps))
        self.blocks_delay_0 = blocks.delay(
            gr.sizeof_gr_complex * 1,
            int(refl_delay / 360.0 * samp_rate / carrier_frequency))
        self.blocks_copy_0 = blocks.copy(gr.sizeof_gr_complex * 1)
        self.blocks_copy_0.set_enabled(True)
        self.blocks_complex_to_real_1_1_0 = blocks.complex_to_real(1)
        self.blocks_complex_to_real_1_1 = blocks.complex_to_real(1)
        self.blocks_complex_to_real_1_0_0 = blocks.complex_to_real(1)
        self.blocks_complex_to_real_1_0 = blocks.complex_to_real(1)
        self.blocks_complex_to_real_1 = blocks.complex_to_real(1)
        self.blocks_add_xx_0 = blocks.add_vcc(1)
        self.blks2_error_rate_0 = grc_blks2.error_rate(
            type='SER',
            win_size=20000,
            bits_per_symbol=bits_per_symbol,
        )
        self.analog_random_source_x_0 = blocks.vector_source_b(
            map(int, numpy.random.randint(0, 2**bits_per_symbol, 10000)), True)
        self.analog_noise_source_x_0 = analog.noise_source_c(
            analog.GR_GAUSSIAN, 0.000001 * 10**(noise_level / 20), 0)
        self.SER = qtgui.number_sink(gr.sizeof_float, 0, qtgui.NUM_GRAPH_VERT,
                                     1)
        self.SER.set_update_time(1.5)
        self.SER.set_title("")

        labels = ["SER", "", "", "", "", "", "", "", "", ""]
        units = ["", "", "", "", "", "", "", "", "", ""]
        colors = [("black", "red"), ("black", "black"), ("black", "black"),
                  ("black", "black"), ("black", "black"), ("black", "black"),
                  ("black", "black"), ("black", "black"), ("black", "black"),
                  ("black", "black")]
        factor = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
        for i in xrange(1):
            self.SER.set_min(i, 0)
            self.SER.set_max(i, 1)
            self.SER.set_color(i, colors[i][0], colors[i][1])
            if len(labels[i]) == 0:
                self.SER.set_label(i, "Data {0}".format(i))
            else:
                self.SER.set_label(i, labels[i])
            self.SER.set_unit(i, units[i])
            self.SER.set_factor(i, factor[i])

        self.SER.enable_autoscale(False)
        self._SER_win = sip.wrapinstance(self.SER.pyqwidget(), Qt.QWidget)
        self.top_grid_layout.addWidget(self._SER_win, 0, 7, 1, 1)

        ##################################################
        # Connections
        ##################################################
        self.connect((self.analog_noise_source_x_0, 0),
                     (self.blocks_add_xx_0, 3))
        self.connect((self.analog_noise_source_x_0, 0),
                     (self.blocks_complex_to_real_1_0_0, 0))
        self.connect((self.analog_random_source_x_0, 0),
                     (self.digital_constellation_modulator_0, 0))
        self.connect((self.blks2_error_rate_0, 0), (self.SER, 0))
        self.connect((self.blocks_add_xx_0, 0),
                     (self.blocks_complex_to_real_1_0, 0))
        self.connect((self.blocks_add_xx_0, 0), (self.down_convert, 1))
        self.connect((self.blocks_complex_to_real_1, 0),
                     (self.qtgui_time_sink_x_1, 0))
        self.connect((self.blocks_complex_to_real_1_0, 0),
                     (self.qtgui_time_sink_x_1, 4))
        self.connect((self.blocks_complex_to_real_1_0_0, 0),
                     (self.qtgui_time_sink_x_1, 3))
        self.connect((self.blocks_complex_to_real_1_1, 0),
                     (self.qtgui_time_sink_x_1, 2))
        self.connect((self.blocks_complex_to_real_1_1_0, 0),
                     (self.qtgui_time_sink_x_1, 1))
        self.connect((self.blocks_copy_0, 0), (self.blocks_delay_2, 0))
        self.connect((self.blocks_copy_0, 0),
                     (self.digital_constellation_decoder_cb_1, 0))
        self.connect((self.blocks_copy_0, 0), (self.qtgui_freq_sink_x_0, 1))
        self.connect((self.blocks_delay_0, 0),
                     (self.blocks_multiply_const_vxx_1, 0))
        self.connect((self.blocks_delay_0_0, 0),
                     (self.blocks_multiply_const_vxx_1_0, 0))
        self.connect((self.blocks_delay_2, 0),
                     (self.rational_resampler_xxx_0, 0))
        self.connect((self.blocks_delay_2_0, 0),
                     (self.rational_resampler_xxx_0_0, 0))
        self.connect((self.blocks_multiply_const_vxx_0, 0),
                     (self.blocks_add_xx_0, 2))
        self.connect((self.blocks_multiply_const_vxx_0, 0),
                     (self.blocks_complex_to_real_1, 0))
        self.connect((self.blocks_multiply_const_vxx_0, 0),
                     (self.blocks_delay_0, 0))
        self.connect((self.blocks_multiply_const_vxx_0, 0),
                     (self.blocks_delay_0_0, 0))
        self.connect((self.blocks_multiply_const_vxx_1, 0),
                     (self.blocks_add_xx_0, 1))
        self.connect((self.blocks_multiply_const_vxx_1, 0),
                     (self.blocks_complex_to_real_1_1_0, 0))
        self.connect((self.blocks_multiply_const_vxx_1_0, 0),
                     (self.blocks_add_xx_0, 0))
        self.connect((self.blocks_multiply_const_vxx_1_0, 0),
                     (self.blocks_complex_to_real_1_1, 0))
        self.connect((self.blocks_throttle_0, 0), (self.up_convert, 0))
        self.connect((self.carrier_source, 0), (self.blocks_throttle_0, 0))
        self.connect((self.carrier_source_0, 0), (self.down_convert, 0))
        self.connect((self.digital_constellation_decoder_cb_0, 0),
                     (self.blks2_error_rate_0, 0))
        self.connect((self.digital_constellation_decoder_cb_1, 0),
                     (self.blks2_error_rate_0, 1))
        self.connect((self.digital_constellation_modulator_0, 0),
                     (self.fir_filter_xxx_0_0, 0))
        self.connect((self.down_convert, 0), (self.blocks_delay_2_0, 0))
        self.connect((self.down_convert, 0),
                     (self.digital_constellation_decoder_cb_0, 0))
        self.connect((self.down_convert, 0), (self.qtgui_freq_sink_x_0, 0))
        self.connect((self.fir_filter_xxx_0_0, 0), (self.blocks_copy_0, 0))
        self.connect((self.fir_filter_xxx_0_0, 0), (self.up_convert, 1))
        self.connect((self.rational_resampler_xxx_0, 0),
                     (self.qtgui_const_sink_x_0, 1))
        self.connect((self.rational_resampler_xxx_0_0, 0),
                     (self.qtgui_const_sink_x_0, 0))
        self.connect((self.up_convert, 0),
                     (self.blocks_multiply_const_vxx_0, 0))
    def __init__(self):
        gr.top_block.__init__(self, "Recevier")
        Qt.QWidget.__init__(self)
        self.setWindowTitle("Recevier")
        qtgui.util.check_set_qss()
        try:
            self.setWindowIcon(Qt.QIcon.fromTheme('gnuradio-grc'))
        except:
            pass
        self.top_scroll_layout = Qt.QVBoxLayout()
        # self.top_scroll_layout = Qt.QGridLayout()
        self.setLayout(self.top_scroll_layout)
        self.top_scroll = Qt.QScrollArea()
        self.top_scroll.setFrameStyle(Qt.QFrame.NoFrame)
        self.top_scroll_layout.addWidget(self.top_scroll)
        self.top_scroll.setWidgetResizable(True)
        self.top_widget = Qt.QWidget()
        self.top_scroll.setWidget(self.top_widget)
        self.top_layout = Qt.QVBoxLayout(self.top_widget)
        self.top_grid_layout = Qt.QGridLayout()
        self.top_layout.addLayout(self.top_grid_layout)

        self.settings = Qt.QSettings("GNU Radio", "recevier")
        self.restoreGeometry(self.settings.value("geometry").toByteArray())


        ##################################################
        # Variables
        ##################################################
        # self.home_dir = pjoin(os.path.expanduser("~"), ".uhd_ui")
        self.home_dir = pjoin(os.getcwd(), ".uhd_ui")
        if not os.path.exists(self.home_dir):
            os.makedirs(self.home_dir)
        
        self.config_path = pjoin(self.home_dir, "config.json")

        self.config_keys = ['sample_num', 'if_gain_rec', 'bb_gain_rec',
                            'rf_gain_rec', 'file_num', 'data_file',
                            'center_freq',
                            'samp_rate', 'source_address_h',
                            'GNUradio_file', "source_kind",
                            'source_address_u']
        self.CONFIG = {}
        if not os.path.exists(self.config_path):
            # 初始化CONFIG,方便保存数据
            for key in self.config_keys:
                self.CONFIG[key] = _config[key]
            self.save_config()
        else:
            with open(self.config_path, "r") as f:
                self.CONFIG = json.load(f)
                for key in self.config_keys:
                    if key not in self.CONFIG:
                        self.CONFIG[key] = _config[key]
        self.sample_num = self.CONFIG["sample_num"]
        self.rf_gain_rec = self.CONFIG["rf_gain_rec"]
        self.file_num = self.CONFIG["file_num"]
        self.center_freq = self.CONFIG["center_freq"]
        self.samp_rate = self.CONFIG["samp_rate"]
        self.if_gain_rec = self.CONFIG["if_gain_rec"]
        self.bb_gain_rec = self.CONFIG["bb_gain_rec"]
        self.source_kind = self.CONFIG["source_kind"].encode('gbk')
        self.source_address_u = self.CONFIG["source_address_u"].encode('gbk')
        self.source_address_h = self.CONFIG["source_address_h"].encode('gbk')
        self.GNUradio_file = self.CONFIG["GNUradio_file"].encode('gbk')
        self.data_file = self.CONFIG["data_file"].encode('gbk')
        if not os.path.exists(self.data_file):
            os.makedirs(self.data_file)
        self.data_file_start = self.data_file+'/start.dat'
        ##################################################
        # Blocks
        ##################################################
        self._rf_gain_rec_range = Range(-50, 100, 1, self.rf_gain_rec, 200)
        self._rf_gain_rec_win = RangeWidget(self._rf_gain_rec_range, self.set_rf_gain_rec, u"接收机增益", "counter_slider", float)
        self.top_grid_layout.addWidget(self._rf_gain_rec_win, 3, 6, 1, 3)

        _start_btn_push_button = Qt.QPushButton(u'开始采集')
        _start_btn_push_button.pressed.connect(lambda: self.set_start_btn())
        self.top_grid_layout.addWidget(_start_btn_push_button, 3, 0, 1, 3)

        _end_btn_push_button = Qt.QPushButton(u'结束采集')
        _end_btn_push_button.pressed.connect(lambda: self.set_end_btn())
        self.top_grid_layout.addWidget(_end_btn_push_button, 3, 3, 1, 3)

        self._center_freq_tool_bar = Qt.QToolBar(self)
        self._center_freq_tool_bar.addWidget(Qt.QLabel(u"载频"+": "))
        self._center_freq_line_edit = Qt.QLineEdit(eng_notation.num_to_str(self.center_freq))
        self._center_freq_tool_bar.addWidget(self._center_freq_line_edit)
        self._center_freq_line_edit.returnPressed.connect(
        	lambda: self.set_center_freq(eng_notation.str_to_num(str(self._center_freq_line_edit.text().toAscii()))))
        self.top_grid_layout.addWidget(self._center_freq_tool_bar, 4, 0, 1, 3)

        self._source_kind_options = ('hackrf', 'usrp', )
        self._source_kind_labels = (str(self._source_kind_options[0]), str(self._source_kind_options[1]), )
        self._source_kind_tool_bar = Qt.QToolBar(self)
        self._source_kind_tool_bar.addWidget(Qt.QLabel("source_kind"+": "))
        self._source_kind_combo_box = Qt.QComboBox()
        self._source_kind_tool_bar.addWidget(self._source_kind_combo_box)
        for label in self._source_kind_labels: self._source_kind_combo_box.addItem(label)
        self._source_kind_callback = lambda i: Qt.QMetaObject.invokeMethod(self._source_kind_combo_box, "setCurrentIndex", Qt.Q_ARG("int", self._source_kind_options.index(i)))
        self._source_kind_callback(self.source_kind)
        self._source_kind_combo_box.currentIndexChanged.connect(
        	lambda i: self.set_source_kind(self._source_kind_options[i]))
        self.top_grid_layout.addWidget(self._source_kind_tool_bar, 4, 3, 1, 3)

        self._source_address_tool_bar = Qt.QToolBar(self)
        self._source_address_tool_bar.addWidget(Qt.QLabel("source_address"+": "))
        if self.source_kind == 'usrp':
            self._source_address_line_edit = Qt.QLineEdit(str(self.source_address_u))
        else:
            self._source_address_line_edit = Qt.QLineEdit(str(self.source_address_h))
        self._source_address_tool_bar.addWidget(self._source_address_line_edit)
        self._source_address_line_edit.returnPressed.connect(
        	lambda: self.set_source_address(str(self._source_address_line_edit.text().toAscii())))
        self.top_grid_layout.addWidget(self._source_address_tool_bar, 5, 3, 1, 3)

        self._if_gain_rec_tool_bar = Qt.QToolBar(self)
        self._if_gain_rec_tool_bar.addWidget(Qt.QLabel(u"接收机if增益(仅对hackrf有效)"+": "))
        self._if_gain_rec_line_edit = Qt.QLineEdit(str(self.if_gain_rec))
        self._if_gain_rec_tool_bar.addWidget(self._if_gain_rec_line_edit)
        self._if_gain_rec_line_edit.returnPressed.connect(
        	lambda: self.set_if_gain_rec(int(str(self._if_gain_rec_line_edit.text().toAscii()))))
        self.top_grid_layout.addWidget(self._if_gain_rec_tool_bar, 1, 6, 1, 3)

        self._bb_gain_rec_tool_bar = Qt.QToolBar(self)
        self._bb_gain_rec_tool_bar.addWidget(Qt.QLabel(u"接收机bb增益(仅对hackrf有效)"+": "))
        self._bb_gain_rec_line_edit = Qt.QLineEdit(str(self.bb_gain_rec))
        self._bb_gain_rec_tool_bar.addWidget(self._bb_gain_rec_line_edit)
        self._bb_gain_rec_line_edit.returnPressed.connect(
        	lambda: self.set_bb_gain_rec(int(str(self._bb_gain_rec_line_edit.text().toAscii()))))
        self.top_grid_layout.addWidget(self._bb_gain_rec_tool_bar, 2, 6, 1, 3)

        self._samp_rate_tool_bar = Qt.QToolBar(self)
        self._samp_rate_tool_bar.addWidget(Qt.QLabel(u"采样率"+": "))
        self._samp_rate_line_edit = Qt.QLineEdit(eng_notation.num_to_str(self.samp_rate))
        self._samp_rate_tool_bar.addWidget(self._samp_rate_line_edit)
        self._samp_rate_line_edit.returnPressed.connect(
        	lambda: self.set_samp_rate(eng_notation.str_to_num(str(self._samp_rate_line_edit.text().toAscii()))))
        self.top_grid_layout.addWidget(self._samp_rate_tool_bar, 4, 6, 1, 3)
        self._data_file_tool_bar = Qt.QToolBar(self)
        self._data_file_tool_bar.addWidget(Qt.QLabel(u"数据目录"+": "))
        self._data_file_line_edit = Qt.QLineEdit(str(self.data_file))
        self._data_file_tool_bar.addWidget(self._data_file_line_edit)
        self._data_file_line_edit.returnPressed.connect(
        	lambda: self.set_data_file(str(str(self._data_file_line_edit.text().toAscii()))))
        self.top_grid_layout.addWidget(self._data_file_tool_bar, 1, 0, 1, 5)
        self._GNUradio_file_tool_bar = Qt.QToolBar(self)
        self._GNUradio_file_tool_bar.addWidget(Qt.QLabel(u"GNUradio目录"+": "))
        self._GNUradio_file_line_edit = Qt.QLineEdit(str(self.GNUradio_file))
        self._GNUradio_file_tool_bar.addWidget(self._GNUradio_file_line_edit)
        self._GNUradio_file_line_edit.returnPressed.connect(
        	lambda: self.set_GNUradio_file(str(str(self._GNUradio_file_line_edit.text().toAscii()))))
        self.top_grid_layout.addWidget(self._GNUradio_file_tool_bar, 2, 0, 1, 5)

        if self.source_kind == 'usrp':
            self.uhd_usrp_source_0 = uhd.usrp_source(
                ",".join((self.source_address_u, self.source_address_u)),
                uhd.stream_args(
                    cpu_format="fc32",
                    channels=range(1),
                ),
            )
            self.uhd_usrp_source_0.set_samp_rate(self.samp_rate)
            self.uhd_usrp_source_0.set_time_now(uhd.time_spec(time.time()), uhd.ALL_MBOARDS)
            self.uhd_usrp_source_0.set_center_freq(self.center_freq, 0)
            self.uhd_usrp_source_0.set_gain(self.rf_gain_rec, 0)
            self.uhd_usrp_source_0.set_antenna('RX2', 0)
            self.uhd_usrp_source_0.set_auto_dc_offset(True, 0)
            self.uhd_usrp_source_0.set_auto_iq_balance(True, 0)
        else:
            self.osmosdr_source_0 = osmosdr.source( args="numchan=" + str(1) + " " + self.source_address_h )
            self.osmosdr_source_0.set_time_now(osmosdr.time_spec_t(time.time()), osmosdr.ALL_MBOARDS)
            self.osmosdr_source_0.set_sample_rate(self.samp_rate)
            self.osmosdr_source_0.set_center_freq(self.center_freq, 0)
            self.osmosdr_source_0.set_freq_corr(0, 0)
            self.osmosdr_source_0.set_dc_offset_mode(0, 0)
            self.osmosdr_source_0.set_iq_balance_mode(0, 0)
            self.osmosdr_source_0.set_gain_mode(False, 0)
            self.osmosdr_source_0.set_gain(self.rf_gain_rec, 0)
            self.osmosdr_source_0.set_if_gain(self.if_gain_rec, 0)
            self.osmosdr_source_0.set_bb_gain(self.bb_gain_rec, 0)
            self.osmosdr_source_0.set_antenna('', 0)

        self._sample_num_tool_bar = Qt.QToolBar(self)
        self._sample_num_tool_bar.addWidget(Qt.QLabel(u"样本点数"+": "))
        self._sample_num_line_edit = Qt.QLineEdit(eng_notation.num_to_str(self.sample_num))
        self._sample_num_tool_bar.addWidget(self._sample_num_line_edit)
        self._sample_num_line_edit.returnPressed.connect(
        	lambda: self.set_sample_num(eng_notation.str_to_num(str(self._sample_num_line_edit.text().toAscii()))))
        self.top_grid_layout.addWidget(self._sample_num_tool_bar, 5, 0, 1, 3)
        self._file_num_tool_bar = Qt.QToolBar(self)
        self._file_num_tool_bar.addWidget(Qt.QLabel(u"文件数量"+": "))
        self._file_num_line_edit = Qt.QLineEdit(str(self.file_num))
        self._file_num_tool_bar.addWidget(self._file_num_line_edit)
        self._file_num_line_edit.returnPressed.connect(
        	lambda: self.set_file_num(eng_notation.str_to_num(str(self._file_num_line_edit.text().toAscii()))))
        self.top_grid_layout.addWidget(self._file_num_tool_bar, 5, 6, 1, 3)

        self.blocks_file_sink_0_0 = blocks.file_sink(gr.sizeof_gr_complex*1, self.data_file_start, False)
        self.blocks_file_sink_0_0.set_unbuffered(True)

        self.blocks_copy_0 = blocks.copy(gr.sizeof_gr_complex*1)
        self.blocks_copy_0.set_enabled(False)

        self.blocks_copy_1 = blocks.copy(gr.sizeof_gr_complex*1)
        self.blocks_copy_1.set_enabled(True)

        _wave_nums = 20
        wave_width = _wave_nums*MS  # 50ms
        gui_update_time_interval = 0.5  # _wave_nums/200
        self.qtgui_time_sink_x_0 = qtgui.time_sink_c(
        	wave_width, #size
        	self.samp_rate, #samp_rate
        	"time", #name
        	1 #number of inputs
        )
        self.qtgui_time_sink_x_0.set_update_time(gui_update_time_interval)
        self.qtgui_time_sink_x_0.set_y_axis(-1, 1)

        self.qtgui_time_sink_x_0.set_y_label('Amplitude', "")

        self.qtgui_time_sink_x_0.enable_tags(-1, True)
        self.qtgui_time_sink_x_0.set_trigger_mode(qtgui.TRIG_MODE_FREE, qtgui.TRIG_SLOPE_POS, 0.0, 0, 0, "")
        self.qtgui_time_sink_x_0.enable_autoscale(False)
        self.qtgui_time_sink_x_0.enable_grid(False)
        self.qtgui_time_sink_x_0.enable_axis_labels(True)
        self.qtgui_time_sink_x_0.enable_control_panel(False)
        self.qtgui_time_sink_x_0.enable_stem_plot(False)

        if not True:
          self.qtgui_time_sink_x_0.disable_legend()

        labels = ['', '', '', '', '',
                  '', '', '', '', '']
        widths = [1, 1, 1, 1, 1,
                  1, 1, 1, 1, 1]
        colors = ["blue", "red", "green", "black", "cyan",
                  "magenta", "yellow", "dark red", "dark green", "blue"]
        styles = [1, 1, 1, 1, 1,
                  1, 1, 1, 1, 1]
        markers = [-1, -1, -1, -1, -1,
                   -1, -1, -1, -1, -1]
        alphas = [1.0, 1.0, 1.0, 1.0, 1.0,
                  1.0, 1.0, 1.0, 1.0, 1.0]

        for i in xrange(2):
            if len(labels[i]) == 0:
                if(i % 2 == 0):
                    self.qtgui_time_sink_x_0.set_line_label(i, "Re{{Data {0}}}".format(i/2))
                else:
                    self.qtgui_time_sink_x_0.set_line_label(i, "Im{{Data {0}}}".format(i/2))
            else:
                self.qtgui_time_sink_x_0.set_line_label(i, labels[i])
            self.qtgui_time_sink_x_0.set_line_width(i, widths[i])
            self.qtgui_time_sink_x_0.set_line_color(i, colors[i])
            self.qtgui_time_sink_x_0.set_line_style(i, styles[i])
            self.qtgui_time_sink_x_0.set_line_marker(i, markers[i])
            self.qtgui_time_sink_x_0.set_line_alpha(i, alphas[i])

        self._qtgui_time_sink_x_0_win = sip.wrapinstance(self.qtgui_time_sink_x_0.pyqwidget(), Qt.QWidget)
        self.top_grid_layout.addWidget(self._qtgui_time_sink_x_0_win, 6, 0, 3, 3)
        self.qtgui_freq_sink_x_0 = qtgui.freq_sink_c(
        	1024, #size
        	firdes.WIN_BLACKMAN_hARRIS, #wintype
        	self.center_freq, #fc
        	self.samp_rate, #bw
        	"freq", #name
        	1 #number of inputs
        )
        self.qtgui_freq_sink_x_0.set_update_time(0.10)
        self.qtgui_freq_sink_x_0.set_y_axis(-140, 10)
        self.qtgui_freq_sink_x_0.set_y_label('Relative Gain', 'dB')
        self.qtgui_freq_sink_x_0.set_trigger_mode(qtgui.TRIG_MODE_FREE, 0.0, 0, "")
        self.qtgui_freq_sink_x_0.enable_autoscale(False)
        self.qtgui_freq_sink_x_0.enable_grid(False)
        self.qtgui_freq_sink_x_0.set_fft_average(1.0)
        self.qtgui_freq_sink_x_0.enable_axis_labels(True)
        self.qtgui_freq_sink_x_0.enable_control_panel(False)

        if not True:
          self.qtgui_freq_sink_x_0.disable_legend()

        if "complex" == "float" or "complex" == "msg_float":
          self.qtgui_freq_sink_x_0.set_plot_pos_half(not True)

        labels = ['', '', '', '', '',
                  '', '', '', '', '']
        widths = [1, 1, 1, 1, 1,
                  1, 1, 1, 1, 1]
        colors = ["blue", "red", "green", "black", "cyan",
                  "magenta", "yellow", "dark red", "dark green", "dark blue"]
        alphas = [1.0, 1.0, 1.0, 1.0, 1.0,
                  1.0, 1.0, 1.0, 1.0, 1.0]
        for i in xrange(1):
            if len(labels[i]) == 0:
                self.qtgui_freq_sink_x_0.set_line_label(i, "Data {0}".format(i))
            else:
                self.qtgui_freq_sink_x_0.set_line_label(i, labels[i])
            self.qtgui_freq_sink_x_0.set_line_width(i, widths[i])
            self.qtgui_freq_sink_x_0.set_line_color(i, colors[i])
            self.qtgui_freq_sink_x_0.set_line_alpha(i, alphas[i])

        self._qtgui_freq_sink_x_0_win = sip.wrapinstance(self.qtgui_freq_sink_x_0.pyqwidget(), Qt.QWidget)
        self.top_grid_layout.addWidget(self._qtgui_freq_sink_x_0_win, 6, 6, 3, 3)
        self.textBrowser = Qt.QTextBrowser()
        self.textBrowser.setObjectName(u"当前状态")
        self.top_grid_layout.addWidget(self.textBrowser, 6, 3, 3, 3)


        ##################################################
        # Connections
        ##################################################
        self.connect((self.blocks_copy_0, 0), (self.blocks_file_sink_0_0, 0))
        if self.source_kind == 'usrp':
            self.connect((self.uhd_usrp_source_0, 0), (self.blocks_copy_0, 0))
            self.connect((self.uhd_usrp_source_0, 0), (self.blocks_copy_1, 0))
        else:
            self.connect((self.osmosdr_source_0, 0), (self.blocks_copy_0, 0))
            self.connect((self.osmosdr_source_0, 0), (self.blocks_copy_1, 0))
        self.connect((self.blocks_copy_1, 0), (self.qtgui_freq_sink_x_0, 0))
        self.connect((self.blocks_copy_1, 0), (self.qtgui_time_sink_x_0, 0))
Esempio n. 40
0
    def __init__(self, puncpat='11'):
        gr.top_block.__init__(self, "Tx No Gui")
        Qt.QWidget.__init__(self)
        self.setWindowTitle("Tx No Gui")
        qtgui.util.check_set_qss()
        try:
            self.setWindowIcon(Qt.QIcon.fromTheme('gnuradio-grc'))
        except:
            pass
        self.top_scroll_layout = Qt.QVBoxLayout()
        self.setLayout(self.top_scroll_layout)
        self.top_scroll = Qt.QScrollArea()
        self.top_scroll.setFrameStyle(Qt.QFrame.NoFrame)
        self.top_scroll_layout.addWidget(self.top_scroll)
        self.top_scroll.setWidgetResizable(True)
        self.top_widget = Qt.QWidget()
        self.top_scroll.setWidget(self.top_widget)
        self.top_layout = Qt.QVBoxLayout(self.top_widget)
        self.top_grid_layout = Qt.QGridLayout()
        self.top_layout.addLayout(self.top_grid_layout)

        self.settings = Qt.QSettings("GNU Radio", "tx_no_gui")
        self.restoreGeometry(self.settings.value("geometry").toByteArray())


        ##################################################
        # Parameters
        ##################################################
        self.puncpat = puncpat

        ##################################################
        # Variables
        ##################################################
        self.sps = sps = 4
        self.nfilts = nfilts = 32
        self.eb = eb = 0.22

        self.tx_rrc_taps = tx_rrc_taps = firdes.root_raised_cosine(nfilts, nfilts, 1.0, eb, 5*sps*nfilts)

        self.taps_per_filt = taps_per_filt = len(tx_rrc_taps)/nfilts
        self.samp_rate_array_MCR = samp_rate_array_MCR = [4500000]
        self.rate = rate = 2
        self.polys = polys = [109, 79]
        self.k = k = 7
        self.header = header = [0x1, 0x0, 0x1, 0x0, 0x1, 0x1, 0x0, 0x0, 0x1, 0x1, 0x0, 0x1, 0x1, 0x1, 0x0, 0x1, 0x1, 0x0, 0x1, 0x0, 0x0, 0x1, 0x0, 0x0, 0x1, 0x1, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x1, 0x1, 0x1, 0x1, 0x0, 0x0, 0x1, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0]
        self.vector = vector = header + [int(random.random()*2) for i in range(896)] +header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)] +header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)] +header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)] +header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)] +header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)] +header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]+header + [int(random.random()*2) for i in range(896)]
        self.variable_qtgui_range_0_0 = variable_qtgui_range_0_0 = 50
        self.samp_rate = samp_rate = samp_rate_array_MCR[0]


        self.pld_enc = pld_enc = map( (lambda a: fec.cc_encoder_make(440, k, rate, (polys), 0, fec.CC_TERMINATED, False)), range(0,8) );
        self.pld_const = pld_const = digital.constellation_rect(([0.707+0.707j, -0.707+0.707j, -0.707-0.707j, 0.707-0.707j]), ([0, 1, 3, 2]), 4, 2, 2, 1, 1).base()
        self.pld_const.gen_soft_dec_lut(8)
        self.header_main = header_main = [0x1, 0x0, 0x1, 0x0, 0x1, 0x1, 0x0, 0x0, 0x1, 0x1, 0x0, 0x1, 0x1, 0x1, 0x0, 0x1, 0x1, 0x0, 0x1, 0x0, 0x0, 0x1, 0x0, 0x0, 0x1, 0x1, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x1, 0x1, 0x1, 0x1, 0x0, 0x0, 0x1, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0]
        self.frequencia_usrp = frequencia_usrp = 484e6
        self.filt_delay = filt_delay = 1+(taps_per_filt-1)/2
        self.copy = copy = True
        self.MCR = MCR = "master_clock_rate=18e6"

        ##################################################
        # Blocks
        ##################################################
        self._variable_qtgui_range_0_0_range = Range(0, 90, 1, 50, 200)
        self._variable_qtgui_range_0_0_win = RangeWidget(self._variable_qtgui_range_0_0_range, self.set_variable_qtgui_range_0_0, 'Gain_TX', "counter_slider", float)
        self.top_grid_layout.addWidget(self._variable_qtgui_range_0_0_win, 0, 2, 1, 2)
        for r in range(0, 1):
            self.top_grid_layout.setRowStretch(r, 1)
        for c in range(2, 4):
            self.top_grid_layout.setColumnStretch(c, 1)
        _copy_check_box = Qt.QCheckBox("copy")
        self._copy_choices = {True: True, False: False}
        self._copy_choices_inv = dict((v,k) for k,v in self._copy_choices.iteritems())
        self._copy_callback = lambda i: Qt.QMetaObject.invokeMethod(_copy_check_box, "setChecked", Qt.Q_ARG("bool", self._copy_choices_inv[i]))
        self._copy_callback(self.copy)
        _copy_check_box.stateChanged.connect(lambda i: self.set_copy(self._copy_choices[bool(i)]))
        self.top_grid_layout.addWidget(_copy_check_box, 0, 1, 1, 1)
        for r in range(0, 1):
            self.top_grid_layout.setRowStretch(r, 1)
        for c in range(1, 2):
            self.top_grid_layout.setColumnStretch(c, 1)
        self.uhd_usrp_sink_0_0 = uhd.usrp_sink(
        	",".join(("serial=F5EAE1", MCR)),
        	uhd.stream_args(
        		cpu_format="fc32",
        		channels=range(1),
        	),
        )
        self.uhd_usrp_sink_0_0.set_samp_rate(samp_rate)
        self.uhd_usrp_sink_0_0.set_time_now(uhd.time_spec(time.time()), uhd.ALL_MBOARDS)
        self.uhd_usrp_sink_0_0.set_center_freq(frequencia_usrp, 0)
        self.uhd_usrp_sink_0_0.set_gain(variable_qtgui_range_0_0, 0)
        self.uhd_usrp_sink_0_0.set_antenna('TX/RX', 0)
        self.scrambler_packets_same_seed_scramble_packetize_0 = scrambler_packets_same_seed.scramble_packetize(0x8A, 0x7F, 7, 440)
        self.qtgui_time_sink_x_1 = qtgui.time_sink_c(
        	1024, #size
        	samp_rate, #samp_rate
        	"TX USRP", #name
        	1 #number of inputs
        )
        self.qtgui_time_sink_x_1.set_update_time(0.10)
        self.qtgui_time_sink_x_1.set_y_axis(-1, 1)

        self.qtgui_time_sink_x_1.set_y_label('Amplitude', "")

        self.qtgui_time_sink_x_1.enable_tags(-1, True)
        self.qtgui_time_sink_x_1.set_trigger_mode(qtgui.TRIG_MODE_FREE, qtgui.TRIG_SLOPE_POS, 0.0, 0, 0, "")
        self.qtgui_time_sink_x_1.enable_autoscale(False)
        self.qtgui_time_sink_x_1.enable_grid(False)
        self.qtgui_time_sink_x_1.enable_axis_labels(True)
        self.qtgui_time_sink_x_1.enable_control_panel(False)
        self.qtgui_time_sink_x_1.enable_stem_plot(False)

        if not True:
          self.qtgui_time_sink_x_1.disable_legend()

        labels = ['', '', '', '', '',
                  '', '', '', '', '']
        widths = [1, 1, 1, 1, 1,
                  1, 1, 1, 1, 1]
        colors = ["blue", "red", "green", "black", "cyan",
                  "magenta", "yellow", "dark red", "dark green", "blue"]
        styles = [1, 1, 1, 1, 1,
                  1, 1, 1, 1, 1]
        markers = [-1, -1, -1, -1, -1,
                   -1, -1, -1, -1, -1]
        alphas = [1.0, 1.0, 1.0, 1.0, 1.0,
                  1.0, 1.0, 1.0, 1.0, 1.0]

        for i in xrange(2):
            if len(labels[i]) == 0:
                if(i % 2 == 0):
                    self.qtgui_time_sink_x_1.set_line_label(i, "Re{{Data {0}}}".format(i/2))
                else:
                    self.qtgui_time_sink_x_1.set_line_label(i, "Im{{Data {0}}}".format(i/2))
            else:
                self.qtgui_time_sink_x_1.set_line_label(i, labels[i])
            self.qtgui_time_sink_x_1.set_line_width(i, widths[i])
            self.qtgui_time_sink_x_1.set_line_color(i, colors[i])
            self.qtgui_time_sink_x_1.set_line_style(i, styles[i])
            self.qtgui_time_sink_x_1.set_line_marker(i, markers[i])
            self.qtgui_time_sink_x_1.set_line_alpha(i, alphas[i])

        self._qtgui_time_sink_x_1_win = sip.wrapinstance(self.qtgui_time_sink_x_1.pyqwidget(), Qt.QWidget)
        self.top_grid_layout.addWidget(self._qtgui_time_sink_x_1_win, 1, 3, 1, 1)
        for r in range(1, 2):
            self.top_grid_layout.setRowStretch(r, 1)
        for c in range(3, 4):
            self.top_grid_layout.setColumnStretch(c, 1)
        self.qtgui_time_sink_x_0_0 = qtgui.time_sink_f(
        	100*2, #size
        	samp_rate, #samp_rate
        	'Tx Data', #name
        	1 #number of inputs
        )
        self.qtgui_time_sink_x_0_0.set_update_time(0.10)
        self.qtgui_time_sink_x_0_0.set_y_axis(-1, 256)

        self.qtgui_time_sink_x_0_0.set_y_label('Amplitude', "")

        self.qtgui_time_sink_x_0_0.enable_tags(-1, True)
        self.qtgui_time_sink_x_0_0.set_trigger_mode(qtgui.TRIG_MODE_FREE, qtgui.TRIG_SLOPE_POS, 0.0, 0, 0, 'packet_length_tag_key')
        self.qtgui_time_sink_x_0_0.enable_autoscale(False)
        self.qtgui_time_sink_x_0_0.enable_grid(True)
        self.qtgui_time_sink_x_0_0.enable_axis_labels(True)
        self.qtgui_time_sink_x_0_0.enable_control_panel(False)
        self.qtgui_time_sink_x_0_0.enable_stem_plot(False)

        if not True:
          self.qtgui_time_sink_x_0_0.disable_legend()

        labels = ['', '', '', '', '',
                  '', '', '', '', '']
        widths = [1, 1, 1, 1, 1,
                  1, 1, 1, 1, 1]
        colors = ["blue", "red", "green", "black", "cyan",
                  "magenta", "yellow", "dark red", "dark green", "blue"]
        styles = [1, 1, 1, 1, 1,
                  1, 1, 1, 1, 1]
        markers = [-1, -1, -1, -1, -1,
                   -1, -1, -1, -1, -1]
        alphas = [1.0, 1.0, 1.0, 1.0, 1.0,
                  1.0, 1.0, 1.0, 1.0, 1.0]

        for i in xrange(1):
            if len(labels[i]) == 0:
                self.qtgui_time_sink_x_0_0.set_line_label(i, "Data {0}".format(i))
            else:
                self.qtgui_time_sink_x_0_0.set_line_label(i, labels[i])
            self.qtgui_time_sink_x_0_0.set_line_width(i, widths[i])
            self.qtgui_time_sink_x_0_0.set_line_color(i, colors[i])
            self.qtgui_time_sink_x_0_0.set_line_style(i, styles[i])
            self.qtgui_time_sink_x_0_0.set_line_marker(i, markers[i])
            self.qtgui_time_sink_x_0_0.set_line_alpha(i, alphas[i])

        self._qtgui_time_sink_x_0_0_win = sip.wrapinstance(self.qtgui_time_sink_x_0_0.pyqwidget(), Qt.QWidget)
        self.top_grid_layout.addWidget(self._qtgui_time_sink_x_0_0_win, 1, 1, 1, 1)
        for r in range(1, 2):
            self.top_grid_layout.setRowStretch(r, 1)
        for c in range(1, 2):
            self.top_grid_layout.setColumnStretch(c, 1)
        self.qtgui_const_sink_x_0_0_0_0 = qtgui.const_sink_c(
        	1024, #size
        	"TX Const", #name
        	1 #number of inputs
        )
        self.qtgui_const_sink_x_0_0_0_0.set_update_time(0.10)
        self.qtgui_const_sink_x_0_0_0_0.set_y_axis(-2, 2)
        self.qtgui_const_sink_x_0_0_0_0.set_x_axis(-2, 2)
        self.qtgui_const_sink_x_0_0_0_0.set_trigger_mode(qtgui.TRIG_MODE_FREE, qtgui.TRIG_SLOPE_POS, 0.0, 0, "")
        self.qtgui_const_sink_x_0_0_0_0.enable_autoscale(False)
        self.qtgui_const_sink_x_0_0_0_0.enable_grid(False)
        self.qtgui_const_sink_x_0_0_0_0.enable_axis_labels(True)

        if not True:
          self.qtgui_const_sink_x_0_0_0_0.disable_legend()

        labels = ['', '', '', '', '',
                  '', '', '', '', '']
        widths = [1, 1, 1, 1, 1,
                  1, 1, 1, 1, 1]
        colors = ["blue", "red", "red", "red", "red",
                  "red", "red", "red", "red", "red"]
        styles = [0, 0, 0, 0, 0,
                  0, 0, 0, 0, 0]
        markers = [0, 0, 0, 0, 0,
                   0, 0, 0, 0, 0]
        alphas = [1.0, 1.0, 1.0, 1.0, 1.0,
                  1.0, 1.0, 1.0, 1.0, 1.0]
        for i in xrange(1):
            if len(labels[i]) == 0:
                self.qtgui_const_sink_x_0_0_0_0.set_line_label(i, "Data {0}".format(i))
            else:
                self.qtgui_const_sink_x_0_0_0_0.set_line_label(i, labels[i])
            self.qtgui_const_sink_x_0_0_0_0.set_line_width(i, widths[i])
            self.qtgui_const_sink_x_0_0_0_0.set_line_color(i, colors[i])
            self.qtgui_const_sink_x_0_0_0_0.set_line_style(i, styles[i])
            self.qtgui_const_sink_x_0_0_0_0.set_line_marker(i, markers[i])
            self.qtgui_const_sink_x_0_0_0_0.set_line_alpha(i, alphas[i])

        self._qtgui_const_sink_x_0_0_0_0_win = sip.wrapinstance(self.qtgui_const_sink_x_0_0_0_0.pyqwidget(), Qt.QWidget)
        self.top_grid_layout.addWidget(self._qtgui_const_sink_x_0_0_0_0_win, 1, 2, 1, 1)
        for r in range(1, 2):
            self.top_grid_layout.setRowStretch(r, 1)
        for c in range(2, 3):
            self.top_grid_layout.setColumnStretch(c, 1)
        self.pfb_arb_resampler_xxx_0 = pfb.arb_resampler_ccf(
        	  sps,
                  taps=(tx_rrc_taps),
        	  flt_size=nfilts)
        self.pfb_arb_resampler_xxx_0.declare_sample_delay(filt_delay)

        self.insert_vec_cpp_new_vec_0 = insert_vec_cpp.new_vec((vector))
        self.fec_extended_encoder_0 = fec.extended_encoder(encoder_obj_list=pld_enc, threading='capillary', puncpat=puncpat)
        self.digital_map_bb_1_0 = digital.map_bb((pld_const.pre_diff_code()))
        self.digital_chunks_to_symbols_xx_0_0 = digital.chunks_to_symbols_bc((pld_const.points()), 1)
        self.blocks_vector_source_x_0_0_0 = blocks.vector_source_b([0], True, 1, [])
        self.blocks_stream_mux_0_1_0 = blocks.stream_mux(gr.sizeof_char*1, (96, 896))
        self.blocks_stream_mux_0_0 = blocks.stream_mux(gr.sizeof_char*1, (892, 4))
        self.blocks_repack_bits_bb_1_0_0_1 = blocks.repack_bits_bb(8, 1, '', False, gr.GR_MSB_FIRST)
        self.blocks_repack_bits_bb_1_0_0_0 = blocks.repack_bits_bb(1, pld_const.bits_per_symbol(), '', False, gr.GR_MSB_FIRST)
        self.blocks_multiply_const_vxx_1 = blocks.multiply_const_vcc((0.7, ))
        self.blocks_file_source_0_0_1_0 = blocks.file_source(gr.sizeof_char*1, '/home/andre/Desktop/Files_To_Transmit/trasmit_10_mb.txt', False)
        self.blocks_file_source_0_0_1_0.set_begin_tag(pmt.PMT_NIL)
        self.blocks_copy_0 = blocks.copy(gr.sizeof_gr_complex*1)
        self.blocks_copy_0.set_enabled(copy)
        self.blocks_char_to_float_1_0_0 = blocks.char_to_float(1, 1)
        self.acode_1104 = blocks.vector_source_b([0x1, 0x0, 0x1, 0x0, 0x1, 0x1, 0x0, 0x0, 0x1, 0x1, 0x0, 0x1, 0x1, 0x1, 0x0, 0x1, 0x1, 0x0, 0x1, 0x0, 0x0, 0x1, 0x0, 0x0, 0x1, 0x1, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x1, 0x1, 0x1, 0x1, 0x0, 0x0, 0x1, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0], True, 1, [])



        ##################################################
        # Connections
        ##################################################
        self.connect((self.acode_1104, 0), (self.blocks_stream_mux_0_1_0, 0))
        self.connect((self.blocks_char_to_float_1_0_0, 0), (self.qtgui_time_sink_x_0_0, 0))
        self.connect((self.blocks_copy_0, 0), (self.blocks_multiply_const_vxx_1, 0))
        self.connect((self.blocks_file_source_0_0_1_0, 0), (self.blocks_char_to_float_1_0_0, 0))
        self.connect((self.blocks_file_source_0_0_1_0, 0), (self.blocks_repack_bits_bb_1_0_0_1, 0))
        self.connect((self.blocks_multiply_const_vxx_1, 0), (self.qtgui_const_sink_x_0_0_0_0, 0))
        self.connect((self.blocks_multiply_const_vxx_1, 0), (self.qtgui_time_sink_x_1, 0))
        self.connect((self.blocks_multiply_const_vxx_1, 0), (self.uhd_usrp_sink_0_0, 0))
        self.connect((self.blocks_repack_bits_bb_1_0_0_0, 0), (self.digital_map_bb_1_0, 0))
        self.connect((self.blocks_repack_bits_bb_1_0_0_1, 0), (self.scrambler_packets_same_seed_scramble_packetize_0, 0))
        self.connect((self.blocks_stream_mux_0_0, 0), (self.blocks_stream_mux_0_1_0, 1))
        self.connect((self.blocks_stream_mux_0_1_0, 0), (self.insert_vec_cpp_new_vec_0, 0))
        self.connect((self.blocks_vector_source_x_0_0_0, 0), (self.blocks_stream_mux_0_0, 1))
        self.connect((self.digital_chunks_to_symbols_xx_0_0, 0), (self.pfb_arb_resampler_xxx_0, 0))
        self.connect((self.digital_map_bb_1_0, 0), (self.digital_chunks_to_symbols_xx_0_0, 0))
        self.connect((self.fec_extended_encoder_0, 0), (self.blocks_stream_mux_0_0, 0))
        self.connect((self.insert_vec_cpp_new_vec_0, 0), (self.blocks_repack_bits_bb_1_0_0_0, 0))
        self.connect((self.pfb_arb_resampler_xxx_0, 0), (self.blocks_copy_0, 0))
        self.connect((self.scrambler_packets_same_seed_scramble_packetize_0, 0), (self.fec_extended_encoder_0, 0))