diff options
Diffstat (limited to 'gssm/src/python')
-rwxr-xr-x | gssm/src/python/file_gssm.py | 45 | ||||
-rwxr-xr-x | gssm/src/python/file_stats.py | 46 | ||||
-rwxr-xr-x | gssm/src/python/gssm_stats.py | 85 | ||||
-rwxr-xr-x | gssm/src/python/gssm_usrp.py | 63 |
4 files changed, 239 insertions, 0 deletions
diff --git a/gssm/src/python/file_gssm.py b/gssm/src/python/file_gssm.py new file mode 100755 index 0000000..47013f3 --- /dev/null +++ b/gssm/src/python/file_gssm.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python + +# $Id: file_gssm.py,v 1.3 2007-07-07 16:31:44 jl Exp $ + +from gnuradio import gr, usrp, db_dbs_rx, blks +from gnuradio.blksimpl import gmsk +import gssm +import sys + +#sps = 1000e3 + +usrp_rate = 64e6 +decim_rate = 112 +sps = usrp_rate / decim_rate + +gsm_rate = 1625000.0 / 6.0 + +#xcf = 150e3 +#xtw = 50e3 +#xm = -31127.933289 + +file_name = "signal.data" + + +class gssm_graph(gr.flow_graph): + def __init__(self, fname): + gr.flow_graph.__init__(self) + + src = gr.file_source(gr.sizeof_gr_complex, fname) + gs = gssm.sink() + self.connect(src, gs) + +def main(): + fname = file_name + if len(sys.argv) == 2: + fname = sys.argv[1] + try: + gg = gssm_graph(fname) + gg.run() + + except KeyboardInterrupt: + pass + +if __name__ == '__main__': + main() diff --git a/gssm/src/python/file_stats.py b/gssm/src/python/file_stats.py new file mode 100755 index 0000000..cf8a109 --- /dev/null +++ b/gssm/src/python/file_stats.py @@ -0,0 +1,46 @@ +#!/usr/bin/env python + +# $Id: file_stats.py,v 1.1 2007-07-07 16:26:33 jl Exp $ + +from gnuradio import gr, usrp, db_dbs_rx, blks +from gnuradio.blksimpl import gmsk +import gssm +import sys + +#sps = 1000e3 + +usrp_rate = 64e6 +decim_rate = 112 +sps = usrp_rate / decim_rate + +gsm_rate = 1625000.0 / 6.0 + +#xcf = 150e3 +#xtw = 50e3 +#xm = -31127.933289 + +file_name = "signal.data" + + +class gssm_graph(gr.flow_graph): + def __init__(self, fname): + gr.flow_graph.__init__(self) + + src = gr.file_source(gr.sizeof_gr_complex, fname) + self.gs = gs = gssm.sink(sps) + self.connect(src, gs) + +def main(): + fname = file_name + if len(sys.argv) == 2: + fname = sys.argv[1] + try: + gg = gssm_graph(fname) + gg.run() + gg.gs.stats() + + except KeyboardInterrupt: + pass + +if __name__ == '__main__': + main() diff --git a/gssm/src/python/gssm_stats.py b/gssm/src/python/gssm_stats.py new file mode 100755 index 0000000..43677d9 --- /dev/null +++ b/gssm/src/python/gssm_stats.py @@ -0,0 +1,85 @@ +#!/usr/bin/env python + +# $Id: gssm_stats.py,v 1.2 2007-07-07 16:31:44 jl Exp $ + +from gnuradio import gr, usrp, db_dbs_rx, blks +from gnuradio.blksimpl import gmsk +import usrp_dbid +import gssm +import sys +import time +import thread + +# constant +gsm_rate = 1625000.0 / 6.0 + +# script constant +decim = 112 +gain = 32 + +# bts channel +c0 = 874e6 + +# experimental constant +default_usrp_offset = 4e3 + +# filter constants +xcf = 150e3 +xtw = 50e3 + +def display_stats(gs): + while 1: + print "%d:\t%d:%d" % \ + (gs.d_found_fc_count, gs.d_valid_s, gs.d_invalid_s) + time.sleep(1) + + +class gssm_flow_graph(gr.flow_graph): + def __init__(self, usrp_offset): + gr.flow_graph.__init__(self) + + print "decim = %d, gain = %d, offset = %.2f" % \ + (decim, gain, usrp_offset) + print "filter center %.2f, filter width %.2f" % \ + (xcf, xtw) + + u = usrp.source_c(decim_rate = decim) + s = usrp.pick_subdev(u, (usrp_dbid.DBS_RX,)) + u.set_mux(usrp.determine_rx_mux_value(u, s)) + subdev = usrp.selected_subdev(u, s) + + if subdev.dbid() != usrp_dbid.DBS_RX: + raise Exception('dbs daughterboard not detected!') + + subdev.set_gain(gain) + + sps = u.adc_freq() / u.decim_rate() + if sps < 2 * gsm_rate: + raise Exception('sample rate too low') + + u.tune(0, subdev, c0 + usrp_offset) + + xt = gr.firdes.low_pass(1.0, sps, xcf, xtw, + gr.firdes.WIN_HAMMING) + xf = gr.fir_filter_ccf(1, xt) + + self.gs = gs = gssm.sink() + + self.connect(u, xf, gs) + +def main(): + if len(sys.argv) == 2: + uo = float(sys.argv[1]) + else: + uo = default_usrp_offset + g = gssm_flow_graph(uo) + # thread.start_new_thread(display_stats, (g.gs,)) + # g.run() + g.start() + time.sleep(10.0) + g.stop() + g.gs.stats() + +if __name__ == '__main__': + main() + diff --git a/gssm/src/python/gssm_usrp.py b/gssm/src/python/gssm_usrp.py new file mode 100755 index 0000000..6fe84c5 --- /dev/null +++ b/gssm/src/python/gssm_usrp.py @@ -0,0 +1,63 @@ +#!/usr/bin/env python + +# $Id: gssm_usrp.py,v 1.2 2007-07-07 16:31:44 jl Exp $ + +from gnuradio import gr, usrp, db_dbs_rx, blks +from gnuradio.blksimpl import gmsk +from usrpm import usrp_dbid +import gssm +import sys + +# constant +gsm_rate = 1625000.0 / 6.0 + +# script constant +decim = 112 +gain = 70 + +# bts channel +c0 = 875.4e6 + +# experimental constant +default_usrp_offset = 12e3 + +class gssm_flow_graph(gr.flow_graph): + def __init__(self, usrp_offset): + gr.flow_graph.__init__(self) + + u = usrp.source_c(decim_rate = decim) + s = usrp.pick_subdev(u, (usrp_dbid.DBS_RX,)) + u.set_mux(usrp.determine_rx_mux_value(u, s)) + subdev = usrp.selected_subdev(u, s) + + if subdev.dbid() != usrp_dbid.DBS_RX: + raise Exception('dbs daughterboard not detected!') + + subdev.set_gain(gain) + + sps = u.adc_freq() / u.decim_rate() + if sps < 2 * gsm_rate: + raise Exception('sample rate too low') + + u.tune(0, subdev, c0 + usrp_offset) + + xcf = 150e3 + xtw = 50e3 + xt = gr.firdes.low_pass(1.0, sps, xcf, xtw, + gr.firdes.WIN_HAMMING) + xf = gr.fir_filter_ccf(1, xt) + + g = gssm.sink() + + self.connect(u, xf, g) + +def main(): + if len(sys.argv) == 2: + uo = float(sys.argv[1]) + else: + uo = default_usrp_offset + g = gssm_flow_graph(uo) + g.run() + +if __name__ == '__main__': + main() |