#!/usr/bin/env python ################################################## # Gnuradio Python Flow Graph # Title: Bcband Am Receiver # Generated: Fri Jun 3 20:06:49 2011 ################################################## from gnuradio import audio 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 scopesink2 from grc_gnuradio import wxgui as grc_wxgui from optparse import OptionParser import wx class bcband_am_receiver(grc_wxgui.top_block_gui): def __init__(self): grc_wxgui.top_block_gui.__init__(self, title="Bcband Am Receiver") _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 = 200e3 self.frequency = frequency = 680 ################################################## # Blocks ################################################## _frequency_sizer = wx.BoxSizer(wx.VERTICAL) self._frequency_text_box = forms.text_box( parent=self.GetWin(), sizer=_frequency_sizer, value=self.frequency, callback=self.set_frequency, label='frequency', converter=forms.float_converter(), proportion=0, ) self._frequency_slider = forms.slider( parent=self.GetWin(), sizer=_frequency_sizer, value=self.frequency, callback=self.set_frequency, minimum=500, maximum=1600, num_steps=200, style=wx.SL_HORIZONTAL, cast=float, proportion=1, ) self.Add(_frequency_sizer) self.wxgui_scopesink2_0 = scopesink2.scope_sink_f( self.GetWin(), title="Demod Audio", sample_rate=int(samp_rate/10), v_scale=0, v_offset=0, t_scale=0, ac_couple=False, xy_mode=False, num_inputs=1, trig_mode=gr.gr_TRIG_MODE_AUTO, y_axis_label="Counts", ) self.Add(self.wxgui_scopesink2_0.win) self.wxgui_fftsink2_0_0 = 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=samp_rate/10, fft_size=1024, fft_rate=5, average=True, avg_alpha=0.250, title="Pre-detector Bandpass", peak_hold=False, ) self.Add(self.wxgui_fftsink2_0_0.win) self.wxgui_fftsink2_0 = fftsink2.fft_sink_c( self.GetWin(), baseband_freq=frequency*1.0e3, y_per_div=10, y_divs=10, ref_level=50, ref_scale=2.0, sample_rate=samp_rate, fft_size=1024, fft_rate=5, average=True, avg_alpha=0.250, title="Input Band", peak_hold=False, ) self.Add(self.wxgui_fftsink2_0.win) self.uhd_usrp_source_0 = uhd.usrp_source( device_addr="addr=192.168.10.2", io_type=uhd.io_type.COMPLEX_FLOAT32, num_channels=1, ) self.uhd_usrp_source_0.set_subdev_spec("0:A", 0) self.uhd_usrp_source_0.set_samp_rate(samp_rate) self.uhd_usrp_source_0.set_center_freq(frequency*1.0e3, 0) self.uhd_usrp_source_0.set_gain(0, 0) self.gr_complex_to_mag_squared_0 = gr.complex_to_mag_squared(1) self.gr_agc2_xx_0 = gr.agc2_ff(0.05, 0.05, 0.3, 1.0, 1.0) self.band_pass_filter_1 = gr.fir_filter_fff(1, firdes.band_pass( 1, samp_rate/10, 50, 5000, 250, firdes.WIN_HAMMING, 6.76)) self.band_pass_filter_0 = gr.fir_filter_ccf(10, firdes.band_pass( 1, samp_rate, -3.0e3, 3.0e3, 300, firdes.WIN_HAMMING, 6.76)) self.audio_sink_0 = audio.sink(int(samp_rate/10), "plughw:0,0", False) ################################################## # Connections ################################################## self.connect((self.uhd_usrp_source_0, 0), (self.band_pass_filter_0, 0)) self.connect((self.band_pass_filter_0, 0), (self.gr_complex_to_mag_squared_0, 0)) self.connect((self.gr_agc2_xx_0, 0), (self.audio_sink_0, 0)) self.connect((self.gr_complex_to_mag_squared_0, 0), (self.band_pass_filter_1, 0)) self.connect((self.band_pass_filter_1, 0), (self.gr_agc2_xx_0, 0)) self.connect((self.uhd_usrp_source_0, 0), (self.wxgui_fftsink2_0, 0)) self.connect((self.band_pass_filter_0, 0), (self.wxgui_fftsink2_0_0, 0)) self.connect((self.band_pass_filter_1, 0), (self.wxgui_scopesink2_0, 0)) def get_samp_rate(self): return self.samp_rate def set_samp_rate(self, samp_rate): self.samp_rate = samp_rate self.uhd_usrp_source_0.set_samp_rate(self.samp_rate) self.wxgui_fftsink2_0.set_sample_rate(self.samp_rate) self.band_pass_filter_0.set_taps(firdes.band_pass(1, self.samp_rate, -3.0e3, 3.0e3, 300, firdes.WIN_HAMMING, 6.76)) self.wxgui_fftsink2_0_0.set_sample_rate(self.samp_rate/10) self.band_pass_filter_1.set_taps(firdes.band_pass(1, self.samp_rate/10, 50, 5000, 250, firdes.WIN_HAMMING, 6.76)) self.wxgui_scopesink2_0.set_sample_rate(int(self.samp_rate/10)) def get_frequency(self): return self.frequency def set_frequency(self, frequency): self.frequency = frequency self._frequency_slider.set_value(self.frequency) self._frequency_text_box.set_value(self.frequency) self.uhd_usrp_source_0.set_center_freq(self.frequency*1.0e3, 0) self.wxgui_fftsink2_0.set_baseband_freq(self.frequency*1.0e3) if __name__ == '__main__': parser = OptionParser(option_class=eng_option, usage="%prog: [options]") (options, args) = parser.parse_args() tb = bcband_am_receiver() tb.Run(True)