#!/usr/bin/env python ################################################## # Gnuradio Python Flow Graph # Title: Usrp2 Wx # Generated: Thu Mar 31 00:08:03 2011 ################################################## from gnuradio import blks2 from gnuradio import eng_notation from gnuradio import gr from gnuradio import uhd from gnuradio import window from gnuradio.eng_option import eng_option from gnuradio.gr import firdes from gnuradio.wxgui import fftsink2 from gnuradio.wxgui import forms from gnuradio.wxgui import waterfallsink2 from grc_gnuradio import wxgui as grc_wxgui from optparse import OptionParser import wx class USRP2_WX(grc_wxgui.top_block_gui): def __init__(self): grc_wxgui.top_block_gui.__init__(self, title="Usrp2 Wx") ################################################## # Variables ################################################## self.usrp_inter = usrp_inter = 2 self.usrp_dec = usrp_dec = 25 self.cent_freq_m = cent_freq_m = 99.1e6 self.cent_freq_f = cent_freq_f = 0 self.adc_rate = adc_rate = 3.2e6 self.xlate_filter_taps = xlate_filter_taps = firdes.low_pass(1, adc_rate*usrp_inter/usrp_dec, 125000, 25000, firdes.WIN_HAMMING, 6.76) self.inc_dis = inc_dis = 10 self.gain = gain = 50 self.filter_gain = filter_gain = 10 self.cent_freq = cent_freq = cent_freq_m+cent_freq_f self.audio_rate = audio_rate = 48 self.audio_inter = audio_inter = 3 self.audio_dec = audio_dec = 16 ################################################## # Blocks ################################################## _gain_sizer = wx.BoxSizer(wx.VERTICAL) self._gain_text_box = forms.text_box( parent=self.GetWin(), sizer=_gain_sizer, value=self.gain, callback=self.set_gain, label='gain', converter=forms.float_converter(), proportion=0, ) self._gain_slider = forms.slider( parent=self.GetWin(), sizer=_gain_sizer, value=self.gain, callback=self.set_gain, minimum=0, maximum=100, num_steps=100, style=wx.SL_HORIZONTAL, cast=float, proportion=1, ) self.GridAdd(_gain_sizer, 4, 1, 1, 1) self.wxgui_waterfallsink2_0 = waterfallsink2.waterfall_sink_c( self.GetWin(), baseband_freq=cent_freq, dynamic_range=100, ref_level=50, ref_scale=2.0, sample_rate=adc_rate, fft_size=1024, fft_rate=5, average=False, avg_alpha=None, title="Waterfall Plot", size=((250,100)), ) self.GridAdd(self.wxgui_waterfallsink2_0.win, 1, 1, 1, 2) self.wxgui_fftsink2_1 = fftsink2.fft_sink_c( self.GetWin(), baseband_freq=0, y_per_div=10, y_divs=10, ref_level=50, ref_scale=2.0, sample_rate=adc_rate*usrp_inter/usrp_dec, fft_size=512, fft_rate=5, average=False, avg_alpha=None, title="FFT Plot", peak_hold=False, size=(200,300), ) self.GridAdd(self.wxgui_fftsink2_1.win, 1, 3, 1, 1) self.uhd_usrp_source_0 = uhd.usrp_source( device_addr="", io_type=uhd.io_type.COMPLEX_FLOAT32, num_channels=1, ) self.uhd_usrp_source_0.set_samp_rate(adc_rate) self.uhd_usrp_source_0.set_center_freq(cent_freq, 0) self.uhd_usrp_source_0.set_gain(gain, 0) _inc_dis_sizer = wx.BoxSizer(wx.VERTICAL) self._inc_dis_text_box = forms.text_box( parent=self.GetWin(), sizer=_inc_dis_sizer, value=self.inc_dis, callback=self.set_inc_dis, label='inc_dis', converter=forms.float_converter(), proportion=0, ) self._inc_dis_slider = forms.slider( parent=self.GetWin(), sizer=_inc_dis_sizer, value=self.inc_dis, callback=self.set_inc_dis, minimum=0, maximum=100, num_steps=100, style=wx.SL_HORIZONTAL, cast=float, proportion=1, ) self.GridAdd(_inc_dis_sizer, 5, 1, 1, 1) self.gr_freq_xlating_fir_filter_xxx_0 = gr.freq_xlating_fir_filter_ccc(audio_inter/audio_dec, (xlate_filter_taps), 0, adc_rate*usrp_inter/usrp_dec) _filter_gain_sizer = wx.BoxSizer(wx.VERTICAL) self._filter_gain_text_box = forms.text_box( parent=self.GetWin(), sizer=_filter_gain_sizer, value=self.filter_gain, callback=self.set_filter_gain, label='filter_gain', converter=forms.float_converter(), proportion=0, ) self._filter_gain_slider = forms.slider( parent=self.GetWin(), sizer=_filter_gain_sizer, value=self.filter_gain, callback=self.set_filter_gain, minimum=0, maximum=100, num_steps=100, style=wx.SL_HORIZONTAL, cast=float, proportion=1, ) self.Add(_filter_gain_sizer) _cent_freq_m_sizer = wx.BoxSizer(wx.VERTICAL) self._cent_freq_m_text_box = forms.text_box( parent=self.GetWin(), sizer=_cent_freq_m_sizer, value=self.cent_freq_m, callback=self.set_cent_freq_m, label='cent_freq_m', converter=forms.float_converter(), proportion=0, ) self._cent_freq_m_slider = forms.slider( parent=self.GetWin(), sizer=_cent_freq_m_sizer, value=self.cent_freq_m, callback=self.set_cent_freq_m, minimum=88e6, maximum=108e6, num_steps=1000, style=wx.SL_HORIZONTAL, cast=float, proportion=1, ) self.GridAdd(_cent_freq_m_sizer, 2, 1, 1, 1) _cent_freq_f_sizer = wx.BoxSizer(wx.VERTICAL) self._cent_freq_f_text_box = forms.text_box( parent=self.GetWin(), sizer=_cent_freq_f_sizer, value=self.cent_freq_f, callback=self.set_cent_freq_f, label='cent_freq_f', converter=forms.float_converter(), proportion=0, ) self._cent_freq_f_slider = forms.slider( parent=self.GetWin(), sizer=_cent_freq_f_sizer, value=self.cent_freq_f, callback=self.set_cent_freq_f, minimum=-1e4, maximum=1e4, num_steps=1000, style=wx.SL_HORIZONTAL, cast=float, proportion=1, ) self.GridAdd(_cent_freq_f_sizer, 3, 1, 1, 1) self.blks2_rational_resampler_xxx_0 = blks2.rational_resampler_ccc( interpolation=usrp_inter, decimation=usrp_dec, taps=None, fractional_bw=None, ) ################################################## # Connections ################################################## self.connect((self.uhd_usrp_source_0, 0), (self.blks2_rational_resampler_xxx_0, 0)) self.connect((self.uhd_usrp_source_0, 0), (self.wxgui_waterfallsink2_0, 0)) self.connect((self.blks2_rational_resampler_xxx_0, 0), (self.gr_freq_xlating_fir_filter_xxx_0, 0)) self.connect((self.gr_freq_xlating_fir_filter_xxx_0, 0), (self.wxgui_fftsink2_1, 0)) def get_usrp_inter(self): return self.usrp_inter def set_usrp_inter(self, usrp_inter): self.usrp_inter = usrp_inter self.set_xlate_filter_taps(firdes.low_pass(1, self.adc_rate*self.usrp_inter/self.usrp_dec, 125000, 25000, firdes.WIN_HAMMING, 6.76)) self.wxgui_fftsink2_1.set_sample_rate(self.adc_rate*self.usrp_inter/self.usrp_dec) def get_usrp_dec(self): return self.usrp_dec def set_usrp_dec(self, usrp_dec): self.usrp_dec = usrp_dec self.set_xlate_filter_taps(firdes.low_pass(1, self.adc_rate*self.usrp_inter/self.usrp_dec, 125000, 25000, firdes.WIN_HAMMING, 6.76)) self.wxgui_fftsink2_1.set_sample_rate(self.adc_rate*self.usrp_inter/self.usrp_dec) def get_cent_freq_m(self): return self.cent_freq_m def set_cent_freq_m(self, cent_freq_m): self.cent_freq_m = cent_freq_m self._cent_freq_m_slider.set_value(self.cent_freq_m) self._cent_freq_m_text_box.set_value(self.cent_freq_m) self.set_cent_freq(self.cent_freq_m+self.cent_freq_f) def get_cent_freq_f(self): return self.cent_freq_f def set_cent_freq_f(self, cent_freq_f): self.cent_freq_f = cent_freq_f self._cent_freq_f_slider.set_value(self.cent_freq_f) self._cent_freq_f_text_box.set_value(self.cent_freq_f) self.set_cent_freq(self.cent_freq_m+self.cent_freq_f) def get_adc_rate(self): return self.adc_rate def set_adc_rate(self, adc_rate): self.adc_rate = adc_rate self.uhd_usrp_source_0.set_samp_rate(self.adc_rate) self.set_xlate_filter_taps(firdes.low_pass(1, self.adc_rate*self.usrp_inter/self.usrp_dec, 125000, 25000, firdes.WIN_HAMMING, 6.76)) self.wxgui_fftsink2_1.set_sample_rate(self.adc_rate*self.usrp_inter/self.usrp_dec) self.wxgui_waterfallsink2_0.set_sample_rate(self.adc_rate) def get_xlate_filter_taps(self): return self.xlate_filter_taps def set_xlate_filter_taps(self, xlate_filter_taps): self.xlate_filter_taps = xlate_filter_taps self.gr_freq_xlating_fir_filter_xxx_0.set_taps((self.xlate_filter_taps)) def get_inc_dis(self): return self.inc_dis def set_inc_dis(self, inc_dis): self.inc_dis = inc_dis self._inc_dis_slider.set_value(self.inc_dis) self._inc_dis_text_box.set_value(self.inc_dis) def get_gain(self): return self.gain def set_gain(self, gain): self.gain = gain self._gain_slider.set_value(self.gain) self._gain_text_box.set_value(self.gain) self.uhd_usrp_source_0.set_gain(self.gain, 0) def get_filter_gain(self): return self.filter_gain def set_filter_gain(self, filter_gain): self.filter_gain = filter_gain self._filter_gain_slider.set_value(self.filter_gain) self._filter_gain_text_box.set_value(self.filter_gain) def get_cent_freq(self): return self.cent_freq def set_cent_freq(self, cent_freq): self.cent_freq = cent_freq self.uhd_usrp_source_0.set_center_freq(self.cent_freq, 0) self.wxgui_waterfallsink2_0.set_baseband_freq(self.cent_freq) def get_audio_rate(self): return self.audio_rate def set_audio_rate(self, audio_rate): self.audio_rate = audio_rate def get_audio_inter(self): return self.audio_inter def set_audio_inter(self, audio_inter): self.audio_inter = audio_inter def get_audio_dec(self): return self.audio_dec def set_audio_dec(self, audio_dec): self.audio_dec = audio_dec if __name__ == '__main__': parser = OptionParser(option_class=eng_option, usage="%prog: [options]") (options, args) = parser.parse_args() if gr.enable_realtime_scheduling() != gr.RT_OK: print "Error: failed to enable realtime scheduling." tb = USRP2_WX() tb.Run(True)