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)
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)
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)
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)
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))
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))
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))
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'))
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))
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))