def __init__(self, filename, lo_freq, audio_rate, if_rate): gr.hier_block2.__init__(self, "pipeline", gr.io_signature(0, 0, 0), gr.io_signature(1, 1, gr.sizeof_gr_complex)) try: src = blocks.file_source(gr.sizeof_float, filename, True) except RuntimeError: sys.stderr.write(("\nError: Could not open file '%s'\n\n" % \ filename)) sys.exit(1) print audio_rate, if_rate fmtx = analog.nbfm_tx(audio_rate, if_rate, max_dev=5e3, tau=75e-6, fh=0.925 * if_rate / 2.0) # Local oscillator lo = analog.sig_source_c( if_rate, # sample rate analog.GR_SIN_WAVE, # waveform type lo_freq, # frequency 1.0, # amplitude 0) # DC Offset mixer = blocks.multiply_cc() self.connect(src, fmtx, (mixer, 0)) self.connect(lo, (mixer, 1)) self.connect(mixer, self)
def __init__(self, filename, lo_freq, audio_rate, if_rate): gr.hier_block2.__init__(self, "pipeline", gr.io_signature(0, 0, 0), gr.io_signature(1, 1, gr.sizeof_gr_complex)) try: src = blocks.file_source (gr.sizeof_float, filename, True) except RuntimeError: sys.stderr.write(("\nError: Could not open file '%s'\n\n" % \ filename)) sys.exit(1) print audio_rate, if_rate fmtx = analog.nbfm_tx(audio_rate, if_rate, max_dev=5e3, tau=75e-6, fh=0.925*if_rate/2.0) # Local oscillator lo = analog.sig_source_c(if_rate, # sample rate analog.GR_SIN_WAVE, # waveform type lo_freq, # frequency 1.0, # amplitude 0) # DC Offset mixer = blocks.multiply_cc() self.connect(src, fmtx, (mixer, 0)) self.connect(lo, (mixer, 1)) self.connect(mixer, self)
def __init__(self): gr.top_block.__init__(self, "final_africube.py") ################################################## # Variables ################################################## self.samp_rate = samp_rate = 2205000 ################################################## # Blocks ################################################## self.sdrplay_rsp1_source_0 = sdrplay.rsp1_source(435.100e6, 5000, True, 0, False, False, False, 0, 1, samp_rate, True, '0') self.rational_resampler_xxx_0 = filter.rational_resampler_ccc( interpolation=1, decimation=25, taps=None, fractional_bw=None, ) self.blocks_multiply_xx_1 = blocks.multiply_vcc(1) self.blocks_multiply_const_vxx_2_0 = blocks.multiply_const_vff((1, )) self.blocks_multiply_const_vxx_2 = blocks.multiply_const_vcc((1, )) self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((2, )) self.blocks_add_xx_1 = blocks.add_vcc(1) self.blks2_tcp_sink_1 = grc_blks2.tcp_sink( itemsize=gr.sizeof_gr_complex*1, addr='127.0.0.1', port=8011, server=False, ) self.audio_source_0 = audio.source(44100, 'plughw:0,1', True) self.analog_sig_source_x_0 = analog.sig_source_c(88200, analog.GR_COS_WAVE, 35000, 1, 0) self.analog_nbfm_tx_0 = analog.nbfm_tx( audio_rate=44100, quad_rate=88200, tau=75e-6, max_dev=2000, fh=-1.0, ) ################################################## # Connections ################################################## self.connect((self.analog_nbfm_tx_0, 0), (self.blocks_multiply_xx_1, 1)) self.connect((self.analog_sig_source_x_0, 0), (self.blocks_multiply_xx_1, 0)) self.connect((self.audio_source_0, 0), (self.blocks_multiply_const_vxx_2_0, 0)) self.connect((self.blocks_add_xx_1, 0), (self.blks2_tcp_sink_1, 0)) self.connect((self.blocks_multiply_const_vxx_0, 0), (self.blocks_add_xx_1, 1)) self.connect((self.blocks_multiply_const_vxx_2, 0), (self.blocks_add_xx_1, 0)) self.connect((self.blocks_multiply_const_vxx_2_0, 0), (self.analog_nbfm_tx_0, 0)) self.connect((self.blocks_multiply_xx_1, 0), (self.blocks_multiply_const_vxx_2, 0)) self.connect((self.rational_resampler_xxx_0, 0), (self.blocks_multiply_const_vxx_0, 0)) self.connect((self.sdrplay_rsp1_source_0, 0), (self.rational_resampler_xxx_0, 0))
def __init__(self, context, mode, audio_rate=10000, rf_rate=20000): gr.hier_block2.__init__( self, type(self).__name__, gr.io_signature(1, 1, gr.sizeof_float * 1), gr.io_signature(1, 1, gr.sizeof_gr_complex * 1), ) self.__audio_rate = audio_rate self.__rf_rate = rf_rate self.connect(self, analog.nbfm_tx(audio_rate=audio_rate, quad_rate=rf_rate, tau=75e-6, max_dev=5e3), self)
def __init__(self): gr.top_block.__init__(self, "Fm Wav") ################################################## # Variables ################################################## self.audio_samp = audio_samp = 10000 self.quad_rate = quad_rate = 5 * audio_samp self.samp_rate = samp_rate = 10 * quad_rate ################################################## # Blocks ################################################## self.rational_resampler_xxx_0 = filter.rational_resampler_ccc( interpolation=10, decimation=1, taps=None, fractional_bw=None, ) self.osmosdr_sink_0 = osmosdr.sink(args="numchan=" + str(1) + " " + "") self.osmosdr_sink_0.set_sample_rate(samp_rate) self.osmosdr_sink_0.set_center_freq(448.925e6, 0) self.osmosdr_sink_0.set_freq_corr(0, 0) self.osmosdr_sink_0.set_gain(14, 0) self.osmosdr_sink_0.set_if_gain(47, 0) self.osmosdr_sink_0.set_bb_gain(0, 0) self.osmosdr_sink_0.set_antenna("", 0) self.osmosdr_sink_0.set_bandwidth(0, 0) self.blocks_wavfile_source_1 = blocks.wavfile_source( "/home/ubuntu/kf7siv_testing.wav", True) self.analog_nbfm_tx_0 = analog.nbfm_tx( audio_rate=audio_samp, quad_rate=quad_rate, tau=75e-6, max_dev=5e3, ) ################################################## # Connections ################################################## self.connect((self.blocks_wavfile_source_1, 0), (self.analog_nbfm_tx_0, 0)) self.connect((self.analog_nbfm_tx_0, 0), (self.rational_resampler_xxx_0, 0)) self.connect((self.rational_resampler_xxx_0, 0), (self.osmosdr_sink_0, 0))
def __init__(self, context, mode, audio_rate=10000, rf_rate=20000): gr.hier_block2.__init__( self, type(self).__name__, gr.io_signature(1, 1, gr.sizeof_float * 1), gr.io_signature(1, 1, gr.sizeof_gr_complex * 1), ) self.__audio_rate = audio_rate self.__rf_rate = rf_rate self.connect( self, analog.nbfm_tx(audio_rate=audio_rate, quad_rate=rf_rate, tau=75e-6, max_dev=5e3), self)
def __init__(self, lo_freq, audio_rate, if_rate): gr.hier_block2.__init__( self, "build_fm", gr.io_signature(1, 1, gr.sizeof_float), gr.io_signature(1, 1, gr.sizeof_gr_complex) ) fmtx = analog.nbfm_tx(audio_rate, if_rate, max_dev=5e3, tau=75e-6) # Local oscillator lo = analog.sig_source_c( if_rate, analog.GR_SIN_WAVE, lo_freq, 1.0, 0 # sample rate # waveform type # frequency # amplitude ) # DC Offset mixer = blocks.multiply_cc() self.connect(self, fmtx, (mixer, 0)) self.connect(lo, (mixer, 1)) self.connect(mixer, self)
def __init__(self, lo_freq, audio_rate, if_rate): gr.hier_block2.__init__(self, "build_fm", gr.io_signature(1, 1, gr.sizeof_float), gr.io_signature(1, 1, gr.sizeof_gr_complex)) fmtx = analog.nbfm_tx(audio_rate, if_rate, max_dev=5e3, tau=75e-6, fh=0.925*if_rate/2.0) # Local oscillator lo = analog.sig_source_c(if_rate, # sample rate analog.GR_SIN_WAVE, # waveform type lo_freq, # frequency 1.0, # amplitude 0) # DC Offset mixer = blocks.multiply_cc() self.connect(self, fmtx, (mixer, 0)) self.connect(lo, (mixer, 1)) self.connect(mixer, self)
def __init__(self, frame, panel, vbox, argv): stdgui2.std_top_block.__init__(self, frame, panel, vbox, argv) #---------------------------------------------src block--------------------------------------------------------------- #self.usrp_out=uhd.usrp_sink() #这是用文件发送时 if use_wavfile: self.src = blocks.wavfile_source( '/home/sherl/git/Response_center/USRP/py_OfficialDoc/uhd/test_usrp.wav', True) print 'opening wav:', str(self.src.sample_rate()), str( self.src.channels()) #用声卡发送时 else: self.setaudiorate = 44100 self.src = audio.source(self.setaudiorate) ''' gnuradio.audio.sink(int sampling_rate, std::string const device_name, bool ok_to_block=True) → sink_sptr Creates a sink from an audio device. ''' #self.audio_sink = audio.sink(int (44.1e3), "default") #self.connect(src, audio_sink) #-----------------------------usrp_sink block-------------------------------------------------------! #"--args", type="string", default="" self.u = uhd.usrp_sink(device_addr="", stream_args=uhd.stream_args('fc32')) self.sw_interp = 6 if use_wavfile: self.audio_rate = self.src.sample_rate() else: self.audio_rate = self.setaudiorate # tep = self.audio_rate * self.sw_interp print 'setting sample rate:', tep self.u.set_samp_rate(tep) self.usrp_rate = self.u.get_samp_rate() print 'get sample rate:', str(self.usrp_rate) g = self.u.get_gain_range() self.gain = float(g.start() + g.stop()) / 2 + 20 print 'gain:', str(g.start()), ' --> end', ' at:', self.gain self.u.set_gain(self.gain, 0) self.ifrate = 102e6 #这里设定发送频率 r = self.u.set_center_freq(self.ifrate, 0) if r: print "Frequency =", eng_notation.num_to_str( self.u.get_center_freq()) else: print 'set frequency fail!!!' #self.sum = blocks.add_cc () #这里只有一个端口就行,不同于fm_tx4.py print('audio_rate, quad_rate:', self.audio_rate, self.usrp_rate) fmtx = analog.nbfm_tx(int(round( self.audio_rate, 0)), int(round( self.usrp_rate, 0))) #, max_dev=5e3, tau=75e-6, fh=0.925*self.usrp_rate/2.0 # Local oscillator本地振荡器 #src0 = analog.sig_source_f (sample_rate, analog.GR_SIN_WAVE, 350, ampl) lo = analog.sig_source_c( self.usrp_rate, # sample rate options.samp_rate 350e3 analog.GR_SIN_WAVE, # waveform type正弦信号 25e3, # frequency step = 25e3 offset = (0 * step, 1 * step, 1.0, # amplitude 幅值 0) # DC Offset self.mixer = blocks.multiply_cc() self.connect(self.src, fmtx, (self.mixer, 0)) self.connect(lo, (self.mixer, 1)) '''''' post_mod = fftsink2.fft_sink_c(panel, title="Post Modulation", fft_size=512, sample_rate=self.usrp_rate, y_per_div=20, ref_level=40) self.connect(self.mixer, post_mod) vbox.Add(post_mod.win, 1, wx.EXPAND) self.connect(self.mixer, self.u) #下面用于播放wav到声卡,调试用 '''
def __init__(self): gr.top_block.__init__(self, "Top Block") ################################################## # Variables ################################################## self.audio_rate = audio_rate = int(48e3) self.rtl_rate = rtl_rate = int(240e3) self.out_intermediary_rate = out_intermediary_rate = audio_rate*4 self.out_gain = out_gain = .25 self.out_frequency_offset = out_frequency_offset = -50e3 self.out_frequency = out_frequency = 145.521e6 self.out_audio_inverted = out_audio_inverted = True self.in_frequency_offset = in_frequency_offset = 0 self.in_frequency = in_frequency = 145.551e6 self.in_final_gain = in_final_gain = 0.5 self.in_decimation_factor = in_decimation_factor = 8 self.in_audio_inverted = in_audio_inverted = True self.hackrf_rate = hackrf_rate = 2e6 self.dstar_bandwidth = dstar_bandwidth = 6.5e3 ################################################## # Blocks ################################################## self.rtlsdr_source_0 = osmosdr.source( args="numchan=" + str(1) + " " + "" ) self.rtlsdr_source_0.set_sample_rate(rtl_rate) self.rtlsdr_source_0.set_center_freq(in_frequency+in_frequency_offset, 0) self.rtlsdr_source_0.set_freq_corr(69, 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(False, 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.rational_resampler_xxx_3 = filter.rational_resampler_ccc( interpolation=int(hackrf_rate), decimation=out_intermediary_rate, taps=None, fractional_bw=None, ) self.osmosdr_sink_0 = osmosdr.sink( args="numchan=" + str(1) + " " + "" ) self.osmosdr_sink_0.set_sample_rate(hackrf_rate) self.osmosdr_sink_0.set_center_freq(out_frequency-out_frequency_offset, 0) self.osmosdr_sink_0.set_freq_corr(4, 0) self.osmosdr_sink_0.set_gain(14, 0) self.osmosdr_sink_0.set_if_gain(0, 0) self.osmosdr_sink_0.set_bb_gain(0, 0) self.osmosdr_sink_0.set_antenna("0", 0) self.osmosdr_sink_0.set_bandwidth(100e3, 0) self.low_pass_filter_1 = filter.fir_filter_ccf(5, firdes.low_pass( 1, rtl_rate, dstar_bandwidth*2, 500, firdes.WIN_HAMMING, 6.76)) self.low_pass_filter_0 = filter.fir_filter_fff(1, firdes.low_pass( 1, audio_rate, dstar_bandwidth*2, 200, firdes.WIN_KAISER, 6.76)) self.freq_xlating_fft_filter_ccc_0 = filter.freq_xlating_fft_filter_ccc(1, (1, ), 0-out_frequency_offset, out_intermediary_rate) self.freq_xlating_fft_filter_ccc_0.set_nthreads(1) self.freq_xlating_fft_filter_ccc_0.declare_sample_delay(0) self.dc_blocker_xx_0 = filter.dc_blocker_ff(128, True) self.blocks_multiply_const_vxx_2 = blocks.multiply_const_vff(((-1 if out_audio_inverted else 1)*out_gain, )) self.blocks_multiply_const_vxx_1 = blocks.multiply_const_vff((0-in_final_gain if in_audio_inverted else in_final_gain, )) self.audio_source_0 = audio.source(audio_rate, "hw:10,1", True) self.audio_sink_1 = audio.sink(audio_rate, "plughw:11,0", True) self.analog_pwr_squelch_xx_1 = analog.pwr_squelch_cc(-30, 1, 1, False) self.analog_pwr_squelch_xx_0 = analog.pwr_squelch_ff(-60, 1, 1, True) self.analog_nbfm_tx_0 = analog.nbfm_tx( audio_rate=int(audio_rate), quad_rate=int(out_intermediary_rate), tau=0, max_dev=dstar_bandwidth, ) self.analog_nbfm_rx_0 = analog.nbfm_rx( audio_rate=audio_rate, quad_rate=audio_rate, tau=0.000000000000000000001, max_dev=dstar_bandwidth*2, ) ################################################## # Connections ################################################## self.connect((self.analog_nbfm_rx_0, 0), (self.blocks_multiply_const_vxx_1, 0)) self.connect((self.analog_nbfm_tx_0, 0), (self.freq_xlating_fft_filter_ccc_0, 0)) self.connect((self.analog_pwr_squelch_xx_0, 0), (self.blocks_multiply_const_vxx_2, 0)) self.connect((self.analog_pwr_squelch_xx_1, 0), (self.analog_nbfm_rx_0, 0)) self.connect((self.audio_source_0, 0), (self.dc_blocker_xx_0, 0)) self.connect((self.blocks_multiply_const_vxx_1, 0), (self.audio_sink_1, 0)) self.connect((self.blocks_multiply_const_vxx_2, 0), (self.low_pass_filter_0, 0)) self.connect((self.dc_blocker_xx_0, 0), (self.analog_pwr_squelch_xx_0, 0)) self.connect((self.freq_xlating_fft_filter_ccc_0, 0), (self.rational_resampler_xxx_3, 0)) self.connect((self.low_pass_filter_0, 0), (self.analog_nbfm_tx_0, 0)) self.connect((self.low_pass_filter_1, 0), (self.analog_pwr_squelch_xx_1, 0)) self.connect((self.rational_resampler_xxx_3, 0), (self.osmosdr_sink_0, 0)) self.connect((self.rtlsdr_source_0, 0), (self.low_pass_filter_1, 0))
def __init__(self): gr.top_block.__init__(self, "Lang Tx") ################################################## # Variables ################################################## self.PTT = PTT = False self.Mode = Mode = 0 self.MicGain = MicGain = 5.0 self.KEY = KEY = False self.Filt_Low = Filt_Low = 300 self.Filt_High = Filt_High = 3000 self.FMMIC = FMMIC = 50 ################################################## # Blocks ################################################## self.rational_resampler_xxx_0 = filter.rational_resampler_ccc( interpolation=11, decimation=1, taps=None, fractional_bw=None, ) self.pluto_sink_0 = iio.pluto_sink('ip:pluto.local', 1000000000, 528000, 2000000, 0x800, False, 0, '', True) self.blocks_mute_xx_0_0 = blocks.mute_cc(bool(not PTT)) self.blocks_multiply_xx_0 = blocks.multiply_vcc(1) self.blocks_multiply_const_vxx_4 = blocks.multiply_const_vcc( ((Mode < 4) or (Mode == 5), )) self.blocks_multiply_const_vxx_3 = blocks.multiply_const_vcc( (Mode == 4, )) self.blocks_multiply_const_vxx_0_0 = blocks.multiply_const_vff( (FMMIC / 10.0, )) self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vff( ((MicGain / 10.0) * (not (Mode == 2)) * (not (Mode == 3)), )) self.blocks_float_to_complex_0 = blocks.float_to_complex(1) self.blocks_add_xx_2 = blocks.add_vcc(1) self.blocks_add_const_vxx_0 = blocks.add_const_vcc( ((0.5 * int(Mode == 5)) + (int(Mode == 2) * KEY) + (int(Mode == 3) * KEY), )) self.band_pass_filter_1 = filter.fir_filter_fff( 1, firdes.band_pass(1, 48000, 200, 3000, 100, firdes.WIN_HAMMING, 6.76)) self.band_pass_filter_0_0 = filter.fir_filter_ccc( 1, firdes.complex_band_pass(1, 48000, Filt_Low, Filt_High, 100, firdes.WIN_HAMMING, 6.76)) self.audio_source_0 = audio.source(48000, "hw:CARD=Device,DEV=0", False) self.analog_sig_source_x_0 = analog.sig_source_c( 48000, analog.GR_COS_WAVE, 0, 1, 0) self.analog_nbfm_tx_0 = analog.nbfm_tx( audio_rate=48000, quad_rate=48000, tau=75e-6, max_dev=3000, fh=-1, ) self.analog_const_source_x_0 = analog.sig_source_f( 0, analog.GR_CONST_WAVE, 0, 0, 0) self.analog_agc2_xx_1 = analog.agc2_cc(1e-1, 1e-1, 1.3 - (0.65 * (int(Mode == 5))), 1.0) self.analog_agc2_xx_1.set_max_gain(10) ################################################## # Connections ################################################## self.connect((self.analog_agc2_xx_1, 0), (self.band_pass_filter_0_0, 0)) self.connect((self.analog_const_source_x_0, 0), (self.blocks_float_to_complex_0, 1)) self.connect((self.analog_nbfm_tx_0, 0), (self.blocks_multiply_const_vxx_3, 0)) self.connect((self.analog_sig_source_x_0, 0), (self.blocks_multiply_xx_0, 1)) self.connect((self.audio_source_0, 0), (self.blocks_multiply_const_vxx_0, 0)) self.connect((self.audio_source_0, 0), (self.blocks_multiply_const_vxx_0_0, 0)) self.connect((self.band_pass_filter_0_0, 0), (self.blocks_multiply_const_vxx_4, 0)) self.connect((self.band_pass_filter_1, 0), (self.analog_nbfm_tx_0, 0)) self.connect((self.blocks_add_const_vxx_0, 0), (self.blocks_multiply_xx_0, 0)) self.connect((self.blocks_add_xx_2, 0), (self.rational_resampler_xxx_0, 0)) self.connect((self.blocks_float_to_complex_0, 0), (self.blocks_add_const_vxx_0, 0)) self.connect((self.blocks_multiply_const_vxx_0, 0), (self.blocks_float_to_complex_0, 0)) self.connect((self.blocks_multiply_const_vxx_0_0, 0), (self.band_pass_filter_1, 0)) self.connect((self.blocks_multiply_const_vxx_3, 0), (self.blocks_add_xx_2, 0)) self.connect((self.blocks_multiply_const_vxx_4, 0), (self.blocks_add_xx_2, 1)) self.connect((self.blocks_multiply_xx_0, 0), (self.analog_agc2_xx_1, 0)) self.connect((self.blocks_mute_xx_0_0, 0), (self.pluto_sink_0, 0)) self.connect((self.rational_resampler_xxx_0, 0), (self.blocks_mute_xx_0_0, 0))
def __init__(self): grc_wxgui.top_block_gui.__init__(self, title="B200 VHF NBFM transceiver") _icon_path = "/usr/share/icons/hicolor/32x32/apps/gnuradio-grc.png" self.SetIcon(wx.Icon(_icon_path, wx.BITMAP_TYPE_ANY)) ################################################## # Variables ################################################## self.tx_rx_choice = tx_rx_choice = 1 self.tx_gain = tx_gain = .615 self.tune_minus_20 = tune_minus_20 = 0 self.tune_minus_10 = tune_minus_10 = 0 self.tune_20 = tune_20 = 0 self.tune_10 = tune_10 = 0 self.tone = tone = 100 self.squelch = squelch = -70.32 self.samp_rate = samp_rate = 4000000 self.rx_offset = rx_offset = 0 self.rit_tune = rit_tune = 0 self.offset = offset = 600000 self.chooser_fm = chooser_fm = 147.34e6 self.audio_gain = audio_gain = .7 ################################################## # Blocks ################################################## self._tx_rx_choice_chooser = forms.button( parent=self.GetWin(), value=self.tx_rx_choice, callback=self.set_tx_rx_choice, label="TX-RX", choices=[0, 1], labels=['TX', 'RX'], ) self.GridAdd(self._tx_rx_choice_chooser, 0, 3, 1, 1) _tx_gain_sizer = wx.BoxSizer(wx.VERTICAL) self._tx_gain_text_box = forms.text_box( parent=self.GetWin(), sizer=_tx_gain_sizer, value=self.tx_gain, callback=self.set_tx_gain, label="TX Gain: 144= .6, 220= .70, 440= .72", converter=forms.float_converter(), proportion=0, ) self._tx_gain_slider = forms.slider( parent=self.GetWin(), sizer=_tx_gain_sizer, value=self.tx_gain, callback=self.set_tx_gain, minimum=.6, maximum=.75, num_steps=1000, style=wx.SL_HORIZONTAL, cast=float, proportion=1, ) self.Add(_tx_gain_sizer) self._tune_minus_20_chooser = forms.button( parent=self.GetWin(), value=self.tune_minus_20, callback=self.set_tune_minus_20, label="-20 Tune", choices=[0, 20e3, 40e3, 60e3, 80e3, 100e3, 120e3, 140e3, 0], labels=[0, -20, -40, -60, -80, -100, -120, -140, 0], ) self.GridAdd(self._tune_minus_20_chooser, 0, 1, 1, 1) self._tune_minus_10_chooser = forms.button( parent=self.GetWin(), value=self.tune_minus_10, callback=self.set_tune_minus_10, label="-10 Tune", choices=[0,-10e3, -20e3, -30e3, -40e3,-50e3,0], labels=[0, -10, -20, -30, -40,-50,0], ) self.GridAdd(self._tune_minus_10_chooser, 1, 1, 1, 1) self._tune_20_chooser = forms.button( parent=self.GetWin(), value=self.tune_20, callback=self.set_tune_20, label="+20 Tune", choices=[0, 20e3, 40e3, 60e3, 80e3, 100e3, 120e3, 140e3,0], labels=[0, '+20', '+40', '+60', '+80', '+100', '+120', '+140','0'], ) self.GridAdd(self._tune_20_chooser, 0, 0, 1, 1) self._tune_10_chooser = forms.button( parent=self.GetWin(), value=self.tune_10, callback=self.set_tune_10, label="+10 Tune", choices=[0,10e3, 20e3, 30e3, 40e3,50e3,0], labels=[0,'+10', '+20', '+30', '+40','+50','0'], ) self.GridAdd(self._tune_10_chooser, 1, 0, 1, 1) self._tone_chooser = forms.radio_buttons( parent=self.GetWin(), value=self.tone, callback=self.set_tone, label="CTCSS", choices=[100,103.5, 110.9, 118.8, 123.0,127.3,179.5], labels=['100', '103.5', '110.9','118.8', '123.0', '127.3','179.5'], style=wx.RA_HORIZONTAL, ) self.GridAdd(self._tone_chooser, 0, 5, 1, 1) _squelch_sizer = wx.BoxSizer(wx.VERTICAL) self._squelch_text_box = forms.text_box( parent=self.GetWin(), sizer=_squelch_sizer, value=self.squelch, callback=self.set_squelch, label="Squelch", converter=forms.float_converter(), proportion=0, ) self._squelch_slider = forms.slider( parent=self.GetWin(), sizer=_squelch_sizer, value=self.squelch, callback=self.set_squelch, minimum=-95, maximum=-55, num_steps=1000, style=wx.SL_HORIZONTAL, cast=float, proportion=1, ) self.GridAdd(_squelch_sizer, 0, 6, 1, 1) self._rx_offset_chooser = forms.radio_buttons( parent=self.GetWin(), value=self.rx_offset, callback=self.set_rx_offset, label="RX offset", choices=[0, 600000, -600000,5e6], labels=['0', '+', '-','+5M'], style=wx.RA_HORIZONTAL, ) self.GridAdd(self._rx_offset_chooser, 1, 6, 1, 1) _rit_tune_sizer = wx.BoxSizer(wx.VERTICAL) self._rit_tune_text_box = forms.text_box( parent=self.GetWin(), sizer=_rit_tune_sizer, value=self.rit_tune, callback=self.set_rit_tune, label="RIT", converter=forms.float_converter(), proportion=0, ) self._rit_tune_slider = forms.slider( parent=self.GetWin(), sizer=_rit_tune_sizer, value=self.rit_tune, callback=self.set_rit_tune, minimum=-30e3, maximum=+30e3, num_steps=1000, style=wx.SL_HORIZONTAL, cast=float, proportion=1, ) self.GridAdd(_rit_tune_sizer, 1, 2, 1, 3) self._offset_chooser = forms.radio_buttons( parent=self.GetWin(), value=self.offset, callback=self.set_offset, label="TX offset", choices=[600000, -600000, 0,5e6], labels=['+', '-', '0','5MHz'], style=wx.RA_HORIZONTAL, ) self.GridAdd(self._offset_chooser, 0, 4, 1, 1) self._chooser_fm_chooser = forms.radio_buttons( parent=self.GetWin(), value=self.chooser_fm, callback=self.set_chooser_fm, label="Preset", choices=[145.13e6,145.33e6, 145.88e6, 146.46e6, 146.49e6, 146.52e6,146.58e6, 146.64e6,146.74e6, 146.82e6, 146.86e6, 146.92e6, 146.96e6, 147.0e6,147.06e6, 147.08e6, 147.20e6, 147.22e6, 147.34e6, 223.5e6,441.825e6, 432.25e6], labels=[145.13,145.33, 145.88, 146.46, 146.49, 146.52, 146.58, 146.64, 146.74, 146.82, 146.860, 146.92, 146.96, 147.00, 147.06, 147.08,147.200, 147.220, 147.34, 223.5,441.825, 432.25], style=wx.RA_HORIZONTAL, ) self.Add(self._chooser_fm_chooser) _audio_gain_sizer = wx.BoxSizer(wx.VERTICAL) self._audio_gain_text_box = forms.text_box( parent=self.GetWin(), sizer=_audio_gain_sizer, value=self.audio_gain, callback=self.set_audio_gain, label="Audio gain", converter=forms.float_converter(), proportion=0, ) self._audio_gain_slider = forms.slider( parent=self.GetWin(), sizer=_audio_gain_sizer, value=self.audio_gain, callback=self.set_audio_gain, minimum=.1, maximum=4, num_steps=1000, style=wx.SL_HORIZONTAL, cast=float, proportion=1, ) self.GridAdd(_audio_gain_sizer, 0, 2, 1, 1) self.wxgui_fftsink2_0 = fftsink2.fft_sink_c( self.GetWin(), baseband_freq=(((((chooser_fm+tune_20)-tune_minus_20)+tune_10)+tune_minus_10)+rx_offset), y_per_div=5, y_divs=16, ref_level=-55, ref_scale=2.0, sample_rate=samp_rate/2, fft_size=1024*0+2048*0+4096, fft_rate=12, average=True, avg_alpha=.4, title="RF Bandpass", peak_hold=False, ) self.GridAdd(self.wxgui_fftsink2_0.win, 2, 0, 5, 14) 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((((((chooser_fm+tune_20)-tune_minus_20)+tune_10)+tune_minus_10)+rx_offset)-10e3, 0) self.uhd_usrp_source_0.set_normalized_gain(.520*.8, 0) self.uhd_usrp_source_0.set_antenna("RX2", 0) self.uhd_usrp_source_0.set_bandwidth(1.99e6, 0) self.uhd_usrp_sink_1 = uhd.usrp_sink( ",".join(("", "")), uhd.stream_args( cpu_format="fc32", channels=range(1), ), ) self.uhd_usrp_sink_1.set_samp_rate(320000) self.uhd_usrp_sink_1.set_center_freq((((((chooser_fm+offset)+tune_20)-tune_minus_20)+tune_10)+tune_minus_10)+rit_tune, 0) self.uhd_usrp_sink_1.set_normalized_gain((.83*0+.72)*0+tx_gain, 0) self.uhd_usrp_sink_1.set_antenna("TX/RX", 0) self.uhd_usrp_sink_1.set_bandwidth(200000, 0) self.rational_resampler_xxx_1 = filter.rational_resampler_ccc( interpolation=32000, decimation=40000, taps=None, fractional_bw=None, ) self.rational_resampler_xxx_0 = filter.rational_resampler_ccc( interpolation=samp_rate/2, decimation=samp_rate, taps=None, fractional_bw=None, ) self.pfb_decimator_ccf_0 = pfb.decimator_ccf( 2, (firdes.low_pass(.1, (samp_rate), (samp_rate)/4.05,10e3)), 0, 100, True, True) self.pfb_decimator_ccf_0.declare_sample_delay(0) self.low_pass_filter_1 = filter.fir_filter_fff(1, firdes.low_pass( 1, 32000, 4400, 300, firdes.WIN_HAMMING, 6.76)) self.low_pass_filter_0 = filter.fir_filter_fff(1, firdes.low_pass( 1, 32000, 4500, 600, firdes.WIN_HAMMING, 6.76)) self.high_pass_filter_0 = filter.fir_filter_fff(1, firdes.high_pass( 1, 32000, 300, 100, firdes.WIN_HAMMING, 6.76)) self.freq_xlating_fir_filter_xxx_0 = filter.freq_xlating_fir_filter_ccc(50, (firdes.low_pass(1,samp_rate/2,18e3,600)), 0+rit_tune+10e3, samp_rate/2) self.blocks_null_source_0 = blocks.null_source(gr.sizeof_gr_complex*1) self.blocks_multiply_const_vxx_2 = blocks.multiply_const_vcc((.8, )) self.blocks_multiply_const_vxx_1 = blocks.multiply_const_vff((125, )) self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vff((audio_gain*tx_rx_choice, )) self.blocks_add_xx_1 = blocks.add_vff(1) self.blks2_selector_0_1 = grc_blks2.selector( item_size=gr.sizeof_gr_complex*1, num_inputs=2, num_outputs=1, input_index=1+(tx_rx_choice), output_index=0, ) self.audio_source_1 = audio.source(32000, "", True) self.audio_sink_0 = audio.sink(32000, "", True) self.analog_simple_squelch_cc_0 = analog.simple_squelch_cc(squelch, .0001) self.analog_sig_source_x_0 = analog.sig_source_f(32000, analog.GR_COS_WAVE, tone, .091, 0) self.analog_nbfm_tx_1 = analog.nbfm_tx( audio_rate=32000, quad_rate=320000, tau=(75e-6)*0+90e-6, max_dev=5e3, ) self.analog_nbfm_rx_0 = analog.nbfm_rx( audio_rate=32000, quad_rate=32000, tau=75e-6, max_dev=5e3, ) self.analog_fm_preemph_0 = analog.fm_preemph(fs=32e3, tau=75e-6) self.analog_fm_deemph_0 = analog.fm_deemph(fs=32000, tau=75e-6) ################################################## # Connections ################################################## self.connect((self.analog_fm_deemph_0, 0), (self.low_pass_filter_1, 0)) self.connect((self.analog_fm_preemph_0, 0), (self.blocks_add_xx_1, 0)) self.connect((self.analog_nbfm_rx_0, 0), (self.analog_fm_deemph_0, 0)) self.connect((self.analog_nbfm_tx_1, 0), (self.blocks_multiply_const_vxx_2, 0)) self.connect((self.analog_sig_source_x_0, 0), (self.blocks_add_xx_1, 1)) self.connect((self.analog_simple_squelch_cc_0, 0), (self.rational_resampler_xxx_1, 0)) self.connect((self.audio_source_1, 0), (self.blocks_multiply_const_vxx_1, 0)) self.connect((self.blks2_selector_0_1, 0), (self.uhd_usrp_sink_1, 0)) self.connect((self.blocks_add_xx_1, 0), (self.analog_nbfm_tx_1, 0)) self.connect((self.blocks_multiply_const_vxx_0, 0), (self.audio_sink_0, 0)) self.connect((self.blocks_multiply_const_vxx_1, 0), (self.high_pass_filter_0, 0)) self.connect((self.blocks_multiply_const_vxx_2, 0), (self.blks2_selector_0_1, 1)) self.connect((self.blocks_null_source_0, 0), (self.blks2_selector_0_1, 0)) self.connect((self.freq_xlating_fir_filter_xxx_0, 0), (self.analog_simple_squelch_cc_0, 0)) self.connect((self.high_pass_filter_0, 0), (self.low_pass_filter_0, 0)) self.connect((self.low_pass_filter_0, 0), (self.analog_fm_preemph_0, 0)) self.connect((self.low_pass_filter_1, 0), (self.blocks_multiply_const_vxx_0, 0)) self.connect((self.pfb_decimator_ccf_0, 0), (self.wxgui_fftsink2_0, 0)) self.connect((self.rational_resampler_xxx_0, 0), (self.freq_xlating_fir_filter_xxx_0, 0)) self.connect((self.rational_resampler_xxx_1, 0), (self.analog_nbfm_rx_0, 0)) self.connect((self.uhd_usrp_source_0, 0), (self.pfb_decimator_ccf_0, 0)) self.connect((self.uhd_usrp_source_0, 0), (self.rational_resampler_xxx_0, 0))
def __init__(self, fsk_dev=10000, lpf_cutoff=10e3, lpf_trans=1e3): gr.top_block.__init__(self, "Afsk Test") Qt.QWidget.__init__(self) self.setWindowTitle("Afsk Test") 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", "afsk_test") self.restoreGeometry(self.settings.value("geometry").toByteArray()) ################################################## # Parameters ################################################## self.fsk_dev = fsk_dev self.lpf_cutoff = lpf_cutoff self.lpf_trans = lpf_trans ################################################## # Variables ################################################## self.samp_rate = samp_rate = 48000 self.baud = baud = 1200 self.samps_per_symb = samps_per_symb = int(samp_rate/baud) self.noise_amp = noise_amp = 0.3 self.mult = mult = (samp_rate)/2/3.141593 self.decim = decim = 2 self.bb_gain = bb_gain = .75 self.alpha = alpha = 0.5 ################################################## # Blocks ################################################## self._noise_amp_range = Range(0, 1, 0.005, 0.3, 200) self._noise_amp_win = RangeWidget(self._noise_amp_range, self.set_noise_amp, "noise_amp", "counter_slider", float) self.top_grid_layout.addWidget(self._noise_amp_win, 6,0,1,4) self._bb_gain_range = Range(0, 1, .01, .75, 200) self._bb_gain_win = RangeWidget(self._bb_gain_range, self.set_bb_gain, 'bb_gain', "counter_slider", float) self.top_grid_layout.addWidget(self._bb_gain_win, 5,0,1,4) self.rational_resampler_xxx_0 = filter.rational_resampler_ccc( interpolation=1, decimation=decim, taps=None, fractional_bw=None, ) self.qtgui_waterfall_sink_x_0 = qtgui.waterfall_sink_f( 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.10) 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 "float" == "float" or "float" == "msg_float": self.qtgui_waterfall_sink_x_0.set_plot_pos_half(not False) 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_1 = qtgui.time_sink_f( 8192, #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(-1, True) self.qtgui_time_sink_x_1.set_trigger_mode(qtgui.TRIG_MODE_FREE, qtgui.TRIG_SLOPE_POS, 0.0, 0, 0, "") self.qtgui_time_sink_x_1.enable_autoscale(False) self.qtgui_time_sink_x_1.enable_grid(False) self.qtgui_time_sink_x_1.enable_axis_labels(True) self.qtgui_time_sink_x_1.enable_control_panel(False) self.qtgui_time_sink_x_1.enable_stem_plot(False) if not True: self.qtgui_time_sink_x_1.disable_legend() labels = ['', '', '', '', '', '', '', '', '', ''] widths = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1] colors = ["blue", "red", "green", "black", "cyan", "magenta", "yellow", "dark red", "dark green", "blue"] styles = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1] markers = [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1] alphas = [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0] for i in xrange(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.top_layout.addWidget(self._qtgui_time_sink_x_1_win) self.qtgui_time_sink_x_0 = qtgui.time_sink_f( 2048, #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(-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(True) self.qtgui_time_sink_x_0.enable_grid(True) 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(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, 4,4,3,4) self.qtgui_freq_sink_x_1_0 = qtgui.freq_sink_c( 1024, #size firdes.WIN_BLACKMAN_hARRIS, #wintype 0, #fc samp_rate/decim, #bw "RX Spectrum", #name 1 #number of inputs ) self.qtgui_freq_sink_x_1_0.set_update_time(0.10) self.qtgui_freq_sink_x_1_0.set_y_axis(-80, 10) self.qtgui_freq_sink_x_1_0.set_y_label('Relative Gain', 'dB') self.qtgui_freq_sink_x_1_0.set_trigger_mode(qtgui.TRIG_MODE_FREE, 0.0, 0, "") self.qtgui_freq_sink_x_1_0.enable_autoscale(False) self.qtgui_freq_sink_x_1_0.enable_grid(True) self.qtgui_freq_sink_x_1_0.set_fft_average(1.0) self.qtgui_freq_sink_x_1_0.enable_axis_labels(True) self.qtgui_freq_sink_x_1_0.enable_control_panel(False) if not False: self.qtgui_freq_sink_x_1_0.disable_legend() if "complex" == "float" or "complex" == "msg_float": self.qtgui_freq_sink_x_1_0.set_plot_pos_half(not True) labels = ['', '', '', '', '', '', '', '', '', ''] widths = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1] colors = ["blue", "red", "green", "black", "cyan", "magenta", "yellow", "dark red", "dark green", "dark blue"] alphas = [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0] for i in xrange(1): if len(labels[i]) == 0: self.qtgui_freq_sink_x_1_0.set_line_label(i, "Data {0}".format(i)) else: self.qtgui_freq_sink_x_1_0.set_line_label(i, labels[i]) self.qtgui_freq_sink_x_1_0.set_line_width(i, widths[i]) self.qtgui_freq_sink_x_1_0.set_line_color(i, colors[i]) self.qtgui_freq_sink_x_1_0.set_line_alpha(i, alphas[i]) self._qtgui_freq_sink_x_1_0_win = sip.wrapinstance(self.qtgui_freq_sink_x_1_0.pyqwidget(), Qt.QWidget) self.top_grid_layout.addWidget(self._qtgui_freq_sink_x_1_0_win, 0,4,4,4) self.qtgui_freq_sink_x_1 = 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_1.set_update_time(0.10) self.qtgui_freq_sink_x_1.set_y_axis(-140, 10) self.qtgui_freq_sink_x_1.set_y_label('Relative Gain', 'dB') self.qtgui_freq_sink_x_1.set_trigger_mode(qtgui.TRIG_MODE_FREE, 0.0, 0, "") self.qtgui_freq_sink_x_1.enable_autoscale(True) self.qtgui_freq_sink_x_1.enable_grid(True) 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 False: 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, 0,0,4,4) self.pyqt_text_output_0 = pyqt.text_output() self._pyqt_text_output_0_win = self.pyqt_text_output_0; self.top_layout.addWidget(self._pyqt_text_output_0_win) self.pyqt_text_input_0 = pyqt.text_input() self._pyqt_text_input_0_win = self.pyqt_text_input_0; self.top_grid_layout.addWidget(self._pyqt_text_input_0_win, 4,0,1,4) self.low_pass_filter_0 = filter.fir_filter_ccf(1, firdes.low_pass( 1, samp_rate/decim, lpf_cutoff, lpf_trans, firdes.WIN_HAMMING, 6.76)) self.kiss_nrzi_encode_0 = kiss.nrzi_encode() self.kiss_hdlc_framer_0 = kiss.hdlc_framer(preamble_bytes=64, postamble_bytes=16) self.kiss_hdlc_deframer_0 = kiss.hdlc_deframer(check_fcs=True, max_length=300) self.digital_gfsk_mod_0 = digital.gfsk_mod( samples_per_symbol=samps_per_symb, sensitivity=0.06, bt=1, verbose=False, log=False, ) self.digital_descrambler_bb_0 = digital.descrambler_bb(0x21, 0, 16) self.digital_clock_recovery_mm_xx_0 = digital.clock_recovery_mm_ff(samps_per_symb*(1+0.0)/decim, 0.25*0.175*0.175, 0.25, 0.175, 0.005) self.digital_binary_slicer_fb_0 = digital.binary_slicer_fb() self.blocks_tag_gate_0 = blocks.tag_gate(gr.sizeof_gr_complex * 1, False) self.blocks_tag_gate_0.set_single_key("packet_len") self.blocks_socket_pdu_0_2 = blocks.socket_pdu("UDP_SERVER", '0.0.0.0', '52002', 1024, False) self.blocks_pdu_to_tagged_stream_0_0 = blocks.pdu_to_tagged_stream(blocks.byte_t, 'packet_len') self.blocks_pack_k_bits_bb_0 = blocks.pack_k_bits_bb(8) self.blocks_multiply_xx_0 = blocks.multiply_vff(1) self.blocks_multiply_const_vxx_0_0 = blocks.multiply_const_vcc((bb_gain, )) self.blocks_complex_to_real_0 = blocks.complex_to_real(1) self.blocks_add_xx_1 = blocks.add_vcc(1) self.audio_sink_0 = audio.sink(samp_rate, '', True) self.analog_sig_source_x_0 = analog.sig_source_f(samp_rate, analog.GR_COS_WAVE, 1700, 1, 0) self.analog_quadrature_demod_cf_1 = analog.quadrature_demod_cf((samp_rate/decim)/(2*math.pi*fsk_dev/8.0)) self.analog_nbfm_tx_0 = analog.nbfm_tx( audio_rate=samp_rate, quad_rate=samp_rate, tau=75e-6, max_dev=5e3, fh=-1.0, ) self.analog_fastnoise_source_x_0 = analog.fastnoise_source_c(analog.GR_GAUSSIAN, noise_amp, 0, 8192) self.analog_agc2_xx_0 = analog.agc2_cc(1e-1, 1e-2, 1.0, 1.0) self.analog_agc2_xx_0.set_max_gain(65536) ################################################## # Connections ################################################## self.msg_connect((self.blocks_socket_pdu_0_2, 'pdus'), (self.kiss_hdlc_framer_0, 'in')) self.msg_connect((self.kiss_hdlc_deframer_0, 'out'), (self.blocks_socket_pdu_0_2, 'pdus')) self.msg_connect((self.kiss_hdlc_deframer_0, 'out'), (self.pyqt_text_output_0, 'pdus')) self.msg_connect((self.kiss_hdlc_framer_0, 'out'), (self.blocks_pdu_to_tagged_stream_0_0, 'pdus')) self.msg_connect((self.pyqt_text_input_0, 'pdus'), (self.kiss_hdlc_framer_0, 'in')) self.connect((self.analog_agc2_xx_0, 0), (self.rational_resampler_xxx_0, 0)) self.connect((self.analog_fastnoise_source_x_0, 0), (self.blocks_add_xx_1, 0)) self.connect((self.analog_nbfm_tx_0, 0), (self.blocks_add_xx_1, 1)) self.connect((self.analog_quadrature_demod_cf_1, 0), (self.digital_clock_recovery_mm_xx_0, 0)) self.connect((self.analog_quadrature_demod_cf_1, 0), (self.qtgui_time_sink_x_0, 0)) self.connect((self.analog_sig_source_x_0, 0), (self.blocks_multiply_xx_0, 1)) self.connect((self.blocks_add_xx_1, 0), (self.analog_agc2_xx_0, 0)) self.connect((self.blocks_add_xx_1, 0), (self.qtgui_freq_sink_x_1, 0)) self.connect((self.blocks_complex_to_real_0, 0), (self.blocks_multiply_xx_0, 0)) self.connect((self.blocks_complex_to_real_0, 0), (self.qtgui_time_sink_x_1, 0)) self.connect((self.blocks_multiply_const_vxx_0_0, 0), (self.blocks_complex_to_real_0, 0)) self.connect((self.blocks_multiply_xx_0, 0), (self.analog_nbfm_tx_0, 0)) self.connect((self.blocks_multiply_xx_0, 0), (self.audio_sink_0, 0)) self.connect((self.blocks_multiply_xx_0, 0), (self.qtgui_waterfall_sink_x_0, 0)) self.connect((self.blocks_pack_k_bits_bb_0, 0), (self.digital_gfsk_mod_0, 0)) self.connect((self.blocks_pdu_to_tagged_stream_0_0, 0), (self.kiss_nrzi_encode_0, 0)) self.connect((self.blocks_tag_gate_0, 0), (self.blocks_multiply_const_vxx_0_0, 0)) self.connect((self.digital_binary_slicer_fb_0, 0), (self.digital_descrambler_bb_0, 0)) self.connect((self.digital_clock_recovery_mm_xx_0, 0), (self.digital_binary_slicer_fb_0, 0)) self.connect((self.digital_descrambler_bb_0, 0), (self.kiss_hdlc_deframer_0, 0)) self.connect((self.digital_gfsk_mod_0, 0), (self.blocks_tag_gate_0, 0)) self.connect((self.kiss_nrzi_encode_0, 0), (self.blocks_pack_k_bits_bb_0, 0)) self.connect((self.low_pass_filter_0, 0), (self.analog_quadrature_demod_cf_1, 0)) self.connect((self.low_pass_filter_0, 0), (self.qtgui_freq_sink_x_1_0, 0)) self.connect((self.rational_resampler_xxx_0, 0), (self.low_pass_filter_0, 0))
def __init__(self, args, spec, antenna, gain, audio_input): gr.hier_block2.__init__(self, "transmit_path", gr.io_signature(0, 0, 0), # Input signature gr.io_signature(0, 0, 0)) # Output signature self.u = uhd.usrp_sink(device_addr=args, stream_args=uhd.stream_args('fc32')) # Set the subdevice spec if(spec): self.u.set_subdev_spec(spec, 0) # Set the antenna if(antenna): self.u.set_antenna(antenna, 0) self.if_rate = 320e3 self.audio_rate = 32e3 self.u.set_samp_rate(self.if_rate) dev_rate = self.u.get_samp_rate() self.audio_gain = 10 self.normal_gain = 32000 self.audio = audio.source(int(self.audio_rate), audio_input) self.audio_amp = blocks.multiply_const_ff(self.audio_gain) lpf = filter.firdes.low_pass(1, # gain self.audio_rate, # sampling rate 3800, # low pass cutoff freq 300, # width of trans. band filter.firdes.WIN_HANN) # filter type hpf = filter.firdes.high_pass(1, # gain self.audio_rate, # sampling rate 325, # low pass cutoff freq 50, # width of trans. band filter.firdes.WIN_HANN) # filter type audio_taps = convolve(array(lpf),array(hpf)) self.audio_filt = filter.fir_filter_fff(1,audio_taps) self.pl = analog.ctcss_gen_f(self.audio_rate,123.0) self.add_pl = blocks.add_ff() self.connect(self.pl,(self.add_pl,1)) self.fmtx = analog.nbfm_tx(self.audio_rate, self.if_rate) self.amp = blocks.multiply_const_cc (self.normal_gain) rrate = dev_rate / self.if_rate self.resamp = filter.pfb.arb_resampler_ccf(rrate) self.connect(self.audio, self.audio_amp, self.audio_filt, (self.add_pl,0), self.fmtx, self.amp, self.resamp, self.u) if gain is None: # if no gain was specified, use the mid-point in dB g = self.u.get_gain_range() gain = float(g.start() + g.stop())/2.0 self.set_gain(gain) self.set_enable(False)
def __init__(self): gr.top_block.__init__(self, "NFM-WFM-Transmitter") Qt.QWidget.__init__(self) self.setWindowTitle("NFM-WFM-Transmitter") 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", "nfm_wfm_transmitter") self.restoreGeometry(self.settings.value("geometry").toByteArray()) ################################################## # Variables ################################################## self.samp_rate = samp_rate = 8e6 self.nfm = nfm = 1 self.gain = gain = 0.1 self.freq = freq = 145.75e6 self.audio_rate = audio_rate = 48000 ################################################## # Blocks ################################################## _nfm_check_box = Qt.QCheckBox('WFM') self._nfm_choices = {True: 1, False: 0} self._nfm_choices_inv = dict((v,k) for k,v in self._nfm_choices.iteritems()) self._nfm_callback = lambda i: Qt.QMetaObject.invokeMethod(_nfm_check_box, "setChecked", Qt.Q_ARG("bool", self._nfm_choices_inv[i])) self._nfm_callback(self.nfm) _nfm_check_box.stateChanged.connect(lambda i: self.set_nfm(self._nfm_choices[bool(i)])) self.top_grid_layout.addWidget(_nfm_check_box) self._gain_range = Range(0, 1, 0.01, 0.1, 200) self._gain_win = RangeWidget(self._gain_range, self.set_gain, 'Input gain', "counter_slider", float) self.top_grid_layout.addWidget(self._gain_win) self._freq_tool_bar = Qt.QToolBar(self) self._freq_tool_bar.addWidget(Qt.QLabel('Frequency'+": ")) self._freq_line_edit = Qt.QLineEdit(str(self.freq)) self._freq_tool_bar.addWidget(self._freq_line_edit) self._freq_line_edit.returnPressed.connect( lambda: self.set_freq(eng_notation.str_to_num(str(self._freq_line_edit.text().toAscii())))) self.top_grid_layout.addWidget(self._freq_tool_bar) self.rational_resampler_xxx_0 = filter.rational_resampler_ccc( interpolation=500, decimation=6, taps=None, fractional_bw=None, ) self.osmosdr_sink_0 = osmosdr.sink( args="numchan=" + str(1) + " " + 'hackrf=0000000000000000a27466e62362050f' ) self.osmosdr_sink_0.set_sample_rate(samp_rate) self.osmosdr_sink_0.set_center_freq(freq, 0) self.osmosdr_sink_0.set_freq_corr(0, 0) self.osmosdr_sink_0.set_gain(0, 0) self.osmosdr_sink_0.set_if_gain(20, 0) self.osmosdr_sink_0.set_bb_gain(0, 0) self.osmosdr_sink_0.set_antenna('', 0) self.osmosdr_sink_0.set_bandwidth(0, 0) self.blocks_wavfile_source_0 = blocks.wavfile_source('D:\\Test-WAV.wav', True) self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vff((gain, )) self.blks2_selector_0_0 = grc_blks2.selector( item_size=gr.sizeof_gr_complex*1, num_inputs=2, num_outputs=1, input_index=nfm, output_index=0, ) self.blks2_selector_0 = grc_blks2.selector( item_size=gr.sizeof_float*1, num_inputs=1, num_outputs=2, input_index=0, output_index=nfm, ) self.analog_wfm_tx_0 = analog.wfm_tx( audio_rate=audio_rate, quad_rate=audio_rate*2, tau=75e-6, max_dev=100e3, fh=-1.0, ) self.analog_nbfm_tx_0 = analog.nbfm_tx( audio_rate=audio_rate, quad_rate=audio_rate*2, tau=75e-6, max_dev=5e3, fh=-1.0, ) ################################################## # Connections ################################################## self.connect((self.analog_nbfm_tx_0, 0), (self.blks2_selector_0_0, 0)) self.connect((self.analog_wfm_tx_0, 0), (self.blks2_selector_0_0, 1)) self.connect((self.blks2_selector_0, 0), (self.analog_nbfm_tx_0, 0)) self.connect((self.blks2_selector_0, 1), (self.analog_wfm_tx_0, 0)) self.connect((self.blks2_selector_0_0, 0), (self.rational_resampler_xxx_0, 0)) self.connect((self.blocks_multiply_const_vxx_0, 0), (self.blks2_selector_0, 0)) self.connect((self.blocks_wavfile_source_0, 0), (self.blocks_multiply_const_vxx_0, 0)) self.connect((self.rational_resampler_xxx_0, 0), (self.osmosdr_sink_0, 0))
def __init__(self): gr.top_block.__init__(self, "afsk_tx_simulation") Qt.QWidget.__init__(self) self.setWindowTitle("afsk_tx_simulation") 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", "afsk_tx_simulation") 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.samp_rate_audio = samp_rate_audio = 48000 self.samp_rate = samp_rate = samp_rate_audio*4 ################################################## # Blocks ################################################## self.qtgui_time_sink_x_0_0 = qtgui.time_sink_c( 32768*4, #size samp_rate, #samp_rate "", #name 1 #number of inputs ) self.qtgui_time_sink_x_0_0.set_update_time(0.10) self.qtgui_time_sink_x_0_0.set_y_axis(-1, 1) self.qtgui_time_sink_x_0_0.set_y_label('Amplitude', "") self.qtgui_time_sink_x_0_0.enable_tags(True) self.qtgui_time_sink_x_0_0.set_trigger_mode(qtgui.TRIG_MODE_TAG, qtgui.TRIG_SLOPE_POS, 0.0, 0, 0, 'packet_len') 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_axis_labels(True) self.qtgui_time_sink_x_0_0.enable_control_panel(False) self.qtgui_time_sink_x_0_0.enable_stem_plot(False) 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(2): if len(labels[i]) == 0: if (i % 2 == 0): self.qtgui_time_sink_x_0_0.set_line_label(i, "Re{{Data {0}}}".format(i/2)) else: self.qtgui_time_sink_x_0_0.set_line_label(i, "Im{{Data {0}}}".format(i/2)) 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) self.qtgui_time_sink_x_0 = qtgui.time_sink_f( 32768, #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_TAG, qtgui.TRIG_SLOPE_POS, 0.0, 0, 0, 'packet_len') 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.top_grid_layout.addWidget(self._qtgui_time_sink_x_0_win) self.qtgui_freq_sink_x_0 = qtgui.freq_sink_c( 8192, #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) 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.low_pass_filter_0 = filter.fir_filter_ccf( 1, firdes.low_pass( 1, samp_rate, 12.5e3, 6.25e3, firdes.WIN_BLACKMAN, 6.76)) self.gsSDR_build_packet_1_0 = gsSDR.build_packet_1(False, 64, 1, 2, '', [0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0xC3,0xAA,0x66,0x55,0xCE,0xC6,0x25,0x6B,0x58,0x71,0xC0,0x9A,0x26,0x60,0x68,0xA4,0x8B,0x09,0x2A,0xB1,0xFD,0xA4,0x74,0xC0,0x89,0xAC,0x28,0x01,0xA0,0x8A,0xD3,0xB8,0x90,0x94,0xB7,0xA2,0xE0,0xBA,0xE6,0xF2,0xFE,0x2A,0x19,0xB4,0x55,0x55] ) self.gsSDR_afsk_basic_0 = gsSDR.afsk_basic(samp_rate_audio, 0.0, 1200, 1800, 1200, 'packet_len') self.blocks_throttle_0 = blocks.throttle(gr.sizeof_gr_complex*1, samp_rate,True) self.blocks_tagged_stream_multiply_length_0 = blocks.tagged_stream_multiply_length(gr.sizeof_gr_complex*1, 'packet_len', 4) self.blocks_tag_debug_0 = blocks.tag_debug(gr.sizeof_gr_complex*1, '', "") self.blocks_tag_debug_0.set_display(True) self.blocks_message_strobe_0 = blocks.message_strobe(pmt.intern("TEST"), 1000) self.blocks_message_debug_0 = blocks.message_debug() self.analog_nbfm_tx_0 = analog.nbfm_tx( audio_rate=samp_rate_audio, quad_rate=samp_rate, tau=75e-6, max_dev=3e3, fh=-1.0, ) ################################################## # Connections ################################################## self.msg_connect((self.blocks_message_strobe_0, 'strobe'), (self.gsSDR_build_packet_1_0, 'pdus')) self.msg_connect((self.gsSDR_build_packet_1_0, 'out_pdus'), (self.blocks_message_debug_0, 'print')) self.msg_connect((self.gsSDR_build_packet_1_0, 'out_pdus'), (self.gsSDR_afsk_basic_0, 'in')) self.connect((self.analog_nbfm_tx_0, 0), (self.blocks_tagged_stream_multiply_length_0, 0)) self.connect((self.blocks_tagged_stream_multiply_length_0, 0), (self.low_pass_filter_0, 0)) self.connect((self.blocks_throttle_0, 0), (self.blocks_tag_debug_0, 0)) self.connect((self.blocks_throttle_0, 0), (self.qtgui_freq_sink_x_0, 0)) self.connect((self.blocks_throttle_0, 0), (self.qtgui_time_sink_x_0_0, 0)) self.connect((self.gsSDR_afsk_basic_0, 0), (self.analog_nbfm_tx_0, 0)) self.connect((self.gsSDR_afsk_basic_0, 0), (self.qtgui_time_sink_x_0, 0)) self.connect((self.low_pass_filter_0, 0), (self.blocks_throttle_0, 0))
def __init__(self): gr.top_block.__init__( self, "Frequency Hopping Spread Spectrum (FHSS) Random Sequence") Qt.QWidget.__init__(self) self.setWindowTitle( "Frequency Hopping Spread Spectrum (FHSS) Random Sequence") 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", "usrp_random_fhss_tx") self.restoreGeometry(self.settings.value("geometry").toByteArray()) ################################################## # Variables ################################################## self.samp_rate = samp_rate = 32000 self.interp = interp = 10 self.tx_taps = tx_taps = firdes.low_pass(1.0, samp_rate * interp, 20e3, 10e3, firdes.WIN_BLACKMAN, 6.76) self.seed = seed = 1 self.nCH = nCH = 40 self.gain = gain = 30 self.freq = freq = 2.41e9 self.ch_spacing = ch_spacing = 10000 ################################################## # 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, "FFT") 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, "Waterfall") self.top_layout.addWidget(self.tab) 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(freq, 0) self.uhd_usrp_sink_0.set_gain(gain, 0) self.uhd_usrp_sink_0.set_antenna("TX/RX", 0) self.fft_filter_xxx_0 = filter.fft_filter_ccc(1, (tx_taps), 1) self.fft_filter_xxx_0.declare_sample_delay(0) self.fft = qtgui.freq_sink_c( 1024, #size firdes.WIN_BLACKMAN_hARRIS, #wintype 0, #fc samp_rate, #bw "", #name 1 #number of inputs ) self.fft.set_update_time(0.10) self.fft.set_y_axis(-140, 10) self.fft.set_trigger_mode(qtgui.TRIG_MODE_FREE, 0.0, 0, "") self.fft.enable_autoscale(False) self.fft.enable_grid(False) self.fft.set_fft_average(1.0) self.fft.enable_control_panel(False) if not True: self.fft.disable_legend() if "complex" == "float" or "complex" == "msg_float": self.fft.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.fft.set_line_label(i, "Data {0}".format(i)) else: self.fft.set_line_label(i, labels[i]) self.fft.set_line_width(i, widths[i]) self.fft.set_line_color(i, colors[i]) self.fft.set_line_alpha(i, alphas[i]) self._fft_win = sip.wrapinstance(self.fft.pyqwidget(), Qt.QWidget) self.tab_layout_0.addWidget(self._fft_win) self.blocks_multiply_xx_0 = blocks.multiply_vcc(1) self.blocks_message_strobe_0 = blocks.message_strobe( pmt.intern("trig"), 100) self.analog_sig_source_x_0_0 = analog.sig_source_c( samp_rate * interp, analog.GR_COS_WAVE, freq, 1, 0) self.analog_sig_source_x_0 = analog.sig_source_f( samp_rate, analog.GR_COS_WAVE, 150, 1, 0) self.analog_nbfm_tx_0 = analog.nbfm_tx( audio_rate=samp_rate, quad_rate=interp * samp_rate, tau=75e-6, max_dev=5e3, ) self.Waterfall = qtgui.waterfall_sink_c( 1024, #size firdes.WIN_BLACKMAN_hARRIS, #wintype 0, #fc samp_rate, #bw "", #name 1 #number of inputs ) self.Waterfall.set_update_time(0.10) self.Waterfall.enable_grid(False) if not True: self.Waterfall.disable_legend() if "complex" == "float" or "complex" == "msg_float": self.Waterfall.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.Waterfall.set_line_label(i, "Data {0}".format(i)) else: self.Waterfall.set_line_label(i, labels[i]) self.Waterfall.set_color_map(i, colors[i]) self.Waterfall.set_line_alpha(i, alphas[i]) self.Waterfall.set_intensity_range(-140, 10) self._Waterfall_win = sip.wrapinstance(self.Waterfall.pyqwidget(), Qt.QWidget) self.tab_layout_1.addWidget(self._Waterfall_win) self.Spread_fhss_sequence_generator_0_0 = Spread.fhss_sequence_generator( seed, ch_spacing, nCH) ################################################## # Connections ################################################## self.msg_connect((self.Spread_fhss_sequence_generator_0_0, 'seq'), (self.analog_sig_source_x_0_0, 'freq')) self.msg_connect((self.blocks_message_strobe_0, 'strobe'), (self.Spread_fhss_sequence_generator_0_0, 'trig')) self.connect((self.analog_nbfm_tx_0, 0), (self.fft_filter_xxx_0, 0)) self.connect((self.analog_sig_source_x_0, 0), (self.analog_nbfm_tx_0, 0)) self.connect((self.analog_sig_source_x_0_0, 0), (self.blocks_multiply_xx_0, 0)) self.connect((self.blocks_multiply_xx_0, 0), (self.Waterfall, 0)) self.connect((self.blocks_multiply_xx_0, 0), (self.fft, 0)) self.connect((self.blocks_multiply_xx_0, 0), (self.uhd_usrp_sink_0, 0)) self.connect((self.fft_filter_xxx_0, 0), (self.blocks_multiply_xx_0, 1))
def __init__(self): gr.top_block.__init__(self, "SVxlink .... X Interface") ################################################## # Variables ################################################## self.tx_audo_level = tx_audo_level = 400 ################################################## # Blocks ################################################## self.rational_resampler_xxx_0 = filter.rational_resampler_ccc( interpolation=1, decimation=2, taps=None, fractional_bw=None, ) self.low_pass_filter_0 = filter.fir_filter_fff( 1, firdes.low_pass(2, 48, 6, 250, firdes.WIN_HAMMING, 6.76)) self.blocks_udp_source_0 = blocks.udp_source(gr.sizeof_short * 1, '127.0.0.1', 1235, 4096, True) self.blocks_short_to_float_0 = blocks.short_to_float(1, 32767) self.blocks_null_sink_0 = blocks.null_sink(gr.sizeof_short * 1) self.blocks_multiply_const_vxx_1 = blocks.multiply_const_vcc((1, )) self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vff((400, )) self.blocks_deinterleave_0 = blocks.deinterleave( gr.sizeof_short * 1, 1) self.blks2_tcp_sink_0 = grc_blks2.tcp_sink( itemsize=gr.sizeof_gr_complex * 1, addr='127.0.0.1', port=8011, server=False, ) self.analog_nbfm_tx_0 = analog.nbfm_tx( audio_rate=48, quad_rate=96, tau=75, max_dev=10, fh=-1.0, ) ################################################## # Connections ################################################## self.connect((self.analog_nbfm_tx_0, 0), (self.rational_resampler_xxx_0, 0)) self.connect((self.blocks_deinterleave_0, 1), (self.blocks_null_sink_0, 0)) self.connect((self.blocks_deinterleave_0, 0), (self.blocks_short_to_float_0, 0)) self.connect((self.blocks_multiply_const_vxx_0, 0), (self.low_pass_filter_0, 0)) self.connect((self.blocks_multiply_const_vxx_1, 0), (self.blks2_tcp_sink_0, 0)) self.connect((self.blocks_short_to_float_0, 0), (self.blocks_multiply_const_vxx_0, 0)) self.connect((self.blocks_udp_source_0, 0), (self.blocks_deinterleave_0, 0)) self.connect((self.low_pass_filter_0, 0), (self.analog_nbfm_tx_0, 0)) self.connect((self.rational_resampler_xxx_0, 0), (self.blocks_multiply_const_vxx_1, 0))
def __init__(self): gr.top_block.__init__(self, "Simple Jamming") Qt.QWidget.__init__(self) self.setWindowTitle("Simple Jamming") 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", "simple_jamming") self.restoreGeometry(self.settings.value("geometry").toByteArray()) ################################################## # Variables ################################################## self.samp_rate = samp_rate = 32000 self.interp = interp = 10 self.tx_taps = tx_taps = firdes.low_pass(1.0, samp_rate * interp, 20e3, 10e3, firdes.WIN_BLACKMAN, 6.76) self.j_taps = j_taps = firdes.low_pass(1.0, samp_rate * interp, 30e3, 10e3, firdes.WIN_BLACKMAN, 6.76) self.j_power = j_power = 0 ################################################## # Blocks ################################################## self._j_power_range = Range(0, 10, 0.1, 0, 200) self._j_power_win = RangeWidget(self._j_power_range, self.set_j_power, 'Jammer Power', "counter_slider", float) self.top_grid_layout.addWidget(self._j_power_win) self.qtgui_waterfall_sink_x_0 = qtgui.waterfall_sink_c( 1024, #size firdes.WIN_BLACKMAN_hARRIS, #wintype 0, #fc samp_rate * interp, #bw "", #name 1 #number of inputs ) self.qtgui_waterfall_sink_x_0.set_update_time(0.01) 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, 2, 0, 1, 1) for r in range(2, 3): self.top_grid_layout.setRowStretch(r, 1) for c in range(0, 1): self.top_grid_layout.setColumnStretch(c, 1) 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(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(4): if len(labels[i]) == 0: if (i % 2 == 0): self.qtgui_time_sink_x_0.set_line_label( i, "Re{{Data {0}}}".format(i / 2)) else: self.qtgui_time_sink_x_0.set_line_label( i, "Im{{Data {0}}}".format(i / 2)) else: self.qtgui_time_sink_x_0.set_line_label(i, labels[i]) self.qtgui_time_sink_x_0.set_line_width(i, widths[i]) self.qtgui_time_sink_x_0.set_line_color(i, colors[i]) self.qtgui_time_sink_x_0.set_line_style(i, styles[i]) self.qtgui_time_sink_x_0.set_line_marker(i, markers[i]) self.qtgui_time_sink_x_0.set_line_alpha(i, alphas[i]) self._qtgui_time_sink_x_0_win = sip.wrapinstance( self.qtgui_time_sink_x_0.pyqwidget(), Qt.QWidget) self.top_grid_layout.addWidget(self._qtgui_time_sink_x_0_win) self.fft_filter_xxx_0_0 = filter.fft_filter_ccc(1, (j_taps), 1) self.fft_filter_xxx_0_0.declare_sample_delay(0) self.blocks_throttle_0 = blocks.throttle(gr.sizeof_float * 1, samp_rate, True) self.blocks_add_xx_0 = blocks.add_vcc(1) self.analog_sig_source_x_0 = analog.sig_source_f( samp_rate, analog.GR_COS_WAVE, 150, 1, 0) self.analog_noise_source_x_0_0 = analog.noise_source_c( analog.GR_GAUSSIAN, 0.01, 0) self.analog_noise_source_x_0 = analog.noise_source_c( analog.GR_GAUSSIAN, j_power, 0) self.analog_nbfm_tx_0 = analog.nbfm_tx( audio_rate=samp_rate, quad_rate=interp * samp_rate, tau=75e-6, max_dev=5e3, fh=-1.0, ) ################################################## # Connections ################################################## self.connect((self.analog_nbfm_tx_0, 0), (self.blocks_add_xx_0, 0)) self.connect((self.analog_nbfm_tx_0, 0), (self.qtgui_time_sink_x_0, 0)) self.connect((self.analog_nbfm_tx_0, 0), (self.qtgui_time_sink_x_0, 1)) self.connect((self.analog_noise_source_x_0, 0), (self.fft_filter_xxx_0_0, 0)) self.connect((self.analog_noise_source_x_0_0, 0), (self.blocks_add_xx_0, 1)) self.connect((self.analog_sig_source_x_0, 0), (self.blocks_throttle_0, 0)) self.connect((self.blocks_add_xx_0, 0), (self.qtgui_waterfall_sink_x_0, 0)) self.connect((self.blocks_throttle_0, 0), (self.analog_nbfm_tx_0, 0)) self.connect((self.fft_filter_xxx_0_0, 0), (self.blocks_add_xx_0, 2))
def __init__(self): gr.top_block.__init__(self, "Transmit") Qt.QWidget.__init__(self) self.setWindowTitle("Transmit") 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", "transmit") self.restoreGeometry(self.settings.value("geometry").toByteArray()) ################################################## # Variables ################################################## self.samp_rate = samp_rate = 48000 self.freq = freq = 5000 ################################################## # Blocks ################################################## self.rational_resampler_xxx_0 = filter.rational_resampler_ccc( interpolation=500, decimation=3, 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.osmosdr_sink_0 = osmosdr.sink(args="numchan=" + str(1) + " " + "hackrf=995d5f") self.osmosdr_sink_0.set_sample_rate(8000000) self.osmosdr_sink_0.set_center_freq(145600000, 0) self.osmosdr_sink_0.set_freq_corr(0, 0) self.osmosdr_sink_0.set_gain(10, 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.low_pass_filter_0 = filter.fir_filter_ccf( 1, firdes.low_pass(0, samp_rate, 4000, 1000, firdes.WIN_HAMMING, 6.76)) self.blocks_throttle_0 = blocks.throttle(gr.sizeof_float * 1, samp_rate, True) self.band_pass_filter_0 = filter.fir_filter_fff( 1, firdes.band_pass(20, samp_rate, 200, 10000, 500, firdes.WIN_HAMMING, 6.76)) self.analog_sig_source_x_0 = analog.sig_source_f( samp_rate, analog.GR_COS_WAVE, freq, 1, 0) self.analog_nbfm_tx_0 = analog.nbfm_tx( audio_rate=samp_rate, quad_rate=samp_rate, tau=75e-6, max_dev=6e3, ) ################################################## # Connections ################################################## self.connect((self.analog_nbfm_tx_0, 0), (self.low_pass_filter_0, 0)) self.connect((self.analog_sig_source_x_0, 0), (self.blocks_throttle_0, 0)) self.connect((self.band_pass_filter_0, 0), (self.analog_nbfm_tx_0, 0)) self.connect((self.blocks_throttle_0, 0), (self.band_pass_filter_0, 0)) self.connect((self.low_pass_filter_0, 0), (self.rational_resampler_xxx_0, 0)) self.connect((self.rational_resampler_xxx_0, 0), (self.osmosdr_sink_0, 0)) self.connect((self.rational_resampler_xxx_0, 0), (self.qtgui_sink_x_0, 0))
def __init__(self, name='Simulated Source', freq=0): Source.__init__(self, name=name) audio_rate = 1e4 rf_rate = self.__sample_rate = 200e3 interp = int(rf_rate / audio_rate) self.__freq = freq self.noise_level = -2 interp_taps = firdes.low_pass( 1, # gain rf_rate, audio_rate / 2, audio_rate * 0.2, firdes.WIN_HAMMING) def make_interpolator(): return filter.interp_fir_filter_ccf(interp, interp_taps) def make_channel(freq): osc = analog.sig_source_c(rf_rate, analog.GR_COS_WAVE, freq, 1, 0) mult = blocks.multiply_cc(1) self.connect(osc, (mult, 1)) return mult self.bus = blocks.add_vcc(1) self.channel_model = channels.channel_model( noise_voltage=10 ** self.noise_level, frequency_offset=0, epsilon=1.01, # TODO: expose this parameter #taps=..., # TODO: apply something here? ) self.throttle = blocks.throttle(gr.sizeof_gr_complex, rf_rate) self.connect( self.bus, self.channel_model, self.throttle, self) signals = [] # Audio input signal pitch = analog.sig_source_f(audio_rate, analog.GR_SAW_WAVE, -1, 2000, 1000) audio_signal = vco = blocks.vco_f(audio_rate, 1, 1) self.connect(pitch, vco) # Baseband / DSB channel baseband_interp = make_interpolator() self.connect( audio_signal, blocks.float_to_complex(1), baseband_interp) signals.append(baseband_interp) # AM channel am_channel = make_channel(10e3) self.connect( audio_signal, blocks.float_to_complex(1), blocks.add_const_cc(1), make_interpolator(), am_channel) signals.append(am_channel) # NFM channel nfm_channel = make_channel(30e3) self.connect( audio_signal, analog.nbfm_tx( audio_rate=audio_rate, quad_rate=rf_rate, tau=75e-6, max_dev=5e3), nfm_channel) signals.append(nfm_channel) # VOR channels # TODO: My signal level parameters are probably wrong because this signal doesn't look like a real VOR signal def add_vor(freq, angle): compensation = math.pi / 180 * -6.5 # empirical, calibrated against VOR receiver (and therefore probably wrong) angle = angle + compensation angle = angle % (2 * math.pi) vor_sig_freq = 30 phase_shift = int(rf_rate / vor_sig_freq * (angle / (2 * math.pi))) vor_dev = 480 vor_channel = make_channel(freq) vor_30 = analog.sig_source_f(audio_rate, analog.GR_COS_WAVE, vor_sig_freq, 1, 0) vor_add = blocks.add_cc(1) vor_audio = blocks.add_ff(1) # Audio/AM signal self.connect( vor_30, blocks.multiply_const_ff(0.3), # M_n (vor_audio, 0)) self.connect(audio_signal, blocks.multiply_const_ff(0.07), # M_i (vor_audio, 1)) # Carrier component self.connect( analog.sig_source_c(0, analog.GR_CONST_WAVE, 0, 0, 1), (vor_add, 0)) # AM component self.connect( vor_audio, blocks.float_to_complex(1), make_interpolator(), blocks.delay(gr.sizeof_gr_complex, phase_shift), (vor_add, 1)) # FM component vor_fm_mult = blocks.multiply_cc(1) self.connect( # carrier generation analog.sig_source_f(rf_rate, analog.GR_COS_WAVE, 9960, 1, 0), blocks.float_to_complex(1), (vor_fm_mult, 1)) self.connect( # modulation vor_30, filter.interp_fir_filter_fff(interp, interp_taps), # float not complex analog.frequency_modulator_fc(2 * math.pi * vor_dev / rf_rate), blocks.multiply_const_cc(0.3), # M_d vor_fm_mult, (vor_add, 2)) self.connect( vor_add, vor_channel) signals.append(vor_channel) add_vor(-30e3, 0) add_vor(-60e3, math.pi / 2) bus_input = 0 for signal in signals: self.connect(signal, (self.bus, bus_input)) bus_input = bus_input + 1
def __init__(self): grc_wxgui.top_block_gui.__init__(self, title="Audio Transmitter") _icon_path = "/usr/share/icons/hicolor/32x32/apps/gnuradio-grc.png" self.SetIcon(wx.Icon(_icon_path, wx.BITMAP_TYPE_ANY)) ################################################## # Variables ################################################## self.variable_slider_0 = variable_slider_0 = 80e6 self.samp_rate = samp_rate = 44100 ################################################## # Blocks ################################################## _variable_slider_0_sizer = wx.BoxSizer(wx.VERTICAL) self._variable_slider_0_text_box = forms.text_box( parent=self.GetWin(), sizer=_variable_slider_0_sizer, value=self.variable_slider_0, callback=self.set_variable_slider_0, label="freq_slider", converter=forms.float_converter(), proportion=0, ) self._variable_slider_0_slider = forms.slider( parent=self.GetWin(), sizer=_variable_slider_0_sizer, value=self.variable_slider_0, callback=self.set_variable_slider_0, minimum=80e6, maximum=150e6, num_steps=100, style=wx.SL_HORIZONTAL, cast=float, proportion=1, ) self.Add(_variable_slider_0_sizer) self.wxgui_fftsink2_0 = fftsink2.fft_sink_c( self.GetWin(), baseband_freq=variable_slider_0, y_per_div=10, y_divs=10, ref_level=0, ref_scale=2.0, sample_rate=195312, 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_sink_0 = uhd.usrp_sink( device_addr="", stream_args=uhd.stream_args( cpu_format="fc32", otw_format="sc16", channels=range(1), ), ) self.uhd_usrp_sink_0.set_samp_rate(195312) self.uhd_usrp_sink_0.set_center_freq(variable_slider_0, 0) self.uhd_usrp_sink_0.set_gain(20, 0) self.uhd_usrp_sink_0.set_antenna("J2", 0) self.rational_resampler_xxx_0 = filter.rational_resampler_ccc( interpolation=195312, decimation=264600, taps=None, fractional_bw=None, ) self.blocks_wavfile_source_0 = blocks.wavfile_source("/home/ece775/Desktop/wireless_project/Theme - Friends.wav", True) self.audio_sink_0 = audio.sink(44100, "", True) self.analog_nbfm_tx_0 = analog.nbfm_tx( audio_rate=44100, quad_rate=264600, tau=75e-6, max_dev=5e3, ) ################################################## # Connections ################################################## self.connect((self.analog_nbfm_tx_0, 0), (self.wxgui_fftsink2_0, 0)) self.connect((self.blocks_wavfile_source_0, 0), (self.audio_sink_0, 0)) self.connect((self.rational_resampler_xxx_0, 0), (self.uhd_usrp_sink_0, 0)) self.connect((self.analog_nbfm_tx_0, 0), (self.rational_resampler_xxx_0, 0)) self.connect((self.blocks_wavfile_source_0, 0), (self.analog_nbfm_tx_0, 0))
def __init__(self): gr.top_block.__init__(self, "Fm Fdb A") Qt.QWidget.__init__(self) self.setWindowTitle("Fm Fdb A") 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", "FM_FDB_A") self.restoreGeometry(self.settings.value("geometry").toByteArray()) ################################################## # Variables ################################################## self.volume = volume = 0.5 self.rx_sr = rx_sr = 1e6 self.qa_rate = qa_rate = 200e3 self.cf = cf = 2.45e9 self.a_rate = a_rate = 44.1e3 ################################################## # Blocks ################################################## self._volume_range = Range(0, 1, 0.1, 0.5, 200) self._volume_win = RangeWidget(self._volume_range, self.set_volume, "volume", "counter_slider", float) self.top_layout.addWidget(self._volume_win) self.controls = Qt.QTabWidget() self.controls_widget_0 = Qt.QWidget() self.controls_layout_0 = Qt.QBoxLayout(Qt.QBoxLayout.TopToBottom, self.controls_widget_0) self.controls_grid_layout_0 = Qt.QGridLayout() self.controls_layout_0.addLayout(self.controls_grid_layout_0) self.controls.addTab(self.controls_widget_0, 'Freq_RX') self.controls_widget_1 = Qt.QWidget() self.controls_layout_1 = Qt.QBoxLayout(Qt.QBoxLayout.TopToBottom, self.controls_widget_1) self.controls_grid_layout_1 = Qt.QGridLayout() self.controls_layout_1.addLayout(self.controls_grid_layout_1) self.controls.addTab(self.controls_widget_1, 'Time_RX') self.controls_widget_2 = Qt.QWidget() self.controls_layout_2 = Qt.QBoxLayout(Qt.QBoxLayout.TopToBottom, self.controls_widget_2) self.controls_grid_layout_2 = Qt.QGridLayout() self.controls_layout_2.addLayout(self.controls_grid_layout_2) self.controls.addTab(self.controls_widget_2, 'Freq_TX') self.controls_widget_3 = Qt.QWidget() self.controls_layout_3 = Qt.QBoxLayout(Qt.QBoxLayout.TopToBottom, self.controls_widget_3) self.controls_grid_layout_3 = Qt.QGridLayout() self.controls_layout_3.addLayout(self.controls_grid_layout_3) self.controls.addTab(self.controls_widget_3, 'Time_TX') self.top_layout.addWidget(self.controls) 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(rx_sr) self.uhd_usrp_source_0.set_center_freq(2.45e9, 0) self.uhd_usrp_source_0.set_gain(0, 0) self.uhd_usrp_source_0.set_antenna('RX2', 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(rx_sr) self.uhd_usrp_sink_0.set_center_freq(5e9, 0) self.uhd_usrp_sink_0.set_gain(0, 0) self.uhd_usrp_sink_0.set_antenna('TX/RX', 0) self.rational_resampler_xxx_1 = filter.rational_resampler_ccc( interpolation=int(rx_sr), decimation=int(a_rate), taps=None, fractional_bw=None, ) self.rational_resampler_xxx_0 = filter.rational_resampler_fff( interpolation=int(a_rate / 1e3 * 1.03), decimation=int(qa_rate / 1e3), taps=None, fractional_bw=None, ) self.qtgui_time_sink_x_0_0 = qtgui.time_sink_f( 1024, #size a_rate, #samp_rate "", #name 1 #number of inputs ) self.qtgui_time_sink_x_0_0.set_update_time(0.10) self.qtgui_time_sink_x_0_0.set_y_axis(-1, 1) 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(False) self.qtgui_time_sink_x_0_0.enable_grid(False) self.qtgui_time_sink_x_0_0.enable_axis_labels(True) self.qtgui_time_sink_x_0_0.enable_control_panel(False) if not True: self.qtgui_time_sink_x_0_0.disable_legend() labels = ['Audio Signal', '', '', '', '', '', '', '', '', ''] widths = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1] colors = [ "blue", "red", "green", "black", "cyan", "magenta", "yellow", "dark red", "dark green", "blue" ] styles = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1] markers = [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1] alphas = [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0] for i in xrange(1): if len(labels[i]) == 0: self.qtgui_time_sink_x_0_0.set_line_label( i, "Data {0}".format(i)) else: self.qtgui_time_sink_x_0_0.set_line_label(i, labels[i]) self.qtgui_time_sink_x_0_0.set_line_width(i, widths[i]) self.qtgui_time_sink_x_0_0.set_line_color(i, colors[i]) self.qtgui_time_sink_x_0_0.set_line_style(i, styles[i]) self.qtgui_time_sink_x_0_0.set_line_marker(i, markers[i]) self.qtgui_time_sink_x_0_0.set_line_alpha(i, alphas[i]) self._qtgui_time_sink_x_0_0_win = sip.wrapinstance( self.qtgui_time_sink_x_0_0.pyqwidget(), Qt.QWidget) self.controls_grid_layout_3.addWidget(self._qtgui_time_sink_x_0_0_win, 0, 0, 1, 1) self.qtgui_time_sink_x_0 = qtgui.time_sink_f( 1024, #size a_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(-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.controls_grid_layout_1.addWidget(self._qtgui_time_sink_x_0_win, 0, 0, 1, 1) self.qtgui_freq_sink_x_0_0 = qtgui.freq_sink_c( 1024, #size firdes.WIN_BLACKMAN_hARRIS, #wintype 0, #fc rx_sr, #bw "", #name 1 #number of inputs ) self.qtgui_freq_sink_x_0_0.set_update_time(0.10) self.qtgui_freq_sink_x_0_0.set_y_axis(-140, 10) self.qtgui_freq_sink_x_0_0.set_y_label('Relative Gain', 'dB') self.qtgui_freq_sink_x_0_0.set_trigger_mode(qtgui.TRIG_MODE_FREE, 0.0, 0, "") self.qtgui_freq_sink_x_0_0.enable_autoscale(False) self.qtgui_freq_sink_x_0_0.enable_grid(False) self.qtgui_freq_sink_x_0_0.set_fft_average(1.0) self.qtgui_freq_sink_x_0_0.enable_axis_labels(True) self.qtgui_freq_sink_x_0_0.enable_control_panel(False) if not True: self.qtgui_freq_sink_x_0_0.disable_legend() if "complex" == "float" or "complex" == "msg_float": self.qtgui_freq_sink_x_0_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_0.set_line_label( i, "Data {0}".format(i)) else: self.qtgui_freq_sink_x_0_0.set_line_label(i, labels[i]) self.qtgui_freq_sink_x_0_0.set_line_width(i, widths[i]) self.qtgui_freq_sink_x_0_0.set_line_color(i, colors[i]) self.qtgui_freq_sink_x_0_0.set_line_alpha(i, alphas[i]) self._qtgui_freq_sink_x_0_0_win = sip.wrapinstance( self.qtgui_freq_sink_x_0_0.pyqwidget(), Qt.QWidget) self.controls_grid_layout_2.addWidget(self._qtgui_freq_sink_x_0_0_win, 0, 0, 1, 1) self.qtgui_freq_sink_x_0 = qtgui.freq_sink_c( 1024, #size firdes.WIN_BLACKMAN_hARRIS, #wintype 0, #fc rx_sr, #bw "", #name 1 #number of inputs ) self.qtgui_freq_sink_x_0.set_update_time(0.10) self.qtgui_freq_sink_x_0.set_y_axis(-140, 10) self.qtgui_freq_sink_x_0.set_y_label('Relative Gain', 'dB') self.qtgui_freq_sink_x_0.set_trigger_mode(qtgui.TRIG_MODE_FREE, 0.0, 0, "") self.qtgui_freq_sink_x_0.enable_autoscale(False) self.qtgui_freq_sink_x_0.enable_grid(False) self.qtgui_freq_sink_x_0.set_fft_average(1.0) self.qtgui_freq_sink_x_0.enable_axis_labels(True) self.qtgui_freq_sink_x_0.enable_control_panel(False) if not True: self.qtgui_freq_sink_x_0.disable_legend() if "complex" == "float" or "complex" == "msg_float": self.qtgui_freq_sink_x_0.set_plot_pos_half(not True) labels = ['', '', '', '', '', '', '', '', '', ''] widths = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1] colors = [ "blue", "red", "green", "black", "cyan", "magenta", "yellow", "dark red", "dark green", "dark blue" ] alphas = [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0] for i in xrange(1): if len(labels[i]) == 0: self.qtgui_freq_sink_x_0.set_line_label( i, "Data {0}".format(i)) else: self.qtgui_freq_sink_x_0.set_line_label(i, labels[i]) self.qtgui_freq_sink_x_0.set_line_width(i, widths[i]) self.qtgui_freq_sink_x_0.set_line_color(i, colors[i]) self.qtgui_freq_sink_x_0.set_line_alpha(i, alphas[i]) self._qtgui_freq_sink_x_0_win = sip.wrapinstance( self.qtgui_freq_sink_x_0.pyqwidget(), Qt.QWidget) self.controls_grid_layout_0.addWidget(self._qtgui_freq_sink_x_0_win, 0, 0, 1, 1) self.low_pass_filter_0 = filter.fir_filter_ccf( 5, firdes.low_pass(1, rx_sr, 10e3, 1e3, firdes.WIN_HAMMING, 6.76)) self._cf_range = Range(2e9, 3e9, 0.1e9, 2.45e9, 200) self._cf_win = RangeWidget(self._cf_range, self.set_cf, "cf", "counter_slider", float) self.top_layout.addWidget(self._cf_win) self.blocks_wavfile_sink_0 = blocks.wavfile_sink( 'fm_record', 1, 44100, 8) self.blocks_probe_rate_0 = blocks.probe_rate(gr.sizeof_gr_complex * 1, 500.0, 0.15) self.blocks_multiply_const_vxx_0_1 = blocks.multiply_const_vcc((1, )) self.blocks_multiply_const_vxx_0_0 = blocks.multiply_const_vff( (volume, )) self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vff( (volume, )) self.blocks_message_debug_0 = blocks.message_debug() self.audio_source_0 = audio.source(44100, '', False) self.audio_sink_0 = audio.sink(44100, '', False) self.analog_nbfm_tx_0 = analog.nbfm_tx( audio_rate=int(a_rate), quad_rate=int(a_rate), tau=75e-6, max_dev=20e3, fh=-1.0, ) self.analog_nbfm_rx_0 = analog.nbfm_rx( audio_rate=int(qa_rate), quad_rate=int(qa_rate), tau=75e-6, max_dev=20e3, ) ################################################## # Connections ################################################## self.msg_connect((self.blocks_probe_rate_0, 'rate'), (self.blocks_message_debug_0, 'print')) self.connect((self.analog_nbfm_rx_0, 0), (self.rational_resampler_xxx_0, 0)) self.connect((self.analog_nbfm_tx_0, 0), (self.blocks_probe_rate_0, 0)) self.connect((self.analog_nbfm_tx_0, 0), (self.rational_resampler_xxx_1, 0)) self.connect((self.audio_source_0, 0), (self.blocks_multiply_const_vxx_0_0, 0)) self.connect((self.blocks_multiply_const_vxx_0, 0), (self.audio_sink_0, 0)) self.connect((self.blocks_multiply_const_vxx_0, 0), (self.blocks_wavfile_sink_0, 0)) self.connect((self.blocks_multiply_const_vxx_0, 0), (self.qtgui_time_sink_x_0, 0)) self.connect((self.blocks_multiply_const_vxx_0_0, 0), (self.analog_nbfm_tx_0, 0)) self.connect((self.blocks_multiply_const_vxx_0_0, 0), (self.qtgui_time_sink_x_0_0, 0)) self.connect((self.blocks_multiply_const_vxx_0_1, 0), (self.qtgui_freq_sink_x_0_0, 0)) self.connect((self.blocks_multiply_const_vxx_0_1, 0), (self.uhd_usrp_sink_0, 0)) self.connect((self.low_pass_filter_0, 0), (self.analog_nbfm_rx_0, 0)) self.connect((self.rational_resampler_xxx_0, 0), (self.blocks_multiply_const_vxx_0, 0)) self.connect((self.rational_resampler_xxx_1, 0), (self.blocks_multiply_const_vxx_0_1, 0)) self.connect((self.uhd_usrp_source_0, 0), (self.low_pass_filter_0, 0)) self.connect((self.uhd_usrp_source_0, 0), (self.qtgui_freq_sink_x_0, 0))
def __init__(self): gr.top_block.__init__(self, "Outernet Flatsat Flowgraph") Qt.QWidget.__init__(self) self.setWindowTitle("Outernet Flatsat Flowgraph") 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.afsk_space = afsk_space = 2200 self.afsk_mark = afsk_mark = 1200 self.bitrate = bitrate = 1200 self.afsk_deviation = afsk_deviation = (afsk_space - afsk_mark)/2 self.uhd_samp_rate = uhd_samp_rate = 614400 self.tx_gain = tx_gain = 0 self.rx_gain = rx_gain = 0 self.rf_tx_freq = rf_tx_freq = 145e6 self.rf_rx_freq = rf_rx_freq = 401e6 self.rf_offset_freq = rf_offset_freq = 80e3 self.rf_bw = rf_bw = 100e3 self.interpolation = interpolation = 16 self.afsk_sensitivity = afsk_sensitivity = 2.0*afsk_deviation/bitrate self.afsk_centre_freq = afsk_centre_freq = afsk_mark + afsk_deviation ################################################## # Blocks ################################################## self._tx_gain_range = Range(0, 90, 1, 0, 200) self._tx_gain_win = RangeWidget(self._tx_gain_range, self.set_tx_gain, "TX Gain", "counter_slider", float) self.top_layout.addWidget(self._tx_gain_win) self._rx_gain_range = Range(0, 90, 1, 0, 200) self._rx_gain_win = RangeWidget(self._rx_gain_range, self.set_rx_gain, "RX Gain", "counter_slider", float) self.top_layout.addWidget(self._rx_gain_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_clock_rate(30.72e6, uhd.ALL_MBOARDS) self.uhd_usrp_source_0.set_samp_rate(uhd_samp_rate) self.uhd_usrp_source_0.set_center_freq(rf_rx_freq, 0) self.uhd_usrp_source_0.set_gain(rx_gain, 0) self.uhd_usrp_source_0.set_bandwidth(rf_bw, 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_clock_rate(30.72e6, uhd.ALL_MBOARDS) self.uhd_usrp_sink_0.set_samp_rate(uhd_samp_rate) self.uhd_usrp_sink_0.set_center_freq(rf_tx_freq, 0) self.uhd_usrp_sink_0.set_gain(tx_gain, 0) self.uhd_usrp_sink_0.set_bandwidth(rf_bw, 0) self.rational_resampler_xxx_0 = filter.rational_resampler_ccc( interpolation=4, decimation=1, taps=None, fractional_bw=0.25, ) self.qtgui_sink_x_0_0 = qtgui.sink_c( 1024, #fftsize firdes.WIN_BLACKMAN_hARRIS, #wintype 0, #fc uhd_samp_rate, #bw "", #name True, #plotfreq True, #plotwaterfall True, #plottime True, #plotconst ) self.qtgui_sink_x_0_0.set_update_time(1.0/10) self._qtgui_sink_x_0_0_win = sip.wrapinstance(self.qtgui_sink_x_0_0.pyqwidget(), Qt.QWidget) self.top_layout.addWidget(self._qtgui_sink_x_0_0_win) self.qtgui_sink_x_0_0.enable_rf_freq(False) self.low_pass_filter_0 = filter.fir_filter_ccf(1, firdes.low_pass( 1, bitrate*interpolation, 1.2*afsk_deviation, 50, firdes.WIN_HAMMING, 6.76)) self.ec_ax25_decoder_b_0 = ec.ax25_decoder_b(True, 0, "") self.bruninga_fsk_demod_0 = bruninga.fsk_demod(19200) self.blocks_tagged_stream_multiply_length_0 = blocks.tagged_stream_multiply_length(gr.sizeof_gr_complex*1, "packet_len", 4096) self.blocks_socket_pdu_1_0 = blocks.socket_pdu("TCP_CLIENT", "127.0.0.1", "51423", 10000, False) self.blocks_socket_pdu_1 = blocks.socket_pdu("TCP_CLIENT", "127.0.0.1", "51423", 10000, False) 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_complex_to_real_0 = blocks.complex_to_real(1) self.ax25_nrzi_encoder_0 = ax25.nrzi_encoder(0) self.ax25_encode_heir_0 = ax25_encode_heir( destination_callsign="SPACE", destination_ssid=0, post_flag_quantity=16, post_sync_quantity=16, pre_flag_quantity=16, pre_sync_quantity=128, source_callsign="EARTH", source_ssid=0, sync_value=85, ) self.analog_sig_source_x_0 = analog.sig_source_c(bitrate*interpolation, analog.GR_COS_WAVE, afsk_centre_freq, 1, 0) self.analog_nbfm_tx_0 = analog.nbfm_tx( audio_rate=bitrate*interpolation, quad_rate=uhd_samp_rate/4, tau=75e-6*0, max_dev=2.5e3, fh=-1.0, ) self.analog_nbfm_rx_0 = analog.nbfm_rx( audio_rate=19200, quad_rate=4*153600, tau=0.01, max_dev=2.5e3, ) self.analog_cpfsk_bc_0 = analog.cpfsk_bc(afsk_sensitivity, 1, interpolation) ################################################## # Connections ################################################## self.msg_connect((self.blocks_socket_pdu_1_0, 'pdus'), (self.ax25_encode_heir_0, 'pdus in')) self.msg_connect((self.ec_ax25_decoder_b_0, 'pdus'), (self.blocks_socket_pdu_1, 'pdus')) self.connect((self.analog_cpfsk_bc_0, 0), (self.low_pass_filter_0, 0)) self.connect((self.analog_nbfm_rx_0, 0), (self.bruninga_fsk_demod_0, 0)) self.connect((self.analog_nbfm_tx_0, 0), (self.rational_resampler_xxx_0, 0)) self.connect((self.analog_sig_source_x_0, 0), (self.blocks_multiply_xx_0, 1)) self.connect((self.ax25_encode_heir_0, 0), (self.blocks_packed_to_unpacked_xx_0, 0)) self.connect((self.ax25_nrzi_encoder_0, 0), (self.analog_cpfsk_bc_0, 0)) self.connect((self.blocks_complex_to_real_0, 0), (self.analog_nbfm_tx_0, 0)) self.connect((self.blocks_multiply_xx_0, 0), (self.blocks_complex_to_real_0, 0)) self.connect((self.blocks_packed_to_unpacked_xx_0, 0), (self.ax25_nrzi_encoder_0, 0)) self.connect((self.blocks_tagged_stream_multiply_length_0, 0), (self.qtgui_sink_x_0_0, 0)) self.connect((self.blocks_tagged_stream_multiply_length_0, 0), (self.uhd_usrp_sink_0, 0)) self.connect((self.bruninga_fsk_demod_0, 0), (self.ec_ax25_decoder_b_0, 0)) self.connect((self.low_pass_filter_0, 0), (self.blocks_multiply_xx_0, 0)) self.connect((self.rational_resampler_xxx_0, 0), (self.blocks_tagged_stream_multiply_length_0, 0)) self.connect((self.uhd_usrp_source_0, 0), (self.analog_nbfm_rx_0, 0))
def __init__(self): gr.top_block.__init__(self, "TJ Groundstation No Gui with Control and IQ streaming") ################################################## # Variables ################################################## self.interp = interp = 4 self.audio_rate = audio_rate = 48000 self.tx_gain = tx_gain = 10 self.rx_downsamp_bw = rx_downsamp_bw = 10000 self.rf_tx_rate = rf_tx_rate = audio_rate*interp self.rf_rx_rate = rf_rx_rate = 192000 self.preamble_len = preamble_len = 300 self.groundstation_zmq_port_4 = groundstation_zmq_port_4 = "5504" self.groundstation_zmq_port_3 = groundstation_zmq_port_3 = "5503" self.groundstation_zmq_port_2 = groundstation_zmq_port_2 = "5502" self.groundstation_zmq_port_1 = groundstation_zmq_port_1 = "5501" self.groundstation_port_2 = groundstation_port_2 = "5557" self.groundstation_port_1 = groundstation_port_1 = "5555" self.groundstation_ip_addr = groundstation_ip_addr = "192.168.1.10" self.groundstation_controller_ip = groundstation_controller_ip = "192.268.1.3" self.gain = gain = 40 self.freq = freq = 144.39e6 self.baud_rate = baud_rate = 1200 self.audio_line_driver = audio_line_driver = .8 self.Decay = Decay = 0.8 self.Attack = Attack = 0.8 ################################################## # Blocks ################################################## self.zeromq_push_sink_0_0_0_0 = zeromq.push_sink(gr.sizeof_float, 1, "tcp://"+groundstation_ip_addr+":"+groundstation_zmq_port_4, 100, False, -1) self.zeromq_push_sink_0_0_0 = zeromq.push_sink(gr.sizeof_float, 1, "tcp://"+groundstation_ip_addr+":"+groundstation_zmq_port_3, 100, False, -1) self.zeromq_push_sink_0_0 = zeromq.push_sink(gr.sizeof_gr_complex, 1, "tcp://"+groundstation_ip_addr+":"+groundstation_zmq_port_2, 100, False, -1) self.zeromq_push_sink_0 = zeromq.push_sink(gr.sizeof_gr_complex, 1, "tcp://"+groundstation_ip_addr+":"+groundstation_zmq_port_1, 100, False, -1) self.uhd_usrp_source_0_1 = uhd.usrp_source( ",".join(("", "")), uhd.stream_args( cpu_format="fc32", channels=range(1), ), ) self.uhd_usrp_source_0_1.set_samp_rate(rf_rx_rate) self.uhd_usrp_source_0_1.set_center_freq(freq, 0) self.uhd_usrp_source_0_1.set_gain(gain, 0) self.uhd_usrp_source_0_1.set_antenna('RX2', 0) self.uhd_usrp_source_0_1.set_bandwidth(rf_rx_rate, 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(rf_tx_rate) self.uhd_usrp_sink_0.set_center_freq(freq, 0) self.uhd_usrp_sink_0.set_gain(tx_gain, 0) self.uhd_usrp_sink_0.set_antenna('TX/RX', 0) self.uhd_usrp_sink_0.set_bandwidth(rf_tx_rate, 0) self.rational_resampler_xxx_0_0 = filter.rational_resampler_ccc( interpolation=4, decimation=1, taps=None, fractional_bw=None, ) self.low_pass_filter_0_0 = filter.fir_filter_ccf(4, firdes.low_pass( 1, rf_rx_rate, rx_downsamp_bw/2, 1000, firdes.WIN_HAMMING, 6.76)) self.detectMarkSpace_1_0_0 = detectMarkSpace( Frequency=2200, attack=Attack, decay=Decay, samp_rate=audio_rate, ) self.detectMarkSpace_0_0_0 = detectMarkSpace( Frequency=1200, attack=Attack, decay=Decay, samp_rate=audio_rate, ) self.bruninga_str_to_aprs_0 = bruninga.str_to_aprs('KN4DTQ', 'KN4DTQ', []) self.bruninga_ax25_fsk_mod_0 = bruninga.ax25_fsk_mod(audio_rate, preamble_len, 5, 2200, 1200, baud_rate) self.blocks_udp_sink_0_0 = blocks.udp_sink(gr.sizeof_char*1, groundstation_controller_ip, int(groundstation_port_2), 1472, True) self.blocks_sub_xx_0_0_0_0 = blocks.sub_ff(1) self.blocks_socket_pdu_0_0 = blocks.socket_pdu("UDP_SERVER", groundstation_ip_addr, groundstation_port_1, 10000, False) self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vff((0.8, )) self.analog_nbfm_tx_0 = analog.nbfm_tx( audio_rate=audio_rate, quad_rate=audio_rate, tau=75e-6, max_dev=5e3, fh=-1.0, ) self.analog_nbfm_rx_0_0 = analog.nbfm_rx( audio_rate=audio_rate, quad_rate=audio_rate, tau=75e-6, max_dev=5e3, ) self.afsk_ax25decode_1_0 = afsk.ax25decode(audio_rate, 1) ################################################## # Connections ################################################## self.msg_connect((self.blocks_socket_pdu_0_0, 'pdus'), (self.bruninga_str_to_aprs_0, 'in')) self.msg_connect((self.bruninga_str_to_aprs_0, 'out'), (self.bruninga_ax25_fsk_mod_0, 'in')) self.connect((self.afsk_ax25decode_1_0, 0), (self.blocks_udp_sink_0_0, 0)) self.connect((self.analog_nbfm_rx_0_0, 0), (self.detectMarkSpace_0_0_0, 0)) self.connect((self.analog_nbfm_rx_0_0, 0), (self.detectMarkSpace_1_0_0, 0)) self.connect((self.analog_nbfm_rx_0_0, 0), (self.zeromq_push_sink_0_0_0_0, 0)) self.connect((self.analog_nbfm_tx_0, 0), (self.rational_resampler_xxx_0_0, 0)) self.connect((self.analog_nbfm_tx_0, 0), (self.zeromq_push_sink_0, 0)) self.connect((self.blocks_multiply_const_vxx_0, 0), (self.analog_nbfm_tx_0, 0)) self.connect((self.blocks_sub_xx_0_0_0_0, 0), (self.afsk_ax25decode_1_0, 0)) self.connect((self.bruninga_ax25_fsk_mod_0, 0), (self.blocks_multiply_const_vxx_0, 0)) self.connect((self.bruninga_ax25_fsk_mod_0, 0), (self.zeromq_push_sink_0_0_0, 0)) self.connect((self.detectMarkSpace_0_0_0, 0), (self.blocks_sub_xx_0_0_0_0, 0)) self.connect((self.detectMarkSpace_1_0_0, 0), (self.blocks_sub_xx_0_0_0_0, 1)) self.connect((self.low_pass_filter_0_0, 0), (self.analog_nbfm_rx_0_0, 0)) self.connect((self.low_pass_filter_0_0, 0), (self.zeromq_push_sink_0_0, 0)) self.connect((self.rational_resampler_xxx_0_0, 0), (self.uhd_usrp_sink_0, 0)) self.connect((self.uhd_usrp_source_0_1, 0), (self.low_pass_filter_0_0, 0))
def __init__(self, pluto_uri='usb:1.5.5'): gr.top_block.__init__(self, "Aprs Full Duplex Pluto") ################################################## # Parameters ################################################## self.pluto_uri = pluto_uri ################################################## # Variables ################################################## self.audio_samp = audio_samp = 24000 self.source_samp = source_samp = 44100 self.samp_rate = samp_rate = audio_samp * 22 self.refresh_rate = refresh_rate = 10 self.cutoff_frequency = cutoff_frequency = 100e3 self.center_frequency = center_frequency = 435e6 self.Decay = Decay = 0.1 self.Attack = Attack = 0.8 ################################################## # Blocks ################################################## self.rational_resampler_xxx_0_0_0_0 = filter.rational_resampler_ccc( interpolation=samp_rate, decimation=source_samp, taps=None, fractional_bw=None, ) self.rational_resampler_xxx_0 = filter.rational_resampler_fff( interpolation=1, decimation=1, taps=None, fractional_bw=None, ) self.pluto_source_0 = iio.pluto_source(pluto_uri, int(center_frequency), samp_rate, 20000000, 0x8000, True, True, True, "manual", 64.0, '', True) self.pluto_sink_0 = iio.pluto_sink(pluto_uri, int(center_frequency), samp_rate, 20000000, 0x8000, False, 10.0, '', True) self.detectMarkSpace_1_0_0 = detectMarkSpace( decay=Decay, samp_rate=audio_samp, attack=Attack, Frequency=2200, ) self.detectMarkSpace_0_0_0 = detectMarkSpace( decay=Decay, samp_rate=audio_samp, attack=Attack, Frequency=1200, ) self.blocks_wavfile_source_0 = blocks.wavfile_source( '/home/pi/aprs_web_client/aprs_test_message.wav', True) self.blocks_sub_xx_0_0_0_0 = blocks.sub_ff(1) self.blocks_file_sink_0_0 = blocks.file_sink( gr.sizeof_char * 1, '/home/pi/aprs_web_client/full_duplex.log', True) self.blocks_file_sink_0_0.set_unbuffered(True) self.band_pass_filter_0_0_0 = filter.fir_filter_fff( 1, firdes.band_pass(1, audio_samp, 950, 2450, 100, firdes.WIN_HAMMING, 6.76)) self.analog_nbfm_tx_0 = analog.nbfm_tx( audio_rate=source_samp, quad_rate=source_samp, tau=75e-6, max_dev=5e3, fh=-1.0, ) self.analog_nbfm_rx_0 = analog.nbfm_rx( audio_rate=audio_samp, quad_rate=int(samp_rate), tau=75e-6, max_dev=5e3, ) self.afsk_ax25decode_1_0 = afsk.ax25decode(audio_samp, 5) ################################################## # Connections ################################################## self.connect((self.afsk_ax25decode_1_0, 0), (self.blocks_file_sink_0_0, 0)) self.connect((self.analog_nbfm_rx_0, 0), (self.rational_resampler_xxx_0, 0)) self.connect((self.analog_nbfm_tx_0, 0), (self.rational_resampler_xxx_0_0_0_0, 0)) self.connect((self.band_pass_filter_0_0_0, 0), (self.detectMarkSpace_0_0_0, 0)) self.connect((self.band_pass_filter_0_0_0, 0), (self.detectMarkSpace_1_0_0, 0)) self.connect((self.blocks_sub_xx_0_0_0_0, 0), (self.afsk_ax25decode_1_0, 0)) self.connect((self.blocks_wavfile_source_0, 0), (self.analog_nbfm_tx_0, 0)) self.connect((self.detectMarkSpace_0_0_0, 0), (self.blocks_sub_xx_0_0_0_0, 0)) self.connect((self.detectMarkSpace_1_0_0, 0), (self.blocks_sub_xx_0_0_0_0, 1)) self.connect((self.pluto_source_0, 0), (self.analog_nbfm_rx_0, 0)) self.connect((self.rational_resampler_xxx_0, 0), (self.band_pass_filter_0_0_0, 0)) self.connect((self.rational_resampler_xxx_0_0_0_0, 0), (self.pluto_sink_0, 0))
def __init__(self): grc_wxgui.top_block_gui.__init__(self, title="Nbfm") _icon_path = "/usr/share/icons/hicolor/32x32/apps/gnuradio-grc.png" self.SetIcon(wx.Icon(_icon_path, wx.BITMAP_TYPE_ANY)) ################################################## # Variables ################################################## self.samp_rate = samp_rate = 1920000 self.center_freq = center_freq = 437.5e6 self.audio_rate = audio_rate = 48000 ################################################## # Blocks ################################################## self.wxgui_fftsink2_3 = fftsink2.fft_sink_c( self.GetWin(), baseband_freq=center_freq, y_per_div=10, y_divs=10, ref_level=0, ref_scale=2.0, sample_rate=samp_rate, fft_size=4096, fft_rate=15, average=False, avg_alpha=None, title='FFT Plot', peak_hold=False, ) self.Add(self.wxgui_fftsink2_3.win) self.rational_resampler_xxx_0 = filter.rational_resampler_ccc( interpolation=samp_rate / audio_rate / 2, decimation=1, taps=None, fractional_bw=None, ) self.blocks_multiply_xx_0 = blocks.multiply_vcc(1) self.blocks_complex_to_real_0 = blocks.complex_to_real(1) self.blocks_add_xx_0 = blocks.add_vcc(1) self.analog_sig_source_x_4 = analog.sig_source_c(samp_rate, analog.GR_SIN_WAVE, 4000, 1.25, 1.04721) self.analog_sig_source_x_3 = analog.sig_source_c(samp_rate, analog.GR_SIN_WAVE, 3000, 0.5, 0.7854) self.analog_sig_source_x_2 = analog.sig_source_c(samp_rate, analog.GR_SIN_WAVE, 2000, 0.75, 0) self.analog_sig_source_x_1 = analog.sig_source_c(samp_rate, analog.GR_SIN_WAVE, 1000, 0.25, 1.5708) self.analog_sig_source_x_0 = analog.sig_source_c(samp_rate, analog.GR_COS_WAVE, 0, 1, 0) self.analog_nbfm_tx_0 = analog.nbfm_tx( audio_rate=audio_rate, quad_rate=audio_rate * 2, tau=75e-6, max_dev=5e3, fh=-1.0, ) ################################################## # Connections ################################################## self.connect((self.analog_nbfm_tx_0, 0), (self.rational_resampler_xxx_0, 0)) self.connect((self.analog_sig_source_x_0, 0), (self.blocks_multiply_xx_0, 1)) self.connect((self.analog_sig_source_x_1, 0), (self.blocks_add_xx_0, 0)) self.connect((self.analog_sig_source_x_2, 0), (self.blocks_add_xx_0, 1)) self.connect((self.analog_sig_source_x_3, 0), (self.blocks_add_xx_0, 2)) self.connect((self.analog_sig_source_x_4, 0), (self.blocks_add_xx_0, 3)) self.connect((self.blocks_add_xx_0, 0), (self.blocks_complex_to_real_0, 0)) self.connect((self.blocks_complex_to_real_0, 0), (self.analog_nbfm_tx_0, 0)) self.connect((self.blocks_multiply_xx_0, 0), (self.wxgui_fftsink2_3, 0)) self.connect((self.rational_resampler_xxx_0, 0), (self.blocks_multiply_xx_0, 0))
def __init__(self): grc_wxgui.top_block_gui.__init__(self, title="Lab 5") _icon_path = "/usr/share/icons/hicolor/32x32/apps/gnuradio-grc.png" self.SetIcon(wx.Icon(_icon_path, wx.BITMAP_TYPE_ANY)) ################################################## # Variables ################################################## self.samp_rate = samp_rate = 250000 self.gain = gain = 40 self.freq = freq = 435e6 self.audio_rate = audio_rate = 48000 self.audio_interp = audio_interp = 4 ################################################## # Blocks ################################################## _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=90, num_steps=90, style=wx.SL_HORIZONTAL, cast=float, proportion=1, ) self.Add(_gain_sizer) self._freq_text_box = forms.text_box( parent=self.GetWin(), value=self.freq, callback=self.set_freq, label="Frequency", converter=forms.float_converter(), ) self.Add(self._freq_text_box) self.wxgui_scopesink2_0 = scopesink2.scope_sink_f( self.GetWin(), title="Scope Plot", sample_rate=audio_rate, v_scale=0, v_offset=0, t_scale=0, ac_couple=False, xy_mode=False, num_inputs=1, trig_mode=wxgui.TRIG_MODE_AUTO, y_axis_label="Counts", ) self.Add(self.wxgui_scopesink2_0.win) 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(freq, 0) self.uhd_usrp_sink_0.set_gain(gain, 0) self.rational_resampler_xxx_0 = filter.rational_resampler_ccc( interpolation=int(samp_rate * 1.1), decimation=audio_rate * audio_interp, taps=None, fractional_bw=None, ) self.audio_source_0 = audio.source(audio_rate, "", True) self.analog_nbfm_tx_0 = analog.nbfm_tx( audio_rate=audio_rate, quad_rate=audio_rate * audio_interp, tau=75e-6, max_dev=5e3, ) ################################################## # Connections ################################################## self.connect((self.analog_nbfm_tx_0, 0), (self.rational_resampler_xxx_0, 0)) self.connect((self.audio_source_0, 0), (self.analog_nbfm_tx_0, 0)) self.connect((self.audio_source_0, 0), (self.wxgui_scopesink2_0, 0)) self.connect((self.rational_resampler_xxx_0, 0), (self.uhd_usrp_sink_0, 0))
def __init__(self, audio_device="dmix:CARD=monitor,DEV=0", decimation=1, fm_station=401100000, hostname='127.0.0.1', interpolation=2, uri='193.168.2.1', wav_file='/home/work/github/gnuradio/grexample/111.wav'): 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()) ################################################## # Parameters ################################################## self.audio_device = audio_device self.decimation = decimation self.fm_station = fm_station self.hostname = hostname self.interpolation = interpolation self.uri = uri self.wav_file = wav_file ################################################## # Variables ################################################## self.sample_rate = sample_rate = 2200000 self.samp_rate = samp_rate = 2304000 ################################################## # Blocks ################################################## self.rational_resampler_xxx_0 = filter.rational_resampler_ccc( interpolation=8 / interpolation, decimation=1, taps=None, fractional_bw=None, ) self.pluto_source_0 = iio.pluto_source(uri, fm_station, sample_rate, 20000000, 0x20000, True, True, True, "manual", 64.0, '', True) self.pluto_sink_0 = iio.pluto_sink(uri, fm_station, samp_rate, 20000, 0x8000, False, 10.0, '', True) self.low_pass_filter_0 = filter.fir_filter_ccf( sample_rate / (384000 * decimation), firdes.low_pass(1, sample_rate / decimation, 44100, 44100, firdes.WIN_HAMMING, 6.76)) self.blocks_wavfile_source_0 = blocks.wavfile_source( '/home/work/github/gnuradio/grexample/111.wav', True) self.blocks_add_xx_0 = blocks.add_vff(1) self.audio_sink_0 = audio.sink(48000, audio_device, True) self.analog_wfm_rcv_0 = analog.wfm_rcv( quad_rate=384000, audio_decimation=8, ) self.analog_nbfm_tx_0 = analog.nbfm_tx( audio_rate=48000, quad_rate=samp_rate / 8, tau=75e-6, max_dev=75e3, fh=-1.0, ) ################################################## # Connections ################################################## self.connect((self.analog_nbfm_tx_0, 0), (self.rational_resampler_xxx_0, 0)) self.connect((self.analog_wfm_rcv_0, 0), (self.audio_sink_0, 0)) self.connect((self.blocks_add_xx_0, 0), (self.analog_nbfm_tx_0, 0)) self.connect((self.blocks_wavfile_source_0, 0), (self.blocks_add_xx_0, 0)) self.connect((self.blocks_wavfile_source_0, 1), (self.blocks_add_xx_0, 1)) self.connect((self.low_pass_filter_0, 0), (self.analog_wfm_rcv_0, 0)) self.connect((self.pluto_source_0, 0), (self.low_pass_filter_0, 0)) self.connect((self.rational_resampler_xxx_0, 0), (self.pluto_sink_0, 0))
def __init__(self, address="addr=192.168.10.3"): gr.top_block.__init__(self, "Nbfm Transmit") Qt.QWidget.__init__(self) self.setWindowTitle("Nbfm Transmit") 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", "nbfm_transmit") self.restoreGeometry(self.settings.value("geometry").toByteArray()) ################################################## # Parameters ################################################## self.address = address ################################################## # Variables ################################################## self.samp_rate = samp_rate = 400e3 self.gain = gain = 50 self.audio_rate = audio_rate = 48e3 ################################################## # Blocks ################################################## self.uhd_usrp_sink_0 = uhd.usrp_sink( ",".join((address, "")), uhd.stream_args( cpu_format="fc32", channels=range(1), ), ) self.uhd_usrp_sink_0.set_clock_rate(200e6, uhd.ALL_MBOARDS) self.uhd_usrp_sink_0.set_samp_rate(samp_rate) self.uhd_usrp_sink_0.set_time_now(uhd.time_spec(time.time()), uhd.ALL_MBOARDS) self.uhd_usrp_sink_0.set_center_freq(94e6, 0) self.uhd_usrp_sink_0.set_gain(50, 0) self.uhd_usrp_sink_0.set_antenna("TX/RX", 0) self.uhd_usrp_sink_0.set_bandwidth(75e3, 0) self.rational_resampler_xxx_0 = filter.rational_resampler_fff( interpolation=529, decimation=441, taps=None, fractional_bw=None, ) self.qtgui_sink_x_0 = qtgui.sink_c( 1024, #fftsize firdes.WIN_BLACKMAN_hARRIS, #wintype 94e6, #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.qtgui_freq_sink_x_1 = qtgui.freq_sink_f( 1024, #size firdes.WIN_BLACKMAN_hARRIS, #wintype 0, #fc samp_rate, #bw "", #name 1 #number of inputs ) self.qtgui_freq_sink_x_1.set_update_time(0.10) self.qtgui_freq_sink_x_1.set_y_axis(-140, 10) self.qtgui_freq_sink_x_1.set_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_control_panel(False) if not True: self.qtgui_freq_sink_x_1.disable_legend() if "float" == "float" or "float" == "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, 0,0) self.blocks_multiply_const_vxx_1 = blocks.multiply_const_vcc((.3, )) self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vff((1, )) self.audio_source = blocks.wavfile_source("/home/ettus/Música/bensound-photoalbum.wav", True) self.analog_nbfm_tx_0 = analog.nbfm_tx( audio_rate=44000, quad_rate=44000, tau=75e-6, max_dev=5e3, ) ################################################## # Connections ################################################## self.connect((self.analog_nbfm_tx_0, 0), (self.blocks_multiply_const_vxx_1, 0)) self.connect((self.audio_source, 0), (self.blocks_multiply_const_vxx_0, 0)) self.connect((self.audio_source, 0), (self.qtgui_freq_sink_x_1, 0)) self.connect((self.blocks_multiply_const_vxx_0, 0), (self.rational_resampler_xxx_0, 0)) self.connect((self.blocks_multiply_const_vxx_1, 0), (self.qtgui_sink_x_0, 0)) self.connect((self.blocks_multiply_const_vxx_1, 0), (self.uhd_usrp_sink_0, 0)) self.connect((self.rational_resampler_xxx_0, 0), (self.analog_nbfm_tx_0, 0))
def main(): N = 1000000 fs = 8000 freqs = [100, 200, 300, 400, 500] nchans = 7 sigs = list() fmtx = list() for fi in freqs: s = analog.sig_source_f(fs, analog.GR_SIN_WAVE, fi, 1) fm = analog.nbfm_tx(fs, 4*fs, max_dev=10000, tau=75e-6, fh=0.925*(4*fs)/2.0) sigs.append(s) fmtx.append(fm) syntaps = filter.firdes.low_pass_2(len(freqs), fs, fs/float(nchans)/2, 100, 100) print "Synthesis Num. Taps = %d (taps per filter = %d)" % (len(syntaps), len(syntaps)/nchans) chtaps = filter.firdes.low_pass_2(len(freqs), fs, fs/float(nchans)/2, 100, 100) print "Channelizer Num. Taps = %d (taps per filter = %d)" % (len(chtaps), len(chtaps)/nchans) filtbank = filter.pfb_synthesizer_ccf(nchans, syntaps) channelizer = filter.pfb.channelizer_ccf(nchans, chtaps) noise_level = 0.01 head = blocks.head(gr.sizeof_gr_complex, N) noise = analog.noise_source_c(analog.GR_GAUSSIAN, noise_level) addnoise = blocks.add_cc() snk_synth = blocks.vector_sink_c() tb = gr.top_block() tb.connect(noise, (addnoise,0)) tb.connect(filtbank, head, (addnoise, 1)) tb.connect(addnoise, channelizer) tb.connect(addnoise, snk_synth) snk = list() for i,si in enumerate(sigs): tb.connect(si, fmtx[i], (filtbank, i)) for i in xrange(nchans): snk.append(blocks.vector_sink_c()) tb.connect((channelizer, i), snk[i]) tb.run() if 1: channel = 1 data = snk[channel].data()[1000:] f1 = pylab.figure(1) s1 = f1.add_subplot(1,1,1) s1.plot(data[10000:10200] ) s1.set_title(("Output Signal from Channel %d" % channel)) fftlen = 2048 winfunc = scipy.blackman #winfunc = scipy.hamming f2 = pylab.figure(2) s2 = f2.add_subplot(1,1,1) s2.psd(data, NFFT=fftlen, Fs = nchans*fs, noverlap=fftlen/4, window = lambda d: d*winfunc(fftlen)) s2.set_title(("Output PSD from Channel %d" % channel)) f3 = pylab.figure(3) s3 = f3.add_subplot(1,1,1) s3.psd(snk_synth.data()[1000:], NFFT=fftlen, Fs = nchans*fs, noverlap=fftlen/4, window = lambda d: d*winfunc(fftlen)) s3.set_title("Output of Synthesis Filter") pylab.show()
def __init__(self): grc_wxgui.top_block_gui.__init__(self, title="Multi Tx") _icon_path = "/usr/share/icons/hicolor/32x32/apps/gnuradio-grc.png" self.SetIcon(wx.Icon(_icon_path, wx.BITMAP_TYPE_ANY)) ################################################## # Variables ################################################## self.audio_rate = audio_rate = 48000 self.wpm = wpm = 15 self.wbfm_on = wbfm_on = True self.usb_on = usb_on = True self.samp_rate = samp_rate = audio_rate * 40 self.q_offset = q_offset = 0 self.psk_on = psk_on = True self.phase = phase = 0 self.nbfm_on = nbfm_on = True self.magnitude = magnitude = 0 self.lsb_on = lsb_on = True self.i_offset = i_offset = 0 self.gain = gain = 25 self.cw_on = cw_on = True self.center_freq = center_freq = 441000000 self.am_on = am_on = True ################################################## # Blocks ################################################## self._wbfm_on_check_box = forms.check_box( parent=self.GetWin(), value=self.wbfm_on, callback=self.set_wbfm_on, label="WBFM", true=True, false=False, ) self.GridAdd(self._wbfm_on_check_box, 4, 1, 1, 1) self._usb_on_check_box = forms.check_box( parent=self.GetWin(), value=self.usb_on, callback=self.set_usb_on, label="USB", true=True, false=False, ) self.GridAdd(self._usb_on_check_box, 4, 4, 1, 1) _q_offset_sizer = wx.BoxSizer(wx.VERTICAL) self._q_offset_text_box = forms.text_box( parent=self.GetWin(), sizer=_q_offset_sizer, value=self.q_offset, callback=self.set_q_offset, label="DC offset Q", converter=forms.float_converter(), proportion=0, ) self._q_offset_slider = forms.slider( parent=self.GetWin(), sizer=_q_offset_sizer, value=self.q_offset, callback=self.set_q_offset, minimum=-0.1, maximum=0.1, num_steps=200, style=wx.SL_HORIZONTAL, cast=float, proportion=1, ) self.GridAdd(_q_offset_sizer, 3, 0, 1, 7) self._psk_on_check_box = forms.check_box( parent=self.GetWin(), value=self.psk_on, callback=self.set_psk_on, label="PSK31", true=True, false=False, ) self.GridAdd(self._psk_on_check_box, 4, 6, 1, 1) _phase_sizer = wx.BoxSizer(wx.VERTICAL) self._phase_text_box = forms.text_box( parent=self.GetWin(), sizer=_phase_sizer, value=self.phase, callback=self.set_phase, label="Phase correction", converter=forms.float_converter(), proportion=0, ) self._phase_slider = forms.slider( parent=self.GetWin(), sizer=_phase_sizer, value=self.phase, callback=self.set_phase, minimum=-0.1, maximum=0.1, num_steps=200, style=wx.SL_HORIZONTAL, cast=float, proportion=1, ) self.GridAdd(_phase_sizer, 0, 0, 1, 7) self._nbfm_on_check_box = forms.check_box( parent=self.GetWin(), value=self.nbfm_on, callback=self.set_nbfm_on, label="NBFM", true=True, false=False, ) self.GridAdd(self._nbfm_on_check_box, 4, 0, 1, 1) _magnitude_sizer = wx.BoxSizer(wx.VERTICAL) self._magnitude_text_box = forms.text_box( parent=self.GetWin(), sizer=_magnitude_sizer, value=self.magnitude, callback=self.set_magnitude, label="Magnitude correction", converter=forms.float_converter(), proportion=0, ) self._magnitude_slider = forms.slider( parent=self.GetWin(), sizer=_magnitude_sizer, value=self.magnitude, callback=self.set_magnitude, minimum=-0.1, maximum=0.1, num_steps=200, style=wx.SL_HORIZONTAL, cast=float, proportion=1, ) self.GridAdd(_magnitude_sizer, 1, 0, 1, 7) self._lsb_on_check_box = forms.check_box( parent=self.GetWin(), value=self.lsb_on, callback=self.set_lsb_on, label="LSB", true=True, false=False, ) self.GridAdd(self._lsb_on_check_box, 4, 3, 1, 1) _i_offset_sizer = wx.BoxSizer(wx.VERTICAL) self._i_offset_text_box = forms.text_box( parent=self.GetWin(), sizer=_i_offset_sizer, value=self.i_offset, callback=self.set_i_offset, label="DC offset I", converter=forms.float_converter(), proportion=0, ) self._i_offset_slider = forms.slider( parent=self.GetWin(), sizer=_i_offset_sizer, value=self.i_offset, callback=self.set_i_offset, minimum=-0.1, maximum=0.1, num_steps=200, style=wx.SL_HORIZONTAL, cast=float, proportion=1, ) self.GridAdd(_i_offset_sizer, 2, 0, 1, 7) self._cw_on_check_box = forms.check_box( parent=self.GetWin(), value=self.cw_on, callback=self.set_cw_on, label="CW", true=True, false=False, ) self.GridAdd(self._cw_on_check_box, 4, 5, 1, 1) self._am_on_check_box = forms.check_box( parent=self.GetWin(), value=self.am_on, callback=self.set_am_on, label="AM", true=True, false=False, ) self.GridAdd(self._am_on_check_box, 4, 2, 1, 1) self.root_raised_cosine_filter_1 = filter.fir_filter_ccf(1, firdes.root_raised_cosine( 1, audio_rate, 5, 0.35, 200)) self.root_raised_cosine_filter_0 = filter.fir_filter_ccf(1, firdes.root_raised_cosine( 1, audio_rate, 5, 0.35, 200)) self.rational_resampler_xxx_3 = filter.rational_resampler_ccc( interpolation=192, decimation=1, taps=None, fractional_bw=None, ) self.rational_resampler_xxx_2 = filter.rational_resampler_ccc( interpolation=samp_rate, decimation=audio_rate, taps=None, fractional_bw=None, ) self.rational_resampler_xxx_1 = filter.rational_resampler_ccc( interpolation=samp_rate / audio_rate / 2, decimation=1, taps=None, fractional_bw=None, ) self.rational_resampler_xxx_0 = filter.rational_resampler_ccc( interpolation=samp_rate / audio_rate / 4, decimation=1, taps=None, fractional_bw=None, ) self.osmosdr_sink_0 = osmosdr.sink( args="numchan=" + str(1) + " " + "" ) 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(gain, 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.low_pass_filter_1 = filter.interp_fir_filter_ccf(1, firdes.low_pass( 0.5, audio_rate, 5000, 400, firdes.WIN_HAMMING, 6.76)) self.iqbalance_fix_cc_0 = iqbalance.fix_cc(magnitude, phase) self.digital_psk_mod_0 = digital.psk.psk_mod( constellation_points=2, mod_code="none", differential=True, samples_per_symbol=8, excess_bw=0.35, verbose=False, log=False, ) self.digital_map_bb_0 = digital.map_bb(([1,0])) self.blocks_wavfile_source_0 = blocks.wavfile_source("multi_tx.wav", True) self.blocks_vector_source_x_2 = blocks.vector_source_b((0,0, 1,1,0,1,1,0,1, 0,0, 1,0,1,0,1,1, 0,0, 1,1,0,1, 0,0, 1,0,1,1,1, 0,0, 1, 0,0, 1,1,0,1, 0,0, 1,0,1,1,1, 0,0, 1, 0,0, 1,1,0,1,1,0,1,0,1, 0,0, 1,1,1,0,1,1,1, 0,0, 1,1,1,1,1,1,1,1, 0,0, 1,1,1,1,1,1,1, 0,0, 1,0,1,0,1,1,1,1, 0,0, 1,0,1,0,1,1,1,1, 0,0, 1, 0,0, 1,0,1, 0,0, 1,1, 0,0, 1,0,1,1,1, 0,0, 1,0,1, 0,0, 1,1,0,1, 0,0, 1,1,1,1, 0,0, 1,0,1,1,0,1,1, 0,0, 1,0,1,0,1,1,1, 0,0, 1,1,1,0,1), True, 1, []) self.blocks_vector_source_x_0 = blocks.vector_source_c((1,0,1,0,1,0,1,1,1, 0,0,0, 1,0,1,0,1,0,1,1,1, 0,0,0, 1,0,1,0,1,0,1,1,1, 0,0,0,0,0,0,0, 1,1,1,0,1,0,1, 0,0,0, 1, 0,0,0,0,0,0,0, 1,0,1,0,1,0,1,1,1, 0,0,0, 1, 0,0,0, 1,0,1,0,1,0,1,1,1,0,1,1,1, 0,0,0, 1,0,1, 0,0,0, 1,0,1,1,1,0,1, 0,0,0, 1,0,1,1,1,0,1, 0,0,0,0,0,0,0, 1,1,1, 0,0,0, 1, 0,0,0, 1,0,1,0,1, 0,0,0, 1,1,1, 0,0,0, 1,0,1, 0,0,0, 1,1,1,0,1, 0,0,0, 1,1,1,0,1,1,1,0,1, 0,0,0,0,0,0,0), True, 1, []) self.blocks_unpacked_to_packed_xx_0 = blocks.unpacked_to_packed_bb(1, gr.GR_MSB_FIRST) self.blocks_repeat_0 = blocks.repeat(gr.sizeof_gr_complex*1, int(1.2 * audio_rate / wpm)) self.blocks_multiply_xx_6 = blocks.multiply_vcc(1) self.blocks_multiply_xx_5 = blocks.multiply_vcc(1) self.blocks_multiply_xx_4 = blocks.multiply_vcc(1) self.blocks_multiply_xx_3_0 = 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_float_to_complex_0 = blocks.float_to_complex(1) self.blocks_add_xx_1 = blocks.add_vcc(1) self.blocks_add_xx_0 = blocks.add_vcc(1) self.blocks_add_const_vxx_1 = blocks.add_const_vcc((i_offset + 1j * q_offset, )) self.blocks_add_const_vxx_0 = blocks.add_const_vcc((0.5, )) self.band_pass_filter_0_0 = filter.interp_fir_filter_ccc(1, firdes.complex_band_pass( 1, audio_rate, -2800, -200, 200, firdes.WIN_HAMMING, 6.76)) self.band_pass_filter_0 = filter.interp_fir_filter_ccc(1, firdes.complex_band_pass( 1, audio_rate, 200, 2800, 200, firdes.WIN_HAMMING, 6.76)) self.analog_wfm_tx_0 = analog.wfm_tx( audio_rate=audio_rate, quad_rate=audio_rate * 4, tau=75e-6, max_dev=75e3, ) self.analog_sig_source_x_6 = analog.sig_source_c(audio_rate, analog.GR_COS_WAVE, 22000, 1 if psk_on else 0, 0) self.analog_sig_source_x_5 = analog.sig_source_c(audio_rate, analog.GR_COS_WAVE, 20000, 1 if cw_on else 0, 0) self.analog_sig_source_x_4 = analog.sig_source_c(samp_rate, analog.GR_COS_WAVE, 120000, 1.0 / 7, 0) self.analog_sig_source_x_3_0 = analog.sig_source_c(audio_rate, analog.GR_COS_WAVE, 11000, 1.8 if lsb_on else 0, 0) self.analog_sig_source_x_3 = analog.sig_source_c(audio_rate, analog.GR_COS_WAVE, 14000, 1.8 if usb_on else 0, 0) self.analog_sig_source_x_2 = analog.sig_source_c(audio_rate, analog.GR_COS_WAVE, 0, 1 if am_on else 0, 0) self.analog_sig_source_x_1 = analog.sig_source_c(samp_rate, analog.GR_COS_WAVE, 0, 1.0 / 7 if wbfm_on else 0, 0) self.analog_sig_source_x_0 = analog.sig_source_c(samp_rate, analog.GR_COS_WAVE, -100000, 1.0 / 7 if nbfm_on else 0, 0) self.analog_nbfm_tx_0 = analog.nbfm_tx( audio_rate=audio_rate, quad_rate=audio_rate * 2, tau=75e-6, max_dev=5e3, ) self.analog_const_source_x_0 = analog.sig_source_f(0, analog.GR_CONST_WAVE, 0, 0, 0) ################################################## # Connections ################################################## self.connect((self.blocks_multiply_xx_1, 0), (self.blocks_add_xx_0, 0)) self.connect((self.analog_sig_source_x_1, 0), (self.blocks_multiply_xx_1, 1)) self.connect((self.rational_resampler_xxx_0, 0), (self.blocks_multiply_xx_1, 0)) self.connect((self.blocks_wavfile_source_0, 0), (self.analog_nbfm_tx_0, 0)) self.connect((self.analog_nbfm_tx_0, 0), (self.rational_resampler_xxx_1, 0)) self.connect((self.rational_resampler_xxx_1, 0), (self.blocks_multiply_xx_0, 0)) self.connect((self.analog_sig_source_x_0, 0), (self.blocks_multiply_xx_0, 1)) self.connect((self.analog_wfm_tx_0, 0), (self.rational_resampler_xxx_0, 0)) self.connect((self.blocks_wavfile_source_0, 0), (self.analog_wfm_tx_0, 0)) self.connect((self.blocks_multiply_xx_0, 0), (self.blocks_add_xx_0, 1)) self.connect((self.blocks_add_const_vxx_0, 0), (self.blocks_multiply_xx_2, 0)) self.connect((self.analog_sig_source_x_2, 0), (self.blocks_multiply_xx_2, 1)) self.connect((self.low_pass_filter_1, 0), (self.blocks_add_const_vxx_0, 0)) self.connect((self.blocks_float_to_complex_0, 0), (self.low_pass_filter_1, 0)) self.connect((self.analog_const_source_x_0, 0), (self.blocks_float_to_complex_0, 1)) self.connect((self.blocks_wavfile_source_0, 0), (self.blocks_float_to_complex_0, 0)) self.connect((self.blocks_multiply_xx_2, 0), (self.blocks_add_xx_1, 0)) self.connect((self.blocks_add_xx_1, 0), (self.rational_resampler_xxx_2, 0)) self.connect((self.blocks_multiply_xx_4, 0), (self.blocks_add_xx_0, 2)) self.connect((self.analog_sig_source_x_4, 0), (self.blocks_multiply_xx_4, 1)) self.connect((self.rational_resampler_xxx_2, 0), (self.blocks_multiply_xx_4, 0)) self.connect((self.blocks_float_to_complex_0, 0), (self.band_pass_filter_0_0, 0)) self.connect((self.analog_sig_source_x_3_0, 0), (self.blocks_multiply_xx_3_0, 1)) self.connect((self.band_pass_filter_0_0, 0), (self.blocks_multiply_xx_3_0, 0)) self.connect((self.blocks_multiply_xx_3_0, 0), (self.blocks_add_xx_1, 1)) self.connect((self.band_pass_filter_0, 0), (self.blocks_multiply_xx_3, 0)) self.connect((self.analog_sig_source_x_3, 0), (self.blocks_multiply_xx_3, 1)) self.connect((self.blocks_multiply_xx_3, 0), (self.blocks_add_xx_1, 2)) self.connect((self.blocks_add_xx_0, 0), (self.iqbalance_fix_cc_0, 0)) self.connect((self.blocks_multiply_xx_5, 0), (self.blocks_add_xx_1, 3)) self.connect((self.analog_sig_source_x_5, 0), (self.blocks_multiply_xx_5, 1)) self.connect((self.root_raised_cosine_filter_0, 0), (self.blocks_multiply_xx_5, 0)) self.connect((self.analog_sig_source_x_6, 0), (self.blocks_multiply_xx_6, 1)) self.connect((self.blocks_multiply_xx_6, 0), (self.blocks_add_xx_1, 4)) self.connect((self.rational_resampler_xxx_3, 0), (self.blocks_multiply_xx_6, 0)) self.connect((self.blocks_unpacked_to_packed_xx_0, 0), (self.digital_psk_mod_0, 0)) self.connect((self.digital_psk_mod_0, 0), (self.rational_resampler_xxx_3, 0)) self.connect((self.blocks_vector_source_x_2, 0), (self.digital_map_bb_0, 0)) self.connect((self.digital_map_bb_0, 0), (self.blocks_unpacked_to_packed_xx_0, 0)) self.connect((self.blocks_vector_source_x_0, 0), (self.blocks_repeat_0, 0)) self.connect((self.blocks_repeat_0, 0), (self.root_raised_cosine_filter_1, 0)) self.connect((self.root_raised_cosine_filter_1, 0), (self.root_raised_cosine_filter_0, 0)) self.connect((self.iqbalance_fix_cc_0, 0), (self.blocks_add_const_vxx_1, 0)) self.connect((self.blocks_add_const_vxx_1, 0), (self.osmosdr_sink_0, 0)) self.connect((self.blocks_float_to_complex_0, 0), (self.band_pass_filter_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 = 32000 ################################################## # Blocks ################################################## self.rational_resampler_xxx_0 = filter.rational_resampler_ccc( interpolation=int(2e6), decimation=int(88.2e3), taps=None, fractional_bw=None, ) self.qtgui_time_sink_x_0 = qtgui.time_sink_c( 1024, #size 2e6, #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(-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 = ["", "", "", "", "", "", "", "", "", ""] 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 * 1): 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.blocks_wavfile_source_0 = blocks.wavfile_source( "/home/javier/Desktop/FM_TX_RX/Andrea_Bocelli_-_Por_ti_volare.wav", True) self.blocks_null_sink_0 = blocks.null_sink(gr.sizeof_gr_complex * 1) self.blocks_multiply_const_vxx_1 = blocks.multiply_const_vcc((1, )) self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vff((2, )) self.analog_nbfm_tx_0 = analog.nbfm_tx( audio_rate=int(44.1e3), quad_rate=int(88.2e3), tau=75e-6, max_dev=50e3, ) ################################################## # Connections ################################################## self.connect((self.analog_nbfm_tx_0, 0), (self.rational_resampler_xxx_0, 0)) self.connect((self.blocks_multiply_const_vxx_0, 0), (self.analog_nbfm_tx_0, 0)) self.connect((self.blocks_multiply_const_vxx_1, 0), (self.blocks_null_sink_0, 0)) self.connect((self.blocks_multiply_const_vxx_1, 0), (self.qtgui_time_sink_x_0, 0)) self.connect((self.blocks_wavfile_source_0, 0), (self.blocks_multiply_const_vxx_0, 0)) self.connect((self.rational_resampler_xxx_0, 0), (self.blocks_multiply_const_vxx_1, 0))
def create_blocks(self, modulation, sym, sn, train): self.rational_resampler_xxx_0 = filter.rational_resampler_ccc( interpolation=1, decimation=1, taps=None, fractional_bw=None, ) if modulation == "2psk": self.digital_mod = digital.psk.psk_mod( constellation_points=2, mod_code="gray", differential=True, samples_per_symbol=sym, excess_bw=0.35, verbose=False, log=False, ) elif modulation == "4psk": self.digital_mod = digital.psk.psk_mod( constellation_points=4, mod_code="gray", differential=True, samples_per_symbol=sym, excess_bw=0.35, verbose=False, log=False, ) elif modulation == "8psk": self.digital_mod = digital.psk.psk_mod( constellation_points=8, mod_code="gray", differential=True, samples_per_symbol=sym, excess_bw=0.35, verbose=False, log=False, ) elif modulation == "fsk": self.digital_mod = digital.gfsk_mod( samples_per_symbol=sym, sensitivity=1.0, bt=0.35, verbose=False, log=False, ) elif modulation == "qam16": self.digital_mod = digital.qam.qam_mod( constellation_points=16, mod_code="gray", differential=True, samples_per_symbol=sym, excess_bw=0.35, verbose=False, log=False, ) elif modulation == "qam64": self.digital_mod = digital.qam.qam_mod( constellation_points=64, mod_code="gray", differential=True, samples_per_symbol=sym, excess_bw=0.35, verbose=False, log=False, ) elif modulation == "gmsk": self.digital_mod = digital.gmsk_mod( samples_per_symbol=sym, bt=0.35, verbose=False, log=False, ) if train: self.blocks_wavfile_source_0 = blocks.wavfile_source( "music.wav", False) else: self.blocks_wavfile_source_0 = blocks.wavfile_source( "music2.wav", False) self.analog_wfm_tx_0 = analog.wfm_tx( audio_rate=44100, quad_rate=44100 * 5, tau=75e-6, max_dev=75e3, fh=-1.0, ) self.analog_nfm_tx_0 = analog.nbfm_tx( audio_rate=44100, quad_rate=44100 * 2, tau=75e-6, max_dev=5e3, fh=-1.0, ) self.channels_channel_model_0 = channels.channel_model( noise_voltage=SNRV[sn][1], frequency_offset=100.0, epsilon=1.0, taps=(1.0 + 1.0j, ), noise_seed=np.random.randint(np.iinfo(np.int32).max), block_tags=False)
def __init__(self): gr.top_block.__init__(self, "Ssb Trx") ################################################## # Variables ################################################## self.BaseFreq = BaseFreq = 1296250000 self.USB = USB = True self.TxOffset = TxOffset = 0 self.TxLO = TxLO = BaseFreq-10000 self.SQL = SQL = 20 self.RxOffset = RxOffset = 0 self.PTT = PTT = False self.NCW = NCW = False self.MicGain = MicGain = 5.0 self.MON = MON = False self.KEY = KEY = False self.FMMIC = FMMIC = 50 self.FM = FM = True self.CW = CW = False self.AFGain = AFGain = 20 ################################################## # Blocks ################################################## self.rational_resampler_xxx_0 = filter.rational_resampler_ccc( interpolation=12, decimation=1, taps=None, fractional_bw=None, ) self.pluto_source_0 = iio.pluto_source('ip:192.168.2.1', BaseFreq, 529200, 2000000, 0x800, True, True, True, "slow_attack", 64.0, '', True) self.pluto_sink_0 = iio.pluto_sink('ip:192.168.2.1', TxLO, 529200, 2000000, 0x800, False, 0, '', True) self.freq_xlating_fir_filter_xxx_0 = filter.freq_xlating_fir_filter_ccc(12, (firdes.low_pass(1,529200,12000,6000)), RxOffset, 529200) self.blocks_mute_xx_0_0 = blocks.mute_cc(bool(not PTT)) self.blocks_mute_xx_0 = blocks.mute_ff(bool(PTT and (not MON))) 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_4 = blocks.multiply_const_vcc((not FM, )) self.blocks_multiply_const_vxx_3 = blocks.multiply_const_vcc((FM, )) self.blocks_multiply_const_vxx_2_0 = blocks.multiply_const_vff((int(FM) *0.1, )) self.blocks_multiply_const_vxx_2 = blocks.multiply_const_vff((not FM, )) self.blocks_multiply_const_vxx_1 = blocks.multiply_const_vff((AFGain/10.0, )) self.blocks_multiply_const_vxx_0_0 = blocks.multiply_const_vff((FMMIC/10.0, )) self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vff(((MicGain/10.0)*(not CW), )) self.blocks_float_to_complex_0 = blocks.float_to_complex(1) self.blocks_complex_to_real_0 = blocks.complex_to_real(1) self.blocks_add_xx_2 = blocks.add_vcc(1) self.blocks_add_xx_1 = blocks.add_vff(1) self.blocks_add_xx_0 = blocks.add_vff(1) self.band_pass_filter_1 = filter.fir_filter_fff(1, firdes.band_pass( 1, 44100, 200, 3000, 100, firdes.WIN_HAMMING, 6.76)) self.band_pass_filter_0_0 = filter.fir_filter_ccf(1, firdes.band_pass( 1, 44100, -3000+USB*3300+10000, -300+USB*3300+10000, 100, firdes.WIN_HAMMING, 6.76)) self.band_pass_filter_0 = filter.fir_filter_ccc(1, firdes.complex_band_pass( 1, 44100, -3000+USB*3300+NCW*CW*250, -300+USB*3300-NCW*CW*1950, 100, firdes.WIN_HAMMING, 6.76)) self.audio_source_0 = audio.source(44100, "hw:CARD=Device,DEV=0", True) self.audio_sink_0 = audio.sink(44100, "hw:CARD=Device,DEV=0", True) self.analog_simple_squelch_cc_0 = analog.simple_squelch_cc(-60+SQL, 1) self.analog_sig_source_x_1_0 = analog.sig_source_f(44100, analog.GR_COS_WAVE, 800, int(CW and KEY), 0) self.analog_sig_source_x_1 = analog.sig_source_c(529200, analog.GR_COS_WAVE, TxOffset, 1, 0) self.analog_sig_source_x_0 = analog.sig_source_c(44100, analog.GR_COS_WAVE, 10000, 1, 0) self.analog_nbfm_tx_0 = analog.nbfm_tx( audio_rate=44100, quad_rate=44100, tau=75e-6, max_dev=5e3, fh=-1, ) self.analog_nbfm_rx_0 = analog.nbfm_rx( audio_rate=44100, quad_rate=44100, tau=75e-6, max_dev=5e3, ) self.analog_const_source_x_0 = analog.sig_source_f(0, analog.GR_CONST_WAVE, 0, 0, 0) ################################################## # Connections ################################################## self.connect((self.analog_const_source_x_0, 0), (self.blocks_float_to_complex_0, 1)) self.connect((self.analog_nbfm_rx_0, 0), (self.blocks_multiply_const_vxx_2_0, 0)) self.connect((self.analog_nbfm_tx_0, 0), (self.blocks_multiply_xx_2, 0)) self.connect((self.analog_sig_source_x_0, 0), (self.blocks_multiply_xx_0, 1)) self.connect((self.analog_sig_source_x_0, 0), (self.blocks_multiply_xx_2, 1)) self.connect((self.analog_sig_source_x_1, 0), (self.blocks_multiply_xx_1, 1)) self.connect((self.analog_sig_source_x_1_0, 0), (self.blocks_add_xx_0, 1)) self.connect((self.analog_simple_squelch_cc_0, 0), (self.analog_nbfm_rx_0, 0)) self.connect((self.audio_source_0, 0), (self.blocks_multiply_const_vxx_0, 0)) self.connect((self.audio_source_0, 0), (self.blocks_multiply_const_vxx_0_0, 0)) self.connect((self.band_pass_filter_0, 0), (self.blocks_complex_to_real_0, 0)) self.connect((self.band_pass_filter_0_0, 0), (self.blocks_multiply_const_vxx_4, 0)) self.connect((self.band_pass_filter_1, 0), (self.analog_nbfm_tx_0, 0)) self.connect((self.blocks_add_xx_0, 0), (self.blocks_float_to_complex_0, 0)) self.connect((self.blocks_add_xx_1, 0), (self.blocks_mute_xx_0, 0)) self.connect((self.blocks_add_xx_2, 0), (self.rational_resampler_xxx_0, 0)) self.connect((self.blocks_complex_to_real_0, 0), (self.blocks_multiply_const_vxx_2, 0)) self.connect((self.blocks_float_to_complex_0, 0), (self.blocks_multiply_xx_0, 0)) self.connect((self.blocks_multiply_const_vxx_0, 0), (self.blocks_add_xx_0, 0)) self.connect((self.blocks_multiply_const_vxx_0_0, 0), (self.band_pass_filter_1, 0)) self.connect((self.blocks_multiply_const_vxx_1, 0), (self.audio_sink_0, 0)) self.connect((self.blocks_multiply_const_vxx_2, 0), (self.blocks_add_xx_1, 0)) self.connect((self.blocks_multiply_const_vxx_2_0, 0), (self.blocks_add_xx_1, 1)) self.connect((self.blocks_multiply_const_vxx_3, 0), (self.blocks_add_xx_2, 0)) self.connect((self.blocks_multiply_const_vxx_4, 0), (self.blocks_add_xx_2, 1)) self.connect((self.blocks_multiply_xx_0, 0), (self.band_pass_filter_0_0, 0)) self.connect((self.blocks_multiply_xx_1, 0), (self.blocks_mute_xx_0_0, 0)) self.connect((self.blocks_multiply_xx_2, 0), (self.blocks_multiply_const_vxx_3, 0)) self.connect((self.blocks_mute_xx_0, 0), (self.blocks_multiply_const_vxx_1, 0)) self.connect((self.blocks_mute_xx_0_0, 0), (self.pluto_sink_0, 0)) self.connect((self.freq_xlating_fir_filter_xxx_0, 0), (self.analog_simple_squelch_cc_0, 0)) self.connect((self.freq_xlating_fir_filter_xxx_0, 0), (self.band_pass_filter_0, 0)) self.connect((self.pluto_source_0, 0), (self.freq_xlating_fir_filter_xxx_0, 0)) self.connect((self.rational_resampler_xxx_0, 0), (self.blocks_multiply_xx_1, 0))
def __init__(self, interpolation=2, wav_file='/hispeed/test1.wav'): gr.top_block.__init__(self, "Fm Send") Qt.QWidget.__init__(self) self.setWindowTitle("Fm Send") 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", "fm_send") self.restoreGeometry(self.settings.value("geometry").toByteArray()) ################################################## # Parameters ################################################## self.interpolation = interpolation self.wav_file = wav_file ################################################## # Variables ################################################## self.samp_rate = samp_rate = 2304000 self.fm_station = fm_station = 401100000 ################################################## # Blocks ################################################## self.rational_resampler_xxx_0 = filter.rational_resampler_ccc( interpolation=8 / interpolation, decimation=1, 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_grid_layout.addWidget(self._qtgui_sink_x_0_win) self.qtgui_sink_x_0.enable_rf_freq(False) self.pluto_sink_0 = iio.pluto_sink('193.168.2.1', fm_station, samp_rate, 20000, 0x8000, False, 10.0, '', True) self.blocks_wavfile_source_0 = blocks.wavfile_source(wav_file, True) self.blocks_add_xx_0 = blocks.add_vff(1) self.analog_nbfm_tx_0 = analog.nbfm_tx( audio_rate=48000, quad_rate=samp_rate / 8, tau=75e-6, max_dev=75e3, fh=-1.0, ) ################################################## # Connections ################################################## self.connect((self.analog_nbfm_tx_0, 0), (self.rational_resampler_xxx_0, 0)) self.connect((self.blocks_add_xx_0, 0), (self.analog_nbfm_tx_0, 0)) self.connect((self.blocks_wavfile_source_0, 0), (self.blocks_add_xx_0, 0)) self.connect((self.blocks_wavfile_source_0, 1), (self.blocks_add_xx_0, 1)) self.connect((self.rational_resampler_xxx_0, 0), (self.pluto_sink_0, 0)) self.connect((self.rational_resampler_xxx_0, 0), (self.qtgui_sink_x_0, 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.samp_rate = samp_rate = 2000000 ################################################## # Blocks ################################################## self.rational_resampler_xxx_0 = filter.rational_resampler_ccc( interpolation=samp_rate, decimation=16000, taps=None, fractional_bw=None, ) self.osmosdr_sink_0 = osmosdr.sink(args="numchan=" + str(1) + " " + '') self.osmosdr_sink_0.set_sample_rate(samp_rate) self.osmosdr_sink_0.set_center_freq(144.6625e6, 0) self.osmosdr_sink_0.set_freq_corr(0, 0) self.osmosdr_sink_0.set_gain(10, 0) self.osmosdr_sink_0.set_if_gain(48, 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.blocks_wavfile_source_0 = blocks.wavfile_source( '/home/hopkins/Downloads/morse (2).wav', True) self.blocks_multiply_xx_0 = blocks.multiply_vff(1) self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vff((1.2, )) self.analog_sig_source_x_0_0_0 = analog.sig_source_f( 8e3, analog.GR_COS_WAVE, 200, 1, 0) self.analog_sig_source_x_0 = analog.sig_source_f( 8e3, analog.GR_COS_WAVE, 1000, 1, 0) self.analog_nbfm_tx_0 = analog.nbfm_tx( audio_rate=8000, quad_rate=16000, tau=75e-6, max_dev=5e3, fh=-1.0, ) ################################################## # Connections ################################################## self.connect((self.analog_nbfm_tx_0, 0), (self.rational_resampler_xxx_0, 0)) self.connect((self.analog_sig_source_x_0, 0), (self.blocks_multiply_xx_0, 1)) self.connect((self.analog_sig_source_x_0_0_0, 0), (self.blocks_multiply_xx_0, 2)) self.connect((self.blocks_multiply_const_vxx_0, 0), (self.blocks_multiply_xx_0, 0)) self.connect((self.blocks_multiply_xx_0, 0), (self.analog_nbfm_tx_0, 0)) self.connect((self.blocks_wavfile_source_0, 0), (self.blocks_multiply_const_vxx_0, 0)) self.connect((self.rational_resampler_xxx_0, 0), (self.osmosdr_sink_0, 0))
def __init__(self): gr.top_block.__init__(self, "NBFM_transceiver") Qt.QWidget.__init__(self) self.setWindowTitle("NBFM_transceiver") 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", "NBFM_transceiver") self.restoreGeometry(self.settings.value("geometry").toByteArray()) ################################################## # Variables ################################################## self.samp_rate = samp_rate = 48000 self.rx_freq = rx_freq = 141050000 self.offset = offset = 5000000 self.tx_gain = tx_gain = 15 self.tx_freq = tx_freq = rx_freq - offset self.sqch = sqch = -60 self.sdr_samp_rate = sdr_samp_rate = samp_rate * 12 self.rx_tx = rx_tx = 0 self.rx_gain = rx_gain = 10 self.rx_freq_fine = rx_freq_fine = 0 self.rx_aud = rx_aud = 0.300 ################################################## # Blocks ################################################## self._tx_gain_range = Range(0, 90, 1, 15, 200) self._tx_gain_win = RangeWidget(self._tx_gain_range, self.set_tx_gain, 'tx_gain', "counter_slider", float) self.top_grid_layout.addWidget(self._tx_gain_win, 2, 2, 1, 1) for r in range(2, 3): self.top_grid_layout.setRowStretch(r, 1) for c in range(2, 3): self.top_grid_layout.setColumnStretch(c, 1) self._sqch_range = Range(-110, -50, 1, -60, 200) self._sqch_win = RangeWidget(self._sqch_range, self.set_sqch, 'rx_sqlch', "counter_slider", float) self.top_grid_layout.addWidget(self._sqch_win, 3, 0, 1, 1) for r in range(3, 4): self.top_grid_layout.setRowStretch(r, 1) for c in range(0, 1): self.top_grid_layout.setColumnStretch(c, 1) self._sdr_samp_rate_range = Range(520833, 61440000, 100000, samp_rate * 12, 200) self._sdr_samp_rate_win = RangeWidget(self._sdr_samp_rate_range, self.set_sdr_samp_rate, 'sdr_sample_rate', "counter_slider", float) self.top_grid_layout.addWidget(self._sdr_samp_rate_win, 0, 1, 1, 1) for r in range(0, 1): self.top_grid_layout.setRowStretch(r, 1) for c in range(1, 2): self.top_grid_layout.setColumnStretch(c, 1) self._rx_tx_options = ( 0, 1, ) self._rx_tx_labels = ( 'RX', 'TX', ) self._rx_tx_group_box = Qt.QGroupBox('rx_tx_pushbutton') self._rx_tx_box = Qt.QHBoxLayout() class variable_chooser_button_group(Qt.QButtonGroup): def __init__(self, parent=None): Qt.QButtonGroup.__init__(self, parent) @pyqtSlot(int) def updateButtonChecked(self, button_id): self.button(button_id).setChecked(True) self._rx_tx_button_group = variable_chooser_button_group() self._rx_tx_group_box.setLayout(self._rx_tx_box) for i, label in enumerate(self._rx_tx_labels): radio_button = Qt.QRadioButton(label) self._rx_tx_box.addWidget(radio_button) self._rx_tx_button_group.addButton(radio_button, i) self._rx_tx_callback = lambda i: Qt.QMetaObject.invokeMethod( self._rx_tx_button_group, "updateButtonChecked", Qt.Q_ARG("int", self._rx_tx_options.index(i))) self._rx_tx_callback(self.rx_tx) self._rx_tx_button_group.buttonClicked[int].connect( lambda i: self.set_rx_tx(self._rx_tx_options[i])) self.top_grid_layout.addWidget(self._rx_tx_group_box, 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._rx_gain_range = Range(0, 50, 1, 10, 200) self._rx_gain_win = RangeWidget(self._rx_gain_range, self.set_rx_gain, 'rx_gain', "counter_slider", float) self.top_grid_layout.addWidget(self._rx_gain_win, 2, 0, 1, 1) for r in range(2, 3): self.top_grid_layout.setRowStretch(r, 1) for c in range(0, 1): self.top_grid_layout.setColumnStretch(c, 1) self._rx_freq_range = Range(88000000, 174000000, 25000, 141050000, 200) self._rx_freq_win = RangeWidget(self._rx_freq_range, self.set_rx_freq, 'rx_freq', "counter_slider", float) self.top_grid_layout.addWidget(self._rx_freq_win, 1, 0, 1, 2) for r in range(1, 2): self.top_grid_layout.setRowStretch(r, 1) for c in range(0, 2): self.top_grid_layout.setColumnStretch(c, 1) self._rx_aud_range = Range(0, 0.5, 0.05, 0.300, 200) self._rx_aud_win = RangeWidget(self._rx_aud_range, self.set_rx_aud, 'rx_audio_gain', "counter_slider", float) self.top_grid_layout.addWidget(self._rx_aud_win, 2, 1, 1, 1) for r in range(2, 3): self.top_grid_layout.setRowStretch(r, 1) for c in range(1, 2): self.top_grid_layout.setColumnStretch(c, 1) self._offset_options = ( 5000000, 600000, ) self._offset_labels = ( '5Mhz', '600kHz', ) self._offset_tool_bar = Qt.QToolBar(self) self._offset_tool_bar.addWidget(Qt.QLabel('rx_tx_offset' + ": ")) self._offset_combo_box = Qt.QComboBox() self._offset_tool_bar.addWidget(self._offset_combo_box) for label in self._offset_labels: self._offset_combo_box.addItem(label) self._offset_callback = lambda i: Qt.QMetaObject.invokeMethod( self._offset_combo_box, "setCurrentIndex", Qt.Q_ARG("int", self._offset_options.index(i))) self._offset_callback(self.offset) self._offset_combo_box.currentIndexChanged.connect( lambda i: self.set_offset(self._offset_options[i])) self.top_grid_layout.addWidget(self._offset_tool_bar, 0, 2, 1, 1) for r in range(0, 1): self.top_grid_layout.setRowStretch(r, 1) for c in range(2, 3): self.top_grid_layout.setColumnStretch(c, 1) self._tx_freq_tool_bar = Qt.QToolBar(self) if None: self._tx_freq_formatter = None else: self._tx_freq_formatter = lambda x: eng_notation.num_to_str(x) self._tx_freq_tool_bar.addWidget(Qt.QLabel('tx_freq' + ": ")) self._tx_freq_label = Qt.QLabel( str(self._tx_freq_formatter(self.tx_freq))) self._tx_freq_tool_bar.addWidget(self._tx_freq_label) self.top_grid_layout.addWidget(self._tx_freq_tool_bar, 1, 2, 1, 1) for r in range(1, 2): self.top_grid_layout.setRowStretch(r, 1) for c in range(2, 3): self.top_grid_layout.setColumnStretch(c, 1) self._rx_freq_fine_range = Range(-10000, 10000, 100, 0, 200) self._rx_freq_fine_win = RangeWidget(self._rx_freq_fine_range, self.set_rx_freq_fine, 'rx_freq_fine', "counter_slider", float) self.top_grid_layout.addWidget(self._rx_freq_fine_win, 3, 1, 1, 1) for r in range(3, 4): self.top_grid_layout.setRowStretch(r, 1) for c in range(1, 2): self.top_grid_layout.setColumnStretch(c, 1) self.rational_resampler_xxx_0_1 = filter.rational_resampler_ccf( interpolation=samp_rate, decimation=sdr_samp_rate, taps=None, fractional_bw=None, ) self.rational_resampler_xxx_0_0 = filter.rational_resampler_ccc( interpolation=samp_rate, decimation=sdr_samp_rate, taps=None, fractional_bw=None, ) self.rational_resampler_xxx_0 = filter.rational_resampler_ccc( interpolation=sdr_samp_rate, decimation=samp_rate, taps=None, fractional_bw=None, ) self.qtgui_sink_x_0 = qtgui.sink_c( 256, #fftsize firdes.WIN_HAMMING, #wintype rx_freq, #fc 25000, #bw "", #name True, #plotfreq True, #plotwaterfall False, #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_grid_layout.addWidget(self._qtgui_sink_x_0_win, 4, 0, 6, 3) for r in range(4, 10): self.top_grid_layout.setRowStretch(r, 1) for c in range(0, 3): self.top_grid_layout.setColumnStretch(c, 1) self.qtgui_sink_x_0.enable_rf_freq(True) self.pluto_source_0 = iio.pluto_source('', rx_freq, sdr_samp_rate, 15000, 0x4000, True, True, True, "manual", rx_gain * ((-rx_tx) + 1), '', True) self.pluto_sink_0 = iio.pluto_sink('192.168.2.1', rx_freq - offset, sdr_samp_rate, 5000, 0x4000, False, -tx_gain * (rx_tx), '', True) self.low_pass_filter_1 = filter.fir_filter_fff( 1, firdes.low_pass(1, samp_rate, 20000, 500, firdes.WIN_HAMMING, 6.76)) self.low_pass_filter_0_0 = filter.fir_filter_ccf( 1, firdes.low_pass(1, samp_rate, 10e3, 2e3, firdes.WIN_HAMMING, 6.76)) self.low_pass_filter_0 = filter.fir_filter_ccf( 1, firdes.low_pass(1, samp_rate, 16000, 200, firdes.WIN_HAMMING, 6.76)) 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( (rx_aud * (-(rx_tx) + 1), )) self.audio_sink_0 = audio.sink(48000, "Speakers (Conexant SmartAudio HD)", True) self.analog_simple_squelch_cc_0 = analog.simple_squelch_cc(sqch, 1) self.analog_sig_source_x_0_0_0 = analog.sig_source_f( samp_rate, analog.GR_COS_WAVE, 0, 1, 0) self.analog_sig_source_x_0_0 = analog.sig_source_c( sdr_samp_rate, analog.GR_COS_WAVE, 0, 1, 0) self.analog_nbfm_tx_0 = analog.nbfm_tx( audio_rate=samp_rate, quad_rate=samp_rate, tau=75e-6, max_dev=5e3, fh=-1.0, ) self.analog_nbfm_rx_0 = analog.nbfm_rx( audio_rate=48000, quad_rate=48000, tau=50e-6, max_dev=12.5e3, ) self.Internal_Microphone = audio.source(48000, '', True) ################################################## # Connections ################################################## self.connect((self.Internal_Microphone, 0), (self.low_pass_filter_1, 0)) self.connect((self.analog_nbfm_rx_0, 0), (self.blocks_multiply_const_vxx_0, 0)) self.connect((self.analog_nbfm_tx_0, 0), (self.low_pass_filter_0, 0)) self.connect((self.analog_sig_source_x_0_0, 0), (self.blocks_multiply_xx_0, 1)) self.connect((self.analog_sig_source_x_0_0_0, 0), (self.blocks_multiply_xx_1, 1)) self.connect((self.analog_simple_squelch_cc_0, 0), (self.analog_nbfm_rx_0, 0)) self.connect((self.blocks_multiply_const_vxx_0, 0), (self.audio_sink_0, 0)) self.connect((self.blocks_multiply_xx_0, 0), (self.rational_resampler_xxx_0_0, 0)) self.connect((self.blocks_multiply_xx_0, 0), (self.rational_resampler_xxx_0_1, 0)) self.connect((self.blocks_multiply_xx_1, 0), (self.analog_nbfm_tx_0, 0)) self.connect((self.low_pass_filter_0, 0), (self.rational_resampler_xxx_0, 0)) self.connect((self.low_pass_filter_0_0, 0), (self.analog_simple_squelch_cc_0, 0)) self.connect((self.low_pass_filter_1, 0), (self.blocks_multiply_xx_1, 0)) self.connect((self.pluto_source_0, 0), (self.blocks_multiply_xx_0, 0)) self.connect((self.rational_resampler_xxx_0, 0), (self.pluto_sink_0, 0)) self.connect((self.rational_resampler_xxx_0_0, 0), (self.low_pass_filter_0_0, 0)) self.connect((self.rational_resampler_xxx_0_1, 0), (self.qtgui_sink_x_0, 0))