blob: f34699d684bf41f9883767ba78c70fbbe5303dd0 [file] [log] [blame]
piotr82c774f2014-08-06 15:20:12 +02001#!/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
8from gnuradio import eng_notation
9from gnuradio import gr
10from gnuradio import uhd
11from gnuradio import wxgui
12from gnuradio.eng_option import eng_option
13from gnuradio.fft import window
14from gnuradio.filter import firdes
15from gnuradio.wxgui import fftsink2
16from gnuradio.wxgui import forms
17from grc_gnuradio import wxgui as grc_wxgui
18from optparse import OptionParser
19import gsm
20import time
21import wx
22
23class 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
168if __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()