#!/usr/bin/env python2 # -*- coding: utf-8 -*- ################################################## # GNU Radio Python Flow Graph # Title: Usb Demod Rtlsdr # Generated: Sat Nov 5 20:19:39 2016 ################################################## if __name__ == '__main__': import ctypes import sys if sys.platform.startswith('linux'): try: x11 = ctypes.cdll.LoadLibrary('libX11.so') x11.XInitThreads() except: print "Warning: failed to XInitThreads()" from gnuradio import blocks from gnuradio import eng_notation from gnuradio import filter from gnuradio import gr from gnuradio import wxgui from gnuradio.eng_option import eng_option from gnuradio.fft import window from gnuradio.filter import firdes from gnuradio.filter import pfb from gnuradio.wxgui import fftsink2 from gnuradio.wxgui import forms from grc_gnuradio import blks2 as grc_blks2 from grc_gnuradio import wxgui as grc_wxgui from optparse import OptionParser import osmosdr import time import wx class usb_demod_rtlsdr(grc_wxgui.top_block_gui): def __init__(self): grc_wxgui.top_block_gui.__init__(self, title="Usb Demod Rtlsdr") ################################################## # Variables ################################################## self.samp_rate = samp_rate = 2e6 self.rf_gain = rf_gain = 25 self.if_gain = if_gain = 25 self.freq = freq = 440.980e6 self.bb_gain = bb_gain = 25 ################################################## # 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=0, maximum=50, num_steps=125, style=wx.SL_HORIZONTAL, cast=int, proportion=1, ) self.Add(_rf_gain_sizer) _if_gain_sizer = wx.BoxSizer(wx.VERTICAL) self._if_gain_text_box = forms.text_box( parent=self.GetWin(), sizer=_if_gain_sizer, value=self.if_gain, callback=self.set_if_gain, label="IF Gain", converter=forms.int_converter(), proportion=0, ) self._if_gain_slider = forms.slider( parent=self.GetWin(), sizer=_if_gain_sizer, value=self.if_gain, callback=self.set_if_gain, minimum=0, maximum=50, num_steps=125, style=wx.SL_HORIZONTAL, cast=int, proportion=1, ) self.Add(_if_gain_sizer) _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="Frequency", 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=435e6, maximum=445e6, num_steps=1000, style=wx.SL_HORIZONTAL, cast=float, proportion=1, ) self.Add(_freq_sizer) _bb_gain_sizer = wx.BoxSizer(wx.VERTICAL) self._bb_gain_text_box = forms.text_box( parent=self.GetWin(), sizer=_bb_gain_sizer, value=self.bb_gain, callback=self.set_bb_gain, label="BB Gain", converter=forms.int_converter(), proportion=0, ) self._bb_gain_slider = forms.slider( parent=self.GetWin(), sizer=_bb_gain_sizer, value=self.bb_gain, callback=self.set_bb_gain, minimum=0, maximum=50, num_steps=125, style=wx.SL_HORIZONTAL, cast=int, proportion=1, ) self.Add(_bb_gain_sizer) 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=samp_rate/4, fft_size=1024, fft_rate=5, average=False, avg_alpha=None, title="SSB Demod", peak_hold=False, ) self.Add(self.wxgui_fftsink2_1.win) self.wxgui_fftsink2_0 = fftsink2.fft_sink_c( self.GetWin(), baseband_freq=0, y_per_div=10, y_divs=10, ref_level=0, ref_scale=2.0, sample_rate=samp_rate, fft_size=1024, fft_rate=5, average=False, avg_alpha=None, title="Spectrum", peak_hold=False, ) self.Add(self.wxgui_fftsink2_0.win) self.pfb_arb_resampler_xxx_0 = pfb.arb_resampler_ccf( 0.923096, taps=None, flt_size=32) self.pfb_arb_resampler_xxx_0.declare_sample_delay(0) self.osmosdr_source_0 = osmosdr.source( args="numchan=" + str(1) + " " + "" ) self.osmosdr_source_0.set_sample_rate(samp_rate) self.osmosdr_source_0.set_center_freq(freq, 0) self.osmosdr_source_0.set_freq_corr(0, 0) self.osmosdr_source_0.set_dc_offset_mode(0, 0) self.osmosdr_source_0.set_iq_balance_mode(0, 0) self.osmosdr_source_0.set_gain_mode(False, 0) self.osmosdr_source_0.set_gain(rf_gain, 0) self.osmosdr_source_0.set_if_gain(if_gain, 0) self.osmosdr_source_0.set_bb_gain(bb_gain, 0) self.osmosdr_source_0.set_antenna("", 0) self.osmosdr_source_0.set_bandwidth(0, 0) self.blocks_float_to_short_0 = blocks.float_to_short(1, 25000) self.blocks_complex_to_real_0 = blocks.complex_to_real(1) self.blks2_tcp_sink_0 = grc_blks2.tcp_sink( itemsize=gr.sizeof_short*1, addr="127.0.0.1", port=9898, server=True, ) self.band_pass_filter_0 = filter.fir_filter_ccc(2, firdes.complex_band_pass( 1, samp_rate, 50000, 450000, 50000, firdes.WIN_HAMMING, 6.76)) ################################################## # Connections ################################################## self.connect((self.band_pass_filter_0, 0), (self.pfb_arb_resampler_xxx_0, 0)) self.connect((self.blocks_complex_to_real_0, 0), (self.blocks_float_to_short_0, 0)) self.connect((self.blocks_complex_to_real_0, 0), (self.wxgui_fftsink2_1, 0)) self.connect((self.blocks_float_to_short_0, 0), (self.blks2_tcp_sink_0, 0)) self.connect((self.osmosdr_source_0, 0), (self.band_pass_filter_0, 0)) self.connect((self.osmosdr_source_0, 0), (self.wxgui_fftsink2_0, 0)) self.connect((self.pfb_arb_resampler_xxx_0, 0), (self.blocks_complex_to_real_0, 0)) def get_samp_rate(self): return self.samp_rate def set_samp_rate(self, samp_rate): self.samp_rate = samp_rate self.band_pass_filter_0.set_taps(firdes.complex_band_pass(1, self.samp_rate, 50000, 450000, 50000, firdes.WIN_HAMMING, 6.76)) self.osmosdr_source_0.set_sample_rate(self.samp_rate) self.wxgui_fftsink2_0.set_sample_rate(self.samp_rate) self.wxgui_fftsink2_1.set_sample_rate(self.samp_rate/4) def get_rf_gain(self): return self.rf_gain def set_rf_gain(self, rf_gain): self.rf_gain = rf_gain self._rf_gain_slider.set_value(self.rf_gain) self._rf_gain_text_box.set_value(self.rf_gain) self.osmosdr_source_0.set_gain(self.rf_gain, 0) def get_if_gain(self): return self.if_gain def set_if_gain(self, if_gain): self.if_gain = if_gain self._if_gain_slider.set_value(self.if_gain) self._if_gain_text_box.set_value(self.if_gain) self.osmosdr_source_0.set_if_gain(self.if_gain, 0) def get_freq(self): return self.freq def set_freq(self, freq): self.freq = freq self._freq_slider.set_value(self.freq) self._freq_text_box.set_value(self.freq) self.osmosdr_source_0.set_center_freq(self.freq, 0) def get_bb_gain(self): return self.bb_gain def set_bb_gain(self, bb_gain): self.bb_gain = bb_gain self._bb_gain_slider.set_value(self.bb_gain) self._bb_gain_text_box.set_value(self.bb_gain) self.osmosdr_source_0.set_bb_gain(self.bb_gain, 0) def main(top_block_cls=usb_demod_rtlsdr, options=None): tb = top_block_cls() tb.Start(True) tb.Wait() if __name__ == '__main__': main()