From 1dcc69dbebd9fac1b7277657223369e3e9b19b7b Mon Sep 17 00:00:00 2001 From: Tom Rondeau <trondeau@vt.edu> Date: Mon, 12 Sep 2011 14:28:10 -0400 Subject: shd: adding a very rudimentary siggen application to test gr-shd tx driver. --- gr-shd/apps/shd_siggen.py | 120 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100755 gr-shd/apps/shd_siggen.py (limited to 'gr-shd/apps/shd_siggen.py') diff --git a/gr-shd/apps/shd_siggen.py b/gr-shd/apps/shd_siggen.py new file mode 100755 index 0000000000..9eef015874 --- /dev/null +++ b/gr-shd/apps/shd_siggen.py @@ -0,0 +1,120 @@ +#!/usr/bin/env python +# +# Copyright 2011 Free Software Foundation, Inc. +# +# This file is part of GNU Radio +# +# GNU Radio is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. +# +# GNU Radio is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Radio; see the file COPYING. If not, write to +# the Free Software Foundation, Inc., 51 Franklin Street, +# Boston, MA 02110-1301, USA. +# + +""" +Read samples from a SHD device and write to file formatted as binary +outputs single precision complex float values or complex short values +(interleaved 16 bit signed short integers). +""" + +from gnuradio import gr, eng_notation +from gnuradio import shd +from gnuradio.eng_option import eng_option +from optparse import OptionParser +import sys + +n2s = eng_notation.num_to_str + +class shd_siggen(gr.top_block): + + def __init__(self, options): + gr.top_block.__init__(self) + + self._src = gr.sig_source_c(options.samp_rate, gr.GR_SIN_WAVE, + 200, 1) + + self._snk = shd.xmini_sink(device_addr=options.address, + io_type=shd.io_type.COMPLEX_FLOAT32, + num_channels=1) + + # Set receiver sample rate + self._snk.set_samp_rate(options.samp_rate) + + # Set receive daughterboard gain + if options.gain is None: + g = self._snk.get_gain_range() + options.gain = float(g.start()+g.stop())/2 + print "Using mid-point gain of", \ + options.gain, "(", g.start(), "-", g.stop(), ")" + self._snk.set_gain(options.gain) + + # Set the antenna + if(options.antenna): + self._snk.set_antenna(options.antenna, 0) + + # Set frequency (tune request takes lo_offset) + if(options.lo_offset is not None): + treq = shd.tune_request(options.freq, options.lo_offset) + else: + treq = shd.tune_request(options.freq) + tr = self._snk.set_center_freq(treq) + if tr == None: + sys.stderr.write('Failed to set center frequency\n') + raise SystemExit, 1 + + # Create head block if needed and wire it up + self.connect(self._src, self._snk) + input_rate = self._snk.get_samp_rate() + + if options.verbose: + print "Address:", options.address + print "Rx gain:", options.gain + print "Rx baseband frequency:", n2s(tr.actual_rf_freq) + print "Rx DDC frequency:", n2s(tr.actual_dsp_freq) + print "Rx Sample Rate:", n2s(input_rate) + +def get_options(): + usage="%prog: [options]" + parser = OptionParser(option_class=eng_option, usage=usage) + parser.add_option("-a", "--address", type="string", default="type=xmini", + help="Address of SHD device, [default=%default]") + parser.add_option("-A", "--antenna", type="string", default=None, + help="select Rx Antenna where appropriate") + parser.add_option("", "--samp-rate", type="eng_float", default=1e6, + help="set sample rate (bandwidth) [default=%default]") + parser.add_option("-f", "--freq", type="eng_float", default=None, + help="set frequency to FREQ", metavar="FREQ") + parser.add_option("-g", "--gain", type="eng_float", default=None, + help="set gain in dB (default is midpoint)") + parser.add_option("-v", "--verbose", action="store_true", default=False, + help="verbose output") + parser.add_option("", "--lo-offset", type="eng_float", default=None, + help="set daughterboard LO offset to OFFSET [default=hw default]") + + (options, args) = parser.parse_args () + + if options.freq is None: + parser.print_help() + sys.stderr.write('You must specify the frequency with -f FREQ\n'); + raise SystemExit, 1 + + return (options) + + +if __name__ == '__main__': + options = get_options() + tb = shd_siggen(options) + + try: + tb.run() + except KeyboardInterrupt: + pass -- cgit v1.2.3 From b205e8cda30fb3a20e2d0d0409c12e58417d92f3 Mon Sep 17 00:00:00 2001 From: Tom Rondeau <trondeau@vt.edu> Date: Tue, 4 Oct 2011 12:56:09 -0400 Subject: shd: changed gr-shd names from xmini to smini --- gr-shd/apps/shd_fft.py | 25 +++++++++++-------------- gr-shd/apps/shd_rx_cfile.py | 4 ++-- gr-shd/apps/shd_siggen.py | 2 +- 3 files changed, 14 insertions(+), 17 deletions(-) (limited to 'gr-shd/apps/shd_siggen.py') diff --git a/gr-shd/apps/shd_fft.py b/gr-shd/apps/shd_fft.py index 42f0e18b0d..81e84d3836 100755 --- a/gr-shd/apps/shd_fft.py +++ b/gr-shd/apps/shd_fft.py @@ -39,7 +39,8 @@ class app_top_block(stdgui2.std_top_block): self.panel = panel parser = OptionParser(option_class=eng_option) - parser.add_option("-a", "--address", type="string", default="type=xmini", + parser.add_option("-a", "--address", type="string", + default="type=xmini", help="Address of SHD device, [default=%default]") parser.add_option("-A", "--antenna", type="string", default=None, help="select Rx Antenna where appropriate") @@ -66,23 +67,13 @@ class app_top_block(stdgui2.std_top_block): self.options = options self.show_debug_info = True - self.src = shd.xmini_source(device_addr=options.address, - io_type=shd.io_type.COMPLEX_FLOAT32, - num_channels=1) + self.src = shd.smini_source(device_addr=options.address, + io_type=shd.io_type.COMPLEX_FLOAT32, + num_channels=1) self.src.set_samp_rate(options.samp_rate) input_rate = self.src.get_samp_rate() - print "Antenna: ", self.src.get_antenna() - print "Antennas: ", self.src.get_antennas() - print "Dboard: ", self.src.get_dboard_iface() - print "Device: ", self.src.get_device - print "Center Freq: ", self.src.get_center_freq() - print "Freq Range: ", self.src.get_freq_range() - print "Gain: ", self.src.get_gain() - print "Gain Names: ", self.src.get_gain_names() - print "Gain Range: ", self.src.get_gain_range() - if options.waterfall: self.scope = \ waterfallsink2.waterfall_sink_c (panel, fft_size=1024, @@ -133,6 +124,12 @@ class app_top_block(stdgui2.std_top_block): if not(self.set_freq(options.freq)): self._set_status_msg("Failed to set initial frequency") + print "Center Freq: ", self.src.get_center_freq() + print "Freq Range: ", self.src.get_freq_range() + print "Gain: ", self.src.get_gain() + print "Gain Names: ", self.src.get_gain_names() + print "Gain Range: ", self.src.get_gain_range() + def _set_status_msg(self, msg): self.frame.GetStatusBar().SetStatusText(msg, 0) diff --git a/gr-shd/apps/shd_rx_cfile.py b/gr-shd/apps/shd_rx_cfile.py index 7ba16b4c4e..007bc809f2 100755 --- a/gr-shd/apps/shd_rx_cfile.py +++ b/gr-shd/apps/shd_rx_cfile.py @@ -41,12 +41,12 @@ class rx_cfile_block(gr.top_block): # Create a SHD device source if options.output_shorts: - self._src = shd.xmini_source(device_addr=options.address, + self._src = shd.smini_source(device_addr=options.address, io_type=shd.io_type.COMPLEX_INT16, num_channels=1) self._sink = gr.file_sink(gr.sizeof_short*2, filename) else: - self._src = shd.xmini_source(device_addr=options.address, + self._src = shd.smini_source(device_addr=options.address, io_type=shd.io_type.COMPLEX_FLOAT32, num_channels=1) self._sink = gr.file_sink(gr.sizeof_gr_complex, filename) diff --git a/gr-shd/apps/shd_siggen.py b/gr-shd/apps/shd_siggen.py index 9eef015874..112eeea159 100755 --- a/gr-shd/apps/shd_siggen.py +++ b/gr-shd/apps/shd_siggen.py @@ -42,7 +42,7 @@ class shd_siggen(gr.top_block): self._src = gr.sig_source_c(options.samp_rate, gr.GR_SIN_WAVE, 200, 1) - self._snk = shd.xmini_sink(device_addr=options.address, + self._snk = shd.smini_sink(device_addr=options.address, io_type=shd.io_type.COMPLEX_FLOAT32, num_channels=1) -- cgit v1.2.3