summaryrefslogtreecommitdiff
path: root/gnuradio-examples
diff options
context:
space:
mode:
Diffstat (limited to 'gnuradio-examples')
-rw-r--r--gnuradio-examples/python/Makefile.am2
-rw-r--r--gnuradio-examples/python/digital-bert/.gitignore2
-rw-r--r--gnuradio-examples/python/digital-bert/Makefile.am33
-rw-r--r--gnuradio-examples/python/digital-bert/README63
-rwxr-xr-xgnuradio-examples/python/digital-bert/benchmark_rx.py170
-rwxr-xr-xgnuradio-examples/python/digital-bert/benchmark_tx.py111
-rw-r--r--gnuradio-examples/python/digital-bert/receive_path.py118
-rw-r--r--gnuradio-examples/python/digital-bert/transmit_path.py61
-rw-r--r--gnuradio-examples/python/digital/.gitignore11
-rw-r--r--gnuradio-examples/python/digital/Makefile.am44
-rw-r--r--gnuradio-examples/python/digital/README84
-rwxr-xr-xgnuradio-examples/python/digital/benchmark_loopback.py173
-rwxr-xr-xgnuradio-examples/python/digital/benchmark_qt_loopback.py470
-rwxr-xr-xgnuradio-examples/python/digital/benchmark_qt_loopback2.py553
-rwxr-xr-xgnuradio-examples/python/digital/benchmark_qt_rx.py443
-rwxr-xr-xgnuradio-examples/python/digital/benchmark_qt_rx2.py475
-rwxr-xr-xgnuradio-examples/python/digital/benchmark_rx.py114
-rwxr-xr-xgnuradio-examples/python/digital/benchmark_rx2.py114
-rwxr-xr-xgnuradio-examples/python/digital/benchmark_tx.py135
-rwxr-xr-xgnuradio-examples/python/digital/benchmark_tx2.py135
-rw-r--r--gnuradio-examples/python/digital/pick_bitrate.py153
-rw-r--r--gnuradio-examples/python/digital/pick_bitrate2.py154
-rw-r--r--gnuradio-examples/python/digital/qt_digital_window.py239
-rw-r--r--gnuradio-examples/python/digital/qt_digital_window.ui581
-rw-r--r--gnuradio-examples/python/digital/qt_digital_window2.py248
-rw-r--r--gnuradio-examples/python/digital/qt_digital_window2.ui605
-rw-r--r--gnuradio-examples/python/digital/qt_rx_window.py157
-rw-r--r--gnuradio-examples/python/digital/qt_rx_window.ui407
-rw-r--r--gnuradio-examples/python/digital/qt_rx_window2.py166
-rw-r--r--gnuradio-examples/python/digital/qt_rx_window2.ui354
-rw-r--r--gnuradio-examples/python/digital/receive_path.py138
-rw-r--r--gnuradio-examples/python/digital/simple.py64
-rw-r--r--gnuradio-examples/python/digital/simple_qam.py76
-rw-r--r--gnuradio-examples/python/digital/transmit_path.py118
-rwxr-xr-xgnuradio-examples/python/digital/tunnel.py287
-rw-r--r--gnuradio-examples/python/digital/usrp_receive_path.py96
-rw-r--r--gnuradio-examples/python/digital/usrp_receive_path2.py96
-rw-r--r--gnuradio-examples/python/digital/usrp_transmit_path.py101
-rw-r--r--gnuradio-examples/python/digital/usrp_transmit_path2.py101
39 files changed, 0 insertions, 7452 deletions
diff --git a/gnuradio-examples/python/Makefile.am b/gnuradio-examples/python/Makefile.am
index d3d20e15a..a32f1fa86 100644
--- a/gnuradio-examples/python/Makefile.am
+++ b/gnuradio-examples/python/Makefile.am
@@ -22,8 +22,6 @@
include $(top_srcdir)/Makefile.common
SUBDIRS = \
- digital \
- digital-bert \
mp-sched \
multi_usrp \
network \
diff --git a/gnuradio-examples/python/digital-bert/.gitignore b/gnuradio-examples/python/digital-bert/.gitignore
deleted file mode 100644
index b336cc7ce..000000000
--- a/gnuradio-examples/python/digital-bert/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-/Makefile
-/Makefile.in
diff --git a/gnuradio-examples/python/digital-bert/Makefile.am b/gnuradio-examples/python/digital-bert/Makefile.am
deleted file mode 100644
index eac013f09..000000000
--- a/gnuradio-examples/python/digital-bert/Makefile.am
+++ /dev/null
@@ -1,33 +0,0 @@
-#
-# Copyright 2008,2009 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.
-#
-
-include $(top_srcdir)/Makefile.common
-
-ourdatadir = $(exampledir)/digital-bert
-
-dist_ourdata_DATA = \
- README \
- receive_path.py \
- transmit_path.py
-
-dist_ourdata_SCRIPTS = \
- benchmark_rx.py \
- benchmark_tx.py \ No newline at end of file
diff --git a/gnuradio-examples/python/digital-bert/README b/gnuradio-examples/python/digital-bert/README
deleted file mode 100644
index 83f52f4f5..000000000
--- a/gnuradio-examples/python/digital-bert/README
+++ /dev/null
@@ -1,63 +0,0 @@
-BERT testing example scripts
-
-
-benchmark_tx.py
-
-This sets up a BPSK transmitter that is modulated with a pseudorandom
-sequence of bits. The PN code is generated by sending an all 1s
-sequence through a 7-bit scrambler. The transmitter performs the BPSK
-modulation, then passes the complex baseband waveform through a
-root-raised-cosine filter and onto the USRP.
-
-The --sps parameter controls how many baseband samples per symbol
-are created and passed through the RRC filter, prior to going to the
-USRP over the USB for interpolation to the final DAC rate.
-
-The baseband bit rate is controlled by -r or --rate. This value, when
-multiplied by the --sps parameter, must result in valid interpolation
-rate for the USRP. For example, if the baseband rate is 250k bits/sec,
-and the samples per symbol is 4, then the final rate is 1M samples/sec,
-which results in an interpolation rate of 128. The valid interpolation
-rates for the USRP are multiples of 4 between 16 and 512.
-
-Finally, the RRC excess bandwidth may be specified by --excess-bw.
-(See ./benchmark_tx.py -h for additional parameters.)
-
-
-benchmark_rx.py
-
-This sets up a BPSK receiver to demodulate the received waveform. It
-accepts a similar set of parameters as the transmitter, except that one
-specifies the USRP decimation rate desired. The resulting sample stream
-rate must be an integral number of baseband symbols. For example, the
-parameters corresponding to the above transmitter would be to use a
-decimation rate of 8 (32 sps), 16 (16 sps), 32 (8 sps), 64, (4 sps), or
-128 (2 sps). The lower the USRP decimation, the more CPU is required to
-demodulate the signal, so not all valid decimation rates will work.
-
-The baseband signal from the USRP is first passed through an AGC to
-establish an average power of 1.0. It is then passed through a matched
-filter (another RRC), a Costas phase-locked loop, and a Mueller and
-Muller bit timing recovery loop. The resulting constellation has an SNR
-estimation probe attached, and is then sliced into a bit stream.
-
-The recovered bits are then passed through a 7-bit descrambler. If
-there are no channel errors, the all 1s sequence is recovered. In the
-event of a channel error, there will be a 0 in the bit stream for each
-feedback tap in the descrambler. In this case, the CCSDS descrambler is
-using 3 feedback taps.
-
-Finally, the signal is passed into a bit density measurement probe. The
-channel BER is measured by dividing the 0s density by three. This
-measurement is inaccurate at high BER rates (>10%) as the error 0s
-begin to overlap.
-
-The benchmark script will, once per second, output the Costas loop
-frequency offset, the recovered timing error, the estimated SNR, and the
-average BER.
-
-NOTE: The particular SNR estimator used is inaccurate below about 7dB,
-and will report erroneously high values even for random noise.
-
-There are a variety of Costas and M&M loop parameters one can adjust.
-See ./benchmark_rx.py -h for the full set.
diff --git a/gnuradio-examples/python/digital-bert/benchmark_rx.py b/gnuradio-examples/python/digital-bert/benchmark_rx.py
deleted file mode 100755
index 1e00dbd76..000000000
--- a/gnuradio-examples/python/digital-bert/benchmark_rx.py
+++ /dev/null
@@ -1,170 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2008 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, eng_notation, usrp
-from optparse import OptionParser
-from gnuradio.eng_option import eng_option
-from receive_path import receive_path
-import gnuradio.gr.gr_threading as _threading
-import sys, time
-
-n2s = eng_notation.num_to_str
-
-class status_thread(_threading.Thread):
- def __init__(self, tb):
- _threading.Thread.__init__(self)
- self.setDaemon(1)
- self.tb = tb
- self.done = False
- self.start()
-
- def run(self):
- while not self.done:
- print "Freq. Offset: %5.0f Hz Timing Offset: %5.1f ppm Estimated SNR: %4.1f dB BER: %g" % (
- tb.frequency_offset(), tb.timing_offset()*1e6, tb.snr(), tb.ber())
- try:
- time.sleep(1.0)
- except KeyboardInterrupt:
- self.done = True
-
-class rx_bpsk_block(gr.top_block):
- def __init__(self, options):
-
- gr.top_block.__init__(self, "rx_mpsk")
-
- print "USRP decimation rate", options.decim_rate
-
- # Create a USRP source at desired board, sample rate, frequency, and gain
- self._setup_usrp(options.which,
- options.decim_rate,
- options.rx_subdev_spec,
- options.freq,
- options.gain)
-
- # Create the BERT receiver
- if_rate = self._usrp.adc_rate()/options.decim_rate
- self._receiver = receive_path(if_rate,
- options.rate,
- options.excess_bw,
- options.costas_alpha,
- options.costas_beta,
- options.costas_max,
- options.mm_gain_mu,
- options.mm_gain_omega,
- options.mm_omega_limit)
-
- self.connect(self._usrp, self._receiver)
-
-
- def _setup_usrp(self, which, decim, subdev_spec, freq, gain):
- self._usrp = usrp.source_c(which=which, decim_rate=decim)
- if subdev_spec is None:
- subdev_spec = usrp.pick_rx_subdevice(self._usrp)
- self._subdev = usrp.selected_subdev(self._usrp, subdev_spec)
- mux = usrp.determine_rx_mux_value(self._usrp, subdev_spec)
- self._usrp.set_mux(mux)
- tr = self._usrp.tune(0, self._subdev, freq)
- if not (tr):
- print "Failed to tune to center frequency!"
- else:
- print "Center frequency:", n2s(freq)
- if gain is None:
- g = self._subdev.gain_range();
- gain = float(g[0]+g[1])/2.0
- self._subdev.set_gain(gain)
- print "RX d'board:", self._subdev.side_and_name()
-
- def snr(self):
- return self._receiver.snr()
-
- def mag(self):
- return self._receiver.signal_mean()
-
- def var(self):
- return self._receiver.noise_variance()
-
- def ber(self):
- return self._receiver.ber()
-
- def frequency_offset(self):
- return self._receiver.frequency_offset()
-
- def timing_offset(self):
- return self._receiver.timing_offset()
-
-def get_options():
- parser = OptionParser(option_class=eng_option)
- parser.add_option("-w", "--which", type="int", default=0,
- help="select which USRP (0, 1, ...) (default is %default)",
- metavar="NUM")
- parser.add_option("-R", "--rx-subdev-spec", type="subdev", default=None,
- help="select USRP Rx side A or B (default=first one with a daughterboard)")
- 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 Rx gain (default is mid-point)")
- parser.add_option("-r", "--rate", type="eng_float", default=250e3,
- help="Select modulation symbol rate (default=%default)")
- parser.add_option("-d", "--decim-rate", type="int", default=8,
- help="Select USRP decimation rate (default=%default)")
- parser.add_option("", "--excess-bw", type="eng_float", default=0.35,
- help="Select RRC excess bandwidth (default=%default)")
- parser.add_option("", "--costas-alpha", type="eng_float", default=0.05,
- help="set Costas loop 1st order gain, (default=%default)")
- parser.add_option("", "--costas-beta", type="eng_float", default=0.00025,
- help="set Costas loop 2nd order gain, (default=%default)")
- parser.add_option("", "--costas-max", type="eng_float", default=0.05,
- help="set Costas loop max freq (rad/sample) (default=%default)")
- parser.add_option("", "--mm-gain-mu", type="eng_float", default=0.001,
- help="set M&M loop 1st order gain, (default=%default)")
- parser.add_option("", "--mm-gain-omega", type="eng_float", default=0.000001,
- help="set M&M loop 2nd order gain, (default=%default)")
- parser.add_option("", "--mm-omega-limit", type="eng_float", default=0.0001,
- help="set M&M max timing error, (default=%default)")
-
-
- (options, args) = parser.parse_args()
- if len(args) != 0:
- parser.print_help()
- sys.exit(1)
-
- if options.freq == None:
- print "You must supply a frequency with -f or --freq"
- sys.exit(1)
-
- return (options, args)
-
-
-if __name__ == "__main__":
- (options, args) = get_options()
-
- tb = rx_bpsk_block(options)
-
- print "\n*** SNR estimator is inaccurate below about 7dB"
- print "*** BER estimator is inaccurate above about 10%\n"
- updater = status_thread(tb)
-
- try:
- tb.run()
- except KeyboardInterrupt:
- updater.done = True
- updater = None
diff --git a/gnuradio-examples/python/digital-bert/benchmark_tx.py b/gnuradio-examples/python/digital-bert/benchmark_tx.py
deleted file mode 100755
index 000f4bca2..000000000
--- a/gnuradio-examples/python/digital-bert/benchmark_tx.py
+++ /dev/null
@@ -1,111 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2008 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, eng_notation, usrp
-from gnuradio.eng_option import eng_option
-from optparse import OptionParser
-from transmit_path import transmit_path
-import sys
-
-_dac_rate = 128e6
-
-n2s = eng_notation.num_to_str
-
-class tx_bpsk_block(gr.top_block):
- def __init__(self, options):
- gr.top_block.__init__(self, "tx_mpsk")
-
- self._transmitter = transmit_path(options.sps,
- options.excess_bw,
- options.amplitude)
-
- if_rate = options.rate*options.sps
- interp = int(_dac_rate/if_rate)
-
- print "Modulation:", n2s(options.rate), "bits/sec"
- print "TX IF rate:", n2s(if_rate), "samples/sec"
- print "USRP interpolation:", interp
- print "DAC amplitude:", options.amplitude
-
- self._setup_usrp(options.which,
- interp,
- options.tx_subdev_spec,
- options.freq)
-
- self.connect(self._transmitter, self._usrp)
-
-
- def _setup_usrp(self, which, interp, subdev_spec, freq):
- self._usrp = usrp.sink_c(which=which, interp_rate=interp)
- if subdev_spec is None:
- subdev_spec = usrp.pick_tx_subdevice(self._usrp)
- self._usrp.set_mux(usrp.determine_tx_mux_value(self._usrp, subdev_spec))
- self._subdev = usrp.selected_subdev(self._usrp, subdev_spec)
- tr = usrp.tune(self._usrp, self._subdev.which(), self._subdev, freq)
- if not (tr):
- print "Failed to tune to center frequency!"
- else:
- print "Center frequency:", n2s(freq)
- gain = float(self._subdev.gain_range()[1]) # Max TX gain
- self._subdev.set_gain(gain)
- self._subdev.set_enable(True)
- print "TX d'board:", self._subdev.side_and_name()
-
-
-def get_options():
- parser = OptionParser(option_class=eng_option)
- parser.add_option("-w", "--which", type="int", default=0,
- help="select which USRP (0, 1, ...) default is %default",
- metavar="NUM")
- parser.add_option("-T", "--tx-subdev-spec", type="subdev", default=None,
- help="select USRP Tx side A or B (default=first one with a daughterboard)")
- parser.add_option("-f", "--freq", type="eng_float", default=None,
- help="set frequency to FREQ", metavar="FREQ")
- parser.add_option("-a", "--amplitude", type="eng_float", default=2000,
- help="set Tx amplitude (0-32767) (default=%default)")
- parser.add_option("-r", "--rate", type="eng_float", default=250e3,
- help="Select modulation symbol rate (default=%default)")
- parser.add_option("", "--sps", type="int", default=2,
- help="Select samples per symbol (default=%default)")
- parser.add_option("", "--excess-bw", type="eng_float", default=0.35,
- help="Select RRC excess bandwidth (default=%default)")
-
- (options, args) = parser.parse_args()
- if len(args) != 0:
- parser.print_help()
- sys.exit(1)
-
- if options.freq == None:
- print "Must supply frequency as -f or --freq"
- sys.exit(1)
-
- return (options, args)
-
-if __name__ == "__main__":
- (options, args) = get_options()
-
- tb = tx_bpsk_block(options)
-
- try:
- tb.run()
- except KeyboardInterrupt:
- pass
diff --git a/gnuradio-examples/python/digital-bert/receive_path.py b/gnuradio-examples/python/digital-bert/receive_path.py
deleted file mode 100644
index e273923a4..000000000
--- a/gnuradio-examples/python/digital-bert/receive_path.py
+++ /dev/null
@@ -1,118 +0,0 @@
-#
-# Copyright 2008 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, eng_notation
-import math
-
-n2s = eng_notation.num_to_str
-
-class receive_path(gr.hier_block2):
- def __init__(self,
- if_rate, # Incoming sample rate
- symbol_rate, # Original symbol rate
- excess_bw, # RRC excess bandwidth, typically 0.35-0.5
- costas_alpha, # Costas loop 1st order gain, typically 0.01-0.2
- costas_beta, # Costas loop 2nd order gain, typically alpha^2/4.0
- costas_max, # Costas loop max frequency offset in radians/sample
- mm_gain_mu, # M&M loop 1st order gain, typically 0.001-0.2
- mm_gain_omega, # M&M loop 2nd order gain, typically alpha^2/4.0
- mm_omega_limit, # M&M loop max timing error
- ):
-
- gr.hier_block2.__init__(self, "receive_path",
- gr.io_signature(1, 1, gr.sizeof_gr_complex), # Input signature
- gr.io_signature(0, 0, 0)) # Output signature
-
- self._if_rate = if_rate
- self._sps = int(self._if_rate/symbol_rate)
- print "IF sample rate:", n2s(self._if_rate)
- print "Symbol rate:", n2s(symbol_rate)
- print "Samples/symbol:", self._sps
- print "RRC bandwidth:", excess_bw
-
- # Create AGC to scale input to unity
- self._agc = gr.agc_cc(1e-5, 1.0, 1.0, 1.0)
-
- # Create RRC with specified excess bandwidth
- taps = gr.firdes.root_raised_cosine(1.0, # Gain
- self._sps, # Sampling rate
- 1.0, # Symbol rate
- excess_bw, # Roll-off factor
- 11*self._sps) # Number of taps
-
- self._rrc = gr.fir_filter_ccf(1, taps)
-
- # Create a Costas loop frequency/phase recovery block
-
- print "Costas alpha:", costas_alpha
- print "Costas beta:", costas_beta
- print "Costas max:", costas_max
-
- self._costas = gr.costas_loop_cc(costas_alpha, # PLL first order gain
- costas_beta, # PLL second order gain
- costas_max, # Max frequency offset rad/sample
- -costas_max, # Min frequency offset rad/sample
- 2) # BPSK
-
- # Create a M&M bit synchronization retiming block
- mm_mu = 0.5
- mm_omega = self._sps
-
- print "MM gain mu:", mm_gain_mu
- print "MM gain omega:", mm_gain_omega
- print "MM omega limit:", mm_omega_limit
-
- self._mm = gr.clock_recovery_mm_cc(mm_omega, # Initial samples/symbol
- mm_gain_omega, # Second order gain
- mm_mu, # Initial symbol phase
- mm_gain_mu, # First order gain
- mm_omega_limit) # Maximum timing offset
-
- # Add an SNR probe on the demodulated constellation
- self._snr_probe = gr.probe_mpsk_snr_c(10.0/symbol_rate)
- self.connect(self._mm, self._snr_probe)
-
- # Slice the resulting constellation into bits.
- # Get inphase channel and make decision about 0
- self._c2r = gr.complex_to_real()
- self._slicer = gr.binary_slicer_fb()
-
- # Descramble BERT sequence. A channel error will create 3 incorrect bits
- self._descrambler = gr.descrambler_bb(0x8A, 0x7F, 7) # CCSDS 7-bit descrambler
-
- # Measure BER by the density of 0s in the stream
- self._ber = gr.probe_density_b(1.0/symbol_rate)
-
- self.connect(self, self._agc, self._rrc, self._costas, self._mm,
- self._c2r, self._slicer, self._descrambler, self._ber)
-
- def frequency_offset(self):
- return self._costas.freq()*self._if_rate/(2*math.pi)
-
- def timing_offset(self):
- return self._mm.omega()/self._sps-1.0
-
- def snr(self):
- return self._snr_probe.snr()
-
- def ber(self):
- return (1.0-self._ber.density())/3.0
-
diff --git a/gnuradio-examples/python/digital-bert/transmit_path.py b/gnuradio-examples/python/digital-bert/transmit_path.py
deleted file mode 100644
index 96834b398..000000000
--- a/gnuradio-examples/python/digital-bert/transmit_path.py
+++ /dev/null
@@ -1,61 +0,0 @@
-#
-# Copyright 2008 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
-from math import pi, log10
-import cmath
-
-class transmit_path(gr.hier_block2):
- """
- This transmits a BERT sequence of bits using filtered BPSK and
- outputs the complex baseband waveform.
- """
- def __init__(self,
- sps, # Samples per symbol
- excess_bw, # RRC filter excess bandwidth (typically 0.35-0.5)
- amplitude # DAC output level, 0-32767, typically 2000-8000
- ):
-
- 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
-
- # Create BERT data bit stream
- self._bits = gr.vector_source_b([1,], True) # Infinite stream of ones
- self._scrambler = gr.scrambler_bb(0x8A, 0x7F, 7) # CCSDS 7-bit scrambler
-
- # Map to constellation
- self._constellation = [-1+0j, 1+0j]
- self._mapper = gr.chunks_to_symbols_bc(self._constellation)
-
- # Create RRC with specified excess bandwidth
- taps = gr.firdes.root_raised_cosine(sps*amplitude, # Gain
- sps, # Sampling rate
- 1.0, # Symbol rate
- excess_bw, # Roll-off factor
- 11*sps) # Number of taps
-
- self._rrc = gr.interp_fir_filter_ccf(sps, # Interpolation rate
- taps) # FIR taps
-
- # Wire block inputs and outputs
- self.connect(self._bits, self._scrambler, self._mapper, self._rrc, self)
-
diff --git a/gnuradio-examples/python/digital/.gitignore b/gnuradio-examples/python/digital/.gitignore
deleted file mode 100644
index ff40c06f3..000000000
--- a/gnuradio-examples/python/digital/.gitignore
+++ /dev/null
@@ -1,11 +0,0 @@
-/Makefile
-/Makefile.in
-/.la
-/.lo
-/.deps
-/.libs
-/*.la
-/*.lo
-/*.pyc
-/*.pyo
-/*.dat
diff --git a/gnuradio-examples/python/digital/Makefile.am b/gnuradio-examples/python/digital/Makefile.am
deleted file mode 100644
index f9d129400..000000000
--- a/gnuradio-examples/python/digital/Makefile.am
+++ /dev/null
@@ -1,44 +0,0 @@
-#
-# Copyright 2004,2009 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.
-#
-
-include $(top_srcdir)/Makefile.common
-
-ourdatadir = $(exampledir)/digital
-
-dist_ourdata_DATA = \
- README \
- pick_bitrate.py \
- qt_digital_window.ui \
- qt_digital_window.py \
- qt_rx_window.ui \
- qt_rx_window.py \
- receive_path.py \
- transmit_path.py \
- usrp_receive_path.py \
- usrp_transmit_path.py
-
-dist_ourdata_SCRIPTS = \
- benchmark_loopback.py \
- benchmark_rx.py \
- benchmark_tx.py \
- benchmark_qt_rx.py \
- benchmark_qt_loopback.py\
- tunnel.py \ No newline at end of file
diff --git a/gnuradio-examples/python/digital/README b/gnuradio-examples/python/digital/README
deleted file mode 100644
index 904a64895..000000000
--- a/gnuradio-examples/python/digital/README
+++ /dev/null
@@ -1,84 +0,0 @@
-Quick overview of what's here:
-
-* benchmark_tx.py: generates packets of the size you
-specify and sends them across the air using the USRP. Known to work
-well using the USRP with the RFX transceiver daughterboards.
-You can specify the bitrate to use with the -r <bitrate> command line
-parameter. The default is 500k. Some machines will do 1M or more.
-You can select the modulation to use with the -m <modulation> command
-line argument. The legal values for <modulation> are gmsk, dbpsk and dqpsk.
-
-* benchmark_rx.py: the receiver half of benchmark_tx.py.
-Command line arguments are pretty much the same as rx. Works well
-with a USRP and RFX transceiver daughterboards. Will also work
-with TVRX daugherboard, but you'll need to fiddle with the gain. See
-below. Prints a summary of each packet received and keeps a running
-total of packets received, and how many of them were error free.
-There are two levels of error reporting going on. If the access code
-(PN code) and header of a packet were properly detected, then you'll
-get an output line. If the CRC32 of the payload was correct you get
-"ok = True", else "ok = False". The "pktno" is extracted from the
-received packet. If there are skipped numbers, you're missing some
-packets. Be sure you've got a suitable antenna connected to the TX/RX
-port on each board. For the RFX-400, "70 cm" / 420 MHz antennas for ham
-handi-talkies work great. These are available at ham radio supplies,
-etc. The boards need to be at least 3m apart. You can also try
-experimenting with the rx gain (-g <gain> command line option).
-
-Generally speaking, I start the rx first on one machine, and then fire
-up the tx on the other machine. The tx also supports a discontinous
-transmission mode where it sends bursts of 5 packets and then waits 1
-second. This is useful for ensuring that all the receiver control
-loops lock up fast enough.
-
-* tunnel.py: This program provides a framework for building your own
-MACs. It creates a "TAP" interface in the kernel, typically gr0,
-and sends and receives ethernet frames through it. See
-/usr/src/linux/Documentation/networking/tuntap.txt and/or Google for
-"universal tun tap". The Linux 2.6 kernel includes the tun module, you
-don't have to build it. You may have to "modprobe tun" if it's not
-loaded by default. If /dev/net/tun doesn't exist, try "modprobe tun".
-
-To run this program you'll need to be root or running with the
-appropriate capability to open the tun interface. You'll need to fire
-up two copies on different machines. Once each is running you'll need
-to ifconfig the gr0 interface to set the IP address.
-
-This will allow two machines to talk, but anything beyond the two
-machines depends on your networking setup. Left as an exercise...
-
-On machine A:
-
- $ su
- # ./tunnel.py --freq 423.0M --bitrate 500k
- # # in another window on A, also as root...
- # ifconfig gr0 192.168.200.1
-
-
-On machine B:
-
- $ su
- # ./tunnel.py --freq 423.0M --bitrate 500k
- # # in another window on B, also as root...
- # ifconfig gr0 192.168.200.2
-
-Now, on machine A you shold be able to ping machine B:
-
- $ ping 192.168.200.2
-
-and you should see some output for each packet in the
-tunnel.py window if you used the -v option.
-
-Likewise, on machine B:
-
- $ ping 192.168.200.1
-
-This now uses a carrier sense MAC, so you should be able to ssh
-between the machines, web browse, etc.
-
-* run_length.py: This program takes a single argument '-f FILE' and
-outputs the number of runs of similar bits within the file. It is
-useful as a diagnostic tool when experimenting with line coding or
-whitening algorithms.
-
-
diff --git a/gnuradio-examples/python/digital/benchmark_loopback.py b/gnuradio-examples/python/digital/benchmark_loopback.py
deleted file mode 100755
index 47e4f2028..000000000
--- a/gnuradio-examples/python/digital/benchmark_loopback.py
+++ /dev/null
@@ -1,173 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2005, 2006, 2007, 2009 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, modulation_utils
-from gnuradio import eng_notation
-from gnuradio.eng_option import eng_option
-from optparse import OptionParser
-
-import random, time, struct, sys, math
-
-# from current dir
-from transmit_path import transmit_path
-from receive_path import receive_path
-
-class my_top_block(gr.top_block):
- def __init__(self, mod_class, demod_class, rx_callback, options):
- gr.top_block.__init__(self)
-
- channelon = True;
-
- SNR = 10.0**(options.snr/10.0)
- frequency_offset = options.frequency_offset
-
- power_in_signal = abs(options.tx_amplitude)**2
- noise_power = power_in_signal/SNR
- noise_voltage = math.sqrt(noise_power)
-
- # With new interface, sps does not get set by default, but
- # in the loopback, we don't recalculate it; so just force it here
- if(options.samples_per_symbol == None):
- options.samples_per_symbol = 2
-
- self.txpath = transmit_path(mod_class, options)
- self.throttle = gr.throttle(gr.sizeof_gr_complex, options.sample_rate)
- self.rxpath = receive_path(demod_class, rx_callback, options)
-
- if channelon:
- self.channel = gr.channel_model(noise_voltage, frequency_offset, 1.01)
-
- if options.discontinuous:
- z = 20000*[0,]
- self.zeros = gr.vector_source_c(z, True)
- packet_size = 5*((4+8+4+1500+4) * 8)
- self.mux = gr.stream_mux(gr.sizeof_gr_complex, [packet_size-0, int(9e5)])
-
- # Connect components
- self.connect(self.txpath, (self.mux,0))
- self.connect(self.zeros, (self.mux,1))
- self.connect(self.mux, self.channel, self.rxpath)
-
- else:
- self.connect(self.txpath, self.channel, self.rxpath)
-
- else:
- # Connect components
- self.connect(self.txpath, self.throttle, self.rxpath)
-
-
-# /////////////////////////////////////////////////////////////////////////////
-# main
-# /////////////////////////////////////////////////////////////////////////////
-
-def main():
-
- global n_rcvd, n_right
-
- n_rcvd = 0
- n_right = 0
-
- def rx_callback(ok, payload):
- global n_rcvd, n_right
- (pktno,) = struct.unpack('!H', payload[0:2])
- n_rcvd += 1
- if ok:
- n_right += 1
-
- print "ok = %5s pktno = %4d n_rcvd = %4d n_right = %4d" % (
- ok, pktno, n_rcvd, n_right)
- # print payload[2:len(payload)]
-
- def send_pkt(payload='', eof=False):
- return tb.txpath.send_pkt(payload, eof)
-
-
- mods = modulation_utils.type_1_mods()
- demods = modulation_utils.type_1_demods()
-
- parser = OptionParser(option_class=eng_option, conflict_handler="resolve")
- expert_grp = parser.add_option_group("Expert")
- channel_grp = parser.add_option_group("Channel")
-
- parser.add_option("-m", "--modulation", type="choice", choices=mods.keys(),
- default='dbpsk',
- help="Select modulation from: %s [default=%%default]"
- % (', '.join(mods.keys()),))
-
- parser.add_option("-s", "--size", type="eng_float", default=1500,
- help="set packet size [default=%default]")
- parser.add_option("-M", "--megabytes", type="eng_float", default=1.0,
- help="set megabytes to transmit [default=%default]")
- parser.add_option("","--discontinuous", action="store_true", default=False,
- help="enable discontinous transmission (bursts of 5 packets)")
-
- channel_grp.add_option("", "--sample-rate", type="eng_float", default=1e5,
- help="set speed of channel/simulation rate to RATE [default=%default]")
- channel_grp.add_option("", "--snr", type="eng_float", default=30,
- help="set the SNR of the channel in dB [default=%default]")
- channel_grp.add_option("", "--frequency-offset", type="eng_float", default=0,
- help="set frequency offset introduced by channel [default=%default]")
- channel_grp.add_option("", "--seed", action="store_true", default=False,
- help="use a random seed for AWGN noise [default=%default]")
-
- transmit_path.add_options(parser, expert_grp)
- receive_path.add_options(parser, expert_grp)
-
- for mod in mods.values():
- mod.add_options(expert_grp)
- for demod in demods.values():
- demod.add_options(expert_grp)
-
- (options, args) = parser.parse_args ()
-
- if len(args) != 0:
- parser.print_help()
- sys.exit(1)
-
- r = gr.enable_realtime_scheduling()
- if r != gr.RT_OK:
- print "Warning: failed to enable realtime scheduling"
-
- # Create an instance of a hierarchical block
- tb = my_top_block(mods[options.modulation], demods[options.modulation], rx_callback, options)
- tb.start()
-
- # generate and send packets
- nbytes = int(1e6 * options.megabytes)
- n = 0
- pktno = 0
- pkt_size = int(options.size)
-
- while n < nbytes:
- send_pkt(struct.pack('!H', pktno & 0xffff) + (pkt_size - 2) * chr(pktno & 0xff))
- n += pkt_size
- pktno += 1
-
- send_pkt(eof=True)
-
- tb.wait()
-
-if __name__ == '__main__':
- try:
- main()
- except KeyboardInterrupt:
- pass
diff --git a/gnuradio-examples/python/digital/benchmark_qt_loopback.py b/gnuradio-examples/python/digital/benchmark_qt_loopback.py
deleted file mode 100755
index 0ae0e4e51..000000000
--- a/gnuradio-examples/python/digital/benchmark_qt_loopback.py
+++ /dev/null
@@ -1,470 +0,0 @@
-#!/usr/bin/env python
-
-from gnuradio import gr, gru, modulation_utils
-from gnuradio import eng_notation
-from gnuradio.eng_option import eng_option
-from optparse import OptionParser
-import random, time, struct, sys, os, math
-
-from threading import Thread
-
-# from current dir
-from transmit_path import transmit_path
-from receive_path import receive_path
-
-try:
- from gnuradio.qtgui import qtgui
- from PyQt4 import QtGui, QtCore
- import sip
-except ImportError:
- print "Please install gr-qtgui."
- sys.exit(1)
-
-try:
- from qt_digital_window import Ui_DigitalWindow
-except ImportError:
- print "Error: could not find qt_digital_window.py:"
- print "\t\"pyuic4 qt_digital_window.ui -o qt_digital_window.py\""
- sys.exit(1)
-
-
-#print os.getpid()
-#raw_input()
-
-
-# ////////////////////////////////////////////////////////////////////
-# Define the QT Interface and Control Dialog
-# ////////////////////////////////////////////////////////////////////
-
-
-class dialog_box(QtGui.QMainWindow):
- def __init__(self, snkTx, snkRx, fg, parent=None):
-
- QtGui.QWidget.__init__(self, parent)
- self.gui = Ui_DigitalWindow()
- self.gui.setupUi(self)
-
- self.fg = fg
-
- self.set_sample_rate(self.fg.sample_rate())
-
- self.set_snr(self.fg.snr())
- self.set_frequency(self.fg.frequency_offset())
- self.set_time_offset(self.fg.timing_offset())
-
- self.set_gain_mu(self.fg.rx_timing_gain_alpha())
- self.set_alpha(self.fg.rx_alpha())
-
- # Add the qtsnk widgets to the hlayout box
- self.gui.sinkLayout.addWidget(snkTx)
- self.gui.sinkLayout.addWidget(snkRx)
-
-
- # Connect up some signals
- self.connect(self.gui.pauseButton, QtCore.SIGNAL("clicked()"),
- self.pauseFg)
-
- self.connect(self.gui.sampleRateEdit, QtCore.SIGNAL("editingFinished()"),
- self.sampleRateEditText)
-
- self.connect(self.gui.snrEdit, QtCore.SIGNAL("editingFinished()"),
- self.snrEditText)
- self.connect(self.gui.freqEdit, QtCore.SIGNAL("editingFinished()"),
- self.freqEditText)
- self.connect(self.gui.timeEdit, QtCore.SIGNAL("editingFinished()"),
- self.timeEditText)
-
- self.connect(self.gui.gainMuEdit, QtCore.SIGNAL("editingFinished()"),
- self.gainMuEditText)
- self.connect(self.gui.alphaEdit, QtCore.SIGNAL("editingFinished()"),
- self.alphaEditText)
-
- # Build a timer to update the packet number and PER fields
- self.update_delay = 250 # time between updating packet rate fields
- self.pkt_timer = QtCore.QTimer(self)
- self.connect(self.pkt_timer, QtCore.SIGNAL("timeout()"),
- self.updatePacketInfo)
- self.pkt_timer.start(self.update_delay)
-
- def pauseFg(self):
- if(self.gui.pauseButton.text() == "Pause"):
- self.fg.stop()
- self.fg.wait()
- self.gui.pauseButton.setText("Unpause")
- else:
- self.fg.start()
- self.gui.pauseButton.setText("Pause")
-
- # Accessor functions for Gui to manipulate system parameters
- def set_sample_rate(self, sr):
- ssr = eng_notation.num_to_str(sr)
- self.gui.sampleRateEdit.setText(QtCore.QString("%1").arg(ssr))
-
- def sampleRateEditText(self):
- try:
- rate = self.gui.sampleRateEdit.text().toAscii()
- srate = eng_notation.str_to_num(rate)
- #self.fg.set_sample_rate(srate)
- except RuntimeError:
- pass
-
-
- # Accessor functions for Gui to manipulate channel model
- def set_snr(self, snr):
- self.gui.snrEdit.setText(QtCore.QString("%1").arg(snr))
-
- def set_frequency(self, fo):
- self.gui.freqEdit.setText(QtCore.QString("%1").arg(fo))
-
- def set_time_offset(self, to):
- self.gui.timeEdit.setText(QtCore.QString("%1").arg(to))
-
- def snrEditText(self):
- try:
- snr = self.gui.snrEdit.text().toDouble()[0]
- self.fg.set_snr(snr)
- except RuntimeError:
- pass
-
- def freqEditText(self):
- try:
- freq = self.gui.freqEdit.text().toDouble()[0]
- self.fg.set_frequency_offset(freq)
- except RuntimeError:
- pass
-
- def timeEditText(self):
- try:
- to = self.gui.timeEdit.text().toDouble()[0]
- self.fg.set_timing_offset(to)
- except RuntimeError:
- pass
-
-
- # Accessor functions for Gui to manipulate receiver parameters
- def set_gain_mu(self, gain):
- self.gui.gainMuEdit.setText(QtCore.QString("%1").arg(gain))
-
- def set_alpha(self, alpha):
- self.gui.alphaEdit.setText(QtCore.QString("%1").arg(alpha))
-
- def alphaEditText(self):
- try:
- alpha = self.gui.alphaEdit.text().toDouble()[0]
- self.fg.set_rx_alpha(alpha)
- except RuntimeError:
- pass
-
- def gainMuEditText(self):
- try:
- gain = self.gui.gainMuEdit.text().toDouble()[0]
- self.fg.set_rx_timing_gain_alpha(gain)
- except RuntimeError:
- pass
-
- # Accessor functions for packet error reporting
- def updatePacketInfo(self):
- # Pull these globals in from the main thread
- global n_rcvd, n_right, pktno
-
- if(pktno > 0):
- per = float(n_rcvd - n_right)/float(pktno)
- else:
- per = 0
- self.gui.pktsRcvdEdit.setText(QtCore.QString("%1").arg(n_rcvd))
- self.gui.pktsCorrectEdit.setText(QtCore.QString("%1").arg(n_right))
- self.gui.perEdit.setText(QtCore.QString("%1").arg(per))
-
-
-
-# ////////////////////////////////////////////////////////////////////
-# Define the GNU Radio Top Block
-# ////////////////////////////////////////////////////////////////////
-
-
-
-class my_top_block(gr.top_block):
- def __init__(self, mod_class, demod_class, rx_callback, options):
- gr.top_block.__init__(self)
-
- self._sample_rate = options.sample_rate
-
- if(options.samples_per_symbol is None):
- options.samples_per_symbol = 2
-
- channelon = True;
-
- self.gui_on = options.gui
-
- self._frequency_offset = options.frequency_offset
- self._timing_offset = options.timing_offset
- self._tx_amplitude = options.tx_amplitude
- self._snr_dB = options.snr
-
- self._noise_voltage = self.get_noise_voltage(self._snr_dB)
-
- self.txpath = transmit_path(mod_class, options)
- self.throttle = gr.throttle(gr.sizeof_gr_complex, self.sample_rate())
- self.rxpath = receive_path(demod_class, rx_callback, options)
-
- # FIXME: do better exposure to lower issues for control
- self._timing_gain_alpha = self.rxpath.packet_receiver._demodulator._mm_gain_mu
- self._alpha = self.rxpath.packet_receiver._demodulator._costas_alpha
-
- if channelon:
- self.channel = gr.channel_model(self._noise_voltage,
- self.frequency_offset(),
- self.timing_offset())
-
- if options.discontinuous:
- z = 20000*[0,]
- self.zeros = gr.vector_source_c(z, True)
- packet_size = 5*((4+8+4+1500+4) * 8)
- self.mux = gr.stream_mux(gr.sizeof_gr_complex, [packet_size-0, int(9e5)])
-
- # Connect components
- self.connect(self.txpath, self.throttle, (self.mux,0))
- self.connect(self.zeros, (self.mux,1))
- self.connect(self.mux, self.channel, self.rxpath)
-
- else:
- self.connect(self.txpath, self.throttle, self.channel, self.rxpath)
-
- if self.gui_on:
- self.qapp = QtGui.QApplication(sys.argv)
- fftsize = 2048
-
- self.snk_tx = qtgui.sink_c(fftsize, gr.firdes.WIN_BLACKMAN_hARRIS,
- 0, self._sample_rate,
- "Tx", True, True, False, True, True)
- self.snk_rx = qtgui.sink_c(fftsize, gr.firdes.WIN_BLACKMAN_hARRIS,
- 0, self._sample_rate,
- "Rx", True, True, False, True, True)
-
- self.snk_tx.set_frequency_axis(-80, 0)
- self.snk_rx.set_frequency_axis(-60, 20)
-
- # Connect to the QT sinks
- # FIXME: make better exposure to receiver from rxpath
- self.receiver = self.rxpath.packet_receiver._demodulator.receiver
- self.receiver.set_alpha(2)
- self.receiver.set_beta(0.02)
- self.connect(self.channel, self.snk_tx)
- self.connect(self.receiver, self.snk_rx)
-
- pyTxQt = self.snk_tx.pyqwidget()
- pyTx = sip.wrapinstance(pyTxQt, QtGui.QWidget)
-
- pyRxQt = self.snk_rx.pyqwidget()
- pyRx = sip.wrapinstance(pyRxQt, QtGui.QWidget)
-
- self.main_box = dialog_box(pyTx, pyRx, self)
- self.main_box.show()
-
- else:
- # Connect components
- self.connect(self.txpath, self.throttle, self.rxpath)
-
-
-
- # System Parameters
- def sample_rate(self):
- return self._sample_rate
-
- def set_sample_rate(self, sr):
- self._sample_rate = sr
- #self.throttle.set_samples_per_second(self._sample_rate)
-
- # Channel Model Parameters
- def snr(self):
- return self._snr_dB
-
- def set_snr(self, snr):
- self._snr_dB = snr
- self._noise_voltage = self.get_noise_voltage(self._snr_dB)
- self.channel.set_noise_voltage(self._noise_voltage)
-
- def get_noise_voltage(self, SNR):
- snr = 10.0**(SNR/10.0)
- power_in_signal = abs(self._tx_amplitude)**2
- noise_power = power_in_signal/snr
- noise_voltage = math.sqrt(noise_power)
- return noise_voltage
-
- def frequency_offset(self):
- return self._frequency_offset * self.sample_rate()
-
- def set_frequency_offset(self, fo):
- self._frequency_offset = fo / self.sample_rate()
- self.channel.set_frequency_offset(self._frequency_offset)
-
- def timing_offset(self):
- return self._timing_offset
-
- def set_timing_offset(self, to):
- self._timing_offset = to
- self.channel.set_timing_offset(self._timing_offset)
-
-
- # Receiver Parameters
- def rx_timing_gain_alpha(self):
- return self._timing_gain_alpha
-
- def rx_timing_gain_beta(self):
- return self._timing_gain_beta
-
- def set_rx_timing_gain_alpha(self, gain):
- self._timing_gain_alpha = gain
- self.receiver.set_gain_mu(self._timing_gain_alpha)
-
- def rx_alpha(self):
- return self._alpha
-
- def rx_beta(self):
- return self.beta
-
- def set_rx_alpha(self, alpha):
- self._alpha = alpha
- self.beta = .25 * self._alpha * self._alpha
- self.receiver.set_alpha(self._alpha)
- self.receiver.set_beta(self.beta)
-
-
-
-# /////////////////////////////////////////////////////////////////////////////
-# Thread to handle the packet sending procedure
-# Operates in parallel with qApp.exec_()
-# /////////////////////////////////////////////////////////////////////////////
-
-
-
-class th_send(Thread):
- def __init__(self, send_fnc, megs, sz):
- Thread.__init__(self)
- self.send = send_fnc
- self.nbytes = int(1e6 * megs)
- self.pkt_size = int(sz)
-
- def run(self):
- # generate and send packets
- n = 0
- pktno = 0
-
- while n < self.nbytes:
- self.send(struct.pack('!H', pktno & 0xffff) +
- (self.pkt_size - 2) * chr(pktno & 0xff))
- n += self.pkt_size
- pktno += 1
-
- self.send(eof=True)
-
- def stop(self):
- self.nbytes = 0
-
-
-
-# /////////////////////////////////////////////////////////////////////////////
-# main
-# /////////////////////////////////////////////////////////////////////////////
-
-
-
-def main():
-
- global n_rcvd, n_right, pktno
-
- n_rcvd = 0
- n_right = 0
- pktno = 0
-
- def rx_callback(ok, payload):
- global n_rcvd, n_right, pktno
- (pktno,) = struct.unpack('!H', payload[0:2])
- n_rcvd += 1
- if ok:
- n_right += 1
-
- if not options.gui:
- print "ok = %5s pktno = %4d n_rcvd = %4d n_right = %4d" % (
- ok, pktno, n_rcvd, n_right)
-
-
- def send_pkt(payload='', eof=False):
- return tb.txpath.send_pkt(payload, eof)
-
- mods = modulation_utils.type_1_mods()
- demods = modulation_utils.type_1_demods()
-
- parser = OptionParser(option_class=eng_option, conflict_handler="resolve")
- expert_grp = parser.add_option_group("Expert")
- channel_grp = parser.add_option_group("Channel")
-
- parser.add_option("-m", "--modulation", type="choice", choices=mods.keys(),
- default='dbpsk',
- help="Select modulation from: %s [default=%%default]"
- % (', '.join(mods.keys()),))
-
- parser.add_option("-s", "--size", type="eng_float", default=1500,
- help="set packet size [default=%default]")
- parser.add_option("-M", "--megabytes", type="eng_float", default=1.0,
- help="set megabytes to transmit [default=%default]")
- parser.add_option("","--discontinuous", action="store_true", default=False,
- help="enable discontinous transmission (bursts of 5 packets)")
- parser.add_option("-G", "--gui", action="store_true", default=False,
- help="Turn on the GUI [default=%default]")
-
- channel_grp.add_option("", "--sample-rate", type="eng_float", default=1e5,
- help="set speed of channel/simulation rate to RATE [default=%default]")
- channel_grp.add_option("", "--snr", type="eng_float", default=30,
- help="set the SNR of the channel in dB [default=%default]")
- channel_grp.add_option("", "--frequency-offset", type="eng_float", default=0,
- help="set frequency offset introduced by channel [default=%default]")
- channel_grp.add_option("", "--timing-offset", type="eng_float", default=1.0,
- help="set timing offset introduced by channel [default=%default]")
- channel_grp.add_option("", "--seed", action="store_true", default=False,
- help="use a random seed for AWGN noise [default=%default]")
-
- transmit_path.add_options(parser, expert_grp)
- receive_path.add_options(parser, expert_grp)
-
- for mod in mods.values():
- mod.add_options(expert_grp)
- for demod in demods.values():
- demod.add_options(expert_grp)
-
- (options, args) = parser.parse_args ()
-
- if len(args) != 0:
- parser.print_help()
- sys.exit(1)
-
- r = gr.enable_realtime_scheduling()
- if r != gr.RT_OK:
- print "Warning: failed to enable realtime scheduling"
-
- # Create an instance of a hierarchical block
- tb = my_top_block(mods[options.modulation],
- demods[options.modulation],
- rx_callback, options)
- tb.start()
-
- packet_sender = th_send(send_pkt, options.megabytes, options.size)
- packet_sender.start()
-
- if(options.gui):
- tb.qapp.exec_()
- packet_sender.stop()
- else:
- # Process until done; hack in to the join to stop on an interrupt
- while(packet_sender.isAlive()):
- try:
- packet_sender.join(1)
- except KeyboardInterrupt:
- packet_sender.stop()
-
-
-if __name__ == '__main__':
- try:
- main()
- except KeyboardInterrupt:
- pass
diff --git a/gnuradio-examples/python/digital/benchmark_qt_loopback2.py b/gnuradio-examples/python/digital/benchmark_qt_loopback2.py
deleted file mode 100755
index a36f4fbd4..000000000
--- a/gnuradio-examples/python/digital/benchmark_qt_loopback2.py
+++ /dev/null
@@ -1,553 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2010 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, modulation_utils2
-from gnuradio import eng_notation
-from gnuradio.eng_option import eng_option
-from optparse import OptionParser
-import struct, sys, math
-
-from threading import Thread
-
-# from current dir
-from transmit_path import transmit_path
-from receive_path import receive_path
-
-try:
- from gnuradio.qtgui import qtgui
- from PyQt4 import QtGui, QtCore
- import sip
-except ImportError:
- print "Please install gr-qtgui."
- sys.exit(1)
-
-try:
- from qt_digital_window2 import Ui_DigitalWindow
-except ImportError:
- print "Error: could not find qt_digital_window2.py:"
- print "\t\"pyuic4 qt_digital_window2.ui -o qt_digital_window2.py\""
- sys.exit(1)
-
-
-#print os.getpid()
-#raw_input()
-
-
-# ////////////////////////////////////////////////////////////////////
-# Define the QT Interface and Control Dialog
-# ////////////////////////////////////////////////////////////////////
-
-
-class dialog_box(QtGui.QMainWindow):
- def __init__(self, snkTx, snkRx, fg, parent=None):
-
- QtGui.QWidget.__init__(self, parent)
- self.gui = Ui_DigitalWindow()
- self.gui.setupUi(self)
-
- self.fg = fg
-
- self.set_sample_rate(self.fg.sample_rate())
-
- self.set_snr(self.fg.snr())
- self.set_frequency(self.fg.frequency_offset())
- self.set_time_offset(self.fg.timing_offset())
-
- self.set_gain_clock(self.fg.rx_gain_clock())
- self.set_gain_phase(self.fg.rx_gain_phase())
- self.set_gain_freq(self.fg.rx_gain_freq())
-
- # Add the qtsnk widgets to the hlayout box
- self.gui.sinkLayout.addWidget(snkTx)
- self.gui.sinkLayout.addWidget(snkRx)
-
-
- # Connect up some signals
- self.connect(self.gui.pauseButton, QtCore.SIGNAL("clicked()"),
- self.pauseFg)
-
- self.connect(self.gui.sampleRateEdit, QtCore.SIGNAL("editingFinished()"),
- self.sampleRateEditText)
-
- self.connect(self.gui.snrEdit, QtCore.SIGNAL("editingFinished()"),
- self.snrEditText)
- self.connect(self.gui.freqEdit, QtCore.SIGNAL("editingFinished()"),
- self.freqEditText)
- self.connect(self.gui.timeEdit, QtCore.SIGNAL("editingFinished()"),
- self.timeEditText)
-
- self.connect(self.gui.gainClockEdit, QtCore.SIGNAL("editingFinished()"),
- self.gainClockEditText)
- self.connect(self.gui.gainPhaseEdit, QtCore.SIGNAL("editingFinished()"),
- self.gainPhaseEditText)
- self.connect(self.gui.gainFreqEdit, QtCore.SIGNAL("editingFinished()"),
- self.gainFreqEditText)
-
- # Build a timer to update the packet number and PER fields
- self.update_delay = 250 # time between updating packet rate fields
- self.pkt_timer = QtCore.QTimer(self)
- self.connect(self.pkt_timer, QtCore.SIGNAL("timeout()"),
- self.updatePacketInfo)
- self.pkt_timer.start(self.update_delay)
-
- def pauseFg(self):
- if(self.gui.pauseButton.text() == "Pause"):
- self.fg.stop()
- self.fg.wait()
- self.gui.pauseButton.setText("Unpause")
- else:
- self.fg.start()
- self.gui.pauseButton.setText("Pause")
-
- # Accessor functions for Gui to manipulate system parameters
- def set_sample_rate(self, sr):
- ssr = eng_notation.num_to_str(sr)
- self.gui.sampleRateEdit.setText(QtCore.QString("%1").arg(ssr))
-
- def sampleRateEditText(self):
- try:
- rate = self.gui.sampleRateEdit.text().toAscii()
- srate = eng_notation.str_to_num(rate)
- #self.fg.set_sample_rate(srate)
- except RuntimeError:
- pass
-
-
- # Accessor functions for Gui to manipulate channel model
- def set_snr(self, snr):
- self.gui.snrEdit.setText(QtCore.QString("%1").arg(snr))
-
- def set_frequency(self, fo):
- self.gui.freqEdit.setText(QtCore.QString("%1").arg(fo))
-
- def set_time_offset(self, to):
- self.gui.timeEdit.setText(QtCore.QString("%1").arg(to))
-
- def snrEditText(self):
- try:
- snr = self.gui.snrEdit.text().toDouble()[0]
- self.fg.set_snr(snr)
- except RuntimeError:
- pass
-
- def freqEditText(self):
- try:
- freq = self.gui.freqEdit.text().toDouble()[0]
- self.fg.set_frequency_offset(freq)
- except RuntimeError:
- pass
-
- def timeEditText(self):
- try:
- to = self.gui.timeEdit.text().toDouble()[0]
- self.fg.set_timing_offset(to)
- except RuntimeError:
- pass
-
-
- # Accessor functions for Gui to manipulate receiver parameters
- def set_gain_clock(self, gain):
- self.gui.gainClockEdit.setText(QtCore.QString("%1").arg(gain))
-
- def set_gain_phase(self, gain_phase):
- self.gui.gainPhaseEdit.setText(QtCore.QString("%1").arg(gain_phase))
-
- def set_gain_freq(self, gain_freq):
- self.gui.gainFreqEdit.setText(QtCore.QString("%1").arg(gain_freq))
-
-
- def set_alpha_time(self, alpha):
- self.gui.alphaTimeEdit.setText(QtCore.QString("%1").arg(alpha))
-
- def set_beta_time(self, beta):
- self.gui.betaTimeEdit.setText(QtCore.QString("%1").arg(beta))
-
- def set_alpha_phase(self, alpha):
- self.gui.alphaPhaseEdit.setText(QtCore.QString("%1").arg(alpha))
-
- def gainPhaseEditText(self):
- try:
- gain_phase = self.gui.gainPhaseEdit.text().toDouble()[0]
- self.fg.set_rx_gain_phase(gain_phase)
- except RuntimeError:
- pass
-
- def gainClockEditText(self):
- try:
- gain = self.gui.gainClockEdit.text().toDouble()[0]
- self.fg.set_rx_gain_clock(gain)
- except RuntimeError:
- pass
-
- def gainFreqEditText(self):
- try:
- gain = self.gui.gainFreqEdit.text().toDouble()[0]
- self.fg.set_rx_gain_freq(gain)
- except RuntimeError:
- pass
-
- # Accessor functions for packet error reporting
- def updatePacketInfo(self):
- # Pull these globals in from the main thread
- global n_rcvd, n_right, pktno
-
- if(pktno > 0):
- per = float(n_rcvd - n_right)/float(pktno)
- else:
- per = 0
- self.gui.pktsRcvdEdit.setText(QtCore.QString("%1").arg(n_rcvd))
- self.gui.pktsCorrectEdit.setText(QtCore.QString("%1").arg(n_right))
- self.gui.perEdit.setText(QtCore.QString("%1").arg(float(per), 0, 'e', 4))
-
-
-
-# ////////////////////////////////////////////////////////////////////
-# Define the GNU Radio Top Block
-# ////////////////////////////////////////////////////////////////////
-
-
-
-class my_top_block(gr.top_block):
- def __init__(self, mod_class, demod_class, rx_callback, options):
- gr.top_block.__init__(self)
-
- self._sample_rate = options.sample_rate
-
- channelon = True;
-
- self.gui_on = options.gui
-
- self._frequency_offset = options.frequency_offset
- self._timing_offset = options.timing_offset
- self._tx_amplitude = options.tx_amplitude
- self._snr_dB = options.snr
-
- self._noise_voltage = self.get_noise_voltage(self._snr_dB)
-
- # With new interface, sps does not get set by default, but
- # in the loopback, we don't recalculate it; so just force it here
- if(options.samples_per_symbol == None):
- options.samples_per_symbol = 2
-
- self.txpath = transmit_path(mod_class, options)
- self.throttle = gr.throttle(gr.sizeof_gr_complex, self.sample_rate())
- self.rxpath = receive_path(demod_class, rx_callback, options)
-
- # FIXME: do better exposure to lower issues for control
- self._gain_clock = self.rxpath.packet_receiver._demodulator._timing_alpha
- self._gain_phase = self.rxpath.packet_receiver._demodulator._phase_alpha
- self._gain_freq = self.rxpath.packet_receiver._demodulator._freq_alpha
-
- if channelon:
- self.channel = gr.channel_model(self._noise_voltage,
- self.frequency_offset(),
- self.timing_offset())
-
- if options.discontinuous:
- z = 20000*[0,]
- self.zeros = gr.vector_source_c(z, True)
- packet_size = 5*((4+8+4+1500+4) * 8)
- self.mux = gr.stream_mux(gr.sizeof_gr_complex, [packet_size-0, int(9e5)])
-
- # Connect components
- self.connect(self.txpath, self.throttle, (self.mux,0))
- self.connect(self.zeros, (self.mux,1))
- self.connect(self.mux, self.channel, self.rxpath)
-
- else:
- self.connect(self.txpath, self.throttle, self.channel, self.rxpath)
-
- if self.gui_on:
- self.qapp = QtGui.QApplication(sys.argv)
- fftsize = 2048
-
- self.snk_tx = qtgui.sink_c(fftsize, gr.firdes.WIN_BLACKMAN_hARRIS,
- 0, 1,
- "Tx", True, True, False, True, True)
- self.snk_rx = qtgui.sink_c(fftsize, gr.firdes.WIN_BLACKMAN_hARRIS,
- 0, 1,
- "Rx", True, True, False, True, True)
-
- self.snk_tx.set_frequency_axis(-80, 0)
- self.snk_rx.set_frequency_axis(-60, 20)
-
- self.freq_recov = self.rxpath.packet_receiver._demodulator.freq_recov
- self.phase_recov = self.rxpath.packet_receiver._demodulator.phase_recov
- self.time_recov = self.rxpath.packet_receiver._demodulator.time_recov
- self.freq_recov.set_alpha(self._gain_freq)
- self.freq_recov.set_beta(self._gain_freq/10.0)
- self.phase_recov.set_alpha(self._gain_phase)
- self.phase_recov.set_beta(0.25*self._gain_phase*self._gain_phase)
- self.time_recov.set_alpha(self._gain_clock)
- self.time_recov.set_beta(0.25*self._gain_clock*self._gain_clock)
-
- # Connect to the QT sinks
- # FIXME: make better exposure to receiver from rxpath
- self.connect(self.channel, self.snk_tx)
- self.connect(self.phase_recov, self.snk_rx)
- #self.connect(self.freq_recov, self.snk_rx)
-
- pyTxQt = self.snk_tx.pyqwidget()
- pyTx = sip.wrapinstance(pyTxQt, QtGui.QWidget)
-
- pyRxQt = self.snk_rx.pyqwidget()
- pyRx = sip.wrapinstance(pyRxQt, QtGui.QWidget)
-
- self.main_box = dialog_box(pyTx, pyRx, self)
- self.main_box.show()
-
- else:
- # Connect components
- self.connect(self.txpath, self.throttle, self.rxpath)
-
- if options.verbose:
- self._print_verbage()
-
- if options.log:
- self._setup_logging()
-
-
-
-
- # System Parameters
- def sample_rate(self):
- return self._sample_rate
-
- def set_sample_rate(self, sr):
- self._sample_rate = sr
- #self.throttle.set_samples_per_second(self._sample_rate)
-
- # Channel Model Parameters
- def snr(self):
- return self._snr_dB
-
- def set_snr(self, snr):
- self._snr_dB = snr
- self._noise_voltage = self.get_noise_voltage(self._snr_dB)
- self.channel.set_noise_voltage(self._noise_voltage)
-
- def get_noise_voltage(self, SNR):
- snr = 10.0**(SNR/10.0)
- power_in_signal = abs(self._tx_amplitude)**2
- noise_power = power_in_signal/snr
- noise_voltage = math.sqrt(noise_power)
- return noise_voltage
-
- def frequency_offset(self):
- return self._frequency_offset * self.sample_rate()
-
- def set_frequency_offset(self, fo):
- self._frequency_offset = fo / self.sample_rate()
- self.channel.set_frequency_offset(self._frequency_offset)
-
- def timing_offset(self):
- return self._timing_offset
-
- def set_timing_offset(self, to):
- self._timing_offset = to
- self.channel.set_timing_offset(self._timing_offset)
-
-
- # Receiver Parameters
- def rx_gain_clock(self):
- return self._gain_clock
-
- def rx_gain_clock_beta(self):
- return self._gain_clock_beta
-
- def set_rx_gain_clock(self, gain):
- self._gain_clock = gain
- self._gain_clock_beta = .25 * self._gain_clock * self._gain_clock
- self.rxpath.packet_receiver._demodulator.time_recov.set_alpha(self._gain_clock)
- self.rxpath.packet_receiver._demodulator.time_recov.set_beta(self._gain_clock_beta)
-
- def rx_gain_phase(self):
- return self._gain_phase
-
- def rx_gain_phase_beta(self):
- return self._gain_phase_beta
-
- def set_rx_gain_phase(self, gain_phase):
- self._gain_phase = gain_phase
- self._gain_phase_beta = .25 * self._gain_phase * self._gain_phase
- self.rxpath.packet_receiver._demodulator.phase_recov.set_alpha(self._gain_phase)
- self.rxpath.packet_receiver._demodulator.phase_recov.set_beta(self._gain_phase_beta)
-
-
- def rx_gain_freq(self):
- return self._gain_freq
-
- def set_rx_gain_freq(self, gain_freq):
- self._gain_freq = gain_freq
- #self._gain_freq_beta = .25 * self._gain_freq * self._gain_freq
- self.rxpath.packet_receiver._demodulator.freq_recov.set_alpha(self._gain_freq)
- self.rxpath.packet_receiver._demodulator.freq_recov.set_beta(self._gain_freq/10.0)
- #self.rxpath.packet_receiver._demodulator.freq_recov.set_beta(self._gain_fre_beta)
-
- def _print_verbage(self):
- print "\nChannel:"
- print "SNR: %d" % self.snr()
- print "Noise voltage: %.2e" % self.get_noise_voltage(self.snr())
- print "Frequency offset: %.2e" % self.frequency_offset()
- print "Timing offset: %.2e" % self.timing_offset()
-
- def _setup_logging(self):
- pass
-
-# /////////////////////////////////////////////////////////////////////////////
-# Thread to handle the packet sending procedure
-# Operates in parallel with qApp.exec_()
-# /////////////////////////////////////////////////////////////////////////////
-
-
-
-class th_send(Thread):
- def __init__(self, send_fnc, megs, sz):
- Thread.__init__(self)
- self.send = send_fnc
- self.nbytes = int(1e6 * megs)
- self.pkt_size = int(sz)
-
- def run(self):
- # generate and send packets
- n = 0
- pktno = 0
-
- while n < self.nbytes:
- self.send(struct.pack('!H', pktno & 0xffff) +
- (self.pkt_size - 2) * chr(pktno & 0xff))
- n += self.pkt_size
- pktno += 1
-
- self.send(eof=True)
-
- def stop(self):
- self.nbytes = 0
-
-
-
-# /////////////////////////////////////////////////////////////////////////////
-# main
-# /////////////////////////////////////////////////////////////////////////////
-
-
-
-def main():
-
- global n_rcvd, n_right, pktno
-
- n_rcvd = 0
- n_right = 0
- pktno = 0
-
- def rx_callback(ok, payload):
- global n_rcvd, n_right, pktno
- (pktno,) = struct.unpack('!H', payload[0:2])
- n_rcvd += 1
- if ok:
- n_right += 1
-
- if not options.gui:
- print "ok = %5s pktno = %4d n_rcvd = %4d n_right = %4d" % (
- ok, pktno, n_rcvd, n_right)
-
-
- def send_pkt(payload='', eof=False):
- return tb.txpath.send_pkt(payload, eof)
-
- mods = modulation_utils2.type_1_mods()
- demods = modulation_utils2.type_1_demods()
-
- parser = OptionParser(option_class=eng_option, conflict_handler="resolve")
- expert_grp = parser.add_option_group("Expert")
- channel_grp = parser.add_option_group("Channel")
-
- parser.add_option("-m", "--modulation", type="choice", choices=mods.keys(),
- default='psk',
- help="Select modulation from: %s [default=%%default]"
- % (', '.join(mods.keys()),))
-
- parser.add_option("-s", "--size", type="eng_float", default=1500,
- help="set packet size [default=%default]")
- parser.add_option("-M", "--megabytes", type="eng_float", default=1.0,
- help="set megabytes to transmit [default=%default]")
- parser.add_option("","--discontinuous", action="store_true", default=False,
- help="enable discontinous transmission (bursts of 5 packets)")
- parser.add_option("-G", "--gui", action="store_true", default=False,
- help="Turn on the GUI [default=%default]")
-
- channel_grp.add_option("", "--sample-rate", type="eng_float", default=1e5,
- help="set speed of channel/simulation rate to RATE [default=%default]")
- channel_grp.add_option("", "--snr", type="eng_float", default=30,
- help="set the SNR of the channel in dB [default=%default]")
- channel_grp.add_option("", "--frequency-offset", type="eng_float", default=0,
- help="set frequency offset introduced by channel [default=%default]")
- channel_grp.add_option("", "--timing-offset", type="eng_float", default=1.0,
- help="set timing offset introduced by channel [default=%default]")
- channel_grp.add_option("", "--seed", action="store_true", default=False,
- help="use a random seed for AWGN noise [default=%default]")
-
- transmit_path.add_options(parser, expert_grp)
- receive_path.add_options(parser, expert_grp)
-
- for mod in mods.values():
- mod.add_options(expert_grp)
- for demod in demods.values():
- demod.add_options(expert_grp)
-
- (options, args) = parser.parse_args ()
-
- if len(args) != 0:
- parser.print_help()
- sys.exit(1)
-
- r = gr.enable_realtime_scheduling()
- if r != gr.RT_OK:
- print "Warning: failed to enable realtime scheduling"
-
- # Create an instance of a hierarchical block
- tb = my_top_block(mods[options.modulation],
- demods[options.modulation],
- rx_callback, options)
-
- tb.start()
-
- packet_sender = th_send(send_pkt, options.megabytes, options.size)
- packet_sender.start()
-
- if(options.gui):
- tb.qapp.exec_()
- packet_sender.stop()
- else:
- # Process until done; hack in to the join to stop on an interrupt
- while(packet_sender.isAlive()):
- try:
- packet_sender.join(1)
- except KeyboardInterrupt:
- packet_sender.stop()
-
-
-if __name__ == '__main__':
- try:
- main()
- except KeyboardInterrupt:
- pass
diff --git a/gnuradio-examples/python/digital/benchmark_qt_rx.py b/gnuradio-examples/python/digital/benchmark_qt_rx.py
deleted file mode 100755
index 0cbb68d23..000000000
--- a/gnuradio-examples/python/digital/benchmark_qt_rx.py
+++ /dev/null
@@ -1,443 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2005,2006,2007,2009 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, modulation_utils
-from gnuradio import usrp
-from gnuradio import eng_notation
-from gnuradio.eng_option import eng_option
-from optparse import OptionParser
-from gnuradio import usrp_options
-
-import random
-import struct
-import sys
-
-# from current dir
-from receive_path import receive_path
-from pick_bitrate import pick_rx_bitrate
-
-try:
- from gnuradio.qtgui import qtgui
- from PyQt4 import QtGui, QtCore
- import sip
-except ImportError:
- print "Please install gr-qtgui."
- sys.exit(1)
-
-try:
- from qt_rx_window import Ui_DigitalWindow
-except ImportError:
- print "Error: could not find qt_rx_window.py:"
- print "\tYou must first build this from qt_rx_window.ui with the following command:"
- print "\t\"pyuic4 qt_rx_window.ui -o qt_rx_window.py\""
- sys.exit(1)
-
-#import os
-#print os.getpid()
-#raw_input('Attach and press enter: ')
-
-# ////////////////////////////////////////////////////////////////////
-# Define the QT Interface and Control Dialog
-# ////////////////////////////////////////////////////////////////////
-
-
-class dialog_box(QtGui.QMainWindow):
- def __init__(self, snkRxIn, snkRx, fg, parent=None):
-
- QtGui.QWidget.__init__(self, parent)
- self.gui = Ui_DigitalWindow()
- self.gui.setupUi(self)
-
- self.fg = fg
-
- self.set_frequency(self.fg.frequency())
- self.set_gain(self.fg.gain())
- self.set_decim(self.fg.decim())
- self.set_gain_mu(self.fg.rx_gain_mu())
- self.set_alpha(self.fg.rx_alpha())
-
- # Add the qtsnk widgets to the hlayout box
- self.gui.sinkLayout.addWidget(snkRxIn)
- self.gui.sinkLayout.addWidget(snkRx)
-
-
- # Connect up some signals
- self.connect(self.gui.freqEdit, QtCore.SIGNAL("editingFinished()"),
- self.freqEditText)
- self.connect(self.gui.gainEdit, QtCore.SIGNAL("editingFinished()"),
- self.gainEditText)
- self.connect(self.gui.decimEdit, QtCore.SIGNAL("editingFinished()"),
- self.decimEditText)
- self.connect(self.gui.gainMuEdit, QtCore.SIGNAL("editingFinished()"),
- self.gainMuEditText)
- self.connect(self.gui.alphaEdit, QtCore.SIGNAL("editingFinished()"),
- self.alphaEditText)
-
- # Build a timer to update the packet number and PER fields
- self.update_delay = 250 # time between updating packet rate fields
- self.pkt_timer = QtCore.QTimer(self)
- self.connect(self.pkt_timer, QtCore.SIGNAL("timeout()"),
- self.updatePacketInfo)
- self.pkt_timer.start(self.update_delay)
-
-
- # Accessor functions for Gui to manipulate receiver parameters
- def set_frequency(self, fo):
- self.gui.freqEdit.setText(QtCore.QString("%1").arg(fo))
-
- def set_gain(self, gain):
- self.gui.gainEdit.setText(QtCore.QString("%1").arg(gain))
-
- def set_decim(self, decim):
- self.gui.decimEdit.setText(QtCore.QString("%1").arg(decim))
-
- def set_gain_mu(self, gain):
- self.gui.gainMuEdit.setText(QtCore.QString("%1").arg(gain))
-
- def set_alpha(self, alpha):
- self.gui.alphaEdit.setText(QtCore.QString("%1").arg(alpha))
-
- def freqEditText(self):
- try:
- freq = self.gui.freqEdit.text().toDouble()[0]
- self.fg.set_freq(freq)
- except RuntimeError:
- pass
-
- def gainEditText(self):
- try:
- gain = self.gui.gainEdit.text().toDouble()[0]
- self.fg.set_gain(gain)
- except RuntimeError:
- pass
-
- def decimEditText(self):
- try:
- decim = self.gui.decimEdit.text().toInt()[0]
- self.fg.set_decim(decim)
- except RuntimeError:
- pass
-
- def alphaEditText(self):
- try:
- alpha = self.gui.alphaEdit.text().toDouble()[0]
- self.fg.set_rx_alpha(alpha)
- except RuntimeError:
- pass
-
- def gainMuEditText(self):
- try:
- gain = self.gui.gainMuEdit.text().toDouble()[0]
- self.fg.set_rx_gain_mu(gain)
- except RuntimeError:
- pass
-
-
- # Accessor function for packet error reporting
- def updatePacketInfo(self):
- # Pull these globals in from the main thread
- global n_rcvd, n_right, pktno
-
- per = float(n_rcvd - n_right)/float(pktno)
- self.gui.pktsRcvdEdit.setText(QtCore.QString("%1").arg(n_rcvd))
- self.gui.pktsCorrectEdit.setText(QtCore.QString("%1").arg(n_right))
- self.gui.perEdit.setText(QtCore.QString("%1").arg(per))
-
-
-
-# ////////////////////////////////////////////////////////////////////
-# Define the GNU Radio Top Block
-# ////////////////////////////////////////////////////////////////////
-
-
-class my_top_block(gr.top_block):
- def __init__(self, demodulator, rx_callback, options):
- gr.top_block.__init__(self)
-
- self._rx_freq = options.rx_freq # receiver's center frequency
- self._rx_gain = options.rx_gain # receiver's gain
- self._rx_subdev_spec = options.rx_subdev_spec # daughterboard to use
- self._decim = options.decim # Decimating rate for the USRP (prelim)
- self._bitrate = options.bitrate
- self._samples_per_symbol = options.samples_per_symbol
- self._demod_class = demodulator
- self.gui_on = options.gui
-
- if self._rx_freq is None:
- sys.stderr.write("-f FREQ or --freq FREQ or --rx-freq FREQ must be specified\n")
- raise SystemExit
-
- # Set up USRP source
- self._setup_usrp_source(options)
-
- # copy the final answers back into options for use by demodulator
- options.samples_per_symbol = self._samples_per_symbol
- options.bitrate = self._bitrate
- options.decim = self._decim
-
- ok = self.set_freq(self._rx_freq)
- if not ok:
- print "Failed to set Rx frequency to %s" % (eng_notation.num_to_str(self._rx_freq))
- raise ValueError, eng_notation.num_to_str(self._rx_freq)
-
- self.set_gain(options.rx_gain)
-
- # Set up receive path
- self.rxpath = receive_path(demodulator, rx_callback, options)
-
- # FIXME: do better exposure to lower issues for control
- self._gain_mu = self.rxpath.packet_receiver._demodulator._mm_gain_mu
- self._alpha = self.rxpath.packet_receiver._demodulator._costas_alpha
-
- self.connect(self.u, self.rxpath)
-
- if self.gui_on:
- self.qapp = QtGui.QApplication(sys.argv)
- fftsize = 2048
-
- bw_in = self.u.adc_rate() / self.decim()
- self.snk_rxin = qtgui.sink_c(fftsize, gr.firdes.WIN_BLACKMAN_hARRIS,
- self._rx_freq, bw_in,
- "Received", True, True, False, True, True, False)
- self.snk_rx = qtgui.sink_c(fftsize, gr.firdes.WIN_BLACKMAN_hARRIS,
- 0, self._bitrate,
- "Post-Synchronizer", True, True, False, True, True, False)
-
- self.snk_rxin.set_frequency_axis(-60, 60)
- self.snk_rx.set_frequency_axis(-60, 20)
- self.snk_rxin.set_time_domain_axis(-2000,2000)
-
- # Connect to the QT sinks
- # FIXME: make better exposure to receiver from rxpath
- self.receiver = self.rxpath.packet_receiver._demodulator.receiver
- self.connect(self.u, self.snk_rxin)
- self.connect(self.receiver, self.snk_rx)
-
- pyRxInQt = self.snk_rxin.pyqwidget()
- pyRxIn = sip.wrapinstance(pyRxInQt, QtGui.QWidget)
-
- pyRxQt = self.snk_rx.pyqwidget()
- pyRx = sip.wrapinstance(pyRxQt, QtGui.QWidget)
-
- self.main_box = dialog_box(pyRxIn, pyRx, self)
- self.main_box.show()
-
- def _setup_usrp_source(self, options):
- self.u = usrp_options.create_usrp_source(options)
- adc_rate = self.u.adc_rate()
-
- self.u.set_decim(self._decim)
-
- (self._bitrate, self._samples_per_symbol, self._decim) = \
- pick_rx_bitrate(self._bitrate, self._demod_class.bits_per_symbol(), \
- self._samples_per_symbol, self._decim, adc_rate, \
- self.u.get_decim_rates())
-
- self.u.set_decim(self._decim)
- self.set_auto_tr(True) # enable Auto Transmit/Receive switching
-
- def set_freq(self, target_freq):
- """
- Set the center frequency we're interested in.
-
- @param target_freq: frequency in Hz
- @rypte: bool
-
- Tuning is a two step process. First we ask the front-end to
- tune as close to the desired frequency as it can. Then we use
- the result of that operation and our target_frequency to
- determine the value for the digital up converter.
- """
- return self.u.set_center_freq(target_freq)
-
- def set_gain(self, gain):
- """
- Sets the analog gain in the USRP
- """
- if gain is None:
- r = self.u.gain_range()
- gain = (r[0] + r[1])/2 # set gain to midpoint
- self._rx_gain = gain
- return self.u.set_gain(self._rx_gain)
-
- def set_auto_tr(self, enable):
- return self.u.set_auto_tr(enable)
-
- def set_decim(self, decim):
- self._decim = decim
- self.u.set_decim(self._decim)
-
- if(self.gui_on):
- bw_in = self.u.adc_rate() / self._decim
- self._bitrate = bw_in / self._samples_per_symbol
- self.snk_rxin.set_frequency_range(0, -bw_in/2.0, bw_in/2.0)
- self.snk_rx.set_frequency_range(0, -self._bitrate/2.0, self._bitrate/2.0)
-
- def frequency(self):
- return self._rx_freq
-
- def gain(self):
- return self._rx_gain
-
- def decim(self):
- return self._decim
-
- def rx_gain_mu(self):
- return self._gain_mu
-
- def rx_gain_omega(self):
- return self.gain_omega
-
- def set_rx_gain_mu(self, gain):
- self._gain_mu = gain
- self.gain_omega = .25 * self._gain_mu * self._gain_mu
- self.receiver.set_gain_mu(self._gain_mu)
- self.receiver.set_gain_omega(self.gain_omega)
-
- def rx_alpha(self):
- return self._alpha
-
- def rx_beta(self):
- return self.beta
-
- def set_rx_alpha(self, alpha):
- self._alpha = alpha
- self.beta = .25 * self._alpha * self._alpha
- self.receiver.set_alpha(self._alpha)
- self.receiver.set_beta(self.beta)
-
- def add_options(normal, expert):
- """
- Adds usrp-specific options to the Options Parser
- """
- add_freq_option(normal)
- normal.add_option("-R", "--rx-subdev-spec", type="subdev", default=None,
- help="select USRP Rx side A or B")
- normal.add_option("", "--rx-gain", type="eng_float", default=None, metavar="GAIN",
- help="set receiver gain in dB [default=midpoint]. See also --show-rx-gain-range")
- normal.add_option("", "--show-rx-gain-range", action="store_true", default=False,
- help="print min and max Rx gain available on selected daughterboard")
- normal.add_option("-v", "--verbose", action="store_true", default=False)
- normal.add_option("-G", "--gui", action="store_true", default=False,
- help="Turn on the GUI [default=%default]")
-
- expert.add_option("", "--rx-freq", type="eng_float", default=None,
- help="set Rx frequency to FREQ [default=%default]", metavar="FREQ")
- expert.add_option("-d", "--decim", type="intx", default=128,
- help="set fpga decimation rate to DECIM [default=%default]")
- expert.add_option("", "--snr", type="eng_float", default=30,
- help="set the SNR of the channel in dB [default=%default]")
-
-
- # Make a static method to call before instantiation
- add_options = staticmethod(add_options)
-
-
-def add_freq_option(parser):
- """
- Hackery that has the -f / --freq option set both tx_freq and rx_freq
- """
- def freq_callback(option, opt_str, value, parser):
- parser.values.rx_freq = value
- parser.values.tx_freq = value
-
- if not parser.has_option('--freq'):
- parser.add_option('-f', '--freq', type="eng_float",
- action="callback", callback=freq_callback,
- help="set Tx and/or Rx frequency to FREQ [default=%default]",
- metavar="FREQ")
-
-
-# /////////////////////////////////////////////////////////////////////////////
-# main
-# /////////////////////////////////////////////////////////////////////////////
-
-global n_rcvd, n_right
-
-def main():
- global n_rcvd, n_right, pktno
-
- n_rcvd = 0
- n_right = 0
- pktno = 1
-
- def rx_callback(ok, payload):
- global n_rcvd, n_right, pktno
- (pktno,) = struct.unpack('!H', payload[0:2])
- n_rcvd += 1
- if ok:
- n_right += 1
-
- if not options.gui:
- print "ok = %5s pktno = %4d n_rcvd = %4d n_right = %4d" % (
- ok, pktno, n_rcvd, n_right)
-
-
- demods = modulation_utils.type_1_demods()
-
- # Create Options Parser:
- parser = OptionParser (option_class=eng_option, conflict_handler="resolve")
- expert_grp = parser.add_option_group("Expert")
-
- parser.add_option("-m", "--modulation", type="choice", choices=demods.keys(),
- default='dbpsk',
- help="Select modulation from: %s [default=%%default]"
- % (', '.join(demods.keys()),))
-
- my_top_block.add_options(parser, expert_grp)
- receive_path.add_options(parser, expert_grp)
- usrp_options.add_rx_options(parser)
-
- for mod in demods.values():
- mod.add_options(expert_grp)
-
- (options, args) = parser.parse_args ()
-
- if len(args) != 0:
- parser.print_help(sys.stderr)
- sys.exit(1)
-
- if options.rx_freq is None:
- sys.stderr.write("You must specify -f FREQ or --freq FREQ\n")
- parser.print_help(sys.stderr)
- sys.exit(1)
-
-
- # build the graph
- tb = my_top_block(demods[options.modulation], rx_callback, options)
-
- r = gr.enable_realtime_scheduling()
- if r != gr.RT_OK:
- print "Warning: Failed to enable realtime scheduling."
-
- tb.start() # start flow graph
-
- if(options.gui):
- tb.qapp.exec_()
- else:
- tb.wait() # wait for it to finish
-
-if __name__ == '__main__':
- try:
- main()
- except KeyboardInterrupt:
- pass
diff --git a/gnuradio-examples/python/digital/benchmark_qt_rx2.py b/gnuradio-examples/python/digital/benchmark_qt_rx2.py
deleted file mode 100755
index 0c37f4c6a..000000000
--- a/gnuradio-examples/python/digital/benchmark_qt_rx2.py
+++ /dev/null
@@ -1,475 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2010 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, modulation_utils2
-from gnuradio import usrp
-from gnuradio import eng_notation
-from gnuradio.eng_option import eng_option
-from optparse import OptionParser
-from gnuradio import usrp_options
-
-import random
-import struct
-import sys
-
-# from current dir
-from receive_path import receive_path
-from pick_bitrate2 import pick_rx_bitrate
-
-try:
- from gnuradio.qtgui import qtgui
- from PyQt4 import QtGui, QtCore
- import sip
-except ImportError:
- print "Please install gr-qtgui."
- sys.exit(1)
-
-try:
- from qt_rx_window2 import Ui_DigitalWindow
-except ImportError:
- print "Error: could not find qt_rx_window2.py:"
- print "\tYou must first build this from qt_rx_window2.ui with the following command:"
- print "\t\"pyuic4 qt_rx_window2.ui -o qt_rx_window2.py\""
- sys.exit(1)
-
-#import os
-#print os.getpid()
-#raw_input('Attach and press enter: ')
-
-# ////////////////////////////////////////////////////////////////////
-# Define the QT Interface and Control Dialog
-# ////////////////////////////////////////////////////////////////////
-
-
-class dialog_box(QtGui.QMainWindow):
- def __init__(self, snkRxIn, snkRx, fg, parent=None):
-
- QtGui.QWidget.__init__(self, parent)
- self.gui = Ui_DigitalWindow()
- self.gui.setupUi(self)
-
- self.fg = fg
-
- self.set_frequency(self.fg.frequency())
- self.set_gain(self.fg.gain())
- self.set_decim(self.fg.decim())
- self.set_gain_clock(self.fg.rx_gain_clock())
- self.set_gain_phase(self.fg.rx_gain_phase())
- self.set_gain_freq(self.fg.rx_gain_freq())
-
- # Add the qtsnk widgets to the hlayout box
- self.gui.sinkLayout.addWidget(snkRxIn)
- self.gui.sinkLayout.addWidget(snkRx)
-
-
- # Connect up some signals
- self.connect(self.gui.freqEdit, QtCore.SIGNAL("editingFinished()"),
- self.freqEditText)
- self.connect(self.gui.gainEdit, QtCore.SIGNAL("editingFinished()"),
- self.gainEditText)
- self.connect(self.gui.decimEdit, QtCore.SIGNAL("editingFinished()"),
- self.decimEditText)
- self.connect(self.gui.gainClockEdit, QtCore.SIGNAL("editingFinished()"),
- self.gainClockEditText)
- self.connect(self.gui.gainPhaseEdit, QtCore.SIGNAL("editingFinished()"),
- self.gainPhaseEditText)
- self.connect(self.gui.gainFreqEdit, QtCore.SIGNAL("editingFinished()"),
- self.gainFreqEditText)
-
- # Build a timer to update the packet number and PER fields
- self.update_delay = 250 # time between updating packet rate fields
- self.pkt_timer = QtCore.QTimer(self)
- self.connect(self.pkt_timer, QtCore.SIGNAL("timeout()"),
- self.updatePacketInfo)
- self.pkt_timer.start(self.update_delay)
-
-
- # Accessor functions for Gui to manipulate receiver parameters
- def set_frequency(self, fo):
- self.gui.freqEdit.setText(QtCore.QString("%1").arg(fo))
-
- def set_gain(self, gain):
- self.gui.gainEdit.setText(QtCore.QString("%1").arg(gain))
-
- def set_decim(self, decim):
- self.gui.decimEdit.setText(QtCore.QString("%1").arg(decim))
-
- def set_gain_clock(self, gain):
- self.gui.gainClockEdit.setText(QtCore.QString("%1").arg(gain))
-
- def set_gain_phase(self, gain_phase):
- self.gui.gainPhaseEdit.setText(QtCore.QString("%1").arg(gain_phase))
-
- def set_gain_freq(self, gain_freq):
- self.gui.gainFreqEdit.setText(QtCore.QString("%1").arg(gain_freq))
-
- def freqEditText(self):
- try:
- freq = self.gui.freqEdit.text().toDouble()[0]
- self.fg.set_freq(freq)
- except RuntimeError:
- pass
-
- def gainEditText(self):
- try:
- gain = self.gui.gainEdit.text().toDouble()[0]
- self.fg.set_gain(gain)
- except RuntimeError:
- pass
-
- def decimEditText(self):
- try:
- decim = self.gui.decimEdit.text().toInt()[0]
- self.fg.set_decim(decim)
- except RuntimeError:
- pass
-
- def gainPhaseEditText(self):
- try:
- gain_phase = self.gui.gainPhaseEdit.text().toDouble()[0]
- self.fg.set_rx_gain_phase(gain_phase)
- except RuntimeError:
- pass
-
- def gainClockEditText(self):
- try:
- gain = self.gui.gainClockEdit.text().toDouble()[0]
- self.fg.set_rx_gain_clock(gain)
- except RuntimeError:
- pass
-
- def gainFreqEditText(self):
- try:
- gain = self.gui.gainFreqEdit.text().toDouble()[0]
- self.fg.set_rx_gain_freq(gain)
- except RuntimeError:
- pass
-
-
- # Accessor function for packet error reporting
- def updatePacketInfo(self):
- # Pull these globals in from the main thread
- global n_rcvd, n_right, pktno
-
- per = float(n_rcvd - n_right)/float(pktno)
- self.gui.pktsRcvdEdit.setText(QtCore.QString("%1").arg(n_rcvd))
- self.gui.pktsCorrectEdit.setText(QtCore.QString("%1").arg(n_right))
- self.gui.perEdit.setText(QtCore.QString("%1").arg(per, 0, 'e', 4))
-
-
-
-# ////////////////////////////////////////////////////////////////////
-# Define the GNU Radio Top Block
-# ////////////////////////////////////////////////////////////////////
-
-
-class my_top_block(gr.top_block):
- def __init__(self, demodulator, rx_callback, options):
- gr.top_block.__init__(self)
-
- self._rx_freq = options.rx_freq # receiver's center frequency
- self._rx_gain = options.rx_gain # receiver's gain
- self._rx_subdev_spec = options.rx_subdev_spec # daughterboard to use
- self._decim = options.decim # Decimating rate for the USRP (prelim)
- self._bitrate = options.bitrate
- self._samples_per_symbol = options.samples_per_symbol
- self._demod_class = demodulator
- self.gui_on = options.gui
-
- if self._rx_freq is None:
- sys.stderr.write("-f FREQ or --freq FREQ or --rx-freq FREQ must be specified\n")
- raise SystemExit
-
- # Set up USRP source
- self._setup_usrp_source(options)
-
- # copy the final answers back into options for use by demodulator
- options.samples_per_symbol = self._samples_per_symbol
- options.bitrate = self._bitrate
- options.decim = self._decim
-
- ok = self.set_freq(self._rx_freq)
- if not ok:
- print "Failed to set Rx frequency to %s" % (eng_notation.num_to_str(self._rx_freq))
- raise ValueError, eng_notation.num_to_str(self._rx_freq)
-
- self.set_gain(options.rx_gain)
-
- # Set up receive path
- self.rxpath = receive_path(demodulator, rx_callback, options)
-
- # FIXME: do better exposure to lower issues for control
- self._gain_clock = self.rxpath.packet_receiver._demodulator._timing_alpha
- self._gain_phase = self.rxpath.packet_receiver._demodulator._phase_alpha
- self._gain_freq = self.rxpath.packet_receiver._demodulator._freq_alpha
-
- self.connect(self.u, self.rxpath)
-
- if self.gui_on:
- self.qapp = QtGui.QApplication(sys.argv)
- fftsize = 2048
-
- bw_in = self.u.adc_rate() / self.decim()
- self.snk_rxin = qtgui.sink_c(fftsize, gr.firdes.WIN_BLACKMAN_hARRIS,
- self._rx_freq, bw_in,
- "Received", True, True, False, True, True, False)
- self.snk_rx = qtgui.sink_c(fftsize, gr.firdes.WIN_BLACKMAN_hARRIS,
- 0, self._bitrate,
- "Post-Synchronizer", True, True, False, True, True, False)
-
- self.snk_rxin.set_frequency_axis(-140, 20)
- self.snk_rx.set_frequency_axis(-80, 20)
- self.snk_rxin.set_time_domain_axis(-2000,2000)
-
- # Connect to the QT sinks
- # FIXME: make better exposure to receiver from rxpath
- self.receiver = self.rxpath.packet_receiver._demodulator.phase_recov
- #self.receiver = self.rxpath.packet_receiver._demodulator.freq_recov
- self.connect(self.u, self.snk_rxin)
- self.connect(self.receiver, self.snk_rx)
-
- pyRxInQt = self.snk_rxin.pyqwidget()
- pyRxIn = sip.wrapinstance(pyRxInQt, QtGui.QWidget)
-
- pyRxQt = self.snk_rx.pyqwidget()
- pyRx = sip.wrapinstance(pyRxQt, QtGui.QWidget)
-
- self.snk_freq = qtgui.sink_f(fftsize, gr.firdes.WIN_BLACKMAN_hARRIS,
- 0, self._bitrate,
- "FLL", True, False, False, True, False, False)
-
- self.main_box = dialog_box(pyRxIn, pyRx, self)
- self.main_box.show()
-
- def _setup_usrp_source(self, options):
- self.u = usrp_options.create_usrp_source(options)
- adc_rate = self.u.adc_rate()
-
- self.u.set_decim(self._decim)
-
- (self._bitrate, self._samples_per_symbol, self._decim) = \
- pick_rx_bitrate(options.bitrate, self._demod_class.bits_per_symbol(), \
- options.samples_per_symbol, options.decim, \
- adc_rate, self.u.get_decim_rates())
-
- self.u.set_decim(self._decim)
- self.set_auto_tr(True) # enable Auto Transmit/Receive switching
-
- def set_freq(self, target_freq):
- """
- Set the center frequency we're interested in.
-
- @param target_freq: frequency in Hz
- @rypte: bool
-
- Tuning is a two step process. First we ask the front-end to
- tune as close to the desired frequency as it can. Then we use
- the result of that operation and our target_frequency to
- determine the value for the digital up converter.
- """
- return self.u.set_center_freq(target_freq)
-
- def set_gain(self, gain):
- """
- Sets the analog gain in the USRP
- """
- if gain is None:
- r = self.u.gain_range()
- gain = (r[0] + r[1])/2 # set gain to midpoint
- self._rx_gain = gain
- ret = self.u.set_gain(self._rx_gain)
- return ret
-
- def set_auto_tr(self, enable):
- return self.u.set_auto_tr(enable)
-
- def set_decim(self, decim):
- self._decim = decim
- self.u.set_decim(self._decim)
-
- if(self.gui_on):
- bw_in = self.u.adc_rate() / self._decim
- self._bitrate = bw_in / self._samples_per_symbol
- self.snk_rxin.set_frequency_range(0, bw_in)
- self.snk_rx.set_frequency_range(0, self._bitrate)
-
- def frequency(self):
- return self._rx_freq
-
- def gain(self):
- return self._rx_gain
-
- def decim(self):
- return self._decim
-
- def rx_gain_clock(self):
- return self._gain_clock
-
- def rx_gain_clock_beta(self):
- return self._gain_clock_beta
-
- def set_rx_gain_clock(self, gain):
- self._gain_clock = gain
- self._gain_clock_beta = .25 * self._gain_clock * self._gain_clock
- self.rxpath.packet_receiver._demodulator.time_recov.set_alpha(self._gain_clock)
- self.rxpath.packet_receiver._demodulator.time_recov.set_beta(self._gain_clock_beta)
-
- def rx_gain_phase(self):
- return self._gain_phase
-
- def rx_gain_phase_beta(self):
- return self._gain_phase_beta
-
- def set_rx_gain_phase(self, gain_phase):
- self._gain_phase = gain_phase
- self._gain_phase_beta = .25 * self._gain_phase * self._gain_phase
- self.rxpath.packet_receiver._demodulator.phase_recov.set_alpha(self._gain_phase)
- self.rxpath.packet_receiver._demodulator.phase_recov.set_beta(self._gain_phase_beta)
-
-
- def rx_gain_freq(self):
- return self._gain_freq
-
- def set_rx_gain_freq(self, gain_freq):
- self._gain_freq = gain_freq
- #self._gain_freq_beta = .25 * self._gain_freq * self._gain_freq
- self.rxpath.packet_receiver._demodulator.freq_recov.set_alpha(self._gain_freq)
- self.rxpath.packet_receiver._demodulator.freq_recov.set_beta(self._gain_freq/10.0)
- #self.rxpath.packet_receiver._demodulator.freq_recov.set_beta(self._gain_fre_beta)
-
-
- def add_options(normal, expert):
- """
- Adds usrp-specific options to the Options Parser
- """
- add_freq_option(normal)
- normal.add_option("-R", "--rx-subdev-spec", type="subdev", default=None,
- help="select USRP Rx side A or B")
- normal.add_option("", "--rx-gain", type="eng_float", default=None, metavar="GAIN",
- help="set receiver gain in dB [default=midpoint]. See also --show-rx-gain-range")
- normal.add_option("", "--show-rx-gain-range", action="store_true", default=False,
- help="print min and max Rx gain available on selected daughterboard")
- normal.add_option("-v", "--verbose", action="store_true", default=False)
- normal.add_option("-G", "--gui", action="store_true", default=False,
- help="Turn on the GUI [default=%default]")
-
- expert.add_option("", "--rx-freq", type="eng_float", default=None,
- help="set Rx frequency to FREQ [default=%default]", metavar="FREQ")
- expert.add_option("-d", "--decim", type="intx", default=128,
- help="set fpga decimation rate to DECIM [default=%default]")
- expert.add_option("", "--snr", type="eng_float", default=30,
- help="set the SNR of the channel in dB [default=%default]")
-
-
- # Make a static method to call before instantiation
- add_options = staticmethod(add_options)
-
-
-def add_freq_option(parser):
- """
- Hackery that has the -f / --freq option set both tx_freq and rx_freq
- """
- def freq_callback(option, opt_str, value, parser):
- parser.values.rx_freq = value
- parser.values.tx_freq = value
-
- if not parser.has_option('--freq'):
- parser.add_option('-f', '--freq', type="eng_float",
- action="callback", callback=freq_callback,
- help="set Tx and/or Rx frequency to FREQ [default=%default]",
- metavar="FREQ")
-
-
-# /////////////////////////////////////////////////////////////////////////////
-# main
-# /////////////////////////////////////////////////////////////////////////////
-
-global n_rcvd, n_right
-
-def main():
- global n_rcvd, n_right, pktno
-
- n_rcvd = 0
- n_right = 0
- pktno = 1
-
- def rx_callback(ok, payload):
- global n_rcvd, n_right, pktno
- (pktno,) = struct.unpack('!H', payload[0:2])
- n_rcvd += 1
- if ok:
- n_right += 1
-
- if not options.gui:
- print "ok = %5s pktno = %4d n_rcvd = %4d n_right = %4d" % (
- ok, pktno, n_rcvd, n_right)
-
-
- demods = modulation_utils2.type_1_demods()
-
- # Create Options Parser:
- parser = OptionParser (option_class=eng_option, conflict_handler="resolve")
- expert_grp = parser.add_option_group("Expert")
-
- parser.add_option("-m", "--modulation", type="choice", choices=demods.keys(),
- default='dbpsk2',
- help="Select modulation from: %s [default=%%default]"
- % (', '.join(demods.keys()),))
-
- my_top_block.add_options(parser, expert_grp)
- receive_path.add_options(parser, expert_grp)
- usrp_options.add_rx_options(parser)
-
- for mod in demods.values():
- mod.add_options(expert_grp)
-
- (options, args) = parser.parse_args ()
-
- if len(args) != 0:
- parser.print_help(sys.stderr)
- sys.exit(1)
-
- if options.rx_freq is None:
- sys.stderr.write("You must specify -f FREQ or --freq FREQ\n")
- parser.print_help(sys.stderr)
- sys.exit(1)
-
-
- # build the graph
- tb = my_top_block(demods[options.modulation], rx_callback, options)
-
- r = gr.enable_realtime_scheduling()
- if r != gr.RT_OK:
- print "Warning: Failed to enable realtime scheduling."
-
- tb.start() # start flow graph
-
- if(options.gui):
- tb.qapp.exec_()
- else:
- tb.wait() # wait for it to finish
-
-if __name__ == '__main__':
- try:
- main()
- except KeyboardInterrupt:
- pass
diff --git a/gnuradio-examples/python/digital/benchmark_rx.py b/gnuradio-examples/python/digital/benchmark_rx.py
deleted file mode 100755
index ccb0c8963..000000000
--- a/gnuradio-examples/python/digital/benchmark_rx.py
+++ /dev/null
@@ -1,114 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2005,2006,2007,2009 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, modulation_utils
-from gnuradio import usrp
-from gnuradio import eng_notation
-from gnuradio.eng_option import eng_option
-from optparse import OptionParser
-
-import random
-import struct
-import sys
-
-# from current dir
-import usrp_receive_path
-
-#import os
-#print os.getpid()
-#raw_input('Attach and press enter: ')
-
-class my_top_block(gr.top_block):
- def __init__(self, demodulator, rx_callback, options):
- gr.top_block.__init__(self)
-
- # Set up receive path
- self.rxpath = usrp_receive_path.usrp_receive_path(demodulator, rx_callback, options)
-
- self.connect(self.rxpath)
-
-# /////////////////////////////////////////////////////////////////////////////
-# main
-# /////////////////////////////////////////////////////////////////////////////
-
-global n_rcvd, n_right
-
-def main():
- global n_rcvd, n_right
-
- n_rcvd = 0
- n_right = 0
-
- def rx_callback(ok, payload):
- global n_rcvd, n_right
- (pktno,) = struct.unpack('!H', payload[0:2])
- n_rcvd += 1
- if ok:
- n_right += 1
-
- print "ok = %5s pktno = %4d n_rcvd = %4d n_right = %4d" % (
- ok, pktno, n_rcvd, n_right)
-
-
- demods = modulation_utils.type_1_demods()
-
- # Create Options Parser:
- parser = OptionParser (option_class=eng_option, conflict_handler="resolve")
- expert_grp = parser.add_option_group("Expert")
-
- parser.add_option("-m", "--modulation", type="choice", choices=demods.keys(),
- default='gmsk',
- help="Select modulation from: %s [default=%%default]"
- % (', '.join(demods.keys()),))
-
- usrp_receive_path.add_options(parser, expert_grp)
-
- for mod in demods.values():
- mod.add_options(expert_grp)
-
- (options, args) = parser.parse_args ()
-
- if len(args) != 0:
- parser.print_help(sys.stderr)
- sys.exit(1)
-
- if options.rx_freq is None:
- sys.stderr.write("You must specify -f FREQ or --freq FREQ\n")
- parser.print_help(sys.stderr)
- sys.exit(1)
-
-
- # build the graph
- tb = my_top_block(demods[options.modulation], rx_callback, options)
-
- r = gr.enable_realtime_scheduling()
- if r != gr.RT_OK:
- print "Warning: Failed to enable realtime scheduling."
-
- tb.start() # start flow graph
- tb.wait() # wait for it to finish
-
-if __name__ == '__main__':
- try:
- main()
- except KeyboardInterrupt:
- pass
diff --git a/gnuradio-examples/python/digital/benchmark_rx2.py b/gnuradio-examples/python/digital/benchmark_rx2.py
deleted file mode 100755
index fe422be83..000000000
--- a/gnuradio-examples/python/digital/benchmark_rx2.py
+++ /dev/null
@@ -1,114 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2010 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, modulation_utils2
-from gnuradio import usrp
-from gnuradio import eng_notation
-from gnuradio.eng_option import eng_option
-from optparse import OptionParser
-
-import random
-import struct
-import sys
-
-# from current dir
-import usrp_receive_path2
-
-#import os
-#print os.getpid()
-#raw_input('Attach and press enter: ')
-
-class my_top_block(gr.top_block):
- def __init__(self, demodulator, rx_callback, options):
- gr.top_block.__init__(self)
-
- # Set up receive path
- self.rxpath = usrp_receive_path2.usrp_receive_path(demodulator, rx_callback, options)
-
- self.connect(self.rxpath)
-
-# /////////////////////////////////////////////////////////////////////////////
-# main
-# /////////////////////////////////////////////////////////////////////////////
-
-global n_rcvd, n_right
-
-def main():
- global n_rcvd, n_right
-
- n_rcvd = 0
- n_right = 0
-
- def rx_callback(ok, payload):
- global n_rcvd, n_right
- (pktno,) = struct.unpack('!H', payload[0:2])
- n_rcvd += 1
- if ok:
- n_right += 1
-
- print "ok = %5s pktno = %4d n_rcvd = %4d n_right = %4d" % (
- ok, pktno, n_rcvd, n_right)
-
-
- demods = modulation_utils2.type_1_demods()
-
- # Create Options Parser:
- parser = OptionParser (option_class=eng_option, conflict_handler="resolve")
- expert_grp = parser.add_option_group("Expert")
-
- parser.add_option("-m", "--modulation", type="choice", choices=demods.keys(),
- default='dbpsk2',
- help="Select modulation from: %s [default=%%default]"
- % (', '.join(demods.keys()),))
-
- usrp_receive_path2.add_options(parser, expert_grp)
-
- for mod in demods.values():
- mod.add_options(expert_grp)
-
- (options, args) = parser.parse_args ()
-
- if len(args) != 0:
- parser.print_help(sys.stderr)
- sys.exit(1)
-
- if options.rx_freq is None:
- sys.stderr.write("You must specify -f FREQ or --freq FREQ\n")
- parser.print_help(sys.stderr)
- sys.exit(1)
-
-
- # build the graph
- tb = my_top_block(demods[options.modulation], rx_callback, options)
-
- r = gr.enable_realtime_scheduling()
- if r != gr.RT_OK:
- print "Warning: Failed to enable realtime scheduling."
-
- tb.start() # start flow graph
- tb.wait() # wait for it to finish
-
-if __name__ == '__main__':
- try:
- main()
- except KeyboardInterrupt:
- pass
diff --git a/gnuradio-examples/python/digital/benchmark_tx.py b/gnuradio-examples/python/digital/benchmark_tx.py
deleted file mode 100755
index 73c4a3901..000000000
--- a/gnuradio-examples/python/digital/benchmark_tx.py
+++ /dev/null
@@ -1,135 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2005,2006,2007,2009 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, modulation_utils
-from gnuradio import usrp
-from gnuradio import eng_notation
-from gnuradio.eng_option import eng_option
-from optparse import OptionParser
-
-import random, time, struct, sys
-
-# from current dir
-import usrp_transmit_path
-
-#import os
-#print os.getpid()
-#raw_input('Attach and press enter')
-
-class my_top_block(gr.top_block):
- def __init__(self, modulator, options):
- gr.top_block.__init__(self)
-
- self.txpath = usrp_transmit_path.usrp_transmit_path(modulator, options)
-
- self.connect(self.txpath)
-
-# /////////////////////////////////////////////////////////////////////////////
-# main
-# /////////////////////////////////////////////////////////////////////////////
-
-def main():
-
- def send_pkt(payload='', eof=False):
- return tb.txpath.send_pkt(payload, eof)
-
- def rx_callback(ok, payload):
- print "ok = %r, payload = '%s'" % (ok, payload)
-
- mods = modulation_utils.type_1_mods()
-
- parser = OptionParser(option_class=eng_option, conflict_handler="resolve")
- expert_grp = parser.add_option_group("Expert")
-
- parser.add_option("-m", "--modulation", type="choice", choices=mods.keys(),
- default='gmsk',
- help="Select modulation from: %s [default=%%default]"
- % (', '.join(mods.keys()),))
-
- parser.add_option("-s", "--size", type="eng_float", default=1500,
- help="set packet size [default=%default]")
- parser.add_option("-M", "--megabytes", type="eng_float", default=1.0,
- help="set megabytes to transmit [default=%default]")
- parser.add_option("","--discontinuous", action="store_true", default=False,
- help="enable discontinous transmission (bursts of 5 packets)")
- parser.add_option("","--from-file", default=None,
- help="use file for packet contents")
-
- usrp_transmit_path.add_options(parser, expert_grp)
-
- for mod in mods.values():
- mod.add_options(expert_grp)
-
- (options, args) = parser.parse_args ()
-
- if len(args) != 0:
- parser.print_help()
- sys.exit(1)
-
- if options.tx_freq is None:
- sys.stderr.write("You must specify -f FREQ or --freq FREQ\n")
- parser.print_help(sys.stderr)
- sys.exit(1)
-
- if options.from_file is not None:
- source_file = open(options.from_file, 'r')
-
- # build the graph
- tb = my_top_block(mods[options.modulation], options)
-
- r = gr.enable_realtime_scheduling()
- if r != gr.RT_OK:
- print "Warning: failed to enable realtime scheduling"
-
- tb.start() # start flow graph
-
- # generate and send packets
- nbytes = int(1e6 * options.megabytes)
- n = 0
- pktno = 0
- pkt_size = int(options.size)
-
- while n < nbytes:
- if options.from_file is None:
- data = (pkt_size - 2) * chr(pktno & 0xff)
- else:
- data = source_file.read(pkt_size - 2)
- if data == '':
- break;
-
- payload = struct.pack('!H', pktno & 0xffff) + data
- send_pkt(payload)
- n += len(payload)
- sys.stderr.write('.')
- if options.discontinuous and pktno % 5 == 4:
- time.sleep(1)
- pktno += 1
-
- send_pkt(eof=True)
-
- tb.wait() # wait for it to finish
-
-if __name__ == '__main__':
- try:
- main()
- except KeyboardInterrupt:
- pass
diff --git a/gnuradio-examples/python/digital/benchmark_tx2.py b/gnuradio-examples/python/digital/benchmark_tx2.py
deleted file mode 100755
index 6093dba61..000000000
--- a/gnuradio-examples/python/digital/benchmark_tx2.py
+++ /dev/null
@@ -1,135 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2010 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, modulation_utils2
-from gnuradio import usrp
-from gnuradio import eng_notation
-from gnuradio.eng_option import eng_option
-from optparse import OptionParser
-
-import random, time, struct, sys
-
-# from current dir
-import usrp_transmit_path2
-
-#import os
-#print os.getpid()
-#raw_input('Attach and press enter')
-
-class my_top_block(gr.top_block):
- def __init__(self, modulator, options):
- gr.top_block.__init__(self)
-
- self.txpath = usrp_transmit_path2.usrp_transmit_path(modulator, options)
-
- self.connect(self.txpath)
-
-# /////////////////////////////////////////////////////////////////////////////
-# main
-# /////////////////////////////////////////////////////////////////////////////
-
-def main():
-
- def send_pkt(payload='', eof=False):
- return tb.txpath.send_pkt(payload, eof)
-
- def rx_callback(ok, payload):
- print "ok = %r, payload = '%s'" % (ok, payload)
-
- mods = modulation_utils2.type_1_mods()
-
- parser = OptionParser(option_class=eng_option, conflict_handler="resolve")
- expert_grp = parser.add_option_group("Expert")
-
- parser.add_option("-m", "--modulation", type="choice", choices=mods.keys(),
- default='dbpsk2',
- help="Select modulation from: %s [default=%%default]"
- % (', '.join(mods.keys()),))
-
- parser.add_option("-s", "--size", type="eng_float", default=1500,
- help="set packet size [default=%default]")
- parser.add_option("-M", "--megabytes", type="eng_float", default=1.0,
- help="set megabytes to transmit [default=%default]")
- parser.add_option("","--discontinuous", action="store_true", default=False,
- help="enable discontinous transmission (bursts of 5 packets)")
- parser.add_option("","--from-file", default=None,
- help="use file for packet contents")
-
- usrp_transmit_path2.add_options(parser, expert_grp)
-
- for mod in mods.values():
- mod.add_options(expert_grp)
-
- (options, args) = parser.parse_args ()
-
- if len(args) != 0:
- parser.print_help()
- sys.exit(1)
-
- if options.tx_freq is None:
- sys.stderr.write("You must specify -f FREQ or --freq FREQ\n")
- parser.print_help(sys.stderr)
- sys.exit(1)
-
- if options.from_file is not None:
- source_file = open(options.from_file, 'r')
-
- # build the graph
- tb = my_top_block(mods[options.modulation], options)
-
- r = gr.enable_realtime_scheduling()
- if r != gr.RT_OK:
- print "Warning: failed to enable realtime scheduling"
-
- tb.start() # start flow graph
-
- # generate and send packets
- nbytes = int(1e6 * options.megabytes)
- n = 0
- pktno = 0
- pkt_size = int(options.size)
-
- while n < nbytes:
- if options.from_file is None:
- data = (pkt_size - 2) * chr(pktno & 0xff)
- else:
- data = source_file.read(pkt_size - 2)
- if data == '':
- break;
-
- payload = struct.pack('!H', pktno & 0xffff) + data
- send_pkt(payload)
- n += len(payload)
- sys.stderr.write('.')
- if options.discontinuous and pktno % 5 == 4:
- time.sleep(1)
- pktno += 1
-
- send_pkt(eof=True)
-
- tb.wait() # wait for it to finish
-
-if __name__ == '__main__':
- try:
- main()
- except KeyboardInterrupt:
- pass
diff --git a/gnuradio-examples/python/digital/pick_bitrate.py b/gnuradio-examples/python/digital/pick_bitrate.py
deleted file mode 100644
index ce1e021c5..000000000
--- a/gnuradio-examples/python/digital/pick_bitrate.py
+++ /dev/null
@@ -1,153 +0,0 @@
-#
-# Copyright 2005,2006 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 eng_notation
-
-_default_bitrate = 500e3
-
-_valid_samples_per_symbol = (2,3,4,5,6,7)
-
-def _gen_tx_info(converter_rate, xrates):
- results = []
- for samples_per_symbol in _valid_samples_per_symbol:
- for interp in xrates:
- bitrate = converter_rate / interp / samples_per_symbol
- results.append((bitrate, samples_per_symbol, interp))
- results.sort()
- return results
-
-def _gen_rx_info(converter_rate, xrates):
- results = []
- for samples_per_symbol in _valid_samples_per_symbol:
- for decim in xrates:
- bitrate = converter_rate / decim / samples_per_symbol
- results.append((bitrate, samples_per_symbol, decim))
- results.sort()
- return results
-
-def _filter_info(info, samples_per_symbol, xrate):
- if samples_per_symbol is not None:
- info = [x for x in info if x[1] == samples_per_symbol]
- if xrate is not None:
- info = [x for x in info if x[2] == xrate]
- return info
-
-def _pick_best(target_bitrate, bits_per_symbol, info):
- """
- @returns tuple (bitrate, samples_per_symbol, interp_rate_or_decim_rate)
- """
- if len(info) == 0:
- raise RuntimeError, "info is zero length!"
-
- if target_bitrate is None: # return the fastest one
- return info[-1]
-
- # convert bit rate to symbol rate
- target_symbolrate = target_bitrate / bits_per_symbol
-
- # Find the closest matching symbol rate.
- # In the event of a tie, the one with the lowest samples_per_symbol wins.
- # (We already sorted them, so the first one is the one we take)
-
- best = info[0]
- best_delta = abs(target_symbolrate - best[0])
- for x in info[1:]:
- delta = abs(target_symbolrate - x[0])
- if delta < best_delta:
- best_delta = delta
- best = x
-
- # convert symbol rate back to bit rate
- return ((best[0] * bits_per_symbol),) + best[1:]
-
-def _pick_bitrate(bitrate, bits_per_symbol, samples_per_symbol,
- xrate, converter_rate, xrates, gen_info):
- """
- @returns tuple (bitrate, samples_per_symbol, interp_rate_or_decim_rate)
- """
- if not isinstance(bits_per_symbol, int) or bits_per_symbol < 1:
- raise ValueError, "bits_per_symbol must be an int >= 1"
-
- if samples_per_symbol is not None and xrate is not None: # completely determined
- return (float(converter_rate) / xrate / samples_per_symbol,
- samples_per_symbol, xrate)
-
- if bitrate is None and samples_per_symbol is None and xrate is None:
- bitrate = _default_bitrate
-
- # now we have a target bitrate and possibly an xrate or
- # samples_per_symbol constraint, but not both of them.
-
- ret = _pick_best(bitrate, bits_per_symbol,
- _filter_info(gen_info(converter_rate, xrates), samples_per_symbol, xrate))
- print "Actual Bitrate:", eng_notation.num_to_str(ret[0])
- return ret
-
-# ---------------------------------------------------------------------------------------
-
-def pick_tx_bitrate(bitrate, bits_per_symbol, samples_per_symbol,
- interp_rate, converter_rate, possible_interps):
- """
- Given the 4 input parameters, return at configuration that matches
-
- @param bitrate: desired bitrate or None
- @type bitrate: number or None
- @param bits_per_symbol: E.g., BPSK -> 1, QPSK -> 2, 8-PSK -> 3
- @type bits_per_symbol: integer >= 1
- @param samples_per_symbol: samples/baud (aka samples/symbol)
- @type samples_per_symbol: number or None
- @param interp_rate: USRP interpolation factor
- @type interp_rate: integer or None
- @param converter_rate: converter sample rate in Hz
- @type converter_rate: number
- @param possible_interps: a list of possible rates
- @type possible_interps: a list of integers
-
- @returns tuple (bitrate, samples_per_symbol, interp_rate)
- """
- print "Requested TX Bitrate:", bitrate and eng_notation.num_to_str(bitrate) or 'Auto',
- return _pick_bitrate(bitrate, bits_per_symbol, samples_per_symbol,
- interp_rate, converter_rate, possible_interps, _gen_tx_info)
-
-
-def pick_rx_bitrate(bitrate, bits_per_symbol, samples_per_symbol,
- decim_rate, converter_rate, possible_decims):
- """
- Given the 4 input parameters, return at configuration that matches
-
- @param bitrate: desired bitrate or None
- @type bitrate: number or None
- @param bits_per_symbol: E.g., BPSK -> 1, QPSK -> 2, 8-PSK -> 3
- @type bits_per_symbol: integer >= 1
- @param samples_per_symbol: samples/baud (aka samples/symbol)
- @type samples_per_symbol: number or None
- @param decim_rate: USRP decimation factor
- @type decim_rate: integer or None
- @param converter_rate: converter sample rate in Hz
- @type converter_rate: number
- @param possible_decims: a list of possible rates
- @type possible_decims: a list of integers
-
- @returns tuple (bitrate, samples_per_symbol, decim_rate)
- """
- print "Requested RX Bitrate:", bitrate and eng_notation.num_to_str(bitrate) or 'Auto'
- return _pick_bitrate(bitrate, bits_per_symbol, samples_per_symbol,
- decim_rate, converter_rate, possible_decims, _gen_rx_info)
diff --git a/gnuradio-examples/python/digital/pick_bitrate2.py b/gnuradio-examples/python/digital/pick_bitrate2.py
deleted file mode 100644
index 92539560c..000000000
--- a/gnuradio-examples/python/digital/pick_bitrate2.py
+++ /dev/null
@@ -1,154 +0,0 @@
-#
-# Copyright 2010 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 eng_notation
-
-_default_bitrate = 500e3
-_sps_min = 2
-_sps_max = 100
-
-def _pick_bitrate(bitrate, bits_per_symbol, samples_per_symbol,
- xrate, converter_rate, xrates):
- """
- @returns tuple (bitrate, samples_per_symbol, interp_rate_or_decim_rate)
- """
-
- if not isinstance(bits_per_symbol, int) or bits_per_symbol < 1:
- raise ValueError, "bits_per_symbol must be an int >= 1"
-
- converter_rate = float(converter_rate)
- bits_per_symbol = float(bits_per_symbol)
-
- # completely determined; if bitrate is specified, this overwrites it
- if (samples_per_symbol is not None) and (xrate is not None):
- bitrate = converter_rate / bits_per_symbol / xrate / samples_per_symbol
-
- # If only SPS is given
- if (bitrate is None) and (samples_per_symbol is not None) and (xrate is None):
- xrate = max(xrates)
- bitrate = converter_rate / bits_per_symbol / xrate / samples_per_symbol
-
- # If only xrate is given, just set SPS to 2 and calculate bitrate
- if (bitrate is None) and (samples_per_symbol is None) and (xrate is not None):
- samples_per_symbol = 2.0
- bitrate = converter_rate / bits_per_symbol / xrate / samples_per_symbol
-
- # If no parameters are give, use the default bit rate
- if (bitrate is None) and (samples_per_symbol is None) and (xrate is None):
- bitrate = _default_bitrate
-
- # If only bitrate is specified, return max xrate and appropriate
- # samples per symbol (minimum of 2.0) to reach bit rate
- if (samples_per_symbol is None) and (xrate is None):
- xrates.sort()
- for i in xrange(len(xrates)):
- if((converter_rate / bits_per_symbol / xrates[i]) >= 2*bitrate):
- rate = xrates[i]
- else:
- break
-
- try:
- xrate = rate
- except UnboundLocalError:
- raise ValueError("Requested bitrate out of bounds")
-
- samples_per_symbol = converter_rate / bits_per_symbol / rate / bitrate
- bitrate = converter_rate / bits_per_symbol / xrate / samples_per_symbol
-
- # If bitrate and xrate are specified
- if(samples_per_symbol is None):
- samples_per_symbol = converter_rate / xrate / bits_per_symbol / bitrate
-
- # If bitrate and SPS are specified
- if(xrate is None):
- xrate = converter_rate / samples_per_symbol / bits_per_symbol / bitrate
- if((xrate in xrates) == False):
- # Find the closest avaiable rate larger than the calculated one
- xrates.sort()
- for x in xrates:
- if(x > xrate):
- xrate = x
- break
- if(xrate > max(xrates)):
- xrate = max(xrates)
-
- bitrate = converter_rate / bits_per_symbol / xrate / samples_per_symbol
- print "Could not find suitable rate for specified SPS and Bitrate"
- print "Using rate = %d for bitrate of %sbps" % \
- (xrate, (eng_notation.num_to_str(bitrate)))
-
- if((xrate in xrates) == False):
- raise ValueError(("Invalid rate (rate = %d)" % xrate))
- if((samples_per_symbol < _sps_min) or (samples_per_symbol > _sps_max)):
- raise ValueError(("Invalid samples per symbol (sps = %.2f). Must be in [%.0f, %.0f]." \
- % (samples_per_symbol, _sps_min, _sps_max)))
-
- return (bitrate, samples_per_symbol, int(xrate))
-
-
-def pick_tx_bitrate(bitrate, bits_per_symbol, samples_per_symbol,
- interp_rate, converter_rate, possible_interps):
- """
- Given the 4 input parameters, return at configuration that matches
-
- @param bitrate: desired bitrate or None
- @type bitrate: number or None
- @param bits_per_symbol: E.g., BPSK -> 1, QPSK -> 2, 8-PSK -> 3
- @type bits_per_symbol: integer >= 1
- @param samples_per_symbol: samples/baud (aka samples/symbol)
- @type samples_per_symbol: number or None
- @param interp_rate: USRP interpolation factor
- @type interp_rate: integer or None
- @param converter_rate: converter sample rate in Hz
- @type converter_rate: number
- @param possible_interps: a list of possible rates
- @type possible_interps: a list of integers
-
- @returns tuple (bitrate, samples_per_symbol, interp_rate)
- """
-
- return _pick_bitrate(bitrate, bits_per_symbol, samples_per_symbol,
- interp_rate, converter_rate, possible_interps)
-
-
-def pick_rx_bitrate(bitrate, bits_per_symbol, samples_per_symbol,
- decim_rate, converter_rate, possible_decims):
- """
- Given the 4 input parameters, return at configuration that matches
-
- @param bitrate: desired bitrate or None
- @type bitrate: number or None
- @param bits_per_symbol: E.g., BPSK -> 1, QPSK -> 2, 8-PSK -> 3
- @type bits_per_symbol: integer >= 1
- @param samples_per_symbol: samples/baud (aka samples/symbol)
- @type samples_per_symbol: number or None
- @param decim_rate: USRP decimation factor
- @type decim_rate: integer or None
- @param converter_rate: converter sample rate in Hz
- @type converter_rate: number
- @param possible_decims: a list of possible rates
- @type possible_decims: a list of integers
-
- @returns tuple (bitrate, samples_per_symbol, decim_rate)
- """
-
- return _pick_bitrate(bitrate, bits_per_symbol, samples_per_symbol,
- decim_rate, converter_rate, possible_decims)
diff --git a/gnuradio-examples/python/digital/qt_digital_window.py b/gnuradio-examples/python/digital/qt_digital_window.py
deleted file mode 100644
index b47ed0c2b..000000000
--- a/gnuradio-examples/python/digital/qt_digital_window.py
+++ /dev/null
@@ -1,239 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Form implementation generated from reading ui file 'qt_digital_window.ui'
-#
-# Created: Tue May 11 20:58:35 2010
-# by: PyQt4 UI code generator 4.6.1
-#
-# WARNING! All changes made in this file will be lost!
-
-from PyQt4 import QtCore, QtGui
-
-class Ui_DigitalWindow(object):
- def setupUi(self, DigitalWindow):
- DigitalWindow.setObjectName("DigitalWindow")
- DigitalWindow.resize(1059, 754)
- self.centralwidget = QtGui.QWidget(DigitalWindow)
- self.centralwidget.setObjectName("centralwidget")
- self.verticalLayout_4 = QtGui.QVBoxLayout(self.centralwidget)
- self.verticalLayout_4.setObjectName("verticalLayout_4")
- self.sinkLayout = QtGui.QHBoxLayout()
- self.sinkLayout.setObjectName("sinkLayout")
- self.verticalLayout_4.addLayout(self.sinkLayout)
- self.horizontalLayout = QtGui.QHBoxLayout()
- self.horizontalLayout.setObjectName("horizontalLayout")
- self.verticalLayout_2 = QtGui.QVBoxLayout()
- self.verticalLayout_2.setObjectName("verticalLayout_2")
- self.sysBox = QtGui.QGroupBox(self.centralwidget)
- sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
- sizePolicy.setHorizontalStretch(0)
- sizePolicy.setVerticalStretch(0)
- sizePolicy.setHeightForWidth(self.sysBox.sizePolicy().hasHeightForWidth())
- self.sysBox.setSizePolicy(sizePolicy)
- self.sysBox.setMinimumSize(QtCore.QSize(240, 60))
- self.sysBox.setMaximumSize(QtCore.QSize(240, 16777215))
- self.sysBox.setObjectName("sysBox")
- self.formLayoutWidget = QtGui.QWidget(self.sysBox)
- self.formLayoutWidget.setGeometry(QtCore.QRect(10, 20, 211, 31))
- self.formLayoutWidget.setObjectName("formLayoutWidget")
- self.formLayout = QtGui.QFormLayout(self.formLayoutWidget)
- self.formLayout.setSizeConstraint(QtGui.QLayout.SetFixedSize)
- self.formLayout.setVerticalSpacing(20)
- self.formLayout.setObjectName("formLayout")
- self.sampleRateEdit = QtGui.QLineEdit(self.formLayoutWidget)
- sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
- sizePolicy.setHorizontalStretch(0)
- sizePolicy.setVerticalStretch(0)
- sizePolicy.setHeightForWidth(self.sampleRateEdit.sizePolicy().hasHeightForWidth())
- self.sampleRateEdit.setSizePolicy(sizePolicy)
- self.sampleRateEdit.setMinimumSize(QtCore.QSize(60, 26))
- self.sampleRateEdit.setMaximumSize(QtCore.QSize(80, 26))
- self.sampleRateEdit.setObjectName("sampleRateEdit")
- self.formLayout.setWidget(0, QtGui.QFormLayout.FieldRole, self.sampleRateEdit)
- self.sampleRateLabel = QtGui.QLabel(self.formLayoutWidget)
- sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
- sizePolicy.setHorizontalStretch(0)
- sizePolicy.setVerticalStretch(0)
- sizePolicy.setHeightForWidth(self.sampleRateLabel.sizePolicy().hasHeightForWidth())
- self.sampleRateLabel.setSizePolicy(sizePolicy)
- self.sampleRateLabel.setMinimumSize(QtCore.QSize(0, 20))
- self.sampleRateLabel.setMaximumSize(QtCore.QSize(16777215, 20))
- self.sampleRateLabel.setObjectName("sampleRateLabel")
- self.formLayout.setWidget(0, QtGui.QFormLayout.LabelRole, self.sampleRateLabel)
- self.verticalLayout_2.addWidget(self.sysBox)
- spacerItem = QtGui.QSpacerItem(20, 60, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed)
- self.verticalLayout_2.addItem(spacerItem)
- self.horizontalLayout.addLayout(self.verticalLayout_2)
- self.channelModeBox = QtGui.QGroupBox(self.centralwidget)
- sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
- sizePolicy.setHorizontalStretch(0)
- sizePolicy.setVerticalStretch(0)
- sizePolicy.setHeightForWidth(self.channelModeBox.sizePolicy().hasHeightForWidth())
- self.channelModeBox.setSizePolicy(sizePolicy)
- self.channelModeBox.setMinimumSize(QtCore.QSize(245, 130))
- self.channelModeBox.setMaximumSize(QtCore.QSize(245, 16777215))
- self.channelModeBox.setObjectName("channelModeBox")
- self.formLayoutWidget_2 = QtGui.QWidget(self.channelModeBox)
- self.formLayoutWidget_2.setGeometry(QtCore.QRect(10, 20, 221, 98))
- self.formLayoutWidget_2.setObjectName("formLayoutWidget_2")
- self.formLayout_2 = QtGui.QFormLayout(self.formLayoutWidget_2)
- self.formLayout_2.setSizeConstraint(QtGui.QLayout.SetFixedSize)
- self.formLayout_2.setFieldGrowthPolicy(QtGui.QFormLayout.AllNonFixedFieldsGrow)
- self.formLayout_2.setObjectName("formLayout_2")
- self.snrLabel = QtGui.QLabel(self.formLayoutWidget_2)
- self.snrLabel.setObjectName("snrLabel")
- self.formLayout_2.setWidget(0, QtGui.QFormLayout.LabelRole, self.snrLabel)
- self.snrEdit = QtGui.QLineEdit(self.formLayoutWidget_2)
- self.snrEdit.setMinimumSize(QtCore.QSize(60, 0))
- self.snrEdit.setMaximumSize(QtCore.QSize(80, 16777215))
- self.snrEdit.setObjectName("snrEdit")
- self.formLayout_2.setWidget(0, QtGui.QFormLayout.FieldRole, self.snrEdit)
- self.freqLabel = QtGui.QLabel(self.formLayoutWidget_2)
- self.freqLabel.setObjectName("freqLabel")
- self.formLayout_2.setWidget(1, QtGui.QFormLayout.LabelRole, self.freqLabel)
- self.freqEdit = QtGui.QLineEdit(self.formLayoutWidget_2)
- self.freqEdit.setMinimumSize(QtCore.QSize(60, 0))
- self.freqEdit.setMaximumSize(QtCore.QSize(80, 16777215))
- self.freqEdit.setObjectName("freqEdit")
- self.formLayout_2.setWidget(1, QtGui.QFormLayout.FieldRole, self.freqEdit)
- self.timeLabel = QtGui.QLabel(self.formLayoutWidget_2)
- self.timeLabel.setObjectName("timeLabel")
- self.formLayout_2.setWidget(2, QtGui.QFormLayout.LabelRole, self.timeLabel)
- self.timeEdit = QtGui.QLineEdit(self.formLayoutWidget_2)
- self.timeEdit.setMinimumSize(QtCore.QSize(60, 0))
- self.timeEdit.setMaximumSize(QtCore.QSize(80, 16777215))
- self.timeEdit.setObjectName("timeEdit")
- self.formLayout_2.setWidget(2, QtGui.QFormLayout.FieldRole, self.timeEdit)
- self.horizontalLayout.addWidget(self.channelModeBox)
- self.rxBox = QtGui.QGroupBox(self.centralwidget)
- sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
- sizePolicy.setHorizontalStretch(0)
- sizePolicy.setVerticalStretch(0)
- sizePolicy.setHeightForWidth(self.rxBox.sizePolicy().hasHeightForWidth())
- self.rxBox.setSizePolicy(sizePolicy)
- self.rxBox.setMinimumSize(QtCore.QSize(220, 130))
- self.rxBox.setMaximumSize(QtCore.QSize(180, 16777215))
- self.rxBox.setObjectName("rxBox")
- self.formLayoutWidget_3 = QtGui.QWidget(self.rxBox)
- self.formLayoutWidget_3.setGeometry(QtCore.QRect(10, 20, 201, 101))
- self.formLayoutWidget_3.setObjectName("formLayoutWidget_3")
- self.formLayout_3 = QtGui.QFormLayout(self.formLayoutWidget_3)
- self.formLayout_3.setSizeConstraint(QtGui.QLayout.SetFixedSize)
- self.formLayout_3.setObjectName("formLayout_3")
- self.gainMuLabel = QtGui.QLabel(self.formLayoutWidget_3)
- self.gainMuLabel.setObjectName("gainMuLabel")
- self.formLayout_3.setWidget(0, QtGui.QFormLayout.LabelRole, self.gainMuLabel)
- self.alphaLabel = QtGui.QLabel(self.formLayoutWidget_3)
- self.alphaLabel.setObjectName("alphaLabel")
- self.formLayout_3.setWidget(1, QtGui.QFormLayout.LabelRole, self.alphaLabel)
- self.gainMuEdit = QtGui.QLineEdit(self.formLayoutWidget_3)
- self.gainMuEdit.setMinimumSize(QtCore.QSize(60, 0))
- self.gainMuEdit.setMaximumSize(QtCore.QSize(80, 16777215))
- self.gainMuEdit.setObjectName("gainMuEdit")
- self.formLayout_3.setWidget(0, QtGui.QFormLayout.FieldRole, self.gainMuEdit)
- self.alphaEdit = QtGui.QLineEdit(self.formLayoutWidget_3)
- self.alphaEdit.setMinimumSize(QtCore.QSize(60, 0))
- self.alphaEdit.setMaximumSize(QtCore.QSize(80, 16777215))
- self.alphaEdit.setObjectName("alphaEdit")
- self.formLayout_3.setWidget(1, QtGui.QFormLayout.FieldRole, self.alphaEdit)
- self.horizontalLayout.addWidget(self.rxBox)
- self.rxBox_2 = QtGui.QGroupBox(self.centralwidget)
- sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
- sizePolicy.setHorizontalStretch(0)
- sizePolicy.setVerticalStretch(0)
- sizePolicy.setHeightForWidth(self.rxBox_2.sizePolicy().hasHeightForWidth())
- self.rxBox_2.setSizePolicy(sizePolicy)
- self.rxBox_2.setMinimumSize(QtCore.QSize(220, 125))
- self.rxBox_2.setMaximumSize(QtCore.QSize(265, 125))
- self.rxBox_2.setObjectName("rxBox_2")
- self.formLayoutWidget_4 = QtGui.QWidget(self.rxBox_2)
- self.formLayoutWidget_4.setGeometry(QtCore.QRect(10, 20, 201, 91))
- self.formLayoutWidget_4.setObjectName("formLayoutWidget_4")
- self.formLayout_4 = QtGui.QFormLayout(self.formLayoutWidget_4)
- self.formLayout_4.setSizeConstraint(QtGui.QLayout.SetFixedSize)
- self.formLayout_4.setObjectName("formLayout_4")
- self.pktsRcvdLabel = QtGui.QLabel(self.formLayoutWidget_4)
- self.pktsRcvdLabel.setObjectName("pktsRcvdLabel")
- self.formLayout_4.setWidget(0, QtGui.QFormLayout.LabelRole, self.pktsRcvdLabel)
- self.pktsCorrectLabel = QtGui.QLabel(self.formLayoutWidget_4)
- self.pktsCorrectLabel.setObjectName("pktsCorrectLabel")
- self.formLayout_4.setWidget(1, QtGui.QFormLayout.LabelRole, self.pktsCorrectLabel)
- self.perLabel = QtGui.QLabel(self.formLayoutWidget_4)
- self.perLabel.setObjectName("perLabel")
- self.formLayout_4.setWidget(2, QtGui.QFormLayout.LabelRole, self.perLabel)
- self.pktsRcvdEdit = QtGui.QLineEdit(self.formLayoutWidget_4)
- self.pktsRcvdEdit.setMinimumSize(QtCore.QSize(60, 0))
- self.pktsRcvdEdit.setMaximumSize(QtCore.QSize(80, 16777215))
- self.pktsRcvdEdit.setObjectName("pktsRcvdEdit")
- self.formLayout_4.setWidget(0, QtGui.QFormLayout.FieldRole, self.pktsRcvdEdit)
- self.pktsCorrectEdit = QtGui.QLineEdit(self.formLayoutWidget_4)
- self.pktsCorrectEdit.setMinimumSize(QtCore.QSize(60, 0))
- self.pktsCorrectEdit.setMaximumSize(QtCore.QSize(80, 16777215))
- self.pktsCorrectEdit.setObjectName("pktsCorrectEdit")
- self.formLayout_4.setWidget(1, QtGui.QFormLayout.FieldRole, self.pktsCorrectEdit)
- self.perEdit = QtGui.QLineEdit(self.formLayoutWidget_4)
- self.perEdit.setMinimumSize(QtCore.QSize(60, 0))
- self.perEdit.setMaximumSize(QtCore.QSize(80, 16777215))
- self.perEdit.setObjectName("perEdit")
- self.formLayout_4.setWidget(2, QtGui.QFormLayout.FieldRole, self.perEdit)
- self.horizontalLayout.addWidget(self.rxBox_2)
- spacerItem1 = QtGui.QSpacerItem(20, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
- self.horizontalLayout.addItem(spacerItem1)
- self.verticalLayout = QtGui.QVBoxLayout()
- self.verticalLayout.setObjectName("verticalLayout")
- self.pauseButton = QtGui.QPushButton(self.centralwidget)
- self.pauseButton.setMinimumSize(QtCore.QSize(80, 0))
- self.pauseButton.setMaximumSize(QtCore.QSize(80, 16777215))
- self.pauseButton.setObjectName("pauseButton")
- self.verticalLayout.addWidget(self.pauseButton)
- spacerItem2 = QtGui.QSpacerItem(20, 60, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed)
- self.verticalLayout.addItem(spacerItem2)
- self.closeButton = QtGui.QPushButton(self.centralwidget)
- self.closeButton.setMinimumSize(QtCore.QSize(80, 0))
- self.closeButton.setMaximumSize(QtCore.QSize(80, 16777215))
- self.closeButton.setObjectName("closeButton")
- self.verticalLayout.addWidget(self.closeButton)
- self.horizontalLayout.addLayout(self.verticalLayout)
- self.verticalLayout_4.addLayout(self.horizontalLayout)
- DigitalWindow.setCentralWidget(self.centralwidget)
- self.menubar = QtGui.QMenuBar(DigitalWindow)
- self.menubar.setGeometry(QtCore.QRect(0, 0, 1059, 23))
- self.menubar.setObjectName("menubar")
- self.menuFile = QtGui.QMenu(self.menubar)
- self.menuFile.setObjectName("menuFile")
- DigitalWindow.setMenuBar(self.menubar)
- self.statusbar = QtGui.QStatusBar(DigitalWindow)
- self.statusbar.setObjectName("statusbar")
- DigitalWindow.setStatusBar(self.statusbar)
- self.actionExit = QtGui.QAction(DigitalWindow)
- self.actionExit.setObjectName("actionExit")
- self.menuFile.addAction(self.actionExit)
- self.menubar.addAction(self.menuFile.menuAction())
-
- self.retranslateUi(DigitalWindow)
- QtCore.QObject.connect(self.closeButton, QtCore.SIGNAL("clicked()"), DigitalWindow.close)
- QtCore.QObject.connect(self.actionExit, QtCore.SIGNAL("triggered()"), DigitalWindow.close)
- QtCore.QMetaObject.connectSlotsByName(DigitalWindow)
- DigitalWindow.setTabOrder(self.snrEdit, self.freqEdit)
- DigitalWindow.setTabOrder(self.freqEdit, self.timeEdit)
-
- def retranslateUi(self, DigitalWindow):
- DigitalWindow.setWindowTitle(QtGui.QApplication.translate("DigitalWindow", "MainWindow", None, QtGui.QApplication.UnicodeUTF8))
- self.sysBox.setTitle(QtGui.QApplication.translate("DigitalWindow", "System Parameters", None, QtGui.QApplication.UnicodeUTF8))
- self.sampleRateLabel.setText(QtGui.QApplication.translate("DigitalWindow", "Sample Rate (sps)", None, QtGui.QApplication.UnicodeUTF8))
- self.channelModeBox.setTitle(QtGui.QApplication.translate("DigitalWindow", "Channel Model Parameters", None, QtGui.QApplication.UnicodeUTF8))
- self.snrLabel.setText(QtGui.QApplication.translate("DigitalWindow", "SNR (dB)", None, QtGui.QApplication.UnicodeUTF8))
- self.freqLabel.setText(QtGui.QApplication.translate("DigitalWindow", "Frequency Offset (Hz)", None, QtGui.QApplication.UnicodeUTF8))
- self.timeLabel.setText(QtGui.QApplication.translate("DigitalWindow", "Timing Offset", None, QtGui.QApplication.UnicodeUTF8))
- self.rxBox.setTitle(QtGui.QApplication.translate("DigitalWindow", "Receiver Parameters", None, QtGui.QApplication.UnicodeUTF8))
- self.gainMuLabel.setText(QtGui.QApplication.translate("DigitalWindow", "Gain mu", None, QtGui.QApplication.UnicodeUTF8))
- self.alphaLabel.setText(QtGui.QApplication.translate("DigitalWindow", "Alpha", None, QtGui.QApplication.UnicodeUTF8))
- self.rxBox_2.setTitle(QtGui.QApplication.translate("DigitalWindow", "Received Packet Info", None, QtGui.QApplication.UnicodeUTF8))
- self.pktsRcvdLabel.setText(QtGui.QApplication.translate("DigitalWindow", "Packets Rcvd.", None, QtGui.QApplication.UnicodeUTF8))
- self.pktsCorrectLabel.setText(QtGui.QApplication.translate("DigitalWindow", "Packets Correct", None, QtGui.QApplication.UnicodeUTF8))
- self.perLabel.setText(QtGui.QApplication.translate("DigitalWindow", "PER", None, QtGui.QApplication.UnicodeUTF8))
- self.pauseButton.setText(QtGui.QApplication.translate("DigitalWindow", "Pause", None, QtGui.QApplication.UnicodeUTF8))
- self.closeButton.setText(QtGui.QApplication.translate("DigitalWindow", "Close", None, QtGui.QApplication.UnicodeUTF8))
- self.menuFile.setTitle(QtGui.QApplication.translate("DigitalWindow", "&File", None, QtGui.QApplication.UnicodeUTF8))
- self.actionExit.setText(QtGui.QApplication.translate("DigitalWindow", "E&xit", None, QtGui.QApplication.UnicodeUTF8))
-
diff --git a/gnuradio-examples/python/digital/qt_digital_window.ui b/gnuradio-examples/python/digital/qt_digital_window.ui
deleted file mode 100644
index 4b3857d87..000000000
--- a/gnuradio-examples/python/digital/qt_digital_window.ui
+++ /dev/null
@@ -1,581 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>DigitalWindow</class>
- <widget class="QMainWindow" name="DigitalWindow">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>1059</width>
- <height>754</height>
- </rect>
- </property>
- <property name="windowTitle">
- <string>MainWindow</string>
- </property>
- <widget class="QWidget" name="centralwidget">
- <layout class="QVBoxLayout" name="verticalLayout_4">
- <item>
- <layout class="QHBoxLayout" name="sinkLayout"/>
- </item>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout">
- <item>
- <layout class="QVBoxLayout" name="verticalLayout_2">
- <item>
- <widget class="QGroupBox" name="sysBox">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize">
- <size>
- <width>240</width>
- <height>60</height>
- </size>
- </property>
- <property name="maximumSize">
- <size>
- <width>240</width>
- <height>16777215</height>
- </size>
- </property>
- <property name="title">
- <string>System Parameters</string>
- </property>
- <widget class="QWidget" name="formLayoutWidget">
- <property name="geometry">
- <rect>
- <x>10</x>
- <y>20</y>
- <width>211</width>
- <height>31</height>
- </rect>
- </property>
- <layout class="QFormLayout" name="formLayout">
- <property name="sizeConstraint">
- <enum>QLayout::SetFixedSize</enum>
- </property>
- <property name="verticalSpacing">
- <number>20</number>
- </property>
- <item row="0" column="1">
- <widget class="QLineEdit" name="sampleRateEdit">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize">
- <size>
- <width>60</width>
- <height>26</height>
- </size>
- </property>
- <property name="maximumSize">
- <size>
- <width>80</width>
- <height>26</height>
- </size>
- </property>
- </widget>
- </item>
- <item row="0" column="0">
- <widget class="QLabel" name="sampleRateLabel">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize">
- <size>
- <width>0</width>
- <height>20</height>
- </size>
- </property>
- <property name="maximumSize">
- <size>
- <width>16777215</width>
- <height>20</height>
- </size>
- </property>
- <property name="text">
- <string>Sample Rate (sps)</string>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- </widget>
- </item>
- <item>
- <spacer name="verticalSpacer_2">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeType">
- <enum>QSizePolicy::Fixed</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>60</height>
- </size>
- </property>
- </spacer>
- </item>
- </layout>
- </item>
- <item>
- <widget class="QGroupBox" name="channelModeBox">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize">
- <size>
- <width>245</width>
- <height>130</height>
- </size>
- </property>
- <property name="maximumSize">
- <size>
- <width>245</width>
- <height>16777215</height>
- </size>
- </property>
- <property name="title">
- <string>Channel Model Parameters</string>
- </property>
- <widget class="QWidget" name="formLayoutWidget_2">
- <property name="geometry">
- <rect>
- <x>10</x>
- <y>20</y>
- <width>221</width>
- <height>98</height>
- </rect>
- </property>
- <layout class="QFormLayout" name="formLayout_2">
- <property name="sizeConstraint">
- <enum>QLayout::SetFixedSize</enum>
- </property>
- <property name="fieldGrowthPolicy">
- <enum>QFormLayout::AllNonFixedFieldsGrow</enum>
- </property>
- <item row="0" column="0">
- <widget class="QLabel" name="snrLabel">
- <property name="text">
- <string>SNR (dB)</string>
- </property>
- </widget>
- </item>
- <item row="0" column="1">
- <widget class="QLineEdit" name="snrEdit">
- <property name="minimumSize">
- <size>
- <width>60</width>
- <height>0</height>
- </size>
- </property>
- <property name="maximumSize">
- <size>
- <width>80</width>
- <height>16777215</height>
- </size>
- </property>
- </widget>
- </item>
- <item row="1" column="0">
- <widget class="QLabel" name="freqLabel">
- <property name="text">
- <string>Frequency Offset (Hz)</string>
- </property>
- </widget>
- </item>
- <item row="1" column="1">
- <widget class="QLineEdit" name="freqEdit">
- <property name="minimumSize">
- <size>
- <width>60</width>
- <height>0</height>
- </size>
- </property>
- <property name="maximumSize">
- <size>
- <width>80</width>
- <height>16777215</height>
- </size>
- </property>
- </widget>
- </item>
- <item row="2" column="0">
- <widget class="QLabel" name="timeLabel">
- <property name="text">
- <string>Timing Offset</string>
- </property>
- </widget>
- </item>
- <item row="2" column="1">
- <widget class="QLineEdit" name="timeEdit">
- <property name="minimumSize">
- <size>
- <width>60</width>
- <height>0</height>
- </size>
- </property>
- <property name="maximumSize">
- <size>
- <width>80</width>
- <height>16777215</height>
- </size>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- <zorder>formLayoutWidget_2</zorder>
- <zorder>sysBox</zorder>
- </widget>
- </item>
- <item>
- <widget class="QGroupBox" name="rxBox">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize">
- <size>
- <width>220</width>
- <height>130</height>
- </size>
- </property>
- <property name="maximumSize">
- <size>
- <width>180</width>
- <height>16777215</height>
- </size>
- </property>
- <property name="title">
- <string>Receiver Parameters</string>
- </property>
- <widget class="QWidget" name="formLayoutWidget_3">
- <property name="geometry">
- <rect>
- <x>10</x>
- <y>20</y>
- <width>201</width>
- <height>101</height>
- </rect>
- </property>
- <layout class="QFormLayout" name="formLayout_3">
- <property name="sizeConstraint">
- <enum>QLayout::SetFixedSize</enum>
- </property>
- <item row="0" column="0">
- <widget class="QLabel" name="gainMuLabel">
- <property name="text">
- <string>Gain mu</string>
- </property>
- </widget>
- </item>
- <item row="1" column="0">
- <widget class="QLabel" name="alphaLabel">
- <property name="text">
- <string>Alpha</string>
- </property>
- </widget>
- </item>
- <item row="0" column="1">
- <widget class="QLineEdit" name="gainMuEdit">
- <property name="minimumSize">
- <size>
- <width>60</width>
- <height>0</height>
- </size>
- </property>
- <property name="maximumSize">
- <size>
- <width>80</width>
- <height>16777215</height>
- </size>
- </property>
- </widget>
- </item>
- <item row="1" column="1">
- <widget class="QLineEdit" name="alphaEdit">
- <property name="minimumSize">
- <size>
- <width>60</width>
- <height>0</height>
- </size>
- </property>
- <property name="maximumSize">
- <size>
- <width>80</width>
- <height>16777215</height>
- </size>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- </widget>
- </item>
- <item>
- <widget class="QGroupBox" name="rxBox_2">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize">
- <size>
- <width>220</width>
- <height>125</height>
- </size>
- </property>
- <property name="maximumSize">
- <size>
- <width>265</width>
- <height>125</height>
- </size>
- </property>
- <property name="title">
- <string>Received Packet Info</string>
- </property>
- <widget class="QWidget" name="formLayoutWidget_4">
- <property name="geometry">
- <rect>
- <x>10</x>
- <y>20</y>
- <width>201</width>
- <height>91</height>
- </rect>
- </property>
- <layout class="QFormLayout" name="formLayout_4">
- <property name="sizeConstraint">
- <enum>QLayout::SetFixedSize</enum>
- </property>
- <item row="0" column="0">
- <widget class="QLabel" name="pktsRcvdLabel">
- <property name="text">
- <string>Packets Rcvd.</string>
- </property>
- </widget>
- </item>
- <item row="1" column="0">
- <widget class="QLabel" name="pktsCorrectLabel">
- <property name="text">
- <string>Packets Correct</string>
- </property>
- </widget>
- </item>
- <item row="2" column="0">
- <widget class="QLabel" name="perLabel">
- <property name="text">
- <string>PER</string>
- </property>
- </widget>
- </item>
- <item row="0" column="1">
- <widget class="QLineEdit" name="pktsRcvdEdit">
- <property name="minimumSize">
- <size>
- <width>60</width>
- <height>0</height>
- </size>
- </property>
- <property name="maximumSize">
- <size>
- <width>80</width>
- <height>16777215</height>
- </size>
- </property>
- </widget>
- </item>
- <item row="1" column="1">
- <widget class="QLineEdit" name="pktsCorrectEdit">
- <property name="minimumSize">
- <size>
- <width>60</width>
- <height>0</height>
- </size>
- </property>
- <property name="maximumSize">
- <size>
- <width>80</width>
- <height>16777215</height>
- </size>
- </property>
- </widget>
- </item>
- <item row="2" column="1">
- <widget class="QLineEdit" name="perEdit">
- <property name="minimumSize">
- <size>
- <width>60</width>
- <height>0</height>
- </size>
- </property>
- <property name="maximumSize">
- <size>
- <width>80</width>
- <height>16777215</height>
- </size>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- </widget>
- </item>
- <item>
- <spacer name="horizontalSpacer">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <layout class="QVBoxLayout" name="verticalLayout">
- <item>
- <widget class="QPushButton" name="pauseButton">
- <property name="minimumSize">
- <size>
- <width>80</width>
- <height>0</height>
- </size>
- </property>
- <property name="maximumSize">
- <size>
- <width>80</width>
- <height>16777215</height>
- </size>
- </property>
- <property name="text">
- <string>Pause</string>
- </property>
- </widget>
- </item>
- <item>
- <spacer name="verticalSpacer">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeType">
- <enum>QSizePolicy::Fixed</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>60</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="QPushButton" name="closeButton">
- <property name="minimumSize">
- <size>
- <width>80</width>
- <height>0</height>
- </size>
- </property>
- <property name="maximumSize">
- <size>
- <width>80</width>
- <height>16777215</height>
- </size>
- </property>
- <property name="text">
- <string>Close</string>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- </layout>
- </item>
- </layout>
- </widget>
- <widget class="QMenuBar" name="menubar">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>1059</width>
- <height>23</height>
- </rect>
- </property>
- <widget class="QMenu" name="menuFile">
- <property name="title">
- <string>&amp;File</string>
- </property>
- <addaction name="actionExit"/>
- </widget>
- <addaction name="menuFile"/>
- </widget>
- <widget class="QStatusBar" name="statusbar"/>
- <action name="actionExit">
- <property name="text">
- <string>E&amp;xit</string>
- </property>
- </action>
- </widget>
- <tabstops>
- <tabstop>snrEdit</tabstop>
- <tabstop>freqEdit</tabstop>
- <tabstop>timeEdit</tabstop>
- </tabstops>
- <resources/>
- <connections>
- <connection>
- <sender>closeButton</sender>
- <signal>clicked()</signal>
- <receiver>DigitalWindow</receiver>
- <slot>close()</slot>
- <hints>
- <hint type="sourcelabel">
- <x>322</x>
- <y>623</y>
- </hint>
- <hint type="destinationlabel">
- <x>66</x>
- <y>561</y>
- </hint>
- </hints>
- </connection>
- <connection>
- <sender>actionExit</sender>
- <signal>triggered()</signal>
- <receiver>DigitalWindow</receiver>
- <slot>close()</slot>
- <hints>
- <hint type="sourcelabel">
- <x>-1</x>
- <y>-1</y>
- </hint>
- <hint type="destinationlabel">
- <x>617</x>
- <y>327</y>
- </hint>
- </hints>
- </connection>
- </connections>
-</ui>
diff --git a/gnuradio-examples/python/digital/qt_digital_window2.py b/gnuradio-examples/python/digital/qt_digital_window2.py
deleted file mode 100644
index 2d10e3a7f..000000000
--- a/gnuradio-examples/python/digital/qt_digital_window2.py
+++ /dev/null
@@ -1,248 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Form implementation generated from reading ui file 'qt_digital_window2.ui'
-#
-# Created: Tue May 11 20:55:10 2010
-# by: PyQt4 UI code generator 4.6.1
-#
-# WARNING! All changes made in this file will be lost!
-
-from PyQt4 import QtCore, QtGui
-
-class Ui_DigitalWindow(object):
- def setupUi(self, DigitalWindow):
- DigitalWindow.setObjectName("DigitalWindow")
- DigitalWindow.resize(1059, 751)
- self.centralwidget = QtGui.QWidget(DigitalWindow)
- self.centralwidget.setObjectName("centralwidget")
- self.verticalLayout_3 = QtGui.QVBoxLayout(self.centralwidget)
- self.verticalLayout_3.setObjectName("verticalLayout_3")
- self.sinkLayout = QtGui.QHBoxLayout()
- self.sinkLayout.setObjectName("sinkLayout")
- self.verticalLayout_3.addLayout(self.sinkLayout)
- self.horizontalLayout = QtGui.QHBoxLayout()
- self.horizontalLayout.setObjectName("horizontalLayout")
- self.verticalLayout_2 = QtGui.QVBoxLayout()
- self.verticalLayout_2.setObjectName("verticalLayout_2")
- self.sysBox = QtGui.QGroupBox(self.centralwidget)
- sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
- sizePolicy.setHorizontalStretch(0)
- sizePolicy.setVerticalStretch(0)
- sizePolicy.setHeightForWidth(self.sysBox.sizePolicy().hasHeightForWidth())
- self.sysBox.setSizePolicy(sizePolicy)
- self.sysBox.setMinimumSize(QtCore.QSize(240, 60))
- self.sysBox.setMaximumSize(QtCore.QSize(240, 16777215))
- self.sysBox.setObjectName("sysBox")
- self.formLayoutWidget = QtGui.QWidget(self.sysBox)
- self.formLayoutWidget.setGeometry(QtCore.QRect(10, 20, 211, 31))
- self.formLayoutWidget.setObjectName("formLayoutWidget")
- self.formLayout = QtGui.QFormLayout(self.formLayoutWidget)
- self.formLayout.setSizeConstraint(QtGui.QLayout.SetFixedSize)
- self.formLayout.setVerticalSpacing(20)
- self.formLayout.setObjectName("formLayout")
- self.sampleRateEdit = QtGui.QLineEdit(self.formLayoutWidget)
- sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
- sizePolicy.setHorizontalStretch(0)
- sizePolicy.setVerticalStretch(0)
- sizePolicy.setHeightForWidth(self.sampleRateEdit.sizePolicy().hasHeightForWidth())
- self.sampleRateEdit.setSizePolicy(sizePolicy)
- self.sampleRateEdit.setMinimumSize(QtCore.QSize(60, 26))
- self.sampleRateEdit.setMaximumSize(QtCore.QSize(80, 26))
- self.sampleRateEdit.setObjectName("sampleRateEdit")
- self.formLayout.setWidget(0, QtGui.QFormLayout.FieldRole, self.sampleRateEdit)
- self.sampleRateLabel = QtGui.QLabel(self.formLayoutWidget)
- sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
- sizePolicy.setHorizontalStretch(0)
- sizePolicy.setVerticalStretch(0)
- sizePolicy.setHeightForWidth(self.sampleRateLabel.sizePolicy().hasHeightForWidth())
- self.sampleRateLabel.setSizePolicy(sizePolicy)
- self.sampleRateLabel.setMinimumSize(QtCore.QSize(0, 20))
- self.sampleRateLabel.setMaximumSize(QtCore.QSize(16777215, 20))
- self.sampleRateLabel.setObjectName("sampleRateLabel")
- self.formLayout.setWidget(0, QtGui.QFormLayout.LabelRole, self.sampleRateLabel)
- self.verticalLayout_2.addWidget(self.sysBox)
- spacerItem = QtGui.QSpacerItem(20, 60, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed)
- self.verticalLayout_2.addItem(spacerItem)
- self.horizontalLayout.addLayout(self.verticalLayout_2)
- self.channelModeBox = QtGui.QGroupBox(self.centralwidget)
- sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
- sizePolicy.setHorizontalStretch(0)
- sizePolicy.setVerticalStretch(0)
- sizePolicy.setHeightForWidth(self.channelModeBox.sizePolicy().hasHeightForWidth())
- self.channelModeBox.setSizePolicy(sizePolicy)
- self.channelModeBox.setMinimumSize(QtCore.QSize(245, 130))
- self.channelModeBox.setMaximumSize(QtCore.QSize(245, 16777215))
- self.channelModeBox.setObjectName("channelModeBox")
- self.formLayoutWidget_2 = QtGui.QWidget(self.channelModeBox)
- self.formLayoutWidget_2.setGeometry(QtCore.QRect(10, 20, 221, 98))
- self.formLayoutWidget_2.setObjectName("formLayoutWidget_2")
- self.formLayout_2 = QtGui.QFormLayout(self.formLayoutWidget_2)
- self.formLayout_2.setSizeConstraint(QtGui.QLayout.SetFixedSize)
- self.formLayout_2.setFieldGrowthPolicy(QtGui.QFormLayout.AllNonFixedFieldsGrow)
- self.formLayout_2.setObjectName("formLayout_2")
- self.snrLabel = QtGui.QLabel(self.formLayoutWidget_2)
- self.snrLabel.setObjectName("snrLabel")
- self.formLayout_2.setWidget(0, QtGui.QFormLayout.LabelRole, self.snrLabel)
- self.snrEdit = QtGui.QLineEdit(self.formLayoutWidget_2)
- self.snrEdit.setMinimumSize(QtCore.QSize(60, 0))
- self.snrEdit.setMaximumSize(QtCore.QSize(80, 16777215))
- self.snrEdit.setObjectName("snrEdit")
- self.formLayout_2.setWidget(0, QtGui.QFormLayout.FieldRole, self.snrEdit)
- self.freqLabel = QtGui.QLabel(self.formLayoutWidget_2)
- self.freqLabel.setObjectName("freqLabel")
- self.formLayout_2.setWidget(1, QtGui.QFormLayout.LabelRole, self.freqLabel)
- self.freqEdit = QtGui.QLineEdit(self.formLayoutWidget_2)
- self.freqEdit.setMinimumSize(QtCore.QSize(60, 0))
- self.freqEdit.setMaximumSize(QtCore.QSize(80, 16777215))
- self.freqEdit.setObjectName("freqEdit")
- self.formLayout_2.setWidget(1, QtGui.QFormLayout.FieldRole, self.freqEdit)
- self.timeLabel = QtGui.QLabel(self.formLayoutWidget_2)
- self.timeLabel.setObjectName("timeLabel")
- self.formLayout_2.setWidget(2, QtGui.QFormLayout.LabelRole, self.timeLabel)
- self.timeEdit = QtGui.QLineEdit(self.formLayoutWidget_2)
- self.timeEdit.setMinimumSize(QtCore.QSize(60, 0))
- self.timeEdit.setMaximumSize(QtCore.QSize(80, 16777215))
- self.timeEdit.setObjectName("timeEdit")
- self.formLayout_2.setWidget(2, QtGui.QFormLayout.FieldRole, self.timeEdit)
- self.horizontalLayout.addWidget(self.channelModeBox)
- self.rxBox = QtGui.QGroupBox(self.centralwidget)
- sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
- sizePolicy.setHorizontalStretch(0)
- sizePolicy.setVerticalStretch(0)
- sizePolicy.setHeightForWidth(self.rxBox.sizePolicy().hasHeightForWidth())
- self.rxBox.setSizePolicy(sizePolicy)
- self.rxBox.setMinimumSize(QtCore.QSize(220, 130))
- self.rxBox.setMaximumSize(QtCore.QSize(180, 16777215))
- self.rxBox.setObjectName("rxBox")
- self.formLayoutWidget_3 = QtGui.QWidget(self.rxBox)
- self.formLayoutWidget_3.setGeometry(QtCore.QRect(10, 20, 201, 101))
- self.formLayoutWidget_3.setObjectName("formLayoutWidget_3")
- self.formLayout_3 = QtGui.QFormLayout(self.formLayoutWidget_3)
- self.formLayout_3.setSizeConstraint(QtGui.QLayout.SetFixedSize)
- self.formLayout_3.setObjectName("formLayout_3")
- self.gainClockLabel = QtGui.QLabel(self.formLayoutWidget_3)
- self.gainClockLabel.setObjectName("gainClockLabel")
- self.formLayout_3.setWidget(0, QtGui.QFormLayout.LabelRole, self.gainClockLabel)
- self.gainPhaseLabel = QtGui.QLabel(self.formLayoutWidget_3)
- self.gainPhaseLabel.setObjectName("gainPhaseLabel")
- self.formLayout_3.setWidget(2, QtGui.QFormLayout.LabelRole, self.gainPhaseLabel)
- self.gainClockEdit = QtGui.QLineEdit(self.formLayoutWidget_3)
- self.gainClockEdit.setMinimumSize(QtCore.QSize(60, 0))
- self.gainClockEdit.setMaximumSize(QtCore.QSize(80, 16777215))
- self.gainClockEdit.setObjectName("gainClockEdit")
- self.formLayout_3.setWidget(0, QtGui.QFormLayout.FieldRole, self.gainClockEdit)
- self.gainFreqEdit = QtGui.QLineEdit(self.formLayoutWidget_3)
- self.gainFreqEdit.setMinimumSize(QtCore.QSize(60, 0))
- self.gainFreqEdit.setMaximumSize(QtCore.QSize(80, 16777215))
- self.gainFreqEdit.setObjectName("gainFreqEdit")
- self.formLayout_3.setWidget(2, QtGui.QFormLayout.FieldRole, self.gainFreqEdit)
- self.gainPhaseEdit = QtGui.QLineEdit(self.formLayoutWidget_3)
- self.gainPhaseEdit.setMaximumSize(QtCore.QSize(80, 16777215))
- self.gainPhaseEdit.setObjectName("gainPhaseEdit")
- self.formLayout_3.setWidget(1, QtGui.QFormLayout.FieldRole, self.gainPhaseEdit)
- self.gainPhaseLabel_2 = QtGui.QLabel(self.formLayoutWidget_3)
- self.gainPhaseLabel_2.setObjectName("gainPhaseLabel_2")
- self.formLayout_3.setWidget(1, QtGui.QFormLayout.LabelRole, self.gainPhaseLabel_2)
- self.horizontalLayout.addWidget(self.rxBox)
- self.rxBox_2 = QtGui.QGroupBox(self.centralwidget)
- sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
- sizePolicy.setHorizontalStretch(0)
- sizePolicy.setVerticalStretch(0)
- sizePolicy.setHeightForWidth(self.rxBox_2.sizePolicy().hasHeightForWidth())
- self.rxBox_2.setSizePolicy(sizePolicy)
- self.rxBox_2.setMinimumSize(QtCore.QSize(220, 125))
- self.rxBox_2.setMaximumSize(QtCore.QSize(265, 125))
- self.rxBox_2.setObjectName("rxBox_2")
- self.formLayoutWidget_4 = QtGui.QWidget(self.rxBox_2)
- self.formLayoutWidget_4.setGeometry(QtCore.QRect(10, 20, 201, 91))
- self.formLayoutWidget_4.setObjectName("formLayoutWidget_4")
- self.formLayout_4 = QtGui.QFormLayout(self.formLayoutWidget_4)
- self.formLayout_4.setSizeConstraint(QtGui.QLayout.SetFixedSize)
- self.formLayout_4.setFieldGrowthPolicy(QtGui.QFormLayout.AllNonFixedFieldsGrow)
- self.formLayout_4.setObjectName("formLayout_4")
- self.pktsRcvdLabel = QtGui.QLabel(self.formLayoutWidget_4)
- self.pktsRcvdLabel.setObjectName("pktsRcvdLabel")
- self.formLayout_4.setWidget(0, QtGui.QFormLayout.LabelRole, self.pktsRcvdLabel)
- self.pktsRcvdEdit = QtGui.QLineEdit(self.formLayoutWidget_4)
- self.pktsRcvdEdit.setMinimumSize(QtCore.QSize(60, 0))
- self.pktsRcvdEdit.setMaximumSize(QtCore.QSize(80, 16777215))
- self.pktsRcvdEdit.setObjectName("pktsRcvdEdit")
- self.formLayout_4.setWidget(0, QtGui.QFormLayout.FieldRole, self.pktsRcvdEdit)
- self.pktsCorrectLabel = QtGui.QLabel(self.formLayoutWidget_4)
- self.pktsCorrectLabel.setObjectName("pktsCorrectLabel")
- self.formLayout_4.setWidget(1, QtGui.QFormLayout.LabelRole, self.pktsCorrectLabel)
- self.pktsCorrectEdit = QtGui.QLineEdit(self.formLayoutWidget_4)
- self.pktsCorrectEdit.setMinimumSize(QtCore.QSize(60, 0))
- self.pktsCorrectEdit.setMaximumSize(QtCore.QSize(80, 16777215))
- self.pktsCorrectEdit.setObjectName("pktsCorrectEdit")
- self.formLayout_4.setWidget(1, QtGui.QFormLayout.FieldRole, self.pktsCorrectEdit)
- self.perLabel = QtGui.QLabel(self.formLayoutWidget_4)
- self.perLabel.setObjectName("perLabel")
- self.formLayout_4.setWidget(2, QtGui.QFormLayout.LabelRole, self.perLabel)
- self.perEdit = QtGui.QLineEdit(self.formLayoutWidget_4)
- self.perEdit.setMinimumSize(QtCore.QSize(60, 0))
- self.perEdit.setMaximumSize(QtCore.QSize(80, 16777215))
- self.perEdit.setObjectName("perEdit")
- self.formLayout_4.setWidget(2, QtGui.QFormLayout.FieldRole, self.perEdit)
- self.horizontalLayout.addWidget(self.rxBox_2)
- spacerItem1 = QtGui.QSpacerItem(20, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
- self.horizontalLayout.addItem(spacerItem1)
- self.verticalLayout = QtGui.QVBoxLayout()
- self.verticalLayout.setObjectName("verticalLayout")
- self.pauseButton = QtGui.QPushButton(self.centralwidget)
- self.pauseButton.setMinimumSize(QtCore.QSize(80, 0))
- self.pauseButton.setMaximumSize(QtCore.QSize(80, 16777215))
- self.pauseButton.setObjectName("pauseButton")
- self.verticalLayout.addWidget(self.pauseButton)
- spacerItem2 = QtGui.QSpacerItem(20, 60, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed)
- self.verticalLayout.addItem(spacerItem2)
- self.closeButton = QtGui.QPushButton(self.centralwidget)
- self.closeButton.setMinimumSize(QtCore.QSize(80, 0))
- self.closeButton.setMaximumSize(QtCore.QSize(80, 16777215))
- self.closeButton.setObjectName("closeButton")
- self.verticalLayout.addWidget(self.closeButton)
- self.horizontalLayout.addLayout(self.verticalLayout)
- self.verticalLayout_3.addLayout(self.horizontalLayout)
- DigitalWindow.setCentralWidget(self.centralwidget)
- self.menubar = QtGui.QMenuBar(DigitalWindow)
- self.menubar.setGeometry(QtCore.QRect(0, 0, 1059, 23))
- self.menubar.setObjectName("menubar")
- self.menuFile = QtGui.QMenu(self.menubar)
- self.menuFile.setObjectName("menuFile")
- DigitalWindow.setMenuBar(self.menubar)
- self.statusbar = QtGui.QStatusBar(DigitalWindow)
- self.statusbar.setObjectName("statusbar")
- DigitalWindow.setStatusBar(self.statusbar)
- self.actionExit = QtGui.QAction(DigitalWindow)
- self.actionExit.setObjectName("actionExit")
- self.menuFile.addAction(self.actionExit)
- self.menubar.addAction(self.menuFile.menuAction())
-
- self.retranslateUi(DigitalWindow)
- QtCore.QObject.connect(self.closeButton, QtCore.SIGNAL("clicked()"), DigitalWindow.close)
- QtCore.QObject.connect(self.actionExit, QtCore.SIGNAL("triggered()"), DigitalWindow.close)
- QtCore.QMetaObject.connectSlotsByName(DigitalWindow)
- DigitalWindow.setTabOrder(self.snrEdit, self.freqEdit)
- DigitalWindow.setTabOrder(self.freqEdit, self.timeEdit)
-
- def retranslateUi(self, DigitalWindow):
- DigitalWindow.setWindowTitle(QtGui.QApplication.translate("DigitalWindow", "MainWindow", None, QtGui.QApplication.UnicodeUTF8))
- self.sysBox.setTitle(QtGui.QApplication.translate("DigitalWindow", "System Parameters", None, QtGui.QApplication.UnicodeUTF8))
- self.sampleRateLabel.setText(QtGui.QApplication.translate("DigitalWindow", "Sample Rate (sps)", None, QtGui.QApplication.UnicodeUTF8))
- self.channelModeBox.setTitle(QtGui.QApplication.translate("DigitalWindow", "Channel Model Parameters", None, QtGui.QApplication.UnicodeUTF8))
- self.snrLabel.setText(QtGui.QApplication.translate("DigitalWindow", "SNR (dB)", None, QtGui.QApplication.UnicodeUTF8))
- self.freqLabel.setText(QtGui.QApplication.translate("DigitalWindow", "Frequency Offset (Hz)", None, QtGui.QApplication.UnicodeUTF8))
- self.timeLabel.setText(QtGui.QApplication.translate("DigitalWindow", "Timing Offset", None, QtGui.QApplication.UnicodeUTF8))
- self.rxBox.setTitle(QtGui.QApplication.translate("DigitalWindow", "Receiver Parameters", None, QtGui.QApplication.UnicodeUTF8))
- self.gainClockLabel.setText(QtGui.QApplication.translate("DigitalWindow", "Clock Loop Gain", None, QtGui.QApplication.UnicodeUTF8))
- self.gainPhaseLabel.setText(QtGui.QApplication.translate("DigitalWindow", "Freq. Loop Gain", None, QtGui.QApplication.UnicodeUTF8))
- self.gainPhaseLabel_2.setText(QtGui.QApplication.translate("DigitalWindow", "Phase Loop Gain", None, QtGui.QApplication.UnicodeUTF8))
- self.rxBox_2.setTitle(QtGui.QApplication.translate("DigitalWindow", "Received Packet Info", None, QtGui.QApplication.UnicodeUTF8))
- self.pktsRcvdLabel.setText(QtGui.QApplication.translate("DigitalWindow", "Packets Rcvd.", None, QtGui.QApplication.UnicodeUTF8))
- self.pktsCorrectLabel.setText(QtGui.QApplication.translate("DigitalWindow", "Packets Correct", None, QtGui.QApplication.UnicodeUTF8))
- self.perLabel.setText(QtGui.QApplication.translate("DigitalWindow", "PER", None, QtGui.QApplication.UnicodeUTF8))
- self.pauseButton.setText(QtGui.QApplication.translate("DigitalWindow", "Pause", None, QtGui.QApplication.UnicodeUTF8))
- self.closeButton.setText(QtGui.QApplication.translate("DigitalWindow", "Close", None, QtGui.QApplication.UnicodeUTF8))
- self.menuFile.setTitle(QtGui.QApplication.translate("DigitalWindow", "&File", None, QtGui.QApplication.UnicodeUTF8))
- self.actionExit.setText(QtGui.QApplication.translate("DigitalWindow", "E&xit", None, QtGui.QApplication.UnicodeUTF8))
-
diff --git a/gnuradio-examples/python/digital/qt_digital_window2.ui b/gnuradio-examples/python/digital/qt_digital_window2.ui
deleted file mode 100644
index 544704668..000000000
--- a/gnuradio-examples/python/digital/qt_digital_window2.ui
+++ /dev/null
@@ -1,605 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>DigitalWindow</class>
- <widget class="QMainWindow" name="DigitalWindow">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>1059</width>
- <height>751</height>
- </rect>
- </property>
- <property name="windowTitle">
- <string>MainWindow</string>
- </property>
- <widget class="QWidget" name="centralwidget">
- <layout class="QVBoxLayout" name="verticalLayout_3">
- <item>
- <layout class="QHBoxLayout" name="sinkLayout"/>
- </item>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout">
- <item>
- <layout class="QVBoxLayout" name="verticalLayout_2">
- <item>
- <widget class="QGroupBox" name="sysBox">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize">
- <size>
- <width>240</width>
- <height>60</height>
- </size>
- </property>
- <property name="maximumSize">
- <size>
- <width>240</width>
- <height>16777215</height>
- </size>
- </property>
- <property name="title">
- <string>System Parameters</string>
- </property>
- <widget class="QWidget" name="formLayoutWidget">
- <property name="geometry">
- <rect>
- <x>10</x>
- <y>20</y>
- <width>211</width>
- <height>31</height>
- </rect>
- </property>
- <layout class="QFormLayout" name="formLayout">
- <property name="sizeConstraint">
- <enum>QLayout::SetFixedSize</enum>
- </property>
- <property name="verticalSpacing">
- <number>20</number>
- </property>
- <item row="0" column="1">
- <widget class="QLineEdit" name="sampleRateEdit">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize">
- <size>
- <width>60</width>
- <height>26</height>
- </size>
- </property>
- <property name="maximumSize">
- <size>
- <width>80</width>
- <height>26</height>
- </size>
- </property>
- </widget>
- </item>
- <item row="0" column="0">
- <widget class="QLabel" name="sampleRateLabel">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize">
- <size>
- <width>0</width>
- <height>20</height>
- </size>
- </property>
- <property name="maximumSize">
- <size>
- <width>16777215</width>
- <height>20</height>
- </size>
- </property>
- <property name="text">
- <string>Sample Rate (sps)</string>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- </widget>
- </item>
- <item>
- <spacer name="verticalSpacer_2">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeType">
- <enum>QSizePolicy::Fixed</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>60</height>
- </size>
- </property>
- </spacer>
- </item>
- </layout>
- </item>
- <item>
- <widget class="QGroupBox" name="channelModeBox">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize">
- <size>
- <width>245</width>
- <height>130</height>
- </size>
- </property>
- <property name="maximumSize">
- <size>
- <width>245</width>
- <height>16777215</height>
- </size>
- </property>
- <property name="title">
- <string>Channel Model Parameters</string>
- </property>
- <widget class="QWidget" name="formLayoutWidget_2">
- <property name="geometry">
- <rect>
- <x>10</x>
- <y>20</y>
- <width>221</width>
- <height>98</height>
- </rect>
- </property>
- <layout class="QFormLayout" name="formLayout_2">
- <property name="sizeConstraint">
- <enum>QLayout::SetFixedSize</enum>
- </property>
- <property name="fieldGrowthPolicy">
- <enum>QFormLayout::AllNonFixedFieldsGrow</enum>
- </property>
- <item row="0" column="0">
- <widget class="QLabel" name="snrLabel">
- <property name="text">
- <string>SNR (dB)</string>
- </property>
- </widget>
- </item>
- <item row="0" column="1">
- <widget class="QLineEdit" name="snrEdit">
- <property name="minimumSize">
- <size>
- <width>60</width>
- <height>0</height>
- </size>
- </property>
- <property name="maximumSize">
- <size>
- <width>80</width>
- <height>16777215</height>
- </size>
- </property>
- </widget>
- </item>
- <item row="1" column="0">
- <widget class="QLabel" name="freqLabel">
- <property name="text">
- <string>Frequency Offset (Hz)</string>
- </property>
- </widget>
- </item>
- <item row="1" column="1">
- <widget class="QLineEdit" name="freqEdit">
- <property name="minimumSize">
- <size>
- <width>60</width>
- <height>0</height>
- </size>
- </property>
- <property name="maximumSize">
- <size>
- <width>80</width>
- <height>16777215</height>
- </size>
- </property>
- </widget>
- </item>
- <item row="2" column="0">
- <widget class="QLabel" name="timeLabel">
- <property name="text">
- <string>Timing Offset</string>
- </property>
- </widget>
- </item>
- <item row="2" column="1">
- <widget class="QLineEdit" name="timeEdit">
- <property name="minimumSize">
- <size>
- <width>60</width>
- <height>0</height>
- </size>
- </property>
- <property name="maximumSize">
- <size>
- <width>80</width>
- <height>16777215</height>
- </size>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- </widget>
- </item>
- <item>
- <widget class="QGroupBox" name="rxBox">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize">
- <size>
- <width>220</width>
- <height>130</height>
- </size>
- </property>
- <property name="maximumSize">
- <size>
- <width>180</width>
- <height>16777215</height>
- </size>
- </property>
- <property name="title">
- <string>Receiver Parameters</string>
- </property>
- <widget class="QWidget" name="formLayoutWidget_3">
- <property name="geometry">
- <rect>
- <x>10</x>
- <y>20</y>
- <width>201</width>
- <height>101</height>
- </rect>
- </property>
- <layout class="QFormLayout" name="formLayout_3">
- <property name="sizeConstraint">
- <enum>QLayout::SetFixedSize</enum>
- </property>
- <item row="0" column="0">
- <widget class="QLabel" name="gainClockLabel">
- <property name="text">
- <string>Clock Loop Gain</string>
- </property>
- </widget>
- </item>
- <item row="2" column="0">
- <widget class="QLabel" name="gainPhaseLabel">
- <property name="text">
- <string>Freq. Loop Gain</string>
- </property>
- </widget>
- </item>
- <item row="0" column="1">
- <widget class="QLineEdit" name="gainClockEdit">
- <property name="minimumSize">
- <size>
- <width>60</width>
- <height>0</height>
- </size>
- </property>
- <property name="maximumSize">
- <size>
- <width>80</width>
- <height>16777215</height>
- </size>
- </property>
- </widget>
- </item>
- <item row="2" column="1">
- <widget class="QLineEdit" name="gainFreqEdit">
- <property name="minimumSize">
- <size>
- <width>60</width>
- <height>0</height>
- </size>
- </property>
- <property name="maximumSize">
- <size>
- <width>80</width>
- <height>16777215</height>
- </size>
- </property>
- </widget>
- </item>
- <item row="1" column="1">
- <widget class="QLineEdit" name="gainPhaseEdit">
- <property name="maximumSize">
- <size>
- <width>80</width>
- <height>16777215</height>
- </size>
- </property>
- </widget>
- </item>
- <item row="1" column="0">
- <widget class="QLabel" name="gainPhaseLabel_2">
- <property name="text">
- <string>Phase Loop Gain</string>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- </widget>
- </item>
- <item>
- <widget class="QGroupBox" name="rxBox_2">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize">
- <size>
- <width>220</width>
- <height>125</height>
- </size>
- </property>
- <property name="maximumSize">
- <size>
- <width>265</width>
- <height>125</height>
- </size>
- </property>
- <property name="title">
- <string>Received Packet Info</string>
- </property>
- <widget class="QWidget" name="formLayoutWidget_4">
- <property name="geometry">
- <rect>
- <x>10</x>
- <y>20</y>
- <width>201</width>
- <height>91</height>
- </rect>
- </property>
- <layout class="QFormLayout" name="formLayout_4">
- <property name="sizeConstraint">
- <enum>QLayout::SetFixedSize</enum>
- </property>
- <property name="fieldGrowthPolicy">
- <enum>QFormLayout::AllNonFixedFieldsGrow</enum>
- </property>
- <item row="0" column="0">
- <widget class="QLabel" name="pktsRcvdLabel">
- <property name="text">
- <string>Packets Rcvd.</string>
- </property>
- </widget>
- </item>
- <item row="0" column="1">
- <widget class="QLineEdit" name="pktsRcvdEdit">
- <property name="minimumSize">
- <size>
- <width>60</width>
- <height>0</height>
- </size>
- </property>
- <property name="maximumSize">
- <size>
- <width>80</width>
- <height>16777215</height>
- </size>
- </property>
- </widget>
- </item>
- <item row="1" column="0">
- <widget class="QLabel" name="pktsCorrectLabel">
- <property name="text">
- <string>Packets Correct</string>
- </property>
- </widget>
- </item>
- <item row="1" column="1">
- <widget class="QLineEdit" name="pktsCorrectEdit">
- <property name="minimumSize">
- <size>
- <width>60</width>
- <height>0</height>
- </size>
- </property>
- <property name="maximumSize">
- <size>
- <width>80</width>
- <height>16777215</height>
- </size>
- </property>
- </widget>
- </item>
- <item row="2" column="0">
- <widget class="QLabel" name="perLabel">
- <property name="text">
- <string>PER</string>
- </property>
- </widget>
- </item>
- <item row="2" column="1">
- <widget class="QLineEdit" name="perEdit">
- <property name="minimumSize">
- <size>
- <width>60</width>
- <height>0</height>
- </size>
- </property>
- <property name="maximumSize">
- <size>
- <width>80</width>
- <height>16777215</height>
- </size>
- </property>
- </widget>
- </item>
- </layout>
- <zorder>pktsRcvdLabel</zorder>
- <zorder>pktsCorrectLabel</zorder>
- <zorder>perLabel</zorder>
- <zorder>pktsRcvdEdit</zorder>
- <zorder>pktsCorrectEdit</zorder>
- <zorder>perEdit</zorder>
- </widget>
- </widget>
- </item>
- <item>
- <spacer name="horizontalSpacer">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <layout class="QVBoxLayout" name="verticalLayout">
- <item>
- <widget class="QPushButton" name="pauseButton">
- <property name="minimumSize">
- <size>
- <width>80</width>
- <height>0</height>
- </size>
- </property>
- <property name="maximumSize">
- <size>
- <width>80</width>
- <height>16777215</height>
- </size>
- </property>
- <property name="text">
- <string>Pause</string>
- </property>
- </widget>
- </item>
- <item>
- <spacer name="verticalSpacer">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeType">
- <enum>QSizePolicy::Fixed</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>60</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="QPushButton" name="closeButton">
- <property name="minimumSize">
- <size>
- <width>80</width>
- <height>0</height>
- </size>
- </property>
- <property name="maximumSize">
- <size>
- <width>80</width>
- <height>16777215</height>
- </size>
- </property>
- <property name="text">
- <string>Close</string>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- </layout>
- </item>
- </layout>
- </widget>
- <widget class="QMenuBar" name="menubar">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>1059</width>
- <height>23</height>
- </rect>
- </property>
- <widget class="QMenu" name="menuFile">
- <property name="title">
- <string>&amp;File</string>
- </property>
- <addaction name="actionExit"/>
- </widget>
- <addaction name="menuFile"/>
- </widget>
- <widget class="QStatusBar" name="statusbar"/>
- <action name="actionExit">
- <property name="text">
- <string>E&amp;xit</string>
- </property>
- </action>
- </widget>
- <tabstops>
- <tabstop>snrEdit</tabstop>
- <tabstop>freqEdit</tabstop>
- <tabstop>timeEdit</tabstop>
- </tabstops>
- <resources/>
- <connections>
- <connection>
- <sender>closeButton</sender>
- <signal>clicked()</signal>
- <receiver>DigitalWindow</receiver>
- <slot>close()</slot>
- <hints>
- <hint type="sourcelabel">
- <x>322</x>
- <y>623</y>
- </hint>
- <hint type="destinationlabel">
- <x>66</x>
- <y>561</y>
- </hint>
- </hints>
- </connection>
- <connection>
- <sender>actionExit</sender>
- <signal>triggered()</signal>
- <receiver>DigitalWindow</receiver>
- <slot>close()</slot>
- <hints>
- <hint type="sourcelabel">
- <x>-1</x>
- <y>-1</y>
- </hint>
- <hint type="destinationlabel">
- <x>617</x>
- <y>327</y>
- </hint>
- </hints>
- </connection>
- </connections>
-</ui>
diff --git a/gnuradio-examples/python/digital/qt_rx_window.py b/gnuradio-examples/python/digital/qt_rx_window.py
deleted file mode 100644
index e2488eb3d..000000000
--- a/gnuradio-examples/python/digital/qt_rx_window.py
+++ /dev/null
@@ -1,157 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Form implementation generated from reading ui file 'qt_rx_window.ui'
-#
-# Created: Tue May 11 21:03:07 2010
-# by: PyQt4 UI code generator 4.6.1
-#
-# WARNING! All changes made in this file will be lost!
-
-from PyQt4 import QtCore, QtGui
-
-class Ui_DigitalWindow(object):
- def setupUi(self, DigitalWindow):
- DigitalWindow.setObjectName("DigitalWindow")
- DigitalWindow.resize(999, 519)
- self.centralwidget = QtGui.QWidget(DigitalWindow)
- self.centralwidget.setObjectName("centralwidget")
- self.verticalLayout = QtGui.QVBoxLayout(self.centralwidget)
- self.verticalLayout.setObjectName("verticalLayout")
- self.sinkLayout = QtGui.QHBoxLayout()
- self.sinkLayout.setObjectName("sinkLayout")
- self.verticalLayout.addLayout(self.sinkLayout)
- self.horizontalLayout = QtGui.QHBoxLayout()
- self.horizontalLayout.setSizeConstraint(QtGui.QLayout.SetFixedSize)
- self.horizontalLayout.setObjectName("horizontalLayout")
- self.rxBox = QtGui.QGroupBox(self.centralwidget)
- sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
- sizePolicy.setHorizontalStretch(0)
- sizePolicy.setVerticalStretch(0)
- sizePolicy.setHeightForWidth(self.rxBox.sizePolicy().hasHeightForWidth())
- self.rxBox.setSizePolicy(sizePolicy)
- self.rxBox.setMinimumSize(QtCore.QSize(250, 190))
- self.rxBox.setMaximumSize(QtCore.QSize(250, 190))
- self.rxBox.setObjectName("rxBox")
- self.gainMuEdit = QtGui.QLineEdit(self.rxBox)
- self.gainMuEdit.setGeometry(QtCore.QRect(120, 120, 113, 23))
- self.gainMuEdit.setObjectName("gainMuEdit")
- self.gainMuLabel = QtGui.QLabel(self.rxBox)
- self.gainMuLabel.setGeometry(QtCore.QRect(10, 120, 111, 20))
- self.gainMuLabel.setObjectName("gainMuLabel")
- self.alphaEdit = QtGui.QLineEdit(self.rxBox)
- self.alphaEdit.setGeometry(QtCore.QRect(120, 150, 113, 23))
- self.alphaEdit.setObjectName("alphaEdit")
- self.alphaLabel = QtGui.QLabel(self.rxBox)
- self.alphaLabel.setGeometry(QtCore.QRect(10, 150, 111, 20))
- self.alphaLabel.setObjectName("alphaLabel")
- self.gainLabel = QtGui.QLabel(self.rxBox)
- self.gainLabel.setGeometry(QtCore.QRect(10, 60, 101, 17))
- self.gainLabel.setObjectName("gainLabel")
- self.freqEdit = QtGui.QLineEdit(self.rxBox)
- self.freqEdit.setGeometry(QtCore.QRect(120, 30, 113, 23))
- self.freqEdit.setObjectName("freqEdit")
- self.freqLabel = QtGui.QLabel(self.rxBox)
- self.freqLabel.setGeometry(QtCore.QRect(10, 30, 141, 17))
- self.freqLabel.setObjectName("freqLabel")
- self.gainEdit = QtGui.QLineEdit(self.rxBox)
- self.gainEdit.setGeometry(QtCore.QRect(120, 60, 113, 23))
- self.gainEdit.setObjectName("gainEdit")
- self.decimLabel = QtGui.QLabel(self.rxBox)
- self.decimLabel.setGeometry(QtCore.QRect(10, 90, 101, 17))
- self.decimLabel.setObjectName("decimLabel")
- self.decimEdit = QtGui.QLineEdit(self.rxBox)
- self.decimEdit.setGeometry(QtCore.QRect(120, 90, 113, 23))
- self.decimEdit.setObjectName("decimEdit")
- self.horizontalLayout.addWidget(self.rxBox)
- self.verticalLayout_3 = QtGui.QVBoxLayout()
- self.verticalLayout_3.setObjectName("verticalLayout_3")
- self.rxPacketBox = QtGui.QGroupBox(self.centralwidget)
- self.rxPacketBox.setEnabled(True)
- sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
- sizePolicy.setHorizontalStretch(0)
- sizePolicy.setVerticalStretch(0)
- sizePolicy.setHeightForWidth(self.rxPacketBox.sizePolicy().hasHeightForWidth())
- self.rxPacketBox.setSizePolicy(sizePolicy)
- self.rxPacketBox.setMinimumSize(QtCore.QSize(250, 130))
- self.rxPacketBox.setMaximumSize(QtCore.QSize(250, 130))
- font = QtGui.QFont()
- font.setWeight(50)
- font.setBold(False)
- self.rxPacketBox.setFont(font)
- self.rxPacketBox.setObjectName("rxPacketBox")
- self.pktsRcvdEdit = QtGui.QLineEdit(self.rxPacketBox)
- self.pktsRcvdEdit.setGeometry(QtCore.QRect(120, 30, 113, 23))
- self.pktsRcvdEdit.setObjectName("pktsRcvdEdit")
- self.pktsRcvdLabel = QtGui.QLabel(self.rxPacketBox)
- self.pktsRcvdLabel.setGeometry(QtCore.QRect(10, 30, 111, 20))
- self.pktsRcvdLabel.setObjectName("pktsRcvdLabel")
- self.pktsCorrectEdit = QtGui.QLineEdit(self.rxPacketBox)
- self.pktsCorrectEdit.setGeometry(QtCore.QRect(120, 60, 113, 23))
- self.pktsCorrectEdit.setObjectName("pktsCorrectEdit")
- self.pktsCorrectLabel = QtGui.QLabel(self.rxPacketBox)
- self.pktsCorrectLabel.setGeometry(QtCore.QRect(10, 60, 111, 20))
- self.pktsCorrectLabel.setObjectName("pktsCorrectLabel")
- self.perLabel = QtGui.QLabel(self.rxPacketBox)
- self.perLabel.setGeometry(QtCore.QRect(10, 90, 111, 20))
- self.perLabel.setObjectName("perLabel")
- self.perEdit = QtGui.QLineEdit(self.rxPacketBox)
- self.perEdit.setGeometry(QtCore.QRect(120, 90, 113, 23))
- self.perEdit.setObjectName("perEdit")
- self.verticalLayout_3.addWidget(self.rxPacketBox)
- spacerItem = QtGui.QSpacerItem(20, 60, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed)
- self.verticalLayout_3.addItem(spacerItem)
- self.horizontalLayout.addLayout(self.verticalLayout_3)
- spacerItem1 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
- self.horizontalLayout.addItem(spacerItem1)
- self.verticalLayout_5 = QtGui.QVBoxLayout()
- self.verticalLayout_5.setObjectName("verticalLayout_5")
- spacerItem2 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
- self.verticalLayout_5.addItem(spacerItem2)
- self.closeButton = QtGui.QPushButton(self.centralwidget)
- sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
- sizePolicy.setHorizontalStretch(0)
- sizePolicy.setVerticalStretch(0)
- sizePolicy.setHeightForWidth(self.closeButton.sizePolicy().hasHeightForWidth())
- self.closeButton.setSizePolicy(sizePolicy)
- self.closeButton.setMinimumSize(QtCore.QSize(80, 30))
- self.closeButton.setMaximumSize(QtCore.QSize(80, 30))
- self.closeButton.setObjectName("closeButton")
- self.verticalLayout_5.addWidget(self.closeButton)
- self.horizontalLayout.addLayout(self.verticalLayout_5)
- self.verticalLayout.addLayout(self.horizontalLayout)
- DigitalWindow.setCentralWidget(self.centralwidget)
- self.menubar = QtGui.QMenuBar(DigitalWindow)
- self.menubar.setGeometry(QtCore.QRect(0, 0, 999, 23))
- self.menubar.setObjectName("menubar")
- self.menuFile = QtGui.QMenu(self.menubar)
- self.menuFile.setObjectName("menuFile")
- DigitalWindow.setMenuBar(self.menubar)
- self.statusbar = QtGui.QStatusBar(DigitalWindow)
- self.statusbar.setObjectName("statusbar")
- DigitalWindow.setStatusBar(self.statusbar)
- self.actionExit = QtGui.QAction(DigitalWindow)
- self.actionExit.setObjectName("actionExit")
- self.menuFile.addAction(self.actionExit)
- self.menubar.addAction(self.menuFile.menuAction())
-
- self.retranslateUi(DigitalWindow)
- QtCore.QObject.connect(self.actionExit, QtCore.SIGNAL("triggered()"), DigitalWindow.close)
- QtCore.QObject.connect(self.closeButton, QtCore.SIGNAL("clicked()"), DigitalWindow.close)
- QtCore.QMetaObject.connectSlotsByName(DigitalWindow)
-
- def retranslateUi(self, DigitalWindow):
- DigitalWindow.setWindowTitle(QtGui.QApplication.translate("DigitalWindow", "MainWindow", None, QtGui.QApplication.UnicodeUTF8))
- self.rxBox.setTitle(QtGui.QApplication.translate("DigitalWindow", "Receiver Parameters", None, QtGui.QApplication.UnicodeUTF8))
- self.gainMuLabel.setText(QtGui.QApplication.translate("DigitalWindow", "mu\'s gain", None, QtGui.QApplication.UnicodeUTF8))
- self.alphaLabel.setText(QtGui.QApplication.translate("DigitalWindow", "Alpha", None, QtGui.QApplication.UnicodeUTF8))
- self.gainLabel.setText(QtGui.QApplication.translate("DigitalWindow", "Gain (dB)", None, QtGui.QApplication.UnicodeUTF8))
- self.freqLabel.setText(QtGui.QApplication.translate("DigitalWindow", "Frequency (Hz)", None, QtGui.QApplication.UnicodeUTF8))
- self.decimLabel.setText(QtGui.QApplication.translate("DigitalWindow", "Decimation", None, QtGui.QApplication.UnicodeUTF8))
- self.rxPacketBox.setTitle(QtGui.QApplication.translate("DigitalWindow", "Received Packet Info", None, QtGui.QApplication.UnicodeUTF8))
- self.pktsRcvdLabel.setText(QtGui.QApplication.translate("DigitalWindow", "Packets Rcvd.", None, QtGui.QApplication.UnicodeUTF8))
- self.pktsCorrectLabel.setText(QtGui.QApplication.translate("DigitalWindow", "Packets Correct", None, QtGui.QApplication.UnicodeUTF8))
- self.perLabel.setText(QtGui.QApplication.translate("DigitalWindow", "PER", None, QtGui.QApplication.UnicodeUTF8))
- self.closeButton.setText(QtGui.QApplication.translate("DigitalWindow", "Close", None, QtGui.QApplication.UnicodeUTF8))
- self.menuFile.setTitle(QtGui.QApplication.translate("DigitalWindow", "&File", None, QtGui.QApplication.UnicodeUTF8))
- self.actionExit.setText(QtGui.QApplication.translate("DigitalWindow", "E&xit", None, QtGui.QApplication.UnicodeUTF8))
-
diff --git a/gnuradio-examples/python/digital/qt_rx_window.ui b/gnuradio-examples/python/digital/qt_rx_window.ui
deleted file mode 100644
index f5a074876..000000000
--- a/gnuradio-examples/python/digital/qt_rx_window.ui
+++ /dev/null
@@ -1,407 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>DigitalWindow</class>
- <widget class="QMainWindow" name="DigitalWindow">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>999</width>
- <height>519</height>
- </rect>
- </property>
- <property name="windowTitle">
- <string>MainWindow</string>
- </property>
- <widget class="QWidget" name="centralwidget">
- <layout class="QVBoxLayout" name="verticalLayout">
- <item>
- <layout class="QHBoxLayout" name="sinkLayout"/>
- </item>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout">
- <property name="sizeConstraint">
- <enum>QLayout::SetFixedSize</enum>
- </property>
- <item>
- <widget class="QGroupBox" name="rxBox">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize">
- <size>
- <width>250</width>
- <height>190</height>
- </size>
- </property>
- <property name="maximumSize">
- <size>
- <width>250</width>
- <height>190</height>
- </size>
- </property>
- <property name="title">
- <string>Receiver Parameters</string>
- </property>
- <widget class="QLineEdit" name="gainMuEdit">
- <property name="geometry">
- <rect>
- <x>120</x>
- <y>120</y>
- <width>113</width>
- <height>23</height>
- </rect>
- </property>
- </widget>
- <widget class="QLabel" name="gainMuLabel">
- <property name="geometry">
- <rect>
- <x>10</x>
- <y>120</y>
- <width>111</width>
- <height>20</height>
- </rect>
- </property>
- <property name="text">
- <string>mu's gain</string>
- </property>
- </widget>
- <widget class="QLineEdit" name="alphaEdit">
- <property name="geometry">
- <rect>
- <x>120</x>
- <y>150</y>
- <width>113</width>
- <height>23</height>
- </rect>
- </property>
- </widget>
- <widget class="QLabel" name="alphaLabel">
- <property name="geometry">
- <rect>
- <x>10</x>
- <y>150</y>
- <width>111</width>
- <height>20</height>
- </rect>
- </property>
- <property name="text">
- <string>Alpha</string>
- </property>
- </widget>
- <widget class="QLabel" name="gainLabel">
- <property name="geometry">
- <rect>
- <x>10</x>
- <y>60</y>
- <width>101</width>
- <height>17</height>
- </rect>
- </property>
- <property name="text">
- <string>Gain (dB)</string>
- </property>
- </widget>
- <widget class="QLineEdit" name="freqEdit">
- <property name="geometry">
- <rect>
- <x>120</x>
- <y>30</y>
- <width>113</width>
- <height>23</height>
- </rect>
- </property>
- </widget>
- <widget class="QLabel" name="freqLabel">
- <property name="geometry">
- <rect>
- <x>10</x>
- <y>30</y>
- <width>141</width>
- <height>17</height>
- </rect>
- </property>
- <property name="text">
- <string>Frequency (Hz)</string>
- </property>
- </widget>
- <widget class="QLineEdit" name="gainEdit">
- <property name="geometry">
- <rect>
- <x>120</x>
- <y>60</y>
- <width>113</width>
- <height>23</height>
- </rect>
- </property>
- </widget>
- <widget class="QLabel" name="decimLabel">
- <property name="geometry">
- <rect>
- <x>10</x>
- <y>90</y>
- <width>101</width>
- <height>17</height>
- </rect>
- </property>
- <property name="text">
- <string>Decimation</string>
- </property>
- </widget>
- <widget class="QLineEdit" name="decimEdit">
- <property name="geometry">
- <rect>
- <x>120</x>
- <y>90</y>
- <width>113</width>
- <height>23</height>
- </rect>
- </property>
- </widget>
- </widget>
- </item>
- <item>
- <layout class="QVBoxLayout" name="verticalLayout_3">
- <item>
- <widget class="QGroupBox" name="rxPacketBox">
- <property name="enabled">
- <bool>true</bool>
- </property>
- <property name="sizePolicy">
- <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize">
- <size>
- <width>250</width>
- <height>130</height>
- </size>
- </property>
- <property name="maximumSize">
- <size>
- <width>250</width>
- <height>130</height>
- </size>
- </property>
- <property name="font">
- <font>
- <weight>50</weight>
- <bold>false</bold>
- </font>
- </property>
- <property name="title">
- <string>Received Packet Info</string>
- </property>
- <widget class="QLineEdit" name="pktsRcvdEdit">
- <property name="geometry">
- <rect>
- <x>120</x>
- <y>30</y>
- <width>113</width>
- <height>23</height>
- </rect>
- </property>
- </widget>
- <widget class="QLabel" name="pktsRcvdLabel">
- <property name="geometry">
- <rect>
- <x>10</x>
- <y>30</y>
- <width>111</width>
- <height>20</height>
- </rect>
- </property>
- <property name="text">
- <string>Packets Rcvd.</string>
- </property>
- </widget>
- <widget class="QLineEdit" name="pktsCorrectEdit">
- <property name="geometry">
- <rect>
- <x>120</x>
- <y>60</y>
- <width>113</width>
- <height>23</height>
- </rect>
- </property>
- </widget>
- <widget class="QLabel" name="pktsCorrectLabel">
- <property name="geometry">
- <rect>
- <x>10</x>
- <y>60</y>
- <width>111</width>
- <height>20</height>
- </rect>
- </property>
- <property name="text">
- <string>Packets Correct</string>
- </property>
- </widget>
- <widget class="QLabel" name="perLabel">
- <property name="geometry">
- <rect>
- <x>10</x>
- <y>90</y>
- <width>111</width>
- <height>20</height>
- </rect>
- </property>
- <property name="text">
- <string>PER</string>
- </property>
- </widget>
- <widget class="QLineEdit" name="perEdit">
- <property name="geometry">
- <rect>
- <x>120</x>
- <y>90</y>
- <width>113</width>
- <height>23</height>
- </rect>
- </property>
- </widget>
- </widget>
- </item>
- <item>
- <spacer name="verticalSpacer_2">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeType">
- <enum>QSizePolicy::Fixed</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>60</height>
- </size>
- </property>
- </spacer>
- </item>
- </layout>
- </item>
- <item>
- <spacer name="horizontalSpacer">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <layout class="QVBoxLayout" name="verticalLayout_5">
- <item>
- <spacer name="verticalSpacer_3">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>40</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="QPushButton" name="closeButton">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize">
- <size>
- <width>80</width>
- <height>30</height>
- </size>
- </property>
- <property name="maximumSize">
- <size>
- <width>80</width>
- <height>30</height>
- </size>
- </property>
- <property name="text">
- <string>Close</string>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- </layout>
- </item>
- </layout>
- </widget>
- <widget class="QMenuBar" name="menubar">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>999</width>
- <height>23</height>
- </rect>
- </property>
- <widget class="QMenu" name="menuFile">
- <property name="title">
- <string>&amp;File</string>
- </property>
- <addaction name="actionExit"/>
- </widget>
- <addaction name="menuFile"/>
- </widget>
- <widget class="QStatusBar" name="statusbar"/>
- <action name="actionExit">
- <property name="text">
- <string>E&amp;xit</string>
- </property>
- </action>
- </widget>
- <resources/>
- <connections>
- <connection>
- <sender>actionExit</sender>
- <signal>triggered()</signal>
- <receiver>DigitalWindow</receiver>
- <slot>close()</slot>
- <hints>
- <hint type="sourcelabel">
- <x>-1</x>
- <y>-1</y>
- </hint>
- <hint type="destinationlabel">
- <x>617</x>
- <y>327</y>
- </hint>
- </hints>
- </connection>
- <connection>
- <sender>closeButton</sender>
- <signal>clicked()</signal>
- <receiver>DigitalWindow</receiver>
- <slot>close()</slot>
- <hints>
- <hint type="sourcelabel">
- <x>960</x>
- <y>694</y>
- </hint>
- <hint type="destinationlabel">
- <x>66</x>
- <y>561</y>
- </hint>
- </hints>
- </connection>
- </connections>
-</ui>
diff --git a/gnuradio-examples/python/digital/qt_rx_window2.py b/gnuradio-examples/python/digital/qt_rx_window2.py
deleted file mode 100644
index 2fd719ce1..000000000
--- a/gnuradio-examples/python/digital/qt_rx_window2.py
+++ /dev/null
@@ -1,166 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Form implementation generated from reading ui file 'qt_rx_window2.ui'
-#
-# Created: Tue May 11 21:01:39 2010
-# by: PyQt4 UI code generator 4.6.1
-#
-# WARNING! All changes made in this file will be lost!
-
-from PyQt4 import QtCore, QtGui
-
-class Ui_DigitalWindow(object):
- def setupUi(self, DigitalWindow):
- DigitalWindow.setObjectName("DigitalWindow")
- DigitalWindow.resize(1000, 523)
- self.centralwidget = QtGui.QWidget(DigitalWindow)
- self.centralwidget.setObjectName("centralwidget")
- self.verticalLayout = QtGui.QVBoxLayout(self.centralwidget)
- self.verticalLayout.setObjectName("verticalLayout")
- self.sinkLayout = QtGui.QHBoxLayout()
- self.sinkLayout.setObjectName("sinkLayout")
- self.verticalLayout.addLayout(self.sinkLayout)
- self.horizontalLayout = QtGui.QHBoxLayout()
- self.horizontalLayout.setSizeConstraint(QtGui.QLayout.SetFixedSize)
- self.horizontalLayout.setObjectName("horizontalLayout")
- self.rxBox = QtGui.QGroupBox(self.centralwidget)
- sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
- sizePolicy.setHorizontalStretch(0)
- sizePolicy.setVerticalStretch(0)
- sizePolicy.setHeightForWidth(self.rxBox.sizePolicy().hasHeightForWidth())
- self.rxBox.setSizePolicy(sizePolicy)
- self.rxBox.setMinimumSize(QtCore.QSize(250, 190))
- self.rxBox.setMaximumSize(QtCore.QSize(250, 250))
- self.rxBox.setObjectName("rxBox")
- self.formLayout = QtGui.QFormLayout(self.rxBox)
- self.formLayout.setObjectName("formLayout")
- self.freqLabel = QtGui.QLabel(self.rxBox)
- self.freqLabel.setObjectName("freqLabel")
- self.formLayout.setWidget(0, QtGui.QFormLayout.LabelRole, self.freqLabel)
- self.freqEdit = QtGui.QLineEdit(self.rxBox)
- self.freqEdit.setObjectName("freqEdit")
- self.formLayout.setWidget(0, QtGui.QFormLayout.FieldRole, self.freqEdit)
- self.gainLabel = QtGui.QLabel(self.rxBox)
- self.gainLabel.setObjectName("gainLabel")
- self.formLayout.setWidget(1, QtGui.QFormLayout.LabelRole, self.gainLabel)
- self.gainEdit = QtGui.QLineEdit(self.rxBox)
- self.gainEdit.setObjectName("gainEdit")
- self.formLayout.setWidget(1, QtGui.QFormLayout.FieldRole, self.gainEdit)
- self.decimLabel = QtGui.QLabel(self.rxBox)
- self.decimLabel.setObjectName("decimLabel")
- self.formLayout.setWidget(2, QtGui.QFormLayout.LabelRole, self.decimLabel)
- self.decimEdit = QtGui.QLineEdit(self.rxBox)
- self.decimEdit.setObjectName("decimEdit")
- self.formLayout.setWidget(2, QtGui.QFormLayout.FieldRole, self.decimEdit)
- self.gainClockLabel = QtGui.QLabel(self.rxBox)
- self.gainClockLabel.setObjectName("gainClockLabel")
- self.formLayout.setWidget(3, QtGui.QFormLayout.LabelRole, self.gainClockLabel)
- self.gainClockEdit = QtGui.QLineEdit(self.rxBox)
- self.gainClockEdit.setObjectName("gainClockEdit")
- self.formLayout.setWidget(3, QtGui.QFormLayout.FieldRole, self.gainClockEdit)
- self.gainPhaseLabel = QtGui.QLabel(self.rxBox)
- self.gainPhaseLabel.setObjectName("gainPhaseLabel")
- self.formLayout.setWidget(4, QtGui.QFormLayout.LabelRole, self.gainPhaseLabel)
- self.gainPhaseEdit = QtGui.QLineEdit(self.rxBox)
- self.gainPhaseEdit.setObjectName("gainPhaseEdit")
- self.formLayout.setWidget(4, QtGui.QFormLayout.FieldRole, self.gainPhaseEdit)
- self.gainFreqEdit = QtGui.QLineEdit(self.rxBox)
- self.gainFreqEdit.setObjectName("gainFreqEdit")
- self.formLayout.setWidget(5, QtGui.QFormLayout.FieldRole, self.gainFreqEdit)
- self.gainFreqLabel = QtGui.QLabel(self.rxBox)
- self.gainFreqLabel.setObjectName("gainFreqLabel")
- self.formLayout.setWidget(5, QtGui.QFormLayout.LabelRole, self.gainFreqLabel)
- self.horizontalLayout.addWidget(self.rxBox)
- self.verticalLayout_3 = QtGui.QVBoxLayout()
- self.verticalLayout_3.setObjectName("verticalLayout_3")
- self.rxPacketBox = QtGui.QGroupBox(self.centralwidget)
- self.rxPacketBox.setEnabled(True)
- sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
- sizePolicy.setHorizontalStretch(0)
- sizePolicy.setVerticalStretch(0)
- sizePolicy.setHeightForWidth(self.rxPacketBox.sizePolicy().hasHeightForWidth())
- self.rxPacketBox.setSizePolicy(sizePolicy)
- self.rxPacketBox.setMinimumSize(QtCore.QSize(250, 130))
- self.rxPacketBox.setMaximumSize(QtCore.QSize(250, 130))
- font = QtGui.QFont()
- font.setWeight(50)
- font.setBold(False)
- self.rxPacketBox.setFont(font)
- self.rxPacketBox.setObjectName("rxPacketBox")
- self.pktsRcvdEdit = QtGui.QLineEdit(self.rxPacketBox)
- self.pktsRcvdEdit.setGeometry(QtCore.QRect(120, 30, 113, 23))
- self.pktsRcvdEdit.setObjectName("pktsRcvdEdit")
- self.pktsRcvdLabel = QtGui.QLabel(self.rxPacketBox)
- self.pktsRcvdLabel.setGeometry(QtCore.QRect(10, 30, 111, 20))
- self.pktsRcvdLabel.setObjectName("pktsRcvdLabel")
- self.pktsCorrectEdit = QtGui.QLineEdit(self.rxPacketBox)
- self.pktsCorrectEdit.setGeometry(QtCore.QRect(120, 60, 113, 23))
- self.pktsCorrectEdit.setObjectName("pktsCorrectEdit")
- self.pktsCorrectLabel = QtGui.QLabel(self.rxPacketBox)
- self.pktsCorrectLabel.setGeometry(QtCore.QRect(10, 60, 111, 20))
- self.pktsCorrectLabel.setObjectName("pktsCorrectLabel")
- self.perLabel = QtGui.QLabel(self.rxPacketBox)
- self.perLabel.setGeometry(QtCore.QRect(10, 90, 111, 20))
- self.perLabel.setObjectName("perLabel")
- self.perEdit = QtGui.QLineEdit(self.rxPacketBox)
- self.perEdit.setGeometry(QtCore.QRect(120, 90, 113, 23))
- self.perEdit.setObjectName("perEdit")
- self.verticalLayout_3.addWidget(self.rxPacketBox)
- spacerItem = QtGui.QSpacerItem(20, 60, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed)
- self.verticalLayout_3.addItem(spacerItem)
- self.horizontalLayout.addLayout(self.verticalLayout_3)
- spacerItem1 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
- self.horizontalLayout.addItem(spacerItem1)
- self.verticalLayout_5 = QtGui.QVBoxLayout()
- self.verticalLayout_5.setObjectName("verticalLayout_5")
- spacerItem2 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
- self.verticalLayout_5.addItem(spacerItem2)
- self.closeButton = QtGui.QPushButton(self.centralwidget)
- sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
- sizePolicy.setHorizontalStretch(0)
- sizePolicy.setVerticalStretch(0)
- sizePolicy.setHeightForWidth(self.closeButton.sizePolicy().hasHeightForWidth())
- self.closeButton.setSizePolicy(sizePolicy)
- self.closeButton.setMinimumSize(QtCore.QSize(80, 30))
- self.closeButton.setMaximumSize(QtCore.QSize(80, 30))
- self.closeButton.setObjectName("closeButton")
- self.verticalLayout_5.addWidget(self.closeButton)
- self.horizontalLayout.addLayout(self.verticalLayout_5)
- self.verticalLayout.addLayout(self.horizontalLayout)
- DigitalWindow.setCentralWidget(self.centralwidget)
- self.menubar = QtGui.QMenuBar(DigitalWindow)
- self.menubar.setGeometry(QtCore.QRect(0, 0, 1000, 23))
- self.menubar.setObjectName("menubar")
- self.menuFile = QtGui.QMenu(self.menubar)
- self.menuFile.setObjectName("menuFile")
- DigitalWindow.setMenuBar(self.menubar)
- self.statusbar = QtGui.QStatusBar(DigitalWindow)
- self.statusbar.setObjectName("statusbar")
- DigitalWindow.setStatusBar(self.statusbar)
- self.actionExit = QtGui.QAction(DigitalWindow)
- self.actionExit.setObjectName("actionExit")
- self.menuFile.addAction(self.actionExit)
- self.menubar.addAction(self.menuFile.menuAction())
-
- self.retranslateUi(DigitalWindow)
- QtCore.QObject.connect(self.actionExit, QtCore.SIGNAL("triggered()"), DigitalWindow.close)
- QtCore.QObject.connect(self.closeButton, QtCore.SIGNAL("clicked()"), DigitalWindow.close)
- QtCore.QMetaObject.connectSlotsByName(DigitalWindow)
-
- def retranslateUi(self, DigitalWindow):
- DigitalWindow.setWindowTitle(QtGui.QApplication.translate("DigitalWindow", "MainWindow", None, QtGui.QApplication.UnicodeUTF8))
- self.rxBox.setTitle(QtGui.QApplication.translate("DigitalWindow", "Receiver Parameters", None, QtGui.QApplication.UnicodeUTF8))
- self.freqLabel.setText(QtGui.QApplication.translate("DigitalWindow", "Frequency (Hz)", None, QtGui.QApplication.UnicodeUTF8))
- self.gainLabel.setText(QtGui.QApplication.translate("DigitalWindow", "Gain (dB)", None, QtGui.QApplication.UnicodeUTF8))
- self.decimLabel.setText(QtGui.QApplication.translate("DigitalWindow", "Decimation", None, QtGui.QApplication.UnicodeUTF8))
- self.gainClockLabel.setText(QtGui.QApplication.translate("DigitalWindow", "Clock Loop Gain", None, QtGui.QApplication.UnicodeUTF8))
- self.gainPhaseLabel.setText(QtGui.QApplication.translate("DigitalWindow", "Phase Loop Gain", None, QtGui.QApplication.UnicodeUTF8))
- self.gainFreqLabel.setText(QtGui.QApplication.translate("DigitalWindow", "Freq. Loop Gain", None, QtGui.QApplication.UnicodeUTF8))
- self.rxPacketBox.setTitle(QtGui.QApplication.translate("DigitalWindow", "Received Packet Info", None, QtGui.QApplication.UnicodeUTF8))
- self.pktsRcvdLabel.setText(QtGui.QApplication.translate("DigitalWindow", "Packets Rcvd.", None, QtGui.QApplication.UnicodeUTF8))
- self.pktsCorrectLabel.setText(QtGui.QApplication.translate("DigitalWindow", "Packets Correct", None, QtGui.QApplication.UnicodeUTF8))
- self.perLabel.setText(QtGui.QApplication.translate("DigitalWindow", "PER", None, QtGui.QApplication.UnicodeUTF8))
- self.closeButton.setText(QtGui.QApplication.translate("DigitalWindow", "Close", None, QtGui.QApplication.UnicodeUTF8))
- self.menuFile.setTitle(QtGui.QApplication.translate("DigitalWindow", "&File", None, QtGui.QApplication.UnicodeUTF8))
- self.actionExit.setText(QtGui.QApplication.translate("DigitalWindow", "E&xit", None, QtGui.QApplication.UnicodeUTF8))
-
diff --git a/gnuradio-examples/python/digital/qt_rx_window2.ui b/gnuradio-examples/python/digital/qt_rx_window2.ui
deleted file mode 100644
index 745af8fb8..000000000
--- a/gnuradio-examples/python/digital/qt_rx_window2.ui
+++ /dev/null
@@ -1,354 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>DigitalWindow</class>
- <widget class="QMainWindow" name="DigitalWindow">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>1000</width>
- <height>523</height>
- </rect>
- </property>
- <property name="windowTitle">
- <string>MainWindow</string>
- </property>
- <widget class="QWidget" name="centralwidget">
- <layout class="QVBoxLayout" name="verticalLayout">
- <item>
- <layout class="QHBoxLayout" name="sinkLayout"/>
- </item>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout">
- <property name="sizeConstraint">
- <enum>QLayout::SetFixedSize</enum>
- </property>
- <item>
- <widget class="QGroupBox" name="rxBox">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize">
- <size>
- <width>250</width>
- <height>190</height>
- </size>
- </property>
- <property name="maximumSize">
- <size>
- <width>250</width>
- <height>250</height>
- </size>
- </property>
- <property name="title">
- <string>Receiver Parameters</string>
- </property>
- <layout class="QFormLayout" name="formLayout">
- <item row="0" column="0">
- <widget class="QLabel" name="freqLabel">
- <property name="text">
- <string>Frequency (Hz)</string>
- </property>
- </widget>
- </item>
- <item row="0" column="1">
- <widget class="QLineEdit" name="freqEdit"/>
- </item>
- <item row="1" column="0">
- <widget class="QLabel" name="gainLabel">
- <property name="text">
- <string>Gain (dB)</string>
- </property>
- </widget>
- </item>
- <item row="1" column="1">
- <widget class="QLineEdit" name="gainEdit"/>
- </item>
- <item row="2" column="0">
- <widget class="QLabel" name="decimLabel">
- <property name="text">
- <string>Decimation</string>
- </property>
- </widget>
- </item>
- <item row="2" column="1">
- <widget class="QLineEdit" name="decimEdit"/>
- </item>
- <item row="3" column="0">
- <widget class="QLabel" name="gainClockLabel">
- <property name="text">
- <string>Clock Loop Gain</string>
- </property>
- </widget>
- </item>
- <item row="3" column="1">
- <widget class="QLineEdit" name="gainClockEdit"/>
- </item>
- <item row="4" column="0">
- <widget class="QLabel" name="gainPhaseLabel">
- <property name="text">
- <string>Phase Loop Gain</string>
- </property>
- </widget>
- </item>
- <item row="4" column="1">
- <widget class="QLineEdit" name="gainPhaseEdit"/>
- </item>
- <item row="5" column="1">
- <widget class="QLineEdit" name="gainFreqEdit"/>
- </item>
- <item row="5" column="0">
- <widget class="QLabel" name="gainFreqLabel">
- <property name="text">
- <string>Freq. Loop Gain</string>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- </item>
- <item>
- <layout class="QVBoxLayout" name="verticalLayout_3">
- <item>
- <widget class="QGroupBox" name="rxPacketBox">
- <property name="enabled">
- <bool>true</bool>
- </property>
- <property name="sizePolicy">
- <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize">
- <size>
- <width>250</width>
- <height>130</height>
- </size>
- </property>
- <property name="maximumSize">
- <size>
- <width>250</width>
- <height>130</height>
- </size>
- </property>
- <property name="font">
- <font>
- <weight>50</weight>
- <bold>false</bold>
- </font>
- </property>
- <property name="title">
- <string>Received Packet Info</string>
- </property>
- <widget class="QLineEdit" name="pktsRcvdEdit">
- <property name="geometry">
- <rect>
- <x>120</x>
- <y>30</y>
- <width>113</width>
- <height>23</height>
- </rect>
- </property>
- </widget>
- <widget class="QLabel" name="pktsRcvdLabel">
- <property name="geometry">
- <rect>
- <x>10</x>
- <y>30</y>
- <width>111</width>
- <height>20</height>
- </rect>
- </property>
- <property name="text">
- <string>Packets Rcvd.</string>
- </property>
- </widget>
- <widget class="QLineEdit" name="pktsCorrectEdit">
- <property name="geometry">
- <rect>
- <x>120</x>
- <y>60</y>
- <width>113</width>
- <height>23</height>
- </rect>
- </property>
- </widget>
- <widget class="QLabel" name="pktsCorrectLabel">
- <property name="geometry">
- <rect>
- <x>10</x>
- <y>60</y>
- <width>111</width>
- <height>20</height>
- </rect>
- </property>
- <property name="text">
- <string>Packets Correct</string>
- </property>
- </widget>
- <widget class="QLabel" name="perLabel">
- <property name="geometry">
- <rect>
- <x>10</x>
- <y>90</y>
- <width>111</width>
- <height>20</height>
- </rect>
- </property>
- <property name="text">
- <string>PER</string>
- </property>
- </widget>
- <widget class="QLineEdit" name="perEdit">
- <property name="geometry">
- <rect>
- <x>120</x>
- <y>90</y>
- <width>113</width>
- <height>23</height>
- </rect>
- </property>
- </widget>
- </widget>
- </item>
- <item>
- <spacer name="verticalSpacer_2">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeType">
- <enum>QSizePolicy::Fixed</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>60</height>
- </size>
- </property>
- </spacer>
- </item>
- </layout>
- </item>
- <item>
- <spacer name="horizontalSpacer">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <layout class="QVBoxLayout" name="verticalLayout_5">
- <item>
- <spacer name="verticalSpacer_3">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>40</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="QPushButton" name="closeButton">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize">
- <size>
- <width>80</width>
- <height>30</height>
- </size>
- </property>
- <property name="maximumSize">
- <size>
- <width>80</width>
- <height>30</height>
- </size>
- </property>
- <property name="text">
- <string>Close</string>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- </layout>
- </item>
- </layout>
- </widget>
- <widget class="QMenuBar" name="menubar">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>1000</width>
- <height>23</height>
- </rect>
- </property>
- <widget class="QMenu" name="menuFile">
- <property name="title">
- <string>&amp;File</string>
- </property>
- <addaction name="actionExit"/>
- </widget>
- <addaction name="menuFile"/>
- </widget>
- <widget class="QStatusBar" name="statusbar"/>
- <action name="actionExit">
- <property name="text">
- <string>E&amp;xit</string>
- </property>
- </action>
- </widget>
- <resources/>
- <connections>
- <connection>
- <sender>actionExit</sender>
- <signal>triggered()</signal>
- <receiver>DigitalWindow</receiver>
- <slot>close()</slot>
- <hints>
- <hint type="sourcelabel">
- <x>-1</x>
- <y>-1</y>
- </hint>
- <hint type="destinationlabel">
- <x>617</x>
- <y>327</y>
- </hint>
- </hints>
- </connection>
- <connection>
- <sender>closeButton</sender>
- <signal>clicked()</signal>
- <receiver>DigitalWindow</receiver>
- <slot>close()</slot>
- <hints>
- <hint type="sourcelabel">
- <x>960</x>
- <y>694</y>
- </hint>
- <hint type="destinationlabel">
- <x>66</x>
- <y>561</y>
- </hint>
- </hints>
- </connection>
- </connections>
-</ui>
diff --git a/gnuradio-examples/python/digital/receive_path.py b/gnuradio-examples/python/digital/receive_path.py
deleted file mode 100644
index 0024d6941..000000000
--- a/gnuradio-examples/python/digital/receive_path.py
+++ /dev/null
@@ -1,138 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2005,2006,2007 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, blks2
-from gnuradio import eng_notation
-import copy
-import sys
-
-# /////////////////////////////////////////////////////////////////////////////
-# receive path
-# /////////////////////////////////////////////////////////////////////////////
-
-class receive_path(gr.hier_block2):
- def __init__(self, demod_class, rx_callback, options):
- gr.hier_block2.__init__(self, "receive_path",
- gr.io_signature(1, 1, gr.sizeof_gr_complex), # Input signature
- gr.io_signature(0, 0, 0)) # Output signature
-
-
- options = copy.copy(options) # make a copy so we can destructively modify
-
- self._verbose = options.verbose
- self._bitrate = options.bitrate # desired bit rate
- self._samples_per_symbol = options.samples_per_symbol # desired samples/symbol
-
- self._rx_callback = rx_callback # this callback is fired when there's a packet available
- self._demod_class = demod_class # the demodulator_class we're using
-
- # Get demod_kwargs
- demod_kwargs = self._demod_class.extract_kwargs_from_options(options)
-
- # Design filter to get actual channel we want
- sw_decim = 1
- chan_coeffs = gr.firdes.low_pass (1.0, # gain
- sw_decim * self._samples_per_symbol, # sampling rate
- 1.0, # midpoint of trans. band
- 0.5, # width of trans. band
- gr.firdes.WIN_HANN) # filter type
- self.channel_filter = gr.fft_filter_ccc(sw_decim, chan_coeffs)
-
- # receiver
- self.packet_receiver = \
- blks2.demod_pkts(self._demod_class(**demod_kwargs),
- access_code=None,
- callback=self._rx_callback,
- threshold=-1)
-
- # Carrier Sensing Blocks
- alpha = 0.001
- thresh = 30 # in dB, will have to adjust
- self.probe = gr.probe_avg_mag_sqrd_c(thresh,alpha)
-
- # Display some information about the setup
- if self._verbose:
- self._print_verbage()
-
- # connect block input to channel filter
- self.connect(self, self.channel_filter)
-
- # connect the channel input filter to the carrier power detector
- self.connect(self.channel_filter, self.probe)
-
- # connect channel filter to the packet receiver
- self.connect(self.channel_filter, self.packet_receiver)
-
- def bitrate(self):
- return self._bitrate
-
- def samples_per_symbol(self):
- return self._samples_per_symbol
-
- def carrier_sensed(self):
- """
- Return True if we think carrier is present.
- """
- #return self.probe.level() > X
- return self.probe.unmuted()
-
- def carrier_threshold(self):
- """
- Return current setting in dB.
- """
- return self.probe.threshold()
-
- def set_carrier_threshold(self, threshold_in_db):
- """
- Set carrier threshold.
-
- @param threshold_in_db: set detection threshold
- @type threshold_in_db: float (dB)
- """
- self.probe.set_threshold(threshold_in_db)
-
-
- def add_options(normal, expert):
- """
- Adds receiver-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("-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 files (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 receive path
- """
- print "\nReceive Path:"
- print "modulation: %s" % (self._demod_class.__name__)
- print "bitrate: %sb/s" % (eng_notation.num_to_str(self._bitrate))
- print "samples/symbol: %.4f" % (self._samples_per_symbol)
diff --git a/gnuradio-examples/python/digital/simple.py b/gnuradio-examples/python/digital/simple.py
deleted file mode 100644
index 6d340db36..000000000
--- a/gnuradio-examples/python/digital/simple.py
+++ /dev/null
@@ -1,64 +0,0 @@
-
-from gnuradio import gr, blks2, packet_utils
-
-# Some constants
-TX_AMPLITUDE = 0.25
-SAMPLE_RATE = 1e5
-# NOISE_VOLTAGE = 0.01
-NOISE_VOLTAGE = 0.01
-# FREQUENCY_OFFSET = 0
-FREQUENCY_OFFSET = 0.01
-TIMING_OFFSET = 1.0
-SAMPLES_PER_SYMBOL = 2
-GAIN = 1.0
-SW_DECIM = 1
-BAND_MIDPOINT = 1.0
-BAND_WIDTH = 0.5
-
-# Modulation/Demodulation methods
-modulator = blks2.dbpsk2_mod()
-demodulator = blks2.dbpsk2_demod()
-
-#Transmission Blocks
-packet_transmitter = blks2.mod_pkts(modulator, access_code=None, msgq_limit=4,
- pad_for_usrp=True)
-amp = gr.multiply_const_cc(TX_AMPLITUDE)
-throttle = gr.throttle(gr.sizeof_gr_complex, SAMPLE_RATE)
-# Channel
-channel = gr.channel_model(NOISE_VOLTAGE, FREQUENCY_OFFSET, TIMING_OFFSET)
-# Receiver Blocks
-chan_coeffs = gr.firdes.low_pass(GAIN, SW_DECIM * SAMPLES_PER_SYMBOL,
- BAND_MIDPOINT, BAND_WIDTH, gr.firdes.WIN_HANN)
-channel_filter = gr.fft_filter_ccc(SW_DECIM, chan_coeffs)
-packet_receiver = blks2.demod_pkts(demodulator, access_code=None, callback=None,
- threshold=-1)
-# Put it all together and start it up (although nothing will be done
-# until we send some packets).
-tb = gr.top_block()
-tb.connect(packet_transmitter, amp, throttle, channel, channel_filter,
- packet_receiver)
-tb.start()
-
-# The queue into which recieved packets are placed
-pkq = packet_receiver._rcvd_pktq
-
-# The function to create a packet and place it in a queue to be sent.
-sender = packet_transmitter.send_pkt
-
-# Some some packets (The second will not be recieved because it gets cut off
-# before it can finish. I think this occurs during modulation.)
-sender('hello there I wonder how long this needs to be before I start to see any errors.')
-sender('world')
-sender(eof=True)
-
-# Wait for all the packets to get sent and received.
-tb.wait()
-
-# Check how many messages have been received and print them.
-cnt = pkq.count()
-print('There are %s messages' % cnt)
-for a in range(0, cnt):
- msg = pkq.delete_head()
- ok, payload = packet_utils.unmake_packet(msg.to_string(), int(msg.arg1()))
- print("Message %s is %s" % (a, payload))
-
diff --git a/gnuradio-examples/python/digital/simple_qam.py b/gnuradio-examples/python/digital/simple_qam.py
deleted file mode 100644
index 947d7faad..000000000
--- a/gnuradio-examples/python/digital/simple_qam.py
+++ /dev/null
@@ -1,76 +0,0 @@
-
-from gnuradio import gr, blks2, packet_utils
-
-# Some constants
-NOISE_VOLTAGE = 0.1
-FREQUENCY_OFFSET = 0.0000
-TIMING_OFFSET = 1.0
-SAMPLES_PER_SYMBOL = 2
-GAIN = 1.0
-SW_DECIM = 1
-BAND_MIDPOINT = 1.0
-BAND_WIDTH = 0.5
-FREQ_ALPHA = 0.005
-EXCESS_BW = 0.35
-
-# Modulation/Demodulation methods
-modulator = blks2.qam_mod(16, SAMPLES_PER_SYMBOL)
-demodulator = blks2.qam_demod(16, SAMPLES_PER_SYMBOL, freq_alpha=FREQ_ALPHA)
-
-#Transmission Blocks
-packet_transmitter = blks2.mod_pkts(modulator, access_code=None, msgq_limit=4,
- pad_for_usrp=True)
-# Channel
-channel = gr.channel_model(NOISE_VOLTAGE, FREQUENCY_OFFSET, TIMING_OFFSET)
-# Receiver Blocks
-chan_coeffs = gr.firdes.low_pass(GAIN, SW_DECIM * SAMPLES_PER_SYMBOL,
- BAND_MIDPOINT, BAND_WIDTH, gr.firdes.WIN_HANN)
-channel_filter = gr.fft_filter_ccc(SW_DECIM, chan_coeffs)
-packet_receiver = blks2.demod_pkts(demodulator, access_code=None, callback=None,
- threshold=-1)
-# Put it all together and start it up (although nothing will be done
-# until we send some packets).
-tb = gr.top_block()
-tb.connect(packet_transmitter, channel, channel_filter,
- packet_receiver)
-tb.start()
-
-# The queue into which recieved packets are placed
-pkq = packet_receiver._rcvd_pktq
-
-# The function to create a packet and place it in a queue to be sent.
-sender = packet_transmitter.send_pkt
-
-# Some some packets (The second will not be recieved because it gets cut off
-# before it can finish. I think this occurs during modulation.)
-
-# Send some large messages to start off with to let things lock.
-for i in range(0, int(20.0/SAMPLES_PER_SYMBOL)):
- sender('a'*4000)
-
-sender('hello1')
-sender('hello2')
-sender('hello3')
-sender('hello4')
-sender('hello5')
-sender('hello6')
-sender('hello7')
-sender('hello8')
-sender('hello9')
-sender('hello10')
-sender('hello11')
-sender('hello12')
-sender('world')
-sender(eof=True)
-
-# Wait for all the packets to get sent and received.
-tb.wait()
-
-# Check how many messages have been received and print them.
-cnt = pkq.count()
-print('There are %s messages' % cnt)
-for a in range(0, cnt):
- msg = pkq.delete_head()
- ok, payload = packet_utils.unmake_packet(msg.to_string(), int(msg.arg1()))
- print("Message %s is %s" % (a, payload))
-
diff --git a/gnuradio-examples/python/digital/transmit_path.py b/gnuradio-examples/python/digital/transmit_path.py
deleted file mode 100644
index 86ebf75c3..000000000
--- a/gnuradio-examples/python/digital/transmit_path.py
+++ /dev/null
@@ -1,118 +0,0 @@
-#
-# Copyright 2005, 2006, 2007 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, blks2
-from gnuradio import eng_notation
-
-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 = \
- blks2.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)
-
diff --git a/gnuradio-examples/python/digital/tunnel.py b/gnuradio-examples/python/digital/tunnel.py
deleted file mode 100755
index b0af721da..000000000
--- a/gnuradio-examples/python/digital/tunnel.py
+++ /dev/null
@@ -1,287 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2005,2006,2009 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.
-#
-
-
-# /////////////////////////////////////////////////////////////////////////////
-#
-# This code sets up up a virtual ethernet interface (typically gr0),
-# and relays packets between the interface and the GNU Radio PHY+MAC
-#
-# What this means in plain language, is that if you've got a couple
-# of USRPs on different machines, and if you run this code on those
-# machines, you can talk between them using normal TCP/IP networking.
-#
-# /////////////////////////////////////////////////////////////////////////////
-
-
-from gnuradio import gr, gru, modulation_utils
-from gnuradio import usrp
-from gnuradio import eng_notation
-from gnuradio.eng_option import eng_option
-from optparse import OptionParser
-
-import random
-import time
-import struct
-import sys
-import os
-
-# from current dir
-import usrp_transmit_path
-import usrp_receive_path
-
-#print os.getpid()
-#raw_input('Attach and press enter')
-
-
-# /////////////////////////////////////////////////////////////////////////////
-#
-# Use the Universal TUN/TAP device driver to move packets to/from kernel
-#
-# See /usr/src/linux/Documentation/networking/tuntap.txt
-#
-# /////////////////////////////////////////////////////////////////////////////
-
-# Linux specific...
-# TUNSETIFF ifr flags from <linux/tun_if.h>
-
-IFF_TUN = 0x0001 # tunnel IP packets
-IFF_TAP = 0x0002 # tunnel ethernet frames
-IFF_NO_PI = 0x1000 # don't pass extra packet info
-IFF_ONE_QUEUE = 0x2000 # beats me ;)
-
-def open_tun_interface(tun_device_filename):
- from fcntl import ioctl
-
- mode = IFF_TAP | IFF_NO_PI
- TUNSETIFF = 0x400454ca
-
- tun = os.open(tun_device_filename, os.O_RDWR)
- ifs = ioctl(tun, TUNSETIFF, struct.pack("16sH", "gr%d", mode))
- ifname = ifs[:16].strip("\x00")
- return (tun, ifname)
-
-
-# /////////////////////////////////////////////////////////////////////////////
-# the flow graph
-# /////////////////////////////////////////////////////////////////////////////
-
-class my_top_block(gr.top_block):
-
- def __init__(self, mod_class, demod_class,
- rx_callback, options):
-
- gr.top_block.__init__(self)
- self.txpath = usrp_transmit_path.usrp_transmit_path(mod_class, options)
- self.rxpath = usrp_receive_path.usrp_receive_path(demod_class, rx_callback, options)
- self.connect(self.txpath)
- self.connect(self.rxpath)
-
- def send_pkt(self, payload='', eof=False):
- return self.txpath.send_pkt(payload, eof)
-
- def carrier_sensed(self):
- """
- Return True if the receive path thinks there's carrier
- """
- return self.rxpath.carrier_sensed()
-
-
-# /////////////////////////////////////////////////////////////////////////////
-# Carrier Sense MAC
-# /////////////////////////////////////////////////////////////////////////////
-
-class cs_mac(object):
- """
- Prototype carrier sense MAC
-
- Reads packets from the TUN/TAP interface, and sends them to the PHY.
- Receives packets from the PHY via phy_rx_callback, and sends them
- into the TUN/TAP interface.
-
- Of course, we're not restricted to getting packets via TUN/TAP, this
- is just an example.
- """
- def __init__(self, tun_fd, verbose=False):
- self.tun_fd = tun_fd # file descriptor for TUN/TAP interface
- self.verbose = verbose
- self.tb = None # top block (access to PHY)
-
- def set_top_block(self, tb):
- self.tb = tb
-
- def phy_rx_callback(self, ok, payload):
- """
- Invoked by thread associated with PHY to pass received packet up.
-
- @param ok: bool indicating whether payload CRC was OK
- @param payload: contents of the packet (string)
- """
- if self.verbose:
- print "Rx: ok = %r len(payload) = %4d" % (ok, len(payload))
- if ok:
- os.write(self.tun_fd, payload)
-
- def main_loop(self):
- """
- Main loop for MAC.
- Only returns if we get an error reading from TUN.
-
- FIXME: may want to check for EINTR and EAGAIN and reissue read
- """
- min_delay = 0.001 # seconds
-
- while 1:
- payload = os.read(self.tun_fd, 10*1024)
- if not payload:
- self.tb.send_pkt(eof=True)
- break
-
- if self.verbose:
- print "Tx: len(payload) = %4d" % (len(payload),)
-
- delay = min_delay
- while self.tb.carrier_sensed():
- sys.stderr.write('B')
- time.sleep(delay)
- if delay < 0.050:
- delay = delay * 2 # exponential back-off
-
- self.tb.send_pkt(payload)
-
-
-# /////////////////////////////////////////////////////////////////////////////
-# main
-# /////////////////////////////////////////////////////////////////////////////
-
-def main():
-
- mods = modulation_utils.type_1_mods()
- demods = modulation_utils.type_1_demods()
-
- parser = OptionParser (option_class=eng_option, conflict_handler="resolve")
- expert_grp = parser.add_option_group("Expert")
- expert_grp.add_option("", "--rx-freq", type="eng_float", default=None,
- help="set Rx frequency to FREQ [default=%default]", metavar="FREQ")
- expert_grp.add_option("", "--tx-freq", type="eng_float", default=None,
- help="set transmit frequency to FREQ [default=%default]", metavar="FREQ")
- parser.add_option("-m", "--modulation", type="choice", choices=mods.keys(),
- default='gmsk',
- help="Select modulation from: %s [default=%%default]"
- % (', '.join(mods.keys()),))
-
- parser.add_option("-v","--verbose", action="store_true", default=False)
- expert_grp.add_option("-c", "--carrier-threshold", type="eng_float", default=30,
- help="set carrier detect threshold (dB) [default=%default]")
- expert_grp.add_option("","--tun-device-filename", default="/dev/net/tun",
- help="path to tun device file [default=%default]")
-
- usrp_transmit_path.add_options(parser, expert_grp)
- usrp_receive_path.add_options(parser, expert_grp)
-
- for mod in mods.values():
- mod.add_options(expert_grp)
-
- for demod in demods.values():
- demod.add_options(expert_grp)
-
- (options, args) = parser.parse_args ()
- if len(args) != 0:
- parser.print_help(sys.stderr)
- sys.exit(1)
-
- # open the TUN/TAP interface
- (tun_fd, tun_ifname) = open_tun_interface(options.tun_device_filename)
-
- # Attempt to enable realtime scheduling
- r = gr.enable_realtime_scheduling()
- if r == gr.RT_OK:
- realtime = True
- else:
- realtime = False
- print "Note: failed to enable realtime scheduling"
-
-
- # If the user hasn't set the fusb_* parameters on the command line,
- # pick some values that will reduce latency.
-
- if options.fusb_block_size == 0 and options.fusb_nblocks == 0:
- if realtime: # be more aggressive
- options.fusb_block_size = gr.prefs().get_long('fusb', 'rt_block_size', 1024)
- options.fusb_nblocks = gr.prefs().get_long('fusb', 'rt_nblocks', 16)
- else:
- options.fusb_block_size = gr.prefs().get_long('fusb', 'block_size', 4096)
- options.fusb_nblocks = gr.prefs().get_long('fusb', 'nblocks', 16)
-
- #print "fusb_block_size =", options.fusb_block_size
- #print "fusb_nblocks =", options.fusb_nblocks
-
- # instantiate the MAC
- mac = cs_mac(tun_fd, verbose=True)
-
-
- # build the graph (PHY)
- tb = my_top_block(mods[options.modulation],
- demods[options.modulation],
- mac.phy_rx_callback,
- options)
-
- mac.set_top_block(tb) # give the MAC a handle for the PHY
-
- if tb.txpath.bitrate() != tb.rxpath.bitrate():
- print "WARNING: Transmit bitrate = %sb/sec, Receive bitrate = %sb/sec" % (
- eng_notation.num_to_str(tb.txpath.bitrate()),
- eng_notation.num_to_str(tb.rxpath.bitrate()))
-
- print "modulation: %s" % (options.modulation,)
- print "freq: %s" % (eng_notation.num_to_str(options.tx_freq))
- print "bitrate: %sb/sec" % (eng_notation.num_to_str(tb.txpath.bitrate()),)
- print "samples/symbol: %3d" % (tb.txpath.samples_per_symbol(),)
- #print "interp: %3d" % (tb.txpath.interp(),)
- #print "decim: %3d" % (tb.rxpath.decim(),)
-
- tb.rxpath.set_carrier_threshold(options.carrier_threshold)
- print "Carrier sense threshold:", options.carrier_threshold, "dB"
-
- print
- print "Allocated virtual ethernet interface: %s" % (tun_ifname,)
- print "You must now use ifconfig to set its IP address. E.g.,"
- print
- print " $ sudo ifconfig %s 192.168.200.1" % (tun_ifname,)
- print
- print "Be sure to use a different address in the same subnet for each machine."
- print
-
-
- tb.start() # Start executing the flow graph (runs in separate threads)
-
- mac.main_loop() # don't expect this to return...
-
- tb.stop() # but if it does, tell flow graph to stop.
- tb.wait() # wait for it to finish
-
-
-if __name__ == '__main__':
- try:
- main()
- except KeyboardInterrupt:
- pass
diff --git a/gnuradio-examples/python/digital/usrp_receive_path.py b/gnuradio-examples/python/digital/usrp_receive_path.py
deleted file mode 100644
index a8f16e28a..000000000
--- a/gnuradio-examples/python/digital/usrp_receive_path.py
+++ /dev/null
@@ -1,96 +0,0 @@
-#
-# Copyright 2009 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
-from gnuradio import usrp_options
-import receive_path
-from pick_bitrate import pick_rx_bitrate
-from gnuradio import eng_notation
-
-def add_freq_option(parser):
- """
- Hackery that has the -f / --freq option set both tx_freq and rx_freq
- """
- def freq_callback(option, opt_str, value, parser):
- parser.values.rx_freq = value
- parser.values.tx_freq = value
-
- if not parser.has_option('--freq'):
- parser.add_option('-f', '--freq', type="eng_float",
- action="callback", callback=freq_callback,
- help="set Tx and/or Rx frequency to FREQ [default=%default]",
- metavar="FREQ")
-
-def add_options(parser, expert):
- add_freq_option(parser)
- usrp_options.add_rx_options(parser)
- receive_path.receive_path.add_options(parser, expert)
- expert.add_option("", "--rx-freq", type="eng_float", default=None,
- help="set Rx frequency to FREQ [default=%default]", metavar="FREQ")
- parser.add_option("-v", "--verbose", action="store_true", default=False)
-
-class usrp_receive_path(gr.hier_block2):
-
- def __init__(self, demod_class, rx_callback, options):
- '''
- See below for what options should hold
- '''
- gr.hier_block2.__init__(self, "usrp_receive_path",
- gr.io_signature(0, 0, 0), # Input signature
- gr.io_signature(0, 0, 0)) # Output signature
- if options.rx_freq is None:
- sys.stderr.write("-f FREQ or --freq FREQ or --rx-freq FREQ must be specified\n")
- raise SystemExit
-
- #setup usrp
- self._demod_class = demod_class
- self._setup_usrp_source(options)
-
- rx_path = receive_path.receive_path(demod_class, rx_callback, options)
- for attr in dir(rx_path): #forward the methods
- if not attr.startswith('_') and not hasattr(self, attr):
- setattr(self, attr, getattr(rx_path, attr))
-
- #connect
- self.connect(self.u, rx_path)
-
- def _setup_usrp_source(self, options):
- self.u = usrp_options.create_usrp_source(options)
- adc_rate = self.u.adc_rate()
- self.rs_rate = options.bitrate
-
- (self._bitrate, self._samples_per_symbol, self._decim) = \
- pick_rx_bitrate(options.bitrate, self._demod_class.bits_per_symbol(), \
- options.samples_per_symbol, options.decim,
- adc_rate, self.u.get_decim_rates())
-
- if options.verbose:
- print 'USRP Source:', self.u
- print 'Decimation: ', self._decim
-
- options.samples_per_symbol = self._samples_per_symbol
- options.decim = self._decim
-
- self.u.set_decim(self._decim)
-
- if not self.u.set_center_freq(options.rx_freq):
- print "Failed to set Rx frequency to %s" % (eng_notation.num_to_str(options.rx_freq))
- raise ValueError, eng_notation.num_to_str(options.rx_freq)
diff --git a/gnuradio-examples/python/digital/usrp_receive_path2.py b/gnuradio-examples/python/digital/usrp_receive_path2.py
deleted file mode 100644
index d20017204..000000000
--- a/gnuradio-examples/python/digital/usrp_receive_path2.py
+++ /dev/null
@@ -1,96 +0,0 @@
-#
-# Copyright 2010 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
-from gnuradio import usrp_options
-import receive_path
-from pick_bitrate2 import pick_rx_bitrate
-from gnuradio import eng_notation
-
-def add_freq_option(parser):
- """
- Hackery that has the -f / --freq option set both tx_freq and rx_freq
- """
- def freq_callback(option, opt_str, value, parser):
- parser.values.rx_freq = value
- parser.values.tx_freq = value
-
- if not parser.has_option('--freq'):
- parser.add_option('-f', '--freq', type="eng_float",
- action="callback", callback=freq_callback,
- help="set Tx and/or Rx frequency to FREQ [default=%default]",
- metavar="FREQ")
-
-def add_options(parser, expert):
- add_freq_option(parser)
- usrp_options.add_rx_options(parser)
- receive_path.receive_path.add_options(parser, expert)
- expert.add_option("", "--rx-freq", type="eng_float", default=None,
- help="set Rx frequency to FREQ [default=%default]", metavar="FREQ")
- parser.add_option("-v", "--verbose", action="store_true", default=False)
-
-class usrp_receive_path(gr.hier_block2):
-
- def __init__(self, demod_class, rx_callback, options):
- '''
- See below for what options should hold
- '''
- gr.hier_block2.__init__(self, "usrp_receive_path",
- gr.io_signature(0, 0, 0), # Input signature
- gr.io_signature(0, 0, 0)) # Output signature
- if options.rx_freq is None:
- sys.stderr.write("-f FREQ or --freq FREQ or --rx-freq FREQ must be specified\n")
- raise SystemExit
-
- #setup usrp
- self._demod_class = demod_class
- self._setup_usrp_source(options)
-
- rx_path = receive_path.receive_path(demod_class, rx_callback, options)
- for attr in dir(rx_path): #forward the methods
- if not attr.startswith('_') and not hasattr(self, attr):
- setattr(self, attr, getattr(rx_path, attr))
-
- #connect
- self.connect(self.u, rx_path)
-
- def _setup_usrp_source(self, options):
- self.u = usrp_options.create_usrp_source(options)
- adc_rate = self.u.adc_rate()
- self.rs_rate = options.bitrate
-
- (self._bitrate, self._samples_per_symbol, self._decim) = \
- pick_rx_bitrate(options.bitrate, self._demod_class.bits_per_symbol(), \
- options.samples_per_symbol, options.decim,
- adc_rate, self.u.get_decim_rates())
-
- if options.verbose:
- print 'USRP Source:', self.u
- print 'Decimation: ', self._decim
-
- options.samples_per_symbol = self._samples_per_symbol
- options.decim = self._decim
-
- self.u.set_decim(self._decim)
-
- if not self.u.set_center_freq(options.rx_freq):
- print "Failed to set Rx frequency to %s" % (eng_notation.num_to_str(options.rx_freq))
- raise ValueError, eng_notation.num_to_str(options.rx_freq)
diff --git a/gnuradio-examples/python/digital/usrp_transmit_path.py b/gnuradio-examples/python/digital/usrp_transmit_path.py
deleted file mode 100644
index f0f467599..000000000
--- a/gnuradio-examples/python/digital/usrp_transmit_path.py
+++ /dev/null
@@ -1,101 +0,0 @@
-#
-# Copyright 2009 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
-from gnuradio import usrp_options
-import transmit_path
-from pick_bitrate import pick_tx_bitrate
-from gnuradio import eng_notation
-
-def add_freq_option(parser):
- """
- Hackery that has the -f / --freq option set both tx_freq and rx_freq
- """
- def freq_callback(option, opt_str, value, parser):
- parser.values.rx_freq = value
- parser.values.tx_freq = value
-
- if not parser.has_option('--freq'):
- parser.add_option('-f', '--freq', type="eng_float",
- action="callback", callback=freq_callback,
- help="set Tx and/or Rx frequency to FREQ [default=%default]",
- metavar="FREQ")
-
-def add_options(parser, expert):
- add_freq_option(parser)
- usrp_options.add_tx_options(parser)
- transmit_path.transmit_path.add_options(parser, expert)
- expert.add_option("", "--tx-freq", type="eng_float", default=None,
- help="set transmit frequency to FREQ [default=%default]", metavar="FREQ")
- parser.add_option("-v", "--verbose", action="store_true", default=False)
-
-class usrp_transmit_path(gr.hier_block2):
- def __init__(self, modulator_class, options):
- '''
- See below for what options should hold
- '''
- gr.hier_block2.__init__(self, "usrp_transmit_path",
- gr.io_signature(0, 0, 0), # Input signature
- gr.io_signature(0, 0, 0)) # Output signature
- if options.tx_freq is None:
- sys.stderr.write("-f FREQ or --freq FREQ or --tx-freq FREQ must be specified\n")
- raise SystemExit
-
- #setup usrp
- self._modulator_class = modulator_class
- self._setup_usrp_sink(options)
-
- tx_path = transmit_path.transmit_path(modulator_class, options)
- for attr in dir(tx_path): #forward the methods
- if not attr.startswith('_') and not hasattr(self, attr):
- setattr(self, attr, getattr(tx_path, attr))
-
- #connect
- self.connect(tx_path, self.u)
-
- def _setup_usrp_sink(self, options):
- """
- Creates a USRP sink, determines the settings for best bitrate,
- and attaches to the transmitter's subdevice.
- """
- self.u = usrp_options.create_usrp_sink(options)
- dac_rate = self.u.dac_rate()
- self.rs_rate = options.bitrate # Store requested bit rate
-
- (self._bitrate, self._samples_per_symbol, self._interp) = \
- pick_tx_bitrate(options.bitrate, self._modulator_class.bits_per_symbol(),
- options.samples_per_symbol, options.interp,
- dac_rate, self.u.get_interp_rates())
-
- options.interp = self._interp
- options.samples_per_symbol = self._samples_per_symbol
- options.bitrate = self._bitrate
-
- if options.verbose:
- print 'USRP Sink:', self.u
- print "Interpolation Rate: ", self._interp
-
- self.u.set_interp(self._interp)
- self.u.set_auto_tr(True)
-
- if not self.u.set_center_freq(options.tx_freq):
- print "Failed to set Rx frequency to %s" % (eng_notation.num_to_str(options.tx_freq))
- raise ValueError, eng_notation.num_to_str(options.tx_freq)
diff --git a/gnuradio-examples/python/digital/usrp_transmit_path2.py b/gnuradio-examples/python/digital/usrp_transmit_path2.py
deleted file mode 100644
index 54930e5a0..000000000
--- a/gnuradio-examples/python/digital/usrp_transmit_path2.py
+++ /dev/null
@@ -1,101 +0,0 @@
-#
-# Copyright 2010 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
-from gnuradio import usrp_options
-import transmit_path
-from pick_bitrate2 import pick_tx_bitrate
-from gnuradio import eng_notation
-
-def add_freq_option(parser):
- """
- Hackery that has the -f / --freq option set both tx_freq and rx_freq
- """
- def freq_callback(option, opt_str, value, parser):
- parser.values.rx_freq = value
- parser.values.tx_freq = value
-
- if not parser.has_option('--freq'):
- parser.add_option('-f', '--freq', type="eng_float",
- action="callback", callback=freq_callback,
- help="set Tx and/or Rx frequency to FREQ [default=%default]",
- metavar="FREQ")
-
-def add_options(parser, expert):
- add_freq_option(parser)
- usrp_options.add_tx_options(parser)
- transmit_path.transmit_path.add_options(parser, expert)
- expert.add_option("", "--tx-freq", type="eng_float", default=None,
- help="set transmit frequency to FREQ [default=%default]", metavar="FREQ")
- parser.add_option("-v", "--verbose", action="store_true", default=False)
-
-class usrp_transmit_path(gr.hier_block2):
- def __init__(self, modulator_class, options):
- '''
- See below for what options should hold
- '''
- gr.hier_block2.__init__(self, "usrp_transmit_path",
- gr.io_signature(0, 0, 0), # Input signature
- gr.io_signature(0, 0, 0)) # Output signature
- if options.tx_freq is None:
- sys.stderr.write("-f FREQ or --freq FREQ or --tx-freq FREQ must be specified\n")
- raise SystemExit
-
- #setup usrp
- self._modulator_class = modulator_class
- self._setup_usrp_sink(options)
-
- tx_path = transmit_path.transmit_path(modulator_class, options)
- for attr in dir(tx_path): #forward the methods
- if not attr.startswith('_') and not hasattr(self, attr):
- setattr(self, attr, getattr(tx_path, attr))
-
- #connect
- self.connect(tx_path, self.u)
-
- def _setup_usrp_sink(self, options):
- """
- Creates a USRP sink, determines the settings for best bitrate,
- and attaches to the transmitter's subdevice.
- """
- self.u = usrp_options.create_usrp_sink(options)
- dac_rate = self.u.dac_rate()
- self.rs_rate = options.bitrate # Store requested bit rate
-
- (self._bitrate, self._samples_per_symbol, self._interp) = \
- pick_tx_bitrate(options.bitrate, self._modulator_class.bits_per_symbol(),
- options.samples_per_symbol, options.interp,
- dac_rate, self.u.get_interp_rates())
-
- options.interp = self._interp
- options.samples_per_symbol = self._samples_per_symbol
- options.bitrate = self._bitrate
-
- if options.verbose:
- print 'USRP Sink:', self.u
- print "Interpolation Rate: ", self._interp
-
- self.u.set_interp(self._interp)
- self.u.set_auto_tr(True)
-
- if not self.u.set_center_freq(options.tx_freq):
- print "Failed to set Rx frequency to %s" % (eng_notation.num_to_str(options.tx_freq))
- raise ValueError, eng_notation.num_to_str(options.tx_freq)