diff options
author | Josh Blum | 2011-07-28 17:02:58 -0700 |
---|---|---|
committer | Josh Blum | 2011-07-28 17:02:58 -0700 |
commit | 8bc1c4dc5a8d31594e8768a10e05b4b0172e733e (patch) | |
tree | fcb957028a108ca719a6cb879e7d62713b35ba1c /gr-digital/examples/transmit_path.py | |
parent | 8c824bf2e3e6758aff05ee4b5f4d3f106a13c672 (diff) | |
parent | 8b3c4ccf922c602ae77dad7f3911b16bdd0112d3 (diff) | |
download | gnuradio-8bc1c4dc5a8d31594e8768a10e05b4b0172e733e.tar.gz gnuradio-8bc1c4dc5a8d31594e8768a10e05b4b0172e733e.tar.bz2 gnuradio-8bc1c4dc5a8d31594e8768a10e05b4b0172e733e.zip |
Merge branch 'digital' of https://github.com/trondeau/gnuradio into digital
Conflicts:
gnuradio-core/src/lib/filter/gr_cma_equalizer_cc.h
gnuradio-core/src/lib/general/gr_constellation_decoder_cb.h
gnuradio-core/src/lib/general/gr_costas_loop_cc.h
gnuradio-core/src/lib/general/gr_lms_dfe_cc.h
gnuradio-core/src/lib/general/gr_lms_dfe_ff.h
gr-digital/lib/Makefile.am
gr-digital/lib/digital_binary_slicer_fb.h
gr-digital/lib/digital_clock_recovery_mm_cc.h
gr-digital/lib/digital_clock_recovery_mm_ff.h
gr-digital/lib/digital_correlate_access_code_bb.h
gr-digital/lib/digital_crc32.h
gr-digital/lib/digital_mpsk_receiver_cc.h
gr-digital/python/Makefile.am
gr-digital/python/__init__.py
gr-digital/python/generic_mod_demod.py
gr-digital/python/pkt.py
gr-digital/python/psk2.py
gr-digital/python/qam.py
Diffstat (limited to 'gr-digital/examples/transmit_path.py')
-rw-r--r-- | gr-digital/examples/transmit_path.py | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/gr-digital/examples/transmit_path.py b/gr-digital/examples/transmit_path.py new file mode 100644 index 000000000..91869ad9a --- /dev/null +++ b/gr-digital/examples/transmit_path.py @@ -0,0 +1,119 @@ +# +# Copyright 2005-2007,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. +# + +from gnuradio import gr, gru +from gnuradio import eng_notation +from gnuradio import digital + +import copy +import sys + +# ///////////////////////////////////////////////////////////////////////////// +# transmit path +# ///////////////////////////////////////////////////////////////////////////// + +class transmit_path(gr.hier_block2): + def __init__(self, modulator_class, options): + ''' + See below for what options should hold + ''' + gr.hier_block2.__init__(self, "transmit_path", + gr.io_signature(0, 0, 0), # Input signature + gr.io_signature(1, 1, gr.sizeof_gr_complex)) # Output signature + + options = copy.copy(options) # make a copy so we can destructively modify + + self._verbose = options.verbose + self._tx_amplitude = options.tx_amplitude # digital amplitude sent to USRP + self._bitrate = options.bitrate # desired bit rate + self._samples_per_symbol = options.samples_per_symbol # desired samples/baud + + self._modulator_class = modulator_class # the modulator_class we are using + + # Get mod_kwargs + mod_kwargs = self._modulator_class.extract_kwargs_from_options(options) + + # transmitter + modulator = self._modulator_class(**mod_kwargs) + self.packet_transmitter = \ + digital.mod_pkts(modulator, + access_code=None, + msgq_limit=4, + pad_for_usrp=True) + + self.amp = gr.multiply_const_cc(1) + self.set_tx_amplitude(self._tx_amplitude) + + # Display some information about the setup + if self._verbose: + self._print_verbage() + + # Connect components in the flowgraph + self.connect(self.packet_transmitter, self.amp, self) + + def set_tx_amplitude(self, ampl): + """ + Sets the transmit amplitude sent to the USRP in volts + @param: ampl 0 <= ampl < 1. + """ + self._tx_amplitude = max(0.0, min(ampl, 1)) + self.amp.set_k(self._tx_amplitude) + + def send_pkt(self, payload='', eof=False): + """ + Calls the transmitter method to send a packet + """ + return self.packet_transmitter.send_pkt(payload, eof) + + def bitrate(self): + return self._bitrate + + def samples_per_symbol(self): + return self._samples_per_symbol + + def add_options(normal, expert): + """ + Adds transmitter-specific options to the Options Parser + """ + if not normal.has_option('--bitrate'): + normal.add_option("-r", "--bitrate", type="eng_float", default=100e3, + help="specify bitrate [default=%default].") + normal.add_option("", "--tx-amplitude", type="eng_float", default=0.250, metavar="AMPL", + help="set transmitter digital amplitude: 0 <= AMPL < 1 [default=%default]") + normal.add_option("-v", "--verbose", action="store_true", default=False) + + expert.add_option("-S", "--samples-per-symbol", type="float", default=None, + help="set samples/symbol [default=%default]") + expert.add_option("", "--log", action="store_true", default=False, + help="Log all parts of flow graph to file (CAUTION: lots of data)") + + # Make a static method to call before instantiation + add_options = staticmethod(add_options) + + def _print_verbage(self): + """ + Prints information about the transmit path + """ + print "Tx amplitude %s" % (self._tx_amplitude) + print "modulation: %s" % (self._modulator_class.__name__) + print "bitrate: %sb/s" % (eng_notation.num_to_str(self._bitrate)) + print "samples/symbol: %.4f" % (self._samples_per_symbol) + |