def __init__(self, samp_rate=1000, vecsize=500, folding=5, pulse_rate=0.7477):
		gr.hier_block2.__init__(
			self, "Synch Folder2",
			gr.io_signature(1, 1, gr.sizeof_float*1),
			gr.io_signature(1, 1, gr.sizeof_float*vecsize),
		)

		##################################################
		# Parameters
		##################################################
		self.samp_rate = samp_rate
		self.vecsize = vecsize
		self.folding = folding
		self.pulse_rate = pulse_rate

		##################################################
		# Blocks
		##################################################
		self.single_pole_iir_filter_xx_0 = filter.single_pole_iir_filter_ff(1.0/folding, vecsize)
		self.fractional_resampler_xx_0 = filter.fractional_resampler_ff(0, float(samp_rate)/(float(pulse_rate)*float(vecsize)))
		self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_float*1, vecsize)

		##################################################
		# Connections
		##################################################
		self.connect((self.blocks_stream_to_vector_0, 0), (self.single_pole_iir_filter_xx_0, 0))
		self.connect((self.fractional_resampler_xx_0, 0), (self.blocks_stream_to_vector_0, 0))
		self.connect((self, 0), (self.fractional_resampler_xx_0, 0))
		self.connect((self.single_pole_iir_filter_xx_0, 0), (self, 0))
    def test_003_ff(self):
        N = 10000        # number of samples to use
        fs = 1000        # baseband sampling rate
        rrate = 1.123    # resampling rate

        freq = 10
        data = sig_source_f(fs, freq, 1, N)
        ctrl = const_source_f(rrate, N)
        signal = blocks.vector_source_f(data)
        control = blocks.vector_source_f(ctrl)
        op = filter.fractional_resampler_ff(0, 1)
        snk = blocks.vector_sink_f()

        self.tb.connect(signal, op, snk)
        self.tb.connect(control, (op,1))
        self.tb.run() 

        Ntest = 5000
        L = len(snk.data())
        t = map(lambda x: float(x)/(fs/rrate), xrange(L))

        phase = 0.1884
        expected_data = map(lambda x: math.sin(2.*math.pi*freq*x+phase), t)

        dst_data = snk.data()

        self.assertFloatTuplesAlmostEqual(expected_data[-Ntest:], dst_data[-Ntest:], 3)
    def test_001_ff(self):
        N = 10000  # number of samples to use
        fs = 1000  # baseband sampling rate
        rrate = 1.123  # resampling rate

        freq = 10
        data = sig_source_f(fs, freq, 1, N)
        signal = blocks.vector_source_f(data)
        op = filter.fractional_resampler_ff(0, rrate)
        snk = blocks.vector_sink_f()

        self.tb.connect(signal, op, snk)
        self.tb.run()

        Ntest = 5000
        L = len(snk.data())
        t = map(lambda x: float(x) / (fs / rrate), xrange(L))

        phase = 0.1884
        expected_data = map(
            lambda x: math.sin(2. * math.pi * freq * x + phase), t)

        dst_data = snk.data()

        self.assertFloatTuplesAlmostEqual(expected_data[-Ntest:],
                                          dst_data[-Ntest:], 3)
Example #4
0
 def __init__(self):
     analog_source.__init__(self, mod_name="wbfm", audio_rate=44.1e3)
     self.interp = filter.fractional_resampler_ff(0.0, .5)
     self.mod = analog.wfm_tx(audio_rate=self.audio_rate,
                              quad_rate=10 * self.audio_rate,
                              max_dev=self.audio_rate / 2)
     self.connect(self.random_source, self.interp, self.mod, self)
Example #5
0
 def __init__(self):
     analog_source.__init__(self, mod_name="am-dsb", audio_rate=44.1e3)
     self.interp = filter.fractional_resampler_ff(
         0.0, self.audio_rate * 2 / 200e3)
     self.cnv = blocks.float_to_complex()
     self.add = blocks.add_const_cc(1.0)
     self.mod = blocks.multiply_cc()
     self.connect(self.random_source, self.interp, self.cnv, self.add, self)
Example #6
0
 def __init__(self):
     analog_source.__init__(self, mod_name="am-ssb", audio_rate=44.1e3)
     self.interp = filter.fractional_resampler_ff(0.0,
                                                  self.audio_rate / 200e3)
     self.add = blocks.add_const_ff(1.0)
     self.mod = blocks.multiply_ff()
     self.filt = filter.hilbert_fc(401)
     self.connect(self.random_source, self.interp, self.add, self.filt,
                  self)
Example #7
0
    def __init__(self):
        grc_wxgui.top_block_gui.__init__(self, title="Audio Playback")

        ##################################################
        # Variables
        ##################################################
        self.samp_rate = samp_rate = 48e3
        self.playback_rate = playback_rate = 1

        ##################################################
        # Blocks
        ##################################################
        _playback_rate_sizer = wx.BoxSizer(wx.VERTICAL)
        self._playback_rate_text_box = forms.text_box(
            parent=self.GetWin(),
            sizer=_playback_rate_sizer,
            value=self.playback_rate,
            callback=self.set_playback_rate,
            label='playback_rate',
            converter=forms.float_converter(),
            proportion=0,
        )
        self._playback_rate_slider = forms.slider(
            parent=self.GetWin(),
            sizer=_playback_rate_sizer,
            value=self.playback_rate,
            callback=self.set_playback_rate,
            minimum=.1,
            maximum=8,
            num_steps=100,
            style=wx.SL_HORIZONTAL,
            cast=float,
            proportion=1,
        )
        self.Add(_playback_rate_sizer)
        self.fractional_resampler_xx_0 = filter.fractional_resampler_ff(
            0, playback_rate)
        self.blocks_wavfile_sink_0 = blocks.wavfile_sink(
            "radio_recording_2.wav", 1, int(samp_rate), 8)
        self.blocks_throttle_0 = blocks.throttle(gr.sizeof_float * 1,
                                                 samp_rate, True)
        self.blocks_file_source_0 = blocks.file_source(gr.sizeof_float * 1,
                                                       "radio_samples", False)
        self.audio_sink_0 = audio.sink(48000, "", False)

        ##################################################
        # Connections
        ##################################################
        self.connect((self.blocks_file_source_0, 0),
                     (self.fractional_resampler_xx_0, 0))
        self.connect((self.blocks_throttle_0, 0), (self.audio_sink_0, 0))
        self.connect((self.blocks_throttle_0, 0),
                     (self.blocks_wavfile_sink_0, 0))
        self.connect((self.fractional_resampler_xx_0, 0),
                     (self.blocks_throttle_0, 0))
Example #8
0
 def __init__(self):
     gr.hier_block2.__init__(self, "transmitter_am",
                             gr.io_signature(1, 1, gr.sizeof_float),
                             gr.io_signature(1, 1, gr.sizeof_gr_complex))
     self.rate = 44.1e3 / 200e3
     #self.rate = 200e3/44.1e3
     self.interp = filter.fractional_resampler_ff(0.0, self.rate)
     self.cnv = blocks.float_to_complex()
     self.mul = blocks.multiply_const_cc(1.0)
     self.add = blocks.add_const_cc(1.0)
     self.src = analog.sig_source_c(200e3, analog.GR_SIN_WAVE, 0e3, 1.0)
     #self.src = analog.sig_source_c(200e3, analog.GR_SIN_WAVE, 50e3, 1.0)
     self.mod = blocks.multiply_cc()
     self.connect(self, self.interp, self.cnv, self.mul, self.add, self.mod,
                  self)
     self.connect(self.src, (self.mod, 1))
Example #9
0
 def __init__(self):
     gr.hier_block2.__init__(self, "transmitter_amssb",
                             gr.io_signature(1, 1, gr.sizeof_float),
                             gr.io_signature(1, 1, gr.sizeof_gr_complex))
     self.rate = 44.1e3 / 200e3
     #self.rate = 200e3/44.1e3
     self.interp = filter.fractional_resampler_ff(0.0, self.rate)
     #        self.cnv = blocks.float_to_complex()
     self.mul = blocks.multiply_const_ff(1.0)
     self.add = blocks.add_const_ff(1.0)
     self.src = analog.sig_source_f(200e3, analog.GR_SIN_WAVE, 0e3, 1.0)
     #self.src = analog.sig_source_c(200e3, analog.GR_SIN_WAVE, 50e3, 1.0)
     self.mod = blocks.multiply_ff()
     #self.filt = filter.fir_filter_ccf(1, firdes.band_pass(1.0, 200e3, 10e3, 60e3, 0.25e3, firdes.WIN_HAMMING, 6.76))
     self.filt = filter.hilbert_fc(401)
     self.connect(self, self.interp, self.mul, self.add, self.mod,
                  self.filt, self)
     self.connect(self.src, (self.mod, 1))
    def __init__(self,
                 samp_rate=1000,
                 vecsize=500,
                 folding=5,
                 pulse_rate=0.7477):
        gr.hier_block2.__init__(
            self,
            "Synch Folder2",
            gr.io_signature(1, 1, gr.sizeof_float * 1),
            gr.io_signature(1, 1, gr.sizeof_float * vecsize),
        )

        ##################################################
        # Parameters
        ##################################################
        self.samp_rate = samp_rate
        self.vecsize = vecsize
        self.folding = folding
        self.pulse_rate = pulse_rate

        ##################################################
        # Blocks
        ##################################################
        self.single_pole_iir_filter_xx_0 = filter.single_pole_iir_filter_ff(
            1.0 / folding, vecsize)
        self.fractional_resampler_xx_0 = filter.fractional_resampler_ff(
            0,
            float(samp_rate) / (float(pulse_rate) * float(vecsize)))
        self.blocks_stream_to_vector_0 = blocks.stream_to_vector(
            gr.sizeof_float * 1, vecsize)

        ##################################################
        # Connections
        ##################################################
        self.connect((self.blocks_stream_to_vector_0, 0),
                     (self.single_pole_iir_filter_xx_0, 0))
        self.connect((self.fractional_resampler_xx_0, 0),
                     (self.blocks_stream_to_vector_0, 0))
        self.connect((self, 0), (self.fractional_resampler_xx_0, 0))
        self.connect((self.single_pole_iir_filter_xx_0, 0), (self, 0))
    def __init__(self):
        gr.top_block.__init__(self, "Symbol Differential Filter Phases")
        Qt.QWidget.__init__(self)
        self.setWindowTitle("Symbol Differential Filter Phases")
        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",
                                     "symbol_differential_filter_phases")
        self.restoreGeometry(self.settings.value("geometry").toByteArray())

        ##################################################
        # Variables
        ##################################################
        self.sps = sps = 4
        self.ntaps = ntaps = 45
        self.eb = eb = 0.25
        self.samp_rate = samp_rate = 32000
        self.rrc_tx = rrc_tx = firdes.root_raised_cosine(
            sps, sps, 1, eb, sps * ntaps)
        self.rrc_rx = rrc_rx = firdes.root_raised_cosine(
            1.0, sps, 1, eb, ntaps)
        self.rate = rate = 1.2

        ##################################################
        # Blocks
        ##################################################
        self.qtgui_time_sink_x_0_0 = qtgui.time_sink_f(
            7 * sps,  #size
            samp_rate,  #samp_rate
            "QT GUI Plot",  #name
            6  #number of inputs
        )
        self.qtgui_time_sink_x_0_0.set_update_time(0.01)
        self.qtgui_time_sink_x_0_0.set_y_axis(-0.5, 1.25)

        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_NORM,
                                                    qtgui.TRIG_SLOPE_POS, 0.8,
                                                    0.00005 * sps, 0, "")
        self.qtgui_time_sink_x_0_0.enable_autoscale(False)
        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 = [
            "sym0", "d(sym0)/dt", "d(sym0)/dt + phi1", "d(sym0)/dt + phi2",
            "d(sym0)/dt + phi3", "d(sym0)/dt + phi4", "", "", "", ""
        ]
        widths = [2, 2, 2, 2, 2, 2, 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, 0, 0, 0, 0, 0, -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(6):
            if len(labels[i]) == 0:
                self.qtgui_time_sink_x_0_0.set_line_label(
                    i, "Data {0}".format(i))
            else:
                self.qtgui_time_sink_x_0_0.set_line_label(i, labels[i])
            self.qtgui_time_sink_x_0_0.set_line_width(i, widths[i])
            self.qtgui_time_sink_x_0_0.set_line_color(i, colors[i])
            self.qtgui_time_sink_x_0_0.set_line_style(i, styles[i])
            self.qtgui_time_sink_x_0_0.set_line_marker(i, markers[i])
            self.qtgui_time_sink_x_0_0.set_line_alpha(i, alphas[i])

        self._qtgui_time_sink_x_0_0_win = sip.wrapinstance(
            self.qtgui_time_sink_x_0_0.pyqwidget(), Qt.QWidget)
        self.top_grid_layout.addWidget(self._qtgui_time_sink_x_0_0_win, 0, 1,
                                       1, 1)
        self.pfb_arb_resampler_xxx_0_0_1 = pfb.arb_resampler_fff(rate,
                                                                 taps=None,
                                                                 flt_size=32)
        self.pfb_arb_resampler_xxx_0_0_1.declare_sample_delay(0)

        self.interp_fir_filter_xxx_0 = filter.interp_fir_filter_fff(
            sps, (rrc_tx))
        self.interp_fir_filter_xxx_0.declare_sample_delay(0)
        self.fractional_resampler_xx_0_2 = filter.fractional_resampler_ff(
            0 * 1.0 / 5, 1)
        self.fractional_resampler_xx_0_1_0 = filter.fractional_resampler_ff(
            4 * 1.0 / 5, 1)
        self.fractional_resampler_xx_0_1 = filter.fractional_resampler_ff(
            3 * 1.0 / 5, 1)
        self.fractional_resampler_xx_0_0 = filter.fractional_resampler_ff(
            2 * 1.0 / 5, 1)
        self.fractional_resampler_xx_0 = filter.fractional_resampler_ff(
            1 * 1.0 / 5, 1)
        self.fir_filter_xxx_0_2_0_1_0 = filter.fir_filter_fff(
            1, ([0, -1, 0, 1]))
        self.fir_filter_xxx_0_2_0_1_0.declare_sample_delay(0)
        self.fir_filter_xxx_0_2_0_1 = filter.fir_filter_fff(1, ([0, -1, 0, 1]))
        self.fir_filter_xxx_0_2_0_1.declare_sample_delay(0)
        self.fir_filter_xxx_0_2_0_0 = filter.fir_filter_fff(1, ([0, -1, 0, 1]))
        self.fir_filter_xxx_0_2_0_0.declare_sample_delay(0)
        self.fir_filter_xxx_0_2_0 = filter.fir_filter_fff(1, ([0, -1, 0, 1]))
        self.fir_filter_xxx_0_2_0.declare_sample_delay(0)
        self.fir_filter_xxx_0_2 = filter.fir_filter_fff(1, ([-1, 0, 1]))
        self.fir_filter_xxx_0_2.declare_sample_delay(0)
        self.fir_filter_xxx_0 = filter.fir_filter_fff(1, (rrc_rx))
        self.fir_filter_xxx_0.declare_sample_delay(0)
        self.blocks_vector_source_x_0 = blocks.vector_source_f(
            49 * [
                0,
            ] + [
                1,
            ] + 50 * [
                0,
            ], True, 1, [])
        self.blocks_throttle_0 = blocks.throttle(gr.sizeof_float * 1,
                                                 samp_rate, True)
        self.blocks_delay_0_0_4 = blocks.delay(gr.sizeof_float * 1, 1)
        self.blocks_delay_0_0_3 = blocks.delay(gr.sizeof_float * 1, 1)
        self.blocks_delay_0_0_2 = blocks.delay(gr.sizeof_float * 1, 1)
        self.blocks_delay_0_0_1 = blocks.delay(gr.sizeof_float * 1, 1)
        self.blocks_delay_0_0_0 = blocks.delay(gr.sizeof_float * 1, 1)
        self.blocks_delay_0_0 = blocks.delay(gr.sizeof_float * 1, 0)

        ##################################################
        # Connections
        ##################################################
        self.connect((self.blocks_delay_0_0, 0),
                     (self.qtgui_time_sink_x_0_0, 0))
        self.connect((self.blocks_delay_0_0_0, 0),
                     (self.qtgui_time_sink_x_0_0, 5))
        self.connect((self.blocks_delay_0_0_1, 0),
                     (self.qtgui_time_sink_x_0_0, 4))
        self.connect((self.blocks_delay_0_0_2, 0),
                     (self.qtgui_time_sink_x_0_0, 3))
        self.connect((self.blocks_delay_0_0_3, 0),
                     (self.qtgui_time_sink_x_0_0, 2))
        self.connect((self.blocks_delay_0_0_4, 0),
                     (self.qtgui_time_sink_x_0_0, 1))
        self.connect((self.blocks_throttle_0, 0),
                     (self.interp_fir_filter_xxx_0, 0))
        self.connect((self.blocks_vector_source_x_0, 0),
                     (self.blocks_throttle_0, 0))
        self.connect((self.fir_filter_xxx_0, 0), (self.blocks_delay_0_0, 0))
        self.connect((self.fir_filter_xxx_0, 0),
                     (self.fractional_resampler_xx_0, 0))
        self.connect((self.fir_filter_xxx_0, 0),
                     (self.fractional_resampler_xx_0_0, 0))
        self.connect((self.fir_filter_xxx_0, 0),
                     (self.fractional_resampler_xx_0_1, 0))
        self.connect((self.fir_filter_xxx_0, 0),
                     (self.fractional_resampler_xx_0_1_0, 0))
        self.connect((self.fir_filter_xxx_0, 0),
                     (self.fractional_resampler_xx_0_2, 0))
        self.connect((self.fir_filter_xxx_0_2, 0),
                     (self.blocks_delay_0_0_4, 0))
        self.connect((self.fir_filter_xxx_0_2_0, 0),
                     (self.blocks_delay_0_0_3, 0))
        self.connect((self.fir_filter_xxx_0_2_0_0, 0),
                     (self.blocks_delay_0_0_2, 0))
        self.connect((self.fir_filter_xxx_0_2_0_1, 0),
                     (self.blocks_delay_0_0_1, 0))
        self.connect((self.fir_filter_xxx_0_2_0_1_0, 0),
                     (self.blocks_delay_0_0_0, 0))
        self.connect((self.fractional_resampler_xx_0, 0),
                     (self.fir_filter_xxx_0_2_0, 0))
        self.connect((self.fractional_resampler_xx_0_0, 0),
                     (self.fir_filter_xxx_0_2_0_0, 0))
        self.connect((self.fractional_resampler_xx_0_1, 0),
                     (self.fir_filter_xxx_0_2_0_1, 0))
        self.connect((self.fractional_resampler_xx_0_1_0, 0),
                     (self.fir_filter_xxx_0_2_0_1_0, 0))
        self.connect((self.fractional_resampler_xx_0_2, 0),
                     (self.fir_filter_xxx_0_2, 0))
        self.connect((self.interp_fir_filter_xxx_0, 0),
                     (self.pfb_arb_resampler_xxx_0_0_1, 0))
        self.connect((self.pfb_arb_resampler_xxx_0_0_1, 0),
                     (self.fir_filter_xxx_0, 0))
Example #12
0
    def __init__(self):
        gr.top_block.__init__(self, "Testvolts")

        ##################################################
        # Variables - Some get overridden after block definition before connections.
        ##################################################
        self.samp_rate = samp_rate = 48000
        # Initial wavelength assumption, which must be calibrated carefully.
        self.fundamental_wavelength_samples = 800
        # self.probed_rms_volts = probed_rms_volts = 0

        # Things from config file
        # self.avg_length = avg_length = 10000
        self.probe_interval = probe_interval = float(SETTINGS["display"]["probe_interval"])
        self.rms_alpha = rms_alpha = 1

        # Calibration (Conversion) parameters, to convert from sample domain to volts/current domain.
        self.average_rms_slope =     float(SETTINGS["calibration"]["average_rms_slope"])
        self.average_rms_intercept = float(SETTINGS["calibration"]["average_rms_intercept"])

        # RMS Block parameters
        self.voltage_calculation_rms_alpha = float(SETTINGS["calibration"]["voltage_calculation_rms_alpha"])

        # Averaging block parameters
        self.voltage_rms_average_length =  int(SETTINGS["calibration"]["voltage_rms_average_length"])
        self.voltage_rms_average_scale =  float(SETTINGS["calibration"]["voltage_rms_average_scale"])
        self.voltage_rms_max_iter = int(SETTINGS["calibration"]["voltage_rms_max_iter"])

        # for averaging block stuff
        self.last_sampled_wavelength = 1

        # Input source parameters.
        self.audioSource = SETTINGS["input"]["input_type"]

        # Frequency calculation parameters
        self.freq_getfreq_alpha = float(SETTINGS["calibration"]["freq_getfreq_alpha"])
        self.freq_interpolation = float(SETTINGS["calibration"]["freq_interpolation"])
        self.freq_interpolation_multiplier = float(SETTINGS["calibration"]["freq_interpolation_multiplier"])


        self.current_readings = self.getDefaultReadings()



        # AC Volts
        self.blocks_throttle_0 = blocks.throttle(gr.sizeof_float * 1, samp_rate, True)
        # self.blocks_rms_volts = blocks.rms_ff(self.voltage_calculation_rms_alpha)
        # self.blocks_moving_average_volts = blocks.moving_average_ff(self.voltage_rms_average_length, self.voltage_rms_average_scale, self.voltage_rms_max_iter)
        # self.probe_rms_volts = blocks.probe_signal_f()


        # AC Frequency
        # if (setting_acfreq_enabled() is True):
        self.probe_avgwave = blocks.probe_signal_f()
        self.upsampler = filter.fractional_resampler_ff(0, self.freq_interpolation)
        self.getfreq_block = powerquality.getfreqcpp(self.freq_getfreq_alpha)

        # Streaming support - Permit access to the raw samples to ZeroMQ clients.
        self.zeromq_pub_sink_0 = zeromq.pub_sink(gr.sizeof_float, 1, SETTINGS["tap_rawsamples"]["zmq_bind_uri"], SETTINGS["tap_rawsamples"]["zmq_timeout"], True, -1)

        # TODO: Connect the streaming blocks

        # self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vff((-1, ))
        # self.blocks_delay_0 = blocks.delay(gr.sizeof_float*1, self.fundamental_wavelength_samples)
        # self.blocks_add_xx_0 = blocks.add_vff(1)

        # Bias detection - these parameters are tuned to 48khz samp rate: (1 * samp_rate / 60, .00125, 4000)
        if ("bias" in SETTINGS and "bias_avg_num_waves" in SETTINGS["bias"]):
            bias_avg_num_waves = SETTINGS["bias"]["bias_avg_num_waves"]
        else:
            bias_avg_num_waves = 1
        # Calculate the number of samples associated with n wavelengths specified in settings or the default.
        avgBiasNumSamples = bias_avg_num_waves * samp_rate / 60
        self.blocks_bias_moving_average = blocks.moving_average_ff(avgBiasNumSamples, 1.0/avgBiasNumSamples, 4000)
        self.probe_bias = blocks.probe_signal_f()


        ### Calibrate the blocks based on settings from config file
        # self.set_rms_alpha(asdfasdfasdfasdf from settings)

        # Instantiate the message consumer that we'll use to get json messages from the getfreq block
        self.msgConsumer = message_consumer()

        ##################################################
        # RMS Volts Connections
        ##################################################

        # self.connect((self.blocks_rms_volts, 0), (self.blocks_moving_average_volts, 0))
        # self.connect((self.blocks_moving_average_volts, 0), (self.probe_rms_volts, 0))

        # Set up a variable with a default value. Below we'll override the value depending on whether we are reading from file or audio device.
        self.sourceOfSamplesBlock = self.blocks_throttle_0

        # Select input source - wav file or sound card.
        if (self.audioSource == "wav"):
            # Variable source type: wav file
            # self.wavfile_input = blocks.wavfile_source('./samples/sample.wav', False)
            self.input_wav_filename = SETTINGS["input"]["input_wav_filename"]
            self.wavfile_input = blocks.wavfile_source(self.input_wav_filename, True)

            # wav input requires throttle block. Then we connect things to the throttle block directly instead of the wav source.
            self.connect((self.wavfile_input, 0), (self.blocks_throttle_0, 0))

            self.sourceOfSamplesBlock = self.blocks_throttle_0

        else:
            # Variable source type: sound device.
            self.soundcard_device_name = ""
            if (SETTINGS["input"]["input_sound_device"]):
                self.soundcard_device_name = SETTINGS["input"]["input_sound_device"]

            self.soundcard_input = audio.source(samp_rate, self.soundcard_device_name, True)

            # no throttle block needed in the case of sound card

            self.sourceOfSamplesBlock = self.soundcard_input



        # Volts flow
        print "CONNECTIONS: Defining the voltage calculation flow"
        # self.connect((self.sourceOfSamplesBlock , 0), (self.blocks_rms_volts, 0))
        # Hz flow
        print "CONNECTIONS: Defining the frequency calculation flow"
        self.connect((self.sourceOfSamplesBlock , 0), (self.upsampler, 0))
        self.connect((self.upsampler, 0), (self.getfreq_block, 0))
        self.connect((self.getfreq_block, 0), (self.probe_avgwave, 0))

        # Raw Tap port Tap flow
        print "CONNECTIONS: Connecting raw samples tap (ZMQ)"
        self.connect((self.sourceOfSamplesBlock , 0), (self.zeromq_pub_sink_0, 0))

        # Bias Detection flow
        self.connect((self.sourceOfSamplesBlock, 0), (self.blocks_bias_moving_average, 0))
        self.connect((self.blocks_bias_moving_average, 0), (self.probe_bias, 0))

        # Connect our message consumer block to the message output of the getfreq block so we can get messages from it.
        self.msg_connect((self.getfreq_block, 'out'), (self.msgConsumer, 'in_port'))
Example #13
0
    def __init__(self):
        gr.top_block.__init__(self, "RX logic")

        ##################################################
        # Variables
        ##################################################
        self.samp_rate = samp_rate = 192000
        self.mode = mode = 2
        self.bw = bw = 3200
        self.aud_rate = aud_rate = 22050
        self.visualsq = visualsq = 1
        self.st = st = 1
        self.sq = sq = -700
        self.sb_pos = sb_pos = ((bw*mode==2)-(bw*mode==3))
        self.rec = rec = 1
        self.laj_0 = laj_0 = 0
        self.laj = laj = 0
        self.lai_0 = lai_0 = 0
        self.lai = lai = 0
        self.freq = freq = 98500000
        self.device = device = "fcd=0,type=2"
        self.dev = dev = 19000
        self.decimation = decimation = samp_rate/aud_rate
        self.batswitch = batswitch = 0
        self.batido = batido = 2950
        self.VEC = VEC = 1280

        ##################################################
        # Blocks
        ##################################################
        self.rtlsdr_source_0 = osmosdr.source( args="nchan=" + str(1) + " " + device )
        self.rtlsdr_source_0.set_sample_rate(samp_rate)
        self.rtlsdr_source_0.set_center_freq(freq, 0)
        self.rtlsdr_source_0.set_freq_corr(7, 0)
        self.rtlsdr_source_0.set_dc_offset_mode(0, 0)
        self.rtlsdr_source_0.set_iq_balance_mode(0, 0)
        self.rtlsdr_source_0.set_gain_mode(0, 0)
        self.rtlsdr_source_0.set_gain(14, 0)
        self.rtlsdr_source_0.set_if_gain(14, 0)
        self.rtlsdr_source_0.set_bb_gain(14, 0)
        self.rtlsdr_source_0.set_antenna("", 0)
        self.rtlsdr_source_0.set_bandwidth(0, 0)
          
        self.probe_st = analog.probe_avg_mag_sqrd_f(10, 1)
        self.low_pass_filter_0_2 = filter.fir_filter_ccf(decimation, firdes.low_pass(
        	1, samp_rate, bw*(2+(mode==2)+(mode==3)), 500, firdes.WIN_HAMMING, 6.76))
        self.low_pass_filter_0_1_0_0_0 = filter.fir_filter_fff(1, firdes.low_pass(
        	1, samp_rate, 14000, 1000, firdes.WIN_HAMMING, 6.76))
        self.low_pass_filter_0_1 = filter.fir_filter_fff(1, firdes.low_pass(
        	30, samp_rate, 14000, 1000, firdes.WIN_HAMMING, 6.76))
        self.low_pass_filter_0_0_0_0 = filter.interp_fir_filter_fff(1, firdes.low_pass(
        	visualsq, samp_rate/decimation, bw, 10, firdes.WIN_HAMMING, 6.76))
        self.low_pass_filter_0_0_0 = filter.fir_filter_ccf(1, firdes.low_pass(
        	1, samp_rate/decimation, bw, 10, firdes.WIN_HAMMING, 6.76))
        self.high_pass_filter_0 = filter.fir_filter_ccf(1, firdes.high_pass(
        	1, samp_rate/decimation, bw, 10, firdes.WIN_HAMMING, 6.76))
        self.fractional_resampler_xx_0_0_0 = filter.fractional_resampler_ff(0, samp_rate/48000.0)
        self.fractional_resampler_xx_0_0 = filter.fractional_resampler_ff(0, samp_rate/48000.0)
        self.fractional_resampler_xx_0 = filter.fractional_resampler_ff(0, (samp_rate/decimation)/48000.0)
        self.fft_vxx_0 = fft.fft_vcc(VEC, True, (window.blackmanharris(1024)), True, 1)
        self.fft_probe = blocks.probe_signal_vf(VEC)
        self.blocks_wavfile_sink_0 = blocks.wavfile_sink("/tmp/CAPTURE.WAV", 2, 48000, 16)
        self.blocks_sub_xx_0 = blocks.sub_ff(1)
        self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, VEC)
        self.blocks_multiply_xx_0_1_0 = blocks.multiply_vff(1)
        self.blocks_multiply_xx_0_0_0 = blocks.multiply_vcc(1)
        self.blocks_multiply_xx_0 = blocks.multiply_vcc(1)
        self.blocks_complex_to_real_0_0_0_0 = blocks.complex_to_real(1)
        self.blocks_complex_to_mag_squared_0 = blocks.complex_to_mag_squared(VEC)
        self.blocks_add_xx_0 = blocks.add_vff(1)
        self.blocks_add_const_vxx_0 = blocks.add_const_vcc((-complex(lai,laj), ))
        self.blks2_valve_0_1 = grc_blks2.valve(item_size=gr.sizeof_float*1, open=bool(rec))
        self.blks2_valve_0_0_1 = grc_blks2.valve(item_size=gr.sizeof_gr_complex*1, open=bool(mode!=5))
        self.blks2_valve_0_0_0 = grc_blks2.valve(item_size=gr.sizeof_gr_complex*1, open=bool(0))
        self.blks2_valve_0_0 = grc_blks2.valve(item_size=gr.sizeof_gr_complex*1, open=bool(mode!=4))
        self.blks2_valve_0 = grc_blks2.valve(item_size=gr.sizeof_float*1, open=bool(rec))
        self.blks2_selector_0_1_0 = grc_blks2.selector(
        	item_size=gr.sizeof_gr_complex*1,
        	num_inputs=2,
        	num_outputs=1,
        	input_index=(mode==3),
        	output_index=0,
        )
        self.blks2_selector_0_0_1_0 = grc_blks2.selector(
        	item_size=gr.sizeof_float*1,
        	num_inputs=3,
        	num_outputs=1,
        	input_index=(mode>3)+(mode>4),
        	output_index=0,
        )
        self.blks2_selector_0_0_1 = grc_blks2.selector(
        	item_size=gr.sizeof_float*1,
        	num_inputs=3,
        	num_outputs=1,
        	input_index=(mode>3)+(mode>4),
        	output_index=0,
        )
        self.blks2_selector_0_0 = grc_blks2.selector(
        	item_size=gr.sizeof_float*1,
        	num_inputs=4,
        	num_outputs=1,
        	input_index=mode,
        	output_index=0,
        )
        self.blks2_selector_0 = grc_blks2.selector(
        	item_size=gr.sizeof_gr_complex*1,
        	num_inputs=1,
        	num_outputs=4,
        	input_index=0,
        	output_index=mode,
        )
        self.band_pass_filter_0_0_0 = filter.fir_filter_fff(1, firdes.band_pass(
        	250, samp_rate, 18500, 19500, 500, firdes.WIN_HAMMING, 6.76))
        self.band_pass_filter_0_0 = filter.fir_filter_fff(1, firdes.band_pass(
        	120, samp_rate, 24000, 52000, 1000, firdes.WIN_HAMMING, 6.76))
        self.audio_sink_0 = audio.sink(48000, "dmix:CARD=Pro,DEV=0", False)
        self.analog_wfm_rcv_1 = analog.wfm_rcv(
        	quad_rate=samp_rate,
        	audio_decimation=1,
        )
        self.analog_sig_source_x_0_0_0 = analog.sig_source_c(samp_rate/decimation, analog.GR_COS_WAVE, -bw, 1, 0)
        self.analog_sig_source_x_0 = analog.sig_source_c(samp_rate, analog.GR_COS_WAVE, dev+(bw*mode==2)+(bw*mode==3), 1, 0)
        self.analog_quadrature_demod_cf_0 = analog.quadrature_demod_cf(0.25)
        self.analog_fm_demod_cf_0 = analog.fm_demod_cf(
        	channel_rate=samp_rate,
        	audio_decim=samp_rate/48000,
        	deviation=50000,
        	audio_pass=15000,
        	audio_stop=16000,
        	gain=3.0,
        	tau=50e-6,
        )
        self.analog_fm_deemph_0_0 = analog.fm_deemph(fs=48000, tau=50e-6)
        self.analog_fm_deemph_0 = analog.fm_deemph(fs=48000, tau=50e-6)
        self.analog_feedforward_agc_cc_0 = analog.feedforward_agc_cc(64, 0.9)
        self.analog_am_demod_cf_0 = analog.am_demod_cf(
        	channel_rate=samp_rate/decimation,
        	audio_decim=samp_rate/decimation/aud_rate,
        	audio_pass=(samp_rate/decimation/2)-500,
        	audio_stop=(samp_rate/decimation/2)-100,
        )
        self.analog_agc3_xx_0 = analog.agc3_cc(0.0001, 0.0001, 0.9, 0.1)
        self.analog_agc3_xx_0.set_max_gain(200)

        ##################################################
        # Connections
        ##################################################
        self.connect((self.blocks_complex_to_mag_squared_0, 0), (self.fft_probe, 0))
        self.connect((self.analog_sig_source_x_0, 0), (self.blocks_multiply_xx_0, 1))
        self.connect((self.blks2_valve_0_0_0, 0), (self.blocks_multiply_xx_0, 0))
        self.connect((self.blocks_stream_to_vector_0, 0), (self.fft_vxx_0, 0))
        self.connect((self.fft_vxx_0, 0), (self.blocks_complex_to_mag_squared_0, 0))
        self.connect((self.blocks_add_const_vxx_0, 0), (self.blks2_valve_0_0, 0))
        self.connect((self.band_pass_filter_0_0, 0), (self.blocks_multiply_xx_0_1_0, 0))
        self.connect((self.low_pass_filter_0_1, 0), (self.analog_fm_deemph_0, 0))
        self.connect((self.analog_fm_deemph_0, 0), (self.blocks_add_xx_0, 0))
        self.connect((self.analog_wfm_rcv_1, 0), (self.low_pass_filter_0_1, 0))
        self.connect((self.analog_wfm_rcv_1, 0), (self.band_pass_filter_0_0, 0))
        self.connect((self.analog_wfm_rcv_1, 0), (self.band_pass_filter_0_0_0, 0))
        self.connect((self.analog_fm_deemph_0_0, 0), (self.blocks_add_xx_0, 1))
        self.connect((self.low_pass_filter_0_1_0_0_0, 0), (self.analog_fm_deemph_0_0, 0))
        self.connect((self.analog_agc3_xx_0, 0), (self.analog_wfm_rcv_1, 0))
        self.connect((self.blks2_valve_0_0_1, 0), (self.analog_agc3_xx_0, 0))
        self.connect((self.blocks_add_const_vxx_0, 0), (self.blks2_valve_0_0_1, 0))
        self.connect((self.blocks_multiply_xx_0_1_0, 0), (self.low_pass_filter_0_1_0_0_0, 0))
        self.connect((self.band_pass_filter_0_0_0, 0), (self.blocks_multiply_xx_0_1_0, 1))
        self.connect((self.band_pass_filter_0_0_0, 0), (self.blocks_multiply_xx_0_1_0, 2))
        self.connect((self.analog_fm_deemph_0_0, 0), (self.blocks_sub_xx_0, 1))
        self.connect((self.analog_fm_deemph_0, 0), (self.blocks_sub_xx_0, 0))
        self.connect((self.blocks_sub_xx_0, 0), (self.fractional_resampler_xx_0_0_0, 0))
        self.connect((self.blocks_add_xx_0, 0), (self.fractional_resampler_xx_0_0, 0))
        self.connect((self.blks2_valve_0_0, 0), (self.analog_fm_demod_cf_0, 0))
        self.connect((self.blocks_add_const_vxx_0, 0), (self.blocks_stream_to_vector_0, 0))
        self.connect((self.blocks_add_const_vxx_0, 0), (self.blks2_valve_0_0_0, 0))
        self.connect((self.blocks_multiply_xx_0, 0), (self.low_pass_filter_0_2, 0))
        self.connect((self.blocks_complex_to_real_0_0_0_0, 0), (self.blks2_selector_0_0, 3))
        self.connect((self.blocks_complex_to_real_0_0_0_0, 0), (self.blks2_selector_0_0, 2))
        self.connect((self.blks2_selector_0_1_0, 0), (self.blocks_multiply_xx_0_0_0, 0))
        self.connect((self.blocks_multiply_xx_0_0_0, 0), (self.blocks_complex_to_real_0_0_0_0, 0))
        self.connect((self.analog_sig_source_x_0_0_0, 0), (self.blocks_multiply_xx_0_0_0, 1))
        self.connect((self.analog_am_demod_cf_0, 0), (self.blks2_selector_0_0, 0))
        self.connect((self.blks2_selector_0, 0), (self.analog_am_demod_cf_0, 0))
        self.connect((self.analog_quadrature_demod_cf_0, 0), (self.blks2_selector_0_0, 1))
        self.connect((self.blks2_selector_0, 1), (self.analog_quadrature_demod_cf_0, 0))
        self.connect((self.blks2_selector_0_0, 0), (self.low_pass_filter_0_0_0_0, 0))
        self.connect((self.blks2_selector_0, 2), (self.high_pass_filter_0, 0))
        self.connect((self.blks2_selector_0, 3), (self.low_pass_filter_0_0_0, 0))
        self.connect((self.high_pass_filter_0, 0), (self.blks2_selector_0_1_0, 0))
        self.connect((self.low_pass_filter_0_0_0, 0), (self.blks2_selector_0_1_0, 1))
        self.connect((self.analog_fm_demod_cf_0, 0), (self.blks2_selector_0_0_1, 1))
        self.connect((self.analog_fm_demod_cf_0, 0), (self.blks2_selector_0_0_1_0, 1))
        self.connect((self.fractional_resampler_xx_0_0_0, 0), (self.blks2_selector_0_0_1_0, 2))
        self.connect((self.fractional_resampler_xx_0_0, 0), (self.blks2_selector_0_0_1, 2))
        self.connect((self.blks2_selector_0_0_1_0, 0), (self.audio_sink_0, 1))
        self.connect((self.blks2_selector_0_0_1, 0), (self.audio_sink_0, 0))
        self.connect((self.blks2_valve_0, 0), (self.blocks_wavfile_sink_0, 1))
        self.connect((self.blks2_selector_0_0_1_0, 0), (self.blks2_valve_0, 0))
        self.connect((self.blks2_selector_0_0_1, 0), (self.blks2_valve_0_1, 0))
        self.connect((self.blks2_valve_0_1, 0), (self.blocks_wavfile_sink_0, 0))
        self.connect((self.fractional_resampler_xx_0, 0), (self.blks2_selector_0_0_1_0, 0))
        self.connect((self.fractional_resampler_xx_0, 0), (self.blks2_selector_0_0_1, 0))
        self.connect((self.low_pass_filter_0_2, 0), (self.analog_feedforward_agc_cc_0, 0))
        self.connect((self.rtlsdr_source_0, 0), (self.blocks_add_const_vxx_0, 0))
        self.connect((self.low_pass_filter_0_0_0_0, 0), (self.fractional_resampler_xx_0, 0))
        self.connect((self.analog_feedforward_agc_cc_0, 0), (self.blks2_selector_0, 0))
        self.connect((self.band_pass_filter_0_0_0, 0), (self.probe_st, 0))
Example #14
0
    def __init__(self):
        grc_wxgui.top_block_gui.__init__(self, title="Rds")
        _icon_path = "/usr/share/icons/hicolor/32x32/apps/gnuradio-grc.png"
        self.SetIcon(wx.Icon(_icon_path, wx.BITMAP_TYPE_ANY))

        ##################################################
        # Variables
        ##################################################
        self.sound_samp_rate = sound_samp_rate = 44.1e3
        self.samp_rate = samp_rate = 2e6
        self.samp_post_receive = samp_post_receive = 350e3
        self.freq = freq = 90.7e6

        ##################################################
        # Blocks
        ##################################################
        _freq_sizer = wx.BoxSizer(wx.VERTICAL)
        self._freq_text_box = forms.text_box(
        	parent=self.GetWin(),
        	sizer=_freq_sizer,
        	value=self.freq,
        	callback=self.set_freq,
        	label='freq',
        	converter=forms.float_converter(),
        	proportion=0,
        )
        self._freq_slider = forms.slider(
        	parent=self.GetWin(),
        	sizer=_freq_sizer,
        	value=self.freq,
        	callback=self.set_freq,
        	minimum=87.9e6,
        	maximum=107.9e6,
        	num_steps=100,
        	style=wx.SL_HORIZONTAL,
        	cast=float,
        	proportion=1,
        )
        self.Add(_freq_sizer)
        self.wxgui_scopesink2_0 = scopesink2.scope_sink_f(
        	self.GetWin(),
        	title="Final Output",
        	sample_rate=17.5e3,
        	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.rtlsdr_source_0 = osmosdr.source( args="numchan=" + str(1) + " " + "" )
        self.rtlsdr_source_0.set_sample_rate(samp_rate)
        self.rtlsdr_source_0.set_center_freq(freq, 0)
        self.rtlsdr_source_0.set_freq_corr(0, 0)
        self.rtlsdr_source_0.set_dc_offset_mode(0, 0)
        self.rtlsdr_source_0.set_iq_balance_mode(0, 0)
        self.rtlsdr_source_0.set_gain_mode(0, 0)
        self.rtlsdr_source_0.set_gain(10, 0)
        self.rtlsdr_source_0.set_if_gain(20, 0)
        self.rtlsdr_source_0.set_bb_gain(20, 0)
        self.rtlsdr_source_0.set_antenna("", 0)
        self.rtlsdr_source_0.set_bandwidth(0, 0)
          
        self.low_pass_filter_1 = filter.fir_filter_fff(1, firdes.low_pass(
        	1, samp_post_receive, 2.2e3, 2e3, firdes.WIN_HAMMING, 6.76))
        self.low_pass_filter_0 = filter.fir_filter_ccf(1, firdes.low_pass(
        	1, samp_rate, 75e3, 150e3, firdes.WIN_HAMMING, 6.76))
        self.fractional_resampler_xx_2 = filter.fractional_resampler_ff(0, 20)
        self.fractional_resampler_xx_0 = filter.fractional_resampler_cc(0, 4)
        self.blocks_multiply_xx_0 = blocks.multiply_vff(1)
        self.band_pass_filter_0_0 = filter.fir_filter_fff(1, firdes.band_pass(
        	1, samp_post_receive, 18.5e3, 19.5e3, 1e3, firdes.WIN_HAMMING, 6.76))
        self.band_pass_filter_0 = filter.fir_filter_fff(1, firdes.band_pass(
        	1, samp_post_receive, 54e3, 60e3, 3e3, firdes.WIN_HAMMING, 6.76))
        self.analog_wfm_rcv_0 = analog.wfm_rcv(
        	quad_rate=350e3,
        	audio_decimation=2,
        )

        ##################################################
        # Connections
        ##################################################
        self.connect((self.rtlsdr_source_0, 0), (self.low_pass_filter_0, 0))
        self.connect((self.low_pass_filter_0, 0), (self.fractional_resampler_xx_0, 0))
        self.connect((self.fractional_resampler_xx_0, 0), (self.analog_wfm_rcv_0, 0))
        self.connect((self.analog_wfm_rcv_0, 0), (self.band_pass_filter_0, 0))
        self.connect((self.analog_wfm_rcv_0, 0), (self.band_pass_filter_0_0, 0))
        self.connect((self.band_pass_filter_0_0, 0), (self.blocks_multiply_xx_0, 2))
        self.connect((self.band_pass_filter_0_0, 0), (self.blocks_multiply_xx_0, 1))
        self.connect((self.band_pass_filter_0_0, 0), (self.blocks_multiply_xx_0, 0))
        self.connect((self.band_pass_filter_0, 0), (self.blocks_multiply_xx_0, 3))
        self.connect((self.fractional_resampler_xx_2, 0), (self.wxgui_scopesink2_0, 0))
        self.connect((self.low_pass_filter_1, 0), (self.fractional_resampler_xx_2, 0))
        self.connect((self.blocks_multiply_xx_0, 0), (self.low_pass_filter_1, 0))