def create_source(serial, device_type, lna_path, sample_rate, freq, if_bandwidth, gain, calibration=True): # TODO: Consider using NCO to avoid DC spur. # TODO: Support choosing the channel # TODO: Use sample_rate or if_bandwidth as calibr_bandw? if hasattr(limesdr._limesdr_swig, 'source_set_antenna'): # API changed drastically in gr-limesdr 3.0.1; this is the only way to detect the new API. s = limesdr.source(serial, ch, '') s.set_sample_rate(sample_rate) s.set_center_freq(freq) s.set_bandwidth(if_bandwidth, ch) s.set_digital_filter(if_bandwidth, ch) s.set_gain(gain, ch) s.set_antenna(lna_path, ch) if calibration: s.calibrate(60e6, ch) return s return limesdr.source( serial=serial, device_type=device_type, # LimeSDR-USB chip_mode=SISO, # SISO(1),MIMO(2) channel=ch, # A(0),B(1) file_switch=0, # Don't load settings from a file filename=defaultstr(''), rf_freq=freq, # Center frequency in Hz samp_rate=sample_rate, oversample=0, # 0(default),1,2,4,8,16,32 calibration_ch0=1 if calibration and ch == 0 else 0, calibr_bandw_ch0=60e6, calibration_ch1=1 if calibration and ch == 1 else 0, calibr_bandw_ch1=60e6, lna_path_mini=lna_path, # LNAH(1),LNAW(3) lna_path_ch0=lna_path, # no path(0),LNAH(1),LNAL(2),LNAW(3) lna_path_ch1=lna_path, # no path(0),LNAH(1),LNAL(2),LNAW(3) analog_filter_ch0=1, analog_bandw_ch0=if_bandwidth, analog_filter_ch1=1, analog_bandw_ch1=if_bandwidth, digital_filter_ch0=1, digital_bandw_ch0=if_bandwidth, digital_filter_ch1=1, digital_bandw_ch1=if_bandwidth, gain_dB_ch0=gain, gain_dB_ch1=gain, nco_freq_ch0=0, nco_freq_ch1=0, cmix_mode_ch0=0, # UPCONVERT(0), DOWNCONVERT(1) cmix_mode_ch1=0, # UPCONVERT(0), DOWNCONVERT(1) )
def __init__(self): gr.top_block.__init__(self, "Antenna Sweep module") ################################################## # Variables ################################################## self.trans_width = trans_width = 500e3 self.samp_rate = samp_rate = 32e6 self.sweep_tone = sweep_tone = 0 self.step_size = step_size = samp_rate / 2 - trans_width self.input_scale = input_scale = 1e-5 self.gain_tx = gain_tx = int(10) self.gain_rx = gain_rx = int(10) self.freq = freq = 50e6 ################################################## # Blocks ################################################## self.zmq_tx_pub = zeromq.pub_sink(gr.sizeof_gr_complex, 1, 'tcp://127.0.0.1:5000', 100, True, -1) self.zmq_rx_pub = zeromq.pub_sink(gr.sizeof_gr_complex, 1, 'tcp://127.0.0.1:5001', 100, True, -1) self.scale_tx = blocks.multiply_vcc(1) self.lo_input = analog.sig_source_c(samp_rate, analog.GR_COS_WAVE, freq + sweep_tone, 1, 0) self.limesdr_tx = limesdr.sink('', 0, '', '') self.limesdr_tx.set_sample_rate(samp_rate) self.limesdr_tx.set_center_freq(freq, 0) self.limesdr_tx.set_bandwidth(step_size, 0) self.limesdr_tx.set_digital_filter(step_size, 0) self.limesdr_tx.set_gain(gain_rx, 0) self.limesdr_tx.set_antenna(255, 0) self.limesdr_tx.calibrate(step_size, 0) self.limesdr_rx = limesdr.source('', 0, '') self.limesdr_rx.set_sample_rate(samp_rate) self.limesdr_rx.set_center_freq(freq, 0) self.limesdr_rx.set_bandwidth(step_size, 0) self.limesdr_rx.set_digital_filter(step_size, 0) self.limesdr_rx.set_gain(30, 0) self.limesdr_rx.set_antenna(255, 0) self.limesdr_rx.calibrate(step_size, 0) self.input_scale_source = analog.sig_source_c(0, analog.GR_CONST_WAVE, 0, 0, input_scale) ################################################## # Connections ################################################## self.connect((self.input_scale_source, 0), (self.scale_tx, 0)) self.connect((self.limesdr_rx, 0), (self.zmq_rx_pub, 0)) self.connect((self.lo_input, 0), (self.limesdr_tx, 0)) self.connect((self.lo_input, 0), (self.scale_tx, 1)) self.connect((self.scale_tx, 0), (self.zmq_tx_pub, 0))
def __init__(self): grc_wxgui.top_block_gui.__init__(self, title="Lime Auto Fast") ################################################## # Variables ################################################## self.samp_rate = samp_rate = 50e3 ################################################## # Blocks ################################################## self.wxgui_fftsink2_0 = fftsink2.fft_sink_c( self.GetWin(), baseband_freq=0, y_per_div=10, y_divs=10, ref_level=0, ref_scale=2.0, sample_rate=samp_rate, 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.limesdr_source_0 = limesdr.source('', 0, '') self.limesdr_source_0.set_sample_rate(samp_rate) self.limesdr_source_0.set_center_freq(393.5e6, 0) self.limesdr_source_0.set_bandwidth(5e6, 0) self.limesdr_source_0.set_gain(39, 0) self.limesdr_source_0.set_antenna(3, 0) self.limesdr_source_0.calibrate(5e6, 0) self.facsink_0 = facsink.fac_sink_c( self.GetWin(), title='Fast AutoCorrelation', sample_rate=samp_rate, baseband_freq=0, y_per_div=5, ref_level=-40, fac_size=65536, fac_rate=facsink.default_fac_rate, average=True, avg_alpha=0.3, peak_hold=True, ) self.Add(self.facsink_0.win) ################################################## # Connections ################################################## self.connect((self.limesdr_source_0, 0), (self.facsink_0, 0)) self.connect((self.limesdr_source_0, 0), (self.wxgui_fftsink2_0, 0))
def __init__(self): gr.top_block.__init__(self, "Top Block") ################################################## # Variables ################################################## self.samp_rate = samp_rate = 32000 ################################################## # Blocks ################################################## self.limesdr_source_0 = limesdr.source( '0009070105C62E09', 2, '/home/aaron/Documents/satcom/limeSuite/testFiles/lms7suite_wfm/loraRadioDualChannel' ) self.blocks_file_sink_0_0 = blocks.file_sink( gr.sizeof_gr_complex * 1, '/home/aaron/Documents/satcom/ieeeTracker/packetTracker/testData/rawIQData2', False) self.blocks_file_sink_0_0.set_unbuffered(False) self.blocks_file_sink_0 = blocks.file_sink( gr.sizeof_gr_complex * 1, '/home/aaron/Documents/satcom/ieeeTracker/packetTracker/testData/rawIQData', False) self.blocks_file_sink_0.set_unbuffered(False) self.blocks_burst_tagger_0_0 = blocks.burst_tagger( gr.sizeof_gr_complex) self.blocks_burst_tagger_0_0.set_true_tag('burst', True) self.blocks_burst_tagger_0_0.set_false_tag('burst', False) self.blocks_burst_tagger_0 = blocks.burst_tagger(gr.sizeof_gr_complex) self.blocks_burst_tagger_0.set_true_tag('burst', True) self.blocks_burst_tagger_0.set_false_tag('burst', False) self.analog_const_source_x_0 = analog.sig_source_s( 0, analog.GR_CONST_WAVE, 0, 0, -1) ################################################## # Connections ################################################## self.connect((self.analog_const_source_x_0, 0), (self.blocks_burst_tagger_0, 1)) self.connect((self.analog_const_source_x_0, 0), (self.blocks_burst_tagger_0_0, 1)) self.connect((self.blocks_burst_tagger_0, 0), (self.blocks_file_sink_0, 0)) self.connect((self.blocks_burst_tagger_0_0, 0), (self.blocks_file_sink_0_0, 0)) self.connect((self.limesdr_source_0, 1), (self.blocks_burst_tagger_0, 0)) self.connect((self.limesdr_source_0, 0), (self.blocks_burst_tagger_0_0, 0))
def __init__(self, zmq_address_iq_in='tcp://127.0.0.1:5052', zmq_address_iq_out='tcp://*:5051'): gr.top_block.__init__(self, "Zero Mq Split A") ################################################## # Parameters ################################################## self.zmq_address_iq_in = zmq_address_iq_in self.zmq_address_iq_out = zmq_address_iq_out ################################################## # Variables ################################################## self.samp_rate = samp_rate = 1e6 self.offset = offset = 0 self.capture_freq = capture_freq = 868.5e6 ################################################## # Blocks ################################################## self.zeromq_sub_source_0 = zeromq.sub_source(gr.sizeof_gr_complex, 1, zmq_address_iq_in, -1, False, -1) self.zeromq_pub_sink_0 = zeromq.pub_sink(gr.sizeof_gr_complex, 1, zmq_address_iq_out, -1, False, -1) self.limesdr_source_0 = limesdr.source('0009072C0287211A', 0, '') self.limesdr_source_0.set_sample_rate(samp_rate) self.limesdr_source_0.set_center_freq(capture_freq, 0) self.limesdr_source_0.set_bandwidth(5e6, 0) self.limesdr_source_0.set_gain(30, 0) self.limesdr_source_0.set_antenna(2, 0) self.limesdr_source_0.calibrate(5e6, 0) self.limesdr_sink_0 = limesdr.sink('', 0, '', '') self.limesdr_sink_0.set_sample_rate(samp_rate) self.limesdr_sink_0.set_center_freq(capture_freq, 0) self.limesdr_sink_0.set_bandwidth(5e6, 0) self.limesdr_sink_0.set_gain(50, 0) self.limesdr_sink_0.set_antenna(255, 0) self.limesdr_sink_0.calibrate(5e6, 0) ################################################## # Connections ################################################## self.connect((self.limesdr_source_0, 0), (self.zeromq_pub_sink_0, 0)) self.connect((self.zeromq_sub_source_0, 0), (self.limesdr_sink_0, 0))
def create_source(serial, device_type, lna_path, sample_rate, freq, if_bandwidth, gain, calibration=True): # TODO: Consider using NCO to avoid DC spur. # TODO: Support choosing the channel # TODO: Use sample_rate or if_bandwidth as calibr_bandw? return limesdr.source( serial=serial, device_type=device_type, # LimeSDR-USB chip_mode=SISO, # SISO(1),MIMO(2) channel=ch, # A(0),B(1) file_switch=0, # Don't load settings from a file filename=defaultstr(''), rf_freq=freq, # Center frequency in Hz samp_rate=sample_rate, oversample=0, # 0(default),1,2,4,8,16,32 calibration_ch0=1 if calibration and ch == 0 else 0, calibr_bandw_ch0=60e6, calibration_ch1=1 if calibration and ch == 1 else 0, calibr_bandw_ch1=60e6, lna_path_mini=lna_path, # LNAH(1),LNAW(3) lna_path_ch0=lna_path, # no path(0),LNAH(1),LNAL(2),LNAW(3) lna_path_ch1=lna_path, # no path(0),LNAH(1),LNAL(2),LNAW(3) analog_filter_ch0=1, analog_bandw_ch0=if_bandwidth, analog_filter_ch1=1, analog_bandw_ch1=if_bandwidth, digital_filter_ch0=1, digital_bandw_ch0=if_bandwidth, digital_filter_ch1=1, digital_bandw_ch1=if_bandwidth, gain_dB_ch0=gain, gain_dB_ch1=gain, nco_freq_ch0=0, nco_freq_ch1=0, cmix_mode_ch0=0, # UPCONVERT(0), DOWNCONVERT(1) cmix_mode_ch1=0, # UPCONVERT(0), DOWNCONVERT(1) )
def __init__(self, target_frequency, if_sampling_rate): super(source_limesdr, self).__init__( "source_limesdr", gr.io_signature(0, 0, 0), gr.io_signature(1, 1, gr.sizeof_gr_complex * 1), ) import limesdr rf_sampling_rate = 10e6 baseband_bandwidth = 1750000 offset_frequency = 0 rf_gain = 30 # Gains set assuming a front-end filter keeps out-of-band noise down. if_filter_attenuation = 60 rf_decimation, rf_decimation_remainder = divmod( rf_sampling_rate, if_sampling_rate) if rf_decimation_remainder != 0: raise RuntimeError('RF decimation must be an integer') rf_decimation = int(round(rf_decimation)) tuning_frequency = target_frequency - offset_frequency self.source = limesdr.source('', 0, '') self.source.set_sample_rate(rf_sampling_rate) self.source.set_center_freq(tuning_frequency, 0) self.source.set_gain(rf_gain, 0) self.source.set_antenna(2, 0) self.source.set_bandwidth(max(1.5e6, baseband_bandwidth), 0) self.source.calibrate(max(2.5e6, rf_sampling_rate), 0) if_taps = firdes.low_pass_2(1.0, rf_sampling_rate, if_sampling_rate * 0.45, if_sampling_rate * 0.1, if_filter_attenuation) self.if_filter = filter.freq_xlating_fir_filter_ccc( rf_decimation, (if_taps), offset_frequency, rf_sampling_rate) #self.if_filter.set_min_output_buffer(1048576) self.connect(self.source, self.if_filter, self)
def __init__(self): gr.top_block.__init__(self, "Adquisicion de datos del espectro") ################################################## # Variables ################################################## self.samp_rate = samp_rate = 30e6 self.nfft = nfft = 1024 self.ganancia = ganancia = 30 self.frec_central = frec_central = 470e6 ################################################## # Blocks ################################################## self.logpwrfft_x_0 = logpwrfft.logpwrfft_c( sample_rate=samp_rate, fft_size=nfft, ref_scale=2, frame_rate=30, avg_alpha=0.3, average=True, ) self.limesdr_source_0 = limesdr.source('00090726074D311B', 0, '') self.limesdr_source_0.set_sample_rate(samp_rate) self.limesdr_source_0.set_center_freq(frec_central, 0) self.limesdr_source_0.set_bandwidth(samp_rate, 0) self.limesdr_source_0.set_gain(ganancia, 0) self.limesdr_source_0.set_antenna(255, 0) self.limesdr_source_0.calibrate(samp_rate, 0) self.blocks_file_sink_0 = blocks.file_sink( gr.sizeof_float * nfft, '/home/uis-e3t/Documentos/tmp_plataforma/espectro', False) self.blocks_file_sink_0.set_unbuffered(False) ################################################## # Connections ################################################## self.connect((self.limesdr_source_0, 0), (self.logpwrfft_x_0, 0)) self.connect((self.logpwrfft_x_0, 0), (self.blocks_file_sink_0, 0))
def __init__(self, deviceSerialNumber): FlowGraphBlock.__init__(self) if (RadioSourceBlock.sdrSource == None): sdrSrc = limesdr.source( deviceSerialNumber, # device_number 1, # device_type = LimeSDR-Mini 1, # chip_mode = SISO 0, # channel = A (in SISO mode) 0, # file_switch = NO (don't load parameters from file) "", # filename = unused for no parameter file SDR_DEFAULT_FREQ, # rf_freq (default to 433MHz ISM band) SDR_SAMPLE_RATE, # samp_rate (default set to nominal 400 kHz) 16, # oversample (decimate by x16) 1, # calibration_ch0 enabled 2.5e6, # calibr_bandw_ch0 (default set to minimum 2.5 MHz) 0, # calibration_ch1 disabled 0, # calibr_bandw_ch1 unused 3, # lna_path_mini = LNAW 0, # lna_path_ch0 unused for LimeSDR-Mini 0, # lna_path_ch1 unused for LimeSDR-Mini 1, # analog_filter_ch0 enabled 1.5e6, # analog_bandw_ch0 (default set to minimum 1.5 MHz) 0, # analog_filter_ch1 disabled 1.5e6, # analog_bandw_ch1 unused 1, # digital_filter_ch0 enabled SDR_BANDWIDTH, # digital_bandw_ch0 (default to nominal 200 kHz) 0, # digital_filter_ch1 disabled SDR_BANDWIDTH, # digital_bandw_ch1 unused 40, # gain_dB_ch0 (default set to nominal 40dB) 0, # gain_dB_ch1 unused 0, # nco_freq_ch0 is unused 0, # nco_freq_ch1 is unused 0, # cmix_mode_ch0 is unused 0 # cmix_mode_ch1 is unused ) RadioSourceBlock.sdrSource = sdrSrc
def __init__(self): gr.top_block.__init__(self, "Top Block") Qt.QWidget.__init__(self) self.setWindowTitle("Top Block") qtgui.util.check_set_qss() try: self.setWindowIcon(Qt.QIcon.fromTheme('gnuradio-grc')) except: pass self.top_scroll_layout = Qt.QVBoxLayout() self.setLayout(self.top_scroll_layout) self.top_scroll = Qt.QScrollArea() self.top_scroll.setFrameStyle(Qt.QFrame.NoFrame) self.top_scroll_layout.addWidget(self.top_scroll) self.top_scroll.setWidgetResizable(True) self.top_widget = Qt.QWidget() self.top_scroll.setWidget(self.top_widget) self.top_layout = Qt.QVBoxLayout(self.top_widget) self.top_grid_layout = Qt.QGridLayout() self.top_layout.addLayout(self.top_grid_layout) self.settings = Qt.QSettings("GNU Radio", "top_block") self.restoreGeometry(self.settings.value("geometry").toByteArray()) ################################################## # Variables ################################################## self.num_channels = num_channels = 7 self.samp_rate = samp_rate = 400000 * num_channels self.center_freq = center_freq = 101.1e6 ################################################## # Blocks ################################################## self._center_freq_range = Range(98.1e6, 108.1e6, 200000, 101.1e6, 200) self._center_freq_win = RangeWidget(self._center_freq_range, self.set_center_freq, 'Frequency', "counter_slider", float) self.top_grid_layout.addWidget(self._center_freq_win, 1, 0, 1, 1) for r in range(1, 2): self.top_grid_layout.setRowStretch(r, 1) for c in range(0, 1): self.top_grid_layout.setColumnStretch(c, 1) self.qtgui_waterfall_sink_x_0 = qtgui.waterfall_sink_c( 1024, #size firdes.WIN_BLACKMAN_hARRIS, #wintype center_freq, #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(True) 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(-90, -50) 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) self.qtgui_freq_sink_x_0 = qtgui.freq_sink_c( 512, #size firdes.WIN_HAMMING, #wintype center_freq, #fc samp_rate, #bw "", #name num_channels #number of inputs ) self.qtgui_freq_sink_x_0.set_update_time(0.10) self.qtgui_freq_sink_x_0.set_y_axis(-100, -50) self.qtgui_freq_sink_x_0.set_y_label('Relative Gain', 'dBm') self.qtgui_freq_sink_x_0.set_trigger_mode(qtgui.TRIG_MODE_FREE, 0.0, 0, "") self.qtgui_freq_sink_x_0.enable_autoscale(False) self.qtgui_freq_sink_x_0.enable_grid(True) self.qtgui_freq_sink_x_0.set_fft_average(1.0) self.qtgui_freq_sink_x_0.enable_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 = [0.5, 0.5, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0] for i in xrange(num_channels): 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, 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.pfb_channelizer_ccf_0 = pfb.channelizer_ccf( num_channels, (makeTaps.makePolyphaseFilter(num_channels, 10)), 1.0, 1) self.pfb_channelizer_ccf_0.set_channel_map(([4, 5, 6, 0, 1, 2, 3])) self.pfb_channelizer_ccf_0.declare_sample_delay(0) self.limesdr_source_0 = limesdr.source('1D40F7A60B4B4E', 0, '') self.limesdr_source_0.set_sample_rate(samp_rate) self.limesdr_source_0.set_center_freq(center_freq, 0) self.limesdr_source_0.set_bandwidth(5e6, 0) self.limesdr_source_0.set_digital_filter(samp_rate, 0) self.limesdr_source_0.set_gain(40, 0) self.limesdr_source_0.set_antenna(2, 0) self.limesdr_source_0.calibrate(5e6, 0) ################################################## # Connections ################################################## self.connect((self.limesdr_source_0, 0), (self.pfb_channelizer_ccf_0, 0)) self.connect((self.limesdr_source_0, 0), (self.qtgui_waterfall_sink_x_0, 0)) self.connect((self.pfb_channelizer_ccf_0, 0), (self.qtgui_freq_sink_x_0, 0)) self.connect((self.pfb_channelizer_ccf_0, 1), (self.qtgui_freq_sink_x_0, 1)) self.connect((self.pfb_channelizer_ccf_0, 2), (self.qtgui_freq_sink_x_0, 2)) self.connect((self.pfb_channelizer_ccf_0, 3), (self.qtgui_freq_sink_x_0, 3)) self.connect((self.pfb_channelizer_ccf_0, 4), (self.qtgui_freq_sink_x_0, 4)) self.connect((self.pfb_channelizer_ccf_0, 5), (self.qtgui_freq_sink_x_0, 5)) self.connect((self.pfb_channelizer_ccf_0, 6), (self.qtgui_freq_sink_x_0, 6))
def __init__(self): grc_wxgui.top_block_gui.__init__(self, title="limeReceiver") _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 = 2e6 self.freq = freq = 2350e6 ################################################## # Blocks ################################################## self.wxgui_fftsink2_0 = fftsink2.fft_sink_c( self.GetWin(), baseband_freq=freq, y_per_div=10, y_divs=10, ref_level=0, ref_scale=2.0, sample_rate=samp_rate, fft_size=1024, fft_rate=15, average=True, avg_alpha=.1, title='FFT Plot', peak_hold=True, ) self.Add(self.wxgui_fftsink2_0.win) self.limesdr_source_0 = limesdr.source('1D424BDA12AF19', 1, 1, 0, 0, '', freq, samp_rate, 0, 0, 10e6, 0, 10e6, 3, 2, 2, 1, 5e6, 1, 5e6, 0, 0, 0, 0, 60, 30, 0, 0, 0, 0) self.digital_gfsk_demod_0 = digital.gfsk_demod( samples_per_symbol=4, sensitivity=1.012, gain_mu=0, mu=0, omega_relative_limit=0, freq_error=0.0, verbose=False, log=False, ) self.blocks_file_sink_0 = blocks.file_sink( gr.sizeof_char * 1, '/home/eaglesat/dataout.txt', False) self.blocks_file_sink_0.set_unbuffered(False) self.blks2_packet_decoder_0 = grc_blks2.packet_demod_b( grc_blks2.packet_decoder( access_code='', threshold=-1, callback=lambda ok, payload: self.blks2_packet_decoder_0. recv_pkt(ok, payload), ), ) ################################################## # Connections ################################################## self.connect((self.blks2_packet_decoder_0, 0), (self.blocks_file_sink_0, 0)) self.connect((self.digital_gfsk_demod_0, 0), (self.blks2_packet_decoder_0, 0)) self.connect((self.limesdr_source_0, 0), (self.digital_gfsk_demod_0, 0)) self.connect((self.limesdr_source_0, 0), (self.wxgui_fftsink2_0, 0))
def __init__(self): gr.top_block.__init__(self, "qo100", catch_exceptions=True) Qt.QWidget.__init__(self) self.setWindowTitle("qo100") 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", "qo100") 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.decim = decim = 11 self.vfo = vfo = 40e3 self.tx_vfo = tx_vfo = 40e3 self.samp_rate = samp_rate = decim * 48e3 self.rx0_low_cutoff = rx0_low_cutoff = 0 self.rx0_high_cutoff = rx0_high_cutoff = 3000 self.mag = mag = 0.9 self.af_gain = af_gain = 20 ################################################## # Blocks ################################################## self._vfo_msgdigctl_win = qtgui.MsgDigitalNumberControl( lbl='RX', min_freq_hz=-10e3, max_freq_hz=510e3, parent=self, thousands_separator=".", background_color="black", fontColor="white", var_callback=self.set_vfo, outputmsgname="'freq'".replace("'", "")) self._vfo_msgdigctl_win.setValue(40e3) self._vfo_msgdigctl_win.setReadOnly(False) self.vfo = self._vfo_msgdigctl_win self.top_layout.addWidget(self._vfo_msgdigctl_win) self._tx_vfo_msgdigctl_win = qtgui.MsgDigitalNumberControl( lbl='TX', min_freq_hz=-10e3, max_freq_hz=510e3, parent=self, thousands_separator=".", background_color="black", fontColor="white", var_callback=self.set_tx_vfo, outputmsgname="'freq'".replace("'", "")) self._tx_vfo_msgdigctl_win.setValue(40e3) self._tx_vfo_msgdigctl_win.setReadOnly(False) self.tx_vfo = self._tx_vfo_msgdigctl_win self.top_layout.addWidget(self._tx_vfo_msgdigctl_win) self._af_gain_range = Range(0, 200, 5, 20, 200) self._af_gain_win = RangeWidget(self._af_gain_range, self.set_af_gain, "af_gain", "counter_slider", float, QtCore.Qt.Horizontal) self.top_grid_layout.addWidget(self._af_gain_win, 29, 0, 1, 1) for r in range(29, 30): self.top_grid_layout.setRowStretch(r, 1) for c in range(0, 1): self.top_grid_layout.setColumnStretch(c, 1) self.vfo2_to_float = blocks.complex_to_float(1) self.vfo2_signal_source = analog.sig_source_c(samp_rate, analog.GR_COS_WAVE, 250e3 - 40e3, mag, 0, 0) self.vfo2_mixer = blocks.multiply_vcc(1) self.vfo2_bandpass = filter.fir_filter_ccc( decim, firdes.complex_band_pass(10, samp_rate, 0, 5000, 1000, window.WIN_HAMMING, 6.76)) self.vfo2_audio_sink = audio.sink(48000, 'pulse:rx2', False) self.vfo0_waterfall_atten = blocks.multiply_const_cc(0.01) self.vfo0_waterfall_add = blocks.add_vcc(1) self.vfo0_to_float = blocks.complex_to_float(1) self.vfo0_signal_source = analog.sig_source_c(samp_rate, analog.GR_COS_WAVE, 250e3 - vfo, mag, 0, 0) self.vfo0_scope_bandpass = filter.fir_filter_ccc( 2 * decim, firdes.complex_band_pass(1, samp_rate, -12e3, 12e3, 1000, window.WIN_HAMMING, 6.76)) self.vfo0_scope = qtgui.freq_sink_c( 1024, #size window.WIN_HAMMING, #wintype 0, #fc 24e3, #bw '', #name 1, None # parent ) self.vfo0_scope.set_update_time(0.01) self.vfo0_scope.set_y_axis(-86, -40) self.vfo0_scope.set_y_label('Relative Gain', 'dB') self.vfo0_scope.set_trigger_mode(qtgui.TRIG_MODE_FREE, 0.0, 0, "") self.vfo0_scope.enable_autoscale(False) self.vfo0_scope.enable_grid(True) self.vfo0_scope.set_fft_average(0.2) self.vfo0_scope.enable_axis_labels(True) self.vfo0_scope.enable_control_panel(True) self.vfo0_scope.set_fft_window_normalized(True) self.vfo0_scope.disable_legend() labels = ['', '', '', '', '', '', '', '', '', ''] widths = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1] colors = [ "blue", "red", "green", "black", "cyan", "magenta", "yellow", "dark red", "dark green", "dark blue" ] alphas = [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0] for i in range(1): if len(labels[i]) == 0: self.vfo0_scope.set_line_label(i, "Data {0}".format(i)) else: self.vfo0_scope.set_line_label(i, labels[i]) self.vfo0_scope.set_line_width(i, widths[i]) self.vfo0_scope.set_line_color(i, colors[i]) self.vfo0_scope.set_line_alpha(i, alphas[i]) self._vfo0_scope_win = sip.wrapinstance(self.vfo0_scope.qwidget(), Qt.QWidget) self.top_grid_layout.addWidget(self._vfo0_scope_win, 15, 0, 14, 1) for r in range(15, 29): self.top_grid_layout.setRowStretch(r, 1) for c in range(0, 1): self.top_grid_layout.setColumnStretch(c, 1) self.vfo0_mixer = blocks.multiply_vcc(1) self.vfo0_bandpass = filter.fir_filter_ccc( decim, firdes.complex_band_pass(af_gain, samp_rate, rx0_low_cutoff, rx0_high_cutoff, 1000, window.WIN_HAMMING, 6.76)) self.vfo0_audio_sink = audio.sink(48000, 'pulse', False) self.tx_vfo_signal_source = analog.sig_source_c( samp_rate, analog.GR_COS_WAVE, tx_vfo - 250e3, mag, 0, 0) self.tx_to_complex = blocks.float_to_complex(1) self.tx_mixer = blocks.multiply_vcc(1) self.tx_bandpass = filter.interp_fir_filter_ccc( 1, firdes.complex_band_pass(1, 48e3, 0, 3000, 1000, window.WIN_HAMMING, 6.76)) self.tx_audio_source = audio.source(48000, 'pulse:tx0.monitor', False) self.rx_resampler = filter.rational_resampler_ccc(interpolation=decim, decimation=1, taps=[], fractional_bw=0) self.rx0_low_cutoff_setter = blocks.msg_pair_to_var( self.set_rx0_low_cutoff) self.rx0_high_cutoff_setter = blocks.msg_pair_to_var( self.set_rx0_high_cutoff) self.qtgui_waterfall_sink_x_0 = qtgui.waterfall_sink_c( 2048, #size window.WIN_BLACKMAN_hARRIS, #wintype 250e3, #fc samp_rate, #bw "", #name 1, #number of inputs None # parent ) self.qtgui_waterfall_sink_x_0.set_update_time(0.05) self.qtgui_waterfall_sink_x_0.enable_grid(False) self.qtgui_waterfall_sink_x_0.enable_axis_labels(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 range(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(-75, -45) self._qtgui_waterfall_sink_x_0_win = sip.wrapinstance( self.qtgui_waterfall_sink_x_0.qwidget(), Qt.QWidget) self.top_grid_layout.addWidget(self._qtgui_waterfall_sink_x_0_win, 0, 0, 14, 1) for r in range(0, 14): self.top_grid_layout.setRowStretch(r, 1) for c in range(0, 1): self.top_grid_layout.setColumnStretch(c, 1) self.midi_block = midi_block.blk( midi_port='DJControl Compact:DJControl Compact DJControl Com') if "int" == "int": isFloat = False scaleFactor = 1 else: isFloat = True scaleFactor = 1 _low_cutoff_gauge_lg_win = qtgui.GrLevelGauge('', "default", "default", "default", 0, 3000, 100, False, 1, isFloat, scaleFactor, True, self) _low_cutoff_gauge_lg_win.setValue(0) self.low_cutoff_gauge = _low_cutoff_gauge_lg_win self.top_layout.addWidget(_low_cutoff_gauge_lg_win) self.limesdr_source = limesdr.source('', 0, '') self.limesdr_source.set_sample_rate(samp_rate) self.limesdr_source.set_center_freq(739.75e6, 0) self.limesdr_source.set_bandwidth(1.5e6, 0) self.limesdr_source.set_gain(30, 0) self.limesdr_source.set_antenna(2, 0) self.limesdr_source.calibrate(5e6, 0) self.limesdr_sink = limesdr.sink('', 0, '', '') self.limesdr_sink.set_sample_rate(samp_rate) self.limesdr_sink.set_center_freq(2400.250e6, 0) self.limesdr_sink.set_bandwidth(5e6, 0) self.limesdr_sink.set_gain(73, 0) self.limesdr_sink.set_antenna(2, 0) self.limesdr_sink.calibrate(2.5e6, 0) if "int" == "int": isFloat = False scaleFactor = 1 else: isFloat = True scaleFactor = 1 _high_cutoff_gauge_lg_win = qtgui.GrLevelGauge('', "default", "default", "default", 0, 3000, 100, False, 1, isFloat, scaleFactor, True, self) _high_cutoff_gauge_lg_win.setValue(3000) self.high_cutoff_gauge = _high_cutoff_gauge_lg_win self.top_layout.addWidget(_high_cutoff_gauge_lg_win) self.control = control.blk() self.blocks_swapiq_0 = blocks.swap_iq(1, gr.sizeof_gr_complex) ################################################## # Connections ################################################## self.msg_connect((self.control, 'rx0_high_cutoff'), (self.high_cutoff_gauge, 'value')) self.msg_connect((self.control, 'rx0_low_cutoff'), (self.low_cutoff_gauge, 'value')) self.msg_connect((self.control, 'midi_out'), (self.midi_block, 'midi_in')) self.msg_connect((self.control, 'rx0_high_cutoff'), (self.rx0_high_cutoff_setter, 'inpair')) self.msg_connect((self.control, 'rx0_low_cutoff'), (self.rx0_low_cutoff_setter, 'inpair')) self.msg_connect((self.control, 'tx_freq_out'), (self.tx_vfo, 'valuein')) self.msg_connect((self.control, 'rx_freq_out'), (self.vfo, 'valuein')) self.msg_connect((self.midi_block, 'midi_out'), (self.control, 'midi_in')) self.msg_connect((self.tx_vfo, 'valueout'), (self.control, 'tx_freq_in')) self.msg_connect((self.vfo, 'valueout'), (self.control, 'rx_freq_in')) self.connect((self.blocks_swapiq_0, 0), (self.vfo0_waterfall_atten, 0)) self.connect((self.limesdr_source, 0), (self.vfo0_mixer, 0)) self.connect((self.limesdr_source, 0), (self.vfo0_waterfall_add, 0)) self.connect((self.limesdr_source, 0), (self.vfo2_mixer, 0)) self.connect((self.rx_resampler, 0), (self.tx_mixer, 0)) self.connect((self.tx_audio_source, 0), (self.tx_to_complex, 0)) self.connect((self.tx_bandpass, 0), (self.rx_resampler, 0)) self.connect((self.tx_mixer, 0), (self.limesdr_sink, 0)) self.connect((self.tx_to_complex, 0), (self.tx_bandpass, 0)) self.connect((self.tx_vfo_signal_source, 0), (self.tx_mixer, 1)) self.connect((self.vfo0_bandpass, 0), (self.vfo0_to_float, 0)) self.connect((self.vfo0_mixer, 0), (self.vfo0_bandpass, 0)) self.connect((self.vfo0_mixer, 0), (self.vfo0_scope_bandpass, 0)) self.connect((self.vfo0_scope_bandpass, 0), (self.vfo0_scope, 0)) self.connect((self.vfo0_signal_source, 0), (self.blocks_swapiq_0, 0)) self.connect((self.vfo0_signal_source, 0), (self.vfo0_mixer, 1)) self.connect((self.vfo0_to_float, 0), (self.vfo0_audio_sink, 0)) self.connect((self.vfo0_waterfall_add, 0), (self.qtgui_waterfall_sink_x_0, 0)) self.connect((self.vfo0_waterfall_atten, 0), (self.vfo0_waterfall_add, 1)) self.connect((self.vfo2_bandpass, 0), (self.vfo2_to_float, 0)) self.connect((self.vfo2_mixer, 0), (self.vfo2_bandpass, 0)) self.connect((self.vfo2_signal_source, 0), (self.vfo2_mixer, 1)) self.connect((self.vfo2_to_float, 0), (self.vfo2_audio_sink, 0))
def __init__(self, alpha=0.15, antenna="TX/RX", beta=0.3, dump_filename="<<stdout>>", equalization_method="ppt_dd", ff="", filename="", freq=2.412e9, gain=30, nskip=20000000, samp_rate=20e6): gr.top_block.__init__(self, "SWiFi RX") ################################################## # Parameters ################################################## self.alpha = alpha self.antenna = antenna self.beta = beta self.dump_filename = dump_filename self.equalization_method = equalization_method self.ff = ff self.filename = filename self.freq = freq self.gain = gain self.nskip = nskip self.samp_rate = samp_rate ################################################## # Variables ################################################## self.header_mod = header_mod = swifi.wifi_constellation_bpsk() self.header_formatter_2 = header_formatter_2 = swifi.ofdm_phy_header_parser( "frame_len", "phy") ################################################## # Blocks ################################################## self.wirlab_CSI_to_File_0 = wirlab.CSI_to_File( gr.sizeof_gr_complex * 1, "", "CSI.log", True) self.swifi_wifi_conv_decoder_0_0 = swifi.wifi_conv_decoder(24, -1) self.swifi_wifi_conv_decoder_0 = swifi.wifi_conv_decoder("phy") self.swifi_scrambler_0 = swifi.scrambler(False, "phy") self.swifi_sample_marker_0 = swifi.sample_marker( gr.sizeof_gr_complex, "phy") self.swifi_payload_parser_0 = swifi.payload_parser( "phy", dump_filename, "text", ff, True) self.swifi_ofdm_frame_sync_0 = swifi.ofdm_frame_sync( 0.9, 64, 0.4, 0.05, 0.2, "trigger") self.swifi_ofdm_equalizer_1 = swifi.ofdm_equalizer( "", True, "channel_states", digital.constellation_bpsk().base()) self.swifi_ofdm_equalizer_1.set_equalization_method( equalization_method) self.swifi_ofdm_equalizer_1.set_alpha(alpha) self.swifi_ofdm_equalizer_1.set_beta(beta) self.swifi_ofdm_equalizer_1.enable_foc(False) self.swifi_ofdm_equalizer_0 = swifi.ofdm_equalizer( "phy", False, "channel_states") self.swifi_ofdm_equalizer_0.set_equalization_method( equalization_method) self.swifi_ofdm_equalizer_0.set_alpha(alpha) self.swifi_ofdm_equalizer_0.set_beta(beta) self.swifi_ofdm_equalizer_0.enable_foc(False) self.swifi_ofdm_chan_est_0 = swifi.ofdm_chan_est( 64, ((0, 0j, 0, 0j, 0, 0j, -1, 1j, -1, 1j, -1, 1j, -1, -1j, 1, 1j, 1, -1j, -1, 1j, 1, 1j, 1, 1j, 1, 1j, -1, (-0 - 1j), 1, -1j, -1, 1j, 0, -1j, 1, (-0 - 1j), 1, -1j, 1, 1j, -1, -1j, 1, (-0 - 1j), -1, 1j, 1, 1j, 1, 1j, 1, 1j, -1, -1j, 1, 1j, 1, -1j, -1, 0j, 0, 0j, 0, 0j), (0, 0, 0, 0, 0, 0, 1, 1, -1, -1, 1, 1, -1, 1, -1, 1, 1, 1, 1, 1, 1, -1, -1, 1, 1, -1, 1, -1, 1, 1, 1, 1, 0, 1, -1, -1, 1, 1, -1, 1, -1, 1, -1, -1, -1, -1, -1, 1, 1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, 0, 0, 0, 0, 0)), 0.5, "channel_states", "frame_len", 3, False) self.swifi_ofdm_chan_est_0.set_estimation_method(0) self.swifi_interleaver_0_0 = swifi.interleaver(False, 11) self.swifi_interleaver_0 = swifi.interleaver(False, "phy") self.swifi_header_payload_demux_0 = swifi.header_payload_demux( 3, 64, 16, "frame_len", "trigger", True, gr.sizeof_gr_complex, "phy") self.swifi_constellation_decoder_0 = swifi.constellation_decoder("phy") self.swifi_bit_unpacker_0 = swifi.bit_unpacker("phy", 1) self.swifi_bit_inserter_0 = swifi.bit_inserter("phy") self.limesdr_source_0 = limesdr.source("", 0, "") self.limesdr_source_0.set_sample_rate(10e6) self.limesdr_source_0.set_center_freq(2.472e9, 0) self.limesdr_source_0.set_bandwidth(20e6, 0) self.limesdr_source_0.set_gain(50, 0) self.limesdr_source_0.set_antenna(1, 0) self.limesdr_source_0.calibrate(5e6, 0) self.fft_vxx_0_0 = fft.fft_vcc(64, True, (window.rectangular(64)), True, 1) self.fft_vxx_0 = fft.fft_vcc(64, True, (window.rectangular(64)), True, 1) self.digital_packet_headerparser_b_0_0 = digital.packet_headerparser_b( header_formatter_2.base()) self.digital_constellation_decoder_cb_0 = digital.constellation_decoder_cb( header_mod.base()) self.blocks_vector_to_stream_1_0_0_0 = blocks.vector_to_stream( gr.sizeof_gr_complex * 1, 48) self.blocks_vector_to_stream_1_0 = blocks.vector_to_stream( gr.sizeof_gr_complex * 1, 48) self.blocks_unpacked_to_packed_xx_0_0 = blocks.unpacked_to_packed_bb( 1, gr.GR_LSB_FIRST) self.blocks_unpacked_to_packed_xx_0 = blocks.unpacked_to_packed_bb( 1, gr.GR_LSB_FIRST) ################################################## # Connections ################################################## self.msg_connect( (self.digital_packet_headerparser_b_0_0, 'header_data'), (self.swifi_header_payload_demux_0, 'header_data')) self.connect((self.blocks_unpacked_to_packed_xx_0, 0), (self.swifi_payload_parser_0, 0)) self.connect((self.blocks_unpacked_to_packed_xx_0_0, 0), (self.digital_packet_headerparser_b_0_0, 0)) self.connect((self.blocks_vector_to_stream_1_0, 0), (self.swifi_sample_marker_0, 0)) self.connect((self.blocks_vector_to_stream_1_0_0_0, 0), (self.digital_constellation_decoder_cb_0, 0)) self.connect((self.blocks_vector_to_stream_1_0_0_0, 0), (self.wirlab_CSI_to_File_0, 0)) self.connect((self.digital_constellation_decoder_cb_0, 0), (self.swifi_interleaver_0_0, 0)) self.connect((self.fft_vxx_0, 0), (self.swifi_ofdm_chan_est_0, 0)) self.connect((self.fft_vxx_0_0, 0), (self.swifi_ofdm_equalizer_0, 0)) self.connect((self.limesdr_source_0, 0), (self.swifi_ofdm_frame_sync_0, 0)) self.connect((self.swifi_bit_inserter_0, 0), (self.swifi_wifi_conv_decoder_0, 0)) self.connect((self.swifi_bit_unpacker_0, 0), (self.swifi_interleaver_0, 0)) self.connect((self.swifi_constellation_decoder_0, 0), (self.swifi_bit_unpacker_0, 0)) self.connect((self.swifi_header_payload_demux_0, 0), (self.fft_vxx_0, 0)) self.connect((self.swifi_header_payload_demux_0, 1), (self.fft_vxx_0_0, 0)) self.connect((self.swifi_interleaver_0, 0), (self.swifi_bit_inserter_0, 0)) self.connect((self.swifi_interleaver_0_0, 0), (self.swifi_wifi_conv_decoder_0_0, 0)) self.connect((self.swifi_ofdm_chan_est_0, 0), (self.swifi_ofdm_equalizer_1, 0)) self.connect((self.swifi_ofdm_equalizer_0, 0), (self.blocks_vector_to_stream_1_0, 0)) self.connect((self.swifi_ofdm_equalizer_1, 0), (self.blocks_vector_to_stream_1_0_0_0, 0)) self.connect((self.swifi_ofdm_frame_sync_0, 0), (self.swifi_header_payload_demux_0, 0)) self.connect((self.swifi_sample_marker_0, 0), (self.swifi_constellation_decoder_0, 0)) self.connect((self.swifi_scrambler_0, 0), (self.blocks_unpacked_to_packed_xx_0, 0)) self.connect((self.swifi_wifi_conv_decoder_0, 0), (self.swifi_scrambler_0, 0)) self.connect((self.swifi_wifi_conv_decoder_0_0, 0), (self.blocks_unpacked_to_packed_xx_0_0, 0))
def __init__(self): gr.top_block.__init__(self, "ACF") Qt.QWidget.__init__(self) self.setWindowTitle("ACF") 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", "Lime_Auto") self.restoreGeometry(self.settings.value("geometry").toByteArray()) ################################################## # Variables ################################################## self.samp_rate = samp_rate = 50e3 self.fft_0 = fft_0 = 32 * 32768 / 32 ################################################## # Blocks ################################################## self.qtgui_time_sink_x_0 = qtgui.time_sink_f( fft_0, #size samp_rate, #samp_rate "", #name 1 #number of inputs ) self.qtgui_time_sink_x_0.set_update_time(1) 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) self.qtgui_freq_sink_x_0 = qtgui.freq_sink_c( 1024, #size firdes.WIN_BLACKMAN_hARRIS, #wintype 0, #fc samp_rate, #bw "", #name 1 #number of inputs ) self.qtgui_freq_sink_x_0.set_update_time(0.01) self.qtgui_freq_sink_x_0.set_y_axis(-140, 10) self.qtgui_freq_sink_x_0.set_y_label('Relative Gain', 'dB') self.qtgui_freq_sink_x_0.set_trigger_mode(qtgui.TRIG_MODE_FREE, 0.0, 0, "") self.qtgui_freq_sink_x_0.enable_autoscale(False) self.qtgui_freq_sink_x_0.enable_grid(False) self.qtgui_freq_sink_x_0.set_fft_average(1.0) self.qtgui_freq_sink_x_0.enable_axis_labels(True) self.qtgui_freq_sink_x_0.enable_control_panel(False) if not True: self.qtgui_freq_sink_x_0.disable_legend() if "complex" == "float" or "complex" == "msg_float": self.qtgui_freq_sink_x_0.set_plot_pos_half(not True) labels = ['', '', '', '', '', '', '', '', '', ''] widths = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1] colors = [ "blue", "red", "green", "black", "cyan", "magenta", "yellow", "dark red", "dark green", "dark blue" ] alphas = [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0] for i in xrange(1): if len(labels[i]) == 0: self.qtgui_freq_sink_x_0.set_line_label( i, "Data {0}".format(i)) else: self.qtgui_freq_sink_x_0.set_line_label(i, labels[i]) self.qtgui_freq_sink_x_0.set_line_width(i, widths[i]) self.qtgui_freq_sink_x_0.set_line_color(i, colors[i]) self.qtgui_freq_sink_x_0.set_line_alpha(i, alphas[i]) self._qtgui_freq_sink_x_0_win = sip.wrapinstance( self.qtgui_freq_sink_x_0.pyqwidget(), Qt.QWidget) self.top_grid_layout.addWidget(self._qtgui_freq_sink_x_0_win) self.limesdr_source_0 = limesdr.source('', 0, '') self.limesdr_source_0.set_sample_rate(samp_rate) self.limesdr_source_0.set_center_freq(393.525e6, 0) self.limesdr_source_0.set_bandwidth(5e6, 0) self.limesdr_source_0.set_gain(49, 0) self.limesdr_source_0.set_antenna(3, 0) self.limesdr_source_0.calibrate(5e6, 0) self.fft_vxx_0_1 = fft.fft_vfc(fft_0, False, (), 1) self.fft_vxx_0 = fft.fft_vcc(fft_0, True, (), True, 1) self.blocks_vector_to_stream_0 = blocks.vector_to_stream( gr.sizeof_float * 1, fft_0) self.blocks_stream_to_vector_0 = blocks.stream_to_vector( gr.sizeof_gr_complex * 1, fft_0) self.blocks_nlog10_ff_0 = blocks.nlog10_ff(20, 1, 0) self.blocks_delay_0_0_0 = blocks.delay(gr.sizeof_gr_complex * 1, 0) self.blocks_complex_to_mag_1 = blocks.complex_to_mag(fft_0) self.blocks_complex_to_mag_0 = blocks.complex_to_mag(fft_0) ################################################## # Connections ################################################## self.connect((self.blocks_complex_to_mag_0, 0), (self.blocks_vector_to_stream_0, 0)) self.connect((self.blocks_complex_to_mag_1, 0), (self.fft_vxx_0_1, 0)) self.connect((self.blocks_delay_0_0_0, 0), (self.blocks_stream_to_vector_0, 0)) self.connect((self.blocks_nlog10_ff_0, 0), (self.qtgui_time_sink_x_0, 0)) self.connect((self.blocks_stream_to_vector_0, 0), (self.fft_vxx_0, 0)) self.connect((self.blocks_vector_to_stream_0, 0), (self.blocks_nlog10_ff_0, 0)) self.connect((self.fft_vxx_0, 0), (self.blocks_complex_to_mag_1, 0)) self.connect((self.fft_vxx_0_1, 0), (self.blocks_complex_to_mag_0, 0)) self.connect((self.limesdr_source_0, 0), (self.blocks_delay_0_0_0, 0)) self.connect((self.limesdr_source_0, 0), (self.qtgui_freq_sink_x_0, 0))
def __init__(self): grc_wxgui.top_block_gui.__init__( self, title="Stereo FM receiver and RDS Decoder") _icon_path = "D:\Program Files\GNURadio-3.7\share\icons\hicolor\scalable/apps\gnuradio-grc.png" self.SetIcon(wx.Icon(_icon_path, wx.BITMAP_TYPE_ANY)) ################################################## # Variables ################################################## self.freq_offset = freq_offset = 250000 self.freq = freq = 105.3e6 self.volume = volume = -3 self.samp_rate = samp_rate = 2000000 self.gain = gain = 20 self.freq_tune = freq_tune = freq - freq_offset ################################################## # Blocks ################################################## _volume_sizer = wx.BoxSizer(wx.VERTICAL) self._volume_text_box = forms.text_box( parent=self.GetWin(), sizer=_volume_sizer, value=self.volume, callback=self.set_volume, label='Volume', converter=forms.float_converter(), proportion=0, ) self._volume_slider = forms.slider( parent=self.GetWin(), sizer=_volume_sizer, value=self.volume, callback=self.set_volume, minimum=-20, maximum=10, num_steps=300, style=wx.SL_HORIZONTAL, cast=float, proportion=1, ) self.GridAdd(_volume_sizer, 0, 1, 1, 1) self.nb = self.nb = wx.Notebook(self.GetWin(), style=wx.NB_TOP) self.nb.AddPage(grc_wxgui.Panel(self.nb), "BB") self.nb.AddPage(grc_wxgui.Panel(self.nb), "Demod") self.nb.AddPage(grc_wxgui.Panel(self.nb), "Waterfall") self.nb.AddPage(grc_wxgui.Panel(self.nb), "L+R") self.nb.AddPage(grc_wxgui.Panel(self.nb), "L-R") self.nb.AddPage(grc_wxgui.Panel(self.nb), "RDS") self.nb.AddPage(grc_wxgui.Panel(self.nb), "Const") self.GridAdd(self.nb, 2, 0, 1, 2) _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='RF 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=49.6, num_steps=124, style=wx.SL_HORIZONTAL, cast=float, proportion=1, ) self.GridAdd(_gain_sizer, 0, 0, 1, 1) _freq_sizer = wx.BoxSizer(wx.VERTICAL) self._freq_text_box = forms.text_box( parent=self.GetWin(), sizer=_freq_sizer, value=self.freq, callback=self.set_freq, label='Freq', converter=forms.float_converter(), proportion=0, ) self._freq_slider = forms.slider( parent=self.GetWin(), sizer=_freq_sizer, value=self.freq, callback=self.set_freq, minimum=88e6, maximum=108e6, num_steps=200, style=wx.SL_HORIZONTAL, cast=float, proportion=1, ) self.GridAdd(_freq_sizer, 1, 0, 1, 2) self.wxgui_waterfallsink2_0 = waterfallsink2.waterfall_sink_f( self.nb.GetPage(2).GetWin(), baseband_freq=0, dynamic_range=100, ref_level=0, ref_scale=2.0, sample_rate=250000, fft_size=512, fft_rate=15, average=False, avg_alpha=None, title='Waterfall Plot', ) self.nb.GetPage(2).Add(self.wxgui_waterfallsink2_0.win) self.wxgui_scopesink2_1 = scopesink2.scope_sink_c( self.nb.GetPage(6).GetWin(), title='Scope Plot', sample_rate=2375 * 4, v_scale=0.4, v_offset=0, t_scale=0, ac_couple=False, xy_mode=True, num_inputs=1, trig_mode=wxgui.TRIG_MODE_AUTO, y_axis_label='Counts', ) self.nb.GetPage(6).Add(self.wxgui_scopesink2_1.win) self.wxgui_fftsink2_0_0_0_1_0_1 = fftsink2.fft_sink_c( self.nb.GetPage(5).GetWin(), baseband_freq=0, y_per_div=10, y_divs=10, ref_level=0, ref_scale=2.0, sample_rate=19000, fft_size=1024, fft_rate=15, average=False, avg_alpha=None, title='RDS', peak_hold=False, ) self.nb.GetPage(5).Add(self.wxgui_fftsink2_0_0_0_1_0_1.win) self.wxgui_fftsink2_0_0_0_1 = fftsink2.fft_sink_f( self.nb.GetPage(4).GetWin(), baseband_freq=0, y_per_div=10, y_divs=10, ref_level=0, ref_scale=2.0, sample_rate=48000, fft_size=1024, fft_rate=15, average=False, avg_alpha=None, title='L-R', peak_hold=False, ) self.nb.GetPage(4).Add(self.wxgui_fftsink2_0_0_0_1.win) self.wxgui_fftsink2_0_0_0 = fftsink2.fft_sink_f( self.nb.GetPage(3).GetWin(), baseband_freq=0, y_per_div=10, y_divs=10, ref_level=0, ref_scale=2.0, sample_rate=48000, fft_size=1024, fft_rate=15, average=False, avg_alpha=None, title='L+R', peak_hold=False, ) self.nb.GetPage(3).Add(self.wxgui_fftsink2_0_0_0.win) self.wxgui_fftsink2_0_0 = fftsink2.fft_sink_f( self.nb.GetPage(1).GetWin(), baseband_freq=0, y_per_div=10, y_divs=10, ref_level=0, ref_scale=2.0, sample_rate=250000, fft_size=1024, fft_rate=15, average=True, avg_alpha=0.8, title='FM Demod', peak_hold=False, ) self.nb.GetPage(1).Add(self.wxgui_fftsink2_0_0.win) self.wxgui_fftsink2_0 = fftsink2.fft_sink_c( self.nb.GetPage(0).GetWin(), baseband_freq=0, y_per_div=10, y_divs=10, ref_level=-30, ref_scale=2.0, sample_rate=samp_rate, fft_size=1024, fft_rate=15, average=True, avg_alpha=0.8, title='Baseband', peak_hold=False, ) self.nb.GetPage(0).Add(self.wxgui_fftsink2_0.win) self.root_raised_cosine_filter_0 = filter.fir_filter_ccf( 2, firdes.root_raised_cosine(1, 19000, 2375, .35, 100)) self.pfb_arb_resampler_xxx_1 = pfb.arb_resampler_fff(240000.0 / 250000, taps=None, flt_size=32) self.pfb_arb_resampler_xxx_1.declare_sample_delay(0) self.pfb_arb_resampler_xxx_0 = pfb.arb_resampler_ccf(19000 / 250e3, taps=None, flt_size=32) self.pfb_arb_resampler_xxx_0.declare_sample_delay(0) self.limesdr_source_0 = limesdr.source('', 0, '') self.limesdr_source_0.set_sample_rate(samp_rate) self.limesdr_source_0.set_center_freq(freq_tune, 0) self.limesdr_source_0.set_bandwidth(1.5e6, 0) self.limesdr_source_0.set_gain(gain, 0) self.limesdr_source_0.set_antenna(255, 0) self.gr_rds_parser_0 = rds.parser(True, False, 0) self.gr_rds_panel_0 = rds.rdsPanel(freq, self.GetWin()) self.Add(self.gr_rds_panel_0.panel) self.gr_rds_decoder_0 = rds.decoder(False, False) self.freq_xlating_fir_filter_xxx_2 = filter.freq_xlating_fir_filter_fcf( 5, (firdes.low_pass(1.0, 240000, 13e3, 3e3, firdes.WIN_HAMMING)), 38000, 240000) self.freq_xlating_fir_filter_xxx_1_0 = filter.freq_xlating_fir_filter_fcc( 1, (firdes.low_pass(2500.0, 250000, 2.6e3, 2e3, firdes.WIN_HAMMING)), 57e3, 250000) self.freq_xlating_fir_filter_xxx_0 = filter.freq_xlating_fir_filter_ccc( 1, (firdes.low_pass(1, samp_rate, 80000, 20000)), freq_offset, samp_rate) self.fir_filter_xxx_1 = filter.fir_filter_fff( 5, (firdes.low_pass(1.0, 240000, 13e3, 3e3, firdes.WIN_HAMMING))) self.fir_filter_xxx_1.declare_sample_delay(0) self.digital_psk_demod_0 = digital.psk.psk_demod( constellation_points=2, differential=False, samples_per_symbol=4, excess_bw=0.35, phase_bw=6.28 / 100.0, timing_bw=6.28 / 100.0, mod_code="gray", verbose=False, log=False, ) self.digital_diff_decoder_bb_0 = digital.diff_decoder_bb(2) self.blocks_sub_xx_0 = blocks.sub_ff(1) self.blocks_multiply_const_vxx_0_0 = blocks.multiply_const_vff( (10**(1. * (volume) / 10), )) self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vff( (10**(1. * (volume) / 10), )) self.blocks_keep_one_in_n_0 = blocks.keep_one_in_n( gr.sizeof_char * 1, 2) self.blocks_complex_to_real_0 = blocks.complex_to_real(1) self.blocks_add_xx_0 = blocks.add_vff(1) self.audio_sink_0 = audio.sink(48000, '', True) self.analog_wfm_rcv_0 = analog.wfm_rcv( quad_rate=samp_rate, audio_decimation=8, ) self.analog_fm_deemph_0_0_0 = analog.fm_deemph(fs=48000, tau=75e-6) self.analog_fm_deemph_0_0 = analog.fm_deemph(fs=48000, tau=75e-6) ################################################## # Connections ################################################## self.msg_connect((self.gr_rds_decoder_0, 'out'), (self.gr_rds_parser_0, 'in')) self.msg_connect((self.gr_rds_parser_0, 'out'), (self.gr_rds_panel_0, 'in')) self.connect((self.analog_fm_deemph_0_0, 0), (self.blocks_multiply_const_vxx_0_0, 0)) self.connect((self.analog_fm_deemph_0_0_0, 0), (self.blocks_multiply_const_vxx_0, 0)) self.connect((self.analog_wfm_rcv_0, 0), (self.freq_xlating_fir_filter_xxx_1_0, 0)) self.connect((self.analog_wfm_rcv_0, 0), (self.pfb_arb_resampler_xxx_1, 0)) self.connect((self.analog_wfm_rcv_0, 0), (self.wxgui_fftsink2_0_0, 0)) self.connect((self.analog_wfm_rcv_0, 0), (self.wxgui_waterfallsink2_0, 0)) self.connect((self.blocks_add_xx_0, 0), (self.analog_fm_deemph_0_0_0, 0)) self.connect((self.blocks_complex_to_real_0, 0), (self.blocks_add_xx_0, 1)) self.connect((self.blocks_complex_to_real_0, 0), (self.blocks_sub_xx_0, 1)) self.connect((self.blocks_complex_to_real_0, 0), (self.wxgui_fftsink2_0_0_0_1, 0)) self.connect((self.blocks_keep_one_in_n_0, 0), (self.digital_diff_decoder_bb_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, 0), (self.audio_sink_0, 1)) self.connect((self.blocks_sub_xx_0, 0), (self.analog_fm_deemph_0_0, 0)) self.connect((self.digital_diff_decoder_bb_0, 0), (self.gr_rds_decoder_0, 0)) self.connect((self.digital_psk_demod_0, 0), (self.blocks_keep_one_in_n_0, 0)) self.connect((self.fir_filter_xxx_1, 0), (self.blocks_add_xx_0, 0)) self.connect((self.fir_filter_xxx_1, 0), (self.blocks_sub_xx_0, 0)) self.connect((self.fir_filter_xxx_1, 0), (self.wxgui_fftsink2_0_0_0, 0)) self.connect((self.freq_xlating_fir_filter_xxx_0, 0), (self.analog_wfm_rcv_0, 0)) self.connect((self.freq_xlating_fir_filter_xxx_0, 0), (self.wxgui_fftsink2_0, 0)) self.connect((self.freq_xlating_fir_filter_xxx_1_0, 0), (self.pfb_arb_resampler_xxx_0, 0)) self.connect((self.freq_xlating_fir_filter_xxx_2, 0), (self.blocks_complex_to_real_0, 0)) self.connect((self.limesdr_source_0, 0), (self.freq_xlating_fir_filter_xxx_0, 0)) self.connect((self.pfb_arb_resampler_xxx_0, 0), (self.root_raised_cosine_filter_0, 0)) self.connect((self.pfb_arb_resampler_xxx_0, 0), (self.wxgui_fftsink2_0_0_0_1_0_1, 0)) self.connect((self.pfb_arb_resampler_xxx_1, 0), (self.fir_filter_xxx_1, 0)) self.connect((self.pfb_arb_resampler_xxx_1, 0), (self.freq_xlating_fir_filter_xxx_2, 0)) self.connect((self.root_raised_cosine_filter_0, 0), (self.digital_psk_demod_0, 0)) self.connect((self.root_raised_cosine_filter_0, 0), (self.wxgui_scopesink2_1, 0))
def __init__(self): grc_wxgui.top_block_gui.__init__(self, title="Top Block") _icon_path = "D:\Program Files\GNURadio-3.7\share\icons\hicolor\scalable/apps\gnuradio-grc.png" self.SetIcon(wx.Icon(_icon_path, wx.BITMAP_TYPE_ANY)) ################################################## # Variables ################################################## self.volume = volume = 0 self.samp_rate = samp_rate = 2e6 self.rf_gain = rf_gain = 15 self.rf_freq = rf_freq = 100e6 self.down_rate = down_rate = 250000 ################################################## # Blocks ################################################## _volume_sizer = wx.BoxSizer(wx.VERTICAL) self._volume_text_box = forms.text_box( parent=self.GetWin(), sizer=_volume_sizer, value=self.volume, callback=self.set_volume, label='volume', converter=forms.float_converter(), proportion=0, ) self._volume_slider = forms.slider( parent=self.GetWin(), sizer=_volume_sizer, value=self.volume, callback=self.set_volume, minimum=0, maximum=100, num_steps=100, style=wx.SL_HORIZONTAL, cast=float, proportion=1, ) self.GridAdd(_volume_sizer, 1, 5, 1, 8) _rf_gain_sizer = wx.BoxSizer(wx.VERTICAL) self._rf_gain_text_box = forms.text_box( parent=self.GetWin(), sizer=_rf_gain_sizer, value=self.rf_gain, callback=self.set_rf_gain, label='rf_gain', converter=forms.float_converter(), proportion=0, ) self._rf_gain_slider = forms.slider( parent=self.GetWin(), sizer=_rf_gain_sizer, value=self.rf_gain, callback=self.set_rf_gain, minimum=10, maximum=70, num_steps=12, style=wx.SL_HORIZONTAL, cast=float, proportion=1, ) self.GridAdd(_rf_gain_sizer, 1, 0, 1, 2) _rf_freq_sizer = wx.BoxSizer(wx.VERTICAL) self._rf_freq_text_box = forms.text_box( parent=self.GetWin(), sizer=_rf_freq_sizer, value=self.rf_freq, callback=self.set_rf_freq, label='rf_freq', converter=forms.float_converter(), proportion=0, ) self._rf_freq_slider = forms.slider( parent=self.GetWin(), sizer=_rf_freq_sizer, value=self.rf_freq, callback=self.set_rf_freq, minimum=80e6, maximum=110e6, num_steps=300, style=wx.SL_HORIZONTAL, cast=float, proportion=1, ) self.GridAdd(_rf_freq_sizer, 1, 2, 1, 2) self.wxgui_fftsink2_1 = fftsink2.fft_sink_f( self.GetWin(), baseband_freq=0, y_per_div=10, y_divs=10, ref_level=0, ref_scale=2.0, sample_rate=down_rate, fft_size=1024, fft_rate=15, average=False, avg_alpha=None, title='Demod out', peak_hold=False, ) self.Add(self.wxgui_fftsink2_1.win) self.wxgui_fftsink2_0 = fftsink2.fft_sink_c( self.GetWin(), baseband_freq=rf_freq, y_per_div=10, y_divs=10, ref_level=0, ref_scale=2.0, sample_rate=samp_rate, fft_size=1024, fft_rate=15, average=False, avg_alpha=None, title='FFT Plot', peak_hold=False, ) self.Add(self.wxgui_fftsink2_0.win) self.rational_resampler_xxx_0 = filter.rational_resampler_fff( interpolation=24, decimation=250, taps=None, fractional_bw=None, ) self.low_pass_filter_0 = filter.fir_filter_ccf(int(samp_rate / down_rate), firdes.low_pass( 2, samp_rate, 100e3, 10e3, firdes.WIN_KAISER, 6.76)) self.limesdr_source_0 = limesdr.source('', 0, '') self.limesdr_source_0.set_sample_rate(samp_rate) self.limesdr_source_0.set_center_freq(rf_freq, 0) self.limesdr_source_0.set_bandwidth(1.5e6,0) self.limesdr_source_0.set_gain(rf_gain,0) self.limesdr_source_0.set_antenna(255,0) self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vff((volume / 100, )) self.audio_sink_0 = audio.sink(24000, '', True) self.analog_wfm_rcv_0 = analog.wfm_rcv( quad_rate=down_rate, audio_decimation=1, ) ################################################## # Connections ################################################## self.connect((self.analog_wfm_rcv_0, 0), (self.rational_resampler_xxx_0, 0)) self.connect((self.analog_wfm_rcv_0, 0), (self.wxgui_fftsink2_1, 0)) self.connect((self.blocks_multiply_const_vxx_0, 0), (self.audio_sink_0, 0)) self.connect((self.limesdr_source_0, 0), (self.low_pass_filter_0, 0)) self.connect((self.limesdr_source_0, 0), (self.wxgui_fftsink2_0, 0)) self.connect((self.low_pass_filter_0, 0), (self.analog_wfm_rcv_0, 0)) self.connect((self.rational_resampler_xxx_0, 0), (self.blocks_multiply_const_vxx_0, 0))
def __init__(self): grc_wxgui.top_block_gui.__init__(self, title="Top Block") _icon_path = "/usr/share/icons/hicolor/32x32/apps/gnuradio-grc.png" self.SetIcon(wx.Icon(_icon_path, wx.BITMAP_TYPE_ANY)) ################################################## # Variables ################################################## self.samp_rate = samp_rate = 2e6 ################################################## # Blocks ################################################## self.wxgui_constellationsink2_0 = constsink_gl.const_sink_c( self.GetWin(), title='Constellation Plot', sample_rate=samp_rate, frame_rate=5, const_size=2048, M=4, theta=0, loop_bw=6.28 / 100.0, fmax=0.06, mu=0.5, gain_mu=0.005, symbol_rate=samp_rate / 4., omega_limit=0.005, ) self.Add(self.wxgui_constellationsink2_0.win) self.limesdr_source_0 = limesdr.source('0009081C05C10C24', 0, '') self.limesdr_source_0.set_sample_rate(samp_rate) self.limesdr_source_0.set_center_freq(500e6, 0) self.limesdr_source_0.set_bandwidth(5e6, 0) self.limesdr_source_0.set_gain(30, 0) self.limesdr_source_0.set_antenna(2, 0) self.limesdr_source_0.calibrate(5e6, 0) self.limesdr_sink_0 = limesdr.sink('0009081C05C10C24', 0, '', '') self.limesdr_sink_0.set_sample_rate(samp_rate) self.limesdr_sink_0.set_center_freq(520e6, 0) self.limesdr_sink_0.set_bandwidth(5e6, 0) self.limesdr_sink_0.set_gain(30, 0) self.limesdr_sink_0.set_antenna(1, 0) self.limesdr_sink_0.calibrate(5e6, 0) self.digital_gmsk_mod_0 = digital.gmsk_mod( samples_per_symbol=2, bt=0.35, verbose=False, log=False, ) self.digital_gmsk_demod_0 = digital.gmsk_demod( samples_per_symbol=2, gain_mu=0.175, mu=0.5, omega_relative_limit=0.005, freq_error=0.0, verbose=False, log=False, ) self.blocks_udp_source_0 = blocks.udp_source(gr.sizeof_char * 1, '192.168.8.100', 10000, 1472, True) self.blocks_udp_sink_1 = blocks.udp_sink(gr.sizeof_char * 1, '192.168.8.100', 10000, 1472, True) self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((1, )) self.blks2_packet_encoder_0 = grc_blks2.packet_mod_b( grc_blks2.packet_encoder( samples_per_symbol=2, bits_per_symbol=2, preamble='', access_code='', pad_for_usrp=False, ), payload_length=30, ) self.blks2_packet_decoder_0 = grc_blks2.packet_demod_b( grc_blks2.packet_decoder( access_code='', threshold=-1, callback=lambda ok, payload: self.blks2_packet_decoder_0. recv_pkt(ok, payload), ), ) ################################################## # Connections ################################################## self.connect((self.blks2_packet_decoder_0, 0), (self.blocks_udp_sink_1, 0)) self.connect((self.blks2_packet_encoder_0, 0), (self.digital_gmsk_mod_0, 0)) self.connect((self.blocks_multiply_const_vxx_0, 0), (self.limesdr_sink_0, 0)) self.connect((self.blocks_multiply_const_vxx_0, 0), (self.wxgui_constellationsink2_0, 0)) self.connect((self.blocks_udp_source_0, 0), (self.blks2_packet_encoder_0, 0)) self.connect((self.digital_gmsk_demod_0, 0), (self.blks2_packet_decoder_0, 0)) self.connect((self.digital_gmsk_mod_0, 0), (self.blocks_multiply_const_vxx_0, 0)) self.connect((self.limesdr_source_0, 0), (self.digital_gmsk_demod_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") self.restoreGeometry( self.settings.value("geometry", type=QtCore.QByteArray)) ################################################## # Variables ################################################## self.samp_rate = samp_rate = 2e6 self.phase = phase = 1 self.RF_Freq = RF_Freq = 20e6 ################################################## # Look-up Tables for Phase Shift ################################################## phi = numpy.arange(0, 361, 1) pi = math.pi cos_lut = [] sin_lut = [] cos_lut = numpy.cos(pi * phi / 180) sin_lut = numpy.sin(pi * phi / 180) ################################################## # Blocks ################################################## self._phase_range = Range(0, 361, 1, 1, 200) self._phase_win = RangeWidget(self._phase_range, self.set_phase, "phase", "counter_slider", int) self.top_grid_layout.addWidget(self._phase_win) self.limesdr_source_0 = limesdr.source('0009070602470A0E', 0, '') self.limesdr_source_0.set_sample_rate(samp_rate) self.limesdr_source_0.set_center_freq(RF_Freq, 0) self.limesdr_source_0.set_bandwidth(21e6, 0) self.limesdr_source_0.set_digital_filter(5e3, 0) self.limesdr_source_0.set_gain(0, 0) self.limesdr_source_0.set_antenna(2, 0) self.limesdr_source_0.calibrate(5e6, 0) (self.limesdr_source_0).set_min_output_buffer(4096) (self.limesdr_source_0).set_max_output_buffer(4096) self.limesdr_sink_0 = limesdr.sink('0009070602470A0E', 0, '', '') self.limesdr_sink_0.set_sample_rate(samp_rate) self.limesdr_sink_0.set_center_freq(30e6, 0) self.limesdr_sink_0.set_bandwidth(31e6, 0) self.limesdr_sink_0.set_digital_filter(5e3, 0) self.limesdr_sink_0.set_gain(60, 0) self.limesdr_sink_0.set_antenna(1, 0) self.limesdr_sink_0.calibrate(5e6, 0) self.blocks_multiply_const_vxx_0_0 = blocks.multiply_const_vff( (sin_lut[phase], )) self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vff( (-cos_lut[phase], )) self.blocks_float_to_complex_0 = blocks.float_to_complex(1) self.blocks_complex_to_float_0_0 = blocks.complex_to_float(1) ################################################## # Connections ################################################## self.connect((self.blocks_complex_to_float_0_0, 0), (self.blocks_multiply_const_vxx_0, 0)) self.connect((self.blocks_complex_to_float_0_0, 1), (self.blocks_multiply_const_vxx_0_0, 0)) self.connect((self.blocks_float_to_complex_0, 0), (self.limesdr_sink_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.blocks_float_to_complex_0, 1)) self.connect((self.limesdr_source_0, 0), (self.blocks_complex_to_float_0_0, 0))
def phy_init_source(self): self._phy_src = limesdr.source(self.lms_dev_serial, self.lms_dev_ch_mode, "") self._phy_src.set_sample_rate(self.sample_rate) self._phy_src.set_gain(self.rx_gain, 0)
def __init__(self): parser = OptionParser() parser.add_option("--length", type="int", dest="length", help="MAC payload length(1-112)", default="10") parser.add_option("--rate", type="float", dest="rate", help="Tx and Rx sample rate", default=4e6) parser.add_option("--period", type="int", dest="period", help="Message Source Period", default=500) (options, args) = parser.parse_args() gr.top_block.__init__(self, "IEEE 802.15.4 Transceiver using OQPSK PHY") Qt.QWidget.__init__(self) self.setWindowTitle("IEEE 802.15.4 Transceiver using OQPSK PHY") 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", "transceiver_OQPSK") self.restoreGeometry(self.settings.value("geometry").toByteArray()) ################################################## # Variables ################################################## self.tx_gain = tx_gain = 0.75 self.samp_rate = samp_rate = options.rate self.rx_gain = rx_gain = 0.75 self.freq = freq = 2480000000 ################################################## # Blocks ################################################## self._tx_gain_range = Range(0, 1, 0.01, 0.75, 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) self._rx_gain_range = Range(0, 1, 0.01, 0.75, 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) self.qtgui_time_sink_x_0 = qtgui.time_sink_c( 1024, #size 4e6, #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) self.qtgui_time_sink_x_0.enable_stem_plot(False) if not True: self.qtgui_time_sink_x_0.disable_legend() labels = ['', '', '', '', '', '', '', '', '', ''] widths = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1] colors = [ "blue", "red", "green", "black", "cyan", "magenta", "yellow", "dark red", "dark green", "blue" ] styles = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1] markers = [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1] alphas = [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0] for i in xrange(2): if len(labels[i]) == 0: if (i % 2 == 0): self.qtgui_time_sink_x_0.set_line_label( i, "Re{{Data {0}}}".format(i / 2)) else: self.qtgui_time_sink_x_0.set_line_label( i, "Im{{Data {0}}}".format(i / 2)) else: self.qtgui_time_sink_x_0.set_line_label(i, labels[i]) self.qtgui_time_sink_x_0.set_line_width(i, widths[i]) self.qtgui_time_sink_x_0.set_line_color(i, colors[i]) self.qtgui_time_sink_x_0.set_line_style(i, styles[i]) self.qtgui_time_sink_x_0.set_line_marker(i, markers[i]) self.qtgui_time_sink_x_0.set_line_alpha(i, alphas[i]) self._qtgui_time_sink_x_0_win = sip.wrapinstance( self.qtgui_time_sink_x_0.pyqwidget(), Qt.QWidget) self.top_grid_layout.addWidget(self._qtgui_time_sink_x_0_win) self.output_chain_0 = output_chain(samp_rate=samp_rate, ) self.limesdr_source_0_0 = limesdr.source( 0, 2, 1, 0, 0, '/home/saptarshi/Documents/MasterThesis@RISE/lime-gnuradio/src/limesuite/build/example', 2.48e9, samp_rate, 0, 1, samp_rate, 0, 10e6, 1, 2, 1, 1, 5e6 + samp_rate % 5e6 * int(samp_rate / 5e6), 0, 10e6, 0, samp_rate, 0, 0, 60, 60) self.limesdr_sink_1 = limesdr.sink( 0, 2, 1, 0, 0, '', 2.48e9, samp_rate, 0, 1, samp_rate, 0, 10e6, 1, 2, 1, 1, 5e6 + samp_rate % 5e6 * int(samp_rate / 5e6), 0, 10e6, 0, 4e6, 0, 0, 60, 60) self.input_chain_0 = input_chain(omega=samp_rate / 2e6, ) self.ieee802_15_4_rime_stack_0 = ieee802_15_4.rime_stack( ([129]), ([131]), ([132]), ([23, 42])) self.ieee802_15_4_mac_0 = ieee802_15_4.mac(False, 0x8841, 0, 0x1aaa, 0xffff, 0x3344) self._freq_options = [ 1000000 * (2400 + 5 * (i - 10)) for i in range(11, 27) ] self._freq_labels = [str(i) for i in range(11, 27)] self._freq_tool_bar = Qt.QToolBar(self) self._freq_tool_bar.addWidget(Qt.QLabel('Channel' + ": ")) self._freq_combo_box = Qt.QComboBox() self._freq_tool_bar.addWidget(self._freq_combo_box) for label in self._freq_labels: self._freq_combo_box.addItem(label) self._freq_callback = lambda i: Qt.QMetaObject.invokeMethod( self._freq_combo_box, "setCurrentIndex", Qt.Q_ARG("int", self._freq_options.index(i))) self._freq_callback(self.freq) self._freq_combo_box.currentIndexChanged.connect( lambda i: self.set_freq(self._freq_options[i])) self.top_grid_layout.addWidget(self._freq_tool_bar) self.foo_rtt_0 = foo.rtt(options.period, options.length) self.blocks_file_sink_0_0 = blocks.file_sink(gr.sizeof_char * 1, '/tmp/timings', False) self.blocks_file_sink_0_0.set_unbuffered(True) ################################################## # Connections ################################################## self.msg_connect((self.foo_rtt_0, 'out'), (self.ieee802_15_4_rime_stack_0, 'bcin')) self.msg_connect((self.ieee802_15_4_mac_0, 'app out'), (self.ieee802_15_4_rime_stack_0, 'fromMAC')) self.msg_connect((self.ieee802_15_4_mac_0, 'pdu out'), (self.output_chain_0, 'txin')) self.msg_connect((self.ieee802_15_4_rime_stack_0, 'bcout'), (self.foo_rtt_0, 'in')) self.msg_connect((self.ieee802_15_4_rime_stack_0, 'toMAC'), (self.ieee802_15_4_mac_0, 'app in')) self.msg_connect((self.input_chain_0, 'rxout'), (self.ieee802_15_4_mac_0, 'pdu in')) self.connect((self.foo_rtt_0, 0), (self.blocks_file_sink_0_0, 0)) self.connect((self.limesdr_source_0_0, 0), (self.input_chain_0, 0)) #self.connect((self.limesdr_source_0_0, 0), (self.qtgui_time_sink_x_0, 0)) self.connect((self.output_chain_0, 0), (self.limesdr_sink_1, 0))
def __init__(self): gr.top_block.__init__(self, "Top Block") Qt.QWidget.__init__(self) self.setWindowTitle("Top Block") try: self.setWindowIcon(Qt.QIcon.fromTheme('gnuradio-grc')) except: pass self.top_scroll_layout = Qt.QVBoxLayout() self.setLayout(self.top_scroll_layout) self.top_scroll = Qt.QScrollArea() self.top_scroll.setFrameStyle(Qt.QFrame.NoFrame) self.top_scroll_layout.addWidget(self.top_scroll) self.top_scroll.setWidgetResizable(True) self.top_widget = Qt.QWidget() self.top_scroll.setWidget(self.top_widget) self.top_layout = Qt.QVBoxLayout(self.top_widget) self.top_grid_layout = Qt.QGridLayout() self.top_layout.addLayout(self.top_grid_layout) self.settings = Qt.QSettings("GNU Radio", "top_block") self.restoreGeometry(self.settings.value("geometry").toByteArray()) ################################################## # Variables ################################################## self.samp_rate = samp_rate = 15e6 self.if_bandwidth_1 = if_bandwidth_1 = 2e6 self.sdr_gain = sdr_gain = 60 self.integration_bandwidth = integration_bandwidth = 5e3 self.if_filter_decimation_rate = if_filter_decimation_rate = int(samp_rate/(1.1*if_bandwidth_1)) self.sdr_power_offset = sdr_power_offset = 1.0 self.sdr_gain_lin = sdr_gain_lin = 10**(sdr_gain/20) self.num_channels = num_channels = int((samp_rate/if_filter_decimation_rate)/integration_bandwidth) self.lna_gain_measured = lna_gain_measured = 33.33 self.integration_time = integration_time = 10 self.if_samp_rate = if_samp_rate = samp_rate/if_filter_decimation_rate self.cable_loss = cable_loss = 0.25 self.variable_function_probe = variable_function_probe = 0 self.sdr_frequency = sdr_frequency = 1420.406e6 self.output_vector_bandwidth = output_vector_bandwidth = samp_rate/if_filter_decimation_rate self.offset_frequency = offset_frequency = if_bandwidth_1/2+1e5 self.integration_scale_factor = integration_scale_factor = np.full((num_channels),float(1.0/(integration_time*integration_bandwidth*50)),dtype=float) self.integration_dec_rate = integration_dec_rate = int(integration_time*if_samp_rate/num_channels) self.if_filter_gain = if_filter_gain = 1/(lna_gain_measured*cable_loss*sdr_gain_lin*sdr_power_offset) self.if_bandwidth_0 = if_bandwidth_0 = 5.5e6 self.channel_skirt = channel_skirt = integration_bandwidth/100 self.channel_map = channel_map = range(int(num_channels/2.0+1.0),num_channels,1)+range(0,int(num_channels/2.0+1.0),1) self.antenna_gain_estimated = antenna_gain_estimated = 173 ################################################## # Blocks ################################################## self.probe_signal = blocks.probe_signal_vf(num_channels) def _variable_function_probe_probe(): while True: val = self.probe_signal.level() try: self.set_variable_function_probe(val) except AttributeError: pass time.sleep(1.0 / (10)) _variable_function_probe_thread = threading.Thread(target=_variable_function_probe_probe) _variable_function_probe_thread.daemon = True _variable_function_probe_thread.start() self.pfb_channelizer_ccf_0 = pfb.channelizer_ccf( num_channels, (firdes.low_pass(1, if_samp_rate, (integration_bandwidth/2-channel_skirt), channel_skirt, firdes.WIN_HAMMING)), 1.0, 0) self.pfb_channelizer_ccf_0.set_channel_map((channel_map)) self.pfb_channelizer_ccf_0.declare_sample_delay(0) self.low_pass_filter_1 = filter.fir_filter_ccf(if_filter_decimation_rate, firdes.low_pass( if_filter_gain, samp_rate, if_bandwidth_1/2, 1e5, firdes.WIN_HAMMING, 6.76)) self.limesdr_source_2 = limesdr.source('0009060B00471B22', 2, 1, 0, 0, '', sdr_frequency-offset_frequency, samp_rate, 0, 1, 15e6, 0, 10e6, 3, 2, 2, 1, if_bandwidth_0, 1, 5e6, 1, if_bandwidth_0, 0, 0, sdr_gain, 30, 0, 0, 0, 0) self.blocks_streams_to_vector_0 = blocks.streams_to_vector(gr.sizeof_gr_complex*1, num_channels) self.blocks_multiply_xx_1 = blocks.multiply_vcc(1) self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vff((integration_scale_factor)) self.blocks_integrate_xx_0_0 = blocks.integrate_ff(integration_dec_rate, num_channels) self.blocks_file_sink_0 = blocks.file_sink(gr.sizeof_gr_complex*1, '/home/w1xm-admin/Documents/DSP/data_out/recieve_block_sink', False) self.blocks_file_sink_0.set_unbuffered(False) self.blocks_copy_0_0 = blocks.copy(gr.sizeof_gr_complex*1) self.blocks_copy_0_0.set_enabled(False) self.blocks_copy_0 = blocks.copy(gr.sizeof_gr_complex*1) self.blocks_copy_0.set_enabled(True) self.blocks_complex_to_mag_squared_0 = blocks.complex_to_mag_squared(num_channels) self.analog_sig_source_x_0 = analog.sig_source_c(samp_rate, analog.GR_SIN_WAVE, -offset_frequency, 1, 0) ################################################## # Connections ################################################## self.connect((self.analog_sig_source_x_0, 0), (self.blocks_multiply_xx_1, 1)) self.connect((self.blocks_complex_to_mag_squared_0, 0), (self.blocks_integrate_xx_0_0, 0)) self.connect((self.blocks_copy_0, 0), (self.blocks_multiply_xx_1, 0)) self.connect((self.blocks_copy_0_0, 0), (self.blocks_file_sink_0, 0)) self.connect((self.blocks_integrate_xx_0_0, 0), (self.blocks_multiply_const_vxx_0, 0)) self.connect((self.blocks_multiply_const_vxx_0, 0), (self.probe_signal, 0)) self.connect((self.blocks_multiply_xx_1, 0), (self.low_pass_filter_1, 0)) self.connect((self.blocks_streams_to_vector_0, 0), (self.blocks_complex_to_mag_squared_0, 0)) self.connect((self.limesdr_source_2, 0), (self.blocks_copy_0, 0)) self.connect((self.limesdr_source_2, 0), (self.blocks_copy_0_0, 0)) self.connect((self.low_pass_filter_1, 0), (self.pfb_channelizer_ccf_0, 0)) for i in range(num_channels): self.connect((self.pfb_channelizer_ccf_0, i), (self.blocks_streams_to_vector_0, i))
def __init__(self): grc_wxgui.top_block_gui.__init__(self, title="Top Block") _icon_path = "D:\Program Files\GNURadio-3.7\share\icons\hicolor\scalable/apps\gnuradio-grc.png" self.SetIcon(wx.Icon(_icon_path, wx.BITMAP_TYPE_ANY)) ################################################## # Variables ################################################## self.volume = volume = 50 self.samp_rate = samp_rate = 30e6 self.rf_gain = rf_gain = 15 self.rf_freq = rf_freq = 1717.5e6 self.down_rate = down_rate = 3e6 ################################################## # Blocks ################################################## _rf_gain_sizer = wx.BoxSizer(wx.VERTICAL) self._rf_gain_text_box = forms.text_box( parent=self.GetWin(), sizer=_rf_gain_sizer, value=self.rf_gain, callback=self.set_rf_gain, label='rf_gain', converter=forms.int_converter(), proportion=0, ) self._rf_gain_slider = forms.slider( parent=self.GetWin(), sizer=_rf_gain_sizer, value=self.rf_gain, callback=self.set_rf_gain, minimum=10, maximum=70, num_steps=12, style=wx.SL_HORIZONTAL, cast=int, proportion=1, ) self.GridAdd(_rf_gain_sizer, 1, 0, 1, 2) _rf_freq_sizer = wx.BoxSizer(wx.VERTICAL) self._rf_freq_text_box = forms.text_box( parent=self.GetWin(), sizer=_rf_freq_sizer, value=self.rf_freq, callback=self.set_rf_freq, label='rf_freq', converter=forms.float_converter(), proportion=0, ) self._rf_freq_slider = forms.slider( parent=self.GetWin(), sizer=_rf_freq_sizer, value=self.rf_freq, callback=self.set_rf_freq, minimum=10e6, maximum=3000e6, num_steps=300, style=wx.SL_HORIZONTAL, cast=float, proportion=1, ) self.GridAdd(_rf_freq_sizer, 1, 2, 1, 2) self.wxgui_waterfallsink2_0 = waterfallsink2.waterfall_sink_c( self.GetWin(), baseband_freq=0, dynamic_range=100, ref_level=0, ref_scale=2.0, sample_rate=samp_rate, fft_size=1024, fft_rate=50, average=False, avg_alpha=None, title='Waterfall Plot', ) self.Add(self.wxgui_waterfallsink2_0.win) self.wxgui_fftsink2_0 = fftsink2.fft_sink_c( self.GetWin(), baseband_freq=rf_freq, y_per_div=10, y_divs=10, ref_level=0, ref_scale=2.0, sample_rate=samp_rate, fft_size=1024, fft_rate=50, average=False, avg_alpha=None, title='FFT Plot', peak_hold=False, ) self.Add(self.wxgui_fftsink2_0.win) _volume_sizer = wx.BoxSizer(wx.VERTICAL) self._volume_text_box = forms.text_box( parent=self.GetWin(), sizer=_volume_sizer, value=self.volume, callback=self.set_volume, label='volume', converter=forms.float_converter(), proportion=0, ) self._volume_slider = forms.slider( parent=self.GetWin(), sizer=_volume_sizer, value=self.volume, callback=self.set_volume, minimum=0, maximum=100, num_steps=100, style=wx.SL_HORIZONTAL, cast=float, proportion=1, ) self.GridAdd(_volume_sizer, 1, 5, 1, 8) self.limesdr_source_0 = limesdr.source('', 0, '') self.limesdr_source_0.set_sample_rate(samp_rate) self.limesdr_source_0.set_center_freq(rf_freq, 0) self.limesdr_source_0.set_bandwidth(30e6,0) self.limesdr_source_0.set_gain(rf_gain,0) self.limesdr_source_0.set_antenna(255,0) ################################################## # Connections ################################################## self.connect((self.limesdr_source_0, 0), (self.wxgui_fftsink2_0, 0)) self.connect((self.limesdr_source_0, 0), (self.wxgui_waterfallsink2_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.variable_cc_encoder_def_0 = variable_cc_encoder_def_0 = map( (lambda a: fec.cc_encoder_make(4096, 7, 2, ([79, 109]), 0, fec. CC_STREAMING, False)), range(0, 1)) self.variable_cc_decoder_def_0 = variable_cc_decoder_def_0 = map( (lambda a: fec.cc_decoder.make(4096, 7, 2, ([79, 109]), 0, -1, fec. CC_STREAMING, False)), range(0, 1)) self.samp_rate = samp_rate = 500000 self.code1 = code1 = '010110011011101100010101011111101001001110001011010001101010001' ################################################## # Blocks ################################################## self.qtgui_time_sink_x_0 = qtgui.time_sink_c( 1024, #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(False) self.qtgui_time_sink_x_0.enable_axis_labels(True) self.qtgui_time_sink_x_0.enable_control_panel(False) self.qtgui_time_sink_x_0.enable_stem_plot(False) if not True: self.qtgui_time_sink_x_0.disable_legend() labels = ['', '', '', '', '', '', '', '', '', ''] widths = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1] colors = [ "blue", "red", "green", "black", "cyan", "magenta", "yellow", "dark red", "dark green", "blue" ] styles = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1] markers = [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1] alphas = [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0] for i in xrange(2): if len(labels[i]) == 0: if (i % 2 == 0): self.qtgui_time_sink_x_0.set_line_label( i, "Re{{Data {0}}}".format(i / 2)) else: self.qtgui_time_sink_x_0.set_line_label( i, "Im{{Data {0}}}".format(i / 2)) else: self.qtgui_time_sink_x_0.set_line_label(i, labels[i]) self.qtgui_time_sink_x_0.set_line_width(i, widths[i]) self.qtgui_time_sink_x_0.set_line_color(i, colors[i]) self.qtgui_time_sink_x_0.set_line_style(i, styles[i]) self.qtgui_time_sink_x_0.set_line_marker(i, markers[i]) self.qtgui_time_sink_x_0.set_line_alpha(i, alphas[i]) self._qtgui_time_sink_x_0_win = sip.wrapinstance( self.qtgui_time_sink_x_0.pyqwidget(), Qt.QWidget) self.top_layout.addWidget(self._qtgui_time_sink_x_0_win) self.limesdr_source_0 = limesdr.source('1D424A48F1332A', 0, '') self.limesdr_source_0.set_sample_rate(samp_rate) self.limesdr_source_0.set_center_freq(1.43e9, 0) self.limesdr_source_0.set_bandwidth(5e6, 0) self.limesdr_source_0.set_digital_filter(500e3, 0) self.limesdr_source_0.set_gain(20, 0) self.limesdr_source_0.set_antenna(255, 0) self.digital_gmsk_demod_0 = digital.gmsk_demod( samples_per_symbol=2, gain_mu=0.175, mu=0.5, omega_relative_limit=0.005, freq_error=0.0, verbose=False, log=False, ) self.digital_costas_loop_cc_0 = digital.costas_loop_cc(5e-3, 2, False) self.blocks_file_sink_0 = blocks.file_sink( gr.sizeof_char * 1, '/home/beam/Desktop/SHADE/GnuRadio/out.txt', False) self.blocks_file_sink_0.set_unbuffered(True) self.blks2_packet_decoder_0 = grc_blks2.packet_demod_b( grc_blks2.packet_decoder( access_code=code1, threshold=-1, callback=lambda ok, payload: self.blks2_packet_decoder_0. recv_pkt(ok, payload), ), ) ################################################## # Connections ################################################## self.connect((self.blks2_packet_decoder_0, 0), (self.blocks_file_sink_0, 0)) self.connect((self.digital_costas_loop_cc_0, 0), (self.digital_gmsk_demod_0, 0)) self.connect((self.digital_costas_loop_cc_0, 0), (self.qtgui_time_sink_x_0, 0)) self.connect((self.digital_gmsk_demod_0, 0), (self.blks2_packet_decoder_0, 0)) self.connect((self.limesdr_source_0, 0), (self.digital_costas_loop_cc_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 = 15e6 self.integration_bandwidth = integration_bandwidth = 2.5e3 self.if_bandwidth_2 = if_bandwidth_2 = .75e6 self.dec_rate_1 = dec_rate_1 = 5 self.samp_rate_2 = samp_rate_2 = samp_rate / dec_rate_1 self.num_channels = num_channels = int(if_bandwidth_2 / integration_bandwidth) self.samp_rate_3 = samp_rate_3 = samp_rate_2 / num_channels self.integration_time = integration_time = .5 self.variable_function_probe = variable_function_probe = 0 self.output_samp_rate = output_samp_rate = 1.0 / integration_time self.integration_dec_rate = integration_dec_rate = int( integration_time * samp_rate_3 / 2) self.if_bandwidth_0 = if_bandwidth_0 = 4.5e6 self.gain = gain = 60 self.freq = freq = 1.4204e9 self.channel_map = channel_map = range( int(num_channels / 2.0 + 1.0), num_channels, 1) + range( 0, int(num_channels / 2.0 + 1.0), 1) ################################################## # Blocks ################################################## self.probe_signal = blocks.probe_signal_vf(num_channels) self._gain_range = Range(0, 70, 1, 60, 200) self._gain_win = RangeWidget(self._gain_range, self.set_gain, "gain", "counter_slider", int) self.top_layout.addWidget(self._gain_win) def _variable_function_probe_probe(): while True: val = self.probe_signal.level() try: self.set_variable_function_probe(val) except AttributeError: pass pytime.sleep(1.0 / (10)) _variable_function_probe_thread = threading.Thread( target=_variable_function_probe_probe) _variable_function_probe_thread.daemon = True _variable_function_probe_thread.start() self.pfb_channelizer_ccf_0 = pfb.channelizer_ccf( num_channels, (firdes.low_pass(1, samp_rate_2, integration_bandwidth, 250, firdes.WIN_HAMMING)), 1.0, 0) self.pfb_channelizer_ccf_0.set_channel_map((channel_map)) self.pfb_channelizer_ccf_0.declare_sample_delay(0) self.low_pass_filter_1 = filter.fir_filter_ccf( dec_rate_1, firdes.low_pass(10, samp_rate, if_bandwidth_2, 1e5, firdes.WIN_HAMMING, 6.76)) self.limesdr_source_2 = limesdr.source('0009072C02873717', 2, 1, 0, 0, '', freq - 800e3, samp_rate, 0, 1, 15e6, 0, 10e6, 3, 2, 2, 1, if_bandwidth_0, 1, 5e6, 1, if_bandwidth_0, 0, 0, gain, 30, 0, 0, 0, 0) self.blocks_streams_to_vector_0 = blocks.streams_to_vector( gr.sizeof_gr_complex * 1, num_channels) self.blocks_multiply_xx_1 = blocks.multiply_vcc(1) self.blocks_integrate_xx_0_0 = blocks.integrate_ff( integration_dec_rate, num_channels) self.blocks_file_sink_0 = blocks.file_sink( gr.sizeof_gr_complex * 1, '/home/w1xm-admin/Documents/DSP/data_out/recieve_block_sink', False) self.blocks_file_sink_0.set_unbuffered(False) self.blocks_copy_0_0 = blocks.copy(gr.sizeof_gr_complex * 1) self.blocks_copy_0_0.set_enabled(False) self.blocks_copy_0 = blocks.copy(gr.sizeof_gr_complex * 1) self.blocks_copy_0.set_enabled(True) self.blocks_complex_to_mag_squared_0 = blocks.complex_to_mag_squared( num_channels) self.analog_sig_source_x_0 = analog.sig_source_c( samp_rate, analog.GR_SIN_WAVE, -800e3, 1, 0) ################################################## # Connections ################################################## self.connect((self.analog_sig_source_x_0, 0), (self.blocks_multiply_xx_1, 1)) self.connect((self.blocks_complex_to_mag_squared_0, 0), (self.blocks_integrate_xx_0_0, 0)) self.connect((self.blocks_copy_0, 0), (self.blocks_multiply_xx_1, 0)) self.connect((self.blocks_copy_0_0, 0), (self.blocks_file_sink_0, 0)) self.connect((self.blocks_integrate_xx_0_0, 0), (self.probe_signal, 0)) self.connect((self.blocks_multiply_xx_1, 0), (self.low_pass_filter_1, 0)) self.connect((self.blocks_streams_to_vector_0, 0), (self.blocks_complex_to_mag_squared_0, 0)) self.connect((self.limesdr_source_2, 0), (self.blocks_copy_0, 0)) self.connect((self.limesdr_source_2, 0), (self.blocks_copy_0_0, 0)) self.connect((self.low_pass_filter_1, 0), (self.pfb_channelizer_ccf_0, 0)) for i in range(num_channels): self.connect((self.pfb_channelizer_ccf_0, i), (self.blocks_streams_to_vector_0, i))