summaryrefslogtreecommitdiff
path: root/gnuradio-examples
diff options
context:
space:
mode:
Diffstat (limited to 'gnuradio-examples')
-rw-r--r--gnuradio-examples/Makefile.am3
-rw-r--r--gnuradio-examples/c++/.gitignore5
-rw-r--r--gnuradio-examples/c++/audio/Makefile.am38
-rw-r--r--gnuradio-examples/c++/audio/dial_tone.cc78
-rw-r--r--gnuradio-examples/grc/trellis/interference_cancellation.grc763
-rw-r--r--gnuradio-examples/grc/trellis/pccc.grc832
-rw-r--r--gnuradio-examples/grc/trellis/pccc1.grc857
-rw-r--r--gnuradio-examples/grc/trellis/readme.txt18
-rw-r--r--gnuradio-examples/grc/trellis/sccc.grc832
-rw-r--r--gnuradio-examples/grc/trellis/sccc1.grc857
-rw-r--r--gnuradio-examples/python/Makefile.am4
-rw-r--r--gnuradio-examples/python/audio/.gitignore10
-rw-r--r--gnuradio-examples/python/audio/Makefile.am38
-rwxr-xr-xgnuradio-examples/python/audio/audio_copy.py64
-rwxr-xr-xgnuradio-examples/python/audio/audio_fft.py138
-rwxr-xr-xgnuradio-examples/python/audio/audio_play.py57
-rwxr-xr-xgnuradio-examples/python/audio/audio_to_file.py63
-rwxr-xr-xgnuradio-examples/python/audio/dial_tone.py57
-rwxr-xr-xgnuradio-examples/python/audio/dial_tone_daemon.py57
-rwxr-xr-xgnuradio-examples/python/audio/dial_tone_wav.py61
-rwxr-xr-xgnuradio-examples/python/audio/mono_tone.py66
-rwxr-xr-xgnuradio-examples/python/audio/multi_tone.py90
-rwxr-xr-xgnuradio-examples/python/audio/noise.py55
-rwxr-xr-xgnuradio-examples/python/audio/spectrum_inversion.py68
-rwxr-xr-xgnuradio-examples/python/audio/test_resampler.py66
-rwxr-xr-xgnuradio-examples/python/ofdm/gr_plot_ofdm.py20
-rwxr-xr-xgnuradio-examples/python/pfb/channelize.py19
-rwxr-xr-xgnuradio-examples/python/pfb/chirp_channelize.py19
-rwxr-xr-xgnuradio-examples/python/pfb/decimate.py23
-rwxr-xr-xgnuradio-examples/python/pfb/fmtest.py42
-rwxr-xr-xgnuradio-examples/python/pfb/interpolate.py23
-rwxr-xr-xgnuradio-examples/python/pfb/resampler.py34
-rwxr-xr-xgnuradio-examples/python/pfb/synth_filter.py14
-rwxr-xr-xgnuradio-examples/python/pfb/synth_to_chan.py14
-rw-r--r--gnuradio-examples/python/tags/.gitignore (renamed from gnuradio-examples/c++/audio/.gitignore)1
-rw-r--r--gnuradio-examples/python/tags/Makefile.am (renamed from gnuradio-examples/c++/Makefile.am)8
-rwxr-xr-xgnuradio-examples/python/tags/test_file_tags.py28
-rwxr-xr-xgnuradio-examples/python/tags/uhd_burst_detector.py66
38 files changed, 4079 insertions, 1409 deletions
diff --git a/gnuradio-examples/Makefile.am b/gnuradio-examples/Makefile.am
index e0c1b1d15..ded4e743d 100644
--- a/gnuradio-examples/Makefile.am
+++ b/gnuradio-examples/Makefile.am
@@ -21,7 +21,8 @@
include $(top_srcdir)/Makefile.common
-SUBDIRS = c++
+SUBDIRS =
+
if PYTHON
SUBDIRS += python grc
endif
diff --git a/gnuradio-examples/c++/.gitignore b/gnuradio-examples/c++/.gitignore
deleted file mode 100644
index 19dd0e0a5..000000000
--- a/gnuradio-examples/c++/.gitignore
+++ /dev/null
@@ -1,5 +0,0 @@
-/.deps
-/.libs
-/Makefile
-/Makefile.in
-/dialtone
diff --git a/gnuradio-examples/c++/audio/Makefile.am b/gnuradio-examples/c++/audio/Makefile.am
deleted file mode 100644
index 88bd7c1fd..000000000
--- a/gnuradio-examples/c++/audio/Makefile.am
+++ /dev/null
@@ -1,38 +0,0 @@
-#
-# Copyright 2011 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-#
-
-include $(top_srcdir)/Makefile.common
-
-# For compiling with the GNU Radio build tree, use include dir below.
-# For compiling outside the tree, use 'pkg-config --cflags gnuradio-audio'
-AM_CPPFLAGS = \
- -I$(top_srcdir)/gr-audio/include \
- $(STD_DEFINES_AND_INCLUDES) \
- $(WITH_INCLUDES)
-
-# For compiling within the GNU Radio build tree, link against GR_AUDIO_LA
-# For compiling outside the tree, use 'pkg-config --libs gnuradio-audio'
-GR_AUDIO_LA=$(top_builddir)/gr-audio/lib/libgnuradio-audio.la
-
-noinst_PROGRAMS = dial_tone
-
-dial_tone_SOURCES = dial_tone.cc
-dial_tone_LDADD = $(GNURADIO_CORE_LA) $(GR_AUDIO_LA)
diff --git a/gnuradio-examples/c++/audio/dial_tone.cc b/gnuradio-examples/c++/audio/dial_tone.cc
deleted file mode 100644
index e4e3d8ceb..000000000
--- a/gnuradio-examples/c++/audio/dial_tone.cc
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Copyright 2011 Free Software Foundation, Inc.
- *
- * This file is part of GNU Radio
- *
- * GNU Radio is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3, or (at your option)
- * any later version.
- *
- * GNU Radio is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with GNU Radio; see the file COPYING. If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street,
- * Boston, MA 02110-1301, USA.
- */
-
-
-/*
- * GNU Radio C++ example creating dial tone
- * ("the simplest thing that could possibly work")
- *
- * Send a tone each to the left and right channels of stereo audio
- * output and let the user's brain sum them.
- *
- * GNU Radio makes extensive use of Boost shared pointers. Signal processing
- * blocks are typically created by calling a "make" factory function, which
- * returns an instance of the block as a typedef'd shared pointer that can
- * be used in any way a regular pointer can. Shared pointers created this way
- * keep track of their memory and free it at the right time, so the user
- * doesn't need to worry about it (really).
- *
- */
-
-// Include header files for each block used in flowgraph
-#include <gr_top_block.h>
-#include <gr_sig_source_f.h>
-#include <gr_audio_sink.h>
-
-int main(int argc, char **argv)
-{
- int rate = 48000; // Audio card sample rate
- float ampl = 0.1; // Don't exceed 0.5 or clipping will occur
-
- // Construct a top block that will contain flowgraph blocks. Alternatively,
- // one may create a derived class from gr_top_block and hold instantiated blocks
- // as member data for later manipulation.
- gr_top_block_sptr tb = gr_make_top_block("dial_tone");
-
- // Construct a real-valued signal source for each tone, at given sample rate
- gr_sig_source_f_sptr src0 = gr_make_sig_source_f(rate, GR_SIN_WAVE, 350, ampl);
- gr_sig_source_f_sptr src1 = gr_make_sig_source_f(rate, GR_SIN_WAVE, 440, ampl);
-
- // Construct an audio sink to accept audio tones
- audio_sink::sptr sink = audio_make_sink(rate);
-
- // Connect output #0 of src0 to input #0 of sink (left channel)
- tb->connect(src0, 0, sink, 0);
-
- // Connect output #0 of src1 to input #1 of sink (right channel)
- tb->connect(src1, 0, sink, 1);
-
- // Tell GNU Radio runtime to start flowgraph threads; the foreground thread
- // will block until either flowgraph exits (this example doesn't) or the
- // application receives SIGINT (e.g., user hits CTRL-C).
- //
- // Real applications may use tb->start() which returns, allowing the foreground
- // thread to proceed, then later use tb->stop(), followed by tb->wait(), to cleanup
- // GNU Radio before exiting.
- tb->run();
-
- // Exit normally.
- return 0;
-}
diff --git a/gnuradio-examples/grc/trellis/interference_cancellation.grc b/gnuradio-examples/grc/trellis/interference_cancellation.grc
index e93babd78..7674b4bf1 100644
--- a/gnuradio-examples/grc/trellis/interference_cancellation.grc
+++ b/gnuradio-examples/grc/trellis/interference_cancellation.grc
@@ -1,6 +1,6 @@
<?xml version='1.0' encoding='ASCII'?>
<flow_graph>
- <timestamp>Thu Mar 19 11:22:40 2009</timestamp>
+ <timestamp>Wed Aug 31 17:40:25 2011</timestamp>
<block>
<key>options</key>
<param>
@@ -36,6 +36,14 @@
<value>Custom</value>
</param>
<param>
+ <key>run_options</key>
+ <value>prompt</value>
+ </param>
+ <param>
+ <key>run</key>
+ <value>True</value>
+ </param>
+ <param>
<key>realtime_scheduling</key>
<value></value>
</param>
@@ -79,18 +87,22 @@
<value>100</value>
</param>
<param>
- <key>slider_length</key>
- <value>200</value>
+ <key>style</key>
+ <value>wx.SL_HORIZONTAL</value>
</param>
<param>
- <key>slider_type</key>
- <value>horizontal</value>
+ <key>converver</key>
+ <value>float_converter</value>
</param>
<param>
<key>grid_pos</key>
<value></value>
</param>
<param>
+ <key>notebook</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(243, 11)</value>
</param>
@@ -130,18 +142,22 @@
<value>100</value>
</param>
<param>
- <key>slider_length</key>
- <value>200</value>
+ <key>style</key>
+ <value>wx.SL_HORIZONTAL</value>
</param>
<param>
- <key>slider_type</key>
- <value>horizontal</value>
+ <key>converver</key>
+ <value>float_converter</value>
</param>
<param>
<key>grid_pos</key>
<value></value>
</param>
<param>
+ <key>notebook</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(447, 14)</value>
</param>
@@ -213,41 +229,6 @@
</param>
</block>
<block>
- <key>gr_chunks_to_symbols_xx</key>
- <param>
- <key>id</key>
- <value>gr_chunks_to_symbols_xx_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>in_type</key>
- <value>short</value>
- </param>
- <param>
- <key>out_type</key>
- <value>complex</value>
- </param>
- <param>
- <key>symbol_table</key>
- <value>1,1j,-1j,-1</value>
- </param>
- <param>
- <key>dimension</key>
- <value>1</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(665, 187)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
<key>gr_multiply_const_vxx</key>
<param>
<key>id</key>
@@ -344,6 +325,10 @@
<value>1</value>
</param>
<param>
+ <key>num_ports</key>
+ <value>1</value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(660, 311)</value>
</param>
@@ -638,6 +623,10 @@
<value>1</value>
</param>
<param>
+ <key>num_ports</key>
+ <value>1</value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(405, 998)</value>
</param>
@@ -816,6 +805,10 @@
<value>1</value>
</param>
<param>
+ <key>num_ports</key>
+ <value>1</value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(420, 1368)</value>
</param>
@@ -968,10 +961,10 @@
</param>
</block>
<block>
- <key>wxgui_numbersink2</key>
+ <key>trellis_encoder_xx</key>
<param>
<key>id</key>
- <value>wxgui_numbersink2_2</value>
+ <value>trellis_encoder_xx_1</value>
</param>
<param>
<key>_enabled</key>
@@ -979,71 +972,74 @@
</param>
<param>
<key>type</key>
- <value>float</value>
+ <value>ss</value>
</param>
<param>
- <key>title</key>
- <value>BER 2 (raw)</value>
+ <key>fsm_args</key>
+ <value>prefix+"gr-trellis/src/examples/fsm_files/awgn1o2_16.fsm"</value>
</param>
<param>
- <key>units</key>
- <value>BER</value>
+ <key>init_state</key>
+ <value>0</value>
</param>
<param>
- <key>samp_rate</key>
- <value>R</value>
+ <key>_coordinate</key>
+ <value>(336, 311)</value>
</param>
<param>
- <key>base_value</key>
- <value>0.0</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
+ </block>
+ <block>
+ <key>trellis_viterbi_combined_xx</key>
<param>
- <key>min_value</key>
- <value>0</value>
+ <key>id</key>
+ <value>trellis_viterbi_combined_xx_1</value>
</param>
<param>
- <key>max_value</key>
- <value>1.0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>factor</key>
- <value>1.0</value>
+ <key>type</key>
+ <value>c</value>
</param>
<param>
- <key>decimal_places</key>
- <value>6</value>
+ <key>out_type</key>
+ <value>s</value>
</param>
<param>
- <key>ref_level</key>
- <value>0</value>
+ <key>fsm_args</key>
+ <value>prefix+"gr-trellis/src/examples/fsm_files/awgn1o2_16.fsm"</value>
</param>
<param>
- <key>number_rate</key>
- <value>15</value>
+ <key>block_size</key>
+ <value>1000</value>
</param>
<param>
- <key>peak_hold</key>
- <value>False</value>
+ <key>init_state</key>
+ <value>-1</value>
</param>
<param>
- <key>average</key>
- <value>False</value>
+ <key>final_state</key>
+ <value>-1</value>
</param>
<param>
- <key>avg_alpha</key>
- <value>0.001</value>
+ <key>dim</key>
+ <value>1</value>
</param>
<param>
- <key>show_gauge</key>
- <value>True</value>
+ <key>table</key>
+ <value>alpha**0.5*1,alpha**0.5*1j,alpha**0.5*(-1j),alpha**0.5*(-1)</value>
</param>
<param>
- <key>grid_pos</key>
- <value>0,1,1,1</value>
+ <key>metric_type</key>
+ <value>trellis.TRELLIS_EUCLIDEAN</value>
</param>
<param>
<key>_coordinate</key>
- <value>(1260, 659)</value>
+ <value>(79, 501)</value>
</param>
<param>
<key>_rotation</key>
@@ -1051,10 +1047,10 @@
</param>
</block>
<block>
- <key>wxgui_numbersink2</key>
+ <key>trellis_viterbi_combined_xx</key>
<param>
<key>id</key>
- <value>wxgui_numbersink2_3</value>
+ <value>trellis_viterbi_combined_xx_2</value>
</param>
<param>
<key>_enabled</key>
@@ -1062,71 +1058,74 @@
</param>
<param>
<key>type</key>
- <value>float</value>
+ <value>c</value>
</param>
<param>
- <key>title</key>
- <value>BER 2 (after cancelling user 1)</value>
+ <key>out_type</key>
+ <value>s</value>
</param>
<param>
- <key>units</key>
- <value>BER</value>
+ <key>fsm_args</key>
+ <value>prefix+"gr-trellis/src/examples/fsm_files/awgn1o2_16.fsm"</value>
</param>
<param>
- <key>samp_rate</key>
- <value>R</value>
+ <key>block_size</key>
+ <value>1000</value>
</param>
<param>
- <key>base_value</key>
- <value>0.0</value>
+ <key>init_state</key>
+ <value>-1</value>
</param>
<param>
- <key>min_value</key>
- <value>0</value>
+ <key>final_state</key>
+ <value>-1</value>
</param>
<param>
- <key>max_value</key>
- <value>1.0</value>
+ <key>dim</key>
+ <value>1</value>
</param>
<param>
- <key>factor</key>
- <value>1.0</value>
+ <key>table</key>
+ <value>(1-alpha)**0.5*1,(1-alpha)**0.5*1j,(1-alpha)**0.5*(-1j),(1-alpha)**0.5*(-1)</value>
</param>
<param>
- <key>decimal_places</key>
- <value>6</value>
+ <key>metric_type</key>
+ <value>trellis.TRELLIS_EUCLIDEAN</value>
</param>
<param>
- <key>ref_level</key>
- <value>0</value>
+ <key>_coordinate</key>
+ <value>(82, 766)</value>
</param>
<param>
- <key>number_rate</key>
- <value>15</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
+ </block>
+ <block>
+ <key>trellis_encoder_xx</key>
<param>
- <key>peak_hold</key>
- <value>False</value>
+ <key>id</key>
+ <value>trellis_encoder_xx_2</value>
</param>
<param>
- <key>average</key>
- <value>False</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>avg_alpha</key>
- <value>0.001</value>
+ <key>type</key>
+ <value>ss</value>
</param>
<param>
- <key>show_gauge</key>
- <value>True</value>
+ <key>fsm_args</key>
+ <value>prefix+"gr-trellis/src/examples/fsm_files/awgn1o2_16.fsm"</value>
</param>
<param>
- <key>grid_pos</key>
- <value>1,1,1,1</value>
+ <key>init_state</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(1262, 1020)</value>
+ <value>(89, 998)</value>
</param>
<param>
<key>_rotation</key>
@@ -1134,10 +1133,10 @@
</param>
</block>
<block>
- <key>wxgui_numbersink2</key>
+ <key>trellis_viterbi_combined_xx</key>
<param>
<key>id</key>
- <value>wxgui_numbersink2_3_0</value>
+ <value>trellis_viterbi_combined_xx_0</value>
</param>
<param>
<key>_enabled</key>
@@ -1145,71 +1144,74 @@
</param>
<param>
<key>type</key>
- <value>float</value>
+ <value>c</value>
</param>
<param>
- <key>title</key>
- <value>BER 1 (after cancelling user 2)</value>
+ <key>out_type</key>
+ <value>s</value>
</param>
<param>
- <key>units</key>
- <value>BER</value>
+ <key>fsm_args</key>
+ <value>prefix+"gr-trellis/src/examples/fsm_files/awgn1o2_16.fsm"</value>
</param>
<param>
- <key>samp_rate</key>
- <value>R</value>
+ <key>block_size</key>
+ <value>1000</value>
</param>
<param>
- <key>base_value</key>
- <value>0.0</value>
+ <key>init_state</key>
+ <value>-1</value>
</param>
<param>
- <key>min_value</key>
- <value>0</value>
+ <key>final_state</key>
+ <value>-1</value>
</param>
<param>
- <key>max_value</key>
- <value>1.0</value>
+ <key>dim</key>
+ <value>1</value>
</param>
<param>
- <key>factor</key>
- <value>1.0</value>
+ <key>table</key>
+ <value>(1-alpha)**0.5*1,(1-alpha)**0.5*1j,(1-alpha)**0.5*(-1j),(1-alpha)**0.5*(-1)</value>
</param>
<param>
- <key>decimal_places</key>
- <value>6</value>
+ <key>metric_type</key>
+ <value>trellis.TRELLIS_EUCLIDEAN</value>
</param>
<param>
- <key>ref_level</key>
- <value>0</value>
+ <key>_coordinate</key>
+ <value>(83, 1111)</value>
</param>
<param>
- <key>number_rate</key>
- <value>15</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
+ </block>
+ <block>
+ <key>trellis_encoder_xx</key>
<param>
- <key>peak_hold</key>
- <value>False</value>
+ <key>id</key>
+ <value>trellis_encoder_xx_2_0</value>
</param>
<param>
- <key>average</key>
- <value>False</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>avg_alpha</key>
- <value>0.001</value>
+ <key>type</key>
+ <value>ss</value>
</param>
<param>
- <key>show_gauge</key>
- <value>True</value>
+ <key>fsm_args</key>
+ <value>prefix+"gr-trellis/src/examples/fsm_files/awgn1o2_16.fsm"</value>
</param>
<param>
- <key>grid_pos</key>
- <value>1,0,1,1</value>
+ <key>init_state</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(1269, 1417)</value>
+ <value>(105, 1367)</value>
</param>
<param>
<key>_rotation</key>
@@ -1217,53 +1219,54 @@
</param>
</block>
<block>
- <key>variable</key>
+ <key>trellis_viterbi_combined_xx</key>
<param>
<key>id</key>
- <value>R</value>
+ <value>trellis_viterbi_combined_xx_0_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>10e3</value>
+ <key>type</key>
+ <value>c</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(748, 12)</value>
+ <key>out_type</key>
+ <value>s</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>fsm_args</key>
+ <value>prefix+"gr-trellis/src/examples/fsm_files/awgn1o2_16.fsm"</value>
</param>
- </block>
- <block>
- <key>trellis_encoder_xx</key>
<param>
- <key>id</key>
- <value>trellis_encoder_xx_0</value>
+ <key>block_size</key>
+ <value>1000</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>init_state</key>
+ <value>-1</value>
</param>
<param>
- <key>type</key>
- <value>ss</value>
+ <key>final_state</key>
+ <value>-1</value>
</param>
<param>
- <key>fsm_args</key>
- <value>prefix+"gr-trellis/src/examples/fsm_files/awgn1o2_16.fsm"</value>
+ <key>dim</key>
+ <value>1</value>
</param>
<param>
- <key>init_state</key>
- <value>0</value>
+ <key>table</key>
+ <value>alpha**0.5*1,alpha**0.5*1j,alpha**0.5*(-1j),alpha**0.5*(-1)</value>
+ </param>
+ <param>
+ <key>metric_type</key>
+ <value>trellis.TRELLIS_EUCLIDEAN</value>
</param>
<param>
<key>_coordinate</key>
- <value>(334, 190)</value>
+ <value>(75, 1495)</value>
</param>
<param>
<key>_rotation</key>
@@ -1271,10 +1274,10 @@
</param>
</block>
<block>
- <key>trellis_encoder_xx</key>
+ <key>gr_add_xx</key>
<param>
<key>id</key>
- <value>trellis_encoder_xx_1</value>
+ <value>gr_add_xx_1</value>
</param>
<param>
<key>_enabled</key>
@@ -1282,19 +1285,19 @@
</param>
<param>
<key>type</key>
- <value>ss</value>
+ <value>complex</value>
</param>
<param>
- <key>fsm_args</key>
- <value>prefix+"gr-trellis/src/examples/fsm_files/awgn1o2_16.fsm"</value>
+ <key>num_inputs</key>
+ <value>2</value>
</param>
<param>
- <key>init_state</key>
- <value>0</value>
+ <key>vlen</key>
+ <value>1</value>
</param>
<param>
<key>_coordinate</key>
- <value>(336, 311)</value>
+ <value>(1400, 262)</value>
</param>
<param>
<key>_rotation</key>
@@ -1302,10 +1305,10 @@
</param>
</block>
<block>
- <key>trellis_viterbi_combined_xx</key>
+ <key>wxgui_scopesink2</key>
<param>
<key>id</key>
- <value>trellis_viterbi_combined_xx_1</value>
+ <value>wxgui_scopesink2_0</value>
</param>
<param>
<key>_enabled</key>
@@ -1313,43 +1316,63 @@
</param>
<param>
<key>type</key>
- <value>c</value>
+ <value>complex</value>
</param>
<param>
- <key>out_type</key>
- <value>s</value>
+ <key>title</key>
+ <value>Scope Plot</value>
</param>
<param>
- <key>fsm_args</key>
- <value>prefix+"gr-trellis/src/examples/fsm_files/awgn1o2_16.fsm"</value>
+ <key>samp_rate</key>
+ <value>R</value>
</param>
<param>
- <key>block_size</key>
- <value>1000</value>
+ <key>v_scale</key>
+ <value>0</value>
</param>
<param>
- <key>init_state</key>
- <value>-1</value>
+ <key>v_offset</key>
+ <value>0</value>
</param>
<param>
- <key>final_state</key>
- <value>-1</value>
+ <key>t_scale</key>
+ <value>0</value>
</param>
<param>
- <key>dim</key>
+ <key>ac_couple</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>xy_mode</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>num_inputs</key>
<value>1</value>
</param>
<param>
- <key>table</key>
- <value>alpha**0.5*1,alpha**0.5*1j,alpha**0.5*(-1j),alpha**0.5*(-1)</value>
+ <key>win_size</key>
+ <value></value>
</param>
<param>
- <key>metric_type</key>
- <value>trellis.TRELLIS_EUCLIDEAN</value>
+ <key>grid_pos</key>
+ <value></value>
+ </param>
+ <param>
+ <key>notebook</key>
+ <value></value>
+ </param>
+ <param>
+ <key>trig_mode</key>
+ <value>gr.gr_TRIG_MODE_AUTO</value>
+ </param>
+ <param>
+ <key>y_axis_label</key>
+ <value>Counts</value>
</param>
<param>
<key>_coordinate</key>
- <value>(79, 501)</value>
+ <value>(1533, 149)</value>
</param>
<param>
<key>_rotation</key>
@@ -1357,54 +1380,53 @@
</param>
</block>
<block>
- <key>trellis_viterbi_combined_xx</key>
+ <key>variable</key>
<param>
<key>id</key>
- <value>trellis_viterbi_combined_xx_2</value>
+ <value>prefix</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>c</value>
- </param>
- <param>
- <key>out_type</key>
- <value>s</value>
+ <key>value</key>
+ <value>"/n/harrisville/x/anastas/gnuradio_trunk/"</value>
</param>
<param>
- <key>fsm_args</key>
- <value>prefix+"gr-trellis/src/examples/fsm_files/awgn1o2_16.fsm"</value>
+ <key>_coordinate</key>
+ <value>(871, 14)</value>
</param>
<param>
- <key>block_size</key>
- <value>1000</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
+ </block>
+ <block>
+ <key>trellis_encoder_xx</key>
<param>
- <key>init_state</key>
- <value>-1</value>
+ <key>id</key>
+ <value>trellis_encoder_xx_0</value>
</param>
<param>
- <key>final_state</key>
- <value>-1</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>dim</key>
- <value>1</value>
+ <key>type</key>
+ <value>ss</value>
</param>
<param>
- <key>table</key>
- <value>(1-alpha)**0.5*1,(1-alpha)**0.5*1j,(1-alpha)**0.5*(-1j),(1-alpha)**0.5*(-1)</value>
+ <key>fsm_args</key>
+ <value>prefix+"gr-trellis/src/examples/fsm_files/awgn1o2_16.fsm"</value>
</param>
<param>
- <key>metric_type</key>
- <value>trellis.TRELLIS_EUCLIDEAN</value>
+ <key>init_state</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(82, 766)</value>
+ <value>(340, 187)</value>
</param>
<param>
<key>_rotation</key>
@@ -1412,10 +1434,10 @@
</param>
</block>
<block>
- <key>trellis_encoder_xx</key>
+ <key>gr_throttle</key>
<param>
<key>id</key>
- <value>trellis_encoder_xx_2</value>
+ <value>gr_throttle_0</value>
</param>
<param>
<key>_enabled</key>
@@ -1423,19 +1445,19 @@
</param>
<param>
<key>type</key>
- <value>ss</value>
+ <value>short</value>
</param>
<param>
- <key>fsm_args</key>
- <value>prefix+"gr-trellis/src/examples/fsm_files/awgn1o2_16.fsm"</value>
+ <key>samples_per_second</key>
+ <value>R</value>
</param>
<param>
- <key>init_state</key>
- <value>0</value>
+ <key>vlen</key>
+ <value>1</value>
</param>
<param>
<key>_coordinate</key>
- <value>(89, 998)</value>
+ <value>(534, 149)</value>
</param>
<param>
<key>_rotation</key>
@@ -1443,54 +1465,61 @@
</param>
</block>
<block>
- <key>trellis_viterbi_combined_xx</key>
+ <key>gr_chunks_to_symbols_xx</key>
<param>
<key>id</key>
- <value>trellis_viterbi_combined_xx_0</value>
+ <value>gr_chunks_to_symbols_xx_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>c</value>
+ <key>in_type</key>
+ <value>short</value>
</param>
<param>
<key>out_type</key>
- <value>s</value>
+ <value>complex</value>
</param>
<param>
- <key>fsm_args</key>
- <value>prefix+"gr-trellis/src/examples/fsm_files/awgn1o2_16.fsm"</value>
+ <key>symbol_table</key>
+ <value>1,1j,-1j,-1</value>
</param>
<param>
- <key>block_size</key>
- <value>1000</value>
+ <key>dimension</key>
+ <value>1</value>
</param>
<param>
- <key>init_state</key>
- <value>-1</value>
+ <key>num_ports</key>
+ <value>1</value>
</param>
<param>
- <key>final_state</key>
- <value>-1</value>
+ <key>_coordinate</key>
+ <value>(682, 186)</value>
</param>
<param>
- <key>dim</key>
- <value>1</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
+ </block>
+ <block>
+ <key>variable</key>
<param>
- <key>table</key>
- <value>(1-alpha)**0.5*1,(1-alpha)**0.5*1j,(1-alpha)**0.5*(-1j),(1-alpha)**0.5*(-1)</value>
+ <key>id</key>
+ <value>R</value>
</param>
<param>
- <key>metric_type</key>
- <value>trellis.TRELLIS_EUCLIDEAN</value>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>100e3</value>
</param>
<param>
<key>_coordinate</key>
- <value>(83, 1111)</value>
+ <value>(748, 12)</value>
</param>
<param>
<key>_rotation</key>
@@ -1498,10 +1527,10 @@
</param>
</block>
<block>
- <key>trellis_encoder_xx</key>
+ <key>wxgui_numbersink2</key>
<param>
<key>id</key>
- <value>trellis_encoder_xx_2_0</value>
+ <value>wxgui_numbersink2_0</value>
</param>
<param>
<key>_enabled</key>
@@ -1509,74 +1538,75 @@
</param>
<param>
<key>type</key>
- <value>ss</value>
+ <value>float</value>
</param>
<param>
- <key>fsm_args</key>
- <value>prefix+"gr-trellis/src/examples/fsm_files/awgn1o2_16.fsm"</value>
+ <key>title</key>
+ <value>BER 1 (raw)</value>
</param>
<param>
- <key>init_state</key>
- <value>0</value>
+ <key>units</key>
+ <value>BER</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(105, 1367)</value>
+ <key>samp_rate</key>
+ <value>R</value>
</param>
<param>
- <key>_rotation</key>
+ <key>min_value</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>trellis_viterbi_combined_xx</key>
<param>
- <key>id</key>
- <value>trellis_viterbi_combined_xx_0_0</value>
+ <key>max_value</key>
+ <value>1</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>factor</key>
+ <value>1.0</value>
</param>
<param>
- <key>type</key>
- <value>c</value>
+ <key>decimal_places</key>
+ <value>6</value>
</param>
<param>
- <key>out_type</key>
- <value>s</value>
+ <key>ref_level</key>
+ <value>0</value>
</param>
<param>
- <key>fsm_args</key>
- <value>prefix+"gr-trellis/src/examples/fsm_files/awgn1o2_16.fsm"</value>
+ <key>number_rate</key>
+ <value>15</value>
</param>
<param>
- <key>block_size</key>
- <value>1000</value>
+ <key>peak_hold</key>
+ <value>False</value>
</param>
<param>
- <key>init_state</key>
- <value>-1</value>
+ <key>average</key>
+ <value>True</value>
</param>
<param>
- <key>final_state</key>
- <value>-1</value>
+ <key>avg_alpha</key>
+ <value>0.001</value>
</param>
<param>
- <key>dim</key>
- <value>1</value>
+ <key>show_gauge</key>
+ <value>True</value>
</param>
<param>
- <key>table</key>
- <value>alpha**0.5*1,alpha**0.5*1j,alpha**0.5*(-1j),alpha**0.5*(-1)</value>
+ <key>win_size</key>
+ <value></value>
</param>
<param>
- <key>metric_type</key>
- <value>trellis.TRELLIS_EUCLIDEAN</value>
+ <key>grid_pos</key>
+ <value>0,0,1,1</value>
+ </param>
+ <param>
+ <key>notebook</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(75, 1495)</value>
+ <value>(1267, 410)</value>
</param>
<param>
<key>_rotation</key>
@@ -1584,53 +1614,86 @@
</param>
</block>
<block>
- <key>variable</key>
+ <key>wxgui_numbersink2</key>
<param>
<key>id</key>
- <value>prefix</value>
+ <value>wxgui_numbersink2_2</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>"../../../"</value>
+ <key>type</key>
+ <value>float</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(871, 14)</value>
+ <key>title</key>
+ <value>BER 2 (raw)</value>
</param>
<param>
- <key>_rotation</key>
+ <key>units</key>
+ <value>BER</value>
+ </param>
+ <param>
+ <key>samp_rate</key>
+ <value>R</value>
+ </param>
+ <param>
+ <key>min_value</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>gr_add_xx</key>
<param>
- <key>id</key>
- <value>gr_add_xx_1</value>
+ <key>max_value</key>
+ <value>1.0</value>
</param>
<param>
- <key>_enabled</key>
+ <key>factor</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>decimal_places</key>
+ <value>6</value>
+ </param>
+ <param>
+ <key>ref_level</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>number_rate</key>
+ <value>15</value>
+ </param>
+ <param>
+ <key>peak_hold</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>average</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
+ <key>avg_alpha</key>
+ <value>0.001</value>
</param>
<param>
- <key>num_inputs</key>
- <value>2</value>
+ <key>show_gauge</key>
+ <value>True</value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>win_size</key>
+ <value></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>(1400, 262)</value>
+ <value>(1260, 659)</value>
</param>
<param>
<key>_rotation</key>
@@ -1641,7 +1704,7 @@
<key>wxgui_numbersink2</key>
<param>
<key>id</key>
- <value>wxgui_numbersink2_0</value>
+ <value>wxgui_numbersink2_3</value>
</param>
<param>
<key>_enabled</key>
@@ -1653,7 +1716,7 @@
</param>
<param>
<key>title</key>
- <value>BER 1 (raw)</value>
+ <value>BER 2 (after cancelling user 1)</value>
</param>
<param>
<key>units</key>
@@ -1664,16 +1727,12 @@
<value>R</value>
</param>
<param>
- <key>base_value</key>
- <value>0.0</value>
- </param>
- <param>
<key>min_value</key>
<value>0</value>
</param>
<param>
<key>max_value</key>
- <value>1</value>
+ <value>1.0</value>
</param>
<param>
<key>factor</key>
@@ -1697,7 +1756,7 @@
</param>
<param>
<key>average</key>
- <value>False</value>
+ <value>True</value>
</param>
<param>
<key>avg_alpha</key>
@@ -1708,12 +1767,20 @@
<value>True</value>
</param>
<param>
+ <key>win_size</key>
+ <value></value>
+ </param>
+ <param>
<key>grid_pos</key>
- <value>0,0,1,1</value>
+ <value>1,1,1,1</value>
+ </param>
+ <param>
+ <key>notebook</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(1267, 410)</value>
+ <value>(1262, 1020)</value>
</param>
<param>
<key>_rotation</key>
@@ -1721,10 +1788,10 @@
</param>
</block>
<block>
- <key>wxgui_scopesink2</key>
+ <key>wxgui_numbersink2</key>
<param>
<key>id</key>
- <value>wxgui_scopesink2_0</value>
+ <value>wxgui_numbersink2_3_0</value>
</param>
<param>
<key>_enabled</key>
@@ -1732,43 +1799,75 @@
</param>
<param>
<key>type</key>
- <value>complex</value>
+ <value>float</value>
</param>
<param>
<key>title</key>
- <value>Scope Plot</value>
+ <value>BER 1 (after cancelling user 2)</value>
+ </param>
+ <param>
+ <key>units</key>
+ <value>BER</value>
</param>
<param>
<key>samp_rate</key>
<value>R</value>
</param>
<param>
- <key>v_scale</key>
+ <key>min_value</key>
<value>0</value>
</param>
<param>
- <key>t_scale</key>
+ <key>max_value</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>factor</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>decimal_places</key>
+ <value>6</value>
+ </param>
+ <param>
+ <key>ref_level</key>
<value>0</value>
</param>
<param>
- <key>ac_couple</key>
+ <key>number_rate</key>
+ <value>15</value>
+ </param>
+ <param>
+ <key>peak_hold</key>
<value>False</value>
</param>
<param>
- <key>xy_mode</key>
+ <key>average</key>
<value>True</value>
</param>
<param>
- <key>num_inputs</key>
- <value>1</value>
+ <key>avg_alpha</key>
+ <value>0.001</value>
+ </param>
+ <param>
+ <key>show_gauge</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>win_size</key>
+ <value></value>
</param>
<param>
<key>grid_pos</key>
+ <value>1,0,1,1</value>
+ </param>
+ <param>
+ <key>notebook</key>
<value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(1533, 149)</value>
+ <value>(1269, 1417)</value>
</param>
<param>
<key>_rotation</key>
@@ -1782,12 +1881,6 @@
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>trellis_encoder_xx_0</source_block_id>
- <sink_block_id>gr_chunks_to_symbols_xx_0</sink_block_id>
- <source_key>0</source_key>
- <sink_key>0</sink_key>
- </connection>
- <connection>
<source_block_id>trellis_encoder_xx_1</source_block_id>
<sink_block_id>gr_chunks_to_symbols_xx_1</sink_block_id>
<source_key>0</source_key>
@@ -2069,4 +2162,16 @@
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
+ <connection>
+ <source_block_id>trellis_encoder_xx_0</source_block_id>
+ <sink_block_id>gr_throttle_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>gr_throttle_0</source_block_id>
+ <sink_block_id>gr_chunks_to_symbols_xx_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
</flow_graph>
diff --git a/gnuradio-examples/grc/trellis/pccc.grc b/gnuradio-examples/grc/trellis/pccc.grc
new file mode 100644
index 000000000..c3111c321
--- /dev/null
+++ b/gnuradio-examples/grc/trellis/pccc.grc
@@ -0,0 +1,832 @@
+<?xml version='1.0' encoding='ASCII'?>
+<flow_graph>
+ <timestamp>Thu Sep 1 12:53:13 2011</timestamp>
+ <block>
+ <key>options</key>
+ <param>
+ <key>id</key>
+ <value>sccc1</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>title</key>
+ <value>Serially Concatenated Convolutional Code</value>
+ </param>
+ <param>
+ <key>author</key>
+ <value>AA</value>
+ </param>
+ <param>
+ <key>description</key>
+ <value>gnuradio flow graph</value>
+ </param>
+ <param>
+ <key>window_size</key>
+ <value>2048, 2048</value>
+ </param>
+ <param>
+ <key>generate_options</key>
+ <value>wx_gui</value>
+ </param>
+ <param>
+ <key>category</key>
+ <value>Custom</value>
+ </param>
+ <param>
+ <key>run_options</key>
+ <value>prompt</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>variable</key>
+ <param>
+ <key>id</key>
+ <value>noisevar</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>10**(-snr_db/10)</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(389, 15)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable</key>
+ <param>
+ <key>id</key>
+ <value>prefix</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>"/n/harrisville/x/anastas/gnuradio_trunk/"</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(590, 15)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable</key>
+ <param>
+ <key>id</key>
+ <value>block</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>1000</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(764, 16)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable_slider</key>
+ <param>
+ <key>id</key>
+ <value>snr_db</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>label</key>
+ <value>SNR (dB)</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>5</value>
+ </param>
+ <param>
+ <key>min</key>
+ <value>-10</value>
+ </param>
+ <param>
+ <key>max</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>num_steps</key>
+ <value>100</value>
+ </param>
+ <param>
+ <key>style</key>
+ <value>wx.SL_HORIZONTAL</value>
+ </param>
+ <param>
+ <key>converver</key>
+ <value>float_converter</value>
+ </param>
+ <param>
+ <key>grid_pos</key>
+ <value></value>
+ </param>
+ <param>
+ <key>notebook</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(229, 13)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>gr_multiply_xx</key>
+ <param>
+ <key>id</key>
+ <value>gr_multiply_xx_2_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>short</value>
+ </param>
+ <param>
+ <key>num_inputs</key>
+ <value>2</value>
+ </param>
+ <param>
+ <key>vlen</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(392, 591)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>gr_short_to_float</key>
+ <param>
+ <key>id</key>
+ <value>gr_short_to_float_1_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(535, 609)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>wxgui_numbersink2</key>
+ <param>
+ <key>id</key>
+ <value>wxgui_numbersink2_3_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>float</value>
+ </param>
+ <param>
+ <key>title</key>
+ <value>BER</value>
+ </param>
+ <param>
+ <key>units</key>
+ <value>BER</value>
+ </param>
+ <param>
+ <key>samp_rate</key>
+ <value>R</value>
+ </param>
+ <param>
+ <key>min_value</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>max_value</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>factor</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>decimal_places</key>
+ <value>6</value>
+ </param>
+ <param>
+ <key>ref_level</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>number_rate</key>
+ <value>15</value>
+ </param>
+ <param>
+ <key>peak_hold</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>average</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>avg_alpha</key>
+ <value>0.001</value>
+ </param>
+ <param>
+ <key>show_gauge</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>win_size</key>
+ <value></value>
+ </param>
+ <param>
+ <key>grid_pos</key>
+ <value>1,0,1,1</value>
+ </param>
+ <param>
+ <key>notebook</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(713, 426)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>gr_noise_source_x</key>
+ <param>
+ <key>id</key>
+ <value>gr_noise_source_x_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>float</value>
+ </param>
+ <param>
+ <key>noise_type</key>
+ <value>gr.GR_GAUSSIAN</value>
+ </param>
+ <param>
+ <key>amp</key>
+ <value>noisevar</value>
+ </param>
+ <param>
+ <key>seed</key>
+ <value>42</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(672, 290)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>wxgui_scopesink2</key>
+ <param>
+ <key>id</key>
+ <value>wxgui_scopesink2_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>float</value>
+ </param>
+ <param>
+ <key>title</key>
+ <value>Scope Plot</value>
+ </param>
+ <param>
+ <key>samp_rate</key>
+ <value>R</value>
+ </param>
+ <param>
+ <key>v_scale</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>v_offset</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>t_scale</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ac_couple</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>xy_mode</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>num_inputs</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>win_size</key>
+ <value></value>
+ </param>
+ <param>
+ <key>grid_pos</key>
+ <value></value>
+ </param>
+ <param>
+ <key>notebook</key>
+ <value></value>
+ </param>
+ <param>
+ <key>trig_mode</key>
+ <value>gr.gr_TRIG_MODE_AUTO</value>
+ </param>
+ <param>
+ <key>y_axis_label</key>
+ <value>Counts</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(952, 73)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>random_source_x</key>
+ <param>
+ <key>id</key>
+ <value>random_source_x_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>short</value>
+ </param>
+ <param>
+ <key>min</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>max</key>
+ <value>2</value>
+ </param>
+ <param>
+ <key>num_samps</key>
+ <value>1000</value>
+ </param>
+ <param>
+ <key>repeat</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(21, 170)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>gr_throttle</key>
+ <param>
+ <key>id</key>
+ <value>gr_throttle_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>short</value>
+ </param>
+ <param>
+ <key>samples_per_second</key>
+ <value>R</value>
+ </param>
+ <param>
+ <key>vlen</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(517, 103)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>gr_chunks_to_symbols_xx</key>
+ <param>
+ <key>id</key>
+ <value>gr_chunks_to_symbols_xx_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>in_type</key>
+ <value>short</value>
+ </param>
+ <param>
+ <key>out_type</key>
+ <value>float</value>
+ </param>
+ <param>
+ <key>symbol_table</key>
+ <value>-7,0, -5,0, -3,0, -1,0, 1,0, 3,0, 5,0, 7,0, 0,-7,0, -5,0, -3,0, -1,0, 1,0, 3,0, 5,0, 7</value>
+ </param>
+ <param>
+ <key>dimension</key>
+ <value>2</value>
+ </param>
+ <param>
+ <key>num_ports</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(551, 184)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>trellis_pccc_encoder_xx</key>
+ <param>
+ <key>id</key>
+ <value>trellis_pccc_encoder_xx_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>ss</value>
+ </param>
+ <param>
+ <key>o_fsm_args</key>
+ <value>prefix+"gr-trellis/src/examples/fsm_files/awgn1o2_4.fsm"</value>
+ </param>
+ <param>
+ <key>o_init_state</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>i_fsm_args</key>
+ <value>prefix+"gr-trellis/src/examples/fsm_files/awgn1o2_4.fsm"</value>
+ </param>
+ <param>
+ <key>i_init_state</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>interleaver_args</key>
+ <value>trellis.interleaver(block,666)</value>
+ </param>
+ <param>
+ <key>bl</key>
+ <value>block</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(236, 147)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable</key>
+ <param>
+ <key>id</key>
+ <value>R</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>100e3</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(482, 17)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>gr_add_xx</key>
+ <param>
+ <key>id</key>
+ <value>gr_add_xx_1</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>float</value>
+ </param>
+ <param>
+ <key>num_inputs</key>
+ <value>2</value>
+ </param>
+ <param>
+ <key>vlen</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(951, 256)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>trellis_pccc_decoder_combined_xx</key>
+ <param>
+ <key>id</key>
+ <value>trellis_pccc_decoder_combined_xx_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>f</value>
+ </param>
+ <param>
+ <key>out_type</key>
+ <value>s</value>
+ </param>
+ <param>
+ <key>o_fsm_args</key>
+ <value>prefix+"gr-trellis/src/examples/fsm_files/awgn1o2_4.fsm"</value>
+ </param>
+ <param>
+ <key>o_init_state</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>o_final_state</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>i_fsm_args</key>
+ <value>prefix+"gr-trellis/src/examples/fsm_files/awgn1o2_4.fsm"</value>
+ </param>
+ <param>
+ <key>i_init_state</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>i_final_state</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>interleaver</key>
+ <value>trellis.interleaver(block,666)</value>
+ </param>
+ <param>
+ <key>block_size</key>
+ <value>block</value>
+ </param>
+ <param>
+ <key>iterations</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>dim</key>
+ <value>2</value>
+ </param>
+ <param>
+ <key>table</key>
+ <value>-7,0, -5,0, -3,0, -1,0, 1,0, 3,0, 5,0, 7,0, 0,-7,0, -5,0, -3,0, -1,0, 1,0, 3,0, 5,0, 7</value>
+ </param>
+ <param>
+ <key>metric_type</key>
+ <value>trellis.TRELLIS_EUCLIDEAN</value>
+ </param>
+ <param>
+ <key>siso_type</key>
+ <value>trellis.TRELLIS_MIN_SUM</value>
+ </param>
+ <param>
+ <key>scaling</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(196, 274)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>gr_sub_xx</key>
+ <param>
+ <key>id</key>
+ <value>gr_sub_xx_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>short</value>
+ </param>
+ <param>
+ <key>vlen</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>num_inputs</key>
+ <value>2</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(217, 597)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <connection>
+ <source_block_id>random_source_x_0</source_block_id>
+ <sink_block_id>gr_sub_xx_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>gr_throttle_0</source_block_id>
+ <sink_block_id>gr_chunks_to_symbols_xx_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>gr_add_xx_1</source_block_id>
+ <sink_block_id>wxgui_scopesink2_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>gr_noise_source_x_0</source_block_id>
+ <sink_block_id>gr_add_xx_1</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>1</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>gr_chunks_to_symbols_xx_0</source_block_id>
+ <sink_block_id>gr_add_xx_1</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>gr_multiply_xx_2_0</source_block_id>
+ <sink_block_id>gr_short_to_float_1_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>gr_short_to_float_1_0</source_block_id>
+ <sink_block_id>wxgui_numbersink2_3_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>gr_sub_xx_0</source_block_id>
+ <sink_block_id>gr_multiply_xx_2_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>gr_sub_xx_0</source_block_id>
+ <sink_block_id>gr_multiply_xx_2_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>1</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>random_source_x_0</source_block_id>
+ <sink_block_id>trellis_pccc_encoder_xx_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>trellis_pccc_encoder_xx_0</source_block_id>
+ <sink_block_id>gr_throttle_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>gr_add_xx_1</source_block_id>
+ <sink_block_id>trellis_pccc_decoder_combined_xx_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>trellis_pccc_decoder_combined_xx_0</source_block_id>
+ <sink_block_id>gr_sub_xx_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>1</sink_key>
+ </connection>
+</flow_graph>
diff --git a/gnuradio-examples/grc/trellis/pccc1.grc b/gnuradio-examples/grc/trellis/pccc1.grc
new file mode 100644
index 000000000..15a63707e
--- /dev/null
+++ b/gnuradio-examples/grc/trellis/pccc1.grc
@@ -0,0 +1,857 @@
+<?xml version='1.0' encoding='ASCII'?>
+<flow_graph>
+ <timestamp>Wed Aug 31 20:34:39 2011</timestamp>
+ <block>
+ <key>options</key>
+ <param>
+ <key>id</key>
+ <value>sccc1</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>title</key>
+ <value>Serially Concatenated Convolutional Code</value>
+ </param>
+ <param>
+ <key>author</key>
+ <value>AA</value>
+ </param>
+ <param>
+ <key>description</key>
+ <value>gnuradio flow graph</value>
+ </param>
+ <param>
+ <key>window_size</key>
+ <value>2048, 2048</value>
+ </param>
+ <param>
+ <key>generate_options</key>
+ <value>wx_gui</value>
+ </param>
+ <param>
+ <key>category</key>
+ <value>Custom</value>
+ </param>
+ <param>
+ <key>run_options</key>
+ <value>prompt</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>variable</key>
+ <param>
+ <key>id</key>
+ <value>noisevar</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>10**(-snr_db/10)</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(389, 15)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable</key>
+ <param>
+ <key>id</key>
+ <value>prefix</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>"/n/harrisville/x/anastas/gnuradio_trunk/"</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(590, 15)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable</key>
+ <param>
+ <key>id</key>
+ <value>block</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>1000</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(764, 16)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable_slider</key>
+ <param>
+ <key>id</key>
+ <value>snr_db</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>label</key>
+ <value>SNR (dB)</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>5</value>
+ </param>
+ <param>
+ <key>min</key>
+ <value>-10</value>
+ </param>
+ <param>
+ <key>max</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>num_steps</key>
+ <value>100</value>
+ </param>
+ <param>
+ <key>style</key>
+ <value>wx.SL_HORIZONTAL</value>
+ </param>
+ <param>
+ <key>converver</key>
+ <value>float_converter</value>
+ </param>
+ <param>
+ <key>grid_pos</key>
+ <value></value>
+ </param>
+ <param>
+ <key>notebook</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(229, 13)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>gr_multiply_xx</key>
+ <param>
+ <key>id</key>
+ <value>gr_multiply_xx_2_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>short</value>
+ </param>
+ <param>
+ <key>num_inputs</key>
+ <value>2</value>
+ </param>
+ <param>
+ <key>vlen</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(392, 591)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>gr_short_to_float</key>
+ <param>
+ <key>id</key>
+ <value>gr_short_to_float_1_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(535, 609)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>wxgui_numbersink2</key>
+ <param>
+ <key>id</key>
+ <value>wxgui_numbersink2_3_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>float</value>
+ </param>
+ <param>
+ <key>title</key>
+ <value>BER</value>
+ </param>
+ <param>
+ <key>units</key>
+ <value>BER</value>
+ </param>
+ <param>
+ <key>samp_rate</key>
+ <value>R</value>
+ </param>
+ <param>
+ <key>min_value</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>max_value</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>factor</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>decimal_places</key>
+ <value>6</value>
+ </param>
+ <param>
+ <key>ref_level</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>number_rate</key>
+ <value>15</value>
+ </param>
+ <param>
+ <key>peak_hold</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>average</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>avg_alpha</key>
+ <value>0.001</value>
+ </param>
+ <param>
+ <key>show_gauge</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>win_size</key>
+ <value></value>
+ </param>
+ <param>
+ <key>grid_pos</key>
+ <value>1,0,1,1</value>
+ </param>
+ <param>
+ <key>notebook</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(713, 426)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>gr_noise_source_x</key>
+ <param>
+ <key>id</key>
+ <value>gr_noise_source_x_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>float</value>
+ </param>
+ <param>
+ <key>noise_type</key>
+ <value>gr.GR_GAUSSIAN</value>
+ </param>
+ <param>
+ <key>amp</key>
+ <value>noisevar</value>
+ </param>
+ <param>
+ <key>seed</key>
+ <value>42</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(672, 290)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>gr_add_xx</key>
+ <param>
+ <key>id</key>
+ <value>gr_add_xx_1</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>float</value>
+ </param>
+ <param>
+ <key>num_inputs</key>
+ <value>2</value>
+ </param>
+ <param>
+ <key>vlen</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(951, 256)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>wxgui_scopesink2</key>
+ <param>
+ <key>id</key>
+ <value>wxgui_scopesink2_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>float</value>
+ </param>
+ <param>
+ <key>title</key>
+ <value>Scope Plot</value>
+ </param>
+ <param>
+ <key>samp_rate</key>
+ <value>R</value>
+ </param>
+ <param>
+ <key>v_scale</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>v_offset</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>t_scale</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ac_couple</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>xy_mode</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>num_inputs</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>win_size</key>
+ <value></value>
+ </param>
+ <param>
+ <key>grid_pos</key>
+ <value></value>
+ </param>
+ <param>
+ <key>notebook</key>
+ <value></value>
+ </param>
+ <param>
+ <key>trig_mode</key>
+ <value>gr.gr_TRIG_MODE_AUTO</value>
+ </param>
+ <param>
+ <key>y_axis_label</key>
+ <value>Counts</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(952, 73)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>random_source_x</key>
+ <param>
+ <key>id</key>
+ <value>random_source_x_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>short</value>
+ </param>
+ <param>
+ <key>min</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>max</key>
+ <value>2</value>
+ </param>
+ <param>
+ <key>num_samps</key>
+ <value>1000</value>
+ </param>
+ <param>
+ <key>repeat</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(21, 170)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>gr_throttle</key>
+ <param>
+ <key>id</key>
+ <value>gr_throttle_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>short</value>
+ </param>
+ <param>
+ <key>samples_per_second</key>
+ <value>R</value>
+ </param>
+ <param>
+ <key>vlen</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(517, 103)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>gr_sub_xx</key>
+ <param>
+ <key>id</key>
+ <value>gr_sub_xx_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>short</value>
+ </param>
+ <param>
+ <key>vlen</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>num_inputs</key>
+ <value>2</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(217, 597)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>gr_chunks_to_symbols_xx</key>
+ <param>
+ <key>id</key>
+ <value>gr_chunks_to_symbols_xx_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>in_type</key>
+ <value>short</value>
+ </param>
+ <param>
+ <key>out_type</key>
+ <value>float</value>
+ </param>
+ <param>
+ <key>symbol_table</key>
+ <value>-7,0, -5,0, -3,0, -1,0, 1,0, 3,0, 5,0, 7,0, 0,-7,0, -5,0, -3,0, -1,0, 1,0, 3,0, 5,0, 7</value>
+ </param>
+ <param>
+ <key>dimension</key>
+ <value>2</value>
+ </param>
+ <param>
+ <key>num_ports</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(551, 184)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>trellis_pccc_encoder_xx</key>
+ <param>
+ <key>id</key>
+ <value>trellis_pccc_encoder_xx_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>ss</value>
+ </param>
+ <param>
+ <key>o_fsm_args</key>
+ <value>prefix+"gr-trellis/src/examples/fsm_files/awgn1o2_4.fsm"</value>
+ </param>
+ <param>
+ <key>o_init_state</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>i_fsm_args</key>
+ <value>prefix+"gr-trellis/src/examples/fsm_files/awgn1o2_4.fsm"</value>
+ </param>
+ <param>
+ <key>i_init_state</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>interleaver_args</key>
+ <value>trellis.interleaver(block,666)</value>
+ </param>
+ <param>
+ <key>bl</key>
+ <value>block</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(236, 147)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>trellis_pccc_decoder_x</key>
+ <param>
+ <key>id</key>
+ <value>trellis_pccc_decoder_x_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>out_type</key>
+ <value>s</value>
+ </param>
+ <param>
+ <key>o_fsm_args</key>
+ <value>prefix+"gr-trellis/src/examples/fsm_files/awgn1o2_4.fsm"</value>
+ </param>
+ <param>
+ <key>o_init_state</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>o_final_state</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>i_fsm_args</key>
+ <value>prefix+"gr-trellis/src/examples/fsm_files/awgn1o2_4.fsm"</value>
+ </param>
+ <param>
+ <key>i_init_state</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>i_final_state</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>interleaver</key>
+ <value>trellis.interleaver(block,666)</value>
+ </param>
+ <param>
+ <key>block_size</key>
+ <value>block</value>
+ </param>
+ <param>
+ <key>iterations</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>siso_type</key>
+ <value>trellis.TRELLIS_MIN_SUM</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(357, 304)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>trellis_metrics_x</key>
+ <param>
+ <key>id</key>
+ <value>trellis_metrics_x_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>f</value>
+ </param>
+ <param>
+ <key>card</key>
+ <value>16</value>
+ </param>
+ <param>
+ <key>dim</key>
+ <value>2</value>
+ </param>
+ <param>
+ <key>table</key>
+ <value>-7,0, -5,0, -3,0, -1,0, 1,0, 3,0, 5,0, 7,0, 0,-7,0, -5,0, -3,0, -1,0, 1,0, 3,0, 5,0, 7</value>
+ </param>
+ <param>
+ <key>metric_type</key>
+ <value>trellis.TRELLIS_EUCLIDEAN</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(58, 354)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable</key>
+ <param>
+ <key>id</key>
+ <value>R</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>100e3</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(482, 17)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <connection>
+ <source_block_id>random_source_x_0</source_block_id>
+ <sink_block_id>gr_sub_xx_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>gr_throttle_0</source_block_id>
+ <sink_block_id>gr_chunks_to_symbols_xx_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>gr_add_xx_1</source_block_id>
+ <sink_block_id>wxgui_scopesink2_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>gr_noise_source_x_0</source_block_id>
+ <sink_block_id>gr_add_xx_1</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>1</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>gr_chunks_to_symbols_xx_0</source_block_id>
+ <sink_block_id>gr_add_xx_1</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>gr_multiply_xx_2_0</source_block_id>
+ <sink_block_id>gr_short_to_float_1_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>gr_short_to_float_1_0</source_block_id>
+ <sink_block_id>wxgui_numbersink2_3_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>gr_sub_xx_0</source_block_id>
+ <sink_block_id>gr_multiply_xx_2_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>gr_sub_xx_0</source_block_id>
+ <sink_block_id>gr_multiply_xx_2_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>1</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>gr_add_xx_1</source_block_id>
+ <sink_block_id>trellis_metrics_x_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>random_source_x_0</source_block_id>
+ <sink_block_id>trellis_pccc_encoder_xx_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>trellis_pccc_encoder_xx_0</source_block_id>
+ <sink_block_id>gr_throttle_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>trellis_metrics_x_0</source_block_id>
+ <sink_block_id>trellis_pccc_decoder_x_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>trellis_pccc_decoder_x_0</source_block_id>
+ <sink_block_id>gr_sub_xx_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>1</sink_key>
+ </connection>
+</flow_graph>
diff --git a/gnuradio-examples/grc/trellis/readme.txt b/gnuradio-examples/grc/trellis/readme.txt
index d620fd628..9c7363af8 100644
--- a/gnuradio-examples/grc/trellis/readme.txt
+++ b/gnuradio-examples/grc/trellis/readme.txt
@@ -1,5 +1,7 @@
-This is an example of using gr-trellis in grc.
+These are examples of using gr-trellis in grc.
+INTERFERENCE CANCELLATION
+-------------------------
Two users are transmitting simultaneously using convolutionally encoded QPSK, each with power P1=alpha*P and P2=(1-alpha)*P.
The combined signal is observed in noise and four different receivers are considered:
1) A viterbi decoder decoding user 1 assuming user 2 is noise
@@ -13,4 +15,18 @@ The combined signal is observed in noise and four different receivers are consid
You can change the signal to noise ratio P/sigma^2 and the allocation of power to the two users, alpha.
+
+Serially Concatenated Convolutional Codes
+-----------------------------------------
+An SCCC can be defined by an outer and an inner FSM together with an interleaver
+and a modulation type. You can change the SNR and observe the estimated BER.
+In sccc.grc the decoding and metric calculation are combined; in sccc1.grc they are separate.
+
+Parallel Concatenated Convolutional Codes
+-----------------------------------------
+A PCCC can be defined by two FSMs together with an interleaver
+and a modulation type. You can change the SNR and observe the estimated BER.
+In pccc1.grc the decoding and metric calculation are separate.
+
+
Enjoy.
diff --git a/gnuradio-examples/grc/trellis/sccc.grc b/gnuradio-examples/grc/trellis/sccc.grc
new file mode 100644
index 000000000..e8f656f63
--- /dev/null
+++ b/gnuradio-examples/grc/trellis/sccc.grc
@@ -0,0 +1,832 @@
+<?xml version='1.0' encoding='ASCII'?>
+<flow_graph>
+ <timestamp>Wed Aug 31 19:57:09 2011</timestamp>
+ <block>
+ <key>options</key>
+ <param>
+ <key>id</key>
+ <value>sccc</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>title</key>
+ <value>Serially Concatenated Convolutional Code</value>
+ </param>
+ <param>
+ <key>author</key>
+ <value>AA</value>
+ </param>
+ <param>
+ <key>description</key>
+ <value>gnuradio flow graph</value>
+ </param>
+ <param>
+ <key>window_size</key>
+ <value>2048, 2048</value>
+ </param>
+ <param>
+ <key>generate_options</key>
+ <value>wx_gui</value>
+ </param>
+ <param>
+ <key>category</key>
+ <value>Custom</value>
+ </param>
+ <param>
+ <key>run_options</key>
+ <value>prompt</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>variable</key>
+ <param>
+ <key>id</key>
+ <value>noisevar</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>10**(-snr_db/10)</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(389, 15)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>random_source_x</key>
+ <param>
+ <key>id</key>
+ <value>random_source_x_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>short</value>
+ </param>
+ <param>
+ <key>min</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>max</key>
+ <value>2</value>
+ </param>
+ <param>
+ <key>num_samps</key>
+ <value>1000</value>
+ </param>
+ <param>
+ <key>repeat</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(21, 170)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable</key>
+ <param>
+ <key>id</key>
+ <value>prefix</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>"/n/harrisville/x/anastas/gnuradio_trunk/"</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(590, 15)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable</key>
+ <param>
+ <key>id</key>
+ <value>block</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>1000</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(764, 16)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>gr_add_xx</key>
+ <param>
+ <key>id</key>
+ <value>gr_add_xx_1</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>complex</value>
+ </param>
+ <param>
+ <key>num_inputs</key>
+ <value>2</value>
+ </param>
+ <param>
+ <key>vlen</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(951, 256)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>gr_sub_xx</key>
+ <param>
+ <key>id</key>
+ <value>gr_sub_xx_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>short</value>
+ </param>
+ <param>
+ <key>vlen</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>num_inputs</key>
+ <value>2</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(445, 517)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>gr_multiply_xx</key>
+ <param>
+ <key>id</key>
+ <value>gr_multiply_xx_2_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>short</value>
+ </param>
+ <param>
+ <key>num_inputs</key>
+ <value>2</value>
+ </param>
+ <param>
+ <key>vlen</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(228.25, 798.39170361874085)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>gr_short_to_float</key>
+ <param>
+ <key>id</key>
+ <value>gr_short_to_float_1_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(416, 815)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable_slider</key>
+ <param>
+ <key>id</key>
+ <value>snr_db</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>label</key>
+ <value>SNR (dB)</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>5</value>
+ </param>
+ <param>
+ <key>min</key>
+ <value>-10</value>
+ </param>
+ <param>
+ <key>max</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>num_steps</key>
+ <value>100</value>
+ </param>
+ <param>
+ <key>style</key>
+ <value>wx.SL_HORIZONTAL</value>
+ </param>
+ <param>
+ <key>converver</key>
+ <value>float_converter</value>
+ </param>
+ <param>
+ <key>grid_pos</key>
+ <value></value>
+ </param>
+ <param>
+ <key>notebook</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(229, 13)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable</key>
+ <param>
+ <key>id</key>
+ <value>R</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>10e3</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(482, 17)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>wxgui_scopesink2</key>
+ <param>
+ <key>id</key>
+ <value>wxgui_scopesink2_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>complex</value>
+ </param>
+ <param>
+ <key>title</key>
+ <value>Scope Plot</value>
+ </param>
+ <param>
+ <key>samp_rate</key>
+ <value>R</value>
+ </param>
+ <param>
+ <key>v_scale</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>v_offset</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>t_scale</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ac_couple</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>xy_mode</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>num_inputs</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>win_size</key>
+ <value></value>
+ </param>
+ <param>
+ <key>grid_pos</key>
+ <value></value>
+ </param>
+ <param>
+ <key>notebook</key>
+ <value></value>
+ </param>
+ <param>
+ <key>trig_mode</key>
+ <value>gr.gr_TRIG_MODE_AUTO</value>
+ </param>
+ <param>
+ <key>y_axis_label</key>
+ <value>Counts</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(952, 73)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>gr_throttle</key>
+ <param>
+ <key>id</key>
+ <value>gr_throttle_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>short</value>
+ </param>
+ <param>
+ <key>samples_per_second</key>
+ <value>R</value>
+ </param>
+ <param>
+ <key>vlen</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(514, 105)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>gr_chunks_to_symbols_xx</key>
+ <param>
+ <key>id</key>
+ <value>gr_chunks_to_symbols_xx_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>in_type</key>
+ <value>short</value>
+ </param>
+ <param>
+ <key>out_type</key>
+ <value>complex</value>
+ </param>
+ <param>
+ <key>symbol_table</key>
+ <value>1,0,1j,0,-1j,0,-1,0, 0,1,0,1j,0,-1j,0,-1</value>
+ </param>
+ <param>
+ <key>dimension</key>
+ <value>2</value>
+ </param>
+ <param>
+ <key>num_ports</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(551, 184)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>gr_noise_source_x</key>
+ <param>
+ <key>id</key>
+ <value>gr_noise_source_x_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>complex</value>
+ </param>
+ <param>
+ <key>noise_type</key>
+ <value>gr.GR_GAUSSIAN</value>
+ </param>
+ <param>
+ <key>amp</key>
+ <value>noisevar</value>
+ </param>
+ <param>
+ <key>seed</key>
+ <value>42</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(672, 290)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>trellis_sccc_encoder_xx</key>
+ <param>
+ <key>id</key>
+ <value>trellis_sccc_encoder_xx_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>ss</value>
+ </param>
+ <param>
+ <key>o_fsm_args</key>
+ <value>prefix+"gr-trellis/src/examples/fsm_files/awgn1o2_4.fsm"</value>
+ </param>
+ <param>
+ <key>o_init_state</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>i_fsm_args</key>
+ <value>prefix+"gr-trellis/src/examples/fsm_files/awgn2o3_4.fsm"</value>
+ </param>
+ <param>
+ <key>i_init_state</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>interleaver_args</key>
+ <value>trellis.interleaver(block,666)</value>
+ </param>
+ <param>
+ <key>bl</key>
+ <value>block</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(242, 154)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>wxgui_numbersink2</key>
+ <param>
+ <key>id</key>
+ <value>wxgui_numbersink2_3_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>float</value>
+ </param>
+ <param>
+ <key>title</key>
+ <value>BER</value>
+ </param>
+ <param>
+ <key>units</key>
+ <value>BER</value>
+ </param>
+ <param>
+ <key>samp_rate</key>
+ <value>R</value>
+ </param>
+ <param>
+ <key>min_value</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>max_value</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>factor</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>decimal_places</key>
+ <value>6</value>
+ </param>
+ <param>
+ <key>ref_level</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>number_rate</key>
+ <value>15</value>
+ </param>
+ <param>
+ <key>peak_hold</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>average</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>avg_alpha</key>
+ <value>0.001</value>
+ </param>
+ <param>
+ <key>show_gauge</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>win_size</key>
+ <value></value>
+ </param>
+ <param>
+ <key>grid_pos</key>
+ <value>1,0,1,1</value>
+ </param>
+ <param>
+ <key>notebook</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(688, 572)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>trellis_sccc_decoder_combined_xx</key>
+ <param>
+ <key>id</key>
+ <value>trellis_sccc_decoder_combined_xx_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>c</value>
+ </param>
+ <param>
+ <key>out_type</key>
+ <value>s</value>
+ </param>
+ <param>
+ <key>o_fsm_args</key>
+ <value>prefix+"gr-trellis/src/examples/fsm_files/awgn1o2_4.fsm"</value>
+ </param>
+ <param>
+ <key>o_init_state</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>o_final_state</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>i_fsm_args</key>
+ <value>prefix+"gr-trellis/src/examples/fsm_files/awgn2o3_4.fsm"</value>
+ </param>
+ <param>
+ <key>i_init_state</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>i_final_state</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>interleaver</key>
+ <value>trellis.interleaver(block,666)</value>
+ </param>
+ <param>
+ <key>block_size</key>
+ <value>block</value>
+ </param>
+ <param>
+ <key>iterations</key>
+ <value>5</value>
+ </param>
+ <param>
+ <key>dim</key>
+ <value>2</value>
+ </param>
+ <param>
+ <key>table</key>
+ <value>1,0,1j,0,-1j,0,-1,0, 0,1,0,1j,0,-1j,0,-1</value>
+ </param>
+ <param>
+ <key>metric_type</key>
+ <value>trellis.TRELLIS_EUCLIDEAN</value>
+ </param>
+ <param>
+ <key>siso_type</key>
+ <value>trellis.TRELLIS_SUM_PRODUCT</value>
+ </param>
+ <param>
+ <key>scaling</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(159, 335)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <connection>
+ <source_block_id>random_source_x_0</source_block_id>
+ <sink_block_id>gr_sub_xx_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>gr_throttle_0</source_block_id>
+ <sink_block_id>gr_chunks_to_symbols_xx_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>gr_add_xx_1</source_block_id>
+ <sink_block_id>wxgui_scopesink2_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>gr_noise_source_x_0</source_block_id>
+ <sink_block_id>gr_add_xx_1</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>1</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>gr_chunks_to_symbols_xx_0</source_block_id>
+ <sink_block_id>gr_add_xx_1</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>random_source_x_0</source_block_id>
+ <sink_block_id>trellis_sccc_encoder_xx_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>trellis_sccc_encoder_xx_0</source_block_id>
+ <sink_block_id>gr_throttle_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>gr_add_xx_1</source_block_id>
+ <sink_block_id>trellis_sccc_decoder_combined_xx_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>trellis_sccc_decoder_combined_xx_0</source_block_id>
+ <sink_block_id>gr_sub_xx_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>1</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>gr_multiply_xx_2_0</source_block_id>
+ <sink_block_id>gr_short_to_float_1_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>gr_short_to_float_1_0</source_block_id>
+ <sink_block_id>wxgui_numbersink2_3_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>gr_sub_xx_0</source_block_id>
+ <sink_block_id>gr_multiply_xx_2_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>gr_sub_xx_0</source_block_id>
+ <sink_block_id>gr_multiply_xx_2_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>1</sink_key>
+ </connection>
+</flow_graph>
diff --git a/gnuradio-examples/grc/trellis/sccc1.grc b/gnuradio-examples/grc/trellis/sccc1.grc
new file mode 100644
index 000000000..0be59d0c4
--- /dev/null
+++ b/gnuradio-examples/grc/trellis/sccc1.grc
@@ -0,0 +1,857 @@
+<?xml version='1.0' encoding='ASCII'?>
+<flow_graph>
+ <timestamp>Wed Aug 31 20:09:23 2011</timestamp>
+ <block>
+ <key>options</key>
+ <param>
+ <key>id</key>
+ <value>sccc1</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>title</key>
+ <value>Serially Concatenated Convolutional Code</value>
+ </param>
+ <param>
+ <key>author</key>
+ <value>AA</value>
+ </param>
+ <param>
+ <key>description</key>
+ <value>gnuradio flow graph</value>
+ </param>
+ <param>
+ <key>window_size</key>
+ <value>2048, 2048</value>
+ </param>
+ <param>
+ <key>generate_options</key>
+ <value>wx_gui</value>
+ </param>
+ <param>
+ <key>category</key>
+ <value>Custom</value>
+ </param>
+ <param>
+ <key>run_options</key>
+ <value>prompt</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>variable</key>
+ <param>
+ <key>id</key>
+ <value>noisevar</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>10**(-snr_db/10)</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(389, 15)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>random_source_x</key>
+ <param>
+ <key>id</key>
+ <value>random_source_x_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>short</value>
+ </param>
+ <param>
+ <key>min</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>max</key>
+ <value>2</value>
+ </param>
+ <param>
+ <key>num_samps</key>
+ <value>1000</value>
+ </param>
+ <param>
+ <key>repeat</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(21, 170)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable</key>
+ <param>
+ <key>id</key>
+ <value>prefix</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>"/n/harrisville/x/anastas/gnuradio_trunk/"</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(590, 15)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable</key>
+ <param>
+ <key>id</key>
+ <value>block</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>1000</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(764, 16)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable_slider</key>
+ <param>
+ <key>id</key>
+ <value>snr_db</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>label</key>
+ <value>SNR (dB)</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>5</value>
+ </param>
+ <param>
+ <key>min</key>
+ <value>-10</value>
+ </param>
+ <param>
+ <key>max</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>num_steps</key>
+ <value>100</value>
+ </param>
+ <param>
+ <key>style</key>
+ <value>wx.SL_HORIZONTAL</value>
+ </param>
+ <param>
+ <key>converver</key>
+ <value>float_converter</value>
+ </param>
+ <param>
+ <key>grid_pos</key>
+ <value></value>
+ </param>
+ <param>
+ <key>notebook</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(229, 13)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable</key>
+ <param>
+ <key>id</key>
+ <value>R</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>10e3</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(482, 17)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>trellis_sccc_encoder_xx</key>
+ <param>
+ <key>id</key>
+ <value>trellis_sccc_encoder_xx_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>ss</value>
+ </param>
+ <param>
+ <key>o_fsm_args</key>
+ <value>prefix+"gr-trellis/src/examples/fsm_files/awgn1o2_4.fsm"</value>
+ </param>
+ <param>
+ <key>o_init_state</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>i_fsm_args</key>
+ <value>prefix+"gr-trellis/src/examples/fsm_files/awgn2o3_4.fsm"</value>
+ </param>
+ <param>
+ <key>i_init_state</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>interleaver_args</key>
+ <value>trellis.interleaver(block,666)</value>
+ </param>
+ <param>
+ <key>bl</key>
+ <value>block</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(242, 154)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>trellis_sccc_decoder_x</key>
+ <param>
+ <key>id</key>
+ <value>trellis_sccc_decoder_x_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>out_type</key>
+ <value>s</value>
+ </param>
+ <param>
+ <key>o_fsm_args</key>
+ <value>prefix+"gr-trellis/src/examples/fsm_files/awgn1o2_4.fsm"</value>
+ </param>
+ <param>
+ <key>o_init_state</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>o_final_state</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>i_fsm_args</key>
+ <value>prefix+"gr-trellis/src/examples/fsm_files/awgn2o3_4.fsm"</value>
+ </param>
+ <param>
+ <key>i_init_state</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>i_final_state</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>interleaver</key>
+ <value>trellis.interleaver(block,666)</value>
+ </param>
+ <param>
+ <key>block_size</key>
+ <value>block</value>
+ </param>
+ <param>
+ <key>iterations</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>siso_type</key>
+ <value>trellis.TRELLIS_MIN_SUM</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(333, 305)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>gr_sub_xx</key>
+ <param>
+ <key>id</key>
+ <value>gr_sub_xx_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>short</value>
+ </param>
+ <param>
+ <key>vlen</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>num_inputs</key>
+ <value>2</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(217, 597)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>gr_multiply_xx</key>
+ <param>
+ <key>id</key>
+ <value>gr_multiply_xx_2_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>short</value>
+ </param>
+ <param>
+ <key>num_inputs</key>
+ <value>2</value>
+ </param>
+ <param>
+ <key>vlen</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(392, 591)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>gr_short_to_float</key>
+ <param>
+ <key>id</key>
+ <value>gr_short_to_float_1_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(535, 609)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>wxgui_numbersink2</key>
+ <param>
+ <key>id</key>
+ <value>wxgui_numbersink2_3_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>float</value>
+ </param>
+ <param>
+ <key>title</key>
+ <value>BER</value>
+ </param>
+ <param>
+ <key>units</key>
+ <value>BER</value>
+ </param>
+ <param>
+ <key>samp_rate</key>
+ <value>R</value>
+ </param>
+ <param>
+ <key>min_value</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>max_value</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>factor</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>decimal_places</key>
+ <value>6</value>
+ </param>
+ <param>
+ <key>ref_level</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>number_rate</key>
+ <value>15</value>
+ </param>
+ <param>
+ <key>peak_hold</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>average</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>avg_alpha</key>
+ <value>0.001</value>
+ </param>
+ <param>
+ <key>show_gauge</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>win_size</key>
+ <value></value>
+ </param>
+ <param>
+ <key>grid_pos</key>
+ <value>1,0,1,1</value>
+ </param>
+ <param>
+ <key>notebook</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(713, 426)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>gr_noise_source_x</key>
+ <param>
+ <key>id</key>
+ <value>gr_noise_source_x_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>float</value>
+ </param>
+ <param>
+ <key>noise_type</key>
+ <value>gr.GR_GAUSSIAN</value>
+ </param>
+ <param>
+ <key>amp</key>
+ <value>noisevar</value>
+ </param>
+ <param>
+ <key>seed</key>
+ <value>42</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(672, 290)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>gr_add_xx</key>
+ <param>
+ <key>id</key>
+ <value>gr_add_xx_1</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>float</value>
+ </param>
+ <param>
+ <key>num_inputs</key>
+ <value>2</value>
+ </param>
+ <param>
+ <key>vlen</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(951, 256)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>trellis_metrics_x</key>
+ <param>
+ <key>id</key>
+ <value>trellis_metrics_x_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>f</value>
+ </param>
+ <param>
+ <key>card</key>
+ <value>8</value>
+ </param>
+ <param>
+ <key>dim</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>table</key>
+ <value>-7, -5, -3, -1, 1, 3, 5, 7</value>
+ </param>
+ <param>
+ <key>metric_type</key>
+ <value>trellis.TRELLIS_EUCLIDEAN</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(58, 354)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>gr_throttle</key>
+ <param>
+ <key>id</key>
+ <value>gr_throttle_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>short</value>
+ </param>
+ <param>
+ <key>samples_per_second</key>
+ <value>R</value>
+ </param>
+ <param>
+ <key>vlen</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(517, 103)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>wxgui_scopesink2</key>
+ <param>
+ <key>id</key>
+ <value>wxgui_scopesink2_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>float</value>
+ </param>
+ <param>
+ <key>title</key>
+ <value>Scope Plot</value>
+ </param>
+ <param>
+ <key>samp_rate</key>
+ <value>R</value>
+ </param>
+ <param>
+ <key>v_scale</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>v_offset</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>t_scale</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ac_couple</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>xy_mode</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>num_inputs</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>win_size</key>
+ <value></value>
+ </param>
+ <param>
+ <key>grid_pos</key>
+ <value></value>
+ </param>
+ <param>
+ <key>notebook</key>
+ <value></value>
+ </param>
+ <param>
+ <key>trig_mode</key>
+ <value>gr.gr_TRIG_MODE_AUTO</value>
+ </param>
+ <param>
+ <key>y_axis_label</key>
+ <value>Counts</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(952, 73)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>gr_chunks_to_symbols_xx</key>
+ <param>
+ <key>id</key>
+ <value>gr_chunks_to_symbols_xx_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>in_type</key>
+ <value>short</value>
+ </param>
+ <param>
+ <key>out_type</key>
+ <value>float</value>
+ </param>
+ <param>
+ <key>symbol_table</key>
+ <value>-7, -5, -3, -1, 1, 3, 5, 7</value>
+ </param>
+ <param>
+ <key>dimension</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>num_ports</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(551, 184)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <connection>
+ <source_block_id>random_source_x_0</source_block_id>
+ <sink_block_id>gr_sub_xx_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>gr_throttle_0</source_block_id>
+ <sink_block_id>gr_chunks_to_symbols_xx_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>gr_add_xx_1</source_block_id>
+ <sink_block_id>wxgui_scopesink2_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>gr_noise_source_x_0</source_block_id>
+ <sink_block_id>gr_add_xx_1</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>1</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>gr_chunks_to_symbols_xx_0</source_block_id>
+ <sink_block_id>gr_add_xx_1</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>random_source_x_0</source_block_id>
+ <sink_block_id>trellis_sccc_encoder_xx_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>trellis_sccc_encoder_xx_0</source_block_id>
+ <sink_block_id>gr_throttle_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>gr_multiply_xx_2_0</source_block_id>
+ <sink_block_id>gr_short_to_float_1_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>gr_short_to_float_1_0</source_block_id>
+ <sink_block_id>wxgui_numbersink2_3_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>gr_sub_xx_0</source_block_id>
+ <sink_block_id>gr_multiply_xx_2_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>gr_sub_xx_0</source_block_id>
+ <sink_block_id>gr_multiply_xx_2_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>1</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>gr_add_xx_1</source_block_id>
+ <sink_block_id>trellis_metrics_x_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>trellis_metrics_x_0</source_block_id>
+ <sink_block_id>trellis_sccc_decoder_x_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>trellis_sccc_decoder_x_0</source_block_id>
+ <sink_block_id>gr_sub_xx_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>1</sink_key>
+ </connection>
+</flow_graph>
diff --git a/gnuradio-examples/python/Makefile.am b/gnuradio-examples/python/Makefile.am
index ea03b438f..65021729a 100644
--- a/gnuradio-examples/python/Makefile.am
+++ b/gnuradio-examples/python/Makefile.am
@@ -1,5 +1,5 @@
#
-# Copyright 2004,2007,2009 Free Software Foundation, Inc.
+# Copyright 2004,2007,2009,2011 Free Software Foundation, Inc.
#
# This file is part of GNU Radio
#
@@ -23,7 +23,6 @@ include $(top_srcdir)/Makefile.common
SUBDIRS = \
apps \
- audio \
digital \
digital-bert \
digital_voice \
@@ -33,5 +32,6 @@ SUBDIRS = \
network \
ofdm \
pfb \
+ tags \
usrp \
usrp2
diff --git a/gnuradio-examples/python/audio/.gitignore b/gnuradio-examples/python/audio/.gitignore
deleted file mode 100644
index c400497f5..000000000
--- a/gnuradio-examples/python/audio/.gitignore
+++ /dev/null
@@ -1,10 +0,0 @@
-/Makefile
-/Makefile.in
-/.la
-/.lo
-/.deps
-/.libs
-/*.la
-/*.lo
-/*.pyc
-/*.pyo
diff --git a/gnuradio-examples/python/audio/Makefile.am b/gnuradio-examples/python/audio/Makefile.am
deleted file mode 100644
index 356b51559..000000000
--- a/gnuradio-examples/python/audio/Makefile.am
+++ /dev/null
@@ -1,38 +0,0 @@
-#
-# Copyright 2004,2009 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-#
-
-include $(top_srcdir)/Makefile.common
-
-ourdatadir = $(exampledir)/audio
-
-dist_ourdata_SCRIPTS = \
- audio_copy.py \
- audio_fft.py \
- audio_play.py \
- audio_to_file.py \
- dial_tone.py \
- dial_tone_daemon.py \
- dial_tone_wav.py \
- mono_tone.py \
- multi_tone.py \
- noise.py \
- spectrum_inversion.py \
- test_resampler.py
diff --git a/gnuradio-examples/python/audio/audio_copy.py b/gnuradio-examples/python/audio/audio_copy.py
deleted file mode 100755
index 3094c9f7a..000000000
--- a/gnuradio-examples/python/audio/audio_copy.py
+++ /dev/null
@@ -1,64 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2004,2005,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
-from gnuradio import audio
-from gnuradio.eng_option import eng_option
-from optparse import OptionParser
-
-class my_top_block(gr.top_block):
-
- def __init__(self):
- gr.top_block.__init__(self)
-
- parser = OptionParser(option_class=eng_option)
- parser.add_option("-I", "--audio-input", type="string", default="",
- help="pcm input device name. E.g., hw:0,0 or /dev/dsp")
- parser.add_option("-O", "--audio-output", type="string", default="",
- help="pcm output device name. E.g., hw:0,0 or /dev/dsp")
- parser.add_option("-r", "--sample-rate", type="eng_float", default=48000,
- help="set sample rate to RATE (48000)")
- (options, args) = parser.parse_args ()
- if len(args) != 0:
- parser.print_help()
- raise SystemExit, 1
-
- sample_rate = int(options.sample_rate)
- src = audio.source (sample_rate, options.audio_input)
- dst = audio.sink (sample_rate, options.audio_output)
-
- # Determine the maximum number of outputs on the source and
- # maximum number of inputs on the sink, then connect together
- # the most channels we can without overlap
- nchan = min (src.output_signature().max_streams(),
- dst.input_signature().max_streams())
-
- for i in range (nchan):
- self.connect ((src, i), (dst, i))
-
-
-if __name__ == '__main__':
- try:
- my_top_block().run()
- except KeyboardInterrupt:
- pass
-
diff --git a/gnuradio-examples/python/audio/audio_fft.py b/gnuradio-examples/python/audio/audio_fft.py
deleted file mode 100755
index 960e0f94d..000000000
--- a/gnuradio-examples/python/audio/audio_fft.py
+++ /dev/null
@@ -1,138 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2004,2005,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, audio
-from gnuradio import eng_notation
-from gnuradio.eng_option import eng_option
-from gnuradio.wxgui import stdgui2, fftsink2, waterfallsink2, scopesink2, form, slider
-from optparse import OptionParser
-import wx
-import sys
-
-class app_top_block(stdgui2.std_top_block):
- def __init__(self, frame, panel, vbox, argv):
- stdgui2.std_top_block.__init__(self, frame, panel, vbox, argv)
-
- self.frame = frame
- self.panel = panel
-
- parser = OptionParser(option_class=eng_option)
- parser.add_option("-W", "--waterfall", action="store_true", default=False,
- help="Enable waterfall display")
- parser.add_option("-S", "--oscilloscope", action="store_true", default=False,
- help="Enable oscilloscope display")
- parser.add_option("-I", "--audio-input", type="string", default="",
- help="pcm input device name. E.g., hw:0,0 or /dev/dsp")
- parser.add_option("-r", "--sample-rate", type="eng_float", default=48000,
- help="set sample rate to RATE (48000)")
-
- (options, args) = parser.parse_args()
- sample_rate = int(options.sample_rate)
-
- if len(args) != 0:
- parser.print_help()
- sys.exit(1)
-
- self.show_debug_info = True
-
- # build the graph
- if options.waterfall:
- self.scope = \
- waterfallsink2.waterfall_sink_f (panel, fft_size=1024, sample_rate=sample_rate)
- elif options.oscilloscope:
- self.scope = scopesink2.scope_sink_f(panel, sample_rate=sample_rate)
- else:
- self.scope = fftsink2.fft_sink_f (panel, fft_size=1024, sample_rate=sample_rate, fft_rate=30,
- ref_scale=1.0, ref_level=0, y_divs=12)
-
- self.src = audio.source (sample_rate, options.audio_input)
-
- self.connect(self.src, self.scope)
-
- self._build_gui(vbox)
-
- # set initial values
-
- def _set_status_msg(self, msg):
- self.frame.GetStatusBar().SetStatusText(msg, 0)
-
- def _build_gui(self, vbox):
-
- def _form_set_freq(kv):
- return self.set_freq(kv['freq'])
-
- vbox.Add(self.scope.win, 10, wx.EXPAND)
-
- #self._build_subpanel(vbox)
-
- def _build_subpanel(self, vbox_arg):
- # build a secondary information panel (sometimes hidden)
-
- # FIXME figure out how to have this be a subpanel that is always
- # created, but has its visibility controlled by foo.Show(True/False)
-
- def _form_set_decim(kv):
- return self.set_decim(kv['decim'])
-
- if not(self.show_debug_info):
- return
-
- panel = self.panel
- vbox = vbox_arg
- myform = self.myform
-
- #panel = wx.Panel(self.panel, -1)
- #vbox = wx.BoxSizer(wx.VERTICAL)
-
- hbox = wx.BoxSizer(wx.HORIZONTAL)
- hbox.Add((5,0), 0)
-
- myform['decim'] = form.int_field(
- parent=panel, sizer=hbox, label="Decim",
- callback=myform.check_input_and_call(_form_set_decim, self._set_status_msg))
-
- hbox.Add((5,0), 1)
- myform['fs@usb'] = form.static_float_field(
- parent=panel, sizer=hbox, label="Fs@USB")
-
- hbox.Add((5,0), 1)
- myform['dbname'] = form.static_text_field(
- parent=panel, sizer=hbox)
-
- hbox.Add((5,0), 1)
- myform['baseband'] = form.static_float_field(
- parent=panel, sizer=hbox, label="Analog BB")
-
- hbox.Add((5,0), 1)
- myform['ddc'] = form.static_float_field(
- parent=panel, sizer=hbox, label="DDC")
-
- hbox.Add((5,0), 0)
- vbox.Add(hbox, 0, wx.EXPAND)
-
-
-def main ():
- app = stdgui2.stdapp(app_top_block, "Audio FFT", nstatus=1)
- app.MainLoop()
-
-if __name__ == '__main__':
- main ()
diff --git a/gnuradio-examples/python/audio/audio_play.py b/gnuradio-examples/python/audio/audio_play.py
deleted file mode 100755
index f9520c7cf..000000000
--- a/gnuradio-examples/python/audio/audio_play.py
+++ /dev/null
@@ -1,57 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2004,2005,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
-from gnuradio import audio
-from gnuradio.eng_option import eng_option
-from optparse import OptionParser
-
-
-class my_top_block(gr.top_block):
-
- def __init__(self):
- gr.top_block.__init__(self)
-
- parser = OptionParser(option_class=eng_option)
- parser.add_option("-F", "--filename", type="string", default="audio.dat",
- help="read input from FILE")
- parser.add_option("-r", "--sample-rate", type="eng_float", default=48000,
- help="set sample rate to RATE (48000)")
- parser.add_option("-R", "--repeat", action="store_true", default=False)
- parser.add_option("-O", "--audio-output", type="string", default="",
- help="pcm output device name. E.g., hw:0,0 or /dev/dsp")
- (options, args) = parser.parse_args()
- if len(args) != 0:
- parser.print_help()
- raise SystemExit, 1
-
- sample_rate = int(options.sample_rate)
- src = gr.file_source (gr.sizeof_float, options.filename, options.repeat)
- dst = audio.sink (sample_rate, options.audio_output)
- self.connect(src, dst)
-
-
-if __name__ == '__main__':
- try:
- my_top_block().run()
- except KeyboardInterrupt:
- pass
diff --git a/gnuradio-examples/python/audio/audio_to_file.py b/gnuradio-examples/python/audio/audio_to_file.py
deleted file mode 100755
index 0d54f7bd2..000000000
--- a/gnuradio-examples/python/audio/audio_to_file.py
+++ /dev/null
@@ -1,63 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2004,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
-from gnuradio import audio
-from gnuradio.eng_option import eng_option
-from optparse import OptionParser
-
-class my_top_block(gr.top_block):
-
- def __init__(self):
- gr.top_block.__init__(self)
-
- usage="%prog: [options] output_filename"
- parser = OptionParser(option_class=eng_option, usage=usage)
- parser.add_option("-I", "--audio-input", type="string", default="",
- help="pcm input device name. E.g., hw:0,0 or /dev/dsp")
- parser.add_option("-r", "--sample-rate", type="eng_float", default=48000,
- help="set sample rate to RATE (48000)")
- parser.add_option("-N", "--nsamples", type="eng_float", default=None,
- help="number of samples to collect [default=+inf]")
-
- (options, args) = parser.parse_args ()
- if len(args) != 1:
- parser.print_help()
- raise SystemExit, 1
- filename = args[0]
-
- sample_rate = int(options.sample_rate)
- src = audio.source (sample_rate, options.audio_input)
- dst = gr.file_sink (gr.sizeof_float, filename)
-
- if options.nsamples is None:
- self.connect((src, 0), dst)
- else:
- head = gr.head(gr.sizeof_float, int(options.nsamples))
- self.connect((src, 0), head, dst)
-
-
-if __name__ == '__main__':
- try:
- my_top_block().run()
- except KeyboardInterrupt:
- pass
diff --git a/gnuradio-examples/python/audio/dial_tone.py b/gnuradio-examples/python/audio/dial_tone.py
deleted file mode 100755
index 65c5e50b2..000000000
--- a/gnuradio-examples/python/audio/dial_tone.py
+++ /dev/null
@@ -1,57 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2004,2005,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
-from gnuradio import audio
-from gnuradio.eng_option import eng_option
-from optparse import OptionParser
-
-class my_top_block(gr.top_block):
-
- def __init__(self):
- gr.top_block.__init__(self)
-
- parser = OptionParser(option_class=eng_option)
- parser.add_option("-O", "--audio-output", type="string", default="",
- help="pcm output device name. E.g., hw:0,0 or /dev/dsp")
- parser.add_option("-r", "--sample-rate", type="eng_float", default=48000,
- help="set sample rate to RATE (48000)")
- (options, args) = parser.parse_args ()
- if len(args) != 0:
- parser.print_help()
- raise SystemExit, 1
-
- sample_rate = int(options.sample_rate)
- ampl = 0.1
-
- src0 = gr.sig_source_f (sample_rate, gr.GR_SIN_WAVE, 350, ampl)
- src1 = gr.sig_source_f (sample_rate, gr.GR_SIN_WAVE, 440, ampl)
- dst = audio.sink (sample_rate, options.audio_output)
- self.connect (src0, (dst, 0))
- self.connect (src1, (dst, 1))
-
-
-if __name__ == '__main__':
- try:
- my_top_block().run()
- except KeyboardInterrupt:
- pass
diff --git a/gnuradio-examples/python/audio/dial_tone_daemon.py b/gnuradio-examples/python/audio/dial_tone_daemon.py
deleted file mode 100755
index d30d0e117..000000000
--- a/gnuradio-examples/python/audio/dial_tone_daemon.py
+++ /dev/null
@@ -1,57 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2004,2005,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.
-#
-
-from gnuradio import gr, gru
-from gnuradio import audio
-from gnuradio.eng_option import eng_option
-from optparse import OptionParser
-import os
-
-class my_top_block(gr.top_block):
-
- def __init__(self):
- gr.top_block.__init__(self)
-
- parser = OptionParser(option_class=eng_option)
- parser.add_option("-O", "--audio-output", type="string", default="",
- help="pcm output device name. E.g., hw:0,0 or /dev/dsp")
- parser.add_option("-r", "--sample-rate", type="eng_float", default=48000,
- help="set sample rate to RATE (48000)")
- (options, args) = parser.parse_args ()
- if len(args) != 0:
- parser.print_help()
- raise SystemExit, 1
-
- sample_rate = int(options.sample_rate)
- ampl = 0.1
-
- src0 = gr.sig_source_f (sample_rate, gr.GR_SIN_WAVE, 350, ampl)
- src1 = gr.sig_source_f (sample_rate, gr.GR_SIN_WAVE, 440, ampl)
- dst = audio.sink (sample_rate, options.audio_output)
- self.connect (src0, (dst, 0))
- self.connect (src1, (dst, 1))
-
-
-if __name__ == '__main__':
- pid = gru.daemonize()
- print "To stop this program, enter 'kill %d'" % pid
- my_top_block().run()
diff --git a/gnuradio-examples/python/audio/dial_tone_wav.py b/gnuradio-examples/python/audio/dial_tone_wav.py
deleted file mode 100755
index 6e87b2a48..000000000
--- a/gnuradio-examples/python/audio/dial_tone_wav.py
+++ /dev/null
@@ -1,61 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2004,2005,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.
-#
-
-# GNU Radio example program to record a dial tone to a WAV file
-
-from gnuradio import gr
-from gnuradio.eng_option import eng_option
-from optparse import OptionParser
-
-class my_top_block(gr.top_block):
-
- def __init__(self):
- gr.top_block.__init__(self)
-
- usage = "%prog: [options] filename"
- parser = OptionParser(option_class=eng_option, usage=usage)
- parser.add_option("-r", "--sample-rate", type="eng_float", default=48000,
- help="set sample rate to RATE (48000)")
- parser.add_option("-N", "--samples", type="eng_float", default=None,
- help="number of samples to record")
- (options, args) = parser.parse_args ()
- if len(args) != 1 or options.samples is None:
- parser.print_help()
- raise SystemExit, 1
-
- sample_rate = int(options.sample_rate)
- ampl = 0.1
-
- src0 = gr.sig_source_f (sample_rate, gr.GR_SIN_WAVE, 350, ampl)
- src1 = gr.sig_source_f (sample_rate, gr.GR_SIN_WAVE, 440, ampl)
- head0 = gr.head(gr.sizeof_float, int(options.samples))
- head1 = gr.head(gr.sizeof_float, int(options.samples))
- dst = gr.wavfile_sink(args[0], 2, int(options.sample_rate), 16)
-
- self.connect(src0, head0, (dst, 0))
- self.connect(src1, head1, (dst, 1))
-
-if __name__ == '__main__':
- try:
- my_top_block().run()
- except KeyboardInterrupt:
- pass
diff --git a/gnuradio-examples/python/audio/mono_tone.py b/gnuradio-examples/python/audio/mono_tone.py
deleted file mode 100755
index 869c2e5ff..000000000
--- a/gnuradio-examples/python/audio/mono_tone.py
+++ /dev/null
@@ -1,66 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2004,2005,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
-from gnuradio import audio
-from gnuradio.eng_option import eng_option
-from optparse import OptionParser
-
-#import os
-#print os.getpid()
-#raw_input('Attach gdb and press Enter: ')
-
-class my_top_block(gr.top_block):
-
- def __init__(self):
- gr.top_block.__init__(self)
-
- parser = OptionParser(option_class=eng_option)
- parser.add_option("-O", "--audio-output", type="string", default="",
- help="pcm output device name. E.g., hw:0,0 or /dev/dsp")
- parser.add_option("-r", "--sample-rate", type="eng_float", default=48000,
- help="set sample rate to RATE (48000)")
- parser.add_option("-D", "--dont-block", action="store_false", default=True,
- dest="ok_to_block")
-
- (options, args) = parser.parse_args ()
- if len(args) != 0:
- parser.print_help()
- raise SystemExit, 1
-
- sample_rate = int(options.sample_rate)
- ampl = 0.1
-
- src0 = gr.sig_source_f (sample_rate, gr.GR_SIN_WAVE, 650, ampl)
-
- dst = audio.sink (sample_rate,
- options.audio_output,
- options.ok_to_block)
-
- self.connect (src0, (dst, 0))
-
-
-if __name__ == '__main__':
- try:
- my_top_block().run()
- except KeyboardInterrupt:
- pass
diff --git a/gnuradio-examples/python/audio/multi_tone.py b/gnuradio-examples/python/audio/multi_tone.py
deleted file mode 100755
index 7d47dd5d5..000000000
--- a/gnuradio-examples/python/audio/multi_tone.py
+++ /dev/null
@@ -1,90 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2004,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
-from gnuradio import audio
-from gnuradio.eng_option import eng_option
-from optparse import OptionParser
-
-#import os
-#print os.getpid()
-#raw_input('Attach gdb and press Enter: ')
-
-class my_top_block(gr.top_block):
-
- def __init__(self):
- gr.top_block.__init__(self)
-
- parser = OptionParser(option_class=eng_option)
- parser.add_option("-O", "--audio-output", type="string", default="",
- help="pcm output device name. E.g., hw:0,0 or /dev/dsp")
- parser.add_option("-r", "--sample-rate", type="eng_float", default=48000,
- help="set sample rate to RATE (48000)")
- parser.add_option ("-m", "--max-channels", type="int", default="16",
- help="set maximum channels to use")
- parser.add_option("-D", "--dont-block", action="store_false", default=True,
- dest="ok_to_block")
- (options, args) = parser.parse_args ()
- if len(args) != 0:
- parser.print_help()
- raise SystemExit, 1
-
- sample_rate = int(options.sample_rate)
- limit_channels = options.max_channels
-
- ampl = 0.1
-
- # With a tip of the hat to Harry Partch, may he R.I.P.
- # See "Genesis of a Music". He was into some very wild tunings...
- base = 392
- ratios = { 1 : 1.0,
- 3 : 3.0/2,
- 5 : 5.0/4,
- 7 : 7.0/4,
- 9 : 9.0/8,
- 11 : 11.0/8 }
-
- # progression = (1, 5, 3, 7)
- # progression = (1, 9, 3, 7)
- # progression = (3, 7, 9, 11)
- # progression = (7, 11, 1, 5)
- progression = (7, 11, 1, 5, 9)
-
- dst = audio.sink (sample_rate,
- options.audio_output,
- options.ok_to_block)
-
- max_chan = dst.input_signature().max_streams()
- if (max_chan == -1) or (max_chan > limit_channels):
- max_chan = limit_channels
-
- for i in range (max_chan):
- quo, rem = divmod (i, len (progression))
- freq = base * ratios[progression[rem]] * (quo + 1)
- src = gr.sig_source_f (sample_rate, gr.GR_SIN_WAVE, freq, ampl)
- self.connect (src, (dst, i))
-
-if __name__ == '__main__':
- try:
- my_top_block().run()
- except KeyboardInterrupt:
- pass
diff --git a/gnuradio-examples/python/audio/noise.py b/gnuradio-examples/python/audio/noise.py
deleted file mode 100755
index 75f741082..000000000
--- a/gnuradio-examples/python/audio/noise.py
+++ /dev/null
@@ -1,55 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 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
-from gnuradio import audio
-from gnuradio.eng_option import eng_option
-from optparse import OptionParser
-
-class my_top_block(gr.top_block):
-
- def __init__(self):
- gr.top_block.__init__(self)
-
- parser = OptionParser(option_class=eng_option)
- parser.add_option("-O", "--audio-output", type="string", default="",
- help="pcm output device name. E.g., hw:0,0 or /dev/dsp")
- parser.add_option("-r", "--sample-rate", type="eng_float", default=48000,
- help="set sample rate to RATE (48000)")
- (options, args) = parser.parse_args ()
- if len(args) != 0:
- parser.print_help()
- raise SystemExit, 1
-
- sample_rate = int(options.sample_rate)
- ampl = 0.1
-
- src = gr.glfsr_source_b(32) # Pseudorandom noise source
- b2f = gr.chunks_to_symbols_bf([ampl, -ampl], 1)
- dst = audio.sink(sample_rate, options.audio_output)
- self.connect(src, b2f, dst)
-
-if __name__ == '__main__':
- try:
- my_top_block().run()
- except KeyboardInterrupt:
- pass
diff --git a/gnuradio-examples/python/audio/spectrum_inversion.py b/gnuradio-examples/python/audio/spectrum_inversion.py
deleted file mode 100755
index 021e23f2d..000000000
--- a/gnuradio-examples/python/audio/spectrum_inversion.py
+++ /dev/null
@@ -1,68 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2004,2005,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.
-
-#
-# Gang - Here's a simple script that demonstrates spectrum inversion
-# using the multiply by [1,-1] method (mixing with Nyquist frequency).
-# Requires nothing but a sound card, and sounds just like listening
-# to a SSB signal on the wrong sideband.
-#
-
-from gnuradio import gr
-from gnuradio import audio
-from gnuradio.eng_option import eng_option
-from optparse import OptionParser
-
-class my_top_block(gr.top_block):
-
- def __init__(self):
- gr.top_block.__init__(self)
-
- parser = OptionParser(option_class=eng_option)
- parser.add_option("-I", "--audio-input", type="string", default="",
- help="pcm input device name. E.g., hw:0,0 or /dev/dsp")
- parser.add_option("-O", "--audio-output", type="string", default="",
- help="pcm output device name. E.g., hw:0,0 or /dev/dsp")
- parser.add_option("-r", "--sample-rate", type="eng_float", default=8000,
- help="set sample rate to RATE (8000)")
- (options, args) = parser.parse_args ()
- if len(args) != 0:
- parser.print_help()
- raise SystemExit, 1
-
- sample_rate = int(options.sample_rate)
- src = audio.source (sample_rate, options.audio_input)
- dst = audio.sink (sample_rate, options.audio_output)
-
- vec1 = [1, -1]
- vsource = gr.vector_source_f(vec1, True)
- multiply = gr.multiply_ff()
-
- self.connect(src, (multiply, 0))
- self.connect(vsource, (multiply, 1))
- self.connect(multiply, dst)
-
-
-if __name__ == '__main__':
- try:
- my_top_block().run()
- except KeyboardInterrupt:
- pass
diff --git a/gnuradio-examples/python/audio/test_resampler.py b/gnuradio-examples/python/audio/test_resampler.py
deleted file mode 100755
index 4644c5e2f..000000000
--- a/gnuradio-examples/python/audio/test_resampler.py
+++ /dev/null
@@ -1,66 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2004,2005,2007 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-#
-
-from gnuradio import gr, gru, blks2
-from gnuradio import audio
-from gnuradio.eng_option import eng_option
-from optparse import OptionParser
-
-
-class my_top_block(gr.top_block):
-
- def __init__(self):
- gr.top_block.__init__(self)
-
- parser = OptionParser(option_class=eng_option)
- parser.add_option("-O", "--audio-output", type="string", default="",
- help="pcm output device name. E.g., hw:0,0 or /dev/dsp")
- parser.add_option("-i", "--input-rate", type="eng_float", default=8000,
- help="set input sample rate to RATE (%default)")
- parser.add_option("-o", "--output-rate", type="eng_float", default=48000,
- help="set output sample rate to RATE (%default)")
- (options, args) = parser.parse_args ()
- if len(args) != 0:
- parser.print_help()
- raise SystemExit, 1
-
- input_rate = int(options.input_rate)
- output_rate = int(options.output_rate)
-
- interp = gru.lcm(input_rate, output_rate) / input_rate
- decim = gru.lcm(input_rate, output_rate) / output_rate
-
- print "interp =", interp
- print "decim =", decim
-
- ampl = 0.1
- src0 = gr.sig_source_f (input_rate, gr.GR_SIN_WAVE, 650, ampl)
- rr = blks2.rational_resampler_fff(interp, decim)
- dst = audio.sink (output_rate, options.audio_output)
- self.connect (src0, rr, (dst, 0))
-
-
-if __name__ == '__main__':
- try:
- my_top_block().run()
- except KeyboardInterrupt:
- pass
diff --git a/gnuradio-examples/python/ofdm/gr_plot_ofdm.py b/gnuradio-examples/python/ofdm/gr_plot_ofdm.py
index e3b347189..b24855148 100755
--- a/gnuradio-examples/python/ofdm/gr_plot_ofdm.py
+++ b/gnuradio-examples/python/ofdm/gr_plot_ofdm.py
@@ -20,14 +20,24 @@
# Boston, MA 02110-1301, USA.
#
-import scipy, pylab, math
-import struct, sys
-from pylab import *
-from matplotlib.font_manager import fontManager, FontProperties
+import math, struct, sys
from optparse import OptionParser
-from scipy import fftpack
from math import log10
+try:
+ import scipy
+ from scipy import fftpack
+except ImportError:
+ print "Error: Program requires scipy (see: www.scipy.org)."
+ sys.exit(1)
+
+try:
+ from pylab import *
+ from matplotlib.font_manager import fontManager, FontProperties
+except ImportError:
+ print "Error: Program requires matplotlib (see: matplotlib.sourceforge.net)."
+ sys.exit(1)
+
matplotlib.interactive(True)
matplotlib.use('TkAgg')
diff --git a/gnuradio-examples/python/pfb/channelize.py b/gnuradio-examples/python/pfb/channelize.py
index f845c05c6..999e5d20e 100755
--- a/gnuradio-examples/python/pfb/channelize.py
+++ b/gnuradio-examples/python/pfb/channelize.py
@@ -21,10 +21,21 @@
#
from gnuradio import gr, blks2
-import os, time
-import scipy, pylab
-from scipy import fftpack
-from pylab import mlab
+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):
diff --git a/gnuradio-examples/python/pfb/chirp_channelize.py b/gnuradio-examples/python/pfb/chirp_channelize.py
index edebf5f59..951255d3b 100755
--- a/gnuradio-examples/python/pfb/chirp_channelize.py
+++ b/gnuradio-examples/python/pfb/chirp_channelize.py
@@ -21,10 +21,21 @@
#
from gnuradio import gr, blks2
-import os, time
-import scipy, pylab
-from scipy import fftpack
-from pylab import mlab
+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):
diff --git a/gnuradio-examples/python/pfb/decimate.py b/gnuradio-examples/python/pfb/decimate.py
index cb5d61b72..643a2c241 100755
--- a/gnuradio-examples/python/pfb/decimate.py
+++ b/gnuradio-examples/python/pfb/decimate.py
@@ -21,14 +21,21 @@
#
from gnuradio import gr, blks2
-import os
-import scipy, pylab
-from scipy import fftpack
-from pylab import mlab
-import time
-
-#print os.getpid()
-#raw_input()
+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):
diff --git a/gnuradio-examples/python/pfb/fmtest.py b/gnuradio-examples/python/pfb/fmtest.py
index 97df0e0f5..635ee4e9e 100755
--- a/gnuradio-examples/python/pfb/fmtest.py
+++ b/gnuradio-examples/python/pfb/fmtest.py
@@ -1,14 +1,42 @@
#!/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)
-from gnuradio import gr, eng_notation
-from gnuradio import blks2
-from gnuradio.eng_option import eng_option
-from optparse import OptionParser
-import math, time, sys, scipy, pylab
-from scipy import fftpack
-
class fmtx(gr.hier_block2):
def __init__(self, lo_freq, audio_rate, if_rate):
diff --git a/gnuradio-examples/python/pfb/interpolate.py b/gnuradio-examples/python/pfb/interpolate.py
index a7a2522f8..370cf26a7 100755
--- a/gnuradio-examples/python/pfb/interpolate.py
+++ b/gnuradio-examples/python/pfb/interpolate.py
@@ -21,14 +21,21 @@
#
from gnuradio import gr, blks2
-import os
-import scipy, pylab
-from scipy import fftpack
-from pylab import mlab
-import time
-
-#print os.getpid()
-#raw_input()
+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):
diff --git a/gnuradio-examples/python/pfb/resampler.py b/gnuradio-examples/python/pfb/resampler.py
index 6be7cf14e..7b296ca71 100755
--- a/gnuradio-examples/python/pfb/resampler.py
+++ b/gnuradio-examples/python/pfb/resampler.py
@@ -1,7 +1,39 @@
#!/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 scipy, pylab
+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):
diff --git a/gnuradio-examples/python/pfb/synth_filter.py b/gnuradio-examples/python/pfb/synth_filter.py
index a1562f9ea..074d9cb2c 100755
--- a/gnuradio-examples/python/pfb/synth_filter.py
+++ b/gnuradio-examples/python/pfb/synth_filter.py
@@ -21,7 +21,19 @@
#
from gnuradio import gr, blks2
-import scipy, pylab
+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
diff --git a/gnuradio-examples/python/pfb/synth_to_chan.py b/gnuradio-examples/python/pfb/synth_to_chan.py
index 1beda1a54..7e454d903 100755
--- a/gnuradio-examples/python/pfb/synth_to_chan.py
+++ b/gnuradio-examples/python/pfb/synth_to_chan.py
@@ -21,7 +21,19 @@
#
from gnuradio import gr, blks2
-import scipy, pylab
+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
diff --git a/gnuradio-examples/c++/audio/.gitignore b/gnuradio-examples/python/tags/.gitignore
index bb08aaf91..b336cc7ce 100644
--- a/gnuradio-examples/c++/audio/.gitignore
+++ b/gnuradio-examples/python/tags/.gitignore
@@ -1,3 +1,2 @@
/Makefile
/Makefile.in
-/dial_tone
diff --git a/gnuradio-examples/c++/Makefile.am b/gnuradio-examples/python/tags/Makefile.am
index 5a49e0e89..5d71bf9b0 100644
--- a/gnuradio-examples/c++/Makefile.am
+++ b/gnuradio-examples/python/tags/Makefile.am
@@ -20,4 +20,10 @@
#
include $(top_srcdir)/Makefile.common
-SUBDIRS = audio
+
+ourdatadir = $(exampledir)/tags
+
+dist_ourdata_SCRIPTS = \
+ test_file_tags.py \
+ uhd_burst_detector.py
+
diff --git a/gnuradio-examples/python/tags/test_file_tags.py b/gnuradio-examples/python/tags/test_file_tags.py
index 4ff4549ef..446986cd7 100755
--- a/gnuradio-examples/python/tags/test_file_tags.py
+++ b/gnuradio-examples/python/tags/test_file_tags.py
@@ -1,7 +1,33 @@
#!/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 scipy
+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()
diff --git a/gnuradio-examples/python/tags/uhd_burst_detector.py b/gnuradio-examples/python/tags/uhd_burst_detector.py
index f8ebbe66a..ffa419562 100755
--- a/gnuradio-examples/python/tags/uhd_burst_detector.py
+++ b/gnuradio-examples/python/tags/uhd_burst_detector.py
@@ -1,4 +1,24 @@
#!/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
@@ -9,16 +29,16 @@ from gnuradio.gr import firdes
from optparse import OptionParser
class uhd_burst_detector(gr.top_block):
- def __init__(self, frequency, sample_rate,
- uhd_address="192.168.10.2", trigger=False):
+ def __init__(self, uhd_address, options):
gr.top_block.__init__(self)
- self.freq = frequency
- self.samp_rate = sample_rate
self.uhd_addr = uhd_address
- self.gain = 32
- self.trigger = trigger
+ 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,
@@ -32,7 +52,6 @@ class uhd_burst_detector(gr.top_block):
taps = firdes.low_pass_2(1, 1, 0.4, 0.1, 60)
self.chanfilt = gr.fir_filter_ccc(10, taps)
- self.ann0 = gr.annotator_alltoall(100000, gr.sizeof_gr_complex)
self.tagger = gr.burst_tagger(gr.sizeof_gr_complex)
# Dummy signaler to collect a burst on known periods
@@ -40,11 +59,18 @@ class uhd_burst_detector(gr.top_block):
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()
- self.iir = gr.single_pole_iir_filter_ff(0.0001)
- self.sub = gr.sub_ff()
- self.mult = gr.multiply_const_ff(32768)
+ ## 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)
@@ -60,17 +86,12 @@ class uhd_burst_detector(gr.top_block):
else:
# Connect an energy detector signaler to the burst tagger
- self.connect((self.uhd_src, 0), (self.c2m, 0))
- self.connect((self.c2m, 0), (self.sub, 0))
- self.connect((self.c2m, 0), (self.iir, 0))
- self.connect((self.iir, 0), (self.sub, 1))
- self.connect((self.sub, 0), (self.mult,0))
- self.connect((self.mult, 0), (self.f2s, 0))
- self.connect((self.f2s, 0), (self.tagger, 1))
+ 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.wxgui_fftsink2_0.set_sample_rate(self.samp_rate/10)
self.uhd_src_0.set_samp_rate(self.samp_rate)
if __name__ == '__main__':
@@ -83,16 +104,15 @@ if __name__ == '__main__':
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", "--rate", type="eng_float", default=200000,
+ 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()
- frequency = options.freq
- samp_rate = samp_rate = options.rate
uhd_addr = options.address
- trigger = options.trigger
- tb = uhd_burst_detector(frequency, samp_rate, uhd_addr, trigger)
+ tb = uhd_burst_detector(uhd_addr, options)
tb.run()