aboutsummaryrefslogtreecommitdiffstats
path: root/examples/gsm_receiver_usrp_channelizer_python.py
diff options
context:
space:
mode:
Diffstat (limited to 'examples/gsm_receiver_usrp_channelizer_python.py')
-rwxr-xr-xexamples/gsm_receiver_usrp_channelizer_python.py208
1 files changed, 208 insertions, 0 deletions
diff --git a/examples/gsm_receiver_usrp_channelizer_python.py b/examples/gsm_receiver_usrp_channelizer_python.py
new file mode 100755
index 0000000..e769472
--- /dev/null
+++ b/examples/gsm_receiver_usrp_channelizer_python.py
@@ -0,0 +1,208 @@
+#!/usr/bin/env python
+##################################################
+# Gnuradio Python Flow Graph
+# Title: Gsm Receiver Usrp Channelizer Python
+# Generated: Sun Feb 9 12:46:36 2014
+##################################################
+
+from gnuradio import blocks
+from gnuradio import eng_notation
+from gnuradio import gr
+from gnuradio import uhd
+from gnuradio.eng_option import eng_option
+from gnuradio.filter import firdes
+from gnuradio.filter import pfb
+from optparse import OptionParser
+import gsm
+import time
+from numpy import fft
+
+
+class gsm_receiver_usrp_channelizer_python(gr.top_block):
+
+ def __init__(self, length=0.2, gain=25, channelizer_osr=1, fc=937e6, usrp_decim=4, fs=100e6):
+ gr.top_block.__init__(self, "Gsm Receiver Usrp Channelizer Python")
+
+ ##################################################
+ # Parameters
+ ##################################################
+ self.length = length
+ self.gain = gain
+ self.channelizer_osr = channelizer_osr
+ self.fc = fc
+ self.usrp_decim = usrp_decim
+ self.channels_num = int(round(fs/usrp_decim/200e3))
+ self.fs = fs
+
+ ##################################################
+ # Variables
+ ##################################################
+ self.samp_rate = 100e6/self.usrp_decim
+ self.samp_rate_channelizer_out = self.samp_rate/self.channels_num*channelizer_osr
+ self.freqs = fft.fftfreq(self.channels_num,1/self.samp_rate)+self.fc
+ self.arfcns = get_arfcns_from_freqs(self.freqs,"e")
+ print self.freqs
+ print self.arfcns
+
+ ##################################################
+ # Blocks
+ ##################################################
+ self.uhd_usrp_source_0 = uhd.usrp_source(
+ device_addr="addr=192.168.11.2",
+ stream_args=uhd.stream_args(
+ cpu_format="fc32",
+ otw_format="sc16",
+ channels=range(1),
+ ),
+ )
+ self.uhd_usrp_source_0.set_samp_rate(self.samp_rate)
+ self.uhd_usrp_source_0.set_center_freq(fc, 0)
+ self.uhd_usrp_source_0.set_gain(gain, 0)
+ self.pfb_channelizer_ccf_0 = pfb.channelizer_ccf(
+ self.channels_num,
+ (),
+ channelizer_osr,
+ 100)
+ self.pfb_channelizer_ccf_0.set_channel_map(([]))
+
+ self.blocks_head_0 = blocks.head(gr.sizeof_gr_complex*1, int(self.samp_rate*length))
+ self.gsm_bursts_printer_0 = gsm.bursts_printer()
+
+ self.connect((self.uhd_usrp_source_0, 0), (self.blocks_head_0, 0))
+ self.connect((self.blocks_head_0, 0), (self.pfb_channelizer_ccf_0, 0))
+
+ self.gsm_receiver_hier = {}
+
+ for ii in xrange(0,self.channels_num):
+ self.gsm_receiver_hier[ii] = gsm.receiver_hier(self.samp_rate_channelizer_out, 4, int(self.freqs[ii]/1e5))
+ self.connect((self.pfb_channelizer_ccf_0, ii), (self.gsm_receiver_hier[ii], 0))
+ self.msg_connect(self.gsm_receiver_hier[ii], "bursts", self.gsm_bursts_printer_0, "bursts")
+
+
+# QT sink close method reimplementation
+
+ def get_length(self):
+ return self.length
+
+ def set_length(self, length):
+ self.length = length
+
+ def get_gain(self):
+ return self.gain
+
+ def set_gain(self, gain):
+ self.gain = gain
+ self.uhd_usrp_source_0.set_gain(self.gain, 0)
+
+ def get_channelizer_osr(self):
+ return self.channelizer_osr
+
+ def set_channelizer_osr(self, channelizer_osr):
+ self.channelizer_osr = channelizer_osr
+ self.set_samp_rate_channelizer_out(self.samp_rate/self.channels_num*self.channelizer_osr)
+
+ def get_fc(self):
+ return self.fc
+
+ def set_fc(self, fc):
+ self.fc = fc
+ self.uhd_usrp_source_0.set_center_freq(self.fc, 0)
+
+ def get_usrp_decim(self):
+ return self.usrp_decim
+
+ def set_usrp_decim(self, usrp_decim):
+ self.usrp_decim = usrp_decim
+ self.set_samp_rate(100e6/self.usrp_decim)
+
+ def get_channels_num(self):
+ return self.channels_num
+
+ def set_channels_num(self, channels_num):
+ self.channels_num = channels_num
+ self.set_samp_rate_channelizer_out(self.samp_rate/self.channels_num*self.channelizer_osr)
+
+ def get_fs(self):
+ return self.fs
+
+ def set_fs(self, fs):
+ self.fs = fs
+
+ def get_samp_rate(self):
+ return self.samp_rate
+
+ def set_samp_rate(self, samp_rate):
+ self.samp_rate = samp_rate
+ self.set_samp_rate_channelizer_out(self.samp_rate/self.channels_num*self.channelizer_osr)
+ self.uhd_usrp_source_0.set_samp_rate(self.samp_rate)
+
+ def get_samp_rate_channelizer_out(self):
+ return self.samp_rate_channelizer_out
+
+ def set_samp_rate_channelizer_out(self, samp_rate_channelizer_out):
+ self.samp_rate_channelizer_out = samp_rate_channelizer_out
+
+def get_arfcns_from_freqs(freqs,region):
+ arfcns = {}
+ for ii in xrange(0,len(freqs)):
+ arfcns[ii] = get_arfcn_from_freq(freqs[ii],region)
+
+ return arfcns
+
+def get_arfcn_from_freq(freq,region):
+ freq = freq / 1e6
+ # GSM 450
+ if freq <= 450.6 + 0.2*(293 - 259) + 10:
+ arfcn = ((freq - (450.6 + 10)) / 0.2) + 259
+ # GSM 480
+ elif freq <= 479 + 0.2*(340 - 306) + 10:
+ arfcn = ((freq - (479 + 10)) / 0.2) + 306
+ # GSM 850
+ elif freq <= 824.2 + 0.2*(251 - 128) + 45:
+ arfcn = ((freq - (824.2 + 45)) / 0.2) + 128
+ #E/R-GSM 900
+ elif freq <= 890 + 0.2*(1023 - 1024) + 45:
+ arfcn = ((freq - (890 + 45)) / -0.2) + 955
+ # GSM 900
+ elif freq <= 890 + 0.2*124 + 45:
+ arfcn = (freq - (890 + 45)) / 0.2
+ else:
+ if region is "u":
+ if freq > 1850.2 + 0.2*(810 - 512) + 80:
+ arfcn = 0;
+ else:
+ arfcn = (freq - (1850.2 + 80) / 0.2) + 512
+ elif region is "e":
+ if freq > 1710.2 + 0.2*(885 - 512) + 95:
+ arfcn = 0;
+ else:
+ arfcn = (freq - (1710.2 + 95) / 0.2) + 512
+ else:
+ arfcn = 0
+
+ if arfcn<0:
+ return 255
+ else:
+ return round(arfcn)
+
+
+if __name__ == '__main__':
+ parser = OptionParser(option_class=eng_option, usage="%prog: [options]")
+ parser.add_option("", "--length", dest="length", type="eng_float", default=eng_notation.num_to_str(0.2),
+ help="Set length [default=%default]")
+ parser.add_option("", "--gain", dest="gain", type="intx", default=30,
+ help="Set gain [default=%default]")
+ parser.add_option("", "--channelizer-osr", dest="channelizer_osr", type="intx", default=2,
+ help="Set channelizer_osr [default=%default]")
+ parser.add_option("", "--fc", dest="fc", type="eng_float", default=eng_notation.num_to_str(937e6),
+ help="Set fc [default=%default]")
+ parser.add_option("", "--usrp-decim", dest="usrp_decim", type="intx", default=5,
+ help="Set usrp_decim [default=%default]")
+ parser.add_option("", "--fs", dest="fs", type="eng_float", default=eng_notation.num_to_str(100e6),
+ help="Set fs [default=%default]")
+ (options, args) = parser.parse_args()
+ tb = gsm_receiver_usrp_channelizer_python(length=options.length, gain=options.gain, channelizer_osr=options.channelizer_osr, fc=options.fc, usrp_decim=options.usrp_decim, fs=options.fs)
+ tb.start()
+ tb.wait()
+
+