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