summaryrefslogtreecommitdiff
path: root/gnuradio-examples/python
diff options
context:
space:
mode:
Diffstat (limited to 'gnuradio-examples/python')
-rwxr-xr-xgnuradio-examples/python/digital/benchmark_qt_loopback2.py25
-rw-r--r--gnuradio-examples/python/digital/simple.py64
-rw-r--r--gnuradio-examples/python/digital/simple_qam.py76
3 files changed, 161 insertions, 4 deletions
diff --git a/gnuradio-examples/python/digital/benchmark_qt_loopback2.py b/gnuradio-examples/python/digital/benchmark_qt_loopback2.py
index 02ae4b25f..a36f4fbd4 100755
--- a/gnuradio-examples/python/digital/benchmark_qt_loopback2.py
+++ b/gnuradio-examples/python/digital/benchmark_qt_loopback2.py
@@ -20,11 +20,11 @@
# Boston, MA 02110-1301, USA.
#
-from gnuradio import gr, gru, modulation_utils2
+from gnuradio import gr, modulation_utils2
from gnuradio import eng_notation
from gnuradio.eng_option import eng_option
from optparse import OptionParser
-import random, time, struct, sys, os, math
+import struct, sys, math
from threading import Thread
@@ -319,6 +319,13 @@ class my_top_block(gr.top_block):
# Connect components
self.connect(self.txpath, self.throttle, self.rxpath)
+ if options.verbose:
+ self._print_verbage()
+
+ if options.log:
+ self._setup_logging()
+
+
# System Parameters
@@ -396,6 +403,15 @@ class my_top_block(gr.top_block):
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
@@ -466,7 +482,7 @@ def main():
channel_grp = parser.add_option_group("Channel")
parser.add_option("-m", "--modulation", type="choice", choices=mods.keys(),
- default='dbpsk2',
+ default='psk',
help="Select modulation from: %s [default=%%default]"
% (', '.join(mods.keys()),))
@@ -512,6 +528,7 @@ def main():
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)
@@ -527,7 +544,7 @@ def main():
packet_sender.join(1)
except KeyboardInterrupt:
packet_sender.stop()
-
+
if __name__ == '__main__':
try:
diff --git a/gnuradio-examples/python/digital/simple.py b/gnuradio-examples/python/digital/simple.py
new file mode 100644
index 000000000..6d340db36
--- /dev/null
+++ b/gnuradio-examples/python/digital/simple.py
@@ -0,0 +1,64 @@
+
+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
new file mode 100644
index 000000000..947d7faad
--- /dev/null
+++ b/gnuradio-examples/python/digital/simple_qam.py
@@ -0,0 +1,76 @@
+
+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))
+