diff options
author | Tom Rondeau <trondeau@vt.edu> | 2012-08-10 19:48:37 -0400 |
---|---|---|
committer | Tom Rondeau <trondeau@vt.edu> | 2012-08-10 19:48:37 -0400 |
commit | 5aaea26d457b7ed4c19096072b46b15b4e3f54b4 (patch) | |
tree | 35777dffb8de293af23ecfdad1c1a37612697315 /gr-digital | |
parent | b7cf0bf00b404c37214e3b617bf53862741f76e7 (diff) | |
parent | a61ddc223da190476b38f891ea425f44d8c5f269 (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')
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(); |