def __init__(self, sample_rate): super(fsk_center_tracking, self).__init__( "fsk_center_tracking", gr.io_signature(1, 1, gr.sizeof_gr_complex*1), gr.io_signature(1, 1, gr.sizeof_gr_complex*1), ) # Arbitrary averaging values that seem to work OK. window_symbols = 20 symbol_rate = 19200 average_window = int(floor(sample_rate * window_symbols / symbol_rate)) self.delay = blocks.delay(gr.sizeof_gr_complex*1, average_window) self.demod = analog.quadrature_demod_cf(1) self.moving_average = blocks.moving_average_ff(average_window, 1.0 / average_window, 4000) self.vco = blocks.vco_c(sample_rate, -sample_rate, 1) self.multiply = blocks.multiply_vcc(1) self.connect((self, 0), (self.delay, 0)) self.connect((self.delay, 0), (self.multiply, 0)) self.connect((self, 0), (self.demod, 0)) self.connect((self.demod, 0), (self.moving_average, 0)) self.connect((self.moving_average, 0), (self.vco, 0)) self.connect((self.vco, 0), (self.multiply, 1)) self.connect((self.multiply, 0), (self, 0))
def __init__(self, sample_rate): super(fsk_center_tracking, self).__init__( "fsk_center_tracking", gr.io_signature(1, 1, gr.sizeof_gr_complex * 1), gr.io_signature(1, 1, gr.sizeof_gr_complex * 1), ) # Arbitrary averaging values that seem to work OK. window_symbols = 20 symbol_rate = 19200 average_window = int(floor(sample_rate * window_symbols / symbol_rate)) self.delay = blocks.delay(gr.sizeof_gr_complex * 1, average_window) self.demod = analog.quadrature_demod_cf(1) self.moving_average = blocks.moving_average_ff(average_window, 1.0 / average_window, 4000) self.vco = blocks.vco_c(sample_rate, -sample_rate, 1) self.multiply = blocks.multiply_vcc(1) self.connect((self, 0), (self.delay, 0)) self.connect((self.delay, 0), (self.multiply, 0)) self.connect((self, 0), (self.demod, 0)) self.connect((self.demod, 0), (self.moving_average, 0)) self.connect((self.moving_average, 0), (self.vco, 0)) self.connect((self.vco, 0), (self.multiply, 1)) self.connect((self.multiply, 0), (self, 0))
def __init__(self, fft_len, freq_sample_delay_samps, freq_samps_to_avg, mag_samps_to_avg, thresh): gr.hier_block2.__init__(self, "Coarse Dehopper", gr.io_signature(1, 1, gr.sizeof_gr_complex*1), gr.io_signature(1, 1, gr.sizeof_gr_complex*1)) ''' Constructor @param fft_len - @param freq_sample_delay_samps - @param freq_samps_to_avg - @param mag_samps_to_avg - @param thresh - ''' ################################################## # Parameters ################################################## self.fft_len = fft_len self.freq_sample_delay_samps = freq_sample_delay_samps self.freq_samps_to_avg = freq_samps_to_avg self.mag_samps_to_avg = mag_samps_to_avg self.thresh = thresh ################################################## # Blocks ################################################## self.s_and_h_detector = s_and_h_detector( freq_sample_delay_samps=freq_sample_delay_samps, freq_samps_to_avg=freq_samps_to_avg, mag_samps_to_avg=mag_samps_to_avg, thresh=thresh, ) self.resamp = pfb.arb_resampler_ccf(1.0 / (fft_len / 4.0), taps=None, flt_size=32) self.resamp.declare_sample_delay(0) self.fir = filter.fir_filter_ccc(2, (firdes.low_pass_2(1,1,.30,.05,60))) self.fir.declare_sample_delay(0) self.fft_peak = fft_peak(fft_len=fft_len) self.vco = blocks.vco_c(1, 2.0 * pi / fft_len, 1) self.mult_conj = blocks.multiply_conjugate_cc(1) self.delay = blocks.delay(gr.sizeof_gr_complex*1, int(freq_samps_to_avg) + freq_sample_delay_samps) self.c2mag = blocks.complex_to_mag(1) ################################################## # Connections ################################################## self.connect((self.c2mag, 0), (self.s_and_h_detector, 0)) self.connect((self.delay, 0), (self.mult_conj, 0)) self.connect((self.mult_conj, 0), (self.fir, 0)) self.connect((self.vco, 0), (self.mult_conj, 1)) self.connect((self.fft_peak, 0), (self.s_and_h_detector, 1)) self.connect((self.fir, 0), (self.resamp, 0)) self.connect((self, 0), (self.c2mag, 0)) self.connect((self, 0), (self.delay, 0)) self.connect((self, 0), (self.fft_peak, 0)) self.connect((self.resamp, 0), (self, 0)) self.connect((self.s_and_h_detector, 0), (self.vco, 0))
def __init__(self, context, mode, chirp_rate=0.1, output_rate=10000): gr.hier_block2.__init__( self, type(self).__name__, gr.io_signature(0, 0, 0), gr.io_signature(1, 1, gr.sizeof_gr_complex) ) self.__output_rate = output_rate self.__chirp_rate = chirp_rate self.__control = analog.sig_source_f(output_rate, analog.GR_SAW_WAVE, chirp_rate, output_rate * 2 * math.pi, 0) chirp_vco = blocks.vco_c(output_rate, 1, 1) self.connect(self.__control, chirp_vco, self)
def __init__(self, bias, freq_sample_delay_samps, freq_samps_to_avg, mag_samps_to_avg, resamp_rate, thresh): gr.hier_block2.__init__(self, "Fine Dehopper", gr.io_signature(1, 1, gr.sizeof_gr_complex*1), gr.io_signature(1, 1, gr.sizeof_gr_complex*1)) ################################################## # Parameters ################################################## self.bias = bias self.freq_sample_delay_samps = freq_sample_delay_samps self.freq_samps_to_avg = freq_samps_to_avg self.mag_samps_to_avg = mag_samps_to_avg self.resamp_rate = resamp_rate self.thresh = thresh ################################################## # Blocks ################################################## self.s_and_h_detector = s_and_h_detector( freq_sample_delay_samps=freq_sample_delay_samps, freq_samps_to_avg=freq_samps_to_avg, mag_samps_to_avg=mag_samps_to_avg, thresh=thresh, ) self.resamp = pfb.arb_resampler_ccf(resamp_rate * 2.0, taps=None, flt_size=32) self.resamp.declare_sample_delay(0) self.fir = filter.fir_filter_ccc(2, (firdes.low_pass_2(1,1,.25,.05,60))) self.fir.declare_sample_delay(0) self.vco = blocks.vco_c(1, 1, 1) self.mult_conj = blocks.multiply_conjugate_cc(1) self.delay = blocks.delay(gr.sizeof_gr_complex*1, int(freq_samps_to_avg) + freq_sample_delay_samps) self.c2mag = blocks.complex_to_mag(1) self.add_const = blocks.add_const_vff((-1.0 * bias * (resamp_rate), )) self.demod = analog.quadrature_demod_cf(1) ################################################## # Connections ################################################## self.connect((self.demod, 0), (self.s_and_h_detector, 1)) self.connect((self.add_const, 0), (self.vco, 0)) self.connect((self.c2mag, 0), (self.s_and_h_detector, 0)) self.connect((self.delay, 0), (self.mult_conj, 0)) self.connect((self.mult_conj, 0), (self.fir, 0)) self.connect((self.vco, 0), (self.mult_conj, 1)) self.connect((self.fir, 0), (self.resamp, 0)) self.connect((self, 0), (self.demod, 0)) self.connect((self, 0), (self.c2mag, 0)) self.connect((self, 0), (self.delay, 0)) self.connect((self.resamp, 0), (self, 0)) self.connect((self.s_and_h_detector, 0), (self.add_const, 0))
def __init__(self, context, mode, chirp_rate=0.1, output_rate=10000): gr.hier_block2.__init__(self, type(self).__name__, gr.io_signature(0, 0, 0), gr.io_signature(1, 1, gr.sizeof_gr_complex)) self.__output_rate = output_rate self.__chirp_rate = chirp_rate self.__control = analog.sig_source_f(output_rate, analog.GR_SAW_WAVE, chirp_rate, output_rate * 2 * math.pi, 0) chirp_vco = blocks.vco_c(output_rate, 1, 1) self.connect(self.__control, chirp_vco, self)
def test_002(self): src_data = 200*[0,] + 200*[0.5,] + 200*[1,] expected_result = 200*[1,] + \ sig_source_c(1, 0.125, 1, 200) + \ sig_source_c(1, 0.25, 1, 200) src = blocks.vector_source_f(src_data) op = blocks.vco_c(1, math.pi/2.0, 1) dst = blocks.vector_sink_c() self.tb.connect(src, op, dst) self.tb.run() result_data = dst.data() self.assertComplexTuplesAlmostEqual(expected_result, result_data, 5)
def __init__( self, n_channels,burst_length, freq_delta, base_freq, seed,rate ): gr.hier_block2.__init__(self, "HoppingRx", gr.io_signature(1, 1, gr.sizeof_float), # Input Signature gr.io_signature(1, 1, gr.sizeof_gr_complex), # Output Signature ) ################################################## # Hopping Sequence ################################################## lowest_frequency = base_freq - numpy.floor(n_channels/2) * freq_delta self.hop_sequence = [lowest_frequency + n * freq_delta for n in xrange(n_channels)] random.seed(seed) lam = random.random() random.shuffle(self.hop_sequence, lambda: lam) senstivity = 2*math.pi ################################################## # Blocks ################################################## self.hop_vec = blocks.vector_source_f((self.hop_sequence), repeat=True) self.repeat_blk = blocks.repeat(gr.sizeof_float*1, burst_length) self.vco_blk = blocks.vco_c(rate,senstivity,1.0) self.null_snk = blocks.null_sink(gr.sizeof_float*1) ################################################## # Connections ################################################## self.connect((self.hop_vec,0),(self.repeat_blk,0)) self.connect((self.repeat_blk,0),(self.vco_blk,0)) self.connect((self.vco_blk,0),self) self.connect(self,(self.null_snk,0)) threshold = self
def test_002(self): src_data = 200 * [ 0, ] + 200 * [ 0.5, ] + 200 * [ 1, ] expected_result = 200*[1,] + \ sig_source_c(1, 0.125, 1, 200) + \ sig_source_c(1, 0.25, 1, 200) src = blocks.vector_source_f(src_data) op = blocks.vco_c(1, math.pi / 2.0, 1) dst = blocks.vector_sink_c() self.tb.connect(src, op, dst) self.tb.run() result_data = dst.data() self.assertComplexTuplesAlmostEqual(expected_result, result_data, 5)
def __init__(self, n_channels, burst_length, freq_delta, base_freq, seed, rate): gr.hier_block2.__init__( self, "HoppingRx", gr.io_signature(1, 1, gr.sizeof_float), # Input Signature gr.io_signature(1, 1, gr.sizeof_gr_complex), # Output Signature ) ################################################## # Hopping Sequence ################################################## lowest_frequency = base_freq - numpy.floor(n_channels / 2) * freq_delta self.hop_sequence = [ lowest_frequency + n * freq_delta for n in xrange(n_channels) ] random.seed(seed) lam = random.random() random.shuffle(self.hop_sequence, lambda: lam) senstivity = 2 * math.pi ################################################## # Blocks ################################################## self.hop_vec = blocks.vector_source_f((self.hop_sequence), repeat=True) self.repeat_blk = blocks.repeat(gr.sizeof_float * 1, burst_length) self.vco_blk = blocks.vco_c(rate, senstivity, 1.0) self.null_snk = blocks.null_sink(gr.sizeof_float * 1) ################################################## # Connections ################################################## self.connect((self.hop_vec, 0), (self.repeat_blk, 0)) self.connect((self.repeat_blk, 0), (self.vco_blk, 0)) self.connect((self.vco_blk, 0), self) self.connect(self, (self.null_snk, 0)) threshold = self
def __init__(self): gr.top_block.__init__(self, "Residual Carrier") Qt.QWidget.__init__(self) self.setWindowTitle("Residual Carrier") 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", "residual_carrier") try: if StrictVersion(Qt.qVersion()) < StrictVersion("5.0.0"): self.restoreGeometry( self.settings.value("geometry").toByteArray()) else: self.restoreGeometry(self.settings.value("geometry")) except: pass ################################################## # Variables ################################################## self.sweep_rate = sweep_rate = 0 self.sweep_range = sweep_range = 0 self.snr = snr = 20 self.samp_rate = samp_rate = 100000 self.modulation_coeff = modulation_coeff = 0 self.frequency = frequency = 0 self.datarate = datarate = 4000 self.constellation_0 = constellation_0 = digital.constellation_calcdist( [-1 - 0.5j, -1 + 0.5j], [0, 1], 4, 1).base() ################################################## # Blocks ################################################## self._sweep_rate_range = Range(0, 50e3, 100, 0, 200) self._sweep_rate_win = RangeWidget(self._sweep_rate_range, self.set_sweep_rate, 'Sweep rate (Hz/s)', "counter_slider", float) self.top_layout.addWidget(self._sweep_rate_win) self._sweep_range_range = Range(0, 50e3, 1e3, 0, 200) self._sweep_range_win = RangeWidget(self._sweep_range_range, self.set_sweep_range, 'Sweep Range (Hz)', "counter_slider", float) self.top_layout.addWidget(self._sweep_range_win) self._snr_range = Range(-20, 50, 1, 20, 200) self._snr_win = RangeWidget(self._snr_range, self.set_snr, 'SNR (dB)', "counter_slider", float) self.top_layout.addWidget(self._snr_win) self._modulation_coeff_range = Range(0, 2, 0.1, 0, 200) self._modulation_coeff_win = RangeWidget(self._modulation_coeff_range, self.set_modulation_coeff, 'Modulation Coefficent', "counter", float) self.top_layout.addWidget(self._modulation_coeff_win) self._frequency_range = Range(-10e3, 10e3, 100, 0, 200) self._frequency_win = RangeWidget(self._frequency_range, self.set_frequency, 'Center frequency (Hz)', "counter_slider", float) self.top_layout.addWidget(self._frequency_win) self._datarate_range = Range(1000, 20000, 1000, 4000, 200) self._datarate_win = RangeWidget(self._datarate_range, self.set_datarate, 'Data Rate (bps', "counter", float) self.top_layout.addWidget(self._datarate_win) self.qtgui_freq_sink_x_0 = qtgui.freq_sink_c( 1024, #size firdes.WIN_BLACKMAN_hARRIS, #wintype 0, #fc samp_rate, #bw "", #name 1) 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(0.1) self.qtgui_freq_sink_x_0.enable_axis_labels(True) self.qtgui_freq_sink_x_0.enable_control_panel(False) 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 range(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_layout.addWidget(self._qtgui_freq_sink_x_0_win) self.blocks_vco_c_0 = blocks.vco_c(samp_rate, 1, 1) self.blocks_throttle_0 = blocks.throttle(gr.sizeof_int * 1, datarate * 16, True) self.blocks_repeat_0 = blocks.repeat(gr.sizeof_float * 1, 25) self.blocks_multiply_xx_0 = blocks.multiply_vcc(1) self.blocks_int_to_float_0 = blocks.int_to_float(1, 1) self.blocks_add_xx_1 = blocks.add_vcc(1) self.blocks_add_const_vxx_0 = blocks.add_const_ff(-0.5) self.analog_sig_source_x_2_1 = analog.sig_source_f( samp_rate, analog.GR_TRI_WAVE, 0 if sweep_range == 0 else sweep_rate / sweep_range, 2 * 3.14159265359 * sweep_range, 2 * 3.14159265359 * frequency, -3.14159265359) self.analog_random_source_x_1 = blocks.vector_source_i( list(map(int, numpy.random.randint(0, 2, 1000))), True) self.analog_phase_modulator_fc_0 = analog.phase_modulator_fc( 2 * modulation_coeff) self.analog_noise_source_x_0 = analog.noise_source_c( analog.GR_GAUSSIAN, 10**(-snr / 10), 0) ################################################## # Connections ################################################## self.connect((self.analog_noise_source_x_0, 0), (self.blocks_add_xx_1, 1)) self.connect((self.analog_phase_modulator_fc_0, 0), (self.blocks_multiply_xx_0, 0)) self.connect((self.analog_random_source_x_1, 0), (self.blocks_throttle_0, 0)) self.connect((self.analog_sig_source_x_2_1, 0), (self.blocks_vco_c_0, 0)) self.connect((self.blocks_add_const_vxx_0, 0), (self.blocks_repeat_0, 0)) self.connect((self.blocks_add_xx_1, 0), (self.qtgui_freq_sink_x_0, 0)) self.connect((self.blocks_int_to_float_0, 0), (self.blocks_add_const_vxx_0, 0)) self.connect((self.blocks_multiply_xx_0, 0), (self.blocks_add_xx_1, 0)) self.connect((self.blocks_repeat_0, 0), (self.analog_phase_modulator_fc_0, 0)) self.connect((self.blocks_throttle_0, 0), (self.blocks_int_to_float_0, 0)) self.connect((self.blocks_vco_c_0, 0), (self.blocks_multiply_xx_0, 1))
def __init__(self): gr.top_block.__init__(self, "Top Block") Qt.QWidget.__init__(self) self.setWindowTitle("Top Block") 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", "top_block") self.restoreGeometry(self.settings.value("geometry").toByteArray()) ################################################## # Variables ################################################## self.symb_rate = symb_rate = 300 self.samp_rate = samp_rate = 32000 self.noise_volt = noise_volt = 0.0 self.filter_bw = filter_bw = 5 * symb_rate ################################################## # Blocks ################################################## self._noise_volt_range = Range(0, 2, 0.01, 0.0, 200) self._noise_volt_win = RangeWidget(self._noise_volt_range, self.set_noise_volt, 'Channel: Noise Voltage', "counter_slider", float) self.top_grid_layout.addWidget(self._noise_volt_win, 0, 0, 1, 1) for r in range(0, 1): self.top_grid_layout.setRowStretch(r, 1) for c in range(0, 1): self.top_grid_layout.setColumnStretch(c, 1) self._filter_bw_range = Range(0.0 * symb_rate, 10 * symb_rate, 1, 5 * symb_rate, 200) self._filter_bw_win = RangeWidget(self._filter_bw_range, self.set_filter_bw, "filter_bw", "counter_slider", float) self.top_grid_layout.addWidget(self._filter_bw_win) self.qtgui_time_sink_x_0 = qtgui.time_sink_f( 1024, #size samp_rate, #samp_rate "", #name 2 #number of inputs ) self.qtgui_time_sink_x_0.set_update_time(0.10) 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: self.qtgui_time_sink_x_0.set_line_label( i, "Data {0}".format(i)) 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) self.low_pass_filter_0_0 = filter.fir_filter_ccf( 1, firdes.low_pass(1, samp_rate, filter_bw, filter_bw / 2, firdes.WIN_RECTANGULAR, 6.76)) self.low_pass_filter_0 = filter.fir_filter_ccf( 1, firdes.low_pass(1, samp_rate, filter_bw, filter_bw / 2, firdes.WIN_RECTANGULAR, 6.76)) self.channels_channel_model_0_0 = channels.channel_model( noise_voltage=noise_volt, frequency_offset=0.0005, epsilon=1.0, taps=(1.0, ), noise_seed=0, block_tags=False) self.blocks_vector_source_x_0_0 = blocks.vector_source_f((1, 1, -1), True, 1, []) self.blocks_vco_c_0 = blocks.vco_c(samp_rate, samp_rate, 1) self.blocks_throttle_0 = blocks.throttle(gr.sizeof_gr_complex * 1, samp_rate, True) self.blocks_repeat_0 = blocks.repeat(gr.sizeof_float * 1, samp_rate / symb_rate) self.blocks_multiply_xx_1 = blocks.multiply_vcc(1) self.blocks_multiply_xx_0 = blocks.multiply_vcc(1) self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vff((-0.5, )) self.blocks_float_to_complex_0 = blocks.float_to_complex(1) self.blocks_complex_to_mag_0 = blocks.complex_to_mag(1) self.blocks_complex_to_arg_0 = blocks.complex_to_arg(1) self.analog_pll_freqdet_cf_0 = analog.pll_freqdet_cf(0.01, 0.06, -0.06) ################################################## # Connections ################################################## self.connect((self.analog_pll_freqdet_cf_0, 0), (self.blocks_multiply_const_vxx_0, 0)) self.connect((self.blocks_complex_to_arg_0, 0), (self.qtgui_time_sink_x_0, 0)) self.connect((self.blocks_complex_to_mag_0, 0), (self.qtgui_time_sink_x_0, 1)) self.connect((self.blocks_float_to_complex_0, 0), (self.blocks_throttle_0, 0)) self.connect((self.blocks_multiply_const_vxx_0, 0), (self.blocks_vco_c_0, 0)) self.connect((self.blocks_multiply_xx_0, 0), (self.analog_pll_freqdet_cf_0, 0)) self.connect((self.blocks_multiply_xx_1, 0), (self.blocks_complex_to_arg_0, 0)) self.connect((self.blocks_multiply_xx_1, 0), (self.blocks_complex_to_mag_0, 0)) self.connect((self.blocks_repeat_0, 0), (self.blocks_float_to_complex_0, 1)) self.connect((self.blocks_repeat_0, 0), (self.blocks_float_to_complex_0, 0)) self.connect((self.blocks_throttle_0, 0), (self.low_pass_filter_0, 0)) self.connect((self.blocks_vco_c_0, 0), (self.blocks_multiply_xx_1, 1)) self.connect((self.blocks_vector_source_x_0_0, 0), (self.blocks_repeat_0, 0)) self.connect((self.channels_channel_model_0_0, 0), (self.low_pass_filter_0_0, 0)) self.connect((self.low_pass_filter_0, 0), (self.channels_channel_model_0_0, 0)) self.connect((self.low_pass_filter_0_0, 0), (self.blocks_multiply_xx_0, 0)) self.connect((self.low_pass_filter_0_0, 0), (self.blocks_multiply_xx_0, 1)) self.connect((self.low_pass_filter_0_0, 0), (self.blocks_multiply_xx_1, 0))
def __init__(self): gr.top_block.__init__(self, "Top Block") Qt.QWidget.__init__(self) self.setWindowTitle("Top Block") 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", "top_block") if StrictVersion(Qt.qVersion()) < StrictVersion("5.0.0"): self.restoreGeometry(self.settings.value("geometry").toByteArray()) else: self.restoreGeometry( self.settings.value("geometry", type=QtCore.QByteArray)) ################################################## # Variables ################################################## self.tx_freq = tx_freq = 1.3e9 self.samp_rate = samp_rate = 10e6 self.rx_freq = rx_freq = 2.6e9 self.fft_size = fft_size = 2**12 ################################################## # Blocks ################################################## self.qtgui_vector_sink_f_0 = qtgui.vector_sink_f( fft_size, 0, 1.0, "x-Axis", "y-Axis", "", 1 # Number of inputs ) self.qtgui_vector_sink_f_0.set_update_time(0.10) self.qtgui_vector_sink_f_0.set_y_axis(-130, -40) self.qtgui_vector_sink_f_0.enable_autoscale(False) self.qtgui_vector_sink_f_0.enable_grid(False) self.qtgui_vector_sink_f_0.set_x_axis_units("") self.qtgui_vector_sink_f_0.set_y_axis_units("") self.qtgui_vector_sink_f_0.set_ref_level(0) 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_vector_sink_f_0.set_line_label( i, "Data {0}".format(i)) else: self.qtgui_vector_sink_f_0.set_line_label(i, labels[i]) self.qtgui_vector_sink_f_0.set_line_width(i, widths[i]) self.qtgui_vector_sink_f_0.set_line_color(i, colors[i]) self.qtgui_vector_sink_f_0.set_line_alpha(i, alphas[i]) self._qtgui_vector_sink_f_0_win = sip.wrapinstance( self.qtgui_vector_sink_f_0.pyqwidget(), Qt.QWidget) self.top_layout.addWidget(self._qtgui_vector_sink_f_0_win) self.peak_hold = peak_hold.blk() self.osmosdr_source_0_0 = osmosdr.source(args="numchan=" + str(1) + " " + 'bladerf=0') self.osmosdr_source_0_0.set_sample_rate(samp_rate) self.osmosdr_source_0_0.set_center_freq(rx_freq, 0) self.osmosdr_source_0_0.set_freq_corr(0, 0) self.osmosdr_source_0_0.set_dc_offset_mode(0, 0) self.osmosdr_source_0_0.set_iq_balance_mode(0, 0) self.osmosdr_source_0_0.set_gain_mode(False, 0) self.osmosdr_source_0_0.set_gain(10, 0) self.osmosdr_source_0_0.set_if_gain(20, 0) self.osmosdr_source_0_0.set_bb_gain(20, 0) self.osmosdr_source_0_0.set_antenna('', 0) self.osmosdr_source_0_0.set_bandwidth(0, 0) self.osmosdr_sink_0_0 = osmosdr.sink(args="numchan=" + str(1) + " " + 'bladerf=0') self.osmosdr_sink_0_0.set_sample_rate(samp_rate) self.osmosdr_sink_0_0.set_center_freq(tx_freq, 0) self.osmosdr_sink_0_0.set_freq_corr(0, 0) self.osmosdr_sink_0_0.set_gain(10, 0) self.osmosdr_sink_0_0.set_if_gain(20, 0) self.osmosdr_sink_0_0.set_bb_gain(20, 0) self.osmosdr_sink_0_0.set_antenna('', 0) self.osmosdr_sink_0_0.set_bandwidth(0, 0) self.fft_vxx_0 = fft.fft_vcc(fft_size, True, (window.blackmanharris(fft_size)), True, 2) self.divide_by_n = divide_by_n.blk(divisor=4096) self.dc_blocker_xx_0 = filter.dc_blocker_cc(512, True) self.blocks_vco_c_0 = blocks.vco_c(samp_rate, 2 * pi * 5e6, .3) self.blocks_stream_to_vector_0 = blocks.stream_to_vector( gr.sizeof_gr_complex * 1, fft_size) self.blocks_nlog10_ff_0 = blocks.nlog10_ff(10, fft_size, -30) self.blocks_complex_to_mag_squared_0 = blocks.complex_to_mag_squared( fft_size) self.analog_sig_source_x_0_0 = analog.sig_source_f( samp_rate, analog.GR_SAW_WAVE, .1, 1, -.5) ################################################## # Connections ################################################## self.connect((self.analog_sig_source_x_0_0, 0), (self.blocks_vco_c_0, 0)) self.connect((self.blocks_complex_to_mag_squared_0, 0), (self.divide_by_n, 0)) self.connect((self.blocks_nlog10_ff_0, 0), (self.peak_hold, 0)) self.connect((self.blocks_stream_to_vector_0, 0), (self.fft_vxx_0, 0)) self.connect((self.blocks_vco_c_0, 0), (self.osmosdr_sink_0_0, 0)) self.connect((self.dc_blocker_xx_0, 0), (self.blocks_stream_to_vector_0, 0)) self.connect((self.divide_by_n, 0), (self.blocks_nlog10_ff_0, 0)) self.connect((self.fft_vxx_0, 0), (self.blocks_complex_to_mag_squared_0, 0)) self.connect((self.osmosdr_source_0_0, 0), (self.dc_blocker_xx_0, 0)) self.connect((self.peak_hold, 0), (self.qtgui_vector_sink_f_0, 0))
def __init__(self, samp_rate=32000): gr.top_block.__init__(self, "Carrier Sweep") Qt.QWidget.__init__(self) self.setWindowTitle("Carrier Sweep") 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", "carrier_sweep") try: if StrictVersion(Qt.qVersion()) < StrictVersion("5.0.0"): self.restoreGeometry( self.settings.value("geometry").toByteArray()) else: self.restoreGeometry(self.settings.value("geometry")) except: pass ################################################## # Parameters ################################################## self.samp_rate = samp_rate ################################################## # Variables ################################################## self.sweep_rate = sweep_rate = 2000 self.sweep_range = sweep_range = 8000 self.subcarrier = subcarrier = 16000 self.snr = snr = 20 self.modulation_coeff = modulation_coeff = 0.1 self.frequency = frequency = 2000 ################################################## # Blocks ################################################## self.qtgui_freq_sink_x_0 = qtgui.freq_sink_c( 1024, #size firdes.WIN_BLACKMAN_hARRIS, #wintype 0, #fc samp_rate, #bw "", #name 1) 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) self.qtgui_freq_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", "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 range(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_layout.addWidget(self._qtgui_freq_sink_x_0_win) self.blocks_vco_c_0 = blocks.vco_c(samp_rate, 1, 1) self.blocks_throttle_0_0 = blocks.throttle(gr.sizeof_float * 1, samp_rate, True) self.blocks_multiply_xx_0 = blocks.multiply_vcc(1) self.blocks_add_xx_1 = blocks.add_vcc(1) self.analog_sig_source_x_2_1 = analog.sig_source_f( samp_rate, analog.GR_TRI_WAVE, 0 if sweep_range == 0 else sweep_rate / sweep_range, 2 * 3.14159265359 * sweep_range, 2 * 3.14159265359 * frequency, -3.14159265359) self.analog_sig_source_x_2_0 = analog.sig_source_f( samp_rate, analog.GR_SIN_WAVE, subcarrier, modulation_coeff, 0, 0) self.analog_phase_modulator_fc_0 = analog.phase_modulator_fc(1) self.analog_noise_source_x_0 = analog.noise_source_c( analog.GR_GAUSSIAN, 10**(-snr / 10), 0) ################################################## # Connections ################################################## self.connect((self.analog_noise_source_x_0, 0), (self.blocks_add_xx_1, 1)) self.connect((self.analog_phase_modulator_fc_0, 0), (self.blocks_multiply_xx_0, 0)) self.connect((self.analog_sig_source_x_2_0, 0), (self.blocks_throttle_0_0, 0)) self.connect((self.analog_sig_source_x_2_1, 0), (self.blocks_vco_c_0, 0)) self.connect((self.blocks_add_xx_1, 0), (self.qtgui_freq_sink_x_0, 0)) self.connect((self.blocks_multiply_xx_0, 0), (self.blocks_add_xx_1, 0)) self.connect((self.blocks_throttle_0_0, 0), (self.analog_phase_modulator_fc_0, 0)) self.connect((self.blocks_vco_c_0, 0), (self.blocks_multiply_xx_0, 1))
def __init__(self): gr.top_block.__init__(self, "Wideband Excite") ################################################## # Variables ################################################## self.variable_function_probe_0 = variable_function_probe_0 = 0 self.tx_freq = tx_freq = 1.3e9 self.samp_rate = samp_rate = 10e6 self.rx_freq = rx_freq = 2.6e9 self.fft_size = fft_size = 2**12 ################################################## # Blocks ################################################## self.probe_peak = blocks.probe_signal_vf(fft_size) def _variable_function_probe_0_probe(): while True: val = self.probe_peak.level() try: self.set_variable_function_probe_0(val) except AttributeError: pass time.sleep(1.0 / (10)) _variable_function_probe_0_thread = threading.Thread( target=_variable_function_probe_0_probe) _variable_function_probe_0_thread.daemon = True _variable_function_probe_0_thread.start() self.peak_hold = peak_hold.blk() self.osmosdr_source_0_0 = osmosdr.source(args="numchan=" + str(1) + " " + 'bladerf=0') self.osmosdr_source_0_0.set_sample_rate(samp_rate) self.osmosdr_source_0_0.set_center_freq(rx_freq, 0) self.osmosdr_source_0_0.set_freq_corr(0, 0) self.osmosdr_source_0_0.set_dc_offset_mode(0, 0) self.osmosdr_source_0_0.set_iq_balance_mode(0, 0) self.osmosdr_source_0_0.set_gain_mode(False, 0) self.osmosdr_source_0_0.set_gain(10, 0) self.osmosdr_source_0_0.set_if_gain(20, 0) self.osmosdr_source_0_0.set_bb_gain(20, 0) self.osmosdr_source_0_0.set_antenna('', 0) self.osmosdr_source_0_0.set_bandwidth(0, 0) self.osmosdr_sink_0_0 = osmosdr.sink(args="numchan=" + str(1) + " " + 'bladerf=0') self.osmosdr_sink_0_0.set_sample_rate(samp_rate) self.osmosdr_sink_0_0.set_center_freq(tx_freq, 0) self.osmosdr_sink_0_0.set_freq_corr(0, 0) self.osmosdr_sink_0_0.set_gain(10, 0) self.osmosdr_sink_0_0.set_if_gain(20, 0) self.osmosdr_sink_0_0.set_bb_gain(20, 0) self.osmosdr_sink_0_0.set_antenna('', 0) self.osmosdr_sink_0_0.set_bandwidth(0, 0) self.fft_vxx_0 = fft.fft_vcc(fft_size, True, (window.blackmanharris(fft_size)), True, 2) self.divide_by_n = divide_by_n.blk(divisor=4096) self.dc_blocker_xx_0 = filter.dc_blocker_cc(512, True) self.blocks_vco_c_0 = blocks.vco_c(samp_rate, 2 * pi * 5e6, .3) self.blocks_stream_to_vector_0 = blocks.stream_to_vector( gr.sizeof_gr_complex * 1, fft_size) self.blocks_nlog10_ff_0 = blocks.nlog10_ff(10, fft_size, -30) self.blocks_complex_to_mag_squared_0 = blocks.complex_to_mag_squared( fft_size) self.analog_sig_source_x_0_0 = analog.sig_source_f( samp_rate, analog.GR_SAW_WAVE, .5, 1, -.5) ################################################## # Connections ################################################## self.connect((self.analog_sig_source_x_0_0, 0), (self.blocks_vco_c_0, 0)) self.connect((self.blocks_complex_to_mag_squared_0, 0), (self.divide_by_n, 0)) self.connect((self.blocks_nlog10_ff_0, 0), (self.peak_hold, 0)) self.connect((self.blocks_stream_to_vector_0, 0), (self.fft_vxx_0, 0)) self.connect((self.blocks_vco_c_0, 0), (self.osmosdr_sink_0_0, 0)) self.connect((self.dc_blocker_xx_0, 0), (self.blocks_stream_to_vector_0, 0)) self.connect((self.divide_by_n, 0), (self.blocks_nlog10_ff_0, 0)) self.connect((self.fft_vxx_0, 0), (self.blocks_complex_to_mag_squared_0, 0)) self.connect((self.osmosdr_source_0_0, 0), (self.dc_blocker_xx_0, 0)) self.connect((self.peak_hold, 0), (self.probe_peak, 0))
target=_func_burst_out_0_probe) _func_burst_out_0_thread.daemon = True _func_burst_out_0_thread.start() self.digital_gmsk_mod_0_0 = digital.gmsk_mod( samples_per_symbol=int(samp_rate / bit_rate), bt=0.4, verbose=False, log=False, ) self.digital_gmsk_mod_0 = digital.gmsk_mod( samples_per_symbol=int(samp_rate / bit_rate), bt=0.4, verbose=False, log=False, ) self.blocks_vco_c_0_0_0 = blocks.vco_c(samp_rate, doppler_sensitivity * 0.5, 1) self.blocks_vco_c_0_0 = blocks.vco_c(samp_rate, doppler_sensitivity, 1) self.blocks_throttle_0_1_1_1 = blocks.throttle(gr.sizeof_int * 1, samp_rate) self.blocks_throttle_0_1_1_0_0 = blocks.throttle( gr.sizeof_int * 1, samp_rate) self.blocks_throttle_0_1_1_0 = blocks.throttle(gr.sizeof_int * 1, samp_rate) self.blocks_throttle_0_1_1 = blocks.throttle(gr.sizeof_int * 1, samp_rate) self.blocks_throttle_0_1_0_0 = blocks.throttle(gr.sizeof_float * 1, samp_rate) self.blocks_throttle_0_1_0 = blocks.throttle(gr.sizeof_float * 1, samp_rate) self.blocks_null_source_1_0_0_1 = blocks.null_source( gr.sizeof_gr_complex * 1)
def __init__(self, antenna="", baudrate=800.0, bb_freq=0.0, bw=0.0, dc_removal="False", decoded_data_file_path="/tmp/.satnogs/data/data", dev_args="", doppler_correction_per_sec=20, enable_iq_dump=0, excess_bw=0.5, file_path="test.wav", gain=0.0, gain_mode="Overall", iq_file_path="/tmp/iq.dat", lo_offset=100e3, max_cfo=1000.0, other_settings="", ppm=0, rigctl_port=4532, rx_freq=100e6, samp_rate_rx=0.0, soapy_rx_device="driver=invalid", stream_args="", tune_args="", udp_IP="127.0.0.1", udp_dump_dest='127.0.0.1', udp_dump_port=7355, udp_port=16887, waterfall_file_path="/tmp/waterfall.dat"): gr.top_block.__init__(self, "satnogs_argos_bpsk_ldr") ################################################## # Parameters ################################################## self.antenna = antenna self.baudrate = baudrate self.bb_freq = bb_freq self.bw = bw self.dc_removal = dc_removal self.decoded_data_file_path = decoded_data_file_path self.dev_args = dev_args self.doppler_correction_per_sec = doppler_correction_per_sec self.enable_iq_dump = enable_iq_dump self.excess_bw = excess_bw self.file_path = file_path self.gain = gain self.gain_mode = gain_mode self.iq_file_path = iq_file_path self.lo_offset = lo_offset self.max_cfo = max_cfo self.other_settings = other_settings self.ppm = ppm self.rigctl_port = rigctl_port self.rx_freq = rx_freq self.samp_rate_rx = samp_rate_rx self.soapy_rx_device = soapy_rx_device self.stream_args = stream_args self.tune_args = tune_args self.udp_IP = udp_IP self.udp_dump_dest = udp_dump_dest self.udp_dump_port = udp_dump_port self.udp_port = udp_port self.waterfall_file_path = waterfall_file_path ################################################## # Variables ################################################## self.sps = sps = 4 self.nfilts = nfilts = 32 self.audio_samp_rate = audio_samp_rate = 48000 self.variable_argos_ldr_decoder_0_0 = variable_argos_ldr_decoder_0_0 = satnogs.argos_ldr_decoder_make(True, 64) self.variable_argos_ldr_decoder_0 = variable_argos_ldr_decoder_0 = satnogs.argos_ldr_decoder_make(True, 64) self.rrc_taps = rrc_taps = firdes.root_raised_cosine(nfilts, nfilts, 1.0/float(sps), excess_bw, 11*sps*nfilts) self.if_freq = if_freq = 12000 self.decimation = decimation = satnogs.find_decimation(baudrate, 2, audio_samp_rate,sps) self.bpsk_constellation = bpsk_constellation = digital.constellation_calcdist([-1+1j, 1+1j], [0, 1], 2, 1).base() self.avg_len = avg_len = 2048 ################################################## # Blocks ################################################## self.soapy_source_0 = None # Make sure that the gain mode is valid if(gain_mode not in ['Overall', 'Specific', 'Settings Field']): raise ValueError("Wrong gain mode on channel 0. Allowed gain modes: " "['Overall', 'Specific', 'Settings Field']") dev = soapy_rx_device # Stream arguments for every activated stream tune_args = [tune_args] settings = [other_settings] # Setup the device arguments dev_args = dev_args self.soapy_source_0 = soapy.source(1, dev, dev_args, stream_args, tune_args, settings, samp_rate_rx, "fc32") self.soapy_source_0.set_dc_removal(0,bool(distutils.util.strtobool(dc_removal))) # Set up DC offset. If set to (0, 0) internally the source block # will handle the case if no DC offset correction is supported self.soapy_source_0.set_dc_offset(0,0) # Setup IQ Balance. If set to (0, 0) internally the source block # will handle the case if no IQ balance correction is supported self.soapy_source_0.set_iq_balance(0,0) self.soapy_source_0.set_agc(0,False) # generic frequency setting should be specified first self.soapy_source_0.set_frequency(0, rx_freq - lo_offset) self.soapy_source_0.set_frequency(0,"BB",bb_freq) # Setup Frequency correction. If set to 0 internally the source block # will handle the case if no frequency correction is supported self.soapy_source_0.set_frequency_correction(0,ppm) self.soapy_source_0.set_antenna(0,antenna) self.soapy_source_0.set_bandwidth(0,bw) if(gain_mode != 'Settings Field'): # pass is needed, in case the template does not evaluare anything pass self.soapy_source_0.set_gain(0,gain) self.satnogs_waterfall_sink_0_0 = satnogs.waterfall_sink(baudrate*decimation, rx_freq, 10, 1024, waterfall_file_path, 1) self.satnogs_udp_msg_sink_0_0 = satnogs.udp_msg_sink(udp_IP, udp_port, 1500) self.satnogs_tcp_rigctl_msg_source_0 = satnogs.tcp_rigctl_msg_source("127.0.0.1", rigctl_port, False, int(1000.0/doppler_correction_per_sec) + 1, 1500) self.satnogs_ogg_encoder_0 = satnogs.ogg_encoder(file_path, audio_samp_rate, 1.0) self.satnogs_json_converter_0 = satnogs.json_converter() self.satnogs_iq_sink_0_0 = satnogs.iq_sink(16768, iq_file_path, False, enable_iq_dump) self.satnogs_frame_file_sink_0_1_0 = satnogs.frame_file_sink(decoded_data_file_path, 0) self.satnogs_frame_decoder_0_0_0 = satnogs.frame_decoder(variable_argos_ldr_decoder_0_0, 1 * 1) self.satnogs_frame_decoder_0_0 = satnogs.frame_decoder(variable_argos_ldr_decoder_0, 1 * 1) self.satnogs_doppler_compensation_0 = satnogs.doppler_compensation(samp_rate_rx, rx_freq, lo_offset, baudrate*decimation, 1, 0) self.pfb_arb_resampler_xxx_0 = pfb.arb_resampler_ccf( audio_samp_rate/(baudrate*decimation), taps=None, flt_size=32) self.pfb_arb_resampler_xxx_0.declare_sample_delay(0) self.low_pass_filter_0_0 = filter.fir_filter_ccf( 1, firdes.low_pass( 1, audio_samp_rate, ((1.0 + excess_bw) * baudrate/2.0) + min(baudrate, abs(max_cfo)), baudrate / 10.0, firdes.WIN_HAMMING, 6.76)) self.low_pass_filter_0 = filter.fir_filter_ccf( decimation // sps, firdes.low_pass( 1, baudrate*decimation, baudrate/2 + excess_bw *baudrate/2 + 200, baudrate / 4.0, firdes.WIN_HAMMING, 6.76)) self.digital_pfb_clock_sync_xxx_0 = digital.pfb_clock_sync_ccf(sps, 2.0 * math.pi/100.0, rrc_taps, nfilts, nfilts/2, 1.5, 1) self.digital_constellation_receiver_cb_0 = digital.constellation_receiver_cb(bpsk_constellation, 2.0 * math.pi/50.0, -0.125, 0.125) self.blocks_vco_c_0 = blocks.vco_c((baudrate*decimation), -(baudrate*decimation), 1.0) self.blocks_udp_sink_0_0 = blocks.udp_sink(gr.sizeof_gr_complex*1, udp_dump_dest, udp_dump_port+1, 1472, True) self.blocks_udp_sink_0 = blocks.udp_sink(gr.sizeof_short*1, udp_dump_dest, udp_dump_port, 1472, True) self.blocks_rotator_cc_0_0 = blocks.rotator_cc(2.0 * math.pi * (if_freq / audio_samp_rate)) self.blocks_multiply_xx_0_0 = blocks.multiply_vcc(1) self.blocks_moving_average_xx_0 = blocks.moving_average_ff(avg_len, 1/avg_len, 4000, 1) self.blocks_keep_one_in_n_0_0 = blocks.keep_one_in_n(gr.sizeof_char*1, 2) self.blocks_keep_one_in_n_0 = blocks.keep_one_in_n(gr.sizeof_char*1, 2) self.blocks_float_to_short_0 = blocks.float_to_short(1, 16383.0) self.blocks_delay_1 = blocks.delay(gr.sizeof_gr_complex*1, avg_len // 2) self.blocks_delay_0 = blocks.delay(gr.sizeof_char*1, 1) self.blocks_complex_to_real_0 = blocks.complex_to_real(1) self.analog_pll_freqdet_cf_0 = analog.pll_freqdet_cf(2*math.pi/100, 2*math.pi*max_cfo/(baudrate*decimation), -2*math.pi*max_cfo/(baudrate*decimation)) self.analog_agc2_xx_0_0 = analog.agc2_cc(0.01, 0.001, 0.015, 1.0) self.analog_agc2_xx_0_0.set_max_gain(65536) self.analog_agc2_xx_0 = analog.agc2_cc(1e-3, 1e-3, 0.5, 1.0) self.analog_agc2_xx_0.set_max_gain(65536) ################################################## # Connections ################################################## self.msg_connect((self.satnogs_frame_decoder_0_0, 'out'), (self.satnogs_json_converter_0, 'in')) self.msg_connect((self.satnogs_frame_decoder_0_0_0, 'out'), (self.satnogs_json_converter_0, 'in')) self.msg_connect((self.satnogs_json_converter_0, 'out'), (self.satnogs_frame_file_sink_0_1_0, 'frame')) self.msg_connect((self.satnogs_json_converter_0, 'out'), (self.satnogs_udp_msg_sink_0_0, 'in')) self.msg_connect((self.satnogs_tcp_rigctl_msg_source_0, 'freq'), (self.satnogs_doppler_compensation_0, 'doppler')) self.connect((self.analog_agc2_xx_0, 0), (self.analog_pll_freqdet_cf_0, 0)) self.connect((self.analog_agc2_xx_0, 0), (self.blocks_delay_1, 0)) self.connect((self.analog_agc2_xx_0, 0), (self.pfb_arb_resampler_xxx_0, 0)) self.connect((self.analog_agc2_xx_0_0, 0), (self.low_pass_filter_0_0, 0)) self.connect((self.analog_pll_freqdet_cf_0, 0), (self.blocks_moving_average_xx_0, 0)) self.connect((self.blocks_complex_to_real_0, 0), (self.blocks_float_to_short_0, 0)) self.connect((self.blocks_complex_to_real_0, 0), (self.satnogs_ogg_encoder_0, 0)) self.connect((self.blocks_delay_0, 0), (self.blocks_keep_one_in_n_0, 0)) self.connect((self.blocks_delay_1, 0), (self.blocks_multiply_xx_0_0, 0)) self.connect((self.blocks_float_to_short_0, 0), (self.blocks_udp_sink_0, 0)) self.connect((self.blocks_keep_one_in_n_0, 0), (self.satnogs_frame_decoder_0_0, 0)) self.connect((self.blocks_keep_one_in_n_0_0, 0), (self.satnogs_frame_decoder_0_0_0, 0)) self.connect((self.blocks_moving_average_xx_0, 0), (self.blocks_vco_c_0, 0)) self.connect((self.blocks_multiply_xx_0_0, 0), (self.low_pass_filter_0, 0)) self.connect((self.blocks_rotator_cc_0_0, 0), (self.blocks_complex_to_real_0, 0)) self.connect((self.blocks_vco_c_0, 0), (self.blocks_multiply_xx_0_0, 1)) self.connect((self.digital_constellation_receiver_cb_0, 0), (self.blocks_delay_0, 0)) self.connect((self.digital_constellation_receiver_cb_0, 0), (self.blocks_keep_one_in_n_0_0, 0)) self.connect((self.digital_pfb_clock_sync_xxx_0, 0), (self.digital_constellation_receiver_cb_0, 0)) self.connect((self.low_pass_filter_0, 0), (self.digital_pfb_clock_sync_xxx_0, 0)) self.connect((self.low_pass_filter_0_0, 0), (self.blocks_rotator_cc_0_0, 0)) self.connect((self.pfb_arb_resampler_xxx_0, 0), (self.analog_agc2_xx_0_0, 0)) self.connect((self.satnogs_doppler_compensation_0, 0), (self.analog_agc2_xx_0, 0)) self.connect((self.satnogs_doppler_compensation_0, 0), (self.blocks_udp_sink_0_0, 0)) self.connect((self.satnogs_doppler_compensation_0, 0), (self.satnogs_iq_sink_0_0, 0)) self.connect((self.satnogs_doppler_compensation_0, 0), (self.satnogs_waterfall_sink_0_0, 0)) self.connect((self.soapy_source_0, 0), (self.satnogs_doppler_compensation_0, 0))
def __init__(self): grc_wxgui.top_block_gui.__init__(self, title="Top Block") ################################################## # Variables ################################################## self.samp_rate = samp_rate = 800e3 self.taps = taps = firdes.low_pass(1, samp_rate, 150e3, 50e3, firdes.WIN_HAMMING) self.seuil = seuil = -40 self.gain_send = gain_send = 60 self.gain = gain = 40 self.freq_offset = freq_offset = -0e3 self.cut_freq = cut_freq = 40e3 ################################################## # Blocks ################################################## _seuil_sizer = wx.BoxSizer(wx.VERTICAL) self._seuil_text_box = forms.text_box( parent=self.GetWin(), sizer=_seuil_sizer, value=self.seuil, callback=self.set_seuil, label='seuil', converter=forms.float_converter(), proportion=0, ) self._seuil_slider = forms.slider( parent=self.GetWin(), sizer=_seuil_sizer, value=self.seuil, callback=self.set_seuil, minimum=-100, maximum=100, num_steps=200, style=wx.SL_HORIZONTAL, cast=float, proportion=1, ) self.Add(_seuil_sizer) _gain_send_sizer = wx.BoxSizer(wx.VERTICAL) self._gain_send_text_box = forms.text_box( parent=self.GetWin(), sizer=_gain_send_sizer, value=self.gain_send, callback=self.set_gain_send, label='gain_send', converter=forms.float_converter(), proportion=0, ) self._gain_send_slider = forms.slider( parent=self.GetWin(), sizer=_gain_send_sizer, value=self.gain_send, callback=self.set_gain_send, minimum=0, maximum=100, num_steps=20, style=wx.SL_HORIZONTAL, cast=float, proportion=1, ) self.Add(_gain_send_sizer) _gain_sizer = wx.BoxSizer(wx.VERTICAL) self._gain_text_box = forms.text_box( parent=self.GetWin(), sizer=_gain_sizer, value=self.gain, callback=self.set_gain, label='gain', converter=forms.float_converter(), proportion=0, ) self._gain_slider = forms.slider( parent=self.GetWin(), sizer=_gain_sizer, value=self.gain, callback=self.set_gain, minimum=0, maximum=100, num_steps=100, style=wx.SL_HORIZONTAL, cast=float, proportion=1, ) self.Add(_gain_sizer) _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=-200e3, maximum=200e3, num_steps=200, style=wx.SL_HORIZONTAL, cast=float, proportion=1, ) self.Add(_freq_offset_sizer) self.xmlrpc_server_0 = SimpleXMLRPCServer.SimpleXMLRPCServer( ("localhost", 8080), allow_none=True) self.xmlrpc_server_0.register_instance(self) self.xmlrpc_server_0_thread = threading.Thread( target=self.xmlrpc_server_0.serve_forever) self.xmlrpc_server_0_thread.daemon = True self.xmlrpc_server_0_thread.start() self.wxgui_fftsink2_0 = fftsink2.fft_sink_c( self.GetWin(), baseband_freq=freq_offset + 868.40e6 + 200e3, y_per_div=10, y_divs=10, ref_level=0, ref_scale=2.0, sample_rate=samp_rate, fft_size=1024, fft_rate=15, average=False, avg_alpha=None, title="FFT Plot", peak_hold=False, ) self.Add(self.wxgui_fftsink2_0.win) self.uhd_usrp_source_0 = uhd.usrp_source( ",".join(("", "")), uhd.stream_args( cpu_format="fc32", channels=range(1), ), ) self.uhd_usrp_source_0.set_samp_rate(samp_rate) self.uhd_usrp_source_0.set_center_freq(freq_offset + 868.40e6 + 200e3, 0) self.uhd_usrp_source_0.set_gain(gain, 0) self.uhd_usrp_source_0.set_antenna("TX/RX", 0) self.uhd_usrp_sink_0 = uhd.usrp_sink( ",".join(("", "")), uhd.stream_args( cpu_format="fc32", channels=range(1), ), ) self.uhd_usrp_sink_0.set_samp_rate(samp_rate) self.uhd_usrp_sink_0.set_center_freq(868.40e6, 0) self.uhd_usrp_sink_0.set_gain(gain_send, 0) self.uhd_usrp_sink_0.set_antenna("TX/RX", 0) self.low_pass_filter_0 = filter.fir_filter_fff( 1, firdes.low_pass(1, samp_rate, 40e3, 10e3, firdes.WIN_HAMMING, 6.76)) self.freq_xlating_fir_filter_xxx_0 = filter.freq_xlating_fir_filter_ccc( 1, (taps), -200e3, samp_rate) self.digital_clock_recovery_mm_xx_0 = digital.clock_recovery_mm_ff( 20, 0.25 * 0.175 * 0.175, 0.5, 0.175, 0.005) self.digital_binary_slicer_fb_0 = digital.binary_slicer_fb() self.blocks_vco_c_0 = blocks.vco_c(samp_rate, (2 * pi) * 40e3, 1) self.blocks_uchar_to_float_0 = blocks.uchar_to_float() self.blocks_socket_pdu_0_0 = blocks.socket_pdu("UDP_CLIENT", "127.0.0.1", "52002", 10000, False) self.blocks_socket_pdu_0 = blocks.socket_pdu("UDP_SERVER", "127.0.0.1", "52001", 10000, False) self.blocks_repeat_0 = blocks.repeat(gr.sizeof_char * 1, 20) self.blocks_pdu_to_tagged_stream_0 = blocks.pdu_to_tagged_stream( blocks.byte_t, "packet_len") self.blocks_packed_to_unpacked_xx_0 = blocks.packed_to_unpacked_bb( 1, gr.GR_MSB_FIRST) self.blocks_multiply_const_vxx_0_0 = blocks.multiply_const_vff((-1, )) self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vff((2, )) self.blocks_message_debug_0 = blocks.message_debug() self.blocks_add_const_vxx_0 = blocks.add_const_vff((-1, )) self.analog_simple_squelch_cc_0 = analog.simple_squelch_cc(seuil, 1) self.analog_quadrature_demod_cf_0 = analog.quadrature_demod_cf( 2 * (samp_rate) / (2 * math.pi * 20e3 / 8.0)) self.Zwave_preamble_0 = Zwave.preamble() self.Zwave_packet_sink_0 = Zwave.packet_sink() ################################################## # Connections ################################################## self.msg_connect((self.Zwave_packet_sink_0, 'out'), (self.blocks_message_debug_0, 'print_pdu')) self.msg_connect((self.Zwave_packet_sink_0, 'out'), (self.blocks_socket_pdu_0_0, 'pdus')) self.msg_connect((self.Zwave_preamble_0, 'out'), (self.blocks_pdu_to_tagged_stream_0, 'pdus')) self.msg_connect((self.blocks_socket_pdu_0, 'pdus'), (self.Zwave_preamble_0, 'in')) self.connect((self.analog_quadrature_demod_cf_0, 0), (self.low_pass_filter_0, 0)) self.connect((self.analog_simple_squelch_cc_0, 0), (self.analog_quadrature_demod_cf_0, 0)) self.connect((self.blocks_add_const_vxx_0, 0), (self.blocks_multiply_const_vxx_0_0, 0)) self.connect((self.blocks_multiply_const_vxx_0, 0), (self.blocks_add_const_vxx_0, 0)) self.connect((self.blocks_multiply_const_vxx_0_0, 0), (self.blocks_vco_c_0, 0)) self.connect((self.blocks_packed_to_unpacked_xx_0, 0), (self.blocks_repeat_0, 0)) self.connect((self.blocks_pdu_to_tagged_stream_0, 0), (self.blocks_packed_to_unpacked_xx_0, 0)) self.connect((self.blocks_repeat_0, 0), (self.blocks_uchar_to_float_0, 0)) self.connect((self.blocks_uchar_to_float_0, 0), (self.blocks_multiply_const_vxx_0, 0)) self.connect((self.blocks_vco_c_0, 0), (self.uhd_usrp_sink_0, 0)) self.connect((self.digital_binary_slicer_fb_0, 0), (self.Zwave_packet_sink_0, 0)) self.connect((self.digital_clock_recovery_mm_xx_0, 0), (self.digital_binary_slicer_fb_0, 0)) self.connect((self.freq_xlating_fir_filter_xxx_0, 0), (self.analog_simple_squelch_cc_0, 0)) self.connect((self.low_pass_filter_0, 0), (self.digital_clock_recovery_mm_xx_0, 0)) self.connect((self.uhd_usrp_source_0, 0), (self.freq_xlating_fir_filter_xxx_0, 0)) self.connect((self.uhd_usrp_source_0, 0), (self.wxgui_fftsink2_0, 0))
def __init__(self, antenna="", baudrate=9600.0, bb_freq=0.0, bw=0.0, dc_removal="False", decoded_data_file_path="/tmp/.satnogs/data/data", dev_args="", doppler_correction_per_sec=20, enable_iq_dump=0, file_path="test.wav", framing="ax25", gain=0.0, gain_mode="Overall", iq_file_path="/tmp/iq.dat", lo_offset=100e3, other_settings="", ppm=0, rigctl_port=4532, rx_freq=100e6, samp_rate_rx=0.0, soapy_rx_device="driver=invalid", stream_args="", tune_args="", udp_IP="127.0.0.1", udp_port=16887, waterfall_file_path="/tmp/waterfall.dat"): gr.top_block.__init__(self, "satnogs_fsk UDP") ################################################## # Parameters ################################################## self.antenna = antenna self.baudrate = baudrate self.bb_freq = bb_freq self.bw = bw self.dc_removal = dc_removal self.decoded_data_file_path = decoded_data_file_path self.dev_args = dev_args self.doppler_correction_per_sec = doppler_correction_per_sec self.enable_iq_dump = enable_iq_dump self.file_path = file_path self.framing = framing self.gain = gain self.gain_mode = gain_mode self.iq_file_path = iq_file_path self.lo_offset = lo_offset self.other_settings = other_settings self.ppm = ppm self.rigctl_port = rigctl_port self.rx_freq = rx_freq self.samp_rate_rx = samp_rate_rx self.soapy_rx_device = soapy_rx_device self.stream_args = stream_args self.tune_args = tune_args self.udp_IP = udp_IP self.udp_port = udp_port self.waterfall_file_path = waterfall_file_path ################################################## # Variables ################################################## self.variable_ax25_decoder_0 = variable_ax25_decoder_0 = satnogs.ax25_decoder_make( 'GND', 0, True, True, True, 1024) self.variable_ax100_mode6_decoder_0 = variable_ax100_mode6_decoder_0 = satnogs.ax100_decoder_mode6_make( satnogs.crc.CRC32_C, satnogs.whitening_make_ccsds(), True) self.variable_ax100_mode5_decoder_0 = variable_ax100_mode5_decoder_0 = satnogs.ax100_decoder_mode5_make( [], 0, [0x93, 0x0B, 0x51, 0xDE], 3, satnogs.crc.CRC32_C, satnogs.whitening.make_ccsds(), True) self.audio_samp_rate = audio_samp_rate = 48000 self.decimation = decimation = max( 4, satnogs.find_decimation(baudrate, 2, audio_samp_rate)) self.available_framings = available_framings = { 'ax25': variable_ax25_decoder_0, 'ax100_mode5': variable_ax100_mode5_decoder_0, 'ax100_mode6': variable_ax100_mode6_decoder_0 } ################################################## # Blocks ################################################## self.soapy_source_0_0 = None # Make sure that the gain mode is valid if (gain_mode not in ['Overall', 'Specific', 'Settings Field']): raise ValueError( "Wrong gain mode on channel 0. Allowed gain modes: " "['Overall', 'Specific', 'Settings Field']") dev = soapy_rx_device # Stream arguments for every activated stream tune_args = [tune_args] settings = [other_settings] # Setup the device arguments dev_args = dev_args self.soapy_source_0_0 = soapy.source(1, dev, dev_args, stream_args, tune_args, settings, samp_rate_rx, "fc32") self.soapy_source_0_0.set_dc_removal( 0, bool(distutils.util.strtobool(dc_removal))) # Set up DC offset. If set to (0, 0) internally the source block # will handle the case if no DC offset correction is supported self.soapy_source_0_0.set_dc_offset(0, 0) # Setup IQ Balance. If set to (0, 0) internally the source block # will handle the case if no IQ balance correction is supported self.soapy_source_0_0.set_iq_balance(0, 0) self.soapy_source_0_0.set_agc(0, False) # generic frequency setting should be specified first self.soapy_source_0_0.set_frequency(0, rx_freq - lo_offset) self.soapy_source_0_0.set_frequency(0, "BB", bb_freq) # Setup Frequency correction. If set to 0 internally the source block # will handle the case if no frequency correction is supported self.soapy_source_0_0.set_frequency_correction(0, ppm) self.soapy_source_0_0.set_antenna(0, antenna) self.soapy_source_0_0.set_bandwidth(0, bw) if (gain_mode != 'Settings Field'): # pass is needed, in case the template does not evaluare anything pass self.soapy_source_0_0.set_gain(0, gain) self.satnogs_waterfall_sink_0 = satnogs.waterfall_sink( baudrate * decimation, rx_freq, 10, 1024, waterfall_file_path, 1) self.satnogs_udp_msg_sink_0_0 = satnogs.udp_msg_sink( udp_IP, udp_port, 1500) self.satnogs_tcp_rigctl_msg_source_0 = satnogs.tcp_rigctl_msg_source( "127.0.0.1", rigctl_port, False, int(1000.0 / doppler_correction_per_sec) + 1, 1500) self.satnogs_ogg_encoder_0 = satnogs.ogg_encoder( file_path, audio_samp_rate, 1.0) self.satnogs_json_converter_0 = satnogs.json_converter() self.satnogs_iq_sink_0 = satnogs.iq_sink(16768, iq_file_path, False, enable_iq_dump) self.satnogs_frame_file_sink_0_1_0 = satnogs.frame_file_sink( decoded_data_file_path, 0) self.satnogs_frame_decoder_0_0 = satnogs.frame_decoder( available_framings[framing], 1 * 1) self.satnogs_doppler_compensation_0 = satnogs.doppler_compensation( samp_rate_rx, rx_freq, lo_offset, baudrate * decimation, 1, 0) self.pfb_arb_resampler_xxx_1 = pfb.arb_resampler_fff( (audio_samp_rate) / (baudrate * 2), taps=None, flt_size=32) self.pfb_arb_resampler_xxx_1.declare_sample_delay(0) self.low_pass_filter_0_0 = filter.fir_filter_ccf( 1, firdes.low_pass(1, baudrate * decimation, baudrate * 1.25, baudrate / 2.0, firdes.WIN_HAMMING, 6.76)) self.low_pass_filter_0 = filter.fir_filter_ccf( decimation // 2, firdes.low_pass(1, baudrate * decimation, 0.625 * baudrate, baudrate / 8.0, firdes.WIN_HAMMING, 6.76)) self.digital_clock_recovery_mm_xx_0 = digital.clock_recovery_mm_ff( 2, 2 * math.pi / 100, 0.5, 0.5 / 8.0, 0.01) self.digital_binary_slicer_fb_0 = digital.binary_slicer_fb() self.dc_blocker_xx_0_0 = filter.dc_blocker_ff(1024, True) self.dc_blocker_xx_0 = filter.dc_blocker_ff(1024, True) self.blocks_vco_c_0 = blocks.vco_c(baudrate * decimation, -baudrate * decimation, 1.0) self.blocks_udp_sink_0 = blocks.udp_sink(gr.sizeof_short * 1, udp_IP, 7355, 1472, True) self.blocks_multiply_xx_0 = blocks.multiply_vcc(1) self.blocks_moving_average_xx_0 = blocks.moving_average_ff( 1024, 1.0 / 1024.0, 4096, 1) self.blocks_float_to_short_0 = blocks.float_to_short(1, 32767) self.blocks_delay_0 = blocks.delay(gr.sizeof_gr_complex * 1, 1024 // 2) self.analog_quadrature_demod_cf_0_0_0_0 = analog.quadrature_demod_cf( 1.0) self.analog_quadrature_demod_cf_0_0_0 = analog.quadrature_demod_cf(0.9) self.analog_quadrature_demod_cf_0_0 = analog.quadrature_demod_cf(1.2) ################################################## # Connections ################################################## self.msg_connect((self.satnogs_frame_decoder_0_0, 'out'), (self.satnogs_json_converter_0, 'in')) self.msg_connect((self.satnogs_json_converter_0, 'out'), (self.satnogs_frame_file_sink_0_1_0, 'frame')) self.msg_connect((self.satnogs_json_converter_0, 'out'), (self.satnogs_udp_msg_sink_0_0, 'in')) self.msg_connect((self.satnogs_tcp_rigctl_msg_source_0, 'freq'), (self.satnogs_doppler_compensation_0, 'doppler')) self.connect((self.analog_quadrature_demod_cf_0_0, 0), (self.dc_blocker_xx_0, 0)) self.connect((self.analog_quadrature_demod_cf_0_0_0, 0), (self.pfb_arb_resampler_xxx_1, 0)) self.connect((self.analog_quadrature_demod_cf_0_0_0_0, 0), (self.blocks_moving_average_xx_0, 0)) self.connect((self.blocks_delay_0, 0), (self.blocks_multiply_xx_0, 0)) self.connect((self.blocks_float_to_short_0, 0), (self.blocks_udp_sink_0, 0)) self.connect((self.blocks_moving_average_xx_0, 0), (self.blocks_vco_c_0, 0)) self.connect((self.blocks_multiply_xx_0, 0), (self.low_pass_filter_0, 0)) self.connect((self.blocks_vco_c_0, 0), (self.blocks_multiply_xx_0, 1)) self.connect((self.dc_blocker_xx_0, 0), (self.digital_clock_recovery_mm_xx_0, 0)) self.connect((self.dc_blocker_xx_0_0, 0), (self.blocks_float_to_short_0, 0)) self.connect((self.dc_blocker_xx_0_0, 0), (self.satnogs_ogg_encoder_0, 0)) self.connect((self.digital_binary_slicer_fb_0, 0), (self.satnogs_frame_decoder_0_0, 0)) self.connect((self.digital_clock_recovery_mm_xx_0, 0), (self.digital_binary_slicer_fb_0, 0)) self.connect((self.low_pass_filter_0, 0), (self.analog_quadrature_demod_cf_0_0, 0)) self.connect((self.low_pass_filter_0, 0), (self.analog_quadrature_demod_cf_0_0_0, 0)) self.connect((self.low_pass_filter_0_0, 0), (self.analog_quadrature_demod_cf_0_0_0_0, 0)) self.connect((self.pfb_arb_resampler_xxx_1, 0), (self.dc_blocker_xx_0_0, 0)) self.connect((self.satnogs_doppler_compensation_0, 0), (self.blocks_delay_0, 0)) self.connect((self.satnogs_doppler_compensation_0, 0), (self.low_pass_filter_0_0, 0)) self.connect((self.satnogs_doppler_compensation_0, 0), (self.satnogs_iq_sink_0, 0)) self.connect((self.satnogs_doppler_compensation_0, 0), (self.satnogs_waterfall_sink_0, 0)) self.connect((self.soapy_source_0_0, 0), (self.satnogs_doppler_compensation_0, 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.sps = sps = 4 self.nfilts = nfilts = 32 self.ntaps = ntaps = 11*nfilts*sps self.excess_bw = excess_bw = 0.4 self.tx_taps = tx_taps = firdes.root_raised_cosine(nfilts,nfilts,1.0,excess_bw,ntaps) self.timing_bw = timing_bw = 2*pi/100 self.samp_rate = samp_rate = 320000 self.rx_taps = rx_taps = filter.firdes.root_raised_cosine(nfilts,nfilts*sps,1.0,excess_bw,ntaps) self.freq_bw = freq_bw = 2*pi/100 self.fll_ntaps = fll_ntaps = 55 self.const_points = const_points = 8 ################################################## # Blocks ################################################## self.qtgui_const_sink_x_1 = qtgui.const_sink_c( 1024, #size "", #name 1 #number of inputs ) self.qtgui_const_sink_x_1.set_update_time(0.10) self.qtgui_const_sink_x_1.set_y_axis(-2, 2) self.qtgui_const_sink_x_1.set_x_axis(-2, 2) self.qtgui_const_sink_x_1.set_trigger_mode(qtgui.TRIG_MODE_FREE, qtgui.TRIG_SLOPE_POS, 0.0, 0, "") self.qtgui_const_sink_x_1.enable_autoscale(False) self.qtgui_const_sink_x_1.enable_grid(False) if not True: self.qtgui_const_sink_x_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_1.set_line_label(i, "Data {0}".format(i)) else: self.qtgui_const_sink_x_1.set_line_label(i, labels[i]) self.qtgui_const_sink_x_1.set_line_width(i, widths[i]) self.qtgui_const_sink_x_1.set_line_color(i, colors[i]) self.qtgui_const_sink_x_1.set_line_style(i, styles[i]) self.qtgui_const_sink_x_1.set_line_marker(i, markers[i]) self.qtgui_const_sink_x_1.set_line_alpha(i, alphas[i]) self._qtgui_const_sink_x_1_win = sip.wrapinstance(self.qtgui_const_sink_x_1.pyqwidget(), Qt.QWidget) self.top_layout.addWidget(self._qtgui_const_sink_x_1_win) self.qtgui_const_sink_x_0 = qtgui.const_sink_c( 1024, #size "", #name 1 #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.0, 0, "") self.qtgui_const_sink_x_0.enable_autoscale(False) self.qtgui_const_sink_x_0.enable_grid(False) if not True: self.qtgui_const_sink_x_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.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.top_layout.addWidget(self._qtgui_const_sink_x_0_win) self.pfb_arb_resampler_xxx_0_0 = pfb.arb_resampler_ccf( sps, taps=(tx_taps), flt_size=32) self.pfb_arb_resampler_xxx_0_0.declare_sample_delay(0) self.iir_filter_xxx_1 = filter.iir_filter_ffd(([1.0001,-1]), ([-1,1]), True) self.iir_filter_xxx_0 = filter.iir_filter_ffd((0.01, ), ([-1,0.99]), True) self.digital_pfb_clock_sync_xxx_0 = digital.pfb_clock_sync_ccf(sps, timing_bw, (rx_taps), 32, 16, 1.5, 1) self.digital_chunks_to_symbols_xx_0_0 = digital.chunks_to_symbols_bc((((1.414),(1+1j),(1.414j),(-1+1j),(-1.414),(-1-1j),(-1.414j),(1-1j))), 1) self.blocks_vco_c_0 = blocks.vco_c(320000, -5, 1) self.blocks_udp_source_0 = blocks.udp_source(gr.sizeof_float*1, "127.0.0.1", 12345, 1472, True) self.blocks_udp_sink_0 = blocks.udp_sink(gr.sizeof_float*1, "127.0.0.1", 12345, 1472, True) self.blocks_throttle_0_1 = blocks.throttle(gr.sizeof_gr_complex*1, samp_rate,True) self.blocks_throttle_0 = blocks.throttle(gr.sizeof_gr_complex*1, samp_rate,True) self.blocks_multiply_xx_3 = blocks.multiply_vcc(1) self.blocks_multiply_xx_2 = blocks.multiply_vcc(1) self.blocks_multiply_xx_1 = blocks.multiply_vcc(1) self.blocks_multiply_xx_0_0 = blocks.multiply_vcc(1) self.blocks_multiply_xx_0 = blocks.multiply_vcc(1) self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vff((0.125, )) self.blocks_multiply_conjugate_cc_0 = blocks.multiply_conjugate_cc(1) self.blocks_delay_1 = blocks.delay(gr.sizeof_float*1, 10) self.blocks_delay_0 = blocks.delay(gr.sizeof_gr_complex*1, 1) self.blocks_complex_to_arg_1 = blocks.complex_to_arg(1) self.blocks_complex_to_arg_0 = blocks.complex_to_arg(1) self.analog_sig_source_x_0_0 = analog.sig_source_c(samp_rate*4, analog.GR_COS_WAVE, 10000, 1, 0) self.analog_random_source_x_0_0 = blocks.vector_source_b(map(int, numpy.random.randint(0, const_points, 1000)), True) self.VCO = blocks.vco_c(80000*4, -80000*4, 1) ################################################## # Connections ################################################## self.connect((self.VCO, 0), (self.blocks_multiply_xx_2, 1)) self.connect((self.analog_random_source_x_0_0, 0), (self.digital_chunks_to_symbols_xx_0_0, 0)) self.connect((self.analog_sig_source_x_0_0, 0), (self.blocks_multiply_xx_0_0, 1)) self.connect((self.blocks_complex_to_arg_0, 0), (self.blocks_multiply_const_vxx_0, 0)) self.connect((self.blocks_complex_to_arg_1, 0), (self.iir_filter_xxx_0, 0)) self.connect((self.blocks_delay_0, 0), (self.blocks_multiply_conjugate_cc_0, 1)) self.connect((self.blocks_delay_1, 0), (self.iir_filter_xxx_1, 0)) self.connect((self.blocks_multiply_conjugate_cc_0, 0), (self.blocks_complex_to_arg_0, 0)) self.connect((self.blocks_multiply_const_vxx_0, 0), (self.VCO, 0)) self.connect((self.blocks_multiply_xx_0, 0), (self.blocks_delay_0, 0)) self.connect((self.blocks_multiply_xx_0, 0), (self.blocks_multiply_conjugate_cc_0, 0)) self.connect((self.blocks_multiply_xx_0_0, 0), (self.digital_pfb_clock_sync_xxx_0, 0)) self.connect((self.blocks_multiply_xx_1, 0), (self.blocks_multiply_xx_3, 0)) self.connect((self.blocks_multiply_xx_1, 0), (self.blocks_multiply_xx_3, 1)) self.connect((self.blocks_multiply_xx_1, 0), (self.blocks_multiply_xx_3, 2)) self.connect((self.blocks_multiply_xx_1, 0), (self.blocks_multiply_xx_3, 3)) self.connect((self.blocks_multiply_xx_1, 0), (self.blocks_multiply_xx_3, 4)) self.connect((self.blocks_multiply_xx_1, 0), (self.blocks_multiply_xx_3, 5)) self.connect((self.blocks_multiply_xx_1, 0), (self.blocks_multiply_xx_3, 6)) self.connect((self.blocks_multiply_xx_1, 0), (self.blocks_multiply_xx_3, 7)) self.connect((self.blocks_multiply_xx_1, 0), (self.blocks_throttle_0, 0)) self.connect((self.blocks_multiply_xx_2, 0), (self.blocks_multiply_xx_1, 0)) self.connect((self.blocks_multiply_xx_2, 0), (self.blocks_throttle_0_1, 0)) self.connect((self.blocks_multiply_xx_3, 0), (self.blocks_complex_to_arg_1, 0)) self.connect((self.blocks_throttle_0, 0), (self.qtgui_const_sink_x_0, 0)) self.connect((self.blocks_throttle_0_1, 0), (self.qtgui_const_sink_x_1, 0)) self.connect((self.blocks_udp_source_0, 0), (self.blocks_delay_1, 0)) self.connect((self.blocks_vco_c_0, 0), (self.blocks_multiply_xx_1, 1)) self.connect((self.digital_chunks_to_symbols_xx_0_0, 0), (self.pfb_arb_resampler_xxx_0_0, 0)) self.connect((self.digital_pfb_clock_sync_xxx_0, 0), (self.blocks_multiply_xx_0, 0)) self.connect((self.digital_pfb_clock_sync_xxx_0, 0), (self.blocks_multiply_xx_0, 1)) self.connect((self.digital_pfb_clock_sync_xxx_0, 0), (self.blocks_multiply_xx_0, 2)) self.connect((self.digital_pfb_clock_sync_xxx_0, 0), (self.blocks_multiply_xx_0, 3)) self.connect((self.digital_pfb_clock_sync_xxx_0, 0), (self.blocks_multiply_xx_0, 4)) self.connect((self.digital_pfb_clock_sync_xxx_0, 0), (self.blocks_multiply_xx_0, 5)) self.connect((self.digital_pfb_clock_sync_xxx_0, 0), (self.blocks_multiply_xx_0, 6)) self.connect((self.digital_pfb_clock_sync_xxx_0, 0), (self.blocks_multiply_xx_0, 7)) self.connect((self.digital_pfb_clock_sync_xxx_0, 0), (self.blocks_multiply_xx_2, 0)) self.connect((self.iir_filter_xxx_0, 0), (self.blocks_udp_sink_0, 0)) self.connect((self.iir_filter_xxx_1, 0), (self.blocks_vco_c_0, 0)) self.connect((self.pfb_arb_resampler_xxx_0_0, 0), (self.blocks_multiply_xx_0_0, 0))
def __init__(self): gr.top_block.__init__(self, "RTTY_test_ltrs", catch_exceptions=True) Qt.QWidget.__init__(self) self.setWindowTitle("RTTY_test_ltrs") 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", "RTTY_test_ltrs") try: if StrictVersion(Qt.qVersion()) < StrictVersion("5.0.0"): self.restoreGeometry( self.settings.value("geometry").toByteArray()) else: self.restoreGeometry(self.settings.value("geometry")) except: pass ################################################## # Variables ################################################## self.vco_max = vco_max = 2500 self.fsk_deviation = fsk_deviation = 170 self.center = center = 2210 self.vco_offset = vco_offset = (center - (fsk_deviation / 2)) / vco_max self.usrp_rate = usrp_rate = 1000000 self.samp_rate = samp_rate = 50000 self.rf_gain = rf_gain = 1 self.repeat = repeat = (int)(samp_rate * 0.022) self.inp_amp = inp_amp = ((center + (fsk_deviation / 2)) / vco_max) - vco_offset self.channel_filter = channel_filter = firdes.complex_band_pass( 1.0, usrp_rate, -3000, 3000, 2000, firdes.WIN_HAMMING, 6.76) self.center_freq = center_freq = 144.95e6 self.baud = baud = 1 / 0.022 ################################################## # Blocks ################################################## self._rf_gain_range = Range(0, 76, 1, 1, 200) self._rf_gain_win = RangeWidget(self._rf_gain_range, self.set_rf_gain, 'RF Gain', "counter_slider", int, QtCore.Qt.Horizontal) self.top_grid_layout.addWidget(self._rf_gain_win) self._center_freq_range = Range(144.0e6, 148.0e6, 1.0e3, 144.95e6, 200) self._center_freq_win = RangeWidget(self._center_freq_range, self.set_center_freq, 'Tuning', "counter_slider", float, QtCore.Qt.Horizontal) self.top_grid_layout.addWidget(self._center_freq_win) self.uhd_usrp_sink_0 = uhd.usrp_sink( ",".join(("", "")), uhd.stream_args( cpu_format="fc32", args='', channels=list(range(0, 1)), ), '', ) self.uhd_usrp_sink_0.set_samp_rate(usrp_rate) self.uhd_usrp_sink_0.set_time_unknown_pps(uhd.time_spec(0)) self.uhd_usrp_sink_0.set_center_freq(center_freq, 0) self.uhd_usrp_sink_0.set_antenna('TX/RX', 0) self.uhd_usrp_sink_0.set_bandwidth(200000, 0) self.uhd_usrp_sink_0.set_gain(rf_gain, 0) self.qtgui_time_sink_x_0 = qtgui.time_sink_f( 4096, #size samp_rate, #samp_rate "", #name 1, #number of inputs None # parent ) self.qtgui_time_sink_x_0.set_update_time(0.10) self.qtgui_time_sink_x_0.set_y_axis(-1, 1.5) self.qtgui_time_sink_x_0.set_y_label('Amplitude', "") self.qtgui_time_sink_x_0.enable_tags(True) self.qtgui_time_sink_x_0.set_trigger_mode(qtgui.TRIG_MODE_NORM, qtgui.TRIG_SLOPE_NEG, 0.5, 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(True) self.qtgui_time_sink_x_0.enable_stem_plot(False) labels = [ 'Signal 1', 'Signal 2', 'Signal 3', 'Signal 4', 'Signal 5', 'Signal 6', 'Signal 7', 'Signal 8', 'Signal 9', 'Signal 10' ] 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] styles = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1] markers = [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1] for i in range(1): if len(labels[i]) == 0: self.qtgui_time_sink_x_0.set_line_label( i, "Data {0}".format(i)) 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) self.low_pass_filter_0 = filter.fir_filter_fff( 1, firdes.low_pass(1, samp_rate, 200, 1000, firdes.WIN_HAMMING, 6.76)) self.fft_filter_xxx_0 = filter.fft_filter_ccc(1, channel_filter, 1) self.fft_filter_xxx_0.declare_sample_delay(0) self.blocks_vector_source_x_0 = blocks.vector_source_b( (0, 1, 1, 1, 1, 1, 1, 1), True, 1, []) self.blocks_vco_c_0 = blocks.vco_c(samp_rate, 15708, 0.75) self.blocks_uchar_to_float_0 = blocks.uchar_to_float() self.blocks_repeat_0_0 = blocks.repeat(gr.sizeof_gr_complex * 1, (int)(usrp_rate / samp_rate)) self.blocks_repeat_0 = blocks.repeat(gr.sizeof_char * 1, repeat) self.blocks_multiply_const_vxx_0 = blocks.multiply_const_ff(inp_amp) self.blocks_add_const_vxx_0 = blocks.add_const_ff(vco_offset) ################################################## # Connections ################################################## self.connect((self.blocks_add_const_vxx_0, 0), (self.blocks_vco_c_0, 0)) self.connect((self.blocks_multiply_const_vxx_0, 0), (self.blocks_add_const_vxx_0, 0)) self.connect((self.blocks_repeat_0, 0), (self.blocks_uchar_to_float_0, 0)) self.connect((self.blocks_repeat_0_0, 0), (self.fft_filter_xxx_0, 0)) self.connect((self.blocks_uchar_to_float_0, 0), (self.low_pass_filter_0, 0)) self.connect((self.blocks_vco_c_0, 0), (self.blocks_repeat_0_0, 0)) self.connect((self.blocks_vector_source_x_0, 0), (self.blocks_repeat_0, 0)) self.connect((self.fft_filter_xxx_0, 0), (self.uhd_usrp_sink_0, 0)) self.connect((self.low_pass_filter_0, 0), (self.blocks_multiply_const_vxx_0, 0)) self.connect((self.low_pass_filter_0, 0), (self.qtgui_time_sink_x_0, 0))
def __init__(self, app_id=0x3fff, initials='VE3IRR', message='Hello world!', sender_gid=1234567890): gr.top_block.__init__(self, "Gotenna Tx Hackrf") ################################################## # Parameters ################################################## self.app_id = app_id self.initials = initials self.message = message self.sender_gid = sender_gid ################################################## # Variables ################################################## self.samp_per_sym = samp_per_sym = 4 self.interp = interp = 20 self.data_chan = data_chan = 2 self.silence_time = silence_time = 5000 self.samp_rate = samp_rate = 24000 * samp_per_sym * interp self.packets = packets = gotenna_packet.encode_shout_packets( data_chan, app_id, sender_gid, initials, message) self.control_chan = control_chan = 2 self.center_freq = center_freq = 926250000 ################################################## # Blocks ################################################## self.rational_resampler_xxx_0 = filter.rational_resampler_ccc( interpolation=interp, decimation=1, taps=None, fractional_bw=None) self.osmosdr_sink_0 = osmosdr.sink(args="numchan=" + str(1) + " " + '') self.osmosdr_sink_0.set_time_unknown_pps(osmosdr.time_spec_t()) self.osmosdr_sink_0.set_sample_rate(samp_rate) self.osmosdr_sink_0.set_center_freq(center_freq, 0) self.osmosdr_sink_0.set_freq_corr(0, 0) self.osmosdr_sink_0.set_gain(1, 0) self.osmosdr_sink_0.set_if_gain(20, 0) self.osmosdr_sink_0.set_bb_gain(20, 0) self.osmosdr_sink_0.set_antenna('', 0) self.osmosdr_sink_0.set_bandwidth(0, 0) self.digital_gfsk_mod_0 = digital.gfsk_mod( samples_per_symbol=samp_per_sym, sensitivity=1.0, bt=0.5, verbose=False, log=False) self.blocks_vector_source_x_2 = blocks.vector_source_f( gotenna_packet.vco(center_freq, control_chan, data_chan, packets) + [0] * silence_time, False, 1, []) self.blocks_vector_source_x_1 = blocks.vector_source_c( gotenna_packet.envelope(packets) + [0] * silence_time, False, 1, []) self.blocks_vector_source_x_0 = blocks.vector_source_b( gotenna_packet.gfsk_bytes(packets) + [0] * silence_time, False, 1, []) self.blocks_vco_c_0 = blocks.vco_c(samp_rate, 2 * math.pi, 0.9) self.blocks_repeat_1 = blocks.repeat(gr.sizeof_float * 1, 8 * samp_per_sym * interp) self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex * 1, 8 * samp_per_sym) self.blocks_multiply_xx_1 = blocks.multiply_vcc(1) self.blocks_multiply_xx_0 = blocks.multiply_vcc(1) ################################################## # Connections ################################################## self.connect((self.blocks_multiply_xx_0, 0), (self.rational_resampler_xxx_0, 0)) self.connect((self.blocks_multiply_xx_1, 0), (self.osmosdr_sink_0, 0)) self.connect((self.blocks_repeat_0, 0), (self.blocks_multiply_xx_0, 1)) self.connect((self.blocks_repeat_1, 0), (self.blocks_vco_c_0, 0)) self.connect((self.blocks_vco_c_0, 0), (self.blocks_multiply_xx_1, 1)) self.connect((self.blocks_vector_source_x_0, 0), (self.digital_gfsk_mod_0, 0)) self.connect((self.blocks_vector_source_x_1, 0), (self.blocks_repeat_0, 0)) self.connect((self.blocks_vector_source_x_2, 0), (self.blocks_repeat_1, 0)) self.connect((self.digital_gfsk_mod_0, 0), (self.blocks_multiply_xx_0, 0)) self.connect((self.rational_resampler_xxx_0, 0), (self.blocks_multiply_xx_1, 0))
def __init__(self): gr.top_block.__init__(self, "Top Block") Qt.QWidget.__init__(self) self.setWindowTitle("Top Block") 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", "top_block") self.restoreGeometry( self.settings.value("geometry", type=QtCore.QByteArray)) ################################################## # Variables ################################################## self.samp_rate = samp_rate = 2e6 self.bit_rate = bit_rate = 8 self.sensitivity = sensitivity = 2 * 3.14 * 1e5 self.rf_gain = rf_gain = 60 self.repeat = repeat = int(samp_rate / bit_rate) self.packet_size = packet_size = 8 self.low_freq = low_freq = 50e3 self.freq_spread = freq_spread = 50e3 self.carrier_freq = carrier_freq = 900e6 ################################################## # Blocks ################################################## self.osmosdr_sink_1 = osmosdr.sink(args="numchan=" + str(1) + " " + '') self.osmosdr_sink_1.set_sample_rate(samp_rate) self.osmosdr_sink_1.set_center_freq(carrier_freq, 0) self.osmosdr_sink_1.set_freq_corr(0, 0) self.osmosdr_sink_1.set_gain(rf_gain, 0) self.osmosdr_sink_1.set_if_gain(20, 0) self.osmosdr_sink_1.set_bb_gain(40, 0) self.osmosdr_sink_1.set_antenna('TX1', 0) self.osmosdr_sink_1.set_bandwidth(300e3, 0) self.low_pass_filter_0 = filter.fir_filter_fff( 1, firdes.low_pass(1, samp_rate, 2e3, 10e3, firdes.WIN_HAMMING, 6.76)) self.blocks_vco_c_0 = blocks.vco_c(samp_rate, sensitivity, 1) self.blocks_unpack_k_bits_bb_0 = blocks.unpack_k_bits_bb(packet_size) self.blocks_uchar_to_float_0 = blocks.uchar_to_float() self.blocks_repeat_0 = blocks.repeat(gr.sizeof_char * 1, repeat) self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vff( (2 * 3.14 * freq_spread / sensitivity, )) self.blocks_add_const_vxx_0 = blocks.add_const_vff( (2 * 3.14 * low_freq / sensitivity, )) self.analog_random_source_x_0 = blocks.vector_source_b( map(int, numpy.random.randint(0, 2, 1000)), True) ################################################## # Connections ################################################## self.connect((self.analog_random_source_x_0, 0), (self.blocks_unpack_k_bits_bb_0, 0)) self.connect((self.blocks_add_const_vxx_0, 0), (self.blocks_vco_c_0, 0)) self.connect((self.blocks_multiply_const_vxx_0, 0), (self.blocks_add_const_vxx_0, 0)) self.connect((self.blocks_repeat_0, 0), (self.blocks_uchar_to_float_0, 0)) self.connect((self.blocks_uchar_to_float_0, 0), (self.low_pass_filter_0, 0)) self.connect((self.blocks_unpack_k_bits_bb_0, 0), (self.blocks_repeat_0, 0)) self.connect((self.blocks_vco_c_0, 0), (self.osmosdr_sink_1, 0)) self.connect((self.low_pass_filter_0, 0), (self.blocks_multiply_const_vxx_0, 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 = 240000 self.fm = fm = 0.5 self.fc = fc = 10000 self.Df = Df = 1000 self.An = An = 0 self.Am = Am = 1 ################################################## # Blocks ################################################## self._fc_range = Range(1000, 20000, 1000, 10000, 200) self._fc_win = RangeWidget(self._fc_range, self.set_fc, "fc", "counter_slider", float) self.top_layout.addWidget(self._fc_win) self._Df_range = Range(500, 2000, 100, 1000, 200) self._Df_win = RangeWidget(self._Df_range, self.set_Df, "Df", "counter_slider", float) self.top_layout.addWidget(self._Df_win) self._An_range = Range(0, 5, 0.5, 0, 200) self._An_win = RangeWidget(self._An_range, self.set_An, "An", "counter_slider", float) self.top_layout.addWidget(self._An_win) self._Am_range = Range(0, 10, 0.5, 1, 200) self._Am_win = RangeWidget(self._Am_range, self.set_Am, "Am", "counter_slider", float) self.top_layout.addWidget(self._Am_win) self.v = analog.sig_source_f(samp_rate, analog.GR_SIN_WAVE, 1, Am, 0) self.qtgui_time_sink_x_0 = qtgui.time_sink_c( 1024, #size samp_rate, #samp_rate "", #name 2 #number of inputs ) self.qtgui_time_sink_x_0.set_update_time(0.10) 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(True) self.qtgui_time_sink_x_0.enable_control_panel(True) if not True: self.qtgui_time_sink_x_0.disable_legend() labels = ["Re{s(t)}", "Im{s(t)}", "Re{c(t)}", "Im{c(t)}", "", "", "", "", "", ""] 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, 2, 1, 2, 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*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_layout.addWidget(self._qtgui_time_sink_x_0_win) self.qtgui_freq_sink_x_0 = qtgui.freq_sink_c( 4096, #size firdes.WIN_RECTANGULAR, #wintype 0, #fc samp_rate, #bw "", #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(-140, 10) 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(1.0) 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 = ["S(f)", "C(f)", "", "", "", "", "", "", "", ""] 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.top_layout.addWidget(self._qtgui_freq_sink_x_0_win) self._fm_range = Range(0, 1, 0.02, 0.5, 200) self._fm_win = RangeWidget(self._fm_range, self.set_fm, "fm", "counter_slider", float) self.top_layout.addWidget(self._fm_win) self.blocks_vco_c_0 = blocks.vco_c(samp_rate, 6283.1, 1) self.blocks_throttle_0 = blocks.throttle(gr.sizeof_float*1, samp_rate,True) self.blocks_multiply_xx_0 = blocks.multiply_vcc(1) self.blocks_add_xx_0 = blocks.add_vcc(1) self.analog_sig_source_x_0 = analog.sig_source_c(samp_rate, analog.GR_COS_WAVE, fc, 1, 0) self.analog_pll_refout_cc_0 = analog.pll_refout_cc(0.0628318530717, (fc+Df)*0.0000261799387799, (fc-Df)*0.0000261799387799) self.analog_noise_source_x_0 = analog.noise_source_c(analog.GR_GAUSSIAN, An, 0) ################################################## # Connections ################################################## self.connect((self.analog_noise_source_x_0, 0), (self.blocks_add_xx_0, 1)) self.connect((self.analog_pll_refout_cc_0, 0), (self.qtgui_freq_sink_x_0, 1)) self.connect((self.analog_pll_refout_cc_0, 0), (self.qtgui_time_sink_x_0, 1)) self.connect((self.analog_sig_source_x_0, 0), (self.blocks_multiply_xx_0, 1)) self.connect((self.blocks_add_xx_0, 0), (self.analog_pll_refout_cc_0, 0)) self.connect((self.blocks_add_xx_0, 0), (self.qtgui_freq_sink_x_0, 0)) self.connect((self.blocks_add_xx_0, 0), (self.qtgui_time_sink_x_0, 0)) self.connect((self.blocks_multiply_xx_0, 0), (self.blocks_add_xx_0, 0)) self.connect((self.blocks_throttle_0, 0), (self.blocks_vco_c_0, 0)) self.connect((self.blocks_vco_c_0, 0), (self.blocks_multiply_xx_0, 0)) self.connect((self.v, 0), (self.blocks_throttle_0, 0))
def __init__(self): grc_wxgui.top_block_gui.__init__(self, title="Top Block") _icon_path = "/usr/share/icons/hicolor/32x32/apps/gnuradio-grc.png" self.SetIcon(wx.Icon(_icon_path, wx.BITMAP_TYPE_ANY)) ################################################## # Variables ################################################## self.sps = sps = 4 self.nfilts = nfilts = 32 self.ntaps = ntaps = 11 * nfilts * sps self.excess_bw = excess_bw = 0.4 self.txtaps = txtaps = firdes.root_raised_cosine( nfilts, nfilts, 1.0, excess_bw, ntaps) self.timing_bw = timing_bw = 2 * pi / 100 self.samp_rate = samp_rate = 320e3 self.rx_taps = rx_taps = filter.firdes.root_raised_cosine( nfilts, nfilts * sps, 1.0, excess_bw, ntaps) self.const_points = const_points = 8 ################################################## # Blocks ################################################## self.wxgui_scopesink2_0 = scopesink2.scope_sink_c( self.GetWin(), title="Scope Plot", sample_rate=samp_rate / sps, 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_0.win) self.wxgui_fftsink2_0 = fftsink2.fft_sink_c( self.GetWin(), baseband_freq=0, y_per_div=10, y_divs=10, ref_level=0, ref_scale=2.0, sample_rate=samp_rate / sps, fft_size=1024, fft_rate=15, average=False, avg_alpha=None, title="FFT Plot", peak_hold=False, ) self.Add(self.wxgui_fftsink2_0.win) self.pfb_arb_resampler_xxx_0 = pfb.arb_resampler_ccf(sps, taps=(txtaps), flt_size=32) self.pfb_arb_resampler_xxx_0.declare_sample_delay(0) self.iir_filter_xxx_1 = filter.iir_filter_ffd(([1.0001, -1]), ([-1, 1]), True) self.iir_filter_xxx_0 = filter.iir_filter_ffd(([10e-3]), ([-1, 990e-3]), True) self.digital_pfb_clock_sync_xxx_0 = digital.pfb_clock_sync_ccf( sps, timing_bw, (rx_taps), nfilts, 16, 1.5, 1) self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc( ((1 + 0j), (0.707 + 0.707j), (0 + 1j), (-0.707 + 0.707j), (-1 + 0j), (-0.707 - 0.707j), (0 - 1j), (0.707 - 0.707j)), 1) self.blocks_vco_c_0_0 = blocks.vco_c(samp_rate / sps, -5, 1) self.blocks_vco_c_0 = blocks.vco_c(samp_rate / sps, samp_rate / sps, 1) self.blocks_udp_source_0 = blocks.udp_source(gr.sizeof_float * 1, "127.0.0.1", 12345, 1472, True) self.blocks_udp_sink_0 = blocks.udp_sink(gr.sizeof_float * 1, "127.0.0.1", 12345, 1472, True) self.blocks_throttle_0_0 = blocks.throttle(gr.sizeof_gr_complex * 1, samp_rate, True) self.blocks_throttle_0 = blocks.throttle(gr.sizeof_gr_complex * 1, samp_rate, True) self.blocks_multiply_xx_4 = blocks.multiply_vcc(1) self.blocks_multiply_xx_3 = blocks.multiply_vcc(1) self.blocks_multiply_xx_2 = blocks.multiply_vcc(1) self.blocks_multiply_xx_1 = blocks.multiply_vcc(1) self.blocks_multiply_xx_0 = blocks.multiply_vcc(1) self.blocks_multiply_const_vxx_0_0 = blocks.multiply_const_vff( (0.125, )) self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vff((0.125, )) self.blocks_multiply_conjugate_cc_0 = blocks.multiply_conjugate_cc(1) self.blocks_delay_0_0 = blocks.delay(gr.sizeof_float * 1, 500) self.blocks_delay_0 = blocks.delay(gr.sizeof_gr_complex * 1, 1) self.blocks_complex_to_arg_1 = blocks.complex_to_arg(1) self.blocks_complex_to_arg_0 = blocks.complex_to_arg(1) self.analog_sig_source_x_0 = analog.sig_source_c( samp_rate, analog.GR_SIN_WAVE, 10e3, 1, 0) self.analog_random_source_x_0 = blocks.vector_source_b( map(int, numpy.random.randint(0, const_points, 1000)), True) ################################################## # Connections ################################################## self.connect((self.analog_random_source_x_0, 0), (self.digital_chunks_to_symbols_xx_0, 0)) self.connect((self.analog_sig_source_x_0, 0), (self.blocks_throttle_0_0, 0)) self.connect((self.blocks_complex_to_arg_0, 0), (self.blocks_multiply_const_vxx_0, 0)) self.connect((self.blocks_complex_to_arg_1, 0), (self.blocks_multiply_const_vxx_0_0, 0)) self.connect((self.blocks_delay_0, 0), (self.blocks_multiply_conjugate_cc_0, 1)) self.connect((self.blocks_delay_0_0, 0), (self.iir_filter_xxx_1, 0)) self.connect((self.blocks_multiply_conjugate_cc_0, 0), (self.blocks_complex_to_arg_0, 0)) self.connect((self.blocks_multiply_const_vxx_0, 0), (self.blocks_vco_c_0, 0)) self.connect((self.blocks_multiply_const_vxx_0_0, 0), (self.iir_filter_xxx_0, 0)) self.connect((self.blocks_multiply_xx_0, 0), (self.digital_pfb_clock_sync_xxx_0, 0)) self.connect((self.blocks_multiply_xx_1, 0), (self.blocks_delay_0, 0)) self.connect((self.blocks_multiply_xx_1, 0), (self.blocks_multiply_conjugate_cc_0, 0)) self.connect((self.blocks_multiply_xx_2, 0), (self.blocks_multiply_xx_3, 0)) self.connect((self.blocks_multiply_xx_2, 0), (self.wxgui_scopesink2_0, 0)) self.connect((self.blocks_multiply_xx_3, 0), (self.blocks_multiply_xx_4, 0)) self.connect((self.blocks_multiply_xx_3, 0), (self.blocks_multiply_xx_4, 1)) self.connect((self.blocks_multiply_xx_3, 0), (self.blocks_multiply_xx_4, 2)) self.connect((self.blocks_multiply_xx_3, 0), (self.blocks_multiply_xx_4, 3)) self.connect((self.blocks_multiply_xx_3, 0), (self.blocks_multiply_xx_4, 4)) self.connect((self.blocks_multiply_xx_3, 0), (self.blocks_multiply_xx_4, 5)) self.connect((self.blocks_multiply_xx_3, 0), (self.blocks_multiply_xx_4, 6)) self.connect((self.blocks_multiply_xx_3, 0), (self.blocks_multiply_xx_4, 7)) self.connect((self.blocks_multiply_xx_4, 0), (self.blocks_complex_to_arg_1, 0)) self.connect((self.blocks_throttle_0, 0), (self.blocks_multiply_xx_0, 0)) self.connect((self.blocks_throttle_0_0, 0), (self.blocks_multiply_xx_0, 1)) self.connect((self.blocks_udp_source_0, 0), (self.blocks_delay_0_0, 0)) self.connect((self.blocks_vco_c_0, 0), (self.blocks_multiply_xx_2, 0)) self.connect((self.blocks_vco_c_0, 0), (self.wxgui_fftsink2_0, 0)) self.connect((self.blocks_vco_c_0_0, 0), (self.blocks_multiply_xx_3, 1)) self.connect((self.digital_chunks_to_symbols_xx_0, 0), (self.pfb_arb_resampler_xxx_0, 0)) self.connect((self.digital_pfb_clock_sync_xxx_0, 0), (self.blocks_multiply_xx_1, 0)) self.connect((self.digital_pfb_clock_sync_xxx_0, 0), (self.blocks_multiply_xx_1, 1)) self.connect((self.digital_pfb_clock_sync_xxx_0, 0), (self.blocks_multiply_xx_1, 2)) self.connect((self.digital_pfb_clock_sync_xxx_0, 0), (self.blocks_multiply_xx_1, 3)) self.connect((self.digital_pfb_clock_sync_xxx_0, 0), (self.blocks_multiply_xx_1, 4)) self.connect((self.digital_pfb_clock_sync_xxx_0, 0), (self.blocks_multiply_xx_1, 5)) self.connect((self.digital_pfb_clock_sync_xxx_0, 0), (self.blocks_multiply_xx_1, 6)) self.connect((self.digital_pfb_clock_sync_xxx_0, 0), (self.blocks_multiply_xx_1, 7)) self.connect((self.digital_pfb_clock_sync_xxx_0, 0), (self.blocks_multiply_xx_2, 1)) self.connect((self.iir_filter_xxx_0, 0), (self.blocks_udp_sink_0, 0)) self.connect((self.iir_filter_xxx_1, 0), (self.blocks_vco_c_0_0, 0)) self.connect((self.pfb_arb_resampler_xxx_0, 0), (self.blocks_throttle_0, 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 = 254000 self.kvco = kvco = 2000 self.fm = fm = 10 self.fc = fc = 30000 self.Am = Am = 1 ################################################## # Blocks ################################################## self._fm_range = Range(10, 1000, 10, 10, 200) self._fm_win = RangeWidget(self._fm_range, self.set_fm, "fm", "counter_slider", float) self.top_layout.addWidget(self._fm_win) self._Am_range = Range(0.25, 5, 0.25, 1, 200) self._Am_win = RangeWidget(self._Am_range, self.set_Am, "Am", "counter_slider", float) self.top_layout.addWidget(self._Am_win) self.v = analog.sig_source_f(samp_rate, analog.GR_SQR_WAVE, fm, 2 * Am, -Am) self.qtgui_waterfall_sink_x_0 = qtgui.waterfall_sink_f( 4096, #size firdes.WIN_BLACKMAN_hARRIS, #wintype 0, #fc samp_rate, #bw "", #name 1 #number of inputs ) self.qtgui_waterfall_sink_x_0.set_update_time(0.10) self.qtgui_waterfall_sink_x_0.enable_grid(False) if not True: self.qtgui_waterfall_sink_x_0.disable_legend() if "float" == "float" or "float" == "msg_float": self.qtgui_waterfall_sink_x_0.set_plot_pos_half(not True) labels = ["", "", "", "", "", "", "", "", "", ""] colors = [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_waterfall_sink_x_0.set_line_label( i, "Data {0}".format(i)) else: self.qtgui_waterfall_sink_x_0.set_line_label(i, labels[i]) self.qtgui_waterfall_sink_x_0.set_color_map(i, colors[i]) self.qtgui_waterfall_sink_x_0.set_line_alpha(i, alphas[i]) self.qtgui_waterfall_sink_x_0.set_intensity_range(-140, 10) self._qtgui_waterfall_sink_x_0_win = sip.wrapinstance( self.qtgui_waterfall_sink_x_0.pyqwidget(), Qt.QWidget) self.top_layout.addWidget(self._qtgui_waterfall_sink_x_0_win) self.qtgui_time_sink_x_0 = qtgui.time_sink_f( 4096, #size samp_rate, #samp_rate "", #name 2 #number of inputs ) self.qtgui_time_sink_x_0.set_update_time(0.10) 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(True) self.qtgui_time_sink_x_0.enable_control_panel(True) if not True: self.qtgui_time_sink_x_0.disable_legend() labels = ["sfm(t)", "m(t)", "", "", "", "", "", "", "", ""] 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: self.qtgui_time_sink_x_0.set_line_label( i, "Data {0}".format(i)) 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_layout.addWidget(self._qtgui_time_sink_x_0_win) self.qtgui_freq_sink_x_0 = qtgui.freq_sink_f( 4096, #size firdes.WIN_BLACKMAN_hARRIS, #wintype 0, #fc samp_rate, #bw "", #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(-140, 10) 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(1.0) self.qtgui_freq_sink_x_0.enable_control_panel(True) if not True: self.qtgui_freq_sink_x_0.disable_legend() if "float" == "float" or "float" == "msg_float": self.qtgui_freq_sink_x_0.set_plot_pos_half(not True) labels = ["Sfm(f)", "M(f)", "", "", "", "", "", "", "", ""] 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.top_layout.addWidget(self._qtgui_freq_sink_x_0_win) self.blocks_vco_c_0 = blocks.vco_c(samp_rate, 2 * 3.14159265 * kvco, 1) self.blocks_multiply_xx_0 = blocks.multiply_vcc(1) self.blocks_integrate_xx_0 = blocks.integrate_ff(1, 1) self.blocks_complex_to_real_0 = blocks.complex_to_real(1) self.analog_sig_source_x_0 = analog.sig_source_c( samp_rate, analog.GR_COS_WAVE, fc, 1, 0) ################################################## # Connections ################################################## self.connect((self.analog_sig_source_x_0, 0), (self.blocks_multiply_xx_0, 1)) self.connect((self.blocks_complex_to_real_0, 0), (self.qtgui_freq_sink_x_0, 0)) self.connect((self.blocks_complex_to_real_0, 0), (self.qtgui_time_sink_x_0, 0)) self.connect((self.blocks_complex_to_real_0, 0), (self.qtgui_waterfall_sink_x_0, 0)) self.connect((self.blocks_integrate_xx_0, 0), (self.blocks_vco_c_0, 0)) self.connect((self.blocks_multiply_xx_0, 0), (self.blocks_complex_to_real_0, 0)) self.connect((self.blocks_vco_c_0, 0), (self.blocks_multiply_xx_0, 0)) self.connect((self.v, 0), (self.blocks_integrate_xx_0, 0)) self.connect((self.v, 0), (self.qtgui_freq_sink_x_0, 1)) self.connect((self.v, 0), (self.qtgui_time_sink_x_0, 1))
def __init__(self): gr.top_block.__init__(self, "Lab 7 Task 1") Qt.QWidget.__init__(self) self.setWindowTitle("Lab 7 Task 1") 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", "lab7_task1") try: if StrictVersion(Qt.qVersion()) < StrictVersion("5.0.0"): self.restoreGeometry( self.settings.value("geometry").toByteArray()) else: self.restoreGeometry(self.settings.value("geometry")) except: pass ################################################## # Variables ################################################## self.sps = sps = 4 self.nfilts = nfilts = 32 self.ntaps = ntaps = 11 * nfilts * sps self.excess_bw = excess_bw = 0.45 self.tx_taps = tx_taps = firdes.root_raised_cosine( nfilts, nfilts, 1.0, excess_bw, ntaps) self.timing_bw = timing_bw = 2 * pi / 100 self.samp_rate = samp_rate = 320000 self.rx_taps = rx_taps = firdes.root_raised_cosine( nfilts, nfilts * sps, 1.0, 0.4, ntaps) self.const_points = const_points = 4 ################################################## # 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, 'QPSK Signal with Frequency Offset') 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, 'QPSK Carrier Phase Detector') 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, 'UDP Source Output') self.tab_widget_3 = Qt.QWidget() self.tab_layout_3 = Qt.QBoxLayout(Qt.QBoxLayout.TopToBottom, self.tab_widget_3) self.tab_grid_layout_3 = Qt.QGridLayout() self.tab_layout_3.addLayout(self.tab_grid_layout_3) self.tab.addTab(self.tab_widget_3, 'Output of Costas Loop') self.top_grid_layout.addWidget(self.tab) self.qtgui_time_sink_x_1 = qtgui.time_sink_f( 1024, #size samp_rate, #samp_rate "", #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(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) labels = [ 'Signal 1', 'Signal 2', 'Signal 3', 'Signal 4', 'Signal 5', 'Signal 6', 'Signal 7', 'Signal 8', 'Signal 9', 'Signal 10' ] 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] styles = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1] markers = [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1] for i in range(1): 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_2.addWidget(self._qtgui_time_sink_x_1_win) self.qtgui_time_sink_x_0 = qtgui.time_sink_f( 2000, #size samp_rate, #samp_rate "", #name 1 #number of inputs ) self.qtgui_time_sink_x_0.set_update_time(0.10) 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(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) labels = [ 'Signal 1', 'Signal 2', 'Signal 3', 'Signal 4', 'Signal 5', 'Signal 6', 'Signal 7', 'Signal 8', 'Signal 9', 'Signal 10' ] 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] styles = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1] markers = [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1] for i in range(1): if len(labels[i]) == 0: self.qtgui_time_sink_x_0.set_line_label( i, "Data {0}".format(i)) 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.tab_layout_1.addWidget(self._qtgui_time_sink_x_0_win) self.qtgui_const_sink_x_0_0 = qtgui.const_sink_c( 1024, #size "", #name 1 #number of inputs ) self.qtgui_const_sink_x_0_0.set_update_time(0.10) self.qtgui_const_sink_x_0_0.set_y_axis(-2, 2) self.qtgui_const_sink_x_0_0.set_x_axis(-2, 2) self.qtgui_const_sink_x_0_0.set_trigger_mode(qtgui.TRIG_MODE_FREE, qtgui.TRIG_SLOPE_POS, 0.0, 0, "") self.qtgui_const_sink_x_0_0.enable_autoscale(False) self.qtgui_const_sink_x_0_0.enable_grid(False) self.qtgui_const_sink_x_0_0.enable_axis_labels(True) 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 range(1): if len(labels[i]) == 0: self.qtgui_const_sink_x_0_0.set_line_label( i, "Data {0}".format(i)) else: self.qtgui_const_sink_x_0_0.set_line_label(i, labels[i]) self.qtgui_const_sink_x_0_0.set_line_width(i, widths[i]) self.qtgui_const_sink_x_0_0.set_line_color(i, colors[i]) self.qtgui_const_sink_x_0_0.set_line_style(i, styles[i]) self.qtgui_const_sink_x_0_0.set_line_marker(i, markers[i]) self.qtgui_const_sink_x_0_0.set_line_alpha(i, alphas[i]) self._qtgui_const_sink_x_0_0_win = sip.wrapinstance( self.qtgui_const_sink_x_0_0.pyqwidget(), Qt.QWidget) self.tab_layout_3.addWidget(self._qtgui_const_sink_x_0_0_win) self.qtgui_const_sink_x_0 = qtgui.const_sink_c( 1024, #size "", #name 1 #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.0, 0, "") self.qtgui_const_sink_x_0.enable_autoscale(False) self.qtgui_const_sink_x_0.enable_grid(False) self.qtgui_const_sink_x_0.enable_axis_labels(True) 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 range(1): 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_0.addWidget(self._qtgui_const_sink_x_0_win) self.pfb_arb_resampler_xxx_0 = pfb.arb_resampler_ccf(sps, taps=tx_taps, flt_size=32) self.pfb_arb_resampler_xxx_0.declare_sample_delay(0) self.iir_filter_xxx_0_0 = filter.iir_filter_ffd([1.0001, -1], [-1, 1], True) self.iir_filter_xxx_0 = filter.iir_filter_ffd([0.01], [-1, 0.99], True) self.digital_pfb_clock_sync_xxx_0_0 = digital.pfb_clock_sync_ccf( 4, timing_bw, rx_taps, 32, 16, 1.5, 1) self.digital_pfb_clock_sync_xxx_0 = digital.pfb_clock_sync_ccf( 4, timing_bw, rx_taps, 32, 16, 1.5, 1) self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc( ((1 - 1j), (1 + 1j), (-1 + 1j), (-1 - 1j)), 1) self.blocks_vco_c_0 = blocks.vco_c(samp_rate, -5, 1) self.blocks_udp_source_0 = blocks.udp_source(gr.sizeof_float * 1, '127.0.0.1', 12345, 1472, True) self.blocks_udp_sink_0 = blocks.udp_sink(gr.sizeof_float * 1, '127.0.0.1', 12345, 1472, True) self.blocks_throttle_1_0 = blocks.throttle(gr.sizeof_float * 1, samp_rate, True) self.blocks_throttle_1 = blocks.throttle(gr.sizeof_float * 1, samp_rate, True) self.blocks_throttle_0_0 = blocks.throttle(gr.sizeof_gr_complex * 1, samp_rate, True) self.blocks_throttle_0 = blocks.throttle(gr.sizeof_gr_complex * 1, samp_rate, True) self.blocks_threshold_ff_0_0 = blocks.threshold_ff(-0.001, 0.001, 0) self.blocks_threshold_ff_0 = blocks.threshold_ff(-0.001, 0.001, 0) self.blocks_sub_xx_0 = blocks.sub_ff(1) self.blocks_multiply_xx_2 = blocks.multiply_vcc(1) self.blocks_multiply_xx_1_0 = blocks.multiply_vff(1) self.blocks_multiply_xx_1 = blocks.multiply_vff(1) self.blocks_multiply_xx_0 = blocks.multiply_vcc(1) self.blocks_multiply_const_vxx_0 = blocks.multiply_const_ff(0.2) self.blocks_delay_0 = blocks.delay(gr.sizeof_float * 1, 10) self.blocks_complex_to_real_0 = blocks.complex_to_real(1) self.blocks_complex_to_imag_0 = blocks.complex_to_imag(1) self.blocks_add_const_vxx_0_0 = blocks.add_const_ff(-0.5) self.blocks_add_const_vxx_0 = blocks.add_const_ff(-0.5) self.analog_sig_source_x_0 = analog.sig_source_c( samp_rate, analog.GR_COS_WAVE, 0.1, 1, 0, 0) self.analog_random_source_x_0 = blocks.vector_source_b( list(map(int, numpy.random.randint(0, 4, 1000))), True) ################################################## # Connections ################################################## self.connect((self.analog_random_source_x_0, 0), (self.digital_chunks_to_symbols_xx_0, 0)) self.connect((self.analog_sig_source_x_0, 0), (self.blocks_multiply_xx_0, 1)) self.connect((self.blocks_add_const_vxx_0, 0), (self.blocks_multiply_xx_1_0, 0)) self.connect((self.blocks_add_const_vxx_0_0, 0), (self.blocks_multiply_xx_1, 1)) self.connect((self.blocks_complex_to_imag_0, 0), (self.blocks_multiply_xx_1_0, 1)) self.connect((self.blocks_complex_to_imag_0, 0), (self.blocks_threshold_ff_0_0, 0)) self.connect((self.blocks_complex_to_real_0, 0), (self.blocks_multiply_xx_1, 0)) self.connect((self.blocks_complex_to_real_0, 0), (self.blocks_threshold_ff_0, 0)) self.connect((self.blocks_delay_0, 0), (self.blocks_multiply_const_vxx_0, 0)) self.connect((self.blocks_multiply_const_vxx_0, 0), (self.blocks_throttle_1_0, 0)) self.connect((self.blocks_multiply_xx_0, 0), (self.blocks_multiply_xx_2, 0)) self.connect((self.blocks_multiply_xx_0, 0), (self.digital_pfb_clock_sync_xxx_0, 0)) self.connect((self.blocks_multiply_xx_1, 0), (self.blocks_sub_xx_0, 0)) self.connect((self.blocks_multiply_xx_1_0, 0), (self.blocks_sub_xx_0, 1)) self.connect((self.blocks_multiply_xx_2, 0), (self.blocks_complex_to_imag_0, 0)) self.connect((self.blocks_multiply_xx_2, 0), (self.blocks_complex_to_real_0, 0)) self.connect((self.blocks_multiply_xx_2, 0), (self.digital_pfb_clock_sync_xxx_0_0, 0)) self.connect((self.blocks_sub_xx_0, 0), (self.iir_filter_xxx_0, 0)) self.connect((self.blocks_threshold_ff_0, 0), (self.blocks_add_const_vxx_0, 0)) self.connect((self.blocks_threshold_ff_0_0, 0), (self.blocks_add_const_vxx_0_0, 0)) self.connect((self.blocks_throttle_0, 0), (self.qtgui_const_sink_x_0, 0)) self.connect((self.blocks_throttle_0_0, 0), (self.qtgui_const_sink_x_0_0, 0)) self.connect((self.blocks_throttle_1, 0), (self.qtgui_time_sink_x_0, 0)) self.connect((self.blocks_throttle_1_0, 0), (self.iir_filter_xxx_0_0, 0)) self.connect((self.blocks_throttle_1_0, 0), (self.qtgui_time_sink_x_1, 0)) self.connect((self.blocks_udp_source_0, 0), (self.blocks_delay_0, 0)) self.connect((self.blocks_vco_c_0, 0), (self.blocks_multiply_xx_2, 1)) self.connect((self.digital_chunks_to_symbols_xx_0, 0), (self.pfb_arb_resampler_xxx_0, 0)) self.connect((self.digital_pfb_clock_sync_xxx_0, 0), (self.blocks_throttle_0, 0)) self.connect((self.digital_pfb_clock_sync_xxx_0_0, 0), (self.blocks_throttle_0_0, 0)) self.connect((self.iir_filter_xxx_0, 0), (self.blocks_throttle_1, 0)) self.connect((self.iir_filter_xxx_0, 0), (self.blocks_udp_sink_0, 0)) self.connect((self.iir_filter_xxx_0_0, 0), (self.blocks_vco_c_0, 0)) self.connect((self.pfb_arb_resampler_xxx_0, 0), (self.blocks_multiply_xx_0, 0))
def __init__(self, gain=80): gr.top_block.__init__(self, "Sweep Example") Qt.QWidget.__init__(self) self.setWindowTitle("Sweep Example") 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", "sweep_example") try: if StrictVersion(Qt.qVersion()) < StrictVersion("5.0.0"): self.restoreGeometry( self.settings.value("geometry").toByteArray()) else: self.restoreGeometry(self.settings.value("geometry")) except: pass ################################################## # Parameters ################################################## self.gain = gain ################################################## # Variables ################################################## self.sweep_rate = sweep_rate = 18e6 self.samp_rate = samp_rate = 10.5e6 self.cent_freq = cent_freq = 2.465e9 ################################################## # Blocks ################################################## self.qtgui_freq_sink_x_0 = qtgui.freq_sink_c( 1024, #size firdes.WIN_BLACKMAN_hARRIS, #wintype 0, #fc 50e6, #bw "Sweep", #name 1) 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) 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 range(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) self.blocks_vco_c_0 = blocks.vco_c(samp_rate / 2.5, 6.282, 1) self.blocks_throttle_0 = blocks.throttle(gr.sizeof_gr_complex * 1, samp_rate, True) self.analog_sig_source_x_0 = analog.sig_source_f( samp_rate, analog.GR_SAW_WAVE, samp_rate / sweep_rate, 20e6, -10e6, 0) ################################################## # Connections ################################################## self.connect((self.analog_sig_source_x_0, 0), (self.blocks_vco_c_0, 0)) self.connect((self.blocks_throttle_0, 0), (self.qtgui_freq_sink_x_0, 0)) self.connect((self.blocks_vco_c_0, 0), (self.blocks_throttle_0, 0))
def __init__(self, min_errors=100, noise=0, samp_per_sym=50, tcola_m=32, tcola_r=1): gr.top_block.__init__(self, "BER 4FSK TCOLA") ################################################## # Parameters ################################################## self.min_errors = min_errors self.noise = noise self.samp_per_sym = samp_per_sym self.tcola_m = tcola_m self.tcola_r = tcola_r ################################################## # Variables ################################################## self.symb_rate = symb_rate = 4800 self.rrc_taps = rrc_taps = samp_per_sym * 6 + 1 self.symbol_delay = symbol_delay = rrc_taps / samp_per_sym - 1 self.samp_rate = samp_rate = symb_rate * samp_per_sym self.fsk_deviation_hz = fsk_deviation_hz = 648 self.bits_skip = bits_skip = 10000 self.bits_per_sym = bits_per_sym = 2 ################################################## # Blocks ################################################## self.delay = blocks.delay(gr.sizeof_char * 1, (symbol_delay + symb_rate) * bits_per_sym) self.vco = blocks.vco_c(samp_rate, fsk_deviation_hz * 2 * math.pi, 1) self.tcola_time_compression_0 = tcola.time_compression_c( tcola_m, tcola_r, ()) self.tcola_overlap_add_0 = tcola.overlap_add_c(tcola_m, tcola_r, ()) self.sample_counter = sample_counter() self.quadrature_demod = analog.quadrature_demod_cf( samp_rate / (2 * math.pi * fsk_deviation_hz)) self.probe_avg_power = analog.probe_avg_mag_sqrd_c(0, 1) self.pack_rx_bits = blocks.pack_k_bits_bb(8) self.pack_msg_bits = blocks.pack_k_bits_bb(8) self.glfsr = digital.glfsr_source_b(8, True, 0, 1) self.four_level_rrc_transmitter = four_level_rrc_transmitter( alpha=0.350, bits_per_symbol=2, rrc_taps=rrc_taps, samp_per_sym=samp_per_sym, sym_rate=symb_rate, ) self.four_level_rrc_receiver = four_level_rrc_receiver( alpha=0.350, bits_per_sym=2, rrc_taps=rrc_taps, samp_per_sym=samp_per_sym, sym_rate=symb_rate, ) self.channel_model = channels.channel_model(noise_voltage=noise, frequency_offset=0.0, epsilon=1.0, taps=(1, ), noise_seed=0, block_tags=False) self.blocks_skiphead_0_0 = blocks.skiphead(gr.sizeof_char * 1, bits_skip) self.blocks_skiphead_0 = blocks.skiphead(gr.sizeof_char * 1, bits_skip) self.blocks_delay_0_0 = blocks.delay(gr.sizeof_gr_complex * 1, samp_rate - tcola_m) self.ber_sink = blocks.vector_sink_f(1) self.ber_measure = fec.ber_bf(True, min_errors, -7.0) ################################################## # Connections ################################################## self.connect((self.ber_measure, 0), (self.ber_sink, 0)) self.connect((self.blocks_delay_0_0, 0), (self.quadrature_demod, 0)) self.connect((self.blocks_skiphead_0, 0), (self.sample_counter, 0)) self.connect((self.blocks_skiphead_0_0, 0), (self.pack_rx_bits, 0)) self.connect((self.channel_model, 0), (self.tcola_overlap_add_0, 0)) self.connect((self.delay, 0), (self.blocks_skiphead_0, 0)) self.connect((self.four_level_rrc_receiver, 2), (self.blocks_skiphead_0_0, 0)) self.connect((self.four_level_rrc_transmitter, 1), (self.vco, 0)) self.connect((self.glfsr, 0), (self.delay, 0)) self.connect((self.glfsr, 0), (self.four_level_rrc_transmitter, 0)) self.connect((self.pack_msg_bits, 0), (self.ber_measure, 0)) self.connect((self.pack_rx_bits, 0), (self.ber_measure, 1)) self.connect((self.quadrature_demod, 0), (self.four_level_rrc_receiver, 0)) self.connect((self.sample_counter, 0), (self.pack_msg_bits, 0)) self.connect((self.tcola_overlap_add_0, 0), (self.blocks_delay_0_0, 0)) self.connect((self.tcola_time_compression_0, 0), (self.channel_model, 0)) self.connect((self.tcola_time_compression_0, 0), (self.probe_avg_power, 0)) self.connect((self.vco, 0), (self.tcola_time_compression_0, 0))
def __init__(self): grc_wxgui.top_block_gui.__init__(self, title="Top Block") _icon_path = "/usr/share/icons/hicolor/32x32/apps/gnuradio-grc.png" self.SetIcon(wx.Icon(_icon_path, wx.BITMAP_TYPE_ANY)) ################################################## # Variables ################################################## self.sps = sps = 4 self.nfilts = nfilts = 32 self.ntaps = ntaps = 11 * nfilts * sps self.excess_bw = excess_bw = 400e-3 self.tx_taps = tx_taps = firdes.root_raised_cosine( nfilts, nfilts, 1.0, excess_bw, ntaps) self.timing_bw = timing_bw = 2 * pi / 100 self.sqrt_2 = sqrt_2 = 1.4142135623730951 self.samp_rate = samp_rate = 320000 self.rx_taps = rx_taps = filter.firdes.root_raised_cosine( nfilts, nfilts * sps, 1.0, excess_bw, ntaps) self.const_points = const_points = 4 ################################################## # Blocks ################################################## self.notebook_0 = self.notebook_0 = wx.Notebook(self.GetWin(), style=wx.NB_TOP) self.notebook_0.AddPage(grc_wxgui.Panel(self.notebook_0), "tab1") self.notebook_0.AddPage(grc_wxgui.Panel(self.notebook_0), "tab2") self.notebook_0.AddPage(grc_wxgui.Panel(self.notebook_0), "tab3") self.notebook_0.AddPage(grc_wxgui.Panel(self.notebook_0), "tab4") self.notebook_0.AddPage(grc_wxgui.Panel(self.notebook_0), "tab5") self.Add(self.notebook_0) self.wxgui_scopesink2_1 = scopesink2.scope_sink_f( self.notebook_0.GetPage(2).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=1, trig_mode=wxgui.TRIG_MODE_AUTO, y_axis_label="Counts", ) self.notebook_0.GetPage(2).Add(self.wxgui_scopesink2_1.win) self.wxgui_scopesink2_0 = scopesink2.scope_sink_c( self.notebook_0.GetPage(0).GetWin(), title="Scope Plot", sample_rate=samp_rate * sps, 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.notebook_0.GetPage(0).Add(self.wxgui_scopesink2_0.win) self.wxgui_fftsink2_0 = fftsink2.fft_sink_c( self.notebook_0.GetPage(1).GetWin(), baseband_freq=0, y_per_div=10, y_divs=10, ref_level=0, ref_scale=2.0, sample_rate=samp_rate * sps, fft_size=1024, fft_rate=15, average=False, avg_alpha=None, title="FFT Plot", peak_hold=False, ) self.notebook_0.GetPage(1).Add(self.wxgui_fftsink2_0.win) self.pfb_arb_resampler_xxx_0 = pfb.arb_resampler_ccf(sps, taps=(tx_taps), flt_size=32) self.notebook_0_0 = self.notebook_0_0 = wx.Notebook(self.GetWin(), style=wx.NB_TOP) self.notebook_0_0.AddPage(grc_wxgui.Panel(self.notebook_0_0), "tab1") self.notebook_0_0.AddPage(grc_wxgui.Panel(self.notebook_0_0), "tab2") self.notebook_0_0.AddPage(grc_wxgui.Panel(self.notebook_0_0), "tab3") self.notebook_0_0.AddPage(grc_wxgui.Panel(self.notebook_0_0), "tab4") self.Add(self.notebook_0_0) self.iir_filter_ffd_1 = filter.iir_filter_ffd(([1.0001, -1]), ([-1, 1]), True) self.iir_filter_ffd_0 = filter.iir_filter_ffd((0.01, ), ([-1, 0.99]), True) self.digital_pfb_clock_sync_xxx_0 = digital.pfb_clock_sync_ccf( sps, timing_bw, (rx_taps), nfilts, 16, 1.5, 1) self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc( (((1 - 1j), (1 + 1j), (-1 + 1j), (-1 - 1j))), 1) self.blocks_vco_c_0 = blocks.vco_c(samp_rate, -5, 1) self.blocks_udp_source_0 = blocks.udp_source(gr.sizeof_float * 1, "127.0.0.1", 12345, 1472, True) self.blocks_udp_sink_0 = blocks.udp_sink(gr.sizeof_float * 1, "127.0.0.1", 12345, 1472, True) self.blocks_throttle_0 = blocks.throttle(gr.sizeof_gr_complex * 1, samp_rate * sps) self.blocks_threshold_ff_0_0 = blocks.threshold_ff(-100e-5, 100e-5, 0) self.blocks_threshold_ff_0 = blocks.threshold_ff(-100e-5, 100e-5, 0) self.blocks_sub_xx_0 = blocks.sub_ff(1) self.blocks_multiply_xx_2 = blocks.multiply_vcc(1) self.blocks_multiply_xx_1_0 = blocks.multiply_vff(1) self.blocks_multiply_xx_1 = blocks.multiply_vff(1) self.blocks_multiply_xx_0 = blocks.multiply_vcc(1) self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vff((20, )) self.blocks_delay_0 = blocks.delay(gr.sizeof_float * 1, 10) self.blocks_complex_to_float_0 = blocks.complex_to_float(1) self.blocks_add_const_vxx_0_0 = blocks.add_const_vff((-.5, )) self.blocks_add_const_vxx_0 = blocks.add_const_vff((-.5, )) self.analog_sig_source_x_0 = analog.sig_source_c( samp_rate * sps, analog.GR_COS_WAVE, 0.1, 1, 0) self.analog_random_source_x_0 = blocks.vector_source_b( map(int, numpy.random.randint(0, const_points, 1000)), True) ################################################## # Connections ################################################## self.connect((self.blocks_delay_0, 0), (self.blocks_multiply_const_vxx_0, 0)) self.connect((self.blocks_udp_source_0, 0), (self.blocks_delay_0, 0)) self.connect((self.blocks_multiply_xx_0, 0), (self.digital_pfb_clock_sync_xxx_0, 0)) self.connect((self.analog_sig_source_x_0, 0), (self.blocks_multiply_xx_0, 1)) self.connect((self.pfb_arb_resampler_xxx_0, 0), (self.blocks_multiply_xx_0, 0)) self.connect((self.blocks_throttle_0, 0), (self.wxgui_fftsink2_0, 0)) self.connect((self.digital_chunks_to_symbols_xx_0, 0), (self.pfb_arb_resampler_xxx_0, 0)) self.connect((self.blocks_throttle_0, 0), (self.wxgui_scopesink2_0, 0)) self.connect((self.analog_random_source_x_0, 0), (self.digital_chunks_to_symbols_xx_0, 0)) self.connect((self.blocks_complex_to_float_0, 1), (self.blocks_threshold_ff_0_0, 0)) self.connect((self.blocks_complex_to_float_0, 0), (self.blocks_threshold_ff_0, 0)) self.connect((self.blocks_threshold_ff_0, 0), (self.blocks_add_const_vxx_0, 0)) self.connect((self.blocks_threshold_ff_0_0, 0), (self.blocks_add_const_vxx_0_0, 0)) self.connect((self.blocks_add_const_vxx_0, 0), (self.blocks_multiply_xx_1, 0)) self.connect((self.blocks_complex_to_float_0, 1), (self.blocks_multiply_xx_1, 1)) self.connect((self.blocks_add_const_vxx_0_0, 0), (self.blocks_multiply_xx_1_0, 1)) self.connect((self.blocks_complex_to_float_0, 0), (self.blocks_multiply_xx_1_0, 0)) self.connect((self.blocks_multiply_xx_1_0, 0), (self.blocks_sub_xx_0, 1)) self.connect((self.blocks_multiply_xx_1, 0), (self.blocks_sub_xx_0, 0)) self.connect((self.blocks_sub_xx_0, 0), (self.iir_filter_ffd_0, 0)) self.connect((self.iir_filter_ffd_0, 0), (self.wxgui_scopesink2_1, 0)) self.connect((self.iir_filter_ffd_0, 0), (self.blocks_udp_sink_0, 0)) self.connect((self.blocks_multiply_const_vxx_0, 0), (self.iir_filter_ffd_1, 0)) self.connect((self.iir_filter_ffd_1, 0), (self.blocks_vco_c_0, 0)) self.connect((self.blocks_vco_c_0, 0), (self.blocks_multiply_xx_2, 1)) self.connect((self.digital_pfb_clock_sync_xxx_0, 0), (self.blocks_multiply_xx_2, 0)) self.connect((self.blocks_multiply_xx_2, 0), (self.blocks_complex_to_float_0, 0)) self.connect((self.blocks_multiply_xx_2, 0), (self.blocks_throttle_0, 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.zero_freq = zero_freq = 150e3 self.samp_rate = samp_rate = 1000000 self.pi = pi = 3.14159 self.one_freq = one_freq = 300e3 self.center_freq = center_freq = 917e6 self.baud_rate = baud_rate = 1000 ################################################## # Blocks ################################################## self.qtgui_waterfall_sink_x_1 = qtgui.waterfall_sink_c( 1024, #size firdes.WIN_BLACKMAN_hARRIS, #wintype 0, #fc samp_rate, #bw "", #name 1 #number of inputs ) self.qtgui_waterfall_sink_x_1.set_update_time(0.1) self.qtgui_waterfall_sink_x_1.enable_grid(False) self.qtgui_waterfall_sink_x_1.enable_axis_labels(True) if not True: self.qtgui_waterfall_sink_x_1.disable_legend() if "complex" == "float" or "complex" == "msg_float": self.qtgui_waterfall_sink_x_1.set_plot_pos_half(not True) labels = ['', '', '', '', '', '', '', '', '', ''] colors = [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_waterfall_sink_x_1.set_line_label(i, "Data {0}".format(i)) else: self.qtgui_waterfall_sink_x_1.set_line_label(i, labels[i]) self.qtgui_waterfall_sink_x_1.set_color_map(i, colors[i]) self.qtgui_waterfall_sink_x_1.set_line_alpha(i, alphas[i]) self.qtgui_waterfall_sink_x_1.set_intensity_range(-140, 10) self._qtgui_waterfall_sink_x_1_win = sip.wrapinstance(self.qtgui_waterfall_sink_x_1.pyqwidget(), Qt.QWidget) self.top_grid_layout.addWidget(self._qtgui_waterfall_sink_x_1_win, 3,1,2,1) self.qtgui_waterfall_sink_x_0 = qtgui.waterfall_sink_c( 1024, #size firdes.WIN_BLACKMAN_hARRIS, #wintype 0, #fc samp_rate, #bw "", #name 1 #number of inputs ) self.qtgui_waterfall_sink_x_0.set_update_time(0.1) self.qtgui_waterfall_sink_x_0.enable_grid(False) self.qtgui_waterfall_sink_x_0.enable_axis_labels(True) if not True: self.qtgui_waterfall_sink_x_0.disable_legend() if "complex" == "float" or "complex" == "msg_float": self.qtgui_waterfall_sink_x_0.set_plot_pos_half(not True) labels = ['', '', '', '', '', '', '', '', '', ''] colors = [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_waterfall_sink_x_0.set_line_label(i, "Data {0}".format(i)) else: self.qtgui_waterfall_sink_x_0.set_line_label(i, labels[i]) self.qtgui_waterfall_sink_x_0.set_color_map(i, colors[i]) self.qtgui_waterfall_sink_x_0.set_line_alpha(i, alphas[i]) self.qtgui_waterfall_sink_x_0.set_intensity_range(-140, 10) self._qtgui_waterfall_sink_x_0_win = sip.wrapinstance(self.qtgui_waterfall_sink_x_0.pyqwidget(), Qt.QWidget) self.top_grid_layout.addWidget(self._qtgui_waterfall_sink_x_0_win, 3,0,2,1) self.qtgui_time_sink_x_0 = qtgui.time_sink_f( 1024, #size samp_rate, #samp_rate "RX Const", #name 1 #number of inputs ) self.qtgui_time_sink_x_0.set_update_time(0.10) self.qtgui_time_sink_x_0.set_y_axis(-2, 2) 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) 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(1): if len(labels[i]) == 0: self.qtgui_time_sink_x_0.set_line_label(i, "Data {0}".format(i)) 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_layout.addWidget(self._qtgui_time_sink_x_0_win) self.qtgui_freq_sink_x_1 = qtgui.freq_sink_c( 1024, #size firdes.WIN_BLACKMAN_hARRIS, #wintype 0, #fc samp_rate, #bw "RX Spectrum", #name 1 #number of inputs ) self.qtgui_freq_sink_x_1.set_update_time(0.05) 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,1,2,1) self.qtgui_freq_sink_x_0 = qtgui.freq_sink_c( 1024, #size firdes.WIN_BLACKMAN_hARRIS, #wintype 0, #fc samp_rate, #bw "TX Spectrum", #name 1 #number of inputs ) self.qtgui_freq_sink_x_0.set_update_time(0.05) 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, 1,0,2,1) self.low_pass_filter_0 = filter.fir_filter_fff(5, firdes.low_pass( 1, samp_rate, 400000, 1000, firdes.WIN_HAMMING, 6.76)) self.digital_clock_recovery_mm_xx_0 = digital.clock_recovery_mm_ff(samp_rate/(baud_rate*5), 0.01, 0, 0.1, 0.01) self.digital_binary_slicer_fb_0 = digital.binary_slicer_fb() self.blocks_vco_c_1 = blocks.vco_c(samp_rate, 2*pi*zero_freq, 1) self.blocks_vco_c_0 = blocks.vco_c(samp_rate, 2*pi*one_freq, 1) self.blocks_uchar_to_float_0 = blocks.uchar_to_float() self.blocks_repeat_0 = blocks.repeat(gr.sizeof_char*1, samp_rate/baud_rate) self.blocks_packed_to_unpacked_xx_0 = blocks.packed_to_unpacked_bb(1, gr.GR_MSB_FIRST) self.blocks_multiply_xx_0 = blocks.multiply_vcc(1) self.blocks_file_source_0 = blocks.file_source(gr.sizeof_char*1, '/home/vipsdr/SDR2018/file_tx_encoded.txt', False) self.blocks_file_sink_3 = blocks.file_sink(gr.sizeof_char*1, '/home/vipsdr/SDR2018/rx_bits_in.txt', False) self.blocks_file_sink_3.set_unbuffered(True) self.blocks_file_sink_1 = blocks.file_sink(gr.sizeof_char*1, '/home/vipsdr/SDR2018/ouput/tx_bytes_out.txt', False) self.blocks_file_sink_1.set_unbuffered(True) self.blocks_file_sink_0 = blocks.file_sink(gr.sizeof_char*1, '/home/vipsdr/SDR2018/decodin/encoded_output.txt', False) self.blocks_file_sink_0.set_unbuffered(True) self.blocks_add_const_vxx_1 = blocks.add_const_vff((-0.5, )) self.blocks_add_const_vxx_0 = blocks.add_const_vff((-1, )) self.blks2_packet_encoder_0 = grc_blks2.packet_mod_b(grc_blks2.packet_encoder( samples_per_symbol=1, bits_per_symbol=1, preamble='', access_code='', pad_for_usrp=False, ), payload_length=4, ) self.blks2_packet_decoder_0 = grc_blks2.packet_demod_b(grc_blks2.packet_decoder( access_code='', threshold=-1, callback=lambda ok, payload: self.blks2_packet_decoder_0.recv_pkt(ok, payload), ), ) self.analog_quadrature_demod_cf_0 = analog.quadrature_demod_cf(1) ################################################## # Connections ################################################## self.connect((self.analog_quadrature_demod_cf_0, 0), (self.low_pass_filter_0, 0)) self.connect((self.blks2_packet_decoder_0, 0), (self.blocks_file_sink_0, 0)) self.connect((self.blks2_packet_encoder_0, 0), (self.blocks_file_sink_1, 0)) self.connect((self.blks2_packet_encoder_0, 0), (self.blocks_packed_to_unpacked_xx_0, 0)) self.connect((self.blocks_add_const_vxx_0, 0), (self.blocks_vco_c_1, 0)) self.connect((self.blocks_add_const_vxx_1, 0), (self.digital_clock_recovery_mm_xx_0, 0)) self.connect((self.blocks_add_const_vxx_1, 0), (self.qtgui_time_sink_x_0, 0)) self.connect((self.blocks_file_source_0, 0), (self.blks2_packet_encoder_0, 0)) self.connect((self.blocks_multiply_xx_0, 0), (self.analog_quadrature_demod_cf_0, 0)) self.connect((self.blocks_multiply_xx_0, 0), (self.qtgui_freq_sink_x_0, 0)) self.connect((self.blocks_multiply_xx_0, 0), (self.qtgui_freq_sink_x_1, 0)) self.connect((self.blocks_multiply_xx_0, 0), (self.qtgui_waterfall_sink_x_0, 0)) self.connect((self.blocks_multiply_xx_0, 0), (self.qtgui_waterfall_sink_x_1, 0)) self.connect((self.blocks_packed_to_unpacked_xx_0, 0), (self.blocks_repeat_0, 0)) self.connect((self.blocks_repeat_0, 0), (self.blocks_uchar_to_float_0, 0)) self.connect((self.blocks_uchar_to_float_0, 0), (self.blocks_add_const_vxx_0, 0)) self.connect((self.blocks_uchar_to_float_0, 0), (self.blocks_vco_c_0, 0)) self.connect((self.blocks_vco_c_0, 0), (self.blocks_multiply_xx_0, 1)) self.connect((self.blocks_vco_c_1, 0), (self.blocks_multiply_xx_0, 0)) self.connect((self.digital_binary_slicer_fb_0, 0), (self.blks2_packet_decoder_0, 0)) self.connect((self.digital_binary_slicer_fb_0, 0), (self.blocks_file_sink_3, 0)) self.connect((self.digital_clock_recovery_mm_xx_0, 0), (self.digital_binary_slicer_fb_0, 0)) self.connect((self.low_pass_filter_0, 0), (self.blocks_add_const_vxx_1, 0))
def __init__(self, parameter_0=0): gr.top_block.__init__(self, "BER 4FSK ") Qt.QWidget.__init__(self) self.setWindowTitle("BER 4FSK ") 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", "rrc_heir") self.restoreGeometry(self.settings.value("geometry").toByteArray()) ################################################## # Parameters ################################################## self.parameter_0 = parameter_0 ################################################## # Variables ################################################## self.samp_per_sym = samp_per_sym = 120 self.symb_rate = symb_rate = 1200 self.rrc_taps = rrc_taps = samp_per_sym * 6 + 1 self.tcola_r = tcola_r = 1 self.tcola_m = tcola_m = 32 self.symbol_delay = symbol_delay = rrc_taps / samp_per_sym self.samp_rate = samp_rate = symb_rate * samp_per_sym self.noise = noise = 0 self.fsk_deviation_hz = fsk_deviation_hz = 648 self.fc = fc = 900e6 self.bits_per_sym = bits_per_sym = 2 ################################################## # Blocks ################################################## self._noise_range = Range(0, 5, 0.01, 0, 200) self._noise_win = RangeWidget(self._noise_range, self.set_noise, "Noise", "counter_slider", float) self.top_layout.addWidget(self._noise_win) self.tcola_time_compression_0 = tcola.time_compression_c( tcola_m, tcola_r, ()) self.tcola_overlap_add_0 = tcola.overlap_add_c(tcola_m, tcola_r, ()) self.qtgui_time_sink_x_0_0 = qtgui.time_sink_f( 100, #size samp_rate, #samp_rate "", #name 2 #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(0, 3) 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, "") self.qtgui_time_sink_x_0_0.enable_autoscale(True) self.qtgui_time_sink_x_0_0.enable_grid(False) self.qtgui_time_sink_x_0_0.enable_control_panel(False) if not True: self.qtgui_time_sink_x_0_0.disable_legend() labels = [ "Symbols", "Received Symbols", "RRC RX", "", "", "", "", "", "", "" ] 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 = [0, 2, -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: 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_layout.addWidget(self._qtgui_time_sink_x_0_0_win) self.qtgui_time_sink_x_0 = qtgui.time_sink_f( 4096, #size samp_rate, #samp_rate "", #name 3 #number of inputs ) self.qtgui_time_sink_x_0.set_update_time(0.10) 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_control_panel(False) if not True: self.qtgui_time_sink_x_0.disable_legend() labels = ["Post RRC Tx", "Post RRC Rx", "", "", "", "", "", "", "", ""] 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(3): if len(labels[i]) == 0: self.qtgui_time_sink_x_0.set_line_label( i, "Data {0}".format(i)) 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_layout.addWidget(self._qtgui_time_sink_x_0_win) self.qtgui_number_sink_0_0 = qtgui.number_sink(gr.sizeof_float, 0, qtgui.NUM_GRAPH_HORIZ, 1) self.qtgui_number_sink_0_0.set_update_time(0.10) self.qtgui_number_sink_0_0.set_title("") labels = ["", "", "", "", "", "", "", "", "", ""] units = ["", "", "", "", "", "", "", "", "", ""] colors = [("black", "black"), ("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.qtgui_number_sink_0_0.set_min(i, 0.0) self.qtgui_number_sink_0_0.set_max(i, 1) self.qtgui_number_sink_0_0.set_color(i, colors[i][0], colors[i][1]) if len(labels[i]) == 0: self.qtgui_number_sink_0_0.set_label(i, "Data {0}".format(i)) else: self.qtgui_number_sink_0_0.set_label(i, labels[i]) self.qtgui_number_sink_0_0.set_unit(i, units[i]) self.qtgui_number_sink_0_0.set_factor(i, factor[i]) self.qtgui_number_sink_0_0.enable_autoscale(False) self._qtgui_number_sink_0_0_win = sip.wrapinstance( self.qtgui_number_sink_0_0.pyqwidget(), Qt.QWidget) self.top_layout.addWidget(self._qtgui_number_sink_0_0_win) self.qtgui_number_sink_0 = qtgui.number_sink(gr.sizeof_float, 0, qtgui.NUM_GRAPH_HORIZ, 1) self.qtgui_number_sink_0.set_update_time(0.10) self.qtgui_number_sink_0.set_title("") labels = ["", "", "", "", "", "", "", "", "", ""] units = ["", "", "", "", "", "", "", "", "", ""] colors = [("black", "black"), ("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.qtgui_number_sink_0.set_min(i, -7) self.qtgui_number_sink_0.set_max(i, 0) self.qtgui_number_sink_0.set_color(i, colors[i][0], colors[i][1]) if len(labels[i]) == 0: self.qtgui_number_sink_0.set_label(i, "Data {0}".format(i)) else: self.qtgui_number_sink_0.set_label(i, labels[i]) self.qtgui_number_sink_0.set_unit(i, units[i]) self.qtgui_number_sink_0.set_factor(i, factor[i]) self.qtgui_number_sink_0.enable_autoscale(False) self._qtgui_number_sink_0_win = sip.wrapinstance( self.qtgui_number_sink_0.pyqwidget(), Qt.QWidget) self.top_layout.addWidget(self._qtgui_number_sink_0_win) self.four_level_rrc_transmitter_0 = four_level_rrc_transmitter( alpha=0.350, bits_per_symbol=2, rrc_taps=rrc_taps, samp_per_sym=samp_per_sym, sym_rate=symb_rate, ) self.four_level_rrc_receiver_0_0 = four_level_rrc_receiver( alpha=0.350, bits_per_sym=2, rrc_taps=rrc_taps, samp_per_sym=samp_per_sym, sym_rate=symb_rate, ) self.four_level_rrc_receiver_0 = four_level_rrc_receiver( alpha=0.350, bits_per_sym=2, rrc_taps=rrc_taps, samp_per_sym=samp_per_sym, sym_rate=symb_rate, ) self.fec_ber_bf_0 = fec.ber_bf(False, 100, -7.0) self.digital_glfsr_source_x_0 = digital.glfsr_source_b(8, True, 0, 1) self.channels_channel_model_0 = channels.channel_model( noise_voltage=noise, frequency_offset=0.0, epsilon=1.0, taps=(1, ), noise_seed=0, block_tags=False) self.blocks_vco_c_0 = blocks.vco_c(samp_rate, fsk_deviation_hz * 2 * math.pi, 1) self.blocks_pack_k_bits_bb_0_0 = blocks.pack_k_bits_bb(8) self.blocks_pack_k_bits_bb_0 = blocks.pack_k_bits_bb(8) self.blocks_null_sink_0 = blocks.null_sink(gr.sizeof_char * 1) self.blocks_delay_2 = blocks.delay( gr.sizeof_char * 1, (symbol_delay + symb_rate) * bits_per_sym - 2) self.blocks_delay_0_0_0 = blocks.delay(gr.sizeof_gr_complex * 1, samp_rate) self.blocks_delay_0_0 = blocks.delay(gr.sizeof_gr_complex * 1, samp_rate - tcola_m) self.blocks_delay_0 = blocks.delay( gr.sizeof_float * 1, symbol_delay * samp_per_sym / 2 + samp_rate) self.blocks_char_to_float_0_0 = blocks.char_to_float(1, 1) self.blocks_char_to_float_0 = blocks.char_to_float(1, 1) self.blks2_error_rate_0 = grc_blks2.error_rate( type='BER', win_size=1000, bits_per_symbol=1, ) self.analog_quadrature_demod_cf_0_0 = analog.quadrature_demod_cf( samp_rate / (2 * math.pi * fsk_deviation_hz)) self.analog_quadrature_demod_cf_0 = analog.quadrature_demod_cf( samp_rate / (2 * math.pi * fsk_deviation_hz)) ################################################## # Connections ################################################## self.connect((self.analog_quadrature_demod_cf_0, 0), (self.four_level_rrc_receiver_0, 0)) self.connect((self.analog_quadrature_demod_cf_0_0, 0), (self.four_level_rrc_receiver_0_0, 0)) self.connect((self.blks2_error_rate_0, 0), (self.qtgui_number_sink_0_0, 0)) self.connect((self.blocks_char_to_float_0, 0), (self.qtgui_time_sink_x_0_0, 1)) self.connect((self.blocks_char_to_float_0_0, 0), (self.qtgui_time_sink_x_0_0, 0)) self.connect((self.blocks_delay_0, 0), (self.qtgui_time_sink_x_0, 0)) self.connect((self.blocks_delay_0_0, 0), (self.analog_quadrature_demod_cf_0, 0)) self.connect((self.blocks_delay_0_0_0, 0), (self.analog_quadrature_demod_cf_0_0, 0)) self.connect((self.blocks_delay_2, 0), (self.blks2_error_rate_0, 0)) self.connect((self.blocks_delay_2, 0), (self.blocks_char_to_float_0_0, 0)) self.connect((self.blocks_delay_2, 0), (self.blocks_pack_k_bits_bb_0, 0)) self.connect((self.blocks_pack_k_bits_bb_0, 0), (self.fec_ber_bf_0, 0)) self.connect((self.blocks_pack_k_bits_bb_0_0, 0), (self.fec_ber_bf_0, 1)) self.connect((self.blocks_vco_c_0, 0), (self.blocks_delay_0_0_0, 0)) self.connect((self.blocks_vco_c_0, 0), (self.tcola_time_compression_0, 0)) self.connect((self.channels_channel_model_0, 0), (self.tcola_overlap_add_0, 0)) self.connect((self.digital_glfsr_source_x_0, 0), (self.blocks_delay_2, 0)) self.connect((self.digital_glfsr_source_x_0, 0), (self.four_level_rrc_transmitter_0, 0)) self.connect((self.fec_ber_bf_0, 0), (self.qtgui_number_sink_0, 0)) self.connect((self.four_level_rrc_receiver_0, 2), (self.blks2_error_rate_0, 1)) self.connect((self.four_level_rrc_receiver_0, 2), (self.blocks_char_to_float_0, 0)) self.connect((self.four_level_rrc_receiver_0, 2), (self.blocks_pack_k_bits_bb_0_0, 0)) self.connect((self.four_level_rrc_receiver_0, 0), (self.qtgui_time_sink_x_0, 1)) self.connect((self.four_level_rrc_receiver_0_0, 2), (self.blocks_null_sink_0, 0)) self.connect((self.four_level_rrc_receiver_0_0, 0), (self.qtgui_time_sink_x_0, 2)) self.connect((self.four_level_rrc_transmitter_0, 1), (self.blocks_delay_0, 0)) self.connect((self.four_level_rrc_transmitter_0, 1), (self.blocks_vco_c_0, 0)) self.connect((self.tcola_overlap_add_0, 0), (self.blocks_delay_0_0, 0)) self.connect((self.tcola_time_compression_0, 0), (self.channels_channel_model_0, 0))
def __init__(self): grc_wxgui.top_block_gui.__init__(self, title="Top Block") _icon_path = "/usr/share/icons/hicolor/32x32/apps/gnuradio-grc.png" self.SetIcon(wx.Icon(_icon_path, wx.BITMAP_TYPE_ANY)) ################################################## # Variables ################################################## self.sps = sps = 4 self.ntaps = ntaps = 1408 self.nfilts = nfilts = 32 self.excess_bw = excess_bw = 0.45 self.timing_bw = timing_bw = 2 * pi / 100 self.sr2 = sr2 = 300000 self.samp_rate_0 = samp_rate_0 = 32000 self.samp_rate = samp_rate = 100000 self.s = s = 0.01 self.rx_taps = rx_taps = filter.firdes.root_raised_cosine(nfilts, nfilts * sps, 1.0, excess_bw, ntaps) self.freq_bw = freq_bw = 2 * pi / 100 self.fll_ntaps = fll_ntaps = 55 ################################################## # Blocks ################################################## self.n = self.n = wx.Notebook(self.GetWin(), style=wx.NB_TOP) self.n.AddPage(grc_wxgui.Panel(self.n), "tab1") self.n.AddPage(grc_wxgui.Panel(self.n), "tab2") self.n.AddPage(grc_wxgui.Panel(self.n), "tab3") self.Add(self.n) self.wxgui_scopesink2_2 = scopesink2.scope_sink_c( self.n.GetPage(1).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=1, trig_mode=wxgui.TRIG_MODE_AUTO, y_axis_label="Counts", ) self.n.GetPage(1).Add(self.wxgui_scopesink2_2.win) self.wxgui_scopesink2_1 = scopesink2.scope_sink_f( self.n.GetPage(0).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=1, trig_mode=wxgui.TRIG_MODE_AUTO, y_axis_label="Counts", ) self.n.GetPage(0).Add(self.wxgui_scopesink2_1.win) self.wxgui_scopesink2_0 = scopesink2.scope_sink_c( self.n.GetPage(2).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=1, trig_mode=wxgui.TRIG_MODE_AUTO, y_axis_label="Counts", ) self.n.GetPage(2).Add(self.wxgui_scopesink2_0.win) _s_sizer = wx.BoxSizer(wx.VERTICAL) self._s_text_box = forms.text_box( parent=self.GetWin(), sizer=_s_sizer, value=self.s, callback=self.set_s, label="s", converter=forms.float_converter(), proportion=0, ) self._s_slider = forms.slider( parent=self.GetWin(), sizer=_s_sizer, value=self.s, callback=self.set_s, minimum=-5, maximum=5, num_steps=100, style=wx.SL_HORIZONTAL, cast=float, proportion=1, ) self.Add(_s_sizer) self.pfb_arb_resampler_xxx_0 = pfb.arb_resampler_ccf( 4, taps=(firdes.root_raised_cosine(32, 32, 1.0, 0.45, 1408)), flt_size=32 ) self.pfb_arb_resampler_xxx_0.declare_sample_delay(0) self.iir_filter_xxx_0_0 = filter.iir_filter_ffd(([1.0001, -1]), ([-1, 1]), True) self.iir_filter_xxx_0 = filter.iir_filter_ffd((0.01,), ([-1, 0.99]), True) self.digital_pfb_clock_sync_xxx_0 = digital.pfb_clock_sync_ccf(4, 2 * pi / 100, (rx_taps), 32, 16, 1.5, 1) self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc( (((1 + 1j), (1 - 1j), (-1 + 1j), (-1 - 1j))), 1 ) self.blocks_vco_c_0 = blocks.vco_c(samp_rate, -5, 1) self.blocks_udp_source_0 = blocks.udp_source(gr.sizeof_float * 1, "127.0.0.1", 12345, 1472, True) self.blocks_udp_sink_0 = blocks.udp_sink(gr.sizeof_float * 1, "127.0.0.1", 12345, 1472, True) self.blocks_threshold_ff_0_0 = blocks.threshold_ff(-0.001, 0.001, 0) self.blocks_threshold_ff_0 = blocks.threshold_ff(-0.001, 0.001, 0) self.blocks_sub_xx_0 = blocks.sub_ff(1) self.blocks_multiply_xx_2 = blocks.multiply_vff(1) self.blocks_multiply_xx_1 = blocks.multiply_vff(1) self.blocks_multiply_xx_0 = blocks.multiply_vcc(1) self.blocks_multiply_const_vxx_2 = blocks.multiply_const_vff((1,)) self.blocks_multiply_const_vxx_1 = blocks.multiply_const_vff((1.413,)) self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vff((1.413,)) self.blocks_delay_0 = blocks.delay(gr.sizeof_float * 1, 1000) self.blocks_complex_to_real_0 = blocks.complex_to_real(1) self.blocks_complex_to_imag_0 = blocks.complex_to_imag(1) self.blocks_add_const_vxx_0_0 = blocks.add_const_vff((-0.5,)) self.blocks_add_const_vxx_0 = blocks.add_const_vff((-0.5,)) self.analog_sig_source_x_0 = analog.sig_source_c(samp_rate, analog.GR_SIN_WAVE, 10, 1, 0) self.analog_random_source_x_0 = blocks.vector_source_b(map(int, numpy.random.randint(0, 4, 1000)), True) ################################################## # Connections ################################################## self.connect((self.analog_random_source_x_0, 0), (self.digital_chunks_to_symbols_xx_0, 0)) self.connect((self.analog_sig_source_x_0, 0), (self.blocks_multiply_xx_0, 1)) self.connect((self.blocks_add_const_vxx_0, 0), (self.blocks_multiply_const_vxx_0, 0)) self.connect((self.blocks_add_const_vxx_0_0, 0), (self.blocks_multiply_const_vxx_1, 0)) self.connect((self.blocks_complex_to_imag_0, 0), (self.blocks_multiply_xx_2, 1)) self.connect((self.blocks_complex_to_imag_0, 0), (self.blocks_threshold_ff_0_0, 0)) self.connect((self.blocks_complex_to_real_0, 0), (self.blocks_multiply_xx_1, 1)) self.connect((self.blocks_complex_to_real_0, 0), (self.blocks_threshold_ff_0, 0)) self.connect((self.blocks_delay_0, 0), (self.iir_filter_xxx_0_0, 0)) self.connect((self.blocks_multiply_const_vxx_0, 0), (self.blocks_multiply_xx_2, 0)) self.connect((self.blocks_multiply_const_vxx_1, 0), (self.blocks_multiply_xx_1, 0)) self.connect((self.blocks_multiply_const_vxx_2, 0), (self.blocks_delay_0, 0)) self.connect((self.blocks_multiply_xx_0, 0), (self.digital_pfb_clock_sync_xxx_0, 0)) self.connect((self.blocks_multiply_xx_1, 0), (self.blocks_sub_xx_0, 1)) self.connect((self.blocks_multiply_xx_2, 0), (self.blocks_sub_xx_0, 0)) self.connect((self.blocks_sub_xx_0, 0), (self.iir_filter_xxx_0, 0)) self.connect((self.blocks_threshold_ff_0, 0), (self.blocks_add_const_vxx_0, 0)) self.connect((self.blocks_threshold_ff_0_0, 0), (self.blocks_add_const_vxx_0_0, 0)) self.connect((self.blocks_udp_source_0, 0), (self.blocks_multiply_const_vxx_2, 0)) self.connect((self.blocks_vco_c_0, 0), (self.blocks_multiply_xx_0, 2)) self.connect((self.blocks_vco_c_0, 0), (self.wxgui_scopesink2_2, 0)) self.connect((self.digital_chunks_to_symbols_xx_0, 0), (self.pfb_arb_resampler_xxx_0, 0)) self.connect((self.digital_pfb_clock_sync_xxx_0, 0), (self.blocks_complex_to_imag_0, 0)) self.connect((self.digital_pfb_clock_sync_xxx_0, 0), (self.blocks_complex_to_real_0, 0)) self.connect((self.digital_pfb_clock_sync_xxx_0, 0), (self.wxgui_scopesink2_0, 0)) self.connect((self.iir_filter_xxx_0, 0), (self.blocks_udp_sink_0, 0)) self.connect((self.iir_filter_xxx_0, 0), (self.wxgui_scopesink2_1, 0)) self.connect((self.iir_filter_xxx_0_0, 0), (self.blocks_vco_c_0, 0)) self.connect((self.pfb_arb_resampler_xxx_0, 0), (self.blocks_multiply_xx_0, 0))
def __init__(self, antenna="", bb_freq=0.0, bw=0.0, dc_removal="False", decoded_data_file_path="/tmp/.satnogs/data/data", dev_args="", doppler_correction_per_sec=20, enable_iq_dump=0, file_path="test.wav", gain=0.0, gain_mode="Overall", iq_file_path="/tmp/iq.dat", lo_offset=100e3, mark_frequency=2200.0, other_settings="", ppm=0, rigctl_port=4532, rx_freq=100e6, samp_rate_rx=0.0, soapy_rx_device="driver=invalid", space_frequency=1200.0, stream_args="", tune_args="", udp_IP="127.0.0.1", udp_dump_dest='127.0.0.1', udp_dump_port=7355, udp_port=16887, waterfall_file_path="/tmp/waterfall.dat"): gr.top_block.__init__(self, "AFSK1200 AX.25 decoder ") ################################################## # Parameters ################################################## self.antenna = antenna self.bb_freq = bb_freq self.bw = bw self.dc_removal = dc_removal self.decoded_data_file_path = decoded_data_file_path self.dev_args = dev_args self.doppler_correction_per_sec = doppler_correction_per_sec self.enable_iq_dump = enable_iq_dump self.file_path = file_path self.gain = gain self.gain_mode = gain_mode self.iq_file_path = iq_file_path self.lo_offset = lo_offset self.mark_frequency = mark_frequency self.other_settings = other_settings self.ppm = ppm self.rigctl_port = rigctl_port self.rx_freq = rx_freq self.samp_rate_rx = samp_rate_rx self.soapy_rx_device = soapy_rx_device self.space_frequency = space_frequency self.stream_args = stream_args self.tune_args = tune_args self.udp_IP = udp_IP self.udp_dump_dest = udp_dump_dest self.udp_dump_port = udp_dump_port self.udp_port = udp_port self.waterfall_file_path = waterfall_file_path ################################################## # Variables ################################################## self.variable_ax25_decoder_0_0 = variable_ax25_decoder_0_0 = satnogs.ax25_decoder_make( 'GND', 0, True, False, True, 1024) self.variable_ax25_decoder_0 = variable_ax25_decoder_0 = satnogs.ax25_decoder_make( 'GND', 0, True, True, True, 1024) self.max_modulation_freq = max_modulation_freq = 3000 self.deviation = deviation = 5000 self.baudrate = baudrate = 1200 self.audio_samp_rate = audio_samp_rate = 48000 ################################################## # Blocks ################################################## self.soapy_source_0_0 = None # Make sure that the gain mode is valid if (gain_mode not in ['Overall', 'Specific', 'Settings Field']): raise ValueError( "Wrong gain mode on channel 0. Allowed gain modes: " "['Overall', 'Specific', 'Settings Field']") dev = soapy_rx_device # Stream arguments for every activated stream tune_args = [tune_args] settings = [other_settings] # Setup the device arguments dev_args = dev_args self.soapy_source_0_0 = soapy.source(1, dev, dev_args, stream_args, tune_args, settings, samp_rate_rx, "fc32") self.soapy_source_0_0.set_dc_removal( 0, bool(distutils.util.strtobool(dc_removal))) # Set up DC offset. If set to (0, 0) internally the source block # will handle the case if no DC offset correction is supported self.soapy_source_0_0.set_dc_offset(0, 0) # Setup IQ Balance. If set to (0, 0) internally the source block # will handle the case if no IQ balance correction is supported self.soapy_source_0_0.set_iq_balance(0, 0) self.soapy_source_0_0.set_agc(0, False) # generic frequency setting should be specified first self.soapy_source_0_0.set_frequency(0, rx_freq - lo_offset) self.soapy_source_0_0.set_frequency(0, "BB", bb_freq) # Setup Frequency correction. If set to 0 internally the source block # will handle the case if no frequency correction is supported self.soapy_source_0_0.set_frequency_correction(0, ppm) self.soapy_source_0_0.set_antenna(0, antenna) self.soapy_source_0_0.set_bandwidth(0, bw) if (gain_mode != 'Settings Field'): # pass is needed, in case the template does not evaluare anything pass self.soapy_source_0_0.set_gain(0, gain) self.satnogs_waterfall_sink_0 = satnogs.waterfall_sink( audio_samp_rate, rx_freq, 10, 1024, waterfall_file_path, 1) self.satnogs_udp_msg_sink_0_0 = satnogs.udp_msg_sink( udp_IP, udp_port, 1500) self.satnogs_tcp_rigctl_msg_source_0 = satnogs.tcp_rigctl_msg_source( "127.0.0.1", rigctl_port, False, int(1000.0 / doppler_correction_per_sec) + 1, 1500) self.satnogs_ogg_encoder_0 = satnogs.ogg_encoder( file_path, audio_samp_rate, 1.0) self.satnogs_json_converter_0 = satnogs.json_converter() self.satnogs_iq_sink_0 = satnogs.iq_sink(16768, iq_file_path, False, enable_iq_dump) self.satnogs_frame_file_sink_0_1_0 = satnogs.frame_file_sink( decoded_data_file_path, 0) self.satnogs_frame_decoder_0_0_0 = satnogs.frame_decoder( variable_ax25_decoder_0_0, 1 * 1) self.satnogs_frame_decoder_0_0 = satnogs.frame_decoder( variable_ax25_decoder_0, 1 * 1) self.satnogs_doppler_compensation_0 = satnogs.doppler_compensation( samp_rate_rx, rx_freq, lo_offset, audio_samp_rate, 1, 0) self.low_pass_filter_2_0 = filter.fir_filter_fff( 1, firdes.low_pass(1, baudrate * 2, baudrate / 2 + 500 / 2, 500, firdes.WIN_HAMMING, 6.76)) self.low_pass_filter_1 = filter.fir_filter_ccf( 20, firdes.low_pass(1, audio_samp_rate, (mark_frequency - space_frequency) / 2.0 + 250, 500, firdes.WIN_HAMMING, 6.76)) self.low_pass_filter_0_0 = filter.fir_filter_ccf( 1, firdes.low_pass(1, audio_samp_rate, (deviation + max_modulation_freq) * 1.25, 3e3, firdes.WIN_HAMMING, 6.76)) self.low_pass_filter_0 = filter.fir_filter_ccf( 1, firdes.low_pass(1, audio_samp_rate, deviation + max_modulation_freq, 1000, firdes.WIN_HAMMING, 6.76)) self.digital_clock_recovery_mm_xx_0 = digital.clock_recovery_mm_ff( (48e3 / 20) / baudrate, 2 * math.pi / 100.0, 0.5, 0.5 / 8.0, 0.01) self.digital_binary_slicer_fb_0 = digital.binary_slicer_fb() self.dc_blocker_xx_0_0 = filter.dc_blocker_ff(1024, True) self.dc_blocker_xx_0 = filter.dc_blocker_ff(1024, True) self.blocks_vco_c_0 = blocks.vco_c(audio_samp_rate, -audio_samp_rate, 1.0) self.blocks_udp_sink_0_0 = blocks.udp_sink(gr.sizeof_gr_complex * 1, udp_dump_dest, udp_dump_port + 1, 1472, True) self.blocks_udp_sink_0 = blocks.udp_sink(gr.sizeof_short * 1, udp_dump_dest, udp_dump_port, 1472, True) self.blocks_rotator_cc_0 = blocks.rotator_cc( -2.0 * math.pi * (((1200 + 2200) / 2) / audio_samp_rate)) self.blocks_multiply_xx_0_0 = blocks.multiply_vcc(1) self.blocks_moving_average_xx_0 = blocks.moving_average_ff( 1024, 1.0 / 1024.0, 4096, 1) self.blocks_float_to_short_0 = blocks.float_to_short(1, 16383.0) self.blocks_float_to_complex_0 = blocks.float_to_complex(1) self.blocks_delay_0 = blocks.delay(gr.sizeof_gr_complex * 1, 1024 // 2) self.band_pass_filter_0 = filter.fir_filter_fff( 1, firdes.band_pass(1, audio_samp_rate, 1000, 2400, 400, firdes.WIN_HAMMING, 6.76)) self.analog_quadrature_demod_cf_0_0_0_0 = analog.quadrature_demod_cf( 1.0) self.analog_quadrature_demod_cf_0_0 = analog.quadrature_demod_cf( (2 * math.pi * deviation) / audio_samp_rate) self.analog_quadrature_demod_cf_0 = analog.quadrature_demod_cf( ((audio_samp_rate / 20) / baudrate) / (math.pi * 1)) ################################################## # Connections ################################################## self.msg_connect((self.satnogs_frame_decoder_0_0, 'out'), (self.satnogs_json_converter_0, 'in')) self.msg_connect((self.satnogs_frame_decoder_0_0_0, 'out'), (self.satnogs_json_converter_0, 'in')) self.msg_connect((self.satnogs_json_converter_0, 'out'), (self.satnogs_frame_file_sink_0_1_0, 'frame')) self.msg_connect((self.satnogs_json_converter_0, 'out'), (self.satnogs_udp_msg_sink_0_0, 'in')) self.msg_connect((self.satnogs_tcp_rigctl_msg_source_0, 'freq'), (self.satnogs_doppler_compensation_0, 'doppler')) self.connect((self.analog_quadrature_demod_cf_0, 0), (self.dc_blocker_xx_0_0, 0)) self.connect((self.analog_quadrature_demod_cf_0_0, 0), (self.band_pass_filter_0, 0)) self.connect((self.analog_quadrature_demod_cf_0_0, 0), (self.blocks_float_to_short_0, 0)) self.connect((self.analog_quadrature_demod_cf_0_0, 0), (self.satnogs_ogg_encoder_0, 0)) self.connect((self.analog_quadrature_demod_cf_0_0_0_0, 0), (self.blocks_moving_average_xx_0, 0)) self.connect((self.band_pass_filter_0, 0), (self.dc_blocker_xx_0, 0)) self.connect((self.blocks_delay_0, 0), (self.blocks_multiply_xx_0_0, 0)) self.connect((self.blocks_float_to_complex_0, 0), (self.blocks_rotator_cc_0, 0)) self.connect((self.blocks_float_to_short_0, 0), (self.blocks_udp_sink_0, 0)) self.connect((self.blocks_moving_average_xx_0, 0), (self.blocks_vco_c_0, 0)) self.connect((self.blocks_multiply_xx_0_0, 0), (self.low_pass_filter_0, 0)) self.connect((self.blocks_rotator_cc_0, 0), (self.low_pass_filter_1, 0)) self.connect((self.blocks_vco_c_0, 0), (self.blocks_multiply_xx_0_0, 1)) self.connect((self.dc_blocker_xx_0, 0), (self.blocks_float_to_complex_0, 0)) self.connect((self.dc_blocker_xx_0_0, 0), (self.low_pass_filter_2_0, 0)) self.connect((self.digital_binary_slicer_fb_0, 0), (self.satnogs_frame_decoder_0_0, 0)) self.connect((self.digital_binary_slicer_fb_0, 0), (self.satnogs_frame_decoder_0_0_0, 0)) self.connect((self.digital_clock_recovery_mm_xx_0, 0), (self.digital_binary_slicer_fb_0, 0)) self.connect((self.low_pass_filter_0, 0), (self.analog_quadrature_demod_cf_0_0, 0)) self.connect((self.low_pass_filter_0_0, 0), (self.analog_quadrature_demod_cf_0_0_0_0, 0)) self.connect((self.low_pass_filter_1, 0), (self.analog_quadrature_demod_cf_0, 0)) self.connect((self.low_pass_filter_2_0, 0), (self.digital_clock_recovery_mm_xx_0, 0)) self.connect((self.satnogs_doppler_compensation_0, 0), (self.blocks_delay_0, 0)) self.connect((self.satnogs_doppler_compensation_0, 0), (self.blocks_udp_sink_0_0, 0)) self.connect((self.satnogs_doppler_compensation_0, 0), (self.low_pass_filter_0_0, 0)) self.connect((self.satnogs_doppler_compensation_0, 0), (self.satnogs_iq_sink_0, 0)) self.connect((self.satnogs_doppler_compensation_0, 0), (self.satnogs_waterfall_sink_0, 0)) self.connect((self.soapy_source_0_0, 0), (self.satnogs_doppler_compensation_0, 0))
def __init__(self, Pi=3.14159, chirp_time=260000000): gr.top_block.__init__(self, "Top Block") Qt.QWidget.__init__(self) self.setWindowTitle("Top Block") 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", "top_block") if StrictVersion(Qt.qVersion()) < StrictVersion("5.0.0"): self.restoreGeometry(self.settings.value("geometry").toByteArray()) else: self.restoreGeometry(self.settings.value("geometry", type=QtCore.QByteArray)) ################################################## # Parameters ################################################## self.Pi = Pi self.chirp_time = chirp_time ################################################## # Variables ################################################## self.samp_rate = samp_rate = 2032920 self.q = q = 10000 self.lo = lo = 2033000000 self.f_dev = f_dev = 10 self.f_c = f_c = 2 self.del1 = del1 = 524880 self.deci = deci = 220 ################################################## # Blocks ################################################## self._lo_range = Range(10000000, 6000000000, 100000, 2033000000, 200) self._lo_win = RangeWidget(self._lo_range, self.set_lo, 'lo freq', "counter_slider", float) self.top_layout.addWidget(self._lo_win) self.rational_resampler_xxx_0 = filter.rational_resampler_ccc( interpolation=1, decimation=deci, taps=None, fractional_bw=None, ) self.qtgui_sink_x_0 = qtgui.sink_c( 1024, #fftsize firdes.WIN_BLACKMAN_hARRIS, #wintype 0, #fc samp_rate, #bw "", #name True, #plotfreq True, #plotwaterfall True, #plottime True, #plotconst ) self.qtgui_sink_x_0.set_update_time(1.0/10) self._qtgui_sink_x_0_win = sip.wrapinstance(self.qtgui_sink_x_0.pyqwidget(), Qt.QWidget) self.top_layout.addWidget(self._qtgui_sink_x_0_win) self.qtgui_sink_x_0.enable_rf_freq(False) self._q_range = Range(10000, 10000000, 1, 10000, 200) self._q_win = RangeWidget(self._q_range, self.set_q, 'Q', "counter_slider", int) self.top_layout.addWidget(self._q_win) self.pluto_source_0 = iio.pluto_source('ip:pluto.local', lo, samp_rate, 1 - 1, 1000000, 0x8000, False, False, True, "manual", 60, '', True) self.pluto_sink_0 = iio.pluto_sink('ip:pluto.local', lo, samp_rate, 1 - 1, 1000000, 0x8000, False, 0, '', True) self.blocks_vco_c_0 = blocks.vco_c(samp_rate, 628318, 1) self.blocks_skiphead_0_0 = blocks.skiphead(gr.sizeof_float*1, del1) self.blocks_skiphead_0 = blocks.skiphead(gr.sizeof_gr_complex*1, del1) self.blocks_multiply_conjugate_cc_0 = blocks.multiply_conjugate_cc(1) self.blocks_head_1 = blocks.head(gr.sizeof_gr_complex*1, 20000000) self.blocks_head_0 = blocks.head(gr.sizeof_float*1, 20000000) self.blocks_file_sink_0_0 = blocks.file_sink(gr.sizeof_float*1, '/home/raidfire/gpr/data/test_multi.bin', False) self.blocks_file_sink_0_0.set_unbuffered(True) self.blocks_file_sink_0 = blocks.file_sink(gr.sizeof_float*1, '/home/raidfire/gpr/data/test_saw.bin', False) self.blocks_file_sink_0.set_unbuffered(True) self.blocks_complex_to_real_0 = blocks.complex_to_real(1) self.analog_sig_source_x_0 = analog.sig_source_f(samp_rate, analog.GR_SAW_WAVE, 3.84615, f_dev, f_c) ################################################## # Connections ################################################## self.connect((self.analog_sig_source_x_0, 0), (self.blocks_skiphead_0_0, 0)) self.connect((self.analog_sig_source_x_0, 0), (self.blocks_vco_c_0, 0)) self.connect((self.blocks_complex_to_real_0, 0), (self.blocks_file_sink_0_0, 0)) self.connect((self.blocks_head_0, 0), (self.blocks_file_sink_0, 0)) self.connect((self.blocks_head_1, 0), (self.blocks_multiply_conjugate_cc_0, 0)) self.connect((self.blocks_head_1, 0), (self.pluto_sink_0, 0)) self.connect((self.blocks_multiply_conjugate_cc_0, 0), (self.rational_resampler_xxx_0, 0)) self.connect((self.blocks_skiphead_0, 0), (self.blocks_head_1, 0)) self.connect((self.blocks_skiphead_0_0, 0), (self.blocks_head_0, 0)) self.connect((self.blocks_vco_c_0, 0), (self.blocks_skiphead_0, 0)) self.connect((self.pluto_source_0, 0), (self.blocks_complex_to_real_0, 0)) self.connect((self.pluto_source_0, 0), (self.blocks_multiply_conjugate_cc_0, 1)) self.connect((self.rational_resampler_xxx_0, 0), (self.qtgui_sink_x_0, 0))