piotr | 82c774f | 2014-08-06 15:20:12 +0200 | [diff] [blame] | 1 | #!/usr/bin/env python |
| 2 | ################################################## |
| 3 | # Gnuradio Python Flow Graph |
| 4 | # Title: Gsm Receiver Usrp Test |
| 5 | # Generated: Wed Aug 6 15:18:47 2014 |
| 6 | ################################################## |
| 7 | |
| 8 | from gnuradio import eng_notation |
| 9 | from gnuradio import gr |
| 10 | from gnuradio import uhd |
| 11 | from gnuradio import wxgui |
| 12 | from gnuradio.eng_option import eng_option |
| 13 | from gnuradio.fft import window |
| 14 | from gnuradio.filter import firdes |
| 15 | from gnuradio.wxgui import fftsink2 |
| 16 | from gnuradio.wxgui import forms |
| 17 | from grc_gnuradio import wxgui as grc_wxgui |
| 18 | from optparse import OptionParser |
| 19 | import gsm |
| 20 | import time |
| 21 | import wx |
| 22 | |
| 23 | class gsm_receiver_usrp_test(grc_wxgui.top_block_gui): |
| 24 | |
| 25 | def __init__(self, length=30): |
| 26 | grc_wxgui.top_block_gui.__init__(self, title="Gsm Receiver Usrp Test") |
| 27 | _icon_path = "/home/piotr/.local/share/icons/hicolor/32x32/apps/gnuradio-grc.png" |
| 28 | self.SetIcon(wx.Icon(_icon_path, wx.BITMAP_TYPE_ANY)) |
| 29 | |
| 30 | ################################################## |
| 31 | # Parameters |
| 32 | ################################################## |
| 33 | self.length = length |
| 34 | |
| 35 | ################################################## |
| 36 | # Variables |
| 37 | ################################################## |
| 38 | self.samp_rate = samp_rate = 100e6/100 |
| 39 | self.g = g = 28 |
| 40 | self.fc = fc = 937e6 |
| 41 | |
| 42 | ################################################## |
| 43 | # Blocks |
| 44 | ################################################## |
| 45 | _g_sizer = wx.BoxSizer(wx.VERTICAL) |
| 46 | self._g_text_box = forms.text_box( |
| 47 | parent=self.GetWin(), |
| 48 | sizer=_g_sizer, |
| 49 | value=self.g, |
| 50 | callback=self.set_g, |
| 51 | label='g', |
| 52 | converter=forms.float_converter(), |
| 53 | proportion=0, |
| 54 | ) |
| 55 | self._g_slider = forms.slider( |
| 56 | parent=self.GetWin(), |
| 57 | sizer=_g_sizer, |
| 58 | value=self.g, |
| 59 | callback=self.set_g, |
| 60 | minimum=0, |
| 61 | maximum=50, |
| 62 | num_steps=100, |
| 63 | style=wx.SL_HORIZONTAL, |
| 64 | cast=float, |
| 65 | proportion=1, |
| 66 | ) |
| 67 | self.Add(_g_sizer) |
| 68 | _fc_sizer = wx.BoxSizer(wx.VERTICAL) |
| 69 | self._fc_text_box = forms.text_box( |
| 70 | parent=self.GetWin(), |
| 71 | sizer=_fc_sizer, |
| 72 | value=self.fc, |
| 73 | callback=self.set_fc, |
| 74 | label='fc', |
| 75 | converter=forms.float_converter(), |
| 76 | proportion=0, |
| 77 | ) |
| 78 | self._fc_slider = forms.slider( |
| 79 | parent=self.GetWin(), |
| 80 | sizer=_fc_sizer, |
| 81 | value=self.fc, |
| 82 | callback=self.set_fc, |
| 83 | minimum=900e6, |
| 84 | maximum=1000e6, |
| 85 | num_steps=500, |
| 86 | style=wx.SL_HORIZONTAL, |
| 87 | cast=float, |
| 88 | proportion=1, |
| 89 | ) |
| 90 | self.Add(_fc_sizer) |
| 91 | self.wxgui_fftsink2_0 = fftsink2.fft_sink_c( |
| 92 | self.GetWin(), |
| 93 | baseband_freq=fc, |
| 94 | y_per_div=10, |
| 95 | y_divs=10, |
| 96 | ref_level=0, |
| 97 | ref_scale=2.0, |
| 98 | sample_rate=samp_rate, |
| 99 | fft_size=1024, |
| 100 | fft_rate=15, |
| 101 | average=False, |
| 102 | avg_alpha=None, |
| 103 | title="FFT Plot", |
| 104 | peak_hold=False, |
| 105 | ) |
| 106 | self.GridAdd(self.wxgui_fftsink2_0.win, 1, 1, 1, 1) |
| 107 | self.uhd_usrp_source_0 = uhd.usrp_source( |
| 108 | ",".join(("addr=192.168.9.2", "")), |
| 109 | uhd.stream_args( |
| 110 | cpu_format="fc32", |
| 111 | channels=range(1), |
| 112 | ), |
| 113 | ) |
| 114 | self.uhd_usrp_source_0.set_clock_source("external", 0) |
| 115 | self.uhd_usrp_source_0.set_samp_rate(samp_rate) |
| 116 | self.uhd_usrp_source_0.set_center_freq(fc, 0) |
| 117 | self.uhd_usrp_source_0.set_gain(g, 0) |
| 118 | self.gsm_receiver_hier_0 = gsm.receiver_hier(samp_rate, 4) |
| 119 | self.gsm_get_bcch_or_ccch_bursts_0 = gsm.get_bcch_or_ccch_bursts(2) |
| 120 | self.gsm_control_channels_decoder_0 = gsm.control_channels_decoder() |
| 121 | |
| 122 | ################################################## |
| 123 | # Connections |
| 124 | ################################################## |
| 125 | self.connect((self.uhd_usrp_source_0, 0), (self.gsm_receiver_hier_0, 0)) |
| 126 | self.connect((self.uhd_usrp_source_0, 0), (self.wxgui_fftsink2_0, 0)) |
| 127 | |
| 128 | ################################################## |
| 129 | # Asynch Message Connections |
| 130 | ################################################## |
| 131 | self.msg_connect(self.gsm_receiver_hier_0, "bursts", self.gsm_get_bcch_or_ccch_bursts_0, "bursts") |
| 132 | self.msg_connect(self.gsm_get_bcch_or_ccch_bursts_0, "bursts", self.gsm_control_channels_decoder_0, "bursts") |
| 133 | |
| 134 | |
| 135 | def get_length(self): |
| 136 | return self.length |
| 137 | |
| 138 | def set_length(self, length): |
| 139 | self.length = length |
| 140 | |
| 141 | def get_samp_rate(self): |
| 142 | return self.samp_rate |
| 143 | |
| 144 | def set_samp_rate(self, samp_rate): |
| 145 | self.samp_rate = samp_rate |
| 146 | self.uhd_usrp_source_0.set_samp_rate(self.samp_rate) |
| 147 | self.wxgui_fftsink2_0.set_sample_rate(self.samp_rate) |
| 148 | |
| 149 | def get_g(self): |
| 150 | return self.g |
| 151 | |
| 152 | def set_g(self, g): |
| 153 | self.g = g |
| 154 | self._g_slider.set_value(self.g) |
| 155 | self._g_text_box.set_value(self.g) |
| 156 | self.uhd_usrp_source_0.set_gain(self.g, 0) |
| 157 | |
| 158 | def get_fc(self): |
| 159 | return self.fc |
| 160 | |
| 161 | def set_fc(self, fc): |
| 162 | self.fc = fc |
| 163 | self.uhd_usrp_source_0.set_center_freq(self.fc, 0) |
| 164 | self.wxgui_fftsink2_0.set_baseband_freq(self.fc) |
| 165 | self._fc_slider.set_value(self.fc) |
| 166 | self._fc_text_box.set_value(self.fc) |
| 167 | |
| 168 | if __name__ == '__main__': |
| 169 | import ctypes |
| 170 | import sys |
| 171 | if sys.platform.startswith('linux'): |
| 172 | try: |
| 173 | x11 = ctypes.cdll.LoadLibrary('libX11.so') |
| 174 | x11.XInitThreads() |
| 175 | except: |
| 176 | print "Warning: failed to XInitThreads()" |
| 177 | parser = OptionParser(option_class=eng_option, usage="%prog: [options]") |
| 178 | parser.add_option("", "--length", dest="length", type="eng_float", default=eng_notation.num_to_str(30), |
| 179 | help="Set length [default=%default]") |
| 180 | (options, args) = parser.parse_args() |
| 181 | tb = gsm_receiver_usrp_test(length=options.length) |
| 182 | tb.Start(True) |
| 183 | tb.Wait() |