summaryrefslogtreecommitdiff
path: root/gnuradio-core/src
diff options
context:
space:
mode:
Diffstat (limited to 'gnuradio-core/src')
-rw-r--r--gnuradio-core/src/.gitignore8
-rw-r--r--gnuradio-core/src/examples/CMakeLists.txt (renamed from gnuradio-core/src/python/bin/Makefile.am)16
-rw-r--r--gnuradio-core/src/examples/mp-sched/CMakeLists.txt (renamed from gnuradio-core/src/lib/hier/Makefile.am)32
-rw-r--r--gnuradio-core/src/examples/mp-sched/README2
-rw-r--r--gnuradio-core/src/examples/mp-sched/perf-data/core-duo.dat65
-rw-r--r--gnuradio-core/src/examples/mp-sched/perf-data/core2-duo.dat65
-rw-r--r--gnuradio-core/src/examples/mp-sched/perf-data/dual-quad-core-2.33-clovertown.dat257
-rw-r--r--gnuradio-core/src/examples/mp-sched/perf-data/dual-quad-core-3.00-penryn.dat257
-rw-r--r--gnuradio-core/src/examples/mp-sched/perf-data/js21-altivec.dat65
-rw-r--r--gnuradio-core/src/examples/mp-sched/perf-data/js21.dat65
-rw-r--r--gnuradio-core/src/examples/mp-sched/perf-data/ps3-altivec.dat65
-rw-r--r--gnuradio-core/src/examples/mp-sched/perf-data/ps3.dat65
-rw-r--r--gnuradio-core/src/examples/mp-sched/perf-data/qs21-altivec.dat65
-rw-r--r--gnuradio-core/src/examples/mp-sched/perf-data/qs21.dat65
-rwxr-xr-xgnuradio-core/src/examples/mp-sched/plot_flops.py98
-rwxr-xr-xgnuradio-core/src/examples/mp-sched/run_synthetic.py101
-rwxr-xr-xgnuradio-core/src/examples/mp-sched/synthetic.py118
-rwxr-xr-xgnuradio-core/src/examples/mp-sched/wfm_rcv_pll_to_wav.py127
-rw-r--r--gnuradio-core/src/examples/network/CMakeLists.txt (renamed from gnuradio-core/src/python/gnuradio/blks2/Makefile.am)22
-rwxr-xr-xgnuradio-core/src/examples/network/audio_sink.py72
-rwxr-xr-xgnuradio-core/src/examples/network/audio_source.py69
-rwxr-xr-xgnuradio-core/src/examples/network/dial_tone_sink.py65
-rwxr-xr-xgnuradio-core/src/examples/network/dial_tone_source.py70
-rwxr-xr-xgnuradio-core/src/examples/network/vector_sink.py64
-rwxr-xr-xgnuradio-core/src/examples/network/vector_source.py60
-rw-r--r--gnuradio-core/src/examples/pfb/CMakeLists.txt (renamed from gnuradio-core/src/Makefile.am)22
-rwxr-xr-xgnuradio-core/src/examples/pfb/channelize.py191
-rwxr-xr-xgnuradio-core/src/examples/pfb/chirp_channelize.py203
-rwxr-xr-xgnuradio-core/src/examples/pfb/decimate.py178
-rwxr-xr-xgnuradio-core/src/examples/pfb/fmtest.py225
-rwxr-xr-xgnuradio-core/src/examples/pfb/interpolate.py233
-rwxr-xr-xgnuradio-core/src/examples/pfb/reconstruction.py131
-rwxr-xr-xgnuradio-core/src/examples/pfb/resampler.py127
-rw-r--r--gnuradio-core/src/examples/pfb/resampler_demo.grc598
-rwxr-xr-xgnuradio-core/src/examples/pfb/synth_filter.py83
-rwxr-xr-xgnuradio-core/src/examples/pfb/synth_to_chan.py117
-rw-r--r--gnuradio-core/src/examples/tags/CMakeLists.txt (renamed from gnuradio-core/src/python/Makefile.am)18
-rwxr-xr-xgnuradio-core/src/examples/tags/test_file_tags.py55
-rwxr-xr-xgnuradio-core/src/examples/tags/uhd_burst_detector.py116
-rw-r--r--gnuradio-core/src/examples/volk_benchmark/CMakeLists.txt35
-rw-r--r--gnuradio-core/src/examples/volk_benchmark/README252
-rwxr-xr-xgnuradio-core/src/examples/volk_benchmark/volk_math.py151
-rwxr-xr-xgnuradio-core/src/examples/volk_benchmark/volk_plot.py169
-rw-r--r--gnuradio-core/src/examples/volk_benchmark/volk_test_funcs.py171
-rwxr-xr-xgnuradio-core/src/examples/volk_benchmark/volk_types.py182
-rw-r--r--gnuradio-core/src/gen_interpolator_taps/.gitignore7
-rw-r--r--gnuradio-core/src/gen_interpolator_taps/Makefile.am.obsolete (renamed from gnuradio-core/src/gen_interpolator_taps/Makefile.am)0
-rw-r--r--gnuradio-core/src/guile/.gitignore5
-rw-r--r--gnuradio-core/src/guile/Makefile.am80
-rw-r--r--gnuradio-core/src/guile/Swig/common.scm76
-rw-r--r--gnuradio-core/src/guile/dynl-global.c123
-rw-r--r--gnuradio-core/src/guile/gnuradio/core.scm32
-rw-r--r--gnuradio-core/src/guile/gnuradio/export-safely.scm90
-rw-r--r--gnuradio-core/src/guile/gnuradio/run-waveform.scm55
-rw-r--r--gnuradio-core/src/guile/gnuradio/runtime-shim.scm129
-rw-r--r--gnuradio-core/src/guile/gnuradio/test-suite/guile-test241
-rw-r--r--gnuradio-core/src/guile/gnuradio/test-suite/lib.scm627
-rw-r--r--gnuradio-core/src/guile/gnuradio/waveform.scm54
-rw-r--r--gnuradio-core/src/guile/gr-run-waveform-script.in51
-rw-r--r--gnuradio-core/src/guile/run_guile_tests.in17
-rw-r--r--gnuradio-core/src/guile/tests/00_runtime_basics.test159
-rw-r--r--gnuradio-core/src/guile/tests/00_runtime_ctors.test54
-rw-r--r--gnuradio-core/src/guile/tests/filter_ctors.test245
-rw-r--r--gnuradio-core/src/guile/tests/general_ctors.test348
-rw-r--r--gnuradio-core/src/guile/tests/gengen_ctors.test336
-rw-r--r--gnuradio-core/src/guile/tests/hier_ctors.test40
-rw-r--r--gnuradio-core/src/guile/tests/io_ctors.test82
-rw-r--r--gnuradio-core/src/lib/.gitignore7
-rw-r--r--gnuradio-core/src/lib/CMakeLists.txt6
-rw-r--r--gnuradio-core/src/lib/Makefile.am72
-rw-r--r--gnuradio-core/src/lib/filter/.gitignore226
-rw-r--r--gnuradio-core/src/lib/filter/CMakeLists.txt2
-rw-r--r--gnuradio-core/src/lib/filter/Makefile.am402
-rw-r--r--gnuradio-core/src/lib/filter/filter.i4
-rw-r--r--gnuradio-core/src/lib/filter/gr_pfb_channelizer_ccf.cc47
-rw-r--r--gnuradio-core/src/lib/filter/gr_pfb_channelizer_ccf.h46
-rw-r--r--gnuradio-core/src/lib/filter/gr_pfb_channelizer_ccf.i5
-rw-r--r--gnuradio-core/src/lib/filter/gr_pfb_synthesis_filterbank_ccf.cc169
-rw-r--r--gnuradio-core/src/lib/filter/gr_pfb_synthesis_filterbank_ccf.h100
-rw-r--r--gnuradio-core/src/lib/filter/gr_pfb_synthesizer_ccf.cc286
-rw-r--r--gnuradio-core/src/lib/filter/gr_pfb_synthesizer_ccf.h147
-rw-r--r--gnuradio-core/src/lib/filter/gr_pfb_synthesizer_ccf.i (renamed from gnuradio-core/src/lib/filter/gr_pfb_synthesis_filterbank_ccf.i)24
-rw-r--r--gnuradio-core/src/lib/general/.gitignore308
-rw-r--r--gnuradio-core/src/lib/general/CMakeLists.txt5
-rw-r--r--gnuradio-core/src/lib/general/Makefile.am494
-rw-r--r--gnuradio-core/src/lib/general/general.i10
-rw-r--r--gnuradio-core/src/lib/general/general_generated.i20
-rw-r--r--gnuradio-core/src/lib/general/gr_char_to_float.h10
-rw-r--r--gnuradio-core/src/lib/general/gr_char_to_short.h2
-rw-r--r--gnuradio-core/src/lib/general/gr_float_to_char.h10
-rw-r--r--gnuradio-core/src/lib/general/gr_float_to_int.h10
-rw-r--r--gnuradio-core/src/lib/general/gr_float_to_short.h10
-rw-r--r--gnuradio-core/src/lib/general/gr_frequency_modulator_fc.cc20
-rw-r--r--gnuradio-core/src/lib/general/gr_frequency_modulator_fc.h4
-rw-r--r--gnuradio-core/src/lib/general/gr_fxpt.cc21
-rw-r--r--gnuradio-core/src/lib/general/gr_fxpt.h16
-rw-r--r--gnuradio-core/src/lib/general/gr_int_to_float.h10
-rw-r--r--gnuradio-core/src/lib/general/gr_probe_mpsk_snr_c.cc85
-rw-r--r--gnuradio-core/src/lib/general/gr_probe_mpsk_snr_c.h83
-rw-r--r--gnuradio-core/src/lib/general/gr_short_to_char.h2
-rw-r--r--gnuradio-core/src/lib/general/gr_short_to_float.h10
-rw-r--r--gnuradio-core/src/lib/general/gr_squash_ff.cc93
-rw-r--r--gnuradio-core/src/lib/general/gr_squash_ff.h68
-rw-r--r--gnuradio-core/src/lib/general/gr_squash_ff.i34
-rw-r--r--gnuradio-core/src/lib/general/gr_wavelet_ff.cc107
-rw-r--r--gnuradio-core/src/lib/general/gr_wavelet_ff.h71
-rw-r--r--gnuradio-core/src/lib/general/gr_wavelet_ff.i31
-rw-r--r--gnuradio-core/src/lib/general/gr_wvps_ff.cc98
-rw-r--r--gnuradio-core/src/lib/general/gr_wvps_ff.i29
-rw-r--r--gnuradio-core/src/lib/general/qa_gr_fxpt.cc9
-rw-r--r--gnuradio-core/src/lib/gengen/.gitignore403
-rw-r--r--gnuradio-core/src/lib/gengen/CMakeLists.txt2
-rw-r--r--gnuradio-core/src/lib/gengen/Makefile.am159
-rw-r--r--gnuradio-core/src/lib/gengen/Makefile.gen30
-rwxr-xr-xgnuradio-core/src/lib/gengen/generate_common.py6
-rw-r--r--gnuradio-core/src/lib/gengen/gr_noise_source_X.h.t22
-rw-r--r--gnuradio-core/src/lib/gengen/gr_noise_source_X.i.t4
-rw-r--r--gnuradio-core/src/lib/gengen/gr_probe_signal_X.cc.t (renamed from gnuradio-core/src/lib/general/gr_probe_signal_f.cc)23
-rw-r--r--gnuradio-core/src/lib/gengen/gr_probe_signal_X.h.t (renamed from gnuradio-core/src/lib/general/gr_probe_signal_f.h)30
-rw-r--r--gnuradio-core/src/lib/gengen/gr_probe_signal_X.i.t (renamed from gnuradio-core/src/lib/general/gr_probe_signal_f.i)12
-rw-r--r--gnuradio-core/src/lib/gengen/gr_probe_signal_vX.cc.t59
-rw-r--r--gnuradio-core/src/lib/gengen/gr_probe_signal_vX.h.t (renamed from gnuradio-core/src/lib/general/gr_wvps_ff.h)44
-rw-r--r--gnuradio-core/src/lib/gengen/gr_probe_signal_vX.i.t (renamed from gnuradio-core/src/lib/general/gr_probe_mpsk_snr_c.i)19
-rw-r--r--gnuradio-core/src/lib/hier/.gitignore4
-rw-r--r--gnuradio-core/src/lib/io/.gitignore8
-rw-r--r--gnuradio-core/src/lib/io/Makefile.am116
-rw-r--r--gnuradio-core/src/lib/io/gr_message_source.i8
-rw-r--r--gnuradio-core/src/lib/io/gr_wavfile_sink.cc2
-rw-r--r--gnuradio-core/src/lib/io/gr_wavfile_sink.h20
-rw-r--r--gnuradio-core/src/lib/missing/.gitignore8
-rw-r--r--gnuradio-core/src/lib/missing/Makefile.am46
-rw-r--r--gnuradio-core/src/lib/reed-solomon/.gitignore9
-rw-r--r--gnuradio-core/src/lib/reed-solomon/Makefile.am55
-rw-r--r--gnuradio-core/src/lib/runtime/.gitignore8
-rw-r--r--gnuradio-core/src/lib/runtime/Makefile.am165
-rw-r--r--gnuradio-core/src/lib/runtime/gr_basic_block.h2
-rw-r--r--gnuradio-core/src/lib/runtime/gr_buffer.h3
-rw-r--r--gnuradio-core/src/lib/runtime/gr_flat_flowgraph.cc41
-rw-r--r--gnuradio-core/src/lib/runtime/gr_flat_flowgraph.h9
-rw-r--r--gnuradio-core/src/lib/runtime/gr_hier_block2.h2
-rw-r--r--gnuradio-core/src/lib/runtime/gr_hier_block2.i2
-rw-r--r--gnuradio-core/src/lib/runtime/gr_msg_queue.i75
-rw-r--r--gnuradio-core/src/lib/runtime/gr_top_block.h2
-rw-r--r--gnuradio-core/src/lib/runtime/gr_top_block.i33
-rw-r--r--gnuradio-core/src/lib/swig/.gitignore49
-rw-r--r--gnuradio-core/src/lib/swig/Makefile.am109
-rw-r--r--gnuradio-core/src/lib/swig/Makefile.swig.gen870
-rw-r--r--gnuradio-core/src/lib/swig/gnuradio.i37
-rw-r--r--gnuradio-core/src/lib/swig/gnuradio_core_filter.i10
-rw-r--r--gnuradio-core/src/lib/swig/gnuradio_core_general.i10
-rw-r--r--gnuradio-core/src/lib/swig/gnuradio_core_gengen.i10
-rw-r--r--gnuradio-core/src/lib/swig/gnuradio_core_hier.i10
-rw-r--r--gnuradio-core/src/lib/swig/gnuradio_core_io.i10
-rw-r--r--gnuradio-core/src/lib/swig/gnuradio_core_runtime.i25
-rw-r--r--gnuradio-core/src/lib/swig/gr_swig_block_magic.i18
-rw-r--r--gnuradio-core/src/lib/swig/guile/std_complex.i37
-rw-r--r--gnuradio-core/src/lib/swig/guile/std_vector.i437
-rw-r--r--gnuradio-core/src/lib/viterbi/.gitignore6
-rw-r--r--gnuradio-core/src/lib/viterbi/Makefile.am46
-rw-r--r--gnuradio-core/src/python/.gitignore8
-rw-r--r--gnuradio-core/src/python/bin/.gitignore8
-rw-r--r--gnuradio-core/src/python/gnuradio/.gitignore8
-rw-r--r--gnuradio-core/src/python/gnuradio/Makefile.am35
-rw-r--r--gnuradio-core/src/python/gnuradio/blks2/.gitignore3
-rw-r--r--gnuradio-core/src/python/gnuradio/blks2impl/.gitignore8
-rw-r--r--gnuradio-core/src/python/gnuradio/blks2impl/Makefile.am49
-rw-r--r--gnuradio-core/src/python/gnuradio/blks2impl/pfb_channelizer.py22
-rw-r--r--gnuradio-core/src/python/gnuradio/gr/.gitignore9
-rw-r--r--gnuradio-core/src/python/gnuradio/gr/Makefile.am102
-rwxr-xr-xgnuradio-core/src/python/gnuradio/gr/qa_classify.py181
-rwxr-xr-xgnuradio-core/src/python/gnuradio/gr/qa_frequency_modulator.py2
-rw-r--r--gnuradio-core/src/python/gnuradio/gr/qa_probe_signal.py67
-rwxr-xr-xgnuradio-core/src/python/gnuradio/gr/run_tests.in14
-rw-r--r--gnuradio-core/src/python/gnuradio/gru/.gitignore8
-rw-r--r--gnuradio-core/src/python/gnuradio/gru/Makefile.am30
-rw-r--r--gnuradio-core/src/python/gnuradio/gruimpl/.gitignore8
-rw-r--r--gnuradio-core/src/python/gnuradio/gruimpl/Makefile.am39
-rw-r--r--gnuradio-core/src/python/gnuradio/vocoder/.gitignore2
-rw-r--r--gnuradio-core/src/tests/.gitignore28
-rw-r--r--gnuradio-core/src/tests/Makefile.am105
-rw-r--r--gnuradio-core/src/utils/.gitignore8
-rw-r--r--gnuradio-core/src/utils/Makefile.am56
182 files changed, 6150 insertions, 9044 deletions
diff --git a/gnuradio-core/src/.gitignore b/gnuradio-core/src/.gitignore
deleted file mode 100644
index a02b6ff73..000000000
--- a/gnuradio-core/src/.gitignore
+++ /dev/null
@@ -1,8 +0,0 @@
-/Makefile
-/Makefile.in
-/.la
-/.lo
-/.deps
-/.libs
-/*.la
-/*.lo
diff --git a/gnuradio-core/src/python/bin/Makefile.am b/gnuradio-core/src/examples/CMakeLists.txt
index 6f9f162f1..4bdc463e4 100644
--- a/gnuradio-core/src/python/bin/Makefile.am
+++ b/gnuradio-core/src/examples/CMakeLists.txt
@@ -1,5 +1,4 @@
-#
-# Copyright 2005,2009,2010 Free Software Foundation, Inc.
+# Copyright 2011 Free Software Foundation, Inc.
#
# This file is part of GNU Radio
#
@@ -17,12 +16,9 @@
# along with GNU Radio; see the file COPYING. If not, write to
# the Free Software Foundation, Inc., 51 Franklin Street,
# Boston, MA 02110-1301, USA.
-#
-
-include $(top_srcdir)/Makefile.common
-
-
-EXTRA_DIST += microtune.py
-noinst_SCRIPTS = \
- microtune.py
+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/lib/hier/Makefile.am b/gnuradio-core/src/examples/mp-sched/CMakeLists.txt
index 369feef75..2bf70d464 100644
--- a/gnuradio-core/src/lib/hier/Makefile.am
+++ b/gnuradio-core/src/examples/mp-sched/CMakeLists.txt
@@ -1,5 +1,4 @@
-#
-# Copyright 2009,2010 Free Software Foundation, Inc.
+# Copyright 2011 Free Software Foundation, Inc.
#
# This file is part of GNU Radio
#
@@ -17,21 +16,20 @@
# along with GNU Radio; see the file COPYING. If not, write to
# the Free Software Foundation, Inc., 51 Franklin Street,
# Boston, MA 02110-1301, USA.
-#
-
-include $(top_srcdir)/Makefile.common
-
-
-AM_CPPFLAGS = $(STD_DEFINES_AND_INCLUDES) $(WITH_INCLUDES)
-
-noinst_LTLIBRARIES = libhier.la
-libhier_la_SOURCES = \
- gr_channel_model.cc
+include(GrPython)
-grinclude_HEADERS = \
- gr_channel_model.h
+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"
+)
-swiginclude_HEADERS = \
- hier.i \
- gr_channel_model.i
+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/python/gnuradio/blks2/Makefile.am b/gnuradio-core/src/examples/network/CMakeLists.txt
index 04b7c6500..33e7cb7d0 100644
--- a/gnuradio-core/src/python/gnuradio/blks2/Makefile.am
+++ b/gnuradio-core/src/examples/network/CMakeLists.txt
@@ -1,5 +1,4 @@
-#
-# Copyright 2005,2009 Free Software Foundation, Inc.
+# Copyright 2011 Free Software Foundation, Inc.
#
# This file is part of GNU Radio
#
@@ -17,14 +16,15 @@
# along with GNU Radio; see the file COPYING. If not, write to
# the Free Software Foundation, Inc., 51 Franklin Street,
# Boston, MA 02110-1301, USA.
-#
-
-include $(top_srcdir)/Makefile.common
-
-# EXTRA_DIST = run_tests.in
-# TESTS = run_tests
-grblks2pythondir = $(grpythondir)/blks2
+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"
+)
-grblks2python_PYTHON = \
- __init__.py
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/Makefile.am b/gnuradio-core/src/examples/pfb/CMakeLists.txt
index 1717d373a..899c47b90 100644
--- a/gnuradio-core/src/Makefile.am
+++ b/gnuradio-core/src/examples/pfb/CMakeLists.txt
@@ -1,5 +1,4 @@
-#
-# Copyright 2001,2004,2009,2010 Free Software Foundation, Inc.
+# Copyright 2011 Free Software Foundation, Inc.
#
# This file is part of GNU Radio
#
@@ -17,10 +16,21 @@
# along with GNU Radio; see the file COPYING. If not, write to
# the Free Software Foundation, Inc., 51 Franklin Street,
# Boston, MA 02110-1301, USA.
-#
-include $(top_srcdir)/Makefile.common
+include(GrPython)
-SUBDIRS = gen_interpolator_taps lib tests python guile
+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"
+)
-DIST_SUBDIRS = gen_interpolator_taps lib tests python guile utils
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 @@
+<?xml version='1.0' encoding='ASCII'?>
+<flow_graph>
+ <timestamp>Sun Aug 23 11:39:47 2009</timestamp>
+ <block>
+ <key>options</key>
+ <param>
+ <key>id</key>
+ <value>resampler_demo</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>title</key>
+ <value></value>
+ </param>
+ <param>
+ <key>author</key>
+ <value></value>
+ </param>
+ <param>
+ <key>description</key>
+ <value></value>
+ </param>
+ <param>
+ <key>window_size</key>
+ <value>1280, 1024</value>
+ </param>
+ <param>
+ <key>generate_options</key>
+ <value>wx_gui</value>
+ </param>
+ <param>
+ <key>category</key>
+ <value>Custom</value>
+ </param>
+ <param>
+ <key>run</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>realtime_scheduling</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(10, 10)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>import</key>
+ <param>
+ <key>id</key>
+ <value>import_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>import</key>
+ <value>import math</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(11, 59)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable</key>
+ <param>
+ <key>id</key>
+ <value>rs_taps</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>firdes.low_pass(nphases, nphases, frac_bw, 0.5-frac_bw)</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(273, 154)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>gr_add_const_vxx</key>
+ <param>
+ <key>id</key>
+ <value>adder</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>float</value>
+ </param>
+ <param>
+ <key>const</key>
+ <value>-1.0</value>
+ </param>
+ <param>
+ <key>vlen</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(227, 303)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>gr_throttle</key>
+ <param>
+ <key>id</key>
+ <value>throttle</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>float</value>
+ </param>
+ <param>
+ <key>samples_per_second</key>
+ <value>samp_rate</value>
+ </param>
+ <param>
+ <key>vlen</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(227, 493)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>wxgui_fftsink2</key>
+ <param>
+ <key>id</key>
+ <value>orig_fft</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>complex</value>
+ </param>
+ <param>
+ <key>title</key>
+ <value>Original Spectrum</value>
+ </param>
+ <param>
+ <key>samp_rate</key>
+ <value>samp_rate</value>
+ </param>
+ <param>
+ <key>baseband_freq</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>y_per_div</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>y_divs</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>ref_level</key>
+ <value>30</value>
+ </param>
+ <param>
+ <key>fft_size</key>
+ <value>1024</value>
+ </param>
+ <param>
+ <key>fft_rate</key>
+ <value>30</value>
+ </param>
+ <param>
+ <key>peak_hold</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>average</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>avg_alpha</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>grid_pos</key>
+ <value>1, 0, 1, 3</value>
+ </param>
+ <param>
+ <key>notebook</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(409, 289)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>180</value>
+ </param>
+ </block>
+ <block>
+ <key>wxgui_fftsink2</key>
+ <param>
+ <key>id</key>
+ <value>resamp_fft</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>complex</value>
+ </param>
+ <param>
+ <key>title</key>
+ <value>Resampled Spectrum</value>
+ </param>
+ <param>
+ <key>samp_rate</key>
+ <value>new_rate</value>
+ </param>
+ <param>
+ <key>baseband_freq</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>y_per_div</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>y_divs</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>ref_level</key>
+ <value>30</value>
+ </param>
+ <param>
+ <key>fft_size</key>
+ <value>1024</value>
+ </param>
+ <param>
+ <key>fft_rate</key>
+ <value>30</value>
+ </param>
+ <param>
+ <key>peak_hold</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>average</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>avg_alpha</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>grid_pos</key>
+ <value>2, 0, 1, 3</value>
+ </param>
+ <param>
+ <key>notebook</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(640, 256)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>180</value>
+ </param>
+ </block>
+ <block>
+ <key>gr_sig_source_x</key>
+ <param>
+ <key>id</key>
+ <value>tri_source</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>float</value>
+ </param>
+ <param>
+ <key>samp_rate</key>
+ <value>samp_rate</value>
+ </param>
+ <param>
+ <key>waveform</key>
+ <value>gr.GR_TRI_WAVE</value>
+ </param>
+ <param>
+ <key>freq</key>
+ <value>0.05</value>
+ </param>
+ <param>
+ <key>amp</key>
+ <value>2.0</value>
+ </param>
+ <param>
+ <key>offset</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(21, 271)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>gr_frequency_modulator_fc</key>
+ <param>
+ <key>id</key>
+ <value>fm_mod</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>sensitivity</key>
+ <value>math.pi</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(411, 493)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>blks2_pfb_arb_resampler_ccf</key>
+ <param>
+ <key>id</key>
+ <value>resampler</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>rate</key>
+ <value>float(new_rate)/samp_rate</value>
+ </param>
+ <param>
+ <key>taps</key>
+ <value>rs_taps</value>
+ </param>
+ <param>
+ <key>size</key>
+ <value>nphases</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(641, 477)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable</key>
+ <param>
+ <key>id</key>
+ <value>nphases</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>32</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(185, 153)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable_static_text</key>
+ <param>
+ <key>id</key>
+ <value>samp_rate</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>label</key>
+ <value>Sample Rate</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>44100</value>
+ </param>
+ <param>
+ <key>converver</key>
+ <value>float_converter</value>
+ </param>
+ <param>
+ <key>formatter</key>
+ <value>None</value>
+ </param>
+ <param>
+ <key>grid_pos</key>
+ <value>0, 0, 1, 1</value>
+ </param>
+ <param>
+ <key>notebook</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(179, 14)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable_static_text</key>
+ <param>
+ <key>id</key>
+ <value>new_rate</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>label</key>
+ <value>Resampled Rate</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>48000</value>
+ </param>
+ <param>
+ <key>converver</key>
+ <value>float_converter</value>
+ </param>
+ <param>
+ <key>formatter</key>
+ <value>None</value>
+ </param>
+ <param>
+ <key>grid_pos</key>
+ <value>0, 1, 1, 1</value>
+ </param>
+ <param>
+ <key>notebook</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(328, 15)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable_static_text</key>
+ <param>
+ <key>id</key>
+ <value>frac_bw</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>label</key>
+ <value>Fractional Bandwidth</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>0.45</value>
+ </param>
+ <param>
+ <key>converver</key>
+ <value>float_converter</value>
+ </param>
+ <param>
+ <key>formatter</key>
+ <value>lambda x: "%0.2f"%x</value>
+ </param>
+ <param>
+ <key>grid_pos</key>
+ <value>0,2,1,1</value>
+ </param>
+ <param>
+ <key>notebook</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(473, 14)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <connection>
+ <source_block_id>tri_source</source_block_id>
+ <sink_block_id>adder</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>adder</source_block_id>
+ <sink_block_id>throttle</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>resampler</source_block_id>
+ <sink_block_id>resamp_fft</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>fm_mod</source_block_id>
+ <sink_block_id>resampler</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>fm_mod</source_block_id>
+ <sink_block_id>orig_fft</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>throttle</source_block_id>
+ <sink_block_id>fm_mod</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+</flow_graph>
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/python/Makefile.am b/gnuradio-core/src/examples/tags/CMakeLists.txt
index a90aaba5c..0ba1a4dd9 100644
--- a/gnuradio-core/src/python/Makefile.am
+++ b/gnuradio-core/src/examples/tags/CMakeLists.txt
@@ -1,5 +1,4 @@
-#
-# Copyright 2004 Free Software Foundation, Inc.
+# Copyright 2011 Free Software Foundation, Inc.
#
# This file is part of GNU Radio
#
@@ -17,14 +16,13 @@
# along with GNU Radio; see the file COPYING. If not, write to
# the Free Software Foundation, Inc., 51 Franklin Street,
# Boston, MA 02110-1301, USA.
-#
-include $(top_srcdir)/Makefile.common
+include(GrPython)
-if PYTHON
-SUBDIRS = gnuradio bin
+GR_PYTHON_INSTALL(PROGRAMS
+ test_file_tags.py
+ uhd_burst_detector.py
+ DESTINATION ${GR_PKG_DATA_DIR}/examples/tags
+ COMPONENT "core_python"
+)
-noinst_PYTHON = \
- build_utils.py \
- build_utils_codes.py
-endif
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_<KERNEL_NAME> <ARCHITECTURE>
+
+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_<test>.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-core/src/gen_interpolator_taps/.gitignore b/gnuradio-core/src/gen_interpolator_taps/.gitignore
deleted file mode 100644
index 363c633e1..000000000
--- a/gnuradio-core/src/gen_interpolator_taps/.gitignore
+++ /dev/null
@@ -1,7 +0,0 @@
-/Makefile
-/Makefile.in
-/.deps
-/.libs
-/*.la
-/*.lo
-/gen_interpolator_taps
diff --git a/gnuradio-core/src/gen_interpolator_taps/Makefile.am b/gnuradio-core/src/gen_interpolator_taps/Makefile.am.obsolete
index 1b54af5e7..1b54af5e7 100644
--- a/gnuradio-core/src/gen_interpolator_taps/Makefile.am
+++ b/gnuradio-core/src/gen_interpolator_taps/Makefile.am.obsolete
diff --git a/gnuradio-core/src/guile/.gitignore b/gnuradio-core/src/guile/.gitignore
deleted file mode 100644
index ea2593923..000000000
--- a/gnuradio-core/src/guile/.gitignore
+++ /dev/null
@@ -1,5 +0,0 @@
-/Makefile
-/Makefile.in
-/run_guile_tests
-/guile.log
-/gr-run-waveform-script
diff --git a/gnuradio-core/src/guile/Makefile.am b/gnuradio-core/src/guile/Makefile.am
deleted file mode 100644
index 122f05d97..000000000
--- a/gnuradio-core/src/guile/Makefile.am
+++ /dev/null
@@ -1,80 +0,0 @@
-#
-# Copyright 2010 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-#
-
-include $(top_srcdir)/Makefile.common
-
-if GUILE
-
-TESTS = run_guile_tests
-
-EXTRA_DIST += \
- run_guile_tests.in \
- $(nobase_guile_DATA) \
- $(GUILE_TESTS)
-
-bin_SCRIPTS = \
- gr-run-waveform-script
-
-# These are the hand-coded guile files for gnuradio-core.
-#
-# Swig/common.scm is glue that's required for the goops wrappers.
-# gnuradio/export-safely.scm works around some problems in the goops generated wrappers.
-# gnuradio/core.scm glues the 5 pieces of gnuradio_core_* into a single module.
-# gnuradio/runtime-shim implements "guile friendly" versions of connect & disconnect.
-
-nobase_guile_DATA = \
- Swig/common.scm \
- gnuradio/core.scm \
- gnuradio/export-safely.scm \
- gnuradio/run-waveform.scm \
- gnuradio/runtime-shim.scm \
- gnuradio/waveform.scm \
- gnuradio/test-suite/guile-test \
- gnuradio/test-suite/lib.scm
-
-GUILE_TESTS = \
- tests/00_runtime_basics.test \
- tests/00_runtime_ctors.test \
- tests/filter_ctors.test \
- tests/general_ctors.test \
- tests/gengen_ctors.test \
- tests/hier_ctors.test \
- tests/io_ctors.test
-
-CLEANFILES = guile.log
-
-
-scmlibdir = $(libdir)
-scmdir = $(guiledir)
-
-scmlib_LTLIBRARIES = libguile-gnuradio-dynl-global.la
-
-libguile_gnuradio_dynl_global_la_SOURCES = dynl-global.c
-libguile_gnuradio_dynl_global_la_CPPFLAGS = $(GUILE_CFLAGS)
-libguile_gnuradio_dynl_global_la_LIBADD = $(GUILE_LIBS)
-
-# Create a symlink from gr-run-waveform-script to gr-run-waveform
-install-exec-local:
- -$(RM) $(DESTDIR)$(bindir)/gr-run-waveform
- (cd $(DESTDIR)$(bindir) && $(LN_S) gr-run-waveform-script gr-run-waveform)
-
-uninstall-local:
- -$(RM) $(DESTDIR)$(bindir)/gr-run-waveform
-
-endif
diff --git a/gnuradio-core/src/guile/Swig/common.scm b/gnuradio-core/src/guile/Swig/common.scm
deleted file mode 100644
index a51d3a71d..000000000
--- a/gnuradio-core/src/guile/Swig/common.scm
+++ /dev/null
@@ -1,76 +0,0 @@
-;;;************************************************************************
-;;;*common.scm
-;;;*
-;;;* This file contains generic SWIG GOOPS classes for generated
-;;;* GOOPS file support
-;;;*
-;;;* Copyright (C) 2003 John Lenz (jelenz@wisc.edu)
-;;;* Copyright (C) 2004 Matthias Koeppe (mkoeppe@mail.math.uni-magdeburg.de)
-;;;*
-;;;* This file may be freely redistributed without license or fee provided
-;;;* this copyright message remains intact.
-;;;************************************************************************
-
-(define-module (Swig swigrun))
-
-(define-module (Swig common)
- #:use-module (oop goops)
- #:use-module (Swig swigrun))
-
-(define-class <swig-metaclass> (<class>)
- (new-function #:init-value #f))
-
-(define-method (initialize (class <swig-metaclass>) initargs)
- (slot-set! class 'new-function (get-keyword #:new-function initargs #f))
- (next-method))
-
-(define-class <swig> ()
- (swig-smob #:init-value #f)
- #:metaclass <swig-metaclass>
-)
-
-(define-method (initialize (obj <swig>) initargs)
- (next-method)
- (slot-set! obj 'swig-smob
- (let ((arg (get-keyword #:init-smob initargs #f)))
- (if arg
- arg
- (let ((ret (apply (slot-ref (class-of obj) 'new-function) (get-keyword #:args initargs '()))))
- ;; if the class is registered with runtime environment,
- ;; new-Function will return a <swig> goops class. In that case, extract the smob
- ;; from that goops class and set it as the current smob.
- (if (slot-exists? ret 'swig-smob)
- (slot-ref ret 'swig-smob)
- ret))))))
-
-(define (display-address o file)
- (display (number->string (object-address o) 16) file))
-
-(define (display-pointer-address o file)
- ;; Don't fail if the function SWIG-PointerAddress is not present.
- (let ((address (false-if-exception (SWIG-PointerAddress o))))
- (if address
- (begin
- (display " @ " file)
- (display (number->string address 16) file)))))
-
-(define-method (write (o <swig>) file)
- ;; We display _two_ addresses to show the object's identity:
- ;; * first the address of the GOOPS proxy object,
- ;; * second the pointer address.
- ;; The reason is that proxy objects are created and discarded on the
- ;; fly, so different proxy objects for the same C object will appear.
- (let ((class (class-of o)))
- (if (slot-bound? class 'name)
- (begin
- (display "#<" file)
- (display (class-name class) file)
- (display #\space file)
- (display-address o file)
- (display-pointer-address o file)
- (display ">" file))
- (next-method))))
-
-(export <swig-metaclass> <swig>)
-
-;;; common.scm ends here
diff --git a/gnuradio-core/src/guile/dynl-global.c b/gnuradio-core/src/guile/dynl-global.c
deleted file mode 100644
index 3bf2741b1..000000000
--- a/gnuradio-core/src/guile/dynl-global.c
+++ /dev/null
@@ -1,123 +0,0 @@
-/* -*- c -*- */
-/*
- * 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 this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/*
- * This file is an attempt to work around a problem that appears on
- * certain Ubuntu (and perhaps other) systems. On those systems
- * (10.04 is known to have the problem, while 10.10 and later work OK
- * without this kludge), we end up with a situation where exceptions
- * are not caught by the swig code, even though the swig generated
- * code "looks right" and "is right". Details of the issue can be
- * found in swig bug 1863647,
- * http://sourceforge.net/tracker/index.php?func=detail&aid=1863647&group_id=1645&atid=101645
- *
- * We work around the problem by loading swig generated guile modules
- * using the equivalent of the dlopen's RTLD_GLOBAL flag. This is
- * only possible on systems using libtool-2.*. Those systems contain
- * the lt_dlavise_global function.
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <ltdl.h>
-#include <libguile.h>
-
-extern scm_t_bits scm_tc16_dynamic_obj;
-
-#ifdef HAVE_LT_DLADVISE_GLOBAL
-/*
- * Load shared module using the equivalent of the RTLD_GLOBAL flag
- */
-static lt_dlhandle
-dlopenext_global (const char *filename)
-{
- lt_dlhandle handle = 0;
- lt_dladvise advise;
-
- if (!lt_dladvise_init (&advise)
- && !lt_dladvise_ext (&advise)
- && !lt_dladvise_global(&advise))
- handle = lt_dlopenadvise (filename, advise);
-
- lt_dladvise_destroy (&advise);
- return handle;
-}
-
-#else
-
-/*
- * We don't have lt_dladvise_global. Fall back to lt_dlopenext.
- */
-static lt_dlhandle
-dlopenext_global (const char *filename)
-{
- return lt_dlopenext (filename);
-}
-#endif
-
-
-static void *
-sysdep_dynl_link_global (const char *fname, const char *subr)
-{
- lt_dlhandle handle;
- handle = dlopenext_global (fname);
- if (NULL == handle)
- {
- SCM fn;
- SCM msg;
-
- fn = scm_from_locale_string (fname);
- msg = scm_from_locale_string (lt_dlerror ());
- scm_misc_error (subr, "file: ~S, message: ~S", scm_list_2 (fn, msg));
- }
- return (void *) handle;
-}
-
-SCM_DEFINE (scm_dynamic_link_global, "dynamic-link-global", 1, 0, 0,
- (SCM filename),
- "Find the shared object (shared library) denoted by\n"
- "@var{filename} and link it into the running Guile\n"
- "application. The returned\n"
- "scheme object is a ``handle'' for the library which can\n"
- "be passed to @code{dynamic-func}, @code{dynamic-call} etc.\n\n"
- "Searching for object files is system dependent. Normally,\n"
- "if @var{filename} does have an explicit directory it will\n"
- "be searched for in locations\n"
- "such as @file{/usr/lib} and @file{/usr/local/lib}.")
-#define FUNC_NAME s_scm_dynamic_link_global
-{
- void *handle;
- char *file;
-
- scm_dynwind_begin (0);
- file = scm_to_locale_string (filename);
- scm_dynwind_free (file);
- handle = sysdep_dynl_link_global (file, FUNC_NAME);
- scm_dynwind_end ();
- SCM_RETURN_NEWSMOB2 (scm_tc16_dynamic_obj, SCM_UNPACK (filename), handle);
-}
-#undef FUNC_NAME
-
-void
-scm_init_gnuradio_dynl_global_module(void)
-{
- scm_c_define_gsubr (s_scm_dynamic_link_global, 1, 0, 0, (SCM (*)()) scm_dynamic_link_global);
-}
diff --git a/gnuradio-core/src/guile/gnuradio/core.scm b/gnuradio-core/src/guile/gnuradio/core.scm
deleted file mode 100644
index 9c69cea42..000000000
--- a/gnuradio-core/src/guile/gnuradio/core.scm
+++ /dev/null
@@ -1,32 +0,0 @@
-;;; Glue the separate pieces of gnuradio-core into a single module
-
-(define-module (gnuradio core)
- #:use-module (oop goops)
- #:use-module (gnuradio gnuradio_core_runtime)
- #:use-module (gnuradio runtime-shim)
- #:use-module (gnuradio gnuradio_core_filter)
- #:use-module (gnuradio gnuradio_core_io)
- #:use-module (gnuradio gnuradio_core_general)
- #:use-module (gnuradio gnuradio_core_gengen)
- #:use-module (gnuradio gnuradio_core_hier)
- #:duplicates (merge-generics replace check))
-
-(re-export-all '(gnuradio gnuradio_core_runtime))
-(re-export-all '(gnuradio runtime-shim))
-(re-export-all '(gnuradio gnuradio_core_filter))
-(re-export-all '(gnuradio gnuradio_core_io))
-(re-export-all '(gnuradio gnuradio_core_general))
-(re-export-all '(gnuradio gnuradio_core_gengen))
-(re-export-all '(gnuradio gnuradio_core_hier))
-
-;; Work around problem with gr:message-source
-(define-generic gr:message-source)
-(define-method (gr:message-source itemsize (msgq <gr-msg-queue-sptr>))
- (gr:message-source-msgq-ctor itemsize msgq))
-(define-method (gr:message-source itemsize (limit <integer>))
- (gr:message-source-limit-ctor itemsize limit))
-(export gr:message-source)
-
-;;; Return #t if x is not #f
-(define-public (true? x)
- (and x #t))
diff --git a/gnuradio-core/src/guile/gnuradio/export-safely.scm b/gnuradio-core/src/guile/gnuradio/export-safely.scm
deleted file mode 100644
index 664292d2b..000000000
--- a/gnuradio-core/src/guile/gnuradio/export-safely.scm
+++ /dev/null
@@ -1,90 +0,0 @@
-;;;
-;;; Copyright 2010 Free Software Foundation, Inc.
-;;;
-;;; This file is part of GNU Radio
-;;;
-;;; GNU Radio is free software; you can redistribute it and/or modify
-;;; it under the terms of the GNU General Public License as published by
-;;; the Free Software Foundation; either version 3, or (at your option)
-;;; any later version.
-;;;
-;;; GNU Radio is distributed in the hope that it will be useful,
-;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;;; GNU General Public License for more details.
-;;;
-;;; You should have received a copy of the GNU General Public License
-;;; along with this program. If not, see <http://www.gnu.org/licenses/>.
-;;;
-
-;;; This module implements a macro, export-safely, that avoids
-;;; exporting symbols that are actually generic-functions imported
-;;; (explicity or implicitly) from elsewhere.
-;;;
-;;; This hackery is required so that the swig generated goops wrappers
-;;; don't stomp on each other. For background on what this is about
-;;; see this thread:
-;;;
-;;; http://lists.gnu.org/archive/html/guile-user/2006-05/msg00007.html
-;;;
-;;; Don't expect to understand what's going on here without looking at
-;;; the guts of the module system (implemented in ice-9/boot-9.scm) and
-;;; having a pretty good understanding of goops and generic-functions.
-
-
-(define-module (gnuradio export-safely)
- #:use-module (oop goops)
- #:use-module (srfi srfi-1)
- #:export-syntax (export-safely))
-
-(define-public (generics-in-module module)
- (let ((lst '()))
- (module-for-each (lambda (sym var)
- (if (variable-bound? var)
- (let ((v (variable-ref var)))
- (cond ((is-a? v <generic>)
- (set! lst (cons v lst)))))))
- module)
- lst))
-
-(define-public (generic-function-names-in-module module)
- (map generic-function-name (generics-in-module module)))
-
-(define-public (generic-function-names-in-imported-modules module)
- (concatenate (map generic-function-names-in-module (module-uses module))))
-
-(define-public (export-syms-if-not-imported-gf list-of-syms)
- (let ((gf-names (generic-function-names-in-imported-modules (current-module))))
- (let ((to-export (filter (lambda (sym)
- (not (memq sym gf-names)))
- (delete-duplicates list-of-syms))))
- (module-export! (current-module) to-export))))
-
-(defmacro export-safely names
- `(export-syms-if-not-imported-gf ',names))
-
-
-(define-public (names-in-module module)
- (let ((lst '()))
- (module-for-each (lambda (sym var)
- (if (variable-bound? var)
- (set! lst (cons sym lst))))
- module)
- lst))
-
-(define-public (names-in-imported-modules module)
- (delete-duplicates (concatenate (map names-in-module (module-uses module)))))
-
-(define-public (re-export-all src-module-name)
- (let ((current (current-module))
- (src-module (resolve-interface src-module-name)))
-
- (define (ok-to-re-export? name)
- (let ((var (module-variable current name)))
- (cond ((not var) #f) ; Undefined var
- ((eq? var (module-local-variable current name)) #f) ; local var
- (else #t)))) ; OK
-
- (module-re-export! current
- (filter ok-to-re-export?
- (names-in-module src-module)))))
diff --git a/gnuradio-core/src/guile/gnuradio/run-waveform.scm b/gnuradio-core/src/guile/gnuradio/run-waveform.scm
deleted file mode 100644
index 01930521c..000000000
--- a/gnuradio-core/src/guile/gnuradio/run-waveform.scm
+++ /dev/null
@@ -1,55 +0,0 @@
-;;;
-;;; Copyright 2010 Free Software Foundation, Inc.
-;;;
-;;; This file is part of GNU Radio
-;;;
-;;; GNU Radio is free software; you can redistribute it and/or modify
-;;; it under the terms of the GNU General Public License as published by
-;;; the Free Software Foundation; either version 3, or (at your option)
-;;; any later version.
-;;;
-;;; GNU Radio is distributed in the hope that it will be useful,
-;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;;; GNU General Public License for more details.
-;;;
-;;; You should have received a copy of the GNU General Public License
-;;; along with this program. If not, see <http://www.gnu.org/licenses/>.
-;;;
-
-;;; Load and run a waveform defined with define-waveform
-
-
-;; I don't seem to be able to make this work...
-;; I think it's some kind of interaction with the syntax-case
-;; macro, define-waveform, and the module system.
-;;
-;;(define-module (gnuradio run-waveform)
-;; #:use-module (oop goops)
-;; #:use-module (gnuradio core)
-;; #:use-module (gnuradio waveform)
-;; #:duplicates (merge-generics replace check))
-
-(use-modules (oop goops)
- (gnuradio core)
- (gnuradio waveform))
-
-
-(define (load-into-module filename module)
- (let ((f (open-file filename "r")))
- (let loop ((form (read f)))
- (cond ((eof-object? form) #t)
- (else (eval form module)
- (loop (read f)))))))
-
-
-(define-public (run-waveform waveform-filename . args)
- (debug-enable 'backtrace 'debug)
- (load waveform-filename)
- ;;(load-into-module waveform-filename (current-module))
- (let ((f (waveform-last-registered)))
- (if (not f)
- (error "No define-waveform found in file \n" filename))
- (gr:run (f args))
- ;; Attempt to get block destructors called now.
- (gc)))
diff --git a/gnuradio-core/src/guile/gnuradio/runtime-shim.scm b/gnuradio-core/src/guile/gnuradio/runtime-shim.scm
deleted file mode 100644
index bba702670..000000000
--- a/gnuradio-core/src/guile/gnuradio/runtime-shim.scm
+++ /dev/null
@@ -1,129 +0,0 @@
-;;;
-;;; Copyright 2010 Free Software Foundation, Inc.
-;;;
-;;; This file is part of GNU Radio
-;;;
-;;; GNU Radio is free software; you can redistribute it and/or modify
-;;; it under the terms of the GNU General Public License as published by
-;;; the Free Software Foundation; either version 3, or (at your option)
-;;; any later version.
-;;;
-;;; GNU Radio is distributed in the hope that it will be useful,
-;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;;; GNU General Public License for more details.
-;;;
-;;; You should have received a copy of the GNU General Public License
-;;; along with this program. If not, see <http://www.gnu.org/licenses/>.
-;;;
-
-(define-module (gnuradio runtime-shim)
- #:use-module (oop goops)
- #:use-module (ice-9 threads)
- #:use-module (gnuradio gnuradio_core_runtime)
- #:duplicates (merge-generics replace check))
-
-(define-class <gr-endpoint> (<object>)
- (block #:accessor block #:init-keyword #:block)
- (port #:init-value 0 #:accessor port #:init-keyword #:port))
-
-(define (gr:ep block port)
- (make <gr-endpoint>
- #:block (coerce-to-basic-block block) #:port port))
-
-(define (coerce-to-endpoint ep)
- (cond ((is-a? ep <gr-endpoint>) ep)
- ((false-if-exception (gr:to-basic-block ep))
- => (lambda (x) (gr:ep x 0)))
- ((and (pair? ep) (= 2 (length ep))
- (false-if-exception (gr:to-basic-block (car ep))))
- => (lambda (x) (gr:ep x (cadr ep))))
- (else (error "Cannot coerce to an endpoint: " ep))))
-
-(define (coerce-to-basic-block block)
- (cond ((is-a? block <gr-basic-block-sptr>) block)
- ((false-if-exception (gr:to-basic-block block)) => (lambda (x) x))
- (else (error "Cannot coerce to a gr_basic_block: " block))))
-
-(define (coerce-to-top-block block)
- (cond ((is-a? block <gr-top-block-sptr>) block)
- ((false-if-exception (gr:to-top-block block)) => (lambda (x) x))
- (else (error "Cannot coerce to a gr_top_block: " block))))
-
-(define (coerce-to-hier-block2 block)
- (cond ((is-a? block <gr-hier-block2-sptr>) block)
- ((false-if-exception (gr:to-hier-block2 block)) => (lambda (x) x))
- (else (error "Cannot coerce to a gr_hier_block2: " block))))
-
-
-;;; Connect one or more block endpoints. An endpoint is either a <gr-endpoint>,
-;;; a 2-list (block port), or a block instance. In the latter case, the port number
-;;; is assumed to be zero.
-;;;
-;;; If multiple arguments are provided, connect will attempt to wire them in series,
-;;; interpreting the endpoints as inputs or outputs as appropriate.
-(define-method (gr:connect hb . points)
- (dis/connect "connect" gr:primitive-connect hb points))
-
-;;; Disconnect one or more block endpoints...
-(define-method (gr:disconnect hb . points)
- (dis/connect "disconnect" gr:primitive-disconnect hb points))
-
-(define (dis/connect name gf hb points)
- (let ((hb (coerce-to-hier-block2 hb))
- (points (list->vector (map coerce-to-endpoint points))))
-
- (define (op2 p0 p1)
- (gf hb (block p0) (port p0) (block p1) (port p1)))
-
- (let ((len (vector-length points)))
- (case len
- ((0) (error (string-append name " requires at least 1 endpoint; None provided.")))
- ((1) (gf hb (vector-ref points 0)))
- (else
- (let loop ((n 1))
- (cond ((< n len)
- (op2 (vector-ref points (1- n)) (vector-ref points n))
- (loop (1+ n))))))))))
-
-
-
-
-(define-method (gr:run (self <gr-top-block-sptr>))
- (gr:start self)
- (gr:wait self))
-
-
-(define-method (gr:wait (tb <gr-top-block-sptr>))
-
- (define (sigint-handler sig)
- ;;(display "\nSIGINT!\n" (current-error-port))
- ;; tell flow graph to stop
- (gr:stop tb))
-
- (let ((old-handler #f))
- (dynamic-wind
-
- ;; Called at entry
- (lambda ()
- ;; Install SIGINT handler
- (set! old-handler (sigaction SIGINT sigint-handler)))
-
- ;; Protected thunk
- (lambda ()
- (let ((waiter (begin-thread (gr:top-block-wait-unlocked tb))))
- (join-thread waiter)
- ;;(display "\nAfter join-thread\n" (current-error-port))
- ))
-
- ;; Called at exit
- (lambda ()
- ;; Restore SIGINT handler
- (if (not (car old-handler))
- ;; restore original C handler
- (sigaction SIGINT #f)
- ;; restore Scheme handler, SIG_IGN or SIG_DFL
- (sigaction SIGINT (car old-handler) (cdr old-handler)))))))
-
-
-(export-safely <gr-endpoint> gr:ep gr:connect gr:disconnect gr:run gr:wait)
diff --git a/gnuradio-core/src/guile/gnuradio/test-suite/guile-test b/gnuradio-core/src/guile/gnuradio/test-suite/guile-test
deleted file mode 100644
index 6dc1a9658..000000000
--- a/gnuradio-core/src/guile/gnuradio/test-suite/guile-test
+++ /dev/null
@@ -1,241 +0,0 @@
-#!/usr/bin/guile \
--e main -s
-!#
-
-;;;; guile-test --- run the Guile test suite
-;;;; Jim Blandy <jimb@red-bean.com> --- May 1999
-;;;;
-;;;; Copyright (C) 1999, 2001, 2006 Free Software Foundation, Inc.
-;;;;
-;;;; This program 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 2, or (at your option)
-;;;; any later version.
-;;;;
-;;;; This program 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 software; see the file COPYING. If not, write to
-;;;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-;;;; Boston, MA 02110-1301 USA
-
-
-;;;; Usage: [guile -e main -s] guile-test [OPTIONS] [TEST ...]
-;;;;
-;;;; Run tests from the Guile test suite. Report failures and
-;;;; unexpected passes to the standard output, along with a summary of
-;;;; all the results. Record each reported test outcome in the log
-;;;; file, `guile.log'. The exit status is #f if any of the tests
-;;;; fail or pass unexpectedly.
-;;;;
-;;;; Normally, guile-test scans the test directory, and executes all
-;;;; files whose names end in `.test'. (It assumes they contain
-;;;; Scheme code.) However, you can have it execute specific tests by
-;;;; listing their filenames on the command line.
-;;;;
-;;;; The option `--test-suite' can be given to specify the test
-;;;; directory. If no such option is given, the test directory is
-;;;; taken from the environment variable TEST_SUITE_DIR (if defined),
-;;;; otherwise a default directory that is hardcoded in this file is
-;;;; used (see "Installation" below).
-;;;;
-;;;; If present, the `--log-file LOG' option tells `guile-test' to put
-;;;; the log output in a file named LOG.
-;;;;
-;;;; If present, the `--debug' option will enable a debugging mode.
-;;;;
-;;;; If present, the `--flag-unresolved' option will cause guile-test
-;;;; to exit with failure status if any tests are UNRESOLVED.
-;;;;
-;;;;
-;;;; Installation:
-;;;;
-;;;; If you change the #! line at the top of this script to point at
-;;;; the Guile interpreter you want to test, you can call this script
-;;;; as an executable instead of having to pass it as a parameter to
-;;;; guile via "guile -e main -s guile-test". Further, you can edit
-;;;; the definition of default-test-suite to point to the parent
-;;;; directory of the `tests' tree, which makes it unnecessary to set
-;;;; the environment variable `TEST_SUITE_DIR'.
-;;;;
-;;;;
-;;;; Shortcomings:
-;;;;
-;;;; At the moment, due to a simple-minded implementation, test files
-;;;; must live in the test directory, and you must specify their names
-;;;; relative to the top of the test directory. If you want to send
-;;;; me a patch that fixes this, but still leaves sane test names in
-;;;; the log file, that would be great. At the moment, all the tests
-;;;; I care about are in the test directory, though.
-;;;;
-;;;; It would be nice if you could specify the Guile interpreter you
-;;;; want to test on the command line. As it stands, if you want to
-;;;; change which Guile interpreter you're testing, you need to edit
-;;;; the #! line at the top of this file, which is stupid.
-
-(define (main . args)
- (let ((module (resolve-module '(gnuradio test-suite guile-test))))
- (apply (module-ref module 'main) args)))
-
-(define-module (gnuradio test-suite guile-test)
- :use-module (gnuradio test-suite lib)
- :use-module (ice-9 getopt-long)
- :use-module (ice-9 and-let-star)
- :use-module (ice-9 rdelim)
- :export (main data-file-name test-file-name))
-
-
-;;; User configurable settings:
-(define default-test-suite
- (string-append (getenv "HOME") "/bogus-path/test-suite"))
-
-
-;;; Variables that will receive their actual values later.
-(define test-suite default-test-suite)
-
-(define tmp-dir #f)
-
-
-;;; General utilities, that probably should be in a library somewhere.
-
-;;; Enable debugging
-(define (enable-debug-mode)
- (write-line %load-path)
- (set! %load-verbosely #t)
- (debug-enable 'backtrace 'debug))
-
-;;; Traverse the directory tree at ROOT, applying F to the name of
-;;; each file in the tree, including ROOT itself. For a subdirectory
-;;; SUB, if (F SUB) is true, we recurse into SUB. Do not follow
-;;; symlinks.
-(define (for-each-file f root)
-
- ;; A "hard directory" is a path that denotes a directory and is not a
- ;; symlink.
- (define (file-is-hard-directory? filename)
- (eq? (stat:type (lstat filename)) 'directory))
-
- (let visit ((root root))
- (let ((should-recur (f root)))
- (if (and should-recur (file-is-hard-directory? root))
- (let ((dir (opendir root)))
- (let loop ()
- (let ((entry (readdir dir)))
- (cond
- ((eof-object? entry) #f)
- ((or (string=? entry ".")
- (string=? entry "..")
- (string=? entry "CVS")
- (string=? entry "RCS"))
- (loop))
- (else
- (visit (string-append root "/" entry))
- (loop))))))))))
-
-
-;;; The test driver.
-
-
-;;; Localizing test files and temporary data files.
-
-(define (data-file-name filename)
- (in-vicinity tmp-dir filename))
-
-(define (test-file-name test)
- (in-vicinity test-suite test))
-
-;;; Return a list of all the test files in the test tree.
-(define (enumerate-tests test-dir)
- (let ((root-len (+ 1 (string-length test-dir)))
- (tests '()))
- (for-each-file (lambda (file)
- (if (has-suffix? file ".test")
- (let ((short-name
- (substring file root-len)))
- (set! tests (cons short-name tests))))
- #t)
- test-dir)
-
- ;; for-each-file presents the files in whatever order it finds
- ;; them in the directory. We sort them here, so they'll always
- ;; appear in the same order. This makes it easier to compare test
- ;; log files mechanically.
- (sort tests string<?)))
-
-(define (main args)
- (let ((options (getopt-long args
- `((test-suite
- (single-char #\t)
- (value #t))
- (flag-unresolved
- (single-char #\u))
- (log-file
- (single-char #\l)
- (value #t))
- (debug
- (single-char #\d))))))
- (define (opt tag default)
- (let ((pair (assq tag options)))
- (if pair (cdr pair) default)))
-
- (if (opt 'debug #f)
- (enable-debug-mode))
-
- (set! test-suite
- (or (opt 'test-suite #f)
- (getenv "TEST_SUITE_DIR")
- default-test-suite))
-
- ;; directory where temporary files are created.
- ;; when run from "make check", this must be under the build-dir,
- ;; not the src-dir.
- (set! tmp-dir (getcwd))
-
- (let* ((tests
- (let ((foo (opt '() '())))
- (if (null? foo)
- (enumerate-tests test-suite)
- foo)))
- (log-file
- (opt 'log-file "guile.log")))
-
- ;; Open the log file.
- (let ((log-port (open-output-file log-file)))
-
- ;; Register some reporters.
- (let ((global-pass #t)
- (counter (make-count-reporter)))
- (register-reporter (car counter))
- (register-reporter (make-log-reporter log-port))
- (register-reporter user-reporter)
- (register-reporter (lambda results
- (case (car results)
- ((unresolved)
- (and (opt 'flag-unresolved #f)
- (set! global-pass #f)))
- ((fail upass error)
- (set! global-pass #f)))))
-
- ;; Run the tests.
- (for-each (lambda (test)
- (display (string-append "Running " test "\n"))
- (with-test-prefix test
- (load (test-file-name test))))
- tests)
-
- ;; Display the final counts, both to the user and in the log
- ;; file.
- (let ((counts ((cadr counter))))
- (print-counts counts)
- (print-counts counts log-port))
-
- (close-port log-port)
- (quit global-pass))))))
-
-
-;;; Local Variables:
-;;; mode: scheme
-;;; End:
diff --git a/gnuradio-core/src/guile/gnuradio/test-suite/lib.scm b/gnuradio-core/src/guile/gnuradio/test-suite/lib.scm
deleted file mode 100644
index abdc89632..000000000
--- a/gnuradio-core/src/guile/gnuradio/test-suite/lib.scm
+++ /dev/null
@@ -1,627 +0,0 @@
-;;;; test-suite/lib.scm --- generic support for testing
-;;;; Copyright (C) 1999, 2000, 2001, 2004, 2006, 2007 Free Software Foundation, Inc.
-;;;;
-;;;; This program 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 2, or (at your option)
-;;;; any later version.
-;;;;
-;;;; This program 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 software; see the file COPYING. If not, write to
-;;;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-;;;; Boston, MA 02110-1301 USA
-
-(define-module (gnuradio test-suite lib)
- :use-module (ice-9 stack-catch)
- :use-module (ice-9 regex)
- :use-module (ice-9 syncase)
- :use-module (ice-9 format)
- :export (
-
- ;; Exceptions which are commonly being tested for.
- exception:bad-variable
- exception:missing-expression
- exception:out-of-range exception:unbound-var
- exception:used-before-defined
- exception:wrong-num-args exception:wrong-type-arg
- exception:numerical-overflow
- exception:struct-set!-denied
- exception:system-error
- exception:miscellaneous-error
- exception:string-contains-nul
-
- ;; Reporting passes and failures.
- run-test
- pass-if expect-fail
- pass-if-exception expect-fail-exception
- pass-if-throw expect-fail-throw
-
- ;; Naming groups of tests in a regular fashion.
- with-test-prefix with-test-prefix* current-test-prefix
- format-test-name
-
- ;; Using the debugging evaluator.
- with-debugging-evaluator with-debugging-evaluator*
-
- ;; Reporting results in various ways.
- register-reporter unregister-reporter reporter-registered?
- make-count-reporter print-counts
- make-log-reporter
- full-reporter
- user-reporter
-
- ;; srfi-64 compatibility macros
- test-equal
- test-eqv
- test-eq
-))
-
-
-;;;; If you're using Emacs's Scheme mode:
-;;;; (put 'with-test-prefix 'scheme-indent-function 1)
-
-
-;;;; CORE FUNCTIONS
-;;;;
-;;;; The function (run-test name expected-result thunk) is the heart of the
-;;;; testing environment. The first parameter NAME is a unique name for the
-;;;; test to be executed (for an explanation of this parameter see below under
-;;;; TEST NAMES). The second parameter EXPECTED-RESULT is a boolean value
-;;;; that indicates whether the corresponding test is expected to pass. If
-;;;; EXPECTED-RESULT is #t the test is expected to pass, if EXPECTED-RESULT is
-;;;; #f the test is expected to fail. Finally, THUNK is the function that
-;;;; actually performs the test. For example:
-;;;;
-;;;; (run-test "integer addition" #t (lambda () (= 2 (+ 1 1))))
-;;;;
-;;;; To report success, THUNK should either return #t or throw 'pass. To
-;;;; report failure, THUNK should either return #f or throw 'fail. If THUNK
-;;;; returns a non boolean value or throws 'unresolved, this indicates that
-;;;; the test did not perform as expected. For example the property that was
-;;;; to be tested could not be tested because something else went wrong.
-;;;; THUNK may also throw 'untested to indicate that the test was deliberately
-;;;; not performed, for example because the test case is not complete yet.
-;;;; Finally, if THUNK throws 'unsupported, this indicates that this test
-;;;; requires some feature that is not available in the configured testing
-;;;; environment. All other exceptions thrown by THUNK are considered as
-;;;; errors.
-;;;;
-;;;;
-;;;; Convenience macros for tests expected to pass or fail
-;;;;
-;;;; * (pass-if name body) is a short form for
-;;;; (run-test name #t (lambda () body))
-;;;; * (expect-fail name body) is a short form for
-;;;; (run-test name #f (lambda () body))
-;;;;
-;;;; For example:
-;;;;
-;;;; (pass-if "integer addition" (= 2 (+ 1 1)))
-;;;;
-;;;;
-;;;; Convenience macros to test for exceptions
-;;;;
-;;;; The following macros take exception parameters which are pairs
-;;;; (type . message), where type is a symbol that denotes an exception type
-;;;; like 'wrong-type-arg or 'out-of-range, and message is a string holding a
-;;;; regular expression that describes the error message for the exception
-;;;; like "Argument .* out of range".
-;;;;
-;;;; * (pass-if-exception name exception body) will pass if the execution of
-;;;; body causes the given exception to be thrown. If no exception is
-;;;; thrown, the test fails. If some other exception is thrown, is is an
-;;;; error.
-;;;; * (expect-fail-exception name exception body) will pass unexpectedly if
-;;;; the execution of body causes the given exception to be thrown. If no
-;;;; exception is thrown, the test fails expectedly. If some other
-;;;; exception is thrown, it is an error.
-
-
-;;;; TEST NAMES
-;;;;
-;;;; Every test in the test suite has a unique name, to help
-;;;; developers find tests that are failing (or unexpectedly passing),
-;;;; and to help gather statistics.
-;;;;
-;;;; A test name is a list of printable objects. For example:
-;;;; ("ports.scm" "file" "read and write back list of strings")
-;;;; ("ports.scm" "pipe" "read")
-;;;;
-;;;; Test names may contain arbitrary objects, but they always have
-;;;; the following properties:
-;;;; - Test names can be compared with EQUAL?.
-;;;; - Test names can be reliably stored and retrieved with the standard WRITE
-;;;; and READ procedures; doing so preserves their identity.
-;;;;
-;;;; For example:
-;;;;
-;;;; (pass-if "simple addition" (= 4 (+ 2 2)))
-;;;;
-;;;; In that case, the test name is the list ("simple addition").
-;;;;
-;;;; In the case of simple tests the expression that is tested would often
-;;;; suffice as a test name by itself. Therefore, the convenience macros
-;;;; pass-if and expect-fail provide a shorthand notation that allows to omit
-;;;; a test name in such cases.
-;;;;
-;;;; * (pass-if expression) is a short form for
-;;;; (run-test 'expression #t (lambda () expression))
-;;;; * (expect-fail expression) is a short form for
-;;;; (run-test 'expression #f (lambda () expression))
-;;;;
-;;;; For example:
-;;;;
-;;;; (pass-if (= 2 (+ 1 1)))
-;;;;
-;;;; The WITH-TEST-PREFIX syntax and WITH-TEST-PREFIX* procedure establish
-;;;; a prefix for the names of all tests whose results are reported
-;;;; within their dynamic scope. For example:
-;;;;
-;;;; (begin
-;;;; (with-test-prefix "basic arithmetic"
-;;;; (pass-if "addition" (= (+ 2 2) 4))
-;;;; (pass-if "subtraction" (= (- 4 2) 2)))
-;;;; (pass-if "multiplication" (= (* 2 2) 4)))
-;;;;
-;;;; In that example, the three test names are:
-;;;; ("basic arithmetic" "addition"),
-;;;; ("basic arithmetic" "subtraction"), and
-;;;; ("multiplication").
-;;;;
-;;;; WITH-TEST-PREFIX can be nested. Each WITH-TEST-PREFIX postpends
-;;;; a new element to the current prefix:
-;;;;
-;;;; (with-test-prefix "arithmetic"
-;;;; (with-test-prefix "addition"
-;;;; (pass-if "integer" (= (+ 2 2) 4))
-;;;; (pass-if "complex" (= (+ 2+3i 4+5i) 6+8i)))
-;;;; (with-test-prefix "subtraction"
-;;;; (pass-if "integer" (= (- 2 2) 0))
-;;;; (pass-if "complex" (= (- 2+3i 1+2i) 1+1i))))
-;;;;
-;;;; The four test names here are:
-;;;; ("arithmetic" "addition" "integer")
-;;;; ("arithmetic" "addition" "complex")
-;;;; ("arithmetic" "subtraction" "integer")
-;;;; ("arithmetic" "subtraction" "complex")
-;;;;
-;;;; To print a name for a human reader, we DISPLAY its elements,
-;;;; separated by ": ". So, the last set of test names would be
-;;;; reported as:
-;;;;
-;;;; arithmetic: addition: integer
-;;;; arithmetic: addition: complex
-;;;; arithmetic: subtraction: integer
-;;;; arithmetic: subtraction: complex
-;;;;
-;;;; The Guile benchmarks use with-test-prefix to include the name of
-;;;; the source file containing the test in the test name, to help
-;;;; developers to find failing tests, and to provide each file with its
-;;;; own namespace.
-
-
-;;;; REPORTERS
-;;;;
-;;;; A reporter is a function which we apply to each test outcome.
-;;;; Reporters can log results, print interesting results to the
-;;;; standard output, collect statistics, etc.
-;;;;
-;;;; A reporter function takes two mandatory arguments, RESULT and TEST, and
-;;;; possibly additional arguments depending on RESULT; its return value
-;;;; is ignored. RESULT has one of the following forms:
-;;;;
-;;;; pass - The test named TEST passed.
-;;;; Additional arguments are ignored.
-;;;; upass - The test named TEST passed unexpectedly.
-;;;; Additional arguments are ignored.
-;;;; fail - The test named TEST failed.
-;;;; Additional arguments are ignored.
-;;;; xfail - The test named TEST failed, as expected.
-;;;; Additional arguments are ignored.
-;;;; unresolved - The test named TEST did not perform as expected, for
-;;;; example the property that was to be tested could not be
-;;;; tested because something else went wrong.
-;;;; Additional arguments are ignored.
-;;;; untested - The test named TEST was not actually performed, for
-;;;; example because the test case is not complete yet.
-;;;; Additional arguments are ignored.
-;;;; unsupported - The test named TEST requires some feature that is not
-;;;; available in the configured testing environment.
-;;;; Additional arguments are ignored.
-;;;; error - An error occurred while the test named TEST was
-;;;; performed. Since this result means that the system caught
-;;;; an exception it could not handle, the exception arguments
-;;;; are passed as additional arguments.
-;;;;
-;;;; This library provides some standard reporters for logging results
-;;;; to a file, reporting interesting results to the user, and
-;;;; collecting totals.
-;;;;
-;;;; You can use the REGISTER-REPORTER function and friends to add
-;;;; whatever reporting functions you like. If you don't register any
-;;;; reporters, the library uses FULL-REPORTER, which simply writes
-;;;; all results to the standard output.
-
-
-;;;; MISCELLANEOUS
-;;;;
-
-;;; Define some exceptions which are commonly being tested for.
-(define exception:bad-variable
- (cons 'syntax-error "Bad variable"))
-(define exception:missing-expression
- (cons 'misc-error "^missing or extra expression"))
-(define exception:out-of-range
- (cons 'out-of-range "^.*out of range"))
-(define exception:unbound-var
- (cons 'unbound-variable "^Unbound variable"))
-(define exception:used-before-defined
- (cons 'unbound-variable "^Variable used before given a value"))
-(define exception:wrong-num-args
- (cons 'wrong-number-of-args "^Wrong number of arguments"))
-(define exception:wrong-type-arg
- (cons 'wrong-type-arg "^Wrong type"))
-(define exception:numerical-overflow
- (cons 'numerical-overflow "^Numerical overflow"))
-(define exception:struct-set!-denied
- (cons 'misc-error "^set! denied for field"))
-(define exception:system-error
- (cons 'system-error ".*"))
-(define exception:miscellaneous-error
- (cons 'misc-error "^.*"))
-
-;; as per throw in scm_to_locale_stringn()
-(define exception:string-contains-nul
- (cons 'misc-error "^string contains #\\\\nul character"))
-
-
-;;; Display all parameters to the default output port, followed by a newline.
-(define (display-line . objs)
- (for-each display objs)
- (newline))
-
-;;; Display all parameters to the given output port, followed by a newline.
-(define (display-line-port port . objs)
- (for-each (lambda (obj) (display obj port)) objs)
- (newline port))
-
-
-;;;; CORE FUNCTIONS
-;;;;
-
-;;; The central testing routine.
-;;; The idea is taken from Greg, the GNUstep regression test environment.
-(define run-test #f)
-(let ((test-running #f))
- (define (local-run-test name expect-pass thunk)
- (if test-running
- (error "Nested calls to run-test are not permitted.")
- (let ((test-name (full-name name)))
- (set! test-running #t)
- (catch #t
- (lambda ()
- (let ((result (thunk)))
- (if (eq? result #t) (throw 'pass))
- (if (eq? result #f) (throw 'fail))
- (throw 'unresolved)))
- (lambda (key . args)
- (case key
- ((pass)
- (report (if expect-pass 'pass 'upass) test-name))
- ((fail)
- (report (if expect-pass 'fail 'xfail) test-name))
- ((unresolved untested unsupported)
- (report key test-name))
- ((quit)
- (report 'unresolved test-name)
- (quit))
- (else
- (report 'error test-name (cons key args))))))
- (set! test-running #f))))
- (set! run-test local-run-test))
-
-;;; A short form for tests that are expected to pass, taken from Greg.
-(defmacro pass-if (name . rest)
- (if (and (null? rest) (pair? name))
- ;; presume this is a simple test, i.e. (pass-if (even? 2))
- ;; where the body should also be the name.
- `(run-test ',name #t (lambda () ,name))
- `(run-test ,name #t (lambda () ,@rest))))
-
-;;; A short form for tests that are expected to fail, taken from Greg.
-(defmacro expect-fail (name . rest)
- (if (and (null? rest) (pair? name))
- ;; presume this is a simple test, i.e. (expect-fail (even? 2))
- ;; where the body should also be the name.
- `(run-test ',name #f (lambda () ,name))
- `(run-test ,name #f (lambda () ,@rest))))
-
-;;; A helper function to implement the macros that test for exceptions.
-;;;
-;;; This doesn't work for all exceptions, just those that were
-;;; raised by scm-error or error. This doesn't include those
-;;; raised by throw in the general case, or SWIG in particular.
-;;;
-;;; See also run-raise-exception, pass-if-throw and expect-fail-throw
-;;; for alternatives that work with all exceptions.
-(define (run-test-exception name exception expect-pass thunk)
- (run-test name expect-pass
- (lambda ()
- (stack-catch (car exception)
- (lambda () (thunk) #f)
- (lambda (key proc message . rest)
- (cond
- ;; handle explicit key
- ((string-match (cdr exception) message)
- #t)
- ;; handle `(error ...)' which uses `misc-error' for key and doesn't
- ;; yet format the message and args (we have to do it here).
- ((and (eq? 'misc-error (car exception))
- (list? rest)
- (string-match (cdr exception)
- (apply simple-format #f message (car rest))))
- #t)
- ;; handle syntax errors which use `syntax-error' for key and don't
- ;; yet format the message and args (we have to do it here).
- ((and (eq? 'syntax-error (car exception))
- (list? rest)
- (string-match (cdr exception)
- (apply simple-format #f message (car rest))))
- #t)
- ;; unhandled; throw again
- (else
- (apply throw key proc message rest))))))))
-
-;;; A short form for tests that expect a certain exception to be thrown.
-(defmacro pass-if-exception (name exception body . rest)
- `(,run-test-exception ,name ,exception #t (lambda () ,body ,@rest)))
-
-;;; A short form for tests expected to fail to throw a certain exception.
-(defmacro expect-fail-exception (name exception body . rest)
- `(,run-test-exception ,name ,exception #f (lambda () ,body ,@rest)))
-
-
-;;; Helper for macros below
-(define (run-test-throw name exception-key expect-pass thunk)
- (run-test name expect-pass
- (lambda ()
- (stack-catch exception-key
- (lambda () (thunk) #f)
- (lambda (key . rest) #t)))))
-
-;;; A short form for tests that expect a certain exception to be thrown,
-;;; where the exception is specified only by the exception-key symbol.
-(defmacro pass-if-throw (name exception-key body . rest)
- `(,run-test-throw ,name ,exception-key #t (lambda () ,body ,@rest)))
-
-;;; A short form for tests that expect a certain exception to be thrown,
-;;; where the exception is specified only by the exception-key symbol.
-(defmacro expect-fail-throw (name exception-key body . rest)
- `(,run-test-throw ,name ,exception-key #f (lambda () ,body ,@rest)))
-
-;;;; TEST NAMES
-;;;;
-
-;;;; Turn a test name into a nice human-readable string.
-(define (format-test-name name)
- (call-with-output-string
- (lambda (port)
- (let loop ((name name)
- (separator ""))
- (if (pair? name)
- (begin
- (display separator port)
- (display (car name) port)
- (loop (cdr name) ": ")))))))
-
-;;;; For a given test-name, deliver the full name including all prefixes.
-(define (full-name name)
- (append (current-test-prefix) (list name)))
-
-;;; A fluid containing the current test prefix, as a list.
-(define prefix-fluid (make-fluid))
-(fluid-set! prefix-fluid '())
-(define (current-test-prefix)
- (fluid-ref prefix-fluid))
-
-;;; Postpend PREFIX to the current name prefix while evaluting THUNK.
-;;; The name prefix is only changed within the dynamic scope of the
-;;; call to with-test-prefix*. Return the value returned by THUNK.
-(define (with-test-prefix* prefix thunk)
- (with-fluids ((prefix-fluid
- (append (fluid-ref prefix-fluid) (list prefix))))
- (thunk)))
-
-;;; (with-test-prefix PREFIX BODY ...)
-;;; Postpend PREFIX to the current name prefix while evaluating BODY ...
-;;; The name prefix is only changed within the dynamic scope of the
-;;; with-test-prefix expression. Return the value returned by the last
-;;; BODY expression.
-(defmacro with-test-prefix (prefix . body)
- `(with-test-prefix* ,prefix (lambda () ,@body)))
-
-;;; Call THUNK using the debugging evaluator.
-(define (with-debugging-evaluator* thunk)
- (let ((dopts #f))
- (dynamic-wind
- (lambda ()
- (set! dopts (debug-options))
- (debug-enable 'debug))
- thunk
- (lambda ()
- (debug-options dopts)))))
-
-;;; Evaluate BODY... using the debugging evaluator.
-(define-macro (with-debugging-evaluator . body)
- `(with-debugging-evaluator* (lambda () ,@body)))
-
-
-
-;;;; REPORTERS
-;;;;
-
-;;; The global list of reporters.
-(define reporters '())
-
-;;; The default reporter, to be used only if no others exist.
-(define default-reporter #f)
-
-;;; Add the procedure REPORTER to the current set of reporter functions.
-;;; Signal an error if that reporter procedure object is already registered.
-(define (register-reporter reporter)
- (if (memq reporter reporters)
- (error "register-reporter: reporter already registered: " reporter))
- (set! reporters (cons reporter reporters)))
-
-;;; Remove the procedure REPORTER from the current set of reporter
-;;; functions. Signal an error if REPORTER is not currently registered.
-(define (unregister-reporter reporter)
- (if (memq reporter reporters)
- (set! reporters (delq! reporter reporters))
- (error "unregister-reporter: reporter not registered: " reporter)))
-
-;;; Return true iff REPORTER is in the current set of reporter functions.
-(define (reporter-registered? reporter)
- (if (memq reporter reporters) #t #f))
-
-;;; Send RESULT to all currently registered reporter functions.
-(define (report . args)
- (if (pair? reporters)
- (for-each (lambda (reporter) (apply reporter args))
- reporters)
- (apply default-reporter args)))
-
-
-;;;; Some useful standard reporters:
-;;;; Count reporters count the occurrence of each test result type.
-;;;; Log reporters write all test results to a given log file.
-;;;; Full reporters write all test results to the standard output.
-;;;; User reporters write interesting test results to the standard output.
-
-;;; The complete list of possible test results.
-(define result-tags
- '((pass "PASS" "passes: ")
- (fail "FAIL" "failures: ")
- (upass "UPASS" "unexpected passes: ")
- (xfail "XFAIL" "expected failures: ")
- (unresolved "UNRESOLVED" "unresolved test cases: ")
- (untested "UNTESTED" "untested test cases: ")
- (unsupported "UNSUPPORTED" "unsupported test cases: ")
- (error "ERROR" "errors: ")))
-
-;;; The list of important test results.
-(define important-result-tags
- '(fail upass unresolved error))
-
-;;; Display a single test result in formatted form to the given port
-(define (print-result port result name . args)
- (let* ((tag (assq result result-tags))
- (label (if tag (cadr tag) #f)))
- (if label
- (begin
- (display label port)
- (display ": " port)
- (display (format-test-name name) port)
- (if (pair? args)
- (begin
- (display " - arguments: " port)
- (write args port)))
- (newline port))
- (error "(test-suite lib) FULL-REPORTER: unrecognized result: "
- result))))
-
-;;; Return a list of the form (COUNTER RESULTS), where:
-;;; - COUNTER is a reporter procedure, and
-;;; - RESULTS is a procedure taking no arguments which returns the
-;;; results seen so far by COUNTER. The return value is an alist
-;;; mapping outcome symbols (`pass', `fail', etc.) onto counts.
-(define (make-count-reporter)
- (let ((counts (map (lambda (tag) (cons (car tag) 0)) result-tags)))
- (list
- (lambda (result name . args)
- (let ((pair (assq result counts)))
- (if pair
- (set-cdr! pair (+ 1 (cdr pair)))
- (error "count-reporter: unexpected test result: "
- (cons result (cons name args))))))
- (lambda ()
- (append counts '())))))
-
-;;; Print a count reporter's results nicely. Pass this function the value
-;;; returned by a count reporter's RESULTS procedure.
-(define (print-counts results . port?)
- (let ((port (if (pair? port?)
- (car port?)
- (current-output-port))))
- (newline port)
- (display-line-port port "Totals for this test run:")
- (for-each
- (lambda (tag)
- (let ((result (assq (car tag) results)))
- (if result
- (display-line-port port (caddr tag) (cdr result))
- (display-line-port port
- "Test suite bug: "
- "no total available for `" (car tag) "'"))))
- result-tags)
- (newline port)))
-
-;;; Return a reporter procedure which prints all results to the file
-;;; FILE, in human-readable form. FILE may be a filename, or a port.
-(define (make-log-reporter file)
- (let ((port (if (output-port? file) file
- (open-output-file file))))
- (lambda args
- (apply print-result port args)
- (force-output port))))
-
-;;; A reporter that reports all results to the user.
-(define (full-reporter . args)
- (apply print-result (current-output-port) args))
-
-;;; A reporter procedure which shows interesting results (failures,
-;;; unexpected passes etc.) to the user.
-(define (user-reporter result name . args)
- (if (memq result important-result-tags)
- (apply full-reporter result name args)))
-
-(set! default-reporter full-reporter)
-
-
-;;; Macros for a bit of compatibility with srfi-64
-;;; (test-equal [name] expected test-expr)
-(define-syntax test-equal
- (syntax-rules ()
- ((_ expected test-expr)
- (pass-if (verbose-equal? expected test-expr)))
- ((_ name expected test-exprt)
- (pass-if name (verbose-equal? expected test-expr)))))
-
-;;; (test-eqv [name] expected test-expr)
-(define-syntax test-eqv
- (syntax-rules ()
- ((_ expected test-expr)
- (pass-if (eqv? expected test-expr)))
- ((_ name expected test-exprt)
- (pass-if name (eqv? expected test-expr)))))
-
-;;; (test-eq [name] expected test-expr)
-(define-syntax test-eq
- (syntax-rules ()
- ((_ expected test-expr)
- (pass-if (eq? expected test-expr)))
- ((_ name expected test-exprt)
- (pass-if name (eq? expected test-expr)))))
-
-
-(define-public (verbose-equal? expected actual)
- (cond ((equal? expected actual) #t)
- (else
- (format #t "Expected:\n~y\n" expected)
- (format #t "Actual:\n~y\n" actual)
- #f)))
diff --git a/gnuradio-core/src/guile/gnuradio/waveform.scm b/gnuradio-core/src/guile/gnuradio/waveform.scm
deleted file mode 100644
index 0031be931..000000000
--- a/gnuradio-core/src/guile/gnuradio/waveform.scm
+++ /dev/null
@@ -1,54 +0,0 @@
-;;;
-;;; Copyright 2010 Free Software Foundation, Inc.
-;;;
-;;; This file is part of GNU Radio
-;;;
-;;; GNU Radio is free software; you can redistribute it and/or modify
-;;; it under the terms of the GNU General Public License as published by
-;;; the Free Software Foundation; either version 3, or (at your option)
-;;; any later version.
-;;;
-;;; GNU Radio is distributed in the hope that it will be useful,
-;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;;; GNU General Public License for more details.
-;;;
-;;; You should have received a copy of the GNU General Public License
-;;; along with this program. If not, see <http://www.gnu.org/licenses/>.
-;;;
-
-(define-module (gnuradio waveform)
- #:use-module (ice-9 syncase)
- #:export-syntax (define-waveform))
-
-
-(define *registry* '()) ; alist
-(define *last-registered* #f)
-
-
-(define-syntax define-waveform
- (syntax-rules (vars blocks connections)
- ((_ (name cmd-line-args)
- (vars (v-name v-val) ...)
- (blocks (b-name b-val) ...)
- (connections (endpoint1 endpoint2 ...) ...))
- (waveform-register 'name
- (lambda (cmd-line-args)
- (let* ((v-name v-val) ...
- (b-name b-val) ...
- (tb (gr:top-block-swig "waveform-top-block")))
- (gr:connect tb endpoint1 endpoint2 ...) ...
- tb))))))
-
-
-(define-public (waveform-register name thunk)
- (set! *registry* (assoc-set! *registry* name thunk))
- (set! *last-registered* thunk)
- #t)
-
-(define-public (waveform-lookup name)
- (let ((r (assoc name *registry*)))
- (and r (cdr r))))
-
-(define-public (waveform-last-registered)
- *last-registered*)
diff --git a/gnuradio-core/src/guile/gr-run-waveform-script.in b/gnuradio-core/src/guile/gr-run-waveform-script.in
deleted file mode 100644
index 651b387e9..000000000
--- a/gnuradio-core/src/guile/gr-run-waveform-script.in
+++ /dev/null
@@ -1,51 +0,0 @@
-#!/bin/sh
-
-# usage: prepend <path-varname> <dir>
-prepend() {
- if [ $# -ne 2 ]
- then
- echo "$0: prepend needs 2 args" 1>&2
- exit 1
- fi
- local path="$1" dir="$2" contents=""
- eval "contents=\$$path"
- if [ "$dir" != "" ]
- then
- if [ "$contents" = "" ]
- then
- eval "$path=\"$dir\""
- else
- eval "$path=\"$dir:$contents\""
- fi
- fi
- #echo end-of-prepend: $path=${!path}
-}
-
-prefix="@prefix@"
-exec_prefix="@exec_prefix@"
-
-prepend GUILE_LOAD_PATH "${prefix}/share/guile/site"
-prepend LTDL_LIBRARY_PATH "@libdir@"
-prepend DYLD_LIBRARY_PATH "@libdir@"
-
-export GUILE_LOAD_PATH LTDL_LIBRARY_PATH DYLD_LIBRARY_PATH
-
-export GUILE_WARN_DEPRECATED="no"
-
-exec @GUILE@ -e main -s $0 "$@"
-!#
-
-;;; Load and run a waveform defined with define-waveform
-;;;
-;;; usage: gr-run-waveform filename.wfd [args...]
-
-(load-from-path "gnuradio/run-waveform")
-
-(define (main args)
- (if (not (>= (length args) 2))
- (let ((port (current-error-port)))
- (display "usage: " port)
- (display (car args) port)
- (display " filename.wfd [args...]\n" port)
- (exit 1)))
- (apply run-waveform (cdr args)))
diff --git a/gnuradio-core/src/guile/run_guile_tests.in b/gnuradio-core/src/guile/run_guile_tests.in
deleted file mode 100644
index 61968065e..000000000
--- a/gnuradio-core/src/guile/run_guile_tests.in
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/bin/sh
-
-. @top_builddir@/setup_guile_test_env
-
-# Since we're in gnuradio-core, we don't need to add anything,
-# but we do need to call add_local_paths to set everything up
-
-# 1st argument is absolute path to hand coded guile source directory
-# 2nd argument is absolute path to component C++ shared library build directory
-# 3nd argument is absolute path to component SWIG build directory
-
-add_local_paths \
- "" \
- "" \
- ""
-
-@GUILE@ -e main -c '(use-modules (gnuradio test-suite guile-test))' -t @srcdir@/tests
diff --git a/gnuradio-core/src/guile/tests/00_runtime_basics.test b/gnuradio-core/src/guile/tests/00_runtime_basics.test
deleted file mode 100644
index 4a5d967a1..000000000
--- a/gnuradio-core/src/guile/tests/00_runtime_basics.test
+++ /dev/null
@@ -1,159 +0,0 @@
-;;; -*- Scheme -*-
-;;;
-;;; 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 this program. If not, see <http://www.gnu.org/licenses/>.
-;;;
-
-;;; If you're using Emacs's Scheme mode:
-;;; (put 'with-test-prefix 'scheme-indent-function 1)
-
-;;; See the comments in gnuradio/test-suite/lib.scm for info on writing tests.
-;;; See also the very end of the file, where the test-equal, test-eqv
-;;; and test-eq macros are defined.
-
-(use-modules (gnuradio test-suite lib))
-(use-modules (gnuradio core))
-(use-modules (oop goops))
-
-(define (vector-map f v)
- (list->vector (map f (vector->list v))))
-
-(pass-if "Guile was built with threads" (not (not (memq 'threads *features*))))
-
-(with-test-prefix "connect-1"
- (let* ((src-data #(-5 -4 -3 -2 -1 0 1 2 3 4 5))
- (expected-result (vector-map (lambda (x) (* x 2)) src-data))
- (tb (gr:top-block-swig "QA top block"))
- (src (gr:vector-source-i src-data #f))
- (op (gr:multiply-const-ii 2))
- (dst (gr:vector-sink-i)))
-
- ;; using gr:ep to create endpoints
- (gr:connect tb (gr:ep src 0) (gr:ep op 0))
- (gr:connect tb (gr:ep op 0) (gr:ep dst 0))
-
- (gr:run tb)
- ;;(pass-if (equal? expected-result (gr:data dst)))
- (test-equal expected-result (gr:data dst))
- ))
-
-(with-test-prefix "connect-2"
- (let* ((src-data #(-5 -4 -3 -2 -1 0 1 2 3 4 5))
- (expected-result (vector-map (lambda (x) (* x 2)) src-data))
- (tb (gr:top-block-swig "QA top block"))
- (src (gr:vector-source-i src-data #f))
- (op (gr:multiply-const-ii 2))
- (dst (gr:vector-sink-i)))
-
- ;; using just blocks
- (gr:connect tb src op)
- (gr:connect tb op dst)
-
- (gr:run tb)
- (test-equal expected-result (gr:data dst))))
-
-
-(with-test-prefix "connect-3"
- (let* ((src-data #(-5 -4 -3 -2 -1 0 1 2 3 4 5))
- (expected-result (vector-map (lambda (x) (* x 2)) src-data))
- (tb (gr:top-block-swig "QA top block"))
- (src (gr:vector-source-i src-data #f))
- (op (gr:multiply-const-ii 2))
- (dst (gr:vector-sink-i)))
-
- ;; using lists to represent endpoints
- (gr:connect tb `(,src 0) `(,op 0))
- (gr:connect tb `(,op 0) `(,dst 0))
-
- (gr:run tb)
- (test-equal expected-result (gr:data dst))))
-
-
-(with-test-prefix "connect-4"
- (let* ((src-data #(-5 -4 -3 -2 -1 0 1 2 3 4 5))
- (expected-result (vector-map (lambda (x) (* x 2)) src-data))
- (tb (gr:top-block-swig "QA top block"))
- (src (gr:vector-source-i src-data #f))
- (op (gr:multiply-const-ii 2))
- (dst (gr:vector-sink-i)))
-
- ;; using multiple endpoints
- (gr:connect tb src op dst)
-
- (gr:run tb)
- (test-equal expected-result (gr:data dst))))
-
-(with-test-prefix "connect-5"
- (let* ((src-data #(-5 -4 -3 -2 -1 0 1 2 3 4 5))
- (expected-result (vector-map (lambda (x) (* x 2)) src-data))
- (tb (gr:top-block-swig "QA top block"))
- (src (gr:vector-source-i src-data #f))
- (op (gr:multiply-const-ii 2))
- (dst (gr:vector-sink-i)))
-
- (pass-if-throw "bad port exception" 'swig-exception
- (gr:connect tb src op (gr:ep dst 1)))
- ))
-
-(with-test-prefix "gr_top_block::start throw"
- (let* ((src-data #(-5 -4 -3 -2 -1 0 1 2 3 4 5))
- (expected-result (vector-map (lambda (x) (* x 2)) src-data))
- (tb (gr:top-block-swig "QA top block"))
- (src (gr:vector-source-i src-data #f))
- (op (gr:multiply-const-ii 2))
- (dst (gr:vector-sink-i)))
-
- ;; We deliberately don't connect op's output
- (gr:connect tb src op)
-
- ;; Which will lead to an exception here...
- (pass-if-throw "throws std::runtime_error" 'swig-exception
- (gr:run tb))
- ))
-
-(with-test-prefix "io-signature-1"
- (let ((ios1 (gr:io-signature 1 2 8))
- (ios2 (gr:io-signature2 1 2 16 32))
- (ios3 (gr:io-signature3 1 -1 14 32 48))
- (iosv (gr:io-signaturev 1 4 '(1 2 3))))
-
- (test-equal 1 (gr:min-streams ios1))
- (test-equal 2 (gr:max-streams ios1))
- (test-equal 8 (gr:sizeof-stream-item ios1 0))
- (test-equal 8 (gr:sizeof-stream-item ios1 1))
-
- (test-equal 1 (gr:min-streams ios2))
- (test-equal 2 (gr:max-streams ios2))
- (test-equal 16 (gr:sizeof-stream-item ios2 0))
- (test-equal 32 (gr:sizeof-stream-item ios2 1))
-
- (test-equal 1 (gr:min-streams ios3))
- (test-equal -1 (gr:max-streams ios3))
- (test-equal 14 (gr:sizeof-stream-item ios3 0))
- (test-equal 32 (gr:sizeof-stream-item ios3 1))
- (test-equal 48 (gr:sizeof-stream-item ios3 2))
- (test-equal '#(14 32 48) (gr:sizeof-stream-items ios3))
-
- (test-equal 1 (gr:min-streams iosv))
- (test-equal 4 (gr:max-streams iosv))
- (test-equal 1 (gr:sizeof-stream-item iosv 0))
- (test-equal 2 (gr:sizeof-stream-item iosv 1))
- (test-equal 3 (gr:sizeof-stream-item iosv 2))
- (test-equal 3 (gr:sizeof-stream-item iosv 3))
- (test-equal '#(1 2 3) (gr:sizeof-stream-items iosv))
- ))
-
diff --git a/gnuradio-core/src/guile/tests/00_runtime_ctors.test b/gnuradio-core/src/guile/tests/00_runtime_ctors.test
deleted file mode 100644
index 966d8c909..000000000
--- a/gnuradio-core/src/guile/tests/00_runtime_ctors.test
+++ /dev/null
@@ -1,54 +0,0 @@
-;;; -*- Scheme -*-
-;;;
-;;; 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 this program. If not, see <http://www.gnu.org/licenses/>.
-;;;
-
-;;; If you're using Emacs's Scheme mode:
-;;; (put 'with-test-prefix 'scheme-indent-function 1)
-
-;;; See the comments in gnuradio/test-suite/lib.scm for info on writing tests.
-;;; See also the very end of the file where the test-equal, test-eqv
-;;; and test-eq macros are defined.
-
-(use-modules (gnuradio test-suite lib))
-(use-modules (gnuradio core))
-(use-modules (oop goops))
-
-;;; Add test code for all constructors in these files
-;;;
-;;; ./runtime/gr_hier_block2.h
-
-;;; ./runtime/gr_msg_queue.h
-
-(define (equal-message? a b)
- (equal? (gr:to-string a) (gr:to-string b)))
-
-(with-test-prefix "gr:message/gr:msg-queue"
- (let ((msg1 (gr:message-from-string "Hello"))
- (msg2 (gr:message-from-string "World!"))
- (q (gr:msg-queue)))
- (pass-if (equal? "Hello" (gr:to-string msg1)))
- (pass-if (equal? "World!" (gr:to-string msg2)))
- (pass-if (gr:empty-p q))
- (gr:insert-tail q msg1)
- (pass-if (not (gr:empty-p q)))
- (gr:insert-tail q msg2)
- (let ((r1 (gr:delete-head q))
- (r2 (gr:delete-head q)))
- (pass-if (equal-message? r1 msg1))
- (pass-if (equal-message? r2 msg2)))))
diff --git a/gnuradio-core/src/guile/tests/filter_ctors.test b/gnuradio-core/src/guile/tests/filter_ctors.test
deleted file mode 100644
index fe1d9421d..000000000
--- a/gnuradio-core/src/guile/tests/filter_ctors.test
+++ /dev/null
@@ -1,245 +0,0 @@
-;;; -*- Scheme -*-
-;;;
-;;; 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 this program. If not, see <http://www.gnu.org/licenses/>.
-;;;
-
-;;; If you're using Emacs's Scheme mode:
-;;; (put 'with-test-prefix 'scheme-indent-function 1)
-
-;;; See the comments in gnuradio/test-suite/lib.scm for info on writing tests.
-;;; See also the very end of the file, where the test-equal, test-eqv
-;;; and test-eq macros are defined.
-
-(use-modules (gnuradio test-suite lib))
-(use-modules (gnuradio core))
-(use-modules (oop goops))
-
-;;; Add test code for all constructors in these files
-;;;
-
-;;; ./filter/gr_adaptive_fir_ccf.h WONTFIX: not wrapped
-;; gr_adaptive_fir_ccf(char *name, int decimation, const std::vector<float> &taps);
-;; (pass-if (true? (gr:adaptive-fir-ccf "foo" 0 #(1.0 2.0 3.0 4.0))))
-
-;;; ./filter/gr_fft_filter_ccc.h
-(pass-if (true? (gr:fft-filter-ccc 0 #(1+3i 23+5i))))
-
-;;; ./filter/gr_fft_filter_fff.h
-(pass-if (true? (gr:fft-filter-fff 0 #(1.0 2.0))))
-
-;;; ./filter/gr_filter_delay_fc.h
-(pass-if (true? (gr:filter-delay-fc #(1.0 2.0))))
-
-;;; ./filter/gr_fir_ccc_generic. FIXME: Unbound variable: ~S" (gr:fir-ccc-generic) #f))
-;; (pass-if (true? (gr:fir-ccc-generic)))
-;; (pass-if (true? (gr:fir-ccc-generic #(1+3i 23+5i))))
-
-;;; ./filter/gr_fir_ccc_simd.h FIXME: not found
-;; (pass-if (true? (gr:fir-ccc-simd)))
-;; (pass-if (true? (gr:fir-ccc-simd #(1+3i 23+5i))))
-
-;;; ./filter/gr_fir_ccc_x86.h FIXME: not found
-;; (pass-if (true? (gr:fir-ccc-x86)))
-;; (pass-if (true? (gr:fir-ccc-x86 #(1+3i 23+5i))))
-
-;;; ./filter/gr_fir_ccf_generic.h FIXME: not found
-;; (pass-if (true? (gr:fir-ccf-generic)))
-;; (pass-if (true? (gr:fir-ccf-generic #(1+3i 23+5i))))
-
-;;; ./filter/gr_fir_ccf_simd.h FIXME: not found
-;; (pass-if (true? (gr:fir-ccf-simd 0 0 0 0)))
-
-;;; ./filter/gr_fir_ccf_x86.h FIXME: not found
-;; (pass-if (true? (gr:fir-ccf-x86)))
-;; (pass-if (true? (gr:fir-ccf-x86 #(1.0 2.0))))
-
-;;; ./filter/gr_fir_fcc_generic.h FIXME: not found
-;; (pass-if (true? (gr:fir-fcc-generic)))
-;; (pass-if (true? (gr:fir-fcc-generic #(1+3i 23+5i))))
-
-;;; ./filter/gr_fir_fcc_simd.h FIXME: not found
-;; (pass-if (true? (gr:fir-fcc-simd 0 0 0 0)))
-
-;;; ./filter/gr_fir_fcc_x86.h FIXME: not found
-;; (pass-if (true? (gr:fir-fcc-x86)))
-;; (pass-if (true? (gr:fir-fcc-x86 #(1+3i 23+5i))))
-
-;;; ./filter/gr_fir_fff_altivec.h FIXME: not found
-;; (pass-if (true? (gr:fir-fff-altivec)))
-;; (pass-if (true? (gr:fir-fff-altivec #(1.0 2.0))))
-
-;;; ./filter/gr_fir_fff_armv7_a.h FIXME: not found
-;; (pass-if (true? (gr:fir-fff-armv7-a)))
-;; (pass-if (true? (gr:fir-fff-armv7-a #(1.0 2.0))))
-
-;;; ./filter/gr_fir_fff_generic.h FIXME: not found
-;; (pass-if (true? (gr:fir-fff-generic)))
-;; (pass-if (true? (gr:fir-fff-generic #(1.0 2.0))))
-
-;;; ./filter/gr_fir_fff_simd.h FIXME: not found
-;; (pass-if (true? (gr:fir-fff-simd 0 0 0)))
-
-;;; ./filter/gr_fir_fff_x86.h FIXME: not found
-;; (pass-if (true? (gr:fir-fff-x86)))
-;; (pass-if (true? (gr:fir-fff-x86 #(1.0 2.0))))
-
-;;; ./filter/gr_fir_filter_ccc.h FIXME: not found
-;; (pass-if (true? (gr:fir-filter-ccc 1 #(1+3i 23+5i))))
-
-;;; ./filter/gr_fir_filter_ccf.h
-(pass-if (true? (gr:fir-filter-ccf 1 #(1.0 2.0))))
-
-;;; ./filter/gr_fir_filter_fcc.h
-(pass-if (true? (gr:fir-filter-fcc 1 #(1+3i 23+5i))))
-
-;;; ./filter/gr_fir_filter_fff.h
-(pass-if (true? (gr:fir-filter-fff 1 #(1.0 2.0))))
-
-;;; ./filter/gr_fir_filter_fsf.h
-(pass-if (true? (gr:fir-filter-fsf 1 #(1.0 2.0))))
-
-;;; ./filter/gr_fir_filter_scc.h
-(pass-if (true? (gr:fir-filter-scc 1 #(1+3i 23+5i))))
-
-;;; ./filter/gr_fir_fsf_generic.h FIXME: "Unbound variable: ~S" (gr:fir-fsf-generic) #f))
-;; (pass-if (true? (gr:fir-fsf-generic)))
-;; (pass-if (true? (gr:fir-fsf-generic #(1.0 2.0))))
-
-;;; ./filter/gr_fir_fsf_simd.h FIXME: not found
-;; (pass-if (true? (gr:fir-fsf-simd 0 0 0)))
-
-;;; ./filter/gr_fir_fsf_x86.h FIXME: "Unbound variable: ~S" (gr:fir-fsf-x86) #f))
-;; (pass-if (true? (gr:fir-fsf-x86)))
-;; (pass-if (true? (gr:fir-fsf-x86 #(1.0 2.0))))
-
-;;; ./filter/gr_fir_scc_generic.h FIXME: file not found
-;; (pass-if (true? (gr:fir-scc-generic)))
-;; (pass-if (true? (gr:fir-scc-generic #(1+3i 23+5i))))
-
-;;; ./filter/gr_fir_scc_simd.h FIXME: Unbound variable: ~S" (gr:fir-scc-simd) #f))
-;; (pass-if (true? (gr:fir-scc-simd)))
-;; (pass-if (true? (gr:fir-scc-simd #(1+3i 23+5i))))
-
-;;; ./filter/gr_fir_scc_x86.h FIXME: "Unbound variable: ~S" (gr:fir-scc-x86) #f))
-;; (pass-if (true? (gr:fir-scc-x86)))
-;; (pass-if (true? (gr:fir-scc-x86 #(1+3i 23+5i))))
-
-;;; ./filter/gr_fir_sysconfig_armv7_a.h FIXME: virtual methods
-;; (pass-if (true? (gr:fir-sysconfig-armv7-a )))
-
-;;; ./filter/gr_fir_sysconfig_generic.h FIXME: virtual methods
-;; (pass-if (true? (gr:fir-sysconfig-generic )))
-
-;;; ./filter/gr_fir_sysconfig_powerpc.h FIXME: virtual methods
-;; (pass-if (true? (gr:fir-sysconfig-powerpc )))
-
-;;; ./filter/gr_fir_sysconfig_x86.h FIXME: virtual methods
-;; (pass-if (true? (gr:fir-sysconfig-x86 #(1+3i 23+5i))))
-
-;;; ./filter/gr_fractional_interpolator_cc.h
-(pass-if (true? (gr:fractional-interpolator-cc 1.0 1.0)))
-
-;;; ./filter/gr_fractional_interpolator_ff.h
-(pass-if (true? (gr:fractional-interpolator-ff 1.0 1.0)))
-
-;;; ./filter/gr_freq_xlating_fir_filter_ccc.h
-(pass-if (true? (gr:freq-xlating-fir-filter-ccc 1 #(1+3i 23+5i) 1.0 1.0)))
-
-;;; ./filter/gr_freq_xlating_fir_filter_ccf.h
-(pass-if (true? (gr:freq-xlating-fir-filter-ccf 1 #(1.0 2.0) 1.0 1.0)))
-
-;;; ./filter/gr_freq_xlating_fir_filter_fcc.h
-(pass-if (true? (gr:freq-xlating-fir-filter-fcc 1 #(1.0 2.0) 1.0 1.0)))
-
-;;; ./filter/gr_freq_xlating_fir_filter_fcf.h
-(pass-if (true? (gr:freq-xlating-fir-filter-fcf 1 #(1.0 2.0) 1.0 1.0)))
-
-;;; ./filter/gr_freq_xlating_fir_filter_scc.h
-(pass-if (true? (gr:freq-xlating-fir-filter-scc 1 #(1.0 2.0) 1.0 1.0)))
-
-;;; ./filter/gr_freq_xlating_fir_filter_scf.h
-(pass-if (true? (gr:freq-xlating-fir-filter-scf 1 #(1.0 2.0) 1.0 1.0)))
-
-;;; ./filter/gr_goertzel_fc.h
-(pass-if (true? (gr:goertzel-fc 1 1 1)))
-
-;;; ./filter/gr_hilbert_fc.h
-(pass-if (true? (gr:hilbert-fc 1)))
-
-;;; ./filter/gr_iir_filter_ffd.h
-(pass-if (true? (gr:iir-filter-ffd #(1.0 2.0) #(1.0 2.0))))
-
-;;; ./filter/gr_interp_fir_filter_ccc.h FIXME: not found
-;; (pass-if (true? (gr:interp-fir-filter-ccc #(1+3i 23+5i))))
-
-;;; ./filter/gr_interp_fir_filter_ccf.h FIXME: not found
-;; (pass-if (true? (gr:interp-fir-filter-ccf )))
-
-;;; ./filter/gr_interp_fir_filter_fcc.h FIXME: not found
-;; (pass-if (true? (gr:interp-fir-filter-fcc )))
-
-;;; ./filter/gr_interp_fir_filter_fff.h FIXME: not found
-;; (pass-if (true? (gr:interp-fir-filter-fff )))
-
-;;; ./filter/gr_interp_fir_filter_fsf.h FIXME: not found
-;; (pass-if (true? (gr:interp-fir-filter-fsf )))
-
-;;; ./filter/gr_interp_fir_filter_scc.h FIXME: not found
-;; (pass-if (true? (gr:interp-fir-filter-scc )))
-
-;;; ./filter/gr_pfb_arb_resampler_ccf.h
-(pass-if (true? (gr:pfb-arb-resampler-ccf 1.0 #(1.0 2.0) 32)))
-
-;;; ./filter/gr_pfb_channelizer_ccf.h
-(pass-if (true? (gr:pfb-channelizer-ccf 1 #(1.0 2.0) 1)))
-
-;;; ./filter/gr_pfb_clock_sync_ccf.h
-(pass-if (true? (gr:pfb-clock-sync-ccf 1.0 1.0 #(1.0 2.0) 32 0 1.5)))
-
-;;; ./filter/gr_pfb_clock_sync_fff.h
-(pass-if (true? (gr:pfb-clock-sync-fff 1.0 1.0 #(1.0 2.0) 32 0 1.5)))
-
-;;; ./filter/gr_pfb_decimator_ccf.h
-(pass-if (true? (gr:pfb-decimator-ccf 1 #(1.0 2.0) 0)))
-
-;;; ./filter/gr_pfb_interpolator_ccf.h
-(pass-if (true? (gr:pfb-interpolator-ccf 1 #(1.0 2.0))))
-
-;;; ./filter/gr_rational_resampler_base_ccc.h FIXME: not found
-;; (pass-if (true? (gr:rational-resampler-base-ccc 1 1 #(1+3i 23+5i))))
-
-;;; ./filter/gr_rational_resampler_base_ccf.h FIXME: not found
-;; (pass-if (true? (gr:rational-resampler-base-ccf )))
-
-;;; ./filter/gr_rational_resampler_base_fcc.h FIXME: not found
-;; (pass-if (true? (gr:rational-resampler-base-fcc )))
-
-;;; ./filter/gr_rational_resampler_base_fff.h FIXME: not found
-;; (pass-if (true? (gr:rational-resampler-base-fff )))
-
-;;; ./filter/gr_rational_resampler_base_fsf.h FIXME: not found
-;; (pass-if (true? (gr:rational-resampler-base-fsf )))
-
-;;; ./filter/gr_rational_resampler_base_scc.h FIXME: not found
-;; (pass-if (true? (gr:rational-resampler-base-scc )))
-
-;;; ./filter/gr_single_pole_iir_filter_cc.h
-(pass-if (true? (gr:single-pole-iir-filter-cc 1.0 1)))
-
-;;; ./filter/gr_single_pole_iir_filter_ff.h
-(pass-if (true? (gr:single-pole-iir-filter-ff 1.0 1)))
diff --git a/gnuradio-core/src/guile/tests/general_ctors.test b/gnuradio-core/src/guile/tests/general_ctors.test
deleted file mode 100644
index ca4d60460..000000000
--- a/gnuradio-core/src/guile/tests/general_ctors.test
+++ /dev/null
@@ -1,348 +0,0 @@
-;;; -*- Scheme -*-
-;;;
-;;; 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 this program. If not, see <http://www.gnu.org/licenses/>.
-;;;
-
-;;; If you're using Emacs's Scheme mode:
-;;; (put 'with-test-prefix 'scheme-indent-function 1)
-
-;;; See the comments in gnuradio/test-suite/lib.scm for info on writing tests.
-;;; See also the very end of the file, where the test-equal, test-eqv
-;;; and test-eq macros are defined.
-
-(use-modules (gnuradio test-suite lib))
-(use-modules (gnuradio core))
-(use-modules (oop goops))
-(use-modules (ice-9 format))
-
-
-;;; Test complex<float> scalars
-(pass-if (equal? 5.0+5.0i (gr:complex-scalar-test0)))
-(pass-if (equal? 1.5+0.5i (gr:complex-scalar-test1 1+1i)))
-
-;;; Test complex<float> vectors
-(pass-if (verbose-equal? #(0+0i 1+1i 2+2i 3+3i 4+4i)
- (gr:complex-vec-test0)))
-
-(pass-if (verbose-equal? #(1.5+0.5i 2.5+1.5i 3.5+2.5i)
- (gr:complex-vec-test1 #(1+1i 2+2i 3+3i))))
-
-
-;;; Add test code for all constructors in these files
-
-;;; ./general/gr_additive_scrambler_bb.h
-(pass-if (true? (gr:additive-scrambler-bb 0 0 0 0)))
-
-;; Here's one that will throw if its arg is 0
-(pass-if (true? (gr:unpack-k-bits-bb 10)))
-(pass-if-throw "confirm throw gr:unpack-k-bits-bb" #t (true? (gr:unpack-k-bits-bb 0)))
-
-;;; ./general/gr_agc2_cc.h
-(pass-if (true? (gr:agc2-cc 1e-1 1e-2 1.0 1.0 0.0)))
-
-;;; ./general/gr_agc2_ff.h
-(pass-if (true? (gr:agc2-ff 0 0 0 0 0)))
-
-;;; ./general/gr_agc_cc.h
-(pass-if (true? (gr:agc-cc 0 0 0 0)))
-
-;;; ./general/gr_agc_ff.h
-(pass-if (true? (gr:agc-ff 0 0 0 0)))
-
-;;; ./general/gr_align_on_samplenumbers_ss.h
-(pass-if (true? (gr:align-on-samplenumbers-ss 2 128)))
-(pass-if-throw "confirm throw gr:align-on-samplenumbers-ss" #t (true? (gr:align-on-samplenumbers-ss 0 0)))
-
-;;; ./general/gr_bin_statistics_f.h WONTFIX: requires gr_feval_dd & swig directors
-;;;(pass-if (true? (gr:bin-statistics-f 1 (gr:msg-queue) 0 0 0)))
-
-;;; ./general/gr_bytes_to_syms.h
-(pass-if (true? (gr:bytes-to-syms)))
-
-;;; ./general/gr_char_to_float.h
-(pass-if (true? (gr:char-to-float)))
-
-;;; ./general/gr_check_counting_s.h
-(pass-if (true? (gr:check-counting-s #f)))
-
-;;; ./general/gr_check_lfsr_32k_s.h
-(pass-if (true? (gr:check-lfsr-32k-s)))
-
-;;; ./general/gr_complex_to_interleaved_short.h
-(pass-if (true? (gr:complex-to-interleaved-short)))
-
-;;; ./general/gr_complex_to_xxx.h
-(pass-if (true? (gr:complex-to-float 1)))
-(pass-if (true? (gr:complex-to-real 1)))
-(pass-if (true? (gr:complex-to-imag 1)))
-(pass-if (true? (gr:complex-to-mag 1)))
-(pass-if (true? (gr:complex-to-mag-squared 1)))
-(pass-if (true? (gr:complex-to-arg 1)))
-
-;;; ./general/gr_conjugate_cc.h
-(pass-if (true? (gr:conjugate-cc)))
-
-;;; ./general/gr_copy.h
-(pass-if (true? (gr:copy 1)))
-
-;;; ./general/gr_cpfsk_bc.h
-(pass-if (true? (gr:cpfsk-bc 1 1 1)))
-
-;;; ./general/gr_ctcss_squelch_ff.h
-(pass-if (true? (gr:ctcss-squelch-ff 0 0 0 0 0 #t)))
-
-;;; ./general/gr_decode_ccsds_27_fb.h
-(pass-if (true? (gr:decode-ccsds-27-fb)))
-
-;;; ./general/gr_deinterleave.h
-(pass-if (true? (gr:deinterleave 1)))
-
-;;; ./general/gr_delay.h
-(pass-if (true? (gr:delay 1 1)))
-
-;;; ./general/gr_descrambler_bb.h
-(pass-if (true? (gr:descrambler-bb 0 0 0)))
-
-;;; ./general/gr_diff_decoder_bb.h
-(pass-if (true? (gr:diff-decoder-bb 0)))
-
-;;; ./general/gr_diff_encoder_bb.h
-(pass-if (true? (gr:diff-encoder-bb 0)))
-
-;;; ./general/gr_diff_phasor_cc.h
-(pass-if (true? (gr:diff-phasor-cc)))
-
-;;; ./general/gr_dpll_bb.h
-(pass-if (true? (gr:dpll-bb 0 0)))
-
-;;; ./general/gr_encode_ccsds_27_bb.h
-(pass-if (true? (gr:encode-ccsds-27-bb)))
-
-;;; ./general/gr_fake_channel_coder_pp.h
-(pass-if (true? (gr:fake-channel-encoder-pp 1 1)))
-(pass-if-throw "confirm throw" #t (true? (gr:fake-channel-encoder-pp -1 1)))
-
-;;; ./general/gr_feedforward_agc_cc.h
-(pass-if (true? (gr:feedforward-agc-cc 1 1)))
-
-;;; ./general/gr_fft_vcc.h
-(pass-if (true? (gr:fft-vcc 1 #f #(1.0 2.0) #t)))
-
-;;; ./general/gr_fft_vfc.h
-(pass-if (true? (gr:fft-vfc 4 #t #(1.0 2.0 3.0 4.0))))
-(pass-if-throw "confirm throw gr:fft-vfc" #t (true? (gr:fft-vfc 4 #f #(1.0 2.0 3.0 4.0))))
-
-;; ;;; ./general/gr_float_to_char.h
-(pass-if (true? (gr:float-to-char)))
-
-;; ;;; ./general/gr_float_to_complex.h
-(pass-if (true? (gr:float-to-complex 1)))
-
-;;; ./general/gr_float_to_short.h
-(pass-if (true? (gr:float-to-short)))
-
-;;; ./general/gr_float_to_uchar.h
-(pass-if (true? (gr:float-to-uchar)))
-
-;;; ./general/gr_fmdet_cf.h
-(pass-if (true? (gr:fmdet-cf 0 0 0 0)))
-
-;;; ./general/gr_framer_sink_1.h
-(pass-if (true? (gr:framer-sink-1 (gr:msg-queue))))
-
-;;; ./general/gr_frequency_modulator_fc.h
-(pass-if (true? (gr:frequency-modulator-fc 0)))
-
-;;; ./general/gr_glfsr_source_b.h
-(pass-if (true? (gr:glfsr-source-b 1 #t 0 1)))
-(pass-if-throw "confirm throw" #t (true? (gr:glfsr_source_b 33 #t 0 0)))
-
-;;; ./general/gr_glfsr_source_f.h
-(pass-if (true? (gr:glfsr-source-f 1 #t 1 1)))
-(pass-if-throw "confirm throw" #t (true? (gr:glfsr_source_f 33 #t 0 0)))
-
-;;; ./general/gr_head.h
-(pass-if (true? (gr:head 1 1)))
-
-;;; ./general/gr_interleave.h
-(pass-if (true? (gr:interleave 1)))
-
-;;; ./general/gr_interleaved_short_to_complex.h
-(pass-if (true? (gr:interleaved-short-to-complex)))
-
-;;; ./general/gr_keep_one_in_n.h
-(pass-if (true? (gr:keep-one-in-n 1 1)))
-
-;;; ./general/gr_kludge_copy.h
-(pass-if (true? (gr:kludge-copy 1)))
-
-;;; ./general/gr_lfsr_32k_source_s.h
-(pass-if (true? (gr:lfsr-32k-source-s)))
-
-;;; ./general/gr_map_bb.h
-(pass-if (true? (gr:map-bb #(1 2))))
-
-;;; ./general/gr_nlog10_ff.h
-(pass-if (true? (gr:nlog10-ff 1 1 1)))
-
-;;; ./general/gr_nop.h
-(pass-if (true? (gr:nop 1)))
-
-;;; ./general/gr_null_sink.h
-(pass-if (true? (gr:null-sink 1)))
-
-;;; ./general/gr_null_source.h
-(pass-if (true? (gr:null-source 1)))
-
-;;; ./general/gr_pa_2x2_phase_combiner.h
-(pass-if (true? (gr:pa-2x2-phase-combiner)))
-
-;;; ./general/gr_packet_sink.h
-(pass-if (true? (gr:packet-sink #(1 2) (gr:msg-queue) -1)))
-
-;;; ./general/gr_peak_detector2_fb.h
-(pass-if (true? (gr:peak-detector2-fb 0 0 0)))
-
-;;; ./general/gr_phase_modulator_fc.h
-(pass-if (true? (gr:phase-modulator-fc 0)))
-
-;;; ./general/gr_pll_carriertracking_cc.h
-(pass-if (true? (gr:pll-carriertracking-cc 0 0 0)))
-
-;;; ./general/gr_pll_freqdet_cf.h
-(pass-if (true? (gr:pll-freqdet-cf 0 0 0)))
-
-;;; ./general/gr_pll_refout_cc.h
-(pass-if (true? (gr:pll-refout-cc 0 0 0)))
-
-;;; ./general/gr_pn_correlator_cc.h
-(pass-if (true? (gr:pn-correlator-cc 1 1 1)))
-
-;;; ./general/gr_probe_avg_mag_sqrd_c.h
-(pass-if (true? (gr:probe-avg-mag-sqrd-c 0 0)))
-
-;;; ./general/gr_probe_avg_mag_sqrd_cf.h
-(pass-if (true? (gr:probe-avg-mag-sqrd-cf 0 0)))
-
-;;; ./general/gr_probe_avg_mag_sqrd_f.h
-(pass-if (true? (gr:probe-avg-mag-sqrd-f 0 0)))
-
-;;; ./general/gr_probe_density_b.h
-(pass-if (true? (gr:probe-density-b 0)))
-
-;;; ./general/gr_probe_mpsk_snr_c.h
-(pass-if (true? (gr:probe-mpsk-snr-c 0)))
-
-;;; ./general/gr_probe_signal_f.h
-(pass-if (true? (gr:probe-signal-f)))
-
-;;; ./general/gr_pwr_squelch_cc.h
-(pass-if (true? (gr:pwr-squelch-cc 0 0 0 #f)))
-
-;;; ./general/gr_pwr_squelch_ff.h
-(pass-if (true? (gr:pwr-squelch-ff 0.0 0.0 0 #f)))
-
-;;; ./general/gr_quadrature_demod_cf.h
-(pass-if (true? (gr:quadrature-demod-cf 0)))
-
-;;; ./general/gr_rail_ff.h
-(pass-if (true? (gr:rail-ff 0 0)))
-
-;;; ./general/gr_regenerate_bb.h
-(pass-if (true? (gr:regenerate-bb 0 0)))
-
-;;; ./general/gr_repeat.h
-(pass-if (true? (gr:repeat 1 1)))
-
-;;; ./general/gr_rms_cf.h
-(pass-if (true? (gr:rms-cf 0)))
-
-;;; ./general/gr_rms_ff.h
-(pass-if (true? (gr:rms-ff 0)))
-
-;;; ./general/gr_scrambler_bb.h
-(pass-if (true? (gr:scrambler-bb 0 0 0)))
-
-;;; ./general/gr_short_to_float.h
-(pass-if (true? (gr:short-to-float)))
-
-;;; ./general/gr_simple_correlator.h
-(pass-if (true? (gr:simple-correlator 0)))
-
-;;; ./general/gr_simple_framer.h
-(pass-if (true? (gr:simple-framer 0)))
-
-;;; ./general/gr_simple_squelch_cc.h
-(pass-if (true? (gr:simple-squelch-cc 0 0)))
-
-;;; ./general/gr_skiphead.h
-(pass-if (true? (gr:skiphead 1 1)))
-
-;;; ./general/gr_squash_ff.h
-(pass-if (true? (gr:squash-ff #(1.0 2.0 3.0 4.0 5.0) #(1.0 2.0 3.0 4.0 5.0))))
-
-;;; ./general/gr_squelch_base_cc.h WONTFIX: not wrapped
-;;; (pass-if (true? (gr:squelch-base-cc "foo" 0 #f)))
-
-;;; ./general/gr_squelch_base_ff.h WONTFIX: not wrapped
-;; (pass-if (true? (gr:squelch-base-ff "foo" 0 #f)))
-
-;;; ./general/gr_stream_mux.h
-(pass-if (true? (gr:stream-mux 1 #(1 2))))
-
-;;; ./general/gr_stream_to_streams.h
-(pass-if (true? (gr:stream-to-streams 1 1)))
-
-;;; ./general/gr_stream_to_vector.h
-(pass-if (true? (gr:stream-to-vector 1 1)))
-
-;;; ./general/gr_streams_to_stream.h
-(pass-if (true? (gr:streams-to-stream 1 1)))
-
-;;; ./general/gr_streams_to_vector.h
-(pass-if (true? (gr:streams-to-vector 1 1)))
-
-;;; ./general/gr_stretch_ff.h
-(pass-if (true? (gr:stretch-ff 1 1)))
-
-;;; ./general/gr_test.h
-(pass-if (true? (gr:test "foo" 1 1 1 1 1 1 1 1)))
-
-;;; ./general/gr_threshold_ff.h
-(pass-if (true? (gr:threshold-ff 0 0)))
-
-;;; ./general/gr_throttle.h
-(pass-if (true? (gr:throttle 1 1)))
-
-;;; ./general/gr_uchar_to_float.h
-(pass-if (true? (gr:uchar-to-float)))
-
-;;; ./general/gr_vco_f.h
-(pass-if (true? (gr:vco-f 0 0 0)))
-
-;;; ./general/gr_vector_to_stream.h
-(pass-if (true? (gr:vector-to-stream 1 1)))
-
-;;; ./general/gr_vector_to_streams.h
-(pass-if (true? (gr:vector-to-streams 1 1)))
-
-;;; ./general/gr_wavelet_ff.h
-(pass-if (true? (gr:wavelet-ff 1024 20 #t)))
-
-;;; ./general/gr_wvps_ff.h
-(pass-if (true? (gr:wvps-ff 2)))
diff --git a/gnuradio-core/src/guile/tests/gengen_ctors.test b/gnuradio-core/src/guile/tests/gengen_ctors.test
deleted file mode 100644
index 6bac05394..000000000
--- a/gnuradio-core/src/guile/tests/gengen_ctors.test
+++ /dev/null
@@ -1,336 +0,0 @@
-;;; -*- Scheme -*-
-;;;
-;;; 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 this program. If not, see <http://www.gnu.org/licenses/>.
-;;;
-
-;;; If you're using Emacs's Scheme mode:
-;;; (put 'with-test-prefix 'scheme-indent-function 1)
-
-;;; See the comments in gnuradio/test-suite/lib.scm for info on writing tests.
-;;; See also the very end of the file, where the test-equal, test-eqv
-;;; and test-eq macros are defined.
-
-(use-modules (gnuradio test-suite lib))
-(use-modules (gnuradio core))
-(use-modules (oop goops))
-
-;;; Add test code for all constructors in these files
-;;;
-
-;;; ./gengen/gr_add_cc.h
-(pass-if (true? (gr:add-cc 1)))
-
-;;; ./gengen/gr_add_const_cc.h
-(pass-if (true? (gr:add-const-cc 0)))
-
-;;; ./gengen/gr_add_const_ff.h
-(pass-if (true? (gr:add-const-ff 0)))
-
-;;; ./gengen/gr_add_const_ii.h
-(pass-if (true? (gr:add-const-ii 0)))
-
-;;; ./gengen/gr_add_const_sf.h
-(pass-if (true? (gr:add-const-sf 0)))
-
-;;; ./gengen/gr_add_const_ss.h
-(pass-if (true? (gr:add-const-ss 0)))
-
-;;; ./gengen/gr_add_const_vcc.h
-(pass-if (true? (gr:add-const-vcc #(1+3i 23+5i))))
-
-;;; ./gengen/gr_add_const_vff.h
-(pass-if (true? (gr:add-const-vff #(1.0 2.0))))
-
-;;; ./gengen/gr_add_const_vii.h
-(pass-if (true? (gr:add-const-vii #(1 2))))
-
-;;; ./gengen/gr_add_const_vss.h
-(pass-if (true? (gr:add-const-vss #(1 2))))
-
-;;; ./gengen/gr_add_ff.h
-(pass-if (true? (gr:add-ff 1)))
-
-;;; ./gengen/gr_add_ii.h
-(pass-if (true? (gr:add-ii 1)))
-
-;;; ./gengen/gr_add_ss.h
-(pass-if (true? (gr:add-ss 1)))
-
-;;; ./gengen/gr_and_bb.h
-(pass-if (true? (gr:and-bb)))
-
-;;; ./gengen/gr_and_const_bb.h
-(pass-if (true? (gr:and-const-bb 0)))
-
-;;; ./gengen/gr_and_const_ii.h
-(pass-if (true? (gr:and-const-ii 0)))
-
-;;; ./gengen/gr_and_const_ss.h
-(pass-if (true? (gr:and-const-ss 0)))
-
-;;; ./gengen/gr_and_ii.h
-(pass-if (true? (gr:and-ii)))
-
-;;; ./gengen/gr_and_ss.h
-(pass-if (true? (gr:and-ss)))
-
-;;; ./gengen/gr_argmax_fs.h
-(pass-if (true? (gr:argmax-fs 1)))
-
-;;; ./gengen/gr_argmax_is.h
-(pass-if (true? (gr:argmax-is 1)))
-
-;;; ./gengen/gr_argmax_ss.h
-(pass-if (true? (gr:argmax-ss 1)))
-
-;;; ./gengen/gr_chunks_to_symbols_bc.h
-(pass-if (true? (gr:chunks-to-symbols-bc #(1+3i 23+5i) 1)))
-
-;;; ./gengen/gr_chunks_to_symbols_bf.h
-(pass-if (true? (gr:chunks-to-symbols-bf #(1.0 2.0) 1)))
-
-;;; ./gengen/gr_chunks_to_symbols_ic.h
-(pass-if (true? (gr:chunks-to-symbols-ic #(1+3i 23+5i) 1)))
-
-;;; ./gengen/gr_chunks_to_symbols_if.h
-(pass-if (true? (gr:chunks-to-symbols-if #(1.0 2.0) 1)))
-
-;;; ./gengen/gr_chunks_to_symbols_sc.h
-(pass-if (true? (gr:chunks-to-symbols-sc #(1.0 2.0) 1)))
-
-;;; ./gengen/gr_chunks_to_symbols_sf.h
-(pass-if (true? (gr:chunks-to-symbols-sf #(1.0 2.0) 1)))
-
-;;; ./gengen/gr_divide_cc.h
-(pass-if (true? (gr:divide-cc 1)))
-
-;;; ./gengen/gr_divide_ff.h
-(pass-if (true? (gr:divide-ff 1)))
-
-;;; ./gengen/gr_divide_ii.h
-(pass-if (true? (gr:divide-ii 1)))
-
-;;; ./gengen/gr_divide_ss.h
-(pass-if (true? (gr:divide-ss 1)))
-
-;;; ./gengen/gr_integrate_cc.h
-(pass-if (true? (gr:integrate-cc 0)))
-
-;;; ./gengen/gr_integrate_ff.h
-(pass-if (true? (gr:integrate-ff 0)))
-
-;;; ./gengen/gr_integrate_ii.h
-(pass-if (true? (gr:integrate-ii 0)))
-
-;;; ./gengen/gr_integrate_ss.h
-(pass-if (true? (gr:integrate-ss 0)))
-
-;;; ./gengen/gr_max_ff.h
-(pass-if (true? (gr:max-ff 1)))
-
-;;; ./gengen/gr_max_ii.h
-(pass-if (true? (gr:max-ii 1)))
-
-;;; ./gengen/gr_max_ss.h
-(pass-if (true? (gr:max-ss 1)))
-
-;;; ./gengen/gr_moving_average_cc.h
-(pass-if (true? (gr:moving-average-cc 1 1+3i 4096)))
-
-;;; ./gengen/gr_moving_average_ff.h
-(pass-if (true? (gr:moving-average-ff 1 0 4096)))
-
-;;; ./gengen/gr_moving_average_ii.h
-(pass-if (true? (gr:moving-average-ii 1 0 4096)))
-
-;;; ./gengen/gr_moving_average_ss.h
-(pass-if (true? (gr:moving-average-ss 1 0 4096)))
-
-;;; ./gengen/gr_multiply_const_ff.h
-(pass-if (true? (gr:multiply-const-ff 1)))
-
-;;; ./gengen/gr_multiply_const_ii.h
-(pass-if (true? (gr:multiply-const-ii 1)))
-
-;;; ./gengen/gr_multiply_const_ss.h
-(pass-if (true? (gr:multiply-const-ss 1)))
-
-;;; ./gengen/gr_multiply_const_vcc.h
-(pass-if (true? (gr:multiply-const-vcc #(1+3i 23+5i))))
-
-;;; ./gengen/gr_multiply_const_vff.h
-(pass-if (true? (gr:multiply-const-vff #(1.0 2.0))))
-
-;;; ./gengen/gr_multiply_const_vii.h
-(pass-if (true? (gr:multiply-const-vii #(1 2))))
-
-;;; ./gengen/gr_multiply_const_vss.h
-(pass-if (true? (gr:multiply-const-vss #(1 2))))
-
-;;; ./gengen/gr_multiply_ff.h
-(pass-if (true? (gr:multiply-ff 1)))
-
-;;; ./gengen/gr_multiply_ii.h
-(pass-if (true? (gr:multiply-ii 1)))
-
-;;; ./gengen/gr_multiply_ss.h
-(pass-if (true? (gr:multiply-ss 1)))
-
-;;; ./gengen/gr_mute_cc.h FIXME: not found
-(pass-if (true? (gr:mute-cc #f)))
-
-;;; ./gengen/gr_mute_ff.h FIXME: not found
-(pass-if (true? (gr:mute-ff #f)))
-
-;;; ./gengen/gr_mute_ii.h FIXME: not found
-(pass-if (true? (gr:mute-ii #f)))
-
-;;; ./gengen/gr_mute_ss.h FIXME: not found
-(pass-if (true? (gr:mute-ss #f)))
-
-;;; ./gengen/gr_noise_source_c.h
-(pass-if (true? (gr:noise-source-c 1 0 3021)))
-
-;;; ./gengen/gr_noise_source_f.h
-(pass-if (true? (gr:noise-source-f 1 0 3021)))
-
-;;; ./gengen/gr_noise_source_i.h
-(pass-if (true? (gr:noise-source-i 1 0 3021)))
-
-;;; ./gengen/gr_noise_source_s.h
-(pass-if (true? (gr:noise-source-s 1 0 3021)))
-
-;;; ./gengen/gr_not_bb.h
-(pass-if (true? (gr:not-bb)))
-
-;;; ./gengen/gr_not_ii.h
-(pass-if (true? (gr:not-ii)))
-
-;;; ./gengen/gr_not_ss.h
-(pass-if (true? (gr:not-ss)))
-
-;;; ./gengen/gr_or_bb.h
-(pass-if (true? (gr:or-bb)))
-
-;;; ./gengen/gr_or_ii.h
-(pass-if (true? (gr:or-ii)))
-
-;;; ./gengen/gr_or_ss.h
-(pass-if (true? (gr:or-ss)))
-
-;;; ./gengen/gr_packed_to_unpacked_bb.h
-(pass-if (true? (gr:packed-to-unpacked-bb 1 1)))
-
-;;; ./gengen/gr_packed_to_unpacked_ii.h
-(pass-if (true? (gr:packed-to-unpacked-ii 1 1)))
-
-;;; ./gengen/gr_packed_to_unpacked_ss.h
-(pass-if (true? (gr:packed-to-unpacked-ss 1 1)))
-
-;;; ./gengen/gr_peak_detector_fb.h
-(pass-if (true? (gr:peak-detector-fb 0.25 0.40 10 0.001)))
-
-;;; ./gengen/gr_peak_detector_ib.h
-(pass-if (true? (gr:peak-detector-ib 0.25 0.40 10 0.001)))
-
-;;; ./gengen/gr_peak_detector_sb.h
-(pass-if (true? (gr:peak-detector-sb 0.25 0.40 10 0.001)))
-
-;;; ./gengen/gr_sample_and_hold_bb.h
-(pass-if (true? (gr:sample-and-hold-bb)))
-
-;;; ./gengen/gr_sample_and_hold_ff.h
-(pass-if (true? (gr:sample-and-hold-ff)))
-
-;;; ./gengen/gr_sample_and_hold_ii.h
-(pass-if (true? (gr:sample-and-hold-ii)))
-
-;;; ./gengen/gr_sample_and_hold_ss.h
-(pass-if (true? (gr:sample-and-hold-ss)))
-
-;;; ./gengen/gr_sig_source_c.h
-(pass-if (true? (gr:sig-source-c 0 0 0 0 0)))
-
-;;; ./gengen/gr_sig_source_f.h
-(pass-if (true? (gr:sig-source-f 0 0 0 0 0)))
-
-;;; ./gengen/gr_sig_source_i.h
-(pass-if (true? (gr:sig-source-i 0 0 0 0 0)))
-
-;;; ./gengen/gr_sig_source_s.h
-(pass-if (true? (gr:sig-source-s 0 0 0 0 0)))
-
-;;; ./gengen/gr_sub_cc.h
-(pass-if (true? (gr:sub-cc 1)))
-
-;;; ./gengen/gr_sub_ff.h
-(pass-if (true? (gr:sub-ff 1)))
-
-;;; ./gengen/gr_sub_ii.h
-(pass-if (true? (gr:sub-ii 1)))
-
-;;; ./gengen/gr_sub_ss.h
-(pass-if (true? (gr:sub-ss 1)))
-
-;;; ./gengen/gr_unpacked_to_packed_bb.h
-(pass-if (true? (gr:unpacked-to-packed-bb 1 1)))
-
-;;; ./gengen/gr_unpacked_to_packed_ii.h
-(pass-if (true? (gr:unpacked-to-packed-ii 1 1)))
-
-;;; ./gengen/gr_unpacked_to_packed_ss.h
-(pass-if (true? (gr:unpacked-to-packed-ss 1 1)))
-
-;;; ./gengen/gr_vector_sink_b.h
-(pass-if (true? (gr:vector-sink-b 1)))
-
-;;; ./gengen/gr_vector_sink_c.h
-(pass-if (true? (gr:vector-sink-c 1)))
-
-;;; ./gengen/gr_vector_sink_f.h
-(pass-if (true? (gr:vector-sink-f 1)))
-
-;;; ./gengen/gr_vector_sink_i.h
-(pass-if (true? (gr:vector-sink-i 1)))
-
-;;; ./gengen/gr_vector_sink_s.h
-(pass-if (true? (gr:vector-sink-s 1)))
-
-;;; ./gengen/gr_vector_source_b.h
-;; (pass-if (true? (gr:vector-source-b #(1 2) #f 1)))
-
-;; ;;; ./gengen/gr_vector_source_c.h
-;; (pass-if (true? (gr:vector-source-c #(1+3i 23+5i) #f 1)))
-
-;; ;;; ./gengen/gr_vector_source_f.h
-;; (pass-if (true? (gr:vector-source-f #(1.0 2.0) #f 1)))
-
-;;; ./gengen/gr_vector_source_i.h
-;; (pass-if (true? (gr:vector-source-i #(1 2) #f 1)))
-
-;;; ./gengen/gr_vector_source_s.h FIXME: not found
-;; (pass-if (true? (gr:vector-source-s #(1 2) #f 1)))
-
-;;; ./gengen/gr_xor_bb.h
-(pass-if (true? (gr:xor-bb)))
-
-;;; ./gengen/gr_xor_ii.h
-(pass-if (true? (gr:xor-ii)))
-
-;;; ./gengen/gr_xor_ss.h
-(pass-if (true? (gr:xor-ss)))
diff --git a/gnuradio-core/src/guile/tests/hier_ctors.test b/gnuradio-core/src/guile/tests/hier_ctors.test
deleted file mode 100644
index b79ee0f15..000000000
--- a/gnuradio-core/src/guile/tests/hier_ctors.test
+++ /dev/null
@@ -1,40 +0,0 @@
-;;; -*- Scheme -*-
-;;;
-;;; 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 this program. If not, see <http://www.gnu.org/licenses/>.
-;;;
-
-;;; If you're using Emacs's Scheme mode:
-;;; (put 'with-test-prefix 'scheme-indent-function 1)
-
-;;; See the comments in gnuradio/test-suite/lib.scm for info on writing tests.
-;;; See also the very end of the file, where the test-equal, test-eqv
-;;; and test-eq macros are defined.
-
-(use-modules (gnuradio test-suite lib))
-(use-modules (gnuradio core))
-(use-modules (oop goops))
-
-;;; Add test code for all constructors in these files
-;;;
-
-;;; ./hier/gr_channel_model.h FIXME: Unbound variable: ~S" (gr:channel_model) #f))
-;; gr_make_channel_model(double noise_voltage=0.0, double frequency_offset=0.0,
-;; double epsilon=1.0,
-;; const std::vector<gr_complex> &taps=std::vector<gr_complex>(1, 1),
-;; double noise_seed=3021);
-;; (pass-if (true? (gr:channel_model 0.0 0.0 1.0 #(1 1) 3021)))
diff --git a/gnuradio-core/src/guile/tests/io_ctors.test b/gnuradio-core/src/guile/tests/io_ctors.test
deleted file mode 100644
index 5f40d321c..000000000
--- a/gnuradio-core/src/guile/tests/io_ctors.test
+++ /dev/null
@@ -1,82 +0,0 @@
-;;; -*- Scheme -*-
-;;;
-;;; 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 this program. If not, see <http://www.gnu.org/licenses/>.
-;;;
-
-;;; If you're using Emacs's Scheme mode:
-;;; (put 'with-test-prefix 'scheme-indent-function 1)
-
-;;; See the comments in gnuradio/test-suite/lib.scm for info on writing tests.
-;;; See also the very end of the file, where the test-equal, test-eqv
-;;; and test-eq macros are defined.
-
-(use-modules (gnuradio test-suite lib))
-(use-modules (gnuradio core))
-(use-modules (oop goops))
-
-
-(define (rm-foo)
- (false-if-exception (delete-file "foo")))
-
-;;; Add test code for all constructors in these files
-;;;
-
-;;; ./io/gr_file_descriptor_sink.h
-(pass-if (true? (gr:file-descriptor-sink 1 (dup 1))))
-
-;;; ./io/gr_file_descriptor_source.h
-(pass-if (true? (gr:file-descriptor-source 1 (dup 0) #f)))
-
-;;; ./io/gr_file_sink.h
-(pass-if (true? (gr:file-sink 1 "foo")))
-
-;;; ./io/gr_file_source.h
-(pass-if (true? (gr:file-source 1 "foo" #f)))
-(rm-foo)
-
-;;; ./io/gr_histo_sink_f.h
-;; gr_make_histo_sink_f (gr_msg_queue_sptr msgq);
-(pass-if (true? (gr:histo-sink-f (gr:msg-queue))))
-
-;;; ./io/gr_message_sink.h
-(pass-if (true? (gr:message-sink 1 (gr:msg-queue) #f)))
-
-;;; ./io/gr_message_source.h
-(pass-if (true? (gr:message-source 1 1)))
-(pass-if (true? (gr:message-source 1 (gr:msg-queue))))
-
-;;; ./io/gr_oscope_sink_f.h
-(pass-if (true? (gr:oscope-sink-f 1000 (gr:msg-queue))))
-
-;;; ./io/gr_udp_sink.h
-;;(pass-if (true? (gr:udp-sink 4 "localhost" 80 1472 #f)))
-;;(pass-if-throw "confirm throw gr:udp-sink" #t
-;; (true? (gr:udp-sink 4 "localhostx" 80 1472 #f)))
-
-;;; ./io/gr_udp_source.h
-;;(pass-if (true? (gr:udp-source 4 "localhost" 0 1472 #f #t)))
-;;(pass-if-throw "confirm throw gr:udp-source" #t
-;; (true? (gr:udp-source 4 "localhostx" 0 1472 #f #t)))
-
-;;; ./io/gr_wavfile_sink.h
-(pass-if (true? (gr:wavfile-sink "foo" 2 48000 16)))
-
-;;; ./io/gr_wavfile_source.h WONTFIX: buggy source won't accept file
-;;; created immediately above.
-;;(pass-if (true? (gr:wavfile-source "foo" #f)))
-(rm-foo)
diff --git a/gnuradio-core/src/lib/.gitignore b/gnuradio-core/src/lib/.gitignore
deleted file mode 100644
index 0d5077da5..000000000
--- a/gnuradio-core/src/lib/.gitignore
+++ /dev/null
@@ -1,7 +0,0 @@
-/Makefile
-/Makefile.in
-/.deps
-/.libs
-/*.la
-/*.lo
-/gnuradio-config-info
diff --git a/gnuradio-core/src/lib/CMakeLists.txt b/gnuradio-core/src/lib/CMakeLists.txt
index 86f88242c..73002ec7b 100644
--- a/gnuradio-core/src/lib/CMakeLists.txt
+++ b/gnuradio-core/src/lib/CMakeLists.txt
@@ -47,10 +47,6 @@ include_directories(${VOLK_INCLUDE_DIRS})
include_directories(${Boost_INCLUDE_DIRS})
link_directories(${Boost_LIBRARY_DIRS})
-add_definitions(${GSL_DEFINITIONS})
-include_directories(${GSL_INCLUDE_DIRS})
-link_directories(${GSL_LIBRARY_DIRS})
-
include_directories(${FFTW3F_INCLUDE_DIRS})
link_directories(${FFTW3F_LIBRARY_DIRS})
@@ -60,7 +56,6 @@ link_directories(${FFTW3F_LIBRARY_DIRS})
list(APPEND gnuradio_core_libs
gruel
${Boost_LIBRARIES}
- ${GSL_LIBRARIES}
${FFTW3F_LIBRARIES}
)
@@ -80,7 +75,6 @@ list(APPEND gnuradio_core_libs volk)
add_library(gnuradio-core SHARED ${gnuradio_core_sources})
target_link_libraries(gnuradio-core ${gnuradio_core_libs})
GR_LIBRARY_FOO(gnuradio-core RUNTIME_COMPONENT "core_runtime" DEVEL_COMPONENT "core_devel")
-#avoid fftw and gsl link in dependent libraries:
set_target_properties(gnuradio-core PROPERTIES LINK_INTERFACE_LIBRARIES "gruel")
########################################################################
diff --git a/gnuradio-core/src/lib/Makefile.am b/gnuradio-core/src/lib/Makefile.am
deleted file mode 100644
index 21e721073..000000000
--- a/gnuradio-core/src/lib/Makefile.am
+++ /dev/null
@@ -1,72 +0,0 @@
-# Copyright 2001,2004,2009,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.
-#
-
-include $(top_srcdir)/Makefile.common
-
-## Process this file with automake to produce Makefile.in
-
-# We've got to build . before swig
-SUBDIRS = missing runtime filter viterbi general gengen reed-solomon io hier . swig
-
-AM_CPPFLAGS = $(STD_DEFINES_AND_INCLUDES) $(CPPUNIT_INCLUDES) $(WITH_INCLUDES)
-
-# generate libgnuradio-core.la from the convenience libraries in subdirs
-
-lib_LTLIBRARIES = libgnuradio-core.la
-noinst_LTLIBRARIES = libgnuradio-core-qa.la
-
-libgnuradio_core_la_SOURCES = bug_work_around_6.cc
-libgnuradio_core_la_LDFLAGS = $(NO_UNDEFINED) $(LTVERSIONFLAGS)
-
-libgnuradio_core_qa_la_SOURCES = bug_work_around_6.cc
-libgnuradio_core_qa_la_LDFLAGS = $(NO_UNDEFINED) -version-info 0:0:0 \
- $(LIBGNURADIO_CORE_EXTRA_LDFLAGS)
-
-
-libgnuradio_core_la_LIBADD = \
- filter/libfilter.la \
- viterbi/libviterbi.la \
- general/libgeneral.la \
- gengen/libgengen.la \
- io/libio.la \
- missing/libmissing.la \
- reed-solomon/librs.la \
- runtime/libruntime.la \
- hier/libhier.la \
- $(GRUEL_LA) \
- $(VOLK_LA) \
- $(FFTW3F_LIBS) \
- $(GSL_LIBS) \
- $(CBLAS_LIBS) \
- $(BOOST_FILESYSTEM_LIB)
-
-libgnuradio_core_qa_la_LIBADD = \
- filter/libfilter-qa.la \
- general/libgeneral-qa.la \
- runtime/libruntime-qa.la \
- libgnuradio-core.la \
- $(CPPUNIT_LIBS)
-
-bin_PROGRAMS = gnuradio-config-info
-gnuradio_config_info_SOURCES = gnuradio-config-info.cc
-gnuradio_config_info_LDADD = libgnuradio-core.la \
- $(BOOST_LDFLAGS) \
- $(BOOST_PROGRAM_OPTIONS_LIB) \
- $(BOOST_FILESYSTEM_LIB)
diff --git a/gnuradio-core/src/lib/filter/.gitignore b/gnuradio-core/src/lib/filter/.gitignore
deleted file mode 100644
index faaf02cb8..000000000
--- a/gnuradio-core/src/lib/filter/.gitignore
+++ /dev/null
@@ -1,226 +0,0 @@
-/Makefile
-/Makefile.in
-/.la
-/.lo
-/.deps
-/.libs
-/*.la
-/*.lo
-/*.pyc
-/generate-stamp
-/#
-/---
-/generate
-/files:
-/don't
-/go
-/in
-/CVS
-/---
-/GrFIRfilterCCC.cc
-/GrFIRfilterCCC.h
-/GrFIRfilterCCF.cc
-/GrFIRfilterCCF.h
-/GrFIRfilterFCC.cc
-/GrFIRfilterFCC.h
-/GrFIRfilterFFF.cc
-/GrFIRfilterFFF.h
-/GrFIRfilterFSF.cc
-/GrFIRfilterFSF.h
-/GrFIRfilterSCC.cc
-/GrFIRfilterSCC.h
-/GrFIRfilterSIS.cc
-/GrFIRfilterSIS.h
-/GrFreqXlatingFIRfilterCCC.cc
-/GrFreqXlatingFIRfilterCCC.h
-/GrFreqXlatingFIRfilterCCF.cc
-/GrFreqXlatingFIRfilterCCF.h
-/GrFreqXlatingFIRfilterFCC.cc
-/GrFreqXlatingFIRfilterFCC.h
-/GrFreqXlatingFIRfilterFCF.cc
-/GrFreqXlatingFIRfilterFCF.h
-/GrFreqXlatingFIRfilterSCC.cc
-/GrFreqXlatingFIRfilterSCC.h
-/GrFreqXlatingFIRfilterSCF.cc
-/GrFreqXlatingFIRfilterSCF.h
-/gr_fir_CCC.cc
-/gr_fir_CCC.h
-/gr_fir_CCC_generic.cc
-/gr_fir_CCC_generic.h
-/gr_fir_CCF.cc
-/gr_fir_CCF.h
-/gr_fir_CCF_generic.cc
-/gr_fir_CCF_generic.h
-/gr_fir_FCC.cc
-/gr_fir_FCC.h
-/gr_fir_FCC_generic.cc
-/gr_fir_FCC_generic.h
-/gr_fir_FFF.cc
-/gr_fir_FFF.h
-/gr_fir_FFF_generic.cc
-/gr_fir_FFF_generic.h
-/gr_fir_FSF.cc
-/gr_fir_FSF.h
-/gr_fir_FSF_generic.cc
-/gr_fir_FSF_generic.h
-/gr_fir_SCC.cc
-/gr_fir_SCC.h
-/gr_fir_SCC_generic.cc
-/gr_fir_SCC_generic.h
-/gr_fir_SIS.cc
-/gr_fir_SIS.h
-/gr_fir_SIS_generic.cc
-/gr_fir_SIS_generic.h
-/gr_fir_sysconfig.cc
-/gr_fir_sysconfig.h
-/gr_fir_sysconfig_generic.cc
-/gr_fir_sysconfig_generic.h
-/gr_fir_util.cc
-/gr_fir_util.h
-/GrFIRfilterCCC.i
-/GrFIRfilterCCF.i
-/GrFIRfilterFCC.i
-/GrFIRfilterFFF.i
-/GrFIRfilterFSF.i
-/GrFIRfilterSCC.i
-/GrFIRfilterSIS.i
-/GrFreqXlatingFIRfilterCCC.i
-/GrFreqXlatingFIRfilterCCF.i
-/GrFreqXlatingFIRfilterFCC.i
-/GrFreqXlatingFIRfilterFCF.i
-/GrFreqXlatingFIRfilterSCC.i
-/GrFreqXlatingFIRfilterSCF.i
-/#
-/---
-/end
-/generated
-/files
-/---
-/filter_generated.i
-/gr_fir_ccc.cc
-/gr_fir_ccc.h
-/gr_fir_ccc_generic.cc
-/gr_fir_ccc_generic.h
-/gr_fir_ccf.cc
-/gr_fir_ccf.h
-/gr_fir_ccf_generic.cc
-/gr_fir_ccf_generic.h
-/gr_fir_fcc.cc
-/gr_fir_fcc.h
-/gr_fir_fcc_generic.cc
-/gr_fir_fcc_generic.h
-/gr_fir_fff.cc
-/gr_fir_fff.h
-/gr_fir_fff_generic.cc
-/gr_fir_fff_generic.h
-/gr_fir_fsf.cc
-/gr_fir_fsf.h
-/gr_fir_fsf_generic.cc
-/gr_fir_fsf_generic.h
-/gr_fir_scc.cc
-/gr_fir_scc.h
-/gr_fir_scc_generic.cc
-/gr_fir_scc_generic.h
-/gr_fir_filter_ccc.cc
-/gr_fir_filter_ccc.h
-/gr_fir_filter_ccc.i
-/gr_fir_filter_ccf.cc
-/gr_fir_filter_ccf.h
-/gr_fir_filter_ccf.i
-/gr_fir_filter_fcc.cc
-/gr_fir_filter_fcc.h
-/gr_fir_filter_fcc.i
-/gr_fir_filter_fff.cc
-/gr_fir_filter_fff.h
-/gr_fir_filter_fff.i
-/gr_fir_filter_fsf.cc
-/gr_fir_filter_fsf.h
-/gr_fir_filter_fsf.i
-/gr_fir_filter_scc.cc
-/gr_fir_filter_scc.h
-/gr_fir_filter_scc.i
-/gr_freq_xlating_fir_filter_ccc.cc
-/gr_freq_xlating_fir_filter_ccc.h
-/gr_freq_xlating_fir_filter_ccc.i
-/gr_freq_xlating_fir_filter_ccf.cc
-/gr_freq_xlating_fir_filter_ccf.h
-/gr_freq_xlating_fir_filter_ccf.i
-/gr_freq_xlating_fir_filter_fcc.cc
-/gr_freq_xlating_fir_filter_fcc.h
-/gr_freq_xlating_fir_filter_fcc.i
-/gr_freq_xlating_fir_filter_fcf.cc
-/gr_freq_xlating_fir_filter_fcf.h
-/gr_freq_xlating_fir_filter_fcf.i
-/gr_freq_xlating_fir_filter_scc.cc
-/gr_freq_xlating_fir_filter_scc.h
-/gr_freq_xlating_fir_filter_scc.i
-/gr_freq_xlating_fir_filter_scf.cc
-/gr_freq_xlating_fir_filter_scf.h
-/gr_freq_xlating_fir_filter_scf.i
-/gr_interp_fir_filter_ccc.cc
-/gr_interp_fir_filter_ccc.h
-/gr_interp_fir_filter_ccc.i
-/gr_interp_fir_filter_ccf.cc
-/gr_interp_fir_filter_ccf.h
-/gr_interp_fir_filter_ccf.i
-/gr_interp_fir_filter_fcc.cc
-/gr_interp_fir_filter_fcc.h
-/gr_interp_fir_filter_fcc.i
-/gr_interp_fir_filter_fff.cc
-/gr_interp_fir_filter_fff.h
-/gr_interp_fir_filter_fff.i
-/gr_interp_fir_filter_fsf.cc
-/gr_interp_fir_filter_fsf.h
-/gr_interp_fir_filter_fsf.i
-/gr_interp_fir_filter_scc.cc
-/gr_interp_fir_filter_scc.h
-/gr_interp_fir_filter_scc.i
-/gr_rational_resampler_ccc.cc
-/gr_rational_resampler_ccc.h
-/gr_rational_resampler_ccc.i
-/gr_rational_resampler_ccf.cc
-/gr_rational_resampler_ccf.h
-/gr_rational_resampler_ccf.i
-/gr_rational_resampler_fcc.cc
-/gr_rational_resampler_fcc.h
-/gr_rational_resampler_fcc.i
-/gr_rational_resampler_fff.cc
-/gr_rational_resampler_fff.h
-/gr_rational_resampler_fff.i
-/gr_rational_resampler_fsf.cc
-/gr_rational_resampler_fsf.h
-/gr_rational_resampler_fsf.i
-/gr_rational_resampler_scc.cc
-/gr_rational_resampler_scc.h
-/gr_rational_resampler_scc.i
-/gr_rational_resampler_base_ccc.cc
-/gr_rational_resampler_base_ccc.h
-/gr_rational_resampler_base_ccc.i
-/gr_rational_resampler_base_ccf.cc
-/gr_rational_resampler_base_ccf.h
-/gr_rational_resampler_base_ccf.i
-/gr_rational_resampler_base_fcc.cc
-/gr_rational_resampler_base_fcc.h
-/gr_rational_resampler_base_fcc.i
-/gr_rational_resampler_base_fff.cc
-/gr_rational_resampler_base_fff.h
-/gr_rational_resampler_base_fff.i
-/gr_rational_resampler_base_fsf.cc
-/gr_rational_resampler_base_fsf.h
-/gr_rational_resampler_base_fsf.i
-/gr_rational_resampler_base_scc.cc
-/gr_rational_resampler_base_scc.h
-/gr_rational_resampler_base_scc.i
-/gri_fir_filter_with_buffer_ccc.cc
-/gri_fir_filter_with_buffer_ccc.h
-/gri_fir_filter_with_buffer_ccf.cc
-/gri_fir_filter_with_buffer_ccf.h
-/gri_fir_filter_with_buffer_fcc.cc
-/gri_fir_filter_with_buffer_fcc.h
-/gri_fir_filter_with_buffer_fff.cc
-/gri_fir_filter_with_buffer_fff.h
-/gri_fir_filter_with_buffer_fsf.cc
-/gri_fir_filter_with_buffer_fsf.h
-/gri_fir_filter_with_buffer_scc.cc
-/gri_fir_filter_with_buffer_scc.h
-/stamp-*
diff --git a/gnuradio-core/src/lib/filter/CMakeLists.txt b/gnuradio-core/src/lib/filter/CMakeLists.txt
index d26e55fb8..02a72191c 100644
--- a/gnuradio-core/src/lib/filter/CMakeLists.txt
+++ b/gnuradio-core/src/lib/filter/CMakeLists.txt
@@ -333,7 +333,7 @@ set(gr_core_filter_triple_threats
gr_single_pole_iir_filter_ff
gr_single_pole_iir_filter_cc
gr_pfb_channelizer_ccf
- gr_pfb_synthesis_filterbank_ccf
+ gr_pfb_synthesizer_ccf
gr_pfb_decimator_ccf
gr_pfb_interpolator_ccf
gr_pfb_arb_resampler_ccf
diff --git a/gnuradio-core/src/lib/filter/Makefile.am b/gnuradio-core/src/lib/filter/Makefile.am
deleted file mode 100644
index c314431bf..000000000
--- a/gnuradio-core/src/lib/filter/Makefile.am
+++ /dev/null
@@ -1,402 +0,0 @@
-#
-# Copyright 2001,2002,2004-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 $(top_srcdir)/Makefile.common
-
-#
-# This directory contains mostly filter routines, plus a few
-# other performance critical items
-#
-
-# $(WITH_INCLUDES) must _always_ be last
-AM_CPPFLAGS = $(STD_DEFINES_AND_INCLUDES) $(CPPUNIT_INCLUDES) \
- $(FFTW3F_CPPFLAGS) $(WITH_INCLUDES)
-
-noinst_LTLIBRARIES = libfilter.la libfilter-qa.la
-
-# ----------------------------------------------------------------
-# these scripts generate FIR code
-#
-
-code_generator = \
- generate_all.py \
- generate_gr_fir_XXX.py \
- generate_gr_fir_filter_XXX.py \
- generate_gr_interp_fir_filter_XXX.py \
- generate_gr_rational_resampler_base_XXX.py \
- generate_gr_fir_sysconfig.py \
- generate_gr_fir_sysconfig_generic.py \
- generate_gr_fir_util.py \
- generate_gr_freq_xlating_fir_filter_XXX.py \
- generate_gri_fir_filter_with_buffer_XXX.py \
- generate_utils.py \
- gr_fir_XXX.cc.t \
- gr_fir_XXX.h.t \
- gr_fir_XXX_generic.cc.t \
- gr_fir_XXX_generic.h.t \
- gr_fir_filter_XXX.cc.t \
- gr_fir_filter_XXX.h.t \
- gr_fir_filter_XXX.i.t \
- gr_interp_fir_filter_XXX.cc.t \
- gr_interp_fir_filter_XXX.h.t \
- gr_interp_fir_filter_XXX.i.t \
- gr_rational_resampler_base_XXX.cc.t \
- gr_rational_resampler_base_XXX.h.t \
- gr_rational_resampler_base_XXX.i.t \
- gr_freq_xlating_fir_filter_XXX.cc.t \
- gr_freq_xlating_fir_filter_XXX.h.t \
- gr_freq_xlating_fir_filter_XXX.i.t \
- gri_fir_filter_with_buffer_XXX.cc.t \
- gri_fir_filter_with_buffer_XXX.h.t
-
-
-# Source built by Python into $(builddir)
-BUILT_SOURCES += \
- $(GENERATED_H) \
- $(GENERATED_I) \
- $(GENERATED_CC) \
- filter_generated.i
-
-# ----------------------------------------------------------------
-# MD_CPU and MD_SUBCPU are set at configure time by way of
-# gnuradio/config/gr_set_md_cpu.m4.
-# It indicates which set of machine dependent code we should be building.
-# We currently implement "generic" and "x86"
-
-#
-# <foo>_CODE entry for each set of machine specific speedups
-#
-
-generic_CODE = \
- sysconfig_generic.cc
-
-generic_qa_CODE = \
- qa_dotprod_generic.cc
-
-x86_CODE = \
- sysconfig_x86.cc \
- gr_fir_sysconfig_x86.cc \
- gr_cpu_x86.cc \
- gr_fir_ccc_simd.cc \
- gr_fir_ccc_x86.cc \
- gr_fir_fff_simd.cc \
- gr_fir_fff_x86.cc \
- gr_fir_fsf_simd.cc \
- gr_fir_fsf_x86.cc \
- gr_fir_scc_simd.cc \
- gr_fir_scc_x86.cc \
- gr_fir_fcc_simd.cc \
- gr_fir_fcc_x86.cc \
- gr_fir_ccf_simd.cc \
- gr_fir_ccf_x86.cc \
- sse_debug.c
-
-x86_SUBCODE = \
- float_dotprod_sse.S \
- float_dotprod_3dnow.S \
- complex_dotprod_3dnowext.S \
- complex_dotprod_3dnow.S \
- complex_dotprod_sse.S \
- ccomplex_dotprod_3dnowext.S \
- ccomplex_dotprod_3dnow.S \
- ccomplex_dotprod_sse.S \
- fcomplex_dotprod_3dnow.S \
- fcomplex_dotprod_sse.S \
- short_dotprod_mmx.S
-
-x86_64_SUBCODE = \
- float_dotprod_sse64.S \
- float_dotprod_3dnow64.S \
- complex_dotprod_3dnowext64.S \
- complex_dotprod_3dnow64.S \
- complex_dotprod_sse64.S \
- ccomplex_dotprod_3dnowext64.S \
- ccomplex_dotprod_3dnow64.S \
- ccomplex_dotprod_sse64.S \
- fcomplex_dotprod_3dnow64.S \
- fcomplex_dotprod_sse64.S \
- short_dotprod_mmx64.S
-
-x86_qa_CODE = \
- qa_dotprod_x86.cc \
- qa_float_dotprod_x86.cc \
- qa_complex_dotprod_x86.cc \
- qa_ccomplex_dotprod_x86.cc
-
-powerpc_CODE = \
- sysconfig_powerpc.cc \
- gr_fir_sysconfig_powerpc.cc \
- gr_cpu_powerpc.cc \
- gr_fir_fff_altivec.cc \
- gr_altivec.c \
- dotprod_fff_altivec.c
-
-powerpc_qa_CODE = \
- qa_dotprod_powerpc.cc
-
-armv7_a_CODE = \
- sysconfig_armv7_a.cc \
- gr_fir_sysconfig_armv7_a.cc \
- gr_cpu_armv7_a.cc \
- gr_fir_fff_armv7_a.cc \
- dotprod_fff_armv7_a.c \
- gr_fir_ccf_armv7_a.cc \
- dotprod_ccf_armv7_a.c
-
-armv7_a_qa_CODE = \
- qa_dotprod_armv7_a.cc
-
-#
-# include each <foo>_CODE entry here...
-#
-EXTRA_libfilter_la_SOURCES = \
- $(generic_CODE) \
- $(generic_qa_CODE) \
- $(x86_CODE) \
- $(x86_SUBCODE) \
- $(x86_64_SUBCODE) \
- $(x86_qa_CODE) \
- $(powerpc_CODE) \
- $(powerpc_qa_CODE) \
- $(armv7_a_CODE) \
- $(armv7_a_qa_CODE)
-
-
-EXTRA_DIST += \
- 3dnow_float_dotprod_really_simple.S \
- 3dnow_float_dotprod_simple.S \
- $(code_generator)
-
-# work around automake deficiency
-libfilter_la_common_SOURCES = \
- $(GENERATED_CC) \
- gr_adaptive_fir_ccc.cc \
- gr_adaptive_fir_ccf.cc \
- gri_fft_filter_fff_generic.cc \
- gri_fft_filter_ccc_generic.cc \
- gr_fft_filter_ccc.cc \
- gr_fft_filter_fff.cc \
- gr_goertzel_fc.cc \
- gr_filter_delay_fc.cc \
- gr_fractional_interpolator_ff.cc \
- gr_fractional_interpolator_cc.cc \
- gr_hilbert_fc.cc \
- gr_iir_filter_ffd.cc \
- gr_sincos.c \
- gr_single_pole_iir_filter_ff.cc \
- gr_single_pole_iir_filter_cc.cc \
- gri_goertzel.cc \
- gri_mmse_fir_interpolator.cc \
- gri_mmse_fir_interpolator_cc.cc \
- complex_dotprod_generic.cc \
- ccomplex_dotprod_generic.cc \
- float_dotprod_generic.c \
- short_dotprod_generic.c \
- gr_pfb_channelizer_ccf.cc \
- gr_pfb_synthesis_filterbank_ccf.cc\
- gr_pfb_decimator_ccf.cc \
- gr_pfb_interpolator_ccf.cc \
- gr_pfb_arb_resampler_ccf.cc \
- gr_pfb_arb_resampler_fff.cc \
- gr_pfb_clock_sync_ccf.cc \
- gr_pfb_clock_sync_fff.cc \
- gr_dc_blocker_cc.cc \
- gr_dc_blocker_ff.cc
-
-libfilter_qa_la_common_SOURCES = \
- qa_filter.cc \
- qa_gr_fir_ccf.cc \
- qa_gr_fir_fcc.cc \
- qa_gr_fir_fff.cc \
- qa_gr_fir_ccc.cc \
- qa_gr_fir_scc.cc \
- qa_gr_rotator.cc \
- qa_gri_mmse_fir_interpolator.cc \
- qa_gri_mmse_fir_interpolator_cc.cc \
- qa_gri_fir_filter_with_buffer_ccf.cc \
- qa_gri_fir_filter_with_buffer_ccc.cc \
- qa_gri_fir_filter_with_buffer_fcc.cc \
- qa_gri_fir_filter_with_buffer_fff.cc \
- qa_gri_fir_filter_with_buffer_fsf.cc \
- qa_gri_fir_filter_with_buffer_scc.cc
-
-if MD_CPU_generic
-libfilter_la_SOURCES = $(libfilter_la_common_SOURCES) $(generic_CODE)
-libfilter_qa_la_SOURCES = $(libfilter_qa_la_common_SOURCES) $(generic_qa_CODE)
-endif
-
-if MD_CPU_x86
-if MD_SUBCPU_x86_64
-libfilter_la_SOURCES = $(libfilter_la_common_SOURCES) $(x86_64_SUBCODE) $(x86_CODE)
-else
-libfilter_la_SOURCES = $(libfilter_la_common_SOURCES) $(x86_SUBCODE) $(x86_CODE)
-endif
-
-libfilter_qa_la_SOURCES = $(libfilter_qa_la_common_SOURCES) $(x86_qa_CODE)
-endif
-
-if MD_CPU_powerpc
-libfilter_la_SOURCES = $(libfilter_la_common_SOURCES) $(powerpc_CODE)
-libfilter_qa_la_SOURCES = $(libfilter_qa_la_common_SOURCES) $(powerpc_qa_CODE)
-endif
-
-if MD_CPU_armv7_a
-libfilter_la_SOURCES = $(libfilter_la_common_SOURCES) $(armv7_a_CODE)
-libfilter_qa_la_SOURCES = $(libfilter_qa_la_common_SOURCES) $(armv7_a_qa_CODE)
-endif
-
-
-grinclude_HEADERS = \
- $(GENERATED_H) \
- complex_dotprod_generic.h \
- complex_dotprod_x86.h \
- fcomplex_dotprod_x86.h \
- ccomplex_dotprod_generic.h \
- ccomplex_dotprod_x86.h \
- float_dotprod_generic.h \
- float_dotprod_x86.h \
- gr_adaptive_fir_ccc.h \
- gr_adaptive_fir_ccf.h \
- gr_altivec.h \
- gr_cpu.h \
- gri_fft_filter_fff_generic.h \
- gri_fft_filter_ccc_generic.h \
- gr_fft_filter_ccc.h \
- gr_fft_filter_fff.h \
- gr_filter_delay_fc.h \
- gr_fir_sysconfig_x86.h \
- gr_fir_sysconfig_powerpc.h \
- gr_fractional_interpolator_ff.h \
- gr_fractional_interpolator_cc.h \
- gr_goertzel_fc.h \
- gr_hilbert_fc.h \
- gr_iir_filter_ffd.h \
- gr_rotator.h \
- gr_sincos.h \
- gr_single_pole_iir.h \
- gr_single_pole_iir_filter_ff.h \
- gr_single_pole_iir_filter_cc.h \
- gr_vec_types.h \
- gri_goertzel.h \
- gri_iir.h \
- gri_mmse_fir_interpolator.h \
- gri_mmse_fir_interpolator_cc.h \
- qa_filter.h \
- short_dotprod_generic.h \
- short_dotprod_x86.h \
- sse_debug.h \
- gr_pfb_channelizer_ccf.h \
- gr_pfb_synthesis_filterbank_ccf.h\
- gr_pfb_decimator_ccf.h \
- gr_pfb_interpolator_ccf.h \
- gr_pfb_arb_resampler_ccf.h \
- gr_pfb_arb_resampler_fff.h \
- gr_pfb_clock_sync_ccf.h \
- gr_pfb_clock_sync_fff.h \
- gr_dc_blocker_cc.h \
- gr_dc_blocker_ff.h
-
-noinst_HEADERS = \
- assembly.h \
- gcc_x86_cpuid.h \
- dotprod_fff_altivec.h \
- dotprod_fff_armv7_a.h \
- dotprod_ccf_armv7_a.h \
- gr_fir_scc_simd.h \
- gr_fir_scc_x86.h \
- gr_fir_fcc_simd.h \
- gr_fir_fcc_x86.h \
- gr_fir_ccf_simd.h \
- gr_fir_ccf_x86.h \
- gr_fir_ccc_simd.h \
- gr_fir_ccc_x86.h \
- gr_fir_fff_altivec.h \
- gr_fir_fff_armv7_a.h \
- gr_fir_ccf_armv7_a.h \
- gr_fir_fff_simd.h \
- gr_fir_fff_x86.h \
- gr_fir_fsf_simd.h \
- gr_fir_fsf_x86.h \
- interpolator_taps.h \
- qa_complex_dotprod_x86.h \
- qa_ccomplex_dotprod_x86.h \
- qa_dotprod.h \
- qa_float_dotprod_x86.h \
- qa_gr_fir_ccf.h \
- qa_gr_fir_fcc.h \
- qa_gr_fir_fff.h \
- qa_gr_fir_ccc.h \
- qa_gr_fir_scc.h \
- qa_gr_rotator.h \
- qa_gri_mmse_fir_interpolator.h \
- qa_gri_mmse_fir_interpolator_cc.h \
- qa_gri_fir_filter_with_buffer_ccf.h \
- qa_gri_fir_filter_with_buffer_ccc.h \
- qa_gri_fir_filter_with_buffer_fcc.h \
- qa_gri_fir_filter_with_buffer_fff.h \
- qa_gri_fir_filter_with_buffer_fsf.h \
- qa_gri_fir_filter_with_buffer_scc.h
-
-
-swiginclude_HEADERS = \
- filter.i \
- filter_generated.i \
- gr_adaptive_fir_ccc.i \
- gr_adaptive_fir_ccf.i \
- gr_fft_filter_ccc.i \
- gr_fft_filter_fff.i \
- gr_filter_delay_fc.i \
- gr_fractional_interpolator_ff.i \
- gr_fractional_interpolator_cc.i \
- gr_goertzel_fc.i \
- gr_hilbert_fc.i \
- gr_iir_filter_ffd.i \
- gr_single_pole_iir_filter_ff.i \
- gr_single_pole_iir_filter_cc.i \
- gr_pfb_channelizer_ccf.i \
- gr_pfb_synthesis_filterbank_ccf.i\
- gr_pfb_decimator_ccf.i \
- gr_pfb_interpolator_ccf.i \
- gr_pfb_arb_resampler_ccf.i \
- gr_pfb_arb_resampler_fff.i \
- gr_pfb_clock_sync_ccf.i \
- gr_pfb_clock_sync_fff.i \
- gr_dc_blocker_cc.i \
- gr_dc_blocker_ff.i \
- $(GENERATED_I)
-
-
-# Do creation and inclusion of other Makefiles last
-
-# include the srcdir's Makefile.gen; doing this creates an implicit
-# dependency between $(srcdir)/Makefile.in and $(srcdir)/Makefile.gen.
-include $(srcdir)/Makefile.gen
-
-# common way for generating local Makefile.gen
-makefile_gen_gen_command = PYTHONPATH=$(top_srcdir)/gnuradio-core/src/python srcdir=$(srcdir) do_makefile=1 do_sources=0 $(PYTHON) $(srcdir)/generate_all.py
-include $(top_srcdir)/Makefile.gen.gen
-
-# common way for generating sources from templates when using
-# BUILT_SOURCES, using parallel build protection.
-gen_sources = $(BUILT_SOURCES)
-gen_sources_deps = $(core_generator)
-par_gen_command = PYTHONPATH=$(top_srcdir)/gnuradio-core/src/python srcdir=$(srcdir) $(PYTHON) $(srcdir)/generate_all.py
-include $(top_srcdir)/Makefile.par.gen
diff --git a/gnuradio-core/src/lib/filter/filter.i b/gnuradio-core/src/lib/filter/filter.i
index 8c3bb9eb6..2b7d9d0b7 100644
--- a/gnuradio-core/src/lib/filter/filter.i
+++ b/gnuradio-core/src/lib/filter/filter.i
@@ -32,7 +32,7 @@
#include <gr_fractional_interpolator_cc.h>
#include <gr_goertzel_fc.h>
#include <gr_pfb_channelizer_ccf.h>
-#include <gr_pfb_synthesis_filterbank_ccf.h>
+#include <gr_pfb_synthesizer_ccf.h>
#include <gr_pfb_decimator_ccf.h>
#include <gr_pfb_interpolator_ccf.h>
#include <gr_pfb_arb_resampler_ccf.h>
@@ -54,7 +54,7 @@
%include "gr_fractional_interpolator_cc.i"
%include "gr_goertzel_fc.i"
%include "gr_pfb_channelizer_ccf.i"
-%include "gr_pfb_synthesis_filterbank_ccf.i"
+%include "gr_pfb_synthesizer_ccf.i"
%include "gr_pfb_decimator_ccf.i"
%include "gr_pfb_interpolator_ccf.i"
%include "gr_pfb_arb_resampler_ccf.i"
diff --git a/gnuradio-core/src/lib/filter/gr_pfb_channelizer_ccf.cc b/gnuradio-core/src/lib/filter/gr_pfb_channelizer_ccf.cc
index db16a634b..a82d3901c 100644
--- a/gnuradio-core/src/lib/filter/gr_pfb_channelizer_ccf.cc
+++ b/gnuradio-core/src/lib/filter/gr_pfb_channelizer_ccf.cc
@@ -46,7 +46,7 @@ gr_pfb_channelizer_ccf::gr_pfb_channelizer_ccf (unsigned int numchans,
float oversample_rate)
: gr_block ("pfb_channelizer_ccf",
gr_make_io_signature (numchans, numchans, sizeof(gr_complex)),
- gr_make_io_signature (1, 1, numchans*sizeof(gr_complex))),
+ gr_make_io_signature (1, numchans, sizeof(gr_complex))),
d_updated (false), d_numchans(numchans), d_oversample_rate(oversample_rate)
{
// The over sampling rate must be rationally related to the number of channels
@@ -62,11 +62,13 @@ gr_pfb_channelizer_ccf::gr_pfb_channelizer_ccf (unsigned int numchans,
set_relative_rate(1.0/intp);
d_filters = std::vector<gr_fir_ccf*>(d_numchans);
+ d_channel_map.resize(d_numchans);
// Create an FIR filter for each channel and zero out the taps
std::vector<float> vtaps(0, d_numchans);
for(unsigned int i = 0; i < d_numchans; i++) {
d_filters[i] = gr_fir_util::create_gr_fir_ccf(vtaps);
+ d_channel_map[i] = i;
}
// Now, actually set the filters' taps
@@ -104,6 +106,7 @@ gr_pfb_channelizer_ccf::~gr_pfb_channelizer_ccf ()
void
gr_pfb_channelizer_ccf::set_taps (const std::vector<float> &taps)
{
+ gruel::scoped_lock guard(d_mutex);
unsigned int i,j;
unsigned int ntaps = taps.size();
@@ -151,6 +154,33 @@ gr_pfb_channelizer_ccf::print_taps()
}
}
+std::vector< std::vector<float> >
+gr_pfb_channelizer_ccf::taps() const
+{
+ return d_taps;
+}
+
+void
+gr_pfb_channelizer_ccf::set_channel_map(const std::vector<int> &map)
+{
+ gruel::scoped_lock guard(d_mutex);
+
+ if(map.size() > 0) {
+ unsigned int max = (unsigned int)*std::max_element(map.begin(), map.end());
+ unsigned int min = (unsigned int)*std::min_element(map.begin(), map.end());
+ if((max >= d_numchans) || (min < 0)) {
+ throw std::invalid_argument("gr_pfb_channelizer_ccf::set_channel_map: map range out of bounds.\n");
+ }
+ d_channel_map = map;
+ }
+}
+
+std::vector<int>
+gr_pfb_channelizer_ccf::channel_map() const
+{
+ return d_channel_map;
+}
+
int
gr_pfb_channelizer_ccf::general_work (int noutput_items,
@@ -158,6 +188,8 @@ gr_pfb_channelizer_ccf::general_work (int noutput_items,
gr_vector_const_void_star &input_items,
gr_vector_void_star &output_items)
{
+ gruel::scoped_lock guard(d_mutex);
+
gr_complex *in = (gr_complex *) input_items[0];
gr_complex *out = (gr_complex *) output_items[0];
@@ -166,7 +198,9 @@ gr_pfb_channelizer_ccf::general_work (int noutput_items,
return 0; // history requirements may have changed.
}
- int n=1, i=-1, j=0, last;
+ size_t noutputs = output_items.size();
+
+ int n=1, i=-1, j=0, oo=0, last;
int toconsume = (int)rintf(noutput_items/d_oversample_rate);
while(n <= toconsume) {
j = 0;
@@ -191,8 +225,13 @@ gr_pfb_channelizer_ccf::general_work (int noutput_items,
// despin through FFT
d_fft->execute();
- memcpy(out, d_fft->get_outbuf(), d_numchans*sizeof(gr_complex));
- out += d_numchans;
+
+ // Send to output channels
+ for(unsigned int nn = 0; nn < noutputs; nn++) {
+ out = (gr_complex*)output_items[nn];
+ out[oo] = d_fft->get_outbuf()[d_channel_map[nn]];
+ }
+ oo++;
}
consume_each(toconsume);
diff --git a/gnuradio-core/src/lib/filter/gr_pfb_channelizer_ccf.h b/gnuradio-core/src/lib/filter/gr_pfb_channelizer_ccf.h
index 8fd5c4f78..040b93e73 100644
--- a/gnuradio-core/src/lib/filter/gr_pfb_channelizer_ccf.h
+++ b/gnuradio-core/src/lib/filter/gr_pfb_channelizer_ccf.h
@@ -26,6 +26,7 @@
#include <gr_core_api.h>
#include <gr_block.h>
+#include <gruel/thread.h>
class gr_pfb_channelizer_ccf;
typedef boost::shared_ptr<gr_pfb_channelizer_ccf> gr_pfb_channelizer_ccf_sptr;
@@ -146,6 +147,8 @@ class GR_CORE_API gr_pfb_channelizer_ccf : public gr_block
int *d_idxlut;
int d_rate_ratio;
int d_output_multiple;
+ std::vector<int> d_channel_map;
+ gruel::mutex d_mutex; // mutex to protect set/work access
/*!
* Build the polyphase filterbank decimator.
@@ -170,6 +173,49 @@ public:
* Print all of the filterbank taps to screen.
*/
void print_taps();
+
+ /*!
+ * Return a vector<vector<>> of the filterbank taps
+ */
+ std::vector<std::vector<float> > taps() const;
+
+ /*!
+ * Set the channel map. Channels are numbers as:
+ *
+ * N/2+1 | ... | N-1 | 0 | 1 | 2 | ... | N/2
+ * <------------------- 0 -------------------->
+ * freq
+ *
+ * So output stream 0 comes from channel 0, etc. Setting a new
+ * channel map allows the user to specify which channel in frequency
+ * he/she wants to got to which output stream.
+ *
+ * The map should have the same number of elements as the number of
+ * output connections from the block. The minimum value of the map
+ * is 0 (for the 0th channel) and the maximum number is N-1 where N
+ * is the number of channels.
+ *
+ * We specify M as the number of output connections made where M <=
+ * N, so only M out of N channels are driven to an output
+ * stream. The number of items in the channel map should be at least
+ * M long. If there are more channels specified, any value in the
+ * map over M-1 will be ignored. If the size of the map is less than
+ * M the behavior is unknown (we don't wish to check every entry
+ * into the work function).
+ *
+ * This means that if the channelizer is splitting the signal up
+ * into N channels but only M channels are specified in the map
+ * (where M <= N), then M output streams must be connected and the
+ * map and the channel numbers used must be less than N-1. Output
+ * channel number can be reused, too. By default, the map is
+ * [0...M-1] with M = N.
+ */
+ void set_channel_map(const std::vector<int> &map);
+
+ /*!
+ * Gets the current channel map.
+ */
+ std::vector<int> channel_map() const;
int general_work (int noutput_items,
gr_vector_int &ninput_items,
diff --git a/gnuradio-core/src/lib/filter/gr_pfb_channelizer_ccf.i b/gnuradio-core/src/lib/filter/gr_pfb_channelizer_ccf.i
index 63e3e0fe6..f5edba5b7 100644
--- a/gnuradio-core/src/lib/filter/gr_pfb_channelizer_ccf.i
+++ b/gnuradio-core/src/lib/filter/gr_pfb_channelizer_ccf.i
@@ -37,4 +37,9 @@ class gr_pfb_channelizer_ccf : public gr_block
~gr_pfb_channelizer_ccf ();
void set_taps (const std::vector<float> &taps);
+ void print_taps();
+ std::vector<std::vector<float> > taps() const;
+
+ void set_channel_map(const std::vector<int> &map);
+ std::vector<int> channel_map() const;
};
diff --git a/gnuradio-core/src/lib/filter/gr_pfb_synthesis_filterbank_ccf.cc b/gnuradio-core/src/lib/filter/gr_pfb_synthesis_filterbank_ccf.cc
deleted file mode 100644
index 9fad1bd0d..000000000
--- a/gnuradio-core/src/lib/filter/gr_pfb_synthesis_filterbank_ccf.cc
+++ /dev/null
@@ -1,169 +0,0 @@
-/* -*- c++ -*- */
-/*
- * 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.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <gr_pfb_synthesis_filterbank_ccf.h>
-#include <gri_fft.h>
-#include <gr_io_signature.h>
-#include <cstdio>
-#include <cstring>
-
-gr_pfb_synthesis_filterbank_ccf_sptr gr_make_pfb_synthesis_filterbank_ccf
- (unsigned int numchans, const std::vector<float> &taps)
-{
- return gr_pfb_synthesis_filterbank_ccf_sptr
- (new gr_pfb_synthesis_filterbank_ccf (numchans, taps));
-}
-
-
-gr_pfb_synthesis_filterbank_ccf::gr_pfb_synthesis_filterbank_ccf
- (unsigned int numchans, const std::vector<float> &taps)
- : gr_sync_interpolator ("pfb_synthesis_filterbank_ccf",
- gr_make_io_signature (1, numchans, sizeof(gr_complex)),
- gr_make_io_signature (1, 1, sizeof(gr_complex)),
- numchans),
- d_updated (false), d_numchans(numchans)
-{
- d_filters = std::vector<gri_fir_filter_with_buffer_ccf*>(d_numchans);
-
- // Create an FIR filter for each channel and zero out the taps
- std::vector<float> vtaps(0, d_numchans);
- for(unsigned int i = 0; i < d_numchans; i++) {
- d_filters[i] = new gri_fir_filter_with_buffer_ccf(vtaps);
- }
-
- // Now, actually set the filters' taps
- set_taps(taps);
-
- // Create the IFFT to handle the input channel rotations
- d_fft = new gri_fft_complex (d_numchans, true);
-}
-
-gr_pfb_synthesis_filterbank_ccf::~gr_pfb_synthesis_filterbank_ccf ()
-{
- for(unsigned int i = 0; i < d_numchans; i++) {
- delete d_filters[i];
- }
-}
-
-void
-gr_pfb_synthesis_filterbank_ccf::set_taps (const std::vector<float> &taps)
-{
- unsigned int i,j;
-
- unsigned int ntaps = taps.size();
- d_taps_per_filter = (unsigned int)ceil((double)ntaps/(double)d_numchans);
-
- // Create d_numchan vectors to store each channel's taps
- d_taps.resize(d_numchans);
-
- // Make a vector of the taps plus fill it out with 0's to fill
- // each polyphase filter with exactly d_taps_per_filter
- std::vector<float> tmp_taps;
- tmp_taps = taps;
- while((float)(tmp_taps.size()) < d_numchans*d_taps_per_filter) {
- tmp_taps.push_back(0.0);
- }
-
- // Partition the filter
- for(i = 0; i < d_numchans; i++) {
- // Each channel uses all d_taps_per_filter with 0's if not enough taps to fill out
- d_taps[i] = std::vector<float>(d_taps_per_filter, 0);
- for(j = 0; j < d_taps_per_filter; j++) {
- d_taps[i][j] = tmp_taps[i + j*d_numchans]; // add taps to channels in reverse order
- }
-
- // Build a filter for each channel and add it's taps to it
- d_filters[i]->set_taps(d_taps[i]);
- }
-
- // Set the history to ensure enough input items for each filter
- set_history (d_taps_per_filter+1);
-
- d_updated = true;
-}
-
-void
-gr_pfb_synthesis_filterbank_ccf::print_taps()
-{
- unsigned int i, j;
- for(i = 0; i < d_numchans; i++) {
- printf("filter[%d]: [", i);
- for(j = 0; j < d_taps_per_filter; j++) {
- printf(" %.4e", d_taps[i][j]);
- }
- printf("]\n\n");
- }
-}
-
-
-int
-gr_pfb_synthesis_filterbank_ccf::work (int noutput_items,
- gr_vector_const_void_star &input_items,
- gr_vector_void_star &output_items)
-{
- gr_complex *in = (gr_complex*) input_items[0];
- gr_complex *out = (gr_complex *) output_items[0];
- int numsigs = input_items.size();
- int ndiff = d_numchans - numsigs;
- unsigned int nhalf = (unsigned int)ceil((float)numsigs/2.0f);
-
- if (d_updated) {
- d_updated = false;
- return 0; // history requirements may have changed.
- }
-
- unsigned int n, i;
- for(n = 0; n < noutput_items/d_numchans; n++) {
- // fill up the populated channels based on the
- // number of real input streams
- for(i = 0; i < nhalf; i++) {
- in = (gr_complex*)input_items[i];
- d_fft->get_inbuf()[i] = (in+i)[n];
- }
-
- // Make the ndiff channels around N/2 0
- for(; i < nhalf+ndiff; i++) {
- d_fft->get_inbuf()[i] = gr_complex(0,0);
- }
-
- // Finish off channels with data
- for(; i < d_numchans; i++) {
- in = (gr_complex*)input_items[i-ndiff];
- d_fft->get_inbuf()[i] = (in+i)[n];
- }
-
- // spin through IFFT
- d_fft->execute();
-
- for(i = 0; i < d_numchans; i++) {
- out[d_numchans-i-1] = d_filters[d_numchans-i-1]->filter(d_fft->get_outbuf()[i]);
- }
-
- out += d_numchans;
- }
-
- return noutput_items;
-}
diff --git a/gnuradio-core/src/lib/filter/gr_pfb_synthesis_filterbank_ccf.h b/gnuradio-core/src/lib/filter/gr_pfb_synthesis_filterbank_ccf.h
deleted file mode 100644
index 1f772b1dd..000000000
--- a/gnuradio-core/src/lib/filter/gr_pfb_synthesis_filterbank_ccf.h
+++ /dev/null
@@ -1,100 +0,0 @@
-/* -*- c++ -*- */
-/*
- * 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.
- */
-
-
-#ifndef INCLUDED_GR_PFB_SYNTHESIS_FILTERBANK_CCF_H
-#define INCLUDED_GR_PFB_SYNTHESIS_FILTERBANK_CCF_H
-
-#include <gr_core_api.h>
-#include <gr_sync_interpolator.h>
-#include <gri_fir_filter_with_buffer_ccf.h>
-
-class gr_pfb_synthesis_filterbank_ccf;
-typedef boost::shared_ptr<gr_pfb_synthesis_filterbank_ccf> gr_pfb_synthesis_filterbank_ccf_sptr;
-GR_CORE_API gr_pfb_synthesis_filterbank_ccf_sptr gr_make_pfb_synthesis_filterbank_ccf
- (unsigned int numchans, const std::vector<float> &taps);
-
-class gri_fft_complex;
-
-
-/*!
- * \class gr_pfb_synthesis_filterbank_ccf
- *
- * \brief Polyphase synthesis filterbank with
- * gr_complex input, gr_complex output and float taps
- *
- * \ingroup filter_blk
- * \ingroup pfb_blk
- */
-
-class GR_CORE_API gr_pfb_synthesis_filterbank_ccf : public gr_sync_interpolator
-{
- private:
- /*!
- * Build the polyphase synthesis filterbank.
- * \param numchans (unsigned integer) Specifies the number of
- channels <EM>M</EM>
- * \param taps (vector/list of floats) The prototype filter to
- populate the filterbank.
- */
- friend GR_CORE_API gr_pfb_synthesis_filterbank_ccf_sptr gr_make_pfb_synthesis_filterbank_ccf
- (unsigned int numchans, const std::vector<float> &taps);
-
- bool d_updated;
- unsigned int d_numchans;
- unsigned int d_taps_per_filter;
- gri_fft_complex *d_fft;
- std::vector< gri_fir_filter_with_buffer_ccf*> d_filters;
- std::vector< std::vector<float> > d_taps;
-
-
- /*!
- * Build the polyphase synthesis filterbank.
- * \param numchans (unsigned integer) Specifies the number of
- channels <EM>M</EM>
- * \param taps (vector/list of floats) The prototype filter
- to populate the filterbank.
- */
- gr_pfb_synthesis_filterbank_ccf (unsigned int numchans,
- const std::vector<float> &taps);
-
-public:
- ~gr_pfb_synthesis_filterbank_ccf ();
-
- /*!
- * Resets the filterbank's filter taps with the new prototype filter
- * \param taps (vector/list of floats) The prototype filter to
- populate the filterbank.
- */
- void set_taps (const std::vector<float> &taps);
-
- /*!
- * Print all of the filterbank taps to screen.
- */
- void print_taps();
-
- int work (int noutput_items,
- gr_vector_const_void_star &input_items,
- gr_vector_void_star &output_items);
-};
-
-#endif
diff --git a/gnuradio-core/src/lib/filter/gr_pfb_synthesizer_ccf.cc b/gnuradio-core/src/lib/filter/gr_pfb_synthesizer_ccf.cc
new file mode 100644
index 000000000..08fbd3df7
--- /dev/null
+++ b/gnuradio-core/src/lib/filter/gr_pfb_synthesizer_ccf.cc
@@ -0,0 +1,286 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2010,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.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gr_pfb_synthesizer_ccf.h>
+#include <gri_fft.h>
+#include <gr_io_signature.h>
+#include <cstdio>
+#include <cstring>
+
+gr_pfb_synthesizer_ccf_sptr gr_make_pfb_synthesizer_ccf
+ (unsigned int numchans, const std::vector<float> &taps, bool twox)
+{
+ return gr_pfb_synthesizer_ccf_sptr
+ (new gr_pfb_synthesizer_ccf (numchans, taps, twox));
+}
+
+
+gr_pfb_synthesizer_ccf::gr_pfb_synthesizer_ccf
+ (unsigned int numchans, const std::vector<float> &taps, bool twox)
+ : gr_sync_interpolator ("pfb_synthesizer_ccf",
+ gr_make_io_signature (1, numchans, sizeof(gr_complex)),
+ gr_make_io_signature (1, 1, sizeof(gr_complex)),
+ numchans),
+ d_updated (false), d_numchans(numchans), d_state(0)
+{
+ // set up 2x multiplier; if twox==True, set to 2, otherwise to 1
+ d_twox = (twox ? 2 : 1);
+ if(d_numchans % d_twox != 0) {
+ throw std::invalid_argument("gr_pfb_synthesizer_ccf: number of channels must be even for 2x oversampling.\n");
+ }
+
+ d_filters = std::vector<gri_fir_filter_with_buffer_ccf*>(d_twox*d_numchans);
+ d_channel_map.resize(d_twox*d_numchans);
+
+ // Create an FIR filter for each channel and zero out the taps
+ std::vector<float> vtaps(0, d_twox*d_numchans);
+ for(unsigned int i = 0; i < d_twox*d_numchans; i++) {
+ d_filters[i] = new gri_fir_filter_with_buffer_ccf(vtaps);
+ d_channel_map[i] = i;
+ }
+
+ // Now, actually set the filters' taps
+ set_taps(taps);
+
+ // Create the IFFT to handle the input channel rotations
+ d_fft = new gri_fft_complex (d_twox*d_numchans, false);
+ memset(d_fft->get_inbuf(), 0, d_twox*d_numchans*sizeof(gr_complex));
+
+ set_output_multiple(d_numchans);
+}
+
+gr_pfb_synthesizer_ccf::~gr_pfb_synthesizer_ccf ()
+{
+ for(unsigned int i = 0; i < d_twox*d_numchans; i++) {
+ delete d_filters[i];
+ }
+}
+
+void
+gr_pfb_synthesizer_ccf::set_taps(const std::vector<float> &taps)
+{
+ gruel::scoped_lock guard(d_mutex);
+ if(d_twox == 1)
+ set_taps1(taps);
+ else
+ set_taps2(taps);
+}
+
+void
+gr_pfb_synthesizer_ccf::set_taps1(const std::vector<float> &taps)
+{
+ unsigned int i,j;
+
+ unsigned int ntaps = taps.size();
+ d_taps_per_filter = (unsigned int)ceil((double)ntaps/(double)d_numchans);
+
+ // Create d_numchan vectors to store each channel's taps
+ d_taps.resize(d_numchans);
+
+ // Make a vector of the taps plus fill it out with 0's to fill
+ // each polyphase filter with exactly d_taps_per_filter
+ std::vector<float> tmp_taps;
+ tmp_taps = taps;
+ while((float)(tmp_taps.size()) < d_numchans*d_taps_per_filter) {
+ tmp_taps.push_back(0.0);
+ }
+
+ // Partition the filter
+ for(i = 0; i < d_numchans; i++) {
+ // Each channel uses all d_taps_per_filter with 0's if not enough taps to fill out
+ d_taps[i] = std::vector<float>(d_taps_per_filter, 0);
+ for(j = 0; j < d_taps_per_filter; j++) {
+ d_taps[i][j] = tmp_taps[i + j*d_numchans]; // add taps to channels in reverse order
+ }
+
+ // Build a filter for each channel and add it's taps to it
+ d_filters[i]->set_taps(d_taps[i]);
+ }
+
+ // Set the history to ensure enough input items for each filter
+ set_history (d_taps_per_filter+1);
+
+ d_updated = true;
+}
+
+void
+gr_pfb_synthesizer_ccf::set_taps2 (const std::vector<float> &taps)
+{
+ unsigned int i,j;
+ int state = 0;
+
+ unsigned int ntaps = taps.size();
+ d_taps_per_filter = (unsigned int)ceil((double)ntaps/(double)d_numchans);
+
+ // Create d_numchan vectors to store each channel's taps
+ d_taps.resize(d_twox*d_numchans);
+
+ // Make a vector of the taps plus fill it out with 0's to fill
+ // each polyphase filter with exactly d_taps_per_filter
+ std::vector<float> tmp_taps;
+ tmp_taps = taps;
+ while((float)(tmp_taps.size()) < d_numchans*d_taps_per_filter) {
+ tmp_taps.push_back(0.0);
+ }
+
+ // Partition the filter
+ for(i = 0; i < d_numchans; i++) {
+ // Each channel uses all d_taps_per_filter with 0's if not enough taps to fill out
+ d_taps[i] = std::vector<float>(d_taps_per_filter, 0);
+ d_taps[d_numchans+i] = std::vector<float>(d_taps_per_filter, 0);
+ state = 0;
+ for(j = 0; j < d_taps_per_filter; j++) {
+ // add taps to channels in reverse order
+ // Zero out every other tap
+ if(state == 0) {
+ d_taps[i][j] = tmp_taps[i + j*d_numchans];
+ d_taps[d_numchans + i][j] = 0;
+ state = 1;
+ }
+ else {
+ d_taps[i][j] = 0;
+ d_taps[d_numchans + i][j] = tmp_taps[i + j*d_numchans];
+ state = 0;
+ }
+ }
+
+ // Build a filter for each channel and add it's taps to it
+ d_filters[i]->set_taps(d_taps[i]);
+ d_filters[d_numchans + i]->set_taps(d_taps[d_numchans + i]);
+ }
+
+ // Set the history to ensure enough input items for each filter
+ set_history (d_taps_per_filter+1);
+
+ d_updated = true;
+}
+
+void
+gr_pfb_synthesizer_ccf::print_taps()
+{
+ unsigned int i, j;
+ for(i = 0; i < d_twox*d_numchans; i++) {
+ printf("filter[%d]: [", i);
+ for(j = 0; j < d_taps_per_filter; j++) {
+ printf(" %.4e", d_taps[i][j]);
+ }
+ printf("]\n\n");
+ }
+}
+
+
+std::vector< std::vector<float> >
+gr_pfb_synthesizer_ccf::taps() const
+{
+ return d_taps;
+}
+
+void
+gr_pfb_synthesizer_ccf::set_channel_map(const std::vector<int> &map)
+{
+ gruel::scoped_lock guard(d_mutex);
+
+ if(map.size() > 0) {
+ unsigned int max = (unsigned int)*std::max_element(map.begin(), map.end());
+ unsigned int min = (unsigned int)*std::min_element(map.begin(), map.end());
+ if((max >= d_twox*d_numchans) || (min < 0)) {
+ throw std::invalid_argument("gr_pfb_synthesizer_ccf::set_channel_map: map range out of bounds.\n");
+ }
+ d_channel_map = map;
+
+ // Zero out fft buffer so that unused channels are always 0
+ memset(d_fft->get_inbuf(), 0,d_twox*d_numchans*sizeof(gr_complex));
+ }
+}
+
+std::vector<int>
+gr_pfb_synthesizer_ccf::channel_map() const
+{
+ return d_channel_map;
+}
+
+int
+gr_pfb_synthesizer_ccf::work (int noutput_items,
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items)
+{
+ gruel::scoped_lock guard(d_mutex);
+
+ gr_complex *in = (gr_complex*) input_items[0];
+ gr_complex *out = (gr_complex *) output_items[0];
+
+ if (d_updated) {
+ d_updated = false;
+ return 0; // history requirements may have changed.
+ }
+
+ unsigned int n, i;
+ size_t ninputs = input_items.size();
+
+ // Algoritm for critically sampled channels
+ if(d_twox == 1) {
+ for(n = 0; n < noutput_items/d_numchans; n++) {
+ for(i = 0; i < ninputs; i++) {
+ in = (gr_complex*)input_items[i];
+ d_fft->get_inbuf()[d_channel_map[i]] = in[n];
+ }
+
+ // spin through IFFT
+ d_fft->execute();
+
+ for(i = 0; i < d_numchans; i++) {
+ out[i] = d_filters[i]->filter(d_fft->get_outbuf()[i]);
+ }
+ out += d_numchans;
+ }
+ }
+
+ // Algorithm for oversampling by 2x
+ else {
+ for(n = 0; n < noutput_items/d_numchans; n++) {
+ for(i = 0; i < ninputs; i++) {
+ in = (gr_complex*)input_items[i];
+ d_fft->get_inbuf()[d_channel_map[i]] = in[n];
+ }
+
+ // spin through IFFT
+ d_fft->execute();
+
+ // Output is sum of two filters, but the input buffer to the filters must be circularly
+ // shifted by numchans every time through, done by using d_state to determine which IFFT
+ // buffer position to pull from.
+ for(i = 0; i < d_numchans; i++) {
+ out[i] = d_filters[i]->filter(d_fft->get_outbuf()[d_state*d_numchans+i]);
+ out[i] += d_filters[d_numchans+i]->filter(d_fft->get_outbuf()[(d_state^1)*d_numchans+i]);
+ }
+ d_state ^= 1;
+
+ out += d_numchans;
+ }
+ }
+
+ return noutput_items;
+}
diff --git a/gnuradio-core/src/lib/filter/gr_pfb_synthesizer_ccf.h b/gnuradio-core/src/lib/filter/gr_pfb_synthesizer_ccf.h
new file mode 100644
index 000000000..4c127b22f
--- /dev/null
+++ b/gnuradio-core/src/lib/filter/gr_pfb_synthesizer_ccf.h
@@ -0,0 +1,147 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2010,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.
+ */
+
+
+#ifndef INCLUDED_GR_PFB_SYNTHESIZER_CCF_H
+#define INCLUDED_GR_PFB_SYNTHESIZER_CCF_H
+
+#include <gr_core_api.h>
+#include <gr_sync_interpolator.h>
+#include <gri_fir_filter_with_buffer_ccf.h>
+#include <gruel/thread.h>
+
+class gr_pfb_synthesizer_ccf;
+typedef boost::shared_ptr<gr_pfb_synthesizer_ccf> gr_pfb_synthesizer_ccf_sptr;
+GR_CORE_API gr_pfb_synthesizer_ccf_sptr gr_make_pfb_synthesizer_ccf
+ (unsigned int numchans, const std::vector<float> &taps, bool twox=false);
+
+class gri_fft_complex;
+
+
+/*!
+ * \class gr_pfb_synthesizer_ccf
+ *
+ * \brief Polyphase synthesis filterbank with
+ * gr_complex input, gr_complex output and float taps
+ *
+ * \ingroup filter_blk
+ * \ingroup pfb_blk
+ */
+
+class GR_CORE_API gr_pfb_synthesizer_ccf : public gr_sync_interpolator
+{
+ private:
+ /*!
+ * Build the polyphase synthesis filterbank.
+ * \param numchans (unsigned integer) Specifies the number of
+ channels <EM>M</EM>
+ * \param taps (vector/list of floats) The prototype filter to
+ populate the filterbank.
+ * \param twox (bool) use 2x oversampling or not (default is no)
+ */
+ friend GR_CORE_API gr_pfb_synthesizer_ccf_sptr gr_make_pfb_synthesizer_ccf
+ (unsigned int numchans, const std::vector<float> &taps, bool twox);
+
+ bool d_updated;
+ unsigned int d_numchans;
+ unsigned int d_taps_per_filter;
+ gri_fft_complex *d_fft;
+ std::vector< gri_fir_filter_with_buffer_ccf*> d_filters;
+ std::vector< std::vector<float> > d_taps;
+ int d_state;
+ std::vector<int> d_channel_map;
+ unsigned int d_twox;
+ gruel::mutex d_mutex; // mutex to protect set/work access
+
+ /*!
+ * \brief Tap setting algorithm for critically sampled channels
+ */
+ void set_taps1(const std::vector<float> &taps);
+
+ /*!
+ * \brief Tap setting algorithm for 2x over-sampled channels
+ */
+ void set_taps2(const std::vector<float> &taps);
+
+ /*!
+ * Build the polyphase synthesis filterbank.
+ * \param numchans (unsigned integer) Specifies the number of
+ channels <EM>M</EM>
+ * \param taps (vector/list of floats) The prototype filter
+ to populate the filterbank.
+ * \param twox (bool) use 2x oversampling or not (default is no)
+ */
+ gr_pfb_synthesizer_ccf (unsigned int numchans,
+ const std::vector<float> &taps,
+ bool twox);
+
+public:
+ ~gr_pfb_synthesizer_ccf ();
+
+ /*!
+ * Resets the filterbank's filter taps with the new prototype filter
+ * \param taps (vector/list of floats) The prototype filter to
+ populate the filterbank.
+ */
+ void set_taps (const std::vector<float> &taps);
+
+ /*!
+ * Print all of the filterbank taps to screen.
+ */
+ void print_taps();
+
+ /*!
+ * Return a vector<vector<>> of the filterbank taps
+ */
+ std::vector<std::vector<float> > taps() const;
+
+ /*!
+ * Set the channel map. Channels are numbers as:
+ * N/2+1 | ... | N-1 | 0 | 1 | 2 | ... | N/2
+ * <------------------- 0 -------------------->
+ * freq
+ *
+ * So input stream 0 goes to channel 0, etc. Setting a new channel
+ * map allows the user to specify where in frequency he/she wants
+ * the input stream to go. This is especially useful to avoid
+ * putting signals into the channels on the edge of the spectrum
+ * which can either wrap around (in the case of odd number of
+ * channels) and be affected by filter rolloff in the transmitter.
+ *
+ * The map must be at least the number of streams being sent to the
+ * block. Less and the algorithm will not have enough data to
+ * properly setup the buffers. Any more channels specified will be
+ * ignored.
+ */
+ void set_channel_map(const std::vector<int> &map);
+
+ /*!
+ * Gets the current channel map.
+ */
+ std::vector<int> channel_map() const;
+
+ int work (int noutput_items,
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items);
+};
+
+#endif
diff --git a/gnuradio-core/src/lib/filter/gr_pfb_synthesis_filterbank_ccf.i b/gnuradio-core/src/lib/filter/gr_pfb_synthesizer_ccf.i
index 02a9f0255..1e2c057ba 100644
--- a/gnuradio-core/src/lib/filter/gr_pfb_synthesis_filterbank_ccf.i
+++ b/gnuradio-core/src/lib/filter/gr_pfb_synthesizer_ccf.i
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2010 Free Software Foundation, Inc.
+ * Copyright 2010,2012 Free Software Foundation, Inc.
*
* This file is part of GNU Radio
*
@@ -20,19 +20,25 @@
* Boston, MA 02110-1301, USA.
*/
-GR_SWIG_BLOCK_MAGIC(gr,pfb_synthesis_filterbank_ccf);
+GR_SWIG_BLOCK_MAGIC(gr,pfb_synthesizer_ccf);
-gr_pfb_synthesis_filterbank_ccf_sptr gr_make_pfb_synthesis_filterbank_ccf
- (unsigned int numchans, const std::vector<float> &taps);
+gr_pfb_synthesizer_ccf_sptr gr_make_pfb_synthesizer_ccf
+ (unsigned int numchans, const std::vector<float> &taps, bool twox=false);
-class gr_pfb_synthesis_filterbank_ccf : public gr_sync_interpolator
+class gr_pfb_synthesizer_ccf : public gr_sync_interpolator
{
private:
- gr_pfb_synthesis_filterbank_ccf (unsigned int numchans,
- const std::vector<float> &taps);
-
+ gr_pfb_synthesizer_ccf (unsigned int numchans,
+ const std::vector<float> &taps,
+ bool twox=false);
+
public:
- ~gr_pfb_synthesis_filterbank_ccf ();
+ ~gr_pfb_synthesizer_ccf ();
void set_taps (const std::vector<float> &taps);
+ void print_taps();
+ std::vector< std::vector<float> > taps() const;
+
+ void set_channel_map(const std::vector<int> &map);
+ std::vector<int> channel_map() const;
};
diff --git a/gnuradio-core/src/lib/general/.gitignore b/gnuradio-core/src/lib/general/.gitignore
deleted file mode 100644
index 795dc793c..000000000
--- a/gnuradio-core/src/lib/general/.gitignore
+++ /dev/null
@@ -1,308 +0,0 @@
-/Makefile
-/Makefile.in
-/.la
-/.lo
-/.deps
-/.libs
-/*.la
-/*.lo
-/*.pyc
-/generate-stamp
-/gr_constants.cc
-/GrFIRfilterCCC.cc
-/GrFIRfilterCCC.h
-/GrFIRfilterCCF.cc
-/GrFIRfilterCCF.h
-/GrFIRfilterFCC.cc
-/GrFIRfilterFCC.h
-/GrFIRfilterFFF.cc
-/GrFIRfilterFFF.h
-/GrFIRfilterFSF.cc
-/GrFIRfilterFSF.h
-/GrFIRfilterSCC.cc
-/GrFIRfilterSCC.h
-/GrFIRfilterSIS.cc
-/GrFIRfilterSIS.h
-/GrFreqXlatingFIRfilterCCC.cc
-/GrFreqXlatingFIRfilterCCC.h
-/GrFreqXlatingFIRfilterCCF.cc
-/GrFreqXlatingFIRfilterCCF.h
-/GrFreqXlatingFIRfilterFCC.cc
-/GrFreqXlatingFIRfilterFCC.h
-/GrFreqXlatingFIRfilterFCF.cc
-/GrFreqXlatingFIRfilterFCF.h
-/GrFreqXlatingFIRfilterSCC.cc
-/GrFreqXlatingFIRfilterSCC.h
-/GrFreqXlatingFIRfilterSCF.cc
-/GrFreqXlatingFIRfilterSCF.h
-/gr_fir_CCC.cc
-/gr_fir_CCC.h
-/gr_fir_CCC_generic.cc
-/gr_fir_CCC_generic.h
-/gr_fir_CCF.cc
-/gr_fir_CCF.h
-/gr_fir_CCF_generic.cc
-/gr_fir_CCF_generic.h
-/gr_fir_FCC.cc
-/gr_fir_FCC.h
-/gr_fir_FCC_generic.cc
-/gr_fir_FCC_generic.h
-/gr_fir_FFF.cc
-/gr_fir_FFF.h
-/gr_fir_FFF_generic.cc
-/gr_fir_FFF_generic.h
-/gr_fir_FSF.cc
-/gr_fir_FSF.h
-/gr_fir_FSF_generic.cc
-/gr_fir_FSF_generic.h
-/gr_fir_SCC.cc
-/gr_fir_SCC.h
-/gr_fir_SCC_generic.cc
-/gr_fir_SCC_generic.h
-/gr_fir_SIS.cc
-/gr_fir_SIS.h
-/gr_fir_SIS_generic.cc
-/gr_fir_SIS_generic.h
-/gr_fir_sysconfig.cc
-/gr_fir_sysconfig.h
-/gr_fir_sysconfig_generic.cc
-/gr_fir_sysconfig_generic.h
-/gr_fir_util.cc
-/gr_fir_util.h
-/GrFIRfilterCCC.i
-/GrFIRfilterCCF.i
-/GrFIRfilterFCC.i
-/GrFIRfilterFFF.i
-/GrFIRfilterFSF.i
-/GrFIRfilterSCC.i
-/GrFIRfilterSIS.i
-/GrFreqXlatingFIRfilterCCC.i
-/GrFreqXlatingFIRfilterCCF.i
-/GrFreqXlatingFIRfilterFCC.i
-/GrFreqXlatingFIRfilterFCF.i
-/GrFreqXlatingFIRfilterSCC.i
-/GrFreqXlatingFIRfilterSCF.i
-/# --- generated files ---
-/gr_add_cc.cc
-/gr_add_cc.h
-/gr_add_cc.i
-/gr_add_const_c.cc
-/gr_add_const_c.h
-/gr_add_const_c.i
-/gr_add_const_cc.cc
-/gr_add_const_cc.h
-/gr_add_const_cc.i
-/gr_add_const_f.cc
-/gr_add_const_f.h
-/gr_add_const_f.i
-/gr_add_const_ff.cc
-/gr_add_const_ff.h
-/gr_add_const_ff.i
-/gr_add_const_i.cc
-/gr_add_const_i.h
-/gr_add_const_i.i
-/gr_add_const_ii.cc
-/gr_add_const_ii.h
-/gr_add_const_ii.i
-/gr_add_const_s.cc
-/gr_add_const_s.h
-/gr_add_const_s.i
-/gr_add_const_sf.cc
-/gr_add_const_sf.h
-/gr_add_const_sf.i
-/gr_add_const_ss.cc
-/gr_add_const_ss.h
-/gr_add_const_ss.i
-/gr_add_const_vcc.cc
-/gr_add_const_vcc.h
-/gr_add_const_vcc.i
-/gr_add_const_vff.cc
-/gr_add_const_vff.h
-/gr_add_const_vff.i
-/gr_add_const_vii.cc
-/gr_add_const_vii.h
-/gr_add_const_vii.i
-/gr_add_const_vss.cc
-/gr_add_const_vss.h
-/gr_add_const_vss.i
-/gr_add_ii.cc
-/gr_add_ii.h
-/gr_add_ii.i
-/gr_add_ss.cc
-/gr_add_ss.h
-/gr_add_ss.i
-/gr_add_vcc.cc
-/gr_add_vcc.h
-/gr_add_vcc.i
-/gr_add_vff.cc
-/gr_add_vff.h
-/gr_add_vff.i
-/gr_add_vii.cc
-/gr_add_vii.h
-/gr_add_vii.i
-/gr_add_vss.cc
-/gr_add_vss.h
-/gr_add_vss.i
-/gr_divide_cc.cc
-/gr_divide_cc.h
-/gr_divide_cc.i
-/gr_divide_ff.cc
-/gr_divide_ff.h
-/gr_divide_ff.i
-/gr_divide_ii.cc
-/gr_divide_ii.h
-/gr_divide_ii.i
-/gr_divide_ss.cc
-/gr_divide_ss.h
-/gr_divide_ss.i
-/gr_multiply_const_ii.cc
-/gr_multiply_const_ii.h
-/gr_multiply_const_ii.i
-/gr_multiply_const_ss.cc
-/gr_multiply_const_ss.h
-/gr_multiply_const_ss.i
-/gr_multiply_ii.cc
-/gr_multiply_ii.h
-/gr_multiply_ii.i
-/gr_multiply_ss.cc
-/gr_multiply_ss.h
-/gr_multiply_ss.i
-/gr_multiply_vcc.cc
-/gr_multiply_vcc.h
-/gr_multiply_vcc.i
-/gr_multiply_vff.cc
-/gr_multiply_vff.h
-/gr_multiply_vff.i
-/gr_multiply_vii.cc
-/gr_multiply_vii.h
-/gr_multiply_vii.i
-/gr_multiply_vss.cc
-/gr_multiply_vss.h
-/gr_multiply_vss.i
-/gr_multiply_const_vcc.cc
-/gr_multiply_const_vcc.h
-/gr_multiply_const_vcc.i
-/gr_multiply_const_vff.cc
-/gr_multiply_const_vff.h
-/gr_multiply_const_vff.i
-/gr_multiply_const_vii.cc
-/gr_multiply_const_vii.h
-/gr_multiply_const_vii.i
-/gr_multiply_const_vss.cc
-/gr_multiply_const_vss.h
-/gr_multiply_const_vss.i
-/gr_noise_source_c.cc
-/gr_noise_source_c.h
-/gr_noise_source_c.i
-/gr_noise_source_f.cc
-/gr_noise_source_f.h
-/gr_noise_source_f.i
-/gr_noise_source_i.cc
-/gr_noise_source_i.h
-/gr_noise_source_i.i
-/gr_noise_source_s.cc
-/gr_noise_source_s.h
-/gr_noise_source_s.i
-/gr_sig_source_c.cc
-/gr_sig_source_c.h
-/gr_sig_source_c.i
-/gr_sig_source_f.cc
-/gr_sig_source_f.h
-/gr_sig_source_f.i
-/gr_sig_source_i.cc
-/gr_sig_source_i.h
-/gr_sig_source_i.i
-/gr_sig_source_s.cc
-/gr_sig_source_s.h
-/gr_sig_source_s.i
-/gr_sub_cc.cc
-/gr_sub_cc.h
-/gr_sub_cc.i
-/gr_sub_ff.cc
-/gr_sub_ff.h
-/gr_sub_ff.i
-/gr_sub_ii.cc
-/gr_sub_ii.h
-/gr_sub_ii.i
-/gr_sub_ss.cc
-/gr_sub_ss.h
-/gr_sub_ss.i
-/gr_vector_sink_b.cc
-/gr_vector_sink_b.h
-/gr_vector_sink_b.i
-/gr_vector_sink_c.cc
-/gr_vector_sink_c.h
-/gr_vector_sink_c.i
-/gr_vector_sink_f.cc
-/gr_vector_sink_f.h
-/gr_vector_sink_f.i
-/gr_vector_sink_i.cc
-/gr_vector_sink_i.h
-/gr_vector_sink_i.i
-/gr_vector_sink_s.cc
-/gr_vector_sink_s.h
-/gr_vector_sink_s.i
-/gr_vector_source_b.cc
-/gr_vector_source_b.h
-/gr_vector_source_b.i
-/gr_vector_source_c.cc
-/gr_vector_source_c.h
-/gr_vector_source_c.i
-/gr_vector_source_f.cc
-/gr_vector_source_f.h
-/gr_vector_source_f.i
-/gr_vector_source_i.cc
-/gr_vector_source_i.h
-/gr_vector_source_i.i
-/gr_vector_source_s.cc
-/gr_vector_source_s.h
-/gr_vector_source_s.i
-/gr_mute_cc.cc
-/gr_mute_cc.h
-/gr_mute_cc.i
-/gr_mute_ff.cc
-/gr_mute_ff.h
-/gr_mute_ff.i
-/gr_mute_ii.cc
-/gr_mute_ii.h
-/gr_mute_ii.i
-/gr_mute_ss.cc
-/gr_mute_ss.h
-/gr_mute_ss.i
-/gr_chunks_to_symbols_bc.cc
-/gr_chunks_to_symbols_bc.h
-/gr_chunks_to_symbols_bc.i
-/gr_chunks_to_symbols_bf.cc
-/gr_chunks_to_symbols_bf.h
-/gr_chunks_to_symbols_bf.i
-/gr_chunks_to_symbols_ic.cc
-/gr_chunks_to_symbols_ic.h
-/gr_chunks_to_symbols_ic.i
-/gr_chunks_to_symbols_if.cc
-/gr_chunks_to_symbols_if.h
-/gr_chunks_to_symbols_if.i
-/gr_chunks_to_symbols_sc.cc
-/gr_chunks_to_symbols_sc.h
-/gr_chunks_to_symbols_sc.i
-/gr_chunks_to_symbols_sf.cc
-/gr_chunks_to_symbols_sf.h
-/gr_chunks_to_symbols_sf.i
-/gr_packed_to_unpacked_bb.cc
-/gr_packed_to_unpacked_bb.h
-/gr_packed_to_unpacked_bb.i
-/gr_packed_to_unpacked_ii.cc
-/gr_packed_to_unpacked_ii.h
-/gr_packed_to_unpacked_ii.i
-/gr_packed_to_unpacked_ss.cc
-/gr_packed_to_unpacked_ss.h
-/gr_packed_to_unpacked_ss.i
-/gr_unpacked_to_packed_bb.cc
-/gr_unpacked_to_packed_bb.h
-/gr_unpacked_to_packed_bb.i
-/gr_unpacked_to_packed_ii.cc
-/gr_unpacked_to_packed_ii.h
-/gr_unpacked_to_packed_ii.i
-/gr_unpacked_to_packed_ss.cc
-/gr_unpacked_to_packed_ss.h
-/gr_unpacked_to_packed_ss.i
-/# --- end generated files ---
diff --git a/gnuradio-core/src/lib/general/CMakeLists.txt b/gnuradio-core/src/lib/general/CMakeLists.txt
index 2bc639cd3..207d85c4c 100644
--- a/gnuradio-core/src/lib/general/CMakeLists.txt
+++ b/gnuradio-core/src/lib/general/CMakeLists.txt
@@ -252,7 +252,6 @@ set(gr_core_general_triple_threats
gr_probe_avg_mag_sqrd_c
gr_probe_avg_mag_sqrd_cf
gr_probe_avg_mag_sqrd_f
- gr_probe_signal_f
gr_pwr_squelch_cc
gr_pwr_squelch_ff
gr_quadrature_demod_cf
@@ -268,7 +267,6 @@ set(gr_core_general_triple_threats
gr_simple_framer
gr_simple_squelch_cc
gr_skiphead
- gr_squash_ff
gr_squelch_base_cc
gr_squelch_base_ff
gr_stream_mux
@@ -286,11 +284,8 @@ set(gr_core_general_triple_threats
gr_vector_to_stream
gr_vector_to_streams
gr_unpack_k_bits_bb
- gr_wavelet_ff
- gr_wvps_ff
gr_descrambler_bb
gr_scrambler_bb
- gr_probe_mpsk_snr_c
gr_probe_density_b
gr_annotator_alltoall
gr_annotator_1to1
diff --git a/gnuradio-core/src/lib/general/Makefile.am b/gnuradio-core/src/lib/general/Makefile.am
deleted file mode 100644
index 5b4a702e1..000000000
--- a/gnuradio-core/src/lib/general/Makefile.am
+++ /dev/null
@@ -1,494 +0,0 @@
-#
-# Copyright 2001,2002,2004,2006-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 $(top_srcdir)/Makefile.common
-
-# $(WITH_INCLUDES) must _always_ be last
-AM_CPPFLAGS = $(STD_DEFINES_AND_INCLUDES) $(CPPUNIT_INCLUDES) \
- $(FFTW3F_CPPFLAGS) $(GSL_CPPFLAGS) $(WITH_INCLUDES)
-
-noinst_LTLIBRARIES = libgeneral.la libgeneral-qa.la
-
-BUILT_SOURCES =
-
-# ----------------------------------------------------------------
-
-EXTRA_DIST += \
- gen_sine_table.py \
- gr_constants.cc.in
-
-libgeneral_la_SOURCES = \
- complex_vec_test.cc \
- gr_add_ff.cc \
- gr_additive_scrambler_bb.cc \
- gr_agc_cc.cc \
- gr_agc_ff.cc \
- gr_agc2_cc.cc \
- gr_agc2_ff.cc \
- gr_align_on_samplenumbers_ss.cc \
- gr_bin_statistics_f.cc \
- gr_bytes_to_syms.cc \
- gr_char_to_float.cc \
- gr_char_to_short.cc \
- gr_check_counting_s.cc \
- gr_check_lfsr_32k_s.cc \
- gr_circular_file.cc \
- gr_complex_to_interleaved_short.cc \
- gr_complex_to_xxx.cc \
- gr_conjugate_cc.cc \
- gr_copy.cc \
- gr_count_bits.cc \
- gr_cpfsk_bc.cc \
- gr_cpm.cc \
- gr_ctcss_squelch_ff.cc \
- gr_decode_ccsds_27_fb.cc \
- gr_deinterleave.cc \
- gr_delay.cc \
- gr_diff_decoder_bb.cc \
- gr_diff_encoder_bb.cc \
- gr_diff_phasor_cc.cc \
- gr_dpll_bb.cc \
- gr_encode_ccsds_27_bb.cc \
- gr_fake_channel_coder_pp.cc \
- gr_fast_atan2f.cc \
- gr_feedforward_agc_cc.cc \
- gr_feval.cc \
- gr_fft_vcc.cc \
- gr_fft_vcc_fftw.cc \
- gr_fft_vfc.cc \
- gr_firdes.cc \
- gr_float_to_char.cc \
- gr_float_to_complex.cc \
- gr_float_to_int.cc \
- gr_float_to_short.cc \
- gr_float_to_uchar.cc \
- gr_fmdet_cf.cc \
- gr_frequency_modulator_fc.cc \
- gr_fxpt.cc \
- gr_framer_sink_1.cc \
- gr_glfsr_source_b.cc \
- gr_glfsr_source_f.cc \
- gr_head.cc \
- gr_interleave.cc \
- gr_interleaved_short_to_complex.cc \
- gr_iqcomp_cc.cc \
- gr_keep_one_in_n.cc \
- gr_kludge_copy.cc \
- gr_lfsr_32k_source_s.cc \
- gr_map_bb.cc \
- gr_misc.cc \
- gr_multiply_cc.cc \
- gr_multiply_ff.cc \
- gr_multiply_const_cc.cc \
- gr_multiply_const_ff.cc \
- gr_multiply_conjugate_cc.cc \
- gr_nlog10_ff.cc \
- gr_nop.cc \
- gr_null_sink.cc \
- gr_null_source.cc \
- gr_pa_2x2_phase_combiner.cc \
- gr_packet_sink.cc \
- gr_peak_detector2_fb.cc \
- gr_phase_modulator_fc.cc \
- gr_pll_carriertracking_cc.cc \
- gr_pll_freqdet_cf.cc \
- gr_pll_refout_cc.cc \
- gr_pn_correlator_cc.cc \
- gr_constants.cc \
- gr_prefs.cc \
- gr_probe_avg_mag_sqrd_c.cc \
- gr_probe_avg_mag_sqrd_cf.cc \
- gr_probe_avg_mag_sqrd_f.cc \
- gr_probe_signal_f.cc \
- gr_pwr_squelch_cc.cc \
- gr_pwr_squelch_ff.cc \
- gr_quadrature_demod_cf.cc \
- gr_rail_ff.cc \
- gr_random.cc \
- gr_regenerate_bb.cc \
- gr_remez.cc \
- gr_repeat.cc \
- gr_reverse.cc \
- gr_rms_cf.cc \
- gr_rms_ff.cc \
- gr_short_to_char.cc \
- gr_short_to_float.cc \
- gr_int_to_float.cc \
- gr_simple_correlator.cc \
- gr_simple_framer.cc \
- gr_simple_squelch_cc.cc \
- gr_skiphead.cc \
- gr_squash_ff.cc \
- gr_squelch_base_cc.cc \
- gr_squelch_base_ff.cc \
- gr_stream_mux.cc \
- gr_stream_to_streams.cc \
- gr_stream_to_vector.cc \
- gr_streams_to_stream.cc \
- gr_streams_to_vector.cc \
- gr_stretch_ff.cc \
- gr_test.cc \
- gr_threshold_ff.cc \
- gr_throttle.cc \
- gr_transcendental.cc \
- gr_uchar_to_float.cc \
- gr_vco_f.cc \
- gr_vector_to_stream.cc \
- gr_vector_to_streams.cc \
- gr_wavelet_ff.cc \
- gr_wvps_ff.cc \
- gri_add_const_ss_generic.cc \
- gri_char_to_float.cc \
- gri_control_loop.cc \
- gri_debugger_hook.cc \
- gri_fft.cc \
- gri_float_to_char.cc \
- gri_float_to_int.cc \
- gri_float_to_short.cc \
- gri_float_to_uchar.cc \
- gri_glfsr.cc \
- gri_interleaved_short_to_complex.cc \
- gri_int_to_float.cc \
- gri_short_to_float.cc \
- gri_uchar_to_float.cc \
- malloc16.c \
- gr_unpack_k_bits_bb.cc \
- gr_descrambler_bb.cc \
- gr_scrambler_bb.cc \
- gr_probe_mpsk_snr_c.cc \
- gr_probe_density_b.cc \
- gr_annotator_alltoall.cc \
- gr_annotator_1to1.cc \
- gr_burst_tagger.cc \
- gr_correlate_access_code_tag_bb.cc
-
-libgeneral_qa_la_SOURCES = \
- qa_general.cc \
- qa_gr_circular_file.cc \
- qa_gr_cpm.cc \
- qa_gr_firdes.cc \
- qa_gr_fxpt.cc \
- qa_gr_fxpt_nco.cc \
- qa_gr_fxpt_vco.cc \
- qa_gr_math.cc \
- qa_gri_lfsr.cc
-
-grinclude_HEADERS = \
- gr_core_api.h \
- complex_vec_test.h \
- gr_additive_scrambler_bb.h \
- gr_add_ff.h \
- gr_agc_cc.h \
- gr_agc_ff.h \
- gr_agc2_cc.h \
- gr_agc2_ff.h \
- gr_align_on_samplenumbers_ss.h \
- gr_bin_statistics_f.h \
- gr_bytes_to_syms.h \
- gr_char_to_float.h \
- gr_char_to_short.h \
- gr_check_counting_s.h \
- gr_check_lfsr_32k_s.h \
- gr_circular_file.h \
- gr_complex_to_interleaved_short.h \
- gr_complex_to_xxx.h \
- gr_conjugate_cc.h \
- gr_copy.h \
- gr_count_bits.h \
- gr_cpfsk_bc.h \
- gr_cpm.h \
- gr_ctcss_squelch_ff.h \
- gr_decode_ccsds_27_fb.h \
- gr_diff_decoder_bb.h \
- gr_diff_encoder_bb.h \
- gr_deinterleave.h \
- gr_delay.h \
- gr_diff_phasor_cc.h \
- gr_dpll_bb.h \
- gr_encode_ccsds_27_bb.h \
- gr_expj.h \
- gr_fake_channel_coder_pp.h \
- gr_feedforward_agc_cc.h \
- gr_feval.h \
- gr_fft_vcc.h \
- gr_fft_vcc_fftw.h \
- gr_fft_vfc.h \
- gr_firdes.h \
- gr_float_to_char.h \
- gr_float_to_complex.h \
- gr_float_to_int.h \
- gr_float_to_short.h \
- gr_float_to_uchar.h \
- gr_fmdet_cf.h \
- gr_framer_sink_1.h \
- gr_frequency_modulator_fc.h \
- gr_fxpt.h \
- gr_fxpt_nco.h \
- gr_fxpt_vco.h \
- gr_glfsr_source_b.h \
- gr_glfsr_source_f.h \
- gr_head.h \
- gr_interleave.h \
- gr_interleaved_short_to_complex.h \
- gr_iqcomp_cc.h \
- gr_keep_one_in_n.h \
- gr_kludge_copy.h \
- gr_lfsr_32k_source_s.h \
- gr_log2_const.h \
- gr_map_bb.h \
- gr_math.h \
- gr_misc.h \
- gr_multiply_cc.h \
- gr_multiply_ff.h \
- gr_multiply_const_cc.h \
- gr_multiply_const_ff.h \
- gr_multiply_conjugate_cc.h \
- gr_nco.h \
- gr_nlog10_ff.h \
- gr_nop.h \
- gr_null_sink.h \
- gr_null_source.h \
- gr_pa_2x2_phase_combiner.h \
- gr_packet_sink.h \
- gr_peak_detector2_fb.h \
- gr_phase_modulator_fc.h \
- gr_pll_carriertracking_cc.h \
- gr_pll_freqdet_cf.h \
- gr_pll_refout_cc.h \
- gr_pn_correlator_cc.h \
- gr_constants.h \
- gr_prefs.h \
- gr_probe_avg_mag_sqrd_c.h \
- gr_probe_avg_mag_sqrd_cf.h \
- gr_probe_avg_mag_sqrd_f.h \
- gr_probe_signal_f.h \
- gr_pwr_squelch_cc.h \
- gr_pwr_squelch_ff.h \
- gr_quadrature_demod_cf.h \
- gr_rail_ff.h \
- gr_random.h \
- gr_regenerate_bb.h \
- gr_remez.h \
- gr_repeat.h \
- gr_reverse.h \
- gr_rms_cf.h \
- gr_rms_ff.h \
- gr_short_to_char.h \
- gr_short_to_float.h \
- gr_int_to_float.h \
- gr_simple_correlator.h \
- gr_simple_framer.h \
- gr_simple_framer_sync.h \
- gr_simple_squelch_cc.h \
- gr_squash_ff.h \
- gr_skiphead.h \
- gr_squelch_base_cc.h \
- gr_squelch_base_ff.h \
- gr_stream_mux.h \
- gr_stream_to_streams.h \
- gr_stream_to_vector.h \
- gr_streams_to_stream.h \
- gr_streams_to_vector.h \
- gr_stretch_ff.h \
- gr_test_types.h \
- gr_test.h \
- gr_threshold_ff.h \
- gr_throttle.h \
- gr_transcendental.h \
- gr_uchar_to_float.h \
- gr_vco.h \
- gr_vco_f.h \
- gr_vector_to_stream.h \
- gr_vector_to_streams.h \
- gr_wavelet_ff.h \
- gr_wvps_ff.h \
- gri_add_const_ss.h \
- gri_agc_cc.h \
- gri_agc_ff.h \
- gri_agc2_cc.h \
- gri_agc2_ff.h \
- gri_char_to_float.h \
- gri_control_loop.h \
- gri_debugger_hook.h \
- gri_fft.h \
- gri_float_to_char.h \
- gri_float_to_int.h \
- gri_float_to_short.h \
- gri_float_to_uchar.h \
- gri_lfsr.h \
- gri_glfsr.h \
- gri_interleaved_short_to_complex.h \
- gri_int_to_float.h \
- gri_lfsr_15_1_0.h \
- gri_lfsr_32k.h \
- gri_short_to_float.h \
- gri_uchar_to_float.h \
- malloc16.h \
- random.h \
- gr_unpack_k_bits_bb.h \
- gr_descrambler_bb.h \
- gr_scrambler_bb.h \
- gr_probe_mpsk_snr_c.h \
- gr_probe_density_b.h \
- gr_annotator_alltoall.h \
- gr_annotator_1to1.h \
- gr_burst_tagger.h \
- gr_correlate_access_code_tag_bb.h
-
-noinst_HEADERS = \
- qa_general.h \
- qa_gr_circular_file.h \
- qa_gr_cpm.h \
- qa_gr_firdes.h \
- qa_gr_fxpt.h \
- qa_gr_fxpt_nco.h \
- qa_gr_fxpt_vco.h \
- qa_gri_lfsr.h \
- sine_table.h \
- qa_gr_math.h
-
-swiginclude_HEADERS = \
- complex_vec_test.i \
- general.i \
- gr_additive_scrambler_bb.i \
- gr_add_ff.i \
- gr_agc_cc.i \
- gr_agc_ff.i \
- gr_agc2_cc.i \
- gr_agc2_ff.i \
- gr_align_on_samplenumbers_ss.i \
- gr_bin_statistics_f.i \
- gr_bytes_to_syms.i \
- gr_char_to_float.i \
- gr_char_to_short.i \
- gr_check_counting_s.i \
- gr_check_lfsr_32k_s.i \
- gr_complex_to_interleaved_short.i \
- gr_complex_to_xxx.i \
- gr_conjugate_cc.i \
- gr_copy.i \
- gr_cpfsk_bc.i \
- gr_cpm.i \
- gr_ctcss_squelch_ff.i \
- gr_decode_ccsds_27_fb.i \
- gr_diff_decoder_bb.i \
- gr_diff_encoder_bb.i \
- gr_diff_phasor_cc.i \
- gr_dpll_bb.i \
- gr_deinterleave.i \
- gr_delay.i \
- gr_encode_ccsds_27_bb.i \
- gr_fake_channel_coder_pp.i \
- gr_feedforward_agc_cc.i \
- gr_feval.i \
- gr_fft_vcc.i \
- gr_fft_vfc.i \
- gr_firdes.i \
- gr_float_to_char.i \
- gr_float_to_complex.i \
- gr_float_to_int.i \
- gr_float_to_short.i \
- gr_float_to_uchar.i \
- gr_fmdet_cf.i \
- gr_frequency_modulator_fc.i \
- gr_framer_sink_1.i \
- gr_glfsr_source_b.i \
- gr_glfsr_source_f.i \
- gr_head.i \
- gr_int_to_float.i \
- gr_interleave.i \
- gr_interleaved_short_to_complex.i \
- gr_iqcomp_cc.i \
- gr_keep_one_in_n.i \
- gr_kludge_copy.i \
- gr_lfsr_32k_source_s.i \
- gr_map_bb.i \
- gr_multiply_cc.i \
- gr_multiply_ff.i \
- gr_multiply_const_cc.i \
- gr_multiply_const_ff.i \
- gr_multiply_conjugate_cc.i \
- gr_nlog10_ff.i \
- gr_nop.i \
- gr_null_sink.i \
- gr_null_source.i \
- gr_pa_2x2_phase_combiner.i \
- gr_packet_sink.i \
- gr_peak_detector2_fb.i \
- gr_phase_modulator_fc.i \
- gr_pll_carriertracking_cc.i \
- gr_pll_freqdet_cf.i \
- gr_pll_refout_cc.i \
- gr_pn_correlator_cc.i \
- gr_constants.i \
- gr_prefs.i \
- gr_probe_avg_mag_sqrd_c.i \
- gr_probe_avg_mag_sqrd_cf.i \
- gr_probe_avg_mag_sqrd_f.i \
- gr_probe_signal_f.i \
- gr_pwr_squelch_cc.i \
- gr_pwr_squelch_ff.i \
- gr_quadrature_demod_cf.i \
- gr_rail_ff.i \
- gr_regenerate_bb.i \
- gr_remez.i \
- gr_rms_cf.i \
- gr_rms_ff.i \
- gr_repeat.i \
- gr_short_to_char.i \
- gr_short_to_float.i \
- gr_simple_correlator.i \
- gr_simple_framer.i \
- gr_simple_squelch_cc.i \
- gr_skiphead.i \
- gr_squash_ff.i \
- gr_squelch_base_cc.i \
- gr_squelch_base_ff.i \
- gr_stream_mux.i \
- gr_stream_to_streams.i \
- gr_stream_to_vector.i \
- gr_streams_to_stream.i \
- gr_streams_to_vector.i \
- gr_stretch_ff.i \
- gr_test.i \
- gr_threshold_ff.i \
- gr_throttle.i \
- gr_transcendental.i \
- gr_uchar_to_float.i \
- gr_vco_f.i \
- gr_vector_to_stream.i \
- gr_vector_to_streams.i \
- gr_unpack_k_bits_bb.i \
- gr_wavelet_ff.i \
- gr_wvps_ff.i \
- gri_agc_cc.i \
- gri_agc_ff.i \
- gri_agc2_cc.i \
- gri_agc2_ff.i \
- gri_control_loop.i \
- gr_descrambler_bb.i \
- gr_scrambler_bb.i \
- gr_probe_mpsk_snr_c.i \
- gr_probe_density_b.i \
- gr_annotator_alltoall.i \
- gr_annotator_1to1.i \
- gr_burst_tagger.i \
- gr_correlate_access_code_tag_bb.i
diff --git a/gnuradio-core/src/lib/general/general.i b/gnuradio-core/src/lib/general/general.i
index 89738b01a..f7759c614 100644
--- a/gnuradio-core/src/lib/general/general.i
+++ b/gnuradio-core/src/lib/general/general.i
@@ -92,7 +92,6 @@
#include <gr_probe_avg_mag_sqrd_c.h>
#include <gr_probe_avg_mag_sqrd_cf.h>
#include <gr_probe_avg_mag_sqrd_f.h>
-#include <gr_probe_signal_f.h>
#include <gr_regenerate_bb.h>
#include <gr_pa_2x2_phase_combiner.h>
#include <gr_kludge_copy.h>
@@ -126,13 +125,9 @@
#include <gr_decode_ccsds_27_fb.h>
#include <gr_descrambler_bb.h>
#include <gr_scrambler_bb.h>
-#include <gr_probe_mpsk_snr_c.h>
#include <gr_probe_density_b.h>
#include <gr_rail_ff.h>
-#include <gr_squash_ff.h>
#include <gr_stretch_ff.h>
-#include <gr_wavelet_ff.h>
-#include <gr_wvps_ff.h>
#include <gr_copy.h>
#include <gr_additive_scrambler_bb.h>
#include <complex_vec_test.h>
@@ -214,7 +209,6 @@
%include "gr_probe_avg_mag_sqrd_c.i"
%include "gr_probe_avg_mag_sqrd_cf.i"
%include "gr_probe_avg_mag_sqrd_f.i"
-%include "gr_probe_signal_f.i"
%include "gr_regenerate_bb.i"
%include "gr_pa_2x2_phase_combiner.i"
%include "gr_kludge_copy.i"
@@ -248,13 +242,9 @@
%include "gr_decode_ccsds_27_fb.i"
%include "gr_descrambler_bb.i"
%include "gr_scrambler_bb.i"
-%include "gr_probe_mpsk_snr_c.i"
%include "gr_probe_density_b.i"
%include "gr_rail_ff.i"
-%include "gr_squash_ff.i"
%include "gr_stretch_ff.i"
-%include "gr_wavelet_ff.i"
-%include "gr_wvps_ff.i"
%include "gr_copy.i"
%include "gr_additive_scrambler_bb.i"
%include "complex_vec_test.i"
diff --git a/gnuradio-core/src/lib/general/general_generated.i b/gnuradio-core/src/lib/general/general_generated.i
index e12f2b0ec..89b7e1776 100644
--- a/gnuradio-core/src/lib/general/general_generated.i
+++ b/gnuradio-core/src/lib/general/general_generated.i
@@ -51,6 +51,16 @@
#include <gr_packed_to_unpacked_bb.h>
#include <gr_packed_to_unpacked_ii.h>
#include <gr_packed_to_unpacked_ss.h>
+#include <gr_probe_signal_b.h>
+#include <gr_probe_signal_s.h>
+#include <gr_probe_signal_i.h>
+#include <gr_probe_signal_f.h>
+#include <gr_probe_signal_c.h>
+#include <gr_probe_signal_vb.h>
+#include <gr_probe_signal_vs.h>
+#include <gr_probe_signal_vi.h>
+#include <gr_probe_signal_vf.h>
+#include <gr_probe_signal_vc.h>
#include <gr_sig_source_c.h>
#include <gr_sig_source_f.h>
#include <gr_sig_source_i.h>
@@ -123,6 +133,16 @@
%include <gr_packed_to_unpacked_bb.i>
%include <gr_packed_to_unpacked_ii.i>
%include <gr_packed_to_unpacked_ss.i>
+%include <gr_probe_signal_b.i>
+%include <gr_probe_signal_s.i>
+%include <gr_probe_signal_i.i>
+%include <gr_probe_signal_f.i>
+%include <gr_probe_signal_c.i>
+%include <gr_probe_signal_vb.i>
+%include <gr_probe_signal_vs.i>
+%include <gr_probe_signal_vi.i>
+%include <gr_probe_signal_vf.i>
+%include <gr_probe_signal_vc.i>
%include <gr_sig_source_c.i>
%include <gr_sig_source_f.i>
%include <gr_sig_source_i.i>
diff --git a/gnuradio-core/src/lib/general/gr_char_to_float.h b/gnuradio-core/src/lib/general/gr_char_to_float.h
index 4ad8e59a8..1ab53a087 100644
--- a/gnuradio-core/src/lib/general/gr_char_to_float.h
+++ b/gnuradio-core/src/lib/general/gr_char_to_float.h
@@ -35,6 +35,9 @@ gr_make_char_to_float (size_t vlen=1, float scale=1);
/*!
* \brief Convert stream of chars to a stream of float
* \ingroup converter_blk
+ *
+ * \param vlen vector length of data streams.
+ * \param scale a scalar divider to change the output signal scale.
*/
class GR_CORE_API gr_char_to_float : public gr_sync_block
@@ -48,7 +51,14 @@ class GR_CORE_API gr_char_to_float : public gr_sync_block
float d_scale;
public:
+ /*!
+ * Get the scalar divider value.
+ */
float scale() const;
+
+ /*!
+ * Set the scalar divider value.
+ */
void set_scale(float scale);
virtual int work (int noutput_items,
diff --git a/gnuradio-core/src/lib/general/gr_char_to_short.h b/gnuradio-core/src/lib/general/gr_char_to_short.h
index 58f9a62b0..e93c15b12 100644
--- a/gnuradio-core/src/lib/general/gr_char_to_short.h
+++ b/gnuradio-core/src/lib/general/gr_char_to_short.h
@@ -35,6 +35,8 @@ gr_make_char_to_short (size_t vlen=1);
/*!
* \brief Convert stream of chars to a stream of float
* \ingroup converter_blk
+ *
+ * \param vlen vector length of data streams.
*/
class GR_CORE_API gr_char_to_short : public gr_sync_block
diff --git a/gnuradio-core/src/lib/general/gr_float_to_char.h b/gnuradio-core/src/lib/general/gr_float_to_char.h
index c88645a18..00e83d465 100644
--- a/gnuradio-core/src/lib/general/gr_float_to_char.h
+++ b/gnuradio-core/src/lib/general/gr_float_to_char.h
@@ -35,6 +35,9 @@ gr_make_float_to_char (size_t vlen=1, float scale=1);
/*!
* \brief Convert stream of float to a stream of char
* \ingroup converter_blk
+ *
+ * \param vlen vector length of data streams.
+ * \param scale a scalar multiplier to change the output signal scale.
*/
class GR_CORE_API gr_float_to_char : public gr_sync_block
@@ -48,7 +51,14 @@ class GR_CORE_API gr_float_to_char : public gr_sync_block
float d_scale;
public:
+ /*!
+ * Get the scalar multiplier value.
+ */
float scale() const;
+
+ /*!
+ * Set the scalar multiplier value.
+ */
void set_scale(float scale);
virtual int work (int noutput_items,
diff --git a/gnuradio-core/src/lib/general/gr_float_to_int.h b/gnuradio-core/src/lib/general/gr_float_to_int.h
index 0b42c0aab..ef1987a76 100644
--- a/gnuradio-core/src/lib/general/gr_float_to_int.h
+++ b/gnuradio-core/src/lib/general/gr_float_to_int.h
@@ -35,6 +35,9 @@ gr_make_float_to_int (size_t vlen=1, float scale=1);
/*!
* \brief Convert stream of float to a stream of short
* \ingroup converter_blk
+ *
+ * \param vlen vector length of data streams.
+ * \param scale a scalar multiplier to change the output signal scale.
*/
class GR_CORE_API gr_float_to_int : public gr_sync_block
@@ -48,7 +51,14 @@ class GR_CORE_API gr_float_to_int : public gr_sync_block
float d_scale;
public:
+ /*!
+ * Get the scalar multiplier value.
+ */
float scale() const;
+
+ /*!
+ * Set the scalar multiplier value.
+ */
void set_scale(float scale);
virtual int work (int noutput_items,
diff --git a/gnuradio-core/src/lib/general/gr_float_to_short.h b/gnuradio-core/src/lib/general/gr_float_to_short.h
index 93e441f41..beb95486f 100644
--- a/gnuradio-core/src/lib/general/gr_float_to_short.h
+++ b/gnuradio-core/src/lib/general/gr_float_to_short.h
@@ -35,6 +35,9 @@ gr_make_float_to_short (size_t vlen=1, float scale=1);
/*!
* \brief Convert stream of float to a stream of short
* \ingroup converter_blk
+ *
+ * \param vlen vector length of data streams.
+ * \param scale a scalar multiplier to change the output signal scale.
*/
class GR_CORE_API gr_float_to_short : public gr_sync_block
@@ -47,7 +50,14 @@ class GR_CORE_API gr_float_to_short : public gr_sync_block
float d_scale;
public:
+ /*!
+ * Get the scalar multiplier value.
+ */
float scale() const;
+
+ /*!
+ * Set the scalar multiplier value.
+ */
void set_scale(float scale);
virtual int work (int noutput_items,
diff --git a/gnuradio-core/src/lib/general/gr_frequency_modulator_fc.cc b/gnuradio-core/src/lib/general/gr_frequency_modulator_fc.cc
index bff22be25..34f2f88bc 100644
--- a/gnuradio-core/src/lib/general/gr_frequency_modulator_fc.cc
+++ b/gnuradio-core/src/lib/general/gr_frequency_modulator_fc.cc
@@ -26,7 +26,7 @@
#include <gr_frequency_modulator_fc.h>
#include <gr_io_signature.h>
-#include <gr_sincos.h>
+#include <gr_fxpt.h>
#include <math.h>
#include <boost/math/special_functions/trunc.hpp>
@@ -54,17 +54,17 @@ gr_frequency_modulator_fc::work (int noutput_items,
for (int i = 0; i < noutput_items; i++){
d_phase = d_phase + d_sensitivity * in[i];
- float oi, oq;
- gr_sincosf (d_phase, &oq, &oi);
- out[i] = gr_complex (oi, oq);
- }
- // Limit the phase accumulator to [-16*pi,16*pi]
- // to avoid loss of precision in the addition above.
+ while (d_phase > (float)(M_PI))
+ d_phase -= (float)(2.0 * M_PI);
+ while (d_phase < (float)(-M_PI))
+ d_phase += (float)(2.0 * M_PI);
- if (fabs (d_phase) > 16 * M_PI){
- double ii = boost::math::trunc (d_phase / (2 * M_PI));
- d_phase = d_phase - (ii * 2 * M_PI);
+ float oi, oq;
+
+ gr_int32 angle = gr_fxpt::float_to_fixed (d_phase);
+ gr_fxpt::sincos (angle, &oq, &oi);
+ out[i] = gr_complex (oi, oq);
}
return noutput_items;
diff --git a/gnuradio-core/src/lib/general/gr_frequency_modulator_fc.h b/gnuradio-core/src/lib/general/gr_frequency_modulator_fc.h
index 932e7da36..e3aaafb1a 100644
--- a/gnuradio-core/src/lib/general/gr_frequency_modulator_fc.h
+++ b/gnuradio-core/src/lib/general/gr_frequency_modulator_fc.h
@@ -39,8 +39,8 @@ GR_CORE_API gr_frequency_modulator_fc_sptr gr_make_frequency_modulator_fc (doubl
*/
class GR_CORE_API gr_frequency_modulator_fc : public gr_sync_block
{
- double d_sensitivity;
- double d_phase;
+ float d_sensitivity;
+ float d_phase;
friend GR_CORE_API gr_frequency_modulator_fc_sptr
gr_make_frequency_modulator_fc (double sensitivity);
diff --git a/gnuradio-core/src/lib/general/gr_fxpt.cc b/gnuradio-core/src/lib/general/gr_fxpt.cc
index fae02c71e..67f44a471 100644
--- a/gnuradio-core/src/lib/general/gr_fxpt.cc
+++ b/gnuradio-core/src/lib/general/gr_fxpt.cc
@@ -33,24 +33,3 @@ const float gr_fxpt::s_sine_table[1 << NBITS][2] = {
const float gr_fxpt::PI = 3.14159265358979323846;
const float gr_fxpt::TWO_TO_THE_31 = 2147483648.0;
-#if 0
-/*
- * Compute sine using table lookup with linear interpolation.
- * Each table entry contains slope and intercept.
- */
-float
-gr_fxpt::sin (gr_int32 x)
-{
- gr_uint32 ux = x;
- int index = ux >> (WORDBITS - NBITS);
- return s_sine_table[index][0] * (ux >> 1) + s_sine_table[index][1];
-}
-
-float
-gr_fxpt::cos (gr_int32 x)
-{
- gr_uint32 ux = x + 0x40000000;
- int index = ux >> (WORDBITS - NBITS);
- return s_sine_table[index][0] * (ux >> 1) + s_sine_table[index][1];
-}
-#endif
diff --git a/gnuradio-core/src/lib/general/gr_fxpt.h b/gnuradio-core/src/lib/general/gr_fxpt.h
index 9f5937d1a..431102569 100644
--- a/gnuradio-core/src/lib/general/gr_fxpt.h
+++ b/gnuradio-core/src/lib/general/gr_fxpt.h
@@ -83,6 +83,22 @@ public:
return s_sine_table[index][0] * (ux >> 1) + s_sine_table[index][1];
}
+ /*
+ * \brief Given a fixedpoint angle x, return float cos(x) and sin (x)
+ */
+ static void sincos(gr_int32 x, float *s, float *c)
+ {
+ gr_uint32 ux = x;
+ int sin_index = ux >> (WORDBITS - NBITS);
+ *s = s_sine_table[sin_index][0] * (ux >> 1) + s_sine_table[sin_index][1];
+
+ ux = x + 0x40000000;
+ int cos_index = ux >> (WORDBITS - NBITS);
+ *c = s_sine_table[cos_index][0] * (ux >> 1) + s_sine_table[cos_index][1];
+
+ return;
+ }
+
};
#endif /* INCLUDED_GR_FXPT_H */
diff --git a/gnuradio-core/src/lib/general/gr_int_to_float.h b/gnuradio-core/src/lib/general/gr_int_to_float.h
index af6488a50..7c55e3b3c 100644
--- a/gnuradio-core/src/lib/general/gr_int_to_float.h
+++ b/gnuradio-core/src/lib/general/gr_int_to_float.h
@@ -35,6 +35,9 @@ gr_make_int_to_float (size_t vlen=1, float scale=1);
/*!
* \brief Convert stream of int to a stream of float
* \ingroup converter_blk
+ *
+ * \param vlen vector length of data streams.
+ * \param scale a scalar divider to change the output signal scale.
*/
class GR_CORE_API gr_int_to_float : public gr_sync_block
@@ -48,7 +51,14 @@ class GR_CORE_API gr_int_to_float : public gr_sync_block
float d_scale;
public:
+ /*!
+ * Get the scalar divider value.
+ */
float scale() const;
+
+ /*!
+ * Set the scalar divider value.
+ */
void set_scale(float scale);
virtual int work (int noutput_items,
diff --git a/gnuradio-core/src/lib/general/gr_probe_mpsk_snr_c.cc b/gnuradio-core/src/lib/general/gr_probe_mpsk_snr_c.cc
deleted file mode 100644
index fed9ad66e..000000000
--- a/gnuradio-core/src/lib/general/gr_probe_mpsk_snr_c.cc
+++ /dev/null
@@ -1,85 +0,0 @@
-/* -*- c++ -*- */
-/*
- * Copyright 2008,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.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <gr_probe_mpsk_snr_c.h>
-#include <gr_io_signature.h>
-
-gr_probe_mpsk_snr_c_sptr
-gr_make_probe_mpsk_snr_c(double alpha)
-{
- return gnuradio::get_initial_sptr(new gr_probe_mpsk_snr_c(alpha));
-}
-
-gr_probe_mpsk_snr_c::gr_probe_mpsk_snr_c(double alpha)
- : gr_sync_block ("probe_mpsk_snr_c",
- gr_make_io_signature(1, 1, sizeof(gr_complex)),
- gr_make_io_signature(0, 0, 0)),
- d_signal_mean(0.0),
- d_noise_variance(0.0)
-{
- set_alpha(alpha);
-}
-
-gr_probe_mpsk_snr_c::~gr_probe_mpsk_snr_c()
-{
-}
-
-int
-gr_probe_mpsk_snr_c::work(int noutput_items,
- gr_vector_const_void_star &input_items,
- gr_vector_void_star &output_items)
-{
- const gr_complex *in = (const gr_complex *) input_items[0];
-
- for (int i = 0; i < noutput_items; i++){
- // Update of signal mean estimate
- double mag = abs(in[i]);
- d_signal_mean = d_alpha*abs(in[i]) + d_beta*d_signal_mean;
-
- // Update noise variance estimate
- double noise = mag-d_signal_mean;
- double var = noise*noise;
- d_noise_variance = d_alpha*var + d_beta*d_noise_variance;
- }
-
- return noutput_items;
-}
-
-double
-gr_probe_mpsk_snr_c::snr() const
-{
- if (d_noise_variance == 0.0)
- return 0.0;
- else
- return 10*log10(d_signal_mean*d_signal_mean/d_noise_variance);
-}
-
-void
-gr_probe_mpsk_snr_c::set_alpha(double alpha)
-{
- d_alpha = alpha;
- d_beta = 1.0-alpha;
-}
diff --git a/gnuradio-core/src/lib/general/gr_probe_mpsk_snr_c.h b/gnuradio-core/src/lib/general/gr_probe_mpsk_snr_c.h
deleted file mode 100644
index 870e46701..000000000
--- a/gnuradio-core/src/lib/general/gr_probe_mpsk_snr_c.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/* -*- c++ -*- */
-/*
- * Copyright 2008 Free Software Foundation, Inc.
- *
- * This file is part of GNU Radio
- *
- * GNU Radio is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3, or (at your option)
- * any later version.
- *
- * GNU Radio is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with GNU Radio; see the file COPYING. If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street,
- * Boston, MA 02110-1301, USA.
- */
-#ifndef INCLUDED_GR_PROBE_MPSK_SNR_C_H
-#define INCLUDED_GR_PROBE_MPSK_SNR_C_H
-
-#include <gr_core_api.h>
-#include <gr_sync_block.h>
-
-class gr_probe_mpsk_snr_c;
-typedef boost::shared_ptr<gr_probe_mpsk_snr_c> gr_probe_mpsk_snr_c_sptr;
-
-GR_CORE_API gr_probe_mpsk_snr_c_sptr
-gr_make_probe_mpsk_snr_c(double alpha = 0.0001);
-
-/*!
- * Compute the estimate SNR of an MPSK signal using the Squared Signal
- * to Noise Variance (SNV) technique.
- *
- * This technique assumes an AWGN channel.
- *
- * \param alpha Mean and variance smoothing filter constant
- * \ingroup sink_blk
- *
- * Compute the running average of the signal mean and noise variance.
- * The estimated signal mean, noise variance, and SNR are available
- * via accessors.
- *
- * This SNR estimator is inaccurate below about 7dB SNR.
- *
- */
-class GR_CORE_API gr_probe_mpsk_snr_c : public gr_sync_block
-{
- double d_alpha;
- double d_beta;
- double d_signal_mean;
- double d_noise_variance;
-
- // Factory function returning shared pointer of this class
- friend GR_CORE_API gr_probe_mpsk_snr_c_sptr
- gr_make_probe_mpsk_snr_c(double alpha);
-
- // Private constructor
- gr_probe_mpsk_snr_c(double alpha);
-
-public:
- ~gr_probe_mpsk_snr_c();
-
- int work (int noutput_items,
- gr_vector_const_void_star &input_items,
- gr_vector_void_star &output_items);
-
- // Return the estimated signal mean
- double signal_mean() const { return d_signal_mean; }
-
- // Return the estimated noise variance
- double noise_variance() const { return d_noise_variance; }
-
- // Return the estimated signal-to-noise ratio in decibels
- double snr() const;
-
- void set_alpha(double alpha);
-};
-
-#endif /* INCLUDED_GR_PROBE_MPSK_SNR_C_H */
diff --git a/gnuradio-core/src/lib/general/gr_short_to_char.h b/gnuradio-core/src/lib/general/gr_short_to_char.h
index 9682d86ec..f6b3b41ca 100644
--- a/gnuradio-core/src/lib/general/gr_short_to_char.h
+++ b/gnuradio-core/src/lib/general/gr_short_to_char.h
@@ -35,6 +35,8 @@ gr_make_short_to_char (size_t vlen=1);
/*!
* \brief Convert stream of short to a stream of float
* \ingroup converter_blk
+ *
+ * \param vlen vector length of data streams.
*/
class GR_CORE_API gr_short_to_char : public gr_sync_block
diff --git a/gnuradio-core/src/lib/general/gr_short_to_float.h b/gnuradio-core/src/lib/general/gr_short_to_float.h
index efdc81ecd..e45d0b14b 100644
--- a/gnuradio-core/src/lib/general/gr_short_to_float.h
+++ b/gnuradio-core/src/lib/general/gr_short_to_float.h
@@ -35,6 +35,9 @@ gr_make_short_to_float (size_t vlen=1, float scale=1);
/*!
* \brief Convert stream of short to a stream of float
* \ingroup converter_blk
+ *
+ * \param vlen vector length of data streams.
+ * \param scale a scalar divider to change the output signal scale.
*/
class GR_CORE_API gr_short_to_float : public gr_sync_block
@@ -48,7 +51,14 @@ class GR_CORE_API gr_short_to_float : public gr_sync_block
float d_scale;
public:
+ /*!
+ * Get the scalar divider value.
+ */
float scale() const;
+
+ /*!
+ * Set the scalar divider value.
+ */
void set_scale(float scale);
virtual int work (int noutput_items,
diff --git a/gnuradio-core/src/lib/general/gr_squash_ff.cc b/gnuradio-core/src/lib/general/gr_squash_ff.cc
deleted file mode 100644
index 479204fdb..000000000
--- a/gnuradio-core/src/lib/general/gr_squash_ff.cc
+++ /dev/null
@@ -1,93 +0,0 @@
-/* -*- c++ -*- */
-/*
- * Copyright 2008,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.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <stdexcept>
-#include <gr_squash_ff.h>
-#include <gr_io_signature.h>
-
-// expect input vector of igrid.size y-values,
-// produce output vector of ogrid.size y-values
-
-gr_squash_ff_sptr
-gr_make_squash_ff(const std::vector<float> &igrid,
- const std::vector<float> &ogrid)
-{
- return gnuradio::get_initial_sptr(new gr_squash_ff(igrid, ogrid));
-}
-
-gr_squash_ff::gr_squash_ff(const std::vector<float> &igrid,
- const std::vector<float> &ogrid)
- : gr_sync_block("squash_ff",
- gr_make_io_signature(1, 1, sizeof(float) * igrid.size()),
- gr_make_io_signature(1, 1, sizeof(float) * ogrid.size()))
-{
- d_inum = igrid.size();
- d_onum = ogrid.size();
- d_igrid = (double *) malloc(d_inum * sizeof(double));
- d_iwork = (double *) malloc(d_inum * sizeof(double));
- d_ogrid = (double *) malloc(d_onum * sizeof(double));
- for (unsigned int i = 0; i < d_inum; i++)
- d_igrid[i] = igrid[i];
- for (unsigned int i = 0; i < d_onum; i++)
- d_ogrid[i] = ogrid[i];
-
- d_accel = gsl_interp_accel_alloc();
- d_spline = gsl_spline_alloc(gsl_interp_cspline, d_inum); // FIXME check w/ Frank
-}
-
-gr_squash_ff::~gr_squash_ff()
-{
- free((char *) d_igrid);
- free((char *) d_iwork);
- free((char *) d_ogrid);
- gsl_interp_accel_free(d_accel);
- gsl_spline_free(d_spline);
-}
-
-int
-gr_squash_ff::work(int noutput_items,
- gr_vector_const_void_star &input_items,
- gr_vector_void_star &output_items)
-{
- const float *in = (const float *) input_items[0];
- float *out = (float *) output_items[0];
-
- for (int count = 0; count < noutput_items; count++) {
-
- for (unsigned int i = 0; i < d_inum; i++)
- d_iwork[i] = in[i];
-
- gsl_spline_init(d_spline, d_igrid, d_iwork, d_inum);
-
- for (unsigned int i = 0; i < d_onum; i++)
- out[i] = gsl_spline_eval(d_spline, d_ogrid[i], d_accel);
-
- in += d_inum;
- out += d_onum;
- }
-
- return noutput_items;
-}
diff --git a/gnuradio-core/src/lib/general/gr_squash_ff.h b/gnuradio-core/src/lib/general/gr_squash_ff.h
deleted file mode 100644
index f7fea1648..000000000
--- a/gnuradio-core/src/lib/general/gr_squash_ff.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/* -*- c++ -*- */
-/*
- * Copyright 2008 Free Software Foundation, Inc.
- *
- * This file is part of GNU Radio
- *
- * GNU Radio is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3, or (at your option)
- * any later version.
- *
- * GNU Radio is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with GNU Radio; see the file COPYING. If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef INCLUDED_GR_SQUASH_FF_H_
-# define INCLUDED_GR_SQUASH_FF_H_
-
-#include <gr_core_api.h>
-#include <gr_sync_block.h>
-#include <gsl/gsl_errno.h>
-#include <gsl/gsl_interp.h>
-#include <gsl/gsl_spline.h>
-/*!
- * \brief implements cheap resampling of spectrum directly from
- * spectral points, using gsl interpolation
- * \ingroup misc
- */
-
-class gr_squash_ff;
-typedef boost::shared_ptr<gr_squash_ff> gr_squash_ff_sptr;
-
-GR_CORE_API gr_squash_ff_sptr gr_make_squash_ff(const std::vector<float> &igrid,
- const std::vector<float> &ogrid);
-
-class GR_CORE_API gr_squash_ff : public gr_sync_block
-{
- friend GR_CORE_API gr_squash_ff_sptr gr_make_squash_ff(const std::vector<float> &igrid,
- const std::vector<float> &ogrid);
-
- size_t d_inum;
- size_t d_onum;
- double *d_igrid;
- double *d_iwork;
- double *d_ogrid;
-
- gsl_interp_accel *d_accel;
- gsl_spline *d_spline;
-
- gr_squash_ff(const std::vector<float> &igrid,
- const std::vector<float> &ogrid);
-
- public:
- ~gr_squash_ff();
-
- int work(int noutput_items,
- gr_vector_const_void_star &input_items,
- gr_vector_void_star &output_items);
-};
-
-#endif
diff --git a/gnuradio-core/src/lib/general/gr_squash_ff.i b/gnuradio-core/src/lib/general/gr_squash_ff.i
deleted file mode 100644
index c89b1c28d..000000000
--- a/gnuradio-core/src/lib/general/gr_squash_ff.i
+++ /dev/null
@@ -1,34 +0,0 @@
-/* -*- c++ -*- */
-/*
- * 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.
- */
-
-GR_SWIG_BLOCK_MAGIC(gr,squash_ff);
-
-gr_squash_ff_sptr gr_make_squash_ff(const std::vector<float> &igrid,
- const std::vector<float> &ogrid);
-
-class gr_squash_ff : public gr_sync_block
-{
-private:
- gr_squash_ff(const std::vector<float> &igrid,
- const std::vector<float> &ogrid);
-
-};
-
diff --git a/gnuradio-core/src/lib/general/gr_wavelet_ff.cc b/gnuradio-core/src/lib/general/gr_wavelet_ff.cc
deleted file mode 100644
index f77c96e99..000000000
--- a/gnuradio-core/src/lib/general/gr_wavelet_ff.cc
+++ /dev/null
@@ -1,107 +0,0 @@
-/* -*- c++ -*- */
-/*
- * Copyright 2008,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 tewavelet 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.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <stdexcept>
-#include <gr_wavelet_ff.h>
-#include <gr_io_signature.h>
-
-#include <stdio.h>
-
-// NB in this version, only Daubechies wavelets
-// order is wavelet length, even, 2...20
-
-gr_wavelet_ff_sptr
-gr_make_wavelet_ff(int size,
- int order,
- bool forward)
-{
- return gnuradio::get_initial_sptr(new gr_wavelet_ff(size,
- order,
- forward));
-}
-
-gr_wavelet_ff::gr_wavelet_ff(int size,
- int order,
- bool forward)
- : gr_sync_block("wavelet_ff",
- gr_make_io_signature(1, 1, size * sizeof(float)),
- gr_make_io_signature(1, 1, size * sizeof(float))),
- d_size(size),
- d_order(order),
- d_forward(forward)
-{
- d_wavelet = gsl_wavelet_alloc(gsl_wavelet_daubechies, d_order);
- if (d_wavelet == NULL)
- throw std::runtime_error("can't allocate wavelet");
- d_workspace = gsl_wavelet_workspace_alloc(d_size);
- if (d_workspace == NULL)
- throw std::runtime_error("can't allocate wavelet workspace");
- d_temp = (double *) malloc(d_size*sizeof(double));
- if (d_workspace == NULL)
- throw std::runtime_error("can't allocate wavelet double conversion temp");
-}
-
-gr_wavelet_ff::~gr_wavelet_ff()
-{
- gsl_wavelet_free(d_wavelet);
- gsl_wavelet_workspace_free(d_workspace);
- free((char *) d_temp);
-}
-
-int
-gr_wavelet_ff::work(int noutput_items,
- gr_vector_const_void_star &input_items,
- gr_vector_void_star &output_items)
-{
- const float *in = (const float *) input_items[0];
- float *out = (float *) output_items[0];
-
- for (int count = 0; count < noutput_items; count++) {
- for (int i = 0; i < d_size; i++)
- d_temp[i] = in[i];
-
- if (d_forward)
- gsl_wavelet_transform_forward(d_wavelet,
- d_temp,
- 1,
- d_size,
- d_workspace);
- else
- gsl_wavelet_transform_inverse(d_wavelet,
- d_temp,
- 1,
- d_size,
- d_workspace);
-
- for (int i = 0; i < d_size; i++)
- out[i] = d_temp[i];
-
- in += d_size;
- out += d_size;
- }
-
- return noutput_items;
-}
diff --git a/gnuradio-core/src/lib/general/gr_wavelet_ff.h b/gnuradio-core/src/lib/general/gr_wavelet_ff.h
deleted file mode 100644
index 107a50fe2..000000000
--- a/gnuradio-core/src/lib/general/gr_wavelet_ff.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/* -*- c++ -*- */
-/*
- * Copyright 2005 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.
- */
-#ifndef INCLUDED_GR_WAVELET_FF_H
-#define INCLUDED_GR_WAVELET_FF_H
-
-#include <gr_core_api.h>
-#include <iostream>
-#include <gr_sync_block.h>
-
-#include <gsl/gsl_errno.h>
-#include <gsl/gsl_wavelet.h>
-
-class gr_wavelet_ff;
-typedef boost::shared_ptr<gr_wavelet_ff> gr_wavelet_ff_sptr;
-
-GR_CORE_API gr_wavelet_ff_sptr
-gr_make_wavelet_ff(int size = 1024,
- int order = 20,
- bool forward = true);
-
-/*!
- * \brief compute wavelet transform using gsl routines
- * \ingroup wavelet_blk
- */
-
-class GR_CORE_API gr_wavelet_ff : public gr_sync_block
-{
- int d_size;
- int d_order;
- bool d_forward;
- gsl_wavelet *d_wavelet;
- gsl_wavelet_workspace *d_workspace;
- double *d_temp;
-
- friend GR_CORE_API gr_wavelet_ff_sptr
- gr_make_wavelet_ff(int size,
- int order,
- bool forward);
-
- gr_wavelet_ff(int size,
- int order,
- bool forward);
-
-public:
- ~gr_wavelet_ff();
-
- int work (int noutput_items,
- gr_vector_const_void_star &input_items,
- gr_vector_void_star &output_items);
-};
-
-#endif /* INCLUDED_GR_WAVELET_FF_H */
diff --git a/gnuradio-core/src/lib/general/gr_wavelet_ff.i b/gnuradio-core/src/lib/general/gr_wavelet_ff.i
deleted file mode 100644
index 9d4264170..000000000
--- a/gnuradio-core/src/lib/general/gr_wavelet_ff.i
+++ /dev/null
@@ -1,31 +0,0 @@
-/* -*- c++ -*- */
-/*
- * 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.
- */
-
-GR_SWIG_BLOCK_MAGIC(gr,wavelet_ff);
-
-gr_wavelet_ff_sptr gr_make_wavelet_ff(int size, int order, bool forward);
-
-class gr_wavelet_ff : public gr_sync_block
-{
-private:
- gr_wavelet_ff(int size, int order, bool forward);
-};
-
diff --git a/gnuradio-core/src/lib/general/gr_wvps_ff.cc b/gnuradio-core/src/lib/general/gr_wvps_ff.cc
deleted file mode 100644
index 8a8dc56ac..000000000
--- a/gnuradio-core/src/lib/general/gr_wvps_ff.cc
+++ /dev/null
@@ -1,98 +0,0 @@
-/* -*- c++ -*- */
-/*
- * Copyright 2004,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.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <gr_wvps_ff.h>
-#include <gr_io_signature.h>
-#include <string.h>
-
-static int
-ceil_log2(int k)
-{
- int m = 0;
- for (int n = k-1; n > 0; n >>= 1) m++;
- return m;
-}
-
-gr_wvps_ff_sptr
-gr_make_wvps_ff(int ilen)
-{
- return gnuradio::get_initial_sptr(new gr_wvps_ff(ilen));
-}
-
-gr_wvps_ff::gr_wvps_ff(int ilen)
- : gr_sync_block("wvps_ff",
- gr_make_io_signature(1, 1, sizeof(float) * ilen),
- gr_make_io_signature(1, 1, sizeof(float) * ceil_log2(ilen))),
- d_ilen(ilen), d_olen(ceil_log2(ilen))
-{
-}
-
-// input vector assumed to be output from gsl wavelet computation
-
-int
-gr_wvps_ff::work(int noutput_items,
- gr_vector_const_void_star &input_items,
- gr_vector_void_star &output_items)
-{
- const float *in = (const float *) input_items[0];
- float *out = (float *) output_items[0];
-
- for (int count = 0; count < noutput_items; count++) {
-
- // any power?
-
- if (in[0] == 0.0) {
- for (int i = 0; i < d_olen; i++)
- out[i] = 0.0;
-
- } else {
-
- // get power normalization from 0-th wavelet coefficient
-
- float scl = 1.0/(in[0]*in[0]);
- int k = 1;
-
- // sum powers over sequences of bins,
- // sequence lengths in increasing powers of 2
-
- for (int e = 0; e < d_olen; e++) {
- int m = 01<<e;
- float sum = 0.0;
-
- for (int l = 0; l < m; l++)
- sum += (in[k+l]*in[k+l]);
-
- out[e] = scl*sum;
- k += m;
- }
- }
-
- in += d_ilen;
- out += d_olen;
- }
-
- return noutput_items;
-}
diff --git a/gnuradio-core/src/lib/general/gr_wvps_ff.i b/gnuradio-core/src/lib/general/gr_wvps_ff.i
deleted file mode 100644
index 877126fb2..000000000
--- a/gnuradio-core/src/lib/general/gr_wvps_ff.i
+++ /dev/null
@@ -1,29 +0,0 @@
-/* -*- c++ -*- */
-/*
- * 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.
- */
-GR_SWIG_BLOCK_MAGIC(gr,wvps_ff);
-
-gr_wvps_ff_sptr gr_make_wvps_ff(int ilen);
-
-class gr_wvps_ff : public gr_sync_block
-{
-private:
- gr_wvps_ff(int ilen);
-};
diff --git a/gnuradio-core/src/lib/general/qa_gr_fxpt.cc b/gnuradio-core/src/lib/general/qa_gr_fxpt.cc
index 83bb05b2d..00487714e 100644
--- a/gnuradio-core/src/lib/general/qa_gr_fxpt.cc
+++ b/gnuradio-core/src/lib/general/qa_gr_fxpt.cc
@@ -91,4 +91,13 @@ qa_gr_fxpt::t2 ()
void
qa_gr_fxpt::t3 ()
{
+ for (float p = -M_PI; p < M_PI; p += 2 * M_PI / 3600){
+ float expected_sin = sin (p);
+ float expected_cos = cos (p);
+ float actual_sin;
+ float actual_cos;
+ gr_fxpt::sincos (gr_fxpt::float_to_fixed (p), &actual_sin, &actual_cos);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL (expected_sin, actual_sin, SIN_COS_TOLERANCE);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL (expected_cos, actual_cos, SIN_COS_TOLERANCE);
+ }
}
diff --git a/gnuradio-core/src/lib/gengen/.gitignore b/gnuradio-core/src/lib/gengen/.gitignore
deleted file mode 100644
index b91d2f197..000000000
--- a/gnuradio-core/src/lib/gengen/.gitignore
+++ /dev/null
@@ -1,403 +0,0 @@
-/Makefile
-/Makefile.in
-/.la
-/.lo
-/.deps
-/.libs
-/*.la
-/*.lo
-/*.pyc
-/generate-stamp
-/GrFIRfilterCCC.cc
-/GrFIRfilterCCC.h
-/GrFIRfilterCCF.cc
-/GrFIRfilterCCF.h
-/GrFIRfilterFCC.cc
-/GrFIRfilterFCC.h
-/GrFIRfilterFFF.cc
-/GrFIRfilterFFF.h
-/GrFIRfilterFSF.cc
-/GrFIRfilterFSF.h
-/GrFIRfilterSCC.cc
-/GrFIRfilterSCC.h
-/GrFIRfilterSIS.cc
-/GrFIRfilterSIS.h
-/GrFreqXlatingFIRfilterCCC.cc
-/GrFreqXlatingFIRfilterCCC.h
-/GrFreqXlatingFIRfilterCCF.cc
-/GrFreqXlatingFIRfilterCCF.h
-/GrFreqXlatingFIRfilterFCC.cc
-/GrFreqXlatingFIRfilterFCC.h
-/GrFreqXlatingFIRfilterFCF.cc
-/GrFreqXlatingFIRfilterFCF.h
-/GrFreqXlatingFIRfilterSCC.cc
-/GrFreqXlatingFIRfilterSCC.h
-/GrFreqXlatingFIRfilterSCF.cc
-/GrFreqXlatingFIRfilterSCF.h
-/gr_fir_CCC.cc
-/gr_fir_CCC.h
-/gr_fir_CCC_generic.cc
-/gr_fir_CCC_generic.h
-/gr_fir_CCF.cc
-/gr_fir_CCF.h
-/gr_fir_CCF_generic.cc
-/gr_fir_CCF_generic.h
-/gr_fir_FCC.cc
-/gr_fir_FCC.h
-/gr_fir_FCC_generic.cc
-/gr_fir_FCC_generic.h
-/gr_fir_FFF.cc
-/gr_fir_FFF.h
-/gr_fir_FFF_generic.cc
-/gr_fir_FFF_generic.h
-/gr_fir_FSF.cc
-/gr_fir_FSF.h
-/gr_fir_FSF_generic.cc
-/gr_fir_FSF_generic.h
-/gr_fir_SCC.cc
-/gr_fir_SCC.h
-/gr_fir_SCC_generic.cc
-/gr_fir_SCC_generic.h
-/gr_fir_SIS.cc
-/gr_fir_SIS.h
-/gr_fir_SIS_generic.cc
-/gr_fir_SIS_generic.h
-/gr_fir_sysconfig.cc
-/gr_fir_sysconfig.h
-/gr_fir_sysconfig_generic.cc
-/gr_fir_sysconfig_generic.h
-/gr_fir_util.cc
-/gr_fir_util.h
-/GrFIRfilterCCC.i
-/GrFIRfilterCCF.i
-/GrFIRfilterFCC.i
-/GrFIRfilterFFF.i
-/GrFIRfilterFSF.i
-/GrFIRfilterSCC.i
-/GrFIRfilterSIS.i
-/GrFreqXlatingFIRfilterCCC.i
-/GrFreqXlatingFIRfilterCCF.i
-/GrFreqXlatingFIRfilterFCC.i
-/GrFreqXlatingFIRfilterFCF.i
-/GrFreqXlatingFIRfilterSCC.i
-/GrFreqXlatingFIRfilterSCF.i
-/# --- generated files ---
-/gr_add_cc.cc
-/gr_add_cc.h
-/gr_add_cc.i
-/gr_add_const_c.cc
-/gr_add_const_cc.cc
-/gr_add_const_cc.h
-/gr_add_const_cc.i
-/gr_add_const_c.h
-/gr_add_const_c.i
-/gr_add_const_f.cc
-/gr_add_const_ff.cc
-/gr_add_const_ff.h
-/gr_add_const_ff.i
-/gr_add_const_f.h
-/gr_add_const_f.i
-/gr_add_const_i.cc
-/gr_add_const_i.h
-/gr_add_const_i.i
-/gr_add_const_ii.cc
-/gr_add_const_ii.h
-/gr_add_const_ii.i
-/gr_add_const_s.cc
-/gr_add_const_sf.cc
-/gr_add_const_sf.h
-/gr_add_const_sf.i
-/gr_add_const_s.h
-/gr_add_const_s.i
-/gr_add_const_ss.cc
-/gr_add_const_ss.h
-/gr_add_const_ss.i
-/gr_add_const_vcc.cc
-/gr_add_const_vcc.h
-/gr_add_const_vcc.i
-/gr_add_const_vff.cc
-/gr_add_const_vff.h
-/gr_add_const_vff.i
-/gr_add_const_vii.cc
-/gr_add_const_vii.h
-/gr_add_const_vii.i
-/gr_add_const_vss.cc
-/gr_add_const_vss.h
-/gr_add_const_vss.i
-/gr_add_ii.cc
-/gr_add_ii.h
-/gr_add_ii.i
-/gr_add_ss.cc
-/gr_add_ss.h
-/gr_add_ss.i
-/gr_and_bb.cc
-/gr_and_bb.h
-/gr_and_bb.i
-/gr_and_ii.cc
-/gr_and_ii.h
-/gr_and_ii.i
-/gr_and_ss.cc
-/gr_and_ss.h
-/gr_and_ss.i
-/gr_argmax_fs.cc
-/gr_argmax_fs.h
-/gr_argmax_fs.i
-/gr_argmax_is.cc
-/gr_argmax_is.h
-/gr_argmax_is.i
-/gr_argmax_ss.cc
-/gr_argmax_ss.h
-/gr_argmax_ss.i
-/gr_chunks_to_symbols_bc.cc
-/gr_chunks_to_symbols_bc.h
-/gr_chunks_to_symbols_bc.i
-/gr_chunks_to_symbols_bf.cc
-/gr_chunks_to_symbols_bf.h
-/gr_chunks_to_symbols_bf.i
-/gr_chunks_to_symbols_ic.cc
-/gr_chunks_to_symbols_ic.h
-/gr_chunks_to_symbols_ic.i
-/gr_chunks_to_symbols_if.cc
-/gr_chunks_to_symbols_if.h
-/gr_chunks_to_symbols_if.i
-/gr_chunks_to_symbols_sc.cc
-/gr_chunks_to_symbols_sc.h
-/gr_chunks_to_symbols_sc.i
-/gr_chunks_to_symbols_sf.cc
-/gr_chunks_to_symbols_sf.h
-/gr_chunks_to_symbols_sf.i
-/gr_divide_cc.cc
-/gr_divide_cc.h
-/gr_divide_cc.i
-/gr_divide_ff.cc
-/gr_divide_ff.h
-/gr_divide_ff.i
-/gr_divide_ii.cc
-/gr_divide_ii.h
-/gr_divide_ii.i
-/gr_divide_ss.cc
-/gr_divide_ss.h
-/gr_divide_ss.i
-/gr_integrate_cc.cc
-/gr_integrate_cc.h
-/gr_integrate_cc.i
-/gr_integrate_ff.cc
-/gr_integrate_ff.h
-/gr_integrate_ff.i
-/gr_integrate_ii.cc
-/gr_integrate_ii.h
-/gr_integrate_ii.i
-/gr_integrate_ss.cc
-/gr_integrate_ss.h
-/gr_integrate_ss.i
-/gr_max_ff.cc
-/gr_max_ff.h
-/gr_max_ff.i
-/gr_max_ii.cc
-/gr_max_ii.h
-/gr_max_ii.i
-/gr_max_ss.cc
-/gr_max_ss.h
-/gr_max_ss.i
-/gr_multiply_const_ii.cc
-/gr_multiply_const_ii.h
-/gr_multiply_const_ii.i
-/gr_multiply_const_ss.cc
-/gr_multiply_const_ss.h
-/gr_multiply_const_ss.i
-/gr_multiply_const_vcc.cc
-/gr_multiply_const_vcc.h
-/gr_multiply_const_vcc.i
-/gr_multiply_const_vff.cc
-/gr_multiply_const_vff.h
-/gr_multiply_const_vff.i
-/gr_multiply_const_vii.cc
-/gr_multiply_const_vii.h
-/gr_multiply_const_vii.i
-/gr_multiply_const_vss.cc
-/gr_multiply_const_vss.h
-/gr_multiply_const_vss.i
-/gr_multiply_ii.cc
-/gr_multiply_ii.h
-/gr_multiply_ii.i
-/gr_multiply_ss.cc
-/gr_multiply_ss.h
-/gr_multiply_ss.i
-/gr_mute_cc.cc
-/gr_mute_cc.h
-/gr_mute_cc.i
-/gr_mute_ff.cc
-/gr_mute_ff.h
-/gr_mute_ff.i
-/gr_mute_ii.cc
-/gr_mute_ii.h
-/gr_mute_ii.i
-/gr_mute_ss.cc
-/gr_mute_ss.h
-/gr_mute_ss.i
-/gr_noise_source_c.cc
-/gr_noise_source_c.h
-/gr_noise_source_c.i
-/gr_noise_source_f.cc
-/gr_noise_source_f.h
-/gr_noise_source_f.i
-/gr_noise_source_i.cc
-/gr_noise_source_i.h
-/gr_noise_source_i.i
-/gr_noise_source_s.cc
-/gr_noise_source_s.h
-/gr_noise_source_s.i
-/gr_not_bb.cc
-/gr_not_bb.h
-/gr_not_bb.i
-/gr_not_ii.cc
-/gr_not_ii.h
-/gr_not_ii.i
-/gr_not_ss.cc
-/gr_not_ss.h
-/gr_not_ss.i
-/gr_or_bb.cc
-/gr_or_bb.h
-/gr_or_bb.i
-/gr_or_ii.cc
-/gr_or_ii.h
-/gr_or_ii.i
-/gr_or_ss.cc
-/gr_or_ss.h
-/gr_or_ss.i
-/gr_packed_to_unpacked_bb.cc
-/gr_packed_to_unpacked_bb.h
-/gr_packed_to_unpacked_bb.i
-/gr_packed_to_unpacked_ii.cc
-/gr_packed_to_unpacked_ii.h
-/gr_packed_to_unpacked_ii.i
-/gr_packed_to_unpacked_ss.cc
-/gr_packed_to_unpacked_ss.h
-/gr_packed_to_unpacked_ss.i
-/gr_peak_detector_fb.cc
-/gr_peak_detector_fb.h
-/gr_peak_detector_fb.i
-/gr_peak_detector_ff.cc
-/gr_peak_detector_ff.h
-/gr_peak_detector_ff.i
-/gr_peak_detector_ib.cc
-/gr_peak_detector_ib.h
-/gr_peak_detector_ib.i
-/gr_peak_detector_ii.cc
-/gr_peak_detector_ii.h
-/gr_peak_detector_ii.i
-/gr_peak_detector_sb.cc
-/gr_peak_detector_sb.h
-/gr_peak_detector_sb.i
-/gr_peak_detector_ss.cc
-/gr_peak_detector_ss.h
-/gr_peak_detector_ss.i
-/gr_prefix.cc
-/gr_sample_and_hold_bb.cc
-/gr_sample_and_hold_bb.h
-/gr_sample_and_hold_bb.i
-/gr_sample_and_hold_ff.cc
-/gr_sample_and_hold_ff.h
-/gr_sample_and_hold_ff.i
-/gr_sample_and_hold_ii.cc
-/gr_sample_and_hold_ii.h
-/gr_sample_and_hold_ii.i
-/gr_sample_and_hold_ss.cc
-/gr_sample_and_hold_ss.h
-/gr_sample_and_hold_ss.i
-/gr_sig_source_c.cc
-/gr_sig_source_c.h
-/gr_sig_source_c.i
-/gr_sig_source_f.cc
-/gr_sig_source_f.h
-/gr_sig_source_f.i
-/gr_sig_source_i.cc
-/gr_sig_source_i.h
-/gr_sig_source_i.i
-/gr_sig_source_s.cc
-/gr_sig_source_s.h
-/gr_sig_source_s.i
-/gr_sub_cc.cc
-/gr_sub_cc.h
-/gr_sub_cc.i
-/gr_sub_ff.cc
-/gr_sub_ff.h
-/gr_sub_ff.i
-/gr_sub_ii.cc
-/gr_sub_ii.h
-/gr_sub_ii.i
-/gr_sub_ss.cc
-/gr_sub_ss.h
-/gr_sub_ss.i
-/gr_unpacked_to_packed_bb.cc
-/gr_unpacked_to_packed_bb.h
-/gr_unpacked_to_packed_bb.i
-/gr_unpacked_to_packed_ii.cc
-/gr_unpacked_to_packed_ii.h
-/gr_unpacked_to_packed_ii.i
-/gr_unpacked_to_packed_ss.cc
-/gr_unpacked_to_packed_ss.h
-/gr_unpacked_to_packed_ss.i
-/gr_vector_sink_b.cc
-/gr_vector_sink_b.h
-/gr_vector_sink_b.i
-/gr_vector_sink_c.cc
-/gr_vector_sink_c.h
-/gr_vector_sink_c.i
-/gr_vector_sink_f.cc
-/gr_vector_sink_f.h
-/gr_vector_sink_f.i
-/gr_vector_sink_i.cc
-/gr_vector_sink_i.h
-/gr_vector_sink_i.i
-/gr_vector_sink_s.cc
-/gr_vector_sink_s.h
-/gr_vector_sink_s.i
-/gr_vector_source_b.cc
-/gr_vector_source_b.h
-/gr_vector_source_b.i
-/gr_vector_source_c.cc
-/gr_vector_source_c.h
-/gr_vector_source_c.i
-/gr_vector_source_f.cc
-/gr_vector_source_f.h
-/gr_vector_source_f.i
-/gr_vector_source_i.cc
-/gr_vector_source_i.h
-/gr_vector_source_i.i
-/gr_vector_source_s.cc
-/gr_vector_source_s.h
-/gr_vector_source_s.i
-/gr_xor_bb.cc
-/gr_xor_bb.h
-/gr_xor_bb.i
-/gr_xor_ii.cc
-/gr_xor_ii.h
-/gr_xor_ii.i
-/gr_xor_ss.cc
-/gr_xor_ss.h
-/gr_xor_ss.i
-/gr_moving_average_cc.cc
-/gr_moving_average_cc.h
-/gr_moving_average_cc.i
-/gr_moving_average_ff.cc
-/gr_moving_average_ff.h
-/gr_moving_average_ff.i
-/gr_moving_average_ss.cc
-/gr_moving_average_ss.h
-/gr_moving_average_ss.i
-/gr_moving_average_ii.cc
-/gr_moving_average_ii.h
-/gr_moving_average_ii.i
-/gr_and_const_bb.cc
-/gr_and_const_ss.h
-/gr_and_const_ss.i
-/gr_and_const_ii.cc
-/gr_and_const_bb.h
-/gr_and_const_ss.cc
-/gr_and_const_bb.i
-/gr_and_const_ii.h
-/gr_and_const_ii.i
-/# --- end generated files ---
-/stamp-*
-/gengen_generated.i
diff --git a/gnuradio-core/src/lib/gengen/CMakeLists.txt b/gnuradio-core/src/lib/gengen/CMakeLists.txt
index 98b149e97..8a43a8880 100644
--- a/gnuradio-core/src/lib/gengen/CMakeLists.txt
+++ b/gnuradio-core/src/lib/gengen/CMakeLists.txt
@@ -84,6 +84,8 @@ expand_h_cc_i(gr_vector_source_X b s i f c)
expand_h_cc_i(gr_vector_sink_X b s i f c)
expand_h_cc_i(gr_noise_source_X s i f c)
expand_h_cc_i(gr_sig_source_X s i f c)
+expand_h_cc_i(gr_probe_signal_X b s i f c)
+expand_h_cc_i(gr_probe_signal_vX b s i f c)
expand_h_cc_i(gr_add_const_XX ss ii ff cc sf)
expand_h_cc_i(gr_multiply_const_XX ss ii)
diff --git a/gnuradio-core/src/lib/gengen/Makefile.am b/gnuradio-core/src/lib/gengen/Makefile.am
deleted file mode 100644
index 5fbb6f52c..000000000
--- a/gnuradio-core/src/lib/gengen/Makefile.am
+++ /dev/null
@@ -1,159 +0,0 @@
-#
-# Copyright 2001,2002,2004,2006,2007,2008,2009 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-#
-
-include $(top_srcdir)/Makefile.common
-
-AM_CPPFLAGS = $(STD_DEFINES_AND_INCLUDES) $(CPPUNIT_INCLUDES) $(WITH_INCLUDES)
-
-#noinst_LTLIBRARIES = libgengen.la libgengen-qa.la
-noinst_LTLIBRARIES = libgengen.la
-
-# ----------------------------------------------------------------
-# these scripts generate code
-
-core_generator = \
- generate_all.py \
- generate_common.py \
- gr_add_XX.cc.t \
- gr_add_XX.h.t \
- gr_add_XX.i.t \
- gr_add_const_XX.cc.t \
- gr_add_const_XX.h.t \
- gr_add_const_XX.i.t \
- gr_add_const_vXX.cc.t \
- gr_add_const_vXX.h.t \
- gr_add_const_vXX.i.t \
- gr_argmax_XX.cc.t \
- gr_argmax_XX.h.t \
- gr_argmax_XX.i.t \
- gr_chunks_to_symbols_XX.cc.t \
- gr_chunks_to_symbols_XX.h.t \
- gr_chunks_to_symbols_XX.i.t \
- gr_divide_XX.cc.t \
- gr_divide_XX.h.t \
- gr_divide_XX.i.t \
- gr_integrate_XX.cc.t \
- gr_integrate_XX.h.t \
- gr_integrate_XX.i.t \
- gr_max_XX.cc.t \
- gr_max_XX.h.t \
- gr_max_XX.i.t \
- gr_multiply_XX.cc.t \
- gr_multiply_XX.h.t \
- gr_multiply_XX.i.t \
- gr_multiply_const_XX.cc.t \
- gr_multiply_const_XX.h.t \
- gr_multiply_const_XX.i.t \
- gr_multiply_const_vXX.cc.t \
- gr_multiply_const_vXX.h.t \
- gr_multiply_const_vXX.i.t \
- gr_mute_XX.cc.t \
- gr_mute_XX.h.t \
- gr_mute_XX.i.t \
- gr_noise_source_X.cc.t \
- gr_noise_source_X.h.t \
- gr_noise_source_X.i.t \
- gr_packed_to_unpacked_XX.cc.t \
- gr_packed_to_unpacked_XX.h.t \
- gr_packed_to_unpacked_XX.i.t \
- gr_peak_detector_XX.cc.t \
- gr_peak_detector_XX.h.t \
- gr_peak_detector_XX.i.t \
- gr_sample_and_hold_XX.cc.t \
- gr_sample_and_hold_XX.h.t \
- gr_sample_and_hold_XX.i.t \
- gr_sig_source_X.cc.t \
- gr_sig_source_X.h.t \
- gr_sig_source_X.i.t \
- gr_sub_XX.cc.t \
- gr_sub_XX.h.t \
- gr_sub_XX.i.t \
- gr_unpacked_to_packed_XX.cc.t \
- gr_unpacked_to_packed_XX.h.t \
- gr_unpacked_to_packed_XX.i.t \
- gr_vector_source_X.cc.t \
- gr_vector_source_X.h.t \
- gr_vector_source_X.i.t \
- gr_vector_sink_X.cc.t \
- gr_vector_sink_X.h.t \
- gr_vector_sink_X.i.t \
- gr_xor_XX.cc.t \
- gr_xor_XX.h.t \
- gr_xor_XX.i.t \
- gr_and_XX.cc.t \
- gr_and_XX.h.t \
- gr_and_XX.i.t \
- gr_and_const_XX.cc.t \
- gr_and_const_XX.h.t \
- gr_and_const_XX.i.t \
- gr_or_XX.cc.t \
- gr_or_XX.h.t \
- gr_or_XX.i.t \
- gr_not_XX.cc.t \
- gr_not_XX.h.t \
- gr_not_XX.i.t \
- gr_moving_average_XX.cc.t \
- gr_moving_average_XX.h.t \
- gr_moving_average_XX.i.t
-
-# Source built by Python into $(builddir)
-BUILT_SOURCES += \
- $(GENERATED_H) \
- $(GENERATED_I) \
- $(GENERATED_CC) \
- gengen_generated.i
-
-# ----------------------------------------------------------------
-
-EXTRA_DIST += \
- $(core_generator)
-
-libgengen_la_SOURCES = \
- $(GENERATED_CC)
-
-grinclude_HEADERS = \
- $(GENERATED_H) \
- gr_endianness.h \
- gr_noise_type.h \
- gr_sig_source_waveform.h
-
-swiginclude_HEADERS = \
- $(GENERATED_I) \
- gr_endianness.i \
- gengen.i \
- gengen_generated.i
-
-# Do creation and inclusion of other Makefiles last
-
-# include the srcdir's Makefile.gen; doing this creates an implicit
-# dependency between $(srcdir)/Makefile.in and $(srcdir)/Makefile.gen.
-include $(srcdir)/Makefile.gen
-
-# common way for generating local Makefile.gen
-makefile_gen_gen_command = PYTHONPATH=$(top_srcdir)/gnuradio-core/src/python srcdir=$(srcdir) do_makefile=1 do_sources=0 $(PYTHON) $(srcdir)/generate_all.py
-include $(top_srcdir)/Makefile.gen.gen
-
-# common way for generating sources from templates when using
-# BUILT_SOURCES, using parallel build protection.
-gen_sources = $(BUILT_SOURCES)
-gen_sources_deps = $(core_generator)
-par_gen_command = PYTHONPATH=$(top_srcdir)/gnuradio-core/src/python srcdir=$(srcdir) $(PYTHON) $(srcdir)/generate_all.py
-include $(top_srcdir)/Makefile.par.gen
diff --git a/gnuradio-core/src/lib/gengen/Makefile.gen b/gnuradio-core/src/lib/gengen/Makefile.gen
index db260585f..b4a255dc0 100644
--- a/gnuradio-core/src/lib/gengen/Makefile.gen
+++ b/gnuradio-core/src/lib/gengen/Makefile.gen
@@ -72,6 +72,16 @@ GENERATED_H = \
gr_peak_detector_fb.h \
gr_peak_detector_ib.h \
gr_peak_detector_sb.h \
+ gr_probe_signal_b.h \
+ gr_probe_signal_s.h \
+ gr_probe_signal_i.h \
+ gr_probe_signal_f.h \
+ gr_probe_signal_c.h \
+ gr_probe_signal_vb.h \
+ gr_probe_signal_vs.h \
+ gr_probe_signal_vi.h \
+ gr_probe_signal_vf.h \
+ gr_probe_signal_vc.h \
gr_sample_and_hold_bb.h \
gr_sample_and_hold_ff.h \
gr_sample_and_hold_ii.h \
@@ -172,6 +182,16 @@ GENERATED_I = \
gr_peak_detector_fb.i \
gr_peak_detector_ib.i \
gr_peak_detector_sb.i \
+ gr_probe_signal_b.i \
+ gr_probe_signal_s.i \
+ gr_probe_signal_i.i \
+ gr_probe_signal_f.i \
+ gr_probe_signal_c.i \
+ gr_probe_signal_vb.i \
+ gr_probe_signal_vs.i \
+ gr_probe_signal_vi.i \
+ gr_probe_signal_vf.i \
+ gr_probe_signal_vc.i \
gr_sample_and_hold_bb.i \
gr_sample_and_hold_ff.i \
gr_sample_and_hold_ii.i \
@@ -272,6 +292,16 @@ GENERATED_CC = \
gr_peak_detector_fb.cc \
gr_peak_detector_ib.cc \
gr_peak_detector_sb.cc \
+ gr_probe_signal_b.cc \
+ gr_probe_signal_s.cc \
+ gr_probe_signal_i.cc \
+ gr_probe_signal_f.cc \
+ gr_probe_signal_c.cc \
+ gr_probe_signal_vb.cc \
+ gr_probe_signal_vs.cc \
+ gr_probe_signal_vi.cc \
+ gr_probe_signal_vf.cc \
+ gr_probe_signal_vc.cc \
gr_sample_and_hold_bb.cc \
gr_sample_and_hold_ff.cc \
gr_sample_and_hold_ii.cc \
diff --git a/gnuradio-core/src/lib/gengen/generate_common.py b/gnuradio-core/src/lib/gengen/generate_common.py
index 6da2044e0..70f805711 100755
--- a/gnuradio-core/src/lib/gengen/generate_common.py
+++ b/gnuradio-core/src/lib/gengen/generate_common.py
@@ -33,7 +33,9 @@ ss_roots = [
'gr_vector_source_X',
'gr_vector_sink_X',
'gr_noise_source_X',
- 'gr_sig_source_X'
+ 'gr_sig_source_X',
+ 'gr_probe_signal_X',
+ 'gr_probe_signal_vX'
]
# regular blocks
@@ -83,6 +85,8 @@ def generate ():
expand_h_cc_i ('gr_add_const_XX', 'sf') # for MC4020
expand_h_cc_i ('gr_vector_sink_X', 'b')
expand_h_cc_i ('gr_vector_source_X', 'b')
+ expand_h_cc_i ('gr_probe_signal_X', 'b')
+ expand_h_cc_i ('gr_probe_signal_vX', 'b')
for r in ss_roots:
for s in ss_signatures:
expand_h_cc_i (r, s)
diff --git a/gnuradio-core/src/lib/gengen/gr_noise_source_X.h.t b/gnuradio-core/src/lib/gengen/gr_noise_source_X.h.t
index ab5992257..196501c4d 100644
--- a/gnuradio-core/src/lib/gengen/gr_noise_source_X.h.t
+++ b/gnuradio-core/src/lib/gengen/gr_noise_source_X.h.t
@@ -34,22 +34,38 @@
class @NAME@;
typedef boost::shared_ptr<@NAME@> @NAME@_sptr;
+/*! \brief Make a noise source
+ * \param type the random distribution to use (see gr_noise_type.h)
+ * \param ampl a scaling factor for the output
+ * \param seed seed for random generators. Note that for uniform and
+ * Gaussian distributions, this should be a negative number.
+ */
GR_CORE_API @NAME@_sptr
-gr_make_@BASE_NAME@ (gr_noise_type_t type, float ampl, long seed = 3021);
+gr_make_@BASE_NAME@ (gr_noise_type_t type, float ampl, long seed = 0);
/*!
- * \brief random number source
+ * \brief Random number source
* \ingroup source_blk
+ *
+ * \details
+ * Generate random values from different distributions.
+ * Currently, only Gaussian and uniform are enabled.
+ *
+ * \param type the random distribution to use (see gr_noise_type.h)
+ * \param ampl a scaling factor for the output
+ * \param seed seed for random generators. Note that for uniform and
+ * Gaussian distributions, this should be a negative number.
*/
class GR_CORE_API @NAME@ : public gr_sync_block {
friend GR_CORE_API @NAME@_sptr
+
gr_make_@BASE_NAME@ (gr_noise_type_t type, float ampl, long seed);
gr_noise_type_t d_type;
float d_ampl;
gr_random d_rng;
- @NAME@ (gr_noise_type_t type, float ampl, long seed = 3021);
+ @NAME@ (gr_noise_type_t type, float ampl, long seed = 0);
public:
void set_type (gr_noise_type_t type) { d_type = type; }
diff --git a/gnuradio-core/src/lib/gengen/gr_noise_source_X.i.t b/gnuradio-core/src/lib/gengen/gr_noise_source_X.i.t
index 179dc0343..36a51f31a 100644
--- a/gnuradio-core/src/lib/gengen/gr_noise_source_X.i.t
+++ b/gnuradio-core/src/lib/gengen/gr_noise_source_X.i.t
@@ -25,11 +25,11 @@
GR_SWIG_BLOCK_MAGIC(gr,@BASE_NAME@);
@NAME@_sptr
-gr_make_@BASE_NAME@ (gr_noise_type_t type, float ampl, long seed = 3021);
+gr_make_@BASE_NAME@ (gr_noise_type_t type, float ampl, long seed = 0);
class @NAME@ : public gr_block {
private:
- @NAME@ (gr_noise_type_t type, float ampl, long seed = 3021);
+ @NAME@ (gr_noise_type_t type, float ampl, long seed = 0);
public:
void set_type (gr_noise_type_t type) { d_type = type; }
diff --git a/gnuradio-core/src/lib/general/gr_probe_signal_f.cc b/gnuradio-core/src/lib/gengen/gr_probe_signal_X.cc.t
index ee1a18e89..d60a5126a 100644
--- a/gnuradio-core/src/lib/general/gr_probe_signal_f.cc
+++ b/gnuradio-core/src/lib/gengen/gr_probe_signal_X.cc.t
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2005,2010 Free Software Foundation, Inc.
+ * Copyright 2005,2010,2012 Free Software Foundation, Inc.
*
* This file is part of GNU Radio
*
@@ -23,38 +23,37 @@
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
-#include <gr_probe_signal_f.h>
+#include <@NAME@.h>
#include <gr_io_signature.h>
-gr_probe_signal_f_sptr
-gr_make_probe_signal_f()
+@NAME@_sptr
+gr_make_@BASE_NAME@()
{
- return gnuradio::get_initial_sptr(new gr_probe_signal_f());
+ return gnuradio::get_initial_sptr(new @NAME@());
}
-gr_probe_signal_f::gr_probe_signal_f ()
- : gr_sync_block ("probe_signal_f",
- gr_make_io_signature(1, 1, sizeof(float)),
+@NAME@::@NAME@ ()
+: gr_sync_block ("@BASE_NAME@",
+ gr_make_io_signature(1, 1, sizeof(@TYPE@)),
gr_make_io_signature(0, 0, 0)),
d_level(0)
{
}
-gr_probe_signal_f::~gr_probe_signal_f()
+@NAME@::~@NAME@()
{
}
int
-gr_probe_signal_f::work(int noutput_items,
+@NAME@::work(int noutput_items,
gr_vector_const_void_star &input_items,
gr_vector_void_star &output_items)
{
- const float *in = (const float *) input_items[0];
+ const @TYPE@ *in = (const @TYPE@ *) input_items[0];
if (noutput_items > 0)
d_level = in[noutput_items-1];
return noutput_items;
}
-
diff --git a/gnuradio-core/src/lib/general/gr_probe_signal_f.h b/gnuradio-core/src/lib/gengen/gr_probe_signal_X.h.t
index b99c76976..26a95b9b2 100644
--- a/gnuradio-core/src/lib/general/gr_probe_signal_f.h
+++ b/gnuradio-core/src/lib/gengen/gr_probe_signal_X.h.t
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2005 Free Software Foundation, Inc.
+ * Copyright 2005, 2012 Free Software Foundation, Inc.
*
* This file is part of GNU Radio
*
@@ -19,40 +19,40 @@
* the Free Software Foundation, Inc., 51 Franklin Street,
* Boston, MA 02110-1301, USA.
*/
-#ifndef INCLUDED_GR_PROBE_SIGNAL_F_H
-#define INCLUDED_GR_PROBE_SIGNAL_F_H
+#ifndef @GUARD_NAME@
+#define @GUARD_NAME@
#include <gr_core_api.h>
#include <gr_sync_block.h>
-class gr_probe_signal_f;
-typedef boost::shared_ptr<gr_probe_signal_f> gr_probe_signal_f_sptr;
+class @NAME@;
+typedef boost::shared_ptr<@NAME@> @NAME@_sptr;
-GR_CORE_API gr_probe_signal_f_sptr
-gr_make_probe_signal_f ();
+GR_CORE_API @NAME@_sptr
+gr_make_@BASE_NAME@ ();
/*!
* \brief Sink that allows a sample to be grabbed from Python.
* \ingroup sink_blk
*/
-class GR_CORE_API gr_probe_signal_f : public gr_sync_block
+class GR_CORE_API @NAME@ : public gr_sync_block
{
- float d_level;
+ @TYPE@ d_level;
- friend GR_CORE_API gr_probe_signal_f_sptr
- gr_make_probe_signal_f();
+ friend GR_CORE_API @NAME@_sptr
+ gr_make_@BASE_NAME@();
- gr_probe_signal_f();
+ @NAME@();
public:
- ~gr_probe_signal_f();
+ ~@NAME@();
int work(int noutput_items,
gr_vector_const_void_star &input_items,
gr_vector_void_star &output_items);
- float level() const { return d_level; }
+ @TYPE@ level() const { return d_level; }
};
-#endif /* INCLUDED_GR_PROBE_SIGNAL_F_H */
+#endif /* @GUARD_NAME@ */
diff --git a/gnuradio-core/src/lib/general/gr_probe_signal_f.i b/gnuradio-core/src/lib/gengen/gr_probe_signal_X.i.t
index 4255e5dfd..3f1ef8ffd 100644
--- a/gnuradio-core/src/lib/general/gr_probe_signal_f.i
+++ b/gnuradio-core/src/lib/gengen/gr_probe_signal_X.i.t
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2005 Free Software Foundation, Inc.
+ * Copyright 2005, 2012 Free Software Foundation, Inc.
*
* This file is part of GNU Radio
*
@@ -20,13 +20,13 @@
* Boston, MA 02110-1301, USA.
*/
-GR_SWIG_BLOCK_MAGIC(gr,probe_signal_f);
+GR_SWIG_BLOCK_MAGIC(gr,@BASE_NAME@);
-gr_probe_signal_f_sptr
-gr_make_probe_signal_f ();
+@NAME@_sptr
+gr_make_@BASE_NAME@ ();
-class gr_probe_signal_f : public gr_sync_block
+class @NAME@ : public gr_sync_block
{
public:
- float level () const { return d_level; }
+ @TYPE@ level ();
};
diff --git a/gnuradio-core/src/lib/gengen/gr_probe_signal_vX.cc.t b/gnuradio-core/src/lib/gengen/gr_probe_signal_vX.cc.t
new file mode 100644
index 000000000..712b55b9a
--- /dev/null
+++ b/gnuradio-core/src/lib/gengen/gr_probe_signal_vX.cc.t
@@ -0,0 +1,59 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2005,2010,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.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+#include <@NAME@.h>
+#include <gr_io_signature.h>
+#include <iostream>
+
+@NAME@_sptr
+gr_make_@BASE_NAME@(size_t size)
+{
+ return gnuradio::get_initial_sptr(new @NAME@(size));
+}
+
+@NAME@::@NAME@ (size_t size)
+: gr_sync_block ("@BASE_NAME@",
+ gr_make_io_signature(1, 1, size*sizeof(@TYPE@)),
+ gr_make_io_signature(0, 0, 0)),
+ d_level(size, 0), d_size(size)
+{
+}
+
+@NAME@::~@NAME@()
+{
+}
+
+int
+@NAME@::work(int noutput_items,
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items)
+{
+ const @TYPE@ *in = (const @TYPE@ *) input_items[0];
+
+ for (int i=0; i<d_size; i++)
+ d_level[i] = in[(noutput_items-1)*d_size+i];
+
+ return noutput_items;
+}
diff --git a/gnuradio-core/src/lib/general/gr_wvps_ff.h b/gnuradio-core/src/lib/gengen/gr_probe_signal_vX.h.t
index 7c8f26066..3a7277b93 100644
--- a/gnuradio-core/src/lib/general/gr_wvps_ff.h
+++ b/gnuradio-core/src/lib/gengen/gr_probe_signal_vX.h.t
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2008 Free Software Foundation, Inc.
+ * Copyright 2005, 2012 Free Software Foundation, Inc.
*
* This file is part of GNU Radio
*
@@ -19,40 +19,44 @@
* the Free Software Foundation, Inc., 51 Franklin Street,
* Boston, MA 02110-1301, USA.
*/
+#ifndef @GUARD_NAME@
+#define @GUARD_NAME@
-#ifndef INCLUDED_GR_WVPS_FF_H
-#define INCLUDED_GR_WVPS_FF_H
+#include <vector>
#include <gr_core_api.h>
-#include <gr_sync_decimator.h>
+#include <gr_sync_block.h>
-class gr_wvps_ff;
-typedef boost::shared_ptr<gr_wvps_ff> gr_wvps_ff_sptr;
-
-GR_CORE_API gr_wvps_ff_sptr
-gr_make_wvps_ff(int ilen);
+class @NAME@;
+typedef boost::shared_ptr<@NAME@> @NAME@_sptr;
+GR_CORE_API @NAME@_sptr
+gr_make_@BASE_NAME@ (size_t size);
/*!
- * \brief computes the Wavelet Power Spectrum from a set of wavelet coefficients
- * \ingroup wavelet_blk
+ * \brief Sink that allows a sample to be grabbed from Python.
+ * \ingroup sink_blk
*/
-class GR_CORE_API gr_wvps_ff : public gr_sync_block
+class GR_CORE_API @NAME@ : public gr_sync_block
{
- friend GR_CORE_API gr_wvps_ff_sptr
- gr_make_wvps_ff(int ilen);
+ std::vector<@TYPE@> d_level;
+
+ friend GR_CORE_API @NAME@_sptr
+ gr_make_@BASE_NAME@(size_t size);
- int d_ilen;
- int d_olen;
+ @NAME@(size_t size);
- protected:
- gr_wvps_ff(int ilen);
+ size_t d_size;
+
+public:
+ ~@NAME@();
- public:
int work(int noutput_items,
gr_vector_const_void_star &input_items,
gr_vector_void_star &output_items);
+ std::vector<@TYPE@> level() const { return d_level; }
+
};
-#endif /* INCLUDED_GR_WVPS_FF_H */
+#endif /* @GUARD_NAME@ */
diff --git a/gnuradio-core/src/lib/general/gr_probe_mpsk_snr_c.i b/gnuradio-core/src/lib/gengen/gr_probe_signal_vX.i.t
index 37a86b23d..20191948a 100644
--- a/gnuradio-core/src/lib/general/gr_probe_mpsk_snr_c.i
+++ b/gnuradio-core/src/lib/gengen/gr_probe_signal_vX.i.t
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2008 Free Software Foundation, Inc.
+ * Copyright 2005, 2012 Free Software Foundation, Inc.
*
* This file is part of GNU Radio
*
@@ -20,20 +20,13 @@
* Boston, MA 02110-1301, USA.
*/
-GR_SWIG_BLOCK_MAGIC(gr,probe_mpsk_snr_c);
+GR_SWIG_BLOCK_MAGIC(gr,@BASE_NAME@);
-gr_probe_mpsk_snr_c_sptr
-gr_make_probe_mpsk_snr_c(double alpha = 0.0001);
+@NAME@_sptr
+gr_make_@BASE_NAME@ (size_t size);
-class gr_probe_mpsk_snr_c : public gr_sync_block
+class @NAME@ : public gr_sync_block
{
-private:
- void gr_probe_mpsk_snr_c(double alpha);
-
public:
- double signal_mean();
- double noise_variance();
- double snr();
-
- void set_alpha (double alpha);
+ std::vector<@TYPE@> level ();
};
diff --git a/gnuradio-core/src/lib/hier/.gitignore b/gnuradio-core/src/lib/hier/.gitignore
deleted file mode 100644
index 89a768d46..000000000
--- a/gnuradio-core/src/lib/hier/.gitignore
+++ /dev/null
@@ -1,4 +0,0 @@
-/Makefile
-/Makefile.in
-/.libs
-/.deps
diff --git a/gnuradio-core/src/lib/io/.gitignore b/gnuradio-core/src/lib/io/.gitignore
deleted file mode 100644
index a02b6ff73..000000000
--- a/gnuradio-core/src/lib/io/.gitignore
+++ /dev/null
@@ -1,8 +0,0 @@
-/Makefile
-/Makefile.in
-/.la
-/.lo
-/.deps
-/.libs
-/*.la
-/*.lo
diff --git a/gnuradio-core/src/lib/io/Makefile.am b/gnuradio-core/src/lib/io/Makefile.am
deleted file mode 100644
index 442d5e3a9..000000000
--- a/gnuradio-core/src/lib/io/Makefile.am
+++ /dev/null
@@ -1,116 +0,0 @@
-#
-# Copyright 2001,2003,2004,2006,2007,2008 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-#
-
-include $(top_srcdir)/Makefile.common
-
-
-AM_CPPFLAGS = $(STD_DEFINES_AND_INCLUDES) $(WITH_INCLUDES)
-
-noinst_LTLIBRARIES = libio.la
-
-
-libio_la_SOURCES = \
- gr_file_sink.cc \
- gr_file_sink_base.cc \
- gr_file_source.cc \
- gr_file_descriptor_sink.cc \
- gr_file_descriptor_source.cc \
- gr_histo_sink_f.cc \
- gr_message_sink.cc \
- gr_message_source.cc \
- gr_oscope_guts.cc \
- gr_oscope_sink_f.cc \
- gr_oscope_sink_x.cc \
- i2c.cc \
- i2c_bitbang.cc \
- i2c_bbio.cc \
- i2c_bbio_pp.cc \
- microtune_4702.cc \
- microtune_4937.cc \
- microtune_4702_eval_board.cc \
- microtune_4937_eval_board.cc \
- microtune_xxxx.cc \
- microtune_xxxx_eval_board.cc \
- ppio.cc \
- ppio_ppdev.cc \
- sdr_1000.cc \
- gr_udp_sink.cc \
- gr_udp_source.cc \
- gr_wavfile_sink.cc \
- gr_wavfile_source.cc \
- gri_wavfile.cc \
- gr_tagged_file_sink.cc
-
-grinclude_HEADERS = \
- gr_file_sink.h \
- gr_file_sink_base.h \
- gr_file_source.h \
- gr_file_descriptor_sink.h \
- gr_file_descriptor_source.h \
- gr_histo_sink_f.h \
- gr_message_sink.h \
- gr_message_source.h \
- gr_oscope_guts.h \
- gr_oscope_sink_f.h \
- gr_oscope_sink_x.h \
- gr_trigger_mode.h \
- i2c.h \
- i2c_bitbang.h \
- i2c_bbio.h \
- i2c_bbio_pp.h \
- microtune_4702.h \
- microtune_4937.h \
- microtune_4702_eval_board.h \
- microtune_4937_eval_board.h \
- microtune_eval_board_defs.h \
- microtune_xxxx.h \
- microtune_xxxx_eval_board.h \
- ppio.h \
- ppio_ppdev.h \
- sdr_1000.h \
- gr_udp_sink.h \
- gr_udp_source.h \
- gr_wavfile_source.h \
- gr_wavfile_sink.h \
- gri_wavfile.h \
- gr_tagged_file_sink.h
-
-swiginclude_HEADERS = \
- io.i \
- gr_file_sink.i \
- gr_file_sink_base.i \
- gr_file_source.i \
- gr_file_descriptor_sink.i \
- gr_file_descriptor_source.i \
- gr_histo_sink.i \
- gr_message_sink.i \
- gr_message_source.i \
- gr_oscope_sink.i \
- microtune_xxxx_eval_board.i \
- microtune_4702_eval_board.i \
- microtune_4937_eval_board.i \
- ppio.i \
- sdr_1000.i \
- gr_udp_sink.i \
- gr_udp_source.i \
- gr_wavfile_source.i \
- gr_wavfile_sink.i \
- gr_tagged_file_sink.i
diff --git a/gnuradio-core/src/lib/io/gr_message_source.i b/gnuradio-core/src/lib/io/gr_message_source.i
index e4e2016d0..8a9c762d0 100644
--- a/gnuradio-core/src/lib/io/gr_message_source.i
+++ b/gnuradio-core/src/lib/io/gr_message_source.i
@@ -22,14 +22,6 @@
GR_SWIG_BLOCK_MAGIC(gr,message_source);
-#ifdef SWIGGUILE
-// Rename these. Without this, the primitive bindings are OK, but the
-// goops bindings try to create a bogus generic-function...
-// See core.scm for the second part of the workaround.
-%rename(message_source_limit_ctor) gr_make_message_source(size_t itemsize, int msgq_limit);
-%rename(message_source_msgq_ctor) gr_make_message_source(size_t itemsize, gr_msg_queue_sptr msgq);
-#endif
-
gr_message_source_sptr gr_make_message_source (size_t itemsize, int msgq_limit=0);
gr_message_source_sptr gr_make_message_source (size_t itemsize, gr_msg_queue_sptr msgq);
diff --git a/gnuradio-core/src/lib/io/gr_wavfile_sink.cc b/gnuradio-core/src/lib/io/gr_wavfile_sink.cc
index a96aadc72..88b232343 100644
--- a/gnuradio-core/src/lib/io/gr_wavfile_sink.cc
+++ b/gnuradio-core/src/lib/io/gr_wavfile_sink.cc
@@ -184,6 +184,7 @@ gr_wavfile_sink::work (int noutput_items,
int nwritten;
+ gruel::scoped_lock guard(d_mutex); // hold mutex for duration of this block
do_update(); // update: d_fp is reqd
if (!d_fp) // drop output on the floor
return noutput_items;
@@ -254,7 +255,6 @@ gr_wavfile_sink::do_update()
return;
}
- gruel::scoped_lock guard(d_mutex); // hold mutex for duration of this block
if (d_fp) {
close_wav();
}
diff --git a/gnuradio-core/src/lib/io/gr_wavfile_sink.h b/gnuradio-core/src/lib/io/gr_wavfile_sink.h
index 5fd3eaadc..6d06d74e9 100644
--- a/gnuradio-core/src/lib/io/gr_wavfile_sink.h
+++ b/gnuradio-core/src/lib/io/gr_wavfile_sink.h
@@ -44,10 +44,10 @@ gr_make_wavfile_sink (const char *filename,
int bits_per_sample = 16);
/*!
- * \brief Read stream from a Microsoft PCM (.wav) file, output floats
+ * \brief Write stream to a Microsoft PCM (.wav) file.
*
- * Values are within [-1;1].
- * Check gr_make_wavfile_source() for extra info.
+ * Values must be floats within [-1;1].
+ * Check gr_make_wavfile_sink() for extra info.
*
* \ingroup sink_blk
*/
@@ -86,6 +86,13 @@ private:
short convert_to_short(float sample);
/*!
+ * \brief If any file changes have occurred, update now. This is called
+ * internally by work() and thus doesn't usually need to be called by
+ * hand.
+ */
+ void do_update();
+
+ /*!
* \brief Writes information to the WAV header which is not available
* a-priori (chunk size etc.) and closes the file. Not thread-safe and
* assumes d_fp is a valid file pointer, should thus only be called by
@@ -108,13 +115,6 @@ public:
void close();
/*!
- * \brief If any file changes have occurred, update now. This is called
- * internally by work() and thus doesn't usually need to be called by
- * hand.
- */
- void do_update();
-
- /*!
* \brief Set the sample rate. This will not affect the WAV file
* currently opened. Any following open() calls will use this new
* sample rate.
diff --git a/gnuradio-core/src/lib/missing/.gitignore b/gnuradio-core/src/lib/missing/.gitignore
deleted file mode 100644
index a02b6ff73..000000000
--- a/gnuradio-core/src/lib/missing/.gitignore
+++ /dev/null
@@ -1,8 +0,0 @@
-/Makefile
-/Makefile.in
-/.la
-/.lo
-/.deps
-/.libs
-/*.la
-/*.lo
diff --git a/gnuradio-core/src/lib/missing/Makefile.am b/gnuradio-core/src/lib/missing/Makefile.am
deleted file mode 100644
index 1cc6014a1..000000000
--- a/gnuradio-core/src/lib/missing/Makefile.am
+++ /dev/null
@@ -1,46 +0,0 @@
-#
-# Copyright 2003,2004,2008,2009,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 $(top_srcdir)/Makefile.common
-
-AM_CPPFLAGS = $(GRUEL_INCLUDES) $(GNURADIO_INCLUDES) $(WITH_INCLUDES)
-
-EXTRA_DIST += \
- getopt.h \
- getopt.c \
- gettimeofday.c \
- posix_memalign.cc \
- posix_memalign.h \
- usleep.c
-
-noinst_LTLIBRARIES = libmissing.la
-
-libmissing_la_common_SOURCES = \
- bug_work_around_8.cc
-
-powerpc_CODE = \
- posix_memalign.cc
-
-if MD_CPU_powerpc
-libmissing_la_SOURCES = $(libmissing_la_common_SOURCES) $(powerpc_CODE)
-else
-libmissing_la_SOURCES = $(libmissing_la_common_SOURCES)
-endif
diff --git a/gnuradio-core/src/lib/reed-solomon/.gitignore b/gnuradio-core/src/lib/reed-solomon/.gitignore
deleted file mode 100644
index f137f5c67..000000000
--- a/gnuradio-core/src/lib/reed-solomon/.gitignore
+++ /dev/null
@@ -1,9 +0,0 @@
-/Makefile
-/Makefile.in
-/.la
-/.lo
-/.deps
-/.libs
-/*.la
-/*.lo
-/rstest
diff --git a/gnuradio-core/src/lib/reed-solomon/Makefile.am b/gnuradio-core/src/lib/reed-solomon/Makefile.am
deleted file mode 100644
index 5548f4280..000000000
--- a/gnuradio-core/src/lib/reed-solomon/Makefile.am
+++ /dev/null
@@ -1,55 +0,0 @@
-#
-# Copyright 2002,2008 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-#
-
-include $(top_srcdir)/Makefile.common
-
-# Note, this Makefile.am only builds the char versions of the reed soloman routines.
-# If you need the int versions too, please figure out how to add them *cleanly* to
-# this Makefile.am.
-
-AM_CPPFLAGS = $(STD_DEFINES_AND_INCLUDES) $(CPPUNIT_INCLUDES) $(WITH_INCLUDES)
-
-TESTS = rstest
-
-EXTRA_DIST += \
- README.karn
-
-noinst_LTLIBRARIES = librs.la
-
-noinst_PROGRAMS = \
- rstest
-
-librs_la_SOURCES = \
- encode_rs.c \
- decode_rs.c \
- init_rs.c
-
-grinclude_HEADERS = \
- rs.h
-
-noinst_HEADERS = \
- ccsds.h \
- char.h \
- int.h \
- fixed.h
-
-rstest_SOURCES = rstest.c exercise.c
-rstest_LDADD = librs.la
diff --git a/gnuradio-core/src/lib/runtime/.gitignore b/gnuradio-core/src/lib/runtime/.gitignore
deleted file mode 100644
index a02b6ff73..000000000
--- a/gnuradio-core/src/lib/runtime/.gitignore
+++ /dev/null
@@ -1,8 +0,0 @@
-/Makefile
-/Makefile.in
-/.la
-/.lo
-/.deps
-/.libs
-/*.la
-/*.lo
diff --git a/gnuradio-core/src/lib/runtime/Makefile.am b/gnuradio-core/src/lib/runtime/Makefile.am
deleted file mode 100644
index 38da3d5fd..000000000
--- a/gnuradio-core/src/lib/runtime/Makefile.am
+++ /dev/null
@@ -1,165 +0,0 @@
-#
-# Copyright 2003,2004,2007,2008,2009,2010,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 $(top_srcdir)/Makefile.common
-
-AM_CPPFLAGS = $(GRUEL_INCLUDES) $(STD_DEFINES_AND_INCLUDES) $(CPPUNIT_INCLUDES) $(WITH_INCLUDES)
-
-noinst_LTLIBRARIES = libruntime.la libruntime-qa.la
-
-libruntime_la_LIBADD = \
- $(SHM_OPEN_LIBS)
-
-
-libruntime_la_SOURCES = \
- gr_basic_block.cc \
- gr_flowgraph.cc \
- gr_flat_flowgraph.cc \
- gr_block.cc \
- gr_block_detail.cc \
- gr_block_executor.cc \
- gr_hier_block2.cc \
- gr_hier_block2_detail.cc \
- gr_buffer.cc \
- gr_dispatcher.cc \
- gr_error_handler.cc \
- gr_io_signature.cc \
- gr_local_sighandler.cc \
- gr_message.cc \
- gr_msg_accepter.cc \
- gr_msg_handler.cc \
- gr_msg_queue.cc \
- gr_pagesize.cc \
- gr_preferences.cc \
- gr_realtime.cc \
- gr_scheduler.cc \
- gr_scheduler_sts.cc \
- gr_scheduler_tpb.cc \
- gr_single_threaded_scheduler.cc \
- gr_sptr_magic.cc \
- gr_sync_block.cc \
- gr_sync_decimator.cc \
- gr_sync_interpolator.cc \
- gr_sys_paths.cc \
- gr_top_block.cc \
- gr_top_block_impl.cc \
- gr_tpb_detail.cc \
- gr_tpb_thread_body.cc \
- gr_vmcircbuf.cc \
- gr_vmcircbuf_mmap_shm_open.cc \
- gr_vmcircbuf_mmap_tmpfile.cc \
- gr_vmcircbuf_createfilemapping.cc \
- gr_vmcircbuf_sysv_shm.cc \
- gr_select_handler.cc
-
-libruntime_qa_la_SOURCES = \
- qa_gr_block.cc \
- qa_gr_hier_block2.cc \
- qa_gr_hier_block2_derived.cc \
- qa_gr_buffer.cc \
- qa_gr_flowgraph.cc \
- qa_gr_top_block.cc \
- qa_gr_io_signature.cc \
- qa_gr_vmcircbuf.cc \
- qa_block_tags.cc \
- qa_set_msg_handler.cc \
- qa_runtime.cc
-
-grinclude_HEADERS = \
- gr_basic_block.h \
- gr_flowgraph.h \
- gr_flat_flowgraph.h \
- gr_block.h \
- gr_block_detail.h \
- gr_block_executor.h \
- gr_hier_block2.h \
- gr_hier_block2_detail.h \
- gr_buffer.h \
- gr_complex.h \
- gr_dispatcher.h \
- gr_error_handler.h \
- gr_io_signature.h \
- gr_local_sighandler.h \
- gr_message.h \
- gr_msg_accepter.h \
- gr_msg_handler.h \
- gr_msg_queue.h \
- gr_pagesize.h \
- gr_preferences.h \
- gr_realtime.h \
- gr_runtime_types.h \
- gr_scheduler.h \
- gr_scheduler_sts.h \
- gr_scheduler_tpb.h \
- gr_select_handler.h \
- gr_single_threaded_scheduler.h \
- gr_sptr_magic.h \
- gr_sync_block.h \
- gr_sync_decimator.h \
- gr_sync_interpolator.h \
- gr_top_block.h \
- gr_top_block_impl.h \
- gr_tpb_detail.h \
- gr_tpb_thread_body.h \
- gr_timer.h \
- gr_sys_paths.h \
- gr_types.h \
- gr_unittests.h \
- gr_vmcircbuf.h \
- gr_tags.h
-
-noinst_HEADERS = \
- gr_vmcircbuf_mmap_shm_open.h \
- gr_vmcircbuf_mmap_tmpfile.h \
- gr_vmcircbuf_sysv_shm.h \
- gr_vmcircbuf_createfilemapping.h \
- qa_gr_block.h \
- qa_gr_flowgraph.h \
- qa_gr_hier_block2.h \
- qa_gr_hier_block2_derived.h \
- qa_gr_buffer.h \
- qa_gr_io_signature.h \
- qa_gr_top_block.h \
- qa_gr_vmcircbuf.h \
- qa_block_tags.h \
- qa_set_msg_handler.h \
- qa_runtime.h
-
-swiginclude_HEADERS = \
- gr_basic_block.i \
- gr_block.i \
- gr_block_detail.i \
- gr_hier_block2.i \
- gr_buffer.i \
- gr_dispatcher.i \
- gr_error_handler.i \
- gr_io_signature.i \
- gr_message.i \
- gr_msg_handler.i \
- gr_msg_queue.i \
- gr_realtime.i \
- gr_single_threaded_scheduler.i \
- gr_sync_block.i \
- gr_sync_decimator.i \
- gr_sync_interpolator.i \
- gr_tags.i \
- gr_top_block.i \
- runtime.i
diff --git a/gnuradio-core/src/lib/runtime/gr_basic_block.h b/gnuradio-core/src/lib/runtime/gr_basic_block.h
index 2adca8ccb..7e95509e2 100644
--- a/gnuradio-core/src/lib/runtime/gr_basic_block.h
+++ b/gnuradio-core/src/lib/runtime/gr_basic_block.h
@@ -103,7 +103,7 @@ public:
std::string name() const { return d_name; }
gr_io_signature_sptr input_signature() const { return d_input_signature; }
gr_io_signature_sptr output_signature() const { return d_output_signature; }
- gr_basic_block_sptr to_basic_block(); // Needed for Python/Guile type coercion
+ gr_basic_block_sptr to_basic_block(); // Needed for Python type coercion
/*!
* \brief Confirm that ninputs and noutputs is an acceptable combination.
diff --git a/gnuradio-core/src/lib/runtime/gr_buffer.h b/gnuradio-core/src/lib/runtime/gr_buffer.h
index e8e393756..9478e1ce0 100644
--- a/gnuradio-core/src/lib/runtime/gr_buffer.h
+++ b/gnuradio-core/src/lib/runtime/gr_buffer.h
@@ -93,6 +93,7 @@ class GR_CORE_API gr_buffer {
uint64_t nitems_written() { return d_abs_write_offset; }
+ size_t get_sizeof_item() { return d_sizeof_item; }
/*!
* \brief Adds a new tag to the buffer.
@@ -249,6 +250,8 @@ class GR_CORE_API gr_buffer_reader {
uint64_t nitems_read() { return d_abs_read_offset; }
+ size_t get_sizeof_item() { return d_buffer->get_sizeof_item(); }
+
/*!
* \brief Return the block that reads via this reader.
*
diff --git a/gnuradio-core/src/lib/runtime/gr_flat_flowgraph.cc b/gnuradio-core/src/lib/runtime/gr_flat_flowgraph.cc
index 5d1057e0f..5c9e4bf3f 100644
--- a/gnuradio-core/src/lib/runtime/gr_flat_flowgraph.cc
+++ b/gnuradio-core/src/lib/runtime/gr_flat_flowgraph.cc
@@ -28,6 +28,7 @@
#include <gr_block_detail.h>
#include <gr_io_signature.h>
#include <gr_buffer.h>
+#include <volk/volk.h>
#include <iostream>
#include <map>
@@ -62,8 +63,14 @@ gr_flat_flowgraph::setup_connections()
cast_to_block_sptr(*p)->set_detail(allocate_block_detail(*p));
// Connect inputs to outputs for each block
- for(gr_basic_block_viter_t p = blocks.begin(); p != blocks.end(); p++)
+ for(gr_basic_block_viter_t p = blocks.begin(); p != blocks.end(); p++) {
connect_block_inputs(*p);
+
+ gr_block_sptr block = cast_to_block_sptr(*p);
+ block->set_unaligned(0);
+ block->set_is_unaligned(false);
+ }
+
}
gr_block_detail_sptr
@@ -243,6 +250,9 @@ gr_flat_flowgraph::merge_connections(gr_flat_flowgraph_sptr old_ffg)
if (GR_FLAT_FLOWGRAPH_DEBUG)
std::cout << "new block" << std::endl;
connect_block_inputs(block);
+
+ // Make sure all buffers are aligned
+ setup_buffer_alignment(block);
}
// Now deal with the fact that the block details might have changed numbers of
@@ -250,6 +260,35 @@ gr_flat_flowgraph::merge_connections(gr_flat_flowgraph_sptr old_ffg)
}
}
+void
+gr_flat_flowgraph::setup_buffer_alignment(gr_block_sptr block)
+{
+ const int alignment = volk_get_alignment();
+ for(int i = 0; i < block->detail()->ninputs(); i++) {
+ void *r = (void*)block->detail()->input(i)->read_pointer();
+ unsigned long int ri = (unsigned long int)r % alignment;
+ //std::cout << "reader: " << r << " alignment: " << ri << std::endl;
+ if(ri != 0) {
+ size_t itemsize = block->detail()->input(i)->get_sizeof_item();
+ block->detail()->input(i)->update_read_pointer(ri/itemsize);
+ }
+ block->set_unaligned(0);
+ block->set_is_unaligned(false);
+ }
+
+ for(int i = 0; i < block->detail()->noutputs(); i++) {
+ void *w = (void*)block->detail()->output(i)->write_pointer();
+ unsigned long int wi = (unsigned long int)w % alignment;
+ size_t itemsize = block->detail()->output(i)->get_sizeof_item();
+ //std::cout << "writer: " << w << " alignment: " << wi << std::endl;
+ if(wi != 0) {
+ block->detail()->output(i)->update_write_pointer(wi/itemsize);
+ }
+ block->set_unaligned(0);
+ block->set_is_unaligned(false);
+ }
+}
+
void gr_flat_flowgraph::dump()
{
for (gr_edge_viter_t e = d_edges.begin(); e != d_edges.end(); e++)
diff --git a/gnuradio-core/src/lib/runtime/gr_flat_flowgraph.h b/gnuradio-core/src/lib/runtime/gr_flat_flowgraph.h
index 2cc883686..ce863509b 100644
--- a/gnuradio-core/src/lib/runtime/gr_flat_flowgraph.h
+++ b/gnuradio-core/src/lib/runtime/gr_flat_flowgraph.h
@@ -63,6 +63,15 @@ private:
gr_block_detail_sptr allocate_block_detail(gr_basic_block_sptr block);
gr_buffer_sptr allocate_buffer(gr_basic_block_sptr block, int port);
void connect_block_inputs(gr_basic_block_sptr block);
+
+ /* When reusing a flowgraph's blocks, this call makes sure all of the
+ * buffer's are aligned at the machine's alignment boundary and tells
+ * the blocks that they are aligned.
+ *
+ * Called from both setup_connections and merge_connections for
+ * start and restarts.
+ */
+ void setup_buffer_alignment(gr_block_sptr block);
};
#endif /* INCLUDED_GR_FLAT_FLOWGRAPH_H */
diff --git a/gnuradio-core/src/lib/runtime/gr_hier_block2.h b/gnuradio-core/src/lib/runtime/gr_hier_block2.h
index 9652f6bf4..12bcf10e7 100644
--- a/gnuradio-core/src/lib/runtime/gr_hier_block2.h
+++ b/gnuradio-core/src/lib/runtime/gr_hier_block2.h
@@ -150,7 +150,7 @@ public:
// ignored by the user.
gr_flat_flowgraph_sptr flatten() const;
- gr_hier_block2_sptr to_hier_block2(); // Needed for Python/Guile type coercion
+ gr_hier_block2_sptr to_hier_block2(); // Needed for Python type coercion
};
inline gr_hier_block2_sptr cast_to_hier_block2_sptr(gr_basic_block_sptr block) {
diff --git a/gnuradio-core/src/lib/runtime/gr_hier_block2.i b/gnuradio-core/src/lib/runtime/gr_hier_block2.i
index 32b656e24..4fa7c3bc0 100644
--- a/gnuradio-core/src/lib/runtime/gr_hier_block2.i
+++ b/gnuradio-core/src/lib/runtime/gr_hier_block2.i
@@ -63,5 +63,5 @@ public:
void lock();
void unlock();
- gr_hier_block2_sptr to_hier_block2(); // Needed for Python/Guile type coercion
+ gr_hier_block2_sptr to_hier_block2(); // Needed for Python type coercion
};
diff --git a/gnuradio-core/src/lib/runtime/gr_msg_queue.i b/gnuradio-core/src/lib/runtime/gr_msg_queue.i
index c9214bef3..2a78253b3 100644
--- a/gnuradio-core/src/lib/runtime/gr_msg_queue.i
+++ b/gnuradio-core/src/lib/runtime/gr_msg_queue.i
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2005,2009,2010 Free Software Foundation, Inc.
+ * Copyright 2005,2009,2010,2011 Free Software Foundation, Inc.
*
* This file is part of GNU Radio
*
@@ -85,16 +85,16 @@ public:
%inline %{
gr_message_sptr gr_py_msg_queue__delete_head(gr_msg_queue_sptr q) {
gr_message_sptr msg;
- Py_BEGIN_ALLOW_THREADS; // release global interpreter lock
- msg = q->delete_head(); // possibly blocking call
- Py_END_ALLOW_THREADS; // acquire global interpreter lock
+ GR_PYTHON_BLOCKING_CODE(
+ msg = q->delete_head();
+ )
return msg;
}
void gr_py_msg_queue__insert_tail(gr_msg_queue_sptr q, gr_message_sptr msg) {
- Py_BEGIN_ALLOW_THREADS; // release global interpreter lock
- q->insert_tail(msg); // possibly blocking call
- Py_END_ALLOW_THREADS; // acquire global interpreter lock
+ GR_PYTHON_BLOCKING_CODE(
+ q->insert_tail(msg);
+ )
}
%}
@@ -105,64 +105,3 @@ gr_msg_queue_sptr.insert_tail = gr_py_msg_queue__insert_tail
gr_msg_queue_sptr.handle = gr_py_msg_queue__insert_tail
%}
#endif // SWIGPYTHON
-
-/*
- * Similar trickery as above, only this time for Guile
- */
-#ifdef SWIGGUILE
-
-%{
- struct arg_holder {
- gr_msg_queue_sptr q;
- gr_message_sptr msg;
- };
-
- static void *
- insert_tail_shim(void *arg)
- {
- arg_holder *a = (arg_holder *)arg;
- a->q->insert_tail(a->msg);
- return 0;
- }
-
- static void *
- delete_head_shim(void *arg)
- {
- arg_holder *a = (arg_holder *)arg;
- a->msg = a->q->delete_head();
- return 0;
- }
-%}
-
-%inline %{
-
- // handle and insert_tail are equivalent
- static void
- handle(gr_msg_queue_sptr q, gr_message_sptr msg)
- {
- arg_holder a;
- a.q = q;
- a.msg = msg;
- scm_without_guile(insert_tail_shim, (void *) &a);
- }
-
- static void
- insert_tail(gr_msg_queue_sptr q, gr_message_sptr msg)
- {
- arg_holder a;
- a.q = q;
- a.msg = msg;
- scm_without_guile(insert_tail_shim, (void *) &a);
- }
-
- static gr_message_sptr
- delete_head(gr_msg_queue_sptr q)
- {
- arg_holder a;
- a.q = q;
- scm_without_guile(delete_head_shim, (void *) &a);
- return a.msg;
- }
-%}
-
-#endif // SWIGGUILE
diff --git a/gnuradio-core/src/lib/runtime/gr_top_block.h b/gnuradio-core/src/lib/runtime/gr_top_block.h
index 9d01ba3ef..e837700c3 100644
--- a/gnuradio-core/src/lib/runtime/gr_top_block.h
+++ b/gnuradio-core/src/lib/runtime/gr_top_block.h
@@ -122,7 +122,7 @@ public:
//! Set the maximum number of noutput_items in the flowgraph
void set_max_noutput_items(int nmax);
- gr_top_block_sptr to_top_block(); // Needed for Python/Guile type coercion
+ gr_top_block_sptr to_top_block(); // Needed for Python type coercion
};
inline gr_top_block_sptr cast_to_top_block_sptr(gr_basic_block_sptr block) {
diff --git a/gnuradio-core/src/lib/runtime/gr_top_block.i b/gnuradio-core/src/lib/runtime/gr_top_block.i
index 70c627ffd..ea5534c17 100644
--- a/gnuradio-core/src/lib/runtime/gr_top_block.i
+++ b/gnuradio-core/src/lib/runtime/gr_top_block.i
@@ -51,7 +51,7 @@ public:
int max_noutput_items();
void set_max_noutput_items(int nmax);
- gr_top_block_sptr to_top_block(); // Needed for Python/Guile type coercion
+ gr_top_block_sptr to_top_block(); // Needed for Python type coercion
};
#ifdef SWIGPYTHON
@@ -73,34 +73,3 @@ void top_block_wait_unlocked(gr_top_block_sptr r) throw (std::runtime_error)
%}
#endif
-
-#ifdef SWIGGUILE
-
-%{
- struct tb_arg_holder {
- gr_top_block_sptr tb;
- };
-
- static void *
- tb_wait_shim(void *arg)
- {
- tb_arg_holder *a = (tb_arg_holder *)arg;
- a->tb->wait();
- return 0;
- }
-
-%}
-
-%inline %{
-
- static void
- top_block_wait_unlocked(gr_top_block_sptr r) throw (std::runtime_error)
- {
- tb_arg_holder a;
- a.tb = r;
- scm_without_guile(tb_wait_shim, (void *) &a);
- }
-
-%}
-
-#endif
diff --git a/gnuradio-core/src/lib/swig/.gitignore b/gnuradio-core/src/lib/swig/.gitignore
deleted file mode 100644
index a6f145618..000000000
--- a/gnuradio-core/src/lib/swig/.gitignore
+++ /dev/null
@@ -1,49 +0,0 @@
-/Makefile
-/Makefile.in
-/.la
-/.lo
-/.deps
-/.libs
-/*.la
-/*.lo
-/*.pyc
-/swigrun.py
-/swigrun_wrap.c
-/Makefile.swigdeps.new
-gnuradio_core_filter.cc
-gnuradio_core_filter.d
-gnuradio_core_filter.h
-gnuradio_core_filter.py
-gnuradio_core_filter.scm
-gnuradio_core_filter-primitive.scm
-gnuradio_core_general.cc
-gnuradio_core_general.d
-gnuradio_core_general.h
-gnuradio_core_general.py
-gnuradio_core_general.scm
-gnuradio_core_general-primitive.scm
-gnuradio_core_gengen.cc
-gnuradio_core_gengen.d
-gnuradio_core_gengen.h
-gnuradio_core_gengen.py
-gnuradio_core_gengen.scm
-gnuradio_core_gengen-primitive.scm
-gnuradio_core_hier.cc
-gnuradio_core_hier.d
-gnuradio_core_hier.h
-gnuradio_core_hier.py
-gnuradio_core_hier.scm
-gnuradio_core_hier-primitive.scm
-gnuradio_core_io.cc
-gnuradio_core_io.d
-gnuradio_core_io.h
-gnuradio_core_io.py
-gnuradio_core_io.scm
-gnuradio_core_io-primitive.scm
-gnuradio_core_runtime.cc
-gnuradio_core_runtime.d
-gnuradio_core_runtime.h
-gnuradio_core_runtime.py
-gnuradio_core_runtime.scm
-gnuradio_core_runtime-primitive.scm
-
diff --git a/gnuradio-core/src/lib/swig/Makefile.am b/gnuradio-core/src/lib/swig/Makefile.am
deleted file mode 100644
index 91c1746e6..000000000
--- a/gnuradio-core/src/lib/swig/Makefile.am
+++ /dev/null
@@ -1,109 +0,0 @@
-#
-# Copyright 2001,2003,2004,2005,2006,2007,2008,2009,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.
-#
-
-include $(top_srcdir)/Makefile.common
-include $(top_srcdir)/Makefile.swig
-
-AM_CPPFLAGS = -I$(srcdir) $(STD_DEFINES_AND_INCLUDES) $(PYTHON_CPPFLAGS) \
- $(WITH_INCLUDES)
-
-# ----------------------------------------------------------------
-# We've split the previously monstrous gnuradio_core into 6
-# smaller pieces. This reduces compile time coupling and creates
-# smaller pieces for the compiler to digest. prior to this change, on
-# X86_64, g++'s resident set size was 650MB!
-# ----------------------------------------------------------------
-
-TOP_SWIG_DOC_IFILES = \
- filter_swig_doc.i \
- general_swig_doc.i \
- gengen_swig_doc.i \
- hier_swig_doc.i \
- io_swig_doc.i \
- runtime_swig_doc.i
-
-TOP_SWIG_IFILES = \
- $(TOP_SWIG_DOC_IFILES) \
- gnuradio_core_runtime.i \
- gnuradio_core_general.i \
- gnuradio_core_gengen.i \
- gnuradio_core_filter.i \
- gnuradio_core_io.i \
- gnuradio_core_hier.i
-
-BUILT_SOURCES += \
- $(TOP_SWIG_DOC_IFILES)
-
-EXTRA_DIST += \
- $(TOP_SWIG_DOC_IFILES)
-
-$(TOP_SWIG_DOC_IFILES):
- `echo "" > $@`
-
-# SWIG headers get installed in ${prefix}/include/gnuradio/swig
-swiginclude_HEADERS = \
- gnuradio.i \
- gr_swig_block_magic.i \
- gr_shared_ptr.i \
- $(TOP_SWIG_DOC_IFILES)
-
-# SWIG headers that get installed in ${prefix}/include/gnuradio/swig/...
-nobase_swiginclude_HEADERS = \
- guile/std_complex.i \
- guile/std_vector.i
-
-
-# special install for this top-level Python script which includes all
-# of the split Python libraries.
-ourpythondir = $(grpythondir)/gr
-ourpython_PYTHON = gnuradio_core.py
-
-# ----------------------------------------------------------------
-# FIXME As of swig 1.3.31, this still seems to be required...
-# gnuradio_swig_bug_workaround.h : gnuradio_core_runtime.py $(srcdir)/gen-swig-bug-fix
-# $(PYTHON) $(srcdir)/gen-swig-bug-fix python/gnuradio_core_runtime.cc $@
-
-EXTRA_DIST += gen-swig-bug-fix
-
-# C/C++ headers get installed in ${prefix}/include/gnuradio
-grinclude_HEADERS = gnuradio_swig_bug_workaround.h
-
-
-# Install so that they end up available as:
-# import gnuradio.gr
-# This ends up at:
-# ${prefix}/lib/python${python_version}/site-packages/gnuradio/gr
-gnuradio_core_runtime_pythondir_category = gnuradio/gr
-gnuradio_core_general_pythondir_category = gnuradio/gr
-gnuradio_core_gengen_pythondir_category = gnuradio/gr
-gnuradio_core_filter_pythondir_category = gnuradio/gr
-gnuradio_core_io_pythondir_category = gnuradio/gr
-gnuradio_core_hier_pythondir_category = gnuradio/gr
-
-# additional libraries for linking with each SWIG-generated library
-gnuradio_core_runtime_la_swig_libadd = $(GNURADIO_CORE_LA)
-gnuradio_core_general_la_swig_libadd = $(GNURADIO_CORE_LA)
-gnuradio_core_gengen_la_swig_libadd = $(GNURADIO_CORE_LA)
-gnuradio_core_filter_la_swig_libadd = $(GNURADIO_CORE_LA)
-gnuradio_core_io_la_swig_libadd = $(GNURADIO_CORE_LA)
-gnuradio_core_hier_la_swig_libadd = $(GNURADIO_CORE_LA)
-
-SWIG_GUILE_FLAGS += -DIN_GNURADIO_CORE
diff --git a/gnuradio-core/src/lib/swig/Makefile.swig.gen b/gnuradio-core/src/lib/swig/Makefile.swig.gen
deleted file mode 100644
index cede68817..000000000
--- a/gnuradio-core/src/lib/swig/Makefile.swig.gen
+++ /dev/null
@@ -1,870 +0,0 @@
-# -*- Makefile -*-
-#
-# 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.
-#
-
-# Makefile.swig.gen for gnuradio_core_runtime.i
-
-## Default install locations for these files:
-##
-## Default location for the Python directory is:
-## ${prefix}/lib/python${python_version}/site-packages/[category]/gnuradio_core_runtime
-## Default location for the Python exec directory is:
-## ${exec_prefix}/lib/python${python_version}/site-packages/[category]/gnuradio_core_runtime
-##
-## The following can be overloaded to change the install location, but
-## this has to be done in the including Makefile.am -before-
-## Makefile.swig is included.
-
-gnuradio_core_runtime_pythondir_category ?= gnuradio/gnuradio_core_runtime
-gnuradio_core_runtime_pylibdir_category ?= $(gnuradio_core_runtime_pythondir_category)
-gnuradio_core_runtime_pythondir = $(pythondir)/$(gnuradio_core_runtime_pythondir_category)
-gnuradio_core_runtime_pylibdir = $(pyexecdir)/$(gnuradio_core_runtime_pylibdir_category)
-
-# The .so libraries for the guile modules get installed whereever guile
-# is installed, usually /usr/lib/guile/gnuradio/
-# FIXME: determince whether these should be installed with gnuradio.
-gnuradio_core_runtime_scmlibdir = $(libdir)
-
-# The scm files for the guile modules get installed where ever guile
-# is installed, usually /usr/share/guile/site/gnuradio_core_runtime
-# FIXME: determince whether these should be installed with gnuradio.
-gnuradio_core_runtime_scmdir = $(guiledir)
-
-## SWIG headers are always installed into the same directory.
-
-gnuradio_core_runtime_swigincludedir = $(swigincludedir)
-
-## This is a template file for a "generated" Makefile addition (in
-## this case, "Makefile.swig.gen"). By including the top-level
-## Makefile.swig, this file will be used to generate the SWIG
-## dependencies. Assign the variable TOP_SWIG_FILES to be the list of
-## SWIG .i files to generated wrappings for; there can be more than 1
-## so long as the names are unique (no sorting is done on the
-## TOP_SWIG_FILES list). This file explicitly assumes that a SWIG .i
-## file will generate .cc, .py, and possibly .h files -- meaning that
-## all of these files will have the same base name (that provided for
-## the SWIG .i file).
-##
-## This code is setup to ensure parallel MAKE ("-j" or "-jN") does the
-## right thing. For more info, see <
-## http://sources.redhat.com/automake/automake.html#Multiple-Outputs >
-
-## Other cleaned files: dependency files generated by SWIG or this Makefile
-
-MOSTLYCLEANFILES += $(DEPDIR)/*.S*
-
-## Various SWIG variables. These can be overloaded in the including
-## Makefile.am by setting the variable value there, then including
-## Makefile.swig .
-
-gnuradio_core_runtime_swiginclude_HEADERS = \
- gnuradio_core_runtime.i \
- $(gnuradio_core_runtime_swiginclude_headers)
-
-if PYTHON
-gnuradio_core_runtime_pylib_LTLIBRARIES = \
- _gnuradio_core_runtime.la
-
-_gnuradio_core_runtime_la_SOURCES = \
- python/gnuradio_core_runtime.cc \
- $(gnuradio_core_runtime_la_swig_sources)
-
-gnuradio_core_runtime_python_PYTHON = \
- gnuradio_core_runtime.py \
- $(gnuradio_core_runtime_python)
-
-_gnuradio_core_runtime_la_LIBADD = \
- $(STD_SWIG_LA_LIB_ADD) \
- $(gnuradio_core_runtime_la_swig_libadd)
-
-_gnuradio_core_runtime_la_LDFLAGS = \
- $(STD_SWIG_LA_LD_FLAGS) \
- $(gnuradio_core_runtime_la_swig_ldflags)
-
-_gnuradio_core_runtime_la_CXXFLAGS = \
- $(STD_SWIG_CXX_FLAGS) \
- -I$(top_builddir) \
- $(gnuradio_core_runtime_la_swig_cxxflags)
-
-python/gnuradio_core_runtime.cc: gnuradio_core_runtime.py
-gnuradio_core_runtime.py: gnuradio_core_runtime.i
-
-# Include the python dependencies for this file
--include python/gnuradio_core_runtime.d
-
-endif # end of if python
-
-if GUILE
-
-gnuradio_core_runtime_scmlib_LTLIBRARIES = \
- libguile-gnuradio-gnuradio_core_runtime.la
-libguile_gnuradio_gnuradio_core_runtime_la_SOURCES = \
- guile/gnuradio_core_runtime.cc \
- $(gnuradio_core_runtime_la_swig_sources)
-nobase_gnuradio_core_runtime_scm_DATA = \
- gnuradio/gnuradio_core_runtime.scm \
- gnuradio/gnuradio_core_runtime-primitive.scm
-libguile_gnuradio_gnuradio_core_runtime_la_LIBADD = \
- $(STD_SWIG_LA_LIB_ADD) \
- $(gnuradio_core_runtime_la_swig_libadd)
-libguile_gnuradio_gnuradio_core_runtime_la_LDFLAGS = \
- $(STD_SWIG_LA_LD_FLAGS) \
- $(gnuradio_core_runtime_la_swig_ldflags)
-libguile_gnuradio_gnuradio_core_runtime_la_CXXFLAGS = \
- $(STD_SWIG_CXX_FLAGS) \
- -I$(top_builddir) \
- $(gnuradio_core_runtime_la_swig_cxxflags)
-
-guile/gnuradio_core_runtime.cc: gnuradio/gnuradio_core_runtime.scm
-gnuradio/gnuradio_core_runtime.scm: gnuradio_core_runtime.i
-gnuradio/gnuradio_core_runtime-primitive.scm: gnuradio/gnuradio_core_runtime.scm
-
-# Include the guile dependencies for this file
--include guile/gnuradio_core_runtime.d
-
-endif # end of GUILE
-
-
-# -*- Makefile -*-
-#
-# 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.
-#
-
-# Makefile.swig.gen for gnuradio_core_general.i
-
-## Default install locations for these files:
-##
-## Default location for the Python directory is:
-## ${prefix}/lib/python${python_version}/site-packages/[category]/gnuradio_core_general
-## Default location for the Python exec directory is:
-## ${exec_prefix}/lib/python${python_version}/site-packages/[category]/gnuradio_core_general
-##
-## The following can be overloaded to change the install location, but
-## this has to be done in the including Makefile.am -before-
-## Makefile.swig is included.
-
-gnuradio_core_general_pythondir_category ?= gnuradio/gnuradio_core_general
-gnuradio_core_general_pylibdir_category ?= $(gnuradio_core_general_pythondir_category)
-gnuradio_core_general_pythondir = $(pythondir)/$(gnuradio_core_general_pythondir_category)
-gnuradio_core_general_pylibdir = $(pyexecdir)/$(gnuradio_core_general_pylibdir_category)
-
-# The .so libraries for the guile modules get installed whereever guile
-# is installed, usually /usr/lib/guile/gnuradio/
-# FIXME: determince whether these should be installed with gnuradio.
-gnuradio_core_general_scmlibdir = $(libdir)
-
-# The scm files for the guile modules get installed where ever guile
-# is installed, usually /usr/share/guile/site/gnuradio_core_general
-# FIXME: determince whether these should be installed with gnuradio.
-gnuradio_core_general_scmdir = $(guiledir)
-
-## SWIG headers are always installed into the same directory.
-
-gnuradio_core_general_swigincludedir = $(swigincludedir)
-
-## This is a template file for a "generated" Makefile addition (in
-## this case, "Makefile.swig.gen"). By including the top-level
-## Makefile.swig, this file will be used to generate the SWIG
-## dependencies. Assign the variable TOP_SWIG_FILES to be the list of
-## SWIG .i files to generated wrappings for; there can be more than 1
-## so long as the names are unique (no sorting is done on the
-## TOP_SWIG_FILES list). This file explicitly assumes that a SWIG .i
-## file will generate .cc, .py, and possibly .h files -- meaning that
-## all of these files will have the same base name (that provided for
-## the SWIG .i file).
-##
-## This code is setup to ensure parallel MAKE ("-j" or "-jN") does the
-## right thing. For more info, see <
-## http://sources.redhat.com/automake/automake.html#Multiple-Outputs >
-
-## Other cleaned files: dependency files generated by SWIG or this Makefile
-
-MOSTLYCLEANFILES += $(DEPDIR)/*.S*
-
-## Various SWIG variables. These can be overloaded in the including
-## Makefile.am by setting the variable value there, then including
-## Makefile.swig .
-
-gnuradio_core_general_swiginclude_HEADERS = \
- gnuradio_core_general.i \
- $(gnuradio_core_general_swiginclude_headers)
-
-if PYTHON
-gnuradio_core_general_pylib_LTLIBRARIES = \
- _gnuradio_core_general.la
-
-_gnuradio_core_general_la_SOURCES = \
- python/gnuradio_core_general.cc \
- $(gnuradio_core_general_la_swig_sources)
-
-gnuradio_core_general_python_PYTHON = \
- gnuradio_core_general.py \
- $(gnuradio_core_general_python)
-
-_gnuradio_core_general_la_LIBADD = \
- $(STD_SWIG_LA_LIB_ADD) \
- $(gnuradio_core_general_la_swig_libadd)
-
-_gnuradio_core_general_la_LDFLAGS = \
- $(STD_SWIG_LA_LD_FLAGS) \
- $(gnuradio_core_general_la_swig_ldflags)
-
-_gnuradio_core_general_la_CXXFLAGS = \
- $(STD_SWIG_CXX_FLAGS) \
- -I$(top_builddir) \
- $(gnuradio_core_general_la_swig_cxxflags)
-
-python/gnuradio_core_general.cc: gnuradio_core_general.py
-gnuradio_core_general.py: gnuradio_core_general.i
-
-# Include the python dependencies for this file
--include python/gnuradio_core_general.d
-
-endif # end of if python
-
-if GUILE
-
-gnuradio_core_general_scmlib_LTLIBRARIES = \
- libguile-gnuradio-gnuradio_core_general.la
-libguile_gnuradio_gnuradio_core_general_la_SOURCES = \
- guile/gnuradio_core_general.cc \
- $(gnuradio_core_general_la_swig_sources)
-nobase_gnuradio_core_general_scm_DATA = \
- gnuradio/gnuradio_core_general.scm \
- gnuradio/gnuradio_core_general-primitive.scm
-libguile_gnuradio_gnuradio_core_general_la_LIBADD = \
- $(STD_SWIG_LA_LIB_ADD) \
- $(gnuradio_core_general_la_swig_libadd)
-libguile_gnuradio_gnuradio_core_general_la_LDFLAGS = \
- $(STD_SWIG_LA_LD_FLAGS) \
- $(gnuradio_core_general_la_swig_ldflags)
-libguile_gnuradio_gnuradio_core_general_la_CXXFLAGS = \
- $(STD_SWIG_CXX_FLAGS) \
- -I$(top_builddir) \
- $(gnuradio_core_general_la_swig_cxxflags)
-
-guile/gnuradio_core_general.cc: gnuradio/gnuradio_core_general.scm
-gnuradio/gnuradio_core_general.scm: gnuradio_core_general.i
-gnuradio/gnuradio_core_general-primitive.scm: gnuradio/gnuradio_core_general.scm
-
-# Include the guile dependencies for this file
--include guile/gnuradio_core_general.d
-
-endif # end of GUILE
-
-
-# -*- Makefile -*-
-#
-# 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.
-#
-
-# Makefile.swig.gen for gnuradio_core_gengen.i
-
-## Default install locations for these files:
-##
-## Default location for the Python directory is:
-## ${prefix}/lib/python${python_version}/site-packages/[category]/gnuradio_core_gengen
-## Default location for the Python exec directory is:
-## ${exec_prefix}/lib/python${python_version}/site-packages/[category]/gnuradio_core_gengen
-##
-## The following can be overloaded to change the install location, but
-## this has to be done in the including Makefile.am -before-
-## Makefile.swig is included.
-
-gnuradio_core_gengen_pythondir_category ?= gnuradio/gnuradio_core_gengen
-gnuradio_core_gengen_pylibdir_category ?= $(gnuradio_core_gengen_pythondir_category)
-gnuradio_core_gengen_pythondir = $(pythondir)/$(gnuradio_core_gengen_pythondir_category)
-gnuradio_core_gengen_pylibdir = $(pyexecdir)/$(gnuradio_core_gengen_pylibdir_category)
-
-# The .so libraries for the guile modules get installed whereever guile
-# is installed, usually /usr/lib/guile/gnuradio/
-# FIXME: determince whether these should be installed with gnuradio.
-gnuradio_core_gengen_scmlibdir = $(libdir)
-
-# The scm files for the guile modules get installed where ever guile
-# is installed, usually /usr/share/guile/site/gnuradio_core_gengen
-# FIXME: determince whether these should be installed with gnuradio.
-gnuradio_core_gengen_scmdir = $(guiledir)
-
-## SWIG headers are always installed into the same directory.
-
-gnuradio_core_gengen_swigincludedir = $(swigincludedir)
-
-## This is a template file for a "generated" Makefile addition (in
-## this case, "Makefile.swig.gen"). By including the top-level
-## Makefile.swig, this file will be used to generate the SWIG
-## dependencies. Assign the variable TOP_SWIG_FILES to be the list of
-## SWIG .i files to generated wrappings for; there can be more than 1
-## so long as the names are unique (no sorting is done on the
-## TOP_SWIG_FILES list). This file explicitly assumes that a SWIG .i
-## file will generate .cc, .py, and possibly .h files -- meaning that
-## all of these files will have the same base name (that provided for
-## the SWIG .i file).
-##
-## This code is setup to ensure parallel MAKE ("-j" or "-jN") does the
-## right thing. For more info, see <
-## http://sources.redhat.com/automake/automake.html#Multiple-Outputs >
-
-## Other cleaned files: dependency files generated by SWIG or this Makefile
-
-MOSTLYCLEANFILES += $(DEPDIR)/*.S*
-
-## Various SWIG variables. These can be overloaded in the including
-## Makefile.am by setting the variable value there, then including
-## Makefile.swig .
-
-gnuradio_core_gengen_swiginclude_HEADERS = \
- gnuradio_core_gengen.i \
- $(gnuradio_core_gengen_swiginclude_headers)
-
-if PYTHON
-gnuradio_core_gengen_pylib_LTLIBRARIES = \
- _gnuradio_core_gengen.la
-
-_gnuradio_core_gengen_la_SOURCES = \
- python/gnuradio_core_gengen.cc \
- $(gnuradio_core_gengen_la_swig_sources)
-
-gnuradio_core_gengen_python_PYTHON = \
- gnuradio_core_gengen.py \
- $(gnuradio_core_gengen_python)
-
-_gnuradio_core_gengen_la_LIBADD = \
- $(STD_SWIG_LA_LIB_ADD) \
- $(gnuradio_core_gengen_la_swig_libadd)
-
-_gnuradio_core_gengen_la_LDFLAGS = \
- $(STD_SWIG_LA_LD_FLAGS) \
- $(gnuradio_core_gengen_la_swig_ldflags)
-
-_gnuradio_core_gengen_la_CXXFLAGS = \
- $(STD_SWIG_CXX_FLAGS) \
- -I$(top_builddir) \
- $(gnuradio_core_gengen_la_swig_cxxflags)
-
-python/gnuradio_core_gengen.cc: gnuradio_core_gengen.py
-gnuradio_core_gengen.py: gnuradio_core_gengen.i
-
-# Include the python dependencies for this file
--include python/gnuradio_core_gengen.d
-
-endif # end of if python
-
-if GUILE
-
-gnuradio_core_gengen_scmlib_LTLIBRARIES = \
- libguile-gnuradio-gnuradio_core_gengen.la
-libguile_gnuradio_gnuradio_core_gengen_la_SOURCES = \
- guile/gnuradio_core_gengen.cc \
- $(gnuradio_core_gengen_la_swig_sources)
-nobase_gnuradio_core_gengen_scm_DATA = \
- gnuradio/gnuradio_core_gengen.scm \
- gnuradio/gnuradio_core_gengen-primitive.scm
-libguile_gnuradio_gnuradio_core_gengen_la_LIBADD = \
- $(STD_SWIG_LA_LIB_ADD) \
- $(gnuradio_core_gengen_la_swig_libadd)
-libguile_gnuradio_gnuradio_core_gengen_la_LDFLAGS = \
- $(STD_SWIG_LA_LD_FLAGS) \
- $(gnuradio_core_gengen_la_swig_ldflags)
-libguile_gnuradio_gnuradio_core_gengen_la_CXXFLAGS = \
- $(STD_SWIG_CXX_FLAGS) \
- -I$(top_builddir) \
- $(gnuradio_core_gengen_la_swig_cxxflags)
-
-guile/gnuradio_core_gengen.cc: gnuradio/gnuradio_core_gengen.scm
-gnuradio/gnuradio_core_gengen.scm: gnuradio_core_gengen.i
-gnuradio/gnuradio_core_gengen-primitive.scm: gnuradio/gnuradio_core_gengen.scm
-
-# Include the guile dependencies for this file
--include guile/gnuradio_core_gengen.d
-
-endif # end of GUILE
-
-
-# -*- Makefile -*-
-#
-# 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.
-#
-
-# Makefile.swig.gen for gnuradio_core_filter.i
-
-## Default install locations for these files:
-##
-## Default location for the Python directory is:
-## ${prefix}/lib/python${python_version}/site-packages/[category]/gnuradio_core_filter
-## Default location for the Python exec directory is:
-## ${exec_prefix}/lib/python${python_version}/site-packages/[category]/gnuradio_core_filter
-##
-## The following can be overloaded to change the install location, but
-## this has to be done in the including Makefile.am -before-
-## Makefile.swig is included.
-
-gnuradio_core_filter_pythondir_category ?= gnuradio/gnuradio_core_filter
-gnuradio_core_filter_pylibdir_category ?= $(gnuradio_core_filter_pythondir_category)
-gnuradio_core_filter_pythondir = $(pythondir)/$(gnuradio_core_filter_pythondir_category)
-gnuradio_core_filter_pylibdir = $(pyexecdir)/$(gnuradio_core_filter_pylibdir_category)
-
-# The .so libraries for the guile modules get installed whereever guile
-# is installed, usually /usr/lib/guile/gnuradio/
-# FIXME: determince whether these should be installed with gnuradio.
-gnuradio_core_filter_scmlibdir = $(libdir)
-
-# The scm files for the guile modules get installed where ever guile
-# is installed, usually /usr/share/guile/site/gnuradio_core_filter
-# FIXME: determince whether these should be installed with gnuradio.
-gnuradio_core_filter_scmdir = $(guiledir)
-
-## SWIG headers are always installed into the same directory.
-
-gnuradio_core_filter_swigincludedir = $(swigincludedir)
-
-## This is a template file for a "generated" Makefile addition (in
-## this case, "Makefile.swig.gen"). By including the top-level
-## Makefile.swig, this file will be used to generate the SWIG
-## dependencies. Assign the variable TOP_SWIG_FILES to be the list of
-## SWIG .i files to generated wrappings for; there can be more than 1
-## so long as the names are unique (no sorting is done on the
-## TOP_SWIG_FILES list). This file explicitly assumes that a SWIG .i
-## file will generate .cc, .py, and possibly .h files -- meaning that
-## all of these files will have the same base name (that provided for
-## the SWIG .i file).
-##
-## This code is setup to ensure parallel MAKE ("-j" or "-jN") does the
-## right thing. For more info, see <
-## http://sources.redhat.com/automake/automake.html#Multiple-Outputs >
-
-## Other cleaned files: dependency files generated by SWIG or this Makefile
-
-MOSTLYCLEANFILES += $(DEPDIR)/*.S*
-
-## Various SWIG variables. These can be overloaded in the including
-## Makefile.am by setting the variable value there, then including
-## Makefile.swig .
-
-gnuradio_core_filter_swiginclude_HEADERS = \
- gnuradio_core_filter.i \
- $(gnuradio_core_filter_swiginclude_headers)
-
-if PYTHON
-gnuradio_core_filter_pylib_LTLIBRARIES = \
- _gnuradio_core_filter.la
-
-_gnuradio_core_filter_la_SOURCES = \
- python/gnuradio_core_filter.cc \
- $(gnuradio_core_filter_la_swig_sources)
-
-gnuradio_core_filter_python_PYTHON = \
- gnuradio_core_filter.py \
- $(gnuradio_core_filter_python)
-
-_gnuradio_core_filter_la_LIBADD = \
- $(STD_SWIG_LA_LIB_ADD) \
- $(gnuradio_core_filter_la_swig_libadd)
-
-_gnuradio_core_filter_la_LDFLAGS = \
- $(STD_SWIG_LA_LD_FLAGS) \
- $(gnuradio_core_filter_la_swig_ldflags)
-
-_gnuradio_core_filter_la_CXXFLAGS = \
- $(STD_SWIG_CXX_FLAGS) \
- -I$(top_builddir) \
- $(gnuradio_core_filter_la_swig_cxxflags)
-
-python/gnuradio_core_filter.cc: gnuradio_core_filter.py
-gnuradio_core_filter.py: gnuradio_core_filter.i
-
-# Include the python dependencies for this file
--include python/gnuradio_core_filter.d
-
-endif # end of if python
-
-if GUILE
-
-gnuradio_core_filter_scmlib_LTLIBRARIES = \
- libguile-gnuradio-gnuradio_core_filter.la
-libguile_gnuradio_gnuradio_core_filter_la_SOURCES = \
- guile/gnuradio_core_filter.cc \
- $(gnuradio_core_filter_la_swig_sources)
-nobase_gnuradio_core_filter_scm_DATA = \
- gnuradio/gnuradio_core_filter.scm \
- gnuradio/gnuradio_core_filter-primitive.scm
-libguile_gnuradio_gnuradio_core_filter_la_LIBADD = \
- $(STD_SWIG_LA_LIB_ADD) \
- $(gnuradio_core_filter_la_swig_libadd)
-libguile_gnuradio_gnuradio_core_filter_la_LDFLAGS = \
- $(STD_SWIG_LA_LD_FLAGS) \
- $(gnuradio_core_filter_la_swig_ldflags)
-libguile_gnuradio_gnuradio_core_filter_la_CXXFLAGS = \
- $(STD_SWIG_CXX_FLAGS) \
- -I$(top_builddir) \
- $(gnuradio_core_filter_la_swig_cxxflags)
-
-guile/gnuradio_core_filter.cc: gnuradio/gnuradio_core_filter.scm
-gnuradio/gnuradio_core_filter.scm: gnuradio_core_filter.i
-gnuradio/gnuradio_core_filter-primitive.scm: gnuradio/gnuradio_core_filter.scm
-
-# Include the guile dependencies for this file
--include guile/gnuradio_core_filter.d
-
-endif # end of GUILE
-
-
-# -*- Makefile -*-
-#
-# 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.
-#
-
-# Makefile.swig.gen for gnuradio_core_io.i
-
-## Default install locations for these files:
-##
-## Default location for the Python directory is:
-## ${prefix}/lib/python${python_version}/site-packages/[category]/gnuradio_core_io
-## Default location for the Python exec directory is:
-## ${exec_prefix}/lib/python${python_version}/site-packages/[category]/gnuradio_core_io
-##
-## The following can be overloaded to change the install location, but
-## this has to be done in the including Makefile.am -before-
-## Makefile.swig is included.
-
-gnuradio_core_io_pythondir_category ?= gnuradio/gnuradio_core_io
-gnuradio_core_io_pylibdir_category ?= $(gnuradio_core_io_pythondir_category)
-gnuradio_core_io_pythondir = $(pythondir)/$(gnuradio_core_io_pythondir_category)
-gnuradio_core_io_pylibdir = $(pyexecdir)/$(gnuradio_core_io_pylibdir_category)
-
-# The .so libraries for the guile modules get installed whereever guile
-# is installed, usually /usr/lib/guile/gnuradio/
-# FIXME: determince whether these should be installed with gnuradio.
-gnuradio_core_io_scmlibdir = $(libdir)
-
-# The scm files for the guile modules get installed where ever guile
-# is installed, usually /usr/share/guile/site/gnuradio_core_io
-# FIXME: determince whether these should be installed with gnuradio.
-gnuradio_core_io_scmdir = $(guiledir)
-
-## SWIG headers are always installed into the same directory.
-
-gnuradio_core_io_swigincludedir = $(swigincludedir)
-
-## This is a template file for a "generated" Makefile addition (in
-## this case, "Makefile.swig.gen"). By including the top-level
-## Makefile.swig, this file will be used to generate the SWIG
-## dependencies. Assign the variable TOP_SWIG_FILES to be the list of
-## SWIG .i files to generated wrappings for; there can be more than 1
-## so long as the names are unique (no sorting is done on the
-## TOP_SWIG_FILES list). This file explicitly assumes that a SWIG .i
-## file will generate .cc, .py, and possibly .h files -- meaning that
-## all of these files will have the same base name (that provided for
-## the SWIG .i file).
-##
-## This code is setup to ensure parallel MAKE ("-j" or "-jN") does the
-## right thing. For more info, see <
-## http://sources.redhat.com/automake/automake.html#Multiple-Outputs >
-
-## Other cleaned files: dependency files generated by SWIG or this Makefile
-
-MOSTLYCLEANFILES += $(DEPDIR)/*.S*
-
-## Various SWIG variables. These can be overloaded in the including
-## Makefile.am by setting the variable value there, then including
-## Makefile.swig .
-
-gnuradio_core_io_swiginclude_HEADERS = \
- gnuradio_core_io.i \
- $(gnuradio_core_io_swiginclude_headers)
-
-if PYTHON
-gnuradio_core_io_pylib_LTLIBRARIES = \
- _gnuradio_core_io.la
-
-_gnuradio_core_io_la_SOURCES = \
- python/gnuradio_core_io.cc \
- $(gnuradio_core_io_la_swig_sources)
-
-gnuradio_core_io_python_PYTHON = \
- gnuradio_core_io.py \
- $(gnuradio_core_io_python)
-
-_gnuradio_core_io_la_LIBADD = \
- $(STD_SWIG_LA_LIB_ADD) \
- $(gnuradio_core_io_la_swig_libadd)
-
-_gnuradio_core_io_la_LDFLAGS = \
- $(STD_SWIG_LA_LD_FLAGS) \
- $(gnuradio_core_io_la_swig_ldflags)
-
-_gnuradio_core_io_la_CXXFLAGS = \
- $(STD_SWIG_CXX_FLAGS) \
- -I$(top_builddir) \
- $(gnuradio_core_io_la_swig_cxxflags)
-
-python/gnuradio_core_io.cc: gnuradio_core_io.py
-gnuradio_core_io.py: gnuradio_core_io.i
-
-# Include the python dependencies for this file
--include python/gnuradio_core_io.d
-
-endif # end of if python
-
-if GUILE
-
-gnuradio_core_io_scmlib_LTLIBRARIES = \
- libguile-gnuradio-gnuradio_core_io.la
-libguile_gnuradio_gnuradio_core_io_la_SOURCES = \
- guile/gnuradio_core_io.cc \
- $(gnuradio_core_io_la_swig_sources)
-nobase_gnuradio_core_io_scm_DATA = \
- gnuradio/gnuradio_core_io.scm \
- gnuradio/gnuradio_core_io-primitive.scm
-libguile_gnuradio_gnuradio_core_io_la_LIBADD = \
- $(STD_SWIG_LA_LIB_ADD) \
- $(gnuradio_core_io_la_swig_libadd)
-libguile_gnuradio_gnuradio_core_io_la_LDFLAGS = \
- $(STD_SWIG_LA_LD_FLAGS) \
- $(gnuradio_core_io_la_swig_ldflags)
-libguile_gnuradio_gnuradio_core_io_la_CXXFLAGS = \
- $(STD_SWIG_CXX_FLAGS) \
- -I$(top_builddir) \
- $(gnuradio_core_io_la_swig_cxxflags)
-
-guile/gnuradio_core_io.cc: gnuradio/gnuradio_core_io.scm
-gnuradio/gnuradio_core_io.scm: gnuradio_core_io.i
-gnuradio/gnuradio_core_io-primitive.scm: gnuradio/gnuradio_core_io.scm
-
-# Include the guile dependencies for this file
--include guile/gnuradio_core_io.d
-
-endif # end of GUILE
-
-
-# -*- Makefile -*-
-#
-# 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.
-#
-
-# Makefile.swig.gen for gnuradio_core_hier.i
-
-## Default install locations for these files:
-##
-## Default location for the Python directory is:
-## ${prefix}/lib/python${python_version}/site-packages/[category]/gnuradio_core_hier
-## Default location for the Python exec directory is:
-## ${exec_prefix}/lib/python${python_version}/site-packages/[category]/gnuradio_core_hier
-##
-## The following can be overloaded to change the install location, but
-## this has to be done in the including Makefile.am -before-
-## Makefile.swig is included.
-
-gnuradio_core_hier_pythondir_category ?= gnuradio/gnuradio_core_hier
-gnuradio_core_hier_pylibdir_category ?= $(gnuradio_core_hier_pythondir_category)
-gnuradio_core_hier_pythondir = $(pythondir)/$(gnuradio_core_hier_pythondir_category)
-gnuradio_core_hier_pylibdir = $(pyexecdir)/$(gnuradio_core_hier_pylibdir_category)
-
-# The .so libraries for the guile modules get installed whereever guile
-# is installed, usually /usr/lib/guile/gnuradio/
-# FIXME: determince whether these should be installed with gnuradio.
-gnuradio_core_hier_scmlibdir = $(libdir)
-
-# The scm files for the guile modules get installed where ever guile
-# is installed, usually /usr/share/guile/site/gnuradio_core_hier
-# FIXME: determince whether these should be installed with gnuradio.
-gnuradio_core_hier_scmdir = $(guiledir)
-
-## SWIG headers are always installed into the same directory.
-
-gnuradio_core_hier_swigincludedir = $(swigincludedir)
-
-## This is a template file for a "generated" Makefile addition (in
-## this case, "Makefile.swig.gen"). By including the top-level
-## Makefile.swig, this file will be used to generate the SWIG
-## dependencies. Assign the variable TOP_SWIG_FILES to be the list of
-## SWIG .i files to generated wrappings for; there can be more than 1
-## so long as the names are unique (no sorting is done on the
-## TOP_SWIG_FILES list). This file explicitly assumes that a SWIG .i
-## file will generate .cc, .py, and possibly .h files -- meaning that
-## all of these files will have the same base name (that provided for
-## the SWIG .i file).
-##
-## This code is setup to ensure parallel MAKE ("-j" or "-jN") does the
-## right thing. For more info, see <
-## http://sources.redhat.com/automake/automake.html#Multiple-Outputs >
-
-## Other cleaned files: dependency files generated by SWIG or this Makefile
-
-MOSTLYCLEANFILES += $(DEPDIR)/*.S*
-
-## Various SWIG variables. These can be overloaded in the including
-## Makefile.am by setting the variable value there, then including
-## Makefile.swig .
-
-gnuradio_core_hier_swiginclude_HEADERS = \
- gnuradio_core_hier.i \
- $(gnuradio_core_hier_swiginclude_headers)
-
-if PYTHON
-gnuradio_core_hier_pylib_LTLIBRARIES = \
- _gnuradio_core_hier.la
-
-_gnuradio_core_hier_la_SOURCES = \
- python/gnuradio_core_hier.cc \
- $(gnuradio_core_hier_la_swig_sources)
-
-gnuradio_core_hier_python_PYTHON = \
- gnuradio_core_hier.py \
- $(gnuradio_core_hier_python)
-
-_gnuradio_core_hier_la_LIBADD = \
- $(STD_SWIG_LA_LIB_ADD) \
- $(gnuradio_core_hier_la_swig_libadd)
-
-_gnuradio_core_hier_la_LDFLAGS = \
- $(STD_SWIG_LA_LD_FLAGS) \
- $(gnuradio_core_hier_la_swig_ldflags)
-
-_gnuradio_core_hier_la_CXXFLAGS = \
- $(STD_SWIG_CXX_FLAGS) \
- -I$(top_builddir) \
- $(gnuradio_core_hier_la_swig_cxxflags)
-
-python/gnuradio_core_hier.cc: gnuradio_core_hier.py
-gnuradio_core_hier.py: gnuradio_core_hier.i
-
-# Include the python dependencies for this file
--include python/gnuradio_core_hier.d
-
-endif # end of if python
-
-if GUILE
-
-gnuradio_core_hier_scmlib_LTLIBRARIES = \
- libguile-gnuradio-gnuradio_core_hier.la
-libguile_gnuradio_gnuradio_core_hier_la_SOURCES = \
- guile/gnuradio_core_hier.cc \
- $(gnuradio_core_hier_la_swig_sources)
-nobase_gnuradio_core_hier_scm_DATA = \
- gnuradio/gnuradio_core_hier.scm \
- gnuradio/gnuradio_core_hier-primitive.scm
-libguile_gnuradio_gnuradio_core_hier_la_LIBADD = \
- $(STD_SWIG_LA_LIB_ADD) \
- $(gnuradio_core_hier_la_swig_libadd)
-libguile_gnuradio_gnuradio_core_hier_la_LDFLAGS = \
- $(STD_SWIG_LA_LD_FLAGS) \
- $(gnuradio_core_hier_la_swig_ldflags)
-libguile_gnuradio_gnuradio_core_hier_la_CXXFLAGS = \
- $(STD_SWIG_CXX_FLAGS) \
- -I$(top_builddir) \
- $(gnuradio_core_hier_la_swig_cxxflags)
-
-guile/gnuradio_core_hier.cc: gnuradio/gnuradio_core_hier.scm
-gnuradio/gnuradio_core_hier.scm: gnuradio_core_hier.i
-gnuradio/gnuradio_core_hier-primitive.scm: gnuradio/gnuradio_core_hier.scm
-
-# Include the guile dependencies for this file
--include guile/gnuradio_core_hier.d
-
-endif # end of GUILE
-
-
diff --git a/gnuradio-core/src/lib/swig/gnuradio.i b/gnuradio-core/src/lib/swig/gnuradio.i
index e365aeac7..35dbd5359 100644
--- a/gnuradio-core/src/lib/swig/gnuradio.i
+++ b/gnuradio-core/src/lib/swig/gnuradio.i
@@ -25,23 +25,7 @@
// SWIG interface definition
////////////////////////////////////////////////////////////////////////
-////////////////////////////////////////////////////////////////////////
-// Language independent exception handler
-////////////////////////////////////////////////////////////////////////
-%include exception.i
-
-%exception {
- try {
- $action
- }
- catch(std::exception &e) {
- SWIG_exception(SWIG_RuntimeError, e.what());
- }
- catch(...) {
- SWIG_exception(SWIG_RuntimeError, "Unknown exception");
- }
-
-}
+%include <gruel_common.i>
////////////////////////////////////////////////////////////////////////
// Headers
@@ -55,30 +39,11 @@
%feature("autodoc","1");
-#ifdef SWIGGUILE
-// Export constants and enums as scheme variables, not functions.
-%feature("constasvar");
-#endif
-
// local file
%include <gr_shared_ptr.i>
-
-// non-local SWIG files
-#ifdef SWIGGUILE // Local overrides to support complex
-// It's kind of screwy, but the target language subdir isn't
-// searched automatically except for under ./swig_lib which
-// doesn't really help us since we run swig in many directories
-%include <guile/std_complex.i>
-%include <guile/std_vector.i>
-%include <std_common.i>
-%include <std_string.i>
-%include <std_map.i>
-%include <std_pair.i>
-#else
%include <std_complex.i>
%include <std_vector.i>
%include <stl.i>
-#endif
%include <std_except.i>
typedef std::complex<float> gr_complex;
diff --git a/gnuradio-core/src/lib/swig/gnuradio_core_filter.i b/gnuradio-core/src/lib/swig/gnuradio_core_filter.i
index 952bf93b4..e9a44e54b 100644
--- a/gnuradio-core/src/lib/swig/gnuradio_core_filter.i
+++ b/gnuradio-core/src/lib/swig/gnuradio_core_filter.i
@@ -30,13 +30,3 @@
%include "gnuradio.i" // the common stuff
%include "filter.i"
-
-#if SWIGGUILE
-%scheme %{
-(load-extension-global "libguile-gnuradio-gnuradio_core_filter" "scm_init_gnuradio_gnuradio_core_filter_module")
-%}
-
-%goops %{
- (use-modules (gnuradio gnuradio_core_runtime))
-%}
-#endif
diff --git a/gnuradio-core/src/lib/swig/gnuradio_core_general.i b/gnuradio-core/src/lib/swig/gnuradio_core_general.i
index e39a0197a..33f97815e 100644
--- a/gnuradio-core/src/lib/swig/gnuradio_core_general.i
+++ b/gnuradio-core/src/lib/swig/gnuradio_core_general.i
@@ -52,13 +52,3 @@
}
%}
-
-#if SWIGGUILE
-%scheme %{
-(load-extension-global "libguile-gnuradio-gnuradio_core_general" "scm_init_gnuradio_gnuradio_core_general_module")
-%}
-
-%goops %{
-(use-modules (gnuradio gnuradio_core_runtime))
-%}
-#endif
diff --git a/gnuradio-core/src/lib/swig/gnuradio_core_gengen.i b/gnuradio-core/src/lib/swig/gnuradio_core_gengen.i
index 8753cd36b..b90a5bab3 100644
--- a/gnuradio-core/src/lib/swig/gnuradio_core_gengen.i
+++ b/gnuradio-core/src/lib/swig/gnuradio_core_gengen.i
@@ -30,13 +30,3 @@
%include "gnuradio.i" // the common stuff
%include "gengen.i"
-
-#if SWIGGUILE
-%scheme %{
-(load-extension-global "libguile-gnuradio-gnuradio_core_gengen" "scm_init_gnuradio_gnuradio_core_gengen_module")
-%}
-
-%goops %{
- (use-modules (gnuradio gnuradio_core_runtime))
-%}
-#endif
diff --git a/gnuradio-core/src/lib/swig/gnuradio_core_hier.i b/gnuradio-core/src/lib/swig/gnuradio_core_hier.i
index bb9c71f53..141d9b163 100644
--- a/gnuradio-core/src/lib/swig/gnuradio_core_hier.i
+++ b/gnuradio-core/src/lib/swig/gnuradio_core_hier.i
@@ -30,13 +30,3 @@
%include "gnuradio.i" // the common stuff
%include "hier.i"
-
-#if SWIGGUILE
-%scheme %{
-(load-extension-global "libguile-gnuradio-gnuradio_core_hier" "scm_init_gnuradio_gnuradio_core_hier_module")
-%}
-
-%goops %{
- (use-modules (gnuradio gnuradio_core_runtime))
-%}
-#endif
diff --git a/gnuradio-core/src/lib/swig/gnuradio_core_io.i b/gnuradio-core/src/lib/swig/gnuradio_core_io.i
index d2fa0aede..522b12b34 100644
--- a/gnuradio-core/src/lib/swig/gnuradio_core_io.i
+++ b/gnuradio-core/src/lib/swig/gnuradio_core_io.i
@@ -30,13 +30,3 @@
%include "gnuradio.i" // the common stuff
%include "io.i"
-
-#if SWIGGUILE
-%scheme %{
-(load-extension-global "libguile-gnuradio-gnuradio_core_io" "scm_init_gnuradio_gnuradio_core_io_module")
-%}
-
-%goops %{
- (use-modules (gnuradio gnuradio_core_runtime))
-%}
-#endif
diff --git a/gnuradio-core/src/lib/swig/gnuradio_core_runtime.i b/gnuradio-core/src/lib/swig/gnuradio_core_runtime.i
index 7fcac5069..fb311d226 100644
--- a/gnuradio-core/src/lib/swig/gnuradio_core_runtime.i
+++ b/gnuradio-core/src/lib/swig/gnuradio_core_runtime.i
@@ -32,28 +32,3 @@
%include "gnuradio.i" // the common stuff
%include "runtime.i"
-
-
-#if SWIGGUILE
-%scheme %{
-
-;; Load our gsubr that loads libraries using the RTLD_GLOBAL option
-(load-extension "libguile-gnuradio-dynl-global" "scm_init_gnuradio_dynl_global_module")
-
-;; Define load-extension-global in module '(guile)
-(module-define! (resolve-module '(guile))
- 'load-extension-global
- (lambda (lib init)
- (dynamic-call init (dynamic-link-global lib))))
-
-;; Use load-extension-global to load our swig modules
-(load-extension-global "libguile-gnuradio-gnuradio_core_runtime" "scm_init_gnuradio_gnuradio_core_runtime_module")
-%}
-
-%goops %{
-(use-modules (gnuradio export-safely))
-(re-export export-syms-if-not-imported-gf)
-(re-export-syntax export-safely)
-(re-export re-export-all)
-%}
-#endif
diff --git a/gnuradio-core/src/lib/swig/gr_swig_block_magic.i b/gnuradio-core/src/lib/swig/gr_swig_block_magic.i
index a080c2b27..79055bd95 100644
--- a/gnuradio-core/src/lib/swig/gr_swig_block_magic.i
+++ b/gnuradio-core/src/lib/swig/gr_swig_block_magic.i
@@ -40,21 +40,3 @@ FULL_NAME ## _sptr.__repr__ = lambda self: "<gr_block %s (%d)>" % (self.name(),
%}
%enddef
#endif
-
-#ifdef SWIGGUILE
-#ifdef IN_GNURADIO_CORE // normal behavior
-%define _GR_SWIG_BLOCK_MAGIC_HELPER(PKG, BASE_NAME, FULL_NAME)
-_GR_SWIG_BLOCK_MAGIC_HELPER_COMMON(PKG, BASE_NAME, FULL_NAME)
-/* FIXME May want to add something here to get a friendlier printed representation */
-%enddef
-#else // Don't strip PKG from name
-%define _GR_SWIG_BLOCK_MAGIC_HELPER(PKG, BASE_NAME, FULL_NAME)
-class FULL_NAME;
-typedef boost::shared_ptr<FULL_NAME> FULL_NAME ## _sptr;
-%template(FULL_NAME ## _sptr) boost::shared_ptr<FULL_NAME>;
-%ignore FULL_NAME;
-%rename(FULL_NAME) PKG ## _make_ ## BASE_NAME;
-/* FIXME May want to add something here to get a friendlier printed representation */
-%enddef
-#endif
-#endif
diff --git a/gnuradio-core/src/lib/swig/guile/std_complex.i b/gnuradio-core/src/lib/swig/guile/std_complex.i
deleted file mode 100644
index 2a5c72aa2..000000000
--- a/gnuradio-core/src/lib/swig/guile/std_complex.i
+++ /dev/null
@@ -1,37 +0,0 @@
-%{
-#include <complex>
-%}
-
-// To the target language, complex number conversion
-%typemap(out) complex, complex<double>, std::complex<double> {
- $result = scm_make_rectangular( gh_double2scm ($1.real ()),
- gh_double2scm ($1.imag ()) );
-}
-
-// To the target language, complex number conversion
-%typemap(out) complex, complex<float>, std::complex<float> {
- $result = scm_make_rectangular( gh_double2scm ($1.real ()),
- gh_double2scm ($1.imag ()) );
-}
-
-// From the target language, complex number conversion
-%typemap(in) complex, complex<double>, std::complex<double> {
- $1 = std::complex<double>( gh_scm2double (scm_real_part ($input)),
- gh_scm2double (scm_imag_part ($input)) );
-}
-
-// From the target language, complex number conversion
-%typemap(in) complex, complex<float>, std::complex<float> {
- $1 = std::complex<float>( gh_scm2double (scm_real_part ($input)),
- gh_scm2double (scm_imag_part ($input)) );
-}
-
-%typemaps_primitive(%checkcode(CPLXDBL), std::complex<double>);
-%typemaps_primitive(%checkcode(CPLXFLT), std::complex<float>);
-
-%typecheck(SWIG_TYPECHECK_COMPLEX)
- std::complex<float>, std::complex<double>,
- const std::complex<float> &, const std::complex<double> &
-{
- $1 = scm_is_complex($input) ? 1 : 0;
-}
diff --git a/gnuradio-core/src/lib/swig/guile/std_vector.i b/gnuradio-core/src/lib/swig/guile/std_vector.i
deleted file mode 100644
index ef1f20667..000000000
--- a/gnuradio-core/src/lib/swig/guile/std_vector.i
+++ /dev/null
@@ -1,437 +0,0 @@
-/* -----------------------------------------------------------------------------
- * See the LICENSE file for information on copyright, usage and redistribution
- * of SWIG, and the README file for authors - http://www.swig.org/release.html.
- *
- * std_vector.i
- *
- * SWIG typemaps for std::vector
- * ----------------------------------------------------------------------------- */
-
-%include <std_common.i>
-
-// ------------------------------------------------------------------------
-// std::vector
-//
-// The aim of all that follows would be to integrate std::vector with
-// Guile as much as possible, namely, to allow the user to pass and
-// be returned Guile vectors or lists.
-// const declarations are used to guess the intent of the function being
-// exported; therefore, the following rationale is applied:
-//
-// -- f(std::vector<T>), f(const std::vector<T>&), f(const std::vector<T>*):
-// the parameter being read-only, either a Guile sequence or a
-// previously wrapped std::vector<T> can be passed.
-// -- f(std::vector<T>&), f(std::vector<T>*):
-// the parameter must be modified; therefore, only a wrapped std::vector
-// can be passed.
-// -- std::vector<T> f():
-// the vector is returned by copy; therefore, a Guile vector of T:s
-// is returned which is most easily used in other Guile functions
-// -- std::vector<T>& f(), std::vector<T>* f(), const std::vector<T>& f(),
-// const std::vector<T>* f():
-// the vector is returned by reference; therefore, a wrapped std::vector
-// is returned
-// ------------------------------------------------------------------------
-
-%{
-#include <vector>
-#include <algorithm>
-#include <stdexcept>
-#include <complex>
-%}
-
-%{
- inline std::complex<float> SWIG_scm2cmplxfloat(SCM x){
- return std::complex<float>(scm_c_real_part(x), scm_c_imag_part(x));
- }
-
- inline std::complex<double> SWIG_scm2cmplxdouble(SCM x){
- return std::complex<double>(scm_c_real_part(x), scm_c_imag_part(x));
- }
-
- inline SCM SWIG_cmplxfloat2scm(std::complex<float> x){
- return scm_c_make_rectangular(x.real(), x.imag());
- }
-
- inline SCM SWIG_cmplxdouble2scm(std::complex<double> x){
- return scm_c_make_rectangular(x.real(), x.imag());
- }
-%}
-
-// exported class
-
-namespace std {
-
- template<class T> class vector {
- %typemap(in) vector<T> {
- if (gh_vector_p($input)) {
- unsigned long size = gh_vector_length($input);
- $1 = std::vector<T >(size);
- for (unsigned long i=0; i<size; i++) {
- SCM o = gh_vector_ref($input,gh_ulong2scm(i));
- (($1_type &)$1)[i] =
- *((T*) SWIG_MustGetPtr(o,$descriptor(T *),$argnum, 0));
- }
- } else if (gh_null_p($input)) {
- $1 = std::vector<T >();
- } else if (gh_pair_p($input)) {
- SCM head, tail;
- $1 = std::vector<T >();
- tail = $input;
- while (!gh_null_p(tail)) {
- head = gh_car(tail);
- tail = gh_cdr(tail);
- $1.push_back(*((T*)SWIG_MustGetPtr(head,
- $descriptor(T *),
- $argnum, 0)));
- }
- } else {
- $1 = *(($&1_type)
- SWIG_MustGetPtr($input,$&1_descriptor,$argnum, 0));
- }
- }
- %typemap(in) const vector<T>& (std::vector<T> temp),
- const vector<T>* (std::vector<T> temp) {
- if (gh_vector_p($input)) {
- unsigned long size = gh_vector_length($input);
- temp = std::vector<T >(size);
- $1 = &temp;
- for (unsigned long i=0; i<size; i++) {
- SCM o = gh_vector_ref($input,gh_ulong2scm(i));
- temp[i] = *((T*) SWIG_MustGetPtr(o,
- $descriptor(T *),
- $argnum, 0));
- }
- } else if (gh_null_p($input)) {
- temp = std::vector<T >();
- $1 = &temp;
- } else if (gh_pair_p($input)) {
- temp = std::vector<T >();
- $1 = &temp;
- SCM head, tail;
- tail = $input;
- while (!gh_null_p(tail)) {
- head = gh_car(tail);
- tail = gh_cdr(tail);
- temp.push_back(*((T*) SWIG_MustGetPtr(head,
- $descriptor(T *),
- $argnum, 0)));
- }
- } else {
- $1 = ($1_ltype) SWIG_MustGetPtr($input,$1_descriptor,$argnum, 0);
- }
- }
- %typemap(out) vector<T> {
- $result = gh_make_vector(gh_long2scm($1.size()),SCM_UNSPECIFIED);
- for (unsigned int i=0; i<$1.size(); i++) {
- T* x = new T((($1_type &)$1)[i]);
- gh_vector_set_x($result,gh_long2scm(i),
- SWIG_NewPointerObj(x, $descriptor(T *), 1));
- }
- }
- %typecheck(SWIG_TYPECHECK_VECTOR) vector<T> {
- /* native sequence? */
- if (gh_vector_p($input)) {
- unsigned int size = gh_vector_length($input);
- if (size == 0) {
- /* an empty sequence can be of any type */
- $1 = 1;
- } else {
- /* check the first element only */
- SCM o = gh_vector_ref($input,gh_ulong2scm(0));
- T* x;
- if (SWIG_ConvertPtr(o,(void**) &x,
- $descriptor(T *), 0) != -1)
- $1 = 1;
- else
- $1 = 0;
- }
- } else if (gh_null_p($input)) {
- /* again, an empty sequence can be of any type */
- $1 = 1;
- } else if (gh_pair_p($input)) {
- /* check the first element only */
- T* x;
- SCM head = gh_car($input);
- if (SWIG_ConvertPtr(head,(void**) &x,
- $descriptor(T *), 0) != -1)
- $1 = 1;
- else
- $1 = 0;
- } else {
- /* wrapped vector? */
- std::vector<T >* v;
- if (SWIG_ConvertPtr($input,(void **) &v,
- $&1_descriptor, 0) != -1)
- $1 = 1;
- else
- $1 = 0;
- }
- }
- %typecheck(SWIG_TYPECHECK_VECTOR) const vector<T>&,
- const vector<T>* {
- /* native sequence? */
- if (gh_vector_p($input)) {
- unsigned int size = gh_vector_length($input);
- if (size == 0) {
- /* an empty sequence can be of any type */
- $1 = 1;
- } else {
- /* check the first element only */
- T* x;
- SCM o = gh_vector_ref($input,gh_ulong2scm(0));
- if (SWIG_ConvertPtr(o,(void**) &x,
- $descriptor(T *), 0) != -1)
- $1 = 1;
- else
- $1 = 0;
- }
- } else if (gh_null_p($input)) {
- /* again, an empty sequence can be of any type */
- $1 = 1;
- } else if (gh_pair_p($input)) {
- /* check the first element only */
- T* x;
- SCM head = gh_car($input);
- if (SWIG_ConvertPtr(head,(void**) &x,
- $descriptor(T *), 0) != -1)
- $1 = 1;
- else
- $1 = 0;
- } else {
- /* wrapped vector? */
- std::vector<T >* v;
- if (SWIG_ConvertPtr($input,(void **) &v,
- $1_descriptor, 0) != -1)
- $1 = 1;
- else
- $1 = 0;
- }
- }
- public:
- vector(unsigned int size = 0);
- vector(unsigned int size, const T& value);
- vector(const vector<T>&);
- %rename(length) size;
- unsigned int size() const;
- %rename("empty?") empty;
- bool empty() const;
- %rename("clear!") clear;
- void clear();
- %rename("set!") set;
- %rename("pop!") pop;
- %rename("push!") push_back;
- void push_back(const T& x);
- %extend {
- T pop() throw (std::out_of_range) {
- if (self->size() == 0)
- throw std::out_of_range("pop from empty vector");
- T x = self->back();
- self->pop_back();
- return x;
- }
- T& ref(int i) throw (std::out_of_range) {
- int size = int(self->size());
- if (i>=0 && i<size)
- return (*self)[i];
- else
- throw std::out_of_range("vector index out of range");
- }
- void set(int i, const T& x) throw (std::out_of_range) {
- int size = int(self->size());
- if (i>=0 && i<size)
- (*self)[i] = x;
- else
- throw std::out_of_range("vector index out of range");
- }
- }
- };
-
-
- // specializations for built-ins
- %define specialize_stl_vector(T,CHECK,CONVERT_FROM,CONVERT_TO)
- template<> class vector<T > {
- %typemap(in) vector<T > {
- if (gh_vector_p($input)) {
- unsigned long size = gh_vector_length($input);
- $1 = std::vector<T >(size);
- for (unsigned long i=0; i<size; i++) {
- SCM o = gh_vector_ref($input,gh_ulong2scm(i));
- if (CHECK(o))
- (($1_type &)$1)[i] = (T)(CONVERT_FROM(o));
- else
- scm_wrong_type_arg(FUNC_NAME, $argnum, $input);
- }
- } else if (gh_null_p($input)) {
- $1 = std::vector<T >();
- } else if (gh_pair_p($input)) {
- SCM v = gh_list_to_vector($input);
- unsigned long size = gh_vector_length(v);
- $1 = std::vector<T >(size);
- for (unsigned long i=0; i<size; i++) {
- SCM o = gh_vector_ref(v,gh_ulong2scm(i));
- if (CHECK(o))
- (($1_type &)$1)[i] = (T)(CONVERT_FROM(o));
- else
- scm_wrong_type_arg(FUNC_NAME, $argnum, $input);
- }
- } else {
- $1 = *(($&1_type)
- SWIG_MustGetPtr($input,$&1_descriptor,$argnum, 0));
- }
- }
- %typemap(in) const vector<T >& (std::vector<T > temp),
- const vector<T >* (std::vector<T > temp) {
- if (gh_vector_p($input)) {
- unsigned long size = gh_vector_length($input);
- temp = std::vector<T >(size);
- $1 = &temp;
- for (unsigned long i=0; i<size; i++) {
- SCM o = gh_vector_ref($input,gh_ulong2scm(i));
- if (CHECK(o))
- temp[i] = (T)(CONVERT_FROM(o));
- else
- scm_wrong_type_arg(FUNC_NAME, $argnum, $input);
- }
- } else if (gh_null_p($input)) {
- temp = std::vector<T >();
- $1 = &temp;
- } else if (gh_pair_p($input)) {
- SCM v = gh_list_to_vector($input);
- unsigned long size = gh_vector_length(v);
- temp = std::vector<T >(size);
- $1 = &temp;
- for (unsigned long i=0; i<size; i++) {
- SCM o = gh_vector_ref(v,gh_ulong2scm(i));
- if (CHECK(o))
- temp[i] = (T)(CONVERT_FROM(o));
- else
- scm_wrong_type_arg(FUNC_NAME, $argnum, $input);
- }
- } else {
- $1 = ($1_ltype) SWIG_MustGetPtr($input,$1_descriptor,$argnum, 0);
- }
- }
- %typemap(out) vector<T > {
- $result = gh_make_vector(gh_long2scm($1.size()),SCM_UNSPECIFIED);
- for (unsigned int i=0; i<$1.size(); i++) {
- SCM x = CONVERT_TO((($1_type &)$1)[i]);
- gh_vector_set_x($result,gh_long2scm(i),x);
- }
- }
- %typecheck(SWIG_TYPECHECK_VECTOR) vector<T > {
- /* native sequence? */
- if (gh_vector_p($input)) {
- unsigned int size = gh_vector_length($input);
- if (size == 0) {
- /* an empty sequence can be of any type */
- $1 = 1;
- } else {
- /* check the first element only */
- T* x;
- SCM o = gh_vector_ref($input,gh_ulong2scm(0));
- $1 = CHECK(o) ? 1 : 0;
- }
- } else if (gh_null_p($input)) {
- /* again, an empty sequence can be of any type */
- $1 = 1;
- } else if (gh_pair_p($input)) {
- /* check the first element only */
- T* x;
- SCM head = gh_car($input);
- $1 = CHECK(head) ? 1 : 0;
- } else {
- /* wrapped vector? */
- std::vector<T >* v;
- $1 = (SWIG_ConvertPtr($input,(void **) &v,
- $&1_descriptor, 0) != -1) ? 1 : 0;
- }
- }
- %typecheck(SWIG_TYPECHECK_VECTOR) const vector<T >&,
- const vector<T >* {
- /* native sequence? */
- if (gh_vector_p($input)) {
- unsigned int size = gh_vector_length($input);
- if (size == 0) {
- /* an empty sequence can be of any type */
- $1 = 1;
- } else {
- /* check the first element only */
- T* x;
- SCM o = gh_vector_ref($input,gh_ulong2scm(0));
- $1 = CHECK(o) ? 1 : 0;
- }
- } else if (gh_null_p($input)) {
- /* again, an empty sequence can be of any type */
- $1 = 1;
- } else if (gh_pair_p($input)) {
- /* check the first element only */
- T* x;
- SCM head = gh_car($input);
- $1 = CHECK(head) ? 1 : 0;
- } else {
- /* wrapped vector? */
- std::vector<T >* v;
- $1 = (SWIG_ConvertPtr($input,(void **) &v,
- $1_descriptor, 0) != -1) ? 1 : 0;
- }
- }
- public:
- vector(unsigned int size = 0);
- vector(unsigned int size, const T& value);
- vector(const vector<T >&);
- %rename(length) size;
- unsigned int size() const;
- %rename("empty?") empty;
- bool empty() const;
- %rename("clear!") clear;
- void clear();
- %rename("set!") set;
- %rename("pop!") pop;
- %rename("push!") push_back;
- void push_back(T x);
- %extend {
- T pop() throw (std::out_of_range) {
- if (self->size() == 0)
- throw std::out_of_range("pop from empty vector");
- T x = self->back();
- self->pop_back();
- return x;
- }
- T ref(int i) throw (std::out_of_range) {
- int size = int(self->size());
- if (i>=0 && i<size)
- return (*self)[i];
- else
- throw std::out_of_range("vector index out of range");
- }
- void set(int i, T x) throw (std::out_of_range) {
- int size = int(self->size());
- if (i>=0 && i<size)
- (*self)[i] = x;
- else
- throw std::out_of_range("vector index out of range");
- }
- }
- };
- %enddef
-
- specialize_stl_vector(bool,gh_boolean_p,gh_scm2bool,SWIG_bool2scm);
- specialize_stl_vector(char,gh_number_p,gh_scm2long,gh_long2scm);
- specialize_stl_vector(int,gh_number_p,gh_scm2long,gh_long2scm);
- specialize_stl_vector(long,gh_number_p,gh_scm2long,gh_long2scm);
- specialize_stl_vector(short,gh_number_p,gh_scm2long,gh_long2scm);
- specialize_stl_vector(unsigned char,gh_number_p,gh_scm2ulong,gh_ulong2scm);
- specialize_stl_vector(unsigned int,gh_number_p,gh_scm2ulong,gh_ulong2scm);
- specialize_stl_vector(unsigned long,gh_number_p,gh_scm2ulong,gh_ulong2scm);
- specialize_stl_vector(unsigned short,gh_number_p,gh_scm2ulong,gh_ulong2scm);
- specialize_stl_vector(float,gh_number_p,gh_scm2double,gh_double2scm);
- specialize_stl_vector(double,gh_number_p,gh_scm2double,gh_double2scm);
- specialize_stl_vector(std::string,gh_string_p,SWIG_scm2string,SWIG_string2scm);
- specialize_stl_vector(std::complex<float>, scm_is_complex,
- SWIG_scm2cmplxfloat, SWIG_cmplxfloat2scm);
- specialize_stl_vector(std::complex<double>, scm_is_complex,
- SWIG_scm2cmplxdouble,SWIG_cmplxdouble2scm);
-
-}
-
diff --git a/gnuradio-core/src/lib/viterbi/.gitignore b/gnuradio-core/src/lib/viterbi/.gitignore
deleted file mode 100644
index 85bb5cc04..000000000
--- a/gnuradio-core/src/lib/viterbi/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-/Makefile
-/Makefile.in
-/.libs
-/.deps
-/encode
-/decode
diff --git a/gnuradio-core/src/lib/viterbi/Makefile.am b/gnuradio-core/src/lib/viterbi/Makefile.am
deleted file mode 100644
index 7e65880b3..000000000
--- a/gnuradio-core/src/lib/viterbi/Makefile.am
+++ /dev/null
@@ -1,46 +0,0 @@
-#
-# Copyright 2008 Free Software Foundation, Inc.
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-#
-
-include $(top_srcdir)/Makefile.common
-
-LIBS = -lm
-
-AM_CPPFLAGS = $(STD_DEFINES_AND_INCLUDES) $(GRUEL_INCLUDES) \
- -I$(top_srcdir)/gnuradio-core/src/lib/general \
- $(WITH_INCLUDES)
-
-noinst_LTLIBRARIES = libviterbi.la
-
-libviterbi_la_SOURCES = \
- metrics.c \
- tab.c \
- viterbi.c
-
-noinst_HEADERS = \
- viterbi.h
-
-noinst_PROGRAMS = encode decode
-
-encode_SOURCES = encode.cc
-
-encode_LDADD = libviterbi.la
-
-decode_SOURCES = decode.cc
-
-decode_LDADD = libviterbi.la
diff --git a/gnuradio-core/src/python/.gitignore b/gnuradio-core/src/python/.gitignore
deleted file mode 100644
index f9c5da0db..000000000
--- a/gnuradio-core/src/python/.gitignore
+++ /dev/null
@@ -1,8 +0,0 @@
-/Makefile
-/Makefile.in
-/.deps
-/.libs
-/*.la
-/*.lo
-/*.pyc
-/*.pyo
diff --git a/gnuradio-core/src/python/bin/.gitignore b/gnuradio-core/src/python/bin/.gitignore
deleted file mode 100644
index f9c5da0db..000000000
--- a/gnuradio-core/src/python/bin/.gitignore
+++ /dev/null
@@ -1,8 +0,0 @@
-/Makefile
-/Makefile.in
-/.deps
-/.libs
-/*.la
-/*.lo
-/*.pyc
-/*.pyo
diff --git a/gnuradio-core/src/python/gnuradio/.gitignore b/gnuradio-core/src/python/gnuradio/.gitignore
deleted file mode 100644
index f9c5da0db..000000000
--- a/gnuradio-core/src/python/gnuradio/.gitignore
+++ /dev/null
@@ -1,8 +0,0 @@
-/Makefile
-/Makefile.in
-/.deps
-/.libs
-/*.la
-/*.lo
-/*.pyc
-/*.pyo
diff --git a/gnuradio-core/src/python/gnuradio/Makefile.am b/gnuradio-core/src/python/gnuradio/Makefile.am
deleted file mode 100644
index ffc171b2d..000000000
--- a/gnuradio-core/src/python/gnuradio/Makefile.am
+++ /dev/null
@@ -1,35 +0,0 @@
-#
-# Copyright 2004-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 $(top_srcdir)/Makefile.common
-
-if PYTHON
-SUBDIRS = gr gru gruimpl blks2 blks2impl
-
-grpython_PYTHON = \
- __init__.py \
- eng_notation.py \
- eng_option.py \
- gr_unittest.py \
- gr_xmlrunner.py \
- optfir.py \
- window.py
-endif
diff --git a/gnuradio-core/src/python/gnuradio/blks2/.gitignore b/gnuradio-core/src/python/gnuradio/blks2/.gitignore
deleted file mode 100644
index b6950912c..000000000
--- a/gnuradio-core/src/python/gnuradio/blks2/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-/Makefile
-/Makefile.in
-/*.pyc
diff --git a/gnuradio-core/src/python/gnuradio/blks2impl/.gitignore b/gnuradio-core/src/python/gnuradio/blks2impl/.gitignore
deleted file mode 100644
index f9c5da0db..000000000
--- a/gnuradio-core/src/python/gnuradio/blks2impl/.gitignore
+++ /dev/null
@@ -1,8 +0,0 @@
-/Makefile
-/Makefile.in
-/.deps
-/.libs
-/*.la
-/*.lo
-/*.pyc
-/*.pyo
diff --git a/gnuradio-core/src/python/gnuradio/blks2impl/Makefile.am b/gnuradio-core/src/python/gnuradio/blks2impl/Makefile.am
deleted file mode 100644
index eb031cd20..000000000
--- a/gnuradio-core/src/python/gnuradio/blks2impl/Makefile.am
+++ /dev/null
@@ -1,49 +0,0 @@
-#
-# Copyright 2005,2007,2009,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.
-#
-
-include $(top_srcdir)/Makefile.common
-
-# EXTRA_DIST = run_tests.in
-# TESTS = run_tests
-
-grblkspythondir = $(grpythondir)/blks2impl
-
-grblkspython_PYTHON = \
- __init__.py \
- am_demod.py \
- channel_model.py \
- filterbank.py \
- fm_demod.py \
- fm_emph.py \
- logpwrfft.py \
- nbfm_rx.py \
- nbfm_tx.py \
- pfb_arb_resampler.py \
- pfb_channelizer.py \
- pfb_decimator.py \
- pfb_interpolator.py \
- rational_resampler.py \
- standard_squelch.py \
- stream_to_vector_decimator.py \
- wfm_rcv.py \
- wfm_rcv_fmdet.py \
- wfm_rcv_pll.py \
- wfm_tx.py
diff --git a/gnuradio-core/src/python/gnuradio/blks2impl/pfb_channelizer.py b/gnuradio-core/src/python/gnuradio/blks2impl/pfb_channelizer.py
index 3ddc1749a..dea71b286 100644
--- a/gnuradio-core/src/python/gnuradio/blks2impl/pfb_channelizer.py
+++ b/gnuradio-core/src/python/gnuradio/blks2impl/pfb_channelizer.py
@@ -34,7 +34,7 @@ class pfb_channelizer_ccf(gr.hier_block2):
gr.io_signature(1, 1, gr.sizeof_gr_complex), # Input signature
gr.io_signature(numchans, numchans, gr.sizeof_gr_complex)) # Output signature
- self._numchans = numchans
+ self._nchans = numchans
self._oversample_rate = oversample_rate
if taps is not None:
@@ -47,7 +47,7 @@ class pfb_channelizer_ccf(gr.hier_block2):
made = False
while not made:
try:
- self._taps = optfir.low_pass(1, self._numchans, bw, bw+tb, ripple, atten)
+ self._taps = optfir.low_pass(1, self._nchans, bw, bw+tb, ripple, atten)
made = True
except RuntimeError:
ripple += 0.01
@@ -58,22 +58,16 @@ class pfb_channelizer_ccf(gr.hier_block2):
if(ripple >= 1.0):
raise RuntimeError("optfir could not generate an appropriate filter.")
- self.s2ss = gr.stream_to_streams(gr.sizeof_gr_complex, self._numchans)
- self.pfb = gr.pfb_channelizer_ccf(self._numchans, self._taps,
+ self.s2ss = gr.stream_to_streams(gr.sizeof_gr_complex, self._nchans)
+ self.pfb = gr.pfb_channelizer_ccf(self._nchans, self._taps,
self._oversample_rate)
- self.v2s = gr.vector_to_streams(gr.sizeof_gr_complex, self._numchans)
-
self.connect(self, self.s2ss)
- for i in xrange(self._numchans):
+ for i in xrange(self._nchans):
self.connect((self.s2ss,i), (self.pfb,i))
+ self.connect((self.pfb,i), (self,i))
- # Get independent streams from the filterbank and send them out
- self.connect(self.pfb, self.v2s)
-
- for i in xrange(self._numchans):
- self.connect((self.v2s,i), (self,i))
-
-
+ def set_channel_map(self, newmap):
+ self.pfb.set_channel_map(newmap)
diff --git a/gnuradio-core/src/python/gnuradio/gr/.gitignore b/gnuradio-core/src/python/gnuradio/gr/.gitignore
deleted file mode 100644
index bf03975bb..000000000
--- a/gnuradio-core/src/python/gnuradio/gr/.gitignore
+++ /dev/null
@@ -1,9 +0,0 @@
-/Makefile
-/Makefile.in
-/.deps
-/.libs
-/*.la
-/*.lo
-/*.pyc
-/*.pyo
-/run_tests
diff --git a/gnuradio-core/src/python/gnuradio/gr/Makefile.am b/gnuradio-core/src/python/gnuradio/gr/Makefile.am
deleted file mode 100644
index 9853766f9..000000000
--- a/gnuradio-core/src/python/gnuradio/gr/Makefile.am
+++ /dev/null
@@ -1,102 +0,0 @@
-#
-# Copyright 2004,2005,2006,2008,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.
-#
-
-include $(top_srcdir)/Makefile.common
-
-EXTRA_DIST += \
- run_tests.in \
- test_16bit_1chunk.wav
-
-TESTS = run_tests
-
-
-grgrpythondir = $(grpythondir)/gr
-
-grgrpython_PYTHON = \
- __init__.py \
- exceptions.py \
- gr_threading.py \
- gr_threading_23.py \
- gr_threading_24.py \
- hier_block2.py \
- prefs.py \
- top_block.py \
- pubsub.py
-
-noinst_PYTHON = \
- benchmark_filters.py \
- qa_add_and_friends.py \
- qa_add_v_and_friends.py \
- qa_agc.py \
- qa_argmax.py \
- qa_bin_statistics.py \
- qa_classify.py \
- qa_complex_to_xxx.py \
- qa_conjugate.py \
- qa_copy.py \
- qa_delay.py \
- qa_dc_blocker.py \
- qa_diff_encoder.py \
- qa_diff_phasor_cc.py \
- qa_ecc_ccsds_27.py \
- qa_feval.py \
- qa_fft.py \
- qa_fft_filter.py \
- qa_filter_delay_fc.py \
- qa_float_to_char.py \
- qa_float_to_int.py \
- qa_float_to_short.py \
- qa_fractional_interpolator.py \
- qa_frequency_modulator.py \
- qa_fsk_stuff.py \
- qa_glfsr_source.py \
- qa_goertzel.py \
- qa_head.py \
- qa_hier_block2.py \
- qa_hilbert.py \
- qa_iir.py \
- qa_int_to_float.py \
- qa_interleave.py \
- qa_interp_fir_filter.py \
- qa_kludge_copy.py \
- qa_kludged_imports.py \
- qa_max.py \
- qa_message.py \
- qa_multiply_conjugate.py \
- qa_mute.py \
- qa_nlog10.py \
- qa_noise.py \
- qa_packed_to_unpacked.py \
- qa_pipe_fittings.py \
- qa_pll_carriertracking.py \
- qa_pll_freqdet.py \
- qa_pll_refout.py \
- qa_pn_correlator_cc.py \
- qa_rational_resampler.py \
- qa_sig_source.py \
- qa_single_pole_iir.py \
- qa_single_pole_iir_cc.py \
- qa_skiphead.py \
- qa_unpack_k_bits.py \
- qa_repeat.py \
- qa_scrambler.py \
- qa_udp_sink_source.py \
- qa_vector_sink_source.py
diff --git a/gnuradio-core/src/python/gnuradio/gr/qa_classify.py b/gnuradio-core/src/python/gnuradio/gr/qa_classify.py
deleted file mode 100755
index ac5b53b57..000000000
--- a/gnuradio-core/src/python/gnuradio/gr/qa_classify.py
+++ /dev/null
@@ -1,181 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2008,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.
-#
-
-import numpy
-from gnuradio import gr, gr_unittest
-import copy
-#import pygsl.wavelet as wavelet # FIXME: pygsl not checked for in config
-import math
-
-
-def sqr(x):
- return x*x
-
-def np2(k):
- m = 0
- n = k - 1
- while n > 0:
- m += 1
- return m
-
-
-class test_classify(gr_unittest.TestCase):
-
- def setUp(self):
- self.tb = gr.top_block()
-
- def tearDown(self):
- self.tb = None
-
-# def test_000_(self):
-# src_data = numpy.zeros(10)
-# trg_data = numpy.zeros(10)
-# src = gr.vector_source_f(src_data)
-# dst = gr.vector_sink_f()
-# self.tb.connect(src, dst)
-# self.tb.run()
-# rsl_data = dst.data()
-# sum = 0
-# for (u,v) in zip(trg_data, rsl_data):
-# w = u - v
-# sum += w * w
-# sum /= float(len(trg_data))
-# assert sum < 1e-6
-
- def test_001_(self):
- src_data = numpy.array([-1.0, 1.0, -1.0, 1.0])
- trg_data = src_data * 0.5
- src = gr.vector_source_f(src_data)
- dst = gr.vector_sink_f()
- rail = gr.rail_ff(-0.5, 0.5)
- self.tb.connect(src, rail)
- self.tb.connect(rail, dst)
- self.tb.run()
- rsl_data = dst.data()
- sum = 0
- for (u, v) in zip(trg_data, rsl_data):
- w = u - v
- sum += w * w
- sum /= float(len(trg_data))
- assert sum < 1e-6
-
- def test_002_(self):
- src_data = numpy.array([-1.0,
- -1.0/2.0,
- -1.0/3.0,
- -1.0/4.0,
- -1.0/5.0])
- trg_data = copy.deepcopy(src_data)
-
- src = gr.vector_source_f(src_data, False, len(src_data))
- st = gr.stretch_ff(-1.0/5.0, len(src_data))
- dst = gr.vector_sink_f(len(src_data))
- self.tb.connect(src, st)
- self.tb.connect(st, dst)
- self.tb.run()
- rsl_data = dst.data()
- sum = 0
- for (u, v) in zip(trg_data, rsl_data):
- w = u - v
- sum += w * w
- sum /= float(len(trg_data))
- assert sum < 1e-6
-
- def test_003_(self):
- src_grid = (0.0, 1.0, 2.0, 3.0, 4.0)
- trg_grid = copy.deepcopy(src_grid)
- src_data = (0.0, 1.0, 0.0, 1.0, 0.0)
-
- src = gr.vector_source_f(src_data, False, len(src_grid))
- sq = gr.squash_ff(src_grid, trg_grid)
- dst = gr.vector_sink_f(len(trg_grid))
- self.tb.connect(src, sq)
- self.tb.connect(sq, dst)
- self.tb.run()
- rsl_data = dst.data()
- sum = 0
- for (u, v) in zip(src_data, rsl_data):
- w = u - v
- sum += w * w
- sum /= float(len(src_data))
- assert sum < 1e-6
-
-# def test_004_(self): # FIXME: requires pygsl
-#
-# n = 256
-# o = 4
-# ws = wavelet.workspace(n)
-# w = wavelet.daubechies(o)
-#
-# a = numpy.arange(n)
-# b = numpy.sin(a*numpy.pi/16.0)
-# c = w.transform_forward(b, ws)
-# d = w.transform_inverse(c, ws)
-#
-# src = gr.vector_source_f(b, False, n)
-# wv = gr.wavelet_ff(n, o, True)
-#
-# dst = gr.vector_sink_f(n)
-# self.tb.connect(src, wv)
-# self.tb.connect(wv, dst)
-# self.tb.run()
-# e = dst.data()
-#
-# sum = 0
-# for (u, v) in zip(c, e):
-# w = u - v
-# sum += w * w
-# sum /= float(len(c))
-# assert sum < 1e-6
-
- def test_005_(self):
-
- src_data = (1.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0)
-
- dwav = numpy.array(src_data)
- wvps = numpy.zeros(3)
- # wavelet power spectrum
- scl = 1.0/sqr(dwav[0])
- k = 1
- for e in range(len(wvps)):
- wvps[e] = scl*sqr(dwav[k:k+(01<<e)]).sum()
- k += 01<<e
-
- src = gr.vector_source_f(src_data, False, len(src_data))
- kon = gr.wvps_ff(len(src_data))
- dst = gr.vector_sink_f(int(math.ceil(math.log(len(src_data), 2))))
-
- self.tb.connect(src, kon)
- self.tb.connect(kon, dst)
-
- self.tb.run()
- snk_data = dst.data()
-
- sum = 0
- for (u,v) in zip(snk_data, wvps):
- w = u - v
- sum += w * w
- sum /= float(len(snk_data))
- assert sum < 1e-6
-
-if __name__ == '__main__':
- gr_unittest.run(test_classify, "test_classify.xml")
diff --git a/gnuradio-core/src/python/gnuradio/gr/qa_frequency_modulator.py b/gnuradio-core/src/python/gnuradio/gr/qa_frequency_modulator.py
index 829185c34..7328f041d 100755
--- a/gnuradio-core/src/python/gnuradio/gr/qa_frequency_modulator.py
+++ b/gnuradio-core/src/python/gnuradio/gr/qa_frequency_modulator.py
@@ -48,7 +48,7 @@ class test_frequency_modulator (gr_unittest.TestCase):
self.tb.connect (op, dst)
self.tb.run ()
result_data = dst.data ()
- self.assertComplexTuplesAlmostEqual (expected_result, result_data)
+ self.assertComplexTuplesAlmostEqual (expected_result, result_data, 5)
if __name__ == '__main__':
diff --git a/gnuradio-core/src/python/gnuradio/gr/qa_probe_signal.py b/gnuradio-core/src/python/gnuradio/gr/qa_probe_signal.py
new file mode 100644
index 000000000..ed0756f5b
--- /dev/null
+++ b/gnuradio-core/src/python/gnuradio/gr/qa_probe_signal.py
@@ -0,0 +1,67 @@
+#!/usr/bin/env python
+#
+# 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.
+#
+
+import time
+
+from gnuradio import gr, gr_unittest
+
+class test_probe_signal (gr_unittest.TestCase):
+
+ def setUp (self):
+ self.tb = gr.top_block()
+
+ def tearDown (self):
+ self.tb = None
+
+ def test_001(self):
+
+ value = 12.3
+ repeats = 100
+ src_data = [value] * repeats
+
+ src = gr.vector_source_f(src_data)
+ dst = gr.probe_signal_f()
+
+ self.tb.connect(src, dst)
+ self.tb.run()
+ output = dst.level()
+ self.assertAlmostEqual(value, output, places=6)
+
+ def test_002(self):
+
+ vector_length = 10
+ repeats = 10
+ value = [0.5+i for i in range(0, vector_length)]
+ src_data = value * repeats
+
+ src = gr.vector_source_f(src_data)
+ s2v = gr.stream_to_vector(gr.sizeof_float, vector_length)
+ dst = gr.probe_signal_vf(vector_length)
+
+ self.tb.connect(src, s2v, dst)
+ self.tb.run()
+ output = dst.level()
+ self.assertEqual(len(output), vector_length)
+ self.assertAlmostEqual(value[3], output[3], places=6)
+
+if __name__ == '__main__':
+ gr_unittest.run(test_probe_signal, "test_probe_signal.xml")
diff --git a/gnuradio-core/src/python/gnuradio/gr/run_tests.in b/gnuradio-core/src/python/gnuradio/gr/run_tests.in
deleted file mode 100755
index 107efe728..000000000
--- a/gnuradio-core/src/python/gnuradio/gr/run_tests.in
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/bin/sh
-
-# 1st parameter is absolute path to component source directory
-# 2nd parameter is absolute path to component build directory
-# 3rd parameter is path to Python QA directory
-
-# Note: calling master run_tests.sh in gnuradio core is not strictly
-# correct, as it will result in a partially bogus PYTHONPATH, but it
-# does make the correct paths in the second half so all is well.
-
-@top_builddir@/run_tests.sh \
- @abs_top_srcdir@/gnuradio-core \
- @abs_top_builddir@/gnuradio-core \
- @srcdir@
diff --git a/gnuradio-core/src/python/gnuradio/gru/.gitignore b/gnuradio-core/src/python/gnuradio/gru/.gitignore
deleted file mode 100644
index f9c5da0db..000000000
--- a/gnuradio-core/src/python/gnuradio/gru/.gitignore
+++ /dev/null
@@ -1,8 +0,0 @@
-/Makefile
-/Makefile.in
-/.deps
-/.libs
-/*.la
-/*.lo
-/*.pyc
-/*.pyo
diff --git a/gnuradio-core/src/python/gnuradio/gru/Makefile.am b/gnuradio-core/src/python/gnuradio/gru/Makefile.am
deleted file mode 100644
index 9b311d81f..000000000
--- a/gnuradio-core/src/python/gnuradio/gru/Makefile.am
+++ /dev/null
@@ -1,30 +0,0 @@
-#
-# Copyright 2005,2009 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-#
-
-include $(top_srcdir)/Makefile.common
-
-# EXTRA_DIST = run_tests.in
-# TESTS = run_tests
-
-grblkspythondir = $(grpythondir)/gru
-
-grblkspython_PYTHON = \
- __init__.py
diff --git a/gnuradio-core/src/python/gnuradio/gruimpl/.gitignore b/gnuradio-core/src/python/gnuradio/gruimpl/.gitignore
deleted file mode 100644
index f9c5da0db..000000000
--- a/gnuradio-core/src/python/gnuradio/gruimpl/.gitignore
+++ /dev/null
@@ -1,8 +0,0 @@
-/Makefile
-/Makefile.in
-/.deps
-/.libs
-/*.la
-/*.lo
-/*.pyc
-/*.pyo
diff --git a/gnuradio-core/src/python/gnuradio/gruimpl/Makefile.am b/gnuradio-core/src/python/gnuradio/gruimpl/Makefile.am
deleted file mode 100644
index 903bc2695..000000000
--- a/gnuradio-core/src/python/gnuradio/gruimpl/Makefile.am
+++ /dev/null
@@ -1,39 +0,0 @@
-#
-# Copyright 2005,2009 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-#
-
-include $(top_srcdir)/Makefile.common
-
-grupythondir = $(grpythondir)/gruimpl
-
-grupython_PYTHON = \
- __init__.py \
- freqz.py \
- gnuplot_freqz.py \
- hexint.py \
- listmisc.py \
- mathmisc.py \
- lmx2306.py \
- msgq_runner.py \
- os_read_exactly.py \
- sdr_1000.py \
- seq_with_cursor.py \
- socket_stuff.py \
- daemon.py
diff --git a/gnuradio-core/src/python/gnuradio/vocoder/.gitignore b/gnuradio-core/src/python/gnuradio/vocoder/.gitignore
deleted file mode 100644
index b336cc7ce..000000000
--- a/gnuradio-core/src/python/gnuradio/vocoder/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-/Makefile
-/Makefile.in
diff --git a/gnuradio-core/src/tests/.gitignore b/gnuradio-core/src/tests/.gitignore
deleted file mode 100644
index 8687003d4..000000000
--- a/gnuradio-core/src/tests/.gitignore
+++ /dev/null
@@ -1,28 +0,0 @@
-/Makefile
-/Makefile.in
-/.la
-/.lo
-/.deps
-/.libs
-/*.la
-/*.lo
-/t1
-/test_dtv
-/check_dups
-/test_gr
-/test_all
-/exercise_correlator
-/test_grbase
-/test_vmcircbuf
-/test_atsc
-/test_general
-/test_runtime
-/test_filter
-/benchmark_dotprod_fff
-/benchmark_dotprod_ccc
-/benchmark_dotprod_fcc
-/benchmark_dotprod_scc
-/benchmark_nco
-/benchmark_dotprod_ccf
-/benchmark_dotprod_fsf
-/benchmark_vco
diff --git a/gnuradio-core/src/tests/Makefile.am b/gnuradio-core/src/tests/Makefile.am
deleted file mode 100644
index 5879a13d8..000000000
--- a/gnuradio-core/src/tests/Makefile.am
+++ /dev/null
@@ -1,105 +0,0 @@
-#
-# Copyright 2001,2008,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.
-#
-
-include $(top_srcdir)/Makefile.common
-
-AM_CPPFLAGS = $(STD_DEFINES_AND_INCLUDES) $(CPPUNIT_INCLUDES) $(WITH_INCLUDES)
-
-# list of programs run by "make check" and "make distcheck"
-
-TESTS = test_all
-
-
-# test_atsc
-
-#Test program to test setting up buffers using gr_test which can be run manually
-EXTRA_DIST += \
- test_buffers.py \
- benchmark_dotprod
-
-
-noinst_PROGRAMS = \
- benchmark_dotprod_fff \
- benchmark_dotprod_fsf \
- benchmark_dotprod_fcc \
- benchmark_dotprod_scc \
- benchmark_dotprod_ccc \
- benchmark_dotprod_ccf \
- benchmark_nco \
- benchmark_vco \
- test_all \
- test_runtime \
- test_general \
- test_filter \
- test_vmcircbuf
-
-#bin_PROGRAMS = \
-# test_all
-
-
-noinst_SCRIPTS = \
- benchmark_dotprod
-
-
-LIBGNURADIO = $(GNURADIO_CORE_LA) $(BOOST_FILESYSTEM_LIB)
-LIBGNURADIOQA = $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core-qa.la $(LIBGNURADIO)
-
-benchmark_dotprod_fff_SOURCES = benchmark_dotprod_fff.cc
-benchmark_dotprod_fff_LDADD = $(LIBGNURADIO)
-
-benchmark_dotprod_fsf_SOURCES = benchmark_dotprod_fsf.cc
-benchmark_dotprod_fsf_LDADD = $(LIBGNURADIO)
-
-benchmark_dotprod_ccf_SOURCES = benchmark_dotprod_ccf.cc
-benchmark_dotprod_ccf_LDADD = $(LIBGNURADIO)
-
-benchmark_dotprod_fcc_SOURCES = benchmark_dotprod_fcc.cc
-benchmark_dotprod_fcc_LDADD = $(LIBGNURADIO)
-
-benchmark_dotprod_scc_SOURCES = benchmark_dotprod_scc.cc
-benchmark_dotprod_scc_LDADD = $(LIBGNURADIO)
-
-benchmark_dotprod_ccc_SOURCES = benchmark_dotprod_ccc.cc
-benchmark_dotprod_ccc_LDADD = $(LIBGNURADIO)
-
-benchmark_nco_SOURCES = benchmark_nco.cc
-benchmark_nco_LDADD = $(LIBGNURADIO)
-
-benchmark_vco_SOURCES = benchmark_vco.cc
-benchmark_vco_LDADD = $(LIBGNURADIO)
-
-test_runtime_SOURCES = test_runtime.cc
-test_runtime_LDADD = $(LIBGNURADIOQA)
-
-test_general_SOURCES = test_general.cc
-test_general_LDADD = $(LIBGNURADIOQA)
-
-test_filter_SOURCES = test_filter.cc
-test_filter_LDADD = $(LIBGNURADIOQA)
-
-# test_atsc_SOURCES = test_atsc.cc
-#test_atsc_LDADD = $(LIBGNURADIOQA)
-
-test_vmcircbuf_SOURCES = test_vmcircbuf.cc
-test_vmcircbuf_LDADD = $(LIBGNURADIOQA)
-
-test_all_SOURCES = test_all.cc
-test_all_LDADD = $(LIBGNURADIOQA)
diff --git a/gnuradio-core/src/utils/.gitignore b/gnuradio-core/src/utils/.gitignore
deleted file mode 100644
index a02b6ff73..000000000
--- a/gnuradio-core/src/utils/.gitignore
+++ /dev/null
@@ -1,8 +0,0 @@
-/Makefile
-/Makefile.in
-/.la
-/.lo
-/.deps
-/.libs
-/*.la
-/*.lo
diff --git a/gnuradio-core/src/utils/Makefile.am b/gnuradio-core/src/utils/Makefile.am
deleted file mode 100644
index acf439140..000000000
--- a/gnuradio-core/src/utils/Makefile.am
+++ /dev/null
@@ -1,56 +0,0 @@
-#
-# Copyright 2001 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-#
-
-include $(top_srcdir)/Makefile.common
-
-EXTRA_DIST += \
- cic_comp_taps.m \
- db_width.m \
- filter_tools.m \
- plot_freq_response.m \
- plot_freq_response_db.m \
- plot_freq_response_phase.m \
- plotfft.m \
- plotfftavgk.m \
- plotfftavgk_db.m \
- plotfftk.m \
- plotfftk_db.m \
- put_markers.m \
- read_char_binary.m \
- read_complex_binary.m \
- read_float_binary.m \
- read_int_binary.m \
- read_short_binary.m \
- read_cshort_binary.m \
- single_pole_iir.m \
- write_float_binary.m \
- write_short_binary.m \
- is_complex.m \
- split_vect.m \
- rainbow.m \
- lp_to_bp.m \
- cool.m \
- read_xambi.m \
- runsum.m \
- plot_cic_decimator_response.m
-
-# partition-cascaded-decimating-filters.scm
-# permute.scm