From faab807cf5e8b4a4c950d1fd8ae6672296fb1ad9 Mon Sep 17 00:00:00 2001
From: Tom Rondeau
Date: Tue, 3 Apr 2012 18:21:52 -0400
Subject: Rework example directories. Gets rid of gnuradio-examples, moves
these to more appropriate components.
gnuradio-core and grc now have their own examples directories for files directly related to them.
---
CMakeLists.txt | 1 -
gnuradio-core/CMakeLists.txt | 1 +
gnuradio-core/src/examples/CMakeLists.txt | 24 +
gnuradio-core/src/examples/mp-sched/CMakeLists.txt | 35 +
gnuradio-core/src/examples/mp-sched/README | 2 +
.../src/examples/mp-sched/perf-data/core-duo.dat | 65 +
.../src/examples/mp-sched/perf-data/core2-duo.dat | 65 +
.../perf-data/dual-quad-core-2.33-clovertown.dat | 257 +++
.../perf-data/dual-quad-core-3.00-penryn.dat | 257 +++
.../examples/mp-sched/perf-data/js21-altivec.dat | 65 +
.../src/examples/mp-sched/perf-data/js21.dat | 65 +
.../examples/mp-sched/perf-data/ps3-altivec.dat | 65 +
.../src/examples/mp-sched/perf-data/ps3.dat | 65 +
.../examples/mp-sched/perf-data/qs21-altivec.dat | 65 +
.../src/examples/mp-sched/perf-data/qs21.dat | 65 +
gnuradio-core/src/examples/mp-sched/plot_flops.py | 98 ++
.../src/examples/mp-sched/run_synthetic.py | 101 ++
gnuradio-core/src/examples/mp-sched/synthetic.py | 118 ++
.../src/examples/mp-sched/wfm_rcv_pll_to_wav.py | 127 ++
gnuradio-core/src/examples/network/CMakeLists.txt | 30 +
gnuradio-core/src/examples/network/audio_sink.py | 72 +
gnuradio-core/src/examples/network/audio_source.py | 69 +
.../src/examples/network/dial_tone_sink.py | 65 +
.../src/examples/network/dial_tone_source.py | 70 +
gnuradio-core/src/examples/network/vector_sink.py | 64 +
.../src/examples/network/vector_source.py | 60 +
gnuradio-core/src/examples/pfb/CMakeLists.txt | 36 +
gnuradio-core/src/examples/pfb/channelize.py | 191 +++
gnuradio-core/src/examples/pfb/chirp_channelize.py | 203 +++
gnuradio-core/src/examples/pfb/decimate.py | 178 ++
gnuradio-core/src/examples/pfb/fmtest.py | 225 +++
gnuradio-core/src/examples/pfb/interpolate.py | 233 +++
gnuradio-core/src/examples/pfb/reconstruction.py | 131 ++
gnuradio-core/src/examples/pfb/resampler.py | 127 ++
gnuradio-core/src/examples/pfb/resampler_demo.grc | 598 +++++++
gnuradio-core/src/examples/pfb/synth_filter.py | 83 +
gnuradio-core/src/examples/pfb/synth_to_chan.py | 117 ++
gnuradio-core/src/examples/tags/CMakeLists.txt | 28 +
gnuradio-core/src/examples/tags/test_file_tags.py | 55 +
.../src/examples/tags/uhd_burst_detector.py | 116 ++
.../src/examples/volk_benchmark/CMakeLists.txt | 35 +
gnuradio-core/src/examples/volk_benchmark/README | 252 +++
.../src/examples/volk_benchmark/volk_math.py | 151 ++
.../src/examples/volk_benchmark/volk_plot.py | 169 ++
.../src/examples/volk_benchmark/volk_test_funcs.py | 171 ++
.../src/examples/volk_benchmark/volk_types.py | 182 ++
gnuradio-examples/CMakeLists.txt | 62 -
gnuradio-examples/grc/CMakeLists.txt | 50 -
gnuradio-examples/grc/demod/digital_freq_lock.grc | 1321 ---------------
gnuradio-examples/grc/demod/mpsk_demod.grc | 586 -------
gnuradio-examples/grc/demod/pam_sync.grc | 1744 --------------------
gnuradio-examples/grc/demod/pam_timing.grc | 1388 ----------------
gnuradio-examples/grc/simple/ber_simulation.grc | 564 -------
gnuradio-examples/grc/simple/dpsk_loopback.grc | 450 -----
gnuradio-examples/grc/simple/variable_config.grc | 329 ----
gnuradio-examples/grc/xmlrpc/readme.txt | 18 -
gnuradio-examples/grc/xmlrpc/xmlrpc_client.grc | 312 ----
.../grc/xmlrpc/xmlrpc_client_script.py | 23 -
gnuradio-examples/grc/xmlrpc/xmlrpc_server.grc | 384 -----
gnuradio-examples/python/CMakeLists.txt | 23 -
gnuradio-examples/python/mp-sched/CMakeLists.txt | 35 -
gnuradio-examples/python/mp-sched/README | 2 -
.../python/mp-sched/perf-data/core-duo.dat | 65 -
.../python/mp-sched/perf-data/core2-duo.dat | 65 -
.../perf-data/dual-quad-core-2.33-clovertown.dat | 257 ---
.../perf-data/dual-quad-core-3.00-penryn.dat | 257 ---
.../python/mp-sched/perf-data/js21-altivec.dat | 65 -
.../python/mp-sched/perf-data/js21.dat | 65 -
.../python/mp-sched/perf-data/ps3-altivec.dat | 65 -
.../python/mp-sched/perf-data/ps3.dat | 65 -
.../python/mp-sched/perf-data/qs21-altivec.dat | 65 -
.../python/mp-sched/perf-data/qs21.dat | 65 -
gnuradio-examples/python/mp-sched/plot_flops.py | 98 --
gnuradio-examples/python/mp-sched/run_synthetic.py | 101 --
gnuradio-examples/python/mp-sched/synthetic.py | 118 --
.../python/mp-sched/wfm_rcv_pll_to_wav.py | 127 --
gnuradio-examples/python/network/CMakeLists.txt | 30 -
gnuradio-examples/python/network/audio_sink.py | 65 -
gnuradio-examples/python/network/audio_source.py | 62 -
gnuradio-examples/python/network/dial_tone_sink.py | 65 -
.../python/network/dial_tone_source.py | 70 -
gnuradio-examples/python/network/vector_sink.py | 64 -
gnuradio-examples/python/network/vector_source.py | 60 -
gnuradio-examples/python/pfb/CMakeLists.txt | 36 -
gnuradio-examples/python/pfb/channelize.py | 191 ---
gnuradio-examples/python/pfb/chirp_channelize.py | 203 ---
gnuradio-examples/python/pfb/decimate.py | 178 --
gnuradio-examples/python/pfb/fmtest.py | 225 ---
gnuradio-examples/python/pfb/interpolate.py | 233 ---
gnuradio-examples/python/pfb/reconstruction.py | 131 --
gnuradio-examples/python/pfb/resampler.py | 127 --
gnuradio-examples/python/pfb/resampler_demo.grc | 598 -------
gnuradio-examples/python/pfb/synth_filter.py | 83 -
gnuradio-examples/python/pfb/synth_to_chan.py | 117 --
gnuradio-examples/python/tags/CMakeLists.txt | 28 -
gnuradio-examples/python/tags/test_file_tags.py | 55 -
.../python/tags/uhd_burst_detector.py | 116 --
gnuradio-examples/python/volk_benchmark/README | 252 ---
.../python/volk_benchmark/volk_math.py | 151 --
.../python/volk_benchmark/volk_plot.py | 169 --
.../python/volk_benchmark/volk_test_funcs.py | 171 --
.../python/volk_benchmark/volk_types.py | 182 --
gr-digital/examples/CMakeLists.txt | 16 +
gr-digital/examples/demod/ber_simulation.grc | 651 ++++++++
gr-digital/examples/demod/digital_freq_lock.grc | 1321 +++++++++++++++
gr-digital/examples/demod/dpsk_loopback.grc | 502 ++++++
gr-digital/examples/demod/mpsk_demod.grc | 598 +++++++
gr-digital/examples/demod/pam_sync.grc | 1744 ++++++++++++++++++++
gr-digital/examples/demod/pam_timing.grc | 1388 ++++++++++++++++
grc/CMakeLists.txt | 1 +
grc/examples/CMakeLists.txt | 37 +
grc/examples/simple/variable_config.grc | 329 ++++
grc/examples/xmlrpc/readme.txt | 18 +
grc/examples/xmlrpc/xmlrpc_client.grc | 312 ++++
grc/examples/xmlrpc/xmlrpc_client_script.py | 23 +
grc/examples/xmlrpc/xmlrpc_server.grc | 384 +++++
116 files changed, 12575 insertions(+), 12432 deletions(-)
create mode 100644 gnuradio-core/src/examples/CMakeLists.txt
create mode 100644 gnuradio-core/src/examples/mp-sched/CMakeLists.txt
create mode 100644 gnuradio-core/src/examples/mp-sched/README
create mode 100644 gnuradio-core/src/examples/mp-sched/perf-data/core-duo.dat
create mode 100644 gnuradio-core/src/examples/mp-sched/perf-data/core2-duo.dat
create mode 100644 gnuradio-core/src/examples/mp-sched/perf-data/dual-quad-core-2.33-clovertown.dat
create mode 100644 gnuradio-core/src/examples/mp-sched/perf-data/dual-quad-core-3.00-penryn.dat
create mode 100644 gnuradio-core/src/examples/mp-sched/perf-data/js21-altivec.dat
create mode 100644 gnuradio-core/src/examples/mp-sched/perf-data/js21.dat
create mode 100644 gnuradio-core/src/examples/mp-sched/perf-data/ps3-altivec.dat
create mode 100644 gnuradio-core/src/examples/mp-sched/perf-data/ps3.dat
create mode 100644 gnuradio-core/src/examples/mp-sched/perf-data/qs21-altivec.dat
create mode 100644 gnuradio-core/src/examples/mp-sched/perf-data/qs21.dat
create mode 100755 gnuradio-core/src/examples/mp-sched/plot_flops.py
create mode 100755 gnuradio-core/src/examples/mp-sched/run_synthetic.py
create mode 100755 gnuradio-core/src/examples/mp-sched/synthetic.py
create mode 100755 gnuradio-core/src/examples/mp-sched/wfm_rcv_pll_to_wav.py
create mode 100644 gnuradio-core/src/examples/network/CMakeLists.txt
create mode 100755 gnuradio-core/src/examples/network/audio_sink.py
create mode 100755 gnuradio-core/src/examples/network/audio_source.py
create mode 100755 gnuradio-core/src/examples/network/dial_tone_sink.py
create mode 100755 gnuradio-core/src/examples/network/dial_tone_source.py
create mode 100755 gnuradio-core/src/examples/network/vector_sink.py
create mode 100755 gnuradio-core/src/examples/network/vector_source.py
create mode 100644 gnuradio-core/src/examples/pfb/CMakeLists.txt
create mode 100755 gnuradio-core/src/examples/pfb/channelize.py
create mode 100755 gnuradio-core/src/examples/pfb/chirp_channelize.py
create mode 100755 gnuradio-core/src/examples/pfb/decimate.py
create mode 100755 gnuradio-core/src/examples/pfb/fmtest.py
create mode 100755 gnuradio-core/src/examples/pfb/interpolate.py
create mode 100755 gnuradio-core/src/examples/pfb/reconstruction.py
create mode 100755 gnuradio-core/src/examples/pfb/resampler.py
create mode 100644 gnuradio-core/src/examples/pfb/resampler_demo.grc
create mode 100755 gnuradio-core/src/examples/pfb/synth_filter.py
create mode 100755 gnuradio-core/src/examples/pfb/synth_to_chan.py
create mode 100644 gnuradio-core/src/examples/tags/CMakeLists.txt
create mode 100755 gnuradio-core/src/examples/tags/test_file_tags.py
create mode 100755 gnuradio-core/src/examples/tags/uhd_burst_detector.py
create mode 100644 gnuradio-core/src/examples/volk_benchmark/CMakeLists.txt
create mode 100644 gnuradio-core/src/examples/volk_benchmark/README
create mode 100755 gnuradio-core/src/examples/volk_benchmark/volk_math.py
create mode 100755 gnuradio-core/src/examples/volk_benchmark/volk_plot.py
create mode 100644 gnuradio-core/src/examples/volk_benchmark/volk_test_funcs.py
create mode 100755 gnuradio-core/src/examples/volk_benchmark/volk_types.py
delete mode 100644 gnuradio-examples/CMakeLists.txt
delete mode 100644 gnuradio-examples/grc/CMakeLists.txt
delete mode 100644 gnuradio-examples/grc/demod/digital_freq_lock.grc
delete mode 100644 gnuradio-examples/grc/demod/mpsk_demod.grc
delete mode 100644 gnuradio-examples/grc/demod/pam_sync.grc
delete mode 100644 gnuradio-examples/grc/demod/pam_timing.grc
delete mode 100644 gnuradio-examples/grc/simple/ber_simulation.grc
delete mode 100644 gnuradio-examples/grc/simple/dpsk_loopback.grc
delete mode 100644 gnuradio-examples/grc/simple/variable_config.grc
delete mode 100644 gnuradio-examples/grc/xmlrpc/readme.txt
delete mode 100644 gnuradio-examples/grc/xmlrpc/xmlrpc_client.grc
delete mode 100644 gnuradio-examples/grc/xmlrpc/xmlrpc_client_script.py
delete mode 100644 gnuradio-examples/grc/xmlrpc/xmlrpc_server.grc
delete mode 100644 gnuradio-examples/python/CMakeLists.txt
delete mode 100644 gnuradio-examples/python/mp-sched/CMakeLists.txt
delete mode 100644 gnuradio-examples/python/mp-sched/README
delete mode 100644 gnuradio-examples/python/mp-sched/perf-data/core-duo.dat
delete mode 100644 gnuradio-examples/python/mp-sched/perf-data/core2-duo.dat
delete mode 100644 gnuradio-examples/python/mp-sched/perf-data/dual-quad-core-2.33-clovertown.dat
delete mode 100644 gnuradio-examples/python/mp-sched/perf-data/dual-quad-core-3.00-penryn.dat
delete mode 100644 gnuradio-examples/python/mp-sched/perf-data/js21-altivec.dat
delete mode 100644 gnuradio-examples/python/mp-sched/perf-data/js21.dat
delete mode 100644 gnuradio-examples/python/mp-sched/perf-data/ps3-altivec.dat
delete mode 100644 gnuradio-examples/python/mp-sched/perf-data/ps3.dat
delete mode 100644 gnuradio-examples/python/mp-sched/perf-data/qs21-altivec.dat
delete mode 100644 gnuradio-examples/python/mp-sched/perf-data/qs21.dat
delete mode 100755 gnuradio-examples/python/mp-sched/plot_flops.py
delete mode 100755 gnuradio-examples/python/mp-sched/run_synthetic.py
delete mode 100755 gnuradio-examples/python/mp-sched/synthetic.py
delete mode 100755 gnuradio-examples/python/mp-sched/wfm_rcv_pll_to_wav.py
delete mode 100644 gnuradio-examples/python/network/CMakeLists.txt
delete mode 100755 gnuradio-examples/python/network/audio_sink.py
delete mode 100755 gnuradio-examples/python/network/audio_source.py
delete mode 100755 gnuradio-examples/python/network/dial_tone_sink.py
delete mode 100755 gnuradio-examples/python/network/dial_tone_source.py
delete mode 100755 gnuradio-examples/python/network/vector_sink.py
delete mode 100755 gnuradio-examples/python/network/vector_source.py
delete mode 100644 gnuradio-examples/python/pfb/CMakeLists.txt
delete mode 100755 gnuradio-examples/python/pfb/channelize.py
delete mode 100755 gnuradio-examples/python/pfb/chirp_channelize.py
delete mode 100755 gnuradio-examples/python/pfb/decimate.py
delete mode 100755 gnuradio-examples/python/pfb/fmtest.py
delete mode 100755 gnuradio-examples/python/pfb/interpolate.py
delete mode 100755 gnuradio-examples/python/pfb/reconstruction.py
delete mode 100755 gnuradio-examples/python/pfb/resampler.py
delete mode 100644 gnuradio-examples/python/pfb/resampler_demo.grc
delete mode 100755 gnuradio-examples/python/pfb/synth_filter.py
delete mode 100755 gnuradio-examples/python/pfb/synth_to_chan.py
delete mode 100644 gnuradio-examples/python/tags/CMakeLists.txt
delete mode 100755 gnuradio-examples/python/tags/test_file_tags.py
delete mode 100755 gnuradio-examples/python/tags/uhd_burst_detector.py
delete mode 100644 gnuradio-examples/python/volk_benchmark/README
delete mode 100755 gnuradio-examples/python/volk_benchmark/volk_math.py
delete mode 100755 gnuradio-examples/python/volk_benchmark/volk_plot.py
delete mode 100644 gnuradio-examples/python/volk_benchmark/volk_test_funcs.py
delete mode 100755 gnuradio-examples/python/volk_benchmark/volk_types.py
create mode 100644 gr-digital/examples/demod/ber_simulation.grc
create mode 100644 gr-digital/examples/demod/digital_freq_lock.grc
create mode 100644 gr-digital/examples/demod/dpsk_loopback.grc
create mode 100644 gr-digital/examples/demod/mpsk_demod.grc
create mode 100644 gr-digital/examples/demod/pam_sync.grc
create mode 100644 gr-digital/examples/demod/pam_timing.grc
create mode 100644 grc/examples/CMakeLists.txt
create mode 100644 grc/examples/simple/variable_config.grc
create mode 100644 grc/examples/xmlrpc/readme.txt
create mode 100644 grc/examples/xmlrpc/xmlrpc_client.grc
create mode 100644 grc/examples/xmlrpc/xmlrpc_client_script.py
create mode 100644 grc/examples/xmlrpc/xmlrpc_server.grc
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 8430164c1..347318de8 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -236,7 +236,6 @@ add_subdirectory(gr-video-sdl)
add_subdirectory(gr-vocoder)
add_subdirectory(gr-fcd)
add_subdirectory(gr-wxgui)
-add_subdirectory(gnuradio-examples)
#finalize cpack after subdirs processed
include(GrPackage)
diff --git a/gnuradio-core/CMakeLists.txt b/gnuradio-core/CMakeLists.txt
index 101f4c3a3..c05c6404f 100644
--- a/gnuradio-core/CMakeLists.txt
+++ b/gnuradio-core/CMakeLists.txt
@@ -126,6 +126,7 @@ endif(ENABLE_TESTING)
if(ENABLE_PYTHON)
add_subdirectory(src/lib/swig)
add_subdirectory(src/python/gnuradio)
+ add_subdirectory(src/examples)
endif(ENABLE_PYTHON)
########################################################################
diff --git a/gnuradio-core/src/examples/CMakeLists.txt b/gnuradio-core/src/examples/CMakeLists.txt
new file mode 100644
index 000000000..4bdc463e4
--- /dev/null
+++ b/gnuradio-core/src/examples/CMakeLists.txt
@@ -0,0 +1,24 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+add_subdirectory(mp-sched)
+add_subdirectory(network)
+add_subdirectory(pfb)
+add_subdirectory(tags)
+add_subdirectory(volk_benchmark)
\ No newline at end of file
diff --git a/gnuradio-core/src/examples/mp-sched/CMakeLists.txt b/gnuradio-core/src/examples/mp-sched/CMakeLists.txt
new file mode 100644
index 000000000..2bf70d464
--- /dev/null
+++ b/gnuradio-core/src/examples/mp-sched/CMakeLists.txt
@@ -0,0 +1,35 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+include(GrPython)
+
+GR_PYTHON_INSTALL(PROGRAMS
+ plot_flops.py
+ run_synthetic.py
+ synthetic.py
+ wfm_rcv_pll_to_wav.py
+ DESTINATION ${GR_PKG_DATA_DIR}/examples/mp-sched
+ COMPONENT "core_python"
+)
+
+install(
+ FILES README
+ DESTINATION ${GR_PKG_DATA_DIR}/examples/mp-sched
+ COMPONENT "core_python"
+)
diff --git a/gnuradio-core/src/examples/mp-sched/README b/gnuradio-core/src/examples/mp-sched/README
new file mode 100644
index 000000000..ae575437a
--- /dev/null
+++ b/gnuradio-core/src/examples/mp-sched/README
@@ -0,0 +1,2 @@
+These are pieces of code used to test and benchmark the
+multi-processor scheduler.
diff --git a/gnuradio-core/src/examples/mp-sched/perf-data/core-duo.dat b/gnuradio-core/src/examples/mp-sched/perf-data/core-duo.dat
new file mode 100644
index 000000000..064d1e128
--- /dev/null
+++ b/gnuradio-core/src/examples/mp-sched/perf-data/core-duo.dat
@@ -0,0 +1,65 @@
+#D Core Duo 1.83 GHz (T2400)
+ 1 1 5.273e+07 10.010 10.160 0.060 1.021 2.700000e+10 2.697e+09
+ 1 2 5.273e+07 10.410 20.180 0.150 1.953 5.400000e+10 5.187e+09
+ 1 3 3.516e+07 10.360 20.030 0.150 1.948 5.400000e+10 5.212e+09
+ 1 4 2.637e+07 10.100 20.030 0.100 1.993 5.400000e+10 5.347e+09
+ 1 5 2.109e+07 10.140 19.980 0.110 1.981 5.400000e+10 5.325e+09
+ 1 6 1.758e+07 10.110 20.030 0.110 1.992 5.400000e+10 5.341e+09
+ 1 7 1.507e+07 10.120 20.030 0.110 1.990 5.400000e+10 5.336e+09
+ 1 8 1.318e+07 10.060 19.980 0.090 1.995 5.400000e+10 5.368e+09
+ 2 1 5.273e+07 10.210 20.130 0.260 1.997 5.400000e+10 5.289e+09
+ 2 2 2.637e+07 10.110 20.030 0.140 1.995 5.400000e+10 5.341e+09
+ 2 3 1.758e+07 10.120 20.010 0.150 1.992 5.400000e+10 5.336e+09
+ 2 4 1.318e+07 10.080 19.990 0.110 1.994 5.400000e+10 5.357e+09
+ 2 5 1.055e+07 10.050 19.990 0.090 1.998 5.400000e+10 5.373e+09
+ 2 6 8.789e+06 10.050 19.980 0.080 1.996 5.400000e+10 5.373e+09
+ 2 7 7.533e+06 10.050 19.970 0.090 1.996 5.400000e+10 5.373e+09
+ 2 8 6.592e+06 10.040 19.970 0.090 1.998 5.399999e+10 5.378e+09
+ 3 1 3.516e+07 10.630 20.130 0.230 1.915 5.400000e+10 5.080e+09
+ 3 2 1.758e+07 10.120 20.020 0.170 1.995 5.400000e+10 5.336e+09
+ 3 3 1.172e+07 10.140 20.050 0.130 1.990 5.400000e+10 5.325e+09
+ 3 4 8.789e+06 10.070 20.010 0.100 1.997 5.400000e+10 5.362e+09
+ 3 5 7.031e+06 10.060 19.980 0.100 1.996 5.400000e+10 5.368e+09
+ 3 6 5.859e+06 10.060 20.000 0.100 1.998 5.400000e+10 5.368e+09
+ 3 7 5.022e+06 10.050 20.010 0.070 1.998 5.400000e+10 5.373e+09
+ 3 8 4.395e+06 10.050 19.990 0.070 1.996 5.400000e+10 5.373e+09
+ 4 1 2.637e+07 10.180 20.080 0.240 1.996 5.400000e+10 5.305e+09
+ 4 2 1.318e+07 10.140 20.000 0.180 1.990 5.400000e+10 5.325e+09
+ 4 3 8.789e+06 10.110 20.020 0.120 1.992 5.400000e+10 5.341e+09
+ 4 4 6.592e+06 10.080 20.020 0.090 1.995 5.399999e+10 5.357e+09
+ 4 5 5.273e+06 10.050 19.990 0.090 1.998 5.399999e+10 5.373e+09
+ 4 6 4.395e+06 10.080 20.010 0.080 1.993 5.400000e+10 5.357e+09
+ 4 7 3.767e+06 10.070 20.000 0.080 1.994 5.400000e+10 5.362e+09
+ 4 8 3.296e+06 10.050 20.000 0.080 1.998 5.399999e+10 5.373e+09
+ 5 1 2.109e+07 11.240 20.080 0.260 1.810 5.400000e+10 4.804e+09
+ 5 2 1.055e+07 10.130 19.990 0.150 1.988 5.400000e+10 5.331e+09
+ 5 3 7.031e+06 10.100 20.020 0.120 1.994 5.400000e+10 5.347e+09
+ 5 4 5.273e+06 10.070 20.000 0.090 1.995 5.399999e+10 5.362e+09
+ 5 5 4.219e+06 10.100 20.040 0.090 1.993 5.400000e+10 5.347e+09
+ 5 6 3.516e+06 10.080 20.000 0.090 1.993 5.400000e+10 5.357e+09
+ 5 7 3.013e+06 10.070 20.000 0.100 1.996 5.399998e+10 5.362e+09
+ 5 8 2.637e+06 10.070 20.000 0.090 1.995 5.399998e+10 5.362e+09
+ 6 1 1.758e+07 10.220 20.100 0.290 1.995 5.400000e+10 5.284e+09
+ 6 2 8.789e+06 10.080 20.010 0.130 1.998 5.400000e+10 5.357e+09
+ 6 3 5.859e+06 10.090 20.030 0.120 1.997 5.400000e+10 5.352e+09
+ 6 4 4.395e+06 10.100 20.030 0.080 1.991 5.400000e+10 5.347e+09
+ 6 5 3.516e+06 10.060 20.020 0.080 1.998 5.400000e+10 5.368e+09
+ 6 6 2.930e+06 10.070 20.030 0.090 1.998 5.399999e+10 5.362e+09
+ 6 7 2.511e+06 10.070 20.030 0.080 1.997 5.399998e+10 5.362e+09
+ 6 8 2.197e+06 10.070 20.010 0.090 1.996 5.399998e+10 5.362e+09
+ 7 1 1.507e+07 10.420 20.030 0.260 1.947 5.400000e+10 5.182e+09
+ 7 2 7.533e+06 10.100 20.010 0.140 1.995 5.400000e+10 5.347e+09
+ 7 3 5.022e+06 10.080 20.020 0.120 1.998 5.400000e+10 5.357e+09
+ 7 4 3.767e+06 10.080 20.010 0.100 1.995 5.400000e+10 5.357e+09
+ 7 5 3.013e+06 10.070 20.030 0.080 1.997 5.399998e+10 5.362e+09
+ 7 6 2.511e+06 10.080 20.010 0.090 1.994 5.399998e+10 5.357e+09
+ 7 7 2.152e+06 10.080 20.060 0.070 1.997 5.399999e+10 5.357e+09
+ 7 8 1.883e+06 10.070 20.040 0.070 1.997 5.399998e+10 5.362e+09
+ 8 1 1.318e+07 10.220 20.080 0.270 1.991 5.400000e+10 5.284e+09
+ 8 2 6.592e+06 10.100 20.010 0.140 1.995 5.399999e+10 5.347e+09
+ 8 3 4.395e+06 10.110 20.020 0.120 1.992 5.400000e+10 5.341e+09
+ 8 4 3.296e+06 10.090 20.040 0.090 1.995 5.399999e+10 5.352e+09
+ 8 5 2.637e+06 10.090 20.040 0.090 1.995 5.399998e+10 5.352e+09
+ 8 6 2.197e+06 10.070 20.040 0.100 2.000 5.399998e+10 5.362e+09
+ 8 7 1.883e+06 10.090 20.050 0.080 1.995 5.399998e+10 5.352e+09
+ 8 8 1.648e+06 10.090 20.040 0.090 1.995 5.399999e+10 5.352e+09
diff --git a/gnuradio-core/src/examples/mp-sched/perf-data/core2-duo.dat b/gnuradio-core/src/examples/mp-sched/perf-data/core2-duo.dat
new file mode 100644
index 000000000..d67dee8e5
--- /dev/null
+++ b/gnuradio-core/src/examples/mp-sched/perf-data/core2-duo.dat
@@ -0,0 +1,65 @@
+#D Core2 Duo 2.66 GHz (6700)
+ 1 1 1.406e+08 9.890 10.100 0.230 1.044 7.200000e+10 7.280e+09
+ 1 2 1.406e+08 10.400 19.900 0.290 1.941 1.440000e+11 1.385e+10
+ 1 3 9.375e+07 11.410 19.950 0.200 1.766 1.440000e+11 1.262e+10
+ 1 4 7.031e+07 10.230 19.800 0.230 1.958 1.440000e+11 1.408e+10
+ 1 5 5.625e+07 10.640 19.800 0.180 1.878 1.440000e+11 1.353e+10
+ 1 6 4.688e+07 10.000 19.780 0.130 1.991 1.440000e+11 1.440e+10
+ 1 7 4.018e+07 10.500 19.690 0.180 1.892 1.440000e+11 1.371e+10
+ 1 8 3.516e+07 10.020 19.750 0.170 1.988 1.440000e+11 1.437e+10
+ 2 1 1.406e+08 10.330 20.000 0.460 1.981 1.440000e+11 1.394e+10
+ 2 2 7.031e+07 10.160 19.870 0.270 1.982 1.440000e+11 1.417e+10
+ 2 3 4.688e+07 10.210 19.780 0.230 1.960 1.440000e+11 1.410e+10
+ 2 4 3.516e+07 10.050 19.730 0.210 1.984 1.440000e+11 1.433e+10
+ 2 5 2.812e+07 10.060 19.760 0.170 1.981 1.440000e+11 1.431e+10
+ 2 6 2.344e+07 10.030 19.780 0.180 1.990 1.440000e+11 1.436e+10
+ 2 7 2.009e+07 10.040 19.820 0.180 1.992 1.440000e+11 1.434e+10
+ 2 8 1.758e+07 10.050 19.820 0.180 1.990 1.440000e+11 1.433e+10
+ 3 1 9.375e+07 13.140 19.950 0.450 1.553 1.440000e+11 1.096e+10
+ 3 2 4.688e+07 10.570 19.840 0.290 1.904 1.440000e+11 1.362e+10
+ 3 3 3.125e+07 10.420 19.730 0.280 1.920 1.440000e+11 1.382e+10
+ 3 4 2.344e+07 10.120 19.710 0.240 1.971 1.440000e+11 1.423e+10
+ 3 5 1.875e+07 10.140 19.750 0.190 1.966 1.440000e+11 1.420e+10
+ 3 6 1.562e+07 10.030 19.730 0.190 1.986 1.440000e+11 1.436e+10
+ 3 7 1.339e+07 10.020 19.720 0.200 1.988 1.440000e+11 1.437e+10
+ 3 8 1.172e+07 9.990 19.720 0.170 1.991 1.440000e+11 1.441e+10
+ 4 1 7.031e+07 10.310 19.980 0.460 1.983 1.440000e+11 1.397e+10
+ 4 2 3.516e+07 10.300 19.830 0.320 1.956 1.440000e+11 1.398e+10
+ 4 3 2.344e+07 10.180 19.780 0.230 1.966 1.440000e+11 1.415e+10
+ 4 4 1.758e+07 10.070 19.750 0.220 1.983 1.440000e+11 1.430e+10
+ 4 5 1.406e+07 10.090 19.750 0.190 1.976 1.440000e+11 1.427e+10
+ 4 6 1.172e+07 10.020 19.720 0.190 1.987 1.440000e+11 1.437e+10
+ 4 7 1.004e+07 10.040 19.780 0.190 1.989 1.440000e+11 1.434e+10
+ 4 8 8.789e+06 10.000 19.750 0.160 1.991 1.440000e+11 1.440e+10
+ 5 1 5.625e+07 11.580 19.930 0.500 1.764 1.440000e+11 1.244e+10
+ 5 2 2.812e+07 10.300 19.830 0.320 1.956 1.440000e+11 1.398e+10
+ 5 3 1.875e+07 10.240 19.760 0.240 1.953 1.440000e+11 1.406e+10
+ 5 4 1.406e+07 10.140 19.880 0.230 1.983 1.440000e+11 1.420e+10
+ 5 5 1.125e+07 10.040 19.730 0.200 1.985 1.440000e+11 1.434e+10
+ 5 6 9.375e+06 10.030 19.770 0.200 1.991 1.440000e+11 1.436e+10
+ 5 7 8.036e+06 10.030 19.780 0.170 1.989 1.440000e+11 1.436e+10
+ 5 8 7.031e+06 10.000 19.750 0.180 1.993 1.440000e+11 1.440e+10
+ 6 1 4.688e+07 10.340 19.910 0.560 1.980 1.440000e+11 1.393e+10
+ 6 2 2.344e+07 10.290 19.770 0.330 1.953 1.440000e+11 1.399e+10
+ 6 3 1.562e+07 10.150 19.770 0.270 1.974 1.440000e+11 1.419e+10
+ 6 4 1.172e+07 10.170 19.880 0.240 1.978 1.440000e+11 1.416e+10
+ 6 5 9.375e+06 10.080 19.780 0.240 1.986 1.440000e+11 1.429e+10
+ 6 6 7.812e+06 10.020 19.740 0.220 1.992 1.440000e+11 1.437e+10
+ 6 7 6.696e+06 10.050 19.760 0.200 1.986 1.440000e+11 1.433e+10
+ 6 8 5.859e+06 10.070 19.750 0.210 1.982 1.440000e+11 1.430e+10
+ 7 1 4.018e+07 11.220 19.880 0.530 1.819 1.440000e+11 1.283e+10
+ 7 2 2.009e+07 10.280 19.790 0.340 1.958 1.440000e+11 1.401e+10
+ 7 3 1.339e+07 10.190 19.760 0.250 1.964 1.440000e+11 1.413e+10
+ 7 4 1.004e+07 10.060 19.750 0.240 1.987 1.440000e+11 1.431e+10
+ 7 5 8.036e+06 10.070 19.750 0.240 1.985 1.440000e+11 1.430e+10
+ 7 6 6.696e+06 10.040 19.810 0.220 1.995 1.440000e+11 1.434e+10
+ 7 7 5.740e+06 10.050 19.780 0.210 1.989 1.440000e+11 1.433e+10
+ 7 8 5.022e+06 10.010 19.790 0.190 1.996 1.440000e+11 1.439e+10
+ 8 1 3.516e+07 10.320 19.900 0.470 1.974 1.440000e+11 1.395e+10
+ 8 2 1.758e+07 10.340 19.900 0.320 1.956 1.440000e+11 1.393e+10
+ 8 3 1.172e+07 10.130 19.770 0.290 1.980 1.440000e+11 1.422e+10
+ 8 4 8.789e+06 10.120 19.780 0.230 1.977 1.440000e+11 1.423e+10
+ 8 5 7.031e+06 10.040 19.790 0.200 1.991 1.440000e+11 1.434e+10
+ 8 6 5.859e+06 10.050 19.770 0.220 1.989 1.440000e+11 1.433e+10
+ 8 7 5.022e+06 10.030 19.800 0.200 1.994 1.440000e+11 1.436e+10
+ 8 8 4.395e+06 10.050 19.800 0.210 1.991 1.440000e+11 1.433e+10
diff --git a/gnuradio-core/src/examples/mp-sched/perf-data/dual-quad-core-2.33-clovertown.dat b/gnuradio-core/src/examples/mp-sched/perf-data/dual-quad-core-2.33-clovertown.dat
new file mode 100644
index 000000000..fa182c69a
--- /dev/null
+++ b/gnuradio-core/src/examples/mp-sched/perf-data/dual-quad-core-2.33-clovertown.dat
@@ -0,0 +1,257 @@
+#D Dual quad-core Xeon 2.33GHz (Clovertown E5345)
+ 1 1 1.367e+08 10.980 12.080 0.360 1.133 7.000000e+10 6.375e+09
+ 1 2 1.367e+08 12.250 24.310 0.400 2.017 1.400000e+11 1.143e+10
+ 1 3 1.367e+08 12.830 36.080 0.580 2.857 2.100000e+11 1.637e+10
+ 1 4 1.367e+08 12.600 46.820 0.770 3.777 2.800000e+11 2.222e+10
+ 1 5 1.367e+08 12.620 58.850 0.720 4.720 3.500000e+11 2.773e+10
+ 1 6 1.367e+08 12.310 69.430 0.860 5.710 4.200000e+11 3.412e+10
+ 1 7 1.367e+08 12.720 80.580 0.950 6.410 4.900000e+11 3.852e+10
+ 1 8 1.367e+08 12.440 91.530 1.010 7.439 5.600000e+11 4.502e+10
+ 1 9 1.367e+08 22.310 102.660 1.080 4.650 6.300000e+11 2.824e+10
+ 1 10 1.367e+08 22.610 113.670 1.160 5.079 7.000000e+11 3.096e+10
+ 1 11 1.367e+08 22.690 124.730 1.030 5.543 7.700000e+11 3.394e+10
+ 1 12 1.367e+08 23.260 136.520 1.030 5.914 8.400000e+11 3.611e+10
+ 1 13 1.367e+08 23.330 147.270 1.130 6.361 9.100000e+11 3.901e+10
+ 1 14 1.367e+08 24.110 158.070 1.010 6.598 9.800000e+11 4.065e+10
+ 1 15 1.367e+08 25.380 168.370 1.080 6.677 1.050000e+12 4.137e+10
+ 1 16 1.367e+08 26.660 179.130 1.250 6.766 1.120000e+12 4.201e+10
+ 2 1 1.367e+08 11.190 23.330 0.420 2.122 1.400000e+11 1.251e+10
+ 2 2 1.367e+08 12.650 46.350 0.940 3.738 2.800000e+11 2.213e+10
+ 2 3 1.367e+08 12.510 69.010 0.980 5.595 4.200000e+11 3.357e+10
+ 2 4 1.367e+08 13.250 89.330 0.890 6.809 5.600000e+11 4.226e+10
+ 2 5 1.367e+08 22.540 113.580 1.150 5.090 7.000000e+11 3.106e+10
+ 2 6 1.367e+08 22.940 135.790 1.260 5.974 8.400000e+11 3.662e+10
+ 2 7 1.367e+08 24.250 158.360 1.520 6.593 9.800000e+11 4.041e+10
+ 2 8 1.367e+08 26.610 179.840 1.490 6.814 1.120000e+12 4.209e+10
+ 2 9 1.215e+08 26.860 179.400 1.540 6.736 1.120000e+12 4.170e+10
+ 2 10 1.094e+08 26.350 178.740 1.430 6.838 1.120000e+12 4.250e+10
+ 2 11 9.943e+07 25.790 177.910 1.350 6.951 1.120000e+12 4.343e+10
+ 2 12 9.115e+07 25.200 176.980 1.460 7.081 1.120000e+12 4.444e+10
+ 2 13 8.413e+07 24.840 177.320 1.260 7.189 1.120000e+12 4.509e+10
+ 2 14 7.812e+07 24.450 176.920 1.130 7.282 1.120000e+12 4.581e+10
+ 2 15 7.292e+07 24.280 177.400 1.140 7.353 1.120000e+12 4.613e+10
+ 2 16 6.836e+07 23.830 176.290 1.100 7.444 1.120000e+12 4.700e+10
+ 3 1 1.367e+08 11.360 34.790 0.930 3.144 2.100000e+11 1.849e+10
+ 3 2 1.367e+08 12.560 68.800 1.400 5.589 4.200000e+11 3.344e+10
+ 3 3 1.367e+08 22.310 103.250 1.310 4.687 6.300000e+11 2.824e+10
+ 3 4 1.367e+08 22.940 136.120 1.500 5.999 8.400000e+11 3.662e+10
+ 3 5 1.367e+08 25.240 168.550 1.790 6.749 1.050000e+12 4.160e+10
+ 3 6 1.215e+08 26.800 178.710 1.610 6.728 1.120000e+12 4.179e+10
+ 3 7 1.042e+08 26.090 178.710 1.490 6.907 1.120000e+12 4.293e+10
+ 3 8 9.115e+07 25.420 178.140 1.360 7.061 1.120000e+12 4.406e+10
+ 3 9 8.102e+07 24.680 177.260 1.410 7.239 1.120000e+12 4.538e+10
+ 3 10 7.292e+07 24.270 176.830 1.390 7.343 1.120000e+12 4.615e+10
+ 3 11 6.629e+07 23.890 177.060 1.240 7.463 1.120000e+12 4.688e+10
+ 3 12 6.076e+07 23.620 176.290 1.300 7.519 1.120000e+12 4.742e+10
+ 3 13 5.609e+07 23.340 176.780 1.230 7.627 1.120000e+12 4.799e+10
+ 3 14 5.208e+07 23.140 176.330 1.300 7.676 1.120000e+12 4.840e+10
+ 3 15 4.861e+07 23.100 176.940 1.080 7.706 1.120000e+12 4.848e+10
+ 3 16 4.557e+07 22.850 176.120 1.060 7.754 1.120000e+12 4.902e+10
+ 4 1 1.367e+08 11.440 45.520 1.080 4.073 2.800000e+11 2.448e+10
+ 4 2 1.367e+08 12.410 90.020 1.440 7.370 5.600000e+11 4.512e+10
+ 4 3 1.367e+08 23.060 135.570 1.600 5.948 8.400000e+11 3.643e+10
+ 4 4 1.367e+08 26.720 179.780 1.880 6.799 1.120000e+12 4.192e+10
+ 4 5 1.094e+08 26.280 178.110 1.890 6.849 1.120000e+12 4.262e+10
+ 4 6 9.115e+07 25.250 177.280 1.700 7.088 1.120000e+12 4.436e+10
+ 4 7 7.812e+07 24.880 177.830 1.570 7.211 1.120000e+12 4.502e+10
+ 4 8 6.836e+07 24.150 177.240 1.350 7.395 1.120000e+12 4.638e+10
+ 4 9 6.076e+07 23.730 176.590 1.370 7.499 1.120000e+12 4.720e+10
+ 4 10 5.469e+07 23.380 176.570 1.310 7.608 1.120000e+12 4.790e+10
+ 4 11 4.972e+07 23.230 176.400 1.290 7.649 1.120000e+12 4.821e+10
+ 4 12 4.557e+07 22.950 176.100 1.250 7.728 1.120000e+12 4.880e+10
+ 4 13 4.207e+07 22.980 176.430 1.260 7.732 1.120000e+12 4.874e+10
+ 4 14 3.906e+07 22.820 176.300 1.350 7.785 1.120000e+12 4.908e+10
+ 4 15 3.646e+07 22.750 176.450 1.220 7.810 1.120000e+12 4.923e+10
+ 4 16 3.418e+07 22.620 176.350 1.080 7.844 1.120000e+12 4.951e+10
+ 5 1 1.367e+08 12.000 56.890 1.600 4.874 3.500000e+11 2.917e+10
+ 5 2 1.367e+08 22.390 112.870 1.920 5.127 7.000000e+11 3.126e+10
+ 5 3 1.367e+08 25.170 167.880 2.110 6.754 1.050000e+12 4.172e+10
+ 5 4 1.094e+08 26.380 178.010 1.900 6.820 1.120000e+12 4.246e+10
+ 5 5 8.750e+07 25.190 177.570 1.660 7.115 1.120000e+12 4.446e+10
+ 5 6 7.292e+07 24.400 176.750 1.650 7.311 1.120000e+12 4.590e+10
+ 5 7 6.250e+07 24.020 177.580 1.570 7.458 1.120000e+12 4.663e+10
+ 5 8 5.469e+07 23.470 176.650 1.350 7.584 1.120000e+12 4.772e+10
+ 5 9 4.861e+07 23.200 176.350 1.280 7.656 1.120000e+12 4.828e+10
+ 5 10 4.375e+07 23.140 176.230 1.410 7.677 1.120000e+12 4.840e+10
+ 5 11 3.977e+07 22.930 176.120 1.320 7.738 1.120000e+12 4.884e+10
+ 5 12 3.646e+07 22.740 176.060 1.330 7.801 1.120000e+12 4.925e+10
+ 5 13 3.365e+07 22.690 176.450 1.210 7.830 1.120000e+12 4.936e+10
+ 5 14 3.125e+07 22.690 176.430 1.230 7.830 1.120000e+12 4.936e+10
+ 5 15 2.917e+07 22.690 176.410 1.260 7.830 1.120000e+12 4.936e+10
+ 5 16 2.734e+07 22.560 176.150 1.110 7.857 1.120000e+12 4.965e+10
+ 6 1 1.367e+08 12.600 68.590 2.230 5.621 4.200000e+11 3.333e+10
+ 6 2 1.367e+08 22.830 135.260 2.100 6.017 8.400000e+11 3.679e+10
+ 6 3 1.215e+08 26.860 178.470 2.140 6.724 1.120000e+12 4.170e+10
+ 6 4 9.115e+07 25.450 177.110 2.060 7.040 1.120000e+12 4.401e+10
+ 6 5 7.292e+07 24.510 176.850 1.910 7.293 1.120000e+12 4.570e+10
+ 6 6 6.076e+07 23.890 176.450 1.760 7.460 1.120000e+12 4.688e+10
+ 6 7 5.208e+07 23.460 175.980 1.540 7.567 1.120000e+12 4.774e+10
+ 6 8 4.557e+07 23.150 176.480 1.370 7.683 1.120000e+12 4.838e+10
+ 6 9 4.051e+07 22.920 176.030 1.400 7.741 1.120000e+12 4.887e+10
+ 6 10 3.646e+07 22.880 176.300 1.350 7.764 1.120000e+12 4.895e+10
+ 6 11 3.314e+07 22.830 175.970 1.360 7.767 1.120000e+12 4.906e+10
+ 6 12 3.038e+07 22.710 176.040 1.190 7.804 1.120000e+12 4.932e+10
+ 6 13 2.804e+07 22.690 176.050 1.340 7.818 1.120000e+12 4.936e+10
+ 6 14 2.604e+07 22.650 176.410 1.140 7.839 1.120000e+12 4.945e+10
+ 6 15 2.431e+07 22.570 175.940 1.250 7.851 1.120000e+12 4.962e+10
+ 6 16 2.279e+07 22.500 175.980 1.170 7.873 1.120000e+12 4.978e+10
+ 7 1 1.367e+08 12.960 79.970 2.850 6.390 4.900000e+11 3.781e+10
+ 7 2 1.367e+08 24.040 156.540 2.500 6.616 9.800000e+11 4.077e+10
+ 7 3 1.042e+08 26.130 178.060 2.210 6.899 1.120000e+12 4.286e+10
+ 7 4 7.812e+07 24.860 176.880 1.810 7.188 1.120000e+12 4.505e+10
+ 7 5 6.250e+07 24.000 176.590 1.790 7.433 1.120000e+12 4.667e+10
+ 7 6 5.208e+07 23.540 176.480 1.670 7.568 1.120000e+12 4.758e+10
+ 7 7 4.464e+07 23.180 176.030 1.510 7.659 1.120000e+12 4.832e+10
+ 7 8 3.906e+07 22.980 176.500 1.340 7.739 1.120000e+12 4.874e+10
+ 7 9 3.472e+07 22.870 175.970 1.280 7.750 1.120000e+12 4.897e+10
+ 7 10 3.125e+07 22.730 176.220 1.300 7.810 1.120000e+12 4.927e+10
+ 7 11 2.841e+07 22.700 176.030 1.300 7.812 1.120000e+12 4.934e+10
+ 7 12 2.604e+07 22.650 176.300 1.210 7.837 1.120000e+12 4.945e+10
+ 7 13 2.404e+07 22.580 176.140 1.170 7.853 1.120000e+12 4.960e+10
+ 7 14 2.232e+07 22.540 176.550 1.130 7.883 1.120000e+12 4.969e+10
+ 7 15 2.083e+07 22.570 175.870 1.260 7.848 1.120000e+12 4.962e+10
+ 7 16 1.953e+07 22.520 175.980 1.310 7.873 1.120000e+12 4.973e+10
+ 8 1 1.367e+08 13.250 91.770 3.010 7.153 5.600000e+11 4.226e+10
+ 8 2 1.367e+08 26.280 178.100 2.980 6.890 1.120000e+12 4.262e+10
+ 8 3 9.115e+07 25.510 177.140 2.270 7.033 1.120000e+12 4.390e+10
+ 8 4 6.836e+07 24.330 176.850 1.870 7.346 1.120000e+12 4.603e+10
+ 8 5 5.469e+07 23.680 176.850 1.690 7.540 1.120000e+12 4.730e+10
+ 8 6 4.557e+07 23.430 176.210 1.700 7.593 1.120000e+12 4.780e+10
+ 8 7 3.906e+07 23.100 176.680 1.440 7.711 1.120000e+12 4.848e+10
+ 8 8 3.418e+07 22.890 176.270 1.430 7.763 1.120000e+12 4.893e+10
+ 8 9 3.038e+07 22.760 175.980 1.320 7.790 1.120000e+12 4.921e+10
+ 8 10 2.734e+07 22.760 176.340 1.290 7.804 1.120000e+12 4.921e+10
+ 8 11 2.486e+07 22.660 176.220 1.170 7.828 1.120000e+12 4.943e+10
+ 8 12 2.279e+07 22.660 176.050 1.280 7.826 1.120000e+12 4.943e+10
+ 8 13 2.103e+07 22.590 176.170 1.350 7.858 1.120000e+12 4.958e+10
+ 8 14 1.953e+07 22.550 176.120 1.320 7.869 1.120000e+12 4.967e+10
+ 8 15 1.823e+07 22.590 176.130 1.270 7.853 1.120000e+12 4.958e+10
+ 8 16 1.709e+07 22.500 176.090 1.230 7.881 1.120000e+12 4.978e+10
+ 9 1 1.367e+08 21.110 101.410 2.640 4.929 6.300000e+11 2.984e+10
+ 9 2 1.215e+08 27.400 178.180 2.720 6.602 1.120000e+12 4.088e+10
+ 9 3 8.102e+07 25.140 177.370 2.230 7.144 1.120000e+12 4.455e+10
+ 9 4 6.076e+07 24.110 176.810 1.910 7.413 1.120000e+12 4.645e+10
+ 9 5 4.861e+07 23.460 176.240 1.600 7.581 1.120000e+12 4.774e+10
+ 9 6 4.051e+07 23.200 176.310 1.620 7.669 1.120000e+12 4.828e+10
+ 9 7 3.472e+07 22.970 176.560 1.540 7.754 1.120000e+12 4.876e+10
+ 9 8 3.038e+07 22.920 176.300 1.440 7.755 1.120000e+12 4.887e+10
+ 9 9 2.701e+07 22.830 176.090 1.370 7.773 1.120000e+12 4.906e+10
+ 9 10 2.431e+07 22.730 175.960 1.430 7.804 1.120000e+12 4.927e+10
+ 9 11 2.210e+07 22.750 176.160 1.260 7.799 1.120000e+12 4.923e+10
+ 9 12 2.025e+07 22.660 176.100 1.380 7.832 1.120000e+12 4.943e+10
+ 9 13 1.870e+07 22.700 176.040 1.400 7.817 1.120000e+12 4.934e+10
+ 9 14 1.736e+07 22.620 175.940 1.410 7.840 1.120000e+12 4.951e+10
+ 9 15 1.620e+07 22.490 175.910 1.340 7.881 1.120000e+12 4.980e+10
+ 9 16 1.519e+07 22.540 175.990 1.330 7.867 1.120000e+12 4.969e+10
+ 10 1 1.367e+08 21.730 113.690 2.870 5.364 7.000000e+11 3.221e+10
+ 10 2 1.094e+08 26.660 177.920 3.180 6.793 1.120000e+12 4.201e+10
+ 10 3 7.292e+07 24.740 176.810 2.090 7.231 1.120000e+12 4.527e+10
+ 10 4 5.469e+07 23.880 176.280 2.020 7.466 1.120000e+12 4.690e+10
+ 10 5 4.375e+07 23.330 176.510 1.610 7.635 1.120000e+12 4.801e+10
+ 10 6 3.646e+07 23.170 176.160 1.680 7.675 1.120000e+12 4.834e+10
+ 10 7 3.125e+07 22.950 176.490 1.470 7.754 1.120000e+12 4.880e+10
+ 10 8 2.734e+07 22.830 176.260 1.360 7.780 1.120000e+12 4.906e+10
+ 10 9 2.431e+07 22.770 175.930 1.410 7.788 1.120000e+12 4.919e+10
+ 10 10 2.188e+07 22.680 175.870 1.440 7.818 1.120000e+12 4.938e+10
+ 10 11 1.989e+07 22.700 176.140 1.310 7.817 1.120000e+12 4.934e+10
+ 10 12 1.823e+07 22.630 176.040 1.430 7.842 1.120000e+12 4.949e+10
+ 10 13 1.683e+07 22.640 176.000 1.320 7.832 1.120000e+12 4.947e+10
+ 10 14 1.562e+07 22.610 176.160 1.230 7.846 1.120000e+12 4.954e+10
+ 10 15 1.458e+07 22.570 176.010 1.290 7.856 1.120000e+12 4.962e+10
+ 10 16 1.367e+07 22.640 176.060 1.270 7.833 1.120000e+12 4.947e+10
+ 11 1 1.367e+08 22.060 124.440 3.050 5.779 7.700000e+11 3.490e+10
+ 11 2 9.943e+07 26.060 178.400 3.000 6.961 1.120000e+12 4.298e+10
+ 11 3 6.629e+07 24.380 176.690 2.200 7.338 1.120000e+12 4.594e+10
+ 11 4 4.972e+07 23.650 176.730 1.830 7.550 1.120000e+12 4.736e+10
+ 11 5 3.977e+07 23.310 176.030 1.780 7.628 1.120000e+12 4.805e+10
+ 11 6 3.314e+07 23.050 176.210 1.680 7.718 1.120000e+12 4.859e+10
+ 11 7 2.841e+07 22.940 176.300 1.540 7.752 1.120000e+12 4.882e+10
+ 11 8 2.486e+07 22.830 175.990 1.530 7.776 1.120000e+12 4.906e+10
+ 11 9 2.210e+07 22.760 176.060 1.440 7.799 1.120000e+12 4.921e+10
+ 11 10 1.989e+07 22.630 176.010 1.430 7.841 1.120000e+12 4.949e+10
+ 11 11 1.808e+07 22.720 176.040 1.390 7.809 1.120000e+12 4.930e+10
+ 11 12 1.657e+07 22.640 175.890 1.400 7.831 1.120000e+12 4.947e+10
+ 11 13 1.530e+07 22.570 176.090 1.260 7.858 1.120000e+12 4.962e+10
+ 11 14 1.420e+07 22.610 176.150 1.450 7.855 1.120000e+12 4.954e+10
+ 11 15 1.326e+07 22.550 175.980 1.310 7.862 1.120000e+12 4.967e+10
+ 11 16 1.243e+07 22.610 175.920 1.400 7.843 1.120000e+12 4.954e+10
+ 12 1 1.367e+08 22.220 136.260 3.390 6.285 8.400000e+11 3.780e+10
+ 12 2 9.115e+07 25.610 178.090 2.800 7.063 1.120000e+12 4.373e+10
+ 12 3 6.076e+07 24.180 176.320 2.230 7.384 1.120000e+12 4.632e+10
+ 12 4 4.557e+07 23.570 176.570 2.010 7.577 1.120000e+12 4.752e+10
+ 12 5 3.646e+07 23.210 176.420 1.710 7.675 1.120000e+12 4.826e+10
+ 12 6 3.038e+07 23.040 175.910 1.640 7.706 1.120000e+12 4.861e+10
+ 12 7 2.604e+07 22.980 176.390 1.510 7.742 1.120000e+12 4.874e+10
+ 12 8 2.279e+07 22.840 176.110 1.640 7.782 1.120000e+12 4.904e+10
+ 12 9 2.025e+07 22.760 175.950 1.500 7.797 1.120000e+12 4.921e+10
+ 12 10 1.823e+07 22.660 175.810 1.600 7.829 1.120000e+12 4.943e+10
+ 12 11 1.657e+07 22.710 175.940 1.410 7.809 1.120000e+12 4.932e+10
+ 12 12 1.519e+07 22.650 175.870 1.400 7.826 1.120000e+12 4.945e+10
+ 12 13 1.402e+07 22.640 176.040 1.260 7.831 1.120000e+12 4.947e+10
+ 12 14 1.302e+07 22.650 176.130 1.450 7.840 1.120000e+12 4.945e+10
+ 12 15 1.215e+07 22.580 175.990 1.370 7.855 1.120000e+12 4.960e+10
+ 12 16 1.139e+07 22.640 175.870 1.440 7.832 1.120000e+12 4.947e+10
+ 13 1 1.367e+08 22.640 147.020 3.570 6.652 9.100000e+11 4.019e+10
+ 13 2 8.413e+07 25.600 177.820 2.870 7.058 1.120000e+12 4.375e+10
+ 13 3 5.609e+07 24.020 176.980 2.270 7.463 1.120000e+12 4.663e+10
+ 13 4 4.207e+07 23.440 176.430 2.030 7.613 1.120000e+12 4.778e+10
+ 13 5 3.365e+07 23.080 176.110 1.790 7.708 1.120000e+12 4.853e+10
+ 13 6 2.804e+07 22.870 176.210 1.600 7.775 1.120000e+12 4.897e+10
+ 13 7 2.404e+07 22.940 176.340 1.580 7.756 1.120000e+12 4.882e+10
+ 13 8 2.103e+07 22.880 176.050 1.520 7.761 1.120000e+12 4.895e+10
+ 13 9 1.870e+07 22.740 176.020 1.400 7.802 1.120000e+12 4.925e+10
+ 13 10 1.683e+07 22.710 175.880 1.440 7.808 1.120000e+12 4.932e+10
+ 13 11 1.530e+07 22.590 176.040 1.350 7.853 1.120000e+12 4.958e+10
+ 13 12 1.402e+07 22.600 175.930 1.380 7.846 1.120000e+12 4.956e+10
+ 13 13 1.294e+07 22.710 176.010 1.340 7.809 1.120000e+12 4.932e+10
+ 13 14 1.202e+07 22.690 176.270 1.350 7.828 1.120000e+12 4.936e+10
+ 13 15 1.122e+07 22.590 175.960 1.290 7.846 1.120000e+12 4.958e+10
+ 13 16 1.052e+07 22.610 175.960 1.370 7.843 1.120000e+12 4.954e+10
+ 14 1 1.367e+08 23.120 157.180 3.810 6.963 9.800000e+11 4.239e+10
+ 14 2 7.812e+07 25.310 177.210 3.020 7.121 1.120000e+12 4.425e+10
+ 14 3 5.208e+07 24.130 177.110 2.340 7.437 1.120000e+12 4.642e+10
+ 14 4 3.906e+07 23.390 176.660 1.800 7.630 1.120000e+12 4.788e+10
+ 14 5 3.125e+07 23.060 176.420 1.750 7.726 1.120000e+12 4.857e+10
+ 14 6 2.604e+07 22.890 176.180 1.530 7.764 1.120000e+12 4.893e+10
+ 14 7 2.232e+07 22.940 176.060 1.550 7.742 1.120000e+12 4.882e+10
+ 14 8 1.953e+07 22.810 176.110 1.500 7.786 1.120000e+12 4.910e+10
+ 14 9 1.736e+07 22.750 176.370 1.370 7.813 1.120000e+12 4.923e+10
+ 14 10 1.562e+07 22.720 176.020 1.450 7.811 1.120000e+12 4.930e+10
+ 14 11 1.420e+07 22.680 176.090 1.310 7.822 1.120000e+12 4.938e+10
+ 14 12 1.302e+07 22.710 175.950 1.510 7.814 1.120000e+12 4.932e+10
+ 14 13 1.202e+07 22.700 176.100 1.500 7.824 1.120000e+12 4.934e+10
+ 14 14 1.116e+07 22.660 176.150 1.460 7.838 1.120000e+12 4.943e+10
+ 14 15 1.042e+07 22.680 176.120 1.370 7.826 1.120000e+12 4.938e+10
+ 14 16 9.766e+06 22.710 176.110 1.430 7.818 1.120000e+12 4.932e+10
+ 15 1 1.367e+08 23.710 168.080 4.140 7.264 1.050000e+12 4.429e+10
+ 15 2 7.292e+07 25.170 176.640 2.930 7.134 1.120000e+12 4.450e+10
+ 15 3 4.861e+07 23.820 176.980 2.110 7.518 1.120000e+12 4.702e+10
+ 15 4 3.646e+07 23.250 176.190 1.970 7.663 1.120000e+12 4.817e+10
+ 15 5 2.917e+07 23.050 176.450 1.690 7.728 1.120000e+12 4.859e+10
+ 15 6 2.431e+07 22.900 175.980 1.680 7.758 1.120000e+12 4.891e+10
+ 15 7 2.083e+07 22.830 176.090 1.640 7.785 1.120000e+12 4.906e+10
+ 15 8 1.823e+07 22.850 176.160 1.530 7.776 1.120000e+12 4.902e+10
+ 15 9 1.620e+07 22.780 176.390 1.360 7.803 1.120000e+12 4.917e+10
+ 15 10 1.458e+07 22.660 176.000 1.440 7.831 1.120000e+12 4.943e+10
+ 15 11 1.326e+07 22.660 176.110 1.430 7.835 1.120000e+12 4.943e+10
+ 15 12 1.215e+07 22.660 176.150 1.380 7.835 1.120000e+12 4.943e+10
+ 15 13 1.122e+07 22.760 175.970 1.580 7.801 1.120000e+12 4.921e+10
+ 15 14 1.042e+07 22.670 176.290 1.270 7.832 1.120000e+12 4.940e+10
+ 15 15 9.722e+06 22.710 176.060 1.550 7.821 1.120000e+12 4.932e+10
+ 15 16 9.115e+06 22.800 176.020 1.490 7.786 1.120000e+12 4.912e+10
+ 16 1 1.367e+08 25.470 179.270 4.730 7.224 1.120000e+12 4.397e+10
+ 16 2 6.836e+07 24.870 176.820 2.960 7.229 1.120000e+12 4.503e+10
+ 16 3 4.557e+07 23.810 176.930 2.250 7.525 1.120000e+12 4.704e+10
+ 16 4 3.418e+07 23.240 176.650 1.950 7.685 1.120000e+12 4.819e+10
+ 16 5 2.734e+07 23.090 175.940 1.940 7.704 1.120000e+12 4.851e+10
+ 16 6 2.279e+07 22.900 176.120 1.680 7.764 1.120000e+12 4.891e+10
+ 16 7 1.953e+07 22.890 176.290 1.440 7.765 1.120000e+12 4.893e+10
+ 16 8 1.709e+07 22.820 176.040 1.610 7.785 1.120000e+12 4.908e+10
+ 16 9 1.519e+07 22.890 175.990 1.470 7.753 1.120000e+12 4.893e+10
+ 16 10 1.367e+07 22.700 175.890 1.470 7.813 1.120000e+12 4.934e+10
+ 16 11 1.243e+07 22.770 175.960 1.520 7.794 1.120000e+12 4.919e+10
+ 16 12 1.139e+07 22.730 176.000 1.430 7.806 1.120000e+12 4.927e+10
+ 16 13 1.052e+07 22.670 175.990 1.540 7.831 1.120000e+12 4.940e+10
+ 16 14 9.766e+06 22.720 176.130 1.440 7.816 1.120000e+12 4.930e+10
+ 16 15 9.115e+06 22.740 176.320 1.360 7.814 1.120000e+12 4.925e+10
+ 16 16 8.545e+06 22.680 176.170 1.320 7.826 1.120000e+12 4.938e+10
diff --git a/gnuradio-core/src/examples/mp-sched/perf-data/dual-quad-core-3.00-penryn.dat b/gnuradio-core/src/examples/mp-sched/perf-data/dual-quad-core-3.00-penryn.dat
new file mode 100644
index 000000000..57d49ed33
--- /dev/null
+++ b/gnuradio-core/src/examples/mp-sched/perf-data/dual-quad-core-3.00-penryn.dat
@@ -0,0 +1,257 @@
+#D Dual quad-core Xeon 3.0 GHz (Penryn E5472, 1600 MHz FSB, 5400 chipset)
+ 1 1 5.000e+07 2.720 3.020 0.110 1.151 2.560000e+10 9.412e+09
+ 1 2 5.000e+07 2.870 5.630 0.170 2.021 5.120000e+10 1.784e+10
+ 1 3 5.000e+07 2.880 8.380 0.160 2.965 7.680000e+10 2.667e+10
+ 1 4 5.000e+07 2.990 11.080 0.200 3.773 1.024000e+11 3.425e+10
+ 1 5 5.000e+07 2.950 13.950 0.190 4.793 1.280000e+11 4.339e+10
+ 1 6 5.000e+07 3.020 16.620 0.240 5.583 1.536000e+11 5.086e+10
+ 1 7 5.000e+07 2.930 19.250 0.200 6.638 1.792000e+11 6.116e+10
+ 1 8 5.000e+07 3.170 22.240 0.290 7.107 2.048000e+11 6.461e+10
+ 1 9 5.000e+07 5.450 24.410 0.310 4.536 2.304000e+11 4.228e+10
+ 1 10 5.000e+07 5.610 27.400 0.370 4.950 2.560000e+11 4.563e+10
+ 1 11 5.000e+07 5.680 29.960 0.370 5.340 2.816000e+11 4.958e+10
+ 1 12 5.000e+07 5.440 32.490 0.350 6.037 3.072000e+11 5.647e+10
+ 1 13 5.000e+07 5.630 35.270 0.400 6.336 3.328000e+11 5.911e+10
+ 1 14 5.000e+07 6.270 38.500 0.480 6.217 3.584000e+11 5.716e+10
+ 1 15 5.000e+07 6.080 40.880 0.490 6.804 3.840000e+11 6.316e+10
+ 1 16 5.000e+07 7.740 43.390 0.600 5.683 4.096000e+11 5.292e+10
+ 2 1 5.000e+07 2.820 5.700 0.210 2.096 5.120000e+10 1.816e+10
+ 2 2 5.000e+07 2.820 11.130 0.230 4.028 1.024000e+11 3.631e+10
+ 2 3 5.000e+07 2.960 16.570 0.320 5.706 1.536000e+11 5.189e+10
+ 2 4 5.000e+07 3.110 21.920 0.390 7.174 2.048000e+11 6.585e+10
+ 2 5 5.000e+07 5.650 27.550 0.520 4.968 2.560000e+11 4.531e+10
+ 2 6 5.000e+07 5.880 32.890 0.440 5.668 3.072000e+11 5.224e+10
+ 2 7 5.000e+07 6.750 38.210 0.560 5.744 3.584000e+11 5.310e+10
+ 2 8 5.000e+07 6.360 43.480 0.580 6.928 4.096000e+11 6.440e+10
+ 2 9 5.000e+07 8.270 48.750 0.730 5.983 4.608000e+11 5.572e+10
+ 2 10 5.000e+07 8.210 54.400 0.610 6.700 5.120000e+11 6.236e+10
+ 2 11 5.000e+07 8.750 59.760 0.640 6.903 5.632000e+11 6.437e+10
+ 2 12 5.000e+07 9.300 65.050 0.700 7.070 6.144000e+11 6.606e+10
+ 2 13 5.000e+07 9.990 70.750 0.750 7.157 6.656000e+11 6.663e+10
+ 2 14 5.000e+07 10.610 75.950 0.810 7.235 7.168000e+11 6.756e+10
+ 2 15 5.000e+07 11.900 80.400 0.870 6.829 7.680000e+11 6.454e+10
+ 2 16 5.000e+07 11.820 86.790 0.900 7.419 8.192000e+11 6.931e+10
+ 3 1 5.000e+07 2.970 8.300 0.380 2.923 7.680000e+10 2.586e+10
+ 3 2 5.000e+07 2.980 16.660 0.390 5.721 1.536000e+11 5.154e+10
+ 3 3 5.000e+07 5.480 24.690 0.420 4.582 2.304000e+11 4.204e+10
+ 3 4 5.000e+07 5.620 32.820 0.560 5.940 3.072000e+11 5.466e+10
+ 3 5 5.000e+07 6.940 40.800 0.620 5.968 3.840000e+11 5.533e+10
+ 3 6 5.000e+07 7.860 49.010 0.710 6.326 4.608000e+11 5.863e+10
+ 3 7 5.000e+07 8.470 57.130 0.750 6.834 5.376000e+11 6.347e+10
+ 3 8 5.000e+07 9.420 65.310 0.820 7.020 6.144000e+11 6.522e+10
+ 3 9 5.000e+07 10.350 73.640 0.940 7.206 6.912000e+11 6.678e+10
+ 3 10 5.000e+07 11.460 82.230 1.030 7.265 7.680000e+11 6.702e+10
+ 3 11 5.000e+07 12.200 89.590 1.050 7.430 8.448000e+11 6.925e+10
+ 3 12 5.000e+07 13.040 97.520 1.140 7.566 9.216000e+11 7.067e+10
+ 3 13 5.000e+07 14.000 105.560 1.150 7.622 9.984000e+11 7.131e+10
+ 3 14 5.000e+07 14.930 113.630 1.210 7.692 1.075200e+12 7.202e+10
+ 3 15 5.000e+07 15.920 121.610 1.350 7.724 1.152000e+12 7.236e+10
+ 3 16 5.000e+07 16.870 129.770 1.390 7.775 1.228800e+12 7.284e+10
+ 4 1 5.000e+07 2.900 11.100 0.340 3.945 1.024000e+11 3.531e+10
+ 4 2 5.000e+07 4.380 21.980 0.480 5.128 2.048000e+11 4.676e+10
+ 4 3 5.000e+07 5.720 32.800 0.610 5.841 3.072000e+11 5.371e+10
+ 4 4 5.000e+07 6.820 43.880 0.700 6.537 4.096000e+11 6.006e+10
+ 4 5 5.000e+07 8.150 54.420 0.760 6.771 5.120000e+11 6.282e+10
+ 4 6 5.000e+07 9.510 65.180 0.980 6.957 6.144000e+11 6.461e+10
+ 4 7 5.000e+07 10.650 76.080 1.020 7.239 7.168000e+11 6.731e+10
+ 4 8 5.000e+07 11.880 86.720 1.110 7.393 8.192000e+11 6.896e+10
+ 4 9 5.000e+07 13.150 97.920 1.250 7.541 9.216000e+11 7.008e+10
+ 4 10 5.000e+07 14.640 109.260 1.410 7.559 1.024000e+12 6.995e+10
+ 4 11 5.000e+07 15.710 119.170 1.440 7.677 1.126400e+12 7.170e+10
+ 4 12 5.000e+07 16.950 129.960 1.420 7.751 1.228800e+12 7.250e+10
+ 4 13 5.000e+07 18.260 140.520 1.620 7.784 1.331200e+12 7.290e+10
+ 4 14 5.000e+07 19.610 151.290 1.780 7.806 1.433600e+12 7.311e+10
+ 4 15 5.000e+07 21.060 162.760 1.890 7.818 1.536000e+12 7.293e+10
+ 4 16 5.000e+07 22.280 172.870 1.980 7.848 1.638400e+12 7.354e+10
+ 5 1 5.000e+07 3.040 13.810 0.390 4.671 1.280000e+11 4.211e+10
+ 5 2 5.000e+07 5.590 27.510 0.610 5.030 2.560000e+11 4.580e+10
+ 5 3 5.000e+07 6.550 40.970 0.780 6.374 3.840000e+11 5.863e+10
+ 5 4 5.000e+07 8.520 54.470 0.940 6.504 5.120000e+11 6.009e+10
+ 5 5 5.000e+07 9.920 67.950 1.060 6.957 6.400000e+11 6.452e+10
+ 5 6 5.000e+07 11.350 81.490 1.180 7.284 7.680000e+11 6.767e+10
+ 5 7 5.000e+07 12.910 94.960 1.300 7.456 8.960000e+11 6.940e+10
+ 5 8 5.000e+07 14.520 108.510 1.400 7.570 1.024000e+12 7.052e+10
+ 5 9 5.000e+07 16.070 122.120 1.620 7.700 1.152000e+12 7.169e+10
+ 5 10 5.000e+07 17.950 136.140 1.730 7.681 1.280000e+12 7.131e+10
+ 5 11 5.000e+07 19.470 148.330 1.830 7.712 1.408000e+12 7.232e+10
+ 5 12 5.000e+07 20.980 162.100 2.030 7.823 1.536000e+12 7.321e+10
+ 5 13 5.000e+07 22.670 175.470 2.160 7.835 1.664000e+12 7.340e+10
+ 5 14 5.000e+07 24.440 189.630 2.170 7.848 1.792000e+12 7.332e+10
+ 5 15 5.000e+07 26.100 203.010 2.450 7.872 1.920000e+12 7.356e+10
+ 5 16 5.000e+07 27.720 216.000 2.550 7.884 2.048000e+12 7.388e+10
+ 6 1 5.000e+07 2.950 16.560 0.540 5.797 1.536000e+11 5.207e+10
+ 6 2 5.000e+07 5.540 32.900 0.720 6.069 3.072000e+11 5.545e+10
+ 6 3 5.000e+07 8.490 48.860 1.000 5.873 4.608000e+11 5.428e+10
+ 6 4 5.000e+07 10.000 64.670 1.100 6.577 6.144000e+11 6.144e+10
+ 6 5 5.000e+07 11.440 81.430 1.310 7.233 7.680000e+11 6.713e+10
+ 6 6 5.000e+07 13.250 97.690 1.360 7.475 9.216000e+11 6.955e+10
+ 6 7 5.000e+07 15.270 113.730 1.610 7.553 1.075200e+12 7.041e+10
+ 6 8 5.000e+07 17.180 129.780 1.820 7.660 1.228800e+12 7.153e+10
+ 6 9 5.000e+07 19.200 146.020 1.870 7.703 1.382400e+12 7.200e+10
+ 6 10 5.000e+07 21.220 162.290 2.100 7.747 1.536000e+12 7.238e+10
+ 6 11 5.000e+07 23.070 178.420 2.160 7.827 1.689600e+12 7.324e+10
+ 6 12 5.000e+07 25.120 194.590 2.450 7.844 1.843200e+12 7.338e+10
+ 6 13 5.000e+07 27.110 210.640 2.660 7.868 1.996800e+12 7.366e+10
+ 6 14 5.000e+07 29.110 226.820 2.750 7.886 2.150400e+12 7.387e+10
+ 6 15 5.000e+07 31.130 242.800 2.940 7.894 2.304000e+12 7.401e+10
+ 6 16 5.000e+07 33.100 258.790 3.210 7.915 2.457600e+12 7.425e+10
+ 7 1 5.000e+07 2.940 19.140 0.590 6.711 1.792000e+11 6.095e+10
+ 7 2 5.000e+07 5.920 37.910 1.030 6.578 3.584000e+11 6.054e+10
+ 7 3 5.000e+07 8.570 57.010 1.150 6.786 5.376000e+11 6.273e+10
+ 7 4 5.000e+07 10.840 76.060 1.320 7.138 7.168000e+11 6.613e+10
+ 7 5 5.000e+07 13.070 94.920 1.540 7.380 8.960000e+11 6.855e+10
+ 7 6 5.000e+07 15.270 113.790 1.730 7.565 1.075200e+12 7.041e+10
+ 7 7 5.000e+07 17.700 132.560 1.960 7.600 1.254400e+12 7.087e+10
+ 7 8 5.000e+07 19.930 151.500 2.130 7.708 1.433600e+12 7.193e+10
+ 7 9 5.000e+07 22.250 170.570 2.340 7.771 1.612800e+12 7.249e+10
+ 7 10 5.000e+07 24.600 189.280 2.450 7.794 1.792000e+12 7.285e+10
+ 7 11 5.000e+07 26.950 208.030 2.700 7.819 1.971200e+12 7.314e+10
+ 7 12 5.000e+07 29.280 227.070 2.850 7.852 2.150400e+12 7.344e+10
+ 7 13 5.000e+07 31.570 245.750 3.040 7.881 2.329600e+12 7.379e+10
+ 7 14 5.000e+07 33.930 264.960 3.160 7.902 2.508800e+12 7.394e+10
+ 7 15 5.000e+07 36.310 283.960 3.440 7.915 2.688000e+12 7.403e+10
+ 7 16 5.000e+07 38.560 302.120 3.630 7.929 2.867200e+12 7.436e+10
+ 8 1 5.000e+07 3.200 21.880 0.860 7.106 2.048000e+11 6.400e+10
+ 8 2 5.000e+07 5.890 43.450 0.930 7.535 4.096000e+11 6.954e+10
+ 8 3 5.000e+07 9.520 65.180 1.250 6.978 6.144000e+11 6.454e+10
+ 8 4 5.000e+07 12.200 86.780 1.480 7.234 8.192000e+11 6.715e+10
+ 8 5 5.000e+07 14.760 108.420 1.670 7.459 1.024000e+12 6.938e+10
+ 8 6 5.000e+07 17.300 129.850 1.960 7.619 1.228800e+12 7.103e+10
+ 8 7 5.000e+07 20.020 151.430 2.190 7.673 1.433600e+12 7.161e+10
+ 8 8 5.000e+07 22.750 173.550 2.420 7.735 1.638400e+12 7.202e+10
+ 8 9 5.000e+07 25.410 194.560 2.760 7.765 1.843200e+12 7.254e+10
+ 8 10 5.000e+07 28.410 217.250 2.920 7.750 2.048000e+12 7.209e+10
+ 8 11 5.000e+07 30.720 237.990 3.210 7.852 2.252800e+12 7.333e+10
+ 8 12 5.000e+07 33.310 259.340 3.280 7.884 2.457600e+12 7.378e+10
+ 8 13 5.000e+07 36.000 280.760 3.670 7.901 2.662400e+12 7.396e+10
+ 8 14 5.000e+07 38.800 302.570 3.740 7.895 2.867200e+12 7.390e+10
+ 8 15 5.000e+07 41.530 324.520 4.060 7.912 3.072000e+12 7.397e+10
+ 8 16 5.000e+07 44.060 345.420 4.250 7.936 3.276800e+12 7.437e+10
+ 9 1 5.000e+07 5.460 24.660 1.000 4.700 2.304000e+11 4.220e+10
+ 9 2 5.000e+07 8.460 49.010 1.200 5.935 4.608000e+11 5.447e+10
+ 9 3 5.000e+07 10.810 71.410 1.400 6.735 6.912000e+11 6.394e+10
+ 9 4 5.000e+07 13.470 97.570 1.710 7.370 9.216000e+11 6.842e+10
+ 9 5 5.000e+07 16.490 121.780 2.130 7.514 1.152000e+12 6.986e+10
+ 9 6 5.000e+07 19.540 146.070 2.280 7.592 1.382400e+12 7.075e+10
+ 9 7 5.000e+07 22.660 170.830 2.570 7.652 1.612800e+12 7.117e+10
+ 9 8 5.000e+07 25.520 194.720 2.760 7.738 1.843200e+12 7.223e+10
+ 9 9 5.000e+07 28.400 219.020 3.060 7.820 2.073600e+12 7.301e+10
+ 9 10 5.000e+07 31.490 243.030 3.320 7.823 2.304000e+12 7.317e+10
+ 9 11 5.000e+07 34.530 267.230 3.420 7.838 2.534400e+12 7.340e+10
+ 9 12 5.000e+07 37.520 291.720 3.860 7.878 2.764800e+12 7.369e+10
+ 9 13 5.000e+07 40.550 315.780 4.170 7.890 2.995200e+12 7.386e+10
+ 9 14 5.000e+07 43.470 339.930 4.290 7.919 3.225600e+12 7.420e+10
+ 9 15 5.000e+07 46.820 364.970 4.640 7.894 3.456000e+12 7.381e+10
+ 9 16 5.000e+07 49.660 388.630 4.890 7.924 3.686400e+12 7.423e+10
+ 10 1 5.000e+07 5.500 27.290 0.980 5.140 2.560000e+11 4.655e+10
+ 10 2 5.000e+07 8.480 54.830 1.420 6.633 5.120000e+11 6.038e+10
+ 10 3 5.000e+07 11.540 81.580 1.630 7.211 7.680000e+11 6.655e+10
+ 10 4 5.000e+07 14.950 108.480 1.860 7.381 1.024000e+12 6.849e+10
+ 10 5 5.000e+07 18.330 135.300 2.280 7.506 1.280000e+12 6.983e+10
+ 10 6 5.000e+07 21.680 162.380 2.540 7.607 1.536000e+12 7.085e+10
+ 10 7 5.000e+07 24.950 189.360 2.730 7.699 1.792000e+12 7.182e+10
+ 10 8 5.000e+07 28.280 216.090 3.110 7.751 2.048000e+12 7.242e+10
+ 10 9 5.000e+07 31.730 243.290 3.450 7.776 2.304000e+12 7.261e+10
+ 10 10 5.000e+07 35.040 270.380 3.680 7.821 2.560000e+12 7.306e+10
+ 10 11 5.000e+07 38.340 297.080 4.050 7.854 2.816000e+12 7.345e+10
+ 10 12 5.000e+07 41.770 323.840 4.330 7.857 3.072000e+12 7.355e+10
+ 10 13 5.000e+07 45.120 351.380 4.710 7.892 3.328000e+12 7.376e+10
+ 10 14 5.000e+07 48.360 377.870 4.880 7.915 3.584000e+12 7.411e+10
+ 10 15 5.000e+07 51.760 404.740 5.110 7.918 3.840000e+12 7.419e+10
+ 10 16 5.000e+07 55.130 431.760 5.430 7.930 4.096000e+12 7.430e+10
+ 11 1 5.000e+07 5.570 30.080 1.080 5.594 2.816000e+11 5.056e+10
+ 11 2 5.000e+07 9.000 60.230 1.470 6.856 5.632000e+11 6.258e+10
+ 11 3 5.000e+07 12.630 89.890 1.770 7.257 8.448000e+11 6.689e+10
+ 11 4 5.000e+07 16.290 119.110 2.140 7.443 1.126400e+12 6.915e+10
+ 11 5 5.000e+07 19.940 148.730 2.440 7.581 1.408000e+12 7.061e+10
+ 11 6 5.000e+07 23.800 178.620 2.790 7.622 1.689600e+12 7.099e+10
+ 11 7 5.000e+07 27.480 208.510 3.160 7.703 1.971200e+12 7.173e+10
+ 11 8 5.000e+07 31.140 237.820 3.490 7.749 2.252800e+12 7.234e+10
+ 11 9 5.000e+07 34.770 267.390 3.800 7.800 2.534400e+12 7.289e+10
+ 11 10 5.000e+07 38.510 297.250 4.240 7.829 2.816000e+12 7.312e+10
+ 11 11 5.000e+07 42.080 326.570 4.610 7.870 3.097600e+12 7.361e+10
+ 11 12 5.000e+07 45.860 356.540 4.590 7.875 3.379200e+12 7.369e+10
+ 11 13 5.000e+07 49.570 386.250 5.150 7.896 3.660800e+12 7.385e+10
+ 11 14 5.000e+07 53.220 415.630 5.360 7.910 3.942400e+12 7.408e+10
+ 11 15 5.000e+07 57.000 445.200 5.870 7.914 4.224000e+12 7.411e+10
+ 11 16 5.000e+07 60.800 474.810 6.250 7.912 4.505600e+12 7.411e+10
+ 12 1 5.000e+07 5.600 32.770 1.240 6.073 3.072000e+11 5.486e+10
+ 12 2 5.000e+07 10.220 65.660 1.600 6.581 6.144000e+11 6.012e+10
+ 12 3 5.000e+07 13.680 97.900 2.000 7.303 9.216000e+11 6.737e+10
+ 12 4 5.000e+07 17.790 129.710 2.330 7.422 1.228800e+12 6.907e+10
+ 12 5 5.000e+07 21.770 162.420 2.700 7.585 1.536000e+12 7.056e+10
+ 12 6 5.000e+07 25.770 194.770 3.090 7.678 1.843200e+12 7.153e+10
+ 12 7 5.000e+07 29.940 227.290 3.390 7.705 2.150400e+12 7.182e+10
+ 12 8 5.000e+07 34.030 259.370 3.860 7.735 2.457600e+12 7.222e+10
+ 12 9 5.000e+07 38.070 291.890 4.310 7.780 2.764800e+12 7.262e+10
+ 12 10 5.000e+07 42.080 324.370 4.660 7.819 3.072000e+12 7.300e+10
+ 12 11 5.000e+07 45.950 356.370 5.000 7.864 3.379200e+12 7.354e+10
+ 12 12 5.000e+07 49.960 388.790 5.250 7.887 3.686400e+12 7.379e+10
+ 12 13 5.000e+07 54.010 422.050 5.420 7.915 3.993600e+12 7.394e+10
+ 12 14 5.000e+07 58.010 453.330 6.120 7.920 4.300800e+12 7.414e+10
+ 12 15 5.000e+07 62.080 485.830 6.310 7.928 4.608000e+12 7.423e+10
+ 12 16 5.000e+07 66.200 518.060 6.780 7.928 4.915200e+12 7.425e+10
+ 13 1 5.000e+07 5.630 35.420 1.300 6.522 3.328000e+11 5.911e+10
+ 13 2 5.000e+07 10.730 71.050 1.830 6.792 6.656000e+11 6.203e+10
+ 13 3 5.000e+07 14.690 105.710 2.160 7.343 9.984000e+11 6.796e+10
+ 13 4 5.000e+07 19.120 140.630 2.510 7.486 1.331200e+12 6.962e+10
+ 13 5 5.000e+07 23.600 175.730 3.000 7.573 1.664000e+12 7.051e+10
+ 13 6 5.000e+07 27.910 211.000 3.350 7.680 1.996800e+12 7.154e+10
+ 13 7 5.000e+07 32.370 246.320 3.860 7.729 2.329600e+12 7.197e+10
+ 13 8 5.000e+07 36.790 281.150 4.260 7.758 2.662400e+12 7.237e+10
+ 13 9 5.000e+07 41.080 316.080 4.520 7.804 2.995200e+12 7.291e+10
+ 13 10 5.000e+07 45.600 352.020 5.090 7.831 3.328000e+12 7.298e+10
+ 13 11 5.000e+07 49.760 386.130 5.470 7.870 3.660800e+12 7.357e+10
+ 13 12 5.000e+07 54.080 421.160 5.780 7.895 3.993600e+12 7.385e+10
+ 13 13 5.000e+07 58.520 455.980 6.170 7.897 4.326400e+12 7.393e+10
+ 13 14 5.000e+07 63.000 491.340 6.710 7.906 4.659200e+12 7.396e+10
+ 13 15 5.000e+07 67.250 525.920 6.920 7.923 4.992000e+12 7.423e+10
+ 13 16 5.000e+07 72.090 560.640 7.160 7.876 5.324800e+12 7.386e+10
+ 14 1 5.000e+07 5.670 38.290 1.330 6.988 3.584000e+11 6.321e+10
+ 14 2 5.000e+07 10.850 75.880 1.940 7.172 7.168000e+11 6.606e+10
+ 14 3 5.000e+07 15.840 114.160 2.400 7.359 1.075200e+12 6.788e+10
+ 14 4 5.000e+07 20.610 151.540 2.710 7.484 1.433600e+12 6.956e+10
+ 14 5 5.000e+07 25.330 189.160 3.320 7.599 1.792000e+12 7.075e+10
+ 14 6 5.000e+07 30.160 227.510 3.670 7.665 2.150400e+12 7.130e+10
+ 14 7 5.000e+07 34.730 265.020 3.960 7.745 2.508800e+12 7.224e+10
+ 14 8 5.000e+07 39.530 302.550 4.640 7.771 2.867200e+12 7.253e+10
+ 14 9 5.000e+07 44.220 340.330 5.180 7.813 3.225600e+12 7.294e+10
+ 14 10 5.000e+07 48.800 378.180 5.430 7.861 3.584000e+12 7.344e+10
+ 14 11 5.000e+07 53.550 415.790 5.800 7.873 3.942400e+12 7.362e+10
+ 14 12 5.000e+07 58.250 453.340 6.430 7.893 4.300800e+12 7.383e+10
+ 14 13 5.000e+07 63.150 492.200 6.960 7.904 4.659200e+12 7.378e+10
+ 14 14 5.000e+07 67.850 528.470 6.970 7.892 5.017600e+12 7.395e+10
+ 14 15 5.000e+07 72.510 566.950 7.720 7.925 5.376000e+12 7.414e+10
+ 14 16 5.000e+07 77.230 604.250 8.170 7.930 5.734400e+12 7.425e+10
+ 15 1 5.000e+07 5.800 41.070 1.460 7.333 3.840000e+11 6.621e+10
+ 15 2 5.000e+07 11.900 80.380 2.190 6.939 7.680000e+11 6.454e+10
+ 15 3 5.000e+07 16.990 121.790 2.610 7.322 1.152000e+12 6.780e+10
+ 15 4 5.000e+07 22.040 162.330 3.030 7.503 1.536000e+12 6.969e+10
+ 15 5 5.000e+07 27.120 202.750 3.460 7.604 1.920000e+12 7.080e+10
+ 15 6 5.000e+07 32.290 243.420 3.870 7.658 2.304000e+12 7.135e+10
+ 15 7 5.000e+07 37.450 284.300 4.410 7.709 2.688000e+12 7.178e+10
+ 15 8 5.000e+07 42.560 323.740 4.890 7.722 3.072000e+12 7.218e+10
+ 15 9 5.000e+07 47.440 364.880 5.330 7.804 3.456000e+12 7.285e+10
+ 15 10 5.000e+07 52.440 405.400 5.750 7.840 3.840000e+12 7.323e+10
+ 15 11 5.000e+07 57.270 445.500 6.070 7.885 4.224000e+12 7.376e+10
+ 15 12 5.000e+07 62.450 485.920 6.770 7.889 4.608000e+12 7.379e+10
+ 15 13 5.000e+07 67.680 527.540 7.440 7.905 4.992000e+12 7.376e+10
+ 15 14 5.000e+07 72.740 566.990 7.790 7.902 5.376000e+12 7.391e+10
+ 15 15 5.000e+07 77.760 607.620 8.060 7.918 5.760000e+12 7.407e+10
+ 15 16 5.000e+07 82.750 647.630 8.640 7.931 6.144000e+12 7.425e+10
+ 16 1 5.000e+07 6.310 43.540 1.790 7.184 4.096000e+11 6.491e+10
+ 16 2 5.000e+07 12.340 87.310 2.190 7.253 8.192000e+11 6.639e+10
+ 16 3 5.000e+07 17.930 130.440 2.830 7.433 1.228800e+12 6.853e+10
+ 16 4 5.000e+07 23.530 173.540 3.140 7.509 1.638400e+12 6.963e+10
+ 16 5 5.000e+07 28.910 216.290 3.710 7.610 2.048000e+12 7.084e+10
+ 16 6 5.000e+07 34.310 259.400 4.260 7.685 2.457600e+12 7.163e+10
+ 16 7 5.000e+07 39.790 302.740 4.620 7.725 2.867200e+12 7.206e+10
+ 16 8 5.000e+07 44.970 346.250 5.340 7.818 3.276800e+12 7.287e+10
+ 16 9 5.000e+07 50.470 388.870 5.910 7.822 3.686400e+12 7.304e+10
+ 16 10 5.000e+07 55.890 432.480 6.140 7.848 4.096000e+12 7.329e+10
+ 16 11 5.000e+07 61.250 475.380 6.770 7.872 4.505600e+12 7.356e+10
+ 16 12 5.000e+07 66.670 518.940 7.160 7.891 4.915200e+12 7.372e+10
+ 16 13 5.000e+07 72.160 562.230 7.890 7.901 5.324800e+12 7.379e+10
+ 16 14 5.000e+07 77.600 604.950 8.230 7.902 5.734400e+12 7.390e+10
+ 16 15 5.000e+07 82.970 648.420 8.690 7.920 6.144000e+12 7.405e+10
+ 16 16 5.000e+07 88.370 690.730 9.460 7.923 6.553600e+12 7.416e+10
diff --git a/gnuradio-core/src/examples/mp-sched/perf-data/js21-altivec.dat b/gnuradio-core/src/examples/mp-sched/perf-data/js21-altivec.dat
new file mode 100644
index 000000000..d0b8148f0
--- /dev/null
+++ b/gnuradio-core/src/examples/mp-sched/perf-data/js21-altivec.dat
@@ -0,0 +1,65 @@
+#D JS21 4-core PPC970M 2.5 GHz (using Altivec)
+ 1 1 9.766e+07 9.820 10.210 0.360 1.076 5.000000e+10 5.092e+09
+ 1 2 9.766e+07 10.620 19.890 0.640 1.933 1.000000e+11 9.416e+09
+ 1 3 9.766e+07 10.310 29.590 0.610 2.929 1.500000e+11 1.455e+10
+ 1 4 9.766e+07 10.440 39.290 0.680 3.829 2.000000e+11 1.916e+10
+ 1 5 7.812e+07 15.730 39.150 0.590 2.526 2.000000e+11 1.271e+10
+ 1 6 6.510e+07 13.100 39.080 0.590 3.028 2.000000e+11 1.527e+10
+ 1 7 5.580e+07 11.550 39.030 0.500 3.423 2.000000e+11 1.732e+10
+ 1 8 4.883e+07 10.410 39.010 0.510 3.796 2.000000e+11 1.921e+10
+ 2 1 9.766e+07 10.080 20.070 0.700 2.061 1.000000e+11 9.921e+09
+ 2 2 9.766e+07 11.360 39.650 0.960 3.575 2.000000e+11 1.761e+10
+ 2 3 6.510e+07 13.120 39.270 0.740 3.050 2.000000e+11 1.524e+10
+ 2 4 4.883e+07 10.410 39.110 0.650 3.819 2.000000e+11 1.921e+10
+ 2 5 3.906e+07 11.030 39.080 0.610 3.598 2.000000e+11 1.813e+10
+ 2 6 3.255e+07 10.640 39.020 0.560 3.720 2.000000e+11 1.880e+10
+ 2 7 2.790e+07 10.510 38.980 0.550 3.761 2.000000e+11 1.903e+10
+ 2 8 2.441e+07 10.440 38.970 0.570 3.787 2.000000e+11 1.916e+10
+ 3 1 9.766e+07 12.130 29.970 0.920 2.547 1.500000e+11 1.237e+10
+ 3 2 6.510e+07 13.100 39.300 0.920 3.070 2.000000e+11 1.527e+10
+ 3 3 4.340e+07 11.400 39.200 0.760 3.505 2.000000e+11 1.754e+10
+ 3 4 3.255e+07 10.730 39.100 0.690 3.708 2.000000e+11 1.864e+10
+ 3 5 2.604e+07 10.470 39.010 0.620 3.785 2.000000e+11 1.910e+10
+ 3 6 2.170e+07 10.380 39.010 0.620 3.818 2.000000e+11 1.927e+10
+ 3 7 1.860e+07 10.280 39.120 0.580 3.862 2.000000e+11 1.946e+10
+ 3 8 1.628e+07 10.230 39.000 0.600 3.871 2.000000e+11 1.955e+10
+ 4 1 9.766e+07 10.700 39.990 1.540 3.881 2.000000e+11 1.869e+10
+ 4 2 4.883e+07 10.530 39.260 0.940 3.818 2.000000e+11 1.899e+10
+ 4 3 3.255e+07 10.840 39.140 0.760 3.681 2.000000e+11 1.845e+10
+ 4 4 2.441e+07 10.530 39.040 0.680 3.772 2.000000e+11 1.899e+10
+ 4 5 1.953e+07 10.380 39.030 0.650 3.823 2.000000e+11 1.927e+10
+ 4 6 1.628e+07 10.310 39.020 0.650 3.848 2.000000e+11 1.940e+10
+ 4 7 1.395e+07 10.160 38.980 0.620 3.898 2.000000e+11 1.969e+10
+ 4 8 1.221e+07 10.150 38.990 0.580 3.899 2.000000e+11 1.970e+10
+ 5 1 7.812e+07 14.750 39.780 1.470 2.797 2.000000e+11 1.356e+10
+ 5 2 3.906e+07 11.350 39.240 0.950 3.541 2.000000e+11 1.762e+10
+ 5 3 2.604e+07 10.720 39.120 0.800 3.724 2.000000e+11 1.866e+10
+ 5 4 1.953e+07 10.440 39.060 0.730 3.811 2.000000e+11 1.916e+10
+ 5 5 1.562e+07 10.410 39.060 0.690 3.818 2.000000e+11 1.921e+10
+ 5 6 1.302e+07 10.260 38.970 0.650 3.862 2.000000e+11 1.949e+10
+ 5 7 1.116e+07 10.270 39.020 0.650 3.863 2.000000e+11 1.947e+10
+ 5 8 9.766e+06 10.130 39.010 0.660 3.916 2.000000e+11 1.974e+10
+ 6 1 6.510e+07 12.850 39.730 1.450 3.205 2.000000e+11 1.556e+10
+ 6 2 3.255e+07 10.700 39.300 0.990 3.765 2.000000e+11 1.869e+10
+ 6 3 2.170e+07 10.770 39.110 0.810 3.707 2.000000e+11 1.857e+10
+ 6 4 1.628e+07 10.570 39.090 0.750 3.769 2.000000e+11 1.892e+10
+ 6 5 1.302e+07 10.310 39.040 0.690 3.854 2.000000e+11 1.940e+10
+ 6 6 1.085e+07 10.260 39.030 0.700 3.872 2.000000e+11 1.949e+10
+ 6 7 9.301e+06 10.170 39.020 0.680 3.904 2.000000e+11 1.967e+10
+ 6 8 8.138e+06 10.150 39.020 0.670 3.910 2.000000e+11 1.970e+10
+ 7 1 5.580e+07 11.440 39.730 1.500 3.604 2.000000e+11 1.748e+10
+ 7 2 2.790e+07 10.950 39.260 0.990 3.676 2.000000e+11 1.826e+10
+ 7 3 1.860e+07 10.620 39.140 0.860 3.766 2.000000e+11 1.883e+10
+ 7 4 1.395e+07 10.420 39.070 0.750 3.821 2.000000e+11 1.919e+10
+ 7 5 1.116e+07 10.290 39.040 0.710 3.863 2.000000e+11 1.944e+10
+ 7 6 9.301e+06 10.200 39.040 0.720 3.898 2.000000e+11 1.961e+10
+ 7 7 7.972e+06 10.210 39.020 0.670 3.887 2.000000e+11 1.959e+10
+ 7 8 6.975e+06 10.160 39.020 0.650 3.905 2.000000e+11 1.969e+10
+ 8 1 4.883e+07 10.870 39.950 1.520 3.815 2.000000e+11 1.840e+10
+ 8 2 2.441e+07 10.690 39.270 1.000 3.767 2.000000e+11 1.871e+10
+ 8 3 1.628e+07 10.540 39.130 0.860 3.794 2.000000e+11 1.898e+10
+ 8 4 1.221e+07 10.410 39.110 0.790 3.833 2.000000e+11 1.921e+10
+ 8 5 9.766e+06 10.230 39.040 0.710 3.886 2.000000e+11 1.955e+10
+ 8 6 8.138e+06 10.260 39.050 0.700 3.874 2.000000e+11 1.949e+10
+ 8 7 6.975e+06 10.220 39.100 0.690 3.893 2.000000e+11 1.957e+10
+ 8 8 6.104e+06 10.170 39.020 0.650 3.901 2.000000e+11 1.967e+10
diff --git a/gnuradio-core/src/examples/mp-sched/perf-data/js21.dat b/gnuradio-core/src/examples/mp-sched/perf-data/js21.dat
new file mode 100644
index 000000000..a23bcebe7
--- /dev/null
+++ b/gnuradio-core/src/examples/mp-sched/perf-data/js21.dat
@@ -0,0 +1,65 @@
+#D JS21 4-core PPC970MP 2.5 GHz
+ 1 1 5.273e+07 10.050 10.180 0.290 1.042 2.700000e+10 2.687e+09
+ 1 2 5.273e+07 10.240 20.210 0.260 1.999 5.400000e+10 5.273e+09
+ 1 3 5.273e+07 10.300 30.090 0.340 2.954 8.100000e+10 7.864e+09
+ 1 4 5.273e+07 10.490 40.120 0.490 3.871 1.080000e+11 1.030e+10
+ 1 5 4.219e+07 16.010 39.900 0.380 2.516 1.080000e+11 6.746e+09
+ 1 6 3.516e+07 13.360 39.920 0.370 3.016 1.080000e+11 8.084e+09
+ 1 7 3.013e+07 11.510 39.900 0.330 3.495 1.080000e+11 9.383e+09
+ 1 8 2.637e+07 10.420 39.880 0.320 3.858 1.080000e+11 1.036e+10
+ 2 1 5.273e+07 10.370 20.340 0.470 2.007 5.400000e+10 5.207e+09
+ 2 2 5.273e+07 10.320 40.080 0.550 3.937 1.080000e+11 1.047e+10
+ 2 3 3.516e+07 13.340 39.990 0.470 3.033 1.080000e+11 8.096e+09
+ 2 4 2.637e+07 10.480 39.970 0.400 3.852 1.080000e+11 1.031e+10
+ 2 5 2.109e+07 10.910 39.920 0.390 3.695 1.080000e+11 9.899e+09
+ 2 6 1.758e+07 10.610 39.860 0.360 3.791 1.080000e+11 1.018e+10
+ 2 7 1.507e+07 10.520 39.890 0.360 3.826 1.080000e+11 1.027e+10
+ 2 8 1.318e+07 10.470 39.980 0.350 3.852 1.080000e+11 1.032e+10
+ 3 1 5.273e+07 10.230 30.320 0.600 3.022 8.100000e+10 7.918e+09
+ 3 2 3.516e+07 13.250 40.050 0.560 3.065 1.080000e+11 8.151e+09
+ 3 3 2.344e+07 11.160 40.010 0.470 3.627 1.080000e+11 9.677e+09
+ 3 4 1.758e+07 10.710 39.950 0.420 3.769 1.080000e+11 1.008e+10
+ 3 5 1.406e+07 10.520 39.920 0.400 3.833 1.080000e+11 1.027e+10
+ 3 6 1.172e+07 10.420 39.880 0.380 3.864 1.080000e+11 1.036e+10
+ 3 7 1.004e+07 10.340 39.880 0.370 3.893 1.080000e+11 1.044e+10
+ 3 8 8.789e+06 10.380 39.960 0.380 3.886 1.080000e+11 1.040e+10
+ 4 1 5.273e+07 10.570 40.390 0.890 3.905 1.080000e+11 1.022e+10
+ 4 2 2.637e+07 10.690 40.020 0.560 3.796 1.080000e+11 1.010e+10
+ 4 3 1.758e+07 10.790 39.980 0.480 3.750 1.080000e+11 1.001e+10
+ 4 4 1.318e+07 10.570 39.950 0.430 3.820 1.080000e+11 1.022e+10
+ 4 5 1.055e+07 10.440 39.950 0.420 3.867 1.080000e+11 1.034e+10
+ 4 6 8.789e+06 10.340 39.900 0.420 3.899 1.080000e+11 1.044e+10
+ 4 7 7.533e+06 10.290 39.870 0.410 3.914 1.080000e+11 1.050e+10
+ 4 8 6.592e+06 10.270 39.950 0.390 3.928 1.080000e+11 1.052e+10
+ 5 1 4.219e+07 15.110 40.290 0.830 2.721 1.080000e+11 7.148e+09
+ 5 2 2.109e+07 11.240 40.000 0.580 3.610 1.080000e+11 9.609e+09
+ 5 3 1.406e+07 10.710 39.970 0.490 3.778 1.080000e+11 1.008e+10
+ 5 4 1.055e+07 10.490 39.980 0.460 3.855 1.080000e+11 1.030e+10
+ 5 5 8.438e+06 10.430 39.940 0.440 3.872 1.080000e+11 1.035e+10
+ 5 6 7.031e+06 10.280 39.890 0.420 3.921 1.080000e+11 1.051e+10
+ 5 7 6.027e+06 10.290 39.870 0.400 3.914 1.080000e+11 1.050e+10
+ 5 8 5.273e+06 10.290 39.940 0.400 3.920 1.080000e+11 1.050e+10
+ 6 1 3.516e+07 12.880 40.250 0.850 3.191 1.080000e+11 8.385e+09
+ 6 2 1.758e+07 10.730 39.980 0.580 3.780 1.080000e+11 1.007e+10
+ 6 3 1.172e+07 10.740 39.980 0.490 3.768 1.080000e+11 1.006e+10
+ 6 4 8.789e+06 10.510 39.940 0.460 3.844 1.080000e+11 1.028e+10
+ 6 5 7.031e+06 10.430 39.920 0.450 3.871 1.080000e+11 1.035e+10
+ 6 6 5.859e+06 10.300 39.910 0.430 3.917 1.080000e+11 1.049e+10
+ 6 7 5.022e+06 10.290 39.870 0.420 3.915 1.080000e+11 1.050e+10
+ 6 8 4.395e+06 10.300 39.950 0.420 3.919 1.080000e+11 1.049e+10
+ 7 1 3.013e+07 11.240 40.270 0.860 3.659 1.080000e+11 9.609e+09
+ 7 2 1.507e+07 11.040 40.000 0.590 3.677 1.080000e+11 9.783e+09
+ 7 3 1.004e+07 10.660 39.970 0.520 3.798 1.080000e+11 1.013e+10
+ 7 4 7.533e+06 10.430 39.930 0.470 3.873 1.080000e+11 1.035e+10
+ 7 5 6.027e+06 10.390 39.920 0.470 3.887 1.080000e+11 1.039e+10
+ 7 6 5.022e+06 10.320 39.910 0.430 3.909 1.080000e+11 1.047e+10
+ 7 7 4.305e+06 10.330 39.890 0.420 3.902 1.080000e+11 1.045e+10
+ 7 8 3.767e+06 10.300 39.930 0.420 3.917 1.080000e+11 1.049e+10
+ 8 1 2.637e+07 10.530 40.290 0.910 3.913 1.080000e+11 1.026e+10
+ 8 2 1.318e+07 10.850 40.040 0.610 3.747 1.080000e+11 9.954e+09
+ 8 3 8.789e+06 10.500 39.960 0.540 3.857 1.080000e+11 1.029e+10
+ 8 4 6.592e+06 10.490 39.960 0.500 3.857 1.080000e+11 1.030e+10
+ 8 5 5.273e+06 10.330 39.930 0.480 3.912 1.080000e+11 1.045e+10
+ 8 6 4.395e+06 10.340 39.900 0.450 3.902 1.080000e+11 1.044e+10
+ 8 7 3.767e+06 10.260 39.900 0.430 3.931 1.080000e+11 1.053e+10
+ 8 8 3.296e+06 10.250 39.960 0.430 3.940 1.080000e+11 1.054e+10
diff --git a/gnuradio-core/src/examples/mp-sched/perf-data/ps3-altivec.dat b/gnuradio-core/src/examples/mp-sched/perf-data/ps3-altivec.dat
new file mode 100644
index 000000000..dd01b31bd
--- /dev/null
+++ b/gnuradio-core/src/examples/mp-sched/perf-data/ps3-altivec.dat
@@ -0,0 +1,65 @@
+#D Playstation 3 (using Altivec)
+ 1 1 3.906e+07 10.500 10.580 0.440 1.050 2.000000e+10 1.905e+09
+ 1 2 1.953e+07 7.010 13.200 0.400 1.940 2.000000e+10 2.853e+09
+ 1 3 1.302e+07 7.540 13.140 0.380 1.793 2.000000e+10 2.653e+09
+ 1 4 9.766e+06 7.200 13.620 0.370 1.943 2.000000e+10 2.778e+09
+ 1 5 7.812e+06 7.170 13.670 0.340 1.954 2.000000e+10 2.789e+09
+ 1 6 6.510e+06 7.010 13.590 0.320 1.984 2.000000e+10 2.853e+09
+ 1 7 5.580e+06 6.990 13.530 0.330 1.983 2.000000e+10 2.861e+09
+ 1 8 4.883e+06 6.980 13.490 0.320 1.979 2.000000e+10 2.865e+09
+ 2 1 1.953e+07 8.110 14.730 0.530 1.882 2.000000e+10 2.466e+09
+ 2 2 9.766e+06 7.090 13.570 0.420 1.973 2.000000e+10 2.821e+09
+ 2 3 6.510e+06 7.040 13.590 0.410 1.989 2.000000e+10 2.841e+09
+ 2 4 4.883e+06 6.990 13.490 0.370 1.983 2.000000e+10 2.861e+09
+ 2 5 3.906e+06 6.970 13.480 0.360 1.986 2.000000e+10 2.869e+09
+ 2 6 3.255e+06 6.990 13.530 0.370 1.989 2.000000e+10 2.861e+09
+ 2 7 2.790e+06 6.890 13.390 0.350 1.994 2.000000e+10 2.903e+09
+ 2 8 2.441e+06 6.880 13.380 0.350 1.996 2.000000e+10 2.907e+09
+ 3 1 1.302e+07 8.220 13.720 0.510 1.731 2.000000e+10 2.433e+09
+ 3 2 6.510e+06 7.050 13.480 0.450 1.976 2.000000e+10 2.837e+09
+ 3 3 4.340e+06 6.990 13.460 0.400 1.983 2.000000e+10 2.861e+09
+ 3 4 3.255e+06 6.990 13.550 0.380 1.993 2.000000e+10 2.861e+09
+ 3 5 2.604e+06 6.920 13.430 0.360 1.993 1.999999e+10 2.890e+09
+ 3 6 2.170e+06 6.940 13.460 0.360 1.991 1.999999e+10 2.882e+09
+ 3 7 1.860e+06 6.920 13.440 0.360 1.994 2.000000e+10 2.890e+09
+ 3 8 1.628e+06 6.890 13.380 0.350 1.993 2.000000e+10 2.903e+09
+ 4 1 9.766e+06 7.620 14.550 0.590 1.987 2.000000e+10 2.625e+09
+ 4 2 4.883e+06 7.010 13.460 0.440 1.983 2.000000e+10 2.853e+09
+ 4 3 3.255e+06 7.040 13.580 0.410 1.987 2.000000e+10 2.841e+09
+ 4 4 2.441e+06 6.960 13.470 0.390 1.991 2.000000e+10 2.874e+09
+ 4 5 1.953e+06 6.920 13.410 0.370 1.991 2.000000e+10 2.890e+09
+ 4 6 1.628e+06 6.950 13.490 0.370 1.994 2.000000e+10 2.878e+09
+ 4 7 1.395e+06 6.890 13.350 0.370 1.991 2.000000e+10 2.903e+09
+ 4 8 1.221e+06 6.940 13.490 0.360 1.996 2.000000e+10 2.882e+09
+ 5 1 7.812e+06 7.680 14.000 0.560 1.896 2.000000e+10 2.604e+09
+ 5 2 3.906e+06 7.070 13.460 0.460 1.969 2.000000e+10 2.829e+09
+ 5 3 2.604e+06 6.990 13.430 0.420 1.981 1.999999e+10 2.861e+09
+ 5 4 1.953e+06 7.010 13.550 0.390 1.989 2.000000e+10 2.853e+09
+ 5 5 1.562e+06 6.920 13.430 0.380 1.996 2.000000e+10 2.890e+09
+ 5 6 1.302e+06 6.920 13.410 0.380 1.993 1.999999e+10 2.890e+09
+ 5 7 1.116e+06 6.920 13.420 0.370 1.993 1.999999e+10 2.890e+09
+ 5 8 9.766e+05 6.910 13.360 0.370 1.987 1.999999e+10 2.894e+09
+ 6 1 6.510e+06 7.350 13.970 0.630 1.986 2.000000e+10 2.721e+09
+ 6 2 3.255e+06 7.040 13.470 0.470 1.980 2.000000e+10 2.841e+09
+ 6 3 2.170e+06 7.050 13.600 0.420 1.989 1.999999e+10 2.837e+09
+ 6 4 1.628e+06 6.970 13.480 0.400 1.991 2.000000e+10 2.869e+09
+ 6 5 1.302e+06 6.990 13.540 0.390 1.993 1.999999e+10 2.861e+09
+ 6 6 1.085e+06 6.970 13.470 0.380 1.987 1.999999e+10 2.869e+09
+ 6 7 9.301e+05 6.890 13.350 0.380 1.993 1.999999e+10 2.903e+09
+ 6 8 8.138e+05 6.920 13.420 0.370 1.993 2.000000e+10 2.890e+09
+ 7 1 5.580e+06 7.530 14.030 0.580 1.940 2.000000e+10 2.656e+09
+ 7 2 2.790e+06 7.000 13.370 0.460 1.976 2.000000e+10 2.857e+09
+ 7 3 1.860e+06 7.000 13.520 0.420 1.991 2.000000e+10 2.857e+09
+ 7 4 1.395e+06 7.060 13.590 0.410 1.983 2.000000e+10 2.833e+09
+ 7 5 1.116e+06 6.950 13.460 0.390 1.993 1.999999e+10 2.878e+09
+ 7 6 9.301e+05 6.950 13.420 0.380 1.986 1.999999e+10 2.878e+09
+ 7 7 7.972e+05 6.880 13.300 0.380 1.988 1.999998e+10 2.907e+09
+ 7 8 6.975e+05 6.920 13.390 0.380 1.990 1.999998e+10 2.890e+09
+ 8 1 4.883e+06 7.440 14.150 0.620 1.985 2.000000e+10 2.688e+09
+ 8 2 2.441e+06 6.990 13.400 0.480 1.986 2.000000e+10 2.861e+09
+ 8 3 1.628e+06 6.990 13.460 0.430 1.987 2.000000e+10 2.861e+09
+ 8 4 1.221e+06 7.020 13.550 0.410 1.989 2.000000e+10 2.849e+09
+ 8 5 9.766e+05 6.920 13.370 0.390 1.988 1.999999e+10 2.890e+09
+ 8 6 8.138e+05 6.950 13.400 0.390 1.984 2.000000e+10 2.878e+09
+ 8 7 6.975e+05 6.930 13.360 0.390 1.984 1.999998e+10 2.886e+09
+ 8 8 6.104e+05 6.920 13.390 0.380 1.990 1.999998e+10 2.890e+09
diff --git a/gnuradio-core/src/examples/mp-sched/perf-data/ps3.dat b/gnuradio-core/src/examples/mp-sched/perf-data/ps3.dat
new file mode 100644
index 000000000..c9bac37cc
--- /dev/null
+++ b/gnuradio-core/src/examples/mp-sched/perf-data/ps3.dat
@@ -0,0 +1,65 @@
+#D Playstation 3
+ 1 1 2.344e+07 9.970 9.960 0.280 1.027 1.200000e+10 1.204e+09
+ 1 2 1.172e+07 12.590 24.430 0.400 1.972 1.200000e+10 9.531e+08
+ 1 3 7.812e+06 12.200 22.790 0.360 1.898 1.200000e+10 9.836e+08
+ 1 4 5.859e+06 12.450 24.440 0.360 1.992 1.200000e+10 9.639e+08
+ 1 5 4.688e+06 12.390 24.100 0.360 1.974 1.200000e+10 9.685e+08
+ 1 6 3.906e+06 12.360 24.200 0.370 1.988 1.200000e+10 9.709e+08
+ 1 7 3.348e+06 12.460 24.390 0.360 1.986 1.200000e+10 9.631e+08
+ 1 8 2.930e+06 12.440 24.400 0.360 1.990 1.200000e+10 9.646e+08
+ 2 1 1.172e+07 12.580 24.660 0.490 1.999 1.200000e+10 9.539e+08
+ 2 2 5.859e+06 12.480 24.290 0.420 1.980 1.200000e+10 9.615e+08
+ 2 3 3.906e+06 12.500 24.500 0.400 1.992 1.200000e+10 9.600e+08
+ 2 4 2.930e+06 12.440 24.400 0.390 1.993 1.200000e+10 9.646e+08
+ 2 5 2.344e+06 12.500 24.510 0.380 1.991 1.200000e+10 9.600e+08
+ 2 6 1.953e+06 12.450 24.480 0.380 1.997 1.200000e+10 9.639e+08
+ 2 7 1.674e+06 12.450 24.430 0.380 1.993 1.200000e+10 9.639e+08
+ 2 8 1.465e+06 12.430 24.450 0.380 1.998 1.199999e+10 9.654e+08
+ 3 1 7.812e+06 12.280 23.600 0.460 1.959 1.200000e+10 9.772e+08
+ 3 2 3.906e+06 12.690 24.760 0.430 1.985 1.200000e+10 9.456e+08
+ 3 3 2.604e+06 12.610 24.700 0.410 1.991 1.200000e+10 9.516e+08
+ 3 4 1.953e+06 12.440 24.410 0.400 1.994 1.200000e+10 9.646e+08
+ 3 5 1.562e+06 12.400 24.370 0.380 1.996 1.200000e+10 9.677e+08
+ 3 6 1.302e+06 12.440 24.450 0.380 1.996 1.200000e+10 9.646e+08
+ 3 7 1.116e+06 12.470 24.470 0.380 1.993 1.200000e+10 9.623e+08
+ 3 8 9.766e+05 12.440 24.440 0.380 1.995 1.199999e+10 9.646e+08
+ 4 1 5.859e+06 12.670 24.710 0.500 1.990 1.200000e+10 9.471e+08
+ 4 2 2.930e+06 12.600 24.600 0.440 1.987 1.200000e+10 9.524e+08
+ 4 3 1.953e+06 12.490 24.480 0.410 1.993 1.200000e+10 9.608e+08
+ 4 4 1.465e+06 12.400 24.340 0.400 1.995 1.199999e+10 9.677e+08
+ 4 5 1.172e+06 12.440 24.410 0.390 1.994 1.200000e+10 9.646e+08
+ 4 6 9.766e+05 12.440 24.440 0.390 1.996 1.199999e+10 9.646e+08
+ 4 7 8.371e+05 12.450 24.420 0.390 1.993 1.199999e+10 9.639e+08
+ 4 8 7.324e+05 12.370 24.310 0.380 1.996 1.199999e+10 9.701e+08
+ 5 1 4.688e+06 12.890 24.790 0.500 1.962 1.200000e+10 9.310e+08
+ 5 2 2.344e+06 12.620 24.680 0.450 1.991 1.200000e+10 9.509e+08
+ 5 3 1.562e+06 12.430 24.360 0.410 1.993 1.200000e+10 9.654e+08
+ 5 4 1.172e+06 12.420 24.390 0.410 1.997 1.200000e+10 9.662e+08
+ 5 5 9.375e+05 12.430 24.380 0.400 1.994 1.200000e+10 9.654e+08
+ 5 6 7.812e+05 12.400 24.340 0.400 1.995 1.200000e+10 9.677e+08
+ 5 7 6.696e+05 12.360 24.290 0.390 1.997 1.199998e+10 9.709e+08
+ 5 8 5.859e+05 12.420 24.370 0.390 1.994 1.199999e+10 9.662e+08
+ 6 1 3.906e+06 12.990 25.320 0.560 1.992 1.200000e+10 9.238e+08
+ 6 2 1.953e+06 12.610 24.550 0.440 1.982 1.200000e+10 9.516e+08
+ 6 3 1.302e+06 12.520 24.310 0.420 1.975 1.200000e+10 9.585e+08
+ 6 4 9.766e+05 12.460 24.310 0.420 1.985 1.199999e+10 9.631e+08
+ 6 5 7.812e+05 12.440 24.240 0.410 1.982 1.200000e+10 9.646e+08
+ 6 6 6.510e+05 12.430 24.170 0.410 1.977 1.199999e+10 9.654e+08
+ 6 7 5.580e+05 12.450 24.230 0.410 1.979 1.199998e+10 9.639e+08
+ 6 8 4.883e+05 12.490 24.190 0.420 1.970 1.199999e+10 9.608e+08
+ 7 1 3.348e+06 13.150 24.280 0.500 1.884 1.200000e+10 9.125e+08
+ 7 2 1.674e+06 12.480 24.170 0.430 1.971 1.200000e+10 9.615e+08
+ 7 3 1.116e+06 12.480 24.430 0.440 1.993 1.200000e+10 9.615e+08
+ 7 4 8.371e+05 12.380 24.270 0.420 1.994 1.199999e+10 9.693e+08
+ 7 5 6.696e+05 12.390 24.290 0.430 1.995 1.199998e+10 9.685e+08
+ 7 6 5.580e+05 12.430 24.300 0.430 1.990 1.199998e+10 9.654e+08
+ 7 7 4.783e+05 12.460 24.360 0.430 1.990 1.199999e+10 9.631e+08
+ 7 8 4.185e+05 12.460 24.340 0.430 1.988 1.199998e+10 9.631e+08
+ 8 1 2.930e+06 12.960 24.600 0.530 1.939 1.200000e+10 9.259e+08
+ 8 2 1.465e+06 12.580 24.240 0.440 1.962 1.199999e+10 9.539e+08
+ 8 3 9.766e+05 12.520 24.060 0.430 1.956 1.199999e+10 9.585e+08
+ 8 4 7.324e+05 12.420 24.200 0.410 1.981 1.199999e+10 9.662e+08
+ 8 5 5.859e+05 12.430 24.310 0.430 1.990 1.199999e+10 9.654e+08
+ 8 6 4.883e+05 12.430 24.130 0.420 1.975 1.199999e+10 9.654e+08
+ 8 7 4.185e+05 12.800 24.220 0.490 1.930 1.199998e+10 9.375e+08
+ 8 8 3.662e+05 12.460 24.340 0.430 1.988 1.199997e+10 9.631e+08
diff --git a/gnuradio-core/src/examples/mp-sched/perf-data/qs21-altivec.dat b/gnuradio-core/src/examples/mp-sched/perf-data/qs21-altivec.dat
new file mode 100644
index 000000000..8364be363
--- /dev/null
+++ b/gnuradio-core/src/examples/mp-sched/perf-data/qs21-altivec.dat
@@ -0,0 +1,65 @@
+#D QS21 dual cell 3.2 GHz (using Altivec)
+ 1 1 3.516e+07 9.810 10.240 0.430 1.088 1.800000e+10 1.835e+09
+ 1 2 3.516e+07 11.650 22.840 0.750 2.025 3.600000e+10 3.090e+09
+ 1 3 2.344e+07 9.400 24.860 0.680 2.717 3.600000e+10 3.830e+09
+ 1 4 1.758e+07 7.800 26.820 0.740 3.533 3.600000e+10 4.615e+09
+ 1 5 1.406e+07 8.810 25.970 0.760 3.034 3.600000e+10 4.086e+09
+ 1 6 1.172e+07 8.110 25.710 0.740 3.261 3.600000e+10 4.439e+09
+ 1 7 1.004e+07 7.750 26.020 0.710 3.449 3.600000e+10 4.645e+09
+ 1 8 8.789e+06 7.290 26.600 0.690 3.743 3.600000e+10 4.938e+09
+ 2 1 3.516e+07 10.130 20.690 0.770 2.118 3.600000e+10 3.554e+09
+ 2 2 1.758e+07 7.240 26.820 0.920 3.831 3.600000e+10 4.972e+09
+ 2 3 1.172e+07 8.090 26.670 0.840 3.400 3.600000e+10 4.450e+09
+ 2 4 8.789e+06 7.480 27.010 0.790 3.717 3.600000e+10 4.813e+09
+ 2 5 7.031e+06 7.180 26.530 0.740 3.798 3.600000e+10 5.014e+09
+ 2 6 5.859e+06 7.060 26.590 0.730 3.870 3.600000e+10 5.099e+09
+ 2 7 5.022e+06 7.040 26.610 0.740 3.885 3.600000e+10 5.114e+09
+ 2 8 4.395e+06 7.090 27.020 0.730 3.914 3.600000e+10 5.078e+09
+ 3 1 2.344e+07 9.670 25.850 1.020 2.779 3.600000e+10 3.723e+09
+ 3 2 1.172e+07 7.700 25.940 0.930 3.490 3.600000e+10 4.675e+09
+ 3 3 7.812e+06 7.290 26.760 0.830 3.785 3.600000e+10 4.938e+09
+ 3 4 5.859e+06 7.210 26.900 0.800 3.842 3.600000e+10 4.993e+09
+ 3 5 4.688e+06 7.060 26.690 0.770 3.890 3.600000e+10 5.099e+09
+ 3 6 3.906e+06 7.060 26.830 0.810 3.915 3.600000e+10 5.099e+09
+ 3 7 3.348e+06 6.960 26.680 0.780 3.945 3.600000e+10 5.172e+09
+ 3 8 2.930e+06 6.960 26.600 0.770 3.932 3.599999e+10 5.172e+09
+ 4 1 1.758e+07 7.640 28.700 1.250 3.920 3.600000e+10 4.712e+09
+ 4 2 8.789e+06 7.230 26.640 0.940 3.815 3.600000e+10 4.979e+09
+ 4 3 5.859e+06 7.200 26.800 0.860 3.842 3.600000e+10 5.000e+09
+ 4 4 4.395e+06 7.110 26.900 0.840 3.902 3.600000e+10 5.063e+09
+ 4 5 3.516e+06 7.020 26.680 0.800 3.915 3.600000e+10 5.128e+09
+ 4 6 2.930e+06 6.950 26.700 0.800 3.957 3.599999e+10 5.180e+09
+ 4 7 2.511e+06 6.930 26.590 0.800 3.952 3.599999e+10 5.195e+09
+ 4 8 2.197e+06 6.960 26.570 0.790 3.931 3.599999e+10 5.172e+09
+ 5 1 1.406e+07 8.730 26.540 1.190 3.176 3.600000e+10 4.124e+09
+ 5 2 7.031e+06 7.270 26.450 0.960 3.770 3.600000e+10 4.952e+09
+ 5 3 4.688e+06 7.100 26.630 0.880 3.875 3.600000e+10 5.070e+09
+ 5 4 3.516e+06 7.050 26.700 0.850 3.908 3.600000e+10 5.106e+09
+ 5 5 2.812e+06 6.970 26.610 0.830 3.937 3.600000e+10 5.165e+09
+ 5 6 2.344e+06 6.980 26.710 0.840 3.947 3.600000e+10 5.158e+09
+ 5 7 2.009e+06 6.900 26.470 0.800 3.952 3.599999e+10 5.217e+09
+ 5 8 1.758e+06 6.940 26.580 0.820 3.948 3.599999e+10 5.187e+09
+ 6 1 1.172e+07 8.200 26.510 1.190 3.378 3.600000e+10 4.390e+09
+ 6 2 5.859e+06 7.210 26.590 0.970 3.822 3.600000e+10 4.993e+09
+ 6 3 3.906e+06 7.070 26.580 0.910 3.888 3.600000e+10 5.092e+09
+ 6 4 2.930e+06 7.090 26.750 0.860 3.894 3.599999e+10 5.078e+09
+ 6 5 2.344e+06 7.040 26.830 0.830 3.929 3.600000e+10 5.114e+09
+ 6 6 1.953e+06 6.960 26.600 0.830 3.941 3.600000e+10 5.172e+09
+ 6 7 1.674e+06 6.940 26.500 0.810 3.935 3.600000e+10 5.187e+09
+ 6 8 1.465e+06 6.940 26.540 0.830 3.944 3.599998e+10 5.187e+09
+ 7 1 1.004e+07 7.730 26.940 1.190 3.639 3.600000e+10 4.657e+09
+ 7 2 5.022e+06 7.240 26.600 0.980 3.809 3.600000e+10 4.972e+09
+ 7 3 3.348e+06 7.120 26.680 0.930 3.878 3.600000e+10 5.056e+09
+ 7 4 2.511e+06 7.070 26.840 0.890 3.922 3.599999e+10 5.092e+09
+ 7 5 2.009e+06 6.980 26.570 0.850 3.928 3.599999e+10 5.158e+09
+ 7 6 1.674e+06 6.950 26.530 0.840 3.938 3.600000e+10 5.180e+09
+ 7 7 1.435e+06 6.940 26.570 0.860 3.952 3.599998e+10 5.187e+09
+ 7 8 1.256e+06 6.980 26.590 0.840 3.930 3.599999e+10 5.158e+09
+ 8 1 8.789e+06 7.570 27.360 1.260 3.781 3.600000e+10 4.756e+09
+ 8 2 4.395e+06 7.130 26.460 0.980 3.849 3.600000e+10 5.049e+09
+ 8 3 2.930e+06 7.060 26.680 0.920 3.909 3.599999e+10 5.099e+09
+ 8 4 2.197e+06 7.040 26.670 0.880 3.913 3.599999e+10 5.114e+09
+ 8 5 1.758e+06 6.970 26.600 0.860 3.940 3.599999e+10 5.165e+09
+ 8 6 1.465e+06 6.940 26.490 0.840 3.938 3.599998e+10 5.187e+09
+ 8 7 1.256e+06 6.980 26.630 0.850 3.937 3.599999e+10 5.158e+09
+ 8 8 1.099e+06 7.010 26.820 0.860 3.949 3.599997e+10 5.136e+09
diff --git a/gnuradio-core/src/examples/mp-sched/perf-data/qs21.dat b/gnuradio-core/src/examples/mp-sched/perf-data/qs21.dat
new file mode 100644
index 000000000..cc628740a
--- /dev/null
+++ b/gnuradio-core/src/examples/mp-sched/perf-data/qs21.dat
@@ -0,0 +1,65 @@
+#D QS21 dual cell 3.2 GHz
+ 1 1 1.953e+07 8.480 8.730 0.270 1.061 1.000000e+10 1.179e+09
+ 1 2 1.953e+07 8.750 17.210 0.460 2.019 2.000000e+10 2.286e+09
+ 1 3 1.302e+07 12.390 29.530 0.540 2.427 2.000000e+10 1.614e+09
+ 1 4 9.766e+06 10.120 31.500 0.590 3.171 2.000000e+10 1.976e+09
+ 1 5 7.812e+06 10.200 31.350 0.610 3.133 2.000000e+10 1.961e+09
+ 1 6 6.510e+06 9.520 31.690 0.590 3.391 2.000000e+10 2.101e+09
+ 1 7 5.580e+06 9.430 32.610 0.600 3.522 2.000000e+10 2.121e+09
+ 1 8 4.883e+06 9.400 34.160 0.620 3.700 2.000000e+10 2.128e+09
+ 2 1 1.953e+07 8.800 17.750 0.500 2.074 2.000000e+10 2.273e+09
+ 2 2 9.766e+06 8.990 28.900 0.640 3.286 2.000000e+10 2.225e+09
+ 2 3 6.510e+06 9.390 32.450 0.660 3.526 2.000000e+10 2.130e+09
+ 2 4 4.883e+06 9.220 34.450 0.660 3.808 2.000000e+10 2.169e+09
+ 2 5 3.906e+06 9.180 34.730 0.650 3.854 2.000000e+10 2.179e+09
+ 2 6 3.255e+06 9.150 34.960 0.650 3.892 2.000000e+10 2.186e+09
+ 2 7 2.790e+06 9.140 35.290 0.650 3.932 2.000000e+10 2.188e+09
+ 2 8 2.441e+06 9.080 35.240 0.650 3.953 2.000000e+10 2.203e+09
+ 3 1 1.302e+07 11.720 28.890 0.740 2.528 2.000000e+10 1.706e+09
+ 3 2 6.510e+06 9.390 32.700 0.730 3.560 2.000000e+10 2.130e+09
+ 3 3 4.340e+06 9.150 33.930 0.690 3.784 2.000000e+10 2.186e+09
+ 3 4 3.255e+06 9.040 34.650 0.680 3.908 2.000000e+10 2.212e+09
+ 3 5 2.604e+06 9.090 34.990 0.680 3.924 1.999999e+10 2.200e+09
+ 3 6 2.170e+06 9.050 34.870 0.670 3.927 1.999999e+10 2.210e+09
+ 3 7 1.860e+06 9.010 34.850 0.660 3.941 2.000000e+10 2.220e+09
+ 3 8 1.628e+06 8.980 34.860 0.670 3.957 2.000000e+10 2.227e+09
+ 4 1 9.766e+06 9.000 34.680 0.940 3.958 2.000000e+10 2.222e+09
+ 4 2 4.883e+06 9.020 34.180 0.740 3.871 2.000000e+10 2.217e+09
+ 4 3 3.255e+06 9.150 34.640 0.710 3.863 2.000000e+10 2.186e+09
+ 4 4 2.441e+06 9.010 34.780 0.690 3.937 2.000000e+10 2.220e+09
+ 4 5 1.953e+06 8.980 34.680 0.690 3.939 2.000000e+10 2.227e+09
+ 4 6 1.628e+06 9.050 35.120 0.690 3.957 2.000000e+10 2.210e+09
+ 4 7 1.395e+06 9.010 34.900 0.670 3.948 2.000000e+10 2.220e+09
+ 4 8 1.221e+06 8.960 34.900 0.680 3.971 2.000000e+10 2.232e+09
+ 5 1 7.812e+06 10.150 31.760 0.840 3.212 2.000000e+10 1.970e+09
+ 5 2 3.906e+06 9.090 34.040 0.750 3.827 2.000000e+10 2.200e+09
+ 5 3 2.604e+06 9.030 34.650 0.720 3.917 1.999999e+10 2.215e+09
+ 5 4 1.953e+06 8.990 34.610 0.700 3.928 2.000000e+10 2.225e+09
+ 5 5 1.562e+06 9.000 34.920 0.700 3.958 2.000000e+10 2.222e+09
+ 5 6 1.302e+06 9.120 35.370 0.690 3.954 1.999999e+10 2.193e+09
+ 5 7 1.116e+06 8.910 34.680 0.690 3.970 1.999999e+10 2.245e+09
+ 5 8 9.766e+05 8.930 34.790 0.680 3.972 1.999999e+10 2.240e+09
+ 6 1 6.510e+06 9.390 31.810 0.840 3.477 2.000000e+10 2.130e+09
+ 6 2 3.255e+06 9.000 34.320 0.760 3.898 2.000000e+10 2.222e+09
+ 6 3 2.170e+06 8.960 34.310 0.740 3.912 1.999999e+10 2.232e+09
+ 6 4 1.628e+06 8.970 34.640 0.730 3.943 2.000000e+10 2.230e+09
+ 6 5 1.302e+06 9.110 35.360 0.710 3.959 1.999999e+10 2.195e+09
+ 6 6 1.085e+06 8.970 34.750 0.710 3.953 1.999999e+10 2.230e+09
+ 6 7 9.301e+05 8.950 34.710 0.700 3.956 1.999999e+10 2.235e+09
+ 6 8 8.138e+05 8.920 34.570 0.710 3.955 2.000000e+10 2.242e+09
+ 7 1 5.580e+06 9.290 32.840 0.870 3.629 2.000000e+10 2.153e+09
+ 7 2 2.790e+06 9.040 34.400 0.770 3.890 2.000000e+10 2.212e+09
+ 7 3 1.860e+06 8.940 34.380 0.740 3.928 2.000000e+10 2.237e+09
+ 7 4 1.395e+06 8.990 34.820 0.730 3.954 2.000000e+10 2.225e+09
+ 7 5 1.116e+06 8.990 34.820 0.720 3.953 1.999999e+10 2.225e+09
+ 7 6 9.301e+05 8.940 34.720 0.720 3.964 1.999999e+10 2.237e+09
+ 7 7 7.972e+05 8.930 34.700 0.710 3.965 1.999998e+10 2.240e+09
+ 7 8 6.975e+05 8.910 34.510 0.700 3.952 1.999998e+10 2.245e+09
+ 8 1 4.883e+06 9.070 33.770 0.910 3.824 2.000000e+10 2.205e+09
+ 8 2 2.441e+06 9.000 34.340 0.780 3.902 2.000000e+10 2.222e+09
+ 8 3 1.628e+06 8.990 34.510 0.740 3.921 2.000000e+10 2.225e+09
+ 8 4 1.221e+06 8.980 34.650 0.740 3.941 2.000000e+10 2.227e+09
+ 8 5 9.766e+05 8.960 34.700 0.720 3.953 1.999999e+10 2.232e+09
+ 8 6 8.138e+05 8.920 34.680 0.710 3.967 2.000000e+10 2.242e+09
+ 8 7 6.975e+05 8.900 34.580 0.720 3.966 1.999998e+10 2.247e+09
+ 8 8 6.104e+05 8.930 34.590 0.710 3.953 1.999998e+10 2.240e+09
diff --git a/gnuradio-core/src/examples/mp-sched/plot_flops.py b/gnuradio-core/src/examples/mp-sched/plot_flops.py
new file mode 100755
index 000000000..b3f819397
--- /dev/null
+++ b/gnuradio-core/src/examples/mp-sched/plot_flops.py
@@ -0,0 +1,98 @@
+#!/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 this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+
+"""
+Reads output from run_synthetic.py and runs gnuplot showing
+GFLOPS as f(npipes, nstages)
+"""
+
+import re
+import sys
+import os
+import tempfile
+from optparse import OptionParser
+
+
+def parse_file(input_filename, output):
+ last = None
+ desc = ''
+ for line in open(input_filename, 'r'):
+ s = line.strip()
+ if s.startswith('>>>'): # ignore ">>> using SSE cruft"
+ continue
+
+ if s.startswith('#D'): # machine description
+ desc = s[2:].strip()
+ continue
+
+ fields = s.split()
+ npipes, nstages, flops = fields[0], fields[1], fields[8]
+
+ if last is not None and npipes != last:
+ output.write('\n')
+ last = npipes
+
+ output.write(' '.join((npipes, nstages, flops)))
+ output.write('\n')
+
+ output.flush()
+ return desc
+
+
+def handle_file(input_filename):
+ cmd_file = tempfile.NamedTemporaryFile(mode='w+', prefix='pf', suffix='.cmd')
+ cmd_file_name = cmd_file.name
+ data_file = tempfile.NamedTemporaryFile(mode='w+', prefix='pf', suffix='.dat')
+ data_file_name = data_file.name
+ desc = parse_file(input_filename, data_file)
+ if len(desc) > 0:
+ cmd_file.write("set title '%s'\n" % (desc,))
+ cmd_file.write("set xlabel 'N pipes'\n")
+ cmd_file.write("set ylabel 'N stages'\n")
+ cmd_file.write("set zlabel 'GFLOPS'\n")
+ cmd_file.write("set key off\n")
+ cmd_file.write("set view 60, 312\n")
+ cmd_file.write("set pm3d\n")
+ cmd_file.write("splot '%s' using 1:2:($3*1e-9) with pm3d at b, '%s' using 1:2:($3*1e-9) with pm3d\n" % (
+ data_file_name, data_file_name))
+
+ cmd_file.flush()
+ data_file.flush()
+
+ os.system("gnuplot " + cmd_file_name + " -")
+
+ #sys.stdout.write(open(cmd_file_name,'r').read())
+ #sys.stdout.write(open(data_file_name,'r').read())
+
+
+def main():
+ usage = "usage: %prog [options] file.dat"
+ parser = OptionParser(usage=usage)
+ (options, args) = parser.parse_args()
+ if len(args) != 1:
+ parser.print_help()
+ raise SystemExit, 1
+
+ handle_file(args[0])
+
+
+if __name__ == '__main__':
+ main()
diff --git a/gnuradio-core/src/examples/mp-sched/run_synthetic.py b/gnuradio-core/src/examples/mp-sched/run_synthetic.py
new file mode 100755
index 000000000..565e6c5c7
--- /dev/null
+++ b/gnuradio-core/src/examples/mp-sched/run_synthetic.py
@@ -0,0 +1,101 @@
+#!/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 this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+
+"""
+Run synthetic.py for npipes in [1,16], nstages in [1,16]
+"""
+
+import re
+import sys
+import os
+import tempfile
+from optparse import OptionParser
+
+
+def write_shell_script(f, data_filename, description, ncores, gflops, max_pipes_and_stages):
+ """
+ f is the file to write the script to
+ data_filename is the where the data ends up
+ description describes the machine
+ ncores is the number of cores (used to size the workload)
+ gflops is the estimated GFLOPS per core (used to size the workload)
+ """
+
+ f.write("#!/bin/sh\n")
+ f.write("(\n")
+ if description:
+ f.write("echo '#D %s'\n" % (description,))
+
+ for npipes in range(1, max_pipes_and_stages + 1):
+ for nstages in range(1, max_pipes_and_stages + 1):
+ # We'd like each run of synthetic to take ~10 seconds
+ desired_time_per_run = 10
+ est_gflops_avail = min(nstages * npipes, ncores) * gflops
+ nsamples = (est_gflops_avail * desired_time_per_run)/(512.0 * nstages * npipes)
+ nsamples = int(nsamples * 1e9)
+
+ cmd = "./synthetic.py -m -s %d -p %d -N %d\n" % (nstages, npipes, nsamples)
+ f.write(cmd)
+ f.write('if test $? -ge 128; then exit 128; fi\n')
+
+ f.write(") 2>&1 | grep --line-buffered -v '^>>>' | tee %s\n" % (data_filename,))
+ f.flush()
+
+
+
+def main():
+ description = """%prog gathers multiprocessor scaling data using the ./synthetic.py benchmark.
+All combinations of npipes and nstages between 1 and --max-pipes-and-stages are tried.
+The -n and -f options provides hints used to size the workload. We'd like each run
+of synthetic to take about 10 seconds. For the full 16x16 case this results in a
+total runtime of about 43 minutes, assuming that your values for -n and -f are reasonable.
+For x86 machines, assume 3 FLOPS per processor Hz. E.g., 3 GHz machine -> 9 GFLOPS.
+plot_flops.py will make pretty graphs from the output data generated by %prog.
+"""
+ usage = "usage: %prog [options] output.dat"
+ parser = OptionParser(usage=usage, description=description)
+ parser.add_option("-d", "--description", metavar="DESC",
+ help="machine description, e.g., \"Dual quad-core Xeon 3 GHz\"", default=None)
+ parser.add_option("-n", "--ncores", type="int", default=1,
+ help="number of processor cores [default=%default]")
+ parser.add_option("-g", "--gflops", metavar="GFLOPS", type="float", default=3.0,
+ help="estimated GFLOPS per core [default=%default]")
+ parser.add_option("-m", "--max-pipes-and-stages", metavar="MAX", type="int", default=16,
+ help="maximum number of pipes and stages to use [default=%default]")
+ (options, args) = parser.parse_args()
+ if len(args) != 1:
+ parser.print_help()
+ raise SystemExit, 1
+
+ output_filename = args[0]
+
+ shell = os.popen("/bin/sh", "w")
+
+ write_shell_script(shell,
+ output_filename,
+ options.description,
+ options.ncores,
+ options.gflops,
+ options.max_pipes_and_stages)
+
+if __name__ == '__main__':
+ main()
+
diff --git a/gnuradio-core/src/examples/mp-sched/synthetic.py b/gnuradio-core/src/examples/mp-sched/synthetic.py
new file mode 100755
index 000000000..e1fcb20bd
--- /dev/null
+++ b/gnuradio-core/src/examples/mp-sched/synthetic.py
@@ -0,0 +1,118 @@
+#!/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 this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+
+from gnuradio import gr, gru, eng_notation, blks2
+from gnuradio.eng_option import eng_option
+from optparse import OptionParser
+import os
+
+
+class pipeline(gr.hier_block2):
+ def __init__(self, nstages, ntaps=256):
+ """
+ Create a pipeline of nstages of gr.fir_filter_fff's connected in serial
+ terminating in a gr.null_sink.
+ """
+ gr.hier_block2.__init__(self, "pipeline",
+ gr.io_signature(1, 1, gr.sizeof_float),
+ gr.io_signature(0, 0, 0))
+ taps = ntaps*[1.0/ntaps]
+ upstream = self
+ for i in range(nstages):
+ op = gr.fir_filter_fff(1, taps)
+ self.connect(upstream, op)
+ upstream = op
+
+ self.connect(upstream, gr.null_sink(gr.sizeof_float))
+
+
+class top(gr.top_block):
+ def __init__(self):
+ gr.top_block.__init__(self)
+
+ default_nsamples = 10e6
+ parser=OptionParser(option_class=eng_option)
+ parser.add_option("-p", "--npipelines", type="intx", default=1,
+ metavar="NPIPES", help="the number of pipelines to create (default=%default)")
+ parser.add_option("-s", "--nstages", type="intx", default=1,
+ metavar="NSTAGES", help="the number of stages in each pipeline (default=%default)")
+ parser.add_option("-N", "--nsamples", type="eng_float", default=default_nsamples,
+ help=("the number of samples to run through the graph (default=%s)" %
+ (eng_notation.num_to_str(default_nsamples))))
+ parser.add_option("-m", "--machine-readable", action="store_true", default=False,
+ help="enable machine readable output")
+
+ (options, args) = parser.parse_args()
+ if len(args) != 0:
+ parser.print_help()
+ raise SystemExit, 1
+
+ self.npipes = options.npipelines
+ self.nstages = options.nstages
+ self.nsamples = options.nsamples
+ self.machine_readable = options.machine_readable
+
+ ntaps = 256
+
+ # Something vaguely like floating point ops
+ self.flop = 2 * ntaps * options.npipelines * options.nstages * options.nsamples
+
+ src = gr.null_source(gr.sizeof_float)
+ head = gr.head(gr.sizeof_float, int(options.nsamples))
+ self.connect(src, head)
+
+ for n in range(options.npipelines):
+ self.connect(head, pipeline(options.nstages, ntaps))
+
+
+def time_it(tb):
+ start = os.times()
+ tb.run()
+ stop = os.times()
+ delta = map((lambda a, b: a-b), stop, start)
+ user, sys, childrens_user, childrens_sys, real = delta
+ total_user = user + childrens_user
+ total_sys = sys + childrens_sys
+ if tb.machine_readable:
+ print "%3d %3d %.3e %7.3f %7.3f %7.3f %7.3f %.6e %.3e" % (
+ tb.npipes, tb.nstages, tb.nsamples, real, total_user, total_sys, (total_user+total_sys)/real, tb.flop, tb.flop/real)
+ else:
+ print "npipes %7d" % (tb.npipes,)
+ print "nstages %7d" % (tb.nstages,)
+ print "nsamples %s" % (eng_notation.num_to_str(tb.nsamples),)
+ print "real %7.3f" % (real,)
+ print "user %7.3f" % (total_user,)
+ print "sys %7.3f" % (total_sys,)
+ print "(user+sys)/real %7.3f" % ((total_user + total_sys)/real,)
+ print "pseudo_flop %s" % (eng_notation.num_to_str(tb.flop),)
+ print "pseudo_flop/real %s" % (eng_notation.num_to_str(tb.flop/real),)
+
+
+if __name__ == "__main__":
+ try:
+ tb = top()
+ time_it(tb)
+ except KeyboardInterrupt:
+ raise SystemExit, 128
+
+
+
+
diff --git a/gnuradio-core/src/examples/mp-sched/wfm_rcv_pll_to_wav.py b/gnuradio-core/src/examples/mp-sched/wfm_rcv_pll_to_wav.py
new file mode 100755
index 000000000..3971d8b73
--- /dev/null
+++ b/gnuradio-core/src/examples/mp-sched/wfm_rcv_pll_to_wav.py
@@ -0,0 +1,127 @@
+#!/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, eng_notation, optfir
+from gnuradio import audio
+from gnuradio import blks2
+from gnuradio.eng_option import eng_option
+from optparse import OptionParser
+import sys
+import math
+
+class wfm_rx_block (gr.top_block):
+ def __init__(self):
+ gr.top_block.__init__(self)
+
+ usage = "usage: %prog [options] input-samples-320kS.dat output.wav"
+ parser=OptionParser(option_class=eng_option, usage=usage)
+ parser.add_option("-V", "--volume", type="eng_float", default=None,
+ help="set volume (default is midpoint)")
+
+ (options, args) = parser.parse_args()
+ if len(args) != 2:
+ parser.print_help()
+ sys.exit(1)
+
+ input_filename = args[0]
+ output_filename = args[1]
+
+ self.vol = 0
+
+ # build graph
+
+ self.src = gr.file_source(gr.sizeof_gr_complex, input_filename, False)
+
+ adc_rate = 64e6 # 64 MS/s
+ usrp_decim = 200
+ usrp_rate = adc_rate / usrp_decim # 320 kS/s
+ chanfilt_decim = 1
+ demod_rate = usrp_rate / chanfilt_decim
+ audio_decimation = 10
+ audio_rate = demod_rate / audio_decimation # 32 kHz
+
+
+ chan_filt_coeffs = optfir.low_pass (1, # gain
+ usrp_rate, # sampling rate
+ 80e3, # passband cutoff
+ 115e3, # stopband cutoff
+ 0.1, # passband ripple
+ 60) # stopband attenuation
+ #print len(chan_filt_coeffs)
+ chan_filt = gr.fir_filter_ccf (chanfilt_decim, chan_filt_coeffs)
+
+
+ #self.guts = blks2.wfm_rcv (demod_rate, audio_decimation)
+ self.guts = blks2.wfm_rcv_pll (demod_rate, audio_decimation)
+
+ # FIXME rework {add,multiply}_const_* to handle multiple streams
+ self.volume_control_l = gr.multiply_const_ff(self.vol)
+ self.volume_control_r = gr.multiply_const_ff(self.vol)
+
+ # wave file as final sink
+ if 1:
+ sink = gr.wavfile_sink(output_filename, 2, int(audio_rate), 16)
+ else:
+ sink = audio.sink (int (audio_rate),
+ options.audio_output,
+ False) # ok_to_block
+
+ # now wire it all together
+ self.connect (self.src, chan_filt, self.guts)
+ self.connect ((self.guts, 0), self.volume_control_l, (sink, 0))
+ self.connect ((self.guts, 1), self.volume_control_r, (sink, 1))
+ try:
+ self.guts.stereo_carrier_pll_recovery.squelch_enable(True)
+ except:
+ pass
+ #print "FYI: This implementation of the stereo_carrier_pll_recovery has no squelch implementation yet"
+
+ if options.volume is None:
+ g = self.volume_range()
+ options.volume = float(g[0]+g[1])/2
+
+ # set initial values
+
+ self.set_vol(options.volume)
+ try:
+ self.guts.stereo_carrier_pll_recovery.set_lock_threshold(options.squelch)
+ except:
+ pass
+ #print "FYI: This implementation of the stereo_carrier_pll_recovery has no squelch implementation yet"
+
+
+ def set_vol (self, vol):
+ g = self.volume_range()
+ self.vol = max(g[0], min(g[1], vol))
+ self.volume_control_l.set_k(10**(self.vol/10))
+ self.volume_control_r.set_k(10**(self.vol/10))
+
+ def volume_range(self):
+ return (-20.0, 0.0, 0.5)
+
+
+if __name__ == '__main__':
+ tb = wfm_rx_block()
+ try:
+ tb.run()
+ except KeyboardInterrupt:
+ pass
diff --git a/gnuradio-core/src/examples/network/CMakeLists.txt b/gnuradio-core/src/examples/network/CMakeLists.txt
new file mode 100644
index 000000000..33e7cb7d0
--- /dev/null
+++ b/gnuradio-core/src/examples/network/CMakeLists.txt
@@ -0,0 +1,30 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+GR_PYTHON_INSTALL(PROGRAMS
+ audio_sink.py
+ audio_source.py
+ dial_tone_sink.py
+ dial_tone_source.py
+ vector_sink.py
+ vector_source.py
+ DESTINATION ${GR_PKG_DATA_DIR}/examples/network
+ COMPONENT "core_python"
+)
+
diff --git a/gnuradio-core/src/examples/network/audio_sink.py b/gnuradio-core/src/examples/network/audio_sink.py
new file mode 100755
index 000000000..48b643578
--- /dev/null
+++ b/gnuradio-core/src/examples/network/audio_sink.py
@@ -0,0 +1,72 @@
+#!/usr/bin/env python
+#
+# Copyright 2006,2007,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.eng_option import eng_option
+from optparse import OptionParser
+import sys
+
+try:
+ from gnuradio import audio
+except ImportError:
+ sys.stderr.write("Failed to import gnuradio.audio. Make sure gr-audio component is installed.\n")
+ sys.exit(1)
+
+class audio_sink(gr.top_block):
+ def __init__(self, host, port, pkt_size, sample_rate, eof, wait):
+ gr.top_block.__init__(self, "audio_sink")
+ src = gr.udp_source(gr.sizeof_float, host, port, pkt_size,
+ eof=eof, wait=wait)
+ dst = audio.sink(sample_rate)
+ self.connect(src, dst)
+
+if __name__ == '__main__':
+ parser = OptionParser(option_class=eng_option)
+ parser.add_option("", "--host", type="string", default="0.0.0.0",
+ help="local host name (domain name or IP address)")
+ parser.add_option("", "--port", type="int", default=65500,
+ help="port value to listen to for connection")
+ parser.add_option("", "--packet-size", type="int", default=1472,
+ help="packet size.")
+ parser.add_option("-r", "--sample-rate", type="int", default=32000,
+ help="audio signal sample rate [default=%default]")
+ parser.add_option("", "--no-eof", action="store_true", default=False,
+ help="don't send EOF on disconnect")
+ parser.add_option("", "--no-wait", action="store_true", default=False,
+ help="don't wait for source")
+ (options, args) = parser.parse_args()
+ if len(args) != 0:
+ parser.print_help()
+ raise SystemExit, 1
+
+ # Create an instance of a hierarchical block
+ top_block = audio_sink(options.host, options.port,
+ options.packet_size, options.sample_rate,
+ not options.no_eof, not options.no_wait)
+
+ try:
+ # Run forever
+ top_block.run()
+ except KeyboardInterrupt:
+ # Ctrl-C exits
+ pass
+
diff --git a/gnuradio-core/src/examples/network/audio_source.py b/gnuradio-core/src/examples/network/audio_source.py
new file mode 100755
index 000000000..ef0dc13ba
--- /dev/null
+++ b/gnuradio-core/src/examples/network/audio_source.py
@@ -0,0 +1,69 @@
+#!/usr/bin/env python
+#
+# Copyright 2006,2007,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.eng_option import eng_option
+from optparse import OptionParser
+import sys
+
+try:
+ from gnuradio import audio
+except ImportError:
+ sys.stderr.write("Failed to import gnuradio.audio. Make sure gr-audio component is installed.\n")
+ sys.exit(1)
+
+class audio_source(gr.top_block):
+ def __init__(self, host, port, pkt_size, sample_rate, eof):
+ gr.top_block.__init__(self, "audio_source")
+ self.audio = audio.source(sample_rate)
+ self.sink = gr.udp_sink(gr.sizeof_float, host, port, pkt_size, eof=eof)
+ self.connect(self.audio, self.sink)
+
+if __name__ == '__main__':
+ parser = OptionParser(option_class=eng_option)
+ parser.add_option("", "--host", type="string", default="localhost",
+ help="Remote host name (domain name or IP address")
+ parser.add_option("", "--port", type="int", default=65500,
+ help="port number to connect to")
+ parser.add_option("", "--packet-size", type="int", default=1472,
+ help="packet size.")
+ parser.add_option("-r", "--sample-rate", type="int", default=32000 ,
+ help="audio signal sample rate [default=%default]")
+ parser.add_option("", "--no-eof", action="store_true", default=False,
+ help="don't send EOF on disconnect")
+ (options, args) = parser.parse_args()
+ if len(args) != 0:
+ parser.print_help()
+ raise SystemExit, 1
+
+ # Create an instance of a hierarchical block
+ top_block = audio_source(options.host, options.port,
+ options.packet_size, options.sample_rate,
+ not options.no_eof)
+
+ try:
+ # Run forever
+ top_block.run()
+ except KeyboardInterrupt:
+ # Ctrl-C exits
+ pass
+
diff --git a/gnuradio-core/src/examples/network/dial_tone_sink.py b/gnuradio-core/src/examples/network/dial_tone_sink.py
new file mode 100755
index 000000000..1b9009552
--- /dev/null
+++ b/gnuradio-core/src/examples/network/dial_tone_sink.py
@@ -0,0 +1,65 @@
+#!/usr/bin/env python
+#
+# Copyright 2006,2007,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, audio
+from gnuradio.eng_option import eng_option
+from optparse import OptionParser
+
+class dial_tone_sink(gr.top_block):
+ def __init__(self, host, port, pkt_size, sample_rate, eof, wait):
+ gr.top_block.__init__(self, "dial_tone_sink")
+ udp = gr.udp_source(gr.sizeof_float, host, port, pkt_size,
+ eof=eof, wait=wait)
+ sink = audio.sink(sample_rate)
+ self.connect(udp, sink)
+
+if __name__ == '__main__':
+ parser = OptionParser(option_class=eng_option)
+ parser.add_option("", "--host", type="string", default="0.0.0.0",
+ help="local host name (domain name or IP address)")
+ parser.add_option("", "--port", type="int", default=65500,
+ help="port value to listen to for connection")
+ parser.add_option("", "--packet-size", type="int", default=1472,
+ help="packet size.")
+ parser.add_option("-r", "--sample-rate", type="int", default=8000,
+ help="audio signal sample rate [default=%default]")
+ parser.add_option("", "--no-eof", action="store_true", default=False,
+ help="don't send EOF on disconnect")
+ parser.add_option("", "--no-wait", action="store_true", default=False,
+ help="don't wait for source")
+ (options, args) = parser.parse_args()
+ if len(args) != 0:
+ parser.print_help()
+ raise SystemExit, 1
+
+ # Create an instance of a hierarchical block
+ top_block = dial_tone_sink(options.host, options.port,
+ options.packet_size, options.sample_rate,
+ not options.no_eof, not options.no_wait)
+
+ try:
+ # Run forever
+ top_block.run()
+ except KeyboardInterrupt:
+ # Ctrl-C exits
+ pass
+
diff --git a/gnuradio-core/src/examples/network/dial_tone_source.py b/gnuradio-core/src/examples/network/dial_tone_source.py
new file mode 100755
index 000000000..766ecf16d
--- /dev/null
+++ b/gnuradio-core/src/examples/network/dial_tone_source.py
@@ -0,0 +1,70 @@
+#!/usr/bin/env python
+#
+# Copyright 2006,2007,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.eng_option import eng_option
+from optparse import OptionParser
+
+class dial_tone_source(gr.top_block):
+ def __init__(self, host, port, pkt_size, sample_rate, eof):
+ gr.top_block.__init__(self, "dial_tone_source")
+
+ amplitude = 0.3
+ src0 = gr.sig_source_f (sample_rate, gr.GR_SIN_WAVE, 350, amplitude)
+ src1 = gr.sig_source_f (sample_rate, gr.GR_SIN_WAVE, 440, amplitude)
+ add = gr.add_ff()
+
+ # Throttle needed here to account for the other side's audio card sampling rate
+ thr = gr.throttle(gr.sizeof_float, sample_rate)
+ sink = gr.udp_sink(gr.sizeof_float, host, port, pkt_size, eof=eof)
+ self.connect(src0, (add, 0))
+ self.connect(src1, (add, 1))
+ self.connect(add, thr, sink)
+
+if __name__ == '__main__':
+ parser = OptionParser(option_class=eng_option)
+ parser.add_option("", "--host", type="string", default="localhost",
+ help="Remote host name (domain name or IP address")
+ parser.add_option("", "--port", type="int", default=65500,
+ help="port number to connect to")
+ parser.add_option("", "--packet-size", type="int", default=1472,
+ help="packet size.")
+ parser.add_option("-r", "--sample-rate", type="int", default=8000,
+ help="audio signal sample rate [default=%default]")
+ parser.add_option("", "--no-eof", action="store_true", default=False,
+ help="don't send EOF on disconnect")
+ (options, args) = parser.parse_args()
+ if len(args) != 0:
+ parser.print_help()
+ raise SystemExit, 1
+
+ # Create an instance of a hierarchical block
+ top_block = dial_tone_source(options.host, options.port,
+ options.packet_size, options.sample_rate,
+ not options.no_eof)
+
+ try:
+ # Run forever
+ top_block.run()
+ except KeyboardInterrupt:
+ # Ctrl-C exits
+ pass
diff --git a/gnuradio-core/src/examples/network/vector_sink.py b/gnuradio-core/src/examples/network/vector_sink.py
new file mode 100755
index 000000000..5d73858a3
--- /dev/null
+++ b/gnuradio-core/src/examples/network/vector_sink.py
@@ -0,0 +1,64 @@
+#!/usr/bin/env python
+#
+# Copyright 2006,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.eng_option import eng_option
+from optparse import OptionParser
+
+class vector_sink(gr.top_block):
+ def __init__(self, host, port, pkt_size, eof, wait):
+ gr.top_block.__init__(self, "vector_sink")
+
+ udp = gr.udp_source(gr.sizeof_float, host, port, pkt_size,
+ eof=eof, wait=wait)
+ sink = gr.file_sink(gr.sizeof_float, "received.dat")
+ self.connect(udp, sink)
+
+if __name__ == "__main__":
+ parser = OptionParser(option_class=eng_option)
+ parser.add_option("", "--host", type="string", default="0.0.0.0",
+ help="local host name (domain name or IP address)")
+ parser.add_option("", "--port", type="int", default=65500,
+ help="port value to listen to for connection")
+ parser.add_option("", "--packet-size", type="int", default=1471,
+ help="packet size.")
+ parser.add_option("", "--no-eof", action="store_true", default=False,
+ help="don't send EOF on disconnect")
+ parser.add_option("", "--no-wait", action="store_true", default=False,
+ help="don't wait for source")
+ (options, args) = parser.parse_args()
+ if len(args) != 0:
+ parser.print_help()
+ raise SystemExit, 1
+
+ # Create an instance of a hierarchical block
+ top_block = vector_sink(options.host, options.port,
+ options.packet_size,
+ not options.no_eof, not options.no_wait)
+
+ try:
+ # Run forever
+ top_block.run()
+ except KeyboardInterrupt:
+ # Ctrl-C exits
+ pass
+
diff --git a/gnuradio-core/src/examples/network/vector_source.py b/gnuradio-core/src/examples/network/vector_source.py
new file mode 100755
index 000000000..0e7d67844
--- /dev/null
+++ b/gnuradio-core/src/examples/network/vector_source.py
@@ -0,0 +1,60 @@
+#!/usr/bin/env python
+#
+# Copyright 2006,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.eng_option import eng_option
+from optparse import OptionParser
+
+class vector_source(gr.top_block):
+ def __init__(self, host, port, pkt_size, eof):
+ gr.top_block.__init__(self, "vector_source")
+ data = [i*0.01 for i in range(1000)]
+ vec = gr.vector_source_f(data, True)
+ udp = gr.udp_sink(gr.sizeof_float, host, port, pkt_size, eof=eof)
+ self.connect(vec, udp)
+
+if __name__ == '__main__':
+ parser = OptionParser(option_class=eng_option)
+ parser.add_option("", "--host", type="string", default="localhost",
+ help="Remote host name (domain name or IP address")
+ parser.add_option("", "--port", type="int", default=65500,
+ help="port number to connect to")
+ parser.add_option("", "--packet-size", type="int", default=1471,
+ help="packet size.")
+ parser.add_option("", "--no-eof", action="store_true", default=False,
+ help="don't send EOF on disconnect")
+ (options, args) = parser.parse_args()
+ if len(args) != 0:
+ parser.print_help()
+ raise SystemExit, 1
+
+# Create an instance of a hierarchical block
+ top_block = vector_source(options.host, options.port, options.packet_size,
+ not options.no_eof)
+
+ try:
+ # Run forever
+ top_block.run()
+ except KeyboardInterrupt:
+ # Ctrl-C exits
+ pass
+
diff --git a/gnuradio-core/src/examples/pfb/CMakeLists.txt b/gnuradio-core/src/examples/pfb/CMakeLists.txt
new file mode 100644
index 000000000..899c47b90
--- /dev/null
+++ b/gnuradio-core/src/examples/pfb/CMakeLists.txt
@@ -0,0 +1,36 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+include(GrPython)
+
+GR_PYTHON_INSTALL(PROGRAMS
+ channelize.py
+ chirp_channelize.py
+ decimate.py
+ fmtest.py
+ interpolate.py
+ resampler_demo.grc
+ resampler.py
+ synth_filter.py
+ synth_to_chan.py
+ reconstruction.py
+ DESTINATION ${GR_PKG_DATA_DIR}/examples/pfb
+ COMPONENT "core_python"
+)
+
diff --git a/gnuradio-core/src/examples/pfb/channelize.py b/gnuradio-core/src/examples/pfb/channelize.py
new file mode 100755
index 000000000..2fcb14a36
--- /dev/null
+++ b/gnuradio-core/src/examples/pfb/channelize.py
@@ -0,0 +1,191 @@
+#!/usr/bin/env python
+#
+# 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, blks2
+import sys, time
+
+try:
+ import scipy
+ from scipy import fftpack
+except ImportError:
+ print "Error: Program requires scipy (see: www.scipy.org)."
+ sys.exit(1)
+
+try:
+ import pylab
+ from pylab import mlab
+except ImportError:
+ print "Error: Program requires matplotlib (see: matplotlib.sourceforge.net)."
+ sys.exit(1)
+
+class pfb_top_block(gr.top_block):
+ def __init__(self):
+ gr.top_block.__init__(self)
+
+ self._N = 2000000 # number of samples to use
+ self._fs = 9000 # initial sampling rate
+ self._M = 9 # Number of channels to channelize
+
+ # Create a set of taps for the PFB channelizer
+ self._taps = gr.firdes.low_pass_2(1, self._fs, 475.50, 50,
+ attenuation_dB=100, window=gr.firdes.WIN_BLACKMAN_hARRIS)
+
+ # Calculate the number of taps per channel for our own information
+ tpc = scipy.ceil(float(len(self._taps)) / float(self._M))
+ print "Number of taps: ", len(self._taps)
+ print "Number of channels: ", self._M
+ print "Taps per channel: ", tpc
+
+ # Create a set of signals at different frequencies
+ # freqs lists the frequencies of the signals that get stored
+ # in the list "signals", which then get summed together
+ self.signals = list()
+ self.add = gr.add_cc()
+ freqs = [-4070, -3050, -2030, -1010, 10, 1020, 2040, 3060, 4080]
+ for i in xrange(len(freqs)):
+ self.signals.append(gr.sig_source_c(self._fs, gr.GR_SIN_WAVE, freqs[i], 1))
+ self.connect(self.signals[i], (self.add,i))
+
+ self.head = gr.head(gr.sizeof_gr_complex, self._N)
+
+ # Construct the channelizer filter
+ self.pfb = blks2.pfb_channelizer_ccf(self._M, self._taps, 1)
+
+ # Construct a vector sink for the input signal to the channelizer
+ self.snk_i = gr.vector_sink_c()
+
+ # Connect the blocks
+ self.connect(self.add, self.head, self.pfb)
+ self.connect(self.add, self.snk_i)
+
+ # Use this to play with the channel mapping
+ #self.pfb.set_channel_map([5,6,7,8,0,1,2,3,4])
+
+ # Create a vector sink for each of M output channels of the filter and connect it
+ self.snks = list()
+ for i in xrange(self._M):
+ self.snks.append(gr.vector_sink_c())
+ self.connect((self.pfb, i), self.snks[i])
+
+
+def main():
+ tstart = time.time()
+
+ tb = pfb_top_block()
+ tb.run()
+
+ tend = time.time()
+ print "Run time: %f" % (tend - tstart)
+
+ if 1:
+ fig_in = pylab.figure(1, figsize=(16,9), facecolor="w")
+ fig1 = pylab.figure(2, figsize=(16,9), facecolor="w")
+ fig2 = pylab.figure(3, figsize=(16,9), facecolor="w")
+
+ Ns = 1000
+ Ne = 10000
+
+ fftlen = 8192
+ winfunc = scipy.blackman
+ fs = tb._fs
+
+ # Plot the input signal on its own figure
+ d = tb.snk_i.data()[Ns:Ne]
+ spin_f = fig_in.add_subplot(2, 1, 1)
+
+ X,freq = mlab.psd(d, NFFT=fftlen, noverlap=fftlen/4, Fs=fs,
+ window = lambda d: d*winfunc(fftlen),
+ scale_by_freq=True)
+ X_in = 10.0*scipy.log10(abs(X))
+ f_in = scipy.arange(-fs/2.0, fs/2.0, fs/float(X_in.size))
+ pin_f = spin_f.plot(f_in, X_in, "b")
+ spin_f.set_xlim([min(f_in), max(f_in)+1])
+ spin_f.set_ylim([-200.0, 50.0])
+
+ spin_f.set_title("Input Signal", weight="bold")
+ spin_f.set_xlabel("Frequency (Hz)")
+ spin_f.set_ylabel("Power (dBW)")
+
+
+ Ts = 1.0/fs
+ Tmax = len(d)*Ts
+
+ t_in = scipy.arange(0, Tmax, Ts)
+ x_in = scipy.array(d)
+ spin_t = fig_in.add_subplot(2, 1, 2)
+ pin_t = spin_t.plot(t_in, x_in.real, "b")
+ pin_t = spin_t.plot(t_in, x_in.imag, "r")
+
+ spin_t.set_xlabel("Time (s)")
+ spin_t.set_ylabel("Amplitude")
+
+ Ncols = int(scipy.floor(scipy.sqrt(tb._M)))
+ Nrows = int(scipy.floor(tb._M / Ncols))
+ if(tb._M % Ncols != 0):
+ Nrows += 1
+
+ # Plot each of the channels outputs. Frequencies on Figure 2 and
+ # time signals on Figure 3
+ fs_o = tb._fs / tb._M
+ Ts_o = 1.0/fs_o
+ Tmax_o = len(d)*Ts_o
+ for i in xrange(len(tb.snks)):
+ # remove issues with the transients at the beginning
+ # also remove some corruption at the end of the stream
+ # this is a bug, probably due to the corner cases
+ d = tb.snks[i].data()[Ns:Ne]
+
+ sp1_f = fig1.add_subplot(Nrows, Ncols, 1+i)
+ X,freq = mlab.psd(d, NFFT=fftlen, noverlap=fftlen/4, Fs=fs_o,
+ window = lambda d: d*winfunc(fftlen),
+ scale_by_freq=True)
+ X_o = 10.0*scipy.log10(abs(X))
+ f_o = scipy.arange(-fs_o/2.0, fs_o/2.0, fs_o/float(X_o.size))
+ p2_f = sp1_f.plot(f_o, X_o, "b")
+ sp1_f.set_xlim([min(f_o), max(f_o)+1])
+ sp1_f.set_ylim([-200.0, 50.0])
+
+ sp1_f.set_title(("Channel %d" % i), weight="bold")
+ sp1_f.set_xlabel("Frequency (Hz)")
+ sp1_f.set_ylabel("Power (dBW)")
+
+ x_o = scipy.array(d)
+ t_o = scipy.arange(0, Tmax_o, Ts_o)
+ sp2_o = fig2.add_subplot(Nrows, Ncols, 1+i)
+ p2_o = sp2_o.plot(t_o, x_o.real, "b")
+ p2_o = sp2_o.plot(t_o, x_o.imag, "r")
+ sp2_o.set_xlim([min(t_o), max(t_o)+1])
+ sp2_o.set_ylim([-2, 2])
+
+ sp2_o.set_title(("Channel %d" % i), weight="bold")
+ sp2_o.set_xlabel("Time (s)")
+ sp2_o.set_ylabel("Amplitude")
+
+ pylab.show()
+
+
+if __name__ == "__main__":
+ try:
+ main()
+ except KeyboardInterrupt:
+ pass
+
diff --git a/gnuradio-core/src/examples/pfb/chirp_channelize.py b/gnuradio-core/src/examples/pfb/chirp_channelize.py
new file mode 100755
index 000000000..951255d3b
--- /dev/null
+++ b/gnuradio-core/src/examples/pfb/chirp_channelize.py
@@ -0,0 +1,203 @@
+#!/usr/bin/env python
+#
+# 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, blks2
+import sys, time
+
+try:
+ import scipy
+ from scipy import fftpack
+except ImportError:
+ print "Error: Program requires scipy (see: www.scipy.org)."
+ sys.exit(1)
+
+try:
+ import pylab
+ from pylab import mlab
+except ImportError:
+ print "Error: Program requires matplotlib (see: matplotlib.sourceforge.net)."
+ sys.exit(1)
+
+class pfb_top_block(gr.top_block):
+ def __init__(self):
+ gr.top_block.__init__(self)
+
+ self._N = 200000 # number of samples to use
+ self._fs = 9000 # initial sampling rate
+ self._M = 9 # Number of channels to channelize
+
+ # Create a set of taps for the PFB channelizer
+ self._taps = gr.firdes.low_pass_2(1, self._fs, 500, 20,
+ attenuation_dB=10, window=gr.firdes.WIN_BLACKMAN_hARRIS)
+
+ # Calculate the number of taps per channel for our own information
+ tpc = scipy.ceil(float(len(self._taps)) / float(self._M))
+ print "Number of taps: ", len(self._taps)
+ print "Number of channels: ", self._M
+ print "Taps per channel: ", tpc
+
+ repeated = True
+ if(repeated):
+ self.vco_input = gr.sig_source_f(self._fs, gr.GR_SIN_WAVE, 0.25, 110)
+ else:
+ amp = 100
+ data = scipy.arange(0, amp, amp/float(self._N))
+ self.vco_input = gr.vector_source_f(data, False)
+
+ # Build a VCO controlled by either the sinusoid or single chirp tone
+ # Then convert this to a complex signal
+ self.vco = gr.vco_f(self._fs, 225, 1)
+ self.f2c = gr.float_to_complex()
+
+ self.head = gr.head(gr.sizeof_gr_complex, self._N)
+
+ # Construct the channelizer filter
+ self.pfb = blks2.pfb_channelizer_ccf(self._M, self._taps)
+
+ # Construct a vector sink for the input signal to the channelizer
+ self.snk_i = gr.vector_sink_c()
+
+ # Connect the blocks
+ self.connect(self.vco_input, self.vco, self.f2c)
+ self.connect(self.f2c, self.head, self.pfb)
+ self.connect(self.f2c, self.snk_i)
+
+ # Create a vector sink for each of M output channels of the filter and connect it
+ self.snks = list()
+ for i in xrange(self._M):
+ self.snks.append(gr.vector_sink_c())
+ self.connect((self.pfb, i), self.snks[i])
+
+
+def main():
+ tstart = time.time()
+
+ tb = pfb_top_block()
+ tb.run()
+
+ tend = time.time()
+ print "Run time: %f" % (tend - tstart)
+
+ if 1:
+ fig_in = pylab.figure(1, figsize=(16,9), facecolor="w")
+ fig1 = pylab.figure(2, figsize=(16,9), facecolor="w")
+ fig2 = pylab.figure(3, figsize=(16,9), facecolor="w")
+ fig3 = pylab.figure(4, figsize=(16,9), facecolor="w")
+
+ Ns = 650
+ Ne = 20000
+
+ fftlen = 8192
+ winfunc = scipy.blackman
+ fs = tb._fs
+
+ # Plot the input signal on its own figure
+ d = tb.snk_i.data()[Ns:Ne]
+ spin_f = fig_in.add_subplot(2, 1, 1)
+
+ X,freq = mlab.psd(d, NFFT=fftlen, noverlap=fftlen/4, Fs=fs,
+ window = lambda d: d*winfunc(fftlen),
+ scale_by_freq=True)
+ X_in = 10.0*scipy.log10(abs(fftpack.fftshift(X)))
+ f_in = scipy.arange(-fs/2.0, fs/2.0, fs/float(X_in.size))
+ pin_f = spin_f.plot(f_in, X_in, "b")
+ spin_f.set_xlim([min(f_in), max(f_in)+1])
+ spin_f.set_ylim([-200.0, 50.0])
+
+ spin_f.set_title("Input Signal", weight="bold")
+ spin_f.set_xlabel("Frequency (Hz)")
+ spin_f.set_ylabel("Power (dBW)")
+
+
+ Ts = 1.0/fs
+ Tmax = len(d)*Ts
+
+ t_in = scipy.arange(0, Tmax, Ts)
+ x_in = scipy.array(d)
+ spin_t = fig_in.add_subplot(2, 1, 2)
+ pin_t = spin_t.plot(t_in, x_in.real, "b")
+ pin_t = spin_t.plot(t_in, x_in.imag, "r")
+
+ spin_t.set_xlabel("Time (s)")
+ spin_t.set_ylabel("Amplitude")
+
+ Ncols = int(scipy.floor(scipy.sqrt(tb._M)))
+ Nrows = int(scipy.floor(tb._M / Ncols))
+ if(tb._M % Ncols != 0):
+ Nrows += 1
+
+ # Plot each of the channels outputs. Frequencies on Figure 2 and
+ # time signals on Figure 3
+ fs_o = tb._fs / tb._M
+ Ts_o = 1.0/fs_o
+ Tmax_o = len(d)*Ts_o
+ for i in xrange(len(tb.snks)):
+ # remove issues with the transients at the beginning
+ # also remove some corruption at the end of the stream
+ # this is a bug, probably due to the corner cases
+ d = tb.snks[i].data()[Ns:Ne]
+
+ sp1_f = fig1.add_subplot(Nrows, Ncols, 1+i)
+ X,freq = mlab.psd(d, NFFT=fftlen, noverlap=fftlen/4, Fs=fs_o,
+ window = lambda d: d*winfunc(fftlen),
+ scale_by_freq=True)
+ X_o = 10.0*scipy.log10(abs(X))
+ f_o = freq
+ p2_f = sp1_f.plot(f_o, X_o, "b")
+ sp1_f.set_xlim([min(f_o), max(f_o)+1])
+ sp1_f.set_ylim([-200.0, 50.0])
+
+ sp1_f.set_title(("Channel %d" % i), weight="bold")
+ sp1_f.set_xlabel("Frequency (Hz)")
+ sp1_f.set_ylabel("Power (dBW)")
+
+ x_o = scipy.array(d)
+ t_o = scipy.arange(0, Tmax_o, Ts_o)
+ sp2_o = fig2.add_subplot(Nrows, Ncols, 1+i)
+ p2_o = sp2_o.plot(t_o, x_o.real, "b")
+ p2_o = sp2_o.plot(t_o, x_o.imag, "r")
+ sp2_o.set_xlim([min(t_o), max(t_o)+1])
+ sp2_o.set_ylim([-2, 2])
+
+ sp2_o.set_title(("Channel %d" % i), weight="bold")
+ sp2_o.set_xlabel("Time (s)")
+ sp2_o.set_ylabel("Amplitude")
+
+
+ sp3 = fig3.add_subplot(1,1,1)
+ p3 = sp3.plot(t_o, x_o.real)
+ sp3.set_xlim([min(t_o), max(t_o)+1])
+ sp3.set_ylim([-2, 2])
+
+ sp3.set_title("All Channels")
+ sp3.set_xlabel("Time (s)")
+ sp3.set_ylabel("Amplitude")
+
+ pylab.show()
+
+
+if __name__ == "__main__":
+ try:
+ main()
+ except KeyboardInterrupt:
+ pass
+
diff --git a/gnuradio-core/src/examples/pfb/decimate.py b/gnuradio-core/src/examples/pfb/decimate.py
new file mode 100755
index 000000000..643a2c241
--- /dev/null
+++ b/gnuradio-core/src/examples/pfb/decimate.py
@@ -0,0 +1,178 @@
+#!/usr/bin/env python
+#
+# 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, blks2
+import sys, time
+
+try:
+ import scipy
+ from scipy import fftpack
+except ImportError:
+ print "Error: Program requires scipy (see: www.scipy.org)."
+ sys.exit(1)
+
+try:
+ import pylab
+ from pylab import mlab
+except ImportError:
+ print "Error: Program requires matplotlib (see: matplotlib.sourceforge.net)."
+ sys.exit(1)
+
+class pfb_top_block(gr.top_block):
+ def __init__(self):
+ gr.top_block.__init__(self)
+
+ self._N = 10000000 # number of samples to use
+ self._fs = 10000 # initial sampling rate
+ self._decim = 20 # Decimation rate
+
+ # Generate the prototype filter taps for the decimators with a 200 Hz bandwidth
+ self._taps = gr.firdes.low_pass_2(1, self._fs, 200, 150,
+ attenuation_dB=120, window=gr.firdes.WIN_BLACKMAN_hARRIS)
+
+ # Calculate the number of taps per channel for our own information
+ tpc = scipy.ceil(float(len(self._taps)) / float(self._decim))
+ print "Number of taps: ", len(self._taps)
+ print "Number of filters: ", self._decim
+ print "Taps per channel: ", tpc
+
+ # Build the input signal source
+ # We create a list of freqs, and a sine wave is generated and added to the source
+ # for each one of these frequencies.
+ self.signals = list()
+ self.add = gr.add_cc()
+ freqs = [10, 20, 2040]
+ for i in xrange(len(freqs)):
+ self.signals.append(gr.sig_source_c(self._fs, gr.GR_SIN_WAVE, freqs[i], 1))
+ self.connect(self.signals[i], (self.add,i))
+
+ self.head = gr.head(gr.sizeof_gr_complex, self._N)
+
+ # Construct a PFB decimator filter
+ self.pfb = blks2.pfb_decimator_ccf(self._decim, self._taps, 0)
+
+ # Construct a standard FIR decimating filter
+ self.dec = gr.fir_filter_ccf(self._decim, self._taps)
+
+ self.snk_i = gr.vector_sink_c()
+
+ # Connect the blocks
+ self.connect(self.add, self.head, self.pfb)
+ self.connect(self.add, self.snk_i)
+
+ # Create the sink for the decimated siganl
+ self.snk = gr.vector_sink_c()
+ self.connect(self.pfb, self.snk)
+
+
+def main():
+ tb = pfb_top_block()
+
+ tstart = time.time()
+ tb.run()
+ tend = time.time()
+ print "Run time: %f" % (tend - tstart)
+
+ if 1:
+ fig1 = pylab.figure(1, figsize=(16,9))
+ fig2 = pylab.figure(2, figsize=(16,9))
+
+ Ns = 10000
+ Ne = 10000
+
+ fftlen = 8192
+ winfunc = scipy.blackman
+ fs = tb._fs
+
+ # Plot the input to the decimator
+
+ d = tb.snk_i.data()[Ns:Ns+Ne]
+ sp1_f = fig1.add_subplot(2, 1, 1)
+
+ X,freq = mlab.psd(d, NFFT=fftlen, noverlap=fftlen/4, Fs=fs,
+ window = lambda d: d*winfunc(fftlen),
+ scale_by_freq=True)
+ X_in = 10.0*scipy.log10(abs(fftpack.fftshift(X)))
+ f_in = scipy.arange(-fs/2.0, fs/2.0, fs/float(X_in.size))
+ p1_f = sp1_f.plot(f_in, X_in, "b")
+ sp1_f.set_xlim([min(f_in), max(f_in)+1])
+ sp1_f.set_ylim([-200.0, 50.0])
+
+ sp1_f.set_title("Input Signal", weight="bold")
+ sp1_f.set_xlabel("Frequency (Hz)")
+ sp1_f.set_ylabel("Power (dBW)")
+
+ Ts = 1.0/fs
+ Tmax = len(d)*Ts
+
+ t_in = scipy.arange(0, Tmax, Ts)
+ x_in = scipy.array(d)
+ sp1_t = fig1.add_subplot(2, 1, 2)
+ p1_t = sp1_t.plot(t_in, x_in.real, "b")
+ p1_t = sp1_t.plot(t_in, x_in.imag, "r")
+ sp1_t.set_ylim([-tb._decim*1.1, tb._decim*1.1])
+
+ sp1_t.set_xlabel("Time (s)")
+ sp1_t.set_ylabel("Amplitude")
+
+
+ # Plot the output of the decimator
+ fs_o = tb._fs / tb._decim
+
+ sp2_f = fig2.add_subplot(2, 1, 1)
+ d = tb.snk.data()[Ns:Ns+Ne]
+ X,freq = mlab.psd(d, NFFT=fftlen, noverlap=fftlen/4, Fs=fs_o,
+ window = lambda d: d*winfunc(fftlen),
+ scale_by_freq=True)
+ X_o = 10.0*scipy.log10(abs(fftpack.fftshift(X)))
+ f_o = scipy.arange(-fs_o/2.0, fs_o/2.0, fs_o/float(X_o.size))
+ p2_f = sp2_f.plot(f_o, X_o, "b")
+ sp2_f.set_xlim([min(f_o), max(f_o)+1])
+ sp2_f.set_ylim([-200.0, 50.0])
+
+ sp2_f.set_title("PFB Decimated Signal", weight="bold")
+ sp2_f.set_xlabel("Frequency (Hz)")
+ sp2_f.set_ylabel("Power (dBW)")
+
+
+ Ts_o = 1.0/fs_o
+ Tmax_o = len(d)*Ts_o
+
+ x_o = scipy.array(d)
+ t_o = scipy.arange(0, Tmax_o, Ts_o)
+ sp2_t = fig2.add_subplot(2, 1, 2)
+ p2_t = sp2_t.plot(t_o, x_o.real, "b-o")
+ p2_t = sp2_t.plot(t_o, x_o.imag, "r-o")
+ sp2_t.set_ylim([-2.5, 2.5])
+
+ sp2_t.set_xlabel("Time (s)")
+ sp2_t.set_ylabel("Amplitude")
+
+ pylab.show()
+
+
+if __name__ == "__main__":
+ try:
+ main()
+ except KeyboardInterrupt:
+ pass
+
diff --git a/gnuradio-core/src/examples/pfb/fmtest.py b/gnuradio-core/src/examples/pfb/fmtest.py
new file mode 100755
index 000000000..635ee4e9e
--- /dev/null
+++ b/gnuradio-core/src/examples/pfb/fmtest.py
@@ -0,0 +1,225 @@
+#!/usr/bin/env python
+#
+# 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, blks2
+import sys, math, time
+
+try:
+ import scipy
+ from scipy import fftpack
+except ImportError:
+ print "Error: Program requires scipy (see: www.scipy.org)."
+ sys.exit(1)
+
+try:
+ import pylab
+except ImportError:
+ print "Error: Program requires matplotlib (see: matplotlib.sourceforge.net)."
+ sys.exit(1)
+
+
+class fmtx(gr.hier_block2):
+ def __init__(self, lo_freq, audio_rate, if_rate):
+
+ gr.hier_block2.__init__(self, "build_fm",
+ gr.io_signature(1, 1, gr.sizeof_float), # Input signature
+ gr.io_signature(1, 1, gr.sizeof_gr_complex)) # Output signature
+
+ fmtx = blks2.nbfm_tx (audio_rate, if_rate, max_dev=5e3, tau=75e-6)
+
+ # Local oscillator
+ lo = gr.sig_source_c (if_rate, # sample rate
+ gr.GR_SIN_WAVE, # waveform type
+ lo_freq, #frequency
+ 1.0, # amplitude
+ 0) # DC Offset
+ mixer = gr.multiply_cc ()
+
+ self.connect (self, fmtx, (mixer, 0))
+ self.connect (lo, (mixer, 1))
+ self.connect (mixer, self)
+
+class fmtest(gr.top_block):
+ def __init__(self):
+ gr.top_block.__init__(self)
+
+ self._nsamples = 1000000
+ self._audio_rate = 8000
+
+ # Set up N channels with their own baseband and IF frequencies
+ self._N = 5
+ chspacing = 16000
+ freq = [10, 20, 30, 40, 50]
+ f_lo = [0, 1*chspacing, -1*chspacing, 2*chspacing, -2*chspacing]
+
+ self._if_rate = 4*self._N*self._audio_rate
+
+ # Create a signal source and frequency modulate it
+ self.sum = gr.add_cc ()
+ for n in xrange(self._N):
+ sig = gr.sig_source_f(self._audio_rate, gr.GR_SIN_WAVE, freq[n], 0.5)
+ fm = fmtx(f_lo[n], self._audio_rate, self._if_rate)
+ self.connect(sig, fm)
+ self.connect(fm, (self.sum, n))
+
+ self.head = gr.head(gr.sizeof_gr_complex, self._nsamples)
+ self.snk_tx = gr.vector_sink_c()
+ self.channel = blks2.channel_model(0.1)
+
+ self.connect(self.sum, self.head, self.channel, self.snk_tx)
+
+
+ # Design the channlizer
+ self._M = 10
+ bw = chspacing/2.0
+ t_bw = chspacing/10.0
+ self._chan_rate = self._if_rate / self._M
+ self._taps = gr.firdes.low_pass_2(1, self._if_rate, bw, t_bw,
+ attenuation_dB=100,
+ window=gr.firdes.WIN_BLACKMAN_hARRIS)
+ tpc = math.ceil(float(len(self._taps)) / float(self._M))
+
+ print "Number of taps: ", len(self._taps)
+ print "Number of channels: ", self._M
+ print "Taps per channel: ", tpc
+
+ self.pfb = blks2.pfb_channelizer_ccf(self._M, self._taps)
+
+ self.connect(self.channel, self.pfb)
+
+ # Create a file sink for each of M output channels of the filter and connect it
+ self.fmdet = list()
+ self.squelch = list()
+ self.snks = list()
+ for i in xrange(self._M):
+ self.fmdet.append(blks2.nbfm_rx(self._audio_rate, self._chan_rate))
+ self.squelch.append(blks2.standard_squelch(self._audio_rate*10))
+ self.snks.append(gr.vector_sink_f())
+ self.connect((self.pfb, i), self.fmdet[i], self.squelch[i], self.snks[i])
+
+ def num_tx_channels(self):
+ return self._N
+
+ def num_rx_channels(self):
+ return self._M
+
+def main():
+
+ fm = fmtest()
+
+ tstart = time.time()
+ fm.run()
+ tend = time.time()
+
+ if 1:
+ fig1 = pylab.figure(1, figsize=(12,10), facecolor="w")
+ fig2 = pylab.figure(2, figsize=(12,10), facecolor="w")
+ fig3 = pylab.figure(3, figsize=(12,10), facecolor="w")
+
+ Ns = 10000
+ Ne = 100000
+
+ fftlen = 8192
+ winfunc = scipy.blackman
+
+ # Plot transmitted signal
+ fs = fm._if_rate
+
+ d = fm.snk_tx.data()[Ns:Ns+Ne]
+ sp1_f = fig1.add_subplot(2, 1, 1)
+
+ X,freq = sp1_f.psd(d, NFFT=fftlen, noverlap=fftlen/4, Fs=fs,
+ window = lambda d: d*winfunc(fftlen),
+ visible=False)
+ X_in = 10.0*scipy.log10(abs(fftpack.fftshift(X)))
+ f_in = scipy.arange(-fs/2.0, fs/2.0, fs/float(X_in.size))
+ p1_f = sp1_f.plot(f_in, X_in, "b")
+ sp1_f.set_xlim([min(f_in), max(f_in)+1])
+ sp1_f.set_ylim([-120.0, 20.0])
+
+ sp1_f.set_title("Input Signal", weight="bold")
+ sp1_f.set_xlabel("Frequency (Hz)")
+ sp1_f.set_ylabel("Power (dBW)")
+
+ Ts = 1.0/fs
+ Tmax = len(d)*Ts
+
+ t_in = scipy.arange(0, Tmax, Ts)
+ x_in = scipy.array(d)
+ sp1_t = fig1.add_subplot(2, 1, 2)
+ p1_t = sp1_t.plot(t_in, x_in.real, "b-o")
+ #p1_t = sp1_t.plot(t_in, x_in.imag, "r-o")
+ sp1_t.set_ylim([-5, 5])
+
+ # Set up the number of rows and columns for plotting the subfigures
+ Ncols = int(scipy.floor(scipy.sqrt(fm.num_rx_channels())))
+ Nrows = int(scipy.floor(fm.num_rx_channels() / Ncols))
+ if(fm.num_rx_channels() % Ncols != 0):
+ Nrows += 1
+
+ # Plot each of the channels outputs. Frequencies on Figure 2 and
+ # time signals on Figure 3
+ fs_o = fm._audio_rate
+ for i in xrange(len(fm.snks)):
+ # remove issues with the transients at the beginning
+ # also remove some corruption at the end of the stream
+ # this is a bug, probably due to the corner cases
+ d = fm.snks[i].data()[Ns:Ne]
+
+ sp2_f = fig2.add_subplot(Nrows, Ncols, 1+i)
+ X,freq = sp2_f.psd(d, NFFT=fftlen, noverlap=fftlen/4, Fs=fs_o,
+ window = lambda d: d*winfunc(fftlen),
+ visible=False)
+ #X_o = 10.0*scipy.log10(abs(fftpack.fftshift(X)))
+ X_o = 10.0*scipy.log10(abs(X))
+ #f_o = scipy.arange(-fs_o/2.0, fs_o/2.0, fs_o/float(X_o.size))
+ f_o = scipy.arange(0, fs_o/2.0, fs_o/2.0/float(X_o.size))
+ p2_f = sp2_f.plot(f_o, X_o, "b")
+ sp2_f.set_xlim([min(f_o), max(f_o)+0.1])
+ sp2_f.set_ylim([-120.0, 20.0])
+ sp2_f.grid(True)
+
+ sp2_f.set_title(("Channel %d" % i), weight="bold")
+ sp2_f.set_xlabel("Frequency (kHz)")
+ sp2_f.set_ylabel("Power (dBW)")
+
+
+ Ts = 1.0/fs_o
+ Tmax = len(d)*Ts
+ t_o = scipy.arange(0, Tmax, Ts)
+
+ x_t = scipy.array(d)
+ sp2_t = fig3.add_subplot(Nrows, Ncols, 1+i)
+ p2_t = sp2_t.plot(t_o, x_t.real, "b")
+ p2_t = sp2_t.plot(t_o, x_t.imag, "r")
+ sp2_t.set_xlim([min(t_o), max(t_o)+1])
+ sp2_t.set_ylim([-1, 1])
+
+ sp2_t.set_xlabel("Time (s)")
+ sp2_t.set_ylabel("Amplitude")
+
+
+ pylab.show()
+
+
+if __name__ == "__main__":
+ main()
diff --git a/gnuradio-core/src/examples/pfb/interpolate.py b/gnuradio-core/src/examples/pfb/interpolate.py
new file mode 100755
index 000000000..370cf26a7
--- /dev/null
+++ b/gnuradio-core/src/examples/pfb/interpolate.py
@@ -0,0 +1,233 @@
+#!/usr/bin/env python
+#
+# 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, blks2
+import sys, time
+
+try:
+ import scipy
+ from scipy import fftpack
+except ImportError:
+ print "Error: Program requires scipy (see: www.scipy.org)."
+ sys.exit(1)
+
+try:
+ import pylab
+ from pylab import mlab
+except ImportError:
+ print "Error: Program requires matplotlib (see: matplotlib.sourceforge.net)."
+ sys.exit(1)
+
+class pfb_top_block(gr.top_block):
+ def __init__(self):
+ gr.top_block.__init__(self)
+
+ self._N = 100000 # number of samples to use
+ self._fs = 2000 # initial sampling rate
+ self._interp = 5 # Interpolation rate for PFB interpolator
+ self._ainterp = 5.5 # Resampling rate for the PFB arbitrary resampler
+
+ # Frequencies of the signals we construct
+ freq1 = 100
+ freq2 = 200
+
+ # Create a set of taps for the PFB interpolator
+ # This is based on the post-interpolation sample rate
+ self._taps = gr.firdes.low_pass_2(self._interp, self._interp*self._fs, freq2+50, 50,
+ attenuation_dB=120, window=gr.firdes.WIN_BLACKMAN_hARRIS)
+
+ # Create a set of taps for the PFB arbitrary resampler
+ # The filter size is the number of filters in the filterbank; 32 will give very low side-lobes,
+ # and larger numbers will reduce these even farther
+ # The taps in this filter are based on a sampling rate of the filter size since it acts
+ # internally as an interpolator.
+ flt_size = 32
+ self._taps2 = gr.firdes.low_pass_2(flt_size, flt_size*self._fs, freq2+50, 150,
+ attenuation_dB=120, window=gr.firdes.WIN_BLACKMAN_hARRIS)
+
+ # Calculate the number of taps per channel for our own information
+ tpc = scipy.ceil(float(len(self._taps)) / float(self._interp))
+ print "Number of taps: ", len(self._taps)
+ print "Number of filters: ", self._interp
+ print "Taps per channel: ", tpc
+
+ # Create a couple of signals at different frequencies
+ self.signal1 = gr.sig_source_c(self._fs, gr.GR_SIN_WAVE, freq1, 0.5)
+ self.signal2 = gr.sig_source_c(self._fs, gr.GR_SIN_WAVE, freq2, 0.5)
+ self.signal = gr.add_cc()
+
+ self.head = gr.head(gr.sizeof_gr_complex, self._N)
+
+ # Construct the PFB interpolator filter
+ self.pfb = blks2.pfb_interpolator_ccf(self._interp, self._taps)
+
+ # Construct the PFB arbitrary resampler filter
+ self.pfb_ar = blks2.pfb_arb_resampler_ccf(self._ainterp, self._taps2, flt_size)
+ self.snk_i = gr.vector_sink_c()
+
+ #self.pfb_ar.pfb.print_taps()
+ #self.pfb.pfb.print_taps()
+
+ # Connect the blocks
+ self.connect(self.signal1, self.head, (self.signal,0))
+ self.connect(self.signal2, (self.signal,1))
+ self.connect(self.signal, self.pfb)
+ self.connect(self.signal, self.pfb_ar)
+ self.connect(self.signal, self.snk_i)
+
+ # Create the sink for the interpolated signals
+ self.snk1 = gr.vector_sink_c()
+ self.snk2 = gr.vector_sink_c()
+ self.connect(self.pfb, self.snk1)
+ self.connect(self.pfb_ar, self.snk2)
+
+
+def main():
+ tb = pfb_top_block()
+
+ tstart = time.time()
+ tb.run()
+ tend = time.time()
+ print "Run time: %f" % (tend - tstart)
+
+
+ if 1:
+ fig1 = pylab.figure(1, figsize=(12,10), facecolor="w")
+ fig2 = pylab.figure(2, figsize=(12,10), facecolor="w")
+ fig3 = pylab.figure(3, figsize=(12,10), facecolor="w")
+
+ Ns = 10000
+ Ne = 10000
+
+ fftlen = 8192
+ winfunc = scipy.blackman
+
+ # Plot input signal
+ fs = tb._fs
+
+ d = tb.snk_i.data()[Ns:Ns+Ne]
+ sp1_f = fig1.add_subplot(2, 1, 1)
+
+ X,freq = mlab.psd(d, NFFT=fftlen, noverlap=fftlen/4, Fs=fs,
+ window = lambda d: d*winfunc(fftlen),
+ scale_by_freq=True)
+ X_in = 10.0*scipy.log10(abs(fftpack.fftshift(X)))
+ f_in = scipy.arange(-fs/2.0, fs/2.0, fs/float(X_in.size))
+ p1_f = sp1_f.plot(f_in, X_in, "b")
+ sp1_f.set_xlim([min(f_in), max(f_in)+1])
+ sp1_f.set_ylim([-200.0, 50.0])
+
+
+ sp1_f.set_title("Input Signal", weight="bold")
+ sp1_f.set_xlabel("Frequency (Hz)")
+ sp1_f.set_ylabel("Power (dBW)")
+
+ Ts = 1.0/fs
+ Tmax = len(d)*Ts
+
+ t_in = scipy.arange(0, Tmax, Ts)
+ x_in = scipy.array(d)
+ sp1_t = fig1.add_subplot(2, 1, 2)
+ p1_t = sp1_t.plot(t_in, x_in.real, "b-o")
+ #p1_t = sp1_t.plot(t_in, x_in.imag, "r-o")
+ sp1_t.set_ylim([-2.5, 2.5])
+
+ sp1_t.set_title("Input Signal", weight="bold")
+ sp1_t.set_xlabel("Time (s)")
+ sp1_t.set_ylabel("Amplitude")
+
+
+ # Plot output of PFB interpolator
+ fs_int = tb._fs*tb._interp
+
+ sp2_f = fig2.add_subplot(2, 1, 1)
+ d = tb.snk1.data()[Ns:Ns+(tb._interp*Ne)]
+ X,freq = mlab.psd(d, NFFT=fftlen, noverlap=fftlen/4, Fs=fs,
+ window = lambda d: d*winfunc(fftlen),
+ scale_by_freq=True)
+ X_o = 10.0*scipy.log10(abs(fftpack.fftshift(X)))
+ f_o = scipy.arange(-fs_int/2.0, fs_int/2.0, fs_int/float(X_o.size))
+ p2_f = sp2_f.plot(f_o, X_o, "b")
+ sp2_f.set_xlim([min(f_o), max(f_o)+1])
+ sp2_f.set_ylim([-200.0, 50.0])
+
+ sp2_f.set_title("Output Signal from PFB Interpolator", weight="bold")
+ sp2_f.set_xlabel("Frequency (Hz)")
+ sp2_f.set_ylabel("Power (dBW)")
+
+ Ts_int = 1.0/fs_int
+ Tmax = len(d)*Ts_int
+
+ t_o = scipy.arange(0, Tmax, Ts_int)
+ x_o1 = scipy.array(d)
+ sp2_t = fig2.add_subplot(2, 1, 2)
+ p2_t = sp2_t.plot(t_o, x_o1.real, "b-o")
+ #p2_t = sp2_t.plot(t_o, x_o.imag, "r-o")
+ sp2_t.set_ylim([-2.5, 2.5])
+
+ sp2_t.set_title("Output Signal from PFB Interpolator", weight="bold")
+ sp2_t.set_xlabel("Time (s)")
+ sp2_t.set_ylabel("Amplitude")
+
+
+ # Plot output of PFB arbitrary resampler
+ fs_aint = tb._fs * tb._ainterp
+
+ sp3_f = fig3.add_subplot(2, 1, 1)
+ d = tb.snk2.data()[Ns:Ns+(tb._interp*Ne)]
+ X,freq = mlab.psd(d, NFFT=fftlen, noverlap=fftlen/4, Fs=fs,
+ window = lambda d: d*winfunc(fftlen),
+ scale_by_freq=True)
+ X_o = 10.0*scipy.log10(abs(fftpack.fftshift(X)))
+ f_o = scipy.arange(-fs_aint/2.0, fs_aint/2.0, fs_aint/float(X_o.size))
+ p3_f = sp3_f.plot(f_o, X_o, "b")
+ sp3_f.set_xlim([min(f_o), max(f_o)+1])
+ sp3_f.set_ylim([-200.0, 50.0])
+
+ sp3_f.set_title("Output Signal from PFB Arbitrary Resampler", weight="bold")
+ sp3_f.set_xlabel("Frequency (Hz)")
+ sp3_f.set_ylabel("Power (dBW)")
+
+ Ts_aint = 1.0/fs_aint
+ Tmax = len(d)*Ts_aint
+
+ t_o = scipy.arange(0, Tmax, Ts_aint)
+ x_o2 = scipy.array(d)
+ sp3_f = fig3.add_subplot(2, 1, 2)
+ p3_f = sp3_f.plot(t_o, x_o2.real, "b-o")
+ p3_f = sp3_f.plot(t_o, x_o1.real, "m-o")
+ #p3_f = sp3_f.plot(t_o, x_o2.imag, "r-o")
+ sp3_f.set_ylim([-2.5, 2.5])
+
+ sp3_f.set_title("Output Signal from PFB Arbitrary Resampler", weight="bold")
+ sp3_f.set_xlabel("Time (s)")
+ sp3_f.set_ylabel("Amplitude")
+
+ pylab.show()
+
+
+if __name__ == "__main__":
+ try:
+ main()
+ except KeyboardInterrupt:
+ pass
+
diff --git a/gnuradio-core/src/examples/pfb/reconstruction.py b/gnuradio-core/src/examples/pfb/reconstruction.py
new file mode 100755
index 000000000..c7909f7a5
--- /dev/null
+++ b/gnuradio-core/src/examples/pfb/reconstruction.py
@@ -0,0 +1,131 @@
+#!/usr/bin/env python
+
+import scipy, math, pylab
+from scipy import fftpack
+from gnuradio import gr, digital, blks2
+
+fftlen = 8192
+
+def main():
+ N = 10000
+ fs = 2000.0
+ Ts = 1.0/fs
+ t = scipy.arange(0, N*Ts, Ts)
+
+ # When playing with the number of channels, be careful about the filter
+ # specs and the channel map of the synthesizer set below.
+ nchans = 10
+
+ # Build the filter(s)
+ bw = 1000
+ tb = 400
+ proto_taps = gr.firdes.low_pass_2(1, nchans*fs, bw, tb, 80,
+ gr.firdes.WIN_BLACKMAN_hARRIS)
+ print "Filter length: ", len(proto_taps)
+
+
+ # Create a modulated signal
+ npwr = 0.01
+ data = scipy.random.randint(0, 256, N)
+ rrc_taps = gr.firdes.root_raised_cosine(1, 2, 1, 0.35, 41)
+
+ src = gr.vector_source_b(data.astype(scipy.uint8).tolist(), False)
+ mod = digital.bpsk_mod(samples_per_symbol=2)
+ chan = gr.channel_model(npwr)
+ rrc = gr.fft_filter_ccc(1, rrc_taps)
+
+ # Split it up into pieces
+ channelizer = blks2.pfb_channelizer_ccf(nchans, proto_taps, 2)
+
+ # Put the pieces back together again
+ syn_taps = [nchans*t for t in proto_taps]
+ synthesizer = gr.pfb_synthesizer_ccf(nchans, syn_taps, True)
+ src_snk = gr.vector_sink_c()
+ snk = gr.vector_sink_c()
+
+ # Remap the location of the channels
+ # Can be done in synth or channelizer (watch out for rotattions in
+ # the channelizer)
+ synthesizer.set_channel_map([ 0, 1, 2, 3, 4,
+ 15, 16, 17, 18, 19])
+
+ tb = gr.top_block()
+ tb.connect(src, mod, chan, rrc, channelizer)
+ tb.connect(rrc, src_snk)
+
+ vsnk = []
+ for i in xrange(nchans):
+ tb.connect((channelizer,i), (synthesizer, i))
+
+ vsnk.append(gr.vector_sink_c())
+ tb.connect((channelizer,i), vsnk[i])
+
+ tb.connect(synthesizer, snk)
+ tb.run()
+
+ sin = scipy.array(src_snk.data()[1000:])
+ sout = scipy.array(snk.data()[1000:])
+
+
+ # Plot original signal
+ fs_in = nchans*fs
+ f1 = pylab.figure(1, figsize=(16,12), facecolor='w')
+ s11 = f1.add_subplot(2,2,1)
+ s11.psd(sin, NFFT=fftlen, Fs=fs_in)
+ s11.set_title("PSD of Original Signal")
+ s11.set_ylim([-200, -20])
+
+ s12 = f1.add_subplot(2,2,2)
+ s12.plot(sin.real[1000:1500], "o-b")
+ s12.plot(sin.imag[1000:1500], "o-r")
+ s12.set_title("Original Signal in Time")
+
+ start = 1
+ skip = 4
+ s13 = f1.add_subplot(2,2,3)
+ s13.plot(sin.real[start::skip], sin.imag[start::skip], "o")
+ s13.set_title("Constellation")
+ s13.set_xlim([-2, 2])
+ s13.set_ylim([-2, 2])
+
+ # Plot channels
+ nrows = int(scipy.sqrt(nchans))
+ ncols = int(scipy.ceil(float(nchans)/float(nrows)))
+
+ f2 = pylab.figure(2, figsize=(16,12), facecolor='w')
+ for n in xrange(nchans):
+ s = f2.add_subplot(nrows, ncols, n+1)
+ s.psd(vsnk[n].data(), NFFT=fftlen, Fs=fs_in)
+ s.set_title("Channel {0}".format(n))
+ s.set_ylim([-200, -20])
+
+ # Plot reconstructed signal
+ fs_out = 2*nchans*fs
+ f3 = pylab.figure(3, figsize=(16,12), facecolor='w')
+ s31 = f3.add_subplot(2,2,1)
+ s31.psd(sout, NFFT=fftlen, Fs=fs_out)
+ s31.set_title("PSD of Reconstructed Signal")
+ s31.set_ylim([-200, -20])
+
+ s32 = f3.add_subplot(2,2,2)
+ s32.plot(sout.real[1000:1500], "o-b")
+ s32.plot(sout.imag[1000:1500], "o-r")
+ s32.set_title("Reconstructed Signal in Time")
+
+ start = 2
+ skip = 4
+ s33 = f3.add_subplot(2,2,3)
+ s33.plot(sout.real[start::skip], sout.imag[start::skip], "o")
+ s33.set_title("Constellation")
+ s33.set_xlim([-2, 2])
+ s33.set_ylim([-2, 2])
+
+ pylab.show()
+
+
+if __name__ == "__main__":
+ try:
+ main()
+ except KeyboardInterrupt:
+ pass
+
diff --git a/gnuradio-core/src/examples/pfb/resampler.py b/gnuradio-core/src/examples/pfb/resampler.py
new file mode 100755
index 000000000..7b296ca71
--- /dev/null
+++ b/gnuradio-core/src/examples/pfb/resampler.py
@@ -0,0 +1,127 @@
+#!/usr/bin/env python
+#
+# 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, blks2
+import sys
+
+try:
+ import scipy
+except ImportError:
+ print "Error: Program requires scipy (see: www.scipy.org)."
+ sys.exit(1)
+
+try:
+ import pylab
+except ImportError:
+ print "Error: Program requires matplotlib (see: matplotlib.sourceforge.net)."
+ sys.exit(1)
+
+class mytb(gr.top_block):
+ def __init__(self, fs_in, fs_out, fc, N=10000):
+ gr.top_block.__init__(self)
+
+ rerate = float(fs_out) / float(fs_in)
+ print "Resampling from %f to %f by %f " %(fs_in, fs_out, rerate)
+
+ # Creating our own taps
+ taps = gr.firdes.low_pass_2(32, 32, 0.25, 0.1, 80)
+
+ self.src = gr.sig_source_c(fs_in, gr.GR_SIN_WAVE, fc, 1)
+ #self.src = gr.noise_source_c(gr.GR_GAUSSIAN, 1)
+ self.head = gr.head(gr.sizeof_gr_complex, N)
+
+ # A resampler with our taps
+ self.resamp_0 = blks2.pfb_arb_resampler_ccf(rerate, taps,
+ flt_size=32)
+
+ # A resampler that just needs a resampling rate.
+ # Filter is created for us and designed to cover
+ # entire bandwidth of the input signal.
+ # An optional atten=XX rate can be used here to
+ # specify the out-of-band rejection (default=80).
+ self.resamp_1 = blks2.pfb_arb_resampler_ccf(rerate)
+
+ self.snk_in = gr.vector_sink_c()
+ self.snk_0 = gr.vector_sink_c()
+ self.snk_1 = gr.vector_sink_c()
+
+ self.connect(self.src, self.head, self.snk_in)
+ self.connect(self.head, self.resamp_0, self.snk_0)
+ self.connect(self.head, self.resamp_1, self.snk_1)
+
+def main():
+ fs_in = 8000
+ fs_out = 20000
+ fc = 1000
+ N = 10000
+
+ tb = mytb(fs_in, fs_out, fc, N)
+ tb.run()
+
+
+ # Plot PSD of signals
+ nfftsize = 2048
+ fig1 = pylab.figure(1, figsize=(10,10), facecolor="w")
+ sp1 = fig1.add_subplot(2,1,1)
+ sp1.psd(tb.snk_in.data(), NFFT=nfftsize,
+ noverlap=nfftsize/4, Fs = fs_in)
+ sp1.set_title(("Input Signal at f_s=%.2f kHz" % (fs_in/1000.0)))
+ sp1.set_xlim([-fs_in/2, fs_in/2])
+
+ sp2 = fig1.add_subplot(2,1,2)
+ sp2.psd(tb.snk_0.data(), NFFT=nfftsize,
+ noverlap=nfftsize/4, Fs = fs_out,
+ label="With our filter")
+ sp2.psd(tb.snk_1.data(), NFFT=nfftsize,
+ noverlap=nfftsize/4, Fs = fs_out,
+ label="With auto-generated filter")
+ sp2.set_title(("Output Signals at f_s=%.2f kHz" % (fs_out/1000.0)))
+ sp2.set_xlim([-fs_out/2, fs_out/2])
+ sp2.legend()
+
+ # Plot signals in time
+ Ts_in = 1.0/fs_in
+ Ts_out = 1.0/fs_out
+ t_in = scipy.arange(0, len(tb.snk_in.data())*Ts_in, Ts_in)
+ t_out = scipy.arange(0, len(tb.snk_0.data())*Ts_out, Ts_out)
+
+ fig2 = pylab.figure(2, figsize=(10,10), facecolor="w")
+ sp21 = fig2.add_subplot(2,1,1)
+ sp21.plot(t_in, tb.snk_in.data())
+ sp21.set_title(("Input Signal at f_s=%.2f kHz" % (fs_in/1000.0)))
+ sp21.set_xlim([t_in[100], t_in[200]])
+
+ sp22 = fig2.add_subplot(2,1,2)
+ sp22.plot(t_out, tb.snk_0.data(),
+ label="With our filter")
+ sp22.plot(t_out, tb.snk_1.data(),
+ label="With auto-generated filter")
+ sp22.set_title(("Output Signals at f_s=%.2f kHz" % (fs_out/1000.0)))
+ r = float(fs_out)/float(fs_in)
+ sp22.set_xlim([t_out[r * 100], t_out[r * 200]])
+ sp22.legend()
+
+ pylab.show()
+
+if __name__ == "__main__":
+ main()
+
diff --git a/gnuradio-core/src/examples/pfb/resampler_demo.grc b/gnuradio-core/src/examples/pfb/resampler_demo.grc
new file mode 100644
index 000000000..468636a5c
--- /dev/null
+++ b/gnuradio-core/src/examples/pfb/resampler_demo.grc
@@ -0,0 +1,598 @@
+
+
+ Sun Aug 23 11:39:47 2009
+
+ options
+
+ id
+ resampler_demo
+
+
+ _enabled
+ True
+
+
+ title
+
+
+
+ author
+
+
+
+ description
+
+
+
+ window_size
+ 1280, 1024
+
+
+ generate_options
+ wx_gui
+
+
+ category
+ Custom
+
+
+ run
+ True
+
+
+ realtime_scheduling
+
+
+
+ _coordinate
+ (10, 10)
+
+
+ _rotation
+ 0
+
+
+
+ import
+
+ id
+ import_0
+
+
+ _enabled
+ True
+
+
+ import
+ import math
+
+
+ _coordinate
+ (11, 59)
+
+
+ _rotation
+ 0
+
+
+
+ variable
+
+ id
+ rs_taps
+
+
+ _enabled
+ True
+
+
+ value
+ firdes.low_pass(nphases, nphases, frac_bw, 0.5-frac_bw)
+
+
+ _coordinate
+ (273, 154)
+
+
+ _rotation
+ 0
+
+
+
+ gr_add_const_vxx
+
+ id
+ adder
+
+
+ _enabled
+ True
+
+
+ type
+ float
+
+
+ const
+ -1.0
+
+
+ vlen
+ 1
+
+
+ _coordinate
+ (227, 303)
+
+
+ _rotation
+ 0
+
+
+
+ gr_throttle
+
+ id
+ throttle
+
+
+ _enabled
+ True
+
+
+ type
+ float
+
+
+ samples_per_second
+ samp_rate
+
+
+ vlen
+ 1
+
+
+ _coordinate
+ (227, 493)
+
+
+ _rotation
+ 0
+
+
+
+ wxgui_fftsink2
+
+ id
+ orig_fft
+
+
+ _enabled
+ True
+
+
+ type
+ complex
+
+
+ title
+ Original Spectrum
+
+
+ samp_rate
+ samp_rate
+
+
+ baseband_freq
+ 0
+
+
+ y_per_div
+ 10
+
+
+ y_divs
+ 10
+
+
+ ref_level
+ 30
+
+
+ fft_size
+ 1024
+
+
+ fft_rate
+ 30
+
+
+ peak_hold
+ False
+
+
+ average
+ False
+
+
+ avg_alpha
+ 0
+
+
+ grid_pos
+ 1, 0, 1, 3
+
+
+ notebook
+
+
+
+ _coordinate
+ (409, 289)
+
+
+ _rotation
+ 180
+
+
+
+ wxgui_fftsink2
+
+ id
+ resamp_fft
+
+
+ _enabled
+ True
+
+
+ type
+ complex
+
+
+ title
+ Resampled Spectrum
+
+
+ samp_rate
+ new_rate
+
+
+ baseband_freq
+ 0
+
+
+ y_per_div
+ 10
+
+
+ y_divs
+ 10
+
+
+ ref_level
+ 30
+
+
+ fft_size
+ 1024
+
+
+ fft_rate
+ 30
+
+
+ peak_hold
+ True
+
+
+ average
+ False
+
+
+ avg_alpha
+ 0
+
+
+ grid_pos
+ 2, 0, 1, 3
+
+
+ notebook
+
+
+
+ _coordinate
+ (640, 256)
+
+
+ _rotation
+ 180
+
+
+
+ gr_sig_source_x
+
+ id
+ tri_source
+
+
+ _enabled
+ True
+
+
+ type
+ float
+
+
+ samp_rate
+ samp_rate
+
+
+ waveform
+ gr.GR_TRI_WAVE
+
+
+ freq
+ 0.05
+
+
+ amp
+ 2.0
+
+
+ offset
+ 0
+
+
+ _coordinate
+ (21, 271)
+
+
+ _rotation
+ 0
+
+
+
+ gr_frequency_modulator_fc
+
+ id
+ fm_mod
+
+
+ _enabled
+ True
+
+
+ sensitivity
+ math.pi
+
+
+ _coordinate
+ (411, 493)
+
+
+ _rotation
+ 0
+
+
+
+ blks2_pfb_arb_resampler_ccf
+
+ id
+ resampler
+
+
+ _enabled
+ True
+
+
+ rate
+ float(new_rate)/samp_rate
+
+
+ taps
+ rs_taps
+
+
+ size
+ nphases
+
+
+ _coordinate
+ (641, 477)
+
+
+ _rotation
+ 0
+
+
+
+ variable
+
+ id
+ nphases
+
+
+ _enabled
+ True
+
+
+ value
+ 32
+
+
+ _coordinate
+ (185, 153)
+
+
+ _rotation
+ 0
+
+
+
+ variable_static_text
+
+ id
+ samp_rate
+
+
+ _enabled
+ True
+
+
+ label
+ Sample Rate
+
+
+ value
+ 44100
+
+
+ converver
+ float_converter
+
+
+ formatter
+ None
+
+
+ grid_pos
+ 0, 0, 1, 1
+
+
+ notebook
+
+
+
+ _coordinate
+ (179, 14)
+
+
+ _rotation
+ 0
+
+
+
+ variable_static_text
+
+ id
+ new_rate
+
+
+ _enabled
+ True
+
+
+ label
+ Resampled Rate
+
+
+ value
+ 48000
+
+
+ converver
+ float_converter
+
+
+ formatter
+ None
+
+
+ grid_pos
+ 0, 1, 1, 1
+
+
+ notebook
+
+
+
+ _coordinate
+ (328, 15)
+
+
+ _rotation
+ 0
+
+
+
+ variable_static_text
+
+ id
+ frac_bw
+
+
+ _enabled
+ True
+
+
+ label
+ Fractional Bandwidth
+
+
+ value
+ 0.45
+
+
+ converver
+ float_converter
+
+
+ formatter
+ lambda x: "%0.2f"%x
+
+
+ grid_pos
+ 0,2,1,1
+
+
+ notebook
+
+
+
+ _coordinate
+ (473, 14)
+
+
+ _rotation
+ 0
+
+
+
+ tri_source
+ adder
+ 0
+ 0
+
+
+ adder
+ throttle
+ 0
+ 0
+
+
+ resampler
+ resamp_fft
+ 0
+ 0
+
+
+ fm_mod
+ resampler
+ 0
+ 0
+
+
+ fm_mod
+ orig_fft
+ 0
+ 0
+
+
+ throttle
+ fm_mod
+ 0
+ 0
+
+
diff --git a/gnuradio-core/src/examples/pfb/synth_filter.py b/gnuradio-core/src/examples/pfb/synth_filter.py
new file mode 100755
index 000000000..a91edfebf
--- /dev/null
+++ b/gnuradio-core/src/examples/pfb/synth_filter.py
@@ -0,0 +1,83 @@
+#!/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, blks2
+import sys
+
+try:
+ import scipy
+except ImportError:
+ print "Error: Program requires scipy (see: www.scipy.org)."
+ sys.exit(1)
+
+try:
+ import pylab
+except ImportError:
+ print "Error: Program requires matplotlib (see: matplotlib.sourceforge.net)."
+ sys.exit(1)
+
+def main():
+ N = 1000000
+ fs = 8000
+
+ freqs = [100, 200, 300, 400, 500]
+ nchans = 7
+
+ sigs = list()
+ for fi in freqs:
+ s = gr.sig_source_c(fs, gr.GR_SIN_WAVE, fi, 1)
+ sigs.append(s)
+
+ taps = gr.firdes.low_pass_2(len(freqs), fs, fs/float(nchans)/2, 100, 100)
+ print "Num. Taps = %d (taps per filter = %d)" % (len(taps),
+ len(taps)/nchans)
+ filtbank = gr.pfb_synthesizer_ccf(nchans, taps)
+
+ head = gr.head(gr.sizeof_gr_complex, N)
+ snk = gr.vector_sink_c()
+
+ tb = gr.top_block()
+ tb.connect(filtbank, head, snk)
+
+ for i,si in enumerate(sigs):
+ tb.connect(si, (filtbank, i))
+
+ tb.run()
+
+ if 1:
+ f1 = pylab.figure(1)
+ s1 = f1.add_subplot(1,1,1)
+ s1.plot(snk.data()[1000:])
+
+ fftlen = 2048
+ f2 = pylab.figure(2)
+ s2 = f2.add_subplot(1,1,1)
+ winfunc = scipy.blackman
+ s2.psd(snk.data()[10000:], NFFT=fftlen,
+ Fs = nchans*fs,
+ noverlap=fftlen/4,
+ window = lambda d: d*winfunc(fftlen))
+
+ pylab.show()
+
+if __name__ == "__main__":
+ main()
diff --git a/gnuradio-core/src/examples/pfb/synth_to_chan.py b/gnuradio-core/src/examples/pfb/synth_to_chan.py
new file mode 100755
index 000000000..c6c80b2f8
--- /dev/null
+++ b/gnuradio-core/src/examples/pfb/synth_to_chan.py
@@ -0,0 +1,117 @@
+#!/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, blks2
+import sys
+
+try:
+ import scipy
+except ImportError:
+ print "Error: Program requires scipy (see: www.scipy.org)."
+ sys.exit(1)
+
+try:
+ import pylab
+except ImportError:
+ print "Error: Program requires matplotlib (see: matplotlib.sourceforge.net)."
+ sys.exit(1)
+
+def main():
+ N = 1000000
+ fs = 8000
+
+ freqs = [100, 200, 300, 400, 500]
+ nchans = 7
+
+ sigs = list()
+ fmtx = list()
+ for fi in freqs:
+ s = gr.sig_source_f(fs, gr.GR_SIN_WAVE, fi, 1)
+ fm = blks2.nbfm_tx (fs, 4*fs, max_dev=10000, tau=75e-6)
+ sigs.append(s)
+ fmtx.append(fm)
+
+ syntaps = gr.firdes.low_pass_2(len(freqs), fs, fs/float(nchans)/2, 100, 100)
+ print "Synthesis Num. Taps = %d (taps per filter = %d)" % (len(syntaps),
+ len(syntaps)/nchans)
+ chtaps = gr.firdes.low_pass_2(len(freqs), fs, fs/float(nchans)/2, 100, 100)
+ print "Channelizer Num. Taps = %d (taps per filter = %d)" % (len(chtaps),
+ len(chtaps)/nchans)
+ filtbank = gr.pfb_synthesizer_ccf(nchans, syntaps)
+ channelizer = blks2.pfb_channelizer_ccf(nchans, chtaps)
+
+ noise_level = 0.01
+ head = gr.head(gr.sizeof_gr_complex, N)
+ noise = gr.noise_source_c(gr.GR_GAUSSIAN, noise_level)
+ addnoise = gr.add_cc()
+ snk_synth = gr.vector_sink_c()
+
+ tb = gr.top_block()
+
+ tb.connect(noise, (addnoise,0))
+ tb.connect(filtbank, head, (addnoise, 1))
+ tb.connect(addnoise, channelizer)
+ tb.connect(addnoise, snk_synth)
+
+ snk = list()
+ for i,si in enumerate(sigs):
+ tb.connect(si, fmtx[i], (filtbank, i))
+
+ for i in xrange(nchans):
+ snk.append(gr.vector_sink_c())
+ tb.connect((channelizer, i), snk[i])
+
+ tb.run()
+
+ if 1:
+ channel = 1
+ data = snk[channel].data()[1000:]
+
+ f1 = pylab.figure(1)
+ s1 = f1.add_subplot(1,1,1)
+ s1.plot(data[10000:10200] )
+ s1.set_title(("Output Signal from Channel %d" % channel))
+
+ fftlen = 2048
+ winfunc = scipy.blackman
+ #winfunc = scipy.hamming
+
+ f2 = pylab.figure(2)
+ s2 = f2.add_subplot(1,1,1)
+ s2.psd(data, NFFT=fftlen,
+ Fs = nchans*fs,
+ noverlap=fftlen/4,
+ window = lambda d: d*winfunc(fftlen))
+ s2.set_title(("Output PSD from Channel %d" % channel))
+
+ f3 = pylab.figure(3)
+ s3 = f3.add_subplot(1,1,1)
+ s3.psd(snk_synth.data()[1000:], NFFT=fftlen,
+ Fs = nchans*fs,
+ noverlap=fftlen/4,
+ window = lambda d: d*winfunc(fftlen))
+ s3.set_title("Output of Synthesis Filter")
+
+ pylab.show()
+
+if __name__ == "__main__":
+ main()
diff --git a/gnuradio-core/src/examples/tags/CMakeLists.txt b/gnuradio-core/src/examples/tags/CMakeLists.txt
new file mode 100644
index 000000000..0ba1a4dd9
--- /dev/null
+++ b/gnuradio-core/src/examples/tags/CMakeLists.txt
@@ -0,0 +1,28 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+include(GrPython)
+
+GR_PYTHON_INSTALL(PROGRAMS
+ test_file_tags.py
+ uhd_burst_detector.py
+ DESTINATION ${GR_PKG_DATA_DIR}/examples/tags
+ COMPONENT "core_python"
+)
+
diff --git a/gnuradio-core/src/examples/tags/test_file_tags.py b/gnuradio-core/src/examples/tags/test_file_tags.py
new file mode 100755
index 000000000..446986cd7
--- /dev/null
+++ b/gnuradio-core/src/examples/tags/test_file_tags.py
@@ -0,0 +1,55 @@
+#!/usr/bin/env python
+#
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+#
+
+from gnuradio import gr
+import sys
+
+try:
+ import scipy
+except ImportError:
+ print "Error: Program requires scipy (see: www.scipy.org)."
+ sys.exit(1)
+
+def main():
+ data = scipy.arange(0, 32000, 1).tolist()
+ trig = 100*[0,] + 100*[1,]
+
+ src = gr.vector_source_s(data, True)
+ trigger = gr.vector_source_s(trig, True)
+
+ thr = gr.throttle(gr.sizeof_short, 10e3)
+ ann = gr.annotator_alltoall(1000000, gr.sizeof_short)
+ tagger = gr.burst_tagger(gr.sizeof_short)
+
+ fsnk = gr.tagged_file_sink(gr.sizeof_short, 1)
+
+ tb = gr.top_block()
+ tb.connect(src, thr, (tagger, 0))
+ tb.connect(trigger, (tagger, 1))
+ tb.connect(tagger, fsnk)
+
+ tb.run()
+
+if __name__ == "__main__":
+ main()
+
+
diff --git a/gnuradio-core/src/examples/tags/uhd_burst_detector.py b/gnuradio-core/src/examples/tags/uhd_burst_detector.py
new file mode 100755
index 000000000..7411ab06e
--- /dev/null
+++ b/gnuradio-core/src/examples/tags/uhd_burst_detector.py
@@ -0,0 +1,116 @@
+#!/usr/bin/env python
+#
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+#
+
+from gnuradio import eng_notation
+from gnuradio import gr
+from gnuradio import uhd
+from gnuradio import window
+from gnuradio.eng_option import eng_option
+from gnuradio.gr import firdes
+from optparse import OptionParser
+
+class uhd_burst_detector(gr.top_block):
+ def __init__(self, uhd_address, options):
+
+ gr.top_block.__init__(self)
+
+ self.uhd_addr = uhd_address
+ self.freq = options.freq
+ self.samp_rate = options.samp_rate
+ self.gain = options.gain
+ self.threshold = options.threshold
+ self.trigger = options.trigger
+
+ self.uhd_src = uhd.single_usrp_source(
+ device_addr=self.uhd_addr,
+ stream_args=uhd.stream_args('fc32'))
+
+ self.uhd_src.set_samp_rate(self.samp_rate)
+ self.uhd_src.set_center_freq(self.freq, 0)
+ self.uhd_src.set_gain(self.gain, 0)
+
+ taps = firdes.low_pass_2(1, 1, 0.4, 0.1, 60)
+ self.chanfilt = gr.fir_filter_ccc(10, taps)
+ self.tagger = gr.burst_tagger(gr.sizeof_gr_complex)
+
+ # Dummy signaler to collect a burst on known periods
+ data = 1000*[0,] + 1000*[1,]
+ self.signal = gr.vector_source_s(data, True)
+
+ # Energy detector to get signal burst
+ ## use squelch to detect energy
+ self.det = gr.simple_squelch_cc(self.threshold, 0.01)
+ ## convert to mag squared (float)
+ self.c2m = gr.complex_to_mag_squared()
+ ## average to debounce
+ self.avg = gr.single_pole_iir_filter_ff(0.01)
+ ## rescale signal for conversion to short
+ self.scale = gr.multiply_const_ff(2**16)
+ ## signal input uses shorts
+ self.f2s = gr.float_to_short()
+
+ # Use file sink burst tagger to capture bursts
+ self.fsnk = gr.tagged_file_sink(gr.sizeof_gr_complex, self.samp_rate)
+
+
+ ##################################################
+ # Connections
+ ##################################################
+ self.connect((self.uhd_src, 0), (self.tagger, 0))
+ self.connect((self.tagger, 0), (self.fsnk, 0))
+
+ if self.trigger:
+ # Connect a dummy signaler to the burst tagger
+ self.connect((self.signal, 0), (self.tagger, 1))
+
+ else:
+ # Connect an energy detector signaler to the burst tagger
+ self.connect(self.uhd_src, self.det)
+ self.connect(self.det, self.c2m, self.avg, self.scale, self.f2s)
+ self.connect(self.f2s, (self.tagger, 1))
+
+ def set_samp_rate(self, samp_rate):
+ self.samp_rate = samp_rate
+ self.uhd_src_0.set_samp_rate(self.samp_rate)
+
+if __name__ == '__main__':
+ parser = OptionParser(option_class=eng_option, usage="%prog: [options]")
+ parser.add_option("-a", "--address", type="string", default="addr=192.168.10.2",
+ help="select address of the device [default=%default]")
+ #parser.add_option("-A", "--antenna", default=None,
+ # help="select Rx Antenna (only on RFX-series boards)")
+ parser.add_option("-f", "--freq", type="eng_float", default=450e6,
+ help="set frequency to FREQ", metavar="FREQ")
+ parser.add_option("-g", "--gain", type="eng_float", default=0,
+ help="set gain in dB [default=%default]")
+ parser.add_option("-R", "--samp-rate", type="eng_float", default=200000,
+ help="set USRP sample rate [default=%default]")
+ parser.add_option("-t", "--threshold", type="float", default=-60,
+ help="Set the detection power threshold (dBm) [default=%default")
+ parser.add_option("-T", "--trigger", action="store_true", default=False,
+ help="Use internal trigger instead of detector [default=%default]")
+ (options, args) = parser.parse_args()
+
+ uhd_addr = options.address
+
+ tb = uhd_burst_detector(uhd_addr, options)
+ tb.run()
diff --git a/gnuradio-core/src/examples/volk_benchmark/CMakeLists.txt b/gnuradio-core/src/examples/volk_benchmark/CMakeLists.txt
new file mode 100644
index 000000000..dfae03f83
--- /dev/null
+++ b/gnuradio-core/src/examples/volk_benchmark/CMakeLists.txt
@@ -0,0 +1,35 @@
+# Copyright 2012 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(GrPython)
+
+GR_PYTHON_INSTALL(PROGRAMS
+ volk_math.py
+ volk_plot.py
+ volk_test_funcs.py
+ volk_types.py
+ DESTINATION ${GR_PKG_DATA_DIR}/examples/volk_benchmark
+ COMPONENT "core_python"
+)
+
+install(
+ FILES README
+ DESTINATION ${GR_PKG_DATA_DIR}/examples/volk_benchmark
+ COMPONENT "core_python"
+)
diff --git a/gnuradio-core/src/examples/volk_benchmark/README b/gnuradio-core/src/examples/volk_benchmark/README
new file mode 100644
index 000000000..516fc15bd
--- /dev/null
+++ b/gnuradio-core/src/examples/volk_benchmark/README
@@ -0,0 +1,252 @@
+VOLK Benchmarking Scripts
+
+The Python programs in this directory are designed to help benchmark
+and compare Volk enhancements to GNU Radio. There are two kinds of
+scripts here: collecting data and displaying the data.
+
+Data collection is done by running a Volk testing script that will
+populate a SQLite database file (volk_results.db by default). The
+plotting utility provided here reads from the database files and plots
+bar graphs to compare the different installations.
+
+These benchmarks can be used to compare previous versions of GNU
+Radio to using Volk; they can be used to compare different Volk
+proto-kernels, as well, by editing the volk_config file; or they could
+be used to compare performance between different machines and/or
+processors.
+
+
+======================================================================
+Volk Profiling
+
+Before doing any kind of Volk benchmarking, it is important to run the
+volk_profile program. The profiler will build a config file for the
+best SIMD architecture for your processor. Run volk_profile that is
+installed into $PREFIX/bin. This program tests all known Volk kernels
+for each proto-kernel supported by the processor. When finished, it
+will write to $HOME/.volk/volk_config the best architecture for the
+VOLK function. This file is read when using a function to know the
+best version of the function to execute.
+
+The volk_config file contains a line for each kernel, where each line
+looks like:
+
+ volk_
+
+The architecture will be something like (sse, sse2, sse3, avx, neon,
+etc.), depending on your processor.
+
+
+======================================================================
+Benchmark Tests
+
+There are currently two benchmark scripts defined for collecting
+data. There is one that runs through the type conversions that have
+been converted to Volk (volk_types.py) and the other runs through the
+math operators converted to using Volk (volk_math.py).
+
+Script prototypes
+Both have the same structure for use:
+
+----------------------------------------------------------------------
+./volk_.py [-h] -L LABEL [-D DATABASE] [-N NITEMS] [-I ITERATIONS]
+ [--tests [{0,1,2,3} [{0,1,2,3} ...]]] [--list]
+ [--all]
+
+optional arguments:
+ -h, --help show this help message and exit
+ -L LABEL, --label LABEL
+ Label of database table [default: None]
+ -D DATABASE, --database DATABASE
+ Database file to store data in [default:
+ volk_results.db]
+ -N NITEMS, --nitems NITEMS
+ Number of items per iterations [default: 1000000000.0]
+ -I ITERATIONS, --iterations ITERATIONS
+ Number of iterations [default: 20]
+ --tests [{0,1,2,3} [{0,1,2,3} ...]]
+ A list of tests to run; can be a single test or a
+ space-separated list.
+ --list List the available tests
+ --all Run all tests
+----------------------------------------------------------------------
+
+To run, you specify the tests to run and a label to store along with
+the results. To find out what the available tests are, use the
+'--list' option.
+
+To specify a subset of tests, use the '--tests' with space-separated
+list of tests numbers (e.g., --tests 0 2 4 9).
+
+Use the '--all' to run all tests.
+
+The label specified is used as an identifier for the benchmarking
+currently being done. This is required as it is important in
+organizing the data in the database (each label is its own
+table). Usually, the label will specify the type of run being done,
+such as "volk_aligned" or "v3_5_1". In these cases, the "volk_aligned"
+label says that this is for a benchmarking using the GNU Radio version
+that uses the aligned scheduler and Volk calls in the work
+functions. The "v3_5_1" label is if you were benchmarking an installed
+version 3.5.1 of GNU Radio, which is pre-Volk. These will then be
+plotted against each other to see the timing differences.
+
+The 'database' option will output the results to a new database
+file. This can be useful for separating the output of different runs
+or of different benchmarks, such as the types versus the math scripts,
+say, or to distinguish results from different computers.
+
+If rerun using the same database and label, the entries in the table
+will simply be replaced by the new results.
+
+It is often useful to use the 'sqlitebrowser' program to interrogate
+the database file farther, if you are interested in the structure or
+the raw data.
+
+Other parameters of this script set the number of items to process and
+number of iterations to use when computing the benchmarking
+data. These default to 1 billion samples per iteration over 20
+iterations. Expect a default run to take a long time. Using the '-N'
+and '-I' options can be used to change the runtime of the benchmarks
+but are set high to remove problems of variance between iterations.
+
+======================================================================
+Plotting Results
+
+The volk_plot.py script reads a given database file and plots the
+results. The default behavior is to read all of the labels stored in
+the database and plot them as data sets on a bar graph. This shows the
+average time taken to process the number of items given.
+
+The options for the plotting script are:
+
+usage: volk_plot.py [-h] [-D DATABASE] [-E] [-P {mean,min,max}] [-% table]
+
+Plot Volk performance results from a SQLite database. Run one of the volk
+tests first (e.g, volk_math.py)
+
+----------------------------------------------------------------------
+optional arguments:
+ -h, --help show this help message and exit
+ -D DATABASE, --database DATABASE
+ Database file to read data from [default:
+ volk_results.db]
+ -E, --errorbars Show error bars (1 standard dev.)
+ -P {mean,min,max}, --plot {mean,min,max}
+ Set the type of plot to produce [default: mean]
+ -% table, --percent table
+ Show percent difference to the given type [default:
+ None]
+----------------------------------------------------------------------
+
+This script allows you to specify the database used (-D), but will
+always read all rows from all tables from it and display them. You can
+also turn on plotting error bars (1 standard deviation the mean). Be
+careful, though, as some older versions of Matplotlib might have an
+issue with this option.
+
+The mean time is only one possible statistic that we might be
+interested in when looking at the data. It represents the average user
+experience when running a given block. On the other hand, the minimum
+runtime best represents the actual performance of a block given
+minimal OS interruptions while running. Right now, the data collected
+includes the mean, variance, min, and max over the number of
+iterations given. Using the '-P' option, you can specify the type of
+data to plot (mean, min, or max).
+
+Another useful way of looking at the data is to compare the percent
+improvement of a benchmark compared to another. This is done using the
+'-%' option with the provided table (or label) as the baseline. So if
+we were interested in comparing how much the 'volk_aligned' was over
+'v3_5_1', we would specify '-% v3_5_1' to see this. The plot would
+then only show the percent speedup observed using Volk for each of the
+blocks.
+
+
+======================================================================
+Benchmarking Walkthrough
+
+This will walk through an example of benchmarking the new Volk
+implementation versus the pre-Volk GNU Radio. It also shows how to
+look at the SIMD optimized versions versus the generic
+implementations.
+
+Since we introduced Volk in GNU Radio 3.5.2, we will use the following
+labels for our data:
+
+ 1.) volk_aligned: v3.5.2 with volk_profile results in .volk/volk_config
+ 2.) v3_5_2: v3.5.2 with the generic (non-SIMD) calls to Volk
+ 3.) v3_5_1: an installation of GNU Radio from version v3.5.1
+
+We assume that we have installed two versions of GNU Radio.
+
+ v3.5.2 installed into /opt/gr-3_5_2
+ v3.5.1 installed into /opt/gr-3_5_1
+
+To test cases 1 and 2 above, we have to run GNU Radio from the v3.5.2
+installation, so we set the following environmental variables. Note
+that this is written for Ubuntu 11.10. These commands and directories
+may have to be changed depending on your OS and versions.
+
+ export LD_LIBRARY_PATH=/opt/gr-3_5_2/lib
+ export LD_LIBRARY_PATH=/opt/gr-3_5_2/lib/python2.7/dist-packages
+
+Now we can run the benchmark tests, so we will focus on the math
+operators:
+
+ ./volk_math.py -D volk_results_math.db --all -L volk_aligned
+
+When this finishes, the 'volk_results_math.db' will contain our
+results for this run.
+
+We next want to run the generic, non-SIMD, calls. This can be done by
+changing the Volk kernel settings in $HOME/.volk/volk_config. First,
+make a backup of this file. Then edit it and change all architecture
+calls (sse, sse2, etc.) to 'generic.' Now, Volk will only call the
+generic versions of these functions. So we rerun the benchmark with:
+
+ ./volk_math.py -D volk_results_math.db --all -L v3_5_2
+
+Notice that the only thing changed here was the label to 'v3_5_2'.
+
+Next, we want to collect data for the non-Volk version of GNU
+Radio. This is important because some internals to GNU Radio were made
+when adding support for Volk, so it is nice to know what the
+differences do to our performance. First, we set the environmental
+variables to point to the v3.5.1 installation:
+
+ export LD_LIBRARY_PATH=/opt/gr-3_5_1/lib
+ export LD_LIBRARY_PATH=/opt/gr-3_5_1/lib/python2.7/dist-packages
+
+And when we run the test, we use the same command line, but the GNU
+Radio libraries and Python files used come from v3.5.1. We also change
+the label to indicate the different version to store.
+
+ ./volk_math.py -D volk_results_math.db --all -L v3_5_1
+
+We now have a database populated with three tables for the three
+different labels. We can plot them all together by simply running:
+
+ ./volk_plot.py -D volk_results_math.db
+
+This will show the average run times for each of the three
+configurations for all math functions tested. We might also be
+interested to see the difference in performance from the v3.5.1
+version, so we can run:
+
+ ./volk_plot.py -D volk_results_math.db -% v3_5_1
+
+That will plot both the 'volk_aligned' and 'v3_5_2' as a percentage
+improvement over v3_5_1. A positive value indicates that this version
+runs faster than the v3.5.1 version.
+
+
+----------------------------------------------------------------------
+
+Another interesting test case could be to compare results on different
+processors. So if you have different generation Intels, AMD, or
+whatever, you can simply pass the .db file around and run the Volk
+benchmark script to populate the database with different results. For
+this, you would specify a label like '-L i7_2620M' that indicates the
+processor type to uniquely ID the data.
+
diff --git a/gnuradio-core/src/examples/volk_benchmark/volk_math.py b/gnuradio-core/src/examples/volk_benchmark/volk_math.py
new file mode 100755
index 000000000..8bf9ed6f3
--- /dev/null
+++ b/gnuradio-core/src/examples/volk_benchmark/volk_math.py
@@ -0,0 +1,151 @@
+#!/usr/bin/env python
+
+from gnuradio import gr
+import argparse
+from volk_test_funcs import *
+
+def multiply_const_cc(N):
+ k = 3.3
+ op = gr.multiply_const_cc(k)
+ tb = helper(N, op, gr.sizeof_gr_complex, gr.sizeof_gr_complex, 1, 1)
+ return tb
+
+######################################################################
+
+def multiply_const_ff(N):
+ k = 3.3
+ op = gr.multiply_const_ff(k)
+ tb = helper(N, op, gr.sizeof_float, gr.sizeof_float, 1, 1)
+ return tb
+
+######################################################################
+
+def multiply_cc(N):
+ op = gr.multiply_cc(1)
+ tb = helper(N, op, gr.sizeof_gr_complex, gr.sizeof_gr_complex, 2, 1)
+ return tb
+
+######################################################################
+
+def multiply_ff(N):
+ op = gr.multiply_ff()
+ tb = helper(N, op, gr.sizeof_float, gr.sizeof_float, 2, 1)
+ return tb
+
+######################################################################
+
+def add_ff(N):
+ op = gr.add_ff()
+ tb = helper(N, op, gr.sizeof_float, gr.sizeof_float, 2, 1)
+ return tb
+
+######################################################################
+
+def conjugate_cc(N):
+ op = gr.conjugate_cc()
+ tb = helper(N, op, gr.sizeof_gr_complex, gr.sizeof_gr_complex, 1, 1)
+ return tb
+
+######################################################################
+
+def multiply_conjugate_cc(N):
+ try:
+ op = gr.multiply_conjugate_cc()
+ tb = helper(N, op, gr.sizeof_gr_complex, gr.sizeof_gr_complex, 2, 1)
+ return tb
+
+ except AttributeError:
+ class s(gr.hier_block2):
+ def __init__(self):
+ gr.hier_block2.__init__(self, "s",
+ gr.io_signature(2, 2, gr.sizeof_gr_complex),
+ gr.io_signature(1, 1, gr.sizeof_gr_complex))
+ conj = gr.conjugate_cc()
+ mult = gr.multiply_cc()
+ self.connect((self,0), (mult,0))
+ self.connect((self,1), conj, (mult,1))
+ self.connect(mult, self)
+
+ op = s()
+ tb = helper(N, op, gr.sizeof_gr_complex, gr.sizeof_gr_complex, 2, 1)
+ return tb
+
+
+######################################################################
+
+def run_tests(func, N, iters):
+ print("Running Test: {0}".format(func.__name__))
+ try:
+ tb = func(N)
+ t = timeit(tb, iters)
+ res = format_results(func.__name__, t)
+ return res
+ except AttributeError:
+ print "\tCould not run test. Skipping."
+ return None
+
+def main():
+ avail_tests = [multiply_const_cc,
+ multiply_const_ff,
+ multiply_cc,
+ multiply_ff,
+ add_ff,
+ conjugate_cc,
+ multiply_conjugate_cc]
+
+ desc='Time an operation to compare with other implementations. \
+ This program runs a simple GNU Radio flowgraph to test a \
+ particular math function, mostly to compare the \
+ Volk-optimized implementation versus a regular \
+ implementation. The results are stored to an SQLite database \
+ that can then be read by volk_plot.py to plot the differences.'
+ parser = argparse.ArgumentParser(description=desc)
+ parser.add_argument('-L', '--label', type=str,
+ required=True, default=None,
+ help='Label of database table [default: %(default)s]')
+ parser.add_argument('-D', '--database', type=str,
+ default="volk_results.db",
+ help='Database file to store data in [default: %(default)s]')
+ parser.add_argument('-N', '--nitems', type=float,
+ default=1e9,
+ help='Number of items per iterations [default: %(default)s]')
+ parser.add_argument('-I', '--iterations', type=int,
+ default=20,
+ help='Number of iterations [default: %(default)s]')
+ parser.add_argument('--tests', type=int, nargs='*',
+ choices=xrange(len(avail_tests)),
+ help='A list of tests to run; can be a single test or a \
+ space-separated list.')
+ parser.add_argument('--list', action='store_true',
+ help='List the available tests')
+ parser.add_argument('--all', action='store_true',
+ help='Run all tests')
+ args = parser.parse_args()
+
+ if(args.list):
+ print "Available Tests to Run:"
+ print "\n".join(["\t{0}: {1}".format(i,f.__name__) for i,f in enumerate(avail_tests)])
+ sys.exit(0)
+
+ N = int(args.nitems)
+ iters = args.iterations
+ label = args.label
+
+ conn = create_connection(args.database)
+ new_table(conn, label)
+
+ if args.all:
+ tests = xrange(len(avail_tests))
+ else:
+ tests = args.tests
+
+ for test in tests:
+ res = run_tests(avail_tests[test], N, iters)
+ if res is not None:
+ replace_results(conn, label, N, iters, res)
+
+if __name__ == "__main__":
+ try:
+ main()
+ except KeyboardInterrupt:
+ pass
diff --git a/gnuradio-core/src/examples/volk_benchmark/volk_plot.py b/gnuradio-core/src/examples/volk_benchmark/volk_plot.py
new file mode 100755
index 000000000..823dfbf64
--- /dev/null
+++ b/gnuradio-core/src/examples/volk_benchmark/volk_plot.py
@@ -0,0 +1,169 @@
+#!/usr/bin/env python
+
+import sys, math
+import argparse
+from volk_test_funcs import *
+
+try:
+ import matplotlib
+ import matplotlib.pyplot as plt
+except ImportError:
+ sys.stderr.write("Could not import Matplotlib (http://matplotlib.sourceforge.net/)\n")
+ sys.exit(1)
+
+def main():
+ desc='Plot Volk performance results from a SQLite database. ' + \
+ 'Run one of the volk tests first (e.g, volk_math.py)'
+ parser = argparse.ArgumentParser(description=desc)
+ parser.add_argument('-D', '--database', type=str,
+ default='volk_results.db',
+ help='Database file to read data from [default: %(default)s]')
+ parser.add_argument('-E', '--errorbars',
+ action='store_true', default=False,
+ help='Show error bars (1 standard dev.)')
+ parser.add_argument('-P', '--plot', type=str,
+ choices=['mean', 'min', 'max'],
+ default='mean',
+ help='Set the type of plot to produce [default: %(default)s]')
+ parser.add_argument('-%', '--percent', type=str,
+ default=None, metavar="table",
+ help='Show percent difference to the given type [default: %(default)s]')
+ args = parser.parse_args()
+
+ # Set up global plotting properties
+ matplotlib.rcParams['figure.subplot.bottom'] = 0.2
+ matplotlib.rcParams['figure.subplot.top'] = 0.95
+ matplotlib.rcParams['figure.subplot.right'] = 0.98
+ matplotlib.rcParams['ytick.labelsize'] = 16
+ matplotlib.rcParams['xtick.labelsize'] = 16
+ matplotlib.rcParams['legend.fontsize'] = 18
+
+ # Get list of tables to compare
+ conn = create_connection(args.database)
+ tables = list_tables(conn)
+ M = len(tables)
+
+ # Colors to distinguish each table in the bar graph
+ # More than 5 tables will wrap around to the start.
+ colors = ['b', 'r', 'g', 'm', 'k']
+
+ # Set up figure for plotting
+ f0 = plt.figure(0, facecolor='w', figsize=(14,10))
+ s0 = f0.add_subplot(1,1,1)
+
+ # Create a register of names that exist in all tables
+ tmp_regs = []
+ for table in tables:
+ # Get results from the next table
+ res = get_results(conn, table[0])
+
+ tmp_regs.append(list())
+ for r in res:
+ try:
+ tmp_regs[-1].index(r['kernel'])
+ except ValueError:
+ tmp_regs[-1].append(r['kernel'])
+
+ # Get only those names that are common in all tables
+ name_reg = tmp_regs[0]
+ for t in tmp_regs[1:]:
+ name_reg = list(set(name_reg) & set(t))
+ name_reg.sort()
+
+ # Pull the data out for each table into a dictionary
+ # we can ref the table by it's name and the data associated
+ # with a given kernel in name_reg by it's name.
+ # This ensures there is no sorting issue with the data in the
+ # dictionary, so the kernels are plotted against each other.
+ table_data = dict()
+ for i,table in enumerate(tables):
+ # Get results from the next table
+ res = get_results(conn, table[0])
+
+ data = dict()
+ for r in res:
+ data[r['kernel']] = r
+
+ table_data[table[0]] = data
+
+ if args.percent is not None:
+ for i,t in enumerate(table_data):
+ if args.percent == t:
+ norm_data = []
+ for name in name_reg:
+ if(args.plot == 'max'):
+ norm_data.append(table_data[t][name]['max'])
+ elif(args.plot == 'min'):
+ norm_data.append(table_data[t][name]['min'])
+ elif(args.plot == 'mean'):
+ norm_data.append(table_data[t][name]['avg'])
+
+
+ # Plot the results
+ x0 = xrange(len(name_reg))
+ i = 0
+ for t in (table_data):
+ ydata = []
+ stds = []
+ for name in name_reg:
+ stds.append(math.sqrt(table_data[t][name]['var']))
+ if(args.plot == 'max'):
+ ydata.append(table_data[t][name]['max'])
+ elif(args.plot == 'min'):
+ ydata.append(table_data[t][name]['min'])
+ elif(args.plot == 'mean'):
+ ydata.append(table_data[t][name]['avg'])
+
+ if args.percent is not None:
+ ydata = [-100*(y-n)/y for y,n in zip(ydata,norm_data)]
+ if(args.percent != t):
+ # makes x values for this data set placement
+ # width of bars depends on number of comparisons
+ wdth = 0.80/(M-1)
+ x1 = [x + i*wdth for x in x0]
+ i += 1
+
+ s0.bar(x1, ydata, width=wdth,
+ color=colors[(i-1)%M], label=t,
+ edgecolor='k', linewidth=2)
+
+ else:
+ # makes x values for this data set placement
+ # width of bars depends on number of comparisons
+ wdth = 0.80/M
+ x1 = [x + i*wdth for x in x0]
+ i += 1
+
+ if(args.errorbars is False):
+ s0.bar(x1, ydata, width=wdth,
+ color=colors[(i-1)%M], label=t,
+ edgecolor='k', linewidth=2)
+ else:
+ s0.bar(x1, ydata, width=wdth,
+ yerr=stds,
+ color=colors[i%M], label=t,
+ edgecolor='k', linewidth=2,
+ error_kw={"ecolor": 'k', "capsize":5,
+ "linewidth":2})
+
+ nitems = res[0]['nitems']
+ if args.percent is None:
+ s0.set_ylabel("Processing time (sec) [{0:G} items]".format(nitems),
+ fontsize=22, fontweight='bold',
+ horizontalalignment='center')
+ else:
+ s0.set_ylabel("% Improvement over {0} [{1:G} items]".format(
+ args.percent, nitems),
+ fontsize=22, fontweight='bold')
+
+ s0.legend()
+ s0.set_xticks(x0)
+ s0.set_xticklabels(name_reg)
+ for label in s0.xaxis.get_ticklabels():
+ label.set_rotation(45)
+ label.set_fontsize(16)
+
+ plt.show()
+
+if __name__ == "__main__":
+ main()
diff --git a/gnuradio-core/src/examples/volk_benchmark/volk_test_funcs.py b/gnuradio-core/src/examples/volk_benchmark/volk_test_funcs.py
new file mode 100644
index 000000000..4f4e4afd3
--- /dev/null
+++ b/gnuradio-core/src/examples/volk_benchmark/volk_test_funcs.py
@@ -0,0 +1,171 @@
+#!/usr/bin/env python
+
+from gnuradio import gr
+import math, sys, os, time
+
+try:
+ import scipy
+except ImportError:
+ sys.stderr.write("Unable to import Scipy (www.scipy.org)\n")
+ sys.exit(1)
+
+try:
+ import sqlite3
+except ImportError:
+ sys.stderr.write("Unable to import sqlite3: requires Python 2.5\n")
+ sys.exit(1)
+
+def execute(conn, cmd):
+ '''
+ Executes the command cmd to the database opened in connection conn.
+ '''
+ c = conn.cursor()
+ c.execute(cmd)
+ conn.commit()
+ c.close()
+
+def create_connection(database):
+ '''
+ Returns a connection object to the SQLite database.
+ '''
+ return sqlite3.connect(database)
+
+def new_table(conn, tablename):
+ '''
+ Create a new table for results.
+ All results are in the form: [kernel | nitems | iters | avg. time | variance | max time | min time ]
+ Each table is meant as a different setting (e.g., volk_aligned, volk_unaligned, etc.)
+ '''
+ cols = "kernel text, nitems int, iters int, avg real, var real, max real, min real"
+ cmd = "create table if not exists {0} ({1})".format(
+ tablename, cols)
+ execute(conn, cmd)
+
+def replace_results(conn, tablename, nitems, iters, res):
+ '''
+ Inserts or replaces the results 'res' dictionary values into the table.
+ This deletes all old entries of the kernel in this table.
+ '''
+ cmd = "DELETE FROM {0} where kernel='{1}'".format(tablename, res["kernel"])
+ execute(conn, cmd)
+ insert_results(conn, tablename, nitems, iters, res)
+
+def insert_results(conn, tablename, nitems, iters, res):
+ '''
+ Inserts the results dictionary values into the table.
+ '''
+ cols = "kernel, nitems, iters, avg, var, max, min"
+ cmd = "INSERT INTO {0} ({1}) VALUES ('{2}', {3}, {4}, {5}, {6}, {7}, {8})".format(
+ tablename, cols, res["kernel"], nitems, iters,
+ res["avg"], res["var"], res["max"], res["min"])
+ execute(conn, cmd)
+
+def list_tables(conn):
+ '''
+ Returns a list of all tables in the database.
+ '''
+ cmd = "SELECT name FROM sqlite_master WHERE type='table' ORDER BY name"
+ c = conn.cursor()
+ c.execute(cmd)
+ t = c.fetchall()
+ c.close()
+
+ return t
+
+def get_results(conn, tablename):
+ '''
+ Gets all results in tablename.
+ '''
+ cmd = "SELECT * FROM {0}".format(tablename)
+ c = conn.cursor()
+ c.execute(cmd)
+ fetched = c.fetchall()
+ c.close()
+
+ res = list()
+ for f in fetched:
+ r = dict()
+ r['kernel'] = f[0]
+ r['nitems'] = f[1]
+ r['iters'] = f[2]
+ r['avg'] = f[3]
+ r['var'] = f[4]
+ r['min'] = f[5]
+ r['max'] = f[6]
+ res.append(r)
+
+ return res
+
+
+class helper(gr.top_block):
+ '''
+ Helper function to run the tests. The parameters are:
+ N: number of items to process (int)
+ op: The GR block/hier_block to test
+ isizeof: the sizeof the input type
+ osizeof: the sizeof the output type
+ nsrcs: number of inputs to the op
+ nsnks: number of outputs of the op
+
+ This function can only handle blocks where all inputs are the same
+ datatype and all outputs are the same data type
+ '''
+ def __init__(self, N, op,
+ isizeof=gr.sizeof_gr_complex,
+ osizeof=gr.sizeof_gr_complex,
+ nsrcs=1, nsnks=1):
+ gr.top_block.__init__(self, "helper")
+
+ self.op = op
+ self.srcs = []
+ self.snks = []
+ self.head = gr.head(isizeof, N)
+
+ for n in xrange(nsrcs):
+ self.srcs.append(gr.null_source(isizeof))
+
+ for n in xrange(nsnks):
+ self.snks.append(gr.null_sink(osizeof))
+
+ self.connect(self.srcs[0], self.head, (self.op,0))
+
+ for n in xrange(1, nsrcs):
+ self.connect(self.srcs[n], (self.op,n))
+
+ for n in xrange(nsnks):
+ self.connect((self.op,n), self.snks[n])
+
+def timeit(tb, iterations):
+ '''
+ Given a top block, this function times it for a number of
+ iterations and stores the time in a list that is returned.
+ '''
+ r = gr.enable_realtime_scheduling()
+ if r != gr.RT_OK:
+ print "Warning: failed to enable realtime scheduling"
+
+ times = []
+ for i in xrange(iterations):
+ start_time = time.time()
+ tb.run()
+ end_time = time.time()
+ tb.head.reset()
+
+ times.append(end_time - start_time)
+
+ return times
+
+def format_results(kernel, times):
+ '''
+ Convinience function to convert the results of the timeit function
+ into a dictionary.
+ '''
+ res = dict()
+ res["kernel"] = kernel
+ res["avg"] = scipy.mean(times)
+ res["var"] = scipy.var(times)
+ res["max"] = max(times)
+ res["min"] = min(times)
+ return res
+
+
diff --git a/gnuradio-core/src/examples/volk_benchmark/volk_types.py b/gnuradio-core/src/examples/volk_benchmark/volk_types.py
new file mode 100755
index 000000000..3bc5a22ae
--- /dev/null
+++ b/gnuradio-core/src/examples/volk_benchmark/volk_types.py
@@ -0,0 +1,182 @@
+#!/usr/bin/env python
+
+from gnuradio import gr
+import argparse
+from volk_test_funcs import *
+
+######################################################################
+
+def float_to_char(N):
+ op = gr.float_to_char()
+ tb = helper(N, op, gr.sizeof_float, gr.sizeof_char, 1, 1)
+ return tb
+
+######################################################################
+
+def float_to_int(N):
+ op = gr.float_to_int()
+ tb = helper(N, op, gr.sizeof_float, gr.sizeof_int, 1, 1)
+ return tb
+
+######################################################################
+
+def float_to_short(N):
+ op = gr.float_to_short()
+ tb = helper(N, op, gr.sizeof_float, gr.sizeof_short, 1, 1)
+ return tb
+
+######################################################################
+
+def short_to_float(N):
+ op = gr.short_to_float()
+ tb = helper(N, op, gr.sizeof_short, gr.sizeof_float, 1, 1)
+ return tb
+
+######################################################################
+
+def short_to_char(N):
+ op = gr.short_to_char()
+ tb = helper(N, op, gr.sizeof_short, gr.sizeof_char, 1, 1)
+ return tb
+
+######################################################################
+
+def char_to_short(N):
+ op = gr.char_to_short()
+ tb = helper(N, op, gr.sizeof_char, gr.sizeof_short, 1, 1)
+ return tb
+
+######################################################################
+
+def char_to_float(N):
+ op = gr.char_to_float()
+ tb = helper(N, op, gr.sizeof_char, gr.sizeof_float, 1, 1)
+ return tb
+
+######################################################################
+
+def int_to_float(N):
+ op = gr.int_to_float()
+ tb = helper(N, op, gr.sizeof_int, gr.sizeof_float, 1, 1)
+ return tb
+
+######################################################################
+
+def complex_to_float(N):
+ op = gr.complex_to_float()
+ tb = helper(N, op, gr.sizeof_gr_complex, gr.sizeof_float, 1, 2)
+ return tb
+
+######################################################################
+
+def complex_to_real(N):
+ op = gr.complex_to_real()
+ tb = helper(N, op, gr.sizeof_gr_complex, gr.sizeof_float, 1, 1)
+ return tb
+
+######################################################################
+
+def complex_to_imag(N):
+ op = gr.complex_to_imag()
+ tb = helper(N, op, gr.sizeof_gr_complex, gr.sizeof_float, 1, 1)
+ return tb
+
+######################################################################
+
+def complex_to_mag(N):
+ op = gr.complex_to_mag()
+ tb = helper(N, op, gr.sizeof_gr_complex, gr.sizeof_float, 1, 1)
+ return tb
+
+######################################################################
+
+def complex_to_mag_squared(N):
+ op = gr.complex_to_mag_squared()
+ tb = helper(N, op, gr.sizeof_gr_complex, gr.sizeof_float, 1, 1)
+ return tb
+
+######################################################################
+
+
+def run_tests(func, N, iters):
+ print("Running Test: {0}".format(func.__name__))
+ try:
+ tb = func(N)
+ t = timeit(tb, iters)
+ res = format_results(func.__name__, t)
+ return res
+ except AttributeError:
+ print "\tCould not run test. Skipping."
+ return None
+
+def main():
+ avail_tests = [float_to_char,
+ float_to_int,
+ float_to_short,
+ short_to_float,
+ short_to_char,
+ char_to_short,
+ char_to_float,
+ int_to_float,
+ complex_to_float,
+ complex_to_real,
+ complex_to_imag,
+ complex_to_mag,
+ complex_to_mag_squared]
+
+ desc='Time an operation to compare with other implementations. \
+ This program runs a simple GNU Radio flowgraph to test a \
+ particular math function, mostly to compare the \
+ Volk-optimized implementation versus a regular \
+ implementation. The results are stored to an SQLite database \
+ that can then be read by volk_plot.py to plot the differences.'
+ parser = argparse.ArgumentParser(description=desc)
+ parser.add_argument('-L', '--label', type=str,
+ required=True, default=None,
+ help='Label of database table [default: %(default)s]')
+ parser.add_argument('-D', '--database', type=str,
+ default="volk_results.db",
+ help='Database file to store data in [default: %(default)s]')
+ parser.add_argument('-N', '--nitems', type=float,
+ default=1e9,
+ help='Number of items per iterations [default: %(default)s]')
+ parser.add_argument('-I', '--iterations', type=int,
+ default=20,
+ help='Number of iterations [default: %(default)s]')
+ parser.add_argument('--tests', type=int, nargs='*',
+ choices=xrange(len(avail_tests)),
+ help='A list of tests to run; can be a single test or a \
+ space-separated list.')
+ parser.add_argument('--list', action='store_true',
+ help='List the available tests')
+ parser.add_argument('--all', action='store_true',
+ help='Run all tests')
+ args = parser.parse_args()
+
+ if(args.list):
+ print "Available Tests to Run:"
+ print "\n".join(["\t{0}: {1}".format(i,f.__name__) for i,f in enumerate(avail_tests)])
+ sys.exit(0)
+
+ N = int(args.nitems)
+ iters = args.iterations
+ label = args.label
+
+ conn = create_connection(args.database)
+ new_table(conn, label)
+
+ if args.all:
+ tests = xrange(len(avail_tests))
+ else:
+ tests = args.tests
+
+ for test in tests:
+ res = run_tests(avail_tests[test], N, iters)
+ if res is not None:
+ replace_results(conn, label, N, iters, res)
+
+if __name__ == "__main__":
+ try:
+ main()
+ except KeyboardInterrupt:
+ pass
diff --git a/gnuradio-examples/CMakeLists.txt b/gnuradio-examples/CMakeLists.txt
deleted file mode 100644
index 6aec5a947..000000000
--- a/gnuradio-examples/CMakeLists.txt
+++ /dev/null
@@ -1,62 +0,0 @@
-# Copyright 2012 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.
-
-########################################################################
-# Setup dependencies
-########################################################################
-
-include(GrPython) #used for code generation
-
-########################################################################
-# Register component
-########################################################################
-include(GrComponent)
-GR_REGISTER_COMPONENT("gnuradio-examples" ENABLE_GR_EXAMPLES
- ENABLE_GRUEL
- ENABLE_VOLK
- ENABLE_GR_CORE
-)
-
-########################################################################
-# Begin conditional configuration
-########################################################################
-if(ENABLE_GR_EXAMPLES)
-
-########################################################################
-# Setup CPack components
-########################################################################
-include(GrPackage)
-CPACK_SET(CPACK_COMPONENT_GROUP_EXAMPLE_DESCRIPTION "GNU Radio Examples")
-
-CPACK_COMPONENT("gnuradio_examples"
- GROUP "Examples"
- DISPLAY_NAME "GNU Radio Examples"
- DESCRIPTION "GNU Radio Examples"
- DEPENDS "core_runtime,core_python,gruel_runtime,gruel_python"
-)
-
-########################################################################
-# Add subdirectories
-########################################################################
-if(ENABLE_PYTHON)
- add_subdirectory(grc)
- add_subdirectory(python)
-endif(ENABLE_PYTHON)
-
-endif(ENABLE_GR_EXAMPLES)
diff --git a/gnuradio-examples/grc/CMakeLists.txt b/gnuradio-examples/grc/CMakeLists.txt
deleted file mode 100644
index 680172cfa..000000000
--- a/gnuradio-examples/grc/CMakeLists.txt
+++ /dev/null
@@ -1,50 +0,0 @@
-# Copyright 2011 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-
-# DEMOD
-install(
- FILES
- demod/digital_freq_lock.grc
- demod/mpsk_demod.grc
- demod/pam_sync.grc
- demod/pam_timing.grc
- DESTINATION ${GR_PKG_DATA_DIR}/examples/demod
- COMPONENT "gnuadio-examples"
-)
-
-# SIMPLE
-install(
- FILES
- simple/ber_simulation.grc
- simple/dpsk_loopback.grc
- simple/variable_config.grc
- DESTINATION ${GR_PKG_DATA_DIR}/examples/simple
- COMPONENT "gnuadio-examples"
-)
-
-# XMLRPC
-install(
- FILES
- xmlrpc/readme.txt
- xmlrpc/xmlrpc_client.grc
- xmlrpc/xmlrpc_client_script.py
- xmlrpc/xmlrpc_server.grc
- DESTINATION ${GR_PKG_DATA_DIR}/examples/xmlrpc
- COMPONENT "gnuadio-examples"
-)
diff --git a/gnuradio-examples/grc/demod/digital_freq_lock.grc b/gnuradio-examples/grc/demod/digital_freq_lock.grc
deleted file mode 100644
index 36037febb..000000000
--- a/gnuradio-examples/grc/demod/digital_freq_lock.grc
+++ /dev/null
@@ -1,1321 +0,0 @@
-
-
- Sat Mar 6 17:17:12 2010
-
- options
-
- id
- top_block
-
-
- _enabled
- True
-
-
- title
-
-
-
- author
-
-
-
- description
-
-
-
- window_size
- 1280, 1024
-
-
- generate_options
- wx_gui
-
-
- category
- Custom
-
-
- run_options
- prompt
-
-
- run
- True
-
-
- realtime_scheduling
-
-
-
- _coordinate
- (10, 10)
-
-
- _rotation
- 0
-
-
-
- gr_uchar_to_float
-
- id
- gr_uchar_to_float_0
-
-
- _enabled
- True
-
-
- _coordinate
- (217, 108)
-
-
- _rotation
- 0
-
-
-
- gr_uchar_to_float
-
- id
- gr_uchar_to_float_0_0
-
-
- _enabled
- True
-
-
- _coordinate
- (216, 273)
-
-
- _rotation
- 0
-
-
-
- variable_slider
-
- id
- freq_offset
-
-
- _enabled
- True
-
-
- label
- Frequency Offset
-
-
- value
- 0
-
-
- min
- -0.5
-
-
- max
- 0.5
-
-
- num_steps
- 1000
-
-
- style
- wx.SL_HORIZONTAL
-
-
- converver
- float_converter
-
-
- grid_pos
-
-
-
- notebook
-
-
-
- _coordinate
- (293, 684)
-
-
- _rotation
- 0
-
-
-
- random_source_x
-
- id
- random_source_x_0
-
-
- _enabled
- True
-
-
- type
- byte
-
-
- min
- 0
-
-
- max
- pam_amp
-
-
- num_samps
- 10000
-
-
- repeat
- True
-
-
- _coordinate
- (13, 80)
-
-
- _rotation
- 0
-
-
-
- random_source_x
-
- id
- random_source_x_0_0
-
-
- _enabled
- True
-
-
- type
- byte
-
-
- min
- 0
-
-
- max
- pam_amp
-
-
- num_samps
- 10000
-
-
- repeat
- True
-
-
- _coordinate
- (15, 245)
-
-
- _rotation
- 0
-
-
-
- const_source_x
-
- id
- const_source_x_0
-
-
- _enabled
- True
-
-
- type
- float
-
-
- const
- -0.5*(pam_amp-1)
-
-
- _coordinate
- (213, 197)
-
-
- _rotation
- 0
-
-
-
- const_source_x
-
- id
- const_source_x_0_0
-
-
- _enabled
- True
-
-
- type
- float
-
-
- const
- -0.5*(pam_amp-1)
-
-
- _coordinate
- (200, 360)
-
-
- _rotation
- 0
-
-
-
- gr_add_xx
-
- id
- gr_add_xx_0
-
-
- _enabled
- True
-
-
- type
- float
-
-
- num_inputs
- 2
-
-
- vlen
- 1
-
-
- _coordinate
- (440, 167)
-
-
- _rotation
- 0
-
-
-
- gr_add_xx
-
- id
- gr_add_xx_0_1
-
-
- _enabled
- True
-
-
- type
- float
-
-
- num_inputs
- 2
-
-
- vlen
- 1
-
-
- _coordinate
- (430, 330)
-
-
- _rotation
- 0
-
-
-
- variable
-
- id
- nfilts
-
-
- _enabled
- True
-
-
- value
- 32
-
-
- _coordinate
- (435, 686)
-
-
- _rotation
- 0
-
-
-
- variable_slider
-
- id
- noise_amp
-
-
- _enabled
- True
-
-
- label
- Channel Noise
-
-
- value
- 0
-
-
- min
- 0
-
-
- max
- 1.0
-
-
- num_steps
- 1000
-
-
- style
- wx.SL_HORIZONTAL
-
-
- converver
- float_converter
-
-
- grid_pos
-
-
-
- notebook
-
-
-
- _coordinate
- (168, 684)
-
-
- _rotation
- 0
-
-
-
- variable
-
- id
- spb_gen
-
-
- _enabled
- True
-
-
- value
- 4
-
-
- _coordinate
- (119, 841)
-
-
- _rotation
- 0
-
-
-
- variable
-
- id
- pam_amp
-
-
- _enabled
- True
-
-
- value
- 2
-
-
- _coordinate
- (223, 9)
-
-
- _rotation
- 0
-
-
-
- variable
-
- id
- spb
-
-
- _enabled
- True
-
-
- value
- 4.1
-
-
- _coordinate
- (32, 842)
-
-
- _rotation
- 0
-
-
-
- gr_float_to_complex
-
- id
- gr_float_to_complex_0
-
-
- _enabled
- True
-
-
- vlen
- 1
-
-
- _coordinate
- (590, 184)
-
-
- _rotation
- 0
-
-
-
- gr_throttle
-
- id
- gr_throttle_0
-
-
- _enabled
- True
-
-
- type
- complex
-
-
- samples_per_second
- samp_rate
-
-
- vlen
- 1
-
-
- _coordinate
- (788, 197)
-
-
- _rotation
- 0
-
-
-
- notebook
-
- id
- notebook_0
-
-
- _enabled
- True
-
-
- style
- wx.NB_TOP
-
-
- labels
- ['Freq', 'Time']
-
-
- grid_pos
-
-
-
- notebook
-
-
-
- _coordinate
- (216, 845)
-
-
- _rotation
- 0
-
-
-
- wxgui_scopesink2
-
- id
- wxgui_scopesink2_0
-
-
- _enabled
- True
-
-
- type
- complex
-
-
- title
- Signal into Receiver
-
-
- samp_rate
- samp_rate
-
-
- v_scale
- 0
-
-
- v_offset
- 0
-
-
- t_scale
- 0
-
-
- ac_couple
- False
-
-
- xy_mode
- False
-
-
- num_inputs
- 1
-
-
- win_size
-
-
-
- grid_pos
-
-
-
- notebook
- notebook_0,1
-
-
- _coordinate
- (1123, 392)
-
-
- _rotation
- 0
-
-
-
- wxgui_fftsink2
-
- id
- wxgui_fftsink2_0
-
-
- _enabled
- True
-
-
- type
- complex
-
-
- title
- Signal into Receiver
-
-
- samp_rate
- samp_rate
-
-
- baseband_freq
- 0
-
-
- y_per_div
- 10
-
-
- y_divs
- 10
-
-
- ref_level
- 10
-
-
- ref_scale
- 2.0
-
-
- fft_size
- 1024
-
-
- fft_rate
- 30
-
-
- peak_hold
- False
-
-
- average
- False
-
-
- avg_alpha
- 0
-
-
- win
- None
-
-
- win_size
-
-
-
- grid_pos
-
-
-
- notebook
- notebook_0,0
-
-
- _coordinate
- (1122, 473)
-
-
- _rotation
- 0
-
-
-
- wxgui_scopesink2
-
- id
- wxgui_scopesink2_0_0
-
-
- _enabled
- True
-
-
- type
- complex
-
-
- title
- Frequency Corrected Signal
-
-
- samp_rate
- samp_rate
-
-
- v_scale
- 0
-
-
- v_offset
- 0
-
-
- t_scale
- 0
-
-
- ac_couple
- False
-
-
- xy_mode
- False
-
-
- num_inputs
- 1
-
-
- win_size
-
-
-
- grid_pos
-
-
-
- notebook
- notebook_0,1
-
-
- _coordinate
- (1122, 680)
-
-
- _rotation
- 0
-
-
-
- wxgui_fftsink2
-
- id
- wxgui_fftsink2_0_0
-
-
- _enabled
- True
-
-
- type
- complex
-
-
- title
- Frequency Corrected Signal
-
-
- samp_rate
- samp_rate
-
-
- baseband_freq
- 0
-
-
- y_per_div
- 10
-
-
- y_divs
- 10
-
-
- ref_level
- 10
-
-
- ref_scale
- 2.0
-
-
- fft_size
- 1024
-
-
- fft_rate
- 30
-
-
- peak_hold
- False
-
-
- average
- False
-
-
- avg_alpha
- 0
-
-
- win
- None
-
-
- win_size
-
-
-
- grid_pos
-
-
-
- notebook
- notebook_0,0
-
-
- _coordinate
- (1121, 762)
-
-
- _rotation
- 0
-
-
-
- variable
-
- id
- samp_rate
-
-
- _enabled
- True
-
-
- value
- 32000
-
-
- _coordinate
- (128, 9)
-
-
- _rotation
- 0
-
-
-
- variable
-
- id
- sig_amp
-
-
- _enabled
- True
-
-
- value
- 1
-
-
- _coordinate
- (315, 9)
-
-
- _rotation
- 0
-
-
-
- variable
-
- id
- rolloff
-
-
- _enabled
- True
-
-
- value
- 0.35
-
-
- _coordinate
- (398, 12)
-
-
- _rotation
- 0
-
-
-
- variable
-
- id
- rrctaps
-
-
- _enabled
- True
-
-
- value
- firdes.root_raised_cosine(nfilts,1.0,1.0/(spb*nfilts), .35, int(11*spb*nfilts))
-
-
- _coordinate
- (826, 61)
-
-
- _rotation
- 0
-
-
-
- root_raised_cosine_filter
-
- id
- root_raised_cosine_filter_0
-
-
- _enabled
- True
-
-
- type
- interp_fir_filter_ccf
-
-
- decim
- 1
-
-
- interp
- spb_gen
-
-
- gain
- 2*spb_gen
-
-
- samp_rate
- 1.0
-
-
- sym_rate
- 1./spb_gen
-
-
- alpha
- rolloff
-
-
- ntaps
- 44
-
-
- _coordinate
- (978, 157)
-
-
- _rotation
- 0
-
-
-
- gr_fll_band_edge_cc
-
- id
- gr_fll_band_edge_cc_0
-
-
- _enabled
- True
-
-
- type
- cc
-
-
- samps_per_sym
- spb_gen
-
-
- rolloff
- rolloff
-
-
- filter_size
- 44
-
-
- alpha
- alpha
-
-
- beta
- beta
-
-
- _coordinate
- (874, 664)
-
-
- _rotation
- 0
-
-
-
- gr_channel_model
-
- id
- gr_channel_model_0
-
-
- _enabled
- True
-
-
- noise_voltage
- noise_amp
-
-
- freq_offset
- freq_offset
-
-
- epsilon
- 1.0
-
-
- taps
- 1.0
-
-
- seed
- 42
-
-
- _coordinate
- (618, 376)
-
-
- _rotation
- 0
-
-
-
- variable_slider
-
- id
- beta
-
-
- _enabled
- True
-
-
- label
- Freq Beta
-
-
- value
- 0
-
-
- min
- 0.0
-
-
- max
- 0.01
-
-
- num_steps
- 1000
-
-
- style
- wx.SL_HORIZONTAL
-
-
- converver
- float_converter
-
-
- grid_pos
-
-
-
- notebook
-
-
-
- _coordinate
- (668, 5)
-
-
- _rotation
- 180
-
-
-
- variable_slider
-
- id
- alpha
-
-
- _enabled
- True
-
-
- label
- Freq Alpha
-
-
- value
- 0
-
-
- min
- 0
-
-
- max
- 0.1
-
-
- num_steps
- 1000
-
-
- style
- wx.SL_HORIZONTAL
-
-
- converver
- float_converter
-
-
- grid_pos
-
-
-
- notebook
-
-
-
- _coordinate
- (552, 4)
-
-
- _rotation
- 0
-
-
-
- random_source_x_0
- gr_uchar_to_float_0
- 0
- 0
-
-
- gr_uchar_to_float_0
- gr_add_xx_0
- 0
- 0
-
-
- const_source_x_0
- gr_add_xx_0
- 0
- 1
-
-
- gr_uchar_to_float_0_0
- gr_add_xx_0_1
- 0
- 0
-
-
- const_source_x_0_0
- gr_add_xx_0_1
- 0
- 1
-
-
- random_source_x_0_0
- gr_uchar_to_float_0_0
- 0
- 0
-
-
- gr_add_xx_0
- gr_float_to_complex_0
- 0
- 0
-
-
- gr_add_xx_0_1
- gr_float_to_complex_0
- 0
- 1
-
-
- gr_float_to_complex_0
- gr_throttle_0
- 0
- 0
-
-
- gr_throttle_0
- root_raised_cosine_filter_0
- 0
- 0
-
-
- gr_channel_model_0
- wxgui_scopesink2_0
- 0
- 0
-
-
- root_raised_cosine_filter_0
- gr_channel_model_0
- 0
- 0
-
-
- gr_channel_model_0
- wxgui_fftsink2_0
- 0
- 0
-
-
- gr_channel_model_0
- gr_fll_band_edge_cc_0
- 0
- 0
-
-
- gr_fll_band_edge_cc_0
- wxgui_scopesink2_0_0
- 0
- 0
-
-
- gr_fll_band_edge_cc_0
- wxgui_fftsink2_0_0
- 0
- 0
-
-
diff --git a/gnuradio-examples/grc/demod/mpsk_demod.grc b/gnuradio-examples/grc/demod/mpsk_demod.grc
deleted file mode 100644
index 08108dcba..000000000
--- a/gnuradio-examples/grc/demod/mpsk_demod.grc
+++ /dev/null
@@ -1,586 +0,0 @@
-
-
- Mon Oct 5 18:34:52 2009
-
- options
-
- id
- mpsk_demod
-
-
- _enabled
- True
-
-
- title
- MPSK Demod Demo
-
-
- author
-
-
-
- description
-
-
-
- window_size
- 1280, 1024
-
-
- generate_options
- wx_gui
-
-
- category
- Custom
-
-
- run_options
- prompt
-
-
- run
- True
-
-
- realtime_scheduling
-
-
-
- _coordinate
- (10, 10)
-
-
- _rotation
- 0
-
-
-
- variable
-
- id
- samp_rate
-
-
- _enabled
- True
-
-
- value
- 32000
-
-
- _coordinate
- (10, 170)
-
-
- _rotation
- 0
-
-
-
- random_source_x
-
- id
- random_source_x_0
-
-
- _enabled
- True
-
-
- type
- byte
-
-
- min
- 0
-
-
- max
- 2**8
-
-
- num_samps
- 10000
-
-
- repeat
- True
-
-
- _coordinate
- (155, 160)
-
-
- _rotation
- 0
-
-
-
- blks2_dxpsk_mod
-
- id
- blks2_dxpsk_mod_0
-
-
- _enabled
- True
-
-
- type
- dqpsk
-
-
- samples_per_symbol
- samps_per_sym
-
-
- excess_bw
- 0.35
-
-
- gray_code
- True
-
-
- verbose
- False
-
-
- log
- False
-
-
- _coordinate
- (391, 54)
-
-
- _rotation
- 0
-
-
-
- gr_throttle
-
- id
- gr_throttle_0
-
-
- _enabled
- True
-
-
- type
- complex
-
-
- samples_per_second
- samp_rate
-
-
- vlen
- 1
-
-
- _coordinate
- (654, 142)
-
-
- _rotation
- 0
-
-
-
- variable
-
- id
- samps_per_sym
-
-
- _enabled
- True
-
-
- value
- 4
-
-
- _coordinate
- (7, 89)
-
-
- _rotation
- 0
-
-
-
- gr_channel_model
-
- id
- gr_channel_model_0
-
-
- _enabled
- True
-
-
- noise_voltage
- noise
-
-
- freq_offset
- freq_off
-
-
- epsilon
- 1.0
-
-
- taps
- 1.0
-
-
- seed
- 42
-
-
- _coordinate
- (487, 282)
-
-
- _rotation
- 0
-
-
-
- variable_slider
-
- id
- noise
-
-
- _enabled
- True
-
-
- label
- Noise
-
-
- value
- .1
-
-
- min
- 0
-
-
- max
- 1
-
-
- num_steps
- 100
-
-
- style
- wx.SL_HORIZONTAL
-
-
- converver
- float_converter
-
-
- grid_pos
-
-
-
- notebook
-
-
-
- _coordinate
- (259, 353)
-
-
- _rotation
- 0
-
-
-
- variable_slider
-
- id
- freq_off
-
-
- _enabled
- True
-
-
- label
- Freq Offset
-
-
- value
- 0
-
-
- min
- -.5
-
-
- max
- .5
-
-
- num_steps
- 1000
-
-
- style
- wx.SL_HORIZONTAL
-
-
- converver
- float_converter
-
-
- grid_pos
-
-
-
- notebook
-
-
-
- _coordinate
- (126, 345)
-
-
- _rotation
- 0
-
-
-
- notebook
-
- id
- notebook
-
-
- _enabled
- True
-
-
- style
- wx.NB_TOP
-
-
- labels
- ['Constellation', 'Spectrum']
-
-
- grid_pos
-
-
-
- notebook
-
-
-
- _coordinate
- (520, 407)
-
-
- _rotation
- 0
-
-
-
- wxgui_constellationsink2
-
- id
- wxgui_constellationsink2_0
-
-
- _enabled
- True
-
-
- title
- Constellation Plot
-
-
- samp_rate
- samp_rate
-
-
- frame_rate
- 5
-
-
- const_size
- 2048
-
-
- M
- 4
-
-
- theta
- 0
-
-
- alpha
- 0.005
-
-
- fmax
- 0.06
-
-
- mu
- 0.5
-
-
- gain_mu
- 0.005
-
-
- symbol_rate
- samp_rate/4.
-
-
- omega_limit
- 0.005
-
-
- grid_pos
-
-
-
- notebook
- notebook, 0
-
-
- _coordinate
- (824, 212)
-
-
- _rotation
- 0
-
-
-
- wxgui_fftsink2
-
- id
- wxgui_fftsink2_0
-
-
- _enabled
- True
-
-
- type
- complex
-
-
- title
- FFT Plot
-
-
- samp_rate
- samp_rate
-
-
- baseband_freq
- 0
-
-
- y_per_div
- 10
-
-
- y_divs
- 10
-
-
- ref_level
- 50
-
-
- ref_scale
- 2.0
-
-
- fft_size
- 1024
-
-
- fft_rate
- 30
-
-
- peak_hold
- False
-
-
- average
- False
-
-
- avg_alpha
- 0
-
-
- grid_pos
-
-
-
- notebook
- notebook, 1
-
-
- _coordinate
- (847, 10)
-
-
- _rotation
- 0
-
-
-
- random_source_x_0
- blks2_dxpsk_mod_0
- 0
- 0
-
-
- gr_throttle_0
- wxgui_constellationsink2_0
- 0
- 0
-
-
- gr_throttle_0
- wxgui_fftsink2_0
- 0
- 0
-
-
- blks2_dxpsk_mod_0
- gr_channel_model_0
- 0
- 0
-
-
- gr_channel_model_0
- gr_throttle_0
- 0
- 0
-
-
diff --git a/gnuradio-examples/grc/demod/pam_sync.grc b/gnuradio-examples/grc/demod/pam_sync.grc
deleted file mode 100644
index 8571995a5..000000000
--- a/gnuradio-examples/grc/demod/pam_sync.grc
+++ /dev/null
@@ -1,1744 +0,0 @@
-
-
- Sat Mar 6 17:17:22 2010
-
- options
-
- id
- top_block
-
-
- _enabled
- True
-
-
- title
-
-
-
- author
-
-
-
- description
-
-
-
- window_size
- 1280, 1024
-
-
- generate_options
- wx_gui
-
-
- category
- Custom
-
-
- run_options
- prompt
-
-
- run
- True
-
-
- realtime_scheduling
-
-
-
- _coordinate
- (10, 10)
-
-
- _rotation
- 0
-
-
-
- gr_uchar_to_float
-
- id
- gr_uchar_to_float_0
-
-
- _enabled
- True
-
-
- _coordinate
- (217, 108)
-
-
- _rotation
- 0
-
-
-
- gr_uchar_to_float
-
- id
- gr_uchar_to_float_0_0
-
-
- _enabled
- True
-
-
- _coordinate
- (216, 273)
-
-
- _rotation
- 0
-
-
-
- variable
-
- id
- samp_rate
-
-
- _enabled
- True
-
-
- value
- 32000
-
-
- _coordinate
- (128, 9)
-
-
- _rotation
- 0
-
-
-
- variable_slider
-
- id
- freq_offset
-
-
- _enabled
- True
-
-
- label
- Frequency Offset
-
-
- value
- 0
-
-
- min
- -0.5
-
-
- max
- 0.5
-
-
- num_steps
- 1000
-
-
- style
- wx.SL_HORIZONTAL
-
-
- converver
- float_converter
-
-
- grid_pos
-
-
-
- notebook
-
-
-
- _coordinate
- (293, 684)
-
-
- _rotation
- 0
-
-
-
- random_source_x
-
- id
- random_source_x_0
-
-
- _enabled
- True
-
-
- type
- byte
-
-
- min
- 0
-
-
- max
- pam_amp
-
-
- num_samps
- 10000
-
-
- repeat
- True
-
-
- _coordinate
- (13, 80)
-
-
- _rotation
- 0
-
-
-
- random_source_x
-
- id
- random_source_x_0_0
-
-
- _enabled
- True
-
-
- type
- byte
-
-
- min
- 0
-
-
- max
- pam_amp
-
-
- num_samps
- 10000
-
-
- repeat
- True
-
-
- _coordinate
- (15, 245)
-
-
- _rotation
- 0
-
-
-
- const_source_x
-
- id
- const_source_x_0
-
-
- _enabled
- True
-
-
- type
- float
-
-
- const
- -0.5*(pam_amp-1)
-
-
- _coordinate
- (213, 197)
-
-
- _rotation
- 0
-
-
-
- const_source_x
-
- id
- const_source_x_0_0
-
-
- _enabled
- True
-
-
- type
- float
-
-
- const
- -0.5*(pam_amp-1)
-
-
- _coordinate
- (200, 360)
-
-
- _rotation
- 0
-
-
-
- gr_add_xx
-
- id
- gr_add_xx_0
-
-
- _enabled
- True
-
-
- type
- float
-
-
- num_inputs
- 2
-
-
- vlen
- 1
-
-
- _coordinate
- (440, 167)
-
-
- _rotation
- 0
-
-
-
- gr_add_xx
-
- id
- gr_add_xx_0_1
-
-
- _enabled
- True
-
-
- type
- float
-
-
- num_inputs
- 2
-
-
- vlen
- 1
-
-
- _coordinate
- (430, 330)
-
-
- _rotation
- 0
-
-
-
- variable
-
- id
- nfilts
-
-
- _enabled
- True
-
-
- value
- 32
-
-
- _coordinate
- (435, 686)
-
-
- _rotation
- 0
-
-
-
- variable_slider
-
- id
- noise_amp
-
-
- _enabled
- True
-
-
- label
- Channel Noise
-
-
- value
- 0
-
-
- min
- 0
-
-
- max
- 1.0
-
-
- num_steps
- 1000
-
-
- style
- wx.SL_HORIZONTAL
-
-
- converver
- float_converter
-
-
- grid_pos
-
-
-
- notebook
-
-
-
- _coordinate
- (168, 684)
-
-
- _rotation
- 0
-
-
-
- variable_slider
-
- id
- interpratio
-
-
- _enabled
- True
-
-
- label
- Timing Offset
-
-
- value
- 1.00
-
-
- min
- 0.99
-
-
- max
- 1.01
-
-
- num_steps
- 1000
-
-
- style
- wx.SL_HORIZONTAL
-
-
- converver
- float_converter
-
-
- grid_pos
-
-
-
- notebook
-
-
-
- _coordinate
- (40, 684)
-
-
- _rotation
- 180
-
-
-
- variable
-
- id
- pam_amp
-
-
- _enabled
- True
-
-
- value
- 2
-
-
- _coordinate
- (223, 9)
-
-
- _rotation
- 0
-
-
-
- variable
-
- id
- sig_amp
-
-
- _enabled
- True
-
-
- value
- 1
-
-
- _coordinate
- (315, 9)
-
-
- _rotation
- 0
-
-
-
- variable
-
- id
- rolloff
-
-
- _enabled
- True
-
-
- value
- 0.35
-
-
- _coordinate
- (397, 9)
-
-
- _rotation
- 0
-
-
-
- gr_throttle
-
- id
- gr_throttle_0
-
-
- _enabled
- True
-
-
- type
- complex
-
-
- samples_per_second
- samp_rate
-
-
- vlen
- 1
-
-
- _coordinate
- (253, 575)
-
-
- _rotation
- 0
-
-
-
- variable_slider
-
- id
- time_beta
-
-
- _enabled
- True
-
-
- label
- Timing Beta
-
-
- value
- 0
-
-
- min
- 0.0
-
-
- max
- 0.1
-
-
- num_steps
- 1000
-
-
- style
- wx.SL_HORIZONTAL
-
-
- converver
- float_converter
-
-
- grid_pos
-
-
-
- notebook
-
-
-
- _coordinate
- (606, 8)
-
-
- _rotation
- 180
-
-
-
- variable_slider
-
- id
- time_alpha
-
-
- _enabled
- True
-
-
- label
- Timing Alpha
-
-
- value
- 0
-
-
- min
- 0
-
-
- max
- 1
-
-
- num_steps
- 1000
-
-
- style
- wx.SL_HORIZONTAL
-
-
- converver
- float_converter
-
-
- grid_pos
-
-
-
- notebook
-
-
-
- _coordinate
- (490, 8)
-
-
- _rotation
- 0
-
-
-
- variable_slider
-
- id
- phase_alpha
-
-
- _enabled
- True
-
-
- label
- Phase Alpha
-
-
- value
- 0
-
-
- min
- 0
-
-
- max
- 0.1
-
-
- num_steps
- 1000
-
-
- style
- wx.SL_HORIZONTAL
-
-
- converver
- float_converter
-
-
- grid_pos
-
-
-
- notebook
-
-
-
- _coordinate
- (953, 8)
-
-
- _rotation
- 0
-
-
-
- variable_slider
-
- id
- phase_beta
-
-
- _enabled
- True
-
-
- label
- Phase Beta
-
-
- value
- 0
-
-
- min
- 0.0
-
-
- max
- 0.01
-
-
- num_steps
- 1000
-
-
- style
- wx.SL_HORIZONTAL
-
-
- converver
- float_converter
-
-
- grid_pos
-
-
-
- notebook
-
-
-
- _coordinate
- (1066, 8)
-
-
- _rotation
- 180
-
-
-
- gr_costas_loop_cc
-
- id
- gr_costas_loop_cc_0
-
-
- _enabled
- True
-
-
- alpha
- phase_alpha
-
-
- beta
- phase_beta
-
-
- max_freq
- 0.2
-
-
- min_freq
- -0.2
-
-
- order
- 4
-
-
- _coordinate
- (915, 560)
-
-
- _rotation
- 0
-
-
-
- wxgui_scopesink2
-
- id
- wxgui_scopesink2_0
-
-
- _enabled
- True
-
-
- type
- complex
-
-
- title
- Input Signal
-
-
- samp_rate
- samp_rate
-
-
- v_scale
- 0
-
-
- v_offset
- 0
-
-
- t_scale
- 0
-
-
- ac_couple
- False
-
-
- xy_mode
- False
-
-
- num_inputs
- 1
-
-
- win_size
-
-
-
- grid_pos
-
-
-
- notebook
- notebook_0,0
-
-
- _coordinate
- (1116, 559)
-
-
- _rotation
- 0
-
-
-
- variable
-
- id
- rrctaps
-
-
- _enabled
- True
-
-
- value
- firdes.root_raised_cosine(nfilts,1.0,1.0/(spb*nfilts), rolloff, int(11*spb*nfilts))
-
-
- _coordinate
- (436, 755)
-
-
- _rotation
- 0
-
-
-
- notebook
-
- id
- notebook_0
-
-
- _enabled
- True
-
-
- style
- wx.NB_TOP
-
-
- labels
- ['Output Signal', 'Input Signal']
-
-
- grid_pos
-
-
-
- notebook
-
-
-
- _coordinate
- (203, 823)
-
-
- _rotation
- 0
-
-
-
- wxgui_scopesink2
-
- id
- wxgui_scopesink2_0_0_1
-
-
- _enabled
- True
-
-
- type
- complex
-
-
- title
- Input Signal
-
-
- samp_rate
- samp_rate
-
-
- v_scale
- .5
-
-
- v_offset
- 0
-
-
- t_scale
- 0
-
-
- ac_couple
- False
-
-
- xy_mode
- False
-
-
- num_inputs
- 1
-
-
- win_size
-
-
-
- grid_pos
-
-
-
- notebook
- notebook_0,1
-
-
- _coordinate
- (975, 312)
-
-
- _rotation
- 0
-
-
-
- wxgui_fftsink2
-
- id
- wxgui_fftsink2_0
-
-
- _enabled
- True
-
-
- type
- complex
-
-
- title
- Input Frequency
-
-
- samp_rate
- samp_rate
-
-
- baseband_freq
- 0
-
-
- y_per_div
- 10
-
-
- y_divs
- 10
-
-
- ref_level
- 10
-
-
- ref_scale
- 2.0
-
-
- fft_size
- 1024
-
-
- fft_rate
- 30
-
-
- peak_hold
- False
-
-
- average
- False
-
-
- avg_alpha
- 0
-
-
- win
- None
-
-
- win_size
-
-
-
- grid_pos
-
-
-
- notebook
- notebook_0,1
-
-
- _coordinate
- (1116, 355)
-
-
- _rotation
- 0
-
-
-
- virtual_source
-
- id
- virtual_source_0
-
-
- _enabled
- True
-
-
- stream_id
- input_signal_probe
-
-
- _coordinate
- (801, 453)
-
-
- _rotation
- 0
-
-
-
- virtual_sink
-
- id
- virtual_sink_0
-
-
- _enabled
- True
-
-
- stream_id
- input_signal_probe
-
-
- _coordinate
- (280, 475)
-
-
- _rotation
- 0
-
-
-
- wxgui_fftsink2
-
- id
- wxgui_fftsink2_0_0
-
-
- _enabled
- True
-
-
- type
- complex
-
-
- title
- Output Frequency
-
-
- samp_rate
- samp_rate
-
-
- baseband_freq
- 0
-
-
- y_per_div
- 10
-
-
- y_divs
- 10
-
-
- ref_level
- 10
-
-
- ref_scale
- 2.0
-
-
- fft_size
- 1024
-
-
- fft_rate
- 30
-
-
- peak_hold
- False
-
-
- average
- False
-
-
- avg_alpha
- 0
-
-
- win
- None
-
-
- win_size
-
-
-
- grid_pos
-
-
-
- notebook
- notebook_0,0
-
-
- _coordinate
- (663, 687)
-
-
- _rotation
- 0
-
-
-
- gr_pfb_clock_sync_xxx
-
- id
- gr_pfb_clock_sync_xxx_0
-
-
- _enabled
- True
-
-
- type
- ccf
-
-
- sps
- spb
-
-
- alpha
- time_alpha
-
-
- beta
- time_beta
-
-
- taps
- rrctaps
-
-
- filter_size
- nfilts
-
-
- init_phase
- 16
-
-
- max_dev
- 1.5
-
-
- _coordinate
- (662, 527)
-
-
- _rotation
- 0
-
-
-
- gr_float_to_complex
-
- id
- gr_float_to_complex_0
-
-
- _enabled
- True
-
-
- vlen
- 1
-
-
- _coordinate
- (592, 184)
-
-
- _rotation
- 0
-
-
-
- gr_channel_model
-
- id
- gr_channel_model_0
-
-
- _enabled
- True
-
-
- noise_voltage
- noise_amp
-
-
- freq_offset
- freq_offset
-
-
- epsilon
- interpratio
-
-
- taps
- 1.0
-
-
- seed
- 42
-
-
- _coordinate
- (60, 443)
-
-
- _rotation
- 0
-
-
-
- gr_multiply_const_vxx
-
- id
- gr_multiply_const_vxx_0
-
-
- _enabled
- True
-
-
- type
- complex
-
-
- const
- sig_amp
-
-
- vlen
- 1
-
-
- _coordinate
- (670, 322)
-
-
- _rotation
- 0
-
-
-
- blks2_pfb_arb_resampler_ccf
-
- id
- blks2_pfb_arb_resampler_ccf_0
-
-
- _enabled
- True
-
-
- rate
- spb
-
-
- taps
- firdes.root_raised_cosine(32, 32, 1.0, 0.35, 44*32)
-
-
- size
- 32
-
-
- _coordinate
- (778, 180)
-
-
- _rotation
- 0
-
-
-
- gr_fll_band_edge_cc
-
- id
- gr_fll_band_edge_cc_0
-
-
- _enabled
- True
-
-
- type
- cc
-
-
- samps_per_sym
- spb
-
-
- rolloff
- rolloff
-
-
- filter_size
- 44
-
-
- alpha
- freq_alpha
-
-
- beta
- freq_beta
-
-
- _coordinate
- (429, 528)
-
-
- _rotation
- 0
-
-
-
- variable
-
- id
- spb
-
-
- _enabled
- True
-
-
- value
- 4.0
-
-
- _coordinate
- (40, 829)
-
-
- _rotation
- 0
-
-
-
- variable_slider
-
- id
- freq_alpha
-
-
- _enabled
- True
-
-
- label
- Freq Alpha
-
-
- value
- 0
-
-
- min
- 0
-
-
- max
- 0.1
-
-
- num_steps
- 1000
-
-
- style
- wx.SL_HORIZONTAL
-
-
- converver
- float_converter
-
-
- grid_pos
-
-
-
- notebook
-
-
-
- _coordinate
- (734, 10)
-
-
- _rotation
- 0
-
-
-
- variable_slider
-
- id
- freq_beta
-
-
- _enabled
- True
-
-
- label
- Freq Beta
-
-
- value
- 0
-
-
- min
- 0.0
-
-
- max
- 0.01
-
-
- num_steps
- 1000
-
-
- style
- wx.SL_HORIZONTAL
-
-
- converver
- float_converter
-
-
- grid_pos
-
-
-
- notebook
-
-
-
- _coordinate
- (836, 9)
-
-
- _rotation
- 180
-
-
-
- random_source_x_0
- gr_uchar_to_float_0
- 0
- 0
-
-
- gr_uchar_to_float_0_0
- gr_add_xx_0_1
- 0
- 0
-
-
- const_source_x_0_0
- gr_add_xx_0_1
- 0
- 1
-
-
- random_source_x_0_0
- gr_uchar_to_float_0_0
- 0
- 0
-
-
- gr_channel_model_0
- gr_throttle_0
- 0
- 0
-
-
- gr_add_xx_0
- gr_float_to_complex_0
- 0
- 0
-
-
- gr_add_xx_0_1
- gr_float_to_complex_0
- 0
- 1
-
-
- gr_uchar_to_float_0
- gr_add_xx_0
- 0
- 0
-
-
- const_source_x_0
- gr_add_xx_0
- 0
- 1
-
-
- gr_throttle_0
- gr_fll_band_edge_cc_0
- 0
- 0
-
-
- gr_fll_band_edge_cc_0
- gr_pfb_clock_sync_xxx_0
- 0
- 0
-
-
- gr_pfb_clock_sync_xxx_0
- gr_costas_loop_cc_0
- 0
- 0
-
-
- gr_costas_loop_cc_0
- wxgui_scopesink2_0
- 0
- 0
-
-
- gr_fll_band_edge_cc_0
- wxgui_fftsink2_0_0
- 0
- 0
-
-
- virtual_source_0
- wxgui_scopesink2_0_0_1
- 0
- 0
-
-
- virtual_source_0
- wxgui_fftsink2_0
- 0
- 0
-
-
- gr_channel_model_0
- virtual_sink_0
- 0
- 0
-
-
- gr_float_to_complex_0
- blks2_pfb_arb_resampler_ccf_0
- 0
- 0
-
-
- blks2_pfb_arb_resampler_ccf_0
- gr_multiply_const_vxx_0
- 0
- 0
-
-
- gr_multiply_const_vxx_0
- gr_channel_model_0
- 0
- 0
-
-
diff --git a/gnuradio-examples/grc/demod/pam_timing.grc b/gnuradio-examples/grc/demod/pam_timing.grc
deleted file mode 100644
index 02130f481..000000000
--- a/gnuradio-examples/grc/demod/pam_timing.grc
+++ /dev/null
@@ -1,1388 +0,0 @@
-
-
- Mon Feb 1 18:54:46 2010
-
- options
-
- id
- top_block
-
-
- _enabled
- True
-
-
- title
-
-
-
- author
-
-
-
- description
-
-
-
- window_size
- 1280, 1024
-
-
- generate_options
- wx_gui
-
-
- category
- Custom
-
-
- run_options
- prompt
-
-
- run
- True
-
-
- realtime_scheduling
-
-
-
- _coordinate
- (10, 10)
-
-
- _rotation
- 0
-
-
-
- gr_uchar_to_float
-
- id
- gr_uchar_to_float_0
-
-
- _enabled
- True
-
-
- _coordinate
- (217, 108)
-
-
- _rotation
- 0
-
-
-
- gr_uchar_to_float
-
- id
- gr_uchar_to_float_0_0
-
-
- _enabled
- True
-
-
- _coordinate
- (216, 273)
-
-
- _rotation
- 0
-
-
-
- variable
-
- id
- samp_rate
-
-
- _enabled
- True
-
-
- value
- 32000
-
-
- _coordinate
- (128, 9)
-
-
- _rotation
- 0
-
-
-
- variable_slider
-
- id
- freq_offset
-
-
- _enabled
- True
-
-
- label
- Frequency Offset
-
-
- value
- 0
-
-
- min
- -0.5
-
-
- max
- 0.5
-
-
- num_steps
- 1000
-
-
- style
- wx.SL_HORIZONTAL
-
-
- converver
- float_converter
-
-
- grid_pos
-
-
-
- notebook
-
-
-
- _coordinate
- (293, 684)
-
-
- _rotation
- 0
-
-
-
- random_source_x
-
- id
- random_source_x_0
-
-
- _enabled
- True
-
-
- type
- byte
-
-
- min
- 0
-
-
- max
- pam_amp
-
-
- num_samps
- 10000
-
-
- repeat
- True
-
-
- _coordinate
- (13, 80)
-
-
- _rotation
- 0
-
-
-
- random_source_x
-
- id
- random_source_x_0_0
-
-
- _enabled
- True
-
-
- type
- byte
-
-
- min
- 0
-
-
- max
- pam_amp
-
-
- num_samps
- 10000
-
-
- repeat
- True
-
-
- _coordinate
- (15, 245)
-
-
- _rotation
- 0
-
-
-
- const_source_x
-
- id
- const_source_x_0
-
-
- _enabled
- True
-
-
- type
- float
-
-
- const
- -0.5*(pam_amp-1)
-
-
- _coordinate
- (213, 197)
-
-
- _rotation
- 0
-
-
-
- const_source_x
-
- id
- const_source_x_0_0
-
-
- _enabled
- True
-
-
- type
- float
-
-
- const
- -0.5*(pam_amp-1)
-
-
- _coordinate
- (200, 360)
-
-
- _rotation
- 0
-
-
-
- notebook
-
- id
- notebook_0
-
-
- _enabled
- True
-
-
- style
- wx.NB_TOP
-
-
- labels
- ['error', 'phase', 'freq', 'Resampled Signal']
-
-
- grid_pos
-
-
-
- notebook
-
-
-
- _coordinate
- (729, 769)
-
-
- _rotation
- 0
-
-
-
- gr_add_xx
-
- id
- gr_add_xx_0
-
-
- _enabled
- True
-
-
- type
- float
-
-
- num_inputs
- 2
-
-
- vlen
- 1
-
-
- _coordinate
- (440, 167)
-
-
- _rotation
- 0
-
-
-
- gr_add_xx
-
- id
- gr_add_xx_0_1
-
-
- _enabled
- True
-
-
- type
- float
-
-
- num_inputs
- 2
-
-
- vlen
- 1
-
-
- _coordinate
- (430, 330)
-
-
- _rotation
- 0
-
-
-
- variable
-
- id
- nfilts
-
-
- _enabled
- True
-
-
- value
- 32
-
-
- _coordinate
- (435, 686)
-
-
- _rotation
- 0
-
-
-
- variable_slider
-
- id
- noise_amp
-
-
- _enabled
- True
-
-
- label
- Channel Noise
-
-
- value
- 0
-
-
- min
- 0
-
-
- max
- 1.0
-
-
- num_steps
- 1000
-
-
- style
- wx.SL_HORIZONTAL
-
-
- converver
- float_converter
-
-
- grid_pos
-
-
-
- notebook
-
-
-
- _coordinate
- (168, 684)
-
-
- _rotation
- 0
-
-
-
- variable_slider
-
- id
- interpratio
-
-
- _enabled
- True
-
-
- label
- Timing Offset
-
-
- value
- 1.00
-
-
- min
- 0.99
-
-
- max
- 1.01
-
-
- num_steps
- 1000
-
-
- style
- wx.SL_HORIZONTAL
-
-
- converver
- float_converter
-
-
- grid_pos
-
-
-
- notebook
-
-
-
- _coordinate
- (40, 684)
-
-
- _rotation
- 180
-
-
-
- variable_slider
-
- id
- beta
-
-
- _enabled
- True
-
-
- label
- Timing Beta
-
-
- value
- 0
-
-
- min
- 0.0
-
-
- max
- 0.1
-
-
- num_steps
- 1000
-
-
- style
- wx.SL_HORIZONTAL
-
-
- converver
- float_converter
-
-
- grid_pos
-
-
-
- notebook
-
-
-
- _coordinate
- (668, 5)
-
-
- _rotation
- 180
-
-
-
- variable_slider
-
- id
- alpha
-
-
- _enabled
- True
-
-
- label
- Timing Alpha
-
-
- value
- 0
-
-
- min
- 0
-
-
- max
- 1
-
-
- num_steps
- 1000
-
-
- style
- wx.SL_HORIZONTAL
-
-
- converver
- float_converter
-
-
- grid_pos
-
-
-
- notebook
-
-
-
- _coordinate
- (552, 4)
-
-
- _rotation
- 0
-
-
-
- variable
-
- id
- pam_amp
-
-
- _enabled
- True
-
-
- value
- 2
-
-
- _coordinate
- (223, 9)
-
-
- _rotation
- 0
-
-
-
- variable
-
- id
- sig_amp
-
-
- _enabled
- True
-
-
- value
- 1
-
-
- _coordinate
- (315, 9)
-
-
- _rotation
- 0
-
-
-
- wxgui_scopesink2
-
- id
- wxgui_scopesink2_0
-
-
- _enabled
- True
-
-
- type
- complex
-
-
- title
- Scope Plot
-
-
- samp_rate
- samp_rate
-
-
- v_scale
- 0
-
-
- v_offset
- 0
-
-
- t_scale
- 0
-
-
- ac_couple
- False
-
-
- xy_mode
- False
-
-
- num_inputs
- 1
-
-
- win_size
-
-
-
- grid_pos
-
-
-
- notebook
-
-
-
- _coordinate
- (1116, 500)
-
-
- _rotation
- 0
-
-
-
- gr_throttle
-
- id
- gr_throttle_0
-
-
- _enabled
- True
-
-
- type
- complex
-
-
- samples_per_second
- samp_rate
-
-
- vlen
- 1
-
-
- _coordinate
- (290, 575)
-
-
- _rotation
- 0
-
-
-
- wxgui_scopesink2
-
- id
- wxgui_scopesink2_0_0
-
-
- _enabled
- True
-
-
- type
- float
-
-
- title
- Error
-
-
- samp_rate
- samp_rate
-
-
- v_scale
- 3
-
-
- v_offset
- 0
-
-
- t_scale
- 0
-
-
- ac_couple
- False
-
-
- xy_mode
- False
-
-
- num_inputs
- 1
-
-
- win_size
-
-
-
- grid_pos
-
-
-
- notebook
- notebook_0,0
-
-
- _coordinate
- (1110, 651)
-
-
- _rotation
- 0
-
-
-
- wxgui_scopesink2
-
- id
- wxgui_scopesink2_0_0_0
-
-
- _enabled
- True
-
-
- type
- float
-
-
- title
- Scope Plot
-
-
- samp_rate
- samp_rate
-
-
- v_scale
- 9
-
-
- v_offset
- 0
-
-
- t_scale
- 0
-
-
- ac_couple
- False
-
-
- xy_mode
- False
-
-
- num_inputs
- 1
-
-
- win_size
-
-
-
- grid_pos
-
-
-
- notebook
- notebook_0,1
-
-
- _coordinate
- (1112, 881)
-
-
- _rotation
- 0
-
-
-
- variable
-
- id
- rrctaps
-
-
- _enabled
- True
-
-
- value
- firdes.root_raised_cosine(nfilts,1.0,1.0/(spb*nfilts), .35, int(11*spb*nfilts))
-
-
- _coordinate
- (513, 679)
-
-
- _rotation
- 0
-
-
-
- gr_pfb_clock_sync_xxx
-
- id
- gr_pfb_clock_sync_xxx_0
-
-
- _enabled
- True
-
-
- type
- ccf
-
-
- sps
- spb
-
-
- alpha
- alpha
-
-
- beta
- beta
-
-
- taps
- rrctaps
-
-
- filter_size
- nfilts
-
-
- init_phase
- 16
-
-
- max_dev
- 1.5
-
-
- _coordinate
- (512, 527)
-
-
- _rotation
- 0
-
-
-
- wxgui_scopesink2
-
- id
- wxgui_scopesink2_0_0_0_0
-
-
- _enabled
- True
-
-
- type
- float
-
-
- title
- Scope Plot
-
-
- samp_rate
- samp_rate
-
-
- v_scale
- 1.25
-
-
- v_offset
- 0
-
-
- t_scale
- 0
-
-
- ac_couple
- False
-
-
- xy_mode
- False
-
-
- num_inputs
- 1
-
-
- win_size
-
-
-
- grid_pos
-
-
-
- notebook
- notebook_0,2
-
-
- _coordinate
- (1111, 767)
-
-
- _rotation
- 0
-
-
-
- wxgui_scopesink2
-
- id
- wxgui_scopesink2_0_0_1
-
-
- _enabled
- True
-
-
- type
- complex
-
-
- title
- Error
-
-
- samp_rate
- samp_rate
-
-
- v_scale
- .5
-
-
- v_offset
- 0
-
-
- t_scale
- 0
-
-
- ac_couple
- False
-
-
- xy_mode
- False
-
-
- num_inputs
- 1
-
-
- win_size
-
-
-
- grid_pos
-
-
-
- notebook
- notebook_0,3
-
-
- _coordinate
- (1115, 358)
-
-
- _rotation
- 0
-
-
-
- gr_float_to_complex
-
- id
- gr_float_to_complex_0
-
-
- _enabled
- True
-
-
- vlen
- 1
-
-
- _coordinate
- (590, 184)
-
-
- _rotation
- 0
-
-
-
- blks2_pfb_arb_resampler_ccf
-
- id
- blks2_pfb_arb_resampler_ccf_0
-
-
- _enabled
- True
-
-
- rate
- spb
-
-
- taps
- firdes.root_raised_cosine(32, 32, 1.0, 0.35, 44*32)
-
-
- size
- 32
-
-
- _coordinate
- (816, 181)
-
-
- _rotation
- 0
-
-
-
- gr_channel_model
-
- id
- gr_channel_model_0
-
-
- _enabled
- True
-
-
- noise_voltage
- noise_amp
-
-
- freq_offset
- freq_offset
-
-
- epsilon
- interpratio
-
-
- taps
- 1.0
-
-
- seed
- 42
-
-
- _coordinate
- (59, 543)
-
-
- _rotation
- 0
-
-
-
- gr_multiply_const_vxx
-
- id
- gr_multiply_const_vxx_0
-
-
- _enabled
- True
-
-
- type
- complex
-
-
- const
- sig_amp
-
-
- vlen
- 1
-
-
- _coordinate
- (714, 382)
-
-
- _rotation
- 0
-
-
-
- variable
-
- id
- spb
-
-
- _enabled
- True
-
-
- value
- 4.2563
-
-
- _coordinate
- (42, 840)
-
-
- _rotation
- 0
-
-
-
- random_source_x_0
- gr_uchar_to_float_0
- 0
- 0
-
-
- gr_uchar_to_float_0
- gr_add_xx_0
- 0
- 0
-
-
- const_source_x_0
- gr_add_xx_0
- 0
- 1
-
-
- gr_uchar_to_float_0_0
- gr_add_xx_0_1
- 0
- 0
-
-
- const_source_x_0_0
- gr_add_xx_0_1
- 0
- 1
-
-
- random_source_x_0_0
- gr_uchar_to_float_0_0
- 0
- 0
-
-
- gr_channel_model_0
- gr_throttle_0
- 0
- 0
-
-
- gr_add_xx_0
- gr_float_to_complex_0
- 0
- 0
-
-
- gr_add_xx_0_1
- gr_float_to_complex_0
- 0
- 1
-
-
- gr_pfb_clock_sync_xxx_0
- wxgui_scopesink2_0
- 0
- 0
-
-
- gr_throttle_0
- gr_pfb_clock_sync_xxx_0
- 0
- 0
-
-
- gr_pfb_clock_sync_xxx_0
- wxgui_scopesink2_0_0
- 1
- 0
-
-
- gr_pfb_clock_sync_xxx_0
- wxgui_scopesink2_0_0_0
- 3
- 0
-
-
- gr_pfb_clock_sync_xxx_0
- wxgui_scopesink2_0_0_0_0
- 2
- 0
-
-
- gr_multiply_const_vxx_0
- wxgui_scopesink2_0_0_1
- 0
- 0
-
-
- gr_float_to_complex_0
- blks2_pfb_arb_resampler_ccf_0
- 0
- 0
-
-
- blks2_pfb_arb_resampler_ccf_0
- gr_multiply_const_vxx_0
- 0
- 0
-
-
- gr_multiply_const_vxx_0
- gr_channel_model_0
- 0
- 0
-
-
diff --git a/gnuradio-examples/grc/simple/ber_simulation.grc b/gnuradio-examples/grc/simple/ber_simulation.grc
deleted file mode 100644
index 618add29c..000000000
--- a/gnuradio-examples/grc/simple/ber_simulation.grc
+++ /dev/null
@@ -1,564 +0,0 @@
-
-
- Thu Mar 19 11:08:59 2009
-
- options
-
- id
- ber_sim
-
-
- _enabled
- True
-
-
- title
- BER Simulation
-
-
- author
- Example
-
-
- description
- Adjust the noise and constellation... see what happens!
-
-
- window_size
- 1280, 1024
-
-
- generate_options
- wx_gui
-
-
- category
- Custom
-
-
- realtime_scheduling
-
-
-
- _coordinate
- (16, 10)
-
-
- _rotation
- 0
-
-
-
- gr_noise_source_x
-
- id
- gr_noise_source_x
-
-
- _enabled
- True
-
-
- type
- complex
-
-
- noise_type
- gr.GR_GAUSSIAN
-
-
- amp
- noise
-
-
- seed
- 42
-
-
- _coordinate
- (235, 379)
-
-
- _rotation
- 0
-
-
-
- gr_chunks_to_symbols_xx
-
- id
- gr_chunks_to_symbols_xx
-
-
- _enabled
- True
-
-
- in_type
- byte
-
-
- out_type
- complex
-
-
- symbol_table
- const
-
-
- dimension
- 1
-
-
- _coordinate
- (360, 237)
-
-
- _rotation
- 0
-
-
-
- wxgui_numbersink2
-
- id
- wxgui_numbersink2
-
-
- _enabled
- True
-
-
- type
- float
-
-
- title
- BER
-
-
- units
- %
-
-
- samp_rate
- samp_rate
-
-
- base_value
- 0.0
-
-
- min_value
- 0.0
-
-
- max_value
- 1.0
-
-
- factor
- 100
-
-
- decimal_places
- 4
-
-
- ref_level
- 0
-
-
- number_rate
- 15
-
-
- peak_hold
- False
-
-
- average
- False
-
-
- avg_alpha
- 0
-
-
- show_gauge
- False
-
-
- grid_pos
- 1, 0, 1, 1
-
-
- _coordinate
- (1062, 11)
-
-
- _rotation
- 0
-
-
-
- gr_throttle
-
- id
- gr_throttle
-
-
- _enabled
- True
-
-
- type
- byte
-
-
- samples_per_second
- samp_rate
-
-
- vlen
- 1
-
-
- _coordinate
- (397, 27)
-
-
- _rotation
- 0
-
-
-
- blks2_error_rate
-
- id
- blks2_error_rate
-
-
- _enabled
- True
-
-
- type
- 'BER'
-
-
- win_size
- 1000000
-
-
- bits_per_symbol
- int(math.log(len(const))/math.log(2))
-
-
- _coordinate
- (670, 41)
-
-
- _rotation
- 0
-
-
-
- gr_constellation_decoder_cb
-
- id
- gr_constellation_decoder_cb
-
-
- _enabled
- True
-
-
- sym_position
- const
-
-
- sym_value_out
- range(len(const))
-
-
- _coordinate
- (708, 224)
-
-
- _rotation
- 0
-
-
-
- random_source_x
-
- id
- random_source_x
-
-
- _enabled
- True
-
-
- type
- byte
-
-
- min
- 0
-
-
- max
- len(const)
-
-
- num_samps
- 1000000
-
-
- repeat
- False
-
-
- _coordinate
- (15, 244)
-
-
- _rotation
- 0
-
-
-
- variable
-
- id
- noise
-
-
- _enabled
- True
-
-
- value
- .25
-
-
- _coordinate
- (18, 386)
-
-
- _rotation
- 0
-
-
-
- variable
-
- id
- const
-
-
- _enabled
- True
-
-
- value
- 1+1j, 1-1j, -1-1j, -1+1j
-
-
- _coordinate
- (16, 461)
-
-
- _rotation
- 0
-
-
-
- variable
-
- id
- samp_rate
-
-
- _enabled
- True
-
-
- value
- 50e3
-
-
- _coordinate
- (20, 168)
-
-
- _rotation
- 0
-
-
-
- import
-
- id
- import
-
-
- _enabled
- True
-
-
- import
- import math
-
-
- _coordinate
- (138, 168)
-
-
- _rotation
- 0
-
-
-
- gr_add_xx
-
- id
- gr_add_xx
-
-
- _enabled
- True
-
-
- type
- complex
-
-
- num_inputs
- 2
-
-
- vlen
- 1
-
-
- _coordinate
- (652, 395)
-
-
- _rotation
- 0
-
-
-
- wxgui_scopesink2
-
- id
- wxgui_scopesink2_0
-
-
- _enabled
- True
-
-
- type
- complex
-
-
- title
- "Constellation: "+str(const)
-
-
- samp_rate
- samp_rate
-
-
- v_scale
- 0
-
-
- t_scale
- 0
-
-
- ac_couple
- False
-
-
- xy_mode
- True
-
-
- num_inputs
- 1
-
-
- grid_pos
- 2, 0, 1, 1
-
-
- _coordinate
- (828, 368)
-
-
- _rotation
- 0
-
-
-
- blks2_error_rate
- wxgui_numbersink2
- 0
- 0
-
-
- gr_throttle
- blks2_error_rate
- 0
- 0
-
-
- gr_constellation_decoder_cb
- blks2_error_rate
- 0
- 1
-
-
- gr_add_xx
- gr_constellation_decoder_cb
- 0
- 0
-
-
- gr_chunks_to_symbols_xx
- gr_add_xx
- 0
- 0
-
-
- gr_noise_source_x
- gr_add_xx
- 0
- 1
-
-
- random_source_x
- gr_throttle
- 0
- 0
-
-
- random_source_x
- gr_chunks_to_symbols_xx
- 0
- 0
-
-
- gr_add_xx
- wxgui_scopesink2_0
- 0
- 0
-
-
diff --git a/gnuradio-examples/grc/simple/dpsk_loopback.grc b/gnuradio-examples/grc/simple/dpsk_loopback.grc
deleted file mode 100644
index 6a507c98d..000000000
--- a/gnuradio-examples/grc/simple/dpsk_loopback.grc
+++ /dev/null
@@ -1,450 +0,0 @@
-
-
- Tue Mar 17 12:53:37 2009
-
- options
-
- id
- dpsk_loopback
-
-
- _enabled
- True
-
-
- title
- DPSK Loopback
-
-
- author
- Example
-
-
- description
- gnuradio flow graph
-
-
- window_size
- 1280, 1024
-
-
- generate_options
- wx_gui
-
-
- category
- Custom
-
-
- realtime_scheduling
-
-
-
- _coordinate
- (10, 10)
-
-
- _rotation
- 0
-
-
-
- blks2_dxpsk_mod
-
- id
- blks2_dxpsk_mod_0
-
-
- _enabled
- True
-
-
- type
- dbpsk
-
-
- samples_per_symbol
- 2
-
-
- excess_bw
- 0.35
-
-
- gray_code
- True
-
-
- _coordinate
- (426, 295)
-
-
- _rotation
- 0
-
-
-
- variable
-
- id
- samp_rate
-
-
- _enabled
- True
-
-
- value
- 10000
-
-
- _coordinate
- (10, 170)
-
-
- _rotation
- 0
-
-
-
- variable_slider
-
- id
- freq
-
-
- _enabled
- True
-
-
- label
- Frequency (Hz)
-
-
- value
- 500
-
-
- min
- 0
-
-
- max
- samp_rate/2
-
-
- num_steps
- 100
-
-
- slider_length
- 200
-
-
- slider_type
- horizontal
-
-
- grid_pos
-
-
-
- _coordinate
- (12, 257)
-
-
- _rotation
- 0
-
-
-
- blks2_packet_encoder
-
- id
- blks2_packet_encoder_0
-
-
- _enabled
- True
-
-
- type
- float
-
-
- samples_per_symbol
- 2
-
-
- bits_per_symbol
- 1
-
-
- access_code
-
-
-
- pad_for_usrp
- True
-
-
- payload_length
- 0
-
-
- _coordinate
- (216, 260)
-
-
- _rotation
- 0
-
-
-
- gr_throttle
-
- id
- gr_throttle_0_0
-
-
- _enabled
- True
-
-
- type
- float
-
-
- samples_per_second
- samp_rate
-
-
- vlen
- 1
-
-
- _coordinate
- (225, 174)
-
-
- _rotation
- 0
-
-
-
- gr_sig_source_x
-
- id
- gr_sig_source_x_0
-
-
- _enabled
- True
-
-
- type
- float
-
-
- samp_rate
- samp_rate
-
-
- waveform
- gr.GR_COS_WAVE
-
-
- freq
- freq
-
-
- amp
- 1
-
-
- offset
- 0
-
-
- _coordinate
- (203, 8)
-
-
- _rotation
- 0
-
-
-
- blks2_packet_decoder
-
- id
- blks2_packet_decoder_0
-
-
- _enabled
- True
-
-
- type
- float
-
-
- access_code
-
-
-
- threshold
- -1
-
-
- _coordinate
- (551, 65)
-
-
- _rotation
- 0
-
-
-
- wxgui_scopesink2
-
- id
- wxgui_scopesink2_0
-
-
- _enabled
- True
-
-
- type
- float
-
-
- title
- Scope Plot
-
-
- samp_rate
- samp_rate
-
-
- frame_decim
- 15
-
-
- v_scale
- 0
-
-
- t_scale
- 1./freq
-
-
- marker
- set_format_line
-
-
- num_inputs
- 1
-
-
- grid_pos
-
-
-
- _coordinate
- (769, 12)
-
-
- _rotation
- 0
-
-
-
- blks2_dxpsk_demod
-
- id
- blks2_dxpsk_demod_0
-
-
- _enabled
- True
-
-
- type
- dbpsk
-
-
- samples_per_symbol
- 2
-
-
- excess_bw
- 0.35
-
-
- costas_alpha
- 0.175
-
-
- gain_mu
- 0.175
-
-
- mu
- 0.5
-
-
- omega_relative_limit
- 0.005
-
-
- gray_code
- True
-
-
- _coordinate
- (691, 219)
-
-
- _rotation
- 0
-
-
-
- blks2_dxpsk_mod_0
- blks2_dxpsk_demod_0
- 0
- 0
-
-
- blks2_dxpsk_demod_0
- blks2_packet_decoder_0
- 0
- 0
-
-
- blks2_packet_encoder_0
- blks2_dxpsk_mod_0
- 0
- 0
-
-
- gr_sig_source_x_0
- gr_throttle_0_0
- 0
- 0
-
-
- gr_throttle_0_0
- blks2_packet_encoder_0
- 0
- 0
-
-
- blks2_packet_decoder_0
- wxgui_scopesink2_0
- 0
- 0
-
-
diff --git a/gnuradio-examples/grc/simple/variable_config.grc b/gnuradio-examples/grc/simple/variable_config.grc
deleted file mode 100644
index 95c287cce..000000000
--- a/gnuradio-examples/grc/simple/variable_config.grc
+++ /dev/null
@@ -1,329 +0,0 @@
-
-
- Thu Jun 25 10:56:04 2009
-
- options
-
- id
- variable_config_demo
-
-
- _enabled
- True
-
-
- title
- Variable Config Block Demonstration
-
-
- author
- Example
-
-
- description
- Save/Load freq from a config file.
-
-
- window_size
- 1280, 1024
-
-
- generate_options
- wx_gui
-
-
- category
- Custom
-
-
- autostart
- True
-
-
- realtime_scheduling
-
-
-
- _coordinate
- (10, 10)
-
-
- _rotation
- 0
-
-
-
- variable
-
- id
- samp_rate
-
-
- _enabled
- True
-
-
- value
- 32000
-
-
- _coordinate
- (10, 170)
-
-
- _rotation
- 0
-
-
-
- variable_config
-
- id
- freq_init
-
-
- _enabled
- True
-
-
- value
- 1000
-
-
- type
- real
-
-
- config_file
- config.conf
-
-
- section
- main
-
-
- option
- freq
-
-
- writeback
- freq
-
-
- _coordinate
- (255, 17)
-
-
- _rotation
- 0
-
-
-
- variable_slider
-
- id
- freq
-
-
- _enabled
- True
-
-
- label
- Frequency (Hz)
-
-
- value
- freq_init
-
-
- min
- -samp_rate/2
-
-
- max
- samp_rate/2
-
-
- num_steps
- 100
-
-
- style
- wx.SL_HORIZONTAL
-
-
- converver
- float_converter
-
-
- grid_pos
-
-
-
- _coordinate
- (429, 24)
-
-
- _rotation
- 0
-
-
-
- gr_throttle
-
- id
- gr_throttle_0
-
-
- _enabled
- True
-
-
- type
- complex
-
-
- samples_per_second
- samp_rate
-
-
- vlen
- 1
-
-
- _coordinate
- (392, 233)
-
-
- _rotation
- 0
-
-
-
- gr_sig_source_x
-
- id
- gr_sig_source_x_0
-
-
- _enabled
- True
-
-
- type
- complex
-
-
- samp_rate
- samp_rate
-
-
- waveform
- gr.GR_COS_WAVE
-
-
- freq
- freq
-
-
- amp
- 1
-
-
- offset
- 0
-
-
- _coordinate
- (148, 233)
-
-
- _rotation
- 0
-
-
-
- wxgui_fftsink2
-
- id
- wxgui_fftsink2_0
-
-
- _enabled
- True
-
-
- type
- complex
-
-
- title
- FFT Plot
-
-
- samp_rate
- samp_rate
-
-
- baseband_freq
- 0
-
-
- y_per_div
- 10
-
-
- y_divs
- 10
-
-
- ref_level
- 50
-
-
- fft_size
- 1024
-
-
- fft_rate
- 30
-
-
- peak_hold
- False
-
-
- average
- False
-
-
- avg_alpha
- 0
-
-
- grid_pos
-
-
-
- _coordinate
- (671, 233)
-
-
- _rotation
- 0
-
-
-
- gr_sig_source_x_0
- gr_throttle_0
- 0
- 0
-
-
- gr_throttle_0
- wxgui_fftsink2_0
- 0
- 0
-
-
diff --git a/gnuradio-examples/grc/xmlrpc/readme.txt b/gnuradio-examples/grc/xmlrpc/readme.txt
deleted file mode 100644
index c1f87c1cb..000000000
--- a/gnuradio-examples/grc/xmlrpc/readme.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-##################################################
-# XMLRPC example
-##################################################
-
-XMLRPC allows software to make remote function calls over http.
-In the case of GRC, one can use XMLRPC to modify variables in a running flow graph.
-See http://www.xmlrpc.com/
-
---- Server Example ---
-Place an "XMLRPC Server" block inside of any flow graph.
-The server will provide set functions for every variable in the flow graph.
-If a variable is called "freq", the server will provide a function set_freq(new_freq).
-Run the server example and experiment with the example client script.
-
--- Client Example --
-The "XMLRPC Client" block will give a variable control over one remove function.
-In the example client, there is one client block and gui control per variable.
-This technique can be used to remotely control a flow graph, perhaps running on a non-gui machine.
diff --git a/gnuradio-examples/grc/xmlrpc/xmlrpc_client.grc b/gnuradio-examples/grc/xmlrpc/xmlrpc_client.grc
deleted file mode 100644
index 3bb4e7ed3..000000000
--- a/gnuradio-examples/grc/xmlrpc/xmlrpc_client.grc
+++ /dev/null
@@ -1,312 +0,0 @@
-
-
- Thu Jul 24 14:27:44 2008
-
- options
-
- id
- client_block
-
-
- _enabled
- True
-
-
- title
- XMLRPC Client
-
-
- author
- Example
-
-
- description
- example flow graph
-
-
- window_size
- 1280, 1024
-
-
- generate_options
- wx_gui
-
-
- category
- Custom
-
-
- _coordinate
- (10, 10)
-
-
- _rotation
- 0
-
-
-
- xmlrpc_client
-
- id
- xmlrpc_client0
-
-
- _enabled
- True
-
-
- addr
- localhost
-
-
- port
- 1234
-
-
- callback
- set_ampl
-
-
- variable
- ampl
-
-
- _coordinate
- (409, 35)
-
-
- _rotation
- 0
-
-
-
- xmlrpc_client
-
- id
- xmlrpc_client
-
-
- _enabled
- True
-
-
- addr
- localhost
-
-
- port
- 1234
-
-
- callback
- set_freq
-
-
- variable
- freq
-
-
- _coordinate
- (222, 34)
-
-
- _rotation
- 0
-
-
-
- variable_slider
-
- id
- freq
-
-
- _enabled
- True
-
-
- label
- Frequency (Hz)
-
-
- value
- 1000
-
-
- min
- 0
-
-
- max
- 5000
-
-
- num_steps
- 100
-
-
- slider_type
- horizontal
-
-
- grid_pos
- 0, 0, 1, 2
-
-
- _coordinate
- (207, 162)
-
-
- _rotation
- 0
-
-
-
- variable_slider
-
- id
- ampl
-
-
- _enabled
- True
-
-
- label
- Amplitude
-
-
- value
- 1
-
-
- min
- 0
-
-
- max
- 2
-
-
- num_steps
- 100
-
-
- slider_type
- horizontal
-
-
- grid_pos
- 1, 0, 1, 2
-
-
- _coordinate
- (397, 167)
-
-
- _rotation
- 0
-
-
-
- variable_chooser
-
- id
- offset
-
-
- _enabled
- True
-
-
- label
- Offset
-
-
- value_index
- 1
-
-
- choices
- [-1, 0, 1]
-
-
- labels
- ["neg", "zero", "pos"]
-
-
- chooser_type
- radio_buttons_horizontal
-
-
- grid_pos
- 2, 0, 1, 2
-
-
- _coordinate
- (596, 177)
-
-
- _rotation
- 0
-
-
-
- xmlrpc_client
-
- id
- xmlrpc_client1
-
-
- _enabled
- True
-
-
- addr
- localhost
-
-
- port
- 1234
-
-
- callback
- set_offset
-
-
- variable
- offset*ampl
-
-
- _coordinate
- (608, 39)
-
-
- _rotation
- 0
-
-
-
- variable
-
- id
- samp_rate
-
-
- _enabled
- True
-
-
- value
- 32000
-
-
- _coordinate
- (13, 172)
-
-
- _rotation
- 0
-
-
-
\ No newline at end of file
diff --git a/gnuradio-examples/grc/xmlrpc/xmlrpc_client_script.py b/gnuradio-examples/grc/xmlrpc/xmlrpc_client_script.py
deleted file mode 100644
index 956fa07fb..000000000
--- a/gnuradio-examples/grc/xmlrpc/xmlrpc_client_script.py
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/usr/bin/env python
-
-import time
-import random
-import xmlrpclib
-
-#create server object
-s = xmlrpclib.Server("http://localhost:1234")
-
-#randomly change parameters of the sinusoid
-for i in range(10):
- #generate random values
- new_freq = random.uniform(0, 5000)
- new_ampl = random.uniform(0, 2)
- new_offset = random.uniform(-1, 1)
- #set new values
- time.sleep(1)
- s.set_freq(new_freq)
- time.sleep(1)
- s.set_ampl(new_ampl)
- time.sleep(1)
- s.set_offset(new_offset)
-
diff --git a/gnuradio-examples/grc/xmlrpc/xmlrpc_server.grc b/gnuradio-examples/grc/xmlrpc/xmlrpc_server.grc
deleted file mode 100644
index dc539ef1b..000000000
--- a/gnuradio-examples/grc/xmlrpc/xmlrpc_server.grc
+++ /dev/null
@@ -1,384 +0,0 @@
-
-
- Thu Jul 24 14:27:42 2008
-
- options
-
- id
- server_block
-
-
- _enabled
- True
-
-
- title
- XMLRPC Server
-
-
- author
- Example
-
-
- description
- example flow graph
-
-
- window_size
- 1280, 1024
-
-
- generate_options
- wx_gui
-
-
- category
- Custom
-
-
- _coordinate
- (10, 10)
-
-
- _rotation
- 0
-
-
-
- gr_sig_source_x
-
- id
- gr_sig_source_x
-
-
- _enabled
- True
-
-
- type
- float
-
-
- samp_rate
- samp_rate
-
-
- waveform
- gr.GR_COS_WAVE
-
-
- freq
- freq
-
-
- amp
- ampl
-
-
- offset
- offset
-
-
- _coordinate
- (162, 200)
-
-
- _rotation
- 0
-
-
-
- variable
-
- id
- offset
-
-
- _enabled
- True
-
-
- value
- 0
-
-
- _coordinate
- (12, 390)
-
-
- _rotation
- 0
-
-
-
- xmlrpc_server
-
- id
- xmlrpc_server
-
-
- _enabled
- True
-
-
- addr
- localhost
-
-
- port
- 1234
-
-
- _coordinate
- (395, 240)
-
-
- _rotation
- 0
-
-
-
- gr_throttle
-
- id
- gr_throttle
-
-
- _enabled
- True
-
-
- type
- float
-
-
- samples_per_second
- samp_rate
-
-
- vlen
- 1
-
-
- _coordinate
- (386, 93)
-
-
- _rotation
- 0
-
-
-
- wxgui_scopesink2
-
- id
- wxgui_scopesink2
-
-
- _enabled
- True
-
-
- type
- float
-
-
- title
- Scope Plot
-
-
- samp_rate
- samp_rate
-
-
- frame_decim
- 15
-
-
- v_scale
- 0
-
-
- t_scale
- .001
-
-
- marker
- set_format_line
-
-
- num_inputs
- 1
-
-
- grid_pos
- 0, 0, 2, 4
-
-
- _coordinate
- (623, 28)
-
-
- _rotation
- 0
-
-
-
- wxgui_fftsink2
-
- id
- wxgui_fftsink2
-
-
- _enabled
- True
-
-
- type
- float
-
-
- title
- FFT Plot
-
-
- samp_rate
- samp_rate
-
-
- baseband_freq
- 0
-
-
- y_per_div
- 10
-
-
- y_divs
- 8
-
-
- ref_level
- 50
-
-
- fft_size
- 512
-
-
- fft_rate
- 15
-
-
- avg_alpha
- 0
-
-
- average
- False
-
-
- peak_hold
- False
-
-
- grid_pos
- 2, 0, 2, 4
-
-
- _coordinate
- (630, 233)
-
-
- _rotation
- 0
-
-
-
- variable
-
- id
- samp_rate
-
-
- _enabled
- True
-
-
- value
- 32000
-
-
- _coordinate
- (11, 160)
-
-
- _rotation
- 0
-
-
-
- variable
-
- id
- freq
-
-
- _enabled
- True
-
-
- value
- 1000
-
-
- _coordinate
- (11, 237)
-
-
- _rotation
- 0
-
-
-
- variable
-
- id
- ampl
-
-
- _enabled
- True
-
-
- value
- 1
-
-
- _coordinate
- (13, 315)
-
-
- _rotation
- 0
-
-
-
- gr_sig_source_x
- gr_throttle
- 0
- 0
-
-
- gr_throttle
- wxgui_scopesink2
- 0
- 0
-
-
- gr_throttle
- wxgui_fftsink2
- 0
- 0
-
-
\ No newline at end of file
diff --git a/gnuradio-examples/python/CMakeLists.txt b/gnuradio-examples/python/CMakeLists.txt
deleted file mode 100644
index 39b1fe806..000000000
--- a/gnuradio-examples/python/CMakeLists.txt
+++ /dev/null
@@ -1,23 +0,0 @@
-# Copyright 2011 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-
-add_subdirectory(mp-sched)
-add_subdirectory(network)
-add_subdirectory(pfb)
-add_subdirectory(tags)
\ No newline at end of file
diff --git a/gnuradio-examples/python/mp-sched/CMakeLists.txt b/gnuradio-examples/python/mp-sched/CMakeLists.txt
deleted file mode 100644
index 5accd8c4a..000000000
--- a/gnuradio-examples/python/mp-sched/CMakeLists.txt
+++ /dev/null
@@ -1,35 +0,0 @@
-# Copyright 2011 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-
-include(GrPython)
-
-GR_PYTHON_INSTALL(PROGRAMS
- plot_flops.py
- run_synthetic.py
- synthetic.py
- wfm_rcv_pll_to_wav.py
- DESTINATION ${GR_PKG_DATA_DIR}/examples/mp-sched
- COMPONENT "gnuradio_examples"
-)
-
-install(
- FILES README
- DESTINATION ${GR_PKG_DATA_DIR}/examples/mp-sched
- COMPONENT "gnuadio_examples"
-)
diff --git a/gnuradio-examples/python/mp-sched/README b/gnuradio-examples/python/mp-sched/README
deleted file mode 100644
index ae575437a..000000000
--- a/gnuradio-examples/python/mp-sched/README
+++ /dev/null
@@ -1,2 +0,0 @@
-These are pieces of code used to test and benchmark the
-multi-processor scheduler.
diff --git a/gnuradio-examples/python/mp-sched/perf-data/core-duo.dat b/gnuradio-examples/python/mp-sched/perf-data/core-duo.dat
deleted file mode 100644
index 064d1e128..000000000
--- a/gnuradio-examples/python/mp-sched/perf-data/core-duo.dat
+++ /dev/null
@@ -1,65 +0,0 @@
-#D Core Duo 1.83 GHz (T2400)
- 1 1 5.273e+07 10.010 10.160 0.060 1.021 2.700000e+10 2.697e+09
- 1 2 5.273e+07 10.410 20.180 0.150 1.953 5.400000e+10 5.187e+09
- 1 3 3.516e+07 10.360 20.030 0.150 1.948 5.400000e+10 5.212e+09
- 1 4 2.637e+07 10.100 20.030 0.100 1.993 5.400000e+10 5.347e+09
- 1 5 2.109e+07 10.140 19.980 0.110 1.981 5.400000e+10 5.325e+09
- 1 6 1.758e+07 10.110 20.030 0.110 1.992 5.400000e+10 5.341e+09
- 1 7 1.507e+07 10.120 20.030 0.110 1.990 5.400000e+10 5.336e+09
- 1 8 1.318e+07 10.060 19.980 0.090 1.995 5.400000e+10 5.368e+09
- 2 1 5.273e+07 10.210 20.130 0.260 1.997 5.400000e+10 5.289e+09
- 2 2 2.637e+07 10.110 20.030 0.140 1.995 5.400000e+10 5.341e+09
- 2 3 1.758e+07 10.120 20.010 0.150 1.992 5.400000e+10 5.336e+09
- 2 4 1.318e+07 10.080 19.990 0.110 1.994 5.400000e+10 5.357e+09
- 2 5 1.055e+07 10.050 19.990 0.090 1.998 5.400000e+10 5.373e+09
- 2 6 8.789e+06 10.050 19.980 0.080 1.996 5.400000e+10 5.373e+09
- 2 7 7.533e+06 10.050 19.970 0.090 1.996 5.400000e+10 5.373e+09
- 2 8 6.592e+06 10.040 19.970 0.090 1.998 5.399999e+10 5.378e+09
- 3 1 3.516e+07 10.630 20.130 0.230 1.915 5.400000e+10 5.080e+09
- 3 2 1.758e+07 10.120 20.020 0.170 1.995 5.400000e+10 5.336e+09
- 3 3 1.172e+07 10.140 20.050 0.130 1.990 5.400000e+10 5.325e+09
- 3 4 8.789e+06 10.070 20.010 0.100 1.997 5.400000e+10 5.362e+09
- 3 5 7.031e+06 10.060 19.980 0.100 1.996 5.400000e+10 5.368e+09
- 3 6 5.859e+06 10.060 20.000 0.100 1.998 5.400000e+10 5.368e+09
- 3 7 5.022e+06 10.050 20.010 0.070 1.998 5.400000e+10 5.373e+09
- 3 8 4.395e+06 10.050 19.990 0.070 1.996 5.400000e+10 5.373e+09
- 4 1 2.637e+07 10.180 20.080 0.240 1.996 5.400000e+10 5.305e+09
- 4 2 1.318e+07 10.140 20.000 0.180 1.990 5.400000e+10 5.325e+09
- 4 3 8.789e+06 10.110 20.020 0.120 1.992 5.400000e+10 5.341e+09
- 4 4 6.592e+06 10.080 20.020 0.090 1.995 5.399999e+10 5.357e+09
- 4 5 5.273e+06 10.050 19.990 0.090 1.998 5.399999e+10 5.373e+09
- 4 6 4.395e+06 10.080 20.010 0.080 1.993 5.400000e+10 5.357e+09
- 4 7 3.767e+06 10.070 20.000 0.080 1.994 5.400000e+10 5.362e+09
- 4 8 3.296e+06 10.050 20.000 0.080 1.998 5.399999e+10 5.373e+09
- 5 1 2.109e+07 11.240 20.080 0.260 1.810 5.400000e+10 4.804e+09
- 5 2 1.055e+07 10.130 19.990 0.150 1.988 5.400000e+10 5.331e+09
- 5 3 7.031e+06 10.100 20.020 0.120 1.994 5.400000e+10 5.347e+09
- 5 4 5.273e+06 10.070 20.000 0.090 1.995 5.399999e+10 5.362e+09
- 5 5 4.219e+06 10.100 20.040 0.090 1.993 5.400000e+10 5.347e+09
- 5 6 3.516e+06 10.080 20.000 0.090 1.993 5.400000e+10 5.357e+09
- 5 7 3.013e+06 10.070 20.000 0.100 1.996 5.399998e+10 5.362e+09
- 5 8 2.637e+06 10.070 20.000 0.090 1.995 5.399998e+10 5.362e+09
- 6 1 1.758e+07 10.220 20.100 0.290 1.995 5.400000e+10 5.284e+09
- 6 2 8.789e+06 10.080 20.010 0.130 1.998 5.400000e+10 5.357e+09
- 6 3 5.859e+06 10.090 20.030 0.120 1.997 5.400000e+10 5.352e+09
- 6 4 4.395e+06 10.100 20.030 0.080 1.991 5.400000e+10 5.347e+09
- 6 5 3.516e+06 10.060 20.020 0.080 1.998 5.400000e+10 5.368e+09
- 6 6 2.930e+06 10.070 20.030 0.090 1.998 5.399999e+10 5.362e+09
- 6 7 2.511e+06 10.070 20.030 0.080 1.997 5.399998e+10 5.362e+09
- 6 8 2.197e+06 10.070 20.010 0.090 1.996 5.399998e+10 5.362e+09
- 7 1 1.507e+07 10.420 20.030 0.260 1.947 5.400000e+10 5.182e+09
- 7 2 7.533e+06 10.100 20.010 0.140 1.995 5.400000e+10 5.347e+09
- 7 3 5.022e+06 10.080 20.020 0.120 1.998 5.400000e+10 5.357e+09
- 7 4 3.767e+06 10.080 20.010 0.100 1.995 5.400000e+10 5.357e+09
- 7 5 3.013e+06 10.070 20.030 0.080 1.997 5.399998e+10 5.362e+09
- 7 6 2.511e+06 10.080 20.010 0.090 1.994 5.399998e+10 5.357e+09
- 7 7 2.152e+06 10.080 20.060 0.070 1.997 5.399999e+10 5.357e+09
- 7 8 1.883e+06 10.070 20.040 0.070 1.997 5.399998e+10 5.362e+09
- 8 1 1.318e+07 10.220 20.080 0.270 1.991 5.400000e+10 5.284e+09
- 8 2 6.592e+06 10.100 20.010 0.140 1.995 5.399999e+10 5.347e+09
- 8 3 4.395e+06 10.110 20.020 0.120 1.992 5.400000e+10 5.341e+09
- 8 4 3.296e+06 10.090 20.040 0.090 1.995 5.399999e+10 5.352e+09
- 8 5 2.637e+06 10.090 20.040 0.090 1.995 5.399998e+10 5.352e+09
- 8 6 2.197e+06 10.070 20.040 0.100 2.000 5.399998e+10 5.362e+09
- 8 7 1.883e+06 10.090 20.050 0.080 1.995 5.399998e+10 5.352e+09
- 8 8 1.648e+06 10.090 20.040 0.090 1.995 5.399999e+10 5.352e+09
diff --git a/gnuradio-examples/python/mp-sched/perf-data/core2-duo.dat b/gnuradio-examples/python/mp-sched/perf-data/core2-duo.dat
deleted file mode 100644
index d67dee8e5..000000000
--- a/gnuradio-examples/python/mp-sched/perf-data/core2-duo.dat
+++ /dev/null
@@ -1,65 +0,0 @@
-#D Core2 Duo 2.66 GHz (6700)
- 1 1 1.406e+08 9.890 10.100 0.230 1.044 7.200000e+10 7.280e+09
- 1 2 1.406e+08 10.400 19.900 0.290 1.941 1.440000e+11 1.385e+10
- 1 3 9.375e+07 11.410 19.950 0.200 1.766 1.440000e+11 1.262e+10
- 1 4 7.031e+07 10.230 19.800 0.230 1.958 1.440000e+11 1.408e+10
- 1 5 5.625e+07 10.640 19.800 0.180 1.878 1.440000e+11 1.353e+10
- 1 6 4.688e+07 10.000 19.780 0.130 1.991 1.440000e+11 1.440e+10
- 1 7 4.018e+07 10.500 19.690 0.180 1.892 1.440000e+11 1.371e+10
- 1 8 3.516e+07 10.020 19.750 0.170 1.988 1.440000e+11 1.437e+10
- 2 1 1.406e+08 10.330 20.000 0.460 1.981 1.440000e+11 1.394e+10
- 2 2 7.031e+07 10.160 19.870 0.270 1.982 1.440000e+11 1.417e+10
- 2 3 4.688e+07 10.210 19.780 0.230 1.960 1.440000e+11 1.410e+10
- 2 4 3.516e+07 10.050 19.730 0.210 1.984 1.440000e+11 1.433e+10
- 2 5 2.812e+07 10.060 19.760 0.170 1.981 1.440000e+11 1.431e+10
- 2 6 2.344e+07 10.030 19.780 0.180 1.990 1.440000e+11 1.436e+10
- 2 7 2.009e+07 10.040 19.820 0.180 1.992 1.440000e+11 1.434e+10
- 2 8 1.758e+07 10.050 19.820 0.180 1.990 1.440000e+11 1.433e+10
- 3 1 9.375e+07 13.140 19.950 0.450 1.553 1.440000e+11 1.096e+10
- 3 2 4.688e+07 10.570 19.840 0.290 1.904 1.440000e+11 1.362e+10
- 3 3 3.125e+07 10.420 19.730 0.280 1.920 1.440000e+11 1.382e+10
- 3 4 2.344e+07 10.120 19.710 0.240 1.971 1.440000e+11 1.423e+10
- 3 5 1.875e+07 10.140 19.750 0.190 1.966 1.440000e+11 1.420e+10
- 3 6 1.562e+07 10.030 19.730 0.190 1.986 1.440000e+11 1.436e+10
- 3 7 1.339e+07 10.020 19.720 0.200 1.988 1.440000e+11 1.437e+10
- 3 8 1.172e+07 9.990 19.720 0.170 1.991 1.440000e+11 1.441e+10
- 4 1 7.031e+07 10.310 19.980 0.460 1.983 1.440000e+11 1.397e+10
- 4 2 3.516e+07 10.300 19.830 0.320 1.956 1.440000e+11 1.398e+10
- 4 3 2.344e+07 10.180 19.780 0.230 1.966 1.440000e+11 1.415e+10
- 4 4 1.758e+07 10.070 19.750 0.220 1.983 1.440000e+11 1.430e+10
- 4 5 1.406e+07 10.090 19.750 0.190 1.976 1.440000e+11 1.427e+10
- 4 6 1.172e+07 10.020 19.720 0.190 1.987 1.440000e+11 1.437e+10
- 4 7 1.004e+07 10.040 19.780 0.190 1.989 1.440000e+11 1.434e+10
- 4 8 8.789e+06 10.000 19.750 0.160 1.991 1.440000e+11 1.440e+10
- 5 1 5.625e+07 11.580 19.930 0.500 1.764 1.440000e+11 1.244e+10
- 5 2 2.812e+07 10.300 19.830 0.320 1.956 1.440000e+11 1.398e+10
- 5 3 1.875e+07 10.240 19.760 0.240 1.953 1.440000e+11 1.406e+10
- 5 4 1.406e+07 10.140 19.880 0.230 1.983 1.440000e+11 1.420e+10
- 5 5 1.125e+07 10.040 19.730 0.200 1.985 1.440000e+11 1.434e+10
- 5 6 9.375e+06 10.030 19.770 0.200 1.991 1.440000e+11 1.436e+10
- 5 7 8.036e+06 10.030 19.780 0.170 1.989 1.440000e+11 1.436e+10
- 5 8 7.031e+06 10.000 19.750 0.180 1.993 1.440000e+11 1.440e+10
- 6 1 4.688e+07 10.340 19.910 0.560 1.980 1.440000e+11 1.393e+10
- 6 2 2.344e+07 10.290 19.770 0.330 1.953 1.440000e+11 1.399e+10
- 6 3 1.562e+07 10.150 19.770 0.270 1.974 1.440000e+11 1.419e+10
- 6 4 1.172e+07 10.170 19.880 0.240 1.978 1.440000e+11 1.416e+10
- 6 5 9.375e+06 10.080 19.780 0.240 1.986 1.440000e+11 1.429e+10
- 6 6 7.812e+06 10.020 19.740 0.220 1.992 1.440000e+11 1.437e+10
- 6 7 6.696e+06 10.050 19.760 0.200 1.986 1.440000e+11 1.433e+10
- 6 8 5.859e+06 10.070 19.750 0.210 1.982 1.440000e+11 1.430e+10
- 7 1 4.018e+07 11.220 19.880 0.530 1.819 1.440000e+11 1.283e+10
- 7 2 2.009e+07 10.280 19.790 0.340 1.958 1.440000e+11 1.401e+10
- 7 3 1.339e+07 10.190 19.760 0.250 1.964 1.440000e+11 1.413e+10
- 7 4 1.004e+07 10.060 19.750 0.240 1.987 1.440000e+11 1.431e+10
- 7 5 8.036e+06 10.070 19.750 0.240 1.985 1.440000e+11 1.430e+10
- 7 6 6.696e+06 10.040 19.810 0.220 1.995 1.440000e+11 1.434e+10
- 7 7 5.740e+06 10.050 19.780 0.210 1.989 1.440000e+11 1.433e+10
- 7 8 5.022e+06 10.010 19.790 0.190 1.996 1.440000e+11 1.439e+10
- 8 1 3.516e+07 10.320 19.900 0.470 1.974 1.440000e+11 1.395e+10
- 8 2 1.758e+07 10.340 19.900 0.320 1.956 1.440000e+11 1.393e+10
- 8 3 1.172e+07 10.130 19.770 0.290 1.980 1.440000e+11 1.422e+10
- 8 4 8.789e+06 10.120 19.780 0.230 1.977 1.440000e+11 1.423e+10
- 8 5 7.031e+06 10.040 19.790 0.200 1.991 1.440000e+11 1.434e+10
- 8 6 5.859e+06 10.050 19.770 0.220 1.989 1.440000e+11 1.433e+10
- 8 7 5.022e+06 10.030 19.800 0.200 1.994 1.440000e+11 1.436e+10
- 8 8 4.395e+06 10.050 19.800 0.210 1.991 1.440000e+11 1.433e+10
diff --git a/gnuradio-examples/python/mp-sched/perf-data/dual-quad-core-2.33-clovertown.dat b/gnuradio-examples/python/mp-sched/perf-data/dual-quad-core-2.33-clovertown.dat
deleted file mode 100644
index fa182c69a..000000000
--- a/gnuradio-examples/python/mp-sched/perf-data/dual-quad-core-2.33-clovertown.dat
+++ /dev/null
@@ -1,257 +0,0 @@
-#D Dual quad-core Xeon 2.33GHz (Clovertown E5345)
- 1 1 1.367e+08 10.980 12.080 0.360 1.133 7.000000e+10 6.375e+09
- 1 2 1.367e+08 12.250 24.310 0.400 2.017 1.400000e+11 1.143e+10
- 1 3 1.367e+08 12.830 36.080 0.580 2.857 2.100000e+11 1.637e+10
- 1 4 1.367e+08 12.600 46.820 0.770 3.777 2.800000e+11 2.222e+10
- 1 5 1.367e+08 12.620 58.850 0.720 4.720 3.500000e+11 2.773e+10
- 1 6 1.367e+08 12.310 69.430 0.860 5.710 4.200000e+11 3.412e+10
- 1 7 1.367e+08 12.720 80.580 0.950 6.410 4.900000e+11 3.852e+10
- 1 8 1.367e+08 12.440 91.530 1.010 7.439 5.600000e+11 4.502e+10
- 1 9 1.367e+08 22.310 102.660 1.080 4.650 6.300000e+11 2.824e+10
- 1 10 1.367e+08 22.610 113.670 1.160 5.079 7.000000e+11 3.096e+10
- 1 11 1.367e+08 22.690 124.730 1.030 5.543 7.700000e+11 3.394e+10
- 1 12 1.367e+08 23.260 136.520 1.030 5.914 8.400000e+11 3.611e+10
- 1 13 1.367e+08 23.330 147.270 1.130 6.361 9.100000e+11 3.901e+10
- 1 14 1.367e+08 24.110 158.070 1.010 6.598 9.800000e+11 4.065e+10
- 1 15 1.367e+08 25.380 168.370 1.080 6.677 1.050000e+12 4.137e+10
- 1 16 1.367e+08 26.660 179.130 1.250 6.766 1.120000e+12 4.201e+10
- 2 1 1.367e+08 11.190 23.330 0.420 2.122 1.400000e+11 1.251e+10
- 2 2 1.367e+08 12.650 46.350 0.940 3.738 2.800000e+11 2.213e+10
- 2 3 1.367e+08 12.510 69.010 0.980 5.595 4.200000e+11 3.357e+10
- 2 4 1.367e+08 13.250 89.330 0.890 6.809 5.600000e+11 4.226e+10
- 2 5 1.367e+08 22.540 113.580 1.150 5.090 7.000000e+11 3.106e+10
- 2 6 1.367e+08 22.940 135.790 1.260 5.974 8.400000e+11 3.662e+10
- 2 7 1.367e+08 24.250 158.360 1.520 6.593 9.800000e+11 4.041e+10
- 2 8 1.367e+08 26.610 179.840 1.490 6.814 1.120000e+12 4.209e+10
- 2 9 1.215e+08 26.860 179.400 1.540 6.736 1.120000e+12 4.170e+10
- 2 10 1.094e+08 26.350 178.740 1.430 6.838 1.120000e+12 4.250e+10
- 2 11 9.943e+07 25.790 177.910 1.350 6.951 1.120000e+12 4.343e+10
- 2 12 9.115e+07 25.200 176.980 1.460 7.081 1.120000e+12 4.444e+10
- 2 13 8.413e+07 24.840 177.320 1.260 7.189 1.120000e+12 4.509e+10
- 2 14 7.812e+07 24.450 176.920 1.130 7.282 1.120000e+12 4.581e+10
- 2 15 7.292e+07 24.280 177.400 1.140 7.353 1.120000e+12 4.613e+10
- 2 16 6.836e+07 23.830 176.290 1.100 7.444 1.120000e+12 4.700e+10
- 3 1 1.367e+08 11.360 34.790 0.930 3.144 2.100000e+11 1.849e+10
- 3 2 1.367e+08 12.560 68.800 1.400 5.589 4.200000e+11 3.344e+10
- 3 3 1.367e+08 22.310 103.250 1.310 4.687 6.300000e+11 2.824e+10
- 3 4 1.367e+08 22.940 136.120 1.500 5.999 8.400000e+11 3.662e+10
- 3 5 1.367e+08 25.240 168.550 1.790 6.749 1.050000e+12 4.160e+10
- 3 6 1.215e+08 26.800 178.710 1.610 6.728 1.120000e+12 4.179e+10
- 3 7 1.042e+08 26.090 178.710 1.490 6.907 1.120000e+12 4.293e+10
- 3 8 9.115e+07 25.420 178.140 1.360 7.061 1.120000e+12 4.406e+10
- 3 9 8.102e+07 24.680 177.260 1.410 7.239 1.120000e+12 4.538e+10
- 3 10 7.292e+07 24.270 176.830 1.390 7.343 1.120000e+12 4.615e+10
- 3 11 6.629e+07 23.890 177.060 1.240 7.463 1.120000e+12 4.688e+10
- 3 12 6.076e+07 23.620 176.290 1.300 7.519 1.120000e+12 4.742e+10
- 3 13 5.609e+07 23.340 176.780 1.230 7.627 1.120000e+12 4.799e+10
- 3 14 5.208e+07 23.140 176.330 1.300 7.676 1.120000e+12 4.840e+10
- 3 15 4.861e+07 23.100 176.940 1.080 7.706 1.120000e+12 4.848e+10
- 3 16 4.557e+07 22.850 176.120 1.060 7.754 1.120000e+12 4.902e+10
- 4 1 1.367e+08 11.440 45.520 1.080 4.073 2.800000e+11 2.448e+10
- 4 2 1.367e+08 12.410 90.020 1.440 7.370 5.600000e+11 4.512e+10
- 4 3 1.367e+08 23.060 135.570 1.600 5.948 8.400000e+11 3.643e+10
- 4 4 1.367e+08 26.720 179.780 1.880 6.799 1.120000e+12 4.192e+10
- 4 5 1.094e+08 26.280 178.110 1.890 6.849 1.120000e+12 4.262e+10
- 4 6 9.115e+07 25.250 177.280 1.700 7.088 1.120000e+12 4.436e+10
- 4 7 7.812e+07 24.880 177.830 1.570 7.211 1.120000e+12 4.502e+10
- 4 8 6.836e+07 24.150 177.240 1.350 7.395 1.120000e+12 4.638e+10
- 4 9 6.076e+07 23.730 176.590 1.370 7.499 1.120000e+12 4.720e+10
- 4 10 5.469e+07 23.380 176.570 1.310 7.608 1.120000e+12 4.790e+10
- 4 11 4.972e+07 23.230 176.400 1.290 7.649 1.120000e+12 4.821e+10
- 4 12 4.557e+07 22.950 176.100 1.250 7.728 1.120000e+12 4.880e+10
- 4 13 4.207e+07 22.980 176.430 1.260 7.732 1.120000e+12 4.874e+10
- 4 14 3.906e+07 22.820 176.300 1.350 7.785 1.120000e+12 4.908e+10
- 4 15 3.646e+07 22.750 176.450 1.220 7.810 1.120000e+12 4.923e+10
- 4 16 3.418e+07 22.620 176.350 1.080 7.844 1.120000e+12 4.951e+10
- 5 1 1.367e+08 12.000 56.890 1.600 4.874 3.500000e+11 2.917e+10
- 5 2 1.367e+08 22.390 112.870 1.920 5.127 7.000000e+11 3.126e+10
- 5 3 1.367e+08 25.170 167.880 2.110 6.754 1.050000e+12 4.172e+10
- 5 4 1.094e+08 26.380 178.010 1.900 6.820 1.120000e+12 4.246e+10
- 5 5 8.750e+07 25.190 177.570 1.660 7.115 1.120000e+12 4.446e+10
- 5 6 7.292e+07 24.400 176.750 1.650 7.311 1.120000e+12 4.590e+10
- 5 7 6.250e+07 24.020 177.580 1.570 7.458 1.120000e+12 4.663e+10
- 5 8 5.469e+07 23.470 176.650 1.350 7.584 1.120000e+12 4.772e+10
- 5 9 4.861e+07 23.200 176.350 1.280 7.656 1.120000e+12 4.828e+10
- 5 10 4.375e+07 23.140 176.230 1.410 7.677 1.120000e+12 4.840e+10
- 5 11 3.977e+07 22.930 176.120 1.320 7.738 1.120000e+12 4.884e+10
- 5 12 3.646e+07 22.740 176.060 1.330 7.801 1.120000e+12 4.925e+10
- 5 13 3.365e+07 22.690 176.450 1.210 7.830 1.120000e+12 4.936e+10
- 5 14 3.125e+07 22.690 176.430 1.230 7.830 1.120000e+12 4.936e+10
- 5 15 2.917e+07 22.690 176.410 1.260 7.830 1.120000e+12 4.936e+10
- 5 16 2.734e+07 22.560 176.150 1.110 7.857 1.120000e+12 4.965e+10
- 6 1 1.367e+08 12.600 68.590 2.230 5.621 4.200000e+11 3.333e+10
- 6 2 1.367e+08 22.830 135.260 2.100 6.017 8.400000e+11 3.679e+10
- 6 3 1.215e+08 26.860 178.470 2.140 6.724 1.120000e+12 4.170e+10
- 6 4 9.115e+07 25.450 177.110 2.060 7.040 1.120000e+12 4.401e+10
- 6 5 7.292e+07 24.510 176.850 1.910 7.293 1.120000e+12 4.570e+10
- 6 6 6.076e+07 23.890 176.450 1.760 7.460 1.120000e+12 4.688e+10
- 6 7 5.208e+07 23.460 175.980 1.540 7.567 1.120000e+12 4.774e+10
- 6 8 4.557e+07 23.150 176.480 1.370 7.683 1.120000e+12 4.838e+10
- 6 9 4.051e+07 22.920 176.030 1.400 7.741 1.120000e+12 4.887e+10
- 6 10 3.646e+07 22.880 176.300 1.350 7.764 1.120000e+12 4.895e+10
- 6 11 3.314e+07 22.830 175.970 1.360 7.767 1.120000e+12 4.906e+10
- 6 12 3.038e+07 22.710 176.040 1.190 7.804 1.120000e+12 4.932e+10
- 6 13 2.804e+07 22.690 176.050 1.340 7.818 1.120000e+12 4.936e+10
- 6 14 2.604e+07 22.650 176.410 1.140 7.839 1.120000e+12 4.945e+10
- 6 15 2.431e+07 22.570 175.940 1.250 7.851 1.120000e+12 4.962e+10
- 6 16 2.279e+07 22.500 175.980 1.170 7.873 1.120000e+12 4.978e+10
- 7 1 1.367e+08 12.960 79.970 2.850 6.390 4.900000e+11 3.781e+10
- 7 2 1.367e+08 24.040 156.540 2.500 6.616 9.800000e+11 4.077e+10
- 7 3 1.042e+08 26.130 178.060 2.210 6.899 1.120000e+12 4.286e+10
- 7 4 7.812e+07 24.860 176.880 1.810 7.188 1.120000e+12 4.505e+10
- 7 5 6.250e+07 24.000 176.590 1.790 7.433 1.120000e+12 4.667e+10
- 7 6 5.208e+07 23.540 176.480 1.670 7.568 1.120000e+12 4.758e+10
- 7 7 4.464e+07 23.180 176.030 1.510 7.659 1.120000e+12 4.832e+10
- 7 8 3.906e+07 22.980 176.500 1.340 7.739 1.120000e+12 4.874e+10
- 7 9 3.472e+07 22.870 175.970 1.280 7.750 1.120000e+12 4.897e+10
- 7 10 3.125e+07 22.730 176.220 1.300 7.810 1.120000e+12 4.927e+10
- 7 11 2.841e+07 22.700 176.030 1.300 7.812 1.120000e+12 4.934e+10
- 7 12 2.604e+07 22.650 176.300 1.210 7.837 1.120000e+12 4.945e+10
- 7 13 2.404e+07 22.580 176.140 1.170 7.853 1.120000e+12 4.960e+10
- 7 14 2.232e+07 22.540 176.550 1.130 7.883 1.120000e+12 4.969e+10
- 7 15 2.083e+07 22.570 175.870 1.260 7.848 1.120000e+12 4.962e+10
- 7 16 1.953e+07 22.520 175.980 1.310 7.873 1.120000e+12 4.973e+10
- 8 1 1.367e+08 13.250 91.770 3.010 7.153 5.600000e+11 4.226e+10
- 8 2 1.367e+08 26.280 178.100 2.980 6.890 1.120000e+12 4.262e+10
- 8 3 9.115e+07 25.510 177.140 2.270 7.033 1.120000e+12 4.390e+10
- 8 4 6.836e+07 24.330 176.850 1.870 7.346 1.120000e+12 4.603e+10
- 8 5 5.469e+07 23.680 176.850 1.690 7.540 1.120000e+12 4.730e+10
- 8 6 4.557e+07 23.430 176.210 1.700 7.593 1.120000e+12 4.780e+10
- 8 7 3.906e+07 23.100 176.680 1.440 7.711 1.120000e+12 4.848e+10
- 8 8 3.418e+07 22.890 176.270 1.430 7.763 1.120000e+12 4.893e+10
- 8 9 3.038e+07 22.760 175.980 1.320 7.790 1.120000e+12 4.921e+10
- 8 10 2.734e+07 22.760 176.340 1.290 7.804 1.120000e+12 4.921e+10
- 8 11 2.486e+07 22.660 176.220 1.170 7.828 1.120000e+12 4.943e+10
- 8 12 2.279e+07 22.660 176.050 1.280 7.826 1.120000e+12 4.943e+10
- 8 13 2.103e+07 22.590 176.170 1.350 7.858 1.120000e+12 4.958e+10
- 8 14 1.953e+07 22.550 176.120 1.320 7.869 1.120000e+12 4.967e+10
- 8 15 1.823e+07 22.590 176.130 1.270 7.853 1.120000e+12 4.958e+10
- 8 16 1.709e+07 22.500 176.090 1.230 7.881 1.120000e+12 4.978e+10
- 9 1 1.367e+08 21.110 101.410 2.640 4.929 6.300000e+11 2.984e+10
- 9 2 1.215e+08 27.400 178.180 2.720 6.602 1.120000e+12 4.088e+10
- 9 3 8.102e+07 25.140 177.370 2.230 7.144 1.120000e+12 4.455e+10
- 9 4 6.076e+07 24.110 176.810 1.910 7.413 1.120000e+12 4.645e+10
- 9 5 4.861e+07 23.460 176.240 1.600 7.581 1.120000e+12 4.774e+10
- 9 6 4.051e+07 23.200 176.310 1.620 7.669 1.120000e+12 4.828e+10
- 9 7 3.472e+07 22.970 176.560 1.540 7.754 1.120000e+12 4.876e+10
- 9 8 3.038e+07 22.920 176.300 1.440 7.755 1.120000e+12 4.887e+10
- 9 9 2.701e+07 22.830 176.090 1.370 7.773 1.120000e+12 4.906e+10
- 9 10 2.431e+07 22.730 175.960 1.430 7.804 1.120000e+12 4.927e+10
- 9 11 2.210e+07 22.750 176.160 1.260 7.799 1.120000e+12 4.923e+10
- 9 12 2.025e+07 22.660 176.100 1.380 7.832 1.120000e+12 4.943e+10
- 9 13 1.870e+07 22.700 176.040 1.400 7.817 1.120000e+12 4.934e+10
- 9 14 1.736e+07 22.620 175.940 1.410 7.840 1.120000e+12 4.951e+10
- 9 15 1.620e+07 22.490 175.910 1.340 7.881 1.120000e+12 4.980e+10
- 9 16 1.519e+07 22.540 175.990 1.330 7.867 1.120000e+12 4.969e+10
- 10 1 1.367e+08 21.730 113.690 2.870 5.364 7.000000e+11 3.221e+10
- 10 2 1.094e+08 26.660 177.920 3.180 6.793 1.120000e+12 4.201e+10
- 10 3 7.292e+07 24.740 176.810 2.090 7.231 1.120000e+12 4.527e+10
- 10 4 5.469e+07 23.880 176.280 2.020 7.466 1.120000e+12 4.690e+10
- 10 5 4.375e+07 23.330 176.510 1.610 7.635 1.120000e+12 4.801e+10
- 10 6 3.646e+07 23.170 176.160 1.680 7.675 1.120000e+12 4.834e+10
- 10 7 3.125e+07 22.950 176.490 1.470 7.754 1.120000e+12 4.880e+10
- 10 8 2.734e+07 22.830 176.260 1.360 7.780 1.120000e+12 4.906e+10
- 10 9 2.431e+07 22.770 175.930 1.410 7.788 1.120000e+12 4.919e+10
- 10 10 2.188e+07 22.680 175.870 1.440 7.818 1.120000e+12 4.938e+10
- 10 11 1.989e+07 22.700 176.140 1.310 7.817 1.120000e+12 4.934e+10
- 10 12 1.823e+07 22.630 176.040 1.430 7.842 1.120000e+12 4.949e+10
- 10 13 1.683e+07 22.640 176.000 1.320 7.832 1.120000e+12 4.947e+10
- 10 14 1.562e+07 22.610 176.160 1.230 7.846 1.120000e+12 4.954e+10
- 10 15 1.458e+07 22.570 176.010 1.290 7.856 1.120000e+12 4.962e+10
- 10 16 1.367e+07 22.640 176.060 1.270 7.833 1.120000e+12 4.947e+10
- 11 1 1.367e+08 22.060 124.440 3.050 5.779 7.700000e+11 3.490e+10
- 11 2 9.943e+07 26.060 178.400 3.000 6.961 1.120000e+12 4.298e+10
- 11 3 6.629e+07 24.380 176.690 2.200 7.338 1.120000e+12 4.594e+10
- 11 4 4.972e+07 23.650 176.730 1.830 7.550 1.120000e+12 4.736e+10
- 11 5 3.977e+07 23.310 176.030 1.780 7.628 1.120000e+12 4.805e+10
- 11 6 3.314e+07 23.050 176.210 1.680 7.718 1.120000e+12 4.859e+10
- 11 7 2.841e+07 22.940 176.300 1.540 7.752 1.120000e+12 4.882e+10
- 11 8 2.486e+07 22.830 175.990 1.530 7.776 1.120000e+12 4.906e+10
- 11 9 2.210e+07 22.760 176.060 1.440 7.799 1.120000e+12 4.921e+10
- 11 10 1.989e+07 22.630 176.010 1.430 7.841 1.120000e+12 4.949e+10
- 11 11 1.808e+07 22.720 176.040 1.390 7.809 1.120000e+12 4.930e+10
- 11 12 1.657e+07 22.640 175.890 1.400 7.831 1.120000e+12 4.947e+10
- 11 13 1.530e+07 22.570 176.090 1.260 7.858 1.120000e+12 4.962e+10
- 11 14 1.420e+07 22.610 176.150 1.450 7.855 1.120000e+12 4.954e+10
- 11 15 1.326e+07 22.550 175.980 1.310 7.862 1.120000e+12 4.967e+10
- 11 16 1.243e+07 22.610 175.920 1.400 7.843 1.120000e+12 4.954e+10
- 12 1 1.367e+08 22.220 136.260 3.390 6.285 8.400000e+11 3.780e+10
- 12 2 9.115e+07 25.610 178.090 2.800 7.063 1.120000e+12 4.373e+10
- 12 3 6.076e+07 24.180 176.320 2.230 7.384 1.120000e+12 4.632e+10
- 12 4 4.557e+07 23.570 176.570 2.010 7.577 1.120000e+12 4.752e+10
- 12 5 3.646e+07 23.210 176.420 1.710 7.675 1.120000e+12 4.826e+10
- 12 6 3.038e+07 23.040 175.910 1.640 7.706 1.120000e+12 4.861e+10
- 12 7 2.604e+07 22.980 176.390 1.510 7.742 1.120000e+12 4.874e+10
- 12 8 2.279e+07 22.840 176.110 1.640 7.782 1.120000e+12 4.904e+10
- 12 9 2.025e+07 22.760 175.950 1.500 7.797 1.120000e+12 4.921e+10
- 12 10 1.823e+07 22.660 175.810 1.600 7.829 1.120000e+12 4.943e+10
- 12 11 1.657e+07 22.710 175.940 1.410 7.809 1.120000e+12 4.932e+10
- 12 12 1.519e+07 22.650 175.870 1.400 7.826 1.120000e+12 4.945e+10
- 12 13 1.402e+07 22.640 176.040 1.260 7.831 1.120000e+12 4.947e+10
- 12 14 1.302e+07 22.650 176.130 1.450 7.840 1.120000e+12 4.945e+10
- 12 15 1.215e+07 22.580 175.990 1.370 7.855 1.120000e+12 4.960e+10
- 12 16 1.139e+07 22.640 175.870 1.440 7.832 1.120000e+12 4.947e+10
- 13 1 1.367e+08 22.640 147.020 3.570 6.652 9.100000e+11 4.019e+10
- 13 2 8.413e+07 25.600 177.820 2.870 7.058 1.120000e+12 4.375e+10
- 13 3 5.609e+07 24.020 176.980 2.270 7.463 1.120000e+12 4.663e+10
- 13 4 4.207e+07 23.440 176.430 2.030 7.613 1.120000e+12 4.778e+10
- 13 5 3.365e+07 23.080 176.110 1.790 7.708 1.120000e+12 4.853e+10
- 13 6 2.804e+07 22.870 176.210 1.600 7.775 1.120000e+12 4.897e+10
- 13 7 2.404e+07 22.940 176.340 1.580 7.756 1.120000e+12 4.882e+10
- 13 8 2.103e+07 22.880 176.050 1.520 7.761 1.120000e+12 4.895e+10
- 13 9 1.870e+07 22.740 176.020 1.400 7.802 1.120000e+12 4.925e+10
- 13 10 1.683e+07 22.710 175.880 1.440 7.808 1.120000e+12 4.932e+10
- 13 11 1.530e+07 22.590 176.040 1.350 7.853 1.120000e+12 4.958e+10
- 13 12 1.402e+07 22.600 175.930 1.380 7.846 1.120000e+12 4.956e+10
- 13 13 1.294e+07 22.710 176.010 1.340 7.809 1.120000e+12 4.932e+10
- 13 14 1.202e+07 22.690 176.270 1.350 7.828 1.120000e+12 4.936e+10
- 13 15 1.122e+07 22.590 175.960 1.290 7.846 1.120000e+12 4.958e+10
- 13 16 1.052e+07 22.610 175.960 1.370 7.843 1.120000e+12 4.954e+10
- 14 1 1.367e+08 23.120 157.180 3.810 6.963 9.800000e+11 4.239e+10
- 14 2 7.812e+07 25.310 177.210 3.020 7.121 1.120000e+12 4.425e+10
- 14 3 5.208e+07 24.130 177.110 2.340 7.437 1.120000e+12 4.642e+10
- 14 4 3.906e+07 23.390 176.660 1.800 7.630 1.120000e+12 4.788e+10
- 14 5 3.125e+07 23.060 176.420 1.750 7.726 1.120000e+12 4.857e+10
- 14 6 2.604e+07 22.890 176.180 1.530 7.764 1.120000e+12 4.893e+10
- 14 7 2.232e+07 22.940 176.060 1.550 7.742 1.120000e+12 4.882e+10
- 14 8 1.953e+07 22.810 176.110 1.500 7.786 1.120000e+12 4.910e+10
- 14 9 1.736e+07 22.750 176.370 1.370 7.813 1.120000e+12 4.923e+10
- 14 10 1.562e+07 22.720 176.020 1.450 7.811 1.120000e+12 4.930e+10
- 14 11 1.420e+07 22.680 176.090 1.310 7.822 1.120000e+12 4.938e+10
- 14 12 1.302e+07 22.710 175.950 1.510 7.814 1.120000e+12 4.932e+10
- 14 13 1.202e+07 22.700 176.100 1.500 7.824 1.120000e+12 4.934e+10
- 14 14 1.116e+07 22.660 176.150 1.460 7.838 1.120000e+12 4.943e+10
- 14 15 1.042e+07 22.680 176.120 1.370 7.826 1.120000e+12 4.938e+10
- 14 16 9.766e+06 22.710 176.110 1.430 7.818 1.120000e+12 4.932e+10
- 15 1 1.367e+08 23.710 168.080 4.140 7.264 1.050000e+12 4.429e+10
- 15 2 7.292e+07 25.170 176.640 2.930 7.134 1.120000e+12 4.450e+10
- 15 3 4.861e+07 23.820 176.980 2.110 7.518 1.120000e+12 4.702e+10
- 15 4 3.646e+07 23.250 176.190 1.970 7.663 1.120000e+12 4.817e+10
- 15 5 2.917e+07 23.050 176.450 1.690 7.728 1.120000e+12 4.859e+10
- 15 6 2.431e+07 22.900 175.980 1.680 7.758 1.120000e+12 4.891e+10
- 15 7 2.083e+07 22.830 176.090 1.640 7.785 1.120000e+12 4.906e+10
- 15 8 1.823e+07 22.850 176.160 1.530 7.776 1.120000e+12 4.902e+10
- 15 9 1.620e+07 22.780 176.390 1.360 7.803 1.120000e+12 4.917e+10
- 15 10 1.458e+07 22.660 176.000 1.440 7.831 1.120000e+12 4.943e+10
- 15 11 1.326e+07 22.660 176.110 1.430 7.835 1.120000e+12 4.943e+10
- 15 12 1.215e+07 22.660 176.150 1.380 7.835 1.120000e+12 4.943e+10
- 15 13 1.122e+07 22.760 175.970 1.580 7.801 1.120000e+12 4.921e+10
- 15 14 1.042e+07 22.670 176.290 1.270 7.832 1.120000e+12 4.940e+10
- 15 15 9.722e+06 22.710 176.060 1.550 7.821 1.120000e+12 4.932e+10
- 15 16 9.115e+06 22.800 176.020 1.490 7.786 1.120000e+12 4.912e+10
- 16 1 1.367e+08 25.470 179.270 4.730 7.224 1.120000e+12 4.397e+10
- 16 2 6.836e+07 24.870 176.820 2.960 7.229 1.120000e+12 4.503e+10
- 16 3 4.557e+07 23.810 176.930 2.250 7.525 1.120000e+12 4.704e+10
- 16 4 3.418e+07 23.240 176.650 1.950 7.685 1.120000e+12 4.819e+10
- 16 5 2.734e+07 23.090 175.940 1.940 7.704 1.120000e+12 4.851e+10
- 16 6 2.279e+07 22.900 176.120 1.680 7.764 1.120000e+12 4.891e+10
- 16 7 1.953e+07 22.890 176.290 1.440 7.765 1.120000e+12 4.893e+10
- 16 8 1.709e+07 22.820 176.040 1.610 7.785 1.120000e+12 4.908e+10
- 16 9 1.519e+07 22.890 175.990 1.470 7.753 1.120000e+12 4.893e+10
- 16 10 1.367e+07 22.700 175.890 1.470 7.813 1.120000e+12 4.934e+10
- 16 11 1.243e+07 22.770 175.960 1.520 7.794 1.120000e+12 4.919e+10
- 16 12 1.139e+07 22.730 176.000 1.430 7.806 1.120000e+12 4.927e+10
- 16 13 1.052e+07 22.670 175.990 1.540 7.831 1.120000e+12 4.940e+10
- 16 14 9.766e+06 22.720 176.130 1.440 7.816 1.120000e+12 4.930e+10
- 16 15 9.115e+06 22.740 176.320 1.360 7.814 1.120000e+12 4.925e+10
- 16 16 8.545e+06 22.680 176.170 1.320 7.826 1.120000e+12 4.938e+10
diff --git a/gnuradio-examples/python/mp-sched/perf-data/dual-quad-core-3.00-penryn.dat b/gnuradio-examples/python/mp-sched/perf-data/dual-quad-core-3.00-penryn.dat
deleted file mode 100644
index 57d49ed33..000000000
--- a/gnuradio-examples/python/mp-sched/perf-data/dual-quad-core-3.00-penryn.dat
+++ /dev/null
@@ -1,257 +0,0 @@
-#D Dual quad-core Xeon 3.0 GHz (Penryn E5472, 1600 MHz FSB, 5400 chipset)
- 1 1 5.000e+07 2.720 3.020 0.110 1.151 2.560000e+10 9.412e+09
- 1 2 5.000e+07 2.870 5.630 0.170 2.021 5.120000e+10 1.784e+10
- 1 3 5.000e+07 2.880 8.380 0.160 2.965 7.680000e+10 2.667e+10
- 1 4 5.000e+07 2.990 11.080 0.200 3.773 1.024000e+11 3.425e+10
- 1 5 5.000e+07 2.950 13.950 0.190 4.793 1.280000e+11 4.339e+10
- 1 6 5.000e+07 3.020 16.620 0.240 5.583 1.536000e+11 5.086e+10
- 1 7 5.000e+07 2.930 19.250 0.200 6.638 1.792000e+11 6.116e+10
- 1 8 5.000e+07 3.170 22.240 0.290 7.107 2.048000e+11 6.461e+10
- 1 9 5.000e+07 5.450 24.410 0.310 4.536 2.304000e+11 4.228e+10
- 1 10 5.000e+07 5.610 27.400 0.370 4.950 2.560000e+11 4.563e+10
- 1 11 5.000e+07 5.680 29.960 0.370 5.340 2.816000e+11 4.958e+10
- 1 12 5.000e+07 5.440 32.490 0.350 6.037 3.072000e+11 5.647e+10
- 1 13 5.000e+07 5.630 35.270 0.400 6.336 3.328000e+11 5.911e+10
- 1 14 5.000e+07 6.270 38.500 0.480 6.217 3.584000e+11 5.716e+10
- 1 15 5.000e+07 6.080 40.880 0.490 6.804 3.840000e+11 6.316e+10
- 1 16 5.000e+07 7.740 43.390 0.600 5.683 4.096000e+11 5.292e+10
- 2 1 5.000e+07 2.820 5.700 0.210 2.096 5.120000e+10 1.816e+10
- 2 2 5.000e+07 2.820 11.130 0.230 4.028 1.024000e+11 3.631e+10
- 2 3 5.000e+07 2.960 16.570 0.320 5.706 1.536000e+11 5.189e+10
- 2 4 5.000e+07 3.110 21.920 0.390 7.174 2.048000e+11 6.585e+10
- 2 5 5.000e+07 5.650 27.550 0.520 4.968 2.560000e+11 4.531e+10
- 2 6 5.000e+07 5.880 32.890 0.440 5.668 3.072000e+11 5.224e+10
- 2 7 5.000e+07 6.750 38.210 0.560 5.744 3.584000e+11 5.310e+10
- 2 8 5.000e+07 6.360 43.480 0.580 6.928 4.096000e+11 6.440e+10
- 2 9 5.000e+07 8.270 48.750 0.730 5.983 4.608000e+11 5.572e+10
- 2 10 5.000e+07 8.210 54.400 0.610 6.700 5.120000e+11 6.236e+10
- 2 11 5.000e+07 8.750 59.760 0.640 6.903 5.632000e+11 6.437e+10
- 2 12 5.000e+07 9.300 65.050 0.700 7.070 6.144000e+11 6.606e+10
- 2 13 5.000e+07 9.990 70.750 0.750 7.157 6.656000e+11 6.663e+10
- 2 14 5.000e+07 10.610 75.950 0.810 7.235 7.168000e+11 6.756e+10
- 2 15 5.000e+07 11.900 80.400 0.870 6.829 7.680000e+11 6.454e+10
- 2 16 5.000e+07 11.820 86.790 0.900 7.419 8.192000e+11 6.931e+10
- 3 1 5.000e+07 2.970 8.300 0.380 2.923 7.680000e+10 2.586e+10
- 3 2 5.000e+07 2.980 16.660 0.390 5.721 1.536000e+11 5.154e+10
- 3 3 5.000e+07 5.480 24.690 0.420 4.582 2.304000e+11 4.204e+10
- 3 4 5.000e+07 5.620 32.820 0.560 5.940 3.072000e+11 5.466e+10
- 3 5 5.000e+07 6.940 40.800 0.620 5.968 3.840000e+11 5.533e+10
- 3 6 5.000e+07 7.860 49.010 0.710 6.326 4.608000e+11 5.863e+10
- 3 7 5.000e+07 8.470 57.130 0.750 6.834 5.376000e+11 6.347e+10
- 3 8 5.000e+07 9.420 65.310 0.820 7.020 6.144000e+11 6.522e+10
- 3 9 5.000e+07 10.350 73.640 0.940 7.206 6.912000e+11 6.678e+10
- 3 10 5.000e+07 11.460 82.230 1.030 7.265 7.680000e+11 6.702e+10
- 3 11 5.000e+07 12.200 89.590 1.050 7.430 8.448000e+11 6.925e+10
- 3 12 5.000e+07 13.040 97.520 1.140 7.566 9.216000e+11 7.067e+10
- 3 13 5.000e+07 14.000 105.560 1.150 7.622 9.984000e+11 7.131e+10
- 3 14 5.000e+07 14.930 113.630 1.210 7.692 1.075200e+12 7.202e+10
- 3 15 5.000e+07 15.920 121.610 1.350 7.724 1.152000e+12 7.236e+10
- 3 16 5.000e+07 16.870 129.770 1.390 7.775 1.228800e+12 7.284e+10
- 4 1 5.000e+07 2.900 11.100 0.340 3.945 1.024000e+11 3.531e+10
- 4 2 5.000e+07 4.380 21.980 0.480 5.128 2.048000e+11 4.676e+10
- 4 3 5.000e+07 5.720 32.800 0.610 5.841 3.072000e+11 5.371e+10
- 4 4 5.000e+07 6.820 43.880 0.700 6.537 4.096000e+11 6.006e+10
- 4 5 5.000e+07 8.150 54.420 0.760 6.771 5.120000e+11 6.282e+10
- 4 6 5.000e+07 9.510 65.180 0.980 6.957 6.144000e+11 6.461e+10
- 4 7 5.000e+07 10.650 76.080 1.020 7.239 7.168000e+11 6.731e+10
- 4 8 5.000e+07 11.880 86.720 1.110 7.393 8.192000e+11 6.896e+10
- 4 9 5.000e+07 13.150 97.920 1.250 7.541 9.216000e+11 7.008e+10
- 4 10 5.000e+07 14.640 109.260 1.410 7.559 1.024000e+12 6.995e+10
- 4 11 5.000e+07 15.710 119.170 1.440 7.677 1.126400e+12 7.170e+10
- 4 12 5.000e+07 16.950 129.960 1.420 7.751 1.228800e+12 7.250e+10
- 4 13 5.000e+07 18.260 140.520 1.620 7.784 1.331200e+12 7.290e+10
- 4 14 5.000e+07 19.610 151.290 1.780 7.806 1.433600e+12 7.311e+10
- 4 15 5.000e+07 21.060 162.760 1.890 7.818 1.536000e+12 7.293e+10
- 4 16 5.000e+07 22.280 172.870 1.980 7.848 1.638400e+12 7.354e+10
- 5 1 5.000e+07 3.040 13.810 0.390 4.671 1.280000e+11 4.211e+10
- 5 2 5.000e+07 5.590 27.510 0.610 5.030 2.560000e+11 4.580e+10
- 5 3 5.000e+07 6.550 40.970 0.780 6.374 3.840000e+11 5.863e+10
- 5 4 5.000e+07 8.520 54.470 0.940 6.504 5.120000e+11 6.009e+10
- 5 5 5.000e+07 9.920 67.950 1.060 6.957 6.400000e+11 6.452e+10
- 5 6 5.000e+07 11.350 81.490 1.180 7.284 7.680000e+11 6.767e+10
- 5 7 5.000e+07 12.910 94.960 1.300 7.456 8.960000e+11 6.940e+10
- 5 8 5.000e+07 14.520 108.510 1.400 7.570 1.024000e+12 7.052e+10
- 5 9 5.000e+07 16.070 122.120 1.620 7.700 1.152000e+12 7.169e+10
- 5 10 5.000e+07 17.950 136.140 1.730 7.681 1.280000e+12 7.131e+10
- 5 11 5.000e+07 19.470 148.330 1.830 7.712 1.408000e+12 7.232e+10
- 5 12 5.000e+07 20.980 162.100 2.030 7.823 1.536000e+12 7.321e+10
- 5 13 5.000e+07 22.670 175.470 2.160 7.835 1.664000e+12 7.340e+10
- 5 14 5.000e+07 24.440 189.630 2.170 7.848 1.792000e+12 7.332e+10
- 5 15 5.000e+07 26.100 203.010 2.450 7.872 1.920000e+12 7.356e+10
- 5 16 5.000e+07 27.720 216.000 2.550 7.884 2.048000e+12 7.388e+10
- 6 1 5.000e+07 2.950 16.560 0.540 5.797 1.536000e+11 5.207e+10
- 6 2 5.000e+07 5.540 32.900 0.720 6.069 3.072000e+11 5.545e+10
- 6 3 5.000e+07 8.490 48.860 1.000 5.873 4.608000e+11 5.428e+10
- 6 4 5.000e+07 10.000 64.670 1.100 6.577 6.144000e+11 6.144e+10
- 6 5 5.000e+07 11.440 81.430 1.310 7.233 7.680000e+11 6.713e+10
- 6 6 5.000e+07 13.250 97.690 1.360 7.475 9.216000e+11 6.955e+10
- 6 7 5.000e+07 15.270 113.730 1.610 7.553 1.075200e+12 7.041e+10
- 6 8 5.000e+07 17.180 129.780 1.820 7.660 1.228800e+12 7.153e+10
- 6 9 5.000e+07 19.200 146.020 1.870 7.703 1.382400e+12 7.200e+10
- 6 10 5.000e+07 21.220 162.290 2.100 7.747 1.536000e+12 7.238e+10
- 6 11 5.000e+07 23.070 178.420 2.160 7.827 1.689600e+12 7.324e+10
- 6 12 5.000e+07 25.120 194.590 2.450 7.844 1.843200e+12 7.338e+10
- 6 13 5.000e+07 27.110 210.640 2.660 7.868 1.996800e+12 7.366e+10
- 6 14 5.000e+07 29.110 226.820 2.750 7.886 2.150400e+12 7.387e+10
- 6 15 5.000e+07 31.130 242.800 2.940 7.894 2.304000e+12 7.401e+10
- 6 16 5.000e+07 33.100 258.790 3.210 7.915 2.457600e+12 7.425e+10
- 7 1 5.000e+07 2.940 19.140 0.590 6.711 1.792000e+11 6.095e+10
- 7 2 5.000e+07 5.920 37.910 1.030 6.578 3.584000e+11 6.054e+10
- 7 3 5.000e+07 8.570 57.010 1.150 6.786 5.376000e+11 6.273e+10
- 7 4 5.000e+07 10.840 76.060 1.320 7.138 7.168000e+11 6.613e+10
- 7 5 5.000e+07 13.070 94.920 1.540 7.380 8.960000e+11 6.855e+10
- 7 6 5.000e+07 15.270 113.790 1.730 7.565 1.075200e+12 7.041e+10
- 7 7 5.000e+07 17.700 132.560 1.960 7.600 1.254400e+12 7.087e+10
- 7 8 5.000e+07 19.930 151.500 2.130 7.708 1.433600e+12 7.193e+10
- 7 9 5.000e+07 22.250 170.570 2.340 7.771 1.612800e+12 7.249e+10
- 7 10 5.000e+07 24.600 189.280 2.450 7.794 1.792000e+12 7.285e+10
- 7 11 5.000e+07 26.950 208.030 2.700 7.819 1.971200e+12 7.314e+10
- 7 12 5.000e+07 29.280 227.070 2.850 7.852 2.150400e+12 7.344e+10
- 7 13 5.000e+07 31.570 245.750 3.040 7.881 2.329600e+12 7.379e+10
- 7 14 5.000e+07 33.930 264.960 3.160 7.902 2.508800e+12 7.394e+10
- 7 15 5.000e+07 36.310 283.960 3.440 7.915 2.688000e+12 7.403e+10
- 7 16 5.000e+07 38.560 302.120 3.630 7.929 2.867200e+12 7.436e+10
- 8 1 5.000e+07 3.200 21.880 0.860 7.106 2.048000e+11 6.400e+10
- 8 2 5.000e+07 5.890 43.450 0.930 7.535 4.096000e+11 6.954e+10
- 8 3 5.000e+07 9.520 65.180 1.250 6.978 6.144000e+11 6.454e+10
- 8 4 5.000e+07 12.200 86.780 1.480 7.234 8.192000e+11 6.715e+10
- 8 5 5.000e+07 14.760 108.420 1.670 7.459 1.024000e+12 6.938e+10
- 8 6 5.000e+07 17.300 129.850 1.960 7.619 1.228800e+12 7.103e+10
- 8 7 5.000e+07 20.020 151.430 2.190 7.673 1.433600e+12 7.161e+10
- 8 8 5.000e+07 22.750 173.550 2.420 7.735 1.638400e+12 7.202e+10
- 8 9 5.000e+07 25.410 194.560 2.760 7.765 1.843200e+12 7.254e+10
- 8 10 5.000e+07 28.410 217.250 2.920 7.750 2.048000e+12 7.209e+10
- 8 11 5.000e+07 30.720 237.990 3.210 7.852 2.252800e+12 7.333e+10
- 8 12 5.000e+07 33.310 259.340 3.280 7.884 2.457600e+12 7.378e+10
- 8 13 5.000e+07 36.000 280.760 3.670 7.901 2.662400e+12 7.396e+10
- 8 14 5.000e+07 38.800 302.570 3.740 7.895 2.867200e+12 7.390e+10
- 8 15 5.000e+07 41.530 324.520 4.060 7.912 3.072000e+12 7.397e+10
- 8 16 5.000e+07 44.060 345.420 4.250 7.936 3.276800e+12 7.437e+10
- 9 1 5.000e+07 5.460 24.660 1.000 4.700 2.304000e+11 4.220e+10
- 9 2 5.000e+07 8.460 49.010 1.200 5.935 4.608000e+11 5.447e+10
- 9 3 5.000e+07 10.810 71.410 1.400 6.735 6.912000e+11 6.394e+10
- 9 4 5.000e+07 13.470 97.570 1.710 7.370 9.216000e+11 6.842e+10
- 9 5 5.000e+07 16.490 121.780 2.130 7.514 1.152000e+12 6.986e+10
- 9 6 5.000e+07 19.540 146.070 2.280 7.592 1.382400e+12 7.075e+10
- 9 7 5.000e+07 22.660 170.830 2.570 7.652 1.612800e+12 7.117e+10
- 9 8 5.000e+07 25.520 194.720 2.760 7.738 1.843200e+12 7.223e+10
- 9 9 5.000e+07 28.400 219.020 3.060 7.820 2.073600e+12 7.301e+10
- 9 10 5.000e+07 31.490 243.030 3.320 7.823 2.304000e+12 7.317e+10
- 9 11 5.000e+07 34.530 267.230 3.420 7.838 2.534400e+12 7.340e+10
- 9 12 5.000e+07 37.520 291.720 3.860 7.878 2.764800e+12 7.369e+10
- 9 13 5.000e+07 40.550 315.780 4.170 7.890 2.995200e+12 7.386e+10
- 9 14 5.000e+07 43.470 339.930 4.290 7.919 3.225600e+12 7.420e+10
- 9 15 5.000e+07 46.820 364.970 4.640 7.894 3.456000e+12 7.381e+10
- 9 16 5.000e+07 49.660 388.630 4.890 7.924 3.686400e+12 7.423e+10
- 10 1 5.000e+07 5.500 27.290 0.980 5.140 2.560000e+11 4.655e+10
- 10 2 5.000e+07 8.480 54.830 1.420 6.633 5.120000e+11 6.038e+10
- 10 3 5.000e+07 11.540 81.580 1.630 7.211 7.680000e+11 6.655e+10
- 10 4 5.000e+07 14.950 108.480 1.860 7.381 1.024000e+12 6.849e+10
- 10 5 5.000e+07 18.330 135.300 2.280 7.506 1.280000e+12 6.983e+10
- 10 6 5.000e+07 21.680 162.380 2.540 7.607 1.536000e+12 7.085e+10
- 10 7 5.000e+07 24.950 189.360 2.730 7.699 1.792000e+12 7.182e+10
- 10 8 5.000e+07 28.280 216.090 3.110 7.751 2.048000e+12 7.242e+10
- 10 9 5.000e+07 31.730 243.290 3.450 7.776 2.304000e+12 7.261e+10
- 10 10 5.000e+07 35.040 270.380 3.680 7.821 2.560000e+12 7.306e+10
- 10 11 5.000e+07 38.340 297.080 4.050 7.854 2.816000e+12 7.345e+10
- 10 12 5.000e+07 41.770 323.840 4.330 7.857 3.072000e+12 7.355e+10
- 10 13 5.000e+07 45.120 351.380 4.710 7.892 3.328000e+12 7.376e+10
- 10 14 5.000e+07 48.360 377.870 4.880 7.915 3.584000e+12 7.411e+10
- 10 15 5.000e+07 51.760 404.740 5.110 7.918 3.840000e+12 7.419e+10
- 10 16 5.000e+07 55.130 431.760 5.430 7.930 4.096000e+12 7.430e+10
- 11 1 5.000e+07 5.570 30.080 1.080 5.594 2.816000e+11 5.056e+10
- 11 2 5.000e+07 9.000 60.230 1.470 6.856 5.632000e+11 6.258e+10
- 11 3 5.000e+07 12.630 89.890 1.770 7.257 8.448000e+11 6.689e+10
- 11 4 5.000e+07 16.290 119.110 2.140 7.443 1.126400e+12 6.915e+10
- 11 5 5.000e+07 19.940 148.730 2.440 7.581 1.408000e+12 7.061e+10
- 11 6 5.000e+07 23.800 178.620 2.790 7.622 1.689600e+12 7.099e+10
- 11 7 5.000e+07 27.480 208.510 3.160 7.703 1.971200e+12 7.173e+10
- 11 8 5.000e+07 31.140 237.820 3.490 7.749 2.252800e+12 7.234e+10
- 11 9 5.000e+07 34.770 267.390 3.800 7.800 2.534400e+12 7.289e+10
- 11 10 5.000e+07 38.510 297.250 4.240 7.829 2.816000e+12 7.312e+10
- 11 11 5.000e+07 42.080 326.570 4.610 7.870 3.097600e+12 7.361e+10
- 11 12 5.000e+07 45.860 356.540 4.590 7.875 3.379200e+12 7.369e+10
- 11 13 5.000e+07 49.570 386.250 5.150 7.896 3.660800e+12 7.385e+10
- 11 14 5.000e+07 53.220 415.630 5.360 7.910 3.942400e+12 7.408e+10
- 11 15 5.000e+07 57.000 445.200 5.870 7.914 4.224000e+12 7.411e+10
- 11 16 5.000e+07 60.800 474.810 6.250 7.912 4.505600e+12 7.411e+10
- 12 1 5.000e+07 5.600 32.770 1.240 6.073 3.072000e+11 5.486e+10
- 12 2 5.000e+07 10.220 65.660 1.600 6.581 6.144000e+11 6.012e+10
- 12 3 5.000e+07 13.680 97.900 2.000 7.303 9.216000e+11 6.737e+10
- 12 4 5.000e+07 17.790 129.710 2.330 7.422 1.228800e+12 6.907e+10
- 12 5 5.000e+07 21.770 162.420 2.700 7.585 1.536000e+12 7.056e+10
- 12 6 5.000e+07 25.770 194.770 3.090 7.678 1.843200e+12 7.153e+10
- 12 7 5.000e+07 29.940 227.290 3.390 7.705 2.150400e+12 7.182e+10
- 12 8 5.000e+07 34.030 259.370 3.860 7.735 2.457600e+12 7.222e+10
- 12 9 5.000e+07 38.070 291.890 4.310 7.780 2.764800e+12 7.262e+10
- 12 10 5.000e+07 42.080 324.370 4.660 7.819 3.072000e+12 7.300e+10
- 12 11 5.000e+07 45.950 356.370 5.000 7.864 3.379200e+12 7.354e+10
- 12 12 5.000e+07 49.960 388.790 5.250 7.887 3.686400e+12 7.379e+10
- 12 13 5.000e+07 54.010 422.050 5.420 7.915 3.993600e+12 7.394e+10
- 12 14 5.000e+07 58.010 453.330 6.120 7.920 4.300800e+12 7.414e+10
- 12 15 5.000e+07 62.080 485.830 6.310 7.928 4.608000e+12 7.423e+10
- 12 16 5.000e+07 66.200 518.060 6.780 7.928 4.915200e+12 7.425e+10
- 13 1 5.000e+07 5.630 35.420 1.300 6.522 3.328000e+11 5.911e+10
- 13 2 5.000e+07 10.730 71.050 1.830 6.792 6.656000e+11 6.203e+10
- 13 3 5.000e+07 14.690 105.710 2.160 7.343 9.984000e+11 6.796e+10
- 13 4 5.000e+07 19.120 140.630 2.510 7.486 1.331200e+12 6.962e+10
- 13 5 5.000e+07 23.600 175.730 3.000 7.573 1.664000e+12 7.051e+10
- 13 6 5.000e+07 27.910 211.000 3.350 7.680 1.996800e+12 7.154e+10
- 13 7 5.000e+07 32.370 246.320 3.860 7.729 2.329600e+12 7.197e+10
- 13 8 5.000e+07 36.790 281.150 4.260 7.758 2.662400e+12 7.237e+10
- 13 9 5.000e+07 41.080 316.080 4.520 7.804 2.995200e+12 7.291e+10
- 13 10 5.000e+07 45.600 352.020 5.090 7.831 3.328000e+12 7.298e+10
- 13 11 5.000e+07 49.760 386.130 5.470 7.870 3.660800e+12 7.357e+10
- 13 12 5.000e+07 54.080 421.160 5.780 7.895 3.993600e+12 7.385e+10
- 13 13 5.000e+07 58.520 455.980 6.170 7.897 4.326400e+12 7.393e+10
- 13 14 5.000e+07 63.000 491.340 6.710 7.906 4.659200e+12 7.396e+10
- 13 15 5.000e+07 67.250 525.920 6.920 7.923 4.992000e+12 7.423e+10
- 13 16 5.000e+07 72.090 560.640 7.160 7.876 5.324800e+12 7.386e+10
- 14 1 5.000e+07 5.670 38.290 1.330 6.988 3.584000e+11 6.321e+10
- 14 2 5.000e+07 10.850 75.880 1.940 7.172 7.168000e+11 6.606e+10
- 14 3 5.000e+07 15.840 114.160 2.400 7.359 1.075200e+12 6.788e+10
- 14 4 5.000e+07 20.610 151.540 2.710 7.484 1.433600e+12 6.956e+10
- 14 5 5.000e+07 25.330 189.160 3.320 7.599 1.792000e+12 7.075e+10
- 14 6 5.000e+07 30.160 227.510 3.670 7.665 2.150400e+12 7.130e+10
- 14 7 5.000e+07 34.730 265.020 3.960 7.745 2.508800e+12 7.224e+10
- 14 8 5.000e+07 39.530 302.550 4.640 7.771 2.867200e+12 7.253e+10
- 14 9 5.000e+07 44.220 340.330 5.180 7.813 3.225600e+12 7.294e+10
- 14 10 5.000e+07 48.800 378.180 5.430 7.861 3.584000e+12 7.344e+10
- 14 11 5.000e+07 53.550 415.790 5.800 7.873 3.942400e+12 7.362e+10
- 14 12 5.000e+07 58.250 453.340 6.430 7.893 4.300800e+12 7.383e+10
- 14 13 5.000e+07 63.150 492.200 6.960 7.904 4.659200e+12 7.378e+10
- 14 14 5.000e+07 67.850 528.470 6.970 7.892 5.017600e+12 7.395e+10
- 14 15 5.000e+07 72.510 566.950 7.720 7.925 5.376000e+12 7.414e+10
- 14 16 5.000e+07 77.230 604.250 8.170 7.930 5.734400e+12 7.425e+10
- 15 1 5.000e+07 5.800 41.070 1.460 7.333 3.840000e+11 6.621e+10
- 15 2 5.000e+07 11.900 80.380 2.190 6.939 7.680000e+11 6.454e+10
- 15 3 5.000e+07 16.990 121.790 2.610 7.322 1.152000e+12 6.780e+10
- 15 4 5.000e+07 22.040 162.330 3.030 7.503 1.536000e+12 6.969e+10
- 15 5 5.000e+07 27.120 202.750 3.460 7.604 1.920000e+12 7.080e+10
- 15 6 5.000e+07 32.290 243.420 3.870 7.658 2.304000e+12 7.135e+10
- 15 7 5.000e+07 37.450 284.300 4.410 7.709 2.688000e+12 7.178e+10
- 15 8 5.000e+07 42.560 323.740 4.890 7.722 3.072000e+12 7.218e+10
- 15 9 5.000e+07 47.440 364.880 5.330 7.804 3.456000e+12 7.285e+10
- 15 10 5.000e+07 52.440 405.400 5.750 7.840 3.840000e+12 7.323e+10
- 15 11 5.000e+07 57.270 445.500 6.070 7.885 4.224000e+12 7.376e+10
- 15 12 5.000e+07 62.450 485.920 6.770 7.889 4.608000e+12 7.379e+10
- 15 13 5.000e+07 67.680 527.540 7.440 7.905 4.992000e+12 7.376e+10
- 15 14 5.000e+07 72.740 566.990 7.790 7.902 5.376000e+12 7.391e+10
- 15 15 5.000e+07 77.760 607.620 8.060 7.918 5.760000e+12 7.407e+10
- 15 16 5.000e+07 82.750 647.630 8.640 7.931 6.144000e+12 7.425e+10
- 16 1 5.000e+07 6.310 43.540 1.790 7.184 4.096000e+11 6.491e+10
- 16 2 5.000e+07 12.340 87.310 2.190 7.253 8.192000e+11 6.639e+10
- 16 3 5.000e+07 17.930 130.440 2.830 7.433 1.228800e+12 6.853e+10
- 16 4 5.000e+07 23.530 173.540 3.140 7.509 1.638400e+12 6.963e+10
- 16 5 5.000e+07 28.910 216.290 3.710 7.610 2.048000e+12 7.084e+10
- 16 6 5.000e+07 34.310 259.400 4.260 7.685 2.457600e+12 7.163e+10
- 16 7 5.000e+07 39.790 302.740 4.620 7.725 2.867200e+12 7.206e+10
- 16 8 5.000e+07 44.970 346.250 5.340 7.818 3.276800e+12 7.287e+10
- 16 9 5.000e+07 50.470 388.870 5.910 7.822 3.686400e+12 7.304e+10
- 16 10 5.000e+07 55.890 432.480 6.140 7.848 4.096000e+12 7.329e+10
- 16 11 5.000e+07 61.250 475.380 6.770 7.872 4.505600e+12 7.356e+10
- 16 12 5.000e+07 66.670 518.940 7.160 7.891 4.915200e+12 7.372e+10
- 16 13 5.000e+07 72.160 562.230 7.890 7.901 5.324800e+12 7.379e+10
- 16 14 5.000e+07 77.600 604.950 8.230 7.902 5.734400e+12 7.390e+10
- 16 15 5.000e+07 82.970 648.420 8.690 7.920 6.144000e+12 7.405e+10
- 16 16 5.000e+07 88.370 690.730 9.460 7.923 6.553600e+12 7.416e+10
diff --git a/gnuradio-examples/python/mp-sched/perf-data/js21-altivec.dat b/gnuradio-examples/python/mp-sched/perf-data/js21-altivec.dat
deleted file mode 100644
index d0b8148f0..000000000
--- a/gnuradio-examples/python/mp-sched/perf-data/js21-altivec.dat
+++ /dev/null
@@ -1,65 +0,0 @@
-#D JS21 4-core PPC970M 2.5 GHz (using Altivec)
- 1 1 9.766e+07 9.820 10.210 0.360 1.076 5.000000e+10 5.092e+09
- 1 2 9.766e+07 10.620 19.890 0.640 1.933 1.000000e+11 9.416e+09
- 1 3 9.766e+07 10.310 29.590 0.610 2.929 1.500000e+11 1.455e+10
- 1 4 9.766e+07 10.440 39.290 0.680 3.829 2.000000e+11 1.916e+10
- 1 5 7.812e+07 15.730 39.150 0.590 2.526 2.000000e+11 1.271e+10
- 1 6 6.510e+07 13.100 39.080 0.590 3.028 2.000000e+11 1.527e+10
- 1 7 5.580e+07 11.550 39.030 0.500 3.423 2.000000e+11 1.732e+10
- 1 8 4.883e+07 10.410 39.010 0.510 3.796 2.000000e+11 1.921e+10
- 2 1 9.766e+07 10.080 20.070 0.700 2.061 1.000000e+11 9.921e+09
- 2 2 9.766e+07 11.360 39.650 0.960 3.575 2.000000e+11 1.761e+10
- 2 3 6.510e+07 13.120 39.270 0.740 3.050 2.000000e+11 1.524e+10
- 2 4 4.883e+07 10.410 39.110 0.650 3.819 2.000000e+11 1.921e+10
- 2 5 3.906e+07 11.030 39.080 0.610 3.598 2.000000e+11 1.813e+10
- 2 6 3.255e+07 10.640 39.020 0.560 3.720 2.000000e+11 1.880e+10
- 2 7 2.790e+07 10.510 38.980 0.550 3.761 2.000000e+11 1.903e+10
- 2 8 2.441e+07 10.440 38.970 0.570 3.787 2.000000e+11 1.916e+10
- 3 1 9.766e+07 12.130 29.970 0.920 2.547 1.500000e+11 1.237e+10
- 3 2 6.510e+07 13.100 39.300 0.920 3.070 2.000000e+11 1.527e+10
- 3 3 4.340e+07 11.400 39.200 0.760 3.505 2.000000e+11 1.754e+10
- 3 4 3.255e+07 10.730 39.100 0.690 3.708 2.000000e+11 1.864e+10
- 3 5 2.604e+07 10.470 39.010 0.620 3.785 2.000000e+11 1.910e+10
- 3 6 2.170e+07 10.380 39.010 0.620 3.818 2.000000e+11 1.927e+10
- 3 7 1.860e+07 10.280 39.120 0.580 3.862 2.000000e+11 1.946e+10
- 3 8 1.628e+07 10.230 39.000 0.600 3.871 2.000000e+11 1.955e+10
- 4 1 9.766e+07 10.700 39.990 1.540 3.881 2.000000e+11 1.869e+10
- 4 2 4.883e+07 10.530 39.260 0.940 3.818 2.000000e+11 1.899e+10
- 4 3 3.255e+07 10.840 39.140 0.760 3.681 2.000000e+11 1.845e+10
- 4 4 2.441e+07 10.530 39.040 0.680 3.772 2.000000e+11 1.899e+10
- 4 5 1.953e+07 10.380 39.030 0.650 3.823 2.000000e+11 1.927e+10
- 4 6 1.628e+07 10.310 39.020 0.650 3.848 2.000000e+11 1.940e+10
- 4 7 1.395e+07 10.160 38.980 0.620 3.898 2.000000e+11 1.969e+10
- 4 8 1.221e+07 10.150 38.990 0.580 3.899 2.000000e+11 1.970e+10
- 5 1 7.812e+07 14.750 39.780 1.470 2.797 2.000000e+11 1.356e+10
- 5 2 3.906e+07 11.350 39.240 0.950 3.541 2.000000e+11 1.762e+10
- 5 3 2.604e+07 10.720 39.120 0.800 3.724 2.000000e+11 1.866e+10
- 5 4 1.953e+07 10.440 39.060 0.730 3.811 2.000000e+11 1.916e+10
- 5 5 1.562e+07 10.410 39.060 0.690 3.818 2.000000e+11 1.921e+10
- 5 6 1.302e+07 10.260 38.970 0.650 3.862 2.000000e+11 1.949e+10
- 5 7 1.116e+07 10.270 39.020 0.650 3.863 2.000000e+11 1.947e+10
- 5 8 9.766e+06 10.130 39.010 0.660 3.916 2.000000e+11 1.974e+10
- 6 1 6.510e+07 12.850 39.730 1.450 3.205 2.000000e+11 1.556e+10
- 6 2 3.255e+07 10.700 39.300 0.990 3.765 2.000000e+11 1.869e+10
- 6 3 2.170e+07 10.770 39.110 0.810 3.707 2.000000e+11 1.857e+10
- 6 4 1.628e+07 10.570 39.090 0.750 3.769 2.000000e+11 1.892e+10
- 6 5 1.302e+07 10.310 39.040 0.690 3.854 2.000000e+11 1.940e+10
- 6 6 1.085e+07 10.260 39.030 0.700 3.872 2.000000e+11 1.949e+10
- 6 7 9.301e+06 10.170 39.020 0.680 3.904 2.000000e+11 1.967e+10
- 6 8 8.138e+06 10.150 39.020 0.670 3.910 2.000000e+11 1.970e+10
- 7 1 5.580e+07 11.440 39.730 1.500 3.604 2.000000e+11 1.748e+10
- 7 2 2.790e+07 10.950 39.260 0.990 3.676 2.000000e+11 1.826e+10
- 7 3 1.860e+07 10.620 39.140 0.860 3.766 2.000000e+11 1.883e+10
- 7 4 1.395e+07 10.420 39.070 0.750 3.821 2.000000e+11 1.919e+10
- 7 5 1.116e+07 10.290 39.040 0.710 3.863 2.000000e+11 1.944e+10
- 7 6 9.301e+06 10.200 39.040 0.720 3.898 2.000000e+11 1.961e+10
- 7 7 7.972e+06 10.210 39.020 0.670 3.887 2.000000e+11 1.959e+10
- 7 8 6.975e+06 10.160 39.020 0.650 3.905 2.000000e+11 1.969e+10
- 8 1 4.883e+07 10.870 39.950 1.520 3.815 2.000000e+11 1.840e+10
- 8 2 2.441e+07 10.690 39.270 1.000 3.767 2.000000e+11 1.871e+10
- 8 3 1.628e+07 10.540 39.130 0.860 3.794 2.000000e+11 1.898e+10
- 8 4 1.221e+07 10.410 39.110 0.790 3.833 2.000000e+11 1.921e+10
- 8 5 9.766e+06 10.230 39.040 0.710 3.886 2.000000e+11 1.955e+10
- 8 6 8.138e+06 10.260 39.050 0.700 3.874 2.000000e+11 1.949e+10
- 8 7 6.975e+06 10.220 39.100 0.690 3.893 2.000000e+11 1.957e+10
- 8 8 6.104e+06 10.170 39.020 0.650 3.901 2.000000e+11 1.967e+10
diff --git a/gnuradio-examples/python/mp-sched/perf-data/js21.dat b/gnuradio-examples/python/mp-sched/perf-data/js21.dat
deleted file mode 100644
index a23bcebe7..000000000
--- a/gnuradio-examples/python/mp-sched/perf-data/js21.dat
+++ /dev/null
@@ -1,65 +0,0 @@
-#D JS21 4-core PPC970MP 2.5 GHz
- 1 1 5.273e+07 10.050 10.180 0.290 1.042 2.700000e+10 2.687e+09
- 1 2 5.273e+07 10.240 20.210 0.260 1.999 5.400000e+10 5.273e+09
- 1 3 5.273e+07 10.300 30.090 0.340 2.954 8.100000e+10 7.864e+09
- 1 4 5.273e+07 10.490 40.120 0.490 3.871 1.080000e+11 1.030e+10
- 1 5 4.219e+07 16.010 39.900 0.380 2.516 1.080000e+11 6.746e+09
- 1 6 3.516e+07 13.360 39.920 0.370 3.016 1.080000e+11 8.084e+09
- 1 7 3.013e+07 11.510 39.900 0.330 3.495 1.080000e+11 9.383e+09
- 1 8 2.637e+07 10.420 39.880 0.320 3.858 1.080000e+11 1.036e+10
- 2 1 5.273e+07 10.370 20.340 0.470 2.007 5.400000e+10 5.207e+09
- 2 2 5.273e+07 10.320 40.080 0.550 3.937 1.080000e+11 1.047e+10
- 2 3 3.516e+07 13.340 39.990 0.470 3.033 1.080000e+11 8.096e+09
- 2 4 2.637e+07 10.480 39.970 0.400 3.852 1.080000e+11 1.031e+10
- 2 5 2.109e+07 10.910 39.920 0.390 3.695 1.080000e+11 9.899e+09
- 2 6 1.758e+07 10.610 39.860 0.360 3.791 1.080000e+11 1.018e+10
- 2 7 1.507e+07 10.520 39.890 0.360 3.826 1.080000e+11 1.027e+10
- 2 8 1.318e+07 10.470 39.980 0.350 3.852 1.080000e+11 1.032e+10
- 3 1 5.273e+07 10.230 30.320 0.600 3.022 8.100000e+10 7.918e+09
- 3 2 3.516e+07 13.250 40.050 0.560 3.065 1.080000e+11 8.151e+09
- 3 3 2.344e+07 11.160 40.010 0.470 3.627 1.080000e+11 9.677e+09
- 3 4 1.758e+07 10.710 39.950 0.420 3.769 1.080000e+11 1.008e+10
- 3 5 1.406e+07 10.520 39.920 0.400 3.833 1.080000e+11 1.027e+10
- 3 6 1.172e+07 10.420 39.880 0.380 3.864 1.080000e+11 1.036e+10
- 3 7 1.004e+07 10.340 39.880 0.370 3.893 1.080000e+11 1.044e+10
- 3 8 8.789e+06 10.380 39.960 0.380 3.886 1.080000e+11 1.040e+10
- 4 1 5.273e+07 10.570 40.390 0.890 3.905 1.080000e+11 1.022e+10
- 4 2 2.637e+07 10.690 40.020 0.560 3.796 1.080000e+11 1.010e+10
- 4 3 1.758e+07 10.790 39.980 0.480 3.750 1.080000e+11 1.001e+10
- 4 4 1.318e+07 10.570 39.950 0.430 3.820 1.080000e+11 1.022e+10
- 4 5 1.055e+07 10.440 39.950 0.420 3.867 1.080000e+11 1.034e+10
- 4 6 8.789e+06 10.340 39.900 0.420 3.899 1.080000e+11 1.044e+10
- 4 7 7.533e+06 10.290 39.870 0.410 3.914 1.080000e+11 1.050e+10
- 4 8 6.592e+06 10.270 39.950 0.390 3.928 1.080000e+11 1.052e+10
- 5 1 4.219e+07 15.110 40.290 0.830 2.721 1.080000e+11 7.148e+09
- 5 2 2.109e+07 11.240 40.000 0.580 3.610 1.080000e+11 9.609e+09
- 5 3 1.406e+07 10.710 39.970 0.490 3.778 1.080000e+11 1.008e+10
- 5 4 1.055e+07 10.490 39.980 0.460 3.855 1.080000e+11 1.030e+10
- 5 5 8.438e+06 10.430 39.940 0.440 3.872 1.080000e+11 1.035e+10
- 5 6 7.031e+06 10.280 39.890 0.420 3.921 1.080000e+11 1.051e+10
- 5 7 6.027e+06 10.290 39.870 0.400 3.914 1.080000e+11 1.050e+10
- 5 8 5.273e+06 10.290 39.940 0.400 3.920 1.080000e+11 1.050e+10
- 6 1 3.516e+07 12.880 40.250 0.850 3.191 1.080000e+11 8.385e+09
- 6 2 1.758e+07 10.730 39.980 0.580 3.780 1.080000e+11 1.007e+10
- 6 3 1.172e+07 10.740 39.980 0.490 3.768 1.080000e+11 1.006e+10
- 6 4 8.789e+06 10.510 39.940 0.460 3.844 1.080000e+11 1.028e+10
- 6 5 7.031e+06 10.430 39.920 0.450 3.871 1.080000e+11 1.035e+10
- 6 6 5.859e+06 10.300 39.910 0.430 3.917 1.080000e+11 1.049e+10
- 6 7 5.022e+06 10.290 39.870 0.420 3.915 1.080000e+11 1.050e+10
- 6 8 4.395e+06 10.300 39.950 0.420 3.919 1.080000e+11 1.049e+10
- 7 1 3.013e+07 11.240 40.270 0.860 3.659 1.080000e+11 9.609e+09
- 7 2 1.507e+07 11.040 40.000 0.590 3.677 1.080000e+11 9.783e+09
- 7 3 1.004e+07 10.660 39.970 0.520 3.798 1.080000e+11 1.013e+10
- 7 4 7.533e+06 10.430 39.930 0.470 3.873 1.080000e+11 1.035e+10
- 7 5 6.027e+06 10.390 39.920 0.470 3.887 1.080000e+11 1.039e+10
- 7 6 5.022e+06 10.320 39.910 0.430 3.909 1.080000e+11 1.047e+10
- 7 7 4.305e+06 10.330 39.890 0.420 3.902 1.080000e+11 1.045e+10
- 7 8 3.767e+06 10.300 39.930 0.420 3.917 1.080000e+11 1.049e+10
- 8 1 2.637e+07 10.530 40.290 0.910 3.913 1.080000e+11 1.026e+10
- 8 2 1.318e+07 10.850 40.040 0.610 3.747 1.080000e+11 9.954e+09
- 8 3 8.789e+06 10.500 39.960 0.540 3.857 1.080000e+11 1.029e+10
- 8 4 6.592e+06 10.490 39.960 0.500 3.857 1.080000e+11 1.030e+10
- 8 5 5.273e+06 10.330 39.930 0.480 3.912 1.080000e+11 1.045e+10
- 8 6 4.395e+06 10.340 39.900 0.450 3.902 1.080000e+11 1.044e+10
- 8 7 3.767e+06 10.260 39.900 0.430 3.931 1.080000e+11 1.053e+10
- 8 8 3.296e+06 10.250 39.960 0.430 3.940 1.080000e+11 1.054e+10
diff --git a/gnuradio-examples/python/mp-sched/perf-data/ps3-altivec.dat b/gnuradio-examples/python/mp-sched/perf-data/ps3-altivec.dat
deleted file mode 100644
index dd01b31bd..000000000
--- a/gnuradio-examples/python/mp-sched/perf-data/ps3-altivec.dat
+++ /dev/null
@@ -1,65 +0,0 @@
-#D Playstation 3 (using Altivec)
- 1 1 3.906e+07 10.500 10.580 0.440 1.050 2.000000e+10 1.905e+09
- 1 2 1.953e+07 7.010 13.200 0.400 1.940 2.000000e+10 2.853e+09
- 1 3 1.302e+07 7.540 13.140 0.380 1.793 2.000000e+10 2.653e+09
- 1 4 9.766e+06 7.200 13.620 0.370 1.943 2.000000e+10 2.778e+09
- 1 5 7.812e+06 7.170 13.670 0.340 1.954 2.000000e+10 2.789e+09
- 1 6 6.510e+06 7.010 13.590 0.320 1.984 2.000000e+10 2.853e+09
- 1 7 5.580e+06 6.990 13.530 0.330 1.983 2.000000e+10 2.861e+09
- 1 8 4.883e+06 6.980 13.490 0.320 1.979 2.000000e+10 2.865e+09
- 2 1 1.953e+07 8.110 14.730 0.530 1.882 2.000000e+10 2.466e+09
- 2 2 9.766e+06 7.090 13.570 0.420 1.973 2.000000e+10 2.821e+09
- 2 3 6.510e+06 7.040 13.590 0.410 1.989 2.000000e+10 2.841e+09
- 2 4 4.883e+06 6.990 13.490 0.370 1.983 2.000000e+10 2.861e+09
- 2 5 3.906e+06 6.970 13.480 0.360 1.986 2.000000e+10 2.869e+09
- 2 6 3.255e+06 6.990 13.530 0.370 1.989 2.000000e+10 2.861e+09
- 2 7 2.790e+06 6.890 13.390 0.350 1.994 2.000000e+10 2.903e+09
- 2 8 2.441e+06 6.880 13.380 0.350 1.996 2.000000e+10 2.907e+09
- 3 1 1.302e+07 8.220 13.720 0.510 1.731 2.000000e+10 2.433e+09
- 3 2 6.510e+06 7.050 13.480 0.450 1.976 2.000000e+10 2.837e+09
- 3 3 4.340e+06 6.990 13.460 0.400 1.983 2.000000e+10 2.861e+09
- 3 4 3.255e+06 6.990 13.550 0.380 1.993 2.000000e+10 2.861e+09
- 3 5 2.604e+06 6.920 13.430 0.360 1.993 1.999999e+10 2.890e+09
- 3 6 2.170e+06 6.940 13.460 0.360 1.991 1.999999e+10 2.882e+09
- 3 7 1.860e+06 6.920 13.440 0.360 1.994 2.000000e+10 2.890e+09
- 3 8 1.628e+06 6.890 13.380 0.350 1.993 2.000000e+10 2.903e+09
- 4 1 9.766e+06 7.620 14.550 0.590 1.987 2.000000e+10 2.625e+09
- 4 2 4.883e+06 7.010 13.460 0.440 1.983 2.000000e+10 2.853e+09
- 4 3 3.255e+06 7.040 13.580 0.410 1.987 2.000000e+10 2.841e+09
- 4 4 2.441e+06 6.960 13.470 0.390 1.991 2.000000e+10 2.874e+09
- 4 5 1.953e+06 6.920 13.410 0.370 1.991 2.000000e+10 2.890e+09
- 4 6 1.628e+06 6.950 13.490 0.370 1.994 2.000000e+10 2.878e+09
- 4 7 1.395e+06 6.890 13.350 0.370 1.991 2.000000e+10 2.903e+09
- 4 8 1.221e+06 6.940 13.490 0.360 1.996 2.000000e+10 2.882e+09
- 5 1 7.812e+06 7.680 14.000 0.560 1.896 2.000000e+10 2.604e+09
- 5 2 3.906e+06 7.070 13.460 0.460 1.969 2.000000e+10 2.829e+09
- 5 3 2.604e+06 6.990 13.430 0.420 1.981 1.999999e+10 2.861e+09
- 5 4 1.953e+06 7.010 13.550 0.390 1.989 2.000000e+10 2.853e+09
- 5 5 1.562e+06 6.920 13.430 0.380 1.996 2.000000e+10 2.890e+09
- 5 6 1.302e+06 6.920 13.410 0.380 1.993 1.999999e+10 2.890e+09
- 5 7 1.116e+06 6.920 13.420 0.370 1.993 1.999999e+10 2.890e+09
- 5 8 9.766e+05 6.910 13.360 0.370 1.987 1.999999e+10 2.894e+09
- 6 1 6.510e+06 7.350 13.970 0.630 1.986 2.000000e+10 2.721e+09
- 6 2 3.255e+06 7.040 13.470 0.470 1.980 2.000000e+10 2.841e+09
- 6 3 2.170e+06 7.050 13.600 0.420 1.989 1.999999e+10 2.837e+09
- 6 4 1.628e+06 6.970 13.480 0.400 1.991 2.000000e+10 2.869e+09
- 6 5 1.302e+06 6.990 13.540 0.390 1.993 1.999999e+10 2.861e+09
- 6 6 1.085e+06 6.970 13.470 0.380 1.987 1.999999e+10 2.869e+09
- 6 7 9.301e+05 6.890 13.350 0.380 1.993 1.999999e+10 2.903e+09
- 6 8 8.138e+05 6.920 13.420 0.370 1.993 2.000000e+10 2.890e+09
- 7 1 5.580e+06 7.530 14.030 0.580 1.940 2.000000e+10 2.656e+09
- 7 2 2.790e+06 7.000 13.370 0.460 1.976 2.000000e+10 2.857e+09
- 7 3 1.860e+06 7.000 13.520 0.420 1.991 2.000000e+10 2.857e+09
- 7 4 1.395e+06 7.060 13.590 0.410 1.983 2.000000e+10 2.833e+09
- 7 5 1.116e+06 6.950 13.460 0.390 1.993 1.999999e+10 2.878e+09
- 7 6 9.301e+05 6.950 13.420 0.380 1.986 1.999999e+10 2.878e+09
- 7 7 7.972e+05 6.880 13.300 0.380 1.988 1.999998e+10 2.907e+09
- 7 8 6.975e+05 6.920 13.390 0.380 1.990 1.999998e+10 2.890e+09
- 8 1 4.883e+06 7.440 14.150 0.620 1.985 2.000000e+10 2.688e+09
- 8 2 2.441e+06 6.990 13.400 0.480 1.986 2.000000e+10 2.861e+09
- 8 3 1.628e+06 6.990 13.460 0.430 1.987 2.000000e+10 2.861e+09
- 8 4 1.221e+06 7.020 13.550 0.410 1.989 2.000000e+10 2.849e+09
- 8 5 9.766e+05 6.920 13.370 0.390 1.988 1.999999e+10 2.890e+09
- 8 6 8.138e+05 6.950 13.400 0.390 1.984 2.000000e+10 2.878e+09
- 8 7 6.975e+05 6.930 13.360 0.390 1.984 1.999998e+10 2.886e+09
- 8 8 6.104e+05 6.920 13.390 0.380 1.990 1.999998e+10 2.890e+09
diff --git a/gnuradio-examples/python/mp-sched/perf-data/ps3.dat b/gnuradio-examples/python/mp-sched/perf-data/ps3.dat
deleted file mode 100644
index c9bac37cc..000000000
--- a/gnuradio-examples/python/mp-sched/perf-data/ps3.dat
+++ /dev/null
@@ -1,65 +0,0 @@
-#D Playstation 3
- 1 1 2.344e+07 9.970 9.960 0.280 1.027 1.200000e+10 1.204e+09
- 1 2 1.172e+07 12.590 24.430 0.400 1.972 1.200000e+10 9.531e+08
- 1 3 7.812e+06 12.200 22.790 0.360 1.898 1.200000e+10 9.836e+08
- 1 4 5.859e+06 12.450 24.440 0.360 1.992 1.200000e+10 9.639e+08
- 1 5 4.688e+06 12.390 24.100 0.360 1.974 1.200000e+10 9.685e+08
- 1 6 3.906e+06 12.360 24.200 0.370 1.988 1.200000e+10 9.709e+08
- 1 7 3.348e+06 12.460 24.390 0.360 1.986 1.200000e+10 9.631e+08
- 1 8 2.930e+06 12.440 24.400 0.360 1.990 1.200000e+10 9.646e+08
- 2 1 1.172e+07 12.580 24.660 0.490 1.999 1.200000e+10 9.539e+08
- 2 2 5.859e+06 12.480 24.290 0.420 1.980 1.200000e+10 9.615e+08
- 2 3 3.906e+06 12.500 24.500 0.400 1.992 1.200000e+10 9.600e+08
- 2 4 2.930e+06 12.440 24.400 0.390 1.993 1.200000e+10 9.646e+08
- 2 5 2.344e+06 12.500 24.510 0.380 1.991 1.200000e+10 9.600e+08
- 2 6 1.953e+06 12.450 24.480 0.380 1.997 1.200000e+10 9.639e+08
- 2 7 1.674e+06 12.450 24.430 0.380 1.993 1.200000e+10 9.639e+08
- 2 8 1.465e+06 12.430 24.450 0.380 1.998 1.199999e+10 9.654e+08
- 3 1 7.812e+06 12.280 23.600 0.460 1.959 1.200000e+10 9.772e+08
- 3 2 3.906e+06 12.690 24.760 0.430 1.985 1.200000e+10 9.456e+08
- 3 3 2.604e+06 12.610 24.700 0.410 1.991 1.200000e+10 9.516e+08
- 3 4 1.953e+06 12.440 24.410 0.400 1.994 1.200000e+10 9.646e+08
- 3 5 1.562e+06 12.400 24.370 0.380 1.996 1.200000e+10 9.677e+08
- 3 6 1.302e+06 12.440 24.450 0.380 1.996 1.200000e+10 9.646e+08
- 3 7 1.116e+06 12.470 24.470 0.380 1.993 1.200000e+10 9.623e+08
- 3 8 9.766e+05 12.440 24.440 0.380 1.995 1.199999e+10 9.646e+08
- 4 1 5.859e+06 12.670 24.710 0.500 1.990 1.200000e+10 9.471e+08
- 4 2 2.930e+06 12.600 24.600 0.440 1.987 1.200000e+10 9.524e+08
- 4 3 1.953e+06 12.490 24.480 0.410 1.993 1.200000e+10 9.608e+08
- 4 4 1.465e+06 12.400 24.340 0.400 1.995 1.199999e+10 9.677e+08
- 4 5 1.172e+06 12.440 24.410 0.390 1.994 1.200000e+10 9.646e+08
- 4 6 9.766e+05 12.440 24.440 0.390 1.996 1.199999e+10 9.646e+08
- 4 7 8.371e+05 12.450 24.420 0.390 1.993 1.199999e+10 9.639e+08
- 4 8 7.324e+05 12.370 24.310 0.380 1.996 1.199999e+10 9.701e+08
- 5 1 4.688e+06 12.890 24.790 0.500 1.962 1.200000e+10 9.310e+08
- 5 2 2.344e+06 12.620 24.680 0.450 1.991 1.200000e+10 9.509e+08
- 5 3 1.562e+06 12.430 24.360 0.410 1.993 1.200000e+10 9.654e+08
- 5 4 1.172e+06 12.420 24.390 0.410 1.997 1.200000e+10 9.662e+08
- 5 5 9.375e+05 12.430 24.380 0.400 1.994 1.200000e+10 9.654e+08
- 5 6 7.812e+05 12.400 24.340 0.400 1.995 1.200000e+10 9.677e+08
- 5 7 6.696e+05 12.360 24.290 0.390 1.997 1.199998e+10 9.709e+08
- 5 8 5.859e+05 12.420 24.370 0.390 1.994 1.199999e+10 9.662e+08
- 6 1 3.906e+06 12.990 25.320 0.560 1.992 1.200000e+10 9.238e+08
- 6 2 1.953e+06 12.610 24.550 0.440 1.982 1.200000e+10 9.516e+08
- 6 3 1.302e+06 12.520 24.310 0.420 1.975 1.200000e+10 9.585e+08
- 6 4 9.766e+05 12.460 24.310 0.420 1.985 1.199999e+10 9.631e+08
- 6 5 7.812e+05 12.440 24.240 0.410 1.982 1.200000e+10 9.646e+08
- 6 6 6.510e+05 12.430 24.170 0.410 1.977 1.199999e+10 9.654e+08
- 6 7 5.580e+05 12.450 24.230 0.410 1.979 1.199998e+10 9.639e+08
- 6 8 4.883e+05 12.490 24.190 0.420 1.970 1.199999e+10 9.608e+08
- 7 1 3.348e+06 13.150 24.280 0.500 1.884 1.200000e+10 9.125e+08
- 7 2 1.674e+06 12.480 24.170 0.430 1.971 1.200000e+10 9.615e+08
- 7 3 1.116e+06 12.480 24.430 0.440 1.993 1.200000e+10 9.615e+08
- 7 4 8.371e+05 12.380 24.270 0.420 1.994 1.199999e+10 9.693e+08
- 7 5 6.696e+05 12.390 24.290 0.430 1.995 1.199998e+10 9.685e+08
- 7 6 5.580e+05 12.430 24.300 0.430 1.990 1.199998e+10 9.654e+08
- 7 7 4.783e+05 12.460 24.360 0.430 1.990 1.199999e+10 9.631e+08
- 7 8 4.185e+05 12.460 24.340 0.430 1.988 1.199998e+10 9.631e+08
- 8 1 2.930e+06 12.960 24.600 0.530 1.939 1.200000e+10 9.259e+08
- 8 2 1.465e+06 12.580 24.240 0.440 1.962 1.199999e+10 9.539e+08
- 8 3 9.766e+05 12.520 24.060 0.430 1.956 1.199999e+10 9.585e+08
- 8 4 7.324e+05 12.420 24.200 0.410 1.981 1.199999e+10 9.662e+08
- 8 5 5.859e+05 12.430 24.310 0.430 1.990 1.199999e+10 9.654e+08
- 8 6 4.883e+05 12.430 24.130 0.420 1.975 1.199999e+10 9.654e+08
- 8 7 4.185e+05 12.800 24.220 0.490 1.930 1.199998e+10 9.375e+08
- 8 8 3.662e+05 12.460 24.340 0.430 1.988 1.199997e+10 9.631e+08
diff --git a/gnuradio-examples/python/mp-sched/perf-data/qs21-altivec.dat b/gnuradio-examples/python/mp-sched/perf-data/qs21-altivec.dat
deleted file mode 100644
index 8364be363..000000000
--- a/gnuradio-examples/python/mp-sched/perf-data/qs21-altivec.dat
+++ /dev/null
@@ -1,65 +0,0 @@
-#D QS21 dual cell 3.2 GHz (using Altivec)
- 1 1 3.516e+07 9.810 10.240 0.430 1.088 1.800000e+10 1.835e+09
- 1 2 3.516e+07 11.650 22.840 0.750 2.025 3.600000e+10 3.090e+09
- 1 3 2.344e+07 9.400 24.860 0.680 2.717 3.600000e+10 3.830e+09
- 1 4 1.758e+07 7.800 26.820 0.740 3.533 3.600000e+10 4.615e+09
- 1 5 1.406e+07 8.810 25.970 0.760 3.034 3.600000e+10 4.086e+09
- 1 6 1.172e+07 8.110 25.710 0.740 3.261 3.600000e+10 4.439e+09
- 1 7 1.004e+07 7.750 26.020 0.710 3.449 3.600000e+10 4.645e+09
- 1 8 8.789e+06 7.290 26.600 0.690 3.743 3.600000e+10 4.938e+09
- 2 1 3.516e+07 10.130 20.690 0.770 2.118 3.600000e+10 3.554e+09
- 2 2 1.758e+07 7.240 26.820 0.920 3.831 3.600000e+10 4.972e+09
- 2 3 1.172e+07 8.090 26.670 0.840 3.400 3.600000e+10 4.450e+09
- 2 4 8.789e+06 7.480 27.010 0.790 3.717 3.600000e+10 4.813e+09
- 2 5 7.031e+06 7.180 26.530 0.740 3.798 3.600000e+10 5.014e+09
- 2 6 5.859e+06 7.060 26.590 0.730 3.870 3.600000e+10 5.099e+09
- 2 7 5.022e+06 7.040 26.610 0.740 3.885 3.600000e+10 5.114e+09
- 2 8 4.395e+06 7.090 27.020 0.730 3.914 3.600000e+10 5.078e+09
- 3 1 2.344e+07 9.670 25.850 1.020 2.779 3.600000e+10 3.723e+09
- 3 2 1.172e+07 7.700 25.940 0.930 3.490 3.600000e+10 4.675e+09
- 3 3 7.812e+06 7.290 26.760 0.830 3.785 3.600000e+10 4.938e+09
- 3 4 5.859e+06 7.210 26.900 0.800 3.842 3.600000e+10 4.993e+09
- 3 5 4.688e+06 7.060 26.690 0.770 3.890 3.600000e+10 5.099e+09
- 3 6 3.906e+06 7.060 26.830 0.810 3.915 3.600000e+10 5.099e+09
- 3 7 3.348e+06 6.960 26.680 0.780 3.945 3.600000e+10 5.172e+09
- 3 8 2.930e+06 6.960 26.600 0.770 3.932 3.599999e+10 5.172e+09
- 4 1 1.758e+07 7.640 28.700 1.250 3.920 3.600000e+10 4.712e+09
- 4 2 8.789e+06 7.230 26.640 0.940 3.815 3.600000e+10 4.979e+09
- 4 3 5.859e+06 7.200 26.800 0.860 3.842 3.600000e+10 5.000e+09
- 4 4 4.395e+06 7.110 26.900 0.840 3.902 3.600000e+10 5.063e+09
- 4 5 3.516e+06 7.020 26.680 0.800 3.915 3.600000e+10 5.128e+09
- 4 6 2.930e+06 6.950 26.700 0.800 3.957 3.599999e+10 5.180e+09
- 4 7 2.511e+06 6.930 26.590 0.800 3.952 3.599999e+10 5.195e+09
- 4 8 2.197e+06 6.960 26.570 0.790 3.931 3.599999e+10 5.172e+09
- 5 1 1.406e+07 8.730 26.540 1.190 3.176 3.600000e+10 4.124e+09
- 5 2 7.031e+06 7.270 26.450 0.960 3.770 3.600000e+10 4.952e+09
- 5 3 4.688e+06 7.100 26.630 0.880 3.875 3.600000e+10 5.070e+09
- 5 4 3.516e+06 7.050 26.700 0.850 3.908 3.600000e+10 5.106e+09
- 5 5 2.812e+06 6.970 26.610 0.830 3.937 3.600000e+10 5.165e+09
- 5 6 2.344e+06 6.980 26.710 0.840 3.947 3.600000e+10 5.158e+09
- 5 7 2.009e+06 6.900 26.470 0.800 3.952 3.599999e+10 5.217e+09
- 5 8 1.758e+06 6.940 26.580 0.820 3.948 3.599999e+10 5.187e+09
- 6 1 1.172e+07 8.200 26.510 1.190 3.378 3.600000e+10 4.390e+09
- 6 2 5.859e+06 7.210 26.590 0.970 3.822 3.600000e+10 4.993e+09
- 6 3 3.906e+06 7.070 26.580 0.910 3.888 3.600000e+10 5.092e+09
- 6 4 2.930e+06 7.090 26.750 0.860 3.894 3.599999e+10 5.078e+09
- 6 5 2.344e+06 7.040 26.830 0.830 3.929 3.600000e+10 5.114e+09
- 6 6 1.953e+06 6.960 26.600 0.830 3.941 3.600000e+10 5.172e+09
- 6 7 1.674e+06 6.940 26.500 0.810 3.935 3.600000e+10 5.187e+09
- 6 8 1.465e+06 6.940 26.540 0.830 3.944 3.599998e+10 5.187e+09
- 7 1 1.004e+07 7.730 26.940 1.190 3.639 3.600000e+10 4.657e+09
- 7 2 5.022e+06 7.240 26.600 0.980 3.809 3.600000e+10 4.972e+09
- 7 3 3.348e+06 7.120 26.680 0.930 3.878 3.600000e+10 5.056e+09
- 7 4 2.511e+06 7.070 26.840 0.890 3.922 3.599999e+10 5.092e+09
- 7 5 2.009e+06 6.980 26.570 0.850 3.928 3.599999e+10 5.158e+09
- 7 6 1.674e+06 6.950 26.530 0.840 3.938 3.600000e+10 5.180e+09
- 7 7 1.435e+06 6.940 26.570 0.860 3.952 3.599998e+10 5.187e+09
- 7 8 1.256e+06 6.980 26.590 0.840 3.930 3.599999e+10 5.158e+09
- 8 1 8.789e+06 7.570 27.360 1.260 3.781 3.600000e+10 4.756e+09
- 8 2 4.395e+06 7.130 26.460 0.980 3.849 3.600000e+10 5.049e+09
- 8 3 2.930e+06 7.060 26.680 0.920 3.909 3.599999e+10 5.099e+09
- 8 4 2.197e+06 7.040 26.670 0.880 3.913 3.599999e+10 5.114e+09
- 8 5 1.758e+06 6.970 26.600 0.860 3.940 3.599999e+10 5.165e+09
- 8 6 1.465e+06 6.940 26.490 0.840 3.938 3.599998e+10 5.187e+09
- 8 7 1.256e+06 6.980 26.630 0.850 3.937 3.599999e+10 5.158e+09
- 8 8 1.099e+06 7.010 26.820 0.860 3.949 3.599997e+10 5.136e+09
diff --git a/gnuradio-examples/python/mp-sched/perf-data/qs21.dat b/gnuradio-examples/python/mp-sched/perf-data/qs21.dat
deleted file mode 100644
index cc628740a..000000000
--- a/gnuradio-examples/python/mp-sched/perf-data/qs21.dat
+++ /dev/null
@@ -1,65 +0,0 @@
-#D QS21 dual cell 3.2 GHz
- 1 1 1.953e+07 8.480 8.730 0.270 1.061 1.000000e+10 1.179e+09
- 1 2 1.953e+07 8.750 17.210 0.460 2.019 2.000000e+10 2.286e+09
- 1 3 1.302e+07 12.390 29.530 0.540 2.427 2.000000e+10 1.614e+09
- 1 4 9.766e+06 10.120 31.500 0.590 3.171 2.000000e+10 1.976e+09
- 1 5 7.812e+06 10.200 31.350 0.610 3.133 2.000000e+10 1.961e+09
- 1 6 6.510e+06 9.520 31.690 0.590 3.391 2.000000e+10 2.101e+09
- 1 7 5.580e+06 9.430 32.610 0.600 3.522 2.000000e+10 2.121e+09
- 1 8 4.883e+06 9.400 34.160 0.620 3.700 2.000000e+10 2.128e+09
- 2 1 1.953e+07 8.800 17.750 0.500 2.074 2.000000e+10 2.273e+09
- 2 2 9.766e+06 8.990 28.900 0.640 3.286 2.000000e+10 2.225e+09
- 2 3 6.510e+06 9.390 32.450 0.660 3.526 2.000000e+10 2.130e+09
- 2 4 4.883e+06 9.220 34.450 0.660 3.808 2.000000e+10 2.169e+09
- 2 5 3.906e+06 9.180 34.730 0.650 3.854 2.000000e+10 2.179e+09
- 2 6 3.255e+06 9.150 34.960 0.650 3.892 2.000000e+10 2.186e+09
- 2 7 2.790e+06 9.140 35.290 0.650 3.932 2.000000e+10 2.188e+09
- 2 8 2.441e+06 9.080 35.240 0.650 3.953 2.000000e+10 2.203e+09
- 3 1 1.302e+07 11.720 28.890 0.740 2.528 2.000000e+10 1.706e+09
- 3 2 6.510e+06 9.390 32.700 0.730 3.560 2.000000e+10 2.130e+09
- 3 3 4.340e+06 9.150 33.930 0.690 3.784 2.000000e+10 2.186e+09
- 3 4 3.255e+06 9.040 34.650 0.680 3.908 2.000000e+10 2.212e+09
- 3 5 2.604e+06 9.090 34.990 0.680 3.924 1.999999e+10 2.200e+09
- 3 6 2.170e+06 9.050 34.870 0.670 3.927 1.999999e+10 2.210e+09
- 3 7 1.860e+06 9.010 34.850 0.660 3.941 2.000000e+10 2.220e+09
- 3 8 1.628e+06 8.980 34.860 0.670 3.957 2.000000e+10 2.227e+09
- 4 1 9.766e+06 9.000 34.680 0.940 3.958 2.000000e+10 2.222e+09
- 4 2 4.883e+06 9.020 34.180 0.740 3.871 2.000000e+10 2.217e+09
- 4 3 3.255e+06 9.150 34.640 0.710 3.863 2.000000e+10 2.186e+09
- 4 4 2.441e+06 9.010 34.780 0.690 3.937 2.000000e+10 2.220e+09
- 4 5 1.953e+06 8.980 34.680 0.690 3.939 2.000000e+10 2.227e+09
- 4 6 1.628e+06 9.050 35.120 0.690 3.957 2.000000e+10 2.210e+09
- 4 7 1.395e+06 9.010 34.900 0.670 3.948 2.000000e+10 2.220e+09
- 4 8 1.221e+06 8.960 34.900 0.680 3.971 2.000000e+10 2.232e+09
- 5 1 7.812e+06 10.150 31.760 0.840 3.212 2.000000e+10 1.970e+09
- 5 2 3.906e+06 9.090 34.040 0.750 3.827 2.000000e+10 2.200e+09
- 5 3 2.604e+06 9.030 34.650 0.720 3.917 1.999999e+10 2.215e+09
- 5 4 1.953e+06 8.990 34.610 0.700 3.928 2.000000e+10 2.225e+09
- 5 5 1.562e+06 9.000 34.920 0.700 3.958 2.000000e+10 2.222e+09
- 5 6 1.302e+06 9.120 35.370 0.690 3.954 1.999999e+10 2.193e+09
- 5 7 1.116e+06 8.910 34.680 0.690 3.970 1.999999e+10 2.245e+09
- 5 8 9.766e+05 8.930 34.790 0.680 3.972 1.999999e+10 2.240e+09
- 6 1 6.510e+06 9.390 31.810 0.840 3.477 2.000000e+10 2.130e+09
- 6 2 3.255e+06 9.000 34.320 0.760 3.898 2.000000e+10 2.222e+09
- 6 3 2.170e+06 8.960 34.310 0.740 3.912 1.999999e+10 2.232e+09
- 6 4 1.628e+06 8.970 34.640 0.730 3.943 2.000000e+10 2.230e+09
- 6 5 1.302e+06 9.110 35.360 0.710 3.959 1.999999e+10 2.195e+09
- 6 6 1.085e+06 8.970 34.750 0.710 3.953 1.999999e+10 2.230e+09
- 6 7 9.301e+05 8.950 34.710 0.700 3.956 1.999999e+10 2.235e+09
- 6 8 8.138e+05 8.920 34.570 0.710 3.955 2.000000e+10 2.242e+09
- 7 1 5.580e+06 9.290 32.840 0.870 3.629 2.000000e+10 2.153e+09
- 7 2 2.790e+06 9.040 34.400 0.770 3.890 2.000000e+10 2.212e+09
- 7 3 1.860e+06 8.940 34.380 0.740 3.928 2.000000e+10 2.237e+09
- 7 4 1.395e+06 8.990 34.820 0.730 3.954 2.000000e+10 2.225e+09
- 7 5 1.116e+06 8.990 34.820 0.720 3.953 1.999999e+10 2.225e+09
- 7 6 9.301e+05 8.940 34.720 0.720 3.964 1.999999e+10 2.237e+09
- 7 7 7.972e+05 8.930 34.700 0.710 3.965 1.999998e+10 2.240e+09
- 7 8 6.975e+05 8.910 34.510 0.700 3.952 1.999998e+10 2.245e+09
- 8 1 4.883e+06 9.070 33.770 0.910 3.824 2.000000e+10 2.205e+09
- 8 2 2.441e+06 9.000 34.340 0.780 3.902 2.000000e+10 2.222e+09
- 8 3 1.628e+06 8.990 34.510 0.740 3.921 2.000000e+10 2.225e+09
- 8 4 1.221e+06 8.980 34.650 0.740 3.941 2.000000e+10 2.227e+09
- 8 5 9.766e+05 8.960 34.700 0.720 3.953 1.999999e+10 2.232e+09
- 8 6 8.138e+05 8.920 34.680 0.710 3.967 2.000000e+10 2.242e+09
- 8 7 6.975e+05 8.900 34.580 0.720 3.966 1.999998e+10 2.247e+09
- 8 8 6.104e+05 8.930 34.590 0.710 3.953 1.999998e+10 2.240e+09
diff --git a/gnuradio-examples/python/mp-sched/plot_flops.py b/gnuradio-examples/python/mp-sched/plot_flops.py
deleted file mode 100755
index b3f819397..000000000
--- a/gnuradio-examples/python/mp-sched/plot_flops.py
+++ /dev/null
@@ -1,98 +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 this program; if not, write to the Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-
-"""
-Reads output from run_synthetic.py and runs gnuplot showing
-GFLOPS as f(npipes, nstages)
-"""
-
-import re
-import sys
-import os
-import tempfile
-from optparse import OptionParser
-
-
-def parse_file(input_filename, output):
- last = None
- desc = ''
- for line in open(input_filename, 'r'):
- s = line.strip()
- if s.startswith('>>>'): # ignore ">>> using SSE cruft"
- continue
-
- if s.startswith('#D'): # machine description
- desc = s[2:].strip()
- continue
-
- fields = s.split()
- npipes, nstages, flops = fields[0], fields[1], fields[8]
-
- if last is not None and npipes != last:
- output.write('\n')
- last = npipes
-
- output.write(' '.join((npipes, nstages, flops)))
- output.write('\n')
-
- output.flush()
- return desc
-
-
-def handle_file(input_filename):
- cmd_file = tempfile.NamedTemporaryFile(mode='w+', prefix='pf', suffix='.cmd')
- cmd_file_name = cmd_file.name
- data_file = tempfile.NamedTemporaryFile(mode='w+', prefix='pf', suffix='.dat')
- data_file_name = data_file.name
- desc = parse_file(input_filename, data_file)
- if len(desc) > 0:
- cmd_file.write("set title '%s'\n" % (desc,))
- cmd_file.write("set xlabel 'N pipes'\n")
- cmd_file.write("set ylabel 'N stages'\n")
- cmd_file.write("set zlabel 'GFLOPS'\n")
- cmd_file.write("set key off\n")
- cmd_file.write("set view 60, 312\n")
- cmd_file.write("set pm3d\n")
- cmd_file.write("splot '%s' using 1:2:($3*1e-9) with pm3d at b, '%s' using 1:2:($3*1e-9) with pm3d\n" % (
- data_file_name, data_file_name))
-
- cmd_file.flush()
- data_file.flush()
-
- os.system("gnuplot " + cmd_file_name + " -")
-
- #sys.stdout.write(open(cmd_file_name,'r').read())
- #sys.stdout.write(open(data_file_name,'r').read())
-
-
-def main():
- usage = "usage: %prog [options] file.dat"
- parser = OptionParser(usage=usage)
- (options, args) = parser.parse_args()
- if len(args) != 1:
- parser.print_help()
- raise SystemExit, 1
-
- handle_file(args[0])
-
-
-if __name__ == '__main__':
- main()
diff --git a/gnuradio-examples/python/mp-sched/run_synthetic.py b/gnuradio-examples/python/mp-sched/run_synthetic.py
deleted file mode 100755
index 565e6c5c7..000000000
--- a/gnuradio-examples/python/mp-sched/run_synthetic.py
+++ /dev/null
@@ -1,101 +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 this program; if not, write to the Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-
-"""
-Run synthetic.py for npipes in [1,16], nstages in [1,16]
-"""
-
-import re
-import sys
-import os
-import tempfile
-from optparse import OptionParser
-
-
-def write_shell_script(f, data_filename, description, ncores, gflops, max_pipes_and_stages):
- """
- f is the file to write the script to
- data_filename is the where the data ends up
- description describes the machine
- ncores is the number of cores (used to size the workload)
- gflops is the estimated GFLOPS per core (used to size the workload)
- """
-
- f.write("#!/bin/sh\n")
- f.write("(\n")
- if description:
- f.write("echo '#D %s'\n" % (description,))
-
- for npipes in range(1, max_pipes_and_stages + 1):
- for nstages in range(1, max_pipes_and_stages + 1):
- # We'd like each run of synthetic to take ~10 seconds
- desired_time_per_run = 10
- est_gflops_avail = min(nstages * npipes, ncores) * gflops
- nsamples = (est_gflops_avail * desired_time_per_run)/(512.0 * nstages * npipes)
- nsamples = int(nsamples * 1e9)
-
- cmd = "./synthetic.py -m -s %d -p %d -N %d\n" % (nstages, npipes, nsamples)
- f.write(cmd)
- f.write('if test $? -ge 128; then exit 128; fi\n')
-
- f.write(") 2>&1 | grep --line-buffered -v '^>>>' | tee %s\n" % (data_filename,))
- f.flush()
-
-
-
-def main():
- description = """%prog gathers multiprocessor scaling data using the ./synthetic.py benchmark.
-All combinations of npipes and nstages between 1 and --max-pipes-and-stages are tried.
-The -n and -f options provides hints used to size the workload. We'd like each run
-of synthetic to take about 10 seconds. For the full 16x16 case this results in a
-total runtime of about 43 minutes, assuming that your values for -n and -f are reasonable.
-For x86 machines, assume 3 FLOPS per processor Hz. E.g., 3 GHz machine -> 9 GFLOPS.
-plot_flops.py will make pretty graphs from the output data generated by %prog.
-"""
- usage = "usage: %prog [options] output.dat"
- parser = OptionParser(usage=usage, description=description)
- parser.add_option("-d", "--description", metavar="DESC",
- help="machine description, e.g., \"Dual quad-core Xeon 3 GHz\"", default=None)
- parser.add_option("-n", "--ncores", type="int", default=1,
- help="number of processor cores [default=%default]")
- parser.add_option("-g", "--gflops", metavar="GFLOPS", type="float", default=3.0,
- help="estimated GFLOPS per core [default=%default]")
- parser.add_option("-m", "--max-pipes-and-stages", metavar="MAX", type="int", default=16,
- help="maximum number of pipes and stages to use [default=%default]")
- (options, args) = parser.parse_args()
- if len(args) != 1:
- parser.print_help()
- raise SystemExit, 1
-
- output_filename = args[0]
-
- shell = os.popen("/bin/sh", "w")
-
- write_shell_script(shell,
- output_filename,
- options.description,
- options.ncores,
- options.gflops,
- options.max_pipes_and_stages)
-
-if __name__ == '__main__':
- main()
-
diff --git a/gnuradio-examples/python/mp-sched/synthetic.py b/gnuradio-examples/python/mp-sched/synthetic.py
deleted file mode 100755
index e1fcb20bd..000000000
--- a/gnuradio-examples/python/mp-sched/synthetic.py
+++ /dev/null
@@ -1,118 +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 this program; if not, write to the Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-
-from gnuradio import gr, gru, eng_notation, blks2
-from gnuradio.eng_option import eng_option
-from optparse import OptionParser
-import os
-
-
-class pipeline(gr.hier_block2):
- def __init__(self, nstages, ntaps=256):
- """
- Create a pipeline of nstages of gr.fir_filter_fff's connected in serial
- terminating in a gr.null_sink.
- """
- gr.hier_block2.__init__(self, "pipeline",
- gr.io_signature(1, 1, gr.sizeof_float),
- gr.io_signature(0, 0, 0))
- taps = ntaps*[1.0/ntaps]
- upstream = self
- for i in range(nstages):
- op = gr.fir_filter_fff(1, taps)
- self.connect(upstream, op)
- upstream = op
-
- self.connect(upstream, gr.null_sink(gr.sizeof_float))
-
-
-class top(gr.top_block):
- def __init__(self):
- gr.top_block.__init__(self)
-
- default_nsamples = 10e6
- parser=OptionParser(option_class=eng_option)
- parser.add_option("-p", "--npipelines", type="intx", default=1,
- metavar="NPIPES", help="the number of pipelines to create (default=%default)")
- parser.add_option("-s", "--nstages", type="intx", default=1,
- metavar="NSTAGES", help="the number of stages in each pipeline (default=%default)")
- parser.add_option("-N", "--nsamples", type="eng_float", default=default_nsamples,
- help=("the number of samples to run through the graph (default=%s)" %
- (eng_notation.num_to_str(default_nsamples))))
- parser.add_option("-m", "--machine-readable", action="store_true", default=False,
- help="enable machine readable output")
-
- (options, args) = parser.parse_args()
- if len(args) != 0:
- parser.print_help()
- raise SystemExit, 1
-
- self.npipes = options.npipelines
- self.nstages = options.nstages
- self.nsamples = options.nsamples
- self.machine_readable = options.machine_readable
-
- ntaps = 256
-
- # Something vaguely like floating point ops
- self.flop = 2 * ntaps * options.npipelines * options.nstages * options.nsamples
-
- src = gr.null_source(gr.sizeof_float)
- head = gr.head(gr.sizeof_float, int(options.nsamples))
- self.connect(src, head)
-
- for n in range(options.npipelines):
- self.connect(head, pipeline(options.nstages, ntaps))
-
-
-def time_it(tb):
- start = os.times()
- tb.run()
- stop = os.times()
- delta = map((lambda a, b: a-b), stop, start)
- user, sys, childrens_user, childrens_sys, real = delta
- total_user = user + childrens_user
- total_sys = sys + childrens_sys
- if tb.machine_readable:
- print "%3d %3d %.3e %7.3f %7.3f %7.3f %7.3f %.6e %.3e" % (
- tb.npipes, tb.nstages, tb.nsamples, real, total_user, total_sys, (total_user+total_sys)/real, tb.flop, tb.flop/real)
- else:
- print "npipes %7d" % (tb.npipes,)
- print "nstages %7d" % (tb.nstages,)
- print "nsamples %s" % (eng_notation.num_to_str(tb.nsamples),)
- print "real %7.3f" % (real,)
- print "user %7.3f" % (total_user,)
- print "sys %7.3f" % (total_sys,)
- print "(user+sys)/real %7.3f" % ((total_user + total_sys)/real,)
- print "pseudo_flop %s" % (eng_notation.num_to_str(tb.flop),)
- print "pseudo_flop/real %s" % (eng_notation.num_to_str(tb.flop/real),)
-
-
-if __name__ == "__main__":
- try:
- tb = top()
- time_it(tb)
- except KeyboardInterrupt:
- raise SystemExit, 128
-
-
-
-
diff --git a/gnuradio-examples/python/mp-sched/wfm_rcv_pll_to_wav.py b/gnuradio-examples/python/mp-sched/wfm_rcv_pll_to_wav.py
deleted file mode 100755
index 3971d8b73..000000000
--- a/gnuradio-examples/python/mp-sched/wfm_rcv_pll_to_wav.py
+++ /dev/null
@@ -1,127 +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, eng_notation, optfir
-from gnuradio import audio
-from gnuradio import blks2
-from gnuradio.eng_option import eng_option
-from optparse import OptionParser
-import sys
-import math
-
-class wfm_rx_block (gr.top_block):
- def __init__(self):
- gr.top_block.__init__(self)
-
- usage = "usage: %prog [options] input-samples-320kS.dat output.wav"
- parser=OptionParser(option_class=eng_option, usage=usage)
- parser.add_option("-V", "--volume", type="eng_float", default=None,
- help="set volume (default is midpoint)")
-
- (options, args) = parser.parse_args()
- if len(args) != 2:
- parser.print_help()
- sys.exit(1)
-
- input_filename = args[0]
- output_filename = args[1]
-
- self.vol = 0
-
- # build graph
-
- self.src = gr.file_source(gr.sizeof_gr_complex, input_filename, False)
-
- adc_rate = 64e6 # 64 MS/s
- usrp_decim = 200
- usrp_rate = adc_rate / usrp_decim # 320 kS/s
- chanfilt_decim = 1
- demod_rate = usrp_rate / chanfilt_decim
- audio_decimation = 10
- audio_rate = demod_rate / audio_decimation # 32 kHz
-
-
- chan_filt_coeffs = optfir.low_pass (1, # gain
- usrp_rate, # sampling rate
- 80e3, # passband cutoff
- 115e3, # stopband cutoff
- 0.1, # passband ripple
- 60) # stopband attenuation
- #print len(chan_filt_coeffs)
- chan_filt = gr.fir_filter_ccf (chanfilt_decim, chan_filt_coeffs)
-
-
- #self.guts = blks2.wfm_rcv (demod_rate, audio_decimation)
- self.guts = blks2.wfm_rcv_pll (demod_rate, audio_decimation)
-
- # FIXME rework {add,multiply}_const_* to handle multiple streams
- self.volume_control_l = gr.multiply_const_ff(self.vol)
- self.volume_control_r = gr.multiply_const_ff(self.vol)
-
- # wave file as final sink
- if 1:
- sink = gr.wavfile_sink(output_filename, 2, int(audio_rate), 16)
- else:
- sink = audio.sink (int (audio_rate),
- options.audio_output,
- False) # ok_to_block
-
- # now wire it all together
- self.connect (self.src, chan_filt, self.guts)
- self.connect ((self.guts, 0), self.volume_control_l, (sink, 0))
- self.connect ((self.guts, 1), self.volume_control_r, (sink, 1))
- try:
- self.guts.stereo_carrier_pll_recovery.squelch_enable(True)
- except:
- pass
- #print "FYI: This implementation of the stereo_carrier_pll_recovery has no squelch implementation yet"
-
- if options.volume is None:
- g = self.volume_range()
- options.volume = float(g[0]+g[1])/2
-
- # set initial values
-
- self.set_vol(options.volume)
- try:
- self.guts.stereo_carrier_pll_recovery.set_lock_threshold(options.squelch)
- except:
- pass
- #print "FYI: This implementation of the stereo_carrier_pll_recovery has no squelch implementation yet"
-
-
- def set_vol (self, vol):
- g = self.volume_range()
- self.vol = max(g[0], min(g[1], vol))
- self.volume_control_l.set_k(10**(self.vol/10))
- self.volume_control_r.set_k(10**(self.vol/10))
-
- def volume_range(self):
- return (-20.0, 0.0, 0.5)
-
-
-if __name__ == '__main__':
- tb = wfm_rx_block()
- try:
- tb.run()
- except KeyboardInterrupt:
- pass
diff --git a/gnuradio-examples/python/network/CMakeLists.txt b/gnuradio-examples/python/network/CMakeLists.txt
deleted file mode 100644
index e70403ba0..000000000
--- a/gnuradio-examples/python/network/CMakeLists.txt
+++ /dev/null
@@ -1,30 +0,0 @@
-# Copyright 2011 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-
-GR_PYTHON_INSTALL(PROGRAMS
- audio_sink.py
- audio_source.py
- dial_tone_sink.py
- dial_tone_source.py
- vector_sink.py
- vector_source.py
- DESTINATION ${GR_PKG_DATA_DIR}/examples/network
- COMPONENT "gnuradio_examples"
-)
-
diff --git a/gnuradio-examples/python/network/audio_sink.py b/gnuradio-examples/python/network/audio_sink.py
deleted file mode 100755
index eb18a75aa..000000000
--- a/gnuradio-examples/python/network/audio_sink.py
+++ /dev/null
@@ -1,65 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2006,2007,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, audio
-from gnuradio.eng_option import eng_option
-from optparse import OptionParser
-
-class audio_sink(gr.top_block):
- def __init__(self, host, port, pkt_size, sample_rate, eof, wait):
- gr.top_block.__init__(self, "audio_sink")
- src = gr.udp_source(gr.sizeof_float, host, port, pkt_size,
- eof=eof, wait=wait)
- dst = audio.sink(sample_rate)
- self.connect(src, dst)
-
-if __name__ == '__main__':
- parser = OptionParser(option_class=eng_option)
- parser.add_option("", "--host", type="string", default="0.0.0.0",
- help="local host name (domain name or IP address)")
- parser.add_option("", "--port", type="int", default=65500,
- help="port value to listen to for connection")
- parser.add_option("", "--packet-size", type="int", default=1472,
- help="packet size.")
- parser.add_option("-r", "--sample-rate", type="int", default=32000,
- help="audio signal sample rate [default=%default]")
- parser.add_option("", "--no-eof", action="store_true", default=False,
- help="don't send EOF on disconnect")
- parser.add_option("", "--no-wait", action="store_true", default=False,
- help="don't wait for source")
- (options, args) = parser.parse_args()
- if len(args) != 0:
- parser.print_help()
- raise SystemExit, 1
-
- # Create an instance of a hierarchical block
- top_block = audio_sink(options.host, options.port,
- options.packet_size, options.sample_rate,
- not options.no_eof, not options.no_wait)
-
- try:
- # Run forever
- top_block.run()
- except KeyboardInterrupt:
- # Ctrl-C exits
- pass
-
diff --git a/gnuradio-examples/python/network/audio_source.py b/gnuradio-examples/python/network/audio_source.py
deleted file mode 100755
index 5818ccbd8..000000000
--- a/gnuradio-examples/python/network/audio_source.py
+++ /dev/null
@@ -1,62 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2006,2007,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, audio
-from gnuradio.eng_option import eng_option
-from optparse import OptionParser
-
-class audio_source(gr.top_block):
- def __init__(self, host, port, pkt_size, sample_rate, eof):
- gr.top_block.__init__(self, "audio_source")
- self.audio = audio.source(sample_rate)
- self.sink = gr.udp_sink(gr.sizeof_float, host, port, pkt_size, eof=eof)
- self.connect(self.audio, self.sink)
-
-if __name__ == '__main__':
- parser = OptionParser(option_class=eng_option)
- parser.add_option("", "--host", type="string", default="localhost",
- help="Remote host name (domain name or IP address")
- parser.add_option("", "--port", type="int", default=65500,
- help="port number to connect to")
- parser.add_option("", "--packet-size", type="int", default=1472,
- help="packet size.")
- parser.add_option("-r", "--sample-rate", type="int", default=32000 ,
- help="audio signal sample rate [default=%default]")
- parser.add_option("", "--no-eof", action="store_true", default=False,
- help="don't send EOF on disconnect")
- (options, args) = parser.parse_args()
- if len(args) != 0:
- parser.print_help()
- raise SystemExit, 1
-
- # Create an instance of a hierarchical block
- top_block = audio_source(options.host, options.port,
- options.packet_size, options.sample_rate,
- not options.no_eof)
-
- try:
- # Run forever
- top_block.run()
- except KeyboardInterrupt:
- # Ctrl-C exits
- pass
-
diff --git a/gnuradio-examples/python/network/dial_tone_sink.py b/gnuradio-examples/python/network/dial_tone_sink.py
deleted file mode 100755
index 1b9009552..000000000
--- a/gnuradio-examples/python/network/dial_tone_sink.py
+++ /dev/null
@@ -1,65 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2006,2007,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, audio
-from gnuradio.eng_option import eng_option
-from optparse import OptionParser
-
-class dial_tone_sink(gr.top_block):
- def __init__(self, host, port, pkt_size, sample_rate, eof, wait):
- gr.top_block.__init__(self, "dial_tone_sink")
- udp = gr.udp_source(gr.sizeof_float, host, port, pkt_size,
- eof=eof, wait=wait)
- sink = audio.sink(sample_rate)
- self.connect(udp, sink)
-
-if __name__ == '__main__':
- parser = OptionParser(option_class=eng_option)
- parser.add_option("", "--host", type="string", default="0.0.0.0",
- help="local host name (domain name or IP address)")
- parser.add_option("", "--port", type="int", default=65500,
- help="port value to listen to for connection")
- parser.add_option("", "--packet-size", type="int", default=1472,
- help="packet size.")
- parser.add_option("-r", "--sample-rate", type="int", default=8000,
- help="audio signal sample rate [default=%default]")
- parser.add_option("", "--no-eof", action="store_true", default=False,
- help="don't send EOF on disconnect")
- parser.add_option("", "--no-wait", action="store_true", default=False,
- help="don't wait for source")
- (options, args) = parser.parse_args()
- if len(args) != 0:
- parser.print_help()
- raise SystemExit, 1
-
- # Create an instance of a hierarchical block
- top_block = dial_tone_sink(options.host, options.port,
- options.packet_size, options.sample_rate,
- not options.no_eof, not options.no_wait)
-
- try:
- # Run forever
- top_block.run()
- except KeyboardInterrupt:
- # Ctrl-C exits
- pass
-
diff --git a/gnuradio-examples/python/network/dial_tone_source.py b/gnuradio-examples/python/network/dial_tone_source.py
deleted file mode 100755
index 766ecf16d..000000000
--- a/gnuradio-examples/python/network/dial_tone_source.py
+++ /dev/null
@@ -1,70 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2006,2007,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.eng_option import eng_option
-from optparse import OptionParser
-
-class dial_tone_source(gr.top_block):
- def __init__(self, host, port, pkt_size, sample_rate, eof):
- gr.top_block.__init__(self, "dial_tone_source")
-
- amplitude = 0.3
- src0 = gr.sig_source_f (sample_rate, gr.GR_SIN_WAVE, 350, amplitude)
- src1 = gr.sig_source_f (sample_rate, gr.GR_SIN_WAVE, 440, amplitude)
- add = gr.add_ff()
-
- # Throttle needed here to account for the other side's audio card sampling rate
- thr = gr.throttle(gr.sizeof_float, sample_rate)
- sink = gr.udp_sink(gr.sizeof_float, host, port, pkt_size, eof=eof)
- self.connect(src0, (add, 0))
- self.connect(src1, (add, 1))
- self.connect(add, thr, sink)
-
-if __name__ == '__main__':
- parser = OptionParser(option_class=eng_option)
- parser.add_option("", "--host", type="string", default="localhost",
- help="Remote host name (domain name or IP address")
- parser.add_option("", "--port", type="int", default=65500,
- help="port number to connect to")
- parser.add_option("", "--packet-size", type="int", default=1472,
- help="packet size.")
- parser.add_option("-r", "--sample-rate", type="int", default=8000,
- help="audio signal sample rate [default=%default]")
- parser.add_option("", "--no-eof", action="store_true", default=False,
- help="don't send EOF on disconnect")
- (options, args) = parser.parse_args()
- if len(args) != 0:
- parser.print_help()
- raise SystemExit, 1
-
- # Create an instance of a hierarchical block
- top_block = dial_tone_source(options.host, options.port,
- options.packet_size, options.sample_rate,
- not options.no_eof)
-
- try:
- # Run forever
- top_block.run()
- except KeyboardInterrupt:
- # Ctrl-C exits
- pass
diff --git a/gnuradio-examples/python/network/vector_sink.py b/gnuradio-examples/python/network/vector_sink.py
deleted file mode 100755
index 5d73858a3..000000000
--- a/gnuradio-examples/python/network/vector_sink.py
+++ /dev/null
@@ -1,64 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2006,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.eng_option import eng_option
-from optparse import OptionParser
-
-class vector_sink(gr.top_block):
- def __init__(self, host, port, pkt_size, eof, wait):
- gr.top_block.__init__(self, "vector_sink")
-
- udp = gr.udp_source(gr.sizeof_float, host, port, pkt_size,
- eof=eof, wait=wait)
- sink = gr.file_sink(gr.sizeof_float, "received.dat")
- self.connect(udp, sink)
-
-if __name__ == "__main__":
- parser = OptionParser(option_class=eng_option)
- parser.add_option("", "--host", type="string", default="0.0.0.0",
- help="local host name (domain name or IP address)")
- parser.add_option("", "--port", type="int", default=65500,
- help="port value to listen to for connection")
- parser.add_option("", "--packet-size", type="int", default=1471,
- help="packet size.")
- parser.add_option("", "--no-eof", action="store_true", default=False,
- help="don't send EOF on disconnect")
- parser.add_option("", "--no-wait", action="store_true", default=False,
- help="don't wait for source")
- (options, args) = parser.parse_args()
- if len(args) != 0:
- parser.print_help()
- raise SystemExit, 1
-
- # Create an instance of a hierarchical block
- top_block = vector_sink(options.host, options.port,
- options.packet_size,
- not options.no_eof, not options.no_wait)
-
- try:
- # Run forever
- top_block.run()
- except KeyboardInterrupt:
- # Ctrl-C exits
- pass
-
diff --git a/gnuradio-examples/python/network/vector_source.py b/gnuradio-examples/python/network/vector_source.py
deleted file mode 100755
index 0e7d67844..000000000
--- a/gnuradio-examples/python/network/vector_source.py
+++ /dev/null
@@ -1,60 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2006,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.eng_option import eng_option
-from optparse import OptionParser
-
-class vector_source(gr.top_block):
- def __init__(self, host, port, pkt_size, eof):
- gr.top_block.__init__(self, "vector_source")
- data = [i*0.01 for i in range(1000)]
- vec = gr.vector_source_f(data, True)
- udp = gr.udp_sink(gr.sizeof_float, host, port, pkt_size, eof=eof)
- self.connect(vec, udp)
-
-if __name__ == '__main__':
- parser = OptionParser(option_class=eng_option)
- parser.add_option("", "--host", type="string", default="localhost",
- help="Remote host name (domain name or IP address")
- parser.add_option("", "--port", type="int", default=65500,
- help="port number to connect to")
- parser.add_option("", "--packet-size", type="int", default=1471,
- help="packet size.")
- parser.add_option("", "--no-eof", action="store_true", default=False,
- help="don't send EOF on disconnect")
- (options, args) = parser.parse_args()
- if len(args) != 0:
- parser.print_help()
- raise SystemExit, 1
-
-# Create an instance of a hierarchical block
- top_block = vector_source(options.host, options.port, options.packet_size,
- not options.no_eof)
-
- try:
- # Run forever
- top_block.run()
- except KeyboardInterrupt:
- # Ctrl-C exits
- pass
-
diff --git a/gnuradio-examples/python/pfb/CMakeLists.txt b/gnuradio-examples/python/pfb/CMakeLists.txt
deleted file mode 100644
index 88fdf2ead..000000000
--- a/gnuradio-examples/python/pfb/CMakeLists.txt
+++ /dev/null
@@ -1,36 +0,0 @@
-# Copyright 2011 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-
-include(GrPython)
-
-GR_PYTHON_INSTALL(PROGRAMS
- channelize.py
- chirp_channelize.py
- decimate.py
- fmtest.py
- interpolate.py
- resampler_demo.grc
- resampler.py
- synth_filter.py
- synth_to_chan.py
- reconstruction.py
- DESTINATION ${GR_PKG_DATA_DIR}/examples/pfb
- COMPONENT "gnuradio_examples"
-)
-
diff --git a/gnuradio-examples/python/pfb/channelize.py b/gnuradio-examples/python/pfb/channelize.py
deleted file mode 100755
index 2fcb14a36..000000000
--- a/gnuradio-examples/python/pfb/channelize.py
+++ /dev/null
@@ -1,191 +0,0 @@
-#!/usr/bin/env python
-#
-# 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, blks2
-import sys, time
-
-try:
- import scipy
- from scipy import fftpack
-except ImportError:
- print "Error: Program requires scipy (see: www.scipy.org)."
- sys.exit(1)
-
-try:
- import pylab
- from pylab import mlab
-except ImportError:
- print "Error: Program requires matplotlib (see: matplotlib.sourceforge.net)."
- sys.exit(1)
-
-class pfb_top_block(gr.top_block):
- def __init__(self):
- gr.top_block.__init__(self)
-
- self._N = 2000000 # number of samples to use
- self._fs = 9000 # initial sampling rate
- self._M = 9 # Number of channels to channelize
-
- # Create a set of taps for the PFB channelizer
- self._taps = gr.firdes.low_pass_2(1, self._fs, 475.50, 50,
- attenuation_dB=100, window=gr.firdes.WIN_BLACKMAN_hARRIS)
-
- # Calculate the number of taps per channel for our own information
- tpc = scipy.ceil(float(len(self._taps)) / float(self._M))
- print "Number of taps: ", len(self._taps)
- print "Number of channels: ", self._M
- print "Taps per channel: ", tpc
-
- # Create a set of signals at different frequencies
- # freqs lists the frequencies of the signals that get stored
- # in the list "signals", which then get summed together
- self.signals = list()
- self.add = gr.add_cc()
- freqs = [-4070, -3050, -2030, -1010, 10, 1020, 2040, 3060, 4080]
- for i in xrange(len(freqs)):
- self.signals.append(gr.sig_source_c(self._fs, gr.GR_SIN_WAVE, freqs[i], 1))
- self.connect(self.signals[i], (self.add,i))
-
- self.head = gr.head(gr.sizeof_gr_complex, self._N)
-
- # Construct the channelizer filter
- self.pfb = blks2.pfb_channelizer_ccf(self._M, self._taps, 1)
-
- # Construct a vector sink for the input signal to the channelizer
- self.snk_i = gr.vector_sink_c()
-
- # Connect the blocks
- self.connect(self.add, self.head, self.pfb)
- self.connect(self.add, self.snk_i)
-
- # Use this to play with the channel mapping
- #self.pfb.set_channel_map([5,6,7,8,0,1,2,3,4])
-
- # Create a vector sink for each of M output channels of the filter and connect it
- self.snks = list()
- for i in xrange(self._M):
- self.snks.append(gr.vector_sink_c())
- self.connect((self.pfb, i), self.snks[i])
-
-
-def main():
- tstart = time.time()
-
- tb = pfb_top_block()
- tb.run()
-
- tend = time.time()
- print "Run time: %f" % (tend - tstart)
-
- if 1:
- fig_in = pylab.figure(1, figsize=(16,9), facecolor="w")
- fig1 = pylab.figure(2, figsize=(16,9), facecolor="w")
- fig2 = pylab.figure(3, figsize=(16,9), facecolor="w")
-
- Ns = 1000
- Ne = 10000
-
- fftlen = 8192
- winfunc = scipy.blackman
- fs = tb._fs
-
- # Plot the input signal on its own figure
- d = tb.snk_i.data()[Ns:Ne]
- spin_f = fig_in.add_subplot(2, 1, 1)
-
- X,freq = mlab.psd(d, NFFT=fftlen, noverlap=fftlen/4, Fs=fs,
- window = lambda d: d*winfunc(fftlen),
- scale_by_freq=True)
- X_in = 10.0*scipy.log10(abs(X))
- f_in = scipy.arange(-fs/2.0, fs/2.0, fs/float(X_in.size))
- pin_f = spin_f.plot(f_in, X_in, "b")
- spin_f.set_xlim([min(f_in), max(f_in)+1])
- spin_f.set_ylim([-200.0, 50.0])
-
- spin_f.set_title("Input Signal", weight="bold")
- spin_f.set_xlabel("Frequency (Hz)")
- spin_f.set_ylabel("Power (dBW)")
-
-
- Ts = 1.0/fs
- Tmax = len(d)*Ts
-
- t_in = scipy.arange(0, Tmax, Ts)
- x_in = scipy.array(d)
- spin_t = fig_in.add_subplot(2, 1, 2)
- pin_t = spin_t.plot(t_in, x_in.real, "b")
- pin_t = spin_t.plot(t_in, x_in.imag, "r")
-
- spin_t.set_xlabel("Time (s)")
- spin_t.set_ylabel("Amplitude")
-
- Ncols = int(scipy.floor(scipy.sqrt(tb._M)))
- Nrows = int(scipy.floor(tb._M / Ncols))
- if(tb._M % Ncols != 0):
- Nrows += 1
-
- # Plot each of the channels outputs. Frequencies on Figure 2 and
- # time signals on Figure 3
- fs_o = tb._fs / tb._M
- Ts_o = 1.0/fs_o
- Tmax_o = len(d)*Ts_o
- for i in xrange(len(tb.snks)):
- # remove issues with the transients at the beginning
- # also remove some corruption at the end of the stream
- # this is a bug, probably due to the corner cases
- d = tb.snks[i].data()[Ns:Ne]
-
- sp1_f = fig1.add_subplot(Nrows, Ncols, 1+i)
- X,freq = mlab.psd(d, NFFT=fftlen, noverlap=fftlen/4, Fs=fs_o,
- window = lambda d: d*winfunc(fftlen),
- scale_by_freq=True)
- X_o = 10.0*scipy.log10(abs(X))
- f_o = scipy.arange(-fs_o/2.0, fs_o/2.0, fs_o/float(X_o.size))
- p2_f = sp1_f.plot(f_o, X_o, "b")
- sp1_f.set_xlim([min(f_o), max(f_o)+1])
- sp1_f.set_ylim([-200.0, 50.0])
-
- sp1_f.set_title(("Channel %d" % i), weight="bold")
- sp1_f.set_xlabel("Frequency (Hz)")
- sp1_f.set_ylabel("Power (dBW)")
-
- x_o = scipy.array(d)
- t_o = scipy.arange(0, Tmax_o, Ts_o)
- sp2_o = fig2.add_subplot(Nrows, Ncols, 1+i)
- p2_o = sp2_o.plot(t_o, x_o.real, "b")
- p2_o = sp2_o.plot(t_o, x_o.imag, "r")
- sp2_o.set_xlim([min(t_o), max(t_o)+1])
- sp2_o.set_ylim([-2, 2])
-
- sp2_o.set_title(("Channel %d" % i), weight="bold")
- sp2_o.set_xlabel("Time (s)")
- sp2_o.set_ylabel("Amplitude")
-
- pylab.show()
-
-
-if __name__ == "__main__":
- try:
- main()
- except KeyboardInterrupt:
- pass
-
diff --git a/gnuradio-examples/python/pfb/chirp_channelize.py b/gnuradio-examples/python/pfb/chirp_channelize.py
deleted file mode 100755
index 951255d3b..000000000
--- a/gnuradio-examples/python/pfb/chirp_channelize.py
+++ /dev/null
@@ -1,203 +0,0 @@
-#!/usr/bin/env python
-#
-# 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, blks2
-import sys, time
-
-try:
- import scipy
- from scipy import fftpack
-except ImportError:
- print "Error: Program requires scipy (see: www.scipy.org)."
- sys.exit(1)
-
-try:
- import pylab
- from pylab import mlab
-except ImportError:
- print "Error: Program requires matplotlib (see: matplotlib.sourceforge.net)."
- sys.exit(1)
-
-class pfb_top_block(gr.top_block):
- def __init__(self):
- gr.top_block.__init__(self)
-
- self._N = 200000 # number of samples to use
- self._fs = 9000 # initial sampling rate
- self._M = 9 # Number of channels to channelize
-
- # Create a set of taps for the PFB channelizer
- self._taps = gr.firdes.low_pass_2(1, self._fs, 500, 20,
- attenuation_dB=10, window=gr.firdes.WIN_BLACKMAN_hARRIS)
-
- # Calculate the number of taps per channel for our own information
- tpc = scipy.ceil(float(len(self._taps)) / float(self._M))
- print "Number of taps: ", len(self._taps)
- print "Number of channels: ", self._M
- print "Taps per channel: ", tpc
-
- repeated = True
- if(repeated):
- self.vco_input = gr.sig_source_f(self._fs, gr.GR_SIN_WAVE, 0.25, 110)
- else:
- amp = 100
- data = scipy.arange(0, amp, amp/float(self._N))
- self.vco_input = gr.vector_source_f(data, False)
-
- # Build a VCO controlled by either the sinusoid or single chirp tone
- # Then convert this to a complex signal
- self.vco = gr.vco_f(self._fs, 225, 1)
- self.f2c = gr.float_to_complex()
-
- self.head = gr.head(gr.sizeof_gr_complex, self._N)
-
- # Construct the channelizer filter
- self.pfb = blks2.pfb_channelizer_ccf(self._M, self._taps)
-
- # Construct a vector sink for the input signal to the channelizer
- self.snk_i = gr.vector_sink_c()
-
- # Connect the blocks
- self.connect(self.vco_input, self.vco, self.f2c)
- self.connect(self.f2c, self.head, self.pfb)
- self.connect(self.f2c, self.snk_i)
-
- # Create a vector sink for each of M output channels of the filter and connect it
- self.snks = list()
- for i in xrange(self._M):
- self.snks.append(gr.vector_sink_c())
- self.connect((self.pfb, i), self.snks[i])
-
-
-def main():
- tstart = time.time()
-
- tb = pfb_top_block()
- tb.run()
-
- tend = time.time()
- print "Run time: %f" % (tend - tstart)
-
- if 1:
- fig_in = pylab.figure(1, figsize=(16,9), facecolor="w")
- fig1 = pylab.figure(2, figsize=(16,9), facecolor="w")
- fig2 = pylab.figure(3, figsize=(16,9), facecolor="w")
- fig3 = pylab.figure(4, figsize=(16,9), facecolor="w")
-
- Ns = 650
- Ne = 20000
-
- fftlen = 8192
- winfunc = scipy.blackman
- fs = tb._fs
-
- # Plot the input signal on its own figure
- d = tb.snk_i.data()[Ns:Ne]
- spin_f = fig_in.add_subplot(2, 1, 1)
-
- X,freq = mlab.psd(d, NFFT=fftlen, noverlap=fftlen/4, Fs=fs,
- window = lambda d: d*winfunc(fftlen),
- scale_by_freq=True)
- X_in = 10.0*scipy.log10(abs(fftpack.fftshift(X)))
- f_in = scipy.arange(-fs/2.0, fs/2.0, fs/float(X_in.size))
- pin_f = spin_f.plot(f_in, X_in, "b")
- spin_f.set_xlim([min(f_in), max(f_in)+1])
- spin_f.set_ylim([-200.0, 50.0])
-
- spin_f.set_title("Input Signal", weight="bold")
- spin_f.set_xlabel("Frequency (Hz)")
- spin_f.set_ylabel("Power (dBW)")
-
-
- Ts = 1.0/fs
- Tmax = len(d)*Ts
-
- t_in = scipy.arange(0, Tmax, Ts)
- x_in = scipy.array(d)
- spin_t = fig_in.add_subplot(2, 1, 2)
- pin_t = spin_t.plot(t_in, x_in.real, "b")
- pin_t = spin_t.plot(t_in, x_in.imag, "r")
-
- spin_t.set_xlabel("Time (s)")
- spin_t.set_ylabel("Amplitude")
-
- Ncols = int(scipy.floor(scipy.sqrt(tb._M)))
- Nrows = int(scipy.floor(tb._M / Ncols))
- if(tb._M % Ncols != 0):
- Nrows += 1
-
- # Plot each of the channels outputs. Frequencies on Figure 2 and
- # time signals on Figure 3
- fs_o = tb._fs / tb._M
- Ts_o = 1.0/fs_o
- Tmax_o = len(d)*Ts_o
- for i in xrange(len(tb.snks)):
- # remove issues with the transients at the beginning
- # also remove some corruption at the end of the stream
- # this is a bug, probably due to the corner cases
- d = tb.snks[i].data()[Ns:Ne]
-
- sp1_f = fig1.add_subplot(Nrows, Ncols, 1+i)
- X,freq = mlab.psd(d, NFFT=fftlen, noverlap=fftlen/4, Fs=fs_o,
- window = lambda d: d*winfunc(fftlen),
- scale_by_freq=True)
- X_o = 10.0*scipy.log10(abs(X))
- f_o = freq
- p2_f = sp1_f.plot(f_o, X_o, "b")
- sp1_f.set_xlim([min(f_o), max(f_o)+1])
- sp1_f.set_ylim([-200.0, 50.0])
-
- sp1_f.set_title(("Channel %d" % i), weight="bold")
- sp1_f.set_xlabel("Frequency (Hz)")
- sp1_f.set_ylabel("Power (dBW)")
-
- x_o = scipy.array(d)
- t_o = scipy.arange(0, Tmax_o, Ts_o)
- sp2_o = fig2.add_subplot(Nrows, Ncols, 1+i)
- p2_o = sp2_o.plot(t_o, x_o.real, "b")
- p2_o = sp2_o.plot(t_o, x_o.imag, "r")
- sp2_o.set_xlim([min(t_o), max(t_o)+1])
- sp2_o.set_ylim([-2, 2])
-
- sp2_o.set_title(("Channel %d" % i), weight="bold")
- sp2_o.set_xlabel("Time (s)")
- sp2_o.set_ylabel("Amplitude")
-
-
- sp3 = fig3.add_subplot(1,1,1)
- p3 = sp3.plot(t_o, x_o.real)
- sp3.set_xlim([min(t_o), max(t_o)+1])
- sp3.set_ylim([-2, 2])
-
- sp3.set_title("All Channels")
- sp3.set_xlabel("Time (s)")
- sp3.set_ylabel("Amplitude")
-
- pylab.show()
-
-
-if __name__ == "__main__":
- try:
- main()
- except KeyboardInterrupt:
- pass
-
diff --git a/gnuradio-examples/python/pfb/decimate.py b/gnuradio-examples/python/pfb/decimate.py
deleted file mode 100755
index 643a2c241..000000000
--- a/gnuradio-examples/python/pfb/decimate.py
+++ /dev/null
@@ -1,178 +0,0 @@
-#!/usr/bin/env python
-#
-# 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, blks2
-import sys, time
-
-try:
- import scipy
- from scipy import fftpack
-except ImportError:
- print "Error: Program requires scipy (see: www.scipy.org)."
- sys.exit(1)
-
-try:
- import pylab
- from pylab import mlab
-except ImportError:
- print "Error: Program requires matplotlib (see: matplotlib.sourceforge.net)."
- sys.exit(1)
-
-class pfb_top_block(gr.top_block):
- def __init__(self):
- gr.top_block.__init__(self)
-
- self._N = 10000000 # number of samples to use
- self._fs = 10000 # initial sampling rate
- self._decim = 20 # Decimation rate
-
- # Generate the prototype filter taps for the decimators with a 200 Hz bandwidth
- self._taps = gr.firdes.low_pass_2(1, self._fs, 200, 150,
- attenuation_dB=120, window=gr.firdes.WIN_BLACKMAN_hARRIS)
-
- # Calculate the number of taps per channel for our own information
- tpc = scipy.ceil(float(len(self._taps)) / float(self._decim))
- print "Number of taps: ", len(self._taps)
- print "Number of filters: ", self._decim
- print "Taps per channel: ", tpc
-
- # Build the input signal source
- # We create a list of freqs, and a sine wave is generated and added to the source
- # for each one of these frequencies.
- self.signals = list()
- self.add = gr.add_cc()
- freqs = [10, 20, 2040]
- for i in xrange(len(freqs)):
- self.signals.append(gr.sig_source_c(self._fs, gr.GR_SIN_WAVE, freqs[i], 1))
- self.connect(self.signals[i], (self.add,i))
-
- self.head = gr.head(gr.sizeof_gr_complex, self._N)
-
- # Construct a PFB decimator filter
- self.pfb = blks2.pfb_decimator_ccf(self._decim, self._taps, 0)
-
- # Construct a standard FIR decimating filter
- self.dec = gr.fir_filter_ccf(self._decim, self._taps)
-
- self.snk_i = gr.vector_sink_c()
-
- # Connect the blocks
- self.connect(self.add, self.head, self.pfb)
- self.connect(self.add, self.snk_i)
-
- # Create the sink for the decimated siganl
- self.snk = gr.vector_sink_c()
- self.connect(self.pfb, self.snk)
-
-
-def main():
- tb = pfb_top_block()
-
- tstart = time.time()
- tb.run()
- tend = time.time()
- print "Run time: %f" % (tend - tstart)
-
- if 1:
- fig1 = pylab.figure(1, figsize=(16,9))
- fig2 = pylab.figure(2, figsize=(16,9))
-
- Ns = 10000
- Ne = 10000
-
- fftlen = 8192
- winfunc = scipy.blackman
- fs = tb._fs
-
- # Plot the input to the decimator
-
- d = tb.snk_i.data()[Ns:Ns+Ne]
- sp1_f = fig1.add_subplot(2, 1, 1)
-
- X,freq = mlab.psd(d, NFFT=fftlen, noverlap=fftlen/4, Fs=fs,
- window = lambda d: d*winfunc(fftlen),
- scale_by_freq=True)
- X_in = 10.0*scipy.log10(abs(fftpack.fftshift(X)))
- f_in = scipy.arange(-fs/2.0, fs/2.0, fs/float(X_in.size))
- p1_f = sp1_f.plot(f_in, X_in, "b")
- sp1_f.set_xlim([min(f_in), max(f_in)+1])
- sp1_f.set_ylim([-200.0, 50.0])
-
- sp1_f.set_title("Input Signal", weight="bold")
- sp1_f.set_xlabel("Frequency (Hz)")
- sp1_f.set_ylabel("Power (dBW)")
-
- Ts = 1.0/fs
- Tmax = len(d)*Ts
-
- t_in = scipy.arange(0, Tmax, Ts)
- x_in = scipy.array(d)
- sp1_t = fig1.add_subplot(2, 1, 2)
- p1_t = sp1_t.plot(t_in, x_in.real, "b")
- p1_t = sp1_t.plot(t_in, x_in.imag, "r")
- sp1_t.set_ylim([-tb._decim*1.1, tb._decim*1.1])
-
- sp1_t.set_xlabel("Time (s)")
- sp1_t.set_ylabel("Amplitude")
-
-
- # Plot the output of the decimator
- fs_o = tb._fs / tb._decim
-
- sp2_f = fig2.add_subplot(2, 1, 1)
- d = tb.snk.data()[Ns:Ns+Ne]
- X,freq = mlab.psd(d, NFFT=fftlen, noverlap=fftlen/4, Fs=fs_o,
- window = lambda d: d*winfunc(fftlen),
- scale_by_freq=True)
- X_o = 10.0*scipy.log10(abs(fftpack.fftshift(X)))
- f_o = scipy.arange(-fs_o/2.0, fs_o/2.0, fs_o/float(X_o.size))
- p2_f = sp2_f.plot(f_o, X_o, "b")
- sp2_f.set_xlim([min(f_o), max(f_o)+1])
- sp2_f.set_ylim([-200.0, 50.0])
-
- sp2_f.set_title("PFB Decimated Signal", weight="bold")
- sp2_f.set_xlabel("Frequency (Hz)")
- sp2_f.set_ylabel("Power (dBW)")
-
-
- Ts_o = 1.0/fs_o
- Tmax_o = len(d)*Ts_o
-
- x_o = scipy.array(d)
- t_o = scipy.arange(0, Tmax_o, Ts_o)
- sp2_t = fig2.add_subplot(2, 1, 2)
- p2_t = sp2_t.plot(t_o, x_o.real, "b-o")
- p2_t = sp2_t.plot(t_o, x_o.imag, "r-o")
- sp2_t.set_ylim([-2.5, 2.5])
-
- sp2_t.set_xlabel("Time (s)")
- sp2_t.set_ylabel("Amplitude")
-
- pylab.show()
-
-
-if __name__ == "__main__":
- try:
- main()
- except KeyboardInterrupt:
- pass
-
diff --git a/gnuradio-examples/python/pfb/fmtest.py b/gnuradio-examples/python/pfb/fmtest.py
deleted file mode 100755
index 635ee4e9e..000000000
--- a/gnuradio-examples/python/pfb/fmtest.py
+++ /dev/null
@@ -1,225 +0,0 @@
-#!/usr/bin/env python
-#
-# 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, blks2
-import sys, math, time
-
-try:
- import scipy
- from scipy import fftpack
-except ImportError:
- print "Error: Program requires scipy (see: www.scipy.org)."
- sys.exit(1)
-
-try:
- import pylab
-except ImportError:
- print "Error: Program requires matplotlib (see: matplotlib.sourceforge.net)."
- sys.exit(1)
-
-
-class fmtx(gr.hier_block2):
- def __init__(self, lo_freq, audio_rate, if_rate):
-
- gr.hier_block2.__init__(self, "build_fm",
- gr.io_signature(1, 1, gr.sizeof_float), # Input signature
- gr.io_signature(1, 1, gr.sizeof_gr_complex)) # Output signature
-
- fmtx = blks2.nbfm_tx (audio_rate, if_rate, max_dev=5e3, tau=75e-6)
-
- # Local oscillator
- lo = gr.sig_source_c (if_rate, # sample rate
- gr.GR_SIN_WAVE, # waveform type
- lo_freq, #frequency
- 1.0, # amplitude
- 0) # DC Offset
- mixer = gr.multiply_cc ()
-
- self.connect (self, fmtx, (mixer, 0))
- self.connect (lo, (mixer, 1))
- self.connect (mixer, self)
-
-class fmtest(gr.top_block):
- def __init__(self):
- gr.top_block.__init__(self)
-
- self._nsamples = 1000000
- self._audio_rate = 8000
-
- # Set up N channels with their own baseband and IF frequencies
- self._N = 5
- chspacing = 16000
- freq = [10, 20, 30, 40, 50]
- f_lo = [0, 1*chspacing, -1*chspacing, 2*chspacing, -2*chspacing]
-
- self._if_rate = 4*self._N*self._audio_rate
-
- # Create a signal source and frequency modulate it
- self.sum = gr.add_cc ()
- for n in xrange(self._N):
- sig = gr.sig_source_f(self._audio_rate, gr.GR_SIN_WAVE, freq[n], 0.5)
- fm = fmtx(f_lo[n], self._audio_rate, self._if_rate)
- self.connect(sig, fm)
- self.connect(fm, (self.sum, n))
-
- self.head = gr.head(gr.sizeof_gr_complex, self._nsamples)
- self.snk_tx = gr.vector_sink_c()
- self.channel = blks2.channel_model(0.1)
-
- self.connect(self.sum, self.head, self.channel, self.snk_tx)
-
-
- # Design the channlizer
- self._M = 10
- bw = chspacing/2.0
- t_bw = chspacing/10.0
- self._chan_rate = self._if_rate / self._M
- self._taps = gr.firdes.low_pass_2(1, self._if_rate, bw, t_bw,
- attenuation_dB=100,
- window=gr.firdes.WIN_BLACKMAN_hARRIS)
- tpc = math.ceil(float(len(self._taps)) / float(self._M))
-
- print "Number of taps: ", len(self._taps)
- print "Number of channels: ", self._M
- print "Taps per channel: ", tpc
-
- self.pfb = blks2.pfb_channelizer_ccf(self._M, self._taps)
-
- self.connect(self.channel, self.pfb)
-
- # Create a file sink for each of M output channels of the filter and connect it
- self.fmdet = list()
- self.squelch = list()
- self.snks = list()
- for i in xrange(self._M):
- self.fmdet.append(blks2.nbfm_rx(self._audio_rate, self._chan_rate))
- self.squelch.append(blks2.standard_squelch(self._audio_rate*10))
- self.snks.append(gr.vector_sink_f())
- self.connect((self.pfb, i), self.fmdet[i], self.squelch[i], self.snks[i])
-
- def num_tx_channels(self):
- return self._N
-
- def num_rx_channels(self):
- return self._M
-
-def main():
-
- fm = fmtest()
-
- tstart = time.time()
- fm.run()
- tend = time.time()
-
- if 1:
- fig1 = pylab.figure(1, figsize=(12,10), facecolor="w")
- fig2 = pylab.figure(2, figsize=(12,10), facecolor="w")
- fig3 = pylab.figure(3, figsize=(12,10), facecolor="w")
-
- Ns = 10000
- Ne = 100000
-
- fftlen = 8192
- winfunc = scipy.blackman
-
- # Plot transmitted signal
- fs = fm._if_rate
-
- d = fm.snk_tx.data()[Ns:Ns+Ne]
- sp1_f = fig1.add_subplot(2, 1, 1)
-
- X,freq = sp1_f.psd(d, NFFT=fftlen, noverlap=fftlen/4, Fs=fs,
- window = lambda d: d*winfunc(fftlen),
- visible=False)
- X_in = 10.0*scipy.log10(abs(fftpack.fftshift(X)))
- f_in = scipy.arange(-fs/2.0, fs/2.0, fs/float(X_in.size))
- p1_f = sp1_f.plot(f_in, X_in, "b")
- sp1_f.set_xlim([min(f_in), max(f_in)+1])
- sp1_f.set_ylim([-120.0, 20.0])
-
- sp1_f.set_title("Input Signal", weight="bold")
- sp1_f.set_xlabel("Frequency (Hz)")
- sp1_f.set_ylabel("Power (dBW)")
-
- Ts = 1.0/fs
- Tmax = len(d)*Ts
-
- t_in = scipy.arange(0, Tmax, Ts)
- x_in = scipy.array(d)
- sp1_t = fig1.add_subplot(2, 1, 2)
- p1_t = sp1_t.plot(t_in, x_in.real, "b-o")
- #p1_t = sp1_t.plot(t_in, x_in.imag, "r-o")
- sp1_t.set_ylim([-5, 5])
-
- # Set up the number of rows and columns for plotting the subfigures
- Ncols = int(scipy.floor(scipy.sqrt(fm.num_rx_channels())))
- Nrows = int(scipy.floor(fm.num_rx_channels() / Ncols))
- if(fm.num_rx_channels() % Ncols != 0):
- Nrows += 1
-
- # Plot each of the channels outputs. Frequencies on Figure 2 and
- # time signals on Figure 3
- fs_o = fm._audio_rate
- for i in xrange(len(fm.snks)):
- # remove issues with the transients at the beginning
- # also remove some corruption at the end of the stream
- # this is a bug, probably due to the corner cases
- d = fm.snks[i].data()[Ns:Ne]
-
- sp2_f = fig2.add_subplot(Nrows, Ncols, 1+i)
- X,freq = sp2_f.psd(d, NFFT=fftlen, noverlap=fftlen/4, Fs=fs_o,
- window = lambda d: d*winfunc(fftlen),
- visible=False)
- #X_o = 10.0*scipy.log10(abs(fftpack.fftshift(X)))
- X_o = 10.0*scipy.log10(abs(X))
- #f_o = scipy.arange(-fs_o/2.0, fs_o/2.0, fs_o/float(X_o.size))
- f_o = scipy.arange(0, fs_o/2.0, fs_o/2.0/float(X_o.size))
- p2_f = sp2_f.plot(f_o, X_o, "b")
- sp2_f.set_xlim([min(f_o), max(f_o)+0.1])
- sp2_f.set_ylim([-120.0, 20.0])
- sp2_f.grid(True)
-
- sp2_f.set_title(("Channel %d" % i), weight="bold")
- sp2_f.set_xlabel("Frequency (kHz)")
- sp2_f.set_ylabel("Power (dBW)")
-
-
- Ts = 1.0/fs_o
- Tmax = len(d)*Ts
- t_o = scipy.arange(0, Tmax, Ts)
-
- x_t = scipy.array(d)
- sp2_t = fig3.add_subplot(Nrows, Ncols, 1+i)
- p2_t = sp2_t.plot(t_o, x_t.real, "b")
- p2_t = sp2_t.plot(t_o, x_t.imag, "r")
- sp2_t.set_xlim([min(t_o), max(t_o)+1])
- sp2_t.set_ylim([-1, 1])
-
- sp2_t.set_xlabel("Time (s)")
- sp2_t.set_ylabel("Amplitude")
-
-
- pylab.show()
-
-
-if __name__ == "__main__":
- main()
diff --git a/gnuradio-examples/python/pfb/interpolate.py b/gnuradio-examples/python/pfb/interpolate.py
deleted file mode 100755
index 370cf26a7..000000000
--- a/gnuradio-examples/python/pfb/interpolate.py
+++ /dev/null
@@ -1,233 +0,0 @@
-#!/usr/bin/env python
-#
-# 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, blks2
-import sys, time
-
-try:
- import scipy
- from scipy import fftpack
-except ImportError:
- print "Error: Program requires scipy (see: www.scipy.org)."
- sys.exit(1)
-
-try:
- import pylab
- from pylab import mlab
-except ImportError:
- print "Error: Program requires matplotlib (see: matplotlib.sourceforge.net)."
- sys.exit(1)
-
-class pfb_top_block(gr.top_block):
- def __init__(self):
- gr.top_block.__init__(self)
-
- self._N = 100000 # number of samples to use
- self._fs = 2000 # initial sampling rate
- self._interp = 5 # Interpolation rate for PFB interpolator
- self._ainterp = 5.5 # Resampling rate for the PFB arbitrary resampler
-
- # Frequencies of the signals we construct
- freq1 = 100
- freq2 = 200
-
- # Create a set of taps for the PFB interpolator
- # This is based on the post-interpolation sample rate
- self._taps = gr.firdes.low_pass_2(self._interp, self._interp*self._fs, freq2+50, 50,
- attenuation_dB=120, window=gr.firdes.WIN_BLACKMAN_hARRIS)
-
- # Create a set of taps for the PFB arbitrary resampler
- # The filter size is the number of filters in the filterbank; 32 will give very low side-lobes,
- # and larger numbers will reduce these even farther
- # The taps in this filter are based on a sampling rate of the filter size since it acts
- # internally as an interpolator.
- flt_size = 32
- self._taps2 = gr.firdes.low_pass_2(flt_size, flt_size*self._fs, freq2+50, 150,
- attenuation_dB=120, window=gr.firdes.WIN_BLACKMAN_hARRIS)
-
- # Calculate the number of taps per channel for our own information
- tpc = scipy.ceil(float(len(self._taps)) / float(self._interp))
- print "Number of taps: ", len(self._taps)
- print "Number of filters: ", self._interp
- print "Taps per channel: ", tpc
-
- # Create a couple of signals at different frequencies
- self.signal1 = gr.sig_source_c(self._fs, gr.GR_SIN_WAVE, freq1, 0.5)
- self.signal2 = gr.sig_source_c(self._fs, gr.GR_SIN_WAVE, freq2, 0.5)
- self.signal = gr.add_cc()
-
- self.head = gr.head(gr.sizeof_gr_complex, self._N)
-
- # Construct the PFB interpolator filter
- self.pfb = blks2.pfb_interpolator_ccf(self._interp, self._taps)
-
- # Construct the PFB arbitrary resampler filter
- self.pfb_ar = blks2.pfb_arb_resampler_ccf(self._ainterp, self._taps2, flt_size)
- self.snk_i = gr.vector_sink_c()
-
- #self.pfb_ar.pfb.print_taps()
- #self.pfb.pfb.print_taps()
-
- # Connect the blocks
- self.connect(self.signal1, self.head, (self.signal,0))
- self.connect(self.signal2, (self.signal,1))
- self.connect(self.signal, self.pfb)
- self.connect(self.signal, self.pfb_ar)
- self.connect(self.signal, self.snk_i)
-
- # Create the sink for the interpolated signals
- self.snk1 = gr.vector_sink_c()
- self.snk2 = gr.vector_sink_c()
- self.connect(self.pfb, self.snk1)
- self.connect(self.pfb_ar, self.snk2)
-
-
-def main():
- tb = pfb_top_block()
-
- tstart = time.time()
- tb.run()
- tend = time.time()
- print "Run time: %f" % (tend - tstart)
-
-
- if 1:
- fig1 = pylab.figure(1, figsize=(12,10), facecolor="w")
- fig2 = pylab.figure(2, figsize=(12,10), facecolor="w")
- fig3 = pylab.figure(3, figsize=(12,10), facecolor="w")
-
- Ns = 10000
- Ne = 10000
-
- fftlen = 8192
- winfunc = scipy.blackman
-
- # Plot input signal
- fs = tb._fs
-
- d = tb.snk_i.data()[Ns:Ns+Ne]
- sp1_f = fig1.add_subplot(2, 1, 1)
-
- X,freq = mlab.psd(d, NFFT=fftlen, noverlap=fftlen/4, Fs=fs,
- window = lambda d: d*winfunc(fftlen),
- scale_by_freq=True)
- X_in = 10.0*scipy.log10(abs(fftpack.fftshift(X)))
- f_in = scipy.arange(-fs/2.0, fs/2.0, fs/float(X_in.size))
- p1_f = sp1_f.plot(f_in, X_in, "b")
- sp1_f.set_xlim([min(f_in), max(f_in)+1])
- sp1_f.set_ylim([-200.0, 50.0])
-
-
- sp1_f.set_title("Input Signal", weight="bold")
- sp1_f.set_xlabel("Frequency (Hz)")
- sp1_f.set_ylabel("Power (dBW)")
-
- Ts = 1.0/fs
- Tmax = len(d)*Ts
-
- t_in = scipy.arange(0, Tmax, Ts)
- x_in = scipy.array(d)
- sp1_t = fig1.add_subplot(2, 1, 2)
- p1_t = sp1_t.plot(t_in, x_in.real, "b-o")
- #p1_t = sp1_t.plot(t_in, x_in.imag, "r-o")
- sp1_t.set_ylim([-2.5, 2.5])
-
- sp1_t.set_title("Input Signal", weight="bold")
- sp1_t.set_xlabel("Time (s)")
- sp1_t.set_ylabel("Amplitude")
-
-
- # Plot output of PFB interpolator
- fs_int = tb._fs*tb._interp
-
- sp2_f = fig2.add_subplot(2, 1, 1)
- d = tb.snk1.data()[Ns:Ns+(tb._interp*Ne)]
- X,freq = mlab.psd(d, NFFT=fftlen, noverlap=fftlen/4, Fs=fs,
- window = lambda d: d*winfunc(fftlen),
- scale_by_freq=True)
- X_o = 10.0*scipy.log10(abs(fftpack.fftshift(X)))
- f_o = scipy.arange(-fs_int/2.0, fs_int/2.0, fs_int/float(X_o.size))
- p2_f = sp2_f.plot(f_o, X_o, "b")
- sp2_f.set_xlim([min(f_o), max(f_o)+1])
- sp2_f.set_ylim([-200.0, 50.0])
-
- sp2_f.set_title("Output Signal from PFB Interpolator", weight="bold")
- sp2_f.set_xlabel("Frequency (Hz)")
- sp2_f.set_ylabel("Power (dBW)")
-
- Ts_int = 1.0/fs_int
- Tmax = len(d)*Ts_int
-
- t_o = scipy.arange(0, Tmax, Ts_int)
- x_o1 = scipy.array(d)
- sp2_t = fig2.add_subplot(2, 1, 2)
- p2_t = sp2_t.plot(t_o, x_o1.real, "b-o")
- #p2_t = sp2_t.plot(t_o, x_o.imag, "r-o")
- sp2_t.set_ylim([-2.5, 2.5])
-
- sp2_t.set_title("Output Signal from PFB Interpolator", weight="bold")
- sp2_t.set_xlabel("Time (s)")
- sp2_t.set_ylabel("Amplitude")
-
-
- # Plot output of PFB arbitrary resampler
- fs_aint = tb._fs * tb._ainterp
-
- sp3_f = fig3.add_subplot(2, 1, 1)
- d = tb.snk2.data()[Ns:Ns+(tb._interp*Ne)]
- X,freq = mlab.psd(d, NFFT=fftlen, noverlap=fftlen/4, Fs=fs,
- window = lambda d: d*winfunc(fftlen),
- scale_by_freq=True)
- X_o = 10.0*scipy.log10(abs(fftpack.fftshift(X)))
- f_o = scipy.arange(-fs_aint/2.0, fs_aint/2.0, fs_aint/float(X_o.size))
- p3_f = sp3_f.plot(f_o, X_o, "b")
- sp3_f.set_xlim([min(f_o), max(f_o)+1])
- sp3_f.set_ylim([-200.0, 50.0])
-
- sp3_f.set_title("Output Signal from PFB Arbitrary Resampler", weight="bold")
- sp3_f.set_xlabel("Frequency (Hz)")
- sp3_f.set_ylabel("Power (dBW)")
-
- Ts_aint = 1.0/fs_aint
- Tmax = len(d)*Ts_aint
-
- t_o = scipy.arange(0, Tmax, Ts_aint)
- x_o2 = scipy.array(d)
- sp3_f = fig3.add_subplot(2, 1, 2)
- p3_f = sp3_f.plot(t_o, x_o2.real, "b-o")
- p3_f = sp3_f.plot(t_o, x_o1.real, "m-o")
- #p3_f = sp3_f.plot(t_o, x_o2.imag, "r-o")
- sp3_f.set_ylim([-2.5, 2.5])
-
- sp3_f.set_title("Output Signal from PFB Arbitrary Resampler", weight="bold")
- sp3_f.set_xlabel("Time (s)")
- sp3_f.set_ylabel("Amplitude")
-
- pylab.show()
-
-
-if __name__ == "__main__":
- try:
- main()
- except KeyboardInterrupt:
- pass
-
diff --git a/gnuradio-examples/python/pfb/reconstruction.py b/gnuradio-examples/python/pfb/reconstruction.py
deleted file mode 100755
index c7909f7a5..000000000
--- a/gnuradio-examples/python/pfb/reconstruction.py
+++ /dev/null
@@ -1,131 +0,0 @@
-#!/usr/bin/env python
-
-import scipy, math, pylab
-from scipy import fftpack
-from gnuradio import gr, digital, blks2
-
-fftlen = 8192
-
-def main():
- N = 10000
- fs = 2000.0
- Ts = 1.0/fs
- t = scipy.arange(0, N*Ts, Ts)
-
- # When playing with the number of channels, be careful about the filter
- # specs and the channel map of the synthesizer set below.
- nchans = 10
-
- # Build the filter(s)
- bw = 1000
- tb = 400
- proto_taps = gr.firdes.low_pass_2(1, nchans*fs, bw, tb, 80,
- gr.firdes.WIN_BLACKMAN_hARRIS)
- print "Filter length: ", len(proto_taps)
-
-
- # Create a modulated signal
- npwr = 0.01
- data = scipy.random.randint(0, 256, N)
- rrc_taps = gr.firdes.root_raised_cosine(1, 2, 1, 0.35, 41)
-
- src = gr.vector_source_b(data.astype(scipy.uint8).tolist(), False)
- mod = digital.bpsk_mod(samples_per_symbol=2)
- chan = gr.channel_model(npwr)
- rrc = gr.fft_filter_ccc(1, rrc_taps)
-
- # Split it up into pieces
- channelizer = blks2.pfb_channelizer_ccf(nchans, proto_taps, 2)
-
- # Put the pieces back together again
- syn_taps = [nchans*t for t in proto_taps]
- synthesizer = gr.pfb_synthesizer_ccf(nchans, syn_taps, True)
- src_snk = gr.vector_sink_c()
- snk = gr.vector_sink_c()
-
- # Remap the location of the channels
- # Can be done in synth or channelizer (watch out for rotattions in
- # the channelizer)
- synthesizer.set_channel_map([ 0, 1, 2, 3, 4,
- 15, 16, 17, 18, 19])
-
- tb = gr.top_block()
- tb.connect(src, mod, chan, rrc, channelizer)
- tb.connect(rrc, src_snk)
-
- vsnk = []
- for i in xrange(nchans):
- tb.connect((channelizer,i), (synthesizer, i))
-
- vsnk.append(gr.vector_sink_c())
- tb.connect((channelizer,i), vsnk[i])
-
- tb.connect(synthesizer, snk)
- tb.run()
-
- sin = scipy.array(src_snk.data()[1000:])
- sout = scipy.array(snk.data()[1000:])
-
-
- # Plot original signal
- fs_in = nchans*fs
- f1 = pylab.figure(1, figsize=(16,12), facecolor='w')
- s11 = f1.add_subplot(2,2,1)
- s11.psd(sin, NFFT=fftlen, Fs=fs_in)
- s11.set_title("PSD of Original Signal")
- s11.set_ylim([-200, -20])
-
- s12 = f1.add_subplot(2,2,2)
- s12.plot(sin.real[1000:1500], "o-b")
- s12.plot(sin.imag[1000:1500], "o-r")
- s12.set_title("Original Signal in Time")
-
- start = 1
- skip = 4
- s13 = f1.add_subplot(2,2,3)
- s13.plot(sin.real[start::skip], sin.imag[start::skip], "o")
- s13.set_title("Constellation")
- s13.set_xlim([-2, 2])
- s13.set_ylim([-2, 2])
-
- # Plot channels
- nrows = int(scipy.sqrt(nchans))
- ncols = int(scipy.ceil(float(nchans)/float(nrows)))
-
- f2 = pylab.figure(2, figsize=(16,12), facecolor='w')
- for n in xrange(nchans):
- s = f2.add_subplot(nrows, ncols, n+1)
- s.psd(vsnk[n].data(), NFFT=fftlen, Fs=fs_in)
- s.set_title("Channel {0}".format(n))
- s.set_ylim([-200, -20])
-
- # Plot reconstructed signal
- fs_out = 2*nchans*fs
- f3 = pylab.figure(3, figsize=(16,12), facecolor='w')
- s31 = f3.add_subplot(2,2,1)
- s31.psd(sout, NFFT=fftlen, Fs=fs_out)
- s31.set_title("PSD of Reconstructed Signal")
- s31.set_ylim([-200, -20])
-
- s32 = f3.add_subplot(2,2,2)
- s32.plot(sout.real[1000:1500], "o-b")
- s32.plot(sout.imag[1000:1500], "o-r")
- s32.set_title("Reconstructed Signal in Time")
-
- start = 2
- skip = 4
- s33 = f3.add_subplot(2,2,3)
- s33.plot(sout.real[start::skip], sout.imag[start::skip], "o")
- s33.set_title("Constellation")
- s33.set_xlim([-2, 2])
- s33.set_ylim([-2, 2])
-
- pylab.show()
-
-
-if __name__ == "__main__":
- try:
- main()
- except KeyboardInterrupt:
- pass
-
diff --git a/gnuradio-examples/python/pfb/resampler.py b/gnuradio-examples/python/pfb/resampler.py
deleted file mode 100755
index 7b296ca71..000000000
--- a/gnuradio-examples/python/pfb/resampler.py
+++ /dev/null
@@ -1,127 +0,0 @@
-#!/usr/bin/env python
-#
-# 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, blks2
-import sys
-
-try:
- import scipy
-except ImportError:
- print "Error: Program requires scipy (see: www.scipy.org)."
- sys.exit(1)
-
-try:
- import pylab
-except ImportError:
- print "Error: Program requires matplotlib (see: matplotlib.sourceforge.net)."
- sys.exit(1)
-
-class mytb(gr.top_block):
- def __init__(self, fs_in, fs_out, fc, N=10000):
- gr.top_block.__init__(self)
-
- rerate = float(fs_out) / float(fs_in)
- print "Resampling from %f to %f by %f " %(fs_in, fs_out, rerate)
-
- # Creating our own taps
- taps = gr.firdes.low_pass_2(32, 32, 0.25, 0.1, 80)
-
- self.src = gr.sig_source_c(fs_in, gr.GR_SIN_WAVE, fc, 1)
- #self.src = gr.noise_source_c(gr.GR_GAUSSIAN, 1)
- self.head = gr.head(gr.sizeof_gr_complex, N)
-
- # A resampler with our taps
- self.resamp_0 = blks2.pfb_arb_resampler_ccf(rerate, taps,
- flt_size=32)
-
- # A resampler that just needs a resampling rate.
- # Filter is created for us and designed to cover
- # entire bandwidth of the input signal.
- # An optional atten=XX rate can be used here to
- # specify the out-of-band rejection (default=80).
- self.resamp_1 = blks2.pfb_arb_resampler_ccf(rerate)
-
- self.snk_in = gr.vector_sink_c()
- self.snk_0 = gr.vector_sink_c()
- self.snk_1 = gr.vector_sink_c()
-
- self.connect(self.src, self.head, self.snk_in)
- self.connect(self.head, self.resamp_0, self.snk_0)
- self.connect(self.head, self.resamp_1, self.snk_1)
-
-def main():
- fs_in = 8000
- fs_out = 20000
- fc = 1000
- N = 10000
-
- tb = mytb(fs_in, fs_out, fc, N)
- tb.run()
-
-
- # Plot PSD of signals
- nfftsize = 2048
- fig1 = pylab.figure(1, figsize=(10,10), facecolor="w")
- sp1 = fig1.add_subplot(2,1,1)
- sp1.psd(tb.snk_in.data(), NFFT=nfftsize,
- noverlap=nfftsize/4, Fs = fs_in)
- sp1.set_title(("Input Signal at f_s=%.2f kHz" % (fs_in/1000.0)))
- sp1.set_xlim([-fs_in/2, fs_in/2])
-
- sp2 = fig1.add_subplot(2,1,2)
- sp2.psd(tb.snk_0.data(), NFFT=nfftsize,
- noverlap=nfftsize/4, Fs = fs_out,
- label="With our filter")
- sp2.psd(tb.snk_1.data(), NFFT=nfftsize,
- noverlap=nfftsize/4, Fs = fs_out,
- label="With auto-generated filter")
- sp2.set_title(("Output Signals at f_s=%.2f kHz" % (fs_out/1000.0)))
- sp2.set_xlim([-fs_out/2, fs_out/2])
- sp2.legend()
-
- # Plot signals in time
- Ts_in = 1.0/fs_in
- Ts_out = 1.0/fs_out
- t_in = scipy.arange(0, len(tb.snk_in.data())*Ts_in, Ts_in)
- t_out = scipy.arange(0, len(tb.snk_0.data())*Ts_out, Ts_out)
-
- fig2 = pylab.figure(2, figsize=(10,10), facecolor="w")
- sp21 = fig2.add_subplot(2,1,1)
- sp21.plot(t_in, tb.snk_in.data())
- sp21.set_title(("Input Signal at f_s=%.2f kHz" % (fs_in/1000.0)))
- sp21.set_xlim([t_in[100], t_in[200]])
-
- sp22 = fig2.add_subplot(2,1,2)
- sp22.plot(t_out, tb.snk_0.data(),
- label="With our filter")
- sp22.plot(t_out, tb.snk_1.data(),
- label="With auto-generated filter")
- sp22.set_title(("Output Signals at f_s=%.2f kHz" % (fs_out/1000.0)))
- r = float(fs_out)/float(fs_in)
- sp22.set_xlim([t_out[r * 100], t_out[r * 200]])
- sp22.legend()
-
- pylab.show()
-
-if __name__ == "__main__":
- main()
-
diff --git a/gnuradio-examples/python/pfb/resampler_demo.grc b/gnuradio-examples/python/pfb/resampler_demo.grc
deleted file mode 100644
index 468636a5c..000000000
--- a/gnuradio-examples/python/pfb/resampler_demo.grc
+++ /dev/null
@@ -1,598 +0,0 @@
-
-
- Sun Aug 23 11:39:47 2009
-
- options
-
- id
- resampler_demo
-
-
- _enabled
- True
-
-
- title
-
-
-
- author
-
-
-
- description
-
-
-
- window_size
- 1280, 1024
-
-
- generate_options
- wx_gui
-
-
- category
- Custom
-
-
- run
- True
-
-
- realtime_scheduling
-
-
-
- _coordinate
- (10, 10)
-
-
- _rotation
- 0
-
-
-
- import
-
- id
- import_0
-
-
- _enabled
- True
-
-
- import
- import math
-
-
- _coordinate
- (11, 59)
-
-
- _rotation
- 0
-
-
-
- variable
-
- id
- rs_taps
-
-
- _enabled
- True
-
-
- value
- firdes.low_pass(nphases, nphases, frac_bw, 0.5-frac_bw)
-
-
- _coordinate
- (273, 154)
-
-
- _rotation
- 0
-
-
-
- gr_add_const_vxx
-
- id
- adder
-
-
- _enabled
- True
-
-
- type
- float
-
-
- const
- -1.0
-
-
- vlen
- 1
-
-
- _coordinate
- (227, 303)
-
-
- _rotation
- 0
-
-
-
- gr_throttle
-
- id
- throttle
-
-
- _enabled
- True
-
-
- type
- float
-
-
- samples_per_second
- samp_rate
-
-
- vlen
- 1
-
-
- _coordinate
- (227, 493)
-
-
- _rotation
- 0
-
-
-
- wxgui_fftsink2
-
- id
- orig_fft
-
-
- _enabled
- True
-
-
- type
- complex
-
-
- title
- Original Spectrum
-
-
- samp_rate
- samp_rate
-
-
- baseband_freq
- 0
-
-
- y_per_div
- 10
-
-
- y_divs
- 10
-
-
- ref_level
- 30
-
-
- fft_size
- 1024
-
-
- fft_rate
- 30
-
-
- peak_hold
- False
-
-
- average
- False
-
-
- avg_alpha
- 0
-
-
- grid_pos
- 1, 0, 1, 3
-
-
- notebook
-
-
-
- _coordinate
- (409, 289)
-
-
- _rotation
- 180
-
-
-
- wxgui_fftsink2
-
- id
- resamp_fft
-
-
- _enabled
- True
-
-
- type
- complex
-
-
- title
- Resampled Spectrum
-
-
- samp_rate
- new_rate
-
-
- baseband_freq
- 0
-
-
- y_per_div
- 10
-
-
- y_divs
- 10
-
-
- ref_level
- 30
-
-
- fft_size
- 1024
-
-
- fft_rate
- 30
-
-
- peak_hold
- True
-
-
- average
- False
-
-
- avg_alpha
- 0
-
-
- grid_pos
- 2, 0, 1, 3
-
-
- notebook
-
-
-
- _coordinate
- (640, 256)
-
-
- _rotation
- 180
-
-
-
- gr_sig_source_x
-
- id
- tri_source
-
-
- _enabled
- True
-
-
- type
- float
-
-
- samp_rate
- samp_rate
-
-
- waveform
- gr.GR_TRI_WAVE
-
-
- freq
- 0.05
-
-
- amp
- 2.0
-
-
- offset
- 0
-
-
- _coordinate
- (21, 271)
-
-
- _rotation
- 0
-
-
-
- gr_frequency_modulator_fc
-
- id
- fm_mod
-
-
- _enabled
- True
-
-
- sensitivity
- math.pi
-
-
- _coordinate
- (411, 493)
-
-
- _rotation
- 0
-
-
-
- blks2_pfb_arb_resampler_ccf
-
- id
- resampler
-
-
- _enabled
- True
-
-
- rate
- float(new_rate)/samp_rate
-
-
- taps
- rs_taps
-
-
- size
- nphases
-
-
- _coordinate
- (641, 477)
-
-
- _rotation
- 0
-
-
-
- variable
-
- id
- nphases
-
-
- _enabled
- True
-
-
- value
- 32
-
-
- _coordinate
- (185, 153)
-
-
- _rotation
- 0
-
-
-
- variable_static_text
-
- id
- samp_rate
-
-
- _enabled
- True
-
-
- label
- Sample Rate
-
-
- value
- 44100
-
-
- converver
- float_converter
-
-
- formatter
- None
-
-
- grid_pos
- 0, 0, 1, 1
-
-
- notebook
-
-
-
- _coordinate
- (179, 14)
-
-
- _rotation
- 0
-
-
-
- variable_static_text
-
- id
- new_rate
-
-
- _enabled
- True
-
-
- label
- Resampled Rate
-
-
- value
- 48000
-
-
- converver
- float_converter
-
-
- formatter
- None
-
-
- grid_pos
- 0, 1, 1, 1
-
-
- notebook
-
-
-
- _coordinate
- (328, 15)
-
-
- _rotation
- 0
-
-
-
- variable_static_text
-
- id
- frac_bw
-
-
- _enabled
- True
-
-
- label
- Fractional Bandwidth
-
-
- value
- 0.45
-
-
- converver
- float_converter
-
-
- formatter
- lambda x: "%0.2f"%x
-
-
- grid_pos
- 0,2,1,1
-
-
- notebook
-
-
-
- _coordinate
- (473, 14)
-
-
- _rotation
- 0
-
-
-
- tri_source
- adder
- 0
- 0
-
-
- adder
- throttle
- 0
- 0
-
-
- resampler
- resamp_fft
- 0
- 0
-
-
- fm_mod
- resampler
- 0
- 0
-
-
- fm_mod
- orig_fft
- 0
- 0
-
-
- throttle
- fm_mod
- 0
- 0
-
-
diff --git a/gnuradio-examples/python/pfb/synth_filter.py b/gnuradio-examples/python/pfb/synth_filter.py
deleted file mode 100755
index a91edfebf..000000000
--- a/gnuradio-examples/python/pfb/synth_filter.py
+++ /dev/null
@@ -1,83 +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, blks2
-import sys
-
-try:
- import scipy
-except ImportError:
- print "Error: Program requires scipy (see: www.scipy.org)."
- sys.exit(1)
-
-try:
- import pylab
-except ImportError:
- print "Error: Program requires matplotlib (see: matplotlib.sourceforge.net)."
- sys.exit(1)
-
-def main():
- N = 1000000
- fs = 8000
-
- freqs = [100, 200, 300, 400, 500]
- nchans = 7
-
- sigs = list()
- for fi in freqs:
- s = gr.sig_source_c(fs, gr.GR_SIN_WAVE, fi, 1)
- sigs.append(s)
-
- taps = gr.firdes.low_pass_2(len(freqs), fs, fs/float(nchans)/2, 100, 100)
- print "Num. Taps = %d (taps per filter = %d)" % (len(taps),
- len(taps)/nchans)
- filtbank = gr.pfb_synthesizer_ccf(nchans, taps)
-
- head = gr.head(gr.sizeof_gr_complex, N)
- snk = gr.vector_sink_c()
-
- tb = gr.top_block()
- tb.connect(filtbank, head, snk)
-
- for i,si in enumerate(sigs):
- tb.connect(si, (filtbank, i))
-
- tb.run()
-
- if 1:
- f1 = pylab.figure(1)
- s1 = f1.add_subplot(1,1,1)
- s1.plot(snk.data()[1000:])
-
- fftlen = 2048
- f2 = pylab.figure(2)
- s2 = f2.add_subplot(1,1,1)
- winfunc = scipy.blackman
- s2.psd(snk.data()[10000:], NFFT=fftlen,
- Fs = nchans*fs,
- noverlap=fftlen/4,
- window = lambda d: d*winfunc(fftlen))
-
- pylab.show()
-
-if __name__ == "__main__":
- main()
diff --git a/gnuradio-examples/python/pfb/synth_to_chan.py b/gnuradio-examples/python/pfb/synth_to_chan.py
deleted file mode 100755
index c6c80b2f8..000000000
--- a/gnuradio-examples/python/pfb/synth_to_chan.py
+++ /dev/null
@@ -1,117 +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, blks2
-import sys
-
-try:
- import scipy
-except ImportError:
- print "Error: Program requires scipy (see: www.scipy.org)."
- sys.exit(1)
-
-try:
- import pylab
-except ImportError:
- print "Error: Program requires matplotlib (see: matplotlib.sourceforge.net)."
- sys.exit(1)
-
-def main():
- N = 1000000
- fs = 8000
-
- freqs = [100, 200, 300, 400, 500]
- nchans = 7
-
- sigs = list()
- fmtx = list()
- for fi in freqs:
- s = gr.sig_source_f(fs, gr.GR_SIN_WAVE, fi, 1)
- fm = blks2.nbfm_tx (fs, 4*fs, max_dev=10000, tau=75e-6)
- sigs.append(s)
- fmtx.append(fm)
-
- syntaps = gr.firdes.low_pass_2(len(freqs), fs, fs/float(nchans)/2, 100, 100)
- print "Synthesis Num. Taps = %d (taps per filter = %d)" % (len(syntaps),
- len(syntaps)/nchans)
- chtaps = gr.firdes.low_pass_2(len(freqs), fs, fs/float(nchans)/2, 100, 100)
- print "Channelizer Num. Taps = %d (taps per filter = %d)" % (len(chtaps),
- len(chtaps)/nchans)
- filtbank = gr.pfb_synthesizer_ccf(nchans, syntaps)
- channelizer = blks2.pfb_channelizer_ccf(nchans, chtaps)
-
- noise_level = 0.01
- head = gr.head(gr.sizeof_gr_complex, N)
- noise = gr.noise_source_c(gr.GR_GAUSSIAN, noise_level)
- addnoise = gr.add_cc()
- snk_synth = gr.vector_sink_c()
-
- tb = gr.top_block()
-
- tb.connect(noise, (addnoise,0))
- tb.connect(filtbank, head, (addnoise, 1))
- tb.connect(addnoise, channelizer)
- tb.connect(addnoise, snk_synth)
-
- snk = list()
- for i,si in enumerate(sigs):
- tb.connect(si, fmtx[i], (filtbank, i))
-
- for i in xrange(nchans):
- snk.append(gr.vector_sink_c())
- tb.connect((channelizer, i), snk[i])
-
- tb.run()
-
- if 1:
- channel = 1
- data = snk[channel].data()[1000:]
-
- f1 = pylab.figure(1)
- s1 = f1.add_subplot(1,1,1)
- s1.plot(data[10000:10200] )
- s1.set_title(("Output Signal from Channel %d" % channel))
-
- fftlen = 2048
- winfunc = scipy.blackman
- #winfunc = scipy.hamming
-
- f2 = pylab.figure(2)
- s2 = f2.add_subplot(1,1,1)
- s2.psd(data, NFFT=fftlen,
- Fs = nchans*fs,
- noverlap=fftlen/4,
- window = lambda d: d*winfunc(fftlen))
- s2.set_title(("Output PSD from Channel %d" % channel))
-
- f3 = pylab.figure(3)
- s3 = f3.add_subplot(1,1,1)
- s3.psd(snk_synth.data()[1000:], NFFT=fftlen,
- Fs = nchans*fs,
- noverlap=fftlen/4,
- window = lambda d: d*winfunc(fftlen))
- s3.set_title("Output of Synthesis Filter")
-
- pylab.show()
-
-if __name__ == "__main__":
- main()
diff --git a/gnuradio-examples/python/tags/CMakeLists.txt b/gnuradio-examples/python/tags/CMakeLists.txt
deleted file mode 100644
index d2cd7b793..000000000
--- a/gnuradio-examples/python/tags/CMakeLists.txt
+++ /dev/null
@@ -1,28 +0,0 @@
-# Copyright 2011 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-
-include(GrPython)
-
-GR_PYTHON_INSTALL(PROGRAMS
- test_file_tags.py
- uhd_burst_detector.py
- DESTINATION ${GR_PKG_DATA_DIR}/examples/tags
- COMPONENT "gnuradio_examples"
-)
-
diff --git a/gnuradio-examples/python/tags/test_file_tags.py b/gnuradio-examples/python/tags/test_file_tags.py
deleted file mode 100755
index 446986cd7..000000000
--- a/gnuradio-examples/python/tags/test_file_tags.py
+++ /dev/null
@@ -1,55 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2011 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-#
-
-from gnuradio import gr
-import sys
-
-try:
- import scipy
-except ImportError:
- print "Error: Program requires scipy (see: www.scipy.org)."
- sys.exit(1)
-
-def main():
- data = scipy.arange(0, 32000, 1).tolist()
- trig = 100*[0,] + 100*[1,]
-
- src = gr.vector_source_s(data, True)
- trigger = gr.vector_source_s(trig, True)
-
- thr = gr.throttle(gr.sizeof_short, 10e3)
- ann = gr.annotator_alltoall(1000000, gr.sizeof_short)
- tagger = gr.burst_tagger(gr.sizeof_short)
-
- fsnk = gr.tagged_file_sink(gr.sizeof_short, 1)
-
- tb = gr.top_block()
- tb.connect(src, thr, (tagger, 0))
- tb.connect(trigger, (tagger, 1))
- tb.connect(tagger, fsnk)
-
- tb.run()
-
-if __name__ == "__main__":
- main()
-
-
diff --git a/gnuradio-examples/python/tags/uhd_burst_detector.py b/gnuradio-examples/python/tags/uhd_burst_detector.py
deleted file mode 100755
index 7411ab06e..000000000
--- a/gnuradio-examples/python/tags/uhd_burst_detector.py
+++ /dev/null
@@ -1,116 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2011 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-#
-
-from gnuradio import eng_notation
-from gnuradio import gr
-from gnuradio import uhd
-from gnuradio import window
-from gnuradio.eng_option import eng_option
-from gnuradio.gr import firdes
-from optparse import OptionParser
-
-class uhd_burst_detector(gr.top_block):
- def __init__(self, uhd_address, options):
-
- gr.top_block.__init__(self)
-
- self.uhd_addr = uhd_address
- self.freq = options.freq
- self.samp_rate = options.samp_rate
- self.gain = options.gain
- self.threshold = options.threshold
- self.trigger = options.trigger
-
- self.uhd_src = uhd.single_usrp_source(
- device_addr=self.uhd_addr,
- stream_args=uhd.stream_args('fc32'))
-
- self.uhd_src.set_samp_rate(self.samp_rate)
- self.uhd_src.set_center_freq(self.freq, 0)
- self.uhd_src.set_gain(self.gain, 0)
-
- taps = firdes.low_pass_2(1, 1, 0.4, 0.1, 60)
- self.chanfilt = gr.fir_filter_ccc(10, taps)
- self.tagger = gr.burst_tagger(gr.sizeof_gr_complex)
-
- # Dummy signaler to collect a burst on known periods
- data = 1000*[0,] + 1000*[1,]
- self.signal = gr.vector_source_s(data, True)
-
- # Energy detector to get signal burst
- ## use squelch to detect energy
- self.det = gr.simple_squelch_cc(self.threshold, 0.01)
- ## convert to mag squared (float)
- self.c2m = gr.complex_to_mag_squared()
- ## average to debounce
- self.avg = gr.single_pole_iir_filter_ff(0.01)
- ## rescale signal for conversion to short
- self.scale = gr.multiply_const_ff(2**16)
- ## signal input uses shorts
- self.f2s = gr.float_to_short()
-
- # Use file sink burst tagger to capture bursts
- self.fsnk = gr.tagged_file_sink(gr.sizeof_gr_complex, self.samp_rate)
-
-
- ##################################################
- # Connections
- ##################################################
- self.connect((self.uhd_src, 0), (self.tagger, 0))
- self.connect((self.tagger, 0), (self.fsnk, 0))
-
- if self.trigger:
- # Connect a dummy signaler to the burst tagger
- self.connect((self.signal, 0), (self.tagger, 1))
-
- else:
- # Connect an energy detector signaler to the burst tagger
- self.connect(self.uhd_src, self.det)
- self.connect(self.det, self.c2m, self.avg, self.scale, self.f2s)
- self.connect(self.f2s, (self.tagger, 1))
-
- def set_samp_rate(self, samp_rate):
- self.samp_rate = samp_rate
- self.uhd_src_0.set_samp_rate(self.samp_rate)
-
-if __name__ == '__main__':
- parser = OptionParser(option_class=eng_option, usage="%prog: [options]")
- parser.add_option("-a", "--address", type="string", default="addr=192.168.10.2",
- help="select address of the device [default=%default]")
- #parser.add_option("-A", "--antenna", default=None,
- # help="select Rx Antenna (only on RFX-series boards)")
- parser.add_option("-f", "--freq", type="eng_float", default=450e6,
- help="set frequency to FREQ", metavar="FREQ")
- parser.add_option("-g", "--gain", type="eng_float", default=0,
- help="set gain in dB [default=%default]")
- parser.add_option("-R", "--samp-rate", type="eng_float", default=200000,
- help="set USRP sample rate [default=%default]")
- parser.add_option("-t", "--threshold", type="float", default=-60,
- help="Set the detection power threshold (dBm) [default=%default")
- parser.add_option("-T", "--trigger", action="store_true", default=False,
- help="Use internal trigger instead of detector [default=%default]")
- (options, args) = parser.parse_args()
-
- uhd_addr = options.address
-
- tb = uhd_burst_detector(uhd_addr, options)
- tb.run()
diff --git a/gnuradio-examples/python/volk_benchmark/README b/gnuradio-examples/python/volk_benchmark/README
deleted file mode 100644
index 516fc15bd..000000000
--- a/gnuradio-examples/python/volk_benchmark/README
+++ /dev/null
@@ -1,252 +0,0 @@
-VOLK Benchmarking Scripts
-
-The Python programs in this directory are designed to help benchmark
-and compare Volk enhancements to GNU Radio. There are two kinds of
-scripts here: collecting data and displaying the data.
-
-Data collection is done by running a Volk testing script that will
-populate a SQLite database file (volk_results.db by default). The
-plotting utility provided here reads from the database files and plots
-bar graphs to compare the different installations.
-
-These benchmarks can be used to compare previous versions of GNU
-Radio to using Volk; they can be used to compare different Volk
-proto-kernels, as well, by editing the volk_config file; or they could
-be used to compare performance between different machines and/or
-processors.
-
-
-======================================================================
-Volk Profiling
-
-Before doing any kind of Volk benchmarking, it is important to run the
-volk_profile program. The profiler will build a config file for the
-best SIMD architecture for your processor. Run volk_profile that is
-installed into $PREFIX/bin. This program tests all known Volk kernels
-for each proto-kernel supported by the processor. When finished, it
-will write to $HOME/.volk/volk_config the best architecture for the
-VOLK function. This file is read when using a function to know the
-best version of the function to execute.
-
-The volk_config file contains a line for each kernel, where each line
-looks like:
-
- volk_
-
-The architecture will be something like (sse, sse2, sse3, avx, neon,
-etc.), depending on your processor.
-
-
-======================================================================
-Benchmark Tests
-
-There are currently two benchmark scripts defined for collecting
-data. There is one that runs through the type conversions that have
-been converted to Volk (volk_types.py) and the other runs through the
-math operators converted to using Volk (volk_math.py).
-
-Script prototypes
-Both have the same structure for use:
-
-----------------------------------------------------------------------
-./volk_.py [-h] -L LABEL [-D DATABASE] [-N NITEMS] [-I ITERATIONS]
- [--tests [{0,1,2,3} [{0,1,2,3} ...]]] [--list]
- [--all]
-
-optional arguments:
- -h, --help show this help message and exit
- -L LABEL, --label LABEL
- Label of database table [default: None]
- -D DATABASE, --database DATABASE
- Database file to store data in [default:
- volk_results.db]
- -N NITEMS, --nitems NITEMS
- Number of items per iterations [default: 1000000000.0]
- -I ITERATIONS, --iterations ITERATIONS
- Number of iterations [default: 20]
- --tests [{0,1,2,3} [{0,1,2,3} ...]]
- A list of tests to run; can be a single test or a
- space-separated list.
- --list List the available tests
- --all Run all tests
-----------------------------------------------------------------------
-
-To run, you specify the tests to run and a label to store along with
-the results. To find out what the available tests are, use the
-'--list' option.
-
-To specify a subset of tests, use the '--tests' with space-separated
-list of tests numbers (e.g., --tests 0 2 4 9).
-
-Use the '--all' to run all tests.
-
-The label specified is used as an identifier for the benchmarking
-currently being done. This is required as it is important in
-organizing the data in the database (each label is its own
-table). Usually, the label will specify the type of run being done,
-such as "volk_aligned" or "v3_5_1". In these cases, the "volk_aligned"
-label says that this is for a benchmarking using the GNU Radio version
-that uses the aligned scheduler and Volk calls in the work
-functions. The "v3_5_1" label is if you were benchmarking an installed
-version 3.5.1 of GNU Radio, which is pre-Volk. These will then be
-plotted against each other to see the timing differences.
-
-The 'database' option will output the results to a new database
-file. This can be useful for separating the output of different runs
-or of different benchmarks, such as the types versus the math scripts,
-say, or to distinguish results from different computers.
-
-If rerun using the same database and label, the entries in the table
-will simply be replaced by the new results.
-
-It is often useful to use the 'sqlitebrowser' program to interrogate
-the database file farther, if you are interested in the structure or
-the raw data.
-
-Other parameters of this script set the number of items to process and
-number of iterations to use when computing the benchmarking
-data. These default to 1 billion samples per iteration over 20
-iterations. Expect a default run to take a long time. Using the '-N'
-and '-I' options can be used to change the runtime of the benchmarks
-but are set high to remove problems of variance between iterations.
-
-======================================================================
-Plotting Results
-
-The volk_plot.py script reads a given database file and plots the
-results. The default behavior is to read all of the labels stored in
-the database and plot them as data sets on a bar graph. This shows the
-average time taken to process the number of items given.
-
-The options for the plotting script are:
-
-usage: volk_plot.py [-h] [-D DATABASE] [-E] [-P {mean,min,max}] [-% table]
-
-Plot Volk performance results from a SQLite database. Run one of the volk
-tests first (e.g, volk_math.py)
-
-----------------------------------------------------------------------
-optional arguments:
- -h, --help show this help message and exit
- -D DATABASE, --database DATABASE
- Database file to read data from [default:
- volk_results.db]
- -E, --errorbars Show error bars (1 standard dev.)
- -P {mean,min,max}, --plot {mean,min,max}
- Set the type of plot to produce [default: mean]
- -% table, --percent table
- Show percent difference to the given type [default:
- None]
-----------------------------------------------------------------------
-
-This script allows you to specify the database used (-D), but will
-always read all rows from all tables from it and display them. You can
-also turn on plotting error bars (1 standard deviation the mean). Be
-careful, though, as some older versions of Matplotlib might have an
-issue with this option.
-
-The mean time is only one possible statistic that we might be
-interested in when looking at the data. It represents the average user
-experience when running a given block. On the other hand, the minimum
-runtime best represents the actual performance of a block given
-minimal OS interruptions while running. Right now, the data collected
-includes the mean, variance, min, and max over the number of
-iterations given. Using the '-P' option, you can specify the type of
-data to plot (mean, min, or max).
-
-Another useful way of looking at the data is to compare the percent
-improvement of a benchmark compared to another. This is done using the
-'-%' option with the provided table (or label) as the baseline. So if
-we were interested in comparing how much the 'volk_aligned' was over
-'v3_5_1', we would specify '-% v3_5_1' to see this. The plot would
-then only show the percent speedup observed using Volk for each of the
-blocks.
-
-
-======================================================================
-Benchmarking Walkthrough
-
-This will walk through an example of benchmarking the new Volk
-implementation versus the pre-Volk GNU Radio. It also shows how to
-look at the SIMD optimized versions versus the generic
-implementations.
-
-Since we introduced Volk in GNU Radio 3.5.2, we will use the following
-labels for our data:
-
- 1.) volk_aligned: v3.5.2 with volk_profile results in .volk/volk_config
- 2.) v3_5_2: v3.5.2 with the generic (non-SIMD) calls to Volk
- 3.) v3_5_1: an installation of GNU Radio from version v3.5.1
-
-We assume that we have installed two versions of GNU Radio.
-
- v3.5.2 installed into /opt/gr-3_5_2
- v3.5.1 installed into /opt/gr-3_5_1
-
-To test cases 1 and 2 above, we have to run GNU Radio from the v3.5.2
-installation, so we set the following environmental variables. Note
-that this is written for Ubuntu 11.10. These commands and directories
-may have to be changed depending on your OS and versions.
-
- export LD_LIBRARY_PATH=/opt/gr-3_5_2/lib
- export LD_LIBRARY_PATH=/opt/gr-3_5_2/lib/python2.7/dist-packages
-
-Now we can run the benchmark tests, so we will focus on the math
-operators:
-
- ./volk_math.py -D volk_results_math.db --all -L volk_aligned
-
-When this finishes, the 'volk_results_math.db' will contain our
-results for this run.
-
-We next want to run the generic, non-SIMD, calls. This can be done by
-changing the Volk kernel settings in $HOME/.volk/volk_config. First,
-make a backup of this file. Then edit it and change all architecture
-calls (sse, sse2, etc.) to 'generic.' Now, Volk will only call the
-generic versions of these functions. So we rerun the benchmark with:
-
- ./volk_math.py -D volk_results_math.db --all -L v3_5_2
-
-Notice that the only thing changed here was the label to 'v3_5_2'.
-
-Next, we want to collect data for the non-Volk version of GNU
-Radio. This is important because some internals to GNU Radio were made
-when adding support for Volk, so it is nice to know what the
-differences do to our performance. First, we set the environmental
-variables to point to the v3.5.1 installation:
-
- export LD_LIBRARY_PATH=/opt/gr-3_5_1/lib
- export LD_LIBRARY_PATH=/opt/gr-3_5_1/lib/python2.7/dist-packages
-
-And when we run the test, we use the same command line, but the GNU
-Radio libraries and Python files used come from v3.5.1. We also change
-the label to indicate the different version to store.
-
- ./volk_math.py -D volk_results_math.db --all -L v3_5_1
-
-We now have a database populated with three tables for the three
-different labels. We can plot them all together by simply running:
-
- ./volk_plot.py -D volk_results_math.db
-
-This will show the average run times for each of the three
-configurations for all math functions tested. We might also be
-interested to see the difference in performance from the v3.5.1
-version, so we can run:
-
- ./volk_plot.py -D volk_results_math.db -% v3_5_1
-
-That will plot both the 'volk_aligned' and 'v3_5_2' as a percentage
-improvement over v3_5_1. A positive value indicates that this version
-runs faster than the v3.5.1 version.
-
-
-----------------------------------------------------------------------
-
-Another interesting test case could be to compare results on different
-processors. So if you have different generation Intels, AMD, or
-whatever, you can simply pass the .db file around and run the Volk
-benchmark script to populate the database with different results. For
-this, you would specify a label like '-L i7_2620M' that indicates the
-processor type to uniquely ID the data.
-
diff --git a/gnuradio-examples/python/volk_benchmark/volk_math.py b/gnuradio-examples/python/volk_benchmark/volk_math.py
deleted file mode 100755
index 8bf9ed6f3..000000000
--- a/gnuradio-examples/python/volk_benchmark/volk_math.py
+++ /dev/null
@@ -1,151 +0,0 @@
-#!/usr/bin/env python
-
-from gnuradio import gr
-import argparse
-from volk_test_funcs import *
-
-def multiply_const_cc(N):
- k = 3.3
- op = gr.multiply_const_cc(k)
- tb = helper(N, op, gr.sizeof_gr_complex, gr.sizeof_gr_complex, 1, 1)
- return tb
-
-######################################################################
-
-def multiply_const_ff(N):
- k = 3.3
- op = gr.multiply_const_ff(k)
- tb = helper(N, op, gr.sizeof_float, gr.sizeof_float, 1, 1)
- return tb
-
-######################################################################
-
-def multiply_cc(N):
- op = gr.multiply_cc(1)
- tb = helper(N, op, gr.sizeof_gr_complex, gr.sizeof_gr_complex, 2, 1)
- return tb
-
-######################################################################
-
-def multiply_ff(N):
- op = gr.multiply_ff()
- tb = helper(N, op, gr.sizeof_float, gr.sizeof_float, 2, 1)
- return tb
-
-######################################################################
-
-def add_ff(N):
- op = gr.add_ff()
- tb = helper(N, op, gr.sizeof_float, gr.sizeof_float, 2, 1)
- return tb
-
-######################################################################
-
-def conjugate_cc(N):
- op = gr.conjugate_cc()
- tb = helper(N, op, gr.sizeof_gr_complex, gr.sizeof_gr_complex, 1, 1)
- return tb
-
-######################################################################
-
-def multiply_conjugate_cc(N):
- try:
- op = gr.multiply_conjugate_cc()
- tb = helper(N, op, gr.sizeof_gr_complex, gr.sizeof_gr_complex, 2, 1)
- return tb
-
- except AttributeError:
- class s(gr.hier_block2):
- def __init__(self):
- gr.hier_block2.__init__(self, "s",
- gr.io_signature(2, 2, gr.sizeof_gr_complex),
- gr.io_signature(1, 1, gr.sizeof_gr_complex))
- conj = gr.conjugate_cc()
- mult = gr.multiply_cc()
- self.connect((self,0), (mult,0))
- self.connect((self,1), conj, (mult,1))
- self.connect(mult, self)
-
- op = s()
- tb = helper(N, op, gr.sizeof_gr_complex, gr.sizeof_gr_complex, 2, 1)
- return tb
-
-
-######################################################################
-
-def run_tests(func, N, iters):
- print("Running Test: {0}".format(func.__name__))
- try:
- tb = func(N)
- t = timeit(tb, iters)
- res = format_results(func.__name__, t)
- return res
- except AttributeError:
- print "\tCould not run test. Skipping."
- return None
-
-def main():
- avail_tests = [multiply_const_cc,
- multiply_const_ff,
- multiply_cc,
- multiply_ff,
- add_ff,
- conjugate_cc,
- multiply_conjugate_cc]
-
- desc='Time an operation to compare with other implementations. \
- This program runs a simple GNU Radio flowgraph to test a \
- particular math function, mostly to compare the \
- Volk-optimized implementation versus a regular \
- implementation. The results are stored to an SQLite database \
- that can then be read by volk_plot.py to plot the differences.'
- parser = argparse.ArgumentParser(description=desc)
- parser.add_argument('-L', '--label', type=str,
- required=True, default=None,
- help='Label of database table [default: %(default)s]')
- parser.add_argument('-D', '--database', type=str,
- default="volk_results.db",
- help='Database file to store data in [default: %(default)s]')
- parser.add_argument('-N', '--nitems', type=float,
- default=1e9,
- help='Number of items per iterations [default: %(default)s]')
- parser.add_argument('-I', '--iterations', type=int,
- default=20,
- help='Number of iterations [default: %(default)s]')
- parser.add_argument('--tests', type=int, nargs='*',
- choices=xrange(len(avail_tests)),
- help='A list of tests to run; can be a single test or a \
- space-separated list.')
- parser.add_argument('--list', action='store_true',
- help='List the available tests')
- parser.add_argument('--all', action='store_true',
- help='Run all tests')
- args = parser.parse_args()
-
- if(args.list):
- print "Available Tests to Run:"
- print "\n".join(["\t{0}: {1}".format(i,f.__name__) for i,f in enumerate(avail_tests)])
- sys.exit(0)
-
- N = int(args.nitems)
- iters = args.iterations
- label = args.label
-
- conn = create_connection(args.database)
- new_table(conn, label)
-
- if args.all:
- tests = xrange(len(avail_tests))
- else:
- tests = args.tests
-
- for test in tests:
- res = run_tests(avail_tests[test], N, iters)
- if res is not None:
- replace_results(conn, label, N, iters, res)
-
-if __name__ == "__main__":
- try:
- main()
- except KeyboardInterrupt:
- pass
diff --git a/gnuradio-examples/python/volk_benchmark/volk_plot.py b/gnuradio-examples/python/volk_benchmark/volk_plot.py
deleted file mode 100755
index 823dfbf64..000000000
--- a/gnuradio-examples/python/volk_benchmark/volk_plot.py
+++ /dev/null
@@ -1,169 +0,0 @@
-#!/usr/bin/env python
-
-import sys, math
-import argparse
-from volk_test_funcs import *
-
-try:
- import matplotlib
- import matplotlib.pyplot as plt
-except ImportError:
- sys.stderr.write("Could not import Matplotlib (http://matplotlib.sourceforge.net/)\n")
- sys.exit(1)
-
-def main():
- desc='Plot Volk performance results from a SQLite database. ' + \
- 'Run one of the volk tests first (e.g, volk_math.py)'
- parser = argparse.ArgumentParser(description=desc)
- parser.add_argument('-D', '--database', type=str,
- default='volk_results.db',
- help='Database file to read data from [default: %(default)s]')
- parser.add_argument('-E', '--errorbars',
- action='store_true', default=False,
- help='Show error bars (1 standard dev.)')
- parser.add_argument('-P', '--plot', type=str,
- choices=['mean', 'min', 'max'],
- default='mean',
- help='Set the type of plot to produce [default: %(default)s]')
- parser.add_argument('-%', '--percent', type=str,
- default=None, metavar="table",
- help='Show percent difference to the given type [default: %(default)s]')
- args = parser.parse_args()
-
- # Set up global plotting properties
- matplotlib.rcParams['figure.subplot.bottom'] = 0.2
- matplotlib.rcParams['figure.subplot.top'] = 0.95
- matplotlib.rcParams['figure.subplot.right'] = 0.98
- matplotlib.rcParams['ytick.labelsize'] = 16
- matplotlib.rcParams['xtick.labelsize'] = 16
- matplotlib.rcParams['legend.fontsize'] = 18
-
- # Get list of tables to compare
- conn = create_connection(args.database)
- tables = list_tables(conn)
- M = len(tables)
-
- # Colors to distinguish each table in the bar graph
- # More than 5 tables will wrap around to the start.
- colors = ['b', 'r', 'g', 'm', 'k']
-
- # Set up figure for plotting
- f0 = plt.figure(0, facecolor='w', figsize=(14,10))
- s0 = f0.add_subplot(1,1,1)
-
- # Create a register of names that exist in all tables
- tmp_regs = []
- for table in tables:
- # Get results from the next table
- res = get_results(conn, table[0])
-
- tmp_regs.append(list())
- for r in res:
- try:
- tmp_regs[-1].index(r['kernel'])
- except ValueError:
- tmp_regs[-1].append(r['kernel'])
-
- # Get only those names that are common in all tables
- name_reg = tmp_regs[0]
- for t in tmp_regs[1:]:
- name_reg = list(set(name_reg) & set(t))
- name_reg.sort()
-
- # Pull the data out for each table into a dictionary
- # we can ref the table by it's name and the data associated
- # with a given kernel in name_reg by it's name.
- # This ensures there is no sorting issue with the data in the
- # dictionary, so the kernels are plotted against each other.
- table_data = dict()
- for i,table in enumerate(tables):
- # Get results from the next table
- res = get_results(conn, table[0])
-
- data = dict()
- for r in res:
- data[r['kernel']] = r
-
- table_data[table[0]] = data
-
- if args.percent is not None:
- for i,t in enumerate(table_data):
- if args.percent == t:
- norm_data = []
- for name in name_reg:
- if(args.plot == 'max'):
- norm_data.append(table_data[t][name]['max'])
- elif(args.plot == 'min'):
- norm_data.append(table_data[t][name]['min'])
- elif(args.plot == 'mean'):
- norm_data.append(table_data[t][name]['avg'])
-
-
- # Plot the results
- x0 = xrange(len(name_reg))
- i = 0
- for t in (table_data):
- ydata = []
- stds = []
- for name in name_reg:
- stds.append(math.sqrt(table_data[t][name]['var']))
- if(args.plot == 'max'):
- ydata.append(table_data[t][name]['max'])
- elif(args.plot == 'min'):
- ydata.append(table_data[t][name]['min'])
- elif(args.plot == 'mean'):
- ydata.append(table_data[t][name]['avg'])
-
- if args.percent is not None:
- ydata = [-100*(y-n)/y for y,n in zip(ydata,norm_data)]
- if(args.percent != t):
- # makes x values for this data set placement
- # width of bars depends on number of comparisons
- wdth = 0.80/(M-1)
- x1 = [x + i*wdth for x in x0]
- i += 1
-
- s0.bar(x1, ydata, width=wdth,
- color=colors[(i-1)%M], label=t,
- edgecolor='k', linewidth=2)
-
- else:
- # makes x values for this data set placement
- # width of bars depends on number of comparisons
- wdth = 0.80/M
- x1 = [x + i*wdth for x in x0]
- i += 1
-
- if(args.errorbars is False):
- s0.bar(x1, ydata, width=wdth,
- color=colors[(i-1)%M], label=t,
- edgecolor='k', linewidth=2)
- else:
- s0.bar(x1, ydata, width=wdth,
- yerr=stds,
- color=colors[i%M], label=t,
- edgecolor='k', linewidth=2,
- error_kw={"ecolor": 'k', "capsize":5,
- "linewidth":2})
-
- nitems = res[0]['nitems']
- if args.percent is None:
- s0.set_ylabel("Processing time (sec) [{0:G} items]".format(nitems),
- fontsize=22, fontweight='bold',
- horizontalalignment='center')
- else:
- s0.set_ylabel("% Improvement over {0} [{1:G} items]".format(
- args.percent, nitems),
- fontsize=22, fontweight='bold')
-
- s0.legend()
- s0.set_xticks(x0)
- s0.set_xticklabels(name_reg)
- for label in s0.xaxis.get_ticklabels():
- label.set_rotation(45)
- label.set_fontsize(16)
-
- plt.show()
-
-if __name__ == "__main__":
- main()
diff --git a/gnuradio-examples/python/volk_benchmark/volk_test_funcs.py b/gnuradio-examples/python/volk_benchmark/volk_test_funcs.py
deleted file mode 100644
index 4f4e4afd3..000000000
--- a/gnuradio-examples/python/volk_benchmark/volk_test_funcs.py
+++ /dev/null
@@ -1,171 +0,0 @@
-#!/usr/bin/env python
-
-from gnuradio import gr
-import math, sys, os, time
-
-try:
- import scipy
-except ImportError:
- sys.stderr.write("Unable to import Scipy (www.scipy.org)\n")
- sys.exit(1)
-
-try:
- import sqlite3
-except ImportError:
- sys.stderr.write("Unable to import sqlite3: requires Python 2.5\n")
- sys.exit(1)
-
-def execute(conn, cmd):
- '''
- Executes the command cmd to the database opened in connection conn.
- '''
- c = conn.cursor()
- c.execute(cmd)
- conn.commit()
- c.close()
-
-def create_connection(database):
- '''
- Returns a connection object to the SQLite database.
- '''
- return sqlite3.connect(database)
-
-def new_table(conn, tablename):
- '''
- Create a new table for results.
- All results are in the form: [kernel | nitems | iters | avg. time | variance | max time | min time ]
- Each table is meant as a different setting (e.g., volk_aligned, volk_unaligned, etc.)
- '''
- cols = "kernel text, nitems int, iters int, avg real, var real, max real, min real"
- cmd = "create table if not exists {0} ({1})".format(
- tablename, cols)
- execute(conn, cmd)
-
-def replace_results(conn, tablename, nitems, iters, res):
- '''
- Inserts or replaces the results 'res' dictionary values into the table.
- This deletes all old entries of the kernel in this table.
- '''
- cmd = "DELETE FROM {0} where kernel='{1}'".format(tablename, res["kernel"])
- execute(conn, cmd)
- insert_results(conn, tablename, nitems, iters, res)
-
-def insert_results(conn, tablename, nitems, iters, res):
- '''
- Inserts the results dictionary values into the table.
- '''
- cols = "kernel, nitems, iters, avg, var, max, min"
- cmd = "INSERT INTO {0} ({1}) VALUES ('{2}', {3}, {4}, {5}, {6}, {7}, {8})".format(
- tablename, cols, res["kernel"], nitems, iters,
- res["avg"], res["var"], res["max"], res["min"])
- execute(conn, cmd)
-
-def list_tables(conn):
- '''
- Returns a list of all tables in the database.
- '''
- cmd = "SELECT name FROM sqlite_master WHERE type='table' ORDER BY name"
- c = conn.cursor()
- c.execute(cmd)
- t = c.fetchall()
- c.close()
-
- return t
-
-def get_results(conn, tablename):
- '''
- Gets all results in tablename.
- '''
- cmd = "SELECT * FROM {0}".format(tablename)
- c = conn.cursor()
- c.execute(cmd)
- fetched = c.fetchall()
- c.close()
-
- res = list()
- for f in fetched:
- r = dict()
- r['kernel'] = f[0]
- r['nitems'] = f[1]
- r['iters'] = f[2]
- r['avg'] = f[3]
- r['var'] = f[4]
- r['min'] = f[5]
- r['max'] = f[6]
- res.append(r)
-
- return res
-
-
-class helper(gr.top_block):
- '''
- Helper function to run the tests. The parameters are:
- N: number of items to process (int)
- op: The GR block/hier_block to test
- isizeof: the sizeof the input type
- osizeof: the sizeof the output type
- nsrcs: number of inputs to the op
- nsnks: number of outputs of the op
-
- This function can only handle blocks where all inputs are the same
- datatype and all outputs are the same data type
- '''
- def __init__(self, N, op,
- isizeof=gr.sizeof_gr_complex,
- osizeof=gr.sizeof_gr_complex,
- nsrcs=1, nsnks=1):
- gr.top_block.__init__(self, "helper")
-
- self.op = op
- self.srcs = []
- self.snks = []
- self.head = gr.head(isizeof, N)
-
- for n in xrange(nsrcs):
- self.srcs.append(gr.null_source(isizeof))
-
- for n in xrange(nsnks):
- self.snks.append(gr.null_sink(osizeof))
-
- self.connect(self.srcs[0], self.head, (self.op,0))
-
- for n in xrange(1, nsrcs):
- self.connect(self.srcs[n], (self.op,n))
-
- for n in xrange(nsnks):
- self.connect((self.op,n), self.snks[n])
-
-def timeit(tb, iterations):
- '''
- Given a top block, this function times it for a number of
- iterations and stores the time in a list that is returned.
- '''
- r = gr.enable_realtime_scheduling()
- if r != gr.RT_OK:
- print "Warning: failed to enable realtime scheduling"
-
- times = []
- for i in xrange(iterations):
- start_time = time.time()
- tb.run()
- end_time = time.time()
- tb.head.reset()
-
- times.append(end_time - start_time)
-
- return times
-
-def format_results(kernel, times):
- '''
- Convinience function to convert the results of the timeit function
- into a dictionary.
- '''
- res = dict()
- res["kernel"] = kernel
- res["avg"] = scipy.mean(times)
- res["var"] = scipy.var(times)
- res["max"] = max(times)
- res["min"] = min(times)
- return res
-
-
diff --git a/gnuradio-examples/python/volk_benchmark/volk_types.py b/gnuradio-examples/python/volk_benchmark/volk_types.py
deleted file mode 100755
index 3bc5a22ae..000000000
--- a/gnuradio-examples/python/volk_benchmark/volk_types.py
+++ /dev/null
@@ -1,182 +0,0 @@
-#!/usr/bin/env python
-
-from gnuradio import gr
-import argparse
-from volk_test_funcs import *
-
-######################################################################
-
-def float_to_char(N):
- op = gr.float_to_char()
- tb = helper(N, op, gr.sizeof_float, gr.sizeof_char, 1, 1)
- return tb
-
-######################################################################
-
-def float_to_int(N):
- op = gr.float_to_int()
- tb = helper(N, op, gr.sizeof_float, gr.sizeof_int, 1, 1)
- return tb
-
-######################################################################
-
-def float_to_short(N):
- op = gr.float_to_short()
- tb = helper(N, op, gr.sizeof_float, gr.sizeof_short, 1, 1)
- return tb
-
-######################################################################
-
-def short_to_float(N):
- op = gr.short_to_float()
- tb = helper(N, op, gr.sizeof_short, gr.sizeof_float, 1, 1)
- return tb
-
-######################################################################
-
-def short_to_char(N):
- op = gr.short_to_char()
- tb = helper(N, op, gr.sizeof_short, gr.sizeof_char, 1, 1)
- return tb
-
-######################################################################
-
-def char_to_short(N):
- op = gr.char_to_short()
- tb = helper(N, op, gr.sizeof_char, gr.sizeof_short, 1, 1)
- return tb
-
-######################################################################
-
-def char_to_float(N):
- op = gr.char_to_float()
- tb = helper(N, op, gr.sizeof_char, gr.sizeof_float, 1, 1)
- return tb
-
-######################################################################
-
-def int_to_float(N):
- op = gr.int_to_float()
- tb = helper(N, op, gr.sizeof_int, gr.sizeof_float, 1, 1)
- return tb
-
-######################################################################
-
-def complex_to_float(N):
- op = gr.complex_to_float()
- tb = helper(N, op, gr.sizeof_gr_complex, gr.sizeof_float, 1, 2)
- return tb
-
-######################################################################
-
-def complex_to_real(N):
- op = gr.complex_to_real()
- tb = helper(N, op, gr.sizeof_gr_complex, gr.sizeof_float, 1, 1)
- return tb
-
-######################################################################
-
-def complex_to_imag(N):
- op = gr.complex_to_imag()
- tb = helper(N, op, gr.sizeof_gr_complex, gr.sizeof_float, 1, 1)
- return tb
-
-######################################################################
-
-def complex_to_mag(N):
- op = gr.complex_to_mag()
- tb = helper(N, op, gr.sizeof_gr_complex, gr.sizeof_float, 1, 1)
- return tb
-
-######################################################################
-
-def complex_to_mag_squared(N):
- op = gr.complex_to_mag_squared()
- tb = helper(N, op, gr.sizeof_gr_complex, gr.sizeof_float, 1, 1)
- return tb
-
-######################################################################
-
-
-def run_tests(func, N, iters):
- print("Running Test: {0}".format(func.__name__))
- try:
- tb = func(N)
- t = timeit(tb, iters)
- res = format_results(func.__name__, t)
- return res
- except AttributeError:
- print "\tCould not run test. Skipping."
- return None
-
-def main():
- avail_tests = [float_to_char,
- float_to_int,
- float_to_short,
- short_to_float,
- short_to_char,
- char_to_short,
- char_to_float,
- int_to_float,
- complex_to_float,
- complex_to_real,
- complex_to_imag,
- complex_to_mag,
- complex_to_mag_squared]
-
- desc='Time an operation to compare with other implementations. \
- This program runs a simple GNU Radio flowgraph to test a \
- particular math function, mostly to compare the \
- Volk-optimized implementation versus a regular \
- implementation. The results are stored to an SQLite database \
- that can then be read by volk_plot.py to plot the differences.'
- parser = argparse.ArgumentParser(description=desc)
- parser.add_argument('-L', '--label', type=str,
- required=True, default=None,
- help='Label of database table [default: %(default)s]')
- parser.add_argument('-D', '--database', type=str,
- default="volk_results.db",
- help='Database file to store data in [default: %(default)s]')
- parser.add_argument('-N', '--nitems', type=float,
- default=1e9,
- help='Number of items per iterations [default: %(default)s]')
- parser.add_argument('-I', '--iterations', type=int,
- default=20,
- help='Number of iterations [default: %(default)s]')
- parser.add_argument('--tests', type=int, nargs='*',
- choices=xrange(len(avail_tests)),
- help='A list of tests to run; can be a single test or a \
- space-separated list.')
- parser.add_argument('--list', action='store_true',
- help='List the available tests')
- parser.add_argument('--all', action='store_true',
- help='Run all tests')
- args = parser.parse_args()
-
- if(args.list):
- print "Available Tests to Run:"
- print "\n".join(["\t{0}: {1}".format(i,f.__name__) for i,f in enumerate(avail_tests)])
- sys.exit(0)
-
- N = int(args.nitems)
- iters = args.iterations
- label = args.label
-
- conn = create_connection(args.database)
- new_table(conn, label)
-
- if args.all:
- tests = xrange(len(avail_tests))
- else:
- tests = args.tests
-
- for test in tests:
- res = run_tests(avail_tests[test], N, iters)
- if res is not None:
- replace_results(conn, label, N, iters, res)
-
-if __name__ == "__main__":
- try:
- main()
- except KeyboardInterrupt:
- pass
diff --git a/gr-digital/examples/CMakeLists.txt b/gr-digital/examples/CMakeLists.txt
index 12fca6009..33d257e59 100644
--- a/gr-digital/examples/CMakeLists.txt
+++ b/gr-digital/examples/CMakeLists.txt
@@ -19,6 +19,7 @@
include(GrPython)
+# Base stuff
GR_PYTHON_INSTALL(PROGRAMS
example_costas.py
example_fll.py
@@ -30,6 +31,7 @@ GR_PYTHON_INSTALL(PROGRAMS
COMPONENT "digital_python"
)
+# Narrowband
GR_PYTHON_INSTALL(PROGRAMS
narrowband/transmit_path.py
narrowband/receive_path.py
@@ -45,6 +47,7 @@ GR_PYTHON_INSTALL(PROGRAMS
COMPONENT "digital_python"
)
+# OFDM
GR_PYTHON_INSTALL(PROGRAMS
ofdm/benchmark_add_channel.py
ofdm/benchmark_rx.py
@@ -58,3 +61,16 @@ GR_PYTHON_INSTALL(PROGRAMS
DESTINATION ${GR_PKG_DIGITAL_EXAMPLES_DIR}/ofdm
COMPONENT "digital_python"
)
+
+# DEMOD
+install(
+ FILES
+ demod/digital_freq_lock.grc
+ demod/mpsk_demod.grc
+ demod/pam_sync.grc
+ demod/pam_timing.grc
+ demod/ber_simulation.grc
+ demod/dpsk_loopback.grc
+ DESTINATION ${GR_PKG_DIGITAL_EXAMPLES_DIR}/demod
+ COMPONENT "digital_python"
+)
diff --git a/gr-digital/examples/demod/ber_simulation.grc b/gr-digital/examples/demod/ber_simulation.grc
new file mode 100644
index 000000000..6a9361ed1
--- /dev/null
+++ b/gr-digital/examples/demod/ber_simulation.grc
@@ -0,0 +1,651 @@
+
+
+ Tue Apr 3 18:11:51 2012
+
+ options
+
+ id
+ ber_sim
+
+
+ _enabled
+ True
+
+
+ title
+ BER Simulation
+
+
+ author
+ Example
+
+
+ description
+ Adjust the noise and constellation... see what happens!
+
+
+ window_size
+ 1280, 1024
+
+
+ generate_options
+ wx_gui
+
+
+ category
+ Custom
+
+
+ run_options
+ prompt
+
+
+ run
+ True
+
+
+ realtime_scheduling
+
+
+
+ _coordinate
+ (16, 10)
+
+
+ _rotation
+ 0
+
+
+
+ gr_noise_source_x
+
+ id
+ gr_noise_source_x
+
+
+ _enabled
+ True
+
+
+ type
+ complex
+
+
+ noise_type
+ gr.GR_GAUSSIAN
+
+
+ amp
+ noise
+
+
+ seed
+ 42
+
+
+ _coordinate
+ (235, 379)
+
+
+ _rotation
+ 0
+
+
+
+ wxgui_numbersink2
+
+ id
+ wxgui_numbersink2
+
+
+ _enabled
+ True
+
+
+ type
+ float
+
+
+ title
+ BER
+
+
+ units
+ %
+
+
+ samp_rate
+ samp_rate
+
+
+ min_value
+ 0.0
+
+
+ max_value
+ 1.0
+
+
+ factor
+ 100
+
+
+ decimal_places
+ 4
+
+
+ ref_level
+ 0
+
+
+ number_rate
+ 15
+
+
+ peak_hold
+ False
+
+
+ average
+ False
+
+
+ avg_alpha
+ 0
+
+
+ show_gauge
+ False
+
+
+ win_size
+
+
+
+ grid_pos
+ 1, 0, 1, 1
+
+
+ notebook
+
+
+
+ _coordinate
+ (1062, 11)
+
+
+ _rotation
+ 0
+
+
+
+ gr_throttle
+
+ id
+ gr_throttle
+
+
+ _enabled
+ True
+
+
+ type
+ byte
+
+
+ samples_per_second
+ samp_rate
+
+
+ vlen
+ 1
+
+
+ _coordinate
+ (397, 27)
+
+
+ _rotation
+ 0
+
+
+
+ variable
+
+ id
+ samp_rate
+
+
+ _enabled
+ True
+
+
+ value
+ 50e3
+
+
+ _coordinate
+ (20, 168)
+
+
+ _rotation
+ 0
+
+
+
+ import
+
+ id
+ import
+
+
+ _enabled
+ True
+
+
+ import
+ import math
+
+
+ _coordinate
+ (138, 168)
+
+
+ _rotation
+ 0
+
+
+
+ wxgui_scopesink2
+
+ id
+ wxgui_scopesink2_0
+
+
+ _enabled
+ True
+
+
+ type
+ complex
+
+
+ title
+ "Constellation: "+str(const)
+
+
+ samp_rate
+ samp_rate
+
+
+ v_scale
+ 0
+
+
+ v_offset
+ 0
+
+
+ t_scale
+ 0
+
+
+ ac_couple
+ False
+
+
+ xy_mode
+ True
+
+
+ num_inputs
+ 1
+
+
+ win_size
+
+
+
+ grid_pos
+ 2, 0, 1, 1
+
+
+ notebook
+
+
+
+ trig_mode
+ gr.gr_TRIG_MODE_AUTO
+
+
+ y_axis_label
+ Counts
+
+
+ _coordinate
+ (828, 368)
+
+
+ _rotation
+ 0
+
+
+
+ gr_add_xx
+
+ id
+ gr_add_xx
+
+
+ _enabled
+ True
+
+
+ type
+ complex
+
+
+ num_inputs
+ 2
+
+
+ vlen
+ 1
+
+
+ _coordinate
+ (652, 395)
+
+
+ _rotation
+ 0
+
+
+
+ digital_constellation_decoder_cb
+
+ id
+ digital_constellation_decoder_cb_0
+
+
+ _enabled
+ True
+
+
+ constellation
+ const.base()
+
+
+ _coordinate
+ (693, 205)
+
+
+ _rotation
+ 0
+
+
+
+ variable
+
+ id
+ const
+
+
+ _enabled
+ True
+
+
+ value
+ digital.qpsk_constellation()
+
+
+ _coordinate
+ (16, 461)
+
+
+ _rotation
+ 0
+
+
+
+ variable
+
+ id
+ const_points
+
+
+ _enabled
+ True
+
+
+ value
+ const.points()
+
+
+ _coordinate
+ (17, 532)
+
+
+ _rotation
+ 0
+
+
+
+ random_source_x
+
+ id
+ random_source_x
+
+
+ _enabled
+ True
+
+
+ type
+ byte
+
+
+ min
+ 0
+
+
+ max
+ len(const_points)
+
+
+ num_samps
+ 1000000
+
+
+ repeat
+ False
+
+
+ _coordinate
+ (15, 244)
+
+
+ _rotation
+ 0
+
+
+
+ gr_chunks_to_symbols_xx
+
+ id
+ gr_chunks_to_symbols_xx
+
+
+ _enabled
+ True
+
+
+ in_type
+ byte
+
+
+ out_type
+ complex
+
+
+ symbol_table
+ const_points
+
+
+ dimension
+ 1
+
+
+ num_ports
+ 1
+
+
+ _coordinate
+ (367, 260)
+
+
+ _rotation
+ 0
+
+
+
+ blks2_error_rate
+
+ id
+ blks2_error_rate
+
+
+ _enabled
+ True
+
+
+ type
+ 'BER'
+
+
+ win_size
+ 1000000
+
+
+ bits_per_symbol
+ int(math.log(len(const_points))/math.log(2))
+
+
+ _coordinate
+ (670, 41)
+
+
+ _rotation
+ 0
+
+
+
+ variable_slider
+
+ id
+ noise
+
+
+ _enabled
+ True
+
+
+ label
+ AWGN Noise
+
+
+ value
+ 0.10
+
+
+ min
+ 0
+
+
+ max
+ 1
+
+
+ num_steps
+ 100
+
+
+ style
+ wx.SL_HORIZONTAL
+
+
+ converver
+ float_converter
+
+
+ grid_pos
+
+
+
+ notebook
+
+
+
+ _coordinate
+ (268, 481)
+
+
+ _rotation
+ 0
+
+
+
+ blks2_error_rate
+ wxgui_numbersink2
+ 0
+ 0
+
+
+ gr_throttle
+ blks2_error_rate
+ 0
+ 0
+
+
+ gr_chunks_to_symbols_xx
+ gr_add_xx
+ 0
+ 0
+
+
+ gr_noise_source_x
+ gr_add_xx
+ 0
+ 1
+
+
+ random_source_x
+ gr_throttle
+ 0
+ 0
+
+
+ random_source_x
+ gr_chunks_to_symbols_xx
+ 0
+ 0
+
+
+ gr_add_xx
+ wxgui_scopesink2_0
+ 0
+ 0
+
+
+ digital_constellation_decoder_cb_0
+ blks2_error_rate
+ 0
+ 1
+
+
+ gr_add_xx
+ digital_constellation_decoder_cb_0
+ 0
+ 0
+
+
diff --git a/gr-digital/examples/demod/digital_freq_lock.grc b/gr-digital/examples/demod/digital_freq_lock.grc
new file mode 100644
index 000000000..36037febb
--- /dev/null
+++ b/gr-digital/examples/demod/digital_freq_lock.grc
@@ -0,0 +1,1321 @@
+
+
+ Sat Mar 6 17:17:12 2010
+
+ options
+
+ id
+ top_block
+
+
+ _enabled
+ True
+
+
+ title
+
+
+
+ author
+
+
+
+ description
+
+
+
+ window_size
+ 1280, 1024
+
+
+ generate_options
+ wx_gui
+
+
+ category
+ Custom
+
+
+ run_options
+ prompt
+
+
+ run
+ True
+
+
+ realtime_scheduling
+
+
+
+ _coordinate
+ (10, 10)
+
+
+ _rotation
+ 0
+
+
+
+ gr_uchar_to_float
+
+ id
+ gr_uchar_to_float_0
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (217, 108)
+
+
+ _rotation
+ 0
+
+
+
+ gr_uchar_to_float
+
+ id
+ gr_uchar_to_float_0_0
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (216, 273)
+
+
+ _rotation
+ 0
+
+
+
+ variable_slider
+
+ id
+ freq_offset
+
+
+ _enabled
+ True
+
+
+ label
+ Frequency Offset
+
+
+ value
+ 0
+
+
+ min
+ -0.5
+
+
+ max
+ 0.5
+
+
+ num_steps
+ 1000
+
+
+ style
+ wx.SL_HORIZONTAL
+
+
+ converver
+ float_converter
+
+
+ grid_pos
+
+
+
+ notebook
+
+
+
+ _coordinate
+ (293, 684)
+
+
+ _rotation
+ 0
+
+
+
+ random_source_x
+
+ id
+ random_source_x_0
+
+
+ _enabled
+ True
+
+
+ type
+ byte
+
+
+ min
+ 0
+
+
+ max
+ pam_amp
+
+
+ num_samps
+ 10000
+
+
+ repeat
+ True
+
+
+ _coordinate
+ (13, 80)
+
+
+ _rotation
+ 0
+
+
+
+ random_source_x
+
+ id
+ random_source_x_0_0
+
+
+ _enabled
+ True
+
+
+ type
+ byte
+
+
+ min
+ 0
+
+
+ max
+ pam_amp
+
+
+ num_samps
+ 10000
+
+
+ repeat
+ True
+
+
+ _coordinate
+ (15, 245)
+
+
+ _rotation
+ 0
+
+
+
+ const_source_x
+
+ id
+ const_source_x_0
+
+
+ _enabled
+ True
+
+
+ type
+ float
+
+
+ const
+ -0.5*(pam_amp-1)
+
+
+ _coordinate
+ (213, 197)
+
+
+ _rotation
+ 0
+
+
+
+ const_source_x
+
+ id
+ const_source_x_0_0
+
+
+ _enabled
+ True
+
+
+ type
+ float
+
+
+ const
+ -0.5*(pam_amp-1)
+
+
+ _coordinate
+ (200, 360)
+
+
+ _rotation
+ 0
+
+
+
+ gr_add_xx
+
+ id
+ gr_add_xx_0
+
+
+ _enabled
+ True
+
+
+ type
+ float
+
+
+ num_inputs
+ 2
+
+
+ vlen
+ 1
+
+
+ _coordinate
+ (440, 167)
+
+
+ _rotation
+ 0
+
+
+
+ gr_add_xx
+
+ id
+ gr_add_xx_0_1
+
+
+ _enabled
+ True
+
+
+ type
+ float
+
+
+ num_inputs
+ 2
+
+
+ vlen
+ 1
+
+
+ _coordinate
+ (430, 330)
+
+
+ _rotation
+ 0
+
+
+
+ variable
+
+ id
+ nfilts
+
+
+ _enabled
+ True
+
+
+ value
+ 32
+
+
+ _coordinate
+ (435, 686)
+
+
+ _rotation
+ 0
+
+
+
+ variable_slider
+
+ id
+ noise_amp
+
+
+ _enabled
+ True
+
+
+ label
+ Channel Noise
+
+
+ value
+ 0
+
+
+ min
+ 0
+
+
+ max
+ 1.0
+
+
+ num_steps
+ 1000
+
+
+ style
+ wx.SL_HORIZONTAL
+
+
+ converver
+ float_converter
+
+
+ grid_pos
+
+
+
+ notebook
+
+
+
+ _coordinate
+ (168, 684)
+
+
+ _rotation
+ 0
+
+
+
+ variable
+
+ id
+ spb_gen
+
+
+ _enabled
+ True
+
+
+ value
+ 4
+
+
+ _coordinate
+ (119, 841)
+
+
+ _rotation
+ 0
+
+
+
+ variable
+
+ id
+ pam_amp
+
+
+ _enabled
+ True
+
+
+ value
+ 2
+
+
+ _coordinate
+ (223, 9)
+
+
+ _rotation
+ 0
+
+
+
+ variable
+
+ id
+ spb
+
+
+ _enabled
+ True
+
+
+ value
+ 4.1
+
+
+ _coordinate
+ (32, 842)
+
+
+ _rotation
+ 0
+
+
+
+ gr_float_to_complex
+
+ id
+ gr_float_to_complex_0
+
+
+ _enabled
+ True
+
+
+ vlen
+ 1
+
+
+ _coordinate
+ (590, 184)
+
+
+ _rotation
+ 0
+
+
+
+ gr_throttle
+
+ id
+ gr_throttle_0
+
+
+ _enabled
+ True
+
+
+ type
+ complex
+
+
+ samples_per_second
+ samp_rate
+
+
+ vlen
+ 1
+
+
+ _coordinate
+ (788, 197)
+
+
+ _rotation
+ 0
+
+
+
+ notebook
+
+ id
+ notebook_0
+
+
+ _enabled
+ True
+
+
+ style
+ wx.NB_TOP
+
+
+ labels
+ ['Freq', 'Time']
+
+
+ grid_pos
+
+
+
+ notebook
+
+
+
+ _coordinate
+ (216, 845)
+
+
+ _rotation
+ 0
+
+
+
+ wxgui_scopesink2
+
+ id
+ wxgui_scopesink2_0
+
+
+ _enabled
+ True
+
+
+ type
+ complex
+
+
+ title
+ Signal into Receiver
+
+
+ samp_rate
+ samp_rate
+
+
+ v_scale
+ 0
+
+
+ v_offset
+ 0
+
+
+ t_scale
+ 0
+
+
+ ac_couple
+ False
+
+
+ xy_mode
+ False
+
+
+ num_inputs
+ 1
+
+
+ win_size
+
+
+
+ grid_pos
+
+
+
+ notebook
+ notebook_0,1
+
+
+ _coordinate
+ (1123, 392)
+
+
+ _rotation
+ 0
+
+
+
+ wxgui_fftsink2
+
+ id
+ wxgui_fftsink2_0
+
+
+ _enabled
+ True
+
+
+ type
+ complex
+
+
+ title
+ Signal into Receiver
+
+
+ samp_rate
+ samp_rate
+
+
+ baseband_freq
+ 0
+
+
+ y_per_div
+ 10
+
+
+ y_divs
+ 10
+
+
+ ref_level
+ 10
+
+
+ ref_scale
+ 2.0
+
+
+ fft_size
+ 1024
+
+
+ fft_rate
+ 30
+
+
+ peak_hold
+ False
+
+
+ average
+ False
+
+
+ avg_alpha
+ 0
+
+
+ win
+ None
+
+
+ win_size
+
+
+
+ grid_pos
+
+
+
+ notebook
+ notebook_0,0
+
+
+ _coordinate
+ (1122, 473)
+
+
+ _rotation
+ 0
+
+
+
+ wxgui_scopesink2
+
+ id
+ wxgui_scopesink2_0_0
+
+
+ _enabled
+ True
+
+
+ type
+ complex
+
+
+ title
+ Frequency Corrected Signal
+
+
+ samp_rate
+ samp_rate
+
+
+ v_scale
+ 0
+
+
+ v_offset
+ 0
+
+
+ t_scale
+ 0
+
+
+ ac_couple
+ False
+
+
+ xy_mode
+ False
+
+
+ num_inputs
+ 1
+
+
+ win_size
+
+
+
+ grid_pos
+
+
+
+ notebook
+ notebook_0,1
+
+
+ _coordinate
+ (1122, 680)
+
+
+ _rotation
+ 0
+
+
+
+ wxgui_fftsink2
+
+ id
+ wxgui_fftsink2_0_0
+
+
+ _enabled
+ True
+
+
+ type
+ complex
+
+
+ title
+ Frequency Corrected Signal
+
+
+ samp_rate
+ samp_rate
+
+
+ baseband_freq
+ 0
+
+
+ y_per_div
+ 10
+
+
+ y_divs
+ 10
+
+
+ ref_level
+ 10
+
+
+ ref_scale
+ 2.0
+
+
+ fft_size
+ 1024
+
+
+ fft_rate
+ 30
+
+
+ peak_hold
+ False
+
+
+ average
+ False
+
+
+ avg_alpha
+ 0
+
+
+ win
+ None
+
+
+ win_size
+
+
+
+ grid_pos
+
+
+
+ notebook
+ notebook_0,0
+
+
+ _coordinate
+ (1121, 762)
+
+
+ _rotation
+ 0
+
+
+
+ variable
+
+ id
+ samp_rate
+
+
+ _enabled
+ True
+
+
+ value
+ 32000
+
+
+ _coordinate
+ (128, 9)
+
+
+ _rotation
+ 0
+
+
+
+ variable
+
+ id
+ sig_amp
+
+
+ _enabled
+ True
+
+
+ value
+ 1
+
+
+ _coordinate
+ (315, 9)
+
+
+ _rotation
+ 0
+
+
+
+ variable
+
+ id
+ rolloff
+
+
+ _enabled
+ True
+
+
+ value
+ 0.35
+
+
+ _coordinate
+ (398, 12)
+
+
+ _rotation
+ 0
+
+
+
+ variable
+
+ id
+ rrctaps
+
+
+ _enabled
+ True
+
+
+ value
+ firdes.root_raised_cosine(nfilts,1.0,1.0/(spb*nfilts), .35, int(11*spb*nfilts))
+
+
+ _coordinate
+ (826, 61)
+
+
+ _rotation
+ 0
+
+
+
+ root_raised_cosine_filter
+
+ id
+ root_raised_cosine_filter_0
+
+
+ _enabled
+ True
+
+
+ type
+ interp_fir_filter_ccf
+
+
+ decim
+ 1
+
+
+ interp
+ spb_gen
+
+
+ gain
+ 2*spb_gen
+
+
+ samp_rate
+ 1.0
+
+
+ sym_rate
+ 1./spb_gen
+
+
+ alpha
+ rolloff
+
+
+ ntaps
+ 44
+
+
+ _coordinate
+ (978, 157)
+
+
+ _rotation
+ 0
+
+
+
+ gr_fll_band_edge_cc
+
+ id
+ gr_fll_band_edge_cc_0
+
+
+ _enabled
+ True
+
+
+ type
+ cc
+
+
+ samps_per_sym
+ spb_gen
+
+
+ rolloff
+ rolloff
+
+
+ filter_size
+ 44
+
+
+ alpha
+ alpha
+
+
+ beta
+ beta
+
+
+ _coordinate
+ (874, 664)
+
+
+ _rotation
+ 0
+
+
+
+ gr_channel_model
+
+ id
+ gr_channel_model_0
+
+
+ _enabled
+ True
+
+
+ noise_voltage
+ noise_amp
+
+
+ freq_offset
+ freq_offset
+
+
+ epsilon
+ 1.0
+
+
+ taps
+ 1.0
+
+
+ seed
+ 42
+
+
+ _coordinate
+ (618, 376)
+
+
+ _rotation
+ 0
+
+
+
+ variable_slider
+
+ id
+ beta
+
+
+ _enabled
+ True
+
+
+ label
+ Freq Beta
+
+
+ value
+ 0
+
+
+ min
+ 0.0
+
+
+ max
+ 0.01
+
+
+ num_steps
+ 1000
+
+
+ style
+ wx.SL_HORIZONTAL
+
+
+ converver
+ float_converter
+
+
+ grid_pos
+
+
+
+ notebook
+
+
+
+ _coordinate
+ (668, 5)
+
+
+ _rotation
+ 180
+
+
+
+ variable_slider
+
+ id
+ alpha
+
+
+ _enabled
+ True
+
+
+ label
+ Freq Alpha
+
+
+ value
+ 0
+
+
+ min
+ 0
+
+
+ max
+ 0.1
+
+
+ num_steps
+ 1000
+
+
+ style
+ wx.SL_HORIZONTAL
+
+
+ converver
+ float_converter
+
+
+ grid_pos
+
+
+
+ notebook
+
+
+
+ _coordinate
+ (552, 4)
+
+
+ _rotation
+ 0
+
+
+
+ random_source_x_0
+ gr_uchar_to_float_0
+ 0
+ 0
+
+
+ gr_uchar_to_float_0
+ gr_add_xx_0
+ 0
+ 0
+
+
+ const_source_x_0
+ gr_add_xx_0
+ 0
+ 1
+
+
+ gr_uchar_to_float_0_0
+ gr_add_xx_0_1
+ 0
+ 0
+
+
+ const_source_x_0_0
+ gr_add_xx_0_1
+ 0
+ 1
+
+
+ random_source_x_0_0
+ gr_uchar_to_float_0_0
+ 0
+ 0
+
+
+ gr_add_xx_0
+ gr_float_to_complex_0
+ 0
+ 0
+
+
+ gr_add_xx_0_1
+ gr_float_to_complex_0
+ 0
+ 1
+
+
+ gr_float_to_complex_0
+ gr_throttle_0
+ 0
+ 0
+
+
+ gr_throttle_0
+ root_raised_cosine_filter_0
+ 0
+ 0
+
+
+ gr_channel_model_0
+ wxgui_scopesink2_0
+ 0
+ 0
+
+
+ root_raised_cosine_filter_0
+ gr_channel_model_0
+ 0
+ 0
+
+
+ gr_channel_model_0
+ wxgui_fftsink2_0
+ 0
+ 0
+
+
+ gr_channel_model_0
+ gr_fll_band_edge_cc_0
+ 0
+ 0
+
+
+ gr_fll_band_edge_cc_0
+ wxgui_scopesink2_0_0
+ 0
+ 0
+
+
+ gr_fll_band_edge_cc_0
+ wxgui_fftsink2_0_0
+ 0
+ 0
+
+
diff --git a/gr-digital/examples/demod/dpsk_loopback.grc b/gr-digital/examples/demod/dpsk_loopback.grc
new file mode 100644
index 000000000..aef6a7738
--- /dev/null
+++ b/gr-digital/examples/demod/dpsk_loopback.grc
@@ -0,0 +1,502 @@
+
+
+ Tue Apr 3 18:03:52 2012
+
+ options
+
+ id
+ dpsk_loopback
+
+
+ _enabled
+ True
+
+
+ title
+ DPSK Loopback
+
+
+ author
+ Example
+
+
+ description
+ gnuradio flow graph
+
+
+ window_size
+ 1280, 1024
+
+
+ generate_options
+ wx_gui
+
+
+ category
+ Custom
+
+
+ run_options
+ prompt
+
+
+ run
+ True
+
+
+ realtime_scheduling
+
+
+
+ _coordinate
+ (10, 10)
+
+
+ _rotation
+ 0
+
+
+
+ variable
+
+ id
+ samp_rate
+
+
+ _enabled
+ True
+
+
+ value
+ 10000
+
+
+ _coordinate
+ (10, 170)
+
+
+ _rotation
+ 0
+
+
+
+ variable_slider
+
+ id
+ freq
+
+
+ _enabled
+ True
+
+
+ label
+ Frequency (Hz)
+
+
+ value
+ 500
+
+
+ min
+ 0
+
+
+ max
+ samp_rate/2
+
+
+ num_steps
+ 100
+
+
+ style
+ wx.SL_HORIZONTAL
+
+
+ converver
+ float_converter
+
+
+ grid_pos
+
+
+
+ notebook
+
+
+
+ _coordinate
+ (12, 257)
+
+
+ _rotation
+ 0
+
+
+
+ gr_throttle
+
+ id
+ gr_throttle_0_0
+
+
+ _enabled
+ True
+
+
+ type
+ float
+
+
+ samples_per_second
+ samp_rate
+
+
+ vlen
+ 1
+
+
+ _coordinate
+ (225, 174)
+
+
+ _rotation
+ 0
+
+
+
+ gr_sig_source_x
+
+ id
+ gr_sig_source_x_0
+
+
+ _enabled
+ True
+
+
+ type
+ float
+
+
+ samp_rate
+ samp_rate
+
+
+ waveform
+ gr.GR_COS_WAVE
+
+
+ freq
+ freq
+
+
+ amp
+ 1
+
+
+ offset
+ 0
+
+
+ _coordinate
+ (203, 8)
+
+
+ _rotation
+ 0
+
+
+
+ blks2_packet_decoder
+
+ id
+ blks2_packet_decoder_0
+
+
+ _enabled
+ True
+
+
+ type
+ float
+
+
+ access_code
+
+
+
+ threshold
+ -1
+
+
+ _coordinate
+ (551, 65)
+
+
+ _rotation
+ 0
+
+
+
+ digital_dxpsk_demod
+
+ id
+ digital_dxpsk_demod_0
+
+
+ _enabled
+ True
+
+
+ type
+ dbpsk
+
+
+ samples_per_symbol
+ 2
+
+
+ excess_bw
+ 0.35
+
+
+ freq_bw
+ 6.28/100.0
+
+
+ phase_bw
+ 6.28/100.0
+
+
+ timing_bw
+ 6.28/100.0
+
+
+ omega_relative_limit
+ 0.005
+
+
+ gray_coded
+ True
+
+
+ verbose
+ False
+
+
+ log
+ False
+
+
+ sync_out
+ False
+
+
+ _coordinate
+ (639, 254)
+
+
+ _rotation
+ 0
+
+
+
+ digital_dxpsk_mod
+
+ id
+ digital_dxpsk_mod_0
+
+
+ _enabled
+ True
+
+
+ type
+ dbpsk
+
+
+ samples_per_symbol
+ 2
+
+
+ excess_bw
+ 0.35
+
+
+ gray_coded
+ True
+
+
+ verbose
+ False
+
+
+ log
+ False
+
+
+ _coordinate
+ (421, 294)
+
+
+ _rotation
+ 0
+
+
+
+ blks2_packet_encoder
+
+ id
+ blks2_packet_encoder_0
+
+
+ _enabled
+ True
+
+
+ type
+ float
+
+
+ samples_per_symbol
+ 2
+
+
+ bits_per_symbol
+ 1
+
+
+ access_code
+
+
+
+ pad_for_usrp
+ True
+
+
+ payload_length
+ 0
+
+
+ _coordinate
+ (216, 286)
+
+
+ _rotation
+ 0
+
+
+
+ wxgui_scopesink2
+
+ id
+ wxgui_scopesink2_0
+
+
+ _enabled
+ True
+
+
+ type
+ float
+
+
+ title
+ Scope Plot
+
+
+ samp_rate
+ samp_rate
+
+
+ v_scale
+ 0
+
+
+ v_offset
+ 0
+
+
+ t_scale
+ 1./freq
+
+
+ ac_couple
+ False
+
+
+ xy_mode
+ False
+
+
+ num_inputs
+ 1
+
+
+ win_size
+
+
+
+ grid_pos
+
+
+
+ notebook
+
+
+
+ trig_mode
+ gr.gr_TRIG_MODE_AUTO
+
+
+ y_axis_label
+ Counts
+
+
+ _coordinate
+ (760, 41)
+
+
+ _rotation
+ 0
+
+
+
+ gr_sig_source_x_0
+ gr_throttle_0_0
+ 0
+ 0
+
+
+ gr_throttle_0_0
+ blks2_packet_encoder_0
+ 0
+ 0
+
+
+ blks2_packet_decoder_0
+ wxgui_scopesink2_0
+ 0
+ 0
+
+
+ digital_dxpsk_demod_0
+ blks2_packet_decoder_0
+ 0
+ 0
+
+
+ digital_dxpsk_mod_0
+ digital_dxpsk_demod_0
+ 0
+ 0
+
+
+ blks2_packet_encoder_0
+ digital_dxpsk_mod_0
+ 0
+ 0
+
+
diff --git a/gr-digital/examples/demod/mpsk_demod.grc b/gr-digital/examples/demod/mpsk_demod.grc
new file mode 100644
index 000000000..d7cca9661
--- /dev/null
+++ b/gr-digital/examples/demod/mpsk_demod.grc
@@ -0,0 +1,598 @@
+
+
+ Tue Apr 3 18:01:57 2012
+
+ options
+
+ id
+ mpsk_demod
+
+
+ _enabled
+ True
+
+
+ title
+ MPSK Demod Demo
+
+
+ author
+
+
+
+ description
+
+
+
+ window_size
+ 1280, 1024
+
+
+ generate_options
+ wx_gui
+
+
+ category
+ Custom
+
+
+ run_options
+ prompt
+
+
+ run
+ True
+
+
+ realtime_scheduling
+
+
+
+ _coordinate
+ (10, 10)
+
+
+ _rotation
+ 0
+
+
+
+ variable
+
+ id
+ samp_rate
+
+
+ _enabled
+ True
+
+
+ value
+ 32000
+
+
+ _coordinate
+ (10, 170)
+
+
+ _rotation
+ 0
+
+
+
+ variable
+
+ id
+ samps_per_sym
+
+
+ _enabled
+ True
+
+
+ value
+ 4
+
+
+ _coordinate
+ (7, 89)
+
+
+ _rotation
+ 0
+
+
+
+ variable_slider
+
+ id
+ noise
+
+
+ _enabled
+ True
+
+
+ label
+ Noise
+
+
+ value
+ .1
+
+
+ min
+ 0
+
+
+ max
+ 1
+
+
+ num_steps
+ 100
+
+
+ style
+ wx.SL_HORIZONTAL
+
+
+ converver
+ float_converter
+
+
+ grid_pos
+
+
+
+ notebook
+
+
+
+ _coordinate
+ (259, 353)
+
+
+ _rotation
+ 0
+
+
+
+ variable_slider
+
+ id
+ freq_off
+
+
+ _enabled
+ True
+
+
+ label
+ Freq Offset
+
+
+ value
+ 0
+
+
+ min
+ -.5
+
+
+ max
+ .5
+
+
+ num_steps
+ 1000
+
+
+ style
+ wx.SL_HORIZONTAL
+
+
+ converver
+ float_converter
+
+
+ grid_pos
+
+
+
+ notebook
+
+
+
+ _coordinate
+ (126, 345)
+
+
+ _rotation
+ 0
+
+
+
+ notebook
+
+ id
+ notebook
+
+
+ _enabled
+ True
+
+
+ style
+ wx.NB_TOP
+
+
+ labels
+ ['Constellation', 'Spectrum']
+
+
+ grid_pos
+
+
+
+ notebook
+
+
+
+ _coordinate
+ (520, 407)
+
+
+ _rotation
+ 0
+
+
+
+ wxgui_constellationsink2
+
+ id
+ wxgui_constellationsink2_0
+
+
+ _enabled
+ True
+
+
+ title
+ Constellation Plot
+
+
+ samp_rate
+ samp_rate
+
+
+ frame_rate
+ 5
+
+
+ const_size
+ 2048
+
+
+ M
+ 4
+
+
+ theta
+ 0
+
+
+ loop_bw
+ 6.28/100.0
+
+
+ fmax
+ 0.06
+
+
+ mu
+ 0.5
+
+
+ gain_mu
+ 0.005
+
+
+ symbol_rate
+ samp_rate/4.
+
+
+ omega_limit
+ 0.005
+
+
+ win_size
+
+
+
+ grid_pos
+
+
+
+ notebook
+ notebook, 0
+
+
+ _coordinate
+ (824, 212)
+
+
+ _rotation
+ 0
+
+
+
+ wxgui_fftsink2
+
+ id
+ wxgui_fftsink2_0
+
+
+ _enabled
+ True
+
+
+ type
+ complex
+
+
+ title
+ FFT Plot
+
+
+ samp_rate
+ samp_rate
+
+
+ baseband_freq
+ 0
+
+
+ y_per_div
+ 10
+
+
+ y_divs
+ 10
+
+
+ ref_level
+ 50
+
+
+ ref_scale
+ 2.0
+
+
+ fft_size
+ 1024
+
+
+ fft_rate
+ 30
+
+
+ peak_hold
+ False
+
+
+ average
+ False
+
+
+ avg_alpha
+ 0
+
+
+ win
+ None
+
+
+ win_size
+
+
+
+ grid_pos
+
+
+
+ notebook
+ notebook, 1
+
+
+ _coordinate
+ (847, 10)
+
+
+ _rotation
+ 0
+
+
+
+ gr_channel_model
+
+ id
+ gr_channel_model_0
+
+
+ _enabled
+ True
+
+
+ noise_voltage
+ noise
+
+
+ freq_offset
+ freq_off
+
+
+ epsilon
+ 1.0
+
+
+ taps
+ 1.0
+
+
+ seed
+ 42
+
+
+ _coordinate
+ (487, 282)
+
+
+ _rotation
+ 0
+
+
+
+ gr_throttle
+
+ id
+ gr_throttle_0
+
+
+ _enabled
+ True
+
+
+ type
+ complex
+
+
+ samples_per_second
+ samp_rate
+
+
+ vlen
+ 1
+
+
+ _coordinate
+ (633, 82)
+
+
+ _rotation
+ 0
+
+
+
+ random_source_x
+
+ id
+ random_source_x_0
+
+
+ _enabled
+ True
+
+
+ type
+ byte
+
+
+ min
+ 0
+
+
+ max
+ 2**8
+
+
+ num_samps
+ 10000
+
+
+ repeat
+ True
+
+
+ _coordinate
+ (161, 119)
+
+
+ _rotation
+ 0
+
+
+
+ digital_dxpsk_mod
+
+ id
+ digital_dxpsk_mod_0
+
+
+ _enabled
+ True
+
+
+ type
+ dqpsk
+
+
+ samples_per_symbol
+ samps_per_sym
+
+
+ excess_bw
+ 0.35
+
+
+ gray_coded
+ True
+
+
+ verbose
+ False
+
+
+ log
+ False
+
+
+ _coordinate
+ (361, 119)
+
+
+ _rotation
+ 0
+
+
+
+ gr_throttle_0
+ wxgui_constellationsink2_0
+ 0
+ 0
+
+
+ gr_throttle_0
+ wxgui_fftsink2_0
+ 0
+ 0
+
+
+ gr_channel_model_0
+ gr_throttle_0
+ 0
+ 0
+
+
+ digital_dxpsk_mod_0
+ gr_channel_model_0
+ 0
+ 0
+
+
+ random_source_x_0
+ digital_dxpsk_mod_0
+ 0
+ 0
+
+
diff --git a/gr-digital/examples/demod/pam_sync.grc b/gr-digital/examples/demod/pam_sync.grc
new file mode 100644
index 000000000..8571995a5
--- /dev/null
+++ b/gr-digital/examples/demod/pam_sync.grc
@@ -0,0 +1,1744 @@
+
+
+ Sat Mar 6 17:17:22 2010
+
+ options
+
+ id
+ top_block
+
+
+ _enabled
+ True
+
+
+ title
+
+
+
+ author
+
+
+
+ description
+
+
+
+ window_size
+ 1280, 1024
+
+
+ generate_options
+ wx_gui
+
+
+ category
+ Custom
+
+
+ run_options
+ prompt
+
+
+ run
+ True
+
+
+ realtime_scheduling
+
+
+
+ _coordinate
+ (10, 10)
+
+
+ _rotation
+ 0
+
+
+
+ gr_uchar_to_float
+
+ id
+ gr_uchar_to_float_0
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (217, 108)
+
+
+ _rotation
+ 0
+
+
+
+ gr_uchar_to_float
+
+ id
+ gr_uchar_to_float_0_0
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (216, 273)
+
+
+ _rotation
+ 0
+
+
+
+ variable
+
+ id
+ samp_rate
+
+
+ _enabled
+ True
+
+
+ value
+ 32000
+
+
+ _coordinate
+ (128, 9)
+
+
+ _rotation
+ 0
+
+
+
+ variable_slider
+
+ id
+ freq_offset
+
+
+ _enabled
+ True
+
+
+ label
+ Frequency Offset
+
+
+ value
+ 0
+
+
+ min
+ -0.5
+
+
+ max
+ 0.5
+
+
+ num_steps
+ 1000
+
+
+ style
+ wx.SL_HORIZONTAL
+
+
+ converver
+ float_converter
+
+
+ grid_pos
+
+
+
+ notebook
+
+
+
+ _coordinate
+ (293, 684)
+
+
+ _rotation
+ 0
+
+
+
+ random_source_x
+
+ id
+ random_source_x_0
+
+
+ _enabled
+ True
+
+
+ type
+ byte
+
+
+ min
+ 0
+
+
+ max
+ pam_amp
+
+
+ num_samps
+ 10000
+
+
+ repeat
+ True
+
+
+ _coordinate
+ (13, 80)
+
+
+ _rotation
+ 0
+
+
+
+ random_source_x
+
+ id
+ random_source_x_0_0
+
+
+ _enabled
+ True
+
+
+ type
+ byte
+
+
+ min
+ 0
+
+
+ max
+ pam_amp
+
+
+ num_samps
+ 10000
+
+
+ repeat
+ True
+
+
+ _coordinate
+ (15, 245)
+
+
+ _rotation
+ 0
+
+
+
+ const_source_x
+
+ id
+ const_source_x_0
+
+
+ _enabled
+ True
+
+
+ type
+ float
+
+
+ const
+ -0.5*(pam_amp-1)
+
+
+ _coordinate
+ (213, 197)
+
+
+ _rotation
+ 0
+
+
+
+ const_source_x
+
+ id
+ const_source_x_0_0
+
+
+ _enabled
+ True
+
+
+ type
+ float
+
+
+ const
+ -0.5*(pam_amp-1)
+
+
+ _coordinate
+ (200, 360)
+
+
+ _rotation
+ 0
+
+
+
+ gr_add_xx
+
+ id
+ gr_add_xx_0
+
+
+ _enabled
+ True
+
+
+ type
+ float
+
+
+ num_inputs
+ 2
+
+
+ vlen
+ 1
+
+
+ _coordinate
+ (440, 167)
+
+
+ _rotation
+ 0
+
+
+
+ gr_add_xx
+
+ id
+ gr_add_xx_0_1
+
+
+ _enabled
+ True
+
+
+ type
+ float
+
+
+ num_inputs
+ 2
+
+
+ vlen
+ 1
+
+
+ _coordinate
+ (430, 330)
+
+
+ _rotation
+ 0
+
+
+
+ variable
+
+ id
+ nfilts
+
+
+ _enabled
+ True
+
+
+ value
+ 32
+
+
+ _coordinate
+ (435, 686)
+
+
+ _rotation
+ 0
+
+
+
+ variable_slider
+
+ id
+ noise_amp
+
+
+ _enabled
+ True
+
+
+ label
+ Channel Noise
+
+
+ value
+ 0
+
+
+ min
+ 0
+
+
+ max
+ 1.0
+
+
+ num_steps
+ 1000
+
+
+ style
+ wx.SL_HORIZONTAL
+
+
+ converver
+ float_converter
+
+
+ grid_pos
+
+
+
+ notebook
+
+
+
+ _coordinate
+ (168, 684)
+
+
+ _rotation
+ 0
+
+
+
+ variable_slider
+
+ id
+ interpratio
+
+
+ _enabled
+ True
+
+
+ label
+ Timing Offset
+
+
+ value
+ 1.00
+
+
+ min
+ 0.99
+
+
+ max
+ 1.01
+
+
+ num_steps
+ 1000
+
+
+ style
+ wx.SL_HORIZONTAL
+
+
+ converver
+ float_converter
+
+
+ grid_pos
+
+
+
+ notebook
+
+
+
+ _coordinate
+ (40, 684)
+
+
+ _rotation
+ 180
+
+
+
+ variable
+
+ id
+ pam_amp
+
+
+ _enabled
+ True
+
+
+ value
+ 2
+
+
+ _coordinate
+ (223, 9)
+
+
+ _rotation
+ 0
+
+
+
+ variable
+
+ id
+ sig_amp
+
+
+ _enabled
+ True
+
+
+ value
+ 1
+
+
+ _coordinate
+ (315, 9)
+
+
+ _rotation
+ 0
+
+
+
+ variable
+
+ id
+ rolloff
+
+
+ _enabled
+ True
+
+
+ value
+ 0.35
+
+
+ _coordinate
+ (397, 9)
+
+
+ _rotation
+ 0
+
+
+
+ gr_throttle
+
+ id
+ gr_throttle_0
+
+
+ _enabled
+ True
+
+
+ type
+ complex
+
+
+ samples_per_second
+ samp_rate
+
+
+ vlen
+ 1
+
+
+ _coordinate
+ (253, 575)
+
+
+ _rotation
+ 0
+
+
+
+ variable_slider
+
+ id
+ time_beta
+
+
+ _enabled
+ True
+
+
+ label
+ Timing Beta
+
+
+ value
+ 0
+
+
+ min
+ 0.0
+
+
+ max
+ 0.1
+
+
+ num_steps
+ 1000
+
+
+ style
+ wx.SL_HORIZONTAL
+
+
+ converver
+ float_converter
+
+
+ grid_pos
+
+
+
+ notebook
+
+
+
+ _coordinate
+ (606, 8)
+
+
+ _rotation
+ 180
+
+
+
+ variable_slider
+
+ id
+ time_alpha
+
+
+ _enabled
+ True
+
+
+ label
+ Timing Alpha
+
+
+ value
+ 0
+
+
+ min
+ 0
+
+
+ max
+ 1
+
+
+ num_steps
+ 1000
+
+
+ style
+ wx.SL_HORIZONTAL
+
+
+ converver
+ float_converter
+
+
+ grid_pos
+
+
+
+ notebook
+
+
+
+ _coordinate
+ (490, 8)
+
+
+ _rotation
+ 0
+
+
+
+ variable_slider
+
+ id
+ phase_alpha
+
+
+ _enabled
+ True
+
+
+ label
+ Phase Alpha
+
+
+ value
+ 0
+
+
+ min
+ 0
+
+
+ max
+ 0.1
+
+
+ num_steps
+ 1000
+
+
+ style
+ wx.SL_HORIZONTAL
+
+
+ converver
+ float_converter
+
+
+ grid_pos
+
+
+
+ notebook
+
+
+
+ _coordinate
+ (953, 8)
+
+
+ _rotation
+ 0
+
+
+
+ variable_slider
+
+ id
+ phase_beta
+
+
+ _enabled
+ True
+
+
+ label
+ Phase Beta
+
+
+ value
+ 0
+
+
+ min
+ 0.0
+
+
+ max
+ 0.01
+
+
+ num_steps
+ 1000
+
+
+ style
+ wx.SL_HORIZONTAL
+
+
+ converver
+ float_converter
+
+
+ grid_pos
+
+
+
+ notebook
+
+
+
+ _coordinate
+ (1066, 8)
+
+
+ _rotation
+ 180
+
+
+
+ gr_costas_loop_cc
+
+ id
+ gr_costas_loop_cc_0
+
+
+ _enabled
+ True
+
+
+ alpha
+ phase_alpha
+
+
+ beta
+ phase_beta
+
+
+ max_freq
+ 0.2
+
+
+ min_freq
+ -0.2
+
+
+ order
+ 4
+
+
+ _coordinate
+ (915, 560)
+
+
+ _rotation
+ 0
+
+
+
+ wxgui_scopesink2
+
+ id
+ wxgui_scopesink2_0
+
+
+ _enabled
+ True
+
+
+ type
+ complex
+
+
+ title
+ Input Signal
+
+
+ samp_rate
+ samp_rate
+
+
+ v_scale
+ 0
+
+
+ v_offset
+ 0
+
+
+ t_scale
+ 0
+
+
+ ac_couple
+ False
+
+
+ xy_mode
+ False
+
+
+ num_inputs
+ 1
+
+
+ win_size
+
+
+
+ grid_pos
+
+
+
+ notebook
+ notebook_0,0
+
+
+ _coordinate
+ (1116, 559)
+
+
+ _rotation
+ 0
+
+
+
+ variable
+
+ id
+ rrctaps
+
+
+ _enabled
+ True
+
+
+ value
+ firdes.root_raised_cosine(nfilts,1.0,1.0/(spb*nfilts), rolloff, int(11*spb*nfilts))
+
+
+ _coordinate
+ (436, 755)
+
+
+ _rotation
+ 0
+
+
+
+ notebook
+
+ id
+ notebook_0
+
+
+ _enabled
+ True
+
+
+ style
+ wx.NB_TOP
+
+
+ labels
+ ['Output Signal', 'Input Signal']
+
+
+ grid_pos
+
+
+
+ notebook
+
+
+
+ _coordinate
+ (203, 823)
+
+
+ _rotation
+ 0
+
+
+
+ wxgui_scopesink2
+
+ id
+ wxgui_scopesink2_0_0_1
+
+
+ _enabled
+ True
+
+
+ type
+ complex
+
+
+ title
+ Input Signal
+
+
+ samp_rate
+ samp_rate
+
+
+ v_scale
+ .5
+
+
+ v_offset
+ 0
+
+
+ t_scale
+ 0
+
+
+ ac_couple
+ False
+
+
+ xy_mode
+ False
+
+
+ num_inputs
+ 1
+
+
+ win_size
+
+
+
+ grid_pos
+
+
+
+ notebook
+ notebook_0,1
+
+
+ _coordinate
+ (975, 312)
+
+
+ _rotation
+ 0
+
+
+
+ wxgui_fftsink2
+
+ id
+ wxgui_fftsink2_0
+
+
+ _enabled
+ True
+
+
+ type
+ complex
+
+
+ title
+ Input Frequency
+
+
+ samp_rate
+ samp_rate
+
+
+ baseband_freq
+ 0
+
+
+ y_per_div
+ 10
+
+
+ y_divs
+ 10
+
+
+ ref_level
+ 10
+
+
+ ref_scale
+ 2.0
+
+
+ fft_size
+ 1024
+
+
+ fft_rate
+ 30
+
+
+ peak_hold
+ False
+
+
+ average
+ False
+
+
+ avg_alpha
+ 0
+
+
+ win
+ None
+
+
+ win_size
+
+
+
+ grid_pos
+
+
+
+ notebook
+ notebook_0,1
+
+
+ _coordinate
+ (1116, 355)
+
+
+ _rotation
+ 0
+
+
+
+ virtual_source
+
+ id
+ virtual_source_0
+
+
+ _enabled
+ True
+
+
+ stream_id
+ input_signal_probe
+
+
+ _coordinate
+ (801, 453)
+
+
+ _rotation
+ 0
+
+
+
+ virtual_sink
+
+ id
+ virtual_sink_0
+
+
+ _enabled
+ True
+
+
+ stream_id
+ input_signal_probe
+
+
+ _coordinate
+ (280, 475)
+
+
+ _rotation
+ 0
+
+
+
+ wxgui_fftsink2
+
+ id
+ wxgui_fftsink2_0_0
+
+
+ _enabled
+ True
+
+
+ type
+ complex
+
+
+ title
+ Output Frequency
+
+
+ samp_rate
+ samp_rate
+
+
+ baseband_freq
+ 0
+
+
+ y_per_div
+ 10
+
+
+ y_divs
+ 10
+
+
+ ref_level
+ 10
+
+
+ ref_scale
+ 2.0
+
+
+ fft_size
+ 1024
+
+
+ fft_rate
+ 30
+
+
+ peak_hold
+ False
+
+
+ average
+ False
+
+
+ avg_alpha
+ 0
+
+
+ win
+ None
+
+
+ win_size
+
+
+
+ grid_pos
+
+
+
+ notebook
+ notebook_0,0
+
+
+ _coordinate
+ (663, 687)
+
+
+ _rotation
+ 0
+
+
+
+ gr_pfb_clock_sync_xxx
+
+ id
+ gr_pfb_clock_sync_xxx_0
+
+
+ _enabled
+ True
+
+
+ type
+ ccf
+
+
+ sps
+ spb
+
+
+ alpha
+ time_alpha
+
+
+ beta
+ time_beta
+
+
+ taps
+ rrctaps
+
+
+ filter_size
+ nfilts
+
+
+ init_phase
+ 16
+
+
+ max_dev
+ 1.5
+
+
+ _coordinate
+ (662, 527)
+
+
+ _rotation
+ 0
+
+
+
+ gr_float_to_complex
+
+ id
+ gr_float_to_complex_0
+
+
+ _enabled
+ True
+
+
+ vlen
+ 1
+
+
+ _coordinate
+ (592, 184)
+
+
+ _rotation
+ 0
+
+
+
+ gr_channel_model
+
+ id
+ gr_channel_model_0
+
+
+ _enabled
+ True
+
+
+ noise_voltage
+ noise_amp
+
+
+ freq_offset
+ freq_offset
+
+
+ epsilon
+ interpratio
+
+
+ taps
+ 1.0
+
+
+ seed
+ 42
+
+
+ _coordinate
+ (60, 443)
+
+
+ _rotation
+ 0
+
+
+
+ gr_multiply_const_vxx
+
+ id
+ gr_multiply_const_vxx_0
+
+
+ _enabled
+ True
+
+
+ type
+ complex
+
+
+ const
+ sig_amp
+
+
+ vlen
+ 1
+
+
+ _coordinate
+ (670, 322)
+
+
+ _rotation
+ 0
+
+
+
+ blks2_pfb_arb_resampler_ccf
+
+ id
+ blks2_pfb_arb_resampler_ccf_0
+
+
+ _enabled
+ True
+
+
+ rate
+ spb
+
+
+ taps
+ firdes.root_raised_cosine(32, 32, 1.0, 0.35, 44*32)
+
+
+ size
+ 32
+
+
+ _coordinate
+ (778, 180)
+
+
+ _rotation
+ 0
+
+
+
+ gr_fll_band_edge_cc
+
+ id
+ gr_fll_band_edge_cc_0
+
+
+ _enabled
+ True
+
+
+ type
+ cc
+
+
+ samps_per_sym
+ spb
+
+
+ rolloff
+ rolloff
+
+
+ filter_size
+ 44
+
+
+ alpha
+ freq_alpha
+
+
+ beta
+ freq_beta
+
+
+ _coordinate
+ (429, 528)
+
+
+ _rotation
+ 0
+
+
+
+ variable
+
+ id
+ spb
+
+
+ _enabled
+ True
+
+
+ value
+ 4.0
+
+
+ _coordinate
+ (40, 829)
+
+
+ _rotation
+ 0
+
+
+
+ variable_slider
+
+ id
+ freq_alpha
+
+
+ _enabled
+ True
+
+
+ label
+ Freq Alpha
+
+
+ value
+ 0
+
+
+ min
+ 0
+
+
+ max
+ 0.1
+
+
+ num_steps
+ 1000
+
+
+ style
+ wx.SL_HORIZONTAL
+
+
+ converver
+ float_converter
+
+
+ grid_pos
+
+
+
+ notebook
+
+
+
+ _coordinate
+ (734, 10)
+
+
+ _rotation
+ 0
+
+
+
+ variable_slider
+
+ id
+ freq_beta
+
+
+ _enabled
+ True
+
+
+ label
+ Freq Beta
+
+
+ value
+ 0
+
+
+ min
+ 0.0
+
+
+ max
+ 0.01
+
+
+ num_steps
+ 1000
+
+
+ style
+ wx.SL_HORIZONTAL
+
+
+ converver
+ float_converter
+
+
+ grid_pos
+
+
+
+ notebook
+
+
+
+ _coordinate
+ (836, 9)
+
+
+ _rotation
+ 180
+
+
+
+ random_source_x_0
+ gr_uchar_to_float_0
+ 0
+ 0
+
+
+ gr_uchar_to_float_0_0
+ gr_add_xx_0_1
+ 0
+ 0
+
+
+ const_source_x_0_0
+ gr_add_xx_0_1
+ 0
+ 1
+
+
+ random_source_x_0_0
+ gr_uchar_to_float_0_0
+ 0
+ 0
+
+
+ gr_channel_model_0
+ gr_throttle_0
+ 0
+ 0
+
+
+ gr_add_xx_0
+ gr_float_to_complex_0
+ 0
+ 0
+
+
+ gr_add_xx_0_1
+ gr_float_to_complex_0
+ 0
+ 1
+
+
+ gr_uchar_to_float_0
+ gr_add_xx_0
+ 0
+ 0
+
+
+ const_source_x_0
+ gr_add_xx_0
+ 0
+ 1
+
+
+ gr_throttle_0
+ gr_fll_band_edge_cc_0
+ 0
+ 0
+
+
+ gr_fll_band_edge_cc_0
+ gr_pfb_clock_sync_xxx_0
+ 0
+ 0
+
+
+ gr_pfb_clock_sync_xxx_0
+ gr_costas_loop_cc_0
+ 0
+ 0
+
+
+ gr_costas_loop_cc_0
+ wxgui_scopesink2_0
+ 0
+ 0
+
+
+ gr_fll_band_edge_cc_0
+ wxgui_fftsink2_0_0
+ 0
+ 0
+
+
+ virtual_source_0
+ wxgui_scopesink2_0_0_1
+ 0
+ 0
+
+
+ virtual_source_0
+ wxgui_fftsink2_0
+ 0
+ 0
+
+
+ gr_channel_model_0
+ virtual_sink_0
+ 0
+ 0
+
+
+ gr_float_to_complex_0
+ blks2_pfb_arb_resampler_ccf_0
+ 0
+ 0
+
+
+ blks2_pfb_arb_resampler_ccf_0
+ gr_multiply_const_vxx_0
+ 0
+ 0
+
+
+ gr_multiply_const_vxx_0
+ gr_channel_model_0
+ 0
+ 0
+
+
diff --git a/gr-digital/examples/demod/pam_timing.grc b/gr-digital/examples/demod/pam_timing.grc
new file mode 100644
index 000000000..02130f481
--- /dev/null
+++ b/gr-digital/examples/demod/pam_timing.grc
@@ -0,0 +1,1388 @@
+
+
+ Mon Feb 1 18:54:46 2010
+
+ options
+
+ id
+ top_block
+
+
+ _enabled
+ True
+
+
+ title
+
+
+
+ author
+
+
+
+ description
+
+
+
+ window_size
+ 1280, 1024
+
+
+ generate_options
+ wx_gui
+
+
+ category
+ Custom
+
+
+ run_options
+ prompt
+
+
+ run
+ True
+
+
+ realtime_scheduling
+
+
+
+ _coordinate
+ (10, 10)
+
+
+ _rotation
+ 0
+
+
+
+ gr_uchar_to_float
+
+ id
+ gr_uchar_to_float_0
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (217, 108)
+
+
+ _rotation
+ 0
+
+
+
+ gr_uchar_to_float
+
+ id
+ gr_uchar_to_float_0_0
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (216, 273)
+
+
+ _rotation
+ 0
+
+
+
+ variable
+
+ id
+ samp_rate
+
+
+ _enabled
+ True
+
+
+ value
+ 32000
+
+
+ _coordinate
+ (128, 9)
+
+
+ _rotation
+ 0
+
+
+
+ variable_slider
+
+ id
+ freq_offset
+
+
+ _enabled
+ True
+
+
+ label
+ Frequency Offset
+
+
+ value
+ 0
+
+
+ min
+ -0.5
+
+
+ max
+ 0.5
+
+
+ num_steps
+ 1000
+
+
+ style
+ wx.SL_HORIZONTAL
+
+
+ converver
+ float_converter
+
+
+ grid_pos
+
+
+
+ notebook
+
+
+
+ _coordinate
+ (293, 684)
+
+
+ _rotation
+ 0
+
+
+
+ random_source_x
+
+ id
+ random_source_x_0
+
+
+ _enabled
+ True
+
+
+ type
+ byte
+
+
+ min
+ 0
+
+
+ max
+ pam_amp
+
+
+ num_samps
+ 10000
+
+
+ repeat
+ True
+
+
+ _coordinate
+ (13, 80)
+
+
+ _rotation
+ 0
+
+
+
+ random_source_x
+
+ id
+ random_source_x_0_0
+
+
+ _enabled
+ True
+
+
+ type
+ byte
+
+
+ min
+ 0
+
+
+ max
+ pam_amp
+
+
+ num_samps
+ 10000
+
+
+ repeat
+ True
+
+
+ _coordinate
+ (15, 245)
+
+
+ _rotation
+ 0
+
+
+
+ const_source_x
+
+ id
+ const_source_x_0
+
+
+ _enabled
+ True
+
+
+ type
+ float
+
+
+ const
+ -0.5*(pam_amp-1)
+
+
+ _coordinate
+ (213, 197)
+
+
+ _rotation
+ 0
+
+
+
+ const_source_x
+
+ id
+ const_source_x_0_0
+
+
+ _enabled
+ True
+
+
+ type
+ float
+
+
+ const
+ -0.5*(pam_amp-1)
+
+
+ _coordinate
+ (200, 360)
+
+
+ _rotation
+ 0
+
+
+
+ notebook
+
+ id
+ notebook_0
+
+
+ _enabled
+ True
+
+
+ style
+ wx.NB_TOP
+
+
+ labels
+ ['error', 'phase', 'freq', 'Resampled Signal']
+
+
+ grid_pos
+
+
+
+ notebook
+
+
+
+ _coordinate
+ (729, 769)
+
+
+ _rotation
+ 0
+
+
+
+ gr_add_xx
+
+ id
+ gr_add_xx_0
+
+
+ _enabled
+ True
+
+
+ type
+ float
+
+
+ num_inputs
+ 2
+
+
+ vlen
+ 1
+
+
+ _coordinate
+ (440, 167)
+
+
+ _rotation
+ 0
+
+
+
+ gr_add_xx
+
+ id
+ gr_add_xx_0_1
+
+
+ _enabled
+ True
+
+
+ type
+ float
+
+
+ num_inputs
+ 2
+
+
+ vlen
+ 1
+
+
+ _coordinate
+ (430, 330)
+
+
+ _rotation
+ 0
+
+
+
+ variable
+
+ id
+ nfilts
+
+
+ _enabled
+ True
+
+
+ value
+ 32
+
+
+ _coordinate
+ (435, 686)
+
+
+ _rotation
+ 0
+
+
+
+ variable_slider
+
+ id
+ noise_amp
+
+
+ _enabled
+ True
+
+
+ label
+ Channel Noise
+
+
+ value
+ 0
+
+
+ min
+ 0
+
+
+ max
+ 1.0
+
+
+ num_steps
+ 1000
+
+
+ style
+ wx.SL_HORIZONTAL
+
+
+ converver
+ float_converter
+
+
+ grid_pos
+
+
+
+ notebook
+
+
+
+ _coordinate
+ (168, 684)
+
+
+ _rotation
+ 0
+
+
+
+ variable_slider
+
+ id
+ interpratio
+
+
+ _enabled
+ True
+
+
+ label
+ Timing Offset
+
+
+ value
+ 1.00
+
+
+ min
+ 0.99
+
+
+ max
+ 1.01
+
+
+ num_steps
+ 1000
+
+
+ style
+ wx.SL_HORIZONTAL
+
+
+ converver
+ float_converter
+
+
+ grid_pos
+
+
+
+ notebook
+
+
+
+ _coordinate
+ (40, 684)
+
+
+ _rotation
+ 180
+
+
+
+ variable_slider
+
+ id
+ beta
+
+
+ _enabled
+ True
+
+
+ label
+ Timing Beta
+
+
+ value
+ 0
+
+
+ min
+ 0.0
+
+
+ max
+ 0.1
+
+
+ num_steps
+ 1000
+
+
+ style
+ wx.SL_HORIZONTAL
+
+
+ converver
+ float_converter
+
+
+ grid_pos
+
+
+
+ notebook
+
+
+
+ _coordinate
+ (668, 5)
+
+
+ _rotation
+ 180
+
+
+
+ variable_slider
+
+ id
+ alpha
+
+
+ _enabled
+ True
+
+
+ label
+ Timing Alpha
+
+
+ value
+ 0
+
+
+ min
+ 0
+
+
+ max
+ 1
+
+
+ num_steps
+ 1000
+
+
+ style
+ wx.SL_HORIZONTAL
+
+
+ converver
+ float_converter
+
+
+ grid_pos
+
+
+
+ notebook
+
+
+
+ _coordinate
+ (552, 4)
+
+
+ _rotation
+ 0
+
+
+
+ variable
+
+ id
+ pam_amp
+
+
+ _enabled
+ True
+
+
+ value
+ 2
+
+
+ _coordinate
+ (223, 9)
+
+
+ _rotation
+ 0
+
+
+
+ variable
+
+ id
+ sig_amp
+
+
+ _enabled
+ True
+
+
+ value
+ 1
+
+
+ _coordinate
+ (315, 9)
+
+
+ _rotation
+ 0
+
+
+
+ wxgui_scopesink2
+
+ id
+ wxgui_scopesink2_0
+
+
+ _enabled
+ True
+
+
+ type
+ complex
+
+
+ title
+ Scope Plot
+
+
+ samp_rate
+ samp_rate
+
+
+ v_scale
+ 0
+
+
+ v_offset
+ 0
+
+
+ t_scale
+ 0
+
+
+ ac_couple
+ False
+
+
+ xy_mode
+ False
+
+
+ num_inputs
+ 1
+
+
+ win_size
+
+
+
+ grid_pos
+
+
+
+ notebook
+
+
+
+ _coordinate
+ (1116, 500)
+
+
+ _rotation
+ 0
+
+
+
+ gr_throttle
+
+ id
+ gr_throttle_0
+
+
+ _enabled
+ True
+
+
+ type
+ complex
+
+
+ samples_per_second
+ samp_rate
+
+
+ vlen
+ 1
+
+
+ _coordinate
+ (290, 575)
+
+
+ _rotation
+ 0
+
+
+
+ wxgui_scopesink2
+
+ id
+ wxgui_scopesink2_0_0
+
+
+ _enabled
+ True
+
+
+ type
+ float
+
+
+ title
+ Error
+
+
+ samp_rate
+ samp_rate
+
+
+ v_scale
+ 3
+
+
+ v_offset
+ 0
+
+
+ t_scale
+ 0
+
+
+ ac_couple
+ False
+
+
+ xy_mode
+ False
+
+
+ num_inputs
+ 1
+
+
+ win_size
+
+
+
+ grid_pos
+
+
+
+ notebook
+ notebook_0,0
+
+
+ _coordinate
+ (1110, 651)
+
+
+ _rotation
+ 0
+
+
+
+ wxgui_scopesink2
+
+ id
+ wxgui_scopesink2_0_0_0
+
+
+ _enabled
+ True
+
+
+ type
+ float
+
+
+ title
+ Scope Plot
+
+
+ samp_rate
+ samp_rate
+
+
+ v_scale
+ 9
+
+
+ v_offset
+ 0
+
+
+ t_scale
+ 0
+
+
+ ac_couple
+ False
+
+
+ xy_mode
+ False
+
+
+ num_inputs
+ 1
+
+
+ win_size
+
+
+
+ grid_pos
+
+
+
+ notebook
+ notebook_0,1
+
+
+ _coordinate
+ (1112, 881)
+
+
+ _rotation
+ 0
+
+
+
+ variable
+
+ id
+ rrctaps
+
+
+ _enabled
+ True
+
+
+ value
+ firdes.root_raised_cosine(nfilts,1.0,1.0/(spb*nfilts), .35, int(11*spb*nfilts))
+
+
+ _coordinate
+ (513, 679)
+
+
+ _rotation
+ 0
+
+
+
+ gr_pfb_clock_sync_xxx
+
+ id
+ gr_pfb_clock_sync_xxx_0
+
+
+ _enabled
+ True
+
+
+ type
+ ccf
+
+
+ sps
+ spb
+
+
+ alpha
+ alpha
+
+
+ beta
+ beta
+
+
+ taps
+ rrctaps
+
+
+ filter_size
+ nfilts
+
+
+ init_phase
+ 16
+
+
+ max_dev
+ 1.5
+
+
+ _coordinate
+ (512, 527)
+
+
+ _rotation
+ 0
+
+
+
+ wxgui_scopesink2
+
+ id
+ wxgui_scopesink2_0_0_0_0
+
+
+ _enabled
+ True
+
+
+ type
+ float
+
+
+ title
+ Scope Plot
+
+
+ samp_rate
+ samp_rate
+
+
+ v_scale
+ 1.25
+
+
+ v_offset
+ 0
+
+
+ t_scale
+ 0
+
+
+ ac_couple
+ False
+
+
+ xy_mode
+ False
+
+
+ num_inputs
+ 1
+
+
+ win_size
+
+
+
+ grid_pos
+
+
+
+ notebook
+ notebook_0,2
+
+
+ _coordinate
+ (1111, 767)
+
+
+ _rotation
+ 0
+
+
+
+ wxgui_scopesink2
+
+ id
+ wxgui_scopesink2_0_0_1
+
+
+ _enabled
+ True
+
+
+ type
+ complex
+
+
+ title
+ Error
+
+
+ samp_rate
+ samp_rate
+
+
+ v_scale
+ .5
+
+
+ v_offset
+ 0
+
+
+ t_scale
+ 0
+
+
+ ac_couple
+ False
+
+
+ xy_mode
+ False
+
+
+ num_inputs
+ 1
+
+
+ win_size
+
+
+
+ grid_pos
+
+
+
+ notebook
+ notebook_0,3
+
+
+ _coordinate
+ (1115, 358)
+
+
+ _rotation
+ 0
+
+
+
+ gr_float_to_complex
+
+ id
+ gr_float_to_complex_0
+
+
+ _enabled
+ True
+
+
+ vlen
+ 1
+
+
+ _coordinate
+ (590, 184)
+
+
+ _rotation
+ 0
+
+
+
+ blks2_pfb_arb_resampler_ccf
+
+ id
+ blks2_pfb_arb_resampler_ccf_0
+
+
+ _enabled
+ True
+
+
+ rate
+ spb
+
+
+ taps
+ firdes.root_raised_cosine(32, 32, 1.0, 0.35, 44*32)
+
+
+ size
+ 32
+
+
+ _coordinate
+ (816, 181)
+
+
+ _rotation
+ 0
+
+
+
+ gr_channel_model
+
+ id
+ gr_channel_model_0
+
+
+ _enabled
+ True
+
+
+ noise_voltage
+ noise_amp
+
+
+ freq_offset
+ freq_offset
+
+
+ epsilon
+ interpratio
+
+
+ taps
+ 1.0
+
+
+ seed
+ 42
+
+
+ _coordinate
+ (59, 543)
+
+
+ _rotation
+ 0
+
+
+
+ gr_multiply_const_vxx
+
+ id
+ gr_multiply_const_vxx_0
+
+
+ _enabled
+ True
+
+
+ type
+ complex
+
+
+ const
+ sig_amp
+
+
+ vlen
+ 1
+
+
+ _coordinate
+ (714, 382)
+
+
+ _rotation
+ 0
+
+
+
+ variable
+
+ id
+ spb
+
+
+ _enabled
+ True
+
+
+ value
+ 4.2563
+
+
+ _coordinate
+ (42, 840)
+
+
+ _rotation
+ 0
+
+
+
+ random_source_x_0
+ gr_uchar_to_float_0
+ 0
+ 0
+
+
+ gr_uchar_to_float_0
+ gr_add_xx_0
+ 0
+ 0
+
+
+ const_source_x_0
+ gr_add_xx_0
+ 0
+ 1
+
+
+ gr_uchar_to_float_0_0
+ gr_add_xx_0_1
+ 0
+ 0
+
+
+ const_source_x_0_0
+ gr_add_xx_0_1
+ 0
+ 1
+
+
+ random_source_x_0_0
+ gr_uchar_to_float_0_0
+ 0
+ 0
+
+
+ gr_channel_model_0
+ gr_throttle_0
+ 0
+ 0
+
+
+ gr_add_xx_0
+ gr_float_to_complex_0
+ 0
+ 0
+
+
+ gr_add_xx_0_1
+ gr_float_to_complex_0
+ 0
+ 1
+
+
+ gr_pfb_clock_sync_xxx_0
+ wxgui_scopesink2_0
+ 0
+ 0
+
+
+ gr_throttle_0
+ gr_pfb_clock_sync_xxx_0
+ 0
+ 0
+
+
+ gr_pfb_clock_sync_xxx_0
+ wxgui_scopesink2_0_0
+ 1
+ 0
+
+
+ gr_pfb_clock_sync_xxx_0
+ wxgui_scopesink2_0_0_0
+ 3
+ 0
+
+
+ gr_pfb_clock_sync_xxx_0
+ wxgui_scopesink2_0_0_0_0
+ 2
+ 0
+
+
+ gr_multiply_const_vxx_0
+ wxgui_scopesink2_0_0_1
+ 0
+ 0
+
+
+ gr_float_to_complex_0
+ blks2_pfb_arb_resampler_ccf_0
+ 0
+ 0
+
+
+ blks2_pfb_arb_resampler_ccf_0
+ gr_multiply_const_vxx_0
+ 0
+ 0
+
+
+ gr_multiply_const_vxx_0
+ gr_channel_model_0
+ 0
+ 0
+
+
diff --git a/grc/CMakeLists.txt b/grc/CMakeLists.txt
index 997aa56b1..8be5d7fbc 100644
--- a/grc/CMakeLists.txt
+++ b/grc/CMakeLists.txt
@@ -121,5 +121,6 @@ add_subdirectory(grc_gnuradio)
add_subdirectory(gui)
add_subdirectory(python)
add_subdirectory(scripts)
+add_subdirectory(examples)
endif(ENABLE_GRC)
diff --git a/grc/examples/CMakeLists.txt b/grc/examples/CMakeLists.txt
new file mode 100644
index 000000000..acb65dbdc
--- /dev/null
+++ b/grc/examples/CMakeLists.txt
@@ -0,0 +1,37 @@
+# Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+# SIMPLE
+install(
+ FILES
+ simple/variable_config.grc
+ DESTINATION ${GR_PKG_DATA_DIR}/examples/grc/simple
+ COMPONENT "grc"
+)
+
+# XMLRPC
+install(
+ FILES
+ xmlrpc/readme.txt
+ xmlrpc/xmlrpc_client.grc
+ xmlrpc/xmlrpc_client_script.py
+ xmlrpc/xmlrpc_server.grc
+ DESTINATION ${GR_PKG_DATA_DIR}/examples/grc/xmlrpc
+ COMPONENT "grc"
+)
diff --git a/grc/examples/simple/variable_config.grc b/grc/examples/simple/variable_config.grc
new file mode 100644
index 000000000..95c287cce
--- /dev/null
+++ b/grc/examples/simple/variable_config.grc
@@ -0,0 +1,329 @@
+
+
+ Thu Jun 25 10:56:04 2009
+
+ options
+
+ id
+ variable_config_demo
+
+
+ _enabled
+ True
+
+
+ title
+ Variable Config Block Demonstration
+
+
+ author
+ Example
+
+
+ description
+ Save/Load freq from a config file.
+
+
+ window_size
+ 1280, 1024
+
+
+ generate_options
+ wx_gui
+
+
+ category
+ Custom
+
+
+ autostart
+ True
+
+
+ realtime_scheduling
+
+
+
+ _coordinate
+ (10, 10)
+
+
+ _rotation
+ 0
+
+
+
+ variable
+
+ id
+ samp_rate
+
+
+ _enabled
+ True
+
+
+ value
+ 32000
+
+
+ _coordinate
+ (10, 170)
+
+
+ _rotation
+ 0
+
+
+
+ variable_config
+
+ id
+ freq_init
+
+
+ _enabled
+ True
+
+
+ value
+ 1000
+
+
+ type
+ real
+
+
+ config_file
+ config.conf
+
+
+ section
+ main
+
+
+ option
+ freq
+
+
+ writeback
+ freq
+
+
+ _coordinate
+ (255, 17)
+
+
+ _rotation
+ 0
+
+
+
+ variable_slider
+
+ id
+ freq
+
+
+ _enabled
+ True
+
+
+ label
+ Frequency (Hz)
+
+
+ value
+ freq_init
+
+
+ min
+ -samp_rate/2
+
+
+ max
+ samp_rate/2
+
+
+ num_steps
+ 100
+
+
+ style
+ wx.SL_HORIZONTAL
+
+
+ converver
+ float_converter
+
+
+ grid_pos
+
+
+
+ _coordinate
+ (429, 24)
+
+
+ _rotation
+ 0
+
+
+
+ gr_throttle
+
+ id
+ gr_throttle_0
+
+
+ _enabled
+ True
+
+
+ type
+ complex
+
+
+ samples_per_second
+ samp_rate
+
+
+ vlen
+ 1
+
+
+ _coordinate
+ (392, 233)
+
+
+ _rotation
+ 0
+
+
+
+ gr_sig_source_x
+
+ id
+ gr_sig_source_x_0
+
+
+ _enabled
+ True
+
+
+ type
+ complex
+
+
+ samp_rate
+ samp_rate
+
+
+ waveform
+ gr.GR_COS_WAVE
+
+
+ freq
+ freq
+
+
+ amp
+ 1
+
+
+ offset
+ 0
+
+
+ _coordinate
+ (148, 233)
+
+
+ _rotation
+ 0
+
+
+
+ wxgui_fftsink2
+
+ id
+ wxgui_fftsink2_0
+
+
+ _enabled
+ True
+
+
+ type
+ complex
+
+
+ title
+ FFT Plot
+
+
+ samp_rate
+ samp_rate
+
+
+ baseband_freq
+ 0
+
+
+ y_per_div
+ 10
+
+
+ y_divs
+ 10
+
+
+ ref_level
+ 50
+
+
+ fft_size
+ 1024
+
+
+ fft_rate
+ 30
+
+
+ peak_hold
+ False
+
+
+ average
+ False
+
+
+ avg_alpha
+ 0
+
+
+ grid_pos
+
+
+
+ _coordinate
+ (671, 233)
+
+
+ _rotation
+ 0
+
+
+
+ gr_sig_source_x_0
+ gr_throttle_0
+ 0
+ 0
+
+
+ gr_throttle_0
+ wxgui_fftsink2_0
+ 0
+ 0
+
+
diff --git a/grc/examples/xmlrpc/readme.txt b/grc/examples/xmlrpc/readme.txt
new file mode 100644
index 000000000..c1f87c1cb
--- /dev/null
+++ b/grc/examples/xmlrpc/readme.txt
@@ -0,0 +1,18 @@
+##################################################
+# XMLRPC example
+##################################################
+
+XMLRPC allows software to make remote function calls over http.
+In the case of GRC, one can use XMLRPC to modify variables in a running flow graph.
+See http://www.xmlrpc.com/
+
+--- Server Example ---
+Place an "XMLRPC Server" block inside of any flow graph.
+The server will provide set functions for every variable in the flow graph.
+If a variable is called "freq", the server will provide a function set_freq(new_freq).
+Run the server example and experiment with the example client script.
+
+-- Client Example --
+The "XMLRPC Client" block will give a variable control over one remove function.
+In the example client, there is one client block and gui control per variable.
+This technique can be used to remotely control a flow graph, perhaps running on a non-gui machine.
diff --git a/grc/examples/xmlrpc/xmlrpc_client.grc b/grc/examples/xmlrpc/xmlrpc_client.grc
new file mode 100644
index 000000000..3bb4e7ed3
--- /dev/null
+++ b/grc/examples/xmlrpc/xmlrpc_client.grc
@@ -0,0 +1,312 @@
+
+
+ Thu Jul 24 14:27:44 2008
+
+ options
+
+ id
+ client_block
+
+
+ _enabled
+ True
+
+
+ title
+ XMLRPC Client
+
+
+ author
+ Example
+
+
+ description
+ example flow graph
+
+
+ window_size
+ 1280, 1024
+
+
+ generate_options
+ wx_gui
+
+
+ category
+ Custom
+
+
+ _coordinate
+ (10, 10)
+
+
+ _rotation
+ 0
+
+
+
+ xmlrpc_client
+
+ id
+ xmlrpc_client0
+
+
+ _enabled
+ True
+
+
+ addr
+ localhost
+
+
+ port
+ 1234
+
+
+ callback
+ set_ampl
+
+
+ variable
+ ampl
+
+
+ _coordinate
+ (409, 35)
+
+
+ _rotation
+ 0
+
+
+
+ xmlrpc_client
+
+ id
+ xmlrpc_client
+
+
+ _enabled
+ True
+
+
+ addr
+ localhost
+
+
+ port
+ 1234
+
+
+ callback
+ set_freq
+
+
+ variable
+ freq
+
+
+ _coordinate
+ (222, 34)
+
+
+ _rotation
+ 0
+
+
+
+ variable_slider
+
+ id
+ freq
+
+
+ _enabled
+ True
+
+
+ label
+ Frequency (Hz)
+
+
+ value
+ 1000
+
+
+ min
+ 0
+
+
+ max
+ 5000
+
+
+ num_steps
+ 100
+
+
+ slider_type
+ horizontal
+
+
+ grid_pos
+ 0, 0, 1, 2
+
+
+ _coordinate
+ (207, 162)
+
+
+ _rotation
+ 0
+
+
+
+ variable_slider
+
+ id
+ ampl
+
+
+ _enabled
+ True
+
+
+ label
+ Amplitude
+
+
+ value
+ 1
+
+
+ min
+ 0
+
+
+ max
+ 2
+
+
+ num_steps
+ 100
+
+
+ slider_type
+ horizontal
+
+
+ grid_pos
+ 1, 0, 1, 2
+
+
+ _coordinate
+ (397, 167)
+
+
+ _rotation
+ 0
+
+
+
+ variable_chooser
+
+ id
+ offset
+
+
+ _enabled
+ True
+
+
+ label
+ Offset
+
+
+ value_index
+ 1
+
+
+ choices
+ [-1, 0, 1]
+
+
+ labels
+ ["neg", "zero", "pos"]
+
+
+ chooser_type
+ radio_buttons_horizontal
+
+
+ grid_pos
+ 2, 0, 1, 2
+
+
+ _coordinate
+ (596, 177)
+
+
+ _rotation
+ 0
+
+
+
+ xmlrpc_client
+
+ id
+ xmlrpc_client1
+
+
+ _enabled
+ True
+
+
+ addr
+ localhost
+
+
+ port
+ 1234
+
+
+ callback
+ set_offset
+
+
+ variable
+ offset*ampl
+
+
+ _coordinate
+ (608, 39)
+
+
+ _rotation
+ 0
+
+
+
+ variable
+
+ id
+ samp_rate
+
+
+ _enabled
+ True
+
+
+ value
+ 32000
+
+
+ _coordinate
+ (13, 172)
+
+
+ _rotation
+ 0
+
+
+
\ No newline at end of file
diff --git a/grc/examples/xmlrpc/xmlrpc_client_script.py b/grc/examples/xmlrpc/xmlrpc_client_script.py
new file mode 100644
index 000000000..956fa07fb
--- /dev/null
+++ b/grc/examples/xmlrpc/xmlrpc_client_script.py
@@ -0,0 +1,23 @@
+#!/usr/bin/env python
+
+import time
+import random
+import xmlrpclib
+
+#create server object
+s = xmlrpclib.Server("http://localhost:1234")
+
+#randomly change parameters of the sinusoid
+for i in range(10):
+ #generate random values
+ new_freq = random.uniform(0, 5000)
+ new_ampl = random.uniform(0, 2)
+ new_offset = random.uniform(-1, 1)
+ #set new values
+ time.sleep(1)
+ s.set_freq(new_freq)
+ time.sleep(1)
+ s.set_ampl(new_ampl)
+ time.sleep(1)
+ s.set_offset(new_offset)
+
diff --git a/grc/examples/xmlrpc/xmlrpc_server.grc b/grc/examples/xmlrpc/xmlrpc_server.grc
new file mode 100644
index 000000000..dc539ef1b
--- /dev/null
+++ b/grc/examples/xmlrpc/xmlrpc_server.grc
@@ -0,0 +1,384 @@
+
+
+ Thu Jul 24 14:27:42 2008
+
+ options
+
+ id
+ server_block
+
+
+ _enabled
+ True
+
+
+ title
+ XMLRPC Server
+
+
+ author
+ Example
+
+
+ description
+ example flow graph
+
+
+ window_size
+ 1280, 1024
+
+
+ generate_options
+ wx_gui
+
+
+ category
+ Custom
+
+
+ _coordinate
+ (10, 10)
+
+
+ _rotation
+ 0
+
+
+
+ gr_sig_source_x
+
+ id
+ gr_sig_source_x
+
+
+ _enabled
+ True
+
+
+ type
+ float
+
+
+ samp_rate
+ samp_rate
+
+
+ waveform
+ gr.GR_COS_WAVE
+
+
+ freq
+ freq
+
+
+ amp
+ ampl
+
+
+ offset
+ offset
+
+
+ _coordinate
+ (162, 200)
+
+
+ _rotation
+ 0
+
+
+
+ variable
+
+ id
+ offset
+
+
+ _enabled
+ True
+
+
+ value
+ 0
+
+
+ _coordinate
+ (12, 390)
+
+
+ _rotation
+ 0
+
+
+
+ xmlrpc_server
+
+ id
+ xmlrpc_server
+
+
+ _enabled
+ True
+
+
+ addr
+ localhost
+
+
+ port
+ 1234
+
+
+ _coordinate
+ (395, 240)
+
+
+ _rotation
+ 0
+
+
+
+ gr_throttle
+
+ id
+ gr_throttle
+
+
+ _enabled
+ True
+
+
+ type
+ float
+
+
+ samples_per_second
+ samp_rate
+
+
+ vlen
+ 1
+
+
+ _coordinate
+ (386, 93)
+
+
+ _rotation
+ 0
+
+
+
+ wxgui_scopesink2
+
+ id
+ wxgui_scopesink2
+
+
+ _enabled
+ True
+
+
+ type
+ float
+
+
+ title
+ Scope Plot
+
+
+ samp_rate
+ samp_rate
+
+
+ frame_decim
+ 15
+
+
+ v_scale
+ 0
+
+
+ t_scale
+ .001
+
+
+ marker
+ set_format_line
+
+
+ num_inputs
+ 1
+
+
+ grid_pos
+ 0, 0, 2, 4
+
+
+ _coordinate
+ (623, 28)
+
+
+ _rotation
+ 0
+
+
+
+ wxgui_fftsink2
+
+ id
+ wxgui_fftsink2
+
+
+ _enabled
+ True
+
+
+ type
+ float
+
+
+ title
+ FFT Plot
+
+
+ samp_rate
+ samp_rate
+
+
+ baseband_freq
+ 0
+
+
+ y_per_div
+ 10
+
+
+ y_divs
+ 8
+
+
+ ref_level
+ 50
+
+
+ fft_size
+ 512
+
+
+ fft_rate
+ 15
+
+
+ avg_alpha
+ 0
+
+
+ average
+ False
+
+
+ peak_hold
+ False
+
+
+ grid_pos
+ 2, 0, 2, 4
+
+
+ _coordinate
+ (630, 233)
+
+
+ _rotation
+ 0
+
+
+
+ variable
+
+ id
+ samp_rate
+
+
+ _enabled
+ True
+
+
+ value
+ 32000
+
+
+ _coordinate
+ (11, 160)
+
+
+ _rotation
+ 0
+
+
+
+ variable
+
+ id
+ freq
+
+
+ _enabled
+ True
+
+
+ value
+ 1000
+
+
+ _coordinate
+ (11, 237)
+
+
+ _rotation
+ 0
+
+
+
+ variable
+
+ id
+ ampl
+
+
+ _enabled
+ True
+
+
+ value
+ 1
+
+
+ _coordinate
+ (13, 315)
+
+
+ _rotation
+ 0
+
+
+
+ gr_sig_source_x
+ gr_throttle
+ 0
+ 0
+
+
+ gr_throttle
+ wxgui_scopesink2
+ 0
+ 0
+
+
+ gr_throttle
+ wxgui_fftsink2
+ 0
+ 0
+
+
\ No newline at end of file
--
cgit