1 | #!/usr/bin/env python
|
---|
2 |
|
---|
3 | """
|
---|
4 | Read samples from the USRP and write to file formatted as binary
|
---|
5 | single-precision complex values.
|
---|
6 |
|
---|
7 | """
|
---|
8 |
|
---|
9 | from gnuradio import gr, eng_notation
|
---|
10 | from gnuradio import usrp
|
---|
11 | from gnuradio.eng_option import eng_option
|
---|
12 | from optparse import OptionParser
|
---|
13 | import sys
|
---|
14 |
|
---|
15 | class my_graph(gr.flow_graph):
|
---|
16 |
|
---|
17 | def __init__(self):
|
---|
18 | gr.flow_graph.__init__(self)
|
---|
19 |
|
---|
20 | usage="%prog: [options] output_filename"
|
---|
21 | parser = OptionParser(option_class=eng_option, usage=usage)
|
---|
22 | parser.add_option("-R", "--rx-subdev-spec", type="subdev", default=(0, 0),
|
---|
23 | help="select USRP Rx side A or B (default=A)")
|
---|
24 | parser.add_option("-u", "--usrp", type="int", default=0,
|
---|
25 | help="set the usrp board to receive signal [default=%default]")
|
---|
26 | parser.add_option("-d", "--decim", type="int", default=16,
|
---|
27 | help="set fgpa decimation rate to DECIM [default=%default]")
|
---|
28 | parser.add_option("-f", "--freq", type="eng_float", default=None,
|
---|
29 | help="set frequency to FREQ", metavar="FREQ")
|
---|
30 | parser.add_option("-g", "--gain", type="eng_float", default=None,
|
---|
31 | help="set gain in dB (default is midpoint)")
|
---|
32 | parser.add_option("-N", "--nsamples", type="eng_float", default=None,
|
---|
33 | help="number of samples to collect [default=+inf]")
|
---|
34 | (options, args) = parser.parse_args ()
|
---|
35 | if len(args) != 1:
|
---|
36 | parser.print_help()
|
---|
37 | raise SystemExit, 1
|
---|
38 | filename = args[0]
|
---|
39 |
|
---|
40 | if options.freq is None:
|
---|
41 | parser.print_help()
|
---|
42 | sys.stderr.write('You must specify the frequency with -f FREQ\n');
|
---|
43 | raise SystemExit, 1
|
---|
44 |
|
---|
45 | # build the graph
|
---|
46 | self.u = usrp.source_c(which=options.usrp,decim_rate=options.decim)
|
---|
47 | self.dst = gr.file_sink(gr.sizeof_gr_complex, filename)
|
---|
48 | if options.nsamples is None:
|
---|
49 | self.connect(self.u, self.dst)
|
---|
50 | else:
|
---|
51 | self.head = gr.head(gr.sizeof_gr_complex, int(options.nsamples))
|
---|
52 | self.connect(self.u, self.head, self.dst)
|
---|
53 |
|
---|
54 | if options.rx_subdev_spec is None:
|
---|
55 | options.rx_subdev_spec = usrp.pick_rx_subdevice(self.u)
|
---|
56 | m = usrp.determine_rx_mux_value(self.u, options.rx_subdev_spec)
|
---|
57 | print "mux = %#04x" % (m,)
|
---|
58 | self.u.set_mux(usrp.determine_rx_mux_value(self.u, options.rx_subdev_spec))
|
---|
59 | #self.u.set_mux(0xf0)
|
---|
60 | #self.u.set_pga(options.usrp,10)
|
---|
61 |
|
---|
62 | # determine the daughterboard subdevice we're using
|
---|
63 | self.subdev = usrp.selected_subdev(self.u, options.rx_subdev_spec)
|
---|
64 | print "subdev", options.rx_subdev_spec
|
---|
65 | print "Using RX d'board %s" % (self.subdev.side_and_name(),)
|
---|
66 | input_rate = self.u.adc_freq() / self.u.decim_rate()
|
---|
67 | print "USB sample rate %s" % (eng_notation.num_to_str(input_rate))
|
---|
68 |
|
---|
69 | if options.gain is None:
|
---|
70 | # if no gain was specified, use the mid-point in dB
|
---|
71 | g = self.subdev.gain_range()
|
---|
72 | print g[0]," ",g[1], " ",g[2]," ",float(g[0]+g[1])/2
|
---|
73 | options.gain = float(g[0]+g[1])/2
|
---|
74 | self.subdev.set_gain(options.gain)
|
---|
75 | print "gain is:",options.gain
|
---|
76 |
|
---|
77 | r = self.u.tune(0, self.subdev, options.freq)
|
---|
78 | if not r:
|
---|
79 | sys.stderr.write('Failed to set frequency\n')
|
---|
80 | raise SystemExit, 1
|
---|
81 |
|
---|
82 |
|
---|
83 | if __name__ == '__main__':
|
---|
84 | try:
|
---|
85 | my_graph().run()
|
---|
86 | except KeyboardInterrupt:
|
---|
87 | pass
|
---|