summaryrefslogtreecommitdiff
path: root/gr-digital
diff options
context:
space:
mode:
authorTom Rondeau <trondeau@vt.edu>2012-08-10 19:48:37 -0400
committerTom Rondeau <trondeau@vt.edu>2012-08-10 19:48:37 -0400
commit5aaea26d457b7ed4c19096072b46b15b4e3f54b4 (patch)
tree35777dffb8de293af23ecfdad1c1a37612697315 /gr-digital
parentb7cf0bf00b404c37214e3b617bf53862741f76e7 (diff)
parenta61ddc223da190476b38f891ea425f44d8c5f269 (diff)
Merge remote-tracking branch 'jcorgan/wip/filter-rm-next' into digital_impl
Conflicts: gnuradio-core/src/lib/filter/CMakeLists.txt gnuradio-core/src/lib/filter/dotprod_ccf_armv7_a.c gnuradio-core/src/lib/filter/dotprod_fff_armv7_a.c gr-digital/include/digital_clock_recovery_mm_cc.h gr-digital/include/digital_clock_recovery_mm_ff.h gr-digital/include/digital_cma_equalizer_cc.h gr-digital/lib/CMakeLists.txt gr-digital/lib/binary_slicer_fb_impl.h gr-digital/lib/digital_clock_recovery_mm_cc.cc gr-digital/lib/digital_clock_recovery_mm_ff.cc gr-digital/lib/digital_cma_equalizer_cc.cc gr-digital/swig/CMakeLists.txt
Diffstat (limited to 'gr-digital')
-rw-r--r--gr-digital/CMakeLists.txt1
-rw-r--r--gr-digital/examples/demod/ber_simulation.grc212
-rw-r--r--gr-digital/examples/demod/digital_freq_lock.grc604
-rw-r--r--gr-digital/examples/demod/gfsk_loopback.grc306
-rw-r--r--gr-digital/examples/demod/mpsk_demod.grc252
-rw-r--r--gr-digital/examples/demod/pam_sync.grc950
-rw-r--r--gr-digital/examples/demod/pam_timing.grc696
-rwxr-xr-xgr-digital/examples/example_costas.py6
-rwxr-xr-xgr-digital/examples/example_fll.py6
-rwxr-xr-xgr-digital/examples/example_timing.py13
-rwxr-xr-xgr-digital/examples/narrowband/benchmark_add_channel.py6
-rwxr-xr-xgr-digital/examples/narrowband/digital_bert_rx.py5
-rwxr-xr-xgr-digital/examples/narrowband/digital_bert_tx.py5
-rw-r--r--gr-digital/examples/narrowband/receive_path.py14
-rwxr-xr-xgr-digital/examples/narrowband/tx_voice.py3
-rwxr-xr-xgr-digital/examples/snr_estimators.py4
-rw-r--r--gr-digital/include/digital_cpmmod_bc.h7
-rw-r--r--gr-digital/include/digital_fll_band_edge_cc.h10
-rw-r--r--gr-digital/include/digital_gmskmod_bc.h5
-rw-r--r--gr-digital/include/digital_kurtotic_equalizer_cc.h26
-rw-r--r--gr-digital/include/digital_lms_dd_equalizer_cc.h37
-rw-r--r--gr-digital/include/digital_mpsk_receiver_cc.h14
-rw-r--r--gr-digital/include/digital_pfb_clock_sync_ccf.h19
-rw-r--r--gr-digital/include/digital_pfb_clock_sync_fff.h19
-rw-r--r--gr-digital/lib/CMakeLists.txt3
-rw-r--r--gr-digital/lib/digital_cpmmod_bc.cc4
-rw-r--r--gr-digital/lib/digital_fll_band_edge_cc.cc13
-rw-r--r--gr-digital/lib/digital_gmskmod_bc.cc3
-rw-r--r--gr-digital/lib/digital_kurtotic_equalizer_cc.cc42
-rw-r--r--gr-digital/lib/digital_lms_dd_equalizer_cc.cc66
-rw-r--r--gr-digital/lib/digital_mpsk_receiver_cc.cc4
-rw-r--r--gr-digital/lib/digital_pfb_clock_sync_ccf.cc12
-rw-r--r--gr-digital/lib/digital_pfb_clock_sync_fff.cc12
-rw-r--r--gr-digital/python/CMakeLists.txt2
-rw-r--r--gr-digital/python/bpsk.py6
-rw-r--r--gr-digital/python/generic_mod_demod.py9
-rw-r--r--gr-digital/python/gfsk.py9
-rw-r--r--gr-digital/python/gmsk.py10
-rw-r--r--gr-digital/python/ofdm_receiver.py13
-rw-r--r--gr-digital/python/ofdm_sync_ml.py11
-rw-r--r--gr-digital/python/ofdm_sync_pn.py15
-rw-r--r--gr-digital/python/ofdm_sync_pnac.py9
-rw-r--r--gr-digital/python/pkt.py4
-rwxr-xr-xgr-digital/python/qa_cma_equalizer.py10
-rwxr-xr-xgr-digital/python/qa_constellation_receiver.py7
-rwxr-xr-xgr-digital/python/qa_fll_band_edge.py7
-rwxr-xr-xgr-digital/python/qa_lms_equalizer.py12
-rwxr-xr-xgr-digital/python/qa_mpsk_receiver.py87
-rwxr-xr-xgr-digital/python/qa_pfb_clock_sync.py17
-rw-r--r--gr-digital/python/qpsk.py22
-rw-r--r--gr-digital/swig/CMakeLists.txt5
-rw-r--r--gr-digital/swig/digital_kurtotic_equalizer_cc.i11
-rw-r--r--gr-digital/swig/digital_lms_dd_equalizer_cc.i20
-rw-r--r--gr-digital/swig/digital_pfb_clock_sync_ccf.i2
-rw-r--r--gr-digital/swig/digital_pfb_clock_sync_fff.i6
55 files changed, 1902 insertions, 1771 deletions
diff --git a/gr-digital/CMakeLists.txt b/gr-digital/CMakeLists.txt
index df755b4290..19bea72ca1 100644
--- a/gr-digital/CMakeLists.txt
+++ b/gr-digital/CMakeLists.txt
@@ -28,6 +28,7 @@ include(GrBoost)
include(GrComponent)
GR_REGISTER_COMPONENT("gr-digital" ENABLE_GR_DIGITAL
Boost_FOUND
+ ENABLE_VOLK
ENABLE_GR_CORE
ENABLE_GR_FFT
ENABLE_GR_FILTER
diff --git a/gr-digital/examples/demod/ber_simulation.grc b/gr-digital/examples/demod/ber_simulation.grc
index b7c6a624b6..f41b9cf79b 100644
--- a/gr-digital/examples/demod/ber_simulation.grc
+++ b/gr-digital/examples/demod/ber_simulation.grc
@@ -1,6 +1,6 @@
<?xml version='1.0' encoding='ASCII'?>
<flow_graph>
- <timestamp>Thu Jul 5 15:57:06 2012</timestamp>
+ <timestamp>Mon Jul 16 21:09:12 2012</timestamp>
<block>
<key>options</key>
<param>
@@ -92,60 +92,6 @@
</param>
</block>
<block>
- <key>gr_add_xx</key>
- <param>
- <key>id</key>
- <value>gr_add_xx</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>(486, 151)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>digital_constellation_decoder_cb</key>
- <param>
- <key>id</key>
- <value>digital_constellation_decoder_cb_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>constellation</key>
- <value>const.base()</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(618, 164)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
<key>wxgui_numbersink2</key>
<param>
<key>id</key>
@@ -443,45 +389,6 @@
</param>
</block>
<block>
- <key>gr_chunks_to_symbols_xx</key>
- <param>
- <key>id</key>
- <value>gr_chunks_to_symbols_xx</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>in_type</key>
- <value>byte</value>
- </param>
- <param>
- <key>out_type</key>
- <value>complex</value>
- </param>
- <param>
- <key>symbol_table</key>
- <value>const.points()</value>
- </param>
- <param>
- <key>dimension</key>
- <value>1</value>
- </param>
- <param>
- <key>num_ports</key>
- <value>1</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(240, 140)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
<key>variable_slider</key>
<param>
<key>id</key>
@@ -575,6 +482,99 @@
<value>0</value>
</param>
</block>
+ <block>
+ <key>digital_chunks_to_symbols_xx</key>
+ <param>
+ <key>id</key>
+ <value>digital_chunks_to_symbols_xx_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>in_type</key>
+ <value>byte</value>
+ </param>
+ <param>
+ <key>out_type</key>
+ <value>complex</value>
+ </param>
+ <param>
+ <key>symbol_table</key>
+ <value>const.points()</value>
+ </param>
+ <param>
+ <key>dimension</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>num_ports</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(284, 70)</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</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>(469, 210)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>digital_constellation_decoder_cb</key>
+ <param>
+ <key>id</key>
+ <value>digital_constellation_decoder_cb_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>constellation</key>
+ <value>const.base()</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(622, 164)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
<connection>
<source_block_id>blks2_error_rate</source_block_id>
<sink_block_id>wxgui_numbersink2</sink_block_id>
@@ -588,12 +588,6 @@
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>gr_chunks_to_symbols_xx</source_block_id>
- <sink_block_id>gr_add_xx</sink_block_id>
- <source_key>0</source_key>
- <sink_key>0</sink_key>
- </connection>
- <connection>
<source_block_id>gr_noise_source_x</source_block_id>
<sink_block_id>gr_add_xx</sink_block_id>
<source_key>0</source_key>
@@ -606,12 +600,6 @@
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>random_source_x</source_block_id>
- <sink_block_id>gr_chunks_to_symbols_xx</sink_block_id>
- <source_key>0</source_key>
- <sink_key>0</sink_key>
- </connection>
- <connection>
<source_block_id>gr_add_xx</source_block_id>
<sink_block_id>wxgui_scopesink2_0</sink_block_id>
<source_key>0</source_key>
@@ -629,4 +617,16 @@
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
+ <connection>
+ <source_block_id>random_source_x</source_block_id>
+ <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
+ <sink_block_id>gr_add_xx</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
</flow_graph>
diff --git a/gr-digital/examples/demod/digital_freq_lock.grc b/gr-digital/examples/demod/digital_freq_lock.grc
index df105dd7f5..17d3296ddb 100644
--- a/gr-digital/examples/demod/digital_freq_lock.grc
+++ b/gr-digital/examples/demod/digital_freq_lock.grc
@@ -1,98 +1,23 @@
<?xml version='1.0' encoding='ASCII'?>
<flow_graph>
- <timestamp>Thu Jul 5 18:11:22 2012</timestamp>
+ <timestamp>Mon Jul 16 21:25:18 2012</timestamp>
<block>
- <key>options</key>
- <param>
- <key>id</key>
- <value>top_block</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>title</key>
- <value></value>
- </param>
- <param>
- <key>author</key>
- <value></value>
- </param>
- <param>
- <key>description</key>
- <value></value>
- </param>
- <param>
- <key>window_size</key>
- <value>1280, 1024</value>
- </param>
- <param>
- <key>generate_options</key>
- <value>wx_gui</value>
- </param>
- <param>
- <key>category</key>
- <value>Custom</value>
- </param>
- <param>
- <key>run_options</key>
- <value>prompt</value>
- </param>
- <param>
- <key>run</key>
- <value>True</value>
- </param>
- <param>
- <key>max_nouts</key>
- <value>0</value>
- </param>
- <param>
- <key>realtime_scheduling</key>
- <value></value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(-1, 0)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>random_source_x</key>
+ <key>variable</key>
<param>
<key>id</key>
- <value>random_source_x</value>
+ <value>sps</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>byte</value>
- </param>
- <param>
- <key>min</key>
- <value>0</value>
- </param>
- <param>
- <key>max</key>
- <value>256</value>
- </param>
- <param>
- <key>num_samps</key>
- <value>10000000</value>
- </param>
- <param>
- <key>repeat</key>
- <value>True</value>
+ <key>value</key>
+ <value>4</value>
</param>
<param>
<key>_coordinate</key>
- <value>(-2, 111)</value>
+ <value>(166, -2)</value>
</param>
<param>
<key>_rotation</key>
@@ -100,30 +25,22 @@
</param>
</block>
<block>
- <key>gr_throttle</key>
+ <key>variable</key>
<param>
<key>id</key>
- <value>gr_throttle_0</value>
+ <value>rolloff</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
- </param>
- <param>
- <key>samples_per_second</key>
- <value>samp_rate</value>
- </param>
- <param>
- <key>vlen</key>
- <value>1</value>
+ <key>value</key>
+ <value>0.35</value>
</param>
<param>
<key>_coordinate</key>
- <value>(456, 134)</value>
+ <value>(231, 0)</value>
</param>
<param>
<key>_rotation</key>
@@ -134,7 +51,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>sps</value>
+ <value>samp_rate</value>
</param>
<param>
<key>_enabled</key>
@@ -142,11 +59,11 @@
</param>
<param>
<key>value</key>
- <value>4</value>
+ <value>32000</value>
</param>
<param>
<key>_coordinate</key>
- <value>(166, -2)</value>
+ <value>(439, -1)</value>
</param>
<param>
<key>_rotation</key>
@@ -154,61 +71,54 @@
</param>
</block>
<block>
- <key>variable</key>
+ <key>variable_slider</key>
<param>
<key>id</key>
- <value>rolloff</value>
+ <value>noise_amp</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>0.35</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(231, 0)</value>
+ <key>label</key>
+ <value>Channel Noise</value>
</param>
<param>
- <key>_rotation</key>
+ <key>value</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>digital_fll_band_edge_cc</key>
<param>
- <key>id</key>
- <value>digital_fll_band_edge_cc_0</value>
+ <key>min</key>
+ <value>0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>max</key>
+ <value>1.0</value>
</param>
<param>
- <key>type</key>
- <value>cc</value>
+ <key>num_steps</key>
+ <value>1000</value>
</param>
<param>
- <key>samps_per_sym</key>
- <value>sps</value>
+ <key>style</key>
+ <value>wx.SL_HORIZONTAL</value>
</param>
<param>
- <key>rolloff</key>
- <value>rolloff</value>
+ <key>converver</key>
+ <value>float_converter</value>
</param>
<param>
- <key>filter_size</key>
- <value>44</value>
+ <key>grid_pos</key>
+ <value></value>
</param>
<param>
- <key>w</key>
- <value>freq_bw</value>
+ <key>notebook</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(81, 248)</value>
+ <value>(553, 0)</value>
</param>
<param>
<key>_rotation</key>
@@ -219,7 +129,7 @@
<key>variable_slider</key>
<param>
<key>id</key>
- <value>freq_bw</value>
+ <value>freq_offset</value>
</param>
<param>
<key>_enabled</key>
@@ -227,7 +137,7 @@
</param>
<param>
<key>label</key>
- <value>FLL Loop Bandwidth</value>
+ <value>Frequency Offset</value>
</param>
<param>
<key>value</key>
@@ -235,11 +145,11 @@
</param>
<param>
<key>min</key>
- <value>0</value>
+ <value>-0.5</value>
</param>
<param>
<key>max</key>
- <value>0.1</value>
+ <value>0.5</value>
</param>
<param>
<key>num_steps</key>
@@ -263,7 +173,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(80, 382)</value>
+ <value>(673, -1)</value>
</param>
<param>
<key>_rotation</key>
@@ -271,22 +181,46 @@
</param>
</block>
<block>
- <key>variable</key>
+ <key>digital_psk_mod</key>
<param>
<key>id</key>
- <value>samp_rate</value>
+ <value>digital_psk_mod_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>32000</value>
+ <key>constellation_points</key>
+ <value>2</value>
+ </param>
+ <param>
+ <key>mod_code</key>
+ <value>"gray"</value>
+ </param>
+ <param>
+ <key>differential</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>samples_per_symbol</key>
+ <value>sps</value>
+ </param>
+ <param>
+ <key>excess_bw</key>
+ <value>0.35</value>
+ </param>
+ <param>
+ <key>verbose</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>log</key>
+ <value>False</value>
</param>
<param>
<key>_coordinate</key>
- <value>(439, -1)</value>
+ <value>(194, 104)</value>
</param>
<param>
<key>_rotation</key>
@@ -294,42 +228,74 @@
</param>
</block>
<block>
- <key>variable_slider</key>
+ <key>wxgui_fftsink2</key>
<param>
<key>id</key>
- <value>noise_amp</value>
+ <value>wxgui_fftsink2_0_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>label</key>
- <value>Channel Noise</value>
+ <key>type</key>
+ <value>complex</value>
</param>
<param>
- <key>value</key>
- <value>0</value>
+ <key>title</key>
+ <value>Frequency Corrected Signal</value>
</param>
<param>
- <key>min</key>
+ <key>samp_rate</key>
+ <value>samp_rate</value>
+ </param>
+ <param>
+ <key>baseband_freq</key>
<value>0</value>
</param>
<param>
- <key>max</key>
- <value>1.0</value>
+ <key>y_per_div</key>
+ <value>10</value>
</param>
<param>
- <key>num_steps</key>
- <value>1000</value>
+ <key>y_divs</key>
+ <value>10</value>
</param>
<param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
+ <key>ref_level</key>
+ <value>10</value>
</param>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>ref_scale</key>
+ <value>2.0</value>
+ </param>
+ <param>
+ <key>fft_size</key>
+ <value>1024</value>
+ </param>
+ <param>
+ <key>fft_rate</key>
+ <value>30</value>
+ </param>
+ <param>
+ <key>peak_hold</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>average</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>avg_alpha</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>win</key>
+ <value>None</value>
+ </param>
+ <param>
+ <key>win_size</key>
+ <value></value>
</param>
<param>
<key>grid_pos</key>
@@ -337,11 +303,15 @@
</param>
<param>
<key>notebook</key>
- <value></value>
+ <value>notebook_0,0</value>
+ </param>
+ <param>
+ <key>freqvar</key>
+ <value>None</value>
</param>
<param>
<key>_coordinate</key>
- <value>(553, 0)</value>
+ <value>(439, 423)</value>
</param>
<param>
<key>_rotation</key>
@@ -349,54 +319,38 @@
</param>
</block>
<block>
- <key>variable_slider</key>
+ <key>random_source_x</key>
<param>
<key>id</key>
- <value>freq_offset</value>
+ <value>random_source_x</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>label</key>
- <value>Frequency Offset</value>
- </param>
- <param>
- <key>value</key>
- <value>0</value>
+ <key>type</key>
+ <value>byte</value>
</param>
<param>
<key>min</key>
- <value>-0.5</value>
+ <value>0</value>
</param>
<param>
<key>max</key>
- <value>0.5</value>
- </param>
- <param>
- <key>num_steps</key>
- <value>1000</value>
- </param>
- <param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
- </param>
- <param>
- <key>converver</key>
- <value>float_converter</value>
+ <value>256</value>
</param>
<param>
- <key>grid_pos</key>
- <value></value>
+ <key>num_samps</key>
+ <value>10000000</value>
</param>
<param>
- <key>notebook</key>
- <value></value>
+ <key>repeat</key>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(673, -1)</value>
+ <value>(0, 112)</value>
</param>
<param>
<key>_rotation</key>
@@ -404,38 +358,30 @@
</param>
</block>
<block>
- <key>gr_channel_model</key>
+ <key>gr_throttle</key>
<param>
<key>id</key>
- <value>gr_channel_model_0</value>
+ <value>gr_throttle_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>noise_voltage</key>
- <value>noise_amp</value>
- </param>
- <param>
- <key>freq_offset</key>
- <value>freq_offset</value>
- </param>
- <param>
- <key>epsilon</key>
- <value>1.0</value>
+ <key>type</key>
+ <value>complex</value>
</param>
<param>
- <key>taps</key>
- <value>1.0</value>
+ <key>samples_per_second</key>
+ <value>samp_rate</value>
</param>
<param>
- <key>seed</key>
- <value>42</value>
+ <key>vlen</key>
+ <value>1</value>
</param>
<param>
<key>_coordinate</key>
- <value>(649, 104)</value>
+ <value>(489, 179)</value>
</param>
<param>
<key>_rotation</key>
@@ -510,7 +456,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(875, 0)</value>
+ <value>(990, 0)</value>
</param>
<param>
<key>_rotation</key>
@@ -601,7 +547,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(875, 108)</value>
+ <value>(990, 147)</value>
</param>
<param>
<key>_rotation</key>
@@ -609,46 +555,38 @@
</param>
</block>
<block>
- <key>digital_psk_mod</key>
+ <key>channel_model</key>
<param>
<key>id</key>
- <value>digital_psk_mod_0</value>
+ <value>channel_model_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>constellation_points</key>
- <value>2</value>
- </param>
- <param>
- <key>mod_code</key>
- <value>"gray"</value>
- </param>
- <param>
- <key>differential</key>
- <value>False</value>
+ <key>noise_voltage</key>
+ <value>noise_amp</value>
</param>
<param>
- <key>samples_per_symbol</key>
- <value>sps</value>
+ <key>freq_offset</key>
+ <value>freq_offset</value>
</param>
<param>
- <key>excess_bw</key>
- <value>0.35</value>
+ <key>epsilon</key>
+ <value>1.0</value>
</param>
<param>
- <key>verbose</key>
- <value>False</value>
+ <key>taps</key>
+ <value>1.0</value>
</param>
<param>
- <key>log</key>
- <value>False</value>
+ <key>seed</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(194, 104)</value>
+ <value>(743, 147)</value>
</param>
<param>
<key>_rotation</key>
@@ -656,54 +594,77 @@
</param>
</block>
<block>
- <key>wxgui_scopesink2</key>
+ <key>notebook</key>
<param>
<key>id</key>
- <value>wxgui_scopesink2_0_0</value>
+ <value>notebook_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
+ <key>style</key>
+ <value>wx.NB_TOP</value>
</param>
<param>
- <key>title</key>
- <value>Frequency Corrected Signal</value>
+ <key>labels</key>
+ <value>['Freq', 'Time']</value>
</param>
<param>
- <key>samp_rate</key>
- <value>samp_rate</value>
+ <key>grid_pos</key>
+ <value></value>
</param>
<param>
- <key>v_scale</key>
+ <key>notebook</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(76, 579)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
<value>0</value>
</param>
+ </block>
+ <block>
+ <key>variable_slider</key>
<param>
- <key>v_offset</key>
+ <key>id</key>
+ <value>freq_bw</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>label</key>
+ <value>FLL Loop Bandwidth</value>
+ </param>
+ <param>
+ <key>value</key>
<value>0</value>
</param>
<param>
- <key>t_scale</key>
+ <key>min</key>
<value>0</value>
</param>
<param>
- <key>ac_couple</key>
- <value>False</value>
+ <key>max</key>
+ <value>0.1</value>
</param>
<param>
- <key>xy_mode</key>
- <value>False</value>
+ <key>num_steps</key>
+ <value>1000</value>
</param>
<param>
- <key>num_inputs</key>
- <value>1</value>
+ <key>style</key>
+ <value>wx.SL_HORIZONTAL</value>
</param>
<param>
- <key>win_size</key>
- <value></value>
+ <key>converver</key>
+ <value>float_converter</value>
</param>
<param>
<key>grid_pos</key>
@@ -711,19 +672,11 @@
</param>
<param>
<key>notebook</key>
- <value>notebook_0,1</value>
- </param>
- <param>
- <key>trig_mode</key>
- <value>gr.gr_TRIG_MODE_AUTO</value>
- </param>
- <param>
- <key>y_axis_label</key>
- <value>Counts</value>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(439, 289)</value>
+ <value>(77, 449)</value>
</param>
<param>
<key>_rotation</key>
@@ -731,10 +684,10 @@
</param>
</block>
<block>
- <key>wxgui_fftsink2</key>
+ <key>digital_fll_band_edge_cc</key>
<param>
<key>id</key>
- <value>wxgui_fftsink2_0_0</value>
+ <value>digital_fll_band_edge_cc_0</value>
</param>
<param>
<key>_enabled</key>
@@ -742,59 +695,78 @@
</param>
<param>
<key>type</key>
- <value>complex</value>
+ <value>cc</value>
</param>
<param>
- <key>title</key>
- <value>Frequency Corrected Signal</value>
+ <key>samps_per_sym</key>
+ <value>sps</value>
</param>
<param>
- <key>samp_rate</key>
- <value>samp_rate</value>
+ <key>rolloff</key>
+ <value>rolloff</value>
</param>
<param>
- <key>baseband_freq</key>
+ <key>filter_size</key>
+ <value>44</value>
+ </param>
+ <param>
+ <key>w</key>
+ <value>freq_bw</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(78, 308)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
<value>0</value>
</param>
+ </block>
+ <block>
+ <key>wxgui_scopesink2</key>
<param>
- <key>y_per_div</key>
- <value>10</value>
+ <key>id</key>
+ <value>wxgui_scopesink2_0_0</value>
</param>
<param>
- <key>y_divs</key>
- <value>10</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>ref_level</key>
- <value>10</value>
+ <key>type</key>
+ <value>complex</value>
</param>
<param>
- <key>ref_scale</key>
- <value>2.0</value>
+ <key>title</key>
+ <value>Frequency Corrected Signal</value>
</param>
<param>
- <key>fft_size</key>
- <value>1024</value>
+ <key>samp_rate</key>
+ <value>samp_rate</value>
</param>
<param>
- <key>fft_rate</key>
- <value>30</value>
+ <key>v_scale</key>
+ <value>0</value>
</param>
<param>
- <key>peak_hold</key>
- <value>False</value>
+ <key>v_offset</key>
+ <value>0</value>
</param>
<param>
- <key>average</key>
+ <key>t_scale</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ac_couple</key>
<value>False</value>
</param>
<param>
- <key>avg_alpha</key>
- <value>0</value>
+ <key>xy_mode</key>
+ <value>False</value>
</param>
<param>
- <key>win</key>
- <value>None</value>
+ <key>num_inputs</key>
+ <value>1</value>
</param>
<param>
<key>win_size</key>
@@ -806,15 +778,19 @@
</param>
<param>
<key>notebook</key>
- <value>notebook_0,0</value>
+ <value>notebook_0,1</value>
</param>
<param>
- <key>freqvar</key>
- <value>None</value>
+ <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>(439, 423)</value>
+ <value>(439, 306)</value>
</param>
<param>
<key>_rotation</key>
@@ -822,34 +798,58 @@
</param>
</block>
<block>
- <key>notebook</key>
+ <key>options</key>
<param>
<key>id</key>
- <value>notebook_0</value>
+ <value>freq_lock</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>style</key>
- <value>wx.NB_TOP</value>
+ <key>title</key>
+ <value></value>
</param>
<param>
- <key>labels</key>
- <value>['Freq', 'Time']</value>
+ <key>author</key>
+ <value></value>
</param>
<param>
- <key>grid_pos</key>
+ <key>description</key>
<value></value>
</param>
<param>
- <key>notebook</key>
+ <key>window_size</key>
+ <value>1280, 1024</value>
+ </param>
+ <param>
+ <key>generate_options</key>
+ <value>wx_gui</value>
+ </param>
+ <param>
+ <key>category</key>
+ <value>Custom</value>
+ </param>
+ <param>
+ <key>run_options</key>
+ <value>prompt</value>
+ </param>
+ <param>
+ <key>run</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>max_nouts</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>realtime_scheduling</key>
<value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(114, 521)</value>
+ <value>(-1, 0)</value>
</param>
<param>
<key>_rotation</key>
@@ -857,50 +857,50 @@
</param>
</block>
<connection>
- <source_block_id>gr_channel_model_0</source_block_id>
- <sink_block_id>wxgui_scopesink2_0</sink_block_id>
+ <source_block_id>random_source_x</source_block_id>
+ <sink_block_id>digital_psk_mod_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>gr_channel_model_0</source_block_id>
- <sink_block_id>wxgui_fftsink2_0</sink_block_id>
+ <source_block_id>digital_psk_mod_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>random_source_x</source_block_id>
- <sink_block_id>digital_psk_mod_0</sink_block_id>
+ <source_block_id>digital_fll_band_edge_cc_0</source_block_id>
+ <sink_block_id>wxgui_scopesink2_0_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>digital_psk_mod_0</source_block_id>
- <sink_block_id>gr_throttle_0</sink_block_id>
+ <source_block_id>digital_fll_band_edge_cc_0</source_block_id>
+ <sink_block_id>wxgui_fftsink2_0_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_channel_model_0</sink_block_id>
+ <sink_block_id>channel_model_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>gr_channel_model_0</source_block_id>
- <sink_block_id>digital_fll_band_edge_cc_0</sink_block_id>
+ <source_block_id>channel_model_0</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>digital_fll_band_edge_cc_0</source_block_id>
- <sink_block_id>wxgui_scopesink2_0_0</sink_block_id>
+ <source_block_id>channel_model_0</source_block_id>
+ <sink_block_id>wxgui_fftsink2_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>digital_fll_band_edge_cc_0</source_block_id>
- <sink_block_id>wxgui_fftsink2_0_0</sink_block_id>
+ <source_block_id>channel_model_0</source_block_id>
+ <sink_block_id>digital_fll_band_edge_cc_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
diff --git a/gr-digital/examples/demod/gfsk_loopback.grc b/gr-digital/examples/demod/gfsk_loopback.grc
index f74a835266..45cbcacb90 100644
--- a/gr-digital/examples/demod/gfsk_loopback.grc
+++ b/gr-digital/examples/demod/gfsk_loopback.grc
@@ -1,55 +1,59 @@
<?xml version='1.0' encoding='ASCII'?>
<flow_graph>
- <timestamp>Sun Jul 8 16:56:18 2012</timestamp>
+ <timestamp>Mon Jul 16 21:24:33 2012</timestamp>
<block>
- <key>variable_slider</key>
+ <key>options</key>
<param>
<key>id</key>
- <value>freq</value>
+ <value>gfsk_loopback</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>label</key>
- <value>Frequency (Hz)</value>
+ <key>title</key>
+ <value></value>
</param>
<param>
- <key>value</key>
- <value>500</value>
+ <key>author</key>
+ <value></value>
</param>
<param>
- <key>min</key>
- <value>0</value>
+ <key>description</key>
+ <value></value>
</param>
<param>
- <key>max</key>
- <value>samp_rate/2</value>
+ <key>window_size</key>
+ <value>1280, 1024</value>
</param>
<param>
- <key>num_steps</key>
- <value>100</value>
+ <key>generate_options</key>
+ <value>wx_gui</value>
</param>
<param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
+ <key>category</key>
+ <value>Custom</value>
</param>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>run_options</key>
+ <value>prompt</value>
</param>
<param>
- <key>grid_pos</key>
- <value></value>
+ <key>run</key>
+ <value>True</value>
</param>
<param>
- <key>notebook</key>
+ <key>max_nouts</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>realtime_scheduling</key>
<value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(34, 241)</value>
+ <value>(10, 10)</value>
</param>
<param>
<key>_rotation</key>
@@ -92,7 +96,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(215, 26)</value>
+ <value>(215, 18)</value>
</param>
<param>
<key>_rotation</key>
@@ -123,7 +127,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(272.5, 142.0)</value>
+ <value>(413, 50)</value>
</param>
<param>
<key>_rotation</key>
@@ -131,42 +135,54 @@
</param>
</block>
<block>
- <key>blks2_packet_encoder</key>
+ <key>variable_slider</key>
<param>
<key>id</key>
- <value>blks2_packet_encoder_0</value>
+ <value>freq</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>float</value>
+ <key>label</key>
+ <value>Frequency (Hz)</value>
</param>
<param>
- <key>samples_per_symbol</key>
- <value>2</value>
+ <key>value</key>
+ <value>500</value>
</param>
<param>
- <key>bits_per_symbol</key>
- <value>1</value>
+ <key>min</key>
+ <value>0</value>
</param>
<param>
- <key>access_code</key>
- <value></value>
+ <key>max</key>
+ <value>samp_rate/2</value>
</param>
<param>
- <key>pad_for_usrp</key>
- <value>True</value>
+ <key>num_steps</key>
+ <value>100</value>
</param>
<param>
- <key>payload_length</key>
- <value>0</value>
+ <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>(261, 227)</value>
+ <value>(12, 142)</value>
</param>
<param>
<key>_rotation</key>
@@ -177,7 +193,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>samp_rate</value>
+ <value>fm_sensitivity</value>
</param>
<param>
<key>_enabled</key>
@@ -185,11 +201,11 @@
</param>
<param>
<key>value</key>
- <value>10000</value>
+ <value>1.0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(10, 170)</value>
+ <value>(14, 273)</value>
</param>
<param>
<key>_rotation</key>
@@ -197,50 +213,65 @@
</param>
</block>
<block>
- <key>digital_gfsk_demod</key>
+ <key>variable</key>
<param>
<key>id</key>
- <value>digital_gfsk_demod_0</value>
+ <value>samp_rate</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>samples_per_symbol</key>
- <value>sps</value>
+ <key>value</key>
+ <value>10000</value>
</param>
<param>
- <key>sensitivity</key>
- <value>fm_sensitivity</value>
+ <key>_coordinate</key>
+ <value>(12, 76)</value>
</param>
<param>
- <key>gain_mu</key>
- <value>0.175</value>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>blks2_packet_encoder</key>
+ <param>
+ <key>id</key>
+ <value>blks2_packet_encoder_0</value>
</param>
<param>
- <key>mu</key>
- <value>0.5</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>omega_relative_limit</key>
- <value>0.005</value>
+ <key>type</key>
+ <value>float</value>
</param>
<param>
- <key>freq_error</key>
- <value>0.0</value>
+ <key>samples_per_symbol</key>
+ <value>sps</value>
</param>
<param>
- <key>verbose</key>
- <value>False</value>
+ <key>bits_per_symbol</key>
+ <value>1</value>
</param>
<param>
- <key>log</key>
- <value>False</value>
+ <key>access_code</key>
+ <value></value>
+ </param>
+ <param>
+ <key>pad_for_usrp</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>payload_length</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(669, 257)</value>
+ <value>(237, 261)</value>
</param>
<param>
<key>_rotation</key>
@@ -259,11 +290,11 @@
</param>
<param>
<key>value</key>
- <value>8</value>
+ <value>4</value>
</param>
<param>
<key>_coordinate</key>
- <value>(47, 445)</value>
+ <value>(15, 338)</value>
</param>
<param>
<key>_rotation</key>
@@ -271,10 +302,10 @@
</param>
</block>
<block>
- <key>digital_gfsk_mod</key>
+ <key>digital_gfsk_demod</key>
<param>
<key>id</key>
- <value>digital_gfsk_mod_0</value>
+ <value>digital_gfsk_demod_0</value>
</param>
<param>
<key>_enabled</key>
@@ -289,43 +320,32 @@
<value>fm_sensitivity</value>
</param>
<param>
- <key>bt</key>
- <value>0.35</value>
- </param>
- <param>
- <key>verbose</key>
- <value>False</value>
- </param>
- <param>
- <key>log</key>
- <value>False</value>
+ <key>gain_mu</key>
+ <value>0.175</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(456, 277)</value>
+ <key>mu</key>
+ <value>0.5</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>omega_relative_limit</key>
+ <value>0.005</value>
</param>
- </block>
- <block>
- <key>variable</key>
<param>
- <key>id</key>
- <value>fm_sensitivity</value>
+ <key>freq_error</key>
+ <value>0.0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>verbose</key>
+ <value>False</value>
</param>
<param>
- <key>value</key>
- <value>1.0</value>
+ <key>log</key>
+ <value>False</value>
</param>
<param>
<key>_coordinate</key>
- <value>(40, 366)</value>
+ <value>(670, 253)</value>
</param>
<param>
<key>_rotation</key>
@@ -356,30 +376,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(705, 130)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>gr_quadrature_demod_cf</key>
- <param>
- <key>id</key>
- <value>gr_quadrature_demod_cf_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>gain</key>
- <value>1</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(627, 417)</value>
+ <value>(720, 130)</value>
</param>
<param>
<key>_rotation</key>
@@ -387,58 +384,38 @@
</param>
</block>
<block>
- <key>options</key>
+ <key>digital_gfsk_mod</key>
<param>
<key>id</key>
- <value>gfsk_loopback</value>
+ <value>digital_gfsk_mod_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>title</key>
- <value></value>
- </param>
- <param>
- <key>author</key>
- <value></value>
- </param>
- <param>
- <key>description</key>
- <value></value>
- </param>
- <param>
- <key>window_size</key>
- <value>1280, 1024</value>
- </param>
- <param>
- <key>generate_options</key>
- <value>wx_gui</value>
- </param>
- <param>
- <key>category</key>
- <value>Custom</value>
+ <key>samples_per_symbol</key>
+ <value>sps</value>
</param>
<param>
- <key>run_options</key>
- <value>prompt</value>
+ <key>sensitivity</key>
+ <value>fm_sensitivity</value>
</param>
<param>
- <key>run</key>
- <value>True</value>
+ <key>bt</key>
+ <value>0.35</value>
</param>
<param>
- <key>max_nouts</key>
- <value>0</value>
+ <key>verbose</key>
+ <value>False</value>
</param>
<param>
- <key>realtime_scheduling</key>
- <value></value>
+ <key>log</key>
+ <value>False</value>
</param>
<param>
<key>_coordinate</key>
- <value>(10, 10)</value>
+ <value>(456, 277)</value>
</param>
<param>
<key>_rotation</key>
@@ -461,7 +438,7 @@
</param>
<param>
<key>title</key>
- <value>Scope Plot</value>
+ <value>Packet Decode</value>
</param>
<param>
<key>samp_rate</key>
@@ -513,7 +490,30 @@
</param>
<param>
<key>_coordinate</key>
- <value>(907, 59)</value>
+ <value>(923, 106)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>gr_quadrature_demod_cf</key>
+ <param>
+ <key>id</key>
+ <value>gr_quadrature_demod_cf_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>gain</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(679, 402)</value>
</param>
<param>
<key>_rotation</key>
@@ -536,7 +536,7 @@
</param>
<param>
<key>title</key>
- <value>Scope Plot</value>
+ <value>GFSK Demod</value>
</param>
<param>
<key>samp_rate</key>
@@ -588,7 +588,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(853, 400)</value>
+ <value>(898, 378)</value>
</param>
<param>
<key>_rotation</key>
@@ -626,14 +626,14 @@
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>blks2_packet_decoder_0</source_block_id>
- <sink_block_id>wxgui_scopesink2_0</sink_block_id>
+ <source_block_id>digital_gfsk_mod_0</source_block_id>
+ <sink_block_id>gr_quadrature_demod_cf_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>digital_gfsk_mod_0</source_block_id>
- <sink_block_id>gr_quadrature_demod_cf_0</sink_block_id>
+ <source_block_id>blks2_packet_decoder_0</source_block_id>
+ <sink_block_id>wxgui_scopesink2_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
diff --git a/gr-digital/examples/demod/mpsk_demod.grc b/gr-digital/examples/demod/mpsk_demod.grc
index b718fb68af..f2d6f9a640 100644
--- a/gr-digital/examples/demod/mpsk_demod.grc
+++ b/gr-digital/examples/demod/mpsk_demod.grc
@@ -1,6 +1,6 @@
<?xml version='1.0' encoding='ASCII'?>
<flow_graph>
- <timestamp>Thu Jul 5 16:28:45 2012</timestamp>
+ <timestamp>Mon Jul 16 20:55:43 2012</timestamp>
<block>
<key>options</key>
<param>
@@ -252,85 +252,6 @@
</param>
</block>
<block>
- <key>wxgui_constellationsink2</key>
- <param>
- <key>id</key>
- <value>wxgui_constellationsink2_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>title</key>
- <value>Constellation Plot</value>
- </param>
- <param>
- <key>samp_rate</key>
- <value>samp_rate</value>
- </param>
- <param>
- <key>frame_rate</key>
- <value>5</value>
- </param>
- <param>
- <key>const_size</key>
- <value>2048</value>
- </param>
- <param>
- <key>M</key>
- <value>4</value>
- </param>
- <param>
- <key>theta</key>
- <value>0</value>
- </param>
- <param>
- <key>loop_bw</key>
- <value>6.28/100.0</value>
- </param>
- <param>
- <key>fmax</key>
- <value>0.06</value>
- </param>
- <param>
- <key>mu</key>
- <value>0.5</value>
- </param>
- <param>
- <key>gain_mu</key>
- <value>0.005</value>
- </param>
- <param>
- <key>symbol_rate</key>
- <value>samp_rate/4.</value>
- </param>
- <param>
- <key>omega_limit</key>
- <value>0.005</value>
- </param>
- <param>
- <key>win_size</key>
- <value></value>
- </param>
- <param>
- <key>grid_pos</key>
- <value></value>
- </param>
- <param>
- <key>notebook</key>
- <value>notebook, 0</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(824, 212)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
<key>wxgui_fftsink2</key>
<param>
<key>id</key>
@@ -422,38 +343,81 @@
</param>
</block>
<block>
- <key>gr_channel_model</key>
+ <key>random_source_x</key>
<param>
<key>id</key>
- <value>gr_channel_model_0</value>
+ <value>random_source_x_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>noise_voltage</key>
- <value>noise</value>
+ <key>type</key>
+ <value>byte</value>
</param>
<param>
- <key>freq_offset</key>
- <value>freq_off</value>
+ <key>min</key>
+ <value>0</value>
</param>
<param>
- <key>epsilon</key>
- <value>1.0</value>
+ <key>max</key>
+ <value>2**8</value>
</param>
<param>
- <key>taps</key>
- <value>1.0</value>
+ <key>num_samps</key>
+ <value>10000</value>
</param>
<param>
- <key>seed</key>
- <value>42</value>
+ <key>repeat</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(161, 119)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>digital_dxpsk_mod</key>
+ <param>
+ <key>id</key>
+ <value>digital_dxpsk_mod_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>dqpsk</value>
+ </param>
+ <param>
+ <key>samples_per_symbol</key>
+ <value>samps_per_sym</value>
+ </param>
+ <param>
+ <key>excess_bw</key>
+ <value>0.35</value>
+ </param>
+ <param>
+ <key>mod_code</key>
+ <value>"gray"</value>
+ </param>
+ <param>
+ <key>verbose</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>log</key>
+ <value>False</value>
</param>
<param>
<key>_coordinate</key>
- <value>(487, 282)</value>
+ <value>(361, 119)</value>
</param>
<param>
<key>_rotation</key>
@@ -492,38 +456,38 @@
</param>
</block>
<block>
- <key>random_source_x</key>
+ <key>channel_model</key>
<param>
<key>id</key>
- <value>random_source_x_0</value>
+ <value>channel_model_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>byte</value>
+ <key>noise_voltage</key>
+ <value>noise</value>
</param>
<param>
- <key>min</key>
- <value>0</value>
+ <key>freq_offset</key>
+ <value>freq_off</value>
</param>
<param>
- <key>max</key>
- <value>2**8</value>
+ <key>epsilon</key>
+ <value>1.0</value>
</param>
<param>
- <key>num_samps</key>
- <value>10000</value>
+ <key>taps</key>
+ <value>1.0</value>
</param>
<param>
- <key>repeat</key>
- <value>True</value>
+ <key>seed</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(161, 119)</value>
+ <value>(497, 270)</value>
</param>
<param>
<key>_rotation</key>
@@ -531,42 +495,78 @@
</param>
</block>
<block>
- <key>digital_dxpsk_mod</key>
+ <key>wxgui_constellationsink2</key>
<param>
<key>id</key>
- <value>digital_dxpsk_mod_0</value>
+ <value>wxgui_constellationsink2_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>dqpsk</value>
+ <key>title</key>
+ <value>Constellation Plot</value>
</param>
<param>
- <key>samples_per_symbol</key>
- <value>samps_per_sym</value>
+ <key>samp_rate</key>
+ <value>samp_rate</value>
</param>
<param>
- <key>excess_bw</key>
- <value>0.35</value>
+ <key>frame_rate</key>
+ <value>5</value>
</param>
<param>
- <key>gray_coded</key>
- <value>True</value>
+ <key>const_size</key>
+ <value>2048</value>
</param>
<param>
- <key>verbose</key>
- <value>False</value>
+ <key>M</key>
+ <value>4</value>
</param>
<param>
- <key>log</key>
- <value>False</value>
+ <key>theta</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>loop_bw</key>
+ <value>6.28/100.0</value>
+ </param>
+ <param>
+ <key>fmax</key>
+ <value>0.06</value>
+ </param>
+ <param>
+ <key>mu</key>
+ <value>0.5</value>
+ </param>
+ <param>
+ <key>gain_mu</key>
+ <value>0.005</value>
+ </param>
+ <param>
+ <key>symbol_rate</key>
+ <value>samp_rate/4.</value>
+ </param>
+ <param>
+ <key>omega_limit</key>
+ <value>0.005</value>
+ </param>
+ <param>
+ <key>win_size</key>
+ <value></value>
+ </param>
+ <param>
+ <key>grid_pos</key>
+ <value></value>
+ </param>
+ <param>
+ <key>notebook</key>
+ <value>notebook, 0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(361, 119)</value>
+ <value>(824, 212)</value>
</param>
<param>
<key>_rotation</key>
@@ -586,20 +586,20 @@
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>gr_channel_model_0</source_block_id>
- <sink_block_id>gr_throttle_0</sink_block_id>
+ <source_block_id>random_source_x_0</source_block_id>
+ <sink_block_id>digital_dxpsk_mod_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>digital_dxpsk_mod_0</source_block_id>
- <sink_block_id>gr_channel_model_0</sink_block_id>
+ <sink_block_id>channel_model_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>digital_dxpsk_mod_0</sink_block_id>
+ <source_block_id>channel_model_0</source_block_id>
+ <sink_block_id>gr_throttle_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
diff --git a/gr-digital/examples/demod/pam_sync.grc b/gr-digital/examples/demod/pam_sync.grc
index f870a0b067..9c73777585 100644
--- a/gr-digital/examples/demod/pam_sync.grc
+++ b/gr-digital/examples/demod/pam_sync.grc
@@ -1,59 +1,69 @@
<?xml version='1.0' encoding='ASCII'?>
<flow_graph>
- <timestamp>Thu Jul 5 17:54:54 2012</timestamp>
+ <timestamp>Mon Jul 16 21:25:28 2012</timestamp>
<block>
- <key>options</key>
+ <key>variable</key>
<param>
<key>id</key>
- <value>top_block</value>
+ <value>const</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>title</key>
- <value></value>
+ <key>value</key>
+ <value>digital.qpsk_constellation()</value>
</param>
<param>
- <key>author</key>
- <value></value>
+ <key>_coordinate</key>
+ <value>(336, -2)</value>
</param>
<param>
- <key>description</key>
- <value></value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
+ </block>
+ <block>
+ <key>variable</key>
<param>
- <key>window_size</key>
- <value>1280, 1024</value>
+ <key>id</key>
+ <value>rrctaps</value>
</param>
<param>
- <key>generate_options</key>
- <value>wx_gui</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>category</key>
- <value>Custom</value>
+ <key>value</key>
+ <value>firdes.root_raised_cosine(nfilts,1.0,1.0/(spb*nfilts), rolloff, int(11*spb*nfilts))</value>
</param>
<param>
- <key>run_options</key>
- <value>prompt</value>
+ <key>_coordinate</key>
+ <value>(686, -1)</value>
</param>
<param>
- <key>run</key>
- <value>True</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
+ </block>
+ <block>
+ <key>variable</key>
<param>
- <key>max_nouts</key>
- <value>0</value>
+ <key>id</key>
+ <value>rolloff</value>
</param>
<param>
- <key>realtime_scheduling</key>
- <value></value>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>0.35</value>
</param>
<param>
<key>_coordinate</key>
- <value>(-1, 0)</value>
+ <value>(607, -1)</value>
</param>
<param>
<key>_rotation</key>
@@ -64,7 +74,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>const</value>
+ <value>spb</value>
</param>
<param>
<key>_enabled</key>
@@ -72,11 +82,11 @@
</param>
<param>
<key>value</key>
- <value>digital.qpsk_constellation()</value>
+ <value>4.0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(336, -2)</value>
+ <value>(542, -1)</value>
</param>
<param>
<key>_rotation</key>
@@ -87,7 +97,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>rrctaps</value>
+ <value>sig_amp</value>
</param>
<param>
<key>_enabled</key>
@@ -95,11 +105,11 @@
</param>
<param>
<key>value</key>
- <value>firdes.root_raised_cosine(nfilts,1.0,1.0/(spb*nfilts), rolloff, int(11*spb*nfilts))</value>
+ <value>1.0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(686, -1)</value>
+ <value>(861, 0)</value>
</param>
<param>
<key>_rotation</key>
@@ -110,7 +120,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>rolloff</value>
+ <value>nfilts</value>
</param>
<param>
<key>_enabled</key>
@@ -118,11 +128,11 @@
</param>
<param>
<key>value</key>
- <value>0.35</value>
+ <value>32</value>
</param>
<param>
<key>_coordinate</key>
- <value>(607, -1)</value>
+ <value>(598, 186)</value>
</param>
<param>
<key>_rotation</key>
@@ -133,7 +143,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>spb</value>
+ <value>samp_rate</value>
</param>
<param>
<key>_enabled</key>
@@ -141,11 +151,11 @@
</param>
<param>
<key>value</key>
- <value>4.0</value>
+ <value>128000</value>
</param>
<param>
<key>_coordinate</key>
- <value>(542, -1)</value>
+ <value>(193, -1)</value>
</param>
<param>
<key>_rotation</key>
@@ -153,22 +163,22 @@
</param>
</block>
<block>
- <key>variable</key>
+ <key>virtual_source</key>
<param>
<key>id</key>
- <value>sig_amp</value>
+ <value>virtual_source_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>1.0</value>
+ <key>stream_id</key>
+ <value>input_signal_probe</value>
</param>
<param>
<key>_coordinate</key>
- <value>(861, 0)</value>
+ <value>(835, 562)</value>
</param>
<param>
<key>_rotation</key>
@@ -176,22 +186,38 @@
</param>
</block>
<block>
- <key>virtual_sink</key>
+ <key>random_source_x</key>
<param>
<key>id</key>
- <value>virtual_sink_0</value>
+ <value>random_source_x</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>stream_id</key>
- <value>input_signal_probe</value>
+ <key>type</key>
+ <value>byte</value>
+ </param>
+ <param>
+ <key>min</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>max</key>
+ <value>const.arity()</value>
+ </param>
+ <param>
+ <key>num_samps</key>
+ <value>10000000</value>
+ </param>
+ <param>
+ <key>repeat</key>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(330, 183)</value>
+ <value>(0, 72)</value>
</param>
<param>
<key>_rotation</key>
@@ -199,10 +225,37 @@
</param>
</block>
<block>
- <key>gr_pfb_clock_sync_xxx</key>
+ <key>digital_costas_loop_cc</key>
<param>
<key>id</key>
- <value>gr_pfb_clock_sync_xxx_0</value>
+ <value>digital_costas_loop_cc_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>w</key>
+ <value>phase_bw</value>
+ </param>
+ <param>
+ <key>order</key>
+ <value>4</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(866, 246)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>digital_pfb_clock_sync_xxx</key>
+ <param>
+ <key>id</key>
+ <value>digital_pfb_clock_sync_xxx_0</value>
</param>
<param>
<key>_enabled</key>
@@ -234,7 +287,7 @@
</param>
<param>
<key>init_phase</key>
- <value>16</value>
+ <value>nfilts/2</value>
</param>
<param>
<key>max_dev</key>
@@ -246,7 +299,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(598, 241)</value>
+ <value>(601, 254)</value>
</param>
<param>
<key>_rotation</key>
@@ -254,10 +307,10 @@
</param>
</block>
<block>
- <key>digital_fll_band_edge_cc</key>
+ <key>wxgui_scopesink2</key>
<param>
<key>id</key>
- <value>digital_fll_band_edge_cc_0</value>
+ <value>wxgui_scopesink2_0</value>
</param>
<param>
<key>_enabled</key>
@@ -265,73 +318,63 @@
</param>
<param>
<key>type</key>
- <value>cc</value>
- </param>
- <param>
- <key>samps_per_sym</key>
- <value>spb</value>
+ <value>complex</value>
</param>
<param>
- <key>rolloff</key>
- <value>rolloff</value>
+ <key>title</key>
+ <value>Post-sync Signal</value>
</param>
<param>
- <key>filter_size</key>
- <value>44</value>
+ <key>samp_rate</key>
+ <value>samp_rate</value>
</param>
<param>
- <key>w</key>
- <value>freq_bw</value>
+ <key>v_scale</key>
+ <value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(331, 239)</value>
+ <key>v_offset</key>
+ <value>0</value>
</param>
<param>
- <key>_rotation</key>
+ <key>t_scale</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>variable</key>
<param>
- <key>id</key>
- <value>nfilts</value>
+ <key>ac_couple</key>
+ <value>False</value>
</param>
<param>
- <key>_enabled</key>
+ <key>xy_mode</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>32</value>
+ <key>num_inputs</key>
+ <value>1</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(598, 186)</value>
+ <key>win_size</key>
+ <value></value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>grid_pos</key>
+ <value></value>
</param>
- </block>
- <block>
- <key>variable</key>
<param>
- <key>id</key>
- <value>samp_rate</value>
+ <key>notebook</key>
+ <value>notebook_0,0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>trig_mode</key>
+ <value>gr.gr_TRIG_MODE_AUTO</value>
</param>
<param>
- <key>value</key>
- <value>128000</value>
+ <key>y_axis_label</key>
+ <value>Counts</value>
</param>
<param>
<key>_coordinate</key>
- <value>(193, -1)</value>
+ <value>(1094, 202)</value>
</param>
<param>
<key>_rotation</key>
@@ -339,18 +382,22 @@
</param>
</block>
<block>
- <key>random_source_x</key>
+ <key>variable_slider</key>
<param>
<key>id</key>
- <value>random_source_x</value>
+ <value>noise_amp</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>byte</value>
+ <key>label</key>
+ <value>Channel Noise</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>0</value>
</param>
<param>
<key>min</key>
@@ -358,19 +405,31 @@
</param>
<param>
<key>max</key>
- <value>const.arity()</value>
+ <value>1.0</value>
</param>
<param>
- <key>num_samps</key>
- <value>10000000</value>
+ <key>num_steps</key>
+ <value>1000</value>
</param>
<param>
- <key>repeat</key>
- <value>True</value>
+ <key>style</key>
+ <value>wx.SL_HORIZONTAL</value>
+ </param>
+ <param>
+ <key>converver</key>
+ <value>float_converter</value>
+ </param>
+ <param>
+ <key>grid_pos</key>
+ <value>(1,2,1,1)</value>
+ </param>
+ <param>
+ <key>notebook</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(0, 72)</value>
+ <value>(152, 373)</value>
</param>
<param>
<key>_rotation</key>
@@ -378,69 +437,89 @@
</param>
</block>
<block>
- <key>gr_chunks_to_symbols_xx</key>
+ <key>variable_slider</key>
<param>
<key>id</key>
- <value>gr_chunks_to_symbols_xx</value>
+ <value>interpratio</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>in_type</key>
- <value>byte</value>
+ <key>label</key>
+ <value>Timing Offset</value>
</param>
<param>
- <key>out_type</key>
- <value>complex</value>
+ <key>value</key>
+ <value>1.00</value>
</param>
<param>
- <key>symbol_table</key>
- <value>const.points()</value>
+ <key>min</key>
+ <value>0.99</value>
</param>
<param>
- <key>dimension</key>
- <value>1</value>
+ <key>max</key>
+ <value>1.01</value>
</param>
<param>
- <key>num_ports</key>
- <value>1</value>
+ <key>num_steps</key>
+ <value>1000</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>(3,2,1,1)</value>
+ </param>
+ <param>
+ <key>notebook</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(196, 87)</value>
+ <value>(11, 517)</value>
</param>
<param>
<key>_rotation</key>
- <value>0</value>
+ <value>180</value>
</param>
</block>
<block>
- <key>blks2_pfb_arb_resampler_ccf</key>
+ <key>notebook</key>
<param>
<key>id</key>
- <value>blks2_pfb_arb_resampler_ccf_0</value>
+ <value>notebook_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>rate</key>
- <value>spb</value>
+ <key>style</key>
+ <value>wx.NB_TOP</value>
</param>
<param>
- <key>taps</key>
- <value>firdes.root_raised_cosine(32, 32, 1.0, 0.35, 44*32)</value>
+ <key>labels</key>
+ <value>['Synched Signal', 'Received Signal']</value>
</param>
<param>
- <key>size</key>
- <value>32</value>
+ <key>grid_pos</key>
+ <value>(1,1,8,1)</value>
+ </param>
+ <param>
+ <key>notebook</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(435, 80)</value>
+ <value>(9, 664)</value>
</param>
<param>
<key>_rotation</key>
@@ -448,38 +527,54 @@
</param>
</block>
<block>
- <key>gr_channel_model</key>
+ <key>variable_slider</key>
<param>
<key>id</key>
- <value>gr_channel_model_0</value>
+ <value>freq_offset</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>noise_voltage</key>
- <value>noise_amp</value>
+ <key>label</key>
+ <value>Frequency Offset</value>
</param>
<param>
- <key>freq_offset</key>
- <value>freq_offset</value>
+ <key>value</key>
+ <value>0</value>
</param>
<param>
- <key>epsilon</key>
- <value>interpratio</value>
+ <key>min</key>
+ <value>-0.5</value>
</param>
<param>
- <key>taps</key>
- <value>1.0</value>
+ <key>max</key>
+ <value>0.5</value>
</param>
<param>
- <key>seed</key>
- <value>42</value>
+ <key>num_steps</key>
+ <value>1000</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>(2,2,1,1)</value>
+ </param>
+ <param>
+ <key>notebook</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(46, 183)</value>
+ <value>(13, 372)</value>
</param>
<param>
<key>_rotation</key>
@@ -487,30 +582,22 @@
</param>
</block>
<block>
- <key>gr_multiply_const_vxx</key>
+ <key>virtual_sink</key>
<param>
<key>id</key>
- <value>gr_multiply_const_vxx_0</value>
+ <value>virtual_sink_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
- </param>
- <param>
- <key>const</key>
- <value>sig_amp</value>
- </param>
- <param>
- <key>vlen</key>
- <value>1</value>
+ <key>stream_id</key>
+ <value>input_signal_probe</value>
</param>
<param>
<key>_coordinate</key>
- <value>(659, 95)</value>
+ <value>(330, 183)</value>
</param>
<param>
<key>_rotation</key>
@@ -518,10 +605,10 @@
</param>
</block>
<block>
- <key>gr_throttle</key>
+ <key>digital_fll_band_edge_cc</key>
<param>
<key>id</key>
- <value>gr_throttle_0</value>
+ <value>digital_fll_band_edge_cc_0</value>
</param>
<param>
<key>_enabled</key>
@@ -529,19 +616,27 @@
</param>
<param>
<key>type</key>
- <value>complex</value>
+ <value>cc</value>
</param>
<param>
- <key>samples_per_second</key>
- <value>samp_rate</value>
+ <key>samps_per_sym</key>
+ <value>spb</value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>rolloff</key>
+ <value>rolloff</value>
+ </param>
+ <param>
+ <key>filter_size</key>
+ <value>44</value>
+ </param>
+ <param>
+ <key>w</key>
+ <value>freq_bw</value>
</param>
<param>
<key>_coordinate</key>
- <value>(857, 95)</value>
+ <value>(331, 239)</value>
</param>
<param>
<key>_rotation</key>
@@ -549,49 +644,38 @@
</param>
</block>
<block>
- <key>virtual_source</key>
+ <key>channel_model</key>
<param>
<key>id</key>
- <value>virtual_source_0</value>
+ <value>channel_model_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>stream_id</key>
- <value>input_signal_probe</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(835, 562)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
+ <key>noise_voltage</key>
+ <value>noise_amp</value>
</param>
- </block>
- <block>
- <key>digital_costas_loop_cc</key>
<param>
- <key>id</key>
- <value>digital_costas_loop_cc_0</value>
+ <key>freq_offset</key>
+ <value>freq_offset</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>epsilon</key>
+ <value>interpratio</value>
</param>
<param>
- <key>w</key>
- <value>phase_bw</value>
+ <key>taps</key>
+ <value>1.0</value>
</param>
<param>
- <key>order</key>
- <value>4</value>
+ <key>seed</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(866, 246)</value>
+ <value>(77, 183)</value>
</param>
<param>
<key>_rotation</key>
@@ -599,74 +683,54 @@
</param>
</block>
<block>
- <key>wxgui_scopesink2</key>
+ <key>variable_slider</key>
<param>
<key>id</key>
- <value>wxgui_scopesink2_0_0_1</value>
+ <value>phase_bw</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
- </param>
- <param>
- <key>title</key>
- <value>Pre-sync Signal</value>
- </param>
- <param>
- <key>samp_rate</key>
- <value>samp_rate</value>
- </param>
- <param>
- <key>v_scale</key>
- <value>.5</value>
+ <key>label</key>
+ <value>Costas Loop (Phase) Bandwidth</value>
</param>
<param>
- <key>v_offset</key>
+ <key>value</key>
<value>0</value>
</param>
<param>
- <key>t_scale</key>
+ <key>min</key>
<value>0</value>
</param>
<param>
- <key>ac_couple</key>
- <value>False</value>
+ <key>max</key>
+ <value>0.1</value>
</param>
<param>
- <key>xy_mode</key>
- <value>False</value>
+ <key>num_steps</key>
+ <value>1000</value>
</param>
<param>
- <key>num_inputs</key>
- <value>1</value>
+ <key>style</key>
+ <value>wx.SL_HORIZONTAL</value>
</param>
<param>
- <key>win_size</key>
- <value></value>
+ <key>converver</key>
+ <value>float_converter</value>
</param>
<param>
<key>grid_pos</key>
- <value></value>
+ <value>(7,2,1,1)</value>
</param>
<param>
<key>notebook</key>
- <value>notebook_0,1</value>
- </param>
- <param>
- <key>trig_mode</key>
- <value>gr.gr_TRIG_MODE_AUTO</value>
- </param>
- <param>
- <key>y_axis_label</key>
- <value>Counts</value>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(1081, 439)</value>
+ <value>(866, 318)</value>
</param>
<param>
<key>_rotation</key>
@@ -674,10 +738,10 @@
</param>
</block>
<block>
- <key>wxgui_fftsink2</key>
+ <key>wxgui_scopesink2</key>
<param>
<key>id</key>
- <value>wxgui_fftsink2_0</value>
+ <value>wxgui_scopesink2_0_0_1</value>
</param>
<param>
<key>_enabled</key>
@@ -689,55 +753,35 @@
</param>
<param>
<key>title</key>
- <value>Received spectrum</value>
+ <value>Pre-sync Signal</value>
</param>
<param>
<key>samp_rate</key>
<value>samp_rate</value>
</param>
<param>
- <key>baseband_freq</key>
- <value>0</value>
- </param>
- <param>
- <key>y_per_div</key>
- <value>10</value>
- </param>
- <param>
- <key>y_divs</key>
- <value>10</value>
- </param>
- <param>
- <key>ref_level</key>
- <value>10</value>
- </param>
- <param>
- <key>ref_scale</key>
- <value>2.0</value>
+ <key>v_scale</key>
+ <value>.5</value>
</param>
<param>
- <key>fft_size</key>
- <value>1024</value>
+ <key>v_offset</key>
+ <value>0</value>
</param>
<param>
- <key>fft_rate</key>
- <value>30</value>
+ <key>t_scale</key>
+ <value>0</value>
</param>
<param>
- <key>peak_hold</key>
+ <key>ac_couple</key>
<value>False</value>
</param>
<param>
- <key>average</key>
+ <key>xy_mode</key>
<value>False</value>
</param>
<param>
- <key>avg_alpha</key>
- <value>0</value>
- </param>
- <param>
- <key>win</key>
- <value>None</value>
+ <key>num_inputs</key>
+ <value>1</value>
</param>
<param>
<key>win_size</key>
@@ -752,12 +796,16 @@
<value>notebook_0,1</value>
</param>
<param>
- <key>freqvar</key>
- <value>None</value>
+ <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>(1081, 563)</value>
+ <value>(1086, 441)</value>
</param>
<param>
<key>_rotation</key>
@@ -768,7 +816,7 @@
<key>wxgui_fftsink2</key>
<param>
<key>id</key>
- <value>wxgui_fftsink2_0_0</value>
+ <value>wxgui_fftsink2_0</value>
</param>
<param>
<key>_enabled</key>
@@ -780,7 +828,7 @@
</param>
<param>
<key>title</key>
- <value>Post-sync spectrum</value>
+ <value>Received spectrum</value>
</param>
<param>
<key>samp_rate</key>
@@ -840,7 +888,7 @@
</param>
<param>
<key>notebook</key>
- <value>notebook_0,0</value>
+ <value>notebook_0,1</value>
</param>
<param>
<key>freqvar</key>
@@ -848,82 +896,62 @@
</param>
<param>
<key>_coordinate</key>
- <value>(347, 516)</value>
+ <value>(1086, 565)</value>
</param>
<param>
<key>_rotation</key>
- <value>180</value>
+ <value>0</value>
</param>
</block>
<block>
- <key>wxgui_scopesink2</key>
+ <key>variable_slider</key>
<param>
<key>id</key>
- <value>wxgui_scopesink2_0</value>
+ <value>time_alpha</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
- </param>
- <param>
- <key>title</key>
- <value>Post-sync Signal</value>
- </param>
- <param>
- <key>samp_rate</key>
- <value>samp_rate</value>
- </param>
- <param>
- <key>v_scale</key>
- <value>0</value>
+ <key>label</key>
+ <value>Timing Alpha</value>
</param>
<param>
- <key>v_offset</key>
+ <key>value</key>
<value>0</value>
</param>
<param>
- <key>t_scale</key>
+ <key>min</key>
<value>0</value>
</param>
<param>
- <key>ac_couple</key>
- <value>False</value>
+ <key>max</key>
+ <value>1</value>
</param>
<param>
- <key>xy_mode</key>
- <value>True</value>
+ <key>num_steps</key>
+ <value>1000</value>
</param>
<param>
- <key>num_inputs</key>
- <value>1</value>
+ <key>style</key>
+ <value>wx.SL_HORIZONTAL</value>
</param>
<param>
- <key>win_size</key>
- <value></value>
+ <key>converver</key>
+ <value>float_converter</value>
</param>
<param>
<key>grid_pos</key>
- <value></value>
+ <value>(5,2,1,1)</value>
</param>
<param>
<key>notebook</key>
- <value>notebook_0,0</value>
- </param>
- <param>
- <key>trig_mode</key>
- <value>gr.gr_TRIG_MODE_AUTO</value>
- </param>
- <param>
- <key>y_axis_label</key>
- <value>Counts</value>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(1085, 213)</value>
+ <value>(557, 431)</value>
</param>
<param>
<key>_rotation</key>
@@ -934,7 +962,7 @@
<key>variable_slider</key>
<param>
<key>id</key>
- <value>freq_bw</value>
+ <value>time_beta</value>
</param>
<param>
<key>_enabled</key>
@@ -942,7 +970,7 @@
</param>
<param>
<key>label</key>
- <value>FLL Bandwidth</value>
+ <value>Timing Beta</value>
</param>
<param>
<key>value</key>
@@ -954,7 +982,7 @@
</param>
<param>
<key>max</key>
- <value>0.05</value>
+ <value>0.1</value>
</param>
<param>
<key>num_steps</key>
@@ -970,7 +998,7 @@
</param>
<param>
<key>grid_pos</key>
- <value>(4,2,1,1)</value>
+ <value>(6,2,1,1)</value>
</param>
<param>
<key>notebook</key>
@@ -978,7 +1006,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(341, 373)</value>
+ <value>(694, 430)</value>
</param>
<param>
<key>_rotation</key>
@@ -989,7 +1017,7 @@
<key>variable_slider</key>
<param>
<key>id</key>
- <value>time_alpha</value>
+ <value>freq_bw</value>
</param>
<param>
<key>_enabled</key>
@@ -997,7 +1025,7 @@
</param>
<param>
<key>label</key>
- <value>Timing Alpha</value>
+ <value>FLL Bandwidth</value>
</param>
<param>
<key>value</key>
@@ -1005,11 +1033,11 @@
</param>
<param>
<key>min</key>
- <value>0</value>
+ <value>0.0</value>
</param>
<param>
<key>max</key>
- <value>1</value>
+ <value>0.05</value>
</param>
<param>
<key>num_steps</key>
@@ -1025,7 +1053,7 @@
</param>
<param>
<key>grid_pos</key>
- <value>(5,2,1,1)</value>
+ <value>(4,2,1,1)</value>
</param>
<param>
<key>notebook</key>
@@ -1033,152 +1061,129 @@
</param>
<param>
<key>_coordinate</key>
- <value>(598, 388)</value>
+ <value>(154, 517)</value>
</param>
<param>
<key>_rotation</key>
- <value>0</value>
+ <value>180</value>
</param>
</block>
<block>
- <key>variable_slider</key>
+ <key>wxgui_fftsink2</key>
<param>
<key>id</key>
- <value>time_beta</value>
+ <value>wxgui_fftsink2_0_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>label</key>
- <value>Timing Beta</value>
- </param>
- <param>
- <key>value</key>
- <value>0</value>
- </param>
- <param>
- <key>min</key>
- <value>0.0</value>
- </param>
- <param>
- <key>max</key>
- <value>0.1</value>
+ <key>type</key>
+ <value>complex</value>
</param>
<param>
- <key>num_steps</key>
- <value>1000</value>
+ <key>title</key>
+ <value>Post-sync spectrum</value>
</param>
<param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
+ <key>samp_rate</key>
+ <value>samp_rate</value>
</param>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>baseband_freq</key>
+ <value>0</value>
</param>
<param>
- <key>grid_pos</key>
- <value>(6,2,1,1)</value>
+ <key>y_per_div</key>
+ <value>10</value>
</param>
<param>
- <key>notebook</key>
- <value></value>
+ <key>y_divs</key>
+ <value>10</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(708, 388)</value>
+ <key>ref_level</key>
+ <value>10</value>
</param>
<param>
- <key>_rotation</key>
- <value>180</value>
+ <key>ref_scale</key>
+ <value>2.0</value>
</param>
- </block>
- <block>
- <key>variable_slider</key>
<param>
- <key>id</key>
- <value>phase_bw</value>
+ <key>fft_size</key>
+ <value>1024</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>fft_rate</key>
+ <value>30</value>
</param>
<param>
- <key>label</key>
- <value>Costas Loop (Phase) Bandwidth</value>
+ <key>peak_hold</key>
+ <value>False</value>
</param>
<param>
- <key>value</key>
- <value>0</value>
+ <key>average</key>
+ <value>False</value>
</param>
<param>
- <key>min</key>
+ <key>avg_alpha</key>
<value>0</value>
</param>
<param>
- <key>max</key>
- <value>0.1</value>
- </param>
- <param>
- <key>num_steps</key>
- <value>1000</value>
- </param>
- <param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
+ <key>win</key>
+ <value>None</value>
</param>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>win_size</key>
+ <value></value>
</param>
<param>
<key>grid_pos</key>
- <value>(7,2,1,1)</value>
+ <value></value>
</param>
<param>
<key>notebook</key>
- <value></value>
+ <value>notebook_0,0</value>
+ </param>
+ <param>
+ <key>freqvar</key>
+ <value>None</value>
</param>
<param>
<key>_coordinate</key>
- <value>(866, 313)</value>
+ <value>(349, 422)</value>
</param>
<param>
<key>_rotation</key>
- <value>0</value>
+ <value>180</value>
</param>
</block>
<block>
- <key>notebook</key>
+ <key>gr_multiply_const_vxx</key>
<param>
<key>id</key>
- <value>notebook_0</value>
+ <value>gr_multiply_const_vxx_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>style</key>
- <value>wx.NB_TOP</value>
- </param>
- <param>
- <key>labels</key>
- <value>['Synched Signal', 'Received Signal']</value>
+ <key>type</key>
+ <value>complex</value>
</param>
<param>
- <key>grid_pos</key>
- <value>(1,1,8,1)</value>
+ <key>const</key>
+ <value>sig_amp</value>
</param>
<param>
- <key>notebook</key>
- <value></value>
+ <key>vlen</key>
+ <value>1</value>
</param>
<param>
<key>_coordinate</key>
- <value>(9, 601)</value>
+ <value>(763, 96)</value>
</param>
<param>
<key>_rotation</key>
@@ -1186,109 +1191,104 @@
</param>
</block>
<block>
- <key>variable_slider</key>
+ <key>gr_throttle</key>
<param>
<key>id</key>
- <value>interpratio</value>
+ <value>gr_throttle_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>label</key>
- <value>Timing Offset</value>
+ <key>type</key>
+ <value>complex</value>
</param>
<param>
- <key>value</key>
- <value>1.00</value>
+ <key>samples_per_second</key>
+ <value>samp_rate</value>
</param>
<param>
- <key>min</key>
- <value>0.99</value>
+ <key>vlen</key>
+ <value>1</value>
</param>
<param>
- <key>max</key>
- <value>1.01</value>
+ <key>_coordinate</key>
+ <value>(961, 96)</value>
</param>
<param>
- <key>num_steps</key>
- <value>1000</value>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>pfb_arb_resampler_xxx</key>
+ <param>
+ <key>id</key>
+ <value>pfb_arb_resampler_xxx_0</value>
</param>
<param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>type</key>
+ <value>ccf</value>
</param>
<param>
- <key>grid_pos</key>
- <value>(3,2,1,1)</value>
+ <key>rrate</key>
+ <value>spb</value>
</param>
<param>
- <key>notebook</key>
- <value></value>
+ <key>taps</key>
+ <value>firdes.root_raised_cosine(32, 32, 1.0, 0.35, 44*32)</value>
+ </param>
+ <param>
+ <key>nfilts</key>
+ <value>32</value>
</param>
<param>
<key>_coordinate</key>
- <value>(60, 407)</value>
+ <value>(468, 72)</value>
</param>
<param>
<key>_rotation</key>
- <value>180</value>
+ <value>0</value>
</param>
</block>
<block>
- <key>variable_slider</key>
+ <key>digital_chunks_to_symbols_xx</key>
<param>
<key>id</key>
- <value>noise_amp</value>
+ <value>digital_chunks_to_symbols_xx_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>label</key>
- <value>Channel Noise</value>
- </param>
- <param>
- <key>value</key>
- <value>0</value>
- </param>
- <param>
- <key>min</key>
- <value>0</value>
- </param>
- <param>
- <key>max</key>
- <value>1.0</value>
- </param>
- <param>
- <key>num_steps</key>
- <value>1000</value>
+ <key>in_type</key>
+ <value>byte</value>
</param>
<param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
+ <key>out_type</key>
+ <value>complex</value>
</param>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>symbol_table</key>
+ <value>const.points()</value>
</param>
<param>
- <key>grid_pos</key>
- <value>(1,2,1,1)</value>
+ <key>dimension</key>
+ <value>1</value>
</param>
<param>
- <key>notebook</key>
- <value></value>
+ <key>num_ports</key>
+ <value>1</value>
</param>
<param>
<key>_coordinate</key>
- <value>(125, 284)</value>
+ <value>(217, 88)</value>
</param>
<param>
<key>_rotation</key>
@@ -1296,54 +1296,58 @@
</param>
</block>
<block>
- <key>variable_slider</key>
+ <key>options</key>
<param>
<key>id</key>
- <value>freq_offset</value>
+ <value>pam_sync</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>label</key>
- <value>Frequency Offset</value>
+ <key>title</key>
+ <value></value>
</param>
<param>
- <key>value</key>
- <value>0</value>
+ <key>author</key>
+ <value></value>
</param>
<param>
- <key>min</key>
- <value>-0.5</value>
+ <key>description</key>
+ <value></value>
</param>
<param>
- <key>max</key>
- <value>0.5</value>
+ <key>window_size</key>
+ <value>1280, 1024</value>
</param>
<param>
- <key>num_steps</key>
- <value>1000</value>
+ <key>generate_options</key>
+ <value>wx_gui</value>
</param>
<param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
+ <key>category</key>
+ <value>Custom</value>
</param>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>run_options</key>
+ <value>prompt</value>
</param>
<param>
- <key>grid_pos</key>
- <value>(2,2,1,1)</value>
+ <key>run</key>
+ <value>True</value>
</param>
<param>
- <key>notebook</key>
+ <key>max_nouts</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>realtime_scheduling</key>
<value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(6, 284)</value>
+ <value>(-1, 0)</value>
</param>
<param>
<key>_rotation</key>
@@ -1351,80 +1355,80 @@
</param>
</block>
<connection>
- <source_block_id>gr_channel_model_0</source_block_id>
- <sink_block_id>virtual_sink_0</sink_block_id>
+ <source_block_id>digital_costas_loop_cc_0</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>digital_fll_band_edge_cc_0</source_block_id>
- <sink_block_id>gr_pfb_clock_sync_xxx_0</sink_block_id>
+ <sink_block_id>wxgui_fftsink2_0_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>gr_pfb_clock_sync_xxx_0</source_block_id>
- <sink_block_id>digital_costas_loop_cc_0</sink_block_id>
+ <source_block_id>virtual_source_0</source_block_id>
+ <sink_block_id>wxgui_fftsink2_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>digital_costas_loop_cc_0</source_block_id>
- <sink_block_id>wxgui_scopesink2_0</sink_block_id>
+ <source_block_id>virtual_source_0</source_block_id>
+ <sink_block_id>wxgui_scopesink2_0_0_1</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>blks2_pfb_arb_resampler_ccf_0</source_block_id>
- <sink_block_id>gr_multiply_const_vxx_0</sink_block_id>
+ <source_block_id>gr_multiply_const_vxx_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_chunks_to_symbols_xx</source_block_id>
- <sink_block_id>blks2_pfb_arb_resampler_ccf_0</sink_block_id>
+ <source_block_id>random_source_x</source_block_id>
+ <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>gr_channel_model_0</source_block_id>
- <sink_block_id>digital_fll_band_edge_cc_0</sink_block_id>
+ <source_block_id>digital_fll_band_edge_cc_0</source_block_id>
+ <sink_block_id>digital_pfb_clock_sync_xxx_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>digital_fll_band_edge_cc_0</source_block_id>
- <sink_block_id>wxgui_fftsink2_0_0</sink_block_id>
+ <source_block_id>digital_pfb_clock_sync_xxx_0</source_block_id>
+ <sink_block_id>digital_costas_loop_cc_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>virtual_source_0</source_block_id>
- <sink_block_id>wxgui_fftsink2_0</sink_block_id>
+ <source_block_id>channel_model_0</source_block_id>
+ <sink_block_id>virtual_sink_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>virtual_source_0</source_block_id>
- <sink_block_id>wxgui_scopesink2_0_0_1</sink_block_id>
+ <source_block_id>channel_model_0</source_block_id>
+ <sink_block_id>digital_fll_band_edge_cc_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>random_source_x</source_block_id>
- <sink_block_id>gr_chunks_to_symbols_xx</sink_block_id>
+ <source_block_id>gr_throttle_0</source_block_id>
+ <sink_block_id>channel_model_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_channel_model_0</sink_block_id>
+ <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
+ <sink_block_id>pfb_arb_resampler_xxx_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>gr_multiply_const_vxx_0</source_block_id>
- <sink_block_id>gr_throttle_0</sink_block_id>
+ <source_block_id>pfb_arb_resampler_xxx_0</source_block_id>
+ <sink_block_id>gr_multiply_const_vxx_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
diff --git a/gr-digital/examples/demod/pam_timing.grc b/gr-digital/examples/demod/pam_timing.grc
index 14a7d403e3..17ab0fb8ca 100644
--- a/gr-digital/examples/demod/pam_timing.grc
+++ b/gr-digital/examples/demod/pam_timing.grc
@@ -1,65 +1,6 @@
<?xml version='1.0' encoding='ASCII'?>
<flow_graph>
- <timestamp>Thu Jul 5 17:55:51 2012</timestamp>
- <block>
- <key>options</key>
- <param>
- <key>id</key>
- <value>top_block</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>title</key>
- <value></value>
- </param>
- <param>
- <key>author</key>
- <value></value>
- </param>
- <param>
- <key>description</key>
- <value></value>
- </param>
- <param>
- <key>window_size</key>
- <value>1280, 1024</value>
- </param>
- <param>
- <key>generate_options</key>
- <value>wx_gui</value>
- </param>
- <param>
- <key>category</key>
- <value>Custom</value>
- </param>
- <param>
- <key>run_options</key>
- <value>prompt</value>
- </param>
- <param>
- <key>run</key>
- <value>True</value>
- </param>
- <param>
- <key>max_nouts</key>
- <value>0</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>
+ <timestamp>Mon Jul 16 21:25:37 2012</timestamp>
<block>
<key>gr_uchar_to_float</key>
<param>
@@ -99,29 +40,6 @@
</param>
</block>
<block>
- <key>variable</key>
- <param>
- <key>id</key>
- <value>samp_rate</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>value</key>
- <value>32000</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(128, 9)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
<key>variable_slider</key>
<param>
<key>id</key>
@@ -542,61 +460,6 @@
<key>variable_slider</key>
<param>
<key>id</key>
- <value>beta</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>label</key>
- <value>Timing Beta</value>
- </param>
- <param>
- <key>value</key>
- <value>0</value>
- </param>
- <param>
- <key>min</key>
- <value>0.0</value>
- </param>
- <param>
- <key>max</key>
- <value>0.1</value>
- </param>
- <param>
- <key>num_steps</key>
- <value>1000</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>(668, 5)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>180</value>
- </param>
- </block>
- <block>
- <key>variable_slider</key>
- <param>
- <key>id</key>
<value>alpha</value>
</param>
<param>
@@ -652,7 +515,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>pam_amp</value>
+ <value>rrctaps</value>
</param>
<param>
<key>_enabled</key>
@@ -660,11 +523,11 @@
</param>
<param>
<key>value</key>
- <value>2</value>
+ <value>firdes.root_raised_cosine(nfilts,1.0,1.0/(spb*nfilts), .35, int(11*spb*nfilts))</value>
</param>
<param>
<key>_coordinate</key>
- <value>(223, 9)</value>
+ <value>(513, 679)</value>
</param>
<param>
<key>_rotation</key>
@@ -675,7 +538,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>sig_amp</value>
+ <value>spb</value>
</param>
<param>
<key>_enabled</key>
@@ -683,11 +546,11 @@
</param>
<param>
<key>value</key>
- <value>1</value>
+ <value>4.2563</value>
</param>
<param>
<key>_coordinate</key>
- <value>(315, 9)</value>
+ <value>(42, 840)</value>
</param>
<param>
<key>_rotation</key>
@@ -770,6 +633,61 @@
</param>
</block>
<block>
+ <key>digital_pfb_clock_sync_xxx</key>
+ <param>
+ <key>id</key>
+ <value>digital_pfb_clock_sync_xxx_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>ccf</value>
+ </param>
+ <param>
+ <key>sps</key>
+ <value>spb</value>
+ </param>
+ <param>
+ <key>alpha</key>
+ <value>alpha</value>
+ </param>
+ <param>
+ <key>beta</key>
+ <value>beta</value>
+ </param>
+ <param>
+ <key>taps</key>
+ <value>rrctaps</value>
+ </param>
+ <param>
+ <key>filter_size</key>
+ <value>nfilts</value>
+ </param>
+ <param>
+ <key>init_phase</key>
+ <value>nfilts/2</value>
+ </param>
+ <param>
+ <key>max_dev</key>
+ <value>1.5</value>
+ </param>
+ <param>
+ <key>osps</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(492, 519)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
<key>gr_throttle</key>
<param>
<key>id</key>
@@ -801,74 +719,96 @@
</param>
</block>
<block>
- <key>wxgui_scopesink2</key>
+ <key>channel_model</key>
<param>
<key>id</key>
- <value>wxgui_scopesink2_0_0_0</value>
+ <value>channel_model_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>float</value>
+ <key>noise_voltage</key>
+ <value>noise_amp</value>
</param>
<param>
- <key>title</key>
- <value>Scope Plot</value>
+ <key>freq_offset</key>
+ <value>freq_offset</value>
</param>
<param>
- <key>samp_rate</key>
- <value>samp_rate</value>
+ <key>epsilon</key>
+ <value>interpratio</value>
</param>
<param>
- <key>v_scale</key>
- <value>9</value>
+ <key>taps</key>
+ <value>1.0</value>
</param>
<param>
- <key>v_offset</key>
+ <key>seed</key>
<value>0</value>
</param>
<param>
- <key>t_scale</key>
+ <key>_coordinate</key>
+ <value>(76, 543)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
<value>0</value>
</param>
+ </block>
+ <block>
+ <key>gr_float_to_complex</key>
<param>
- <key>ac_couple</key>
- <value>False</value>
+ <key>id</key>
+ <value>gr_float_to_complex_0</value>
</param>
<param>
- <key>xy_mode</key>
- <value>False</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>num_inputs</key>
+ <key>vlen</key>
<value>1</value>
</param>
<param>
- <key>win_size</key>
- <value></value>
+ <key>_coordinate</key>
+ <value>(590, 184)</value>
</param>
<param>
- <key>grid_pos</key>
- <value></value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
+ </block>
+ <block>
+ <key>pfb_arb_resampler_xxx</key>
<param>
- <key>notebook</key>
- <value>notebook_0,1</value>
+ <key>id</key>
+ <value>pfb_arb_resampler_xxx_0</value>
</param>
<param>
- <key>trig_mode</key>
- <value>gr.gr_TRIG_MODE_AUTO</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>y_axis_label</key>
- <value>Counts</value>
+ <key>type</key>
+ <value>ccf</value>
+ </param>
+ <param>
+ <key>rrate</key>
+ <value>spb</value>
+ </param>
+ <param>
+ <key>taps</key>
+ <value>firdes.root_raised_cosine(32, 32, 1.0, 0.35, 44*32)</value>
+ </param>
+ <param>
+ <key>nfilts</key>
+ <value>32</value>
</param>
<param>
<key>_coordinate</key>
- <value>(1112, 881)</value>
+ <value>(788, 173)</value>
</param>
<param>
<key>_rotation</key>
@@ -876,22 +816,30 @@
</param>
</block>
<block>
- <key>variable</key>
+ <key>gr_multiply_const_vxx</key>
<param>
<key>id</key>
- <value>rrctaps</value>
+ <value>gr_multiply_const_vxx_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>firdes.root_raised_cosine(nfilts,1.0,1.0/(spb*nfilts), .35, int(11*spb*nfilts))</value>
+ <key>type</key>
+ <value>complex</value>
+ </param>
+ <param>
+ <key>const</key>
+ <value>sig_amp</value>
+ </param>
+ <param>
+ <key>vlen</key>
+ <value>1</value>
</param>
<param>
<key>_coordinate</key>
- <value>(513, 679)</value>
+ <value>(714, 382)</value>
</param>
<param>
<key>_rotation</key>
@@ -914,7 +862,7 @@
</param>
<param>
<key>title</key>
- <value>Error</value>
+ <value>Transmitted Signal</value>
</param>
<param>
<key>samp_rate</key>
@@ -966,7 +914,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(1115, 358)</value>
+ <value>(1114, 342)</value>
</param>
<param>
<key>_rotation</key>
@@ -974,92 +922,74 @@
</param>
</block>
<block>
- <key>gr_float_to_complex</key>
+ <key>wxgui_scopesink2</key>
<param>
<key>id</key>
- <value>gr_float_to_complex_0</value>
+ <value>wxgui_scopesink2_0_0_0_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(590, 184)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>blks2_pfb_arb_resampler_ccf</key>
- <param>
- <key>id</key>
- <value>blks2_pfb_arb_resampler_ccf_0</value>
+ <key>type</key>
+ <value>float</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>title</key>
+ <value>PFB Rate</value>
</param>
<param>
- <key>rate</key>
- <value>spb</value>
+ <key>samp_rate</key>
+ <value>samp_rate</value>
</param>
<param>
- <key>taps</key>
- <value>firdes.root_raised_cosine(32, 32, 1.0, 0.35, 44*32)</value>
+ <key>v_scale</key>
+ <value>1.25</value>
</param>
<param>
- <key>size</key>
- <value>32</value>
+ <key>v_offset</key>
+ <value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(816, 181)</value>
+ <key>t_scale</key>
+ <value>0</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>ac_couple</key>
+ <value>False</value>
</param>
- </block>
- <block>
- <key>gr_channel_model</key>
<param>
- <key>id</key>
- <value>gr_channel_model_0</value>
+ <key>xy_mode</key>
+ <value>False</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>num_inputs</key>
+ <value>1</value>
</param>
<param>
- <key>noise_voltage</key>
- <value>noise_amp</value>
+ <key>win_size</key>
+ <value></value>
</param>
<param>
- <key>freq_offset</key>
- <value>freq_offset</value>
+ <key>grid_pos</key>
+ <value></value>
</param>
<param>
- <key>epsilon</key>
- <value>interpratio</value>
+ <key>notebook</key>
+ <value>notebook_0,2</value>
</param>
<param>
- <key>taps</key>
- <value>1.0</value>
+ <key>trig_mode</key>
+ <value>gr.gr_TRIG_MODE_AUTO</value>
</param>
<param>
- <key>seed</key>
- <value>42</value>
+ <key>y_axis_label</key>
+ <value>Counts</value>
</param>
<param>
<key>_coordinate</key>
- <value>(59, 543)</value>
+ <value>(1080, 751)</value>
</param>
<param>
<key>_rotation</key>
@@ -1067,10 +997,10 @@
</param>
</block>
<block>
- <key>gr_multiply_const_vxx</key>
+ <key>wxgui_scopesink2</key>
<param>
<key>id</key>
- <value>gr_multiply_const_vxx_0</value>
+ <value>wxgui_scopesink2_0_0</value>
</param>
<param>
<key>_enabled</key>
@@ -1078,97 +1008,63 @@
</param>
<param>
<key>type</key>
- <value>complex</value>
+ <value>float</value>
</param>
<param>
- <key>const</key>
- <value>sig_amp</value>
+ <key>title</key>
+ <value>PFB Error</value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>samp_rate</key>
+ <value>samp_rate</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(714, 382)</value>
+ <key>v_scale</key>
+ <value>3</value>
</param>
<param>
- <key>_rotation</key>
+ <key>v_offset</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>variable</key>
<param>
- <key>id</key>
- <value>spb</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>value</key>
- <value>4.2563</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(42, 840)</value>
- </param>
- <param>
- <key>_rotation</key>
+ <key>t_scale</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>gr_pfb_clock_sync_xxx</key>
- <param>
- <key>id</key>
- <value>gr_pfb_clock_sync_xxx_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>type</key>
- <value>ccf</value>
- </param>
<param>
- <key>sps</key>
- <value>spb</value>
+ <key>ac_couple</key>
+ <value>False</value>
</param>
<param>
- <key>alpha</key>
- <value>alpha</value>
+ <key>xy_mode</key>
+ <value>False</value>
</param>
<param>
- <key>beta</key>
- <value>beta</value>
+ <key>num_inputs</key>
+ <value>1</value>
</param>
<param>
- <key>taps</key>
- <value>rrctaps</value>
+ <key>win_size</key>
+ <value></value>
</param>
<param>
- <key>filter_size</key>
- <value>nfilts</value>
+ <key>grid_pos</key>
+ <value></value>
</param>
<param>
- <key>init_phase</key>
- <value>16</value>
+ <key>notebook</key>
+ <value>notebook_0,0</value>
</param>
<param>
- <key>max_dev</key>
- <value>1.5</value>
+ <key>trig_mode</key>
+ <value>gr.gr_TRIG_MODE_AUTO</value>
</param>
<param>
- <key>osps</key>
- <value>1</value>
+ <key>y_axis_label</key>
+ <value>Counts</value>
</param>
<param>
<key>_coordinate</key>
- <value>(512, 527)</value>
+ <value>(1114, 615)</value>
</param>
<param>
<key>_rotation</key>
@@ -1179,7 +1075,7 @@
<key>wxgui_scopesink2</key>
<param>
<key>id</key>
- <value>wxgui_scopesink2_0_0</value>
+ <value>wxgui_scopesink2_0_0_0</value>
</param>
<param>
<key>_enabled</key>
@@ -1191,7 +1087,7 @@
</param>
<param>
<key>title</key>
- <value>Error</value>
+ <value>PFB Phase</value>
</param>
<param>
<key>samp_rate</key>
@@ -1199,7 +1095,7 @@
</param>
<param>
<key>v_scale</key>
- <value>3</value>
+ <value>9</value>
</param>
<param>
<key>v_offset</key>
@@ -1231,7 +1127,7 @@
</param>
<param>
<key>notebook</key>
- <value>notebook_0,0</value>
+ <value>notebook_0,1</value>
</param>
<param>
<key>trig_mode</key>
@@ -1243,7 +1139,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(1114, 615)</value>
+ <value>(1112, 881)</value>
</param>
<param>
<key>_rotation</key>
@@ -1251,74 +1147,182 @@
</param>
</block>
<block>
- <key>wxgui_scopesink2</key>
+ <key>variable_slider</key>
<param>
<key>id</key>
- <value>wxgui_scopesink2_0_0_0_0</value>
+ <value>beta</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>float</value>
+ <key>label</key>
+ <value>Timing Beta</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>min</key>
+ <value>0.0</value>
+ </param>
+ <param>
+ <key>max</key>
+ <value>0.1</value>
+ </param>
+ <param>
+ <key>num_steps</key>
+ <value>1000</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>(673, 5)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>180</value>
+ </param>
+ </block>
+ <block>
+ <key>options</key>
+ <param>
+ <key>id</key>
+ <value>pam_timing</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>title</key>
- <value>Scope Plot</value>
+ <value></value>
</param>
<param>
- <key>samp_rate</key>
- <value>samp_rate</value>
+ <key>author</key>
+ <value></value>
</param>
<param>
- <key>v_scale</key>
- <value>1.25</value>
+ <key>description</key>
+ <value></value>
</param>
<param>
- <key>v_offset</key>
+ <key>window_size</key>
+ <value>1280, 1024</value>
+ </param>
+ <param>
+ <key>generate_options</key>
+ <value>wx_gui</value>
+ </param>
+ <param>
+ <key>category</key>
+ <value>Custom</value>
+ </param>
+ <param>
+ <key>run_options</key>
+ <value>prompt</value>
+ </param>
+ <param>
+ <key>run</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>max_nouts</key>
<value>0</value>
</param>
<param>
- <key>t_scale</key>
+ <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>ac_couple</key>
- <value>False</value>
+ <key>id</key>
+ <value>pam_amp</value>
</param>
<param>
- <key>xy_mode</key>
- <value>False</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>num_inputs</key>
- <value>1</value>
+ <key>value</key>
+ <value>2</value>
</param>
<param>
- <key>win_size</key>
- <value></value>
+ <key>_coordinate</key>
+ <value>(277, 12)</value>
</param>
<param>
- <key>grid_pos</key>
- <value></value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
+ </block>
+ <block>
+ <key>variable</key>
<param>
- <key>notebook</key>
- <value>notebook_0,2</value>
+ <key>id</key>
+ <value>samp_rate</value>
</param>
<param>
- <key>trig_mode</key>
- <value>gr.gr_TRIG_MODE_AUTO</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>y_axis_label</key>
- <value>Counts</value>
+ <key>value</key>
+ <value>32000</value>
</param>
<param>
<key>_coordinate</key>
- <value>(1080, 751)</value>
+ <value>(182, 12)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable</key>
+ <param>
+ <key>id</key>
+ <value>sig_amp</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(369, 12)</value>
</param>
<param>
<key>_rotation</key>
@@ -1362,12 +1366,6 @@
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>gr_channel_model_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_0</source_block_id>
<sink_block_id>gr_float_to_complex_0</sink_block_id>
<source_key>0</source_key>
@@ -1380,57 +1378,63 @@
<sink_key>1</sink_key>
</connection>
<connection>
- <source_block_id>gr_pfb_clock_sync_xxx_0</source_block_id>
- <sink_block_id>wxgui_scopesink2_0</sink_block_id>
+ <source_block_id>gr_multiply_const_vxx_0</source_block_id>
+ <sink_block_id>wxgui_scopesink2_0_0_1</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_pfb_clock_sync_xxx_0</sink_block_id>
+ <sink_block_id>digital_pfb_clock_sync_xxx_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>gr_pfb_clock_sync_xxx_0</source_block_id>
+ <source_block_id>digital_pfb_clock_sync_xxx_0</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>digital_pfb_clock_sync_xxx_0</source_block_id>
<sink_block_id>wxgui_scopesink2_0_0</sink_block_id>
<source_key>1</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>gr_pfb_clock_sync_xxx_0</source_block_id>
+ <source_block_id>digital_pfb_clock_sync_xxx_0</source_block_id>
+ <sink_block_id>wxgui_scopesink2_0_0_0_0</sink_block_id>
+ <source_key>2</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>digital_pfb_clock_sync_xxx_0</source_block_id>
<sink_block_id>wxgui_scopesink2_0_0_0</sink_block_id>
<source_key>3</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>gr_pfb_clock_sync_xxx_0</source_block_id>
- <sink_block_id>wxgui_scopesink2_0_0_0_0</sink_block_id>
- <source_key>2</source_key>
+ <source_block_id>channel_model_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_const_vxx_0</source_block_id>
- <sink_block_id>wxgui_scopesink2_0_0_1</sink_block_id>
+ <sink_block_id>channel_model_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>gr_float_to_complex_0</source_block_id>
- <sink_block_id>blks2_pfb_arb_resampler_ccf_0</sink_block_id>
+ <sink_block_id>pfb_arb_resampler_xxx_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>blks2_pfb_arb_resampler_ccf_0</source_block_id>
+ <source_block_id>pfb_arb_resampler_xxx_0</source_block_id>
<sink_block_id>gr_multiply_const_vxx_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
- <connection>
- <source_block_id>gr_multiply_const_vxx_0</source_block_id>
- <sink_block_id>gr_channel_model_0</sink_block_id>
- <source_key>0</source_key>
- <sink_key>0</sink_key>
- </connection>
</flow_graph>
diff --git a/gr-digital/examples/example_costas.py b/gr-digital/examples/example_costas.py
index aef0196cc0..30dde60503 100755
--- a/gr-digital/examples/example_costas.py
+++ b/gr-digital/examples/example_costas.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
-from gnuradio import gr, digital
+from gnuradio import gr, digital, filter
from gnuradio import eng_notation
from gnuradio.eng_option import eng_option
from optparse import OptionParser
@@ -28,8 +28,8 @@ class example_costas(gr.top_block):
data = scipy.exp(1j*poffset) * data
self.src = gr.vector_source_c(data.tolist(), False)
- self.rrc = gr.interp_fir_filter_ccf(sps, rrc_taps)
- self.chn = gr.channel_model(noise, foffset, toffset)
+ self.rrc = filter.interp_fir_filter_ccf(sps, rrc_taps)
+ self.chn = filter.channel_model(noise, foffset, toffset)
self.cst = digital.costas_loop_cc(bw, 2)
self.vsnk_src = gr.vector_sink_c()
diff --git a/gr-digital/examples/example_fll.py b/gr-digital/examples/example_fll.py
index 3b75b5a758..93535f4175 100755
--- a/gr-digital/examples/example_fll.py
+++ b/gr-digital/examples/example_fll.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
-from gnuradio import gr, digital
+from gnuradio import gr, digital, filter
from gnuradio import eng_notation
from gnuradio.eng_option import eng_option
from optparse import OptionParser
@@ -28,8 +28,8 @@ class example_fll(gr.top_block):
data = scipy.exp(1j*poffset) * data
self.src = gr.vector_source_c(data.tolist(), False)
- self.rrc = gr.interp_fir_filter_ccf(sps, rrc_taps)
- self.chn = gr.channel_model(noise, foffset, toffset)
+ self.rrc = filter.interp_fir_filter_ccf(sps, rrc_taps)
+ self.chn = filter.channel_model(noise, foffset, toffset)
self.fll = digital.fll_band_edge_cc(sps, rolloff, ntaps, bw)
self.vsnk_src = gr.vector_sink_c()
diff --git a/gr-digital/examples/example_timing.py b/gr-digital/examples/example_timing.py
index fd86acfb16..2b636b4e45 100755
--- a/gr-digital/examples/example_timing.py
+++ b/gr-digital/examples/example_timing.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
-from gnuradio import gr, digital
+from gnuradio import gr, digital, filter
from gnuradio import eng_notation
from gnuradio.eng_option import eng_option
from optparse import OptionParser
@@ -36,13 +36,13 @@ class example_timing(gr.top_block):
data = scipy.exp(1j*poffset) * data
self.src = gr.vector_source_c(data.tolist(), False)
- self.rrc = gr.interp_fir_filter_ccf(sps, rrc_taps)
- self.chn = gr.channel_model(noise, foffset, toffset)
- self.off = gr.fractional_interpolator_cc(0.20, 1.0)
+ self.rrc = filter.interp_fir_filter_ccf(sps, rrc_taps)
+ self.chn = filter.channel_model(noise, foffset, toffset)
+ self.off = filter.fractional_interpolator_cc(0.20, 1.0)
if mode == 0:
- self.clk = gr.pfb_clock_sync_ccf(sps, gain, rrc_taps_rx,
- nfilts, nfilts//2, 3.5)
+ self.clk = digital.pfb_clock_sync_ccf(sps, gain, rrc_taps_rx,
+ nfilts, nfilts//2, 3.5)
self.taps = self.clk.get_taps()
self.dtaps = self.clk.get_diff_taps()
@@ -164,6 +164,7 @@ def main():
for i,d in enumerate(diff_taps):
D = 20.0*scipy.log10(abs(fftpack.fftshift(fftpack.fft(d, 10000))))
+ #D = 20.0*scipy.log10(abs(scipy.fft(d, 10000)))
s31.plot(t[i::nfilts].real, d, "-o")
s32.plot(D)
diff --git a/gr-digital/examples/narrowband/benchmark_add_channel.py b/gr-digital/examples/narrowband/benchmark_add_channel.py
index 841833a08f..8f2e544fdb 100755
--- a/gr-digital/examples/narrowband/benchmark_add_channel.py
+++ b/gr-digital/examples/narrowband/benchmark_add_channel.py
@@ -20,7 +20,7 @@
# Boston, MA 02110-1301, USA.
#
-from gnuradio import gr
+from gnuradio import gr, filter
from gnuradio import eng_notation
from gnuradio.eng_option import eng_option
from optparse import OptionParser
@@ -43,8 +43,8 @@ class my_top_block(gr.top_block):
self.src = gr.file_source(gr.sizeof_gr_complex, ifile)
#self.throttle = gr.throttle(gr.sizeof_gr_complex, options.sample_rate)
- self.channel = gr.channel_model(noise_voltage, frequency_offset,
- time_offset, noise_seed=random.randint(0,100000))
+ self.channel = filter.channel_model(noise_voltage, frequency_offset,
+ time_offset, noise_seed=random.randint(0,100000))
self.phase = gr.multiply_const_cc(complex(math.cos(phase_offset),
math.sin(phase_offset)))
self.snk = gr.file_sink(gr.sizeof_gr_complex, ofile)
diff --git a/gr-digital/examples/narrowband/digital_bert_rx.py b/gr-digital/examples/narrowband/digital_bert_rx.py
index daefc5116d..fd04901cb7 100755
--- a/gr-digital/examples/narrowband/digital_bert_rx.py
+++ b/gr-digital/examples/narrowband/digital_bert_rx.py
@@ -65,8 +65,9 @@ class bert_receiver(gr.hier_block2):
self._bitrate = bitrate
- self._demod = digital.generic_demod(constellation, samples_per_symbol,
- differential, excess_bw, gray_coded,
+ self._demod = digital.generic_demod(constellation, differential,
+ samples_per_symbol,
+ gray_coded, excess_bw,
freq_bw, timing_bw, phase_bw,
verbose, log)
diff --git a/gr-digital/examples/narrowband/digital_bert_tx.py b/gr-digital/examples/narrowband/digital_bert_tx.py
index 7caccdf42b..ff8bf9f104 100755
--- a/gr-digital/examples/narrowband/digital_bert_tx.py
+++ b/gr-digital/examples/narrowband/digital_bert_tx.py
@@ -45,8 +45,9 @@ class bert_transmit(gr.hier_block2):
self._bits = gr.vector_source_b([1,], True) # Infinite stream of ones
self._scrambler = digital.scrambler_bb(0x8A, 0x7F, 7) # CCSDS 7-bit scrambler
- self._mod = digital.generic_mod(constellation, samples_per_symbol,
- differential, excess_bw, gray_coded,
+ self._mod = digital.generic_mod(constellation, differential,
+ samples_per_symbol,
+ gray_coded, excess_bw,
verbose, log)
self._pack = gr.unpacked_to_packed_bb(self._mod.bits_per_symbol(), gr.GR_MSB_FIRST)
diff --git a/gr-digital/examples/narrowband/receive_path.py b/gr-digital/examples/narrowband/receive_path.py
index 1f93105068..9aa6dc488d 100644
--- a/gr-digital/examples/narrowband/receive_path.py
+++ b/gr-digital/examples/narrowband/receive_path.py
@@ -20,7 +20,7 @@
# Boston, MA 02110-1301, USA.
#
-from gnuradio import gr, gru
+from gnuradio import gr, gru, filter
from gnuradio import eng_notation
from gnuradio import digital
@@ -61,12 +61,12 @@ class receive_path(gr.hier_block2):
# Design filter to get actual channel we want
sw_decim = 1
- chan_coeffs = gr.firdes.low_pass (1.0, # gain
- sw_decim * self.samples_per_symbol(), # sampling rate
- self._chbw_factor, # midpoint of trans. band
- 0.5, # width of trans. band
- gr.firdes.WIN_HANN) # filter type
- self.channel_filter = gr.fft_filter_ccc(sw_decim, chan_coeffs)
+ chan_coeffs = filter.firdes.low_pass(1.0, # gain
+ sw_decim * self.samples_per_symbol(), # sampling rate
+ self._chbw_factor, # midpoint of trans. band
+ 0.5, # width of trans. band
+ gr.firdes.WIN_HANN) # filter type
+ self.channel_filter = filter.fft_filter_ccc(sw_decim, chan_coeffs)
# receiver
self.packet_receiver = \
diff --git a/gr-digital/examples/narrowband/tx_voice.py b/gr-digital/examples/narrowband/tx_voice.py
index 3d767a0770..400ab7a587 100755
--- a/gr-digital/examples/narrowband/tx_voice.py
+++ b/gr-digital/examples/narrowband/tx_voice.py
@@ -25,6 +25,7 @@ from gnuradio import eng_notation
from gnuradio.eng_option import eng_option
from optparse import OptionParser
+from gnuradio import filter
from gnuradio import digital
from gnuradio import vocoder
@@ -84,7 +85,7 @@ class my_top_block(gr.top_block):
self.sink = gr.null_sink(gr.sizeof_gr_complex)
rrate = 1
- self.resampler = blks2.pfb_arb_resampler_ccf(rrate)
+ self.resampler = filter.pfb.arb_resampler_ccf(rrate)
self.connect(self.audio_rx)
self.connect(self.txpath, self.resampler, self.sink)
diff --git a/gr-digital/examples/snr_estimators.py b/gr-digital/examples/snr_estimators.py
index 432abd4553..0603da131d 100755
--- a/gr-digital/examples/snr_estimators.py
+++ b/gr-digital/examples/snr_estimators.py
@@ -15,7 +15,7 @@ except ImportError:
print "Error: Program requires Matplotlib (matplotlib.sourceforge.net)."
sys.exit(1)
-from gnuradio import gr, digital
+from gnuradio import gr, digital, filter
from optparse import OptionParser
from gnuradio.eng_option import eng_option
@@ -147,7 +147,7 @@ def main():
gr_src = gr.vector_source_c(bits.tolist(), False)
gr_snr = digital.mpsk_snr_est_cc(gr_est, ntag, 0.001)
- gr_chn = gr.channel_model(1.0/scale)
+ gr_chn = filter.channel_model(1.0/scale)
gr_snk = gr.null_sink(gr.sizeof_gr_complex)
tb = gr.top_block()
tb.connect(gr_src, gr_chn, gr_snr, gr_snk)
diff --git a/gr-digital/include/digital_cpmmod_bc.h b/gr-digital/include/digital_cpmmod_bc.h
index f0f11ee30e..55837230cb 100644
--- a/gr-digital/include/digital_cpmmod_bc.h
+++ b/gr-digital/include/digital_cpmmod_bc.h
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2010 Free Software Foundation, Inc.
+ * Copyright 2010,2012 Free Software Foundation, Inc.
*
* This file is part of GNU Radio
*
@@ -26,10 +26,9 @@
#include <digital_api.h>
#include <gr_hier_block2.h>
#include <gr_char_to_float.h>
-#include <gr_interp_fir_filter_fff.h>
#include <gr_frequency_modulator_fc.h>
#include <gr_cpm.h>
-
+#include <filter/interp_fir_filter_fff.h>
class digital_cpmmod_bc;
typedef boost::shared_ptr<digital_cpmmod_bc> digital_cpmmod_bc_sptr;
@@ -81,7 +80,7 @@ class DIGITAL_API digital_cpmmod_bc : public gr_hier_block2
std::vector<float> d_taps;
gr_char_to_float_sptr d_char_to_float;
- gr_interp_fir_filter_fff_sptr d_pulse_shaper;
+ gr::filter::interp_fir_filter_fff::sptr d_pulse_shaper;
gr_frequency_modulator_fc_sptr d_fm;
protected:
diff --git a/gr-digital/include/digital_fll_band_edge_cc.h b/gr-digital/include/digital_fll_band_edge_cc.h
index 68083bbaeb..41ec3ec654 100644
--- a/gr-digital/include/digital_fll_band_edge_cc.h
+++ b/gr-digital/include/digital_fll_band_edge_cc.h
@@ -27,11 +27,7 @@
#include <digital_api.h>
#include <gr_sync_block.h>
#include <gri_control_loop.h>
-#include <gr_fir_util.h>
-#include <gr_fir_ccc.h>
-
-typedef gr_fir_ccc* (*fir_maker_t)(const std::vector<gr_complex> &taps);
-typedef gr_fir_ccc filter_t;
+#include <filter/fir_filter.h>
class digital_fll_band_edge_cc;
typedef boost::shared_ptr<digital_fll_band_edge_cc> digital_fll_band_edge_cc_sptr;
@@ -116,10 +112,10 @@ class DIGITAL_API digital_fll_band_edge_cc :
std::vector<gr_complex> d_taps_lower;
std::vector<gr_complex> d_taps_upper;
bool d_updated;
- filter_t* d_filter_lower;
- filter_t* d_filter_upper;
std::vector<gr_complex> d_output_hist;
std::vector<gr_complex> d_fllbuffer;
+ gr::filter::kernel::fir_filter_ccc* d_filter_lower;
+ gr::filter::kernel::fir_filter_ccc* d_filter_upper;
/*!
* Build the FLL
diff --git a/gr-digital/include/digital_gmskmod_bc.h b/gr-digital/include/digital_gmskmod_bc.h
index 9f378c8a70..b47f35879f 100644
--- a/gr-digital/include/digital_gmskmod_bc.h
+++ b/gr-digital/include/digital_gmskmod_bc.h
@@ -53,8 +53,9 @@ digital_make_gmskmod_bc(unsigned samples_per_sym=2,
*/
class DIGITAL_API digital_gmskmod_bc : public digital_cpmmod_bc
{
- friend DIGITAL_API digital_gmskmod_bc_sptr digital_make_gmskmod_bc(unsigned samples_per_sym,
- double bt, unsigned L);
+ friend DIGITAL_API digital_gmskmod_bc_sptr
+ digital_make_gmskmod_bc(unsigned samples_per_sym,
+ double bt, unsigned L);
digital_gmskmod_bc(unsigned samples_per_sym,
double bt, unsigned L);
};
diff --git a/gr-digital/include/digital_kurtotic_equalizer_cc.h b/gr-digital/include/digital_kurtotic_equalizer_cc.h
index fed88c3741..c18d91560c 100644
--- a/gr-digital/include/digital_kurtotic_equalizer_cc.h
+++ b/gr-digital/include/digital_kurtotic_equalizer_cc.h
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2011 Free Software Foundation, Inc.
+ * Copyright 2011,2012 Free Software Foundation, Inc.
*
* This file is part of GNU Radio
*
@@ -24,9 +24,11 @@
#define INCLUDED_DIGITAL_KURTOTIC_EQUALIZER_CC_H
#include <digital_api.h>
-#include <gr_adaptive_fir_ccc.h>
+#include <gr_sync_decimator.h>
+#include <filter/adaptive_fir.h>
#include <gr_math.h>
#include <iostream>
+#include <stdexcept>
class digital_kurtotic_equalizer_cc;
typedef boost::shared_ptr<digital_kurtotic_equalizer_cc> digital_kurtotic_equalizer_cc_sptr;
@@ -39,11 +41,14 @@ digital_make_kurtotic_equalizer_cc(int num_taps, float mu);
* \ingroup eq_blk
* \ingroup digital
*
+ * WARNING: This block does not yet work.
+ *
* "Y. Guo, J. Zhao, Y. Sun, "Sign kurtosis maximization based blind
* equalization algorithm," IEEE Conf. on Control, Automation,
* Robotics and Vision, Vol. 3, Dec. 2004, pp. 2052 - 2057."
*/
-class DIGITAL_API digital_kurtotic_equalizer_cc : public gr_adaptive_fir_ccc
+class DIGITAL_API digital_kurtotic_equalizer_cc :
+ public gr_sync_decimator, public gr::filter::kernel::adaptive_fir_ccc
{
private:
float d_mu;
@@ -51,8 +56,9 @@ private:
gr_complex d_q, d_u;
float d_alpha_p, d_alpha_q, d_alpha_m;
- friend DIGITAL_API digital_kurtotic_equalizer_cc_sptr digital_make_kurtotic_equalizer_cc(int num_taps,
- float mu);
+ friend DIGITAL_API digital_kurtotic_equalizer_cc_sptr
+ digital_make_kurtotic_equalizer_cc(int num_taps, float mu);
+
digital_kurtotic_equalizer_cc(int num_taps, float mu);
gr_complex sign(gr_complex x)
@@ -87,10 +93,6 @@ protected:
(sign(d_u) * (nrm*cnj - 2.0f*d_p*cnj - conj(d_q)*out) -
abs(d_u)*cnj);
- //std::cout << "out: " << out << " p: " << d_p << " q: " << d_q;
- //std::cout << " m: " << d_m << " u: " << d_u << std::endl;
- //std::cout << "error: " << F << std::endl;
-
float re = gr_clip(F.real(), 1.0);
float im = gr_clip(F.imag(), 1.0);
return gr_complex(re, im);
@@ -108,6 +110,12 @@ public:
throw std::out_of_range("digital_kurtotic_equalizer::set_gain: Gain value must be >= 0");
d_mu = mu;
}
+
+ float gain() const { return d_mu; }
+
+ int work(int noutput_items,
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items);
};
#endif
diff --git a/gr-digital/include/digital_lms_dd_equalizer_cc.h b/gr-digital/include/digital_lms_dd_equalizer_cc.h
index 56871fa678..3bb9e935ad 100644
--- a/gr-digital/include/digital_lms_dd_equalizer_cc.h
+++ b/gr-digital/include/digital_lms_dd_equalizer_cc.h
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2011 Free Software Foundation, Inc.
+ * Copyright 2011,2012 Free Software Foundation, Inc.
*
* This file is part of GNU Radio
*
@@ -24,15 +24,18 @@
#define INCLUDED_DIGITAL_LMS_DD_EQUALIZER_CC_H
#include <digital_api.h>
-#include <gr_adaptive_fir_ccc.h>
+#include <gr_sync_decimator.h>
+#include <filter/adaptive_fir.h>
#include <digital_constellation.h>
+#include <stdexcept>
class digital_lms_dd_equalizer_cc;
typedef boost::shared_ptr<digital_lms_dd_equalizer_cc> digital_lms_dd_equalizer_cc_sptr;
-DIGITAL_API digital_lms_dd_equalizer_cc_sptr digital_make_lms_dd_equalizer_cc (int num_taps,
- float mu, int sps,
- digital_constellation_sptr cnst);
+DIGITAL_API digital_lms_dd_equalizer_cc_sptr
+digital_make_lms_dd_equalizer_cc(int num_taps,
+ float mu, int sps,
+ digital_constellation_sptr cnst);
/*!
* \brief Least-Mean-Square Decision Directed Equalizer (complex in/out)
@@ -67,24 +70,25 @@ DIGITAL_API digital_lms_dd_equalizer_cc_sptr digital_make_lms_dd_equalizer_cc (i
* Prentice Hall, 1996.
*
*/
-class DIGITAL_API digital_lms_dd_equalizer_cc : public gr_adaptive_fir_ccc
+class DIGITAL_API digital_lms_dd_equalizer_cc :
+ public gr_sync_decimator, public gr::filter::kernel::adaptive_fir_ccc
{
private:
- friend DIGITAL_API digital_lms_dd_equalizer_cc_sptr digital_make_lms_dd_equalizer_cc (int num_taps,
- float mu, int sps,
- digital_constellation_sptr cnst);
+ friend DIGITAL_API digital_lms_dd_equalizer_cc_sptr
+ digital_make_lms_dd_equalizer_cc(int num_taps,
+ float mu, int sps,
+ digital_constellation_sptr cnst);
float d_mu;
- std::vector<gr_complex> d_taps;
digital_constellation_sptr d_cnst;
- digital_lms_dd_equalizer_cc (int num_taps,
- float mu, int sps,
- digital_constellation_sptr cnst);
+ digital_lms_dd_equalizer_cc(int num_taps,
+ float mu, int sps,
+ digital_constellation_sptr cnst);
protected:
- virtual gr_complex error(const gr_complex &out)
+ gr_complex error(const gr_complex &out)
{
gr_complex decision, error;
d_cnst->map_to_points(d_cnst->decision_maker(&out), &decision);
@@ -92,7 +96,7 @@ protected:
return error;
}
- virtual void update_tap(gr_complex &tap, const gr_complex &in)
+ void update_tap(gr_complex &tap, const gr_complex &in)
{
tap += d_mu*conj(in)*d_error;
}
@@ -113,6 +117,9 @@ public:
}
}
+ int work(int noutput_items,
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items);
};
#endif
diff --git a/gr-digital/include/digital_mpsk_receiver_cc.h b/gr-digital/include/digital_mpsk_receiver_cc.h
index 1f11a26b64..f3cc373eb7 100644
--- a/gr-digital/include/digital_mpsk_receiver_cc.h
+++ b/gr-digital/include/digital_mpsk_receiver_cc.h
@@ -29,8 +29,8 @@
#include <gr_block.h>
#include <gr_complex.h>
#include <fstream>
+#include <filter/mmse_fir_interpolator_cc.h>
-class gri_mmse_fir_interpolator_cc;
class digital_mpsk_receiver_cc;
typedef boost::shared_ptr<digital_mpsk_receiver_cc> digital_mpsk_receiver_cc_sptr;
@@ -298,7 +298,7 @@ private:
//! get interpolated value
- gri_mmse_fir_interpolator_cc *d_interp;
+ gr::filter::mmse_fir_interpolator_cc *d_interp;
//! delay line length.
static const unsigned int DLLEN = 8;
@@ -310,11 +310,11 @@ private:
unsigned int d_dl_idx;
friend DIGITAL_API digital_mpsk_receiver_cc_sptr
- digital_make_mpsk_receiver_cc (unsigned int M, float theta,
- float loop_bw,
- float fmin, float fmax,
- float mu, float gain_mu,
- float omega, float gain_omega, float omega_rel);
+ digital_make_mpsk_receiver_cc(unsigned int M, float theta,
+ float loop_bw,
+ float fmin, float fmax,
+ float mu, float gain_mu,
+ float omega, float gain_omega, float omega_rel);
};
#endif
diff --git a/gr-digital/include/digital_pfb_clock_sync_ccf.h b/gr-digital/include/digital_pfb_clock_sync_ccf.h
index 1b403ab253..2d3565c6af 100644
--- a/gr-digital/include/digital_pfb_clock_sync_ccf.h
+++ b/gr-digital/include/digital_pfb_clock_sync_ccf.h
@@ -26,6 +26,9 @@
#include <digital_api.h>
#include <gr_block.h>
+#include <filter/fir_filter.h>
+
+using namespace gr::filter;
class digital_pfb_clock_sync_ccf;
typedef boost::shared_ptr<digital_pfb_clock_sync_ccf> digital_pfb_clock_sync_ccf_sptr;
@@ -37,8 +40,6 @@ digital_make_pfb_clock_sync_ccf(double sps, float loop_bw,
float max_rate_deviation=1.5,
int osps=1);
-class gr_fir_ccf;
-
/*!
* \class digital_pfb_clock_sync_ccf
*
@@ -183,12 +184,12 @@ class DIGITAL_API digital_pfb_clock_sync_ccf : public gr_block
float d_alpha;
float d_beta;
- int d_nfilters;
- int d_taps_per_filter;
- std::vector<gr_fir_ccf*> d_filters;
- std::vector<gr_fir_ccf*> d_diff_filters;
- std::vector< std::vector<float> > d_taps;
- std::vector< std::vector<float> > d_dtaps;
+ int d_nfilters;
+ int d_taps_per_filter;
+ std::vector<kernel::fir_filter_ccf*> d_filters;
+ std::vector<kernel::fir_filter_ccf*> d_diff_filters;
+ std::vector< std::vector<float> > d_taps;
+ std::vector< std::vector<float> > d_dtaps;
float d_k;
float d_rate;
@@ -230,7 +231,7 @@ public:
*/
void set_taps(const std::vector<float> &taps,
std::vector< std::vector<float> > &ourtaps,
- std::vector<gr_fir_ccf*> &ourfilter);
+ std::vector<kernel::fir_filter_ccf*> &ourfilter);
/*!
* Returns all of the taps of the matched filter
diff --git a/gr-digital/include/digital_pfb_clock_sync_fff.h b/gr-digital/include/digital_pfb_clock_sync_fff.h
index c7e8babd69..3c8ef8163b 100644
--- a/gr-digital/include/digital_pfb_clock_sync_fff.h
+++ b/gr-digital/include/digital_pfb_clock_sync_fff.h
@@ -26,6 +26,9 @@
#include <digital_api.h>
#include <gr_block.h>
+#include <filter/fir_filter.h>
+
+using namespace gr::filter;
class digital_pfb_clock_sync_fff;
typedef boost::shared_ptr<digital_pfb_clock_sync_fff> digital_pfb_clock_sync_fff_sptr;
@@ -37,8 +40,6 @@ digital_make_pfb_clock_sync_fff(double sps, float gain,
float max_rate_deviation=1.5,
int osps=1);
-class gr_fir_fff;
-
/*!
* \class digital_pfb_clock_sync_fff
*
@@ -183,12 +184,12 @@ class DIGITAL_API digital_pfb_clock_sync_fff : public gr_block
float d_alpha;
float d_beta;
- int d_nfilters;
- int d_taps_per_filter;
- std::vector<gr_fir_fff*> d_filters;
- std::vector<gr_fir_fff*> d_diff_filters;
- std::vector< std::vector<float> > d_taps;
- std::vector< std::vector<float> > d_dtaps;
+ int d_nfilters;
+ int d_taps_per_filter;
+ std::vector<kernel::fir_filter_fff*> d_filters;
+ std::vector<kernel::fir_filter_fff*> d_diff_filters;
+ std::vector< std::vector<float> > d_taps;
+ std::vector< std::vector<float> > d_dtaps;
float d_k;
float d_rate;
@@ -230,7 +231,7 @@ public:
*/
void set_taps(const std::vector<float> &taps,
std::vector< std::vector<float> > &ourtaps,
- std::vector<gr_fir_fff*> &ourfilter);
+ std::vector<kernel::fir_filter_fff*> &ourfilter);
/*!
* Returns all of the taps of the matched filter
diff --git a/gr-digital/lib/CMakeLists.txt b/gr-digital/lib/CMakeLists.txt
index f62504c587..2fffa15905 100644
--- a/gr-digital/lib/CMakeLists.txt
+++ b/gr-digital/lib/CMakeLists.txt
@@ -21,6 +21,7 @@
# Setup the include and linker paths
########################################################################
include_directories(
+ ${VOLK_INCLUDE_DIRS}
${GNURADIO_CORE_INCLUDE_DIRS}
${GR_DIGITAL_INCLUDE_DIRS}
${GR_FFT_INCLUDE_DIRS}
@@ -138,7 +139,9 @@ list(APPEND gr_digital_sources
)
list(APPEND digital_libs
+ volk
gnuradio-core
+ gnuradio-filter
${Boost_LIBRARIES}
)
diff --git a/gr-digital/lib/digital_cpmmod_bc.cc b/gr-digital/lib/digital_cpmmod_bc.cc
index a95b604d14..35695ae34d 100644
--- a/gr-digital/lib/digital_cpmmod_bc.cc
+++ b/gr-digital/lib/digital_cpmmod_bc.cc
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2010 Free Software Foundation, Inc.
+ * Copyright 2010,2012 Free Software Foundation, Inc.
*
* GNU Radio is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -46,7 +46,7 @@ digital_cpmmod_bc::digital_cpmmod_bc(gr_cpm::cpm_type type, float h,
gr_make_io_signature2(1, 1, sizeof(gr_complex), sizeof(float))),
d_taps(gr_cpm::phase_response(type, samples_per_sym, L, beta)),
d_char_to_float(gr_make_char_to_float()),
- d_pulse_shaper(gr_make_interp_fir_filter_fff(samples_per_sym, d_taps)),
+ d_pulse_shaper(gr::filter::interp_fir_filter_fff::make(samples_per_sym, d_taps)),
d_fm(gr_make_frequency_modulator_fc(M_PI * h))
{
switch (type) {
diff --git a/gr-digital/lib/digital_fll_band_edge_cc.cc b/gr-digital/lib/digital_fll_band_edge_cc.cc
index f2cfb1020a..222b4cce53 100644
--- a/gr-digital/lib/digital_fll_band_edge_cc.cc
+++ b/gr-digital/lib/digital_fll_band_edge_cc.cc
@@ -40,11 +40,12 @@ float sinc(float x)
}
digital_fll_band_edge_cc_sptr
-digital_make_fll_band_edge_cc (float samps_per_sym, float rolloff,
- int filter_size, float bandwidth)
+digital_make_fll_band_edge_cc(float samps_per_sym, float rolloff,
+ int filter_size, float bandwidth)
{
- return gnuradio::get_initial_sptr(new digital_fll_band_edge_cc (samps_per_sym, rolloff,
- filter_size, bandwidth));
+ return gnuradio::get_initial_sptr
+ (new digital_fll_band_edge_cc(samps_per_sym, rolloff,
+ filter_size, bandwidth));
}
@@ -186,8 +187,8 @@ digital_fll_band_edge_cc::design_filter(float samps_per_sym,
// Set the history to ensure enough input items for each filter
set_history(filter_size+1);
- d_filter_upper = gr_fir_util::create_gr_fir_ccc(d_taps_upper);
- d_filter_lower = gr_fir_util::create_gr_fir_ccc(d_taps_lower);
+ d_filter_upper = new gr::filter::kernel::fir_filter_ccc(1, d_taps_upper);
+ d_filter_lower = new gr::filter::kernel::fir_filter_ccc(1, d_taps_lower);
}
void
diff --git a/gr-digital/lib/digital_gmskmod_bc.cc b/gr-digital/lib/digital_gmskmod_bc.cc
index e53e900370..146293d824 100644
--- a/gr-digital/lib/digital_gmskmod_bc.cc
+++ b/gr-digital/lib/digital_gmskmod_bc.cc
@@ -32,7 +32,8 @@ digital_gmskmod_bc_sptr
digital_make_gmskmod_bc(unsigned samples_per_sym,
double bt, unsigned L)
{
- return gnuradio::get_initial_sptr(new digital_gmskmod_bc(samples_per_sym, bt, L));
+ return gnuradio::get_initial_sptr
+ (new digital_gmskmod_bc(samples_per_sym, bt, L));
}
diff --git a/gr-digital/lib/digital_kurtotic_equalizer_cc.cc b/gr-digital/lib/digital_kurtotic_equalizer_cc.cc
index c95b560216..f10ec83482 100644
--- a/gr-digital/lib/digital_kurtotic_equalizer_cc.cc
+++ b/gr-digital/lib/digital_kurtotic_equalizer_cc.cc
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2011 Free Software Foundation, Inc.
+ * Copyright 2011,2012 Free Software Foundation, Inc.
*
* This file is part of GNU Radio
*
@@ -25,19 +25,27 @@
#endif
#include <digital_kurtotic_equalizer_cc.h>
+#include <gr_io_signature.h>
+#include <volk/volk.h>
digital_kurtotic_equalizer_cc_sptr
digital_make_kurtotic_equalizer_cc(int num_taps, float mu)
{
- return gnuradio::get_initial_sptr(new digital_kurtotic_equalizer_cc(num_taps, mu));
+ return gnuradio::get_initial_sptr
+ (new digital_kurtotic_equalizer_cc(num_taps, mu));
}
digital_kurtotic_equalizer_cc::digital_kurtotic_equalizer_cc(int num_taps, float mu)
- : gr_adaptive_fir_ccc("kurtotic_equalizer_cc", 1, std::vector<gr_complex>(num_taps))
+ : gr_sync_decimator("kurtotic_equalizer_cc",
+ gr_make_io_signature(1, 1, sizeof(gr_complex)),
+ gr_make_io_signature(1, 1, sizeof(gr_complex)),
+ 1),
+ gr::filter::kernel::adaptive_fir_ccc(1, std::vector<gr_complex>(num_taps, gr_complex(0,0)))
{
set_gain(mu);
if (num_taps > 0)
d_taps[0] = 1.0;
+ set_taps(d_taps);
d_alpha_p = 0.01;
d_alpha_q = 0.01;
@@ -47,5 +55,33 @@ digital_kurtotic_equalizer_cc::digital_kurtotic_equalizer_cc(int num_taps, float
d_m = 0.0f;
d_q = gr_complex(0,0);
d_u = gr_complex(0,0);
+
+ const int alignment_multiple =
+ volk_get_alignment() / sizeof(gr_complex);
+ set_alignment(std::max(1,alignment_multiple));
+ set_history(num_taps+1);
}
+int
+digital_kurtotic_equalizer_cc::work(int noutput_items,
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items)
+{
+ gr_complex *in = (gr_complex *)input_items[0];
+ gr_complex *out = (gr_complex *)output_items[0];
+
+ int j = 0, k, l = d_taps.size();
+ for(int i = 0; i < noutput_items; i++) {
+ out[i] = filter(&in[j]);
+
+ // Adjust taps
+ d_error = error(out[i]);
+ for(k = 0; k < l; k++) {
+ update_tap(d_taps[l-k-1], in[j+k]);
+ }
+
+ j += decimation();
+ }
+
+ return noutput_items;
+}
diff --git a/gr-digital/lib/digital_lms_dd_equalizer_cc.cc b/gr-digital/lib/digital_lms_dd_equalizer_cc.cc
index e2c2f16f28..5238063fa7 100644
--- a/gr-digital/lib/digital_lms_dd_equalizer_cc.cc
+++ b/gr-digital/lib/digital_lms_dd_equalizer_cc.cc
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2011 Free Software Foundation, Inc.
+ * Copyright 2011,2012 Free Software Foundation, Inc.
*
* This file is part of GNU Radio
*
@@ -27,59 +27,57 @@
#include <digital_lms_dd_equalizer_cc.h>
#include <gr_io_signature.h>
#include <gr_misc.h>
-#include <iostream>
+#include <volk/volk.h>
digital_lms_dd_equalizer_cc_sptr
digital_make_lms_dd_equalizer_cc(int num_taps, float mu, int sps,
digital_constellation_sptr cnst)
{
- return gnuradio::get_initial_sptr(new digital_lms_dd_equalizer_cc(num_taps, mu,
- sps, cnst));
+ return gnuradio::get_initial_sptr
+ (new digital_lms_dd_equalizer_cc(num_taps, mu, sps, cnst));
}
digital_lms_dd_equalizer_cc::digital_lms_dd_equalizer_cc(int num_taps, float mu,
int sps,
digital_constellation_sptr cnst)
- : gr_adaptive_fir_ccc("lms_dd_equalizer_cc", sps,
- std::vector<gr_complex>(num_taps, gr_complex(0,0))),
- d_taps(num_taps), d_cnst(cnst)
+ : gr_sync_decimator("lms_dd_equalizer_cc",
+ gr_make_io_signature(1, 1, sizeof(gr_complex)),
+ gr_make_io_signature(1, 1, sizeof(gr_complex)),
+ sps),
+ gr::filter::kernel::adaptive_fir_ccc(sps, std::vector<gr_complex>(num_taps, gr_complex(0,0))),
+ d_cnst(cnst)
{
set_gain(mu);
- if (num_taps > 0)
- d_taps[num_taps/2] = 1.0;
-}
-
-
+ if(num_taps > 0)
+ d_taps[0] = 1.0;
+ set_taps(d_taps);
+ const int alignment_multiple =
+ volk_get_alignment() / sizeof(gr_complex);
+ set_alignment(std::max(1,alignment_multiple));
+ set_history(num_taps+1);
+}
-/*
int
-digital_lms_dd_equalizer_cc::work (int noutput_items,
- gr_vector_const_void_star &input_items,
- gr_vector_void_star &output_items)
+digital_lms_dd_equalizer_cc::work(int noutput_items,
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items)
{
- const gr_complex *in = (const gr_complex *) input_items[0];
- gr_complex *out = (gr_complex *) output_items[0];
-
- gr_complex acc, decision, error;
+ const gr_complex *in = (const gr_complex *)input_items[0];
+ gr_complex *out = (gr_complex *)output_items[0];
+ int j = 0;
+ size_t l = d_taps.size();
for(int i = 0; i < noutput_items; i++) {
- acc = 0;
+ out[i] = filter(&in[j]);
+
+ d_error = error(out[i]);
+ for(size_t k=0; k < l; k++) {
+ update_tap(d_taps[k], in[i+k]);
+ }
- // Compute output
- for (size_t j=0; j < d_taps.size(); j++)
- acc += in[i+j] * conj(d_taps[j]);
-
- d_cnst->map_to_points(d_cnst->decision_maker(&acc), &decision);
- error = decision - acc;
-
- // Update taps
- for (size_t j=0; j < d_taps.size(); j++)
- d_taps[j] += d_mu * conj(error) * in[i+j];
-
- out[i] = acc;
+ j += decimation();
}
return noutput_items;
}
-*/
diff --git a/gr-digital/lib/digital_mpsk_receiver_cc.cc b/gr-digital/lib/digital_mpsk_receiver_cc.cc
index 6d2bab8a4e..78f0589652 100644
--- a/gr-digital/lib/digital_mpsk_receiver_cc.cc
+++ b/gr-digital/lib/digital_mpsk_receiver_cc.cc
@@ -30,7 +30,7 @@
#include <stdexcept>
#include <gr_math.h>
#include <gr_expj.h>
-#include <gri_mmse_fir_interpolator_cc.h>
+#include <filter/mmse_fir_interpolator_cc.h>
#define M_TWOPI (2*M_PI)
@@ -70,7 +70,7 @@ digital_mpsk_receiver_cc::digital_mpsk_receiver_cc (unsigned int M, float theta,
d_omega_rel(omega_rel), d_max_omega(0), d_min_omega(0),
d_p_2T(0), d_p_1T(0), d_p_0T(0), d_c_2T(0), d_c_1T(0), d_c_0T(0)
{
- d_interp = new gri_mmse_fir_interpolator_cc();
+ d_interp = new gr::filter::mmse_fir_interpolator_cc();
d_dl_idx = 0;
set_omega(omega);
diff --git a/gr-digital/lib/digital_pfb_clock_sync_ccf.cc b/gr-digital/lib/digital_pfb_clock_sync_ccf.cc
index 1a2d5970ba..846e80e11a 100644
--- a/gr-digital/lib/digital_pfb_clock_sync_ccf.cc
+++ b/gr-digital/lib/digital_pfb_clock_sync_ccf.cc
@@ -28,8 +28,6 @@
#include <cmath>
#include <digital_pfb_clock_sync_ccf.h>
-#include <gr_fir_ccf.h>
-#include <gr_fir_util.h>
#include <gr_io_signature.h>
#include <gr_math.h>
@@ -82,14 +80,14 @@ digital_pfb_clock_sync_ccf::digital_pfb_clock_sync_ccf (double sps, float loop_b
d_rate_f = d_rate - (float)d_rate_i;
d_filtnum = (int)floor(d_k);
- d_filters = std::vector<gr_fir_ccf*>(d_nfilters);
- d_diff_filters = std::vector<gr_fir_ccf*>(d_nfilters);
+ d_filters = std::vector<kernel::fir_filter_ccf*>(d_nfilters);
+ d_diff_filters = std::vector<kernel::fir_filter_ccf*>(d_nfilters);
// Create an FIR filter for each channel and zero out the taps
std::vector<float> vtaps(0, d_nfilters);
for(int i = 0; i < d_nfilters; i++) {
- d_filters[i] = gr_fir_util::create_gr_fir_ccf(vtaps);
- d_diff_filters[i] = gr_fir_util::create_gr_fir_ccf(vtaps);
+ d_filters[i] = new kernel::fir_filter_ccf(1, vtaps);
+ d_diff_filters[i] = new kernel::fir_filter_ccf(1, vtaps);
}
// Now, actually set the filters' taps
@@ -210,7 +208,7 @@ digital_pfb_clock_sync_ccf::update_gains()
void
digital_pfb_clock_sync_ccf::set_taps (const std::vector<float> &newtaps,
std::vector< std::vector<float> > &ourtaps,
- std::vector<gr_fir_ccf*> &ourfilter)
+ std::vector<kernel::fir_filter_ccf*> &ourfilter)
{
int i,j;
diff --git a/gr-digital/lib/digital_pfb_clock_sync_fff.cc b/gr-digital/lib/digital_pfb_clock_sync_fff.cc
index 0e7d2a52da..dafc0f2b90 100644
--- a/gr-digital/lib/digital_pfb_clock_sync_fff.cc
+++ b/gr-digital/lib/digital_pfb_clock_sync_fff.cc
@@ -28,8 +28,6 @@
#include <cmath>
#include <digital_pfb_clock_sync_fff.h>
-#include <gr_fir_fff.h>
-#include <gr_fir_util.h>
#include <gr_io_signature.h>
#include <gr_math.h>
@@ -82,14 +80,14 @@ digital_pfb_clock_sync_fff::digital_pfb_clock_sync_fff (double sps, float loop_b
d_rate_f = d_rate - (float)d_rate_i;
d_filtnum = (int)floor(d_k);
- d_filters = std::vector<gr_fir_fff*>(d_nfilters);
- d_diff_filters = std::vector<gr_fir_fff*>(d_nfilters);
+ d_filters = std::vector<kernel::fir_filter_fff*>(d_nfilters);
+ d_diff_filters = std::vector<kernel::fir_filter_fff*>(d_nfilters);
// Create an FIR filter for each channel and zero out the taps
std::vector<float> vtaps(0, d_nfilters);
for(int i = 0; i < d_nfilters; i++) {
- d_filters[i] = gr_fir_util::create_gr_fir_fff(vtaps);
- d_diff_filters[i] = gr_fir_util::create_gr_fir_fff(vtaps);
+ d_filters[i] = new kernel::fir_filter_fff(1, vtaps);
+ d_diff_filters[i] = new kernel::fir_filter_fff(1, vtaps);
}
// Now, actually set the filters' taps
@@ -208,7 +206,7 @@ digital_pfb_clock_sync_fff::update_gains()
void
digital_pfb_clock_sync_fff::set_taps (const std::vector<float> &newtaps,
std::vector< std::vector<float> > &ourtaps,
- std::vector<gr_fir_fff*> &ourfilter)
+ std::vector<kernel::fir_filter_fff*> &ourfilter)
{
int i,j;
diff --git a/gr-digital/python/CMakeLists.txt b/gr-digital/python/CMakeLists.txt
index 6a9f102955..fdb5acd819 100644
--- a/gr-digital/python/CMakeLists.txt
+++ b/gr-digital/python/CMakeLists.txt
@@ -71,6 +71,8 @@ foreach(py_qa_test_file ${py_qa_test_files})
${CMAKE_BINARY_DIR}/gnuradio-core/src/lib/swig
${CMAKE_BINARY_DIR}/gr-digital/python
${CMAKE_BINARY_DIR}/gr-digital/swig
+ ${CMAKE_BINARY_DIR}/gr-filter/python
+ ${CMAKE_BINARY_DIR}/gr-filter/swig
)
set(GR_TEST_TARGET_DEPS volk gruel gnuradio-core gnuradio-digital)
GR_ADD_TEST(${py_qa_test_name} ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B} ${py_qa_test_file})
diff --git a/gr-digital/python/bpsk.py b/gr-digital/python/bpsk.py
index 9f2354003c..d55db15256 100644
--- a/gr-digital/python/bpsk.py
+++ b/gr-digital/python/bpsk.py
@@ -116,8 +116,7 @@ class dbpsk_mod(bpsk_mod):
It exists purely to simplify generation of the block in grc.
"""
- super(dbpsk_mod, self).__init__(differential=True,
- *args, **kwargs)
+ super(dbpsk_mod, self).__init__(*args, **kwargs)
# /////////////////////////////////////////////////////////////////////////////
# DBPSK demodulator
@@ -140,8 +139,7 @@ class dbpsk_demod(bpsk_demod):
It exists purely to simplify generation of the block in grc.
"""
- super(dbpsk_demod, self).__init__(differential=True,
- *args, **kwargs)
+ super(dbpsk_demod, self).__init__(*args, **kwargs)
#
# Add these to the mod/demod registry
diff --git a/gr-digital/python/generic_mod_demod.py b/gr-digital/python/generic_mod_demod.py
index 105c6fe8ff..8d350e8454 100644
--- a/gr-digital/python/generic_mod_demod.py
+++ b/gr-digital/python/generic_mod_demod.py
@@ -31,6 +31,11 @@ from utils import mod_codes
import digital_swig as digital
import math
+try:
+ from gnuradio import filter
+except ImportError:
+ import filter_swig as filter
+
# default values (used in __init__ and add_options)
_def_samples_per_symbol = 2
_def_excess_bw = 0.35
@@ -141,8 +146,8 @@ class generic_mod(gr.hier_block2):
1.0, # symbol rate
self._excess_bw, # excess bandwidth (roll-off factor)
ntaps)
- self.rrc_filter = gr.pfb_arb_resampler_ccf(self._samples_per_symbol,
- self.rrc_taps)
+ self.rrc_filter = filter.pfb_arb_resampler_ccf(self._samples_per_symbol,
+ self.rrc_taps)
# Connect
blocks = [self, self.bytes2chunks]
diff --git a/gr-digital/python/gfsk.py b/gr-digital/python/gfsk.py
index c85fdf0e00..9ec477648e 100644
--- a/gr-digital/python/gfsk.py
+++ b/gr-digital/python/gfsk.py
@@ -32,6 +32,11 @@ import numpy
from pprint import pprint
import inspect
+try:
+ from gnuradio import filter
+except ImportError:
+ import filter_swig as filter
+
# default values (used in __init__ and add_options)
_def_samples_per_symbol = 2
_def_sensitivity = 1
@@ -94,7 +99,7 @@ class gfsk_mod(gr.hier_block2):
#sensitivity = (pi / 2) / samples_per_symbol # phase change per bit = pi / 2
# Turn it into NRZ data.
- self.nrz = gr.bytes_to_syms()
+ self.nrz = digital.bytes_to_syms()
# Form Gaussian filter
# Generate Gaussian response (Needs to be convolved with window below).
@@ -107,7 +112,7 @@ class gfsk_mod(gr.hier_block2):
self.sqwave = (1,) * samples_per_symbol # rectangular window
self.taps = numpy.convolve(numpy.array(self.gaussian_taps),numpy.array(self.sqwave))
- self.gaussian_filter = gr.interp_fir_filter_fff(samples_per_symbol, self.taps)
+ self.gaussian_filter = filter.interp_fir_filter_fff(samples_per_symbol, self.taps)
# FM modulation
self.fmmod = gr.frequency_modulator_fc(sensitivity)
diff --git a/gr-digital/python/gmsk.py b/gr-digital/python/gmsk.py
index 2c9be056c2..cc6af9ffff 100644
--- a/gr-digital/python/gmsk.py
+++ b/gr-digital/python/gmsk.py
@@ -32,6 +32,12 @@ import numpy
from pprint import pprint
import inspect
+try:
+ from gnuradio import filter
+except ImportError:
+ import filter_swig as filter
+
+
# default values (used in __init__ and add_options)
_def_samples_per_symbol = 2
_def_bt = 0.35
@@ -92,7 +98,7 @@ class gmsk_mod(gr.hier_block2):
sensitivity = (pi / 2) / samples_per_symbol # phase change per bit = pi / 2
# Turn it into NRZ data.
- self.nrz = gr.bytes_to_syms()
+ self.nrz = digital.bytes_to_syms()
# Form Gaussian filter
# Generate Gaussian response (Needs to be convolved with window below).
@@ -105,7 +111,7 @@ class gmsk_mod(gr.hier_block2):
self.sqwave = (1,) * samples_per_symbol # rectangular window
self.taps = numpy.convolve(numpy.array(self.gaussian_taps),numpy.array(self.sqwave))
- self.gaussian_filter = gr.interp_fir_filter_fff(samples_per_symbol, self.taps)
+ self.gaussian_filter = filter.interp_fir_filter_fff(samples_per_symbol, self.taps)
# FM modulation
self.fmmod = gr.frequency_modulator_fc(sensitivity)
diff --git a/gr-digital/python/ofdm_receiver.py b/gr-digital/python/ofdm_receiver.py
index 9d4d6e559d..8290042e6f 100644
--- a/gr-digital/python/ofdm_receiver.py
+++ b/gr-digital/python/ofdm_receiver.py
@@ -24,12 +24,17 @@ import math
from numpy import fft
from gnuradio import gr
-import digital_swig
+import digital_swig as digital
from ofdm_sync_pn import ofdm_sync_pn
from ofdm_sync_fixed import ofdm_sync_fixed
from ofdm_sync_pnac import ofdm_sync_pnac
from ofdm_sync_ml import ofdm_sync_ml
+try:
+ from gnuradio import filter
+except ImportError:
+ import filter_swig as filter
+
class ofdm_receiver(gr.hier_block2):
"""
Performs receiver synchronization on OFDM symbols.
@@ -72,7 +77,7 @@ class ofdm_receiver(gr.hier_block2):
bw+tb, # midpoint of trans. band
tb, # width of trans. band
gr.firdes.WIN_HAMMING) # filter type
- self.chan_filt = gr.fft_filter_ccc(1, chan_coeffs)
+ self.chan_filt = filter.fft_filter_ccc(1, chan_coeffs)
win = [1 for i in range(fft_length)]
@@ -121,9 +126,9 @@ class ofdm_receiver(gr.hier_block2):
self.nco = gr.frequency_modulator_fc(nco_sensitivity) # generate a signal proportional to frequency error of sync block
self.sigmix = gr.multiply_cc()
- self.sampler = digital_swig.ofdm_sampler(fft_length, fft_length+cp_length)
+ self.sampler = digital.ofdm_sampler(fft_length, fft_length+cp_length)
self.fft_demod = gr.fft_vcc(fft_length, True, win, True)
- self.ofdm_frame_acq = digital_swig.ofdm_frame_acquisition(occupied_tones,
+ self.ofdm_frame_acq = digital.ofdm_frame_acquisition(occupied_tones,
fft_length,
cp_length, ks[0])
diff --git a/gr-digital/python/ofdm_sync_ml.py b/gr-digital/python/ofdm_sync_ml.py
index 7c75d7f1d4..f732fdf29a 100644
--- a/gr-digital/python/ofdm_sync_ml.py
+++ b/gr-digital/python/ofdm_sync_ml.py
@@ -23,6 +23,11 @@
import math
from gnuradio import gr
+try:
+ from gnuradio import filter
+except ImportError:
+ import filter_swig as filter
+
class ofdm_sync_ml(gr.hier_block2):
def __init__(self, fft_length, cp_length, snr, kstime, logging):
''' Maximum Likelihood OFDM synchronizer:
@@ -57,7 +62,7 @@ class ofdm_sync_ml(gr.hier_block2):
self.adder = gr.add_ff()
moving_sum_taps = [rho/2 for i in range(cp_length)]
- self.moving_sum_filter = gr.fir_filter_fff(1,moving_sum_taps)
+ self.moving_sum_filter = filter.fir_filter_fff(1,moving_sum_taps)
self.connect(self.input,self.magsqrd1)
self.connect(self.delay,self.magsqrd2)
@@ -71,7 +76,7 @@ class ofdm_sync_ml(gr.hier_block2):
self.mixer = gr.multiply_cc();
movingsum2_taps = [1.0 for i in range(cp_length)]
- self.movingsum2 = gr.fir_filter_ccf(1,movingsum2_taps)
+ self.movingsum2 = filter.fir_filter_ccf(1,movingsum2_taps)
# Correlator data handler
self.c2mag = gr.complex_to_mag()
@@ -115,7 +120,7 @@ class ofdm_sync_ml(gr.hier_block2):
# to readjust the timing in the middle of the packet or we ruin the equalizer settings.
kstime = [k.conjugate() for k in kstime]
kstime.reverse()
- self.kscorr = gr.fir_filter_ccc(1, kstime)
+ self.kscorr = filter.fir_filter_ccc(1, kstime)
self.corrmag = gr.complex_to_mag_squared()
self.div = gr.divide_ff()
diff --git a/gr-digital/python/ofdm_sync_pn.py b/gr-digital/python/ofdm_sync_pn.py
index 05b1de2e19..8307a8ee14 100644
--- a/gr-digital/python/ofdm_sync_pn.py
+++ b/gr-digital/python/ofdm_sync_pn.py
@@ -24,6 +24,11 @@ import math
from numpy import fft
from gnuradio import gr
+try:
+ from gnuradio import filter
+except ImportError:
+ import filter_swig as filter
+
class ofdm_sync_pn(gr.hier_block2):
def __init__(self, fft_length, cp_length, logging=False):
"""
@@ -51,19 +56,19 @@ class ofdm_sync_pn(gr.hier_block2):
# Create a moving sum filter for the corr output
if 1:
moving_sum_taps = [1.0 for i in range(fft_length//2)]
- self.moving_sum_filter = gr.fir_filter_ccf(1,moving_sum_taps)
+ self.moving_sum_filter = filter.fir_filter_ccf(1,moving_sum_taps)
else:
moving_sum_taps = [complex(1.0,0.0) for i in range(fft_length//2)]
- self.moving_sum_filter = gr.fft_filter_ccc(1,moving_sum_taps)
+ self.moving_sum_filter = filter.fft_filter_ccc(1,moving_sum_taps)
# Create a moving sum filter for the input
self.inputmag2 = gr.complex_to_mag_squared()
movingsum2_taps = [1.0 for i in range(fft_length//2)]
if 1:
- self.inputmovingsum = gr.fir_filter_fff(1,movingsum2_taps)
+ self.inputmovingsum = filter.fir_filter_fff(1,movingsum2_taps)
else:
- self.inputmovingsum = gr.fft_filter_fff(1,movingsum2_taps)
+ self.inputmovingsum = filter.fft_filter_fff(1,movingsum2_taps)
self.square = gr.multiply_ff()
self.normalize = gr.divide_ff()
@@ -100,7 +105,7 @@ class ofdm_sync_pn(gr.hier_block2):
# Create a moving sum filter for the corr output
matched_filter_taps = [1.0/cp_length for i in range(cp_length)]
- self.matched_filter = gr.fir_filter_fff(1,matched_filter_taps)
+ self.matched_filter = filter.fir_filter_fff(1,matched_filter_taps)
self.connect(self.normalize, self.matched_filter)
self.connect(self.matched_filter, self.sub1, self.pk_detect)
diff --git a/gr-digital/python/ofdm_sync_pnac.py b/gr-digital/python/ofdm_sync_pnac.py
index 10a1259641..a5edc272a8 100644
--- a/gr-digital/python/ofdm_sync_pnac.py
+++ b/gr-digital/python/ofdm_sync_pnac.py
@@ -24,6 +24,11 @@ import math
from numpy import fft
from gnuradio import gr
+try:
+ from gnuradio import filter
+except ImportError:
+ import filter_swig as filter
+
class ofdm_sync_pnac(gr.hier_block2):
def __init__(self, fft_length, cp_length, kstime, logging=False):
"""
@@ -59,7 +64,7 @@ class ofdm_sync_pnac(gr.hier_block2):
# cross-correlate with the known symbol
kstime = [k.conjugate() for k in kstime[0:fft_length//2]]
kstime.reverse()
- self.crosscorr_filter = gr.fir_filter_ccc(1, kstime)
+ self.crosscorr_filter = filter.fir_filter_ccc(1, kstime)
# Create a delay line
self.delay = gr.delay(gr.sizeof_gr_complex, fft_length/2)
@@ -71,7 +76,7 @@ class ofdm_sync_pnac(gr.hier_block2):
# Create a moving sum filter for the input
self.mag = gr.complex_to_mag_squared()
movingsum_taps = (fft_length//1)*[1.0,]
- self.power = gr.fir_filter_fff(1,movingsum_taps)
+ self.power = filter.fir_filter_fff(1,movingsum_taps)
# Get magnitude (peaks) and angle (phase/freq error)
self.c2mag = gr.complex_to_mag_squared()
diff --git a/gr-digital/python/pkt.py b/gr-digital/python/pkt.py
index 09254a7caa..b294066f17 100644
--- a/gr-digital/python/pkt.py
+++ b/gr-digital/python/pkt.py
@@ -23,7 +23,7 @@ from math import pi
from gnuradio import gr
import gnuradio.gr.gr_threading as _threading
import packet_utils
-import digital_swig
+import digital_swig as digital
# /////////////////////////////////////////////////////////////////////////////
@@ -141,7 +141,7 @@ class demod_pkts(gr.hier_block2):
threshold = 12 # FIXME raise exception
self._rcvd_pktq = gr.msg_queue() # holds packets from the PHY
- self.correlator = digital_swig.correlate_access_code_bb(access_code, threshold)
+ self.correlator = digital.correlate_access_code_bb(access_code, threshold)
self.framer_sink = digital.framer_sink_1(self._rcvd_pktq)
self.connect(self, self._demodulator, self.correlator, self.framer_sink)
diff --git a/gr-digital/python/qa_cma_equalizer.py b/gr-digital/python/qa_cma_equalizer.py
index 75fb0f05ed..2af1505c1c 100755
--- a/gr-digital/python/qa_cma_equalizer.py
+++ b/gr-digital/python/qa_cma_equalizer.py
@@ -21,7 +21,7 @@
#
from gnuradio import gr, gr_unittest
-import digital_swig
+import digital_swig as digital
class test_cma_equalizer_fir(gr_unittest.TestCase):
@@ -33,7 +33,7 @@ class test_cma_equalizer_fir(gr_unittest.TestCase):
def transform(self, src_data):
SRC = gr.vector_source_c(src_data, False)
- EQU = digital_swig.cma_equalizer_cc(4, 1.0, .001, 1)
+ EQU = digital.cma_equalizer_cc(4, 1.0, .001, 1)
DST = gr.vector_sink_c()
self.tb.connect(SRC, EQU, DST)
self.tb.run()
@@ -44,7 +44,11 @@ class test_cma_equalizer_fir(gr_unittest.TestCase):
src_data = (1+0j, 0+1j, -1+0j, 0-1j)*1000
expected_data = src_data
result = self.transform(src_data)
- self.assertComplexTuplesAlmostEqual(expected_data, result)
+
+ # only test last N samples to allow for settling. Also adjust
+ # for a 1 sample delay in the filter.
+ N = -500
+ self.assertComplexTuplesAlmostEqual(expected_data[N:-1], result[N+1:])
if __name__ == "__main__":
gr_unittest.run(test_cma_equalizer_fir, "test_cma_equalizer_fir.xml")
diff --git a/gr-digital/python/qa_constellation_receiver.py b/gr-digital/python/qa_constellation_receiver.py
index 8c2d2da0c5..e2cf6d990c 100755
--- a/gr-digital/python/qa_constellation_receiver.py
+++ b/gr-digital/python/qa_constellation_receiver.py
@@ -24,7 +24,8 @@ import random
from gnuradio import gr, blks2, gr_unittest
from utils import mod_codes, alignment
-import digital_swig, packet_utils
+import packet_utils
+import filter_swig as filter
from generic_mod_demod import generic_mod, generic_demod
from qa_constellation import tested_constellations, twod_constell
@@ -130,9 +131,9 @@ class rec_test_tb (gr.top_block):
mod = generic_mod(constellation, differential=differential)
# Channel
if freq_offset:
- channel = gr.channel_model(NOISE_VOLTAGE, FREQUENCY_OFFSET, TIMING_OFFSET)
+ channel = filter.channel_model(NOISE_VOLTAGE, FREQUENCY_OFFSET, TIMING_OFFSET)
else:
- channel = gr.channel_model(NOISE_VOLTAGE, 0, TIMING_OFFSET)
+ channel = filter.channel_model(NOISE_VOLTAGE, 0, TIMING_OFFSET)
# Receiver Blocks
if freq_offset:
demod = generic_demod(constellation, differential=differential,
diff --git a/gr-digital/python/qa_fll_band_edge.py b/gr-digital/python/qa_fll_band_edge.py
index 9e4ca079b7..80d6079a16 100755
--- a/gr-digital/python/qa_fll_band_edge.py
+++ b/gr-digital/python/qa_fll_band_edge.py
@@ -21,7 +21,8 @@
#
from gnuradio import gr, gr_unittest
-import digital_swig
+import digital_swig as digital
+import filter_swig as filter
import random, math
class test_fll_band_edge_cc(gr_unittest.TestCase):
@@ -49,14 +50,14 @@ class test_fll_band_edge_cc(gr_unittest.TestCase):
random.seed(0)
data = [2.0*random.randint(0, 2) - 1.0 for i in xrange(200)]
self.src = gr.vector_source_c(data, False)
- self.rrc = gr.interp_fir_filter_ccf(sps, rrc_taps)
+ self.rrc = filter.interp_fir_filter_ccf(sps, rrc_taps)
# Mix symbols with a complex sinusoid to spin them
self.nco = gr.sig_source_c(1, gr.GR_SIN_WAVE, foffset, 1)
self.mix = gr.multiply_cc()
# FLL will despin the symbols to an arbitrary phase
- self.fll = digital_swig.fll_band_edge_cc(sps, rolloff, ntaps, bw)
+ self.fll = digital.fll_band_edge_cc(sps, rolloff, ntaps, bw)
# Create sinks for all outputs of the FLL
# we will only care about the freq and error outputs
diff --git a/gr-digital/python/qa_lms_equalizer.py b/gr-digital/python/qa_lms_equalizer.py
index 025c785aa4..7bde258e7f 100755
--- a/gr-digital/python/qa_lms_equalizer.py
+++ b/gr-digital/python/qa_lms_equalizer.py
@@ -21,7 +21,7 @@
#
from gnuradio import gr, gr_unittest
-import digital_swig
+import digital_swig as digital
class test_lms_dd_equalizer(gr_unittest.TestCase):
@@ -33,7 +33,7 @@ class test_lms_dd_equalizer(gr_unittest.TestCase):
def transform(self, src_data, gain, const):
SRC = gr.vector_source_c(src_data, False)
- EQU = digital_swig.lms_dd_equalizer_cc(4, gain, 1, const.base())
+ EQU = digital.lms_dd_equalizer_cc(4, gain, 1, const.base())
DST = gr.vector_sink_c()
self.tb.connect(SRC, EQU, DST)
self.tb.run()
@@ -41,13 +41,17 @@ class test_lms_dd_equalizer(gr_unittest.TestCase):
def test_001_identity(self):
# Constant modulus signal so no adjustments
- const = digital_swig.constellation_qpsk()
+ const = digital.constellation_qpsk()
src_data = const.points()*1000
N = 100 # settling time
expected_data = src_data[N:]
result = self.transform(src_data, 0.1, const)[N:]
- self.assertComplexTuplesAlmostEqual(expected_data, result, 5)
+
+ # only test last N samples to allow for settling. Also adjust
+ # for a 1 sample delay in the filter.
+ N = -500
+ self.assertComplexTuplesAlmostEqual(expected_data[N:-1], result[N+1:])
if __name__ == "__main__":
gr_unittest.run(test_lms_dd_equalizer, "test_lms_dd_equalizer.xml")
diff --git a/gr-digital/python/qa_mpsk_receiver.py b/gr-digital/python/qa_mpsk_receiver.py
index e1f16ee671..6b6f70adaa 100755
--- a/gr-digital/python/qa_mpsk_receiver.py
+++ b/gr-digital/python/qa_mpsk_receiver.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
#
-# Copyright 2011 Free Software Foundation, Inc.
+# Copyright 2011,2012 Free Software Foundation, Inc.
#
# This file is part of GNU Radio
#
@@ -21,7 +21,8 @@
#
from gnuradio import gr, gr_unittest
-import digital_swig
+import digital_swig as digital
+import filter_swig as filter
import random, cmath
class test_mpsk_receiver(gr_unittest.TestCase):
@@ -39,36 +40,48 @@ class test_mpsk_receiver(gr_unittest.TestCase):
loop_bw = cmath.pi/100.0
fmin = -0.5
fmax = 0.5
- mu = 0.25
+ mu = 0.5
gain_mu = 0.01
omega = 2
gain_omega = 0.001
omega_rel = 0.001
- self.test = digital_swig.mpsk_receiver_cc(M, theta, loop_bw,
- fmin, fmax, mu, gain_mu,
- omega, gain_omega,
- omega_rel)
+ self.test = digital.mpsk_receiver_cc(M, theta, loop_bw,
+ fmin, fmax, mu, gain_mu,
+ omega, gain_omega,
+ omega_rel)
- data = 1000*[complex(1,0), complex(1,0), complex(-1,0), complex(-1,0)]
+ data = 10000*[complex(1,0), complex(-1,0)]
+ #data = [2*random.randint(0,1)-1 for x in xrange(10000)]
self.src = gr.vector_source_c(data, False)
self.snk = gr.vector_sink_c()
- self.tb.connect(self.src, self.test, self.snk)
+ # pulse shaping interpolation filter
+ nfilts = 32
+ excess_bw = 0.35
+ ntaps = 11 * int(omega*nfilts)
+ rrc_taps0 = gr.firdes.root_raised_cosine(
+ nfilts, nfilts, 1.0, excess_bw, ntaps)
+ rrc_taps1 = gr.firdes.root_raised_cosine(
+ 1, omega, 1.0, excess_bw, 11*omega)
+ self.rrc0 = filter.pfb_arb_resampler_ccf(omega, rrc_taps0)
+ self.rrc1 = filter.fir_filter_ccf(1, rrc_taps1)
+
+ self.tb.connect(self.src, self.rrc0, self.rrc1, self.test, self.snk)
self.tb.run()
- expected_result = 1000*[complex(-0.5,0), complex(0.5,0)]
+ expected_result = [0.5*d for d in data]
dst_data = self.snk.data()
# Only compare last Ncmp samples
- Ncmp = 100
+ Ncmp = 1000
len_e = len(expected_result)
len_d = len(dst_data)
- expected_result = expected_result[len_e - Ncmp:]
+ expected_result = expected_result[len_e - Ncmp-1:-1]
dst_data = dst_data[len_d - Ncmp:]
-
+
#for e,d in zip(expected_result, dst_data):
- # print e, d
+ # print "{0:+.02f} {1:+.02f}".format(e, d)
self.assertComplexTuplesAlmostEqual (expected_result, dst_data, 1)
@@ -77,43 +90,55 @@ class test_mpsk_receiver(gr_unittest.TestCase):
# Test QPSK sync
M = 4
theta = 0
- loop_bw = 2*cmath.pi/100.0
+ loop_bw = cmath.pi/100.0
fmin = -0.5
fmax = 0.5
- mu = 0.25
+ mu = 0.5
gain_mu = 0.01
omega = 2
- gain_omega = 0.001
+ gain_omega = 0.01
omega_rel = 0.001
- self.test = digital_swig.mpsk_receiver_cc(M, theta, loop_bw,
- fmin, fmax, mu, gain_mu,
- omega, gain_omega,
- omega_rel)
+ self.test = digital.mpsk_receiver_cc(M, theta, loop_bw,
+ fmin, fmax, mu, gain_mu,
+ omega, gain_omega,
+ omega_rel)
- data = 1000*[complex( 0.707, 0.707), complex( 0.707, 0.707),
- complex(-0.707, 0.707), complex(-0.707, 0.707),
- complex(-0.707, -0.707), complex(-0.707, -0.707),
- complex( 0.707, -0.707), complex( 0.707, -0.707)]
+ data = 10000*[complex( 0.707, 0.707),
+ complex(-0.707, 0.707),
+ complex(-0.707, -0.707),
+ complex( 0.707, -0.707)]
+ data = [0.5*d for d in data]
self.src = gr.vector_source_c(data, False)
self.snk = gr.vector_sink_c()
- self.tb.connect(self.src, self.test, self.snk)
+ # pulse shaping interpolation filter
+ nfilts = 32
+ excess_bw = 0.35
+ ntaps = 11 * int(omega*nfilts)
+ rrc_taps0 = gr.firdes.root_raised_cosine(
+ nfilts, nfilts, 1.0, excess_bw, ntaps)
+ rrc_taps1 = gr.firdes.root_raised_cosine(
+ 1, omega, 1.0, excess_bw, 11*omega)
+ self.rrc0 = filter.pfb_arb_resampler_ccf(omega, rrc_taps0)
+ self.rrc1 = filter.fir_filter_ccf(1, rrc_taps1)
+
+ self.tb.connect(self.src, self.rrc0, self.rrc1, self.test, self.snk)
self.tb.run()
- expected_result = 1000*[complex(0, -1.0), complex(1.0, 0),
- complex(0, 1.0), complex(-1.0, 0)]
+ expected_result = 10000*[complex(0, +0.5), complex(-0.5, 0),
+ complex(0, -0.5), complex(+0.5, 0)]
dst_data = self.snk.data()
# Only compare last Ncmp samples
- Ncmp = 100
+ Ncmp = 1000
len_e = len(expected_result)
len_d = len(dst_data)
- expected_result = expected_result[len_e - Ncmp:]
+ expected_result = expected_result[len_e - Ncmp - 1:-1]
dst_data = dst_data[len_d - Ncmp:]
#for e,d in zip(expected_result, dst_data):
- # print e, d
+ # print "{0:+.02f} {1:+.02f}".format(e, d)
self.assertComplexTuplesAlmostEqual (expected_result, dst_data, 1)
diff --git a/gr-digital/python/qa_pfb_clock_sync.py b/gr-digital/python/qa_pfb_clock_sync.py
index 06c8a60ba7..27322616de 100755
--- a/gr-digital/python/qa_pfb_clock_sync.py
+++ b/gr-digital/python/qa_pfb_clock_sync.py
@@ -21,6 +21,7 @@
#
from gnuradio import gr, gr_unittest
+import filter_swig as filter
import digital_swig as digital
import random, cmath
@@ -52,7 +53,7 @@ class test_pfb_clock_sync(gr_unittest.TestCase):
max_rate_deviation,
osps)
- data = 1000*[complex(1,0), complex(-1,0)]
+ data = 10000*[complex(1,0), complex(-1,0)]
self.src = gr.vector_source_c(data, False)
# pulse shaping interpolation filter
@@ -62,18 +63,18 @@ class test_pfb_clock_sync(gr_unittest.TestCase):
1.0, # symbol rate
excess_bw, # excess bandwidth (roll-off factor)
ntaps)
- self.rrc_filter = gr.pfb_arb_resampler_ccf(sps, rrc_taps)
+ self.rrc_filter = filter.pfb_arb_resampler_ccf(sps, rrc_taps)
self.snk = gr.vector_sink_c()
self.tb.connect(self.src, self.rrc_filter, self.test, self.snk)
self.tb.run()
- expected_result = 1000*[complex(-1,0), complex(1,0)]
+ expected_result = 10000*[complex(-1,0), complex(1,0)]
dst_data = self.snk.data()
# Only compare last Ncmp samples
- Ncmp = 100
+ Ncmp = 1000
len_e = len(expected_result)
len_d = len(dst_data)
expected_result = expected_result[len_e - Ncmp:]
@@ -105,7 +106,7 @@ class test_pfb_clock_sync(gr_unittest.TestCase):
max_rate_deviation,
osps)
- data = 1000*[1, -1]
+ data = 10000*[1, -1]
self.src = gr.vector_source_f(data, False)
# pulse shaping interpolation filter
@@ -115,18 +116,18 @@ class test_pfb_clock_sync(gr_unittest.TestCase):
1.0, # symbol rate
excess_bw, # excess bandwidth (roll-off factor)
ntaps)
- self.rrc_filter = gr.pfb_arb_resampler_fff(sps, rrc_taps)
+ self.rrc_filter = filter.pfb_arb_resampler_fff(sps, rrc_taps)
self.snk = gr.vector_sink_f()
self.tb.connect(self.src, self.rrc_filter, self.test, self.snk)
self.tb.run()
- expected_result = 1000*[-1, 1]
+ expected_result = 10000*[-1, 1]
dst_data = self.snk.data()
# Only compare last Ncmp samples
- Ncmp = 100
+ Ncmp = 1000
len_e = len(expected_result)
len_d = len(dst_data)
expected_result = expected_result[len_e - Ncmp:]
diff --git a/gr-digital/python/qpsk.py b/gr-digital/python/qpsk.py
index 2fdeabd40f..d6c06bc83f 100644
--- a/gr-digital/python/qpsk.py
+++ b/gr-digital/python/qpsk.py
@@ -28,7 +28,7 @@ Demodulation is not included since the generic_mod_demod
from gnuradio import gr
from gnuradio.digital.generic_mod_demod import generic_mod, generic_demod
from utils import mod_codes
-import digital_swig
+import digital_swig as digital
import modulation_utils
# The default encoding (e.g. gray-code, set-partition)
@@ -41,7 +41,7 @@ _def_mod_code = mod_codes.GRAY_CODE
def qpsk_constellation(mod_code=_def_mod_code):
if mod_code != mod_codes.GRAY_CODE:
raise ValueError("This QPSK mod/demod works only for gray-coded constellations.")
- return digital_swig.constellation_qpsk()
+ return digital.constellation_qpsk()
# /////////////////////////////////////////////////////////////////////////////
# QPSK modulator
@@ -62,12 +62,12 @@ class qpsk_mod(generic_mod):
pre_diff_code = True
if not differential:
- constellation = digital_swig.constellation_qpsk()
+ constellation = digital.constellation_qpsk()
if mod_code != mod_codes.GRAY_CODE:
raise ValueError("This QPSK mod/demod works only for gray-coded constellations.")
else:
- constellation = digital_swig.constellation_dqpsk()
- if mod_code not in (mod_codes.GRAY_CODE or mod_codes.NO_CODE):
+ constellation = digital.constellation_dqpsk()
+ if mod_code not in set([mod_codes.GRAY_CODE, mod_codes.NO_CODE]):
raise ValueError("That mod_code is not supported for DQPSK mod/demod.")
if mod_code == mod_codes.NO_CODE:
pre_diff_code = False
@@ -98,12 +98,12 @@ class qpsk_demod(generic_demod):
pre_diff_code = True
if not differential:
- constellation = digital_swig.constellation_qpsk()
+ constellation = digital.constellation_qpsk()
if mod_code != mod_codes.GRAY_CODE:
raise ValueError("This QPSK mod/demod works only for gray-coded constellations.")
else:
- constellation = digital_swig.constellation_dqpsk()
- if mod_code not in (mod_codes.GRAY_CODE or mod_codes.NO_CODE):
+ constellation = digital.constellation_dqpsk()
+ if mod_code not in set([mod_codes.GRAY_CODE, mod_codes.NO_CODE]):
raise ValueError("That mod_code is not supported for DQPSK mod/demod.")
if mod_code == mod_codes.NO_CODE:
pre_diff_code = False
@@ -121,7 +121,7 @@ class qpsk_demod(generic_demod):
def dqpsk_constellation(mod_code=_def_mod_code):
if mod_code != mod_codes.GRAY_CODE:
raise ValueError("The DQPSK constellation is only generated for gray_coding. But it can be used for non-grayed coded modulation if one doesn't use the pre-differential code.")
- return digital_swig.constellation_dqpsk()
+ return digital.constellation_dqpsk()
# /////////////////////////////////////////////////////////////////////////////
# DQPSK modulator
@@ -138,7 +138,7 @@ class dqpsk_mod(qpsk_mod):
See generic_mod block for list of parameters.
"""
- super(dqpsk_mod, self).__init__(mod_code, differential=True,
+ super(dqpsk_mod, self).__init__(mod_code,
*args, **kwargs)
# /////////////////////////////////////////////////////////////////////////////
@@ -158,7 +158,7 @@ class dqpsk_demod(qpsk_demod):
See generic_demod block for list of parameters.
"""
- super(dqpsk_demod, self).__init__(mod_code, differential=True,
+ super(dqpsk_demod, self).__init__(mod_code,
*args, **kwargs)
#
diff --git a/gr-digital/swig/CMakeLists.txt b/gr-digital/swig/CMakeLists.txt
index 72ef18832f..fab11ab56a 100644
--- a/gr-digital/swig/CMakeLists.txt
+++ b/gr-digital/swig/CMakeLists.txt
@@ -25,10 +25,13 @@ include(GrSwig)
set(GR_SWIG_INCLUDE_DIRS
${GR_DIGITAL_INCLUDE_DIRS}
- ${GNURADIO_CORE_INCLUDE_DIRS}
+ ${GR_FILTER_INCLUDE_DIRS}
${GNURADIO_CORE_SWIG_INCLUDE_DIRS}
)
+# Setup swig docs to depend on includes and pull in from build directory
+set(GR_SWIG_LIBRARIES gnuradio-digital gnuradio-filter)
+set(GR_SWIG_TARGET_DEPS digital_generated_includes core_swig)
set(GR_SWIG_DOC_FILE ${CMAKE_CURRENT_BINARY_DIR}/digital_swig_doc.i)
set(GR_SWIG_DOC_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/../lib)
diff --git a/gr-digital/swig/digital_kurtotic_equalizer_cc.i b/gr-digital/swig/digital_kurtotic_equalizer_cc.i
index 67a9dc6fdc..e51f2ca048 100644
--- a/gr-digital/swig/digital_kurtotic_equalizer_cc.i
+++ b/gr-digital/swig/digital_kurtotic_equalizer_cc.i
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2011 Free Software Foundation, Inc.
+ * Copyright 2011,2012 Free Software Foundation, Inc.
*
* This file is part of GNU Radio
*
@@ -24,17 +24,16 @@ GR_SWIG_BLOCK_MAGIC(digital,kurtotic_equalizer_cc)
// retrieve info on the base class, without generating wrappers since
// the base class has a pure virual method.
-%import "gr_adaptive_fir_ccc.i"
+//%import "gr_adaptive_fir_ccc.i"
digital_kurtotic_equalizer_cc_sptr
digital_make_kurtotic_equalizer_cc(int num_taps,
float mu);
-class digital_kurtotic_equalizer_cc : public gr_adaptive_fir_ccc
+class digital_kurtotic_equalizer_cc :
+ public gr_sync_decimator, public gr::filter::kernel::adaptive_fir_ccc
{
-private:
- digital_kurtotic_equalizer_cc(int num_taps, float mu);
-
public:
void set_gain(float mu);
+ float gain() const;
};
diff --git a/gr-digital/swig/digital_lms_dd_equalizer_cc.i b/gr-digital/swig/digital_lms_dd_equalizer_cc.i
index bd5c6ae29d..46ddfce79c 100644
--- a/gr-digital/swig/digital_lms_dd_equalizer_cc.i
+++ b/gr-digital/swig/digital_lms_dd_equalizer_cc.i
@@ -23,22 +23,18 @@
GR_SWIG_BLOCK_MAGIC(digital,lms_dd_equalizer_cc)
-// retrieve info on the base class, without generating wrappers since
-// the base class has a pure virual method.
-%import "gr_adaptive_fir_ccc.i"
-
-
digital_lms_dd_equalizer_cc_sptr
-digital_make_lms_dd_equalizer_cc (int num_taps,
- float mu, int sps,
- digital_constellation_sptr cnst);
+digital_make_lms_dd_equalizer_cc(int num_taps,
+ float mu, int sps,
+ digital_constellation_sptr cnst);
-class digital_lms_dd_equalizer_cc : public gr_sync_block
+class digital_lms_dd_equalizer_cc :
+ public gr_sync_decimator, public gr::filter::kernel::adaptive_fir_ccc
{
private:
- digital_lms_dd_equalizer_cc (int num_taps,
- float mu, int sps,
- digital_constellation_sptr cnst);
+ digital_lms_dd_equalizer_cc(int num_taps,
+ float mu, int sps,
+ digital_constellation_sptr cnst);
public:
float get_gain();
diff --git a/gr-digital/swig/digital_pfb_clock_sync_ccf.i b/gr-digital/swig/digital_pfb_clock_sync_ccf.i
index dbba614cc1..abbfac3d5c 100644
--- a/gr-digital/swig/digital_pfb_clock_sync_ccf.i
+++ b/gr-digital/swig/digital_pfb_clock_sync_ccf.i
@@ -35,7 +35,7 @@ class digital_pfb_clock_sync_ccf : public gr_block
public:
void set_taps(const std::vector<float> &taps,
std::vector< std::vector<float> > &ourtaps,
- std::vector<gr_fir_ccf*> &ourfilter);
+ std::vector<gr::filter::kernel::fir_filter_ccf*> &ourfilter);
std::vector< std::vector<float> > get_taps();
std::vector< std::vector<float> > get_diff_taps();
diff --git a/gr-digital/swig/digital_pfb_clock_sync_fff.i b/gr-digital/swig/digital_pfb_clock_sync_fff.i
index 956495e5dd..4a28a9720a 100644
--- a/gr-digital/swig/digital_pfb_clock_sync_fff.i
+++ b/gr-digital/swig/digital_pfb_clock_sync_fff.i
@@ -33,9 +33,9 @@ digital_make_pfb_clock_sync_fff(double sps, float loop_bw,
class digital_pfb_clock_sync_fff : public gr_block
{
public:
- void set_taps (const std::vector<float> &taps,
- std::vector< std::vector<float> > &ourtaps,
- std::vector<gr_fir_fff*> &ourfilter);
+ void set_taps(const std::vector<float> &taps,
+ std::vector< std::vector<float> > &ourtaps,
+ std::vector<gr::filter::kernel::fir_filter_fff*> &ourfilter);
std::vector< std::vector<float> > get_taps();
std::vector< std::vector<float> > get_diff_taps();