summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt16
-rw-r--r--cmake/Modules/GrBuildTypes.cmake160
-rw-r--r--cmake/Modules/GrMiscUtils.cmake182
-rw-r--r--cmake/Toolchains/oe-sdk_cross.cmake2
-rw-r--r--docs/doxygen/Doxyfile.in2
-rw-r--r--docs/doxygen/other/build_guide.dox194
-rw-r--r--docs/doxygen/other/components.dox34
-rw-r--r--docs/doxygen/other/extra_pages.dox320
-rw-r--r--docs/doxygen/other/main_page.dox503
-rw-r--r--docs/doxygen/other/metadata.dox15
-rw-r--r--docs/doxygen/other/msg_passing.dox5
-rw-r--r--docs/doxygen/other/oot_config.dox78
-rw-r--r--docs/doxygen/other/operating_fg.dox278
-rw-r--r--docs/doxygen/other/prefs.dox87
-rw-r--r--docs/doxygen/other/python_blocks.dox154
-rw-r--r--docs/doxygen/other/usage.dox43
-rw-r--r--docs/doxygen/other/volk_guide.dox152
-rw-r--r--docs/exploring-gnuradio/exploring_gnuradio.dox8
-rw-r--r--gnuradio-runtime/lib/CMakeLists.txt31
-rw-r--r--gnuradio-runtime/lib/block.cc1
-rw-r--r--gnuradio-runtime/lib/controlport/CMakeLists.txt2
-rw-r--r--gnuradio-runtime/python/gnuradio/__init__.py1
-rw-r--r--gr-analog/include/gnuradio/analog/CMakeLists.txt55
-rw-r--r--gr-analog/lib/CMakeLists.txt84
-rw-r--r--gr-atsc/lib/CMakeLists.txt12
-rw-r--r--gr-audio/examples/grc/cvsd_sweep.grc2074
-rw-r--r--gr-audio/examples/grc/dial_tone.grc332
-rw-r--r--gr-audio/lib/CMakeLists.txt12
-rw-r--r--gr-blocks/examples/ctrlport/pfb_sync_test-qt.grc854
-rw-r--r--gr-blocks/examples/ctrlport/pfb_sync_test.grc514
-rw-r--r--gr-blocks/examples/matrix_multiplexer.grc1110
-rw-r--r--gr-blocks/grc/blocks_block_tree.xml1
-rw-r--r--gr-blocks/grc/blocks_copy.xml166
-rw-r--r--gr-blocks/grc/blocks_min_xx.xml58
-rw-r--r--gr-blocks/grc/blocks_multiply_matrix_xx.xml68
-rw-r--r--gr-blocks/grc/blocks_mute_xx.xml5
-rw-r--r--gr-blocks/include/gnuradio/blocks/CMakeLists.txt112
-rw-r--r--gr-blocks/include/gnuradio/blocks/min_XX.h.t57
-rw-r--r--gr-blocks/include/gnuradio/blocks/multiply_const_cc.h2
-rw-r--r--gr-blocks/include/gnuradio/blocks/multiply_const_vcc.h62
-rw-r--r--gr-blocks/include/gnuradio/blocks/multiply_const_vff.h62
-rw-r--r--gr-blocks/include/gnuradio/blocks/multiply_matrix_XX.h.t103
-rw-r--r--gr-blocks/include/gnuradio/blocks/sub_ff.h51
-rw-r--r--gr-blocks/lib/CMakeLists.txt154
-rw-r--r--gr-blocks/lib/float_to_complex_impl.cc15
-rw-r--r--gr-blocks/lib/min_XX_impl.cc.t80
-rw-r--r--gr-blocks/lib/min_XX_impl.h.t50
-rw-r--r--gr-blocks/lib/multiply_const_cc_impl.cc2
-rw-r--r--gr-blocks/lib/multiply_const_cc_impl.h2
-rw-r--r--gr-blocks/lib/multiply_const_vcc_impl.cc72
-rw-r--r--gr-blocks/lib/multiply_const_vcc_impl.h50
-rw-r--r--gr-blocks/lib/multiply_const_vff_impl.cc72
-rw-r--r--gr-blocks/lib/multiply_const_vff_impl.h50
-rw-r--r--gr-blocks/lib/multiply_matrix_cc_impl.cc192
-rw-r--r--gr-blocks/lib/multiply_matrix_cc_impl.h59
-rw-r--r--gr-blocks/lib/multiply_matrix_ff_impl.cc192
-rw-r--r--gr-blocks/lib/multiply_matrix_ff_impl.h59
-rw-r--r--gr-blocks/lib/mute_XX_impl.cc.t3
-rw-r--r--gr-blocks/lib/mute_XX_impl.h.t1
-rw-r--r--gr-blocks/lib/sub_ff_impl.cc81
-rw-r--r--gr-blocks/lib/sub_ff_impl.h47
-rwxr-xr-xgr-blocks/python/blocks/qa_add_mult_div_sub.py72
-rwxr-xr-xgr-blocks/python/blocks/qa_max.py118
-rw-r--r--gr-blocks/python/blocks/qa_min.py178
-rwxr-xr-xgr-blocks/python/blocks/qa_multiply_matrix_ff.py172
-rw-r--r--gr-blocks/swig/blocks_swig3.i12
-rw-r--r--gr-channels/examples/demo_spec_an.grc1326
-rw-r--r--gr-channels/lib/CMakeLists.txt12
-rw-r--r--gr-comedi/lib/CMakeLists.txt12
-rw-r--r--gr-digital/examples/demod/ber_simulation.grc956
-rw-r--r--gr-digital/examples/demod/digital_freq_lock.grc1574
-rw-r--r--gr-digital/examples/demod/dpsk_loopback.grc690
-rw-r--r--gr-digital/examples/demod/mpsk_demod.grc780
-rw-r--r--gr-digital/examples/demod/pam_sync.grc1970
-rw-r--r--gr-digital/examples/demod/pam_timing.grc2266
-rw-r--r--gr-digital/examples/demod/test_corr_and_sync.grc528
-rw-r--r--gr-digital/examples/ofdm/ofdm_loopback.grc1058
-rw-r--r--gr-digital/examples/ofdm/rx_ofdm.grc358
-rw-r--r--gr-digital/examples/ofdm/tx_ofdm.grc1104
-rw-r--r--gr-digital/grc/digital_constellation.xml90
-rw-r--r--gr-digital/grc/digital_constellation_receiver_cb.xml143
-rw-r--r--gr-digital/grc/digital_constellation_rect.xml102
-rw-r--r--gr-digital/include/gnuradio/digital/CMakeLists.txt51
-rw-r--r--gr-digital/lib/CMakeLists.txt79
-rw-r--r--gr-digital/lib/binary_slicer_fb_impl.cc16
-rw-r--r--gr-dtv/CMakeLists.txt108
-rw-r--r--gr-dtv/apps/CMakeLists.txt29
-rw-r--r--gr-dtv/doc/CMakeLists.txt23
-rw-r--r--gr-dtv/doc/README.dtv13
-rw-r--r--gr-dtv/examples/CMakeLists.txt26
-rw-r--r--gr-dtv/examples/file_atsc_rx.grc485
-rw-r--r--gr-dtv/examples/uhd_atsc_capture.grc1076
-rw-r--r--gr-dtv/examples/uhd_rx_atsc.grc1976
-rw-r--r--gr-dtv/gnuradio-dtv.pc.in11
-rw-r--r--gr-dtv/grc/CMakeLists.txt35
-rw-r--r--gr-dtv/grc/dtv_atsc_deinterleaver.xml25
-rw-r--r--gr-dtv/grc/dtv_atsc_depad.xml24
-rw-r--r--gr-dtv/grc/dtv_atsc_derandomizer.xml25
-rw-r--r--gr-dtv/grc/dtv_atsc_equalizer.xml25
-rw-r--r--gr-dtv/grc/dtv_atsc_fpll.xml29
-rw-r--r--gr-dtv/grc/dtv_atsc_fs_checker.xml25
-rw-r--r--gr-dtv/grc/dtv_atsc_rs_decoder.xml25
-rw-r--r--gr-dtv/grc/dtv_atsc_rx.xml35
-rw-r--r--gr-dtv/grc/dtv_atsc_rx_filter.xml35
-rw-r--r--gr-dtv/grc/dtv_atsc_sync.xml30
-rw-r--r--gr-dtv/grc/dtv_atsc_viterbi_decoder.xml25
-rw-r--r--gr-dtv/grc/dtv_block_tree.xml48
-rw-r--r--gr-dtv/include/gnuradio/dtv/CMakeLists.txt37
-rw-r--r--gr-dtv/include/gnuradio/dtv/api.h33
-rw-r--r--gr-dtv/include/gnuradio/dtv/atsc_consts.h47
-rw-r--r--gr-dtv/include/gnuradio/dtv/atsc_deinterleaver.h54
-rw-r--r--gr-dtv/include/gnuradio/dtv/atsc_depad.h54
-rw-r--r--gr-dtv/include/gnuradio/dtv/atsc_derandomizer.h54
-rw-r--r--gr-dtv/include/gnuradio/dtv/atsc_equalizer.h53
-rw-r--r--gr-dtv/include/gnuradio/dtv/atsc_fpll.h70
-rw-r--r--gr-dtv/include/gnuradio/dtv/atsc_fs_checker.h53
-rw-r--r--gr-dtv/include/gnuradio/dtv/atsc_rs_decoder.h53
-rw-r--r--gr-dtv/include/gnuradio/dtv/atsc_sync.h55
-rw-r--r--gr-dtv/include/gnuradio/dtv/atsc_viterbi_decoder.h53
-rw-r--r--gr-dtv/lib/CMakeLists.txt104
-rw-r--r--gr-dtv/lib/atsc/atsc_deinterleaver_impl.cc97
-rw-r--r--gr-dtv/lib/atsc/atsc_deinterleaver_impl.h75
-rw-r--r--gr-dtv/lib/atsc/atsc_depad_impl.cc66
-rw-r--r--gr-dtv/lib/atsc/atsc_depad_impl.h45
-rw-r--r--gr-dtv/lib/atsc/atsc_derandomizer_impl.cc79
-rw-r--r--gr-dtv/lib/atsc/atsc_derandomizer_impl.h48
-rw-r--r--gr-dtv/lib/atsc/atsc_equalizer_impl.cc183
-rw-r--r--gr-dtv/lib/atsc/atsc_equalizer_impl.h71
-rw-r--r--gr-dtv/lib/atsc/atsc_fake_single_viterbi.cc72
-rw-r--r--gr-dtv/lib/atsc/atsc_fake_single_viterbi.h52
-rw-r--r--gr-dtv/lib/atsc/atsc_fpll_impl.cc95
-rw-r--r--gr-dtv/lib/atsc/atsc_fpll_impl.h53
-rw-r--r--gr-dtv/lib/atsc/atsc_fs_checker_impl.cc128
-rw-r--r--gr-dtv/lib/atsc/atsc_fs_checker_impl.h67
-rw-r--r--gr-dtv/lib/atsc/atsc_interleaver_fifo.h86
-rw-r--r--gr-dtv/lib/atsc/atsc_pnXXX_impl.h59
-rw-r--r--gr-dtv/lib/atsc/atsc_randomize.cc117
-rw-r--r--gr-dtv/lib/atsc/atsc_randomize.h92
-rw-r--r--gr-dtv/lib/atsc/atsc_rs_decoder_impl.cc131
-rw-r--r--gr-dtv/lib/atsc/atsc_rs_decoder_impl.h62
-rw-r--r--gr-dtv/lib/atsc/atsc_single_viterbi.cc123
-rw-r--r--gr-dtv/lib/atsc/atsc_single_viterbi.h60
-rw-r--r--gr-dtv/lib/atsc/atsc_syminfo_impl.h62
-rw-r--r--gr-dtv/lib/atsc/atsc_sync_impl.cc196
-rw-r--r--gr-dtv/lib/atsc/atsc_sync_impl.h83
-rw-r--r--gr-dtv/lib/atsc/atsc_types.h269
-rw-r--r--gr-dtv/lib/atsc/atsc_viterbi_decoder_impl.cc139
-rw-r--r--gr-dtv/lib/atsc/atsc_viterbi_decoder_impl.h76
-rw-r--r--gr-dtv/lib/atsc/atsc_viterbi_gen.cc267
-rw-r--r--gr-dtv/lib/atsc/interleaver_fifo.h84
-rw-r--r--gr-dtv/lib/gnuradio-dtv.rc.in55
-rw-r--r--gr-dtv/python/dtv/CMakeLists.txt50
-rw-r--r--gr-dtv/python/dtv/__init__.py37
-rw-r--r--gr-dtv/python/dtv/atsc_rx.py70
-rw-r--r--gr-dtv/python/dtv/atsc_rx_filter.py55
-rwxr-xr-xgr-dtv/python/dtv/qa_dtv.py37
-rw-r--r--gr-dtv/swig/CMakeLists.txt56
-rw-r--r--gr-dtv/swig/dtv_swig.i60
-rw-r--r--gr-fcd/examples/grc/CMakeLists.txt2
-rw-r--r--gr-fcd/examples/grc/fcd_apt_rx.grc818
-rw-r--r--gr-fcd/examples/grc/fcd_fft.grc564
-rw-r--r--gr-fcd/examples/grc/fcd_fft_wx.grc320
-rw-r--r--gr-fcd/examples/grc/fcd_nfm_rx.grc1052
-rw-r--r--gr-fec/grc/variable_cc_decoder_def_list.xml4
-rw-r--r--gr-fec/grc/variable_cc_encoder_def_list.xml12
-rw-r--r--gr-fec/grc/variable_ccsds_encoder_def_list.xml12
-rw-r--r--gr-fec/grc/variable_dummy_decoder_def_list.xml4
-rw-r--r--gr-fec/grc/variable_dummy_encoder_def_list.xml12
-rw-r--r--gr-fec/grc/variable_repetition_decoder_def_list.xml4
-rw-r--r--gr-fec/grc/variable_repetition_encoder_def_list.xml12
-rw-r--r--gr-fec/include/gnuradio/fec/CMakeLists.txt54
-rw-r--r--gr-fec/lib/CMakeLists.txt12
-rw-r--r--gr-fec/lib/dummy_decoder_impl.cc1
-rw-r--r--gr-fft/lib/CMakeLists.txt12
-rw-r--r--gr-filter/examples/resampler_demo.grc822
-rw-r--r--gr-filter/include/gnuradio/filter/CMakeLists.txt57
-rw-r--r--gr-filter/lib/CMakeLists.txt86
-rw-r--r--gr-noaa/examples/file_rx_hrpt.grc644
-rw-r--r--gr-noaa/examples/hrpt_demod.grc492
-rw-r--r--gr-noaa/examples/usrp_rx_hrpt.grc1684
-rw-r--r--gr-noaa/examples/usrp_rx_hrpt_nogui.grc728
-rw-r--r--gr-noaa/lib/CMakeLists.txt12
-rw-r--r--gr-pager/apps/usrp_rx_flex.grc1940
-rw-r--r--gr-pager/lib/CMakeLists.txt12
-rw-r--r--gr-qtgui/grc/qtgui_const_sink_x.xml17
-rw-r--r--gr-qtgui/grc/qtgui_freq_sink_x.xml142
-rw-r--r--gr-qtgui/grc/qtgui_histogram_sink_x.xml228
-rw-r--r--gr-qtgui/grc/qtgui_label.xml110
-rw-r--r--gr-qtgui/grc/qtgui_number_sink.xml158
-rw-r--r--gr-qtgui/grc/qtgui_sink_x.xml334
-rw-r--r--gr-qtgui/grc/qtgui_time_raster_x.xml215
-rw-r--r--gr-qtgui/grc/qtgui_time_sink_x.xml36
-rw-r--r--gr-qtgui/grc/qtgui_waterfall_sink_x.xml252
-rw-r--r--gr-qtgui/include/gnuradio/qtgui/FrequencyDisplayPlot.h2
-rw-r--r--gr-qtgui/include/gnuradio/qtgui/TimeDomainDisplayPlot.h3
-rw-r--r--gr-qtgui/include/gnuradio/qtgui/const_sink_c.h1
-rw-r--r--gr-qtgui/include/gnuradio/qtgui/form_menus.h64
-rw-r--r--gr-qtgui/include/gnuradio/qtgui/freqdisplayform.h2
-rw-r--r--gr-qtgui/include/gnuradio/qtgui/number_sink.h6
-rw-r--r--gr-qtgui/include/gnuradio/qtgui/numberdisplayform.h11
-rw-r--r--gr-qtgui/include/gnuradio/qtgui/time_sink_c.h2
-rw-r--r--gr-qtgui/include/gnuradio/qtgui/time_sink_f.h2
-rw-r--r--gr-qtgui/include/gnuradio/qtgui/timedisplayform.h2
-rw-r--r--gr-qtgui/include/gnuradio/qtgui/timerasterdisplayform.h6
-rw-r--r--gr-qtgui/include/gnuradio/qtgui/waterfalldisplayform.h6
-rw-r--r--gr-qtgui/lib/CMakeLists.txt12
-rw-r--r--gr-qtgui/lib/FrequencyDisplayPlot.cc16
-rw-r--r--gr-qtgui/lib/TimeDomainDisplayPlot.cc31
-rw-r--r--gr-qtgui/lib/const_sink_c_impl.cc6
-rw-r--r--gr-qtgui/lib/const_sink_c_impl.h1
-rw-r--r--gr-qtgui/lib/freqdisplayform.cc28
-rw-r--r--gr-qtgui/lib/number_sink_impl.cc38
-rw-r--r--gr-qtgui/lib/number_sink_impl.h6
-rw-r--r--gr-qtgui/lib/numberdisplayform.cc110
-rw-r--r--gr-qtgui/lib/time_sink_c_impl.cc7
-rw-r--r--gr-qtgui/lib/time_sink_c_impl.h2
-rw-r--r--gr-qtgui/lib/time_sink_f_impl.cc7
-rw-r--r--gr-qtgui/lib/time_sink_f_impl.h2
-rw-r--r--gr-qtgui/lib/timedisplayform.cc8
-rw-r--r--gr-qtgui/lib/timerasterdisplayform.cc42
-rw-r--r--gr-qtgui/lib/waterfalldisplayform.cc37
-rw-r--r--gr-trellis/examples/grc/CMakeLists.txt37
-rw-r--r--gr-trellis/examples/grc/interference_cancellation.grc2617
-rw-r--r--gr-trellis/examples/grc/pccc.grc757
-rw-r--r--gr-trellis/examples/grc/pccc1.grc755
-rw-r--r--gr-trellis/examples/grc/sccc.grc765
-rw-r--r--gr-trellis/examples/grc/sccc1.grc815
-rw-r--r--gr-trellis/grc/trellis_encoder_xx.xml135
-rw-r--r--gr-trellis/grc/trellis_pccc_decoder_combined_xx.xml316
-rw-r--r--gr-trellis/grc/trellis_pccc_decoder_x.xml210
-rw-r--r--gr-trellis/grc/trellis_pccc_encoder_xx.xml178
-rw-r--r--gr-trellis/grc/trellis_sccc_decoder_combined_xx.xml314
-rw-r--r--gr-trellis/grc/trellis_sccc_decoder_x.xml210
-rw-r--r--gr-trellis/grc/trellis_sccc_encoder_xx.xml178
-rw-r--r--gr-trellis/grc/trellis_siso_f.xml153
-rw-r--r--gr-trellis/grc/trellis_viterbi_combined_xx.xml227
-rw-r--r--gr-trellis/grc/trellis_viterbi_x.xml115
-rw-r--r--gr-trellis/include/gnuradio/trellis/CMakeLists.txt69
-rw-r--r--gr-trellis/lib/CMakeLists.txt97
-rw-r--r--gr-uhd/doc/uhd.dox56
-rw-r--r--gr-uhd/examples/grc/uhd_const_wave.grc468
-rw-r--r--gr-uhd/examples/grc/uhd_dpsk_mod.grc2173
-rw-r--r--gr-uhd/examples/grc/uhd_fft.grc1433
-rw-r--r--gr-uhd/examples/grc/uhd_msg_tune.grc1132
-rw-r--r--gr-uhd/examples/grc/uhd_rx_dpsk.grc907
-rw-r--r--gr-uhd/examples/grc/uhd_two_tone_loopback.grc940
-rw-r--r--gr-uhd/examples/grc/uhd_tx_dpsk.grc562
-rw-r--r--gr-uhd/examples/grc/uhd_wbfm_receive.grc784
-rwxr-xr-xgr-uhd/examples/python/freq_hopping.py6
-rw-r--r--gr-uhd/grc/gen_uhd_usrp_blocks.py5
-rw-r--r--gr-uhd/include/gnuradio/uhd/usrp_sink.h46
-rw-r--r--gr-uhd/include/gnuradio/uhd/usrp_source.h42
-rw-r--r--gr-uhd/lib/usrp_common.h198
-rw-r--r--gr-uhd/lib/usrp_sink_impl.cc233
-rw-r--r--gr-uhd/lib/usrp_sink_impl.h26
-rw-r--r--gr-uhd/lib/usrp_source_impl.cc94
-rw-r--r--gr-uhd/lib/usrp_source_impl.h31
-rw-r--r--gr-video-sdl/lib/CMakeLists.txt12
-rw-r--r--gr-vocoder/lib/CMakeLists.txt12
-rw-r--r--gr-wavelet/lib/CMakeLists.txt12
-rw-r--r--gr-wxgui/lib/CMakeLists.txt12
-rw-r--r--gr-zeromq/docs/zeromq.dox22
-rw-r--r--gr-zeromq/examples/zeromq_pubsub.grc444
-rw-r--r--gr-zeromq/examples/zeromq_pushpull.grc488
-rw-r--r--gr-zeromq/examples/zeromq_reqrep.grc492
-rw-r--r--gr-zeromq/lib/CMakeLists.txt12
-rw-r--r--grc/base/Block.py7
-rw-r--r--grc/base/Port.py31
-rw-r--r--grc/examples/simple/variable_config.grc398
-rw-r--r--grc/examples/xmlrpc/xmlrpc_client.grc262
-rw-r--r--grc/examples/xmlrpc/xmlrpc_server.grc750
-rw-r--r--grc/gui/ActionHandler.py5
-rw-r--r--grc/gui/Actions.py4
-rw-r--r--grc/gui/Bars.py3
-rw-r--r--grc/gui/Block.py22
-rw-r--r--grc/gui/Element.py6
-rw-r--r--grc/gui/FlowGraph.py77
-rw-r--r--grc/gui/Port.py66
-rw-r--r--grc/gui/Preferences.py6
-rw-r--r--grc/python/Block.py10
-rw-r--r--grc/python/FlowGraph.py2
-rw-r--r--grc/python/block.dtd7
-rw-r--r--volk/apps/volk_profile.cc5
-rw-r--r--volk/kernels/volk/asm/neon/volk_16i_max_star_horizontal_16i.s52
-rw-r--r--volk/kernels/volk/asm/neon/volk_32f_s32f_multiply_32f_neonasm.s52
-rw-r--r--volk/kernels/volk/asm/neon/volk_32f_x2_add_32f_a_neonasm.s54
-rw-r--r--volk/kernels/volk/asm/neon/volk_32f_x2_add_32f_a_neonpipeline.s68
-rw-r--r--volk/kernels/volk/asm/neon/volk_32f_x2_dot_prod_32f_neonasm.s58
-rw-r--r--volk/kernels/volk/asm/neon/volk_32f_x2_dot_prod_32f_neonasm_opts.s116
-rw-r--r--volk/kernels/volk/asm/neon/volk_32fc_32f_dot_prod_32fc_a_neonasm.s79
-rw-r--r--volk/kernels/volk/asm/neon/volk_32fc_32f_dot_prod_32fc_a_neonasmpipeline.s86
-rw-r--r--volk/kernels/volk/asm/neon/volk_32fc_32f_dot_prod_32fc_a_neonasmvmla.s74
-rw-r--r--volk/kernels/volk/asm/neon/volk_32fc_32f_dot_prod_32fc_unrollasm.s146
-rw-r--r--volk/kernels/volk/asm/neon/volk_32fc_x2_dot_prod_32fc_neonasm.s98
-rw-r--r--volk/kernels/volk/asm/neon/volk_32fc_x2_dot_prod_32fc_neonasm_opttests.s96
-rw-r--r--volk/kernels/volk/asm/neon/volk_32fc_x2_multiply_32fc_neonasm.s45
-rw-r--r--volk/kernels/volk/asm/neon/volk_arm_32fc_32f_dot_prod_32fc_a_neonpipeline.s92
-rw-r--r--volk/kernels/volk/volk_16i_max_star_16i.h38
-rw-r--r--volk/kernels/volk/volk_16i_max_star_horizontal_16i.h34
-rw-r--r--volk/kernels/volk/volk_16i_x4_quad_max_star_16i.h60
-rw-r--r--volk/kernels/volk/volk_16i_x5_add_quad_16i_x4.h49
-rw-r--r--volk/kernels/volk/volk_16u_byteswap.h30
-rw-r--r--volk/kernels/volk/volk_32f_binary_slicer_32i.h10
-rw-r--r--volk/kernels/volk/volk_32f_binary_slicer_8i.h187
-rw-r--r--volk/kernels/volk/volk_32f_invsqrt_32f.h31
-rw-r--r--volk/kernels/volk/volk_32f_s32f_multiply_32f.h31
-rw-r--r--volk/kernels/volk/volk_32f_sqrt_32f.h31
-rw-r--r--volk/kernels/volk/volk_32f_x2_add_32f.h43
-rw-r--r--volk/kernels/volk/volk_32f_x2_dot_prod_32f.h90
-rw-r--r--volk/kernels/volk/volk_32f_x2_interleave_32fc.h33
-rw-r--r--volk/kernels/volk/volk_32f_x2_max_32f.h36
-rw-r--r--volk/kernels/volk/volk_32f_x2_min_32f.h38
-rw-r--r--volk/kernels/volk/volk_32f_x2_multiply_32f.h29
-rw-r--r--volk/kernels/volk/volk_32f_x2_subtract_32f.h36
-rw-r--r--volk/kernels/volk/volk_32f_x3_sum_of_poly_32f.h131
-rw-r--r--volk/kernels/volk/volk_32fc_32f_dot_prod_32fc.h153
-rw-r--r--volk/kernels/volk/volk_32fc_32f_multiply_32fc.h37
-rw-r--r--volk/kernels/volk/volk_32fc_conjugate_32fc.h35
-rw-r--r--volk/kernels/volk/volk_32fc_magnitude_32f.h108
-rw-r--r--volk/kernels/volk/volk_32fc_magnitude_squared_32f.h42
-rw-r--r--volk/kernels/volk/volk_32fc_x2_dot_prod_32fc.h216
-rw-r--r--volk/kernels/volk/volk_32fc_x2_multiply_32fc.h111
-rw-r--r--volk/kernels/volk/volk_32fc_x2_multiply_conjugate_32fc.h53
-rw-r--r--volk/kernels/volk/volk_32fc_x2_square_dist_32f.h30
-rw-r--r--volk/kernels/volk/volk_8i_convert_16i.h39
-rw-r--r--volk/kernels/volk/volk_8ic_deinterleave_real_8i.h28
-rw-r--r--volk/lib/CMakeLists.txt43
-rw-r--r--volk/lib/testqa.cc1
328 files changed, 50727 insertions, 15017 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 7dccad01d3..7accbdc7ae 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -29,20 +29,24 @@ cmake_minimum_required(VERSION 2.6)
project(gnuradio CXX C)
enable_testing()
+list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/Modules)
+
+include(GrBuildTypes)
+
#select the release build type by default to get optimization flags
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE "Release")
message(STATUS "Build type not specified: defaulting to release.")
endif(NOT CMAKE_BUILD_TYPE)
+GR_CHECK_BUILD_TYPE(${CMAKE_BUILD_TYPE})
set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING "")
-
-list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/Modules)
+message(STATUS "Build type set to ${CMAKE_BUILD_TYPE}.")
# Set the version information here
set(VERSION_INFO_MAJOR_VERSION 3)
set(VERSION_INFO_API_COMPAT 7)
-set(VERSION_INFO_MINOR_VERSION 4)
-set(VERSION_INFO_MAINT_VERSION 0)
+set(VERSION_INFO_MINOR_VERSION 5)
+set(VERSION_INFO_MAINT_VERSION git)
include(GrVersion) #setup version info
# Append -O2 optimization flag for Debug builds
@@ -171,6 +175,9 @@ else(ENABLE_PERFORMANCE_COUNTERS)
message(STATUS "NO PERF COUNTERS")
endif(ENABLE_PERFORMANCE_COUNTERS)
+OPTION(ENABLE_STATIC_LIBS "Enable building of static libraries" OFF)
+message(STATUS "Building Static Libraries: ${ENABLE_STATIC_LIBS}")
+
########################################################################
# Variables replaced when configuring the package config files
########################################################################
@@ -317,6 +324,7 @@ add_subdirectory(gr-fft)
add_subdirectory(gr-filter)
add_subdirectory(gr-analog)
add_subdirectory(gr-digital)
+add_subdirectory(gr-dtv)
add_subdirectory(gr-atsc)
add_subdirectory(gr-audio)
add_subdirectory(gr-comedi)
diff --git a/cmake/Modules/GrBuildTypes.cmake b/cmake/Modules/GrBuildTypes.cmake
new file mode 100644
index 0000000000..34614c9d08
--- /dev/null
+++ b/cmake/Modules/GrBuildTypes.cmake
@@ -0,0 +1,160 @@
+# Copyright 2014 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+if(DEFINED __INCLUDED_GR_BUILD_TYPES_CMAKE)
+ return()
+endif()
+set(__INCLUDED_GR_BUILD_TYPES_CMAKE TRUE)
+
+# Standard CMake Build Types and their basic CFLAGS:
+# - None: nothing set
+# - Debug: -O2 -g
+# - Release: -O3
+# - RelWithDebInfo: -O3 -g
+# - MinSizeRel: -Os
+
+# Addtional Build Types, defined below:
+# - NoOptWithASM: -O0 -g -save-temps
+# - O2WithASM: -O2 -g -save-temps
+# - O3WithASM: -O3 -g -save-temps
+
+# Defines the list of acceptable cmake build types. When adding a new
+# build type below, make sure to add it to this list.
+list(APPEND AVAIL_BUILDTYPES
+ None Debug Release RelWithDebInfo MinSizeRel
+ NoOptWithASM O2WithASM O3WithASM
+)
+
+########################################################################
+# GR_CHECK_BUILD_TYPE(build type)
+#
+# Use this to check that the build type set in CMAKE_BUILD_TYPE on the
+# commandline is one of the valid build types used by this project. It
+# checks the value set in the cmake interface against the list of
+# known build types in AVAIL_BUILDTYPES. If the build type is found,
+# the function exits immediately. If nothing is found by the end of
+# checking all available build types, we exit with an error and list
+# the avialable build types.
+########################################################################
+function(GR_CHECK_BUILD_TYPE settype)
+ STRING(TOUPPER ${settype} _settype)
+ foreach(btype ${AVAIL_BUILDTYPES})
+ STRING(TOUPPER ${btype} _btype)
+ if(${_settype} STREQUAL ${_btype})
+ return() # found it; exit cleanly
+ endif(${_settype} STREQUAL ${_btype})
+ endforeach(btype)
+ # Build type not found; error out
+ message(FATAL_ERROR "Build type '${settype}' not valid, must be one of: ${AVAIL_BUILDTYPES}")
+endfunction(GR_CHECK_BUILD_TYPE)
+
+########################################################################
+# For GCC and Clang, we can set a build type:
+#
+# -DCMAKE_BUILD_TYPE=NoOptWithASM
+#
+# This type uses no optimization (-O0), outputs debug symbols (-g) and
+# outputs all intermediary files the build system produces, including
+# all assembly (.s) files. Look in the build directory for these
+# files.
+# NOTE: This is not defined on Windows systems.
+########################################################################
+if(NOT WIN32)
+ SET(CMAKE_CXX_FLAGS_NOOPTWITHASM "-Wall -save-temps -g -O0" CACHE STRING
+ "Flags used by the C++ compiler during NoOptWithASM builds." FORCE)
+ SET(CMAKE_C_FLAGS_NOOPTWITHASM "-Wall -save-temps -g -O0" CACHE STRING
+ "Flags used by the C compiler during NoOptWithASM builds." FORCE)
+ SET(CMAKE_EXE_LINKER_FLAGS_NOOPTWITHASM
+ "-Wl,--warn-unresolved-symbols,--warn-once" CACHE STRING
+ "Flags used for linking binaries during NoOptWithASM builds." FORCE)
+ SET(CMAKE_SHARED_LINKER_FLAGS_NOOPTWITHASM
+ "-Wl,--warn-unresolved-symbols,--warn-once" CACHE STRING
+ "Flags used by the shared lib linker during NoOptWithASM builds." FORCE)
+
+ MARK_AS_ADVANCED(
+ CMAKE_CXX_FLAGS_NOOPTWITHASM
+ CMAKE_C_FLAGS_NOOPTWITHASM
+ CMAKE_EXE_LINKER_FLAGS_NOOPTWITHASM
+ CMAKE_SHARED_LINKER_FLAGS_NOOPTWITHASM)
+endif(NOT WIN32)
+
+
+
+########################################################################
+# For GCC and Clang, we can set a build type:
+#
+# -DCMAKE_BUILD_TYPE=O2WithASM
+#
+# This type uses level 2 optimization (-O2), outputs debug symbols
+# (-g) and outputs all intermediary files the build system produces,
+# including all assembly (.s) files. Look in the build directory for
+# these files.
+# NOTE: This is not defined on Windows systems.
+########################################################################
+
+if(NOT WIN32)
+ SET(CMAKE_CXX_FLAGS_O2WITHASM "-Wall -save-temps -g -O2" CACHE STRING
+ "Flags used by the C++ compiler during O2WithASM builds." FORCE)
+ SET(CMAKE_C_FLAGS_O2WITHASM "-Wall -save-temps -g -O2" CACHE STRING
+ "Flags used by the C compiler during O2WithASM builds." FORCE)
+ SET(CMAKE_EXE_LINKER_FLAGS_O2WITHASM
+ "-Wl,--warn-unresolved-symbols,--warn-once" CACHE STRING
+ "Flags used for linking binaries during O2WithASM builds." FORCE)
+ SET(CMAKE_SHARED_LINKER_FLAGS_O2WITHASM
+ "-Wl,--warn-unresolved-symbols,--warn-once" CACHE STRING
+ "Flags used by the shared lib linker during O2WithASM builds." FORCE)
+
+ MARK_AS_ADVANCED(
+ CMAKE_CXX_FLAGS_O2WITHASM
+ CMAKE_C_FLAGS_O2WITHASM
+ CMAKE_EXE_LINKER_FLAGS_O2WITHASM
+ CMAKE_SHARED_LINKER_FLAGS_O2WITHASM)
+endif(NOT WIN32)
+
+
+########################################################################
+# For GCC and Clang, we can set a build type:
+#
+# -DCMAKE_BUILD_TYPE=O3WithASM
+#
+# This type uses level 3 optimization (-O3), outputs debug symbols
+# (-g) and outputs all intermediary files the build system produces,
+# including all assembly (.s) files. Look in the build directory for
+# these files.
+# NOTE: This is not defined on Windows systems.
+########################################################################
+
+if(NOT WIN32)
+ SET(CMAKE_CXX_FLAGS_O3WITHASM "-Wall -save-temps -g -O3" CACHE STRING
+ "Flags used by the C++ compiler during O3WithASM builds." FORCE)
+ SET(CMAKE_C_FLAGS_O3WITHASM "-Wall -save-temps -g -O3" CACHE STRING
+ "Flags used by the C compiler during O3WithASM builds." FORCE)
+ SET(CMAKE_EXE_LINKER_FLAGS_O3WITHASM
+ "-Wl,--warn-unresolved-symbols,--warn-once" CACHE STRING
+ "Flags used for linking binaries during O3WithASM builds." FORCE)
+ SET(CMAKE_SHARED_LINKER_FLAGS_O3WITHASM
+ "-Wl,--warn-unresolved-symbols,--warn-once" CACHE STRING
+ "Flags used by the shared lib linker during O3WithASM builds." FORCE)
+
+ MARK_AS_ADVANCED(
+ CMAKE_CXX_FLAGS_O3WITHASM
+ CMAKE_C_FLAGS_O3WITHASM
+ CMAKE_EXE_LINKER_FLAGS_O3WITHASM
+ CMAKE_SHARED_LINKER_FLAGS_O3WITHASM)
+endif(NOT WIN32)
diff --git a/cmake/Modules/GrMiscUtils.cmake b/cmake/Modules/GrMiscUtils.cmake
index 3d9a5f519b..188c40480b 100644
--- a/cmake/Modules/GrMiscUtils.cmake
+++ b/cmake/Modules/GrMiscUtils.cmake
@@ -1,4 +1,4 @@
-# Copyright 2010-2011 Free Software Foundation, Inc.
+# Copyright 2010-2011,2014 Free Software Foundation, Inc.
#
# This file is part of GNU Radio
#
@@ -94,7 +94,13 @@ macro(GR_ADD_CXX_COMPILER_FLAG_IF_AVAILABLE flag have)
include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG(${flag} ${have})
if(${have})
- add_definitions(${flag})
+ if(${CMAKE_VERSION} VERSION_GREATER "2.8.4")
+ STRING(FIND "${CMAKE_CXX_FLAGS}" "${flag}" flag_dup)
+ if(${flag_dup} EQUAL -1)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flag}")
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${flag}")
+ endif(${flag_dup} EQUAL -1)
+ endif(${CMAKE_VERSION} VERSION_GREATER "2.8.4")
endif(${have})
endmacro(GR_ADD_CXX_COMPILER_FLAG_IF_AVAILABLE)
@@ -345,3 +351,175 @@ set(CMAKE_REQUIRED_LIBRARIES -lpthread)
GR_ADD_COND_DEF(HAVE_SCHED_SETSCHEDULER)
endmacro(GR_CHECK_LINUX_SCHED_AVAIL)
+########################################################################
+# Macros to generate source and header files from template
+########################################################################
+macro(GR_EXPAND_X_H component root)
+
+ include(GrPython)
+
+ file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
+"#!${PYTHON_EXECUTABLE}
+
+import sys, os, re
+sys.path.append('${GR_RUNTIME_PYTHONPATH}')
+os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
+os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
+
+if __name__ == '__main__':
+ import build_utils
+ root, inp = sys.argv[1:3]
+ for sig in sys.argv[3:]:
+ name = re.sub ('X+', sig, root)
+ d = build_utils.standard_dict2(name, sig, '${component}')
+ build_utils.expand_template(d, inp)
+")
+
+ #make a list of all the generated headers
+ unset(expanded_files_h)
+ foreach(sig ${ARGN})
+ string(REGEX REPLACE "X+" ${sig} name ${root})
+ list(APPEND expanded_files_h ${CMAKE_CURRENT_BINARY_DIR}/${name}.h)
+ endforeach(sig)
+ unset(name)
+
+ #create a command to generate the headers
+ add_custom_command(
+ OUTPUT ${expanded_files_h}
+ DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.h.t
+ COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
+ ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
+ ${root} ${root}.h.t ${ARGN}
+ )
+
+ #install rules for the generated headers
+ list(APPEND generated_includes ${expanded_files_h})
+
+endmacro(GR_EXPAND_X_H)
+
+macro(GR_EXPAND_X_CC_H component root)
+
+ include(GrPython)
+
+ file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
+"#!${PYTHON_EXECUTABLE}
+
+import sys, os, re
+sys.path.append('${GR_RUNTIME_PYTHONPATH}')
+os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
+os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
+
+if __name__ == '__main__':
+ import build_utils
+ root, inp = sys.argv[1:3]
+ for sig in sys.argv[3:]:
+ name = re.sub ('X+', sig, root)
+ d = build_utils.standard_impl_dict2(name, sig, '${component}')
+ build_utils.expand_template(d, inp)
+")
+
+ #make a list of all the generated files
+ unset(expanded_files_cc)
+ unset(expanded_files_h)
+ foreach(sig ${ARGN})
+ string(REGEX REPLACE "X+" ${sig} name ${root})
+ list(APPEND expanded_files_cc ${CMAKE_CURRENT_BINARY_DIR}/${name}.cc)
+ list(APPEND expanded_files_h ${CMAKE_CURRENT_BINARY_DIR}/${name}.h)
+ endforeach(sig)
+ unset(name)
+
+ #create a command to generate the source files
+ add_custom_command(
+ OUTPUT ${expanded_files_cc}
+ DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.cc.t
+ COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
+ ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
+ ${root} ${root}.cc.t ${ARGN}
+ )
+
+ #create a command to generate the header files
+ add_custom_command(
+ OUTPUT ${expanded_files_h}
+ DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.h.t
+ COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
+ ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
+ ${root} ${root}.h.t ${ARGN}
+ )
+
+ #make source files depends on headers to force generation
+ set_source_files_properties(${expanded_files_cc}
+ PROPERTIES OBJECT_DEPENDS "${expanded_files_h}"
+ )
+
+ #install rules for the generated files
+ list(APPEND generated_sources ${expanded_files_cc})
+ list(APPEND generated_headers ${expanded_files_h})
+
+endmacro(GR_EXPAND_X_CC_H)
+
+macro(GR_EXPAND_X_CC_H_IMPL component root)
+
+ include(GrPython)
+
+ file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
+"#!${PYTHON_EXECUTABLE}
+
+import sys, os, re
+sys.path.append('${GR_RUNTIME_PYTHONPATH}')
+os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
+os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
+
+if __name__ == '__main__':
+ import build_utils
+ root, inp = sys.argv[1:3]
+ for sig in sys.argv[3:]:
+ name = re.sub ('X+', sig, root)
+ d = build_utils.standard_dict(name, sig, '${component}')
+ build_utils.expand_template(d, inp, '_impl')
+")
+
+ #make a list of all the generated files
+ unset(expanded_files_cc_impl)
+ unset(expanded_files_h_impl)
+ unset(expanded_files_h)
+ foreach(sig ${ARGN})
+ string(REGEX REPLACE "X+" ${sig} name ${root})
+ list(APPEND expanded_files_cc_impl ${CMAKE_CURRENT_BINARY_DIR}/${name}_impl.cc)
+ list(APPEND expanded_files_h_impl ${CMAKE_CURRENT_BINARY_DIR}/${name}_impl.h)
+ list(APPEND expanded_files_h ${CMAKE_CURRENT_BINARY_DIR}/../include/gnuradio/${component}/${name}.h)
+ endforeach(sig)
+ unset(name)
+
+ #create a command to generate the _impl.cc files
+ add_custom_command(
+ OUTPUT ${expanded_files_cc_impl}
+ DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}_impl.cc.t
+ COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
+ ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
+ ${root} ${root}_impl.cc.t ${ARGN}
+ )
+
+ #create a command to generate the _impl.h files
+ add_custom_command(
+ OUTPUT ${expanded_files_h_impl}
+ DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}_impl.h.t
+ COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
+ ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
+ ${root} ${root}_impl.h.t ${ARGN}
+ )
+
+ #make _impl.cc source files depend on _impl.h to force generation
+ set_source_files_properties(${expanded_files_cc_impl}
+ PROPERTIES OBJECT_DEPENDS "${expanded_files_h_impl}"
+ )
+
+ #make _impl.h source files depend on headers to force generation
+ set_source_files_properties(${expanded_files_h_impl}
+ PROPERTIES OBJECT_DEPENDS "${expanded_files_h}"
+ )
+
+ #install rules for the generated files
+ list(APPEND generated_sources ${expanded_files_cc_impl})
+ list(APPEND generated_headers ${expanded_files_h_impl})
+
+endmacro(GR_EXPAND_X_CC_H_IMPL)
diff --git a/cmake/Toolchains/oe-sdk_cross.cmake b/cmake/Toolchains/oe-sdk_cross.cmake
index 2a01d8f79f..788a22b372 100644
--- a/cmake/Toolchains/oe-sdk_cross.cmake
+++ b/cmake/Toolchains/oe-sdk_cross.cmake
@@ -1,6 +1,8 @@
set( CMAKE_SYSTEM_NAME Linux )
#set( CMAKE_C_COMPILER $ENV{CC} )
#set( CMAKE_CXX_COMPILER $ENV{CXX} )
+string(REGEX MATCH "sysroots/([a-zA-Z0-9]+)" CMAKE_SYSTEM_PROCESSOR $ENV{SDKTARGETSYSROOT})
+string(REGEX REPLACE "sysroots/" "" CMAKE_SYSTEM_PROCESSOR ${CMAKE_SYSTEM_PROCESSOR})
set( CMAKE_CXX_FLAGS $ENV{CXXFLAGS} CACHE STRING "" FORCE )
set( CMAKE_C_FLAGS $ENV{CFLAGS} CACHE STRING "" FORCE ) #same flags for C sources
set( CMAKE_LDFLAGS_FLAGS ${CMAKE_CXX_FLAGS} CACHE STRING "" FORCE ) #same flags for C sources
diff --git a/docs/doxygen/Doxyfile.in b/docs/doxygen/Doxyfile.in
index 6afecbd1bf..3b82e2c40c 100644
--- a/docs/doxygen/Doxyfile.in
+++ b/docs/doxygen/Doxyfile.in
@@ -1437,7 +1437,7 @@ PAPER_TYPE = letter
# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
# packages that should be included in the LaTeX output.
-EXTRA_PACKAGES =
+EXTRA_PACKAGES = amsmath,amssymb
# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
# the generated latex document. The header should contain everything until
diff --git a/docs/doxygen/other/build_guide.dox b/docs/doxygen/other/build_guide.dox
new file mode 100644
index 0000000000..5375379b08
--- /dev/null
+++ b/docs/doxygen/other/build_guide.dox
@@ -0,0 +1,194 @@
+/*! \page build_guide Build Instructions and Information
+
+\section dependencies Dependencies
+
+The list of GNU Radio dependencies and the minimum required versions,
+if any, to build the various GNU Radio components.
+
+Most of these components do not need to be individually compiled or
+installed. Instead, rely on your operating system's package manager or
+binary installation process (the <b>apt-get</b> system in Debian and
+Ubuntu, <b>yum</b> in RedHat and Fedora, etc.). GNU Radio tries to keep an
+up-to-date build guide for the majority of the supported operating
+systems on gnuradio.org
+(http://gnuradio.org/redmine/projects/gnuradio/wiki/BuildGuide).
+
+Not all dependencies are required for all components, and not all
+components are required for a given installation. The list of required
+components is determined by what the user requires from GNU Radio. If,
+for example, you do not use any Comedi-based hardware, do not worry
+about building gr-comedi.
+
+Before trying to build these from source, please try your system's
+installation tool (apt-get, pkg_install, YaST, yum, urpmi, etc.)
+first. Most recent systems have these packages available.
+
+\subsection dep_global Global Dependencies
+\li git http://code.google.com/p/msysgit
+\li cmake (>= 2.6.3) http://www.cmake.org/cmake/resources/software.html
+\li boost (>= 1.35) http://www.boostpro.com/download
+\li cppunit (>= 1.9.14) http://gaiacrtn.free.fr/cppunit/index.html
+\li fftw3f (>= 3.0.1) http://www.fftw.org/install/windows.html
+
+\subsection dep_python Python Wrappers
+\li python (>= 2.5) http://www.python.org/download/
+\li swig (>= 1.3.31) http://www.swig.org/download.html
+\li numpy (>= 1.1.0) http://sourceforge.net/projects/numpy/files/NumPy/
+
+\subsection dep_docs docs: Building the documentation
+\li doxygen (>= 1.5) http://www.stack.nl/~dimitri/doxygen/download.html
+\li latex* (>= 2.0) http://www.latex-project.org/
+
+\subsection dep_grc grc: The GNU Radio Companion
+\li Cheetah (>= 2.0) http://www.cheetahtemplate.org/
+\li pygtk (>= 2.10) http://www.pygtk.org/downloads.html
+
+\subsection dep_wavelet gr-wavelet: Collection of wavelet blocks
+\li gsl (>= 1.10) http://gnuwin32.sourceforge.net/packages/gsl.htm
+
+\subsection dep_gr_qtgui gr-qtgui: The QT-based Graphical User Interface
+\li qt (>= 4.4.0) http://qt.nokia.com/downloads/
+\li qwt (>= 5.2.0) http://sourceforge.net/projects/qwt/
+\li pyqt (>= 4.10.0) http://www.riverbankcomputing.co.uk/software/pyqt/download
+\li pyqwt* (>= 5.2.0) http://pyqwt.sourceforge.net/download.html
+
+\subsection dep_gr_wxgui gr-wxgui: The WX-based Graphical User Interface
+\li wxpython (>= 2.8) http://www.wxpython.org/
+\li python-lxml (>= 1.3.6) http://lxml.de/
+
+\subsection dep_gr_audio gr-audio: Audio Subsystems (system/OS dependent)
+\li audio-alsa (>= 0.9) http://www.alsa-project.org
+\li audio-jack (>= 0.8) http://jackaudio.org/
+\li portaudio (>= 19) http://www.portaudio.com/
+\li audio-oss (>= 1.0) http://www.opensound.com/oss.html
+\li audio-osx
+\li audio-windows
+
+* Optional but recommended dependencies.
+
+It is not necessary to satisfy all of these dependencies; just the
+one(s) that are right for your system. On Linux, don't expect
+audio-osx and audio-windows to be either satisfied or built.
+
+\subsection dep_uhd uhd: The Ettus USRP Hardware Driver Interface
+\li uhd (>= 3.0.0) http://code.ettus.com/redmine/ettus/projects/uhd/wiki
+
+\subsection dep_gr_video_sdl gr-video-sdl: PAL and NTSC display
+\li SDL (>= 1.2.0) http://www.libsdl.org/download-1.2.php
+
+\subsection dep_gr_comedi gr-comedi: Comedi hardware interface
+\li comedilib (>= 0.8.1) http://www.comedi.org/
+
+\subsection dep_gr_log gr-log: Logging Tools (Optional)
+\li log4cpp (>= 1.0) http://log4cpp.sourceforge.net/
+
+
+\section build_gr_cmake Building GNU Radio
+
+GNU Radio is built using the CMake build system
+(http://www.cmake.org/). The standard build method is as follows:
+
+\code
+$ mkdir $(builddir)
+$ cd $(builddir)
+$ cmake [OPTIONS] $(srcdir)
+$ make
+$ make test
+$ sudo make install
+\endcode
+
+The \$(builddir) is the directory in which the code is built. This
+<b>cannot</b> be the same path as where the source code resides. Often,
+\$(builddir) is \$(srcdir)/build.
+
+\section cmake_options CMake Options
+
+Options can be used to specify where to find various library or
+include file dependencies that are not automatically being found
+(-DCMAKE_PREFIX_PATH) or set the install prefix
+(-DCMAKE_INSTALL_PREFIX=(dir)).
+
+Components can also be enabled and disabled through the options. For a
+component named *gr-comp*, the option to disable would look like:
+-DENABLE_GR_COMP=off. The "off" could also be "false" or "no", and
+cmake is not case sensitive about these options. Similarly, "true",
+"on", or "yes" will turn this component on. All components are enabled
+by default so long as their dependencies are met.
+
+An example is -DENABLE_PYTHON=False turns off building any Python or
+Swigging components. The result will be the GNU Radio libraries and
+C++ programs/applications/examples. No Python or GRC files will be
+built or installed.
+
+The -DENABLE_DEFAULT=False can be used to disable all
+components. Individual components can then be selectively turned back
+on. For example, just buidling the VOLK library can be
+done with this:
+
+\code
+cmake -DENABLE_DEFAULT=Off -DENABLE_VOLK=True <srcdir>
+\endcode
+
+
+The build type allows you to specify the build as a debug or release
+version. Each type sets different flags for different purposes. To set
+the build type, use:
+
+\code
+-DCMAKE_BUILD_TYPE=<type>
+\endcode
+
+The available build types and the C/C++ flags they set are:
+
+\li None: No flags; define them yourself
+\li Release: -O3
+\li Debug: -O2 -g
+\li RelWithDebInfo: -O3 -g
+\li MinSizeRel: -Os
+\li NoOptWithASM: -O0 -g -save-temps
+\li O2WithASM: -O2 -g -save-temps
+\li O3WithASM: -O3 -g -save-temps
+
+If not specified, the "Release" mode is the default.
+
+
+\subsection cmake_other Collection of CMake Flags
+
+\li CMAKE_BUILD_TYPE: Build profile type defined above. Default is "release".
+\li CMAKE_INSTALL_PREFIX: Installation prefix path. Default is "/usr/local".
+\li ENABLE_PYTHON: Turn Python bindings on/off. Default is True.
+\li ENABLE_GR_<component>: Turn any top-level component on/off. Default is True for all.
+\li ENABLE_GR_CTRLPORT: Turn Building ControlPort. Default is True
+\li ENABLE_PERFORMANCE_COUNTERS: Turn performance counters on/off in runtime. Default is True.
+\li ENABLE_ORC: tells VOLK enable/disable use of Orc. Default is True.
+\li ENABLE_STATIC_LIBS: build static library files. Default is False.
+\li CMAKE_TOOLCHAIN_FILE: A toolchain file to setup the CMake environment for cross-compiling.
+
+Here are som other potentially helpful CMake flags. These are to help you specifically locate certain dependencies. While the CMake scripts themselves should generally find these for us, we can use these to help direct CMake to specific locations if we have installed a different version elsewhere on the system that CMake doesn't know about.
+
+\li ICE_MANUAL_INSTALL_PATH: prefix of where ZeroC Ice was installed.
+\li QWT_LIBRARIES: shared library to use for Qwt (in the form <path>/libqwt.so).
+\li QWT_INCLUDE_DIRS: path to Qwt include files (e.g., /usr/include/qwt).
+\li PYTHON_EXECUTABLE: Location of the 'python' binary you want to use (e.g., /usr/bin/python2.7).
+\li PYTHON_INCLUDE_PATH: path to Python include files (e.g., /usr/include/python2.7).
+\li PYTHON_LIBRARY: Python's shared library location (e.g., /usr/lib/python2.7.so.1).
+\li Boost_INCLUDE_DIR: location of the 'boost' header file directory (e.g., /usr/include).
+\li Boost_LIBRARY_DIRS: location of the libboost-xxx.so files (e.g., /usr/lib)
+
+
+Other dependencies will have similar settings like these to properly locate them.
+
+
+\subsection build_gr_cmake_e100 Building for the E100
+
+To build GNU Radio on the Ettus Research E100 embedded platforms,
+CMake has to know that the processors uses the NEON extensions. Use
+the
+
+\code
+cmake -DCMAKE_CXX_FLAGS:STRING="-mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp -g" \
+ -DCMAKE_C_FLAGS:STRING="-mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp -g" \
+ <gr_source_dir>
+\endcode
+
+*/
diff --git a/docs/doxygen/other/components.dox b/docs/doxygen/other/components.dox
new file mode 100644
index 0000000000..1e98beb6f2
--- /dev/null
+++ b/docs/doxygen/other/components.dox
@@ -0,0 +1,34 @@
+/*! \page page_components Components
+
+\section components_blocks GNU Radio Blocks
+
+GNU Radio uses discrete signal processing blocks that are connected
+together to perform your signal processing application. This manual
+contain a list of all GNU Radio <a href="modules.html"><b>C++ Blocks</b></a>,
+sorted by category.
+
+Please note that at this time, we haven't found an acceptable way to
+provide unified documentation for the C++ parts of the system and the
+parts written in Python (mostly hierarchical blocks). Until this gets
+worked out, please bear with us, or better yet, solve it for us!
+
+\section components_list In-tree components
+
+All our in-tree components have their own top-level documentation:
+
+\li \subpage page_analog
+\li \subpage page_audio
+\li \subpage page_blocks
+\li \subpage page_channels
+\li \subpage page_ctrlport
+\li \subpage page_digital
+\li \subpage page_fcd
+\li \subpage page_fec
+\li \subpage page_fft
+\li \subpage page_filter
+\li \subpage page_qtgui
+\li \subpage page_uhd
+\li \subpage page_vocoder
+\li \subpage page_zeromq
+
+*/
diff --git a/docs/doxygen/other/extra_pages.dox b/docs/doxygen/other/extra_pages.dox
deleted file mode 100644
index 2a707f81aa..0000000000
--- a/docs/doxygen/other/extra_pages.dox
+++ /dev/null
@@ -1,320 +0,0 @@
-/*! \page build_guide Build Instructions and Information
-
-\section dependencies Dependencies
-
-The list of GNU Radio dependencies and the minimum required versions,
-if any, to build the various GNU Radio components.
-
-Most of these components do not need to be individually compiled or
-installed. Instead, rely on your operating system's package manager or
-binary installation process (the <b>apt-get</b> system in Debian and
-Ubuntu, <b>yum</b> in RedHat and Fedora, etc.). GNU Radio tries to keep an
-up-to-date build guide for the majority of the supported operating
-systems on gnuradio.org
-(http://gnuradio.org/redmine/projects/gnuradio/wiki/BuildGuide).
-
-Not all dependencies are required for all components, and not all
-components are required for a given installation. The list of required
-components is determined by what the user requires from GNU Radio. If,
-for example, you do not use any Comedi-based hardware, do not worry
-about building gr-comedi.
-
-Before trying to build these from source, please try your system's
-installation tool (apt-get, pkg_install, YaST, yum, urpmi, etc.)
-first. Most recent systems have these packages available.
-
-\subsection dep_global Global Dependencies
-\li git http://code.google.com/p/msysgit
-\li cmake (>= 2.6) http://www.cmake.org/cmake/resources/software.html
-\li boost (>= 1.35) http://www.boostpro.com/download
-\li cppunit (>= 1.9.14) http://gaiacrtn.free.fr/cppunit/index.html
-\li fftw3f (>= 3.0) http://www.fftw.org/install/windows.html
-
-\subsection dep_python Python Wrappers
-\li python (>= 2.5) http://www.python.org/download/
-\li swig (>= 1.3.31) http://www.swig.org/download.html
-\li numpy (>= 1.1.0) http://sourceforge.net/projects/numpy/files/NumPy/
-
-\subsection dep_docs docs: Building the documentation
-\li doxygen (>= 1.5) http://www.stack.nl/~dimitri/doxygen/download.html
-
-\subsection dep_grc grc: The GNU Radio Companion
-\li Cheetah (>= 2.0) http://www.cheetahtemplate.org/
-\li pygtk (>= 2.10) http://www.pygtk.org/downloads.html
-
-\subsection dep_wavelet gr-wavelet: Collection of wavelet blocks
-\li gsl (>= 1.10) http://gnuwin32.sourceforge.net/packages/gsl.htm
-
-\subsection dep_gr_qtgui gr-qtgui: The QT-based Graphical User Interface
-\li qt (>= 4.4) http://qt.nokia.com/downloads/
-\li qwt (>= 5.2) http://sourceforge.net/projects/qwt/
-\li pyqt (>= 4.4) http://www.riverbankcomputing.co.uk/software/pyqt/download
-\li pyqwt (>= 5.2) http://pyqwt.sourceforge.net/download.html
-
-\subsection dep_gr_wxgui gr-wxgui: The WX-based Graphical User Interface
-\li wxpython (>= 2.8) http://www.wxpython.org/
-\li python-lxml (>= 1.3.6) http://lxml.de/
-
-\subsection dep_gr_audio gr-audio: Audio Subsystems (system/OS dependent)
-\li audio-alsa (>= 0.9) http://www.alsa-project.org
-\li audio-jack (>= 0.8) http://jackaudio.org/
-\li portaudio (>= 19) http://www.portaudio.com/
-\li audio-oss (>= 1.0) http://www.opensound.com/oss.html
-\li audio-osx
-\li audio-windows
-
-It is not necessary to satisfy all of these dependencies; just the
-one(s) that are right for your system. On Linux, don't expect
-audio-osx and audio-windows to be either satisfied or built.
-
-\subsection dep_uhd uhd: The Ettus USRP Hardware Driver Interface
-\li uhd (>= 3.0.0) http://code.ettus.com/redmine/ettus/projects/uhd/wiki
-
-\subsection dep_gr_video_sdl gr-video-sdl: PAL and NTSC display
-\li SDL (>= 1.2.0) http://www.libsdl.org/download-1.2.php
-
-\subsection dep_gr_comedi gr-comedi: Comedi hardware interface
-\li comedilib (>= 0.8) http://www.comedi.org/
-
-\subsection dep_gr_log gr-log: Logging Tools (Optional)
-\li log4cpp (>= 1.0) http://log4cpp.sourceforge.net/
-
-
-\section build_gr_cmake Building GNU Radio
-
-GNU Radio is built using the Cmake build system
-(http://www.cmake.org/). The standard build method is as follows:
-
-\code
-$ mkdir $(builddir)
-$ cd $(builddir)
-$ cmake [OPTIONS] $(srcdir)
-$ make
-$ make test
-$ sudo make install
-\endcode
-
-The \$(builddir) is the directory in which the code is built. This
-<b>cannot</b> be the same path as where the source code resides. Often,
-\$(builddir) is \$(srcdir)/build.
-
-\subsection Cmake Options
-
-Options can be used to specify where to find various library or
-include file dependencies that are not automatically being found
-(-DCMAKE_PREFIX_PATH) or set the prefix
-(-DCMAKE_INSTALL_PREFIX=(dir)).
-
-Components can also be enabled and disabled through the options. For a
-component named *gr-comp*, the option to disable would look like:
--DENABLE_GR_COMP=off. The "off" could also be "false" or "no", and
-cmake is not case sensitive about these options. Similarly, "true",
-"on", or "yes" will turn this component on. All components are enabled
-by default.
-
-An example is -DENABLE_PYTHON=False turns off building any Python or
-Swigging components. The result will be the GNU Radio libraries and
-C++ programs/applications/examples. No Python or GRC files will be
-built or installed.
-
-The -DENABLE_DEFAULT=False can be used to disable all
-components. Individual components can then be selectively turned back
-on. For example, just buidling the VOLK library can be
-done with this:
-
-\code
-cmake -DENABLE_DEFAULT=Off -DENABLE_VOLK=True <srcdir>
-\endcode
-
-
-The build type allows you to specify the build as a debug or release
-version. Each type sets different flags for different purposes. To set
-the build type, use:
-
-\code
--DCMAKE_BUILD_TYPE="Release"|"Debug"
-\endcode
-
-If not specified, the "Release" mode is the defaulted to.
-
-"Release" mode sets the '-O3' optimization flag.
-
-"Debug" mode sets '-g -O2' flags to export debug symbols and reduce
-the optimization to make the libraries easier to debug and step
-through.
-
-
-\subsection build_gr_cmake_e100 Building for the E100
-
-To build GNU Radio on the Ettus Research E100 embedded platforms,
-Cmake has to know that the processors uses the NEON extensions. Use
-the
-
-\code
-cmake -DCMAKE_CXX_FLAGS:STRING="-mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp -g" \
- -DCMAKE_C_FLAGS:STRING="-mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp -g" \
- <gr_source_dir>
-\endcode
-
-*/
-
-
-
-/*! \page volk_guide Instructions for using VOLK in GNU Radio
-
-\section volk_intro Introduction
-
-VOLK is the Vector-Optimized Library of Kernels. It is a library that
-contains kernels of hand-written SIMD code for different mathematical
-operations. Since each SIMD architecture can be greatly different and
-no compiler has yet come along to handle vectorization properly or
-highly efficiently, VOLK approaches the problem differently. For each
-architecture or platform that a developer wishes to vectorize for, a
-new proto-kernel is added to VOLK. At runtime, VOLK will select the
-correct proto-kernel. In this way, the users of VOLK call a kernel for
-performing the operation that is platform/architecture agnostic. This
-allows us to write portable SIMD code.
-
-VOLK kernels are always defined with a 'generic' proto-kernel, which
-is written in plain C. With the generic kernel, the kernel becomes
-portable to any platform. Kernels are then extended by adding
-proto-kernels for new platforms in which they are desired.
-
-A good example of a VOLK kernel with multiple proto-kernels defined is
-the volk_32f_s32f_multiply_32f_a. This kernel implements a scalar
-multiplication of a vector of floating point numbers (each item in the
-vector is multiplied by the same value). This kernel has the following
-proto-kernels that are defined for 'generic,' 'avx,' 'sse,' and 'orc.'
-
-\code
- void volk_32f_s32f_multiply_32f_a_generic
- void volk_32f_s32f_multiply_32f_a_sse
- void volk_32f_s32f_multiply_32f_a_avx
- void volk_32f_s32f_multiply_32f_a_orc
-\endcode
-
-These proto-kernels means that on platforms with AVX support, VOLK can
-select this option or the SSE option, depending on which is faster. On
-other platforms, the ORC SIMD compiler might provide a solution. If
-all else fails, VOLK can fall back on the generic proto-kernel, which
-will always work.
-
-Just a note on ORC. ORC is a SIMD compiler library that uses a generic
-assembly-like language for SIMD commands. Based on the available SIMD
-architecture of a system, it will try and compile a good
-solution. Tests show that the results of ORC proto-kernels are
-generally better than the generic versions but often not as good as
-the hand-tuned proto-kernels for a specific SIMD architecture. This
-is, of course, to be expected, and ORC provides a nice intermediary
-step to performance improvements until a specific hand-tuned
-proto-kernel can be made for a given platform.
-
-See <a
-href="http://gnuradio.org/redmine/projects/gnuradio/wiki/Volk">VOLK on
-gnuradio.org</a> for details on the VOLK naming scheme.
-
-
-\section volk_alignment Setting and Using Memory Alignment Information
-
-For VOLK to work as best as possible, we want to use memory-aligned
-SIMD calls, which means we have to have some way of knowing and
-controlling the alignment of the buffers passed to gr_block's work
-function. We set the alignment requirement for SIMD aligned memory
-calls with:
-
-\code
- const int alignment_multiple =
- volk_get_alignment() / output_item_size;
- set_alignment(std::max(1,alignment_multiple));
-\endcode
-
-The VOLK function 'volk_get_alignment' provides the alignment of the
-the machine architecture. We then base the alignment on the number of
-output items required to maintain the alignment, so we divide the
-number of alignment bytes by the number of bytes in an output items
-(sizeof(float), sizeof(gr_complex), etc.). This value is then set per
-block with the 'set_alignment' function.
-
-Because the scheduler tries to optimize throughput, the number of
-items available per call to work will change and depends on the
-availability of the read and write buffers. This means that it
-sometimes cannot produce a buffer that is properly memory
-aligned. This is an inevitable consequence of the scheduler
-system. Instead of requiring alignment, the scheduler enforces the
-alignment as much as possible, and when a buffer becomes unaligned,
-the scheduler will work to correct it as much as possible. If a
-block's buffers are unaligned, then, the scheduler sets a flag to
-indicate as much so that the block can then decide what best to
-do. The next section discusses the use of the aligned/unaligned
-information in a gr_block's work function.
-
-
-\section volk_work Calling VOLK kernels in Work()
-
-The buffers passed to work/general_work in a gr_block are not
-guaranteed to be aligned, but they will mostly be aligned whenever
-possible. When not aligned, the 'is_unaligned()' flag will be set so
-the scheduler knows to try to realign the buffers. We actually make
-calls to the VOLK dispatcher, which is mainly designed to check the
-buffer alignments and call the correct version of the kernel for
-us. From the user-level view of VOLK, calling the dispatcher allows us
-to ignore the concept of aligned versus unaligned. This looks like:
-
-\code
-int
-gr_some_block::work (int noutput_items,
- gr_vector_const_void_star &input_items,
- gr_vector_void_star &output_items)
-{
- const float *in = (const float *) input_items[0];
- float *out = (float *) output_items[0];
-
- // Call the dispatcher to check alignment and call the _a or _u
- // version of the kernel.
- volk_32f_something_32f(out, in, noutput_items);
-
- return noutput_items;
-}
-\endcode
-
-
-
-\section volk_tuning Tuning VOLK Performance
-
-VOLK comes with a profiler that will build a config file for the best
-SIMD architecture for your processor. Run volk_profile that is
-installed into $PREFIX/bin. This program tests all known VOLK kernels
-for each architecture supported by the processor. When finished, it
-will write to $HOME/.volk/volk_config the best architecture for the
-VOLK function. This file is read when using a function to know the
-best version of the function to execute.
-
-\subsection volk_hand_tuning Hand-Tuning Performance
-
-If you know a particular architecture works best for your processor,
-you can specify the particular architecture to use in the VOLK
-preferences file: $HOME/.volk/volk_config
-
-The file looks like:
-
-\code
- volk_<FUNCTION_NAME> <ARCHITECTURE>
-\endcode
-
-Where the "FUNCTION_NAME" is the particular function that you want to
-over-ride the default value and "ARCHITECTURE" is the VOLK SIMD
-architecture to use (generic, sse, sse2, sse3, avx, etc.). For
-example, the following config file tells VOLK to use SSE3 for the
-aligned and unaligned versions of a function that multiplies two
-complex streams together.
-
-\code
- volk_32fc_x2_multiply_32fc_a sse3
- volk_32fc_x2_multiply_32fc_u sse3
-\endcode
-
-\b Tip: if benchmarking GNU Radio blocks, it can be useful to have a
-volk_config file that sets all architectures to 'generic' as a way to
-test the vectorized versus non-vectorized implementations.
-
-*/
diff --git a/docs/doxygen/other/main_page.dox b/docs/doxygen/other/main_page.dox
index 62ea8a9929..67487ddfd6 100644
--- a/docs/doxygen/other/main_page.dox
+++ b/docs/doxygen/other/main_page.dox
@@ -4,505 +4,22 @@
Welcome to GNU Radio!
-For details about GNU Radio and using it, please see the <a
-href="http://gnuradio.org" target="_blank"><b>main project page</b></a>.
+For details about GNU Radio and using it, please see the
+<a href="http://gnuradio.org" target="_blank"><b>main project page</b></a>.
Other information about the project and discussion about GNU Radio,
software radio, and communication theory in general can be found at
the <a href="http://www.trondeau.com" target="_blank"><b>GNU Radio blog</b></a>.
+This manual is split into two parts: A usage manual and a reference. The usage manual
+deals with concepts of GNU Radio, introductions, how to build GNU Radio etc.
+The reference contains a list of all GNU Radio components, sorted by in-tree components,
+modules, files, namespaces and classes.
-\section build Building GNU Radio
+To access these parts, follow these links or use the tree browser in the left sidebar.
+A search function is also available at the top right.
-See the \ref build_guide page for details about the project's
-dependencies and build process.
-
-Once built, look on <a href="http://gnuradio.org" target="_blank">gnuradio.org</a> for
-tutorials on using the software system and see \ref
-page_exploring_gnuradio for a few simple examples exploring GNU Radio.
-
-
-\section blocks GNU Radio Blocks
-
-GNU Radio uses discrete signal processing blocks that are connected
-together to perform your signal processing application. This manual
-contain a list of all GNU Radio <a href="modules.html"><b>C++ Blocks</b></a>.
-
-Please note that at this time, we haven't found an acceptable way to
-provide unified documentation for the C++ parts of the system and the
-parts written in Python (mostly hierarchical blocks). Until this gets
-worked out, please bear with us, or better yet, solve it for us!
-
-
-\section toc Manual Contents
-More details on packages in GNU Radio:
-\li \ref page_audio
-\li \ref page_digital
-\li \ref page_qtgui
-\li \ref page_uhd
-\li \ref page_vocoder
-
-More details on GNU Radio concepts:
-\li \ref page_logger
-\li \ref page_pmt
-\li \ref page_msg_passing
-\li \ref page_stream_tags
-\li \ref page_metadata
-\li \ref volk_guide
-\li \ref page_perf_counters
-\li \ref page_pfb
-\li \ref page_affinity
-\li \ref page_tagged_stream_blocks
-\li \ref page_ofdm
-\li \ref page_packet_data
-
-
-\section flowgraph Operating a Flowgraph
-
-The basic data structure in GNU Radio is the flowgraph, which
-represents the connections of the blocks through which a continuous
-stream of samples flows. The concept of a flowgraph is an acyclic
-directional graph with one or more source blocks (to insert samples
-into the flowgraph), one or more sink blocks (to terminate or export
-samples from the flowgraph), and any signal processing blocks in
-between.
-
-A program must at least create a GNU Radio 'top_block', which
-represents the top-most structure of the flowgraph. The top blocks
-provide the overall control and hold methods such as 'start,' 'stop,'
-and 'wait.'
-
-The general construction of a GNU Radio application is to create a
-gr_top_block, instantiate the blocks, connect the blocks together, and
-then start the gr_top_block. The following program shows how this is
-done. A single source and sink are used with a FIR filter between
-them.
-
-\code
- from gnuradio import gr, blocks, filter, analog
-
- class my_topblock(gr.top_block):
- def __init__(self):
- gr.top_block.__init__(self)
-
- amp = 1
- taps = filter.firdes.low_pass(1, 1, 0.1, 0.01)
-
- self.src = analog.noise_source_c(analog.GR_GAUSSIAN, amp)
- self.flt = filter.fir_filter_ccf(1, taps)
- self.snk = blocks.null_sink(gr.sizeof_gr_complex)
-
- self.connect(self.src, self.flt, self.snk)
-
- if __name__ == "__main__":
- tb = my_topblock()
- tb.start()
- tb.wait()
-\endcode
-
-The 'tb.start()' starts the data flowing through the flowgraph while
-the 'tb.wait()' is the equivalent of a thread's 'join' operation and
-blocks until the gr_top_block is done.
-
-An alternative to using the 'start' and 'wait' methods, a 'run' method is
-also provided for convenience that is a blocking start call;
-equivalent to the above 'start' followed by a 'wait.'
-
-
-\subsection latency Latency and Throughput
-
-By default, GNU Radio runs a scheduler that attempts to optimize
-throughput. Using a dynamic scheduler, blocks in a flowgraph pass
-chunks of items from sources to sinks. The sizes of these chunks will
-vary depending on the speed of processing. For each block, the number
-of items is can process is dependent on how much space it has in its
-output buffer(s) and how many items are available on the input
-buffer(s).
-
-The consequence of this is that often a block may be called with a very
-large number of items to process (several thousand). In terms of
-speed, this is efficient since now the majority of the processing time
-is taken up with processing samples. Smaller chunks mean more calls
-into the scheduler to retrieve more data. The downside to this is that
-it can lead to large latency while a block is processing a large chunk
-of data.
-
-To combat this problem, the gr_top_block can be passed a limit on the
-number of output items a block will ever receive. A block may get less
-than this number, but never more, and so it serves as an upper limit
-to the latency any block will exhibit. By limiting the number of items
-per call to a block, though, we increase the overhead of the
-scheduler, and so reduce the overall efficiency of the application.
-
-To set the maximum number of output items, we pass a value into the
-'start' or 'run' method of the gr_top_block:
-
-\code
- tb.start(1000)
- tb.wait()
-or
- tb.run(1000)
-\endcode
-
-Using this method, we place a global restriction on the size of items
-to all blocks. Each block, though, has the ability to overwrite this
-with its own limit. Using the 'set_max_noutput_items(m)' method for an
-individual block will overwrite the global setting. For example, in
-the following code, the global setting is 1000 items max, except for
-the FIR filter, which can receive up to 2000 items.
-
-\code
- tb.flt.set_max_noutput_items(2000)
- tb.run(1000)
-\endcode
-
-In some situations, you might actually want to restrict the size of
-the buffer itself. This can help to prevent a buffer who is blocked
-for data from just increasing the amount of items in its buffer, which
-will then cause an increased latency for new samples. You can set the
-size of an output buffer for each output port for every block.
-
-WARNING: This is an advanced feature in GNU Radio and should not be
-used without a full understanding of this concept as explained below.
-
-To set the output buffer size of a block, you simply call:
-
-\code
- tb.blk0.set_max_output_buffer(2000)
- tb.blk1.set_max_output_buffer(1, 2000)
- tb.start()
- print tb.blk1.max_output_buffer(0)
- print tb.blk1.max_output_buffer(1)
-\endcode
-
-In the above example, all ports of blk0 are set to a buffer size of
-2000 in _items_ (not bytes), and blk1 only sets the size for output
-port 1, any and all other ports use the default. The third and fourth
-lines just print out the buffer sizes for ports 0 and 1 of blk1. This
-is done after start() is called because the values are updated based
-on what is actually allocated to the block's buffers.
-
-NOTES:
-
-1. Buffer length assignment is done once at runtime (i.e., when run()
-or start() is called). So to set the max buffer lengths, the
-set_max_output_buffer calls must be done before this.
-
-2. Once the flowgraph is started, the buffer lengths for a block are
-set and cannot be dynamically changed, even during a
-lock()/unlock(). If you need to change the buffer size, you will have
-to delete the block and rebuild it, and therefore must disconnect and
-reconnect the blocks.
-
-3. This can affect throughput. Large buffers are designed to improve
-the efficiency and speed of the program at the expense of
-latency. Limiting the size of the buffer may decrease performance.
-
-4. The real buffer size is actually based on a minimum granularity of
-the system. Typically, this is a page size, which is typically 4096
-bytes. This means that any buffer size that is specified with this
-command will get rounded up to the nearest granularity (e.g., page)
-size. When calling max_output_buffer(port) after the flowgraph is
-started, you will get how many items were actually allocated in the
-buffer, which may be different than what was initially specified.
-
-
-\section reconfigure Reconfiguring Flowgraphs
-
-It is possible to reconfigure the flowgraph at runtime. The
-reconfiguration is meant for changes in the flowgraph structure, not
-individual parameter settings of the blocks. For example, changing the
-constant in a gr::blocks::add_const_cc block can be done while the flowgraph is
-running using the 'set_k(k)' method.
-
-Reconfiguration is done by locking the flowgraph, which stops it from
-running and processing data, performing the reconfiguration, and then
-restarting the graph by unlocking it.
-
-The following example code shows a graph that first adds two
-gr::analog::noise_source_c blocks and then replaces the
-gr::blocks::add_cc block with a gr::blocks::sub_cc block to then
-subtract the sources.
-
-\code
-from gnuradio import gr, analog, blocks
-import time
-
-class mytb(gr.top_block):
- def __init__(self):
- gr.top_block.__init__(self)
-
- self.src0 = analog.noise_source_c(analog.GR_GAUSSIAN, 1)
- self.src1 = analog.noise_source_c(analog.GR_GAUSSIAN, 1)
- self.add = blocks.add_cc()
- self.sub = blocks.sub_cc()
- self.head = blocks.head(gr.sizeof_gr_complex, 1000000)
- self.snk = blocks.file_sink(gr.sizeof_gr_complex, "output.32fc")
-
- self.connect(self.src0, (self.add,0))
- self.connect(self.src1, (self.add,1))
- self.connect(self.add, self.head)
- self.connect(self.head, self.snk)
-
-def main():
- tb = mytb()
- tb.start()
- time.sleep(0.01)
-
- # Stop flowgraph and disconnect the add block
- tb.lock()
- tb.disconnect(tb.add, tb.head)
- tb.disconnect(tb.src0, (tb.add,0))
- tb.disconnect(tb.src1, (tb.add,1))
-
- # Connect the sub block and restart
- tb.connect(tb.sub, tb.head)
- tb.connect(tb.src0, (tb.sub,0))
- tb.connect(tb.src1, (tb.sub,1))
- tb.unlock()
-
- tb.wait()
-
-if __name__ == "__main__":
- main()
-\endcode
-
-During reconfiguration, the maximum noutput_items value can be changed
-either globally using the 'set_max_noutput_items(m)' on the gr_top_block
-object or locally using the 'set_max_noutput_items(m)' on any given
-block object.
-
-A block also has a 'unset_max_noutput_items()' method that unsets the
-local max noutput_items value so that block reverts back to using the
-global value.
-
-The following example expands the previous example but sets and resets
-the max noutput_items both locally and globally.
-
-\code
-from gnuradio import gr, analog, blocks
-import time
-
-class mytb(gr.top_block):
- def __init__(self):
- gr.top_block.__init__(self)
-
- self.src0 = analog.noise_source_c(analog.GR_GAUSSIAN, 1)
- self.src1 = analog.noise_source_c(analog.GR_GAUSSIAN, 1)
- self.add = blocks.add_cc()
- self.sub = blocks.sub_cc()
- self.head = blocks.head(gr.sizeof_gr_complex, 1000000)
- self.snk = blocks.file_sink(gr.sizeof_gr_complex, "output.32fc")
-
- self.connect(self.src0, (self.add,0))
- self.connect(self.src1, (self.add,1))
- self.connect(self.add, self.head)
- self.connect(self.head, self.snk)
-
-def main():
- # Start the gr_top_block after setting some max noutput_items.
- tb = mytb()
- tb.src1.set_max_noutput_items(2000)
- tb.start(100)
- time.sleep(0.01)
-
- # Stop flowgraph and disconnect the add block
- tb.lock()
-
- tb.disconnect(tb.add, tb.head)
- tb.disconnect(tb.src0, (tb.add,0))
- tb.disconnect(tb.src1, (tb.add,1))
-
- # Connect the sub block
- tb.connect(tb.sub, tb.head)
- tb.connect(tb.src0, (tb.sub,0))
- tb.connect(tb.src1, (tb.sub,1))
-
- # Set new max_noutput_items for the gr_top_block
- # and unset the local value for src1
- tb.set_max_noutput_items(1000)
- tb.src1.unset_max_noutput_items()
- tb.unlock()
-
- tb.wait()
-
-if __name__ == "__main__":
- main()
-\endcode
-
-
-\section volk_main Using Volk in GNU Radio
-
-The \ref volk_guide page provides an overview of how to incorporate
-and use Volk in GNU Radio blocks.
-
-Many blocks have already been converted to use Volk in their calls, so
-they can also serve as examples. See the
-gr::blocks::complex_to_<type>.h files for examples of various blocks
-that make use of Volk.
-
-
-\section prefs Configuration / Preference Files
-
-GNU Radio defines some of its basic behavior through a set of
-configuration files located in
-${prefix}/etc/gnuradio/conf.d. Different components have different
-files listed in here for the various properties. These will be read
-once when starting a GNU Radio application, so updates during runtime
-will not affect them.
-
-The configuration files use the following format:
-
-\code
-# Stuff from section 1
-[section1]
-var1 = value1
-var2 = value2 # value of 2
-
-# Stuff from section 2
-[section2]
-var3 = value3
-\endcode
-
-In this file, the hash mark ('#') indicates a comment and blank lines
-are ignored. Section labels are defined inside square brackets as a
-group distinguisher. All options must be associated with a section
-name. The options are listed one per line with the option name is
-given followed by an equals ('=') sign and then the value.
-
-All section and option names must not have white spaces. If a value
-must have white space, the it MUST be put inside quotes. Any quoted
-value will have its white space preserved and the quotes internally
-will be stripped. As an example, on Apple desktops, an output device
-of "Display Audio" is a possible output device and can be set as:
-
-\code
-[audio_osx]
-default_output_device = "Display Audio"
-\endcode
-
-The result will pass Display Audio to the audio setup.
-
-The value of an option can be a string or number and retrieved through
-a few different interfaces. There is a single preference object
-created when GNU Radio is launched. In Python, you can get this by
-making a new variable:
-
-\code
-p = gr.prefs()
-\endcode
-
-Similarly, in C++, we get a reference to the object by explicitly
-calling for the singleton of the object:
-
-\code
- prefs *p = prefs::singleton();
-\endcode
-
-The methods associated with this preferences object are (from class gr::prefs):
-
-\code
- bool has_section(string section)
- bool has_option(string section, string option)
- string get_string(string section, string option, string default_val)
- bool get_bool(string section, string option, bool default_val)
- long get_long(string section, string option, long default_val)
- double get_double(string section, string option, double default_val)
-\endcode
-
-When setting a Boolean value, we can use 0, 1, "True", "true",
-"False", "false", "On", "on", "Off", and "off".
-
-All configuration preferences in these files can also be overloaded by
-an environmental variable. The environmental variable is named based
-on the section and option name from the configuration file as:
-
-\code
- GR_CONF_<SECTION>_<OPTION> = <value>
-\endcode
-
-The "GR_CONF_" is a prefix to identify this as a GNU Radio
-configuration variable and the section and option names are in
-uppercase. The value is the same format that would be used in the
-config file itself.
-
-
-
-\section oot_config_page Out-of-Tree Configuration
-
-New as of 3.6.5.
-
-Using gr_modtool, each package comes with the ability to easily locate
-the gnuradio-runtime library using the 'find_package(GnuradioRuntime)'
-cmake command. This only locates the gnuradio-runtime library and
-include directory, which is enough for most simple projects.
-
-As projects become more complicated and start needing to rely on other
-GNU Radio components like gnuradio-blocks or gnuradio-filter, for
-example, and when they become dependent on certain API compatibility
-versions of GNU Radio, we need something more. And so we have
-introduced the GnuradioConfig.cmake file.
-
-When GNU Radio is installed, it also installs a GNU Radio-specific
-cmake config file that we can use for more advanced compatibility
-issues of our projects. This tool allows us to specific the API
-compatible version and a set of components that are required.
-
-Taking the above example, say we have built against version 3.6.5 with
-features that were introduced in this version and we need the blocks
-and filter components as well as the main core library. We fist set a
-cmake variable GR_REQUIRED_COMPONENTS to the components we need. We
-then use the 'find_package' command and also set a minimum required
-API compatible version. Since we are on the 3.6 API version, the
-minimum required version is "3.6.5". The code in the CMakeLists.txt
-file would look like this:
-
-\code
- set(GR_REQUIRED_COMPONENTS RUNTIME BLOCKS FILTER)
- find_package(Gnuradio 3.6.5)
-\endcode
-
-Note that the capitalization is important on both lines.
-
-If the installed version of GNU Radio is 3.6.4 or some other API
-version like 3.5 or 3.7, the Cmake configuration will fail with the
-version error. Likewise, if libgnuradio-filter was not installed as
-part of GNU Radio, the configuration will also fail.
-
-\subsection oot_config_path_page Install Path
-
-Cmake has to know where to find either the package config files or the
-GnuradioConfig.cmake script. The package config files are located in
-$prefix/lib/pkgconfig while all of the Cmake scripts from GNU Radio
-are installed into $prefix/lib/cmake/gnuradio.
-
-If the installed GNU Radio $prefix is '/usr' or '/usr/local', then
-everything should work fine. If the GNU Radio install $prefix is
-something else, then Cmake must be told where to find it. This can be
-done in a few ways:
-
-1. If you are installing the out-of-tree module into the same $prefix,
-then you would be setting '-DCMAKE_INSTALL_PREFIX' on the
-configuration command line. This is enough to tell Cmake where to look
-for the configuration files.
-
-2. Cmake will try to find the package config (*.pc) files. If it can,
-these files will instruct Cmake where to look for the rest of the
-configuration options. If this is not set, it can be set as:
-
-\code
- export PKG_CONFIG_PATH=$prefix/lib/pkgconfg:$PKG_CONFIG_PATH
-\endcode
-
-3. Set the CMAKE_PREFIX_PATH environmental variable to $prefix.
-
-\code
- export CMAKE_PREFIX_PATH=$prefix:$CMAKE_PREFIX_PATH
-\endcode
-
-
-With method 1, you will be installing your OOT project into the same
-$prefix as GNU Radio. With methods 2 and 3, you can install your
-component anywhere you like (using -DCMAKE_INSTALL_PREFIX).
+\li \subpage page_usage "Part I - GNU Radio Usage"
+\li \subpage page_components "Part II - Reference"
*/
diff --git a/docs/doxygen/other/metadata.dox b/docs/doxygen/other/metadata.dox
index 03ebe591e4..e29adf306e 100644
--- a/docs/doxygen/other/metadata.dox
+++ b/docs/doxygen/other/metadata.dox
@@ -20,7 +20,20 @@ about the item size, data type, if it's complex, the sample rate of
the segment, the time stamp of the first sample of the segment, and
information regarding the header size and segment size.
-Headers have two main tags associated with them:
+The first static portion of the header file contains the following
+information.
+
+- version: (char) version number (usually set to METADATA_VERSION)
+- rx_rate: (double) Stream's sample rate
+- rx_time: (pmt::pmt_t pair - (uint64_t, double)) Time stamp (format from UHD)
+- size: (int) item size in bytes - reflects vector length if any.
+- type: (int) data type (enum below)
+- cplx: (bool) true if data is complex
+- strt: (uint64_t) start of data relative to current header
+- bytes: (uint64_t) size of following data segment in bytes
+
+An optional extra section of the header stores information in any
+received tags. The two main tags associated with tags are:
- rx_rate: the sample rate of the stream.
- rx_time: the time stamp of the first item in the segment.
diff --git a/docs/doxygen/other/msg_passing.dox b/docs/doxygen/other/msg_passing.dox
index 11abf35728..882252bee2 100644
--- a/docs/doxygen/other/msg_passing.dox
+++ b/docs/doxygen/other/msg_passing.dox
@@ -145,6 +145,11 @@ function. When a new message is pushed onto a port's message queue,
it is this function that is used to process the message.
+\section python_msg_passing Message Passing in Python Blocks
+
+ADD STUFF HERE
+
+
\section examples Code Examples
The following is snippets of code from blocks current in GNU Radio
diff --git a/docs/doxygen/other/oot_config.dox b/docs/doxygen/other/oot_config.dox
new file mode 100644
index 0000000000..bb441c5060
--- /dev/null
+++ b/docs/doxygen/other/oot_config.dox
@@ -0,0 +1,78 @@
+/*! \page page_oot_config Out-of-Tree Configuration
+
+New as of 3.6.5.
+
+Using gr_modtool, each package comes with the ability to easily locate
+the gnuradio-runtime library using the 'find_package(GnuradioRuntime)'
+cmake command. This only locates the gnuradio-runtime library and
+include directory, which is enough for most simple projects.
+
+As projects become more complicated and start needing to rely on other
+GNU Radio components like gnuradio-blocks or gnuradio-filter, for
+example, and when they become dependent on certain API compatibility
+versions of GNU Radio, we need something more. And so we have
+introduced the GnuradioConfig.cmake file.
+
+When GNU Radio is installed, it also installs a GNU Radio-specific
+cmake config file that we can use for more advanced compatibility
+issues of our projects. This tool allows us to specific the API
+compatible version and a set of components that are required.
+
+Taking the above example, say we have built against version 3.6.5 with
+features that were introduced in this version and we need the blocks
+and filter components as well as the main core library. We fist set a
+cmake variable GR_REQUIRED_COMPONENTS to the components we need. We
+then use the 'find_package' command and also set a minimum required
+API compatible version. Since we are on the 3.6 API version, the
+minimum required version is "3.6.5". The code in the CMakeLists.txt
+file would look like this:
+
+\code
+ set(GR_REQUIRED_COMPONENTS RUNTIME BLOCKS FILTER)
+ find_package(Gnuradio 3.6.5)
+\endcode
+
+Note that the capitalization is important on both lines.
+
+If the installed version of GNU Radio is 3.6.4 or some other API
+version like 3.5 or 3.7, the Cmake configuration will fail with the
+version error. Likewise, if libgnuradio-filter was not installed as
+part of GNU Radio, the configuration will also fail.
+
+\section oot_config_path_page Install Path
+
+Cmake has to know where to find either the package config files or the
+GnuradioConfig.cmake script. The package config files are located in
+$prefix/lib/pkgconfig while all of the Cmake scripts from GNU Radio
+are installed into $prefix/lib/cmake/gnuradio.
+
+If the installed GNU Radio $prefix is '/usr' or '/usr/local', then
+everything should work fine. If the GNU Radio install $prefix is
+something else, then Cmake must be told where to find it. This can be
+done in a few ways:
+
+1. If you are installing the out-of-tree module into the same $prefix,
+then you would be setting '-DCMAKE_INSTALL_PREFIX' on the
+configuration command line. This is enough to tell Cmake where to look
+for the configuration files.
+
+2. Cmake will try to find the package config (*.pc) files. If it can,
+these files will instruct Cmake where to look for the rest of the
+configuration options. If this is not set, it can be set as:
+
+\code
+ export PKG_CONFIG_PATH=$prefix/lib/pkgconfg:$PKG_CONFIG_PATH
+\endcode
+
+3. Set the CMAKE_PREFIX_PATH environmental variable to $prefix.
+
+\code
+ export CMAKE_PREFIX_PATH=$prefix:$CMAKE_PREFIX_PATH
+\endcode
+
+
+With method 1, you will be installing your OOT project into the same
+$prefix as GNU Radio. With methods 2 and 3, you can install your
+component anywhere you like (using -DCMAKE_INSTALL_PREFIX).
+
+*/
diff --git a/docs/doxygen/other/operating_fg.dox b/docs/doxygen/other/operating_fg.dox
new file mode 100644
index 0000000000..b075ca648a
--- /dev/null
+++ b/docs/doxygen/other/operating_fg.dox
@@ -0,0 +1,278 @@
+/*! \page page_operating_fg Handling flow graphs
+
+\section flowgraph Operating a Flowgraph
+
+The basic data structure in GNU Radio is the flowgraph, which
+represents the connections of the blocks through which a continuous
+stream of samples flows. The concept of a flowgraph is an acyclic
+directional graph with one or more source blocks (to insert samples
+into the flowgraph), one or more sink blocks (to terminate or export
+samples from the flowgraph), and any signal processing blocks in
+between.
+
+A program must at least create a GNU Radio 'top_block', which
+represents the top-most structure of the flowgraph. The top blocks
+provide the overall control and hold methods such as 'start,' 'stop,'
+and 'wait.'
+
+The general construction of a GNU Radio application is to create a
+gr_top_block, instantiate the blocks, connect the blocks together, and
+then start the gr_top_block. The following program shows how this is
+done. A single source and sink are used with a FIR filter between
+them.
+
+\code
+ from gnuradio import gr, blocks, filter, analog
+
+ class my_topblock(gr.top_block):
+ def __init__(self):
+ gr.top_block.__init__(self)
+
+ amp = 1
+ taps = filter.firdes.low_pass(1, 1, 0.1, 0.01)
+
+ self.src = analog.noise_source_c(analog.GR_GAUSSIAN, amp)
+ self.flt = filter.fir_filter_ccf(1, taps)
+ self.snk = blocks.null_sink(gr.sizeof_gr_complex)
+
+ self.connect(self.src, self.flt, self.snk)
+
+ if __name__ == "__main__":
+ tb = my_topblock()
+ tb.start()
+ tb.wait()
+\endcode
+
+The 'tb.start()' starts the data flowing through the flowgraph while
+the 'tb.wait()' is the equivalent of a thread's 'join' operation and
+blocks until the gr_top_block is done.
+
+An alternative to using the 'start' and 'wait' methods, a 'run' method is
+also provided for convenience that is a blocking start call;
+equivalent to the above 'start' followed by a 'wait.'
+
+
+\subsection latency Latency and Throughput
+
+By default, GNU Radio runs a scheduler that attempts to optimize
+throughput. Using a dynamic scheduler, blocks in a flowgraph pass
+chunks of items from sources to sinks. The sizes of these chunks will
+vary depending on the speed of processing. For each block, the number
+of items is can process is dependent on how much space it has in its
+output buffer(s) and how many items are available on the input
+buffer(s).
+
+The consequence of this is that often a block may be called with a very
+large number of items to process (several thousand). In terms of
+speed, this is efficient since now the majority of the processing time
+is taken up with processing samples. Smaller chunks mean more calls
+into the scheduler to retrieve more data. The downside to this is that
+it can lead to large latency while a block is processing a large chunk
+of data.
+
+To combat this problem, the gr_top_block can be passed a limit on the
+number of output items a block will ever receive. A block may get less
+than this number, but never more, and so it serves as an upper limit
+to the latency any block will exhibit. By limiting the number of items
+per call to a block, though, we increase the overhead of the
+scheduler, and so reduce the overall efficiency of the application.
+
+To set the maximum number of output items, we pass a value into the
+'start' or 'run' method of the gr_top_block:
+
+\code
+ tb.start(1000)
+ tb.wait()
+or
+ tb.run(1000)
+\endcode
+
+Using this method, we place a global restriction on the size of items
+to all blocks. Each block, though, has the ability to overwrite this
+with its own limit. Using the 'set_max_noutput_items(m)' method for an
+individual block will overwrite the global setting. For example, in
+the following code, the global setting is 1000 items max, except for
+the FIR filter, which can receive up to 2000 items.
+
+\code
+ tb.flt.set_max_noutput_items(2000)
+ tb.run(1000)
+\endcode
+
+In some situations, you might actually want to restrict the size of
+the buffer itself. This can help to prevent a buffer who is blocked
+for data from just increasing the amount of items in its buffer, which
+will then cause an increased latency for new samples. You can set the
+size of an output buffer for each output port for every block.
+
+WARNING: This is an advanced feature in GNU Radio and should not be
+used without a full understanding of this concept as explained below.
+
+To set the output buffer size of a block, you simply call:
+
+\code
+ tb.blk0.set_max_output_buffer(2000)
+ tb.blk1.set_max_output_buffer(1, 2000)
+ tb.start()
+ print tb.blk1.max_output_buffer(0)
+ print tb.blk1.max_output_buffer(1)
+\endcode
+
+In the above example, all ports of blk0 are set to a buffer size of
+2000 in _items_ (not bytes), and blk1 only sets the size for output
+port 1, any and all other ports use the default. The third and fourth
+lines just print out the buffer sizes for ports 0 and 1 of blk1. This
+is done after start() is called because the values are updated based
+on what is actually allocated to the block's buffers.
+
+NOTES:
+
+1. Buffer length assignment is done once at runtime (i.e., when run()
+or start() is called). So to set the max buffer lengths, the
+set_max_output_buffer calls must be done before this.
+
+2. Once the flowgraph is started, the buffer lengths for a block are
+set and cannot be dynamically changed, even during a
+lock()/unlock(). If you need to change the buffer size, you will have
+to delete the block and rebuild it, and therefore must disconnect and
+reconnect the blocks.
+
+3. This can affect throughput. Large buffers are designed to improve
+the efficiency and speed of the program at the expense of
+latency. Limiting the size of the buffer may decrease performance.
+
+4. The real buffer size is actually based on a minimum granularity of
+the system. Typically, this is a page size, which is typically 4096
+bytes. This means that any buffer size that is specified with this
+command will get rounded up to the nearest granularity (e.g., page)
+size. When calling max_output_buffer(port) after the flowgraph is
+started, you will get how many items were actually allocated in the
+buffer, which may be different than what was initially specified.
+
+
+\section reconfigure Reconfiguring Flowgraphs
+
+It is possible to reconfigure the flowgraph at runtime. The
+reconfiguration is meant for changes in the flowgraph structure, not
+individual parameter settings of the blocks. For example, changing the
+constant in a gr::blocks::add_const_cc block can be done while the flowgraph is
+running using the 'set_k(k)' method.
+
+Reconfiguration is done by locking the flowgraph, which stops it from
+running and processing data, performing the reconfiguration, and then
+restarting the graph by unlocking it.
+
+The following example code shows a graph that first adds two
+gr::analog::noise_source_c blocks and then replaces the
+gr::blocks::add_cc block with a gr::blocks::sub_cc block to then
+subtract the sources.
+
+\code
+from gnuradio import gr, analog, blocks
+import time
+
+class mytb(gr.top_block):
+ def __init__(self):
+ gr.top_block.__init__(self)
+
+ self.src0 = analog.noise_source_c(analog.GR_GAUSSIAN, 1)
+ self.src1 = analog.noise_source_c(analog.GR_GAUSSIAN, 1)
+ self.add = blocks.add_cc()
+ self.sub = blocks.sub_cc()
+ self.head = blocks.head(gr.sizeof_gr_complex, 1000000)
+ self.snk = blocks.file_sink(gr.sizeof_gr_complex, "output.32fc")
+
+ self.connect(self.src0, (self.add,0))
+ self.connect(self.src1, (self.add,1))
+ self.connect(self.add, self.head)
+ self.connect(self.head, self.snk)
+
+def main():
+ tb = mytb()
+ tb.start()
+ time.sleep(0.01)
+
+ # Stop flowgraph and disconnect the add block
+ tb.lock()
+ tb.disconnect(tb.add, tb.head)
+ tb.disconnect(tb.src0, (tb.add,0))
+ tb.disconnect(tb.src1, (tb.add,1))
+
+ # Connect the sub block and restart
+ tb.connect(tb.sub, tb.head)
+ tb.connect(tb.src0, (tb.sub,0))
+ tb.connect(tb.src1, (tb.sub,1))
+ tb.unlock()
+
+ tb.wait()
+
+if __name__ == "__main__":
+ main()
+\endcode
+
+During reconfiguration, the maximum noutput_items value can be changed
+either globally using the 'set_max_noutput_items(m)' on the gr_top_block
+object or locally using the 'set_max_noutput_items(m)' on any given
+block object.
+
+A block also has a 'unset_max_noutput_items()' method that unsets the
+local max noutput_items value so that block reverts back to using the
+global value.
+
+The following example expands the previous example but sets and resets
+the max noutput_items both locally and globally.
+
+\code
+from gnuradio import gr, analog, blocks
+import time
+
+class mytb(gr.top_block):
+ def __init__(self):
+ gr.top_block.__init__(self)
+
+ self.src0 = analog.noise_source_c(analog.GR_GAUSSIAN, 1)
+ self.src1 = analog.noise_source_c(analog.GR_GAUSSIAN, 1)
+ self.add = blocks.add_cc()
+ self.sub = blocks.sub_cc()
+ self.head = blocks.head(gr.sizeof_gr_complex, 1000000)
+ self.snk = blocks.file_sink(gr.sizeof_gr_complex, "output.32fc")
+
+ self.connect(self.src0, (self.add,0))
+ self.connect(self.src1, (self.add,1))
+ self.connect(self.add, self.head)
+ self.connect(self.head, self.snk)
+
+def main():
+ # Start the gr_top_block after setting some max noutput_items.
+ tb = mytb()
+ tb.src1.set_max_noutput_items(2000)
+ tb.start(100)
+ time.sleep(0.01)
+
+ # Stop flowgraph and disconnect the add block
+ tb.lock()
+
+ tb.disconnect(tb.add, tb.head)
+ tb.disconnect(tb.src0, (tb.add,0))
+ tb.disconnect(tb.src1, (tb.add,1))
+
+ # Connect the sub block
+ tb.connect(tb.sub, tb.head)
+ tb.connect(tb.src0, (tb.sub,0))
+ tb.connect(tb.src1, (tb.sub,1))
+
+ # Set new max_noutput_items for the gr_top_block
+ # and unset the local value for src1
+ tb.set_max_noutput_items(1000)
+ tb.src1.unset_max_noutput_items()
+ tb.unlock()
+
+ tb.wait()
+
+if __name__ == "__main__":
+ main()
+\endcode
+
+
+*/
+
diff --git a/docs/doxygen/other/prefs.dox b/docs/doxygen/other/prefs.dox
new file mode 100644
index 0000000000..46f68c447e
--- /dev/null
+++ b/docs/doxygen/other/prefs.dox
@@ -0,0 +1,87 @@
+/*! \page page_prefs Configuration files
+
+\section prefs Configuration / Preference Files
+
+GNU Radio defines some of its basic behavior through a set of
+configuration files located in
+${prefix}/etc/gnuradio/conf.d. Different components have different
+files listed in here for the various properties. These will be read
+once when starting a GNU Radio application, so updates during runtime
+will not affect them.
+
+The configuration files use the following format:
+
+\code
+# Stuff from section 1
+[section1]
+var1 = value1
+var2 = value2 # value of 2
+
+# Stuff from section 2
+[section2]
+var3 = value3
+\endcode
+
+In this file, the hash mark ('#') indicates a comment and blank lines
+are ignored. Section labels are defined inside square brackets as a
+group distinguisher. All options must be associated with a section
+name. The options are listed one per line with the option name is
+given followed by an equals ('=') sign and then the value.
+
+All section and option names must not have white spaces. If a value
+must have white space, the it MUST be put inside quotes. Any quoted
+value will have its white space preserved and the quotes internally
+will be stripped. As an example, on Apple desktops, an output device
+of "Display Audio" is a possible output device and can be set as:
+
+\code
+[audio_osx]
+default_output_device = "Display Audio"
+\endcode
+
+The result will pass Display Audio to the audio setup.
+
+The value of an option can be a string or number and retrieved through
+a few different interfaces. There is a single preference object
+created when GNU Radio is launched. In Python, you can get this by
+making a new variable:
+
+\code
+p = gr.prefs()
+\endcode
+
+Similarly, in C++, we get a reference to the object by explicitly
+calling for the singleton of the object:
+
+\code
+ prefs *p = prefs::singleton();
+\endcode
+
+The methods associated with this preferences object are (from class gr::prefs):
+
+\code
+ bool has_section(string section)
+ bool has_option(string section, string option)
+ string get_string(string section, string option, string default_val)
+ bool get_bool(string section, string option, bool default_val)
+ long get_long(string section, string option, long default_val)
+ double get_double(string section, string option, double default_val)
+\endcode
+
+When setting a Boolean value, we can use 0, 1, "True", "true",
+"False", "false", "On", "on", "Off", and "off".
+
+All configuration preferences in these files can also be overloaded by
+an environmental variable. The environmental variable is named based
+on the section and option name from the configuration file as:
+
+\code
+ GR_CONF_<SECTION>_<OPTION> = <value>
+\endcode
+
+The "GR_CONF_" is a prefix to identify this as a GNU Radio
+configuration variable and the section and option names are in
+uppercase. The value is the same format that would be used in the
+config file itself.
+
+*/
diff --git a/docs/doxygen/other/python_blocks.dox b/docs/doxygen/other/python_blocks.dox
new file mode 100644
index 0000000000..49273cdcd8
--- /dev/null
+++ b/docs/doxygen/other/python_blocks.dox
@@ -0,0 +1,154 @@
+/*! \page page_python_blocks Python Blocks
+
+How to create blocks in Python
+
+\section pyblocks_streaming Streaming Data Blocks
+
+We create blocks in Python very much like we would in C++, just with
+more Python. Figure out which type of block you want to create:
+
+\li general block (gr.basic_block)
+\li synchronous block (gr.sync_block)
+\li decimator (gr.sync_decimator)
+\li interpolator (gr.sync_interpolator)
+
+The block class inherits from one of these base classes, and then in
+defining the parent class, we set the I/O signature. However, unlike
+in C++ where we use the gr::io_signature class, here we can just
+create a Python list of the I/O data sizes using numpy data types:
+
+\li numpy.int8
+\li numpy.int16
+\li numpy.int32
+\li numpy.float32
+\li numpy.float64
+
+Like a normal C++ version of the block, we then create and initialize
+any variables in the constructor, define any setters and getters, and
+create the work function. The prototype for the work function is quite
+simple:
+
+\code
+def work(self, input_items, output_items)
+\endcode
+
+The input_items and output_items are lists of lists. The input_items
+contains a vector of input samples for every input stream, and the
+output_items is a vector for each output stream where we can place
+items. Then length of output_items[0] is equivalent to the
+noutput_items concept we are so familiar with from the C++ blocks.
+
+Following is an example Python block that adds two input streams
+together. This block is used in the qa_block_gateway.py test code.
+
+\code
+class add_2_f32_1_f32(gr.sync_block):
+ def __init__(self):
+ gr.sync_block.__init__(
+ self,
+ name = "add 2 f32",
+ in_sig = [numpy.float32, numpy.float32],
+ out_sig = [numpy.float32],
+ )
+
+ def work(self, input_items, output_items):
+ output_items[0][:] = input_items[0] + input_items[1]
+ return len(output_items[0])
+\endcode
+
+The block defines two input floating point streams by setting in_sig
+to "[numpy.float32, numpy.float32]" and a single output float stream
+in out_sig of "[numpy.float32]."
+
+The work function then just adds the two input streams together. The
+streams are input_items[0] and input_items[1]. The block still returns
+the concept of noutput_items like we use in C++, only we get it here
+by getting len(output_items[0]). Because this is a sync_block, we also
+know that the size of the input_items for both streams is the same as
+the size of the output_items vector.
+
+
+
+\section pyblocks_tags Using Stream Tags
+
+Python blocks have access to the stream tag system like their C++
+counterparts. The interface is almost identical except they behave
+just a bit more like we would expect in Python.
+
+To add tags to the data stream, we use the add_item_tag function:
+
+\code
+def work(self, input_items, output_items):
+ ....
+ add_item_tag(which_output, abs_offset,
+ key, value, srcid)
+ ....
+\endcode
+
+The abs_offset is an integer of the sample that the tag is attached
+to, and key and value are both PMTs to set the key:value pair of the
+tag information, and the srcid is an optional PMT to define the source
+of the block that generate the tag.
+
+We then can get tags using either the get_tags_in_range or
+get_tags_in_window. Again, like their C++ counter parts, the
+get_tags_in_range uses the absolute item offset numbering (using
+nitems_read) while the get_tags_in_window uses relative offsets within
+the current window of items available to the work function. The main
+difference from the C++ function is that instead of having the first
+argument be a vector where the tags are stored, the Python version
+just returns a list of tags. We would use it like this:
+
+\code
+def work(self, input_items, output_items):
+ ....
+ tags = get_tags_in_window(which_input, rel_start, rel_end)
+ ....
+\endcode
+
+
+
+\section pyblocks_msgs Using Message Passing
+
+Again, like their C++ counterparts, Python blocks can use the
+asynchronous message passing interface. We define output message
+handlers using:
+
+\code
+self.message_port_register_out(pmt.intern("<port name>"))
+\endcode
+
+We can then post messages to this using the message_port_pub function:
+
+\code
+self.message_port_pub(pmt.intern("<port name>"), <pmt message>)
+\endcode
+
+We then register input messages and handlers in similar ways:
+
+\code
+self.message_port_register_in(pmt.intern("<port name>"))
+self.set_msg_handler(pmt.intern("<port name>"), <msg handler function>)
+\endcode
+
+Putting this together below is a very simple example:
+
+\code
+class msg_block(gr.basic_block):
+ def __init__(self):
+ gr.basic_block.__init__(
+ self,
+ name="msg_block",
+ in_sig=None,
+ out_sig=None)
+
+ self.message_port_register_out(pmt.intern('msg_out'))
+ self.message_port_register_in(pmt.intern('msg_in'))
+ self.set_msg_handler(pmt.intern('msg_in'), self.handle_msg)
+
+ def handle_msg(self, msg):
+ self.message_port_pub(pmt.intern('msg_out'),
+ pmt.intern('message received!'))
+\endcode
+
+*/ \ No newline at end of file
diff --git a/docs/doxygen/other/usage.dox b/docs/doxygen/other/usage.dox
new file mode 100644
index 0000000000..717f14e610
--- /dev/null
+++ b/docs/doxygen/other/usage.dox
@@ -0,0 +1,43 @@
+/*! \page page_usage Usage Manual
+
+Note: Once built, check out <a href="http://gnuradio.org" target="_blank">gnuradio.org</a> for
+more tutorials on using the software system and examples.
+
+<b>Getting Started</b>
+
+\li \subpage build_guide - Installation notes, dependencies etc.
+\li \subpage page_exploring_gnuradio
+\li \subpage page_operating_fg
+
+
+<b>Metadata and Messages</b>
+
+\li \subpage page_pmt
+\li \subpage page_metadata
+\li \subpage page_msg_passing
+\li \subpage page_stream_tags
+\li \subpage page_tagged_stream_blocks
+
+<b>Advanced Development Topics</b>
+
+\li \subpage page_logger
+\li \subpage page_perf_counters
+\li \subpage page_affinity
+\li \subpage page_prefs
+\li \subpage page_python_blocks
+
+<b>Signal Processing and Digital Communications</b>
+
+\li \subpage page_pfb
+\li \subpage page_ofdm
+\li \subpage page_packet_data
+
+<b>Out-of-tree Modules</b>
+
+\li \subpage page_oot_config
+
+<b>VOLK</b>
+
+\li \subpage volk_guide - How to incorporate and use VOLK in GNU Radio blocks
+
+*/
diff --git a/docs/doxygen/other/volk_guide.dox b/docs/doxygen/other/volk_guide.dox
new file mode 100644
index 0000000000..a6a24457a6
--- /dev/null
+++ b/docs/doxygen/other/volk_guide.dox
@@ -0,0 +1,152 @@
+/*! \page volk_guide Instructions for using VOLK in GNU Radio
+
+Note: Many blocks have already been converted to use VOLK in their calls, so
+they can also serve as examples. See the
+gr::blocks::complex_to_<type>.h files for examples of various blocks
+that make use of VOLK.
+
+\section volk_intro Introduction
+
+VOLK is the Vector-Optimized Library of Kernels. It is a library that
+contains kernels of hand-written SIMD code for different mathematical
+operations. Since each SIMD architecture can be greatly different and
+no compiler has yet come along to handle vectorization properly or
+highly efficiently, VOLK approaches the problem differently. For each
+architecture or platform that a developer wishes to vectorize for, a
+new proto-kernel is added to VOLK. At runtime, VOLK will select the
+correct proto-kernel. In this way, the users of VOLK call a kernel for
+performing the operation that is platform/architecture agnostic. This
+allows us to write portable SIMD code.
+
+VOLK kernels are always defined with a 'generic' proto-kernel, which
+is written in plain C. With the generic kernel, the kernel becomes
+portable to any platform. Kernels are then extended by adding
+proto-kernels for new platforms in which they are desired.
+
+A good example of a VOLK kernel with multiple proto-kernels defined is
+the volk_32f_s32f_multiply_32f_a. This kernel implements a scalar
+multiplication of a vector of floating point numbers (each item in the
+vector is multiplied by the same value). This kernel has the following
+proto-kernels that are defined for 'generic,' 'avx,' 'sse,' and 'neon'
+
+\code
+ void volk_32f_s32f_multiply_32f_a_generic
+ void volk_32f_s32f_multiply_32f_a_sse
+ void volk_32f_s32f_multiply_32f_a_avx
+ void volk_32f_s32f_multiply_32f_a_neon
+\endcode
+
+These proto-kernels means that on platforms with AVX support, VOLK can
+select this option or the SSE option, depending on which is faster. If
+all else fails, VOLK can fall back on the generic proto-kernel, which
+will always work.
+
+See <a
+href="http://gnuradio.org/redmine/projects/gnuradio/wiki/Volk">VOLK on
+gnuradio.org</a> for details on the VOLK naming scheme.
+
+
+\section volk_alignment Setting and Using Memory Alignment Information
+
+For VOLK to work as best as possible, we want to use memory-aligned
+SIMD calls, which means we have to have some way of knowing and
+controlling the alignment of the buffers passed to gr_block's work
+function. We set the alignment requirement for SIMD aligned memory
+calls with:
+
+\code
+ const int alignment_multiple =
+ volk_get_alignment() / output_item_size;
+ set_alignment(std::max(1,alignment_multiple));
+\endcode
+
+The VOLK function 'volk_get_alignment' provides the alignment of the
+the machine architecture. We then base the alignment on the number of
+output items required to maintain the alignment, so we divide the
+number of alignment bytes by the number of bytes in an output items
+(sizeof(float), sizeof(gr_complex), etc.). This value is then set per
+block with the 'set_alignment' function.
+
+Because the scheduler tries to optimize throughput, the number of
+items available per call to work will change and depends on the
+availability of the read and write buffers. This means that it
+sometimes cannot produce a buffer that is properly memory
+aligned. This is an inevitable consequence of the scheduler
+system. Instead of requiring alignment, the scheduler enforces the
+alignment as much as possible, and when a buffer becomes unaligned,
+the scheduler will work to correct it as much as possible. If a
+block's buffers are unaligned, then, the scheduler sets a flag to
+indicate as much so that the block can then decide what best to
+do. The next section discusses the use of the aligned/unaligned
+information in a gr_block's work function.
+
+
+\section volk_work Calling VOLK kernels in Work()
+
+The buffers passed to work/general_work in a gr_block are not
+guaranteed to be aligned, but they will mostly be aligned whenever
+possible. When not aligned, the 'is_unaligned()' flag will be set so
+the scheduler knows to try to realign the buffers. We actually make
+calls to the VOLK dispatcher, which is mainly designed to check the
+buffer alignments and call the correct version of the kernel for
+us. From the user-level view of VOLK, calling the dispatcher allows us
+to ignore the concept of aligned versus unaligned. This looks like:
+
+\code
+int
+gr_some_block::work (int noutput_items,
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items)
+{
+ const float *in = (const float *) input_items[0];
+ float *out = (float *) output_items[0];
+
+ // Call the dispatcher to check alignment and call the _a or _u
+ // version of the kernel.
+ volk_32f_something_32f(out, in, noutput_items);
+
+ return noutput_items;
+}
+\endcode
+
+
+
+\section volk_tuning Tuning VOLK Performance
+
+VOLK comes with a profiler that will build a config file for the best
+SIMD architecture for your processor. Run volk_profile that is
+installed into $PREFIX/bin. This program tests all known VOLK kernels
+for each architecture supported by the processor. When finished, it
+will write to $HOME/.volk/volk_config the best architecture for the
+VOLK function. This file is read when using a function to know the
+best version of the function to execute.
+
+\subsection volk_hand_tuning Hand-Tuning Performance
+
+If you know a particular architecture works best for your processor,
+you can specify the particular architecture to use in the VOLK
+preferences file: $HOME/.volk/volk_config
+
+The file looks like:
+
+\code
+ volk_<FUNCTION_NAME> <ARCHITECTURE>
+\endcode
+
+Where the "FUNCTION_NAME" is the particular function that you want to
+over-ride the default value and "ARCHITECTURE" is the VOLK SIMD
+architecture to use (generic, sse, sse2, sse3, avx, etc.). For
+example, the following config file tells VOLK to use SSE3 for the
+aligned and unaligned versions of a function that multiplies two
+complex streams together.
+
+\code
+ volk_32fc_x2_multiply_32fc_a sse3
+ volk_32fc_x2_multiply_32fc_u sse3
+\endcode
+
+\b Tip: if benchmarking GNU Radio blocks, it can be useful to have a
+volk_config file that sets all architectures to 'generic' as a way to
+test the vectorized versus non-vectorized implementations.
+
+*/
diff --git a/docs/exploring-gnuradio/exploring_gnuradio.dox b/docs/exploring-gnuradio/exploring_gnuradio.dox
index a3224838d1..78dcfdf3cc 100644
--- a/docs/exploring-gnuradio/exploring_gnuradio.dox
+++ b/docs/exploring-gnuradio/exploring_gnuradio.dox
@@ -1,9 +1,9 @@
/*! \page page_exploring_gnuradio Exploring GNU Radio
-In this page, we will go over two examples that are shipped with GNU
-Radio. We start off with a very simple dial tone generating example
-that is done in Python. The second example uses both GNU Radio
-Companion (GRC) and Python for different stages of the example.
+Let's explore over two examples that are shipped with GNU Radio. We
+start off with a very simple dial tone generating example that is done
+in Python. The second example uses both GNU Radio Companion (GRC) and
+Python for different stages of the example.
In either case, we will be actually working with Python code and the
modules as they exist in Python. However, in the following discussion,
diff --git a/gnuradio-runtime/lib/CMakeLists.txt b/gnuradio-runtime/lib/CMakeLists.txt
index a3f0d4cb55..85a091de47 100644
--- a/gnuradio-runtime/lib/CMakeLists.txt
+++ b/gnuradio-runtime/lib/CMakeLists.txt
@@ -64,6 +64,7 @@ add_subdirectory(pmt)
GR_INCLUDE_SUBDIRECTORY(messages)
GR_INCLUDE_SUBDIRECTORY(thread)
GR_INCLUDE_SUBDIRECTORY(math)
+GR_INCLUDE_SUBDIRECTORY(controlport)
########################################################################
# Setup library
@@ -118,6 +119,7 @@ list(APPEND gnuradio_runtime_sources
vmcircbuf_mmap_tmpfile.cc
vmcircbuf_prefs.cc
vmcircbuf_sysv_shm.cc
+ ${gnuradio_ctrlport_sources}
)
# PowerPC workaround for posix_memalign
@@ -148,8 +150,6 @@ if(LINUX)
list(APPEND gnuradio_runtime_libs rt)
endif()
-GR_INCLUDE_SUBDIRECTORY(controlport)
-
########################################################################
# Add DLL resource file when using MSVC
########################################################################
@@ -190,6 +190,10 @@ if(TRY_SHM_VMCIRCBUF)
add_definitions( -DTRY_SHM_VMCIRCBUF )
endif(TRY_SHM_VMCIRCBUF)
+
+#######################################################
+# SHARED LIB BUILD
+#######################################################
add_library(gnuradio-runtime SHARED ${gnuradio_runtime_sources})
target_link_libraries(gnuradio-runtime ${gnuradio_runtime_libs})
GR_LIBRARY_FOO(gnuradio-runtime RUNTIME_COMPONENT "runtime_runtime" DEVEL_COMPONENT "runtime_devel")
@@ -198,10 +202,29 @@ add_dependencies(gnuradio-runtime
pmt_generated runtime_generated_includes
)
+
+#######################################################
+# STATIC LIB BUILD
+#######################################################
if(ENABLE_STATIC_LIBS)
- add_library(gnuradio-runtime_static STATIC ${gnuradio_runtime_sources})
+ # Remove controlport-specific source files from staticlibs build
+ if(ENABLE_GR_CTRLPORT)
+ list(REMOVE_ITEM gnuradio_runtime_sources
+ ${gnuradio_ctrlport_sources}
+ )
+
+ # Remove GR_CTRLPORT set this target's definitions.
+ # Makes sure we don't try to use ControlPort stuff in source files
+ # since Ice will not work with static libs.
+ GET_DIRECTORY_PROPERTY(STATIC_DEFS COMPILE_DEFINITIONS)
+ list(REMOVE_ITEM STATIC_DEFS "GR_CTRLPORT")
+ SET_PROPERTY(DIRECTORY PROPERTY COMPILE_DEFINITIONS "${STATIC_DEFS}")
+
+ # readd it to the target since we removed it from the directory-wide list.
+ SET_PROPERTY(TARGET gnuradio-runtime APPEND PROPERTY COMPILE_DEFINITIONS "GR_CTRLPORT")
+ endif(ENABLE_GR_CTRLPORT)
- add_dependencies(gnuradio-runtime_static gnuradio_runtime)
+ add_library(gnuradio-runtime_static STATIC ${gnuradio_runtime_sources})
if(NOT WIN32)
set_target_properties(gnuradio-runtime_static
diff --git a/gnuradio-runtime/lib/block.cc b/gnuradio-runtime/lib/block.cc
index b5bfbdaab3..8906d98b52 100644
--- a/gnuradio-runtime/lib/block.cc
+++ b/gnuradio-runtime/lib/block.cc
@@ -29,7 +29,6 @@
#include <gnuradio/block_detail.h>
#include <gnuradio/buffer.h>
#include <gnuradio/prefs.h>
-#include <gnuradio/config.h>
#include <stdexcept>
#include <iostream>
diff --git a/gnuradio-runtime/lib/controlport/CMakeLists.txt b/gnuradio-runtime/lib/controlport/CMakeLists.txt
index c41d87b1f7..262c5adb8b 100644
--- a/gnuradio-runtime/lib/controlport/CMakeLists.txt
+++ b/gnuradio-runtime/lib/controlport/CMakeLists.txt
@@ -22,7 +22,7 @@ if(ENABLE_GR_CTRLPORT)
# Add definition so we can compile in ControlPort to the blocks.
ADD_DEFINITIONS(-DGR_CTRLPORT)
-list(APPEND gnuradio_runtime_sources
+list(APPEND gnuradio_ctrlport_sources
${CMAKE_CURRENT_SOURCE_DIR}/rpcmanager.cc
${CMAKE_CURRENT_SOURCE_DIR}/rpcserver_aggregator.cc
${CMAKE_CURRENT_SOURCE_DIR}/rpcserver_booter_aggregator.cc
diff --git a/gnuradio-runtime/python/gnuradio/__init__.py b/gnuradio-runtime/python/gnuradio/__init__.py
index 39886272de..dd7b89650b 100644
--- a/gnuradio-runtime/python/gnuradio/__init__.py
+++ b/gnuradio-runtime/python/gnuradio/__init__.py
@@ -32,6 +32,7 @@ if path.endswith(path_ending):
__path__.append(os.path.join(build_path, 'gr-filter', 'python'))
__path__.append(os.path.join(build_path, 'gr-fft', 'python'))
__path__.append(os.path.join(build_path, 'gr-analog', 'python'))
+ __path__.append(os.path.join(build_path, 'gr-dtv', 'python'))
__path__.append(os.path.join(build_path, 'gr-trellis', 'python'))
__path__.append(os.path.join(build_path, 'gr-wavelet', 'python'))
__path__.append(os.path.join(build_path, 'gr-audio', 'python'))
diff --git a/gr-analog/include/gnuradio/analog/CMakeLists.txt b/gr-analog/include/gnuradio/analog/CMakeLists.txt
index 01c0518f0b..5812cb28ad 100644
--- a/gr-analog/include/gnuradio/analog/CMakeLists.txt
+++ b/gr-analog/include/gnuradio/analog/CMakeLists.txt
@@ -1,4 +1,4 @@
-# Copyright 2012 Free Software Foundation, Inc.
+# Copyright 2012,2014 Free Software Foundation, Inc.
#
# This file is part of GNU Radio
#
@@ -18,55 +18,12 @@
# Boston, MA 02110-1301, USA.
########################################################################
-# generate helper scripts to expand templated files
+# Invoke macro to generate various headers
########################################################################
-include(GrPython)
-
-file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py "
-#!${PYTHON_EXECUTABLE}
-
-import sys, os, re
-sys.path.append('${GR_RUNTIME_PYTHONPATH}')
-os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
-os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
-
-if __name__ == '__main__':
- import build_utils
- root, inp = sys.argv[1:3]
- for sig in sys.argv[3:]:
- name = re.sub ('X+', sig, root)
- d = build_utils.standard_dict2(name, sig, 'analog')
- build_utils.expand_template(d, inp)
-
-")
-
-macro(expand_h root)
- #make a list of all the generated files
- unset(expanded_files_h)
- foreach(sig ${ARGN})
- string(REGEX REPLACE "X+" ${sig} name ${root})
- list(APPEND expanded_files_h ${CMAKE_CURRENT_BINARY_DIR}/${name}.h)
- endforeach(sig)
-
- #create a command to generate the files
- add_custom_command(
- OUTPUT ${expanded_files_h}
- DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.h.t
- COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
- ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
- ${root} ${root}.h.t ${ARGN}
- )
-
- #install rules for the generated h files
- list(APPEND generated_includes ${expanded_files_h})
-endmacro(expand_h)
-
-########################################################################
-# Invoke macro to generate various sources
-#######################################################################
-expand_h(noise_source_X s i f c)
-expand_h(fastnoise_source_X s i f c)
-expand_h(sig_source_X s i f c)
+include(GrMiscUtils)
+GR_EXPAND_X_H(analog noise_source_X s i f c)
+GR_EXPAND_X_H(analog fastnoise_source_X s i f c)
+GR_EXPAND_X_H(analog sig_source_X s i f c)
add_custom_target(analog_generated_includes DEPENDS
${generated_includes}
diff --git a/gr-analog/lib/CMakeLists.txt b/gr-analog/lib/CMakeLists.txt
index 8376cbff55..6e92cd7ee0 100644
--- a/gr-analog/lib/CMakeLists.txt
+++ b/gr-analog/lib/CMakeLists.txt
@@ -1,4 +1,4 @@
-# Copyright 2012-2013 Free Software Foundation, Inc.
+# Copyright 2012-2014 Free Software Foundation, Inc.
#
# This file is part of GNU Radio
#
@@ -40,72 +40,12 @@ if(ENABLE_GR_CTRLPORT)
endif(ENABLE_GR_CTRLPORT)
########################################################################
-# generate helper scripts to expand templated files
+# Invoke macro to generate various sources and headers
########################################################################
-include(GrPython)
-
-file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py "
-#!${PYTHON_EXECUTABLE}
-
-import sys, os, re
-sys.path.append('${GR_RUNTIME_PYTHONPATH}')
-os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
-os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
-
-if __name__ == '__main__':
- import build_utils
- root, inp = sys.argv[1:3]
- for sig in sys.argv[3:]:
- name = re.sub ('X+', sig, root)
- d = build_utils.standard_impl_dict2(name, sig, 'analog')
- build_utils.expand_template(d, inp)
-")
-
-macro(expand_cc root)
- #make a list of all the generated files
- unset(expanded_files_cc)
- unset(expanded_files_h)
- foreach(sig ${ARGN})
- string(REGEX REPLACE "X+" ${sig} name ${root})
- list(APPEND expanded_files_cc ${CMAKE_CURRENT_BINARY_DIR}/${name}.cc)
- list(APPEND expanded_files_h ${CMAKE_CURRENT_BINARY_DIR}/${name}.h)
- endforeach(sig)
-
- #create a command to generate the source files
- add_custom_command(
- OUTPUT ${expanded_files_cc}
- DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.cc.t
- COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
- ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
- ${root} ${root}.cc.t ${ARGN}
- )
-
- #create a command to generate the header file
- add_custom_command(
- OUTPUT ${expanded_files_h}
- DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.h.t
- COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
- ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
- ${root} ${root}.h.t ${ARGN}
- )
-
- #make source files depends on headers to force generation
- set_source_files_properties(${expanded_files_cc}
- PROPERTIES OBJECT_DEPENDS "${expanded_files_h}"
- )
-
- #install rules for the generated cc files
- list(APPEND generated_sources ${expanded_files_cc})
- list(APPEND generated_headers ${expanded_files_h})
-endmacro(expand_cc)
-
-
-########################################################################
-# Invoke macro to generate various sources
-########################################################################
-expand_cc(noise_source_X_impl s i f c)
-expand_cc(fastnoise_source_X_impl s i f c)
-expand_cc(sig_source_X_impl s i f c)
+include(GrMiscUtils)
+GR_EXPAND_X_CC_H(analog noise_source_X_impl s i f c)
+GR_EXPAND_X_CC_H(analog fastnoise_source_X_impl s i f c)
+GR_EXPAND_X_CC_H(analog sig_source_X_impl s i f c)
########################################################################
# Setup library
@@ -169,6 +109,18 @@ GR_LIBRARY_FOO(gnuradio-analog RUNTIME_COMPONENT "analog_runtime" DEVEL_COMPONEN
add_dependencies(gnuradio-analog analog_generated_includes analog_generated_swigs gnuradio-filter)
if(ENABLE_STATIC_LIBS)
+ if(ENABLE_GR_CTRLPORT)
+ # Remove GR_CTRLPORT set this target's definitions.
+ # Makes sure we don't try to use ControlPort stuff in source files
+ # since Ice will not work with static libs.
+ GET_DIRECTORY_PROPERTY(STATIC_DEFS COMPILE_DEFINITIONS)
+ list(REMOVE_ITEM STATIC_DEFS "GR_CTRLPORT")
+ SET_PROPERTY(DIRECTORY PROPERTY COMPILE_DEFINITIONS "${STATIC_DEFS}")
+
+ # readd it to the target since we removed it from the directory-wide list.
+ SET_PROPERTY(TARGET gnuradio-analog APPEND PROPERTY COMPILE_DEFINITIONS "GR_CTRLPORT")
+ endif(ENABLE_GR_CTRLPORT)
+
add_library(gnuradio-analog_static STATIC ${analog_sources})
add_dependencies(gnuradio-analog_static
diff --git a/gr-atsc/lib/CMakeLists.txt b/gr-atsc/lib/CMakeLists.txt
index 5ac14fa118..88bb56d16e 100644
--- a/gr-atsc/lib/CMakeLists.txt
+++ b/gr-atsc/lib/CMakeLists.txt
@@ -128,6 +128,18 @@ target_link_libraries(gnuradio-atsc ${atsc_libs})
GR_LIBRARY_FOO(gnuradio-atsc RUNTIME_COMPONENT "atsc_runtime" DEVEL_COMPONENT "atsc_devel")
if(ENABLE_STATIC_LIBS)
+ if(ENABLE_GR_CTRLPORT)
+ # Remove GR_CTRLPORT set this target's definitions.
+ # Makes sure we don't try to use ControlPort stuff in source files
+ # since Ice will not work with static libs.
+ GET_DIRECTORY_PROPERTY(STATIC_DEFS COMPILE_DEFINITIONS)
+ list(REMOVE_ITEM STATIC_DEFS "GR_CTRLPORT")
+ SET_PROPERTY(DIRECTORY PROPERTY COMPILE_DEFINITIONS "${STATIC_DEFS}")
+
+ # readd it to the target since we removed it from the directory-wide list.
+ SET_PROPERTY(TARGET gnuradio-atsc APPEND PROPERTY COMPILE_DEFINITIONS "GR_CTRLPORT")
+ endif(ENABLE_GR_CTRLPORT)
+
add_library(gnuradio-atsc_static STATIC ${gr_atsc_sources})
if(NOT WIN32)
diff --git a/gr-audio/examples/grc/cvsd_sweep.grc b/gr-audio/examples/grc/cvsd_sweep.grc
index 00da399da1..a4eddfb1b0 100644
--- a/gr-audio/examples/grc/cvsd_sweep.grc
+++ b/gr-audio/examples/grc/cvsd_sweep.grc
@@ -1,6 +1,165 @@
<?xml version='1.0' encoding='ASCII'?>
<flow_graph>
- <timestamp>Sat Nov 10 15:10:11 2012</timestamp>
+ <timestamp>Sat Jul 12 14:30:30 2014</timestamp>
+ <block>
+ <key>variable</key>
+ <param>
+ <key>id</key>
+ <value>resample</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>8</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(356, 0)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable</key>
+ <param>
+ <key>id</key>
+ <value>audio_rate</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>8000</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(260, 0)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable</key>
+ <param>
+ <key>id</key>
+ <value>bw</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>0.5</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(449, 0)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>import</key>
+ <param>
+ <key>id</key>
+ <value>import_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>import</key>
+ <value>import math</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(157, 0)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>qtgui_tab_widget</key>
+ <param>
+ <key>id</key>
+ <value>displays</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>num_tabs</key>
+ <value>3</value>
+ </param>
+ <param>
+ <key>label0</key>
+ <value>Original</value>
+ </param>
+ <param>
+ <key>label1</key>
+ <value>Encoded</value>
+ </param>
+ <param>
+ <key>label2</key>
+ <value>Decoded</value>
+ </param>
+ <param>
+ <key>label3</key>
+ <value>Tab 3</value>
+ </param>
+ <param>
+ <key>label4</key>
+ <value>Tab 4</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value></value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(0, 89)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
<block>
<key>options</key>
<param>
@@ -29,7 +188,7 @@
</param>
<param>
<key>generate_options</key>
- <value>wx_gui</value>
+ <value>qt_gui</value>
</param>
<param>
<key>category</key>
@@ -52,8 +211,12 @@
<value></value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(10, 10)</value>
+ <value>(-1, 0)</value>
</param>
<param>
<key>_rotation</key>
@@ -61,22 +224,334 @@
</param>
</block>
<block>
- <key>import</key>
+ <key>qtgui_time_sink_x</key>
<param>
<key>id</key>
- <value>import_0</value>
+ <value>qtgui_time_sink_x_0_1</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>import</key>
- <value>import math</value>
+ <key>type</key>
+ <value>float</value>
+ </param>
+ <param>
+ <key>name</key>
+ <value>Decoded Waveform</value>
+ </param>
+ <param>
+ <key>size</key>
+ <value>1024</value>
+ </param>
+ <param>
+ <key>srate</key>
+ <value>audio_rate</value>
+ </param>
+ <param>
+ <key>autoscale</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>ymin</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>ymax</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>nconnections</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>update_time</key>
+ <value>0.10</value>
+ </param>
+ <param>
+ <key>entags</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value>displays@2:1,0,1,1</value>
+ </param>
+ <param>
+ <key>tr_mode</key>
+ <value>qtgui.TRIG_MODE_FREE</value>
+ </param>
+ <param>
+ <key>tr_slope</key>
+ <value>qtgui.TRIG_SLOPE_POS</value>
+ </param>
+ <param>
+ <key>tr_level</key>
+ <value>0.0</value>
+ </param>
+ <param>
+ <key>tr_delay</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>tr_chan</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>tr_tag</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>label1</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width1</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color1</key>
+ <value>"blue"</value>
+ </param>
+ <param>
+ <key>style1</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker1</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha1</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width2</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color2</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>style2</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker2</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha2</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width3</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color3</key>
+ <value>"green"</value>
+ </param>
+ <param>
+ <key>style3</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker3</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha3</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width4</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color4</key>
+ <value>"black"</value>
+ </param>
+ <param>
+ <key>style4</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker4</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha4</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width5</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color5</key>
+ <value>"cyan"</value>
+ </param>
+ <param>
+ <key>style5</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker5</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha5</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width6</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color6</key>
+ <value>"magenta"</value>
+ </param>
+ <param>
+ <key>style6</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker6</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha6</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width7</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color7</key>
+ <value>"yellow"</value>
+ </param>
+ <param>
+ <key>style7</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker7</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha7</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label8</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color8</key>
+ <value>"dark red"</value>
+ </param>
+ <param>
+ <key>style8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker8</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha8</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label9</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color9</key>
+ <value>"dark green"</value>
+ </param>
+ <param>
+ <key>style9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker9</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha9</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label10</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color10</key>
+ <value>"blue"</value>
+ </param>
+ <param>
+ <key>style10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker10</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha10</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(157, 11)</value>
+ <value>(1114, 319)</value>
</param>
<param>
<key>_rotation</key>
@@ -102,8 +577,24 @@
<value>bw</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(887, 340)</value>
+ <value>(868, 225)</value>
</param>
<param>
<key>_rotation</key>
@@ -111,30 +602,573 @@
</param>
</block>
<block>
- <key>blocks_vco_f</key>
+ <key>qtgui_time_sink_x</key>
<param>
<key>id</key>
- <value>vco</value>
+ <value>qtgui_time_sink_x_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>samp_rate</key>
+ <key>type</key>
+ <value>float</value>
+ </param>
+ <param>
+ <key>name</key>
+ <value>Original Waveform</value>
+ </param>
+ <param>
+ <key>size</key>
+ <value>1024</value>
+ </param>
+ <param>
+ <key>srate</key>
<value>audio_rate</value>
</param>
<param>
- <key>sensitivity</key>
- <value>audio_rate*2*math.pi</value>
+ <key>autoscale</key>
+ <value>False</value>
</param>
<param>
- <key>amplitude</key>
- <value>0.9</value>
+ <key>ymin</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>ymax</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>nconnections</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>update_time</key>
+ <value>0.10</value>
+ </param>
+ <param>
+ <key>entags</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value>displays@0:1,0,1,1</value>
+ </param>
+ <param>
+ <key>tr_mode</key>
+ <value>qtgui.TRIG_MODE_FREE</value>
+ </param>
+ <param>
+ <key>tr_slope</key>
+ <value>qtgui.TRIG_SLOPE_POS</value>
+ </param>
+ <param>
+ <key>tr_level</key>
+ <value>0.0</value>
+ </param>
+ <param>
+ <key>tr_delay</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>tr_chan</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>tr_tag</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>label1</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width1</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color1</key>
+ <value>"blue"</value>
+ </param>
+ <param>
+ <key>style1</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker1</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha1</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width2</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color2</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>style2</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker2</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha2</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width3</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color3</key>
+ <value>"green"</value>
+ </param>
+ <param>
+ <key>style3</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker3</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha3</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width4</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color4</key>
+ <value>"black"</value>
+ </param>
+ <param>
+ <key>style4</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker4</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha4</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width5</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color5</key>
+ <value>"cyan"</value>
+ </param>
+ <param>
+ <key>style5</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker5</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha5</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width6</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color6</key>
+ <value>"magenta"</value>
+ </param>
+ <param>
+ <key>style6</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker6</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha6</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width7</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color7</key>
+ <value>"yellow"</value>
+ </param>
+ <param>
+ <key>style7</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker7</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha7</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label8</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color8</key>
+ <value>"dark red"</value>
+ </param>
+ <param>
+ <key>style8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker8</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha8</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label9</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color9</key>
+ <value>"dark green"</value>
+ </param>
+ <param>
+ <key>style9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker9</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha9</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label10</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color10</key>
+ <value>"blue"</value>
+ </param>
+ <param>
+ <key>style10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker10</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha10</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(427, 332)</value>
+ <value>(388, 315)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>180</value>
+ </param>
+ </block>
+ <block>
+ <key>qtgui_freq_sink_x</key>
+ <param>
+ <key>id</key>
+ <value>qtgui_freq_sink_x_0_1</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>float</value>
+ </param>
+ <param>
+ <key>name</key>
+ <value>Decoded Spectrum</value>
+ </param>
+ <param>
+ <key>fftsize</key>
+ <value>1024</value>
+ </param>
+ <param>
+ <key>wintype</key>
+ <value>firdes.WIN_BLACKMAN_hARRIS</value>
+ </param>
+ <param>
+ <key>fc</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>bw</key>
+ <value>audio_rate</value>
+ </param>
+ <param>
+ <key>autoscale</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>average</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>ymin</key>
+ <value>-140</value>
+ </param>
+ <param>
+ <key>ymax</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>nconnections</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>update_time</key>
+ <value>0.10</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value>displays@2:0,0,1,1</value>
+ </param>
+ <param>
+ <key>label1</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width1</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color1</key>
+ <value>"blue"</value>
+ </param>
+ <param>
+ <key>alpha1</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width2</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color2</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>alpha2</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width3</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color3</key>
+ <value>"green"</value>
+ </param>
+ <param>
+ <key>alpha3</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width4</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color4</key>
+ <value>"black"</value>
+ </param>
+ <param>
+ <key>alpha4</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width5</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color5</key>
+ <value>"cyan"</value>
+ </param>
+ <param>
+ <key>alpha5</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width6</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color6</key>
+ <value>"magenta"</value>
+ </param>
+ <param>
+ <key>alpha6</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width7</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color7</key>
+ <value>"yellow"</value>
+ </param>
+ <param>
+ <key>alpha7</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label8</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color8</key>
+ <value>"dark red"</value>
+ </param>
+ <param>
+ <key>alpha8</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label9</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color9</key>
+ <value>"dark green"</value>
+ </param>
+ <param>
+ <key>alpha9</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label10</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color10</key>
+ <value>"dark blue"</value>
+ </param>
+ <param>
+ <key>alpha10</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(1122, 90)</value>
</param>
<param>
<key>_rotation</key>
@@ -160,8 +1194,24 @@
<value>bw</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(655, 340)</value>
+ <value>(636, 226)</value>
</param>
<param>
<key>_rotation</key>
@@ -195,8 +1245,24 @@
<value>1</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(648, 415)</value>
+ <value>(629, 301)</value>
</param>
<param>
<key>_rotation</key>
@@ -204,26 +1270,50 @@
</param>
</block>
<block>
- <key>blocks_char_to_float</key>
+ <key>blocks_throttle</key>
<param>
<key>id</key>
- <value>c2f</value>
+ <value>throttle</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
+ <key>type</key>
+ <value>float</value>
+ </param>
+ <param>
+ <key>samples_per_second</key>
+ <value>audio_rate</value>
+ </param>
+ <param>
<key>vlen</key>
<value>1</value>
</param>
<param>
- <key>scale</key>
- <value>1</value>
+ <key>ignoretag</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(676, 483)</value>
+ <value>(219, 234)</value>
</param>
<param>
<key>_rotation</key>
@@ -231,57 +1321,58 @@
</param>
</block>
<block>
- <key>audio_sink</key>
+ <key>analog_sig_source_x</key>
<param>
<key>id</key>
- <value>audio_sink</value>
+ <value>analog_sig_source_x_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
+ <key>type</key>
+ <value>float</value>
+ </param>
+ <param>
<key>samp_rate</key>
<value>audio_rate</value>
</param>
<param>
- <key>device_name</key>
- <value>plughw:0,0</value>
+ <key>waveform</key>
+ <value>analog.GR_TRI_WAVE</value>
</param>
<param>
- <key>ok_to_block</key>
- <value>True</value>
+ <key>freq</key>
+ <value>0.05</value>
</param>
<param>
- <key>num_inputs</key>
- <value>1</value>
+ <key>amp</key>
+ <value>0.5</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(1127, 340)</value>
+ <key>offset</key>
+ <value>0</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>alias</key>
+ <value></value>
</param>
- </block>
- <block>
- <key>variable</key>
<param>
- <key>id</key>
- <value>audio_rate</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>value</key>
- <value>8000</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(251, 10)</value>
+ <value>(17, 202)</value>
</param>
<param>
<key>_rotation</key>
@@ -289,45 +1380,46 @@
</param>
</block>
<block>
- <key>variable</key>
+ <key>blocks_vco_f</key>
<param>
<key>id</key>
- <value>resample</value>
+ <value>vco</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>8</value>
+ <key>samp_rate</key>
+ <value>audio_rate</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(344, 11)</value>
+ <key>sensitivity</key>
+ <value>audio_rate*2*math.pi</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>amplitude</key>
+ <value>0.9</value>
</param>
- </block>
- <block>
- <key>variable</key>
<param>
- <key>id</key>
- <value>bw</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>value</key>
- <value>0.5</value>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(431, 11)</value>
+ <value>(398, 218)</value>
</param>
<param>
<key>_rotation</key>
@@ -335,34 +1427,42 @@
</param>
</block>
<block>
- <key>notebook</key>
+ <key>blocks_char_to_float</key>
<param>
<key>id</key>
- <value>displays</value>
+ <value>c2f</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>style</key>
- <value>wx.NB_TOP</value>
+ <key>vlen</key>
+ <value>1</value>
</param>
<param>
- <key>labels</key>
- <value>['Original','Encoded','Decoded']</value>
+ <key>scale</key>
+ <value>1</value>
</param>
<param>
- <key>grid_pos</key>
+ <key>alias</key>
<value></value>
</param>
<param>
- <key>notebook</key>
+ <key>affinity</key>
<value></value>
</param>
<param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(12, 106)</value>
+ <value>(657, 369)</value>
</param>
<param>
<key>_rotation</key>
@@ -370,10 +1470,10 @@
</param>
</block>
<block>
- <key>wxgui_fftsink2</key>
+ <key>qtgui_freq_sink_x</key>
<param>
<key>id</key>
- <value>orig_fft</value>
+ <value>qtgui_freq_sink_x_0_0</value>
</param>
<param>
<key>_enabled</key>
@@ -384,151 +1484,224 @@
<value>float</value>
</param>
<param>
- <key>title</key>
- <value>Original Spectrum</value>
+ <key>name</key>
+ <value>Encoded Spectrum</value>
</param>
<param>
- <key>samp_rate</key>
- <value>audio_rate</value>
+ <key>fftsize</key>
+ <value>1024</value>
</param>
<param>
- <key>baseband_freq</key>
+ <key>wintype</key>
+ <value>firdes.WIN_BLACKMAN_hARRIS</value>
+ </param>
+ <param>
+ <key>fc</key>
<value>0</value>
</param>
<param>
- <key>y_per_div</key>
- <value>10</value>
+ <key>bw</key>
+ <value>audio_rate</value>
+ </param>
+ <param>
+ <key>autoscale</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>average</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>ymin</key>
+ <value>-140</value>
</param>
<param>
- <key>y_divs</key>
+ <key>ymax</key>
<value>10</value>
</param>
<param>
- <key>ref_level</key>
- <value>0</value>
+ <key>nconnections</key>
+ <value>1</value>
</param>
<param>
- <key>ref_scale</key>
- <value>2.0</value>
+ <key>update_time</key>
+ <value>0.10</value>
</param>
<param>
- <key>fft_size</key>
- <value>1024</value>
+ <key>gui_hint</key>
+ <value>displays@1:0,0,1,1</value>
</param>
<param>
- <key>fft_rate</key>
- <value>30</value>
+ <key>label1</key>
+ <value></value>
</param>
<param>
- <key>peak_hold</key>
- <value>False</value>
+ <key>width1</key>
+ <value>1</value>
</param>
<param>
- <key>average</key>
- <value>False</value>
+ <key>color1</key>
+ <value>"blue"</value>
</param>
<param>
- <key>avg_alpha</key>
- <value>0</value>
+ <key>alpha1</key>
+ <value>1.0</value>
</param>
<param>
- <key>win</key>
- <value>None</value>
+ <key>label2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width2</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color2</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>alpha2</key>
+ <value>1.0</value>
</param>
<param>
- <key>win_size</key>
+ <key>label3</key>
<value></value>
</param>
<param>
- <key>grid_pos</key>
- <value>0, 0, 1, 1</value>
+ <key>width3</key>
+ <value>1</value>
</param>
<param>
- <key>notebook</key>
- <value>displays, 0</value>
+ <key>color3</key>
+ <value>"green"</value>
</param>
<param>
- <key>freqvar</key>
- <value>None</value>
+ <key>alpha3</key>
+ <value>1.0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(415, 97)</value>
+ <key>label4</key>
+ <value></value>
</param>
<param>
- <key>_rotation</key>
- <value>180</value>
+ <key>width4</key>
+ <value>1</value>
</param>
- </block>
- <block>
- <key>wxgui_scopesink2</key>
<param>
- <key>id</key>
- <value>orig_scope</value>
+ <key>color4</key>
+ <value>"black"</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>alpha4</key>
+ <value>1.0</value>
</param>
<param>
- <key>type</key>
- <value>float</value>
+ <key>label5</key>
+ <value></value>
</param>
<param>
- <key>title</key>
- <value>Original Waveform</value>
+ <key>width5</key>
+ <value>1</value>
</param>
<param>
- <key>samp_rate</key>
- <value>audio_rate</value>
+ <key>color5</key>
+ <value>"cyan"</value>
</param>
<param>
- <key>v_scale</key>
- <value>0</value>
+ <key>alpha5</key>
+ <value>1.0</value>
</param>
<param>
- <key>v_offset</key>
- <value>0</value>
+ <key>label6</key>
+ <value></value>
</param>
<param>
- <key>t_scale</key>
- <value>0</value>
+ <key>width6</key>
+ <value>1</value>
</param>
<param>
- <key>ac_couple</key>
- <value>False</value>
+ <key>color6</key>
+ <value>"magenta"</value>
</param>
<param>
- <key>xy_mode</key>
- <value>False</value>
+ <key>alpha6</key>
+ <value>1.0</value>
</param>
<param>
- <key>num_inputs</key>
+ <key>label7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width7</key>
<value>1</value>
</param>
<param>
- <key>win_size</key>
+ <key>color7</key>
+ <value>"yellow"</value>
+ </param>
+ <param>
+ <key>alpha7</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label8</key>
<value></value>
</param>
<param>
- <key>grid_pos</key>
- <value>1, 0, 1, 1</value>
+ <key>width8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color8</key>
+ <value>"dark red"</value>
</param>
<param>
- <key>notebook</key>
- <value>displays, 0</value>
+ <key>alpha8</key>
+ <value>1.0</value>
</param>
<param>
- <key>trig_mode</key>
- <value>wxgui.TRIG_MODE_AUTO</value>
+ <key>label9</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width9</key>
+ <value>1</value>
</param>
<param>
- <key>y_axis_label</key>
- <value>Counts</value>
+ <key>color9</key>
+ <value>"dark green"</value>
+ </param>
+ <param>
+ <key>alpha9</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label10</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color10</key>
+ <value>"dark blue"</value>
+ </param>
+ <param>
+ <key>alpha10</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(414, 425)</value>
+ <value>(508, 444)</value>
</param>
<param>
<key>_rotation</key>
@@ -536,10 +1709,10 @@
</param>
</block>
<block>
- <key>wxgui_scopesink2</key>
+ <key>qtgui_time_sink_x</key>
<param>
<key>id</key>
- <value>enc_scope</value>
+ <value>qtgui_time_sink_x_0_0</value>
</param>
<param>
<key>_enabled</key>
@@ -550,237 +1723,331 @@
<value>float</value>
</param>
<param>
- <key>title</key>
+ <key>name</key>
<value>Encoded Waveform</value>
</param>
<param>
- <key>samp_rate</key>
- <value>audio_rate*resample</value>
+ <key>size</key>
+ <value>1024</value>
</param>
<param>
- <key>v_scale</key>
- <value>0.5</value>
+ <key>srate</key>
+ <value>audio_rate</value>
+ </param>
+ <param>
+ <key>autoscale</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>ymin</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>ymax</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>nconnections</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>update_time</key>
+ <value>0.10</value>
+ </param>
+ <param>
+ <key>entags</key>
+ <value>True</value>
</param>
<param>
- <key>v_offset</key>
+ <key>gui_hint</key>
+ <value>displays@1:1,0,1,1</value>
+ </param>
+ <param>
+ <key>tr_mode</key>
+ <value>qtgui.TRIG_MODE_FREE</value>
+ </param>
+ <param>
+ <key>tr_slope</key>
+ <value>qtgui.TRIG_SLOPE_POS</value>
+ </param>
+ <param>
+ <key>tr_level</key>
+ <value>0.0</value>
+ </param>
+ <param>
+ <key>tr_delay</key>
<value>0</value>
</param>
<param>
- <key>t_scale</key>
- <value>20.0/(audio_rate*resample)</value>
+ <key>tr_chan</key>
+ <value>0</value>
</param>
<param>
- <key>ac_couple</key>
- <value>False</value>
+ <key>tr_tag</key>
+ <value>""</value>
</param>
<param>
- <key>xy_mode</key>
- <value>False</value>
+ <key>label1</key>
+ <value></value>
</param>
<param>
- <key>num_inputs</key>
+ <key>width1</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color1</key>
+ <value>"blue"</value>
+ </param>
+ <param>
+ <key>style1</key>
<value>1</value>
</param>
<param>
- <key>win_size</key>
+ <key>marker1</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha1</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label2</key>
<value></value>
</param>
<param>
- <key>grid_pos</key>
- <value>0, 0, 1, 1</value>
+ <key>width2</key>
+ <value>1</value>
</param>
<param>
- <key>notebook</key>
- <value>displays, 1</value>
+ <key>color2</key>
+ <value>"red"</value>
</param>
<param>
- <key>trig_mode</key>
- <value>wxgui.TRIG_MODE_AUTO</value>
+ <key>style2</key>
+ <value>1</value>
</param>
<param>
- <key>y_axis_label</key>
- <value>Counts</value>
+ <key>marker2</key>
+ <value>-1</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(858, 591)</value>
+ <key>alpha2</key>
+ <value>1.0</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>label3</key>
+ <value></value>
</param>
- </block>
- <block>
- <key>wxgui_fftsink2</key>
<param>
- <key>id</key>
- <value>dec_fft</value>
+ <key>width3</key>
+ <value>1</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>color3</key>
+ <value>"green"</value>
</param>
<param>
- <key>type</key>
- <value>float</value>
+ <key>style3</key>
+ <value>1</value>
</param>
<param>
- <key>title</key>
- <value>Decoded Spectrum</value>
+ <key>marker3</key>
+ <value>-1</value>
</param>
<param>
- <key>samp_rate</key>
- <value>audio_rate</value>
+ <key>alpha3</key>
+ <value>1.0</value>
</param>
<param>
- <key>baseband_freq</key>
- <value>0</value>
+ <key>label4</key>
+ <value></value>
</param>
<param>
- <key>y_per_div</key>
- <value>5</value>
+ <key>width4</key>
+ <value>1</value>
</param>
<param>
- <key>y_divs</key>
- <value>10</value>
+ <key>color4</key>
+ <value>"black"</value>
</param>
<param>
- <key>ref_level</key>
- <value>10</value>
+ <key>style4</key>
+ <value>1</value>
</param>
<param>
- <key>ref_scale</key>
- <value>0.1</value>
+ <key>marker4</key>
+ <value>-1</value>
</param>
<param>
- <key>fft_size</key>
- <value>1024</value>
+ <key>alpha4</key>
+ <value>1.0</value>
</param>
<param>
- <key>fft_rate</key>
- <value>30</value>
+ <key>label5</key>
+ <value></value>
</param>
<param>
- <key>peak_hold</key>
- <value>False</value>
+ <key>width5</key>
+ <value>1</value>
</param>
<param>
- <key>average</key>
- <value>False</value>
+ <key>color5</key>
+ <value>"cyan"</value>
</param>
<param>
- <key>avg_alpha</key>
- <value>0</value>
+ <key>style5</key>
+ <value>1</value>
</param>
<param>
- <key>win</key>
- <value>None</value>
+ <key>marker5</key>
+ <value>-1</value>
</param>
<param>
- <key>win_size</key>
+ <key>alpha5</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label6</key>
<value></value>
</param>
<param>
- <key>grid_pos</key>
- <value>0, 0, 1, 1</value>
+ <key>width6</key>
+ <value>1</value>
</param>
<param>
- <key>notebook</key>
- <value>displays, 2</value>
+ <key>color6</key>
+ <value>"magenta"</value>
</param>
<param>
- <key>freqvar</key>
- <value>None</value>
+ <key>style6</key>
+ <value>1</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(891, 98)</value>
+ <key>marker6</key>
+ <value>-1</value>
</param>
<param>
- <key>_rotation</key>
- <value>180</value>
+ <key>alpha6</key>
+ <value>1.0</value>
</param>
- </block>
- <block>
- <key>wxgui_scopesink2</key>
<param>
- <key>id</key>
- <value>dec_scope</value>
+ <key>label7</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>width7</key>
+ <value>1</value>
</param>
<param>
- <key>type</key>
- <value>float</value>
+ <key>color7</key>
+ <value>"yellow"</value>
</param>
<param>
- <key>title</key>
- <value>Decoded Waveform</value>
+ <key>style7</key>
+ <value>1</value>
</param>
<param>
- <key>samp_rate</key>
- <value>audio_rate</value>
+ <key>marker7</key>
+ <value>-1</value>
</param>
<param>
- <key>v_scale</key>
- <value>0</value>
+ <key>alpha7</key>
+ <value>1.0</value>
</param>
<param>
- <key>v_offset</key>
- <value>0</value>
+ <key>label8</key>
+ <value></value>
</param>
<param>
- <key>t_scale</key>
- <value>0</value>
+ <key>width8</key>
+ <value>1</value>
</param>
<param>
- <key>ac_couple</key>
- <value>False</value>
+ <key>color8</key>
+ <value>"dark red"</value>
</param>
<param>
- <key>xy_mode</key>
- <value>False</value>
+ <key>style8</key>
+ <value>1</value>
</param>
<param>
- <key>num_inputs</key>
+ <key>marker8</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha8</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label9</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width9</key>
<value>1</value>
</param>
<param>
- <key>win_size</key>
+ <key>color9</key>
+ <value>"dark green"</value>
+ </param>
+ <param>
+ <key>style9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker9</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha9</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label10</key>
<value></value>
</param>
<param>
- <key>grid_pos</key>
- <value>1, 0, 1, 1</value>
+ <key>width10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color10</key>
+ <value>"blue"</value>
+ </param>
+ <param>
+ <key>style10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker10</key>
+ <value>-1</value>
</param>
<param>
- <key>notebook</key>
- <value>displays, 2</value>
+ <key>alpha10</key>
+ <value>1.0</value>
</param>
<param>
- <key>trig_mode</key>
- <value>wxgui.TRIG_MODE_AUTO</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>y_axis_label</key>
- <value>Counts</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(889, 422)</value>
+ <value>(826, 444)</value>
</param>
<param>
<key>_rotation</key>
- <value>180</value>
+ <value>0</value>
</param>
</block>
<block>
- <key>blocks_throttle</key>
+ <key>qtgui_freq_sink_x</key>
<param>
<key>id</key>
- <value>throttle</value>
+ <value>qtgui_freq_sink_x_0</value>
</param>
<param>
<key>_enabled</key>
@@ -791,159 +2058,276 @@
<value>float</value>
</param>
<param>
- <key>samples_per_second</key>
- <value>audio_rate</value>
+ <key>name</key>
+ <value>Original Spectrum</value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>fftsize</key>
+ <value>1024</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(238, 348)</value>
+ <key>wintype</key>
+ <value>firdes.WIN_BLACKMAN_hARRIS</value>
</param>
<param>
- <key>_rotation</key>
+ <key>fc</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>analog_sig_source_x</key>
<param>
- <key>id</key>
- <value>analog_sig_source_x_0</value>
+ <key>bw</key>
+ <value>audio_rate</value>
</param>
<param>
- <key>_enabled</key>
+ <key>autoscale</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>float</value>
+ <key>average</key>
+ <value>1.0</value>
</param>
<param>
- <key>samp_rate</key>
- <value>audio_rate</value>
+ <key>ymin</key>
+ <value>-140</value>
</param>
<param>
- <key>waveform</key>
- <value>analog.GR_TRI_WAVE</value>
+ <key>ymax</key>
+ <value>10</value>
</param>
<param>
- <key>freq</key>
- <value>0.05</value>
+ <key>nconnections</key>
+ <value>1</value>
</param>
<param>
- <key>amp</key>
- <value>0.5</value>
+ <key>update_time</key>
+ <value>0.10</value>
</param>
<param>
- <key>offset</key>
- <value>0</value>
+ <key>gui_hint</key>
+ <value>displays@0:0,0,1,1</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(29, 316)</value>
+ <key>label1</key>
+ <value></value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>width1</key>
+ <value>1</value>
</param>
- </block>
- <block>
- <key>wxgui_fftsink2</key>
<param>
- <key>id</key>
- <value>enc_fft</value>
+ <key>color1</key>
+ <value>"blue"</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>alpha1</key>
+ <value>1.0</value>
</param>
<param>
- <key>type</key>
- <value>float</value>
+ <key>label2</key>
+ <value></value>
</param>
<param>
- <key>title</key>
- <value>Encoded Spectrum</value>
+ <key>width2</key>
+ <value>1</value>
</param>
<param>
- <key>samp_rate</key>
- <value>audio_rate*resample</value>
+ <key>color2</key>
+ <value>"red"</value>
</param>
<param>
- <key>baseband_freq</key>
- <value>0</value>
+ <key>alpha2</key>
+ <value>1.0</value>
</param>
<param>
- <key>y_per_div</key>
- <value>10</value>
+ <key>label3</key>
+ <value></value>
</param>
<param>
- <key>y_divs</key>
- <value>8</value>
+ <key>width3</key>
+ <value>1</value>
</param>
<param>
- <key>ref_level</key>
- <value>10</value>
+ <key>color3</key>
+ <value>"green"</value>
</param>
<param>
- <key>ref_scale</key>
- <value>2.0</value>
+ <key>alpha3</key>
+ <value>1.0</value>
</param>
<param>
- <key>fft_size</key>
- <value>1024</value>
+ <key>label4</key>
+ <value></value>
</param>
<param>
- <key>fft_rate</key>
- <value>30</value>
+ <key>width4</key>
+ <value>1</value>
</param>
<param>
- <key>peak_hold</key>
- <value>False</value>
+ <key>color4</key>
+ <value>"black"</value>
</param>
<param>
- <key>average</key>
- <value>False</value>
+ <key>alpha4</key>
+ <value>1.0</value>
</param>
<param>
- <key>avg_alpha</key>
- <value>0</value>
+ <key>label5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width5</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color5</key>
+ <value>"cyan"</value>
+ </param>
+ <param>
+ <key>alpha5</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width6</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color6</key>
+ <value>"magenta"</value>
+ </param>
+ <param>
+ <key>alpha6</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width7</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color7</key>
+ <value>"yellow"</value>
+ </param>
+ <param>
+ <key>alpha7</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label8</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color8</key>
+ <value>"dark red"</value>
+ </param>
+ <param>
+ <key>alpha8</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label9</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width9</key>
+ <value>1</value>
</param>
<param>
- <key>win</key>
- <value>None</value>
+ <key>color9</key>
+ <value>"dark green"</value>
</param>
<param>
- <key>win_size</key>
+ <key>alpha9</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label10</key>
<value></value>
</param>
<param>
- <key>grid_pos</key>
- <value>1, 0, 1, 1</value>
+ <key>width10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color10</key>
+ <value>"dark blue"</value>
</param>
<param>
- <key>notebook</key>
- <value>displays, 1</value>
+ <key>alpha10</key>
+ <value>1.0</value>
</param>
<param>
- <key>freqvar</key>
- <value>None</value>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(610, 559)</value>
+ <value>(385, 95)</value>
</param>
<param>
<key>_rotation</key>
<value>180</value>
</param>
</block>
+ <block>
+ <key>audio_sink</key>
+ <param>
+ <key>id</key>
+ <value>audio_sink</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>samp_rate</key>
+ <value>audio_rate</value>
+ </param>
+ <param>
+ <key>device_name</key>
+ <value></value>
+ </param>
+ <param>
+ <key>ok_to_block</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>num_inputs</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(1110, 225)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
<connection>
- <source_block_id>vco</source_block_id>
- <sink_block_id>orig_fft</sink_block_id>
+ <source_block_id>vocoder_cvsd_decode_bf_0</source_block_id>
+ <sink_block_id>qtgui_time_sink_x_0_1</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
@@ -966,56 +2350,56 @@
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>vco</source_block_id>
- <sink_block_id>orig_scope</sink_block_id>
+ <source_block_id>vocoder_cvsd_decode_bf_0</source_block_id>
+ <sink_block_id>audio_sink</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>vocoder_cvsd_decode_bf_0</source_block_id>
- <sink_block_id>dec_fft</sink_block_id>
+ <source_block_id>enc</source_block_id>
+ <sink_block_id>p2u</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>vocoder_cvsd_decode_bf_0</source_block_id>
- <sink_block_id>dec_scope</sink_block_id>
+ <source_block_id>p2u</source_block_id>
+ <sink_block_id>c2f</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>vocoder_cvsd_decode_bf_0</source_block_id>
- <sink_block_id>audio_sink</sink_block_id>
+ <source_block_id>analog_sig_source_x_0</source_block_id>
+ <sink_block_id>throttle</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>enc</source_block_id>
- <sink_block_id>p2u</sink_block_id>
+ <source_block_id>vco</source_block_id>
+ <sink_block_id>qtgui_freq_sink_x_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>p2u</source_block_id>
- <sink_block_id>c2f</sink_block_id>
+ <source_block_id>vco</source_block_id>
+ <sink_block_id>qtgui_time_sink_x_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>c2f</source_block_id>
- <sink_block_id>enc_fft</sink_block_id>
+ <sink_block_id>qtgui_time_sink_x_0_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>c2f</source_block_id>
- <sink_block_id>enc_scope</sink_block_id>
+ <sink_block_id>qtgui_freq_sink_x_0_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>analog_sig_source_x_0</source_block_id>
- <sink_block_id>throttle</sink_block_id>
+ <source_block_id>vocoder_cvsd_decode_bf_0</source_block_id>
+ <sink_block_id>qtgui_freq_sink_x_0_1</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
diff --git a/gr-audio/examples/grc/dial_tone.grc b/gr-audio/examples/grc/dial_tone.grc
index 2503fed640..74ee4fcb35 100644
--- a/gr-audio/examples/grc/dial_tone.grc
+++ b/gr-audio/examples/grc/dial_tone.grc
@@ -1,6 +1,6 @@
<?xml version='1.0' encoding='ASCII'?>
<flow_graph>
- <timestamp>Sat Nov 10 15:10:08 2012</timestamp>
+ <timestamp>Sat Jul 12 14:32:31 2014</timestamp>
<block>
<key>options</key>
<param>
@@ -29,7 +29,7 @@
</param>
<param>
<key>generate_options</key>
- <value>wx_gui</value>
+ <value>qt_gui</value>
</param>
<param>
<key>category</key>
@@ -52,8 +52,12 @@
<value></value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(10, 10)</value>
+ <value>(0, -1)</value>
</param>
<param>
<key>_rotation</key>
@@ -61,34 +65,26 @@
</param>
</block>
<block>
- <key>audio_sink</key>
+ <key>variable</key>
<param>
<key>id</key>
- <value>audio_sink</value>
+ <value>samp_rate</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>samp_rate</key>
+ <key>value</key>
<value>32000</value>
</param>
<param>
- <key>device_name</key>
+ <key>alias</key>
<value></value>
</param>
<param>
- <key>ok_to_block</key>
- <value>True</value>
- </param>
- <param>
- <key>num_inputs</key>
- <value>1</value>
- </param>
- <param>
<key>_coordinate</key>
- <value>(699, 112)</value>
+ <value>(188, 0)</value>
</param>
<param>
<key>_rotation</key>
@@ -96,54 +92,46 @@
</param>
</block>
<block>
- <key>variable_slider</key>
+ <key>blocks_add_xx</key>
<param>
<key>id</key>
- <value>ampl</value>
+ <value>blocks_add_xx</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>label</key>
- <value>Volume</value>
- </param>
- <param>
- <key>value</key>
- <value>.4</value>
- </param>
- <param>
- <key>min</key>
- <value>0</value>
+ <key>type</key>
+ <value>float</value>
</param>
<param>
- <key>max</key>
- <value>.5</value>
+ <key>num_inputs</key>
+ <value>3</value>
</param>
<param>
- <key>num_steps</key>
- <value>100</value>
+ <key>vlen</key>
+ <value>1</value>
</param>
<param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>grid_pos</key>
- <value>0, 0, 1, 2</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>notebook</key>
- <value></value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(634, 413)</value>
+ <value>(584, 118)</value>
</param>
<param>
<key>_rotation</key>
@@ -151,54 +139,50 @@
</param>
</block>
<block>
- <key>variable_slider</key>
+ <key>analog_noise_source_x</key>
<param>
<key>id</key>
- <value>noise</value>
+ <value>analog_noise_source_x_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>label</key>
- <value>Noise</value>
- </param>
- <param>
- <key>value</key>
- <value>.005</value>
+ <key>type</key>
+ <value>float</value>
</param>
<param>
- <key>min</key>
- <value>0</value>
+ <key>noise_type</key>
+ <value>analog.GR_GAUSSIAN</value>
</param>
<param>
- <key>max</key>
- <value>.2</value>
+ <key>amp</key>
+ <value>noise</value>
</param>
<param>
- <key>num_steps</key>
- <value>100</value>
+ <key>seed</key>
+ <value>-42</value>
</param>
<param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>grid_pos</key>
- <value>1, 0, 1, 2</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>notebook</key>
- <value></value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(443, 412)</value>
+ <value>(298, 247)</value>
</param>
<param>
<key>_rotation</key>
@@ -206,53 +190,58 @@
</param>
</block>
<block>
- <key>variable</key>
+ <key>analog_sig_source_x</key>
<param>
<key>id</key>
- <value>samp_rate</value>
+ <value>analog_sig_source_x_1</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>32000</value>
+ <key>type</key>
+ <value>float</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(11, 171)</value>
+ <key>samp_rate</key>
+ <value>samp_rate</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>waveform</key>
+ <value>analog.GR_COS_WAVE</value>
</param>
- </block>
- <block>
- <key>blocks_add_xx</key>
<param>
- <key>id</key>
- <value>blocks_add_xx</value>
+ <key>freq</key>
+ <value>440</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>amp</key>
+ <value>ampl</value>
</param>
<param>
- <key>type</key>
- <value>float</value>
+ <key>offset</key>
+ <value>0</value>
</param>
<param>
- <key>num_inputs</key>
- <value>3</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(513, 277)</value>
+ <value>(303, 119)</value>
</param>
<param>
<key>_rotation</key>
@@ -294,8 +283,24 @@
<value>0</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(251, 100)</value>
+ <value>(304, 5)</value>
</param>
<param>
<key>_rotation</key>
@@ -303,42 +308,101 @@
</param>
</block>
<block>
- <key>analog_sig_source_x</key>
+ <key>audio_sink</key>
<param>
<key>id</key>
- <value>analog_sig_source_x_1</value>
+ <value>audio_sink</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>float</value>
+ <key>samp_rate</key>
+ <value>32000</value>
</param>
<param>
- <key>samp_rate</key>
- <value>samp_rate</value>
+ <key>device_name</key>
+ <value></value>
</param>
<param>
- <key>waveform</key>
- <value>analog.GR_COS_WAVE</value>
+ <key>ok_to_block</key>
+ <value>True</value>
</param>
<param>
- <key>freq</key>
- <value>440</value>
+ <key>num_inputs</key>
+ <value>1</value>
</param>
<param>
- <key>amp</key>
- <value>ampl</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>offset</key>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(783, 146)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable_qtgui_range</key>
+ <param>
+ <key>id</key>
+ <value>noise</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>label</key>
+ <value>Noise Amplitude</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>0.005</value>
+ </param>
+ <param>
+ <key>start</key>
<value>0</value>
</param>
<param>
+ <key>stop</key>
+ <value>.2</value>
+ </param>
+ <param>
+ <key>step</key>
+ <value>.001</value>
+ </param>
+ <param>
+ <key>widget</key>
+ <value>counter_slider</value>
+ </param>
+ <param>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
+ </param>
+ <param>
+ <key>min_len</key>
+ <value>200</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value>1, 0, 1, 2</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(250, 214)</value>
+ <value>(661, 0)</value>
</param>
<param>
<key>_rotation</key>
@@ -346,34 +410,58 @@
</param>
</block>
<block>
- <key>analog_noise_source_x</key>
+ <key>variable_qtgui_range</key>
<param>
<key>id</key>
- <value>analog_noise_source_x_0</value>
+ <value>ampl</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>float</value>
+ <key>label</key>
+ <value>Volume</value>
</param>
<param>
- <key>noise_type</key>
- <value>analog.GR_GAUSSIAN</value>
+ <key>value</key>
+ <value>.4</value>
</param>
<param>
- <key>amp</key>
- <value>noise</value>
+ <key>start</key>
+ <value>0</value>
</param>
<param>
- <key>seed</key>
- <value>-42</value>
+ <key>stop</key>
+ <value>.5</value>
+ </param>
+ <param>
+ <key>step</key>
+ <value>.001</value>
+ </param>
+ <param>
+ <key>widget</key>
+ <value>counter_slider</value>
+ </param>
+ <param>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
+ </param>
+ <param>
+ <key>min_len</key>
+ <value>200</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value>0, 0, 1, 2</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(245, 342)</value>
+ <value>(803, 0)</value>
</param>
<param>
<key>_rotation</key>
@@ -381,16 +469,10 @@
</param>
</block>
<connection>
- <source_block_id>blocks_add_xx</source_block_id>
- <sink_block_id>audio_sink</sink_block_id>
- <source_key>0</source_key>
- <sink_key>0</sink_key>
- </connection>
- <connection>
- <source_block_id>analog_sig_source_x_0</source_block_id>
+ <source_block_id>analog_noise_source_x_0</source_block_id>
<sink_block_id>blocks_add_xx</sink_block_id>
<source_key>0</source_key>
- <sink_key>0</sink_key>
+ <sink_key>2</sink_key>
</connection>
<connection>
<source_block_id>analog_sig_source_x_1</source_block_id>
@@ -399,9 +481,15 @@
<sink_key>1</sink_key>
</connection>
<connection>
- <source_block_id>analog_noise_source_x_0</source_block_id>
+ <source_block_id>analog_sig_source_x_0</source_block_id>
<sink_block_id>blocks_add_xx</sink_block_id>
<source_key>0</source_key>
- <sink_key>2</sink_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>blocks_add_xx</source_block_id>
+ <sink_block_id>audio_sink</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
</connection>
</flow_graph>
diff --git a/gr-audio/lib/CMakeLists.txt b/gr-audio/lib/CMakeLists.txt
index e9e2de858e..5669d9c66d 100644
--- a/gr-audio/lib/CMakeLists.txt
+++ b/gr-audio/lib/CMakeLists.txt
@@ -186,6 +186,18 @@ GR_LIBRARY_FOO(gnuradio-audio RUNTIME_COMPONENT "audio_runtime" DEVEL_COMPONENT
install(FILES ${gr_audio_confs} DESTINATION ${GR_PREFSDIR} COMPONENT "audio_runtime")
if(ENABLE_STATIC_LIBS)
+ if(ENABLE_GR_CTRLPORT)
+ # Remove GR_CTRLPORT set this target's definitions.
+ # Makes sure we don't try to use ControlPort stuff in source files
+ # since Ice will not work with static libs.
+ GET_DIRECTORY_PROPERTY(STATIC_DEFS COMPILE_DEFINITIONS)
+ list(REMOVE_ITEM STATIC_DEFS "GR_CTRLPORT")
+ SET_PROPERTY(DIRECTORY PROPERTY COMPILE_DEFINITIONS "${STATIC_DEFS}")
+
+ # readd it to the target since we removed it from the directory-wide list.
+ SET_PROPERTY(TARGET gnuradio-audio APPEND PROPERTY COMPILE_DEFINITIONS "GR_CTRLPORT")
+ endif(ENABLE_GR_CTRLPORT)
+
add_library(gnuradio-audio_static STATIC ${gr_audio_sources})
if(NOT WIN32)
diff --git a/gr-blocks/examples/ctrlport/pfb_sync_test-qt.grc b/gr-blocks/examples/ctrlport/pfb_sync_test-qt.grc
deleted file mode 100644
index 0c397351cc..0000000000
--- a/gr-blocks/examples/ctrlport/pfb_sync_test-qt.grc
+++ /dev/null
@@ -1,854 +0,0 @@
-<?xml version='1.0' encoding='ASCII'?>
-<flow_graph>
- <timestamp>Sun Mar 17 21:00:28 2013</timestamp>
- <block>
- <key>options</key>
- <param>
- <key>id</key>
- <value>pfb_sync_test_qt</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>qt_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>
- <block>
- <key>variable</key>
- <param>
- <key>id</key>
- <value>sps</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>value</key>
- <value>2</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(105, 126)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </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>300000</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(14, 124)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>import</key>
- <param>
- <key>id</key>
- <value>import_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>import</key>
- <value>import random, math, cmath</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(14, 77)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>blocks_packed_to_unpacked_xx</key>
- <param>
- <key>id</key>
- <value>blocks_packed_to_unpacked_xx_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>type</key>
- <value>byte</value>
- </param>
- <param>
- <key>bits_per_chunk</key>
- <value>8</value>
- </param>
- <param>
- <key>endianness</key>
- <value>gr.GR_MSB_FIRST</value>
- </param>
- <param>
- <key>num_ports</key>
- <value>1</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(419, 10)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>blocks_throttle</key>
- <param>
- <key>id</key>
- <value>blocks_throttle_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>type</key>
- <value>byte</value>
- </param>
- <param>
- <key>samples_per_second</key>
- <value>samp_rate</value>
- </param>
- <param>
- <key>vlen</key>
- <value>1</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(436, 97)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>digital_psk_mod</key>
- <param>
- <key>id</key>
- <value>digital_psk_mod_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>constellation_points</key>
- <value>4</value>
- </param>
- <param>
- <key>mod_code</key>
- <value>"gray"</value>
- </param>
- <param>
- <key>differential</key>
- <value>True</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>(627, 65)</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>
- <value>True</value>
- </param>
- <param>
- <key>type</key>
- <value>ccf</value>
- </param>
- <param>
- <key>sps</key>
- <value>sps</value>
- </param>
- <param>
- <key>loop_bw</key>
- <value>2*3.14/100.0</value>
- </param>
- <param>
- <key>taps</key>
- <value>firdes.root_raised_cosine(nfilts, nfilts,1.0/sps, 0.35, int(22*sps*nfilts))</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>(339, 195)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>variable</key>
- <param>
- <key>id</key>
- <value>nfilts</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>value</key>
- <value>32</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(74, 390)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>variable</key>
- <param>
- <key>id</key>
- <value>amps</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>value</key>
- <value>[1]</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(7, 390)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>variable</key>
- <param>
- <key>id</key>
- <value>graymap</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>value</key>
- <value>[[3,1,0,2]]</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(7, 326)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>qtgui_const_sink_x</key>
- <param>
- <key>id</key>
- <value>qtgui_const_sink_x_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>type</key>
- <value>complex</value>
- </param>
- <param>
- <key>name</key>
- <value></value>
- </param>
- <param>
- <key>size</key>
- <value>1024</value>
- </param>
- <param>
- <key>ymin</key>
- <value>-2</value>
- </param>
- <param>
- <key>ymax</key>
- <value>2</value>
- </param>
- <param>
- <key>xmin</key>
- <value>-2</value>
- </param>
- <param>
- <key>xmax</key>
- <value>2</value>
- </param>
- <param>
- <key>nconnections</key>
- <value>2</value>
- </param>
- <param>
- <key>update_time</key>
- <value>0.10</value>
- </param>
- <param>
- <key>gui_hint</key>
- <value></value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(752, 196)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>channels_channel_model</key>
- <param>
- <key>id</key>
- <value>channels_channel_model_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>noise_voltage</key>
- <value>noise</value>
- </param>
- <param>
- <key>freq_offset</key>
- <value>0.0</value>
- </param>
- <param>
- <key>epsilon</key>
- <value>1.0</value>
- </param>
- <param>
- <key>taps</key>
- <value>cmath.exp(1j*phase)</value>
- </param>
- <param>
- <key>seed</key>
- <value>0</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(68, 211)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>blocks_ctrlport_probe2_c</key>
- <param>
- <key>id</key>
- <value>received_probe2</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>name</key>
- <value>received</value>
- </param>
- <param>
- <key>desc</key>
- <value>Constellation Points</value>
- </param>
- <param>
- <key>len</key>
- <value>1024</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(195, 519)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>variable_qtgui_range</key>
- <param>
- <key>id</key>
- <value>phase</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>label</key>
- <value>Phase</value>
- </param>
- <param>
- <key>value</key>
- <value>0.5</value>
- </param>
- <param>
- <key>start</key>
- <value>0</value>
- </param>
- <param>
- <key>stop</key>
- <value>2</value>
- </param>
- <param>
- <key>step</key>
- <value>0.01</value>
- </param>
- <param>
- <key>widget</key>
- <value>counter_slider</value>
- </param>
- <param>
- <key>orient</key>
- <value>Qt.Horizontal</value>
- </param>
- <param>
- <key>min_len</key>
- <value>200</value>
- </param>
- <param>
- <key>gui_hint</key>
- <value></value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(266, 344)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>blocks_ctrlport_probe2_c</key>
- <param>
- <key>id</key>
- <value>time_probe2</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>name</key>
- <value>time locked</value>
- </param>
- <param>
- <key>desc</key>
- <value>Constellation Points</value>
- </param>
- <param>
- <key>len</key>
- <value>1024</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(447, 440)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>variable_qtgui_range</key>
- <param>
- <key>id</key>
- <value>noise</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>label</key>
- <value>Noise</value>
- </param>
- <param>
- <key>value</key>
- <value>0.050</value>
- </param>
- <param>
- <key>start</key>
- <value>0.0001</value>
- </param>
- <param>
- <key>stop</key>
- <value>2</value>
- </param>
- <param>
- <key>step</key>
- <value>0.01</value>
- </param>
- <param>
- <key>widget</key>
- <value>counter_slider</value>
- </param>
- <param>
- <key>orient</key>
- <value>Qt.Horizontal</value>
- </param>
- <param>
- <key>min_len</key>
- <value>200</value>
- </param>
- <param>
- <key>gui_hint</key>
- <value></value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(7, 455)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>digital_costas_loop_cc</key>
- <param>
- <key>id</key>
- <value>digital_costas_loop_cc_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>w</key>
- <value>6.28/100.0</value>
- </param>
- <param>
- <key>order</key>
- <value>4</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(610, 279)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>blocks_null_sink</key>
- <param>
- <key>id</key>
- <value>blocks_null_sink_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>type</key>
- <value>complex</value>
- </param>
- <param>
- <key>vlen</key>
- <value>1</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(859, 279)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>blocks_ctrlport_probe2_c</key>
- <param>
- <key>id</key>
- <value>phase_probe2</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>name</key>
- <value>phase locked</value>
- </param>
- <param>
- <key>desc</key>
- <value>Constellation Points</value>
- </param>
- <param>
- <key>len</key>
- <value>1024</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(681, 379)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>blocks_vector_source_x</key>
- <param>
- <key>id</key>
- <value>blocks_vector_source_x_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>type</key>
- <value>byte</value>
- </param>
- <param>
- <key>vector</key>
- <value>(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50)</value>
- </param>
- <param>
- <key>tags</key>
- <value>[]</value>
- </param>
- <param>
- <key>repeat</key>
- <value>True</value>
- </param>
- <param>
- <key>vlen</key>
- <value>1</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(190, 71)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>blocks_ctrlport_monitor</key>
- <param>
- <key>id</key>
- <value>blocks_ctrlport_monitor_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>en</key>
- <value>True</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(193, 7)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <connection>
- <source_block_id>blocks_throttle_0</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>digital_pfb_clock_sync_xxx_0</source_block_id>
- <sink_block_id>qtgui_const_sink_x_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>qtgui_const_sink_x_0</sink_block_id>
- <source_key>0</source_key>
- <sink_key>1</sink_key>
- </connection>
- <connection>
- <source_block_id>digital_costas_loop_cc_0</source_block_id>
- <sink_block_id>blocks_null_sink_0</sink_block_id>
- <source_key>0</source_key>
- <sink_key>0</sink_key>
- </connection>
- <connection>
- <source_block_id>channels_channel_model_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_psk_mod_0</source_block_id>
- <sink_block_id>channels_channel_model_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>phase_probe2</sink_block_id>
- <source_key>0</source_key>
- <sink_key>0</sink_key>
- </connection>
- <connection>
- <source_block_id>blocks_packed_to_unpacked_xx_0</source_block_id>
- <sink_block_id>blocks_throttle_0</sink_block_id>
- <source_key>0</source_key>
- <sink_key>0</sink_key>
- </connection>
- <connection>
- <source_block_id>blocks_vector_source_x_0</source_block_id>
- <sink_block_id>blocks_packed_to_unpacked_xx_0</sink_block_id>
- <source_key>0</source_key>
- <sink_key>0</sink_key>
- </connection>
- <connection>
- <source_block_id>channels_channel_model_0</source_block_id>
- <sink_block_id>received_probe2</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>time_probe2</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>digital_costas_loop_cc_0</sink_block_id>
- <source_key>0</source_key>
- <sink_key>0</sink_key>
- </connection>
-</flow_graph>
diff --git a/gr-blocks/examples/ctrlport/pfb_sync_test.grc b/gr-blocks/examples/ctrlport/pfb_sync_test.grc
index 06692aad46..0c397351cc 100644
--- a/gr-blocks/examples/ctrlport/pfb_sync_test.grc
+++ b/gr-blocks/examples/ctrlport/pfb_sync_test.grc
@@ -1,11 +1,11 @@
<?xml version='1.0' encoding='ASCII'?>
<flow_graph>
- <timestamp>Sun Mar 17 21:01:36 2013</timestamp>
+ <timestamp>Sun Mar 17 21:00:28 2013</timestamp>
<block>
<key>options</key>
<param>
<key>id</key>
- <value>pfb_sync_test</value>
+ <value>pfb_sync_test_qt</value>
</param>
<param>
<key>_enabled</key>
@@ -25,11 +25,11 @@
</param>
<param>
<key>window_size</key>
- <value>1280, 1024</value>
+ <value>1280,1024</value>
</param>
<param>
<key>generate_options</key>
- <value>wx_gui</value>
+ <value>qt_gui</value>
</param>
<param>
<key>category</key>
@@ -61,22 +61,22 @@
</param>
</block>
<block>
- <key>import</key>
+ <key>variable</key>
<param>
<key>id</key>
- <value>import_0</value>
+ <value>sps</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>import</key>
- <value>import random, math, cmath</value>
+ <key>value</key>
+ <value>2</value>
</param>
<param>
<key>_coordinate</key>
- <value>(14, 77)</value>
+ <value>(105, 126)</value>
</param>
<param>
<key>_rotation</key>
@@ -107,22 +107,22 @@
</param>
</block>
<block>
- <key>variable</key>
+ <key>import</key>
<param>
<key>id</key>
- <value>graymap</value>
+ <value>import_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>[[3,1,0,2]]</value>
+ <key>import</key>
+ <value>import random, math, cmath</value>
</param>
<param>
<key>_coordinate</key>
- <value>(32, 387)</value>
+ <value>(14, 77)</value>
</param>
<param>
<key>_rotation</key>
@@ -130,22 +130,34 @@
</param>
</block>
<block>
- <key>variable</key>
+ <key>blocks_packed_to_unpacked_xx</key>
<param>
<key>id</key>
- <value>amps</value>
+ <value>blocks_packed_to_unpacked_xx_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>[1]</value>
+ <key>type</key>
+ <value>byte</value>
+ </param>
+ <param>
+ <key>bits_per_chunk</key>
+ <value>8</value>
+ </param>
+ <param>
+ <key>endianness</key>
+ <value>gr.GR_MSB_FIRST</value>
+ </param>
+ <param>
+ <key>num_ports</key>
+ <value>1</value>
</param>
<param>
<key>_coordinate</key>
- <value>(32, 451)</value>
+ <value>(419, 10)</value>
</param>
<param>
<key>_rotation</key>
@@ -153,22 +165,30 @@
</param>
</block>
<block>
- <key>variable</key>
+ <key>blocks_throttle</key>
<param>
<key>id</key>
- <value>nfilts</value>
+ <value>blocks_throttle_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>32</value>
+ <key>type</key>
+ <value>byte</value>
+ </param>
+ <param>
+ <key>samples_per_second</key>
+ <value>samp_rate</value>
+ </param>
+ <param>
+ <key>vlen</key>
+ <value>1</value>
</param>
<param>
<key>_coordinate</key>
- <value>(99, 451)</value>
+ <value>(436, 97)</value>
</param>
<param>
<key>_rotation</key>
@@ -176,49 +196,46 @@
</param>
</block>
<block>
- <key>digital_costas_loop_cc</key>
+ <key>digital_psk_mod</key>
<param>
<key>id</key>
- <value>digital_costas_loop_cc_0</value>
+ <value>digital_psk_mod_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>w</key>
- <value>6.28/100.0</value>
- </param>
- <param>
- <key>order</key>
+ <key>constellation_points</key>
<value>4</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(626, 223)</value>
+ <key>mod_code</key>
+ <value>"gray"</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>differential</key>
+ <value>True</value>
</param>
- </block>
- <block>
- <key>variable</key>
<param>
- <key>id</key>
+ <key>samples_per_symbol</key>
<value>sps</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>excess_bw</key>
+ <value>0.35</value>
</param>
<param>
- <key>value</key>
- <value>2</value>
+ <key>verbose</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>log</key>
+ <value>False</value>
</param>
<param>
<key>_coordinate</key>
- <value>(105, 126)</value>
+ <value>(627, 65)</value>
</param>
<param>
<key>_rotation</key>
@@ -226,10 +243,10 @@
</param>
</block>
<block>
- <key>blocks_null_sink</key>
+ <key>digital_pfb_clock_sync_xxx</key>
<param>
<key>id</key>
- <value>blocks_null_sink_0</value>
+ <value>digital_pfb_clock_sync_xxx_0</value>
</param>
<param>
<key>_enabled</key>
@@ -237,15 +254,39 @@
</param>
<param>
<key>type</key>
- <value>complex</value>
+ <value>ccf</value>
</param>
<param>
- <key>vlen</key>
+ <key>sps</key>
+ <value>sps</value>
+ </param>
+ <param>
+ <key>loop_bw</key>
+ <value>2*3.14/100.0</value>
+ </param>
+ <param>
+ <key>taps</key>
+ <value>firdes.root_raised_cosine(nfilts, nfilts,1.0/sps, 0.35, int(22*sps*nfilts))</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>(964, 200)</value>
+ <value>(339, 195)</value>
</param>
<param>
<key>_rotation</key>
@@ -253,54 +294,68 @@
</param>
</block>
<block>
- <key>variable_slider</key>
+ <key>variable</key>
<param>
<key>id</key>
- <value>noise</value>
+ <value>nfilts</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>label</key>
- <value></value>
+ <key>value</key>
+ <value>32</value>
</param>
<param>
- <key>value</key>
- <value>0.05</value>
+ <key>_coordinate</key>
+ <value>(74, 390)</value>
</param>
<param>
- <key>min</key>
- <value>0.00000001</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
+ </block>
+ <block>
+ <key>variable</key>
<param>
- <key>max</key>
- <value>2</value>
+ <key>id</key>
+ <value>amps</value>
</param>
<param>
- <key>num_steps</key>
- <value>100</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
+ <key>value</key>
+ <value>[1]</value>
</param>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>_coordinate</key>
+ <value>(7, 390)</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></value>
+ <key>id</key>
+ <value>graymap</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>[[3,1,0,2]]</value>
</param>
<param>
<key>_coordinate</key>
- <value>(281, 406)</value>
+ <value>(7, 326)</value>
</param>
<param>
<key>_rotation</key>
@@ -308,54 +363,58 @@
</param>
</block>
<block>
- <key>variable_slider</key>
+ <key>qtgui_const_sink_x</key>
<param>
<key>id</key>
- <value>phase</value>
+ <value>qtgui_const_sink_x_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>label</key>
+ <key>type</key>
+ <value>complex</value>
+ </param>
+ <param>
+ <key>name</key>
<value></value>
</param>
<param>
- <key>value</key>
- <value>0</value>
+ <key>size</key>
+ <value>1024</value>
</param>
<param>
- <key>min</key>
- <value>0</value>
+ <key>ymin</key>
+ <value>-2</value>
</param>
<param>
- <key>max</key>
+ <key>ymax</key>
<value>2</value>
</param>
<param>
- <key>num_steps</key>
- <value>100</value>
+ <key>xmin</key>
+ <value>-2</value>
</param>
<param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
+ <key>xmax</key>
+ <value>2</value>
</param>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>nconnections</key>
+ <value>2</value>
</param>
<param>
- <key>grid_pos</key>
- <value></value>
+ <key>update_time</key>
+ <value>0.10</value>
</param>
<param>
- <key>notebook</key>
+ <key>gui_hint</key>
<value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(167, 405)</value>
+ <value>(752, 196)</value>
</param>
<param>
<key>_rotation</key>
@@ -363,50 +422,69 @@
</param>
</block>
<block>
- <key>digital_pfb_clock_sync_xxx</key>
+ <key>channels_channel_model</key>
<param>
<key>id</key>
- <value>digital_pfb_clock_sync_xxx_0</value>
+ <value>channels_channel_model_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>ccf</value>
+ <key>noise_voltage</key>
+ <value>noise</value>
</param>
<param>
- <key>sps</key>
- <value>sps</value>
+ <key>freq_offset</key>
+ <value>0.0</value>
</param>
<param>
- <key>loop_bw</key>
- <value>2*3.14/100.0</value>
+ <key>epsilon</key>
+ <value>1.0</value>
</param>
<param>
<key>taps</key>
- <value>firdes.root_raised_cosine(nfilts, nfilts,1.0/sps, 0.35, int(22*sps*nfilts))</value>
+ <value>cmath.exp(1j*phase)</value>
</param>
<param>
- <key>filter_size</key>
- <value>nfilts</value>
+ <key>seed</key>
+ <value>0</value>
</param>
<param>
- <key>init_phase</key>
- <value>nfilts/2</value>
+ <key>_coordinate</key>
+ <value>(68, 211)</value>
</param>
<param>
- <key>max_dev</key>
- <value>1.5</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
+ </block>
+ <block>
+ <key>blocks_ctrlport_probe2_c</key>
<param>
- <key>osps</key>
- <value>1</value>
+ <key>id</key>
+ <value>received_probe2</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>name</key>
+ <value>received</value>
+ </param>
+ <param>
+ <key>desc</key>
+ <value>Constellation Points</value>
+ </param>
+ <param>
+ <key>len</key>
+ <value>1024</value>
</param>
<param>
<key>_coordinate</key>
- <value>(322, 231)</value>
+ <value>(195, 519)</value>
</param>
<param>
<key>_rotation</key>
@@ -414,46 +492,54 @@
</param>
</block>
<block>
- <key>digital_psk_mod</key>
+ <key>variable_qtgui_range</key>
<param>
<key>id</key>
- <value>digital_psk_mod_0</value>
+ <value>phase</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>constellation_points</key>
- <value>4</value>
+ <key>label</key>
+ <value>Phase</value>
</param>
<param>
- <key>mod_code</key>
- <value>"gray"</value>
+ <key>value</key>
+ <value>0.5</value>
</param>
<param>
- <key>differential</key>
- <value>True</value>
+ <key>start</key>
+ <value>0</value>
</param>
<param>
- <key>samples_per_symbol</key>
- <value>sps</value>
+ <key>stop</key>
+ <value>2</value>
</param>
<param>
- <key>excess_bw</key>
- <value>0.35</value>
+ <key>step</key>
+ <value>0.01</value>
</param>
<param>
- <key>verbose</key>
- <value>False</value>
+ <key>widget</key>
+ <value>counter_slider</value>
</param>
<param>
- <key>log</key>
- <value>False</value>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
+ </param>
+ <param>
+ <key>min_len</key>
+ <value>200</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(846, 32)</value>
+ <value>(266, 344)</value>
</param>
<param>
<key>_rotation</key>
@@ -461,38 +547,85 @@
</param>
</block>
<block>
- <key>channels_channel_model</key>
+ <key>blocks_ctrlport_probe2_c</key>
<param>
<key>id</key>
- <value>channels_channel_model_0</value>
+ <value>time_probe2</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>noise_voltage</key>
- <value>noise</value>
+ <key>name</key>
+ <value>time locked</value>
</param>
<param>
- <key>freq_offset</key>
- <value>0.0</value>
+ <key>desc</key>
+ <value>Constellation Points</value>
</param>
<param>
- <key>epsilon</key>
- <value>1.0</value>
+ <key>len</key>
+ <value>1024</value>
</param>
<param>
- <key>taps</key>
- <value>cmath.exp(1j*phase)</value>
+ <key>_coordinate</key>
+ <value>(447, 440)</value>
</param>
<param>
- <key>seed</key>
+ <key>_rotation</key>
<value>0</value>
</param>
+ </block>
+ <block>
+ <key>variable_qtgui_range</key>
+ <param>
+ <key>id</key>
+ <value>noise</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>label</key>
+ <value>Noise</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>0.050</value>
+ </param>
+ <param>
+ <key>start</key>
+ <value>0.0001</value>
+ </param>
+ <param>
+ <key>stop</key>
+ <value>2</value>
+ </param>
+ <param>
+ <key>step</key>
+ <value>0.01</value>
+ </param>
+ <param>
+ <key>widget</key>
+ <value>counter_slider</value>
+ </param>
+ <param>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
+ </param>
+ <param>
+ <key>min_len</key>
+ <value>200</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value></value>
+ </param>
<param>
<key>_coordinate</key>
- <value>(73, 247)</value>
+ <value>(7, 455)</value>
</param>
<param>
<key>_rotation</key>
@@ -500,34 +633,53 @@
</param>
</block>
<block>
- <key>blocks_file_source</key>
+ <key>digital_costas_loop_cc</key>
<param>
<key>id</key>
- <value>blocks_file_source_0</value>
+ <value>digital_costas_loop_cc_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>file</key>
- <value>/dev/urandom</value>
+ <key>w</key>
+ <value>6.28/100.0</value>
</param>
<param>
- <key>type</key>
- <value>byte</value>
+ <key>order</key>
+ <value>4</value>
</param>
<param>
- <key>repeat</key>
+ <key>_coordinate</key>
+ <value>(610, 279)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>blocks_null_sink</key>
+ <param>
+ <key>id</key>
+ <value>blocks_null_sink_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
<value>True</value>
</param>
<param>
+ <key>type</key>
+ <value>complex</value>
+ </param>
+ <param>
<key>vlen</key>
<value>1</value>
</param>
<param>
<key>_coordinate</key>
- <value>(229, 56)</value>
+ <value>(859, 279)</value>
</param>
<param>
<key>_rotation</key>
@@ -535,30 +687,30 @@
</param>
</block>
<block>
- <key>blocks_throttle</key>
+ <key>blocks_ctrlport_probe2_c</key>
<param>
<key>id</key>
- <value>blocks_throttle_0</value>
+ <value>phase_probe2</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>byte</value>
+ <key>name</key>
+ <value>phase locked</value>
</param>
<param>
- <key>samples_per_second</key>
- <value>samp_rate</value>
+ <key>desc</key>
+ <value>Constellation Points</value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>len</key>
+ <value>1024</value>
</param>
<param>
<key>_coordinate</key>
- <value>(623, 64)</value>
+ <value>(681, 379)</value>
</param>
<param>
<key>_rotation</key>
@@ -566,10 +718,10 @@
</param>
</block>
<block>
- <key>blocks_packed_to_unpacked_xx</key>
+ <key>blocks_vector_source_x</key>
<param>
<key>id</key>
- <value>blocks_packed_to_unpacked_xx_0</value>
+ <value>blocks_vector_source_x_0</value>
</param>
<param>
<key>_enabled</key>
@@ -580,20 +732,24 @@
<value>byte</value>
</param>
<param>
- <key>bits_per_chunk</key>
- <value>8</value>
+ <key>vector</key>
+ <value>(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50)</value>
</param>
<param>
- <key>endianness</key>
- <value>gr.GR_MSB_FIRST</value>
+ <key>tags</key>
+ <value>[]</value>
</param>
<param>
- <key>num_ports</key>
+ <key>repeat</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>vlen</key>
<value>1</value>
</param>
<param>
<key>_coordinate</key>
- <value>(415, 56)</value>
+ <value>(190, 71)</value>
</param>
<param>
<key>_rotation</key>
@@ -616,7 +772,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(229, 7)</value>
+ <value>(193, 7)</value>
</param>
<param>
<key>_rotation</key>
@@ -631,12 +787,18 @@
</connection>
<connection>
<source_block_id>digital_pfb_clock_sync_xxx_0</source_block_id>
- <sink_block_id>digital_costas_loop_cc_0</sink_block_id>
+ <sink_block_id>qtgui_const_sink_x_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>qtgui_const_sink_x_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>1</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>digital_costas_loop_cc_0</source_block_id>
<sink_block_id>blocks_null_sink_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
@@ -654,8 +816,8 @@
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>blocks_file_source_0</source_block_id>
- <sink_block_id>blocks_packed_to_unpacked_xx_0</sink_block_id>
+ <source_block_id>digital_costas_loop_cc_0</source_block_id>
+ <sink_block_id>phase_probe2</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
@@ -665,4 +827,28 @@
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
+ <connection>
+ <source_block_id>blocks_vector_source_x_0</source_block_id>
+ <sink_block_id>blocks_packed_to_unpacked_xx_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>channels_channel_model_0</source_block_id>
+ <sink_block_id>received_probe2</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>time_probe2</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>digital_costas_loop_cc_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
</flow_graph>
diff --git a/gr-blocks/examples/matrix_multiplexer.grc b/gr-blocks/examples/matrix_multiplexer.grc
new file mode 100644
index 0000000000..724c53428a
--- /dev/null
+++ b/gr-blocks/examples/matrix_multiplexer.grc
@@ -0,0 +1,1110 @@
+<?xml version='1.0' encoding='ASCII'?>
+<flow_graph>
+ <timestamp>Tue Jun 3 11:35:32 2014</timestamp>
+ <block>
+ <key>options</key>
+ <param>
+ <key>id</key>
+ <value>matrix_multiply_demo</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>title</key>
+ <value>Matrix Multiply/Multiplex Demo</value>
+ </param>
+ <param>
+ <key>author</key>
+ <value>Martin Braun</value>
+ </param>
+ <param>
+ <key>description</key>
+ <value>A demonstration of multiply_matrix_ff to demonstrate how to use it for stream selection</value>
+ </param>
+ <param>
+ <key>window_size</key>
+ <value>1280, 1024</value>
+ </param>
+ <param>
+ <key>generate_options</key>
+ <value>qt_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>(-2, -6)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </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>(183, 5)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>blocks_null_source</key>
+ <param>
+ <key>id</key>
+ <value>blocks_null_source_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>float</value>
+ </param>
+ <param>
+ <key>vlen</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>num_outputs</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>bus_conns</key>
+ <value>[[0,],]</value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(-1, 298)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>analog_sig_source_x</key>
+ <param>
+ <key>id</key>
+ <value>analog_sig_source_x_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>float</value>
+ </param>
+ <param>
+ <key>samp_rate</key>
+ <value>samp_rate</value>
+ </param>
+ <param>
+ <key>waveform</key>
+ <value>analog.GR_COS_WAVE</value>
+ </param>
+ <param>
+ <key>freq</key>
+ <value>1000</value>
+ </param>
+ <param>
+ <key>amp</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>offset</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(0, 136)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>qtgui_time_sink_x</key>
+ <param>
+ <key>id</key>
+ <value>qtgui_time_sink_x_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>float</value>
+ </param>
+ <param>
+ <key>name</key>
+ <value>QT GUI Plot</value>
+ </param>
+ <param>
+ <key>size</key>
+ <value>1024</value>
+ </param>
+ <param>
+ <key>srate</key>
+ <value>samp_rate</value>
+ </param>
+ <param>
+ <key>autoscale</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>ymin</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>ymax</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>nconnections</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>update_time</key>
+ <value>0.10</value>
+ </param>
+ <param>
+ <key>entags</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value></value>
+ </param>
+ <param>
+ <key>tr_mode</key>
+ <value>qtgui.TRIG_MODE_FREE</value>
+ </param>
+ <param>
+ <key>tr_slope</key>
+ <value>qtgui.TRIG_SLOPE_POS</value>
+ </param>
+ <param>
+ <key>tr_level</key>
+ <value>0.0</value>
+ </param>
+ <param>
+ <key>tr_delay</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>tr_chan</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>tr_tag</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>label1</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width1</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color1</key>
+ <value>"blue"</value>
+ </param>
+ <param>
+ <key>style1</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker1</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha1</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width2</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color2</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>style2</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker2</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha2</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width3</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color3</key>
+ <value>"green"</value>
+ </param>
+ <param>
+ <key>style3</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker3</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha3</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width4</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color4</key>
+ <value>"black"</value>
+ </param>
+ <param>
+ <key>style4</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker4</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha4</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width5</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color5</key>
+ <value>"cyan"</value>
+ </param>
+ <param>
+ <key>style5</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker5</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha5</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width6</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color6</key>
+ <value>"magenta"</value>
+ </param>
+ <param>
+ <key>style6</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker6</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha6</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width7</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color7</key>
+ <value>"yellow"</value>
+ </param>
+ <param>
+ <key>style7</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker7</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha7</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label8</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color8</key>
+ <value>"dark red"</value>
+ </param>
+ <param>
+ <key>style8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker8</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha8</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label9</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color9</key>
+ <value>"dark green"</value>
+ </param>
+ <param>
+ <key>style9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker9</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha9</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label10</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color10</key>
+ <value>"blue"</value>
+ </param>
+ <param>
+ <key>style10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker10</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha10</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(899, 106)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>qtgui_time_sink_x</key>
+ <param>
+ <key>id</key>
+ <value>qtgui_time_sink_x_1</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>float</value>
+ </param>
+ <param>
+ <key>name</key>
+ <value>QT GUI Plot</value>
+ </param>
+ <param>
+ <key>size</key>
+ <value>1024</value>
+ </param>
+ <param>
+ <key>srate</key>
+ <value>samp_rate</value>
+ </param>
+ <param>
+ <key>autoscale</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>ymin</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>ymax</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>nconnections</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>update_time</key>
+ <value>0.10</value>
+ </param>
+ <param>
+ <key>entags</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value></value>
+ </param>
+ <param>
+ <key>tr_mode</key>
+ <value>qtgui.TRIG_MODE_FREE</value>
+ </param>
+ <param>
+ <key>tr_slope</key>
+ <value>qtgui.TRIG_SLOPE_POS</value>
+ </param>
+ <param>
+ <key>tr_level</key>
+ <value>0.0</value>
+ </param>
+ <param>
+ <key>tr_delay</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>tr_chan</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>tr_tag</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>label1</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width1</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color1</key>
+ <value>"blue"</value>
+ </param>
+ <param>
+ <key>style1</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker1</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha1</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width2</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color2</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>style2</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker2</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha2</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width3</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color3</key>
+ <value>"green"</value>
+ </param>
+ <param>
+ <key>style3</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker3</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha3</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width4</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color4</key>
+ <value>"black"</value>
+ </param>
+ <param>
+ <key>style4</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker4</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha4</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width5</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color5</key>
+ <value>"cyan"</value>
+ </param>
+ <param>
+ <key>style5</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker5</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha5</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width6</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color6</key>
+ <value>"magenta"</value>
+ </param>
+ <param>
+ <key>style6</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker6</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha6</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width7</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color7</key>
+ <value>"yellow"</value>
+ </param>
+ <param>
+ <key>style7</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker7</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha7</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label8</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color8</key>
+ <value>"dark red"</value>
+ </param>
+ <param>
+ <key>style8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker8</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha8</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label9</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color9</key>
+ <value>"dark green"</value>
+ </param>
+ <param>
+ <key>style9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker9</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha9</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label10</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color10</key>
+ <value>"blue"</value>
+ </param>
+ <param>
+ <key>style10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker10</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha10</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(904, 233)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>blocks_multiply_matrix_xx</key>
+ <param>
+ <key>id</key>
+ <value>blocks_multiply_matrix_xx_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>float</value>
+ </param>
+ <param>
+ <key>A</key>
+ <value>((1, 0), (0, 1))</value>
+ </param>
+ <param>
+ <key>tag_propagation_policy</key>
+ <value>999</value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(499, 172)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>blocks_stream_to_tagged_stream</key>
+ <param>
+ <key>id</key>
+ <value>blocks_stream_to_tagged_stream_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>float</value>
+ </param>
+ <param>
+ <key>vlen</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>packet_len</key>
+ <value>100</value>
+ </param>
+ <param>
+ <key>len_tag_key</key>
+ <value>"packet_len"</value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(160, 286)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>blocks_message_strobe</key>
+ <param>
+ <key>id</key>
+ <value>blocks_message_strobe_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>msg</key>
+ <value>pmt.to_pmt(new_A)</value>
+ </param>
+ <param>
+ <key>period</key>
+ <value>1000</value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(204, 376)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable_qtgui_chooser</key>
+ <param>
+ <key>id</key>
+ <value>new_A</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>label</key>
+ <value>Mode</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>raw</value>
+ </param>
+ <param>
+ <key>num_opts</key>
+ <value>3</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>((1, 0), (0, 1))</value>
+ </param>
+ <param>
+ <key>options</key>
+ <value>[0, 1, 2]</value>
+ </param>
+ <param>
+ <key>labels</key>
+ <value>[]</value>
+ </param>
+ <param>
+ <key>option0</key>
+ <value>((1, 0), (0, 1))</value>
+ </param>
+ <param>
+ <key>label0</key>
+ <value>Default</value>
+ </param>
+ <param>
+ <key>option1</key>
+ <value>((0, 1), (1, 0))</value>
+ </param>
+ <param>
+ <key>label1</key>
+ <value>Flip</value>
+ </param>
+ <param>
+ <key>option2</key>
+ <value>((.5, .5), (.5, .5))</value>
+ </param>
+ <param>
+ <key>label2</key>
+ <value>Mix</value>
+ </param>
+ <param>
+ <key>option3</key>
+ <value>3</value>
+ </param>
+ <param>
+ <key>label3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>option4</key>
+ <value>4</value>
+ </param>
+ <param>
+ <key>label4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>widget</key>
+ <value>combo_box</value>
+ </param>
+ <param>
+ <key>orient</key>
+ <value>Qt.QVBoxLayout</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(277, 0)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <connection>
+ <source_block_id>blocks_null_source_0</source_block_id>
+ <sink_block_id>blocks_stream_to_tagged_stream_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>analog_sig_source_x_0</source_block_id>
+ <sink_block_id>blocks_multiply_matrix_xx_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>blocks_stream_to_tagged_stream_0</source_block_id>
+ <sink_block_id>blocks_multiply_matrix_xx_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>1</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>blocks_multiply_matrix_xx_0</source_block_id>
+ <sink_block_id>qtgui_time_sink_x_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>blocks_multiply_matrix_xx_0</source_block_id>
+ <sink_block_id>qtgui_time_sink_x_1</sink_block_id>
+ <source_key>1</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>blocks_message_strobe_0</source_block_id>
+ <sink_block_id>blocks_multiply_matrix_xx_0</sink_block_id>
+ <source_key>strobe</source_key>
+ <sink_key>set_A</sink_key>
+ </connection>
+</flow_graph>
diff --git a/gr-blocks/grc/blocks_block_tree.xml b/gr-blocks/grc/blocks_block_tree.xml
index 78f615b63b..436bec3891 100644
--- a/gr-blocks/grc/blocks_block_tree.xml
+++ b/gr-blocks/grc/blocks_block_tree.xml
@@ -92,6 +92,7 @@
<block>blocks_multiply_xx</block>
<block>blocks_multiply_const_vxx</block>
<block>blocks_multiply_conjugate_cc</block>
+ <block>blocks_multiply_matrix_xx</block>
<block>blocks_sub_xx</block>
<block>blocks_conjugate_cc</block>
<block>blocks_integrate_xx</block>
diff --git a/gr-blocks/grc/blocks_copy.xml b/gr-blocks/grc/blocks_copy.xml
index 4d505d9e7f..6192937cd8 100644
--- a/gr-blocks/grc/blocks_copy.xml
+++ b/gr-blocks/grc/blocks_copy.xml
@@ -5,76 +5,100 @@
###################################################
-->
<block>
- <name>Copy</name>
- <key>blocks_copy</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.copy($type.size*$vlen)
+ <name>Copy</name>
+ <key>blocks_copy</key>
+ <import>from gnuradio import blocks</import>
+ <make>blocks.copy($type.size*$vlen)
self.$(id).set_enabled($enabled)</make>
- <callback>set_enabled($enabled)</callback>
- <param>
- <name>Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>size:gr.sizeof_gr_complex</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>size:gr.sizeof_float</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>size:gr.sizeof_int</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>size:gr.sizeof_short</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>size:gr.sizeof_char</opt>
- </option>
- </param>
- <param>
- <name>Enabled</name>
- <key>enabled</key>
- <value>True</value>
- <type>bool</type>
- <option>
- <name>Enabled</name>
- <key>True</key>
- </option>
- <option>
- <name>Disabled</name>
- <key>False</key>
- </option>
- </param>
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
- <check>$vlen &gt; 0</check>
- <sink>
- <name>in</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- </sink>
- <sink>
- <name>en</name>
- <type>message</type>
- <optional>1</optional>
- </sink>
- <source>
- <name>out</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- </source>
+ <callback>set_enabled($enabled)</callback>
+
+ <param>
+ <name>Type</name>
+ <key>type</key>
+ <type>enum</type>
+ <option>
+ <name>Complex</name>
+ <key>complex</key>
+ <opt>size:gr.sizeof_gr_complex</opt>
+ </option>
+ <option>
+ <name>Float</name>
+ <key>float</key>
+ <opt>size:gr.sizeof_float</opt>
+ </option>
+ <option>
+ <name>Int</name>
+ <key>int</key>
+ <opt>size:gr.sizeof_int</opt>
+ </option>
+ <option>
+ <name>Short</name>
+ <key>short</key>
+ <opt>size:gr.sizeof_short</opt>
+ </option>
+ <option>
+ <name>Byte</name>
+ <key>byte</key>
+ <opt>size:gr.sizeof_char</opt>
+ </option>
+ </param>
+
+ <param>
+ <name>Enabled</name>
+ <key>enabled</key>
+ <value>True</value>
+ <type>bool</type>
+ <option>
+ <name>Enabled</name>
+ <key>True</key>
+ </option>
+ <option>
+ <name>Disabled</name>
+ <key>False</key>
+ </option>
+ </param>
+
+ <param>
+ <name>Vec Length</name>
+ <key>vlen</key>
+ <value>1</value>
+ <type>int</type>
+ </param>
+
+ <param>
+ <name>Show Msg Ports</name>
+ <key>showports</key>
+ <value>True</value>
+ <type>enum</type>
+ <hide>part</hide>
+ <option>
+ <name>Yes</name>
+ <key>False</key>
+ </option>
+ <option>
+ <name>No</name>
+ <key>True</key>
+ </option>
+ </param>
+
+ <check>$vlen &gt; 0</check>
+
+ <sink>
+ <name>in</name>
+ <type>$type</type>
+ <vlen>$vlen</vlen>
+ </sink>
+
+ <sink>
+ <name>en</name>
+ <type>message</type>
+ <optional>1</optional>
+ <hide>$showports</hide>
+ </sink>
+
+ <source>
+ <name>out</name>
+ <type>$type</type>
+ <vlen>$vlen</vlen>
+ </source>
</block>
diff --git a/gr-blocks/grc/blocks_min_xx.xml b/gr-blocks/grc/blocks_min_xx.xml
new file mode 100644
index 0000000000..7d117c0d4a
--- /dev/null
+++ b/gr-blocks/grc/blocks_min_xx.xml
@@ -0,0 +1,58 @@
+<?xml version="1.0"?>
+<!--
+###################################################
+##Min:
+## 1 output, 2 to inf inputs
+###################################################
+ -->
+<block>
+ <name>Min</name>
+ <key>blocks_min_xx</key>
+ <import>from gnuradio import blocks</import>
+ <make>blocks.min_$(type.fcn)($vlen)</make>
+ <param>
+ <name>IO Type</name>
+ <key>type</key>
+ <type>enum</type>
+ <option>
+ <name>Float</name>
+ <key>float</key>
+ <opt>fcn:ff</opt>
+ </option>
+ <option>
+ <name>Int</name>
+ <key>int</key>
+ <opt>fcn:ii</opt>
+ </option>
+ <option>
+ <name>Short</name>
+ <key>short</key>
+ <opt>fcn:ss</opt>
+ </option>
+ </param>
+ <param>
+ <name>Num Inputs</name>
+ <key>num_inputs</key>
+ <value>1</value>
+ <type>int</type>
+ </param>
+ <param>
+ <name>Vec Length</name>
+ <key>vlen</key>
+ <value>1</value>
+ <type>int</type>
+ </param>
+ <check>$num_inputs &gt;= 1</check>
+ <check>$vlen &gt;= 1</check>
+ <sink>
+ <name>in</name>
+ <type>$type</type>
+ <vlen>$vlen</vlen>
+ <nports>$num_inputs</nports>
+ </sink>
+ <source>
+ <name>out</name>
+ <type>$type</type>
+ <vlen>1</vlen>
+ </source>
+</block>
diff --git a/gr-blocks/grc/blocks_multiply_matrix_xx.xml b/gr-blocks/grc/blocks_multiply_matrix_xx.xml
new file mode 100644
index 0000000000..070221446e
--- /dev/null
+++ b/gr-blocks/grc/blocks_multiply_matrix_xx.xml
@@ -0,0 +1,68 @@
+<?xml version="1.0"?>
+<block>
+ <name>Multiply by Matrix</name>
+ <key>blocks_multiply_matrix_xx</key>
+ <import>from gnuradio import blocks</import>
+ <make>blocks.multiply_matrix_$(type.fcn)($A, $tag_propagation_policy)</make>
+ <callback>set_A($A)</callback>
+ <param>
+ <name>IO Type</name>
+ <key>type</key>
+ <type>enum</type>
+ <option>
+ <name>Float</name>
+ <key>float</key>
+ <opt>fcn:ff</opt>
+ </option>
+ <option>
+ <name>Complex</name>
+ <key>complex</key>
+ <opt>fcn:cc</opt>
+ </option>
+ </param>
+ <param>
+ <name>Matrix A</name>
+ <key>A</key>
+ <value>((1, 0), (0, 1))</value>
+ <type>raw</type>
+ </param>
+ <param>
+ <name>TPP</name>
+ <key>tag_propagation_policy</key>
+ <type>enum</type>
+ <option>
+ <name>All to All</name>
+ <key>gr.TPP_ALL_TO_ALL</key>
+ </option>
+ <option>
+ <name>One to One</name>
+ <key>gr.TPP_ONE_TO_ONE</key>
+ </option>
+ <option>
+ <name>No Propagation</name>
+ <key>gr.TPP_DONT</key>
+ </option>
+ <option>
+ <name>Matrix-Defined</name>
+ <key>999</key>
+ </option>
+ </param>
+ <check>len($A) > 0</check>
+ <check>len(${A}[0]) > 0</check>
+ <check>$tag_propagation_policy != gr.TPP_ONE_TO_ONE or (len($A) == len(${A}[0]))</check>
+ <sink>
+ <name>in</name>
+ <type>$type</type>
+ <nports>len(${A}[0])</nports>
+ </sink>
+ <sink>
+ <name>set_A</name>
+ <type>message</type>
+ <optional>1</optional>
+ </sink>
+ <source>
+ <name>out</name>
+ <type>$type</type>
+ <nports>len($A)</nports>
+ </source>
+</block>
diff --git a/gr-blocks/grc/blocks_mute_xx.xml b/gr-blocks/grc/blocks_mute_xx.xml
index 7023d32674..74c22ec83a 100644
--- a/gr-blocks/grc/blocks_mute_xx.xml
+++ b/gr-blocks/grc/blocks_mute_xx.xml
@@ -54,6 +54,11 @@
<name>in</name>
<type>$type</type>
</sink>
+ <sink>
+ <name>set_mute</name>
+ <type>message</type>
+ <optional>1</optional>
+ </sink>
<source>
<name>out</name>
<type>$type</type>
diff --git a/gr-blocks/include/gnuradio/blocks/CMakeLists.txt b/gr-blocks/include/gnuradio/blocks/CMakeLists.txt
index fa3c354d97..662f705901 100644
--- a/gr-blocks/include/gnuradio/blocks/CMakeLists.txt
+++ b/gr-blocks/include/gnuradio/blocks/CMakeLists.txt
@@ -1,4 +1,4 @@
-# Copyright 2013 Free Software Foundation, Inc.
+# Copyright 2013-2014 Free Software Foundation, Inc.
#
# This file is part of GNU Radio
#
@@ -18,81 +18,40 @@
# Boston, MA 02110-1301, USA.
########################################################################
-# generate helper scripts to expand templated files
+# Invoke macro to generate various headers
########################################################################
-include(GrPython)
-
-file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py "
-#!${PYTHON_EXECUTABLE}
-
-import sys, os, re
-sys.path.append('${GR_RUNTIME_PYTHONPATH}')
-os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
-os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
-
-if __name__ == '__main__':
- import build_utils
- root, inp = sys.argv[1:3]
- for sig in sys.argv[3:]:
- name = re.sub ('X+', sig, root)
- d = build_utils.standard_dict(name, sig, 'blocks')
- build_utils.expand_template(d, inp)
-
-")
-
-macro(expand_h root)
- #make a list of all the generated files
- unset(expanded_files_h)
- foreach(sig ${ARGN})
- string(REGEX REPLACE "X+" ${sig} name ${root})
- list(APPEND expanded_files_h ${CMAKE_CURRENT_BINARY_DIR}/${name}.h)
- endforeach(sig)
-
- #create a command to generate the files
- add_custom_command(
- OUTPUT ${expanded_files_h}
- DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.h.t
- COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
- ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
- ${root} ${root}.h.t ${ARGN}
- )
-
- #install rules for the generated h files
- list(APPEND generated_includes ${expanded_files_h})
-endmacro(expand_h)
-
-########################################################################
-# Invoke macro to generate various sources
-########################################################################
-expand_h(abs_XX ss ii ff)
-expand_h(add_XX ss ii cc)
-expand_h(add_const_XX bb ss ii ff cc)
-expand_h(add_const_vXX bb ss ii ff cc)
-expand_h(and_XX bb ss ii)
-expand_h(and_const_XX bb ss ii)
-expand_h(argmax_XX fs is ss)
-expand_h(divide_XX ss ii ff cc)
-expand_h(integrate_XX ss ii ff cc)
-expand_h(max_XX ff ii ss)
-expand_h(moving_average_XX ss ii ff cc)
-expand_h(multiply_XX ss ii)
-expand_h(multiply_const_XX ss ii)
-expand_h(multiply_const_vXX ss ii ff cc)
-expand_h(mute_XX ss ii ff cc)
-expand_h(not_XX bb ss ii)
-expand_h(or_XX bb ss ii)
-expand_h(peak_detector_XX fb ib sb)
-expand_h(probe_signal_X b s i f c)
-expand_h(probe_signal_vX b s i f c)
-expand_h(sample_and_hold_XX bb ss ii ff)
-expand_h(sub_XX ss ii ff cc)
-expand_h(tsb_vector_sink_X b s i f c)
-expand_h(xor_XX bb ss ii)
-expand_h(packed_to_unpacked_XX bb ss ii)
-expand_h(unpacked_to_packed_XX bb ss ii)
-expand_h(vector_insert_X b s i f c)
-expand_h(vector_sink_X b s i f c)
-expand_h(vector_source_X b s i f c)
+include(GrMiscUtils)
+GR_EXPAND_X_H(blocks abs_XX ss ii ff)
+GR_EXPAND_X_H(blocks add_XX ss ii cc)
+GR_EXPAND_X_H(blocks add_const_XX bb ss ii ff cc)
+GR_EXPAND_X_H(blocks add_const_vXX bb ss ii ff cc)
+GR_EXPAND_X_H(blocks and_XX bb ss ii)
+GR_EXPAND_X_H(blocks and_const_XX bb ss ii)
+GR_EXPAND_X_H(blocks argmax_XX fs is ss)
+GR_EXPAND_X_H(blocks divide_XX ss ii ff cc)
+GR_EXPAND_X_H(blocks integrate_XX ss ii ff cc)
+GR_EXPAND_X_H(blocks max_XX ss ii ff)
+GR_EXPAND_X_H(blocks min_XX ss ii ff)
+GR_EXPAND_X_H(blocks moving_average_XX ss ii ff cc)
+GR_EXPAND_X_H(blocks multiply_XX ss ii)
+GR_EXPAND_X_H(blocks multiply_const_XX ss ii)
+GR_EXPAND_X_H(blocks multiply_const_vXX ss ii)
+GR_EXPAND_X_H(blocks multiply_matrix_XX ff cc)
+GR_EXPAND_X_H(blocks mute_XX ss ii ff cc)
+GR_EXPAND_X_H(blocks not_XX bb ss ii)
+GR_EXPAND_X_H(blocks or_XX bb ss ii)
+GR_EXPAND_X_H(blocks peak_detector_XX fb ib sb)
+GR_EXPAND_X_H(blocks probe_signal_X b s i f c)
+GR_EXPAND_X_H(blocks probe_signal_vX b s i f c)
+GR_EXPAND_X_H(blocks sample_and_hold_XX bb ss ii ff)
+GR_EXPAND_X_H(blocks sub_XX ss ii cc)
+GR_EXPAND_X_H(blocks tsb_vector_sink_X b s i f c)
+GR_EXPAND_X_H(blocks xor_XX bb ss ii)
+GR_EXPAND_X_H(blocks packed_to_unpacked_XX bb ss ii)
+GR_EXPAND_X_H(blocks unpacked_to_packed_XX bb ss ii)
+GR_EXPAND_X_H(blocks vector_insert_X b s i f c)
+GR_EXPAND_X_H(blocks vector_sink_X b s i f c)
+GR_EXPAND_X_H(blocks vector_source_X b s i f c)
add_custom_target(blocks_generated_includes DEPENDS
${generated_includes}
@@ -164,7 +123,9 @@ install(FILES
multiply_ff.h
multiply_conjugate_cc.h
multiply_const_cc.h
+ multiply_const_vcc.h
multiply_const_ff.h
+ multiply_const_vff.h
nlog10_ff.h
nop.h
null_sink.h
@@ -197,6 +158,7 @@ install(FILES
streams_to_stream.h
streams_to_vector.h
stretch_ff.h
+ sub_ff.h
tag_debug.h
tag_gate.h
tagged_file_sink.h
diff --git a/gr-blocks/include/gnuradio/blocks/min_XX.h.t b/gr-blocks/include/gnuradio/blocks/min_XX.h.t
new file mode 100644
index 0000000000..45c7357f02
--- /dev/null
+++ b/gr-blocks/include/gnuradio/blocks/min_XX.h.t
@@ -0,0 +1,57 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2014 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+// @WARNING@
+
+#ifndef @GUARD_NAME@
+#define @GUARD_NAME@
+
+#include <gnuradio/blocks/api.h>
+#include <gnuradio/sync_block.h>
+
+namespace gr {
+ namespace blocks {
+
+ /*!
+ * \brief Compares vectors from multiple streams and determines
+ * the minimum value from each vector over all streams.
+ * \ingroup math_operators_blk
+ *
+ * \details
+ * Data is passed in as a vector of length \p vlen from multiple
+ * input sources. It will look through these streams of \p vlen
+ * data items and the output stream will contain the minimum value
+ * in the vector.
+ */
+ class BLOCKS_API @NAME@ : virtual public sync_block
+ {
+ public:
+ // gr::blocks::@NAME@::sptr
+ typedef boost::shared_ptr<@NAME@> sptr;
+
+ static sptr make(size_t vlen);
+ };
+
+ } /* namespace blocks */
+} /* namespace gr */
+
+#endif /* @GUARD_NAME@ */
diff --git a/gr-blocks/include/gnuradio/blocks/multiply_const_cc.h b/gr-blocks/include/gnuradio/blocks/multiply_const_cc.h
index ff72572da9..3e8ed7c889 100644
--- a/gr-blocks/include/gnuradio/blocks/multiply_const_cc.h
+++ b/gr-blocks/include/gnuradio/blocks/multiply_const_cc.h
@@ -20,8 +20,6 @@
* Boston, MA 02110-1301, USA.
*/
-// @WARNING@
-
#ifndef INCLUDED_MULTIPLY_CONST_CC_H
#define INCLUDED_MULTIPLY_CONST_CC_H
diff --git a/gr-blocks/include/gnuradio/blocks/multiply_const_vcc.h b/gr-blocks/include/gnuradio/blocks/multiply_const_vcc.h
new file mode 100644
index 0000000000..78d2752751
--- /dev/null
+++ b/gr-blocks/include/gnuradio/blocks/multiply_const_vcc.h
@@ -0,0 +1,62 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2014 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef INCLUDED_MULTIPLY_CONST_VCC_H
+#define INCLUDED_MULTIPLY_CONST_VCC_H
+
+#include <gnuradio/blocks/api.h>
+#include <gnuradio/sync_block.h>
+
+namespace gr {
+ namespace blocks {
+
+ /*!
+ * \brief output = input * constant vector (element-wise)
+ * \ingroup math_operators_blk
+ */
+ class BLOCKS_API multiply_const_vcc : virtual public sync_block
+ {
+ public:
+ // gr::blocks::multiply_const_vcc::sptr
+ typedef boost::shared_ptr<multiply_const_vcc> sptr;
+
+ /*!
+ * \brief Create an instance of multiply_const_vcc
+ * \param k multiplicative constant vector
+ */
+ static sptr make(std::vector<gr_complex> k);
+
+ /*!
+ * \brief Return multiplicative constant vector
+ */
+ virtual std::vector<gr_complex> k() const = 0;
+
+ /*!
+ * \brief Set multiplicative constant vector
+ */
+ virtual void set_k(std::vector<gr_complex> k) = 0;
+ };
+
+ } /* namespace blocks */
+} /* namespace gr */
+
+#endif /* INCLUDED_MULTIPLY_CONST_VCC_H */
diff --git a/gr-blocks/include/gnuradio/blocks/multiply_const_vff.h b/gr-blocks/include/gnuradio/blocks/multiply_const_vff.h
new file mode 100644
index 0000000000..884088e288
--- /dev/null
+++ b/gr-blocks/include/gnuradio/blocks/multiply_const_vff.h
@@ -0,0 +1,62 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2014 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef INCLUDED_MULTIPLY_CONST_VFF_H
+#define INCLUDED_MULTIPLY_CONST_VFF_H
+
+#include <gnuradio/blocks/api.h>
+#include <gnuradio/sync_block.h>
+
+namespace gr {
+ namespace blocks {
+
+ /*!
+ * \brief output = input * constant vector (element-wise)
+ * \ingroup math_operators_blk
+ */
+ class BLOCKS_API multiply_const_vff : virtual public sync_block
+ {
+ public:
+ // gr::blocks::multiply_const_vff::sptr
+ typedef boost::shared_ptr<multiply_const_vff> sptr;
+
+ /*!
+ * \brief Create an instance of multiply_const_vff
+ * \param k multiplicative constant vector
+ */
+ static sptr make(std::vector<float> k);
+
+ /*!
+ * \brief Return multiplicative constant vector
+ */
+ virtual std::vector<float> k() const = 0;
+
+ /*!
+ * \brief Set multiplicative constant vector
+ */
+ virtual void set_k(std::vector<float> k) = 0;
+ };
+
+ } /* namespace blocks */
+} /* namespace gr */
+
+#endif /* INCLUDED_MULTIPLY_CONST_VFF_H */
diff --git a/gr-blocks/include/gnuradio/blocks/multiply_matrix_XX.h.t b/gr-blocks/include/gnuradio/blocks/multiply_matrix_XX.h.t
new file mode 100644
index 0000000000..3f8411d107
--- /dev/null
+++ b/gr-blocks/include/gnuradio/blocks/multiply_matrix_XX.h.t
@@ -0,0 +1,103 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2014 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+// @WARNING@
+
+#ifndef @GUARD_NAME@
+#define @GUARD_NAME@
+
+#include <gnuradio/blocks/api.h>
+#include <gnuradio/sync_block.h>
+
+namespace gr {
+ namespace blocks {
+
+ /*!
+ * \brief Matrix multiplexer/multiplier: y(k) = A * x(k)
+ * \ingroup blocks
+ *
+ * This block is similar to gr::blocks::multiply_const_ff, the difference
+ * being it can handle several inputs and outputs, and the input-to-output
+ * relation can be described by the following mathematical equation:
+ * \f[
+ * \mathbf{y}(k) = \mathbf{A} \mathbf{x}(k) \, , \, y \in \mathbb{R}^N, \mathbf{x} \in \mathbb{R}^M, A \in \mathbb{R}^{N \times M}
+ * \f]
+ * \f$\mathbf{y}(k)\f$ and \f$\mathbf{x}(i)\f$ are column-vectors describing the elements on the input port
+ * at time step \f$k\f$ (this is a sync block with no memory).
+ *
+ * Examples for where to use this block include:
+ * - Switch matrices (i.e. switch which ports go where), assuming all ports run on the same rate
+ * - Simulation of static MIMO-Channels (in that case, \f$\mathbf{A}\f$ is the channel matrix)
+ * - Summing up streams with variable coefficients
+ *
+ * This block features a special tag propagation mode: When setting the tag propagation policy
+ * to gr::blocks::@NAME@::TPP_SELECT_BY_MATRIX, a tag is propagated from input k
+ * to output l if \f$(A)_{l,k} \neq 0\f$.
+ *
+ * \section blocks_matrixmult_msgports Message Ports
+ *
+ * This block as one input message port (\p set_A). A message sent to this port will
+ * be converted to a std::vector<std::vector<@O_TYPE@> >, and then passed on to set_A().
+ * If no conversion is possible, a warning is issued via the logging interface, and
+ * A remains unchanged.
+ *
+ * *Note*: It is not possible to change the dimension of the matrix after initialization,
+ * as this affects the I/O signature! If a matrix of invalid size is passed to the block,
+ * an alert is raised via the logging interface, and A remains unchanged.
+ */
+ class BLOCKS_API @NAME@ : virtual public gr::sync_block
+ {
+ public:
+ typedef boost::shared_ptr<@NAME@> sptr;
+
+ /*!
+ * \param A The matrix
+ * \param tag_propagation_policy The tag propagation policy.
+ * Note this can be any gr::block::tag_propagation_policy_t value, or TPP_SELECT_BY_MATRIX.
+ */
+ static sptr make(
+ std::vector<std::vector<@O_TYPE@> > A,
+ gr::block::tag_propagation_policy_t tag_propagation_policy=gr::block::TPP_ALL_TO_ALL
+ );
+
+ //! Returns the current matrix
+ virtual const std::vector<std::vector<@O_TYPE@> >& get_A() const = 0;
+ //! Sets the matrix to a new value \p new_A. Returns true if the new matrix was valid and could be changed.
+ virtual bool set_A(const std::vector<std::vector<@O_TYPE@> > &new_A) = 0;
+
+ /*!
+ * \brief Set the policy by the scheduler to determine how tags are moved downstream.
+ *
+ * This will also accept the value TPP_SELECT_BY_MATRIX.
+ */
+ virtual void set_tag_propagation_policy(gr::block::tag_propagation_policy_t p) = 0;
+
+ static const int TPP_SELECT_BY_MATRIX = 999;
+ static const std::string MSG_PORT_NAME_SET_A;
+ };
+ const std::string @NAME@::MSG_PORT_NAME_SET_A = "set_A";
+
+ } // namespace blocks
+} // namespace gr
+
+#endif /* @GUARD_NAME */
+
diff --git a/gr-blocks/include/gnuradio/blocks/sub_ff.h b/gr-blocks/include/gnuradio/blocks/sub_ff.h
new file mode 100644
index 0000000000..3cc844f888
--- /dev/null
+++ b/gr-blocks/include/gnuradio/blocks/sub_ff.h
@@ -0,0 +1,51 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2014 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef INCLUDED_BLOCKS_SUB_FF_H
+#define INCLUDED_BLOCKS_SUB_FF_H
+
+#include <gnuradio/blocks/api.h>
+#include <gnuradio/sync_block.h>
+
+namespace gr {
+ namespace blocks {
+
+ /*!
+ * \brief output = input_0 - input_1 - ...)
+ * \ingroup math_operators_blk
+ *
+ * \details
+ * Subtract across all input streams.
+ */
+ class BLOCKS_API sub_ff : virtual public sync_block
+ {
+ public:
+ // gr::blocks::sub_ff::sptr
+ typedef boost::shared_ptr<sub_ff> sptr;
+
+ static sptr make(size_t vlen=1);
+ };
+
+ } /* namespace blocks */
+} /* namespace gr */
+
+#endif /* INCLUDED_BLOCKS_SUB_FF_H */
diff --git a/gr-blocks/lib/CMakeLists.txt b/gr-blocks/lib/CMakeLists.txt
index d1fad2eefb..554dcc8488 100644
--- a/gr-blocks/lib/CMakeLists.txt
+++ b/gr-blocks/lib/CMakeLists.txt
@@ -1,4 +1,4 @@
-# Copyright 2012-2013 Free Software Foundation, Inc.
+# Copyright 2012-2014 Free Software Foundation, Inc.
#
# This file is part of GNU Radio
#
@@ -23,102 +23,39 @@
include(${CMAKE_CURRENT_SOURCE_DIR}/ConfigChecks.cmake)
########################################################################
-# generate helper scripts to expand templated files
-########################################################################
-include(GrPython)
-
-file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py "
-#!${PYTHON_EXECUTABLE}
-
-import sys, os, re
-sys.path.append('${GR_RUNTIME_PYTHONPATH}')
-os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
-os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
-
-if __name__ == '__main__':
- import build_utils
- root, inp = sys.argv[1:3]
- for sig in sys.argv[3:]:
- name = re.sub ('X+', sig, root)
- d = build_utils.standard_dict(name, sig, 'blocks')
- build_utils.expand_template(d, inp, '_impl')
-")
-
-macro(expand_cc_h_impl root)
- #make a list of all the generated files
- unset(expanded_files_cc_impl)
- unset(expanded_files_h_impl)
- foreach(sig ${ARGN})
- string(REGEX REPLACE "X+" ${sig} name ${root})
- list(APPEND expanded_files_cc_impl ${CMAKE_CURRENT_BINARY_DIR}/${name}_impl.cc)
- list(APPEND expanded_files_h_impl ${CMAKE_CURRENT_BINARY_DIR}/${name}_impl.h)
- list(APPEND expanded_files_h ${CMAKE_CURRENT_BINARY_DIR}/../include/${name}.h)
- endforeach(sig)
-
- #create a command to generate the _impl.cc files
- add_custom_command(
- OUTPUT ${expanded_files_cc_impl}
- DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}_impl.cc.t
- COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
- ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
- ${root} ${root}_impl.cc.t ${ARGN}
- )
-
- #create a command to generate the _impl.h files
- add_custom_command(
- OUTPUT ${expanded_files_h_impl}
- DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}_impl.h.t
- COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
- ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
- ${root} ${root}_impl.h.t ${ARGN}
- )
-
- #make _impl.cc source files depend on headers to force generation
- set_source_files_properties(${expanded_files_cc_impl}
- PROPERTIES OBJECT_DEPENDS "${expanded_files_h_impl}"
- )
-
- #make _impl.h source files depend on headers to force generation
- set_source_files_properties(${expanded_files_h_impl}
- PROPERTIES OBJECT_DEPENDS "${expanded_files_h}"
- )
-
- #install rules for the generated cc files
- list(APPEND generated_sources ${expanded_files_cc_impl})
-endmacro(expand_cc_h_impl)
-
-########################################################################
# Invoke macro to generate various sources
########################################################################
-expand_cc_h_impl(abs_XX ss ii ff)
-expand_cc_h_impl(add_XX ss ii cc)
-expand_cc_h_impl(add_const_XX bb ss ii ff cc)
-expand_cc_h_impl(add_const_vXX bb ss ii ff cc)
-expand_cc_h_impl(and_XX bb ss ii)
-expand_cc_h_impl(and_const_XX bb ss ii)
-expand_cc_h_impl(argmax_XX fs is ss)
-expand_cc_h_impl(divide_XX ss ii ff cc)
-expand_cc_h_impl(integrate_XX ss ii ff cc)
-expand_cc_h_impl(max_XX ff ii ss)
-expand_cc_h_impl(moving_average_XX ss ii ff cc)
-expand_cc_h_impl(multiply_XX ss ii)
-expand_cc_h_impl(multiply_const_XX ss ii)
-expand_cc_h_impl(multiply_const_vXX ss ii ff cc)
-expand_cc_h_impl(mute_XX ss ii ff cc)
-expand_cc_h_impl(not_XX bb ss ii)
-expand_cc_h_impl(or_XX bb ss ii)
-expand_cc_h_impl(peak_detector_XX fb ib sb)
-expand_cc_h_impl(probe_signal_X b s i f c)
-expand_cc_h_impl(probe_signal_vX b s i f c)
-expand_cc_h_impl(sample_and_hold_XX bb ss ii ff)
-expand_cc_h_impl(tsb_vector_sink_X b s i f c)
-expand_cc_h_impl(sub_XX ss ii ff cc)
-expand_cc_h_impl(xor_XX bb ss ii)
-expand_cc_h_impl(packed_to_unpacked_XX bb ss ii)
-expand_cc_h_impl(unpacked_to_packed_XX bb ss ii)
-expand_cc_h_impl(vector_insert_X b s i f c)
-expand_cc_h_impl(vector_sink_X b s i f c)
-expand_cc_h_impl(vector_source_X b s i f c)
+include(GrMiscUtils)
+GR_EXPAND_X_CC_H_IMPL(blocks abs_XX ss ii ff)
+GR_EXPAND_X_CC_H_IMPL(blocks add_XX ss ii cc)
+GR_EXPAND_X_CC_H_IMPL(blocks add_const_XX bb ss ii ff cc)
+GR_EXPAND_X_CC_H_IMPL(blocks add_const_vXX bb ss ii ff cc)
+GR_EXPAND_X_CC_H_IMPL(blocks and_XX bb ss ii)
+GR_EXPAND_X_CC_H_IMPL(blocks and_const_XX bb ss ii)
+GR_EXPAND_X_CC_H_IMPL(blocks argmax_XX fs is ss)
+GR_EXPAND_X_CC_H_IMPL(blocks divide_XX ss ii ff cc)
+GR_EXPAND_X_CC_H_IMPL(blocks integrate_XX ss ii ff cc)
+GR_EXPAND_X_CC_H_IMPL(blocks max_XX ss ii ff)
+GR_EXPAND_X_CC_H_IMPL(blocks min_XX ss ii ff)
+GR_EXPAND_X_CC_H_IMPL(blocks moving_average_XX ss ii ff cc)
+GR_EXPAND_X_CC_H_IMPL(blocks multiply_XX ss ii)
+GR_EXPAND_X_CC_H_IMPL(blocks multiply_const_XX ss ii)
+GR_EXPAND_X_CC_H_IMPL(blocks multiply_const_vXX ss ii)
+GR_EXPAND_X_CC_H_IMPL(blocks mute_XX ss ii ff cc)
+GR_EXPAND_X_CC_H_IMPL(blocks not_XX bb ss ii)
+GR_EXPAND_X_CC_H_IMPL(blocks or_XX bb ss ii)
+GR_EXPAND_X_CC_H_IMPL(blocks peak_detector_XX fb ib sb)
+GR_EXPAND_X_CC_H_IMPL(blocks probe_signal_X b s i f c)
+GR_EXPAND_X_CC_H_IMPL(blocks probe_signal_vX b s i f c)
+GR_EXPAND_X_CC_H_IMPL(blocks sample_and_hold_XX bb ss ii ff)
+GR_EXPAND_X_CC_H_IMPL(blocks sub_XX ss ii cc)
+GR_EXPAND_X_CC_H_IMPL(blocks tsb_vector_sink_X b s i f c)
+GR_EXPAND_X_CC_H_IMPL(blocks xor_XX bb ss ii)
+GR_EXPAND_X_CC_H_IMPL(blocks packed_to_unpacked_XX bb ss ii)
+GR_EXPAND_X_CC_H_IMPL(blocks unpacked_to_packed_XX bb ss ii)
+GR_EXPAND_X_CC_H_IMPL(blocks vector_insert_X b s i f c)
+GR_EXPAND_X_CC_H_IMPL(blocks vector_sink_X b s i f c)
+GR_EXPAND_X_CC_H_IMPL(blocks vector_source_X b s i f c)
########################################################################
# Setup the include and linker paths
@@ -203,7 +140,9 @@ list(APPEND gr_blocks_sources
multiply_ff_impl.cc
multiply_conjugate_cc_impl.cc
multiply_const_cc_impl.cc
+ multiply_const_vcc_impl.cc
multiply_const_ff_impl.cc
+ multiply_const_vff_impl.cc
nlog10_ff_impl.cc
nop_impl.cc
null_sink_impl.cc
@@ -238,6 +177,7 @@ list(APPEND gr_blocks_sources
streams_to_stream_impl.cc
streams_to_vector_impl.cc
stretch_ff_impl.cc
+ sub_ff_impl.cc
tagged_file_sink_impl.cc
tagged_stream_to_pdu_impl.cc
tagged_stream_multiply_length_impl.cc
@@ -261,10 +201,11 @@ list(APPEND gr_blocks_sources
vector_to_streams_impl.cc
wavfile_sink_impl.cc
wavfile_source_impl.cc
+ multiply_matrix_ff_impl.cc
)
if(ENABLE_GR_CTRLPORT)
-list(APPEND gr_blocks_sources
+list(APPEND blocks_ctrlport_sources
ctrlport_probe_c_impl.cc
ctrlport_probe2_c_impl.cc
ctrlport_probe2_f_impl.cc
@@ -272,6 +213,10 @@ list(APPEND gr_blocks_sources
ctrlport_probe2_i_impl.cc
ctrlport_probe2_b_impl.cc
)
+
+list(APPEND gr_blocks_sources
+ ${blocks_ctrlport_sources}
+)
endif(ENABLE_GR_CTRLPORT)
#Add Windows DLL resource file if using MSVC
@@ -303,6 +248,23 @@ target_link_libraries(gnuradio-blocks ${blocks_libs})
GR_LIBRARY_FOO(gnuradio-blocks RUNTIME_COMPONENT "blocks_runtime" DEVEL_COMPONENT "blocks_devel")
if(ENABLE_STATIC_LIBS)
+ # Remove controlport-specific source files from staticlibs build
+ if(ENABLE_GR_CTRLPORT)
+ list(REMOVE_ITEM gr_blocks_sources
+ ${blocks_ctrlport_sources}
+ )
+
+ # Remove GR_CTRLPORT set this target's definitions.
+ # Makes sure we don't try to use ControlPort stuff in source files
+ # since Ice will not work with static libs.
+ GET_DIRECTORY_PROPERTY(STATIC_DEFS COMPILE_DEFINITIONS)
+ list(REMOVE_ITEM STATIC_DEFS "GR_CTRLPORT")
+ SET_PROPERTY(DIRECTORY PROPERTY COMPILE_DEFINITIONS "${STATIC_DEFS}")
+
+ # readd it to the target since we removed it from the directory-wide list.
+ SET_PROPERTY(TARGET gnuradio-blocks APPEND PROPERTY COMPILE_DEFINITIONS "GR_CTRLPORT")
+ endif(ENABLE_GR_CTRLPORT)
+
add_library(gnuradio-blocks_static STATIC ${gr_blocks_sources})
add_dependencies(gnuradio-blocks_static blocks_generated_includes)
diff --git a/gr-blocks/lib/float_to_complex_impl.cc b/gr-blocks/lib/float_to_complex_impl.cc
index 236438daac..a2dd0d3bb8 100644
--- a/gr-blocks/lib/float_to_complex_impl.cc
+++ b/gr-blocks/lib/float_to_complex_impl.cc
@@ -31,15 +31,17 @@
namespace gr {
namespace blocks {
- float_to_complex::sptr float_to_complex::make(size_t vlen)
+ float_to_complex::sptr
+ float_to_complex::make(size_t vlen)
{
- return gnuradio::get_initial_sptr(new float_to_complex_impl(vlen));
+ return gnuradio::get_initial_sptr
+ (new float_to_complex_impl(vlen));
}
float_to_complex_impl::float_to_complex_impl(size_t vlen)
: sync_block("float_to_complex",
- io_signature::make (1, 2, sizeof(float)*vlen),
- io_signature::make (1, 1, sizeof(gr_complex)*vlen)),
+ io_signature::make(1, 2, sizeof(float)*vlen),
+ io_signature::make(1, 1, sizeof(gr_complex)*vlen)),
d_vlen(vlen)
{
const int alignment_multiple =
@@ -63,8 +65,9 @@ namespace gr {
break;
case 2:
- for (size_t j = 0; j < noutput_items*d_vlen; j++)
- out[j] = gr_complex (r[j], i[j]);
+ //for (size_t j = 0; j < noutput_items*d_vlen; j++)
+ // out[j] = gr_complex (r[j], i[j]);
+ volk_32f_x2_interleave_32fc(out, r, i, noutput_items*d_vlen);
break;
default:
diff --git a/gr-blocks/lib/min_XX_impl.cc.t b/gr-blocks/lib/min_XX_impl.cc.t
new file mode 100644
index 0000000000..d77dda208d
--- /dev/null
+++ b/gr-blocks/lib/min_XX_impl.cc.t
@@ -0,0 +1,80 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2014 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+// @WARNING@
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <@NAME_IMPL@.h>
+#include <gnuradio/io_signature.h>
+
+namespace gr {
+ namespace blocks {
+
+ @NAME@::sptr
+ @NAME@::make(size_t vlen)
+ {
+ return gnuradio::get_initial_sptr
+ (new @NAME_IMPL@(vlen));
+ }
+
+ @NAME_IMPL@::@NAME_IMPL@(size_t vlen)
+ : sync_block("@BASE_NAME@",
+ io_signature::make(1, -1, vlen*sizeof(@I_TYPE@)),
+ io_signature::make(1, 1, sizeof(@O_TYPE@))),
+ d_vlen(vlen)
+ {
+ }
+
+ @NAME_IMPL@::~@NAME_IMPL@()
+ {
+ }
+
+ int
+ @NAME_IMPL@::work(int noutput_items,
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items)
+ {
+ @O_TYPE@ *optr = (@O_TYPE@ *)output_items[0];
+
+ int ninputs = input_items.size();
+
+ for(int i = 0; i < noutput_items; i++) {
+ @I_TYPE@ min = ((@I_TYPE@ *)input_items[0])[i*d_vlen];
+
+ for(int j = 0; j < (int)d_vlen; j++ ) {
+ for(int k = 0; k < ninputs; k++) {
+ if(((@I_TYPE@ *)input_items[k])[i*d_vlen + j] < min) {
+ min = ((@I_TYPE@*)input_items[k])[i*d_vlen + j];
+ }
+ }
+ }
+
+ *optr++ = (@O_TYPE@)min;
+ }
+ return noutput_items;
+ }
+
+ } /* namespace blocks */
+} /* namespace gr */
diff --git a/gr-blocks/lib/min_XX_impl.h.t b/gr-blocks/lib/min_XX_impl.h.t
new file mode 100644
index 0000000000..33be614a8a
--- /dev/null
+++ b/gr-blocks/lib/min_XX_impl.h.t
@@ -0,0 +1,50 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2014 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+// @WARNING@
+
+#ifndef @GUARD_NAME_IMPL@
+#define @GUARD_NAME_IMPL@
+
+#include <gnuradio/blocks/@NAME@.h>
+
+namespace gr {
+ namespace blocks {
+
+ class @NAME_IMPL@ : public @NAME@
+ {
+ private:
+ size_t d_vlen;
+
+ public:
+ @NAME_IMPL@(size_t vlen);
+ ~@NAME_IMPL@();
+
+ int work(int noutput_items,
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items);
+ };
+
+ } /* namespace blocks */
+} /* namespace gr */
+
+#endif /* @GUARD_NAME_IMPL@ */
diff --git a/gr-blocks/lib/multiply_const_cc_impl.cc b/gr-blocks/lib/multiply_const_cc_impl.cc
index f6b8dc3d63..c082a1ddd8 100644
--- a/gr-blocks/lib/multiply_const_cc_impl.cc
+++ b/gr-blocks/lib/multiply_const_cc_impl.cc
@@ -20,8 +20,6 @@
* Boston, MA 02110-1301, USA.
*/
-// @WARNING@
-
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
diff --git a/gr-blocks/lib/multiply_const_cc_impl.h b/gr-blocks/lib/multiply_const_cc_impl.h
index 29ba6dd14c..06f60b13dc 100644
--- a/gr-blocks/lib/multiply_const_cc_impl.h
+++ b/gr-blocks/lib/multiply_const_cc_impl.h
@@ -20,8 +20,6 @@
* Boston, MA 02110-1301, USA.
*/
-// @WARNING@
-
#ifndef INCLUDED_MULTIPLY_CONST_CC_IMPL_H
#define INCLUDED_MULTIPLY_CONST_CC_IMPL_H
diff --git a/gr-blocks/lib/multiply_const_vcc_impl.cc b/gr-blocks/lib/multiply_const_vcc_impl.cc
new file mode 100644
index 0000000000..637f79eb12
--- /dev/null
+++ b/gr-blocks/lib/multiply_const_vcc_impl.cc
@@ -0,0 +1,72 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2014 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <multiply_const_vcc_impl.h>
+#include <gnuradio/io_signature.h>
+#include <volk/volk.h>
+
+namespace gr {
+ namespace blocks {
+
+ multiply_const_vcc::sptr
+ multiply_const_vcc::make(std::vector<gr_complex> k)
+ {
+ return gnuradio::get_initial_sptr
+ (new multiply_const_vcc_impl(k));
+ }
+
+ multiply_const_vcc_impl::multiply_const_vcc_impl(std::vector<gr_complex> k)
+ : sync_block("multiply_const_vcc",
+ io_signature::make(1, 1, sizeof(gr_complex)*k.size()),
+ io_signature::make(1, 1, sizeof(gr_complex)*k.size())),
+ d_k(k)
+ {
+ const int alignment_multiple =
+ volk_get_alignment() / sizeof(gr_complex);
+ set_alignment(std::max(1,alignment_multiple));
+ }
+
+ int
+ multiply_const_vcc_impl::work(int noutput_items,
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items)
+ {
+ gr_complex *iptr = (gr_complex*)input_items[0];
+ gr_complex *optr = (gr_complex*)output_items[0];
+
+ int nitems_per_block = output_signature()->sizeof_stream_item(0)/sizeof(gr_complex);
+
+ for(int i = 0; i < noutput_items; i++) {
+ for(int j = 0; j < nitems_per_block; j++) {
+ *optr++ = *iptr++ * d_k[j];
+ }
+ }
+
+ return noutput_items;
+ }
+
+ } /* namespace blocks */
+} /* namespace gr */
diff --git a/gr-blocks/lib/multiply_const_vcc_impl.h b/gr-blocks/lib/multiply_const_vcc_impl.h
new file mode 100644
index 0000000000..18886ed00e
--- /dev/null
+++ b/gr-blocks/lib/multiply_const_vcc_impl.h
@@ -0,0 +1,50 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2014 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef INCLUDED_BLOCKS_MULTIPLY_CONST_VCC_IMPL_H
+#define INCLUDED_BLOCKS_MULTIPLY_CONST_VCC_IMPL_H
+
+#include <gnuradio/blocks/multiply_const_vcc.h>
+
+namespace gr {
+ namespace blocks {
+
+ class BLOCKS_API multiply_const_vcc_impl : public multiply_const_vcc
+ {
+ private:
+ std::vector<gr_complex> d_k;
+
+ public:
+ multiply_const_vcc_impl(std::vector<gr_complex> k);
+
+ std::vector<gr_complex> k() const { return d_k; }
+ void set_k(std::vector<gr_complex> k) { d_k = k; }
+
+ int work(int noutput_items,
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items);
+ };
+
+ } /* namespace blocks */
+} /* namespace gr */
+
+#endif /* INCLUDED_BLOCKS_MULTIPLY_CONST_VCC_IMPL_H */
diff --git a/gr-blocks/lib/multiply_const_vff_impl.cc b/gr-blocks/lib/multiply_const_vff_impl.cc
new file mode 100644
index 0000000000..ab53ce3ce3
--- /dev/null
+++ b/gr-blocks/lib/multiply_const_vff_impl.cc
@@ -0,0 +1,72 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2014 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <multiply_const_vff_impl.h>
+#include <gnuradio/io_signature.h>
+#include <volk/volk.h>
+
+namespace gr {
+ namespace blocks {
+
+ multiply_const_vff::sptr
+ multiply_const_vff::make(std::vector<float> k)
+ {
+ return gnuradio::get_initial_sptr
+ (new multiply_const_vff_impl(k));
+ }
+
+ multiply_const_vff_impl::multiply_const_vff_impl(std::vector<float> k)
+ : sync_block("multiply_const_vff",
+ io_signature::make(1, 1, sizeof(float)*k.size()),
+ io_signature::make(1, 1, sizeof(float)*k.size())),
+ d_k(k)
+ {
+ const int alignment_multiple =
+ volk_get_alignment() / sizeof(float);
+ set_alignment(std::max(1,alignment_multiple));
+ }
+
+ int
+ multiply_const_vff_impl::work(int noutput_items,
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items)
+ {
+ float *iptr = (float*)input_items[0];
+ float *optr = (float*)output_items[0];
+
+ int nitems_per_block = output_signature()->sizeof_stream_item(0)/sizeof(float);
+
+ for(int i = 0; i < noutput_items; i++) {
+ for(int j = 0; j < nitems_per_block; j++) {
+ *optr++ = *iptr++ * d_k[j];
+ }
+ }
+
+ return noutput_items;
+ }
+
+ } /* namespace blocks */
+} /* namespace gr */
diff --git a/gr-blocks/lib/multiply_const_vff_impl.h b/gr-blocks/lib/multiply_const_vff_impl.h
new file mode 100644
index 0000000000..4fda2a831e
--- /dev/null
+++ b/gr-blocks/lib/multiply_const_vff_impl.h
@@ -0,0 +1,50 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2014 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef INCLUDED_BLOCKS_MULTIPLY_CONST_VFF_IMPL_H
+#define INCLUDED_BLOCKS_MULTIPLY_CONST_VFF_IMPL_H
+
+#include <gnuradio/blocks/multiply_const_vff.h>
+
+namespace gr {
+ namespace blocks {
+
+ class BLOCKS_API multiply_const_vff_impl : public multiply_const_vff
+ {
+ private:
+ std::vector<float> d_k;
+
+ public:
+ multiply_const_vff_impl(std::vector<float> k);
+
+ std::vector<float> k() const { return d_k; }
+ void set_k(std::vector<float> k) { d_k = k; }
+
+ int work(int noutput_items,
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items);
+ };
+
+ } /* namespace blocks */
+} /* namespace gr */
+
+#endif /* INCLUDED_BLOCKS_MULTIPLY_CONST_VFF_IMPL_H */
diff --git a/gr-blocks/lib/multiply_matrix_cc_impl.cc b/gr-blocks/lib/multiply_matrix_cc_impl.cc
new file mode 100644
index 0000000000..f9fc30ee6d
--- /dev/null
+++ b/gr-blocks/lib/multiply_matrix_cc_impl.cc
@@ -0,0 +1,192 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2014 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gnuradio/io_signature.h>
+#include <volk/volk.h>
+#include "multiply_matrix_cc_impl.h"
+
+namespace gr {
+ namespace blocks {
+
+ multiply_matrix_cc::sptr
+ multiply_matrix_cc::make(std::vector<std::vector<gr_complex> > A, gr::block::tag_propagation_policy_t tag_propagation_policy)
+ {
+ if (A.empty() or A[0].size() == 0) {
+ throw std::invalid_argument("matrix A has invalid dimensions.");
+ }
+ return gnuradio::get_initial_sptr
+ (new multiply_matrix_cc_impl(A, tag_propagation_policy));
+ }
+
+ multiply_matrix_cc_impl::multiply_matrix_cc_impl(std::vector<std::vector<gr_complex> > A, gr::block::tag_propagation_policy_t tag_propagation_policy)
+ : gr::sync_block("multiply_matrix_cc",
+ gr::io_signature::make(A[0].size(), A[0].size(), sizeof(gr_complex)),
+ gr::io_signature::make(A.size(), A.size(), sizeof(gr_complex))),
+ d_A(A)
+ {
+ this->set_tag_propagation_policy(tag_propagation_policy);
+ const int alignment_multiple = volk_get_alignment() / sizeof(gr_complex);
+ set_alignment(std::max(1, alignment_multiple));
+
+ pmt::pmt_t port_name = pmt::string_to_symbol("set_A");
+ message_port_register_in(port_name);
+ set_msg_handler(
+ port_name,
+ boost::bind(&multiply_matrix_cc_impl::msg_handler_A, this, _1)
+ );
+ }
+
+ multiply_matrix_cc_impl::~multiply_matrix_cc_impl()
+ {
+ }
+
+ int
+ multiply_matrix_cc_impl::work(int noutput_items,
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items)
+ {
+ for (size_t out_idx = 0; out_idx < output_items.size(); out_idx++) {
+ gr_complex *out = reinterpret_cast<gr_complex *>(output_items[out_idx]);
+ // Do input 0 first, this saves a memset
+ const gr_complex *in = reinterpret_cast<const gr_complex *>(input_items[0]);
+ volk_32fc_s32fc_multiply_32fc(out, in, d_A[out_idx][0], noutput_items);
+ // Then do inputs 1 through N
+ for (size_t in_idx = 1; in_idx < input_items.size(); in_idx++) {
+ in = reinterpret_cast<const gr_complex *>(input_items[in_idx]);
+ // Yeah, this needs VOLK-ifying (TODO)
+ for (int i = 0; i < noutput_items; i++) {
+ out[i] += in[i] * d_A[out_idx][in_idx];
+ }
+ }
+ }
+ if (d_tag_prop_select) {
+ propagate_tags_by_A(noutput_items, input_items.size(), output_items.size());
+ }
+ return noutput_items;
+ }
+
+
+ // Copy tags from input k to output l if A[l][k] is not zero
+ void
+ multiply_matrix_cc_impl::propagate_tags_by_A(int noutput_items, size_t ninput_ports, size_t noutput_ports)
+ {
+ std::vector<gr::tag_t> tags;
+ for (size_t in_idx = 0; in_idx < ninput_ports; in_idx++) {
+ get_tags_in_window(
+ tags,
+ in_idx,
+ 0,
+ noutput_items
+ );
+
+ for (size_t out_idx = 0; out_idx < noutput_ports; out_idx++) {
+ if (d_A[out_idx][in_idx] == 0) {
+ continue;
+ }
+ for (size_t i = 0; i < tags.size(); i++) {
+ add_item_tag(out_idx, tags[i]);
+ }
+ }
+ }
+ }
+
+ // Check dimensions before copying
+ bool
+ multiply_matrix_cc_impl::set_A(const std::vector<std::vector<gr_complex> > &new_A)
+ {
+ if (d_A.size() != new_A.size()) {
+ GR_LOG_ALERT(d_logger, "Attempted to set matrix with invalid dimensions.");
+ return false;
+ }
+ for (size_t i = 0; i < d_A.size(); i++) {
+ if (d_A[i].size() != new_A[i].size()) {
+ GR_LOG_ALERT(d_logger, "Attempted to set matrix with invalid dimensions.");
+ return false;
+ }
+ }
+ d_A = new_A;
+ return true;
+ }
+
+ void
+ multiply_matrix_cc_impl::msg_handler_A(pmt::pmt_t A)
+ {
+ if (not pmt::is_vector(A) and not pmt::is_tuple(A)) {
+ GR_LOG_ALERT(d_logger, "Invalid message to set A (wrong type).");
+ return;
+ }
+ if (not pmt::length(A) == d_A.size()) {
+ GR_LOG_ALERT(d_logger, "Invalid message to set A (wrong size).");
+ return;
+ }
+
+ std::vector<std::vector<gr_complex> > new_A(d_A);
+ for (size_t i = 0; i < pmt::length(A); i++) {
+ pmt::pmt_t row;
+ if (pmt::is_vector(A)) {
+ row = pmt::vector_ref(A, i);
+ } else if (pmt::is_tuple(A)) {
+ row = pmt::tuple_ref(A, i);
+ }
+ if (pmt::is_vector(row) or pmt::is_tuple(row)) {
+ if (pmt::length(row) != d_A[0].size()) {
+ GR_LOG_ALERT(d_logger, "Invalid message to set A (wrong number of columns).");
+ return;
+ }
+ for (size_t k = 0; k < pmt::length(row); k++) {
+ new_A[i][k] = pmt::to_double(pmt::is_vector(row) ? pmt::vector_ref(row, k) : pmt::tuple_ref(row, k));
+ }
+ } else if (pmt::is_c32vector(row)) {
+ size_t row_len = 0;
+ const gr_complex *elements = pmt::c32vector_elements(row, row_len);
+ if (row_len != d_A[0].size()) {
+ GR_LOG_ALERT(d_logger, "Invalid message to set A (wrong number of columns).");
+ return;
+ }
+ new_A[i].assign(elements, elements + row_len);
+ }
+ }
+
+ if (not set_A(new_A)) {
+ GR_LOG_ALERT(d_logger, "Invalid message to set A.");
+ }
+ }
+
+ void
+ multiply_matrix_cc_impl::set_tag_propagation_policy(gr::block::tag_propagation_policy_t tpp)
+ {
+ if (tpp == TPP_SELECT_BY_MATRIX) {
+ set_tag_propagation_policy(TPP_DONT);
+ d_tag_prop_select = true;
+ } else {
+ gr::block::set_tag_propagation_policy(tpp);
+ d_tag_prop_select = false;
+ }
+ }
+
+ } /* namespace blocks */
+} /* namespace gr */
+
diff --git a/gr-blocks/lib/multiply_matrix_cc_impl.h b/gr-blocks/lib/multiply_matrix_cc_impl.h
new file mode 100644
index 0000000000..b357dde2cb
--- /dev/null
+++ b/gr-blocks/lib/multiply_matrix_cc_impl.h
@@ -0,0 +1,59 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2014 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef INCLUDED_BLOCKS_MULTIPLY_matrix_cc_IMPL_H
+#define INCLUDED_BLOCKS_MULTIPLY_matrix_cc_IMPL_H
+
+#include <gnuradio/blocks/multiply_matrix_cc.h>
+
+namespace gr {
+ namespace blocks {
+
+ class multiply_matrix_cc_impl : public multiply_matrix_cc
+ {
+ private:
+ std::vector<std::vector<gr_complex> > d_A;
+ bool d_tag_prop_select; //!< If true, handle the tag propagation ourselves
+
+ void propagate_tags_by_A(int noutput_items, size_t ninput_ports, size_t noutput_ports);
+
+ void msg_handler_A(pmt::pmt_t A);
+
+ public:
+ multiply_matrix_cc_impl(std::vector<std::vector<gr_complex> > A, gr::block::tag_propagation_policy_t tag_propagation_policy);
+ ~multiply_matrix_cc_impl();
+
+ const std::vector<std::vector<gr_complex> >& get_A() const { return d_A; };
+ bool set_A(const std::vector<std::vector<gr_complex> > &new_A);
+
+ void set_tag_propagation_policy(gr::block::tag_propagation_policy_t p);
+
+ int work(int noutput_items,
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items);
+ };
+
+ } // namespace blocks
+} // namespace gr
+
+#endif /* INCLUDED_BLOCKS_MULTIPLY_matrix_cc_IMPL_H */
+
diff --git a/gr-blocks/lib/multiply_matrix_ff_impl.cc b/gr-blocks/lib/multiply_matrix_ff_impl.cc
new file mode 100644
index 0000000000..564e673233
--- /dev/null
+++ b/gr-blocks/lib/multiply_matrix_ff_impl.cc
@@ -0,0 +1,192 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2014 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gnuradio/io_signature.h>
+#include <volk/volk.h>
+#include "multiply_matrix_ff_impl.h"
+
+namespace gr {
+ namespace blocks {
+
+ multiply_matrix_ff::sptr
+ multiply_matrix_ff::make(std::vector<std::vector<float> > A, gr::block::tag_propagation_policy_t tag_propagation_policy)
+ {
+ if (A.empty() or A[0].size() == 0) {
+ throw std::invalid_argument("matrix A has invalid dimensions.");
+ }
+ return gnuradio::get_initial_sptr
+ (new multiply_matrix_ff_impl(A, tag_propagation_policy));
+ }
+
+ multiply_matrix_ff_impl::multiply_matrix_ff_impl(std::vector<std::vector<float> > A, gr::block::tag_propagation_policy_t tag_propagation_policy)
+ : gr::sync_block("multiply_matrix_ff",
+ gr::io_signature::make(A[0].size(), A[0].size(), sizeof(float)),
+ gr::io_signature::make(A.size(), A.size(), sizeof(float))),
+ d_A(A)
+ {
+ this->set_tag_propagation_policy(tag_propagation_policy);
+ const int alignment_multiple = volk_get_alignment() / sizeof(float);
+ set_alignment(std::max(1, alignment_multiple));
+
+ pmt::pmt_t port_name = pmt::string_to_symbol("set_A");
+ message_port_register_in(port_name);
+ set_msg_handler(
+ port_name,
+ boost::bind(&multiply_matrix_ff_impl::msg_handler_A, this, _1)
+ );
+ }
+
+ multiply_matrix_ff_impl::~multiply_matrix_ff_impl()
+ {
+ }
+
+ int
+ multiply_matrix_ff_impl::work(int noutput_items,
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items)
+ {
+ for (size_t out_idx = 0; out_idx < output_items.size(); out_idx++) {
+ float *out = reinterpret_cast<float *>(output_items[out_idx]);
+ // Do input 0 first, this saves a memset
+ const float *in = reinterpret_cast<const float *>(input_items[0]);
+ volk_32f_s32f_multiply_32f(out, in, d_A[out_idx][0], noutput_items);
+ // Then do inputs 1 through N
+ for (size_t in_idx = 1; in_idx < input_items.size(); in_idx++) {
+ in = reinterpret_cast<const float *>(input_items[in_idx]);
+ // Yeah, this needs VOLK-ifying (TODO)
+ for (int i = 0; i < noutput_items; i++) {
+ out[i] += in[i] * d_A[out_idx][in_idx];
+ }
+ }
+ }
+ if (d_tag_prop_select) {
+ propagate_tags_by_A(noutput_items, input_items.size(), output_items.size());
+ }
+ return noutput_items;
+ }
+
+
+ // Copy tags from input k to output l if A[l][k] is not zero
+ void
+ multiply_matrix_ff_impl::propagate_tags_by_A(int noutput_items, size_t ninput_ports, size_t noutput_ports)
+ {
+ std::vector<gr::tag_t> tags;
+ for (size_t in_idx = 0; in_idx < ninput_ports; in_idx++) {
+ get_tags_in_window(
+ tags,
+ in_idx,
+ 0,
+ noutput_items
+ );
+
+ for (size_t out_idx = 0; out_idx < noutput_ports; out_idx++) {
+ if (d_A[out_idx][in_idx] == 0) {
+ continue;
+ }
+ for (size_t i = 0; i < tags.size(); i++) {
+ add_item_tag(out_idx, tags[i]);
+ }
+ }
+ }
+ }
+
+ // Check dimensions before copying
+ bool
+ multiply_matrix_ff_impl::set_A(const std::vector<std::vector<float> > &new_A)
+ {
+ if (d_A.size() != new_A.size()) {
+ GR_LOG_ALERT(d_logger, "Attempted to set matrix with invalid dimensions.");
+ return false;
+ }
+ for (size_t i = 0; i < d_A.size(); i++) {
+ if (d_A[i].size() != new_A[i].size()) {
+ GR_LOG_ALERT(d_logger, "Attempted to set matrix with invalid dimensions.");
+ return false;
+ }
+ }
+ d_A = new_A;
+ return true;
+ }
+
+ void
+ multiply_matrix_ff_impl::msg_handler_A(pmt::pmt_t A)
+ {
+ if (not pmt::is_vector(A) and not pmt::is_tuple(A)) {
+ GR_LOG_ALERT(d_logger, "Invalid message to set A (wrong type).");
+ return;
+ }
+ if (not pmt::length(A) == d_A.size()) {
+ GR_LOG_ALERT(d_logger, "Invalid message to set A (wrong size).");
+ return;
+ }
+
+ std::vector<std::vector<float> > new_A(d_A);
+ for (size_t i = 0; i < pmt::length(A); i++) {
+ pmt::pmt_t row;
+ if (pmt::is_vector(A)) {
+ row = pmt::vector_ref(A, i);
+ } else if (pmt::is_tuple(A)) {
+ row = pmt::tuple_ref(A, i);
+ }
+ if (pmt::is_vector(row) or pmt::is_tuple(row)) {
+ if (pmt::length(row) != d_A[0].size()) {
+ GR_LOG_ALERT(d_logger, "Invalid message to set A (wrong number of columns).");
+ return;
+ }
+ for (size_t k = 0; k < pmt::length(row); k++) {
+ new_A[i][k] = pmt::to_double(pmt::is_vector(row) ? pmt::vector_ref(row, k) : pmt::tuple_ref(row, k));
+ }
+ } else if (pmt::is_f32vector(row)) {
+ size_t row_len = 0;
+ const float *elements = pmt::f32vector_elements(row, row_len);
+ if (row_len != d_A[0].size()) {
+ GR_LOG_ALERT(d_logger, "Invalid message to set A (wrong number of columns).");
+ return;
+ }
+ new_A[i].assign(elements, elements + row_len);
+ }
+ }
+
+ if (not set_A(new_A)) {
+ GR_LOG_ALERT(d_logger, "Invalid message to set A.");
+ }
+ }
+
+ void
+ multiply_matrix_ff_impl::set_tag_propagation_policy(gr::block::tag_propagation_policy_t tpp)
+ {
+ if (tpp == TPP_SELECT_BY_MATRIX) {
+ set_tag_propagation_policy(TPP_DONT);
+ d_tag_prop_select = true;
+ } else {
+ gr::block::set_tag_propagation_policy(tpp);
+ d_tag_prop_select = false;
+ }
+ }
+
+ } /* namespace blocks */
+} /* namespace gr */
+
diff --git a/gr-blocks/lib/multiply_matrix_ff_impl.h b/gr-blocks/lib/multiply_matrix_ff_impl.h
new file mode 100644
index 0000000000..c9476bc8d1
--- /dev/null
+++ b/gr-blocks/lib/multiply_matrix_ff_impl.h
@@ -0,0 +1,59 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2014 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef INCLUDED_BLOCKS_MULTIPLY_MATRIX_FF_IMPL_H
+#define INCLUDED_BLOCKS_MULTIPLY_MATRIX_FF_IMPL_H
+
+#include <gnuradio/blocks/multiply_matrix_ff.h>
+
+namespace gr {
+ namespace blocks {
+
+ class multiply_matrix_ff_impl : public multiply_matrix_ff
+ {
+ private:
+ std::vector<std::vector<float> > d_A;
+ bool d_tag_prop_select; //!< If true, handle the tag propagation ourselves
+
+ void propagate_tags_by_A(int noutput_items, size_t ninput_ports, size_t noutput_ports);
+
+ void msg_handler_A(pmt::pmt_t A);
+
+ public:
+ multiply_matrix_ff_impl(std::vector<std::vector<float> > A, gr::block::tag_propagation_policy_t tag_propagation_policy);
+ ~multiply_matrix_ff_impl();
+
+ const std::vector<std::vector<float> >& get_A() const { return d_A; };
+ bool set_A(const std::vector<std::vector<float> > &new_A);
+
+ void set_tag_propagation_policy(gr::block::tag_propagation_policy_t p);
+
+ int work(int noutput_items,
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items);
+ };
+
+ } // namespace blocks
+} // namespace gr
+
+#endif /* INCLUDED_BLOCKS_MULTIPLY_MATRIX_FF_IMPL_H */
+
diff --git a/gr-blocks/lib/mute_XX_impl.cc.t b/gr-blocks/lib/mute_XX_impl.cc.t
index af46dc221a..e7c2c4398b 100644
--- a/gr-blocks/lib/mute_XX_impl.cc.t
+++ b/gr-blocks/lib/mute_XX_impl.cc.t
@@ -46,6 +46,9 @@ namespace gr {
io_signature::make(1, 1, sizeof(@O_TYPE@))),
d_mute(mute)
{
+ message_port_register_in(pmt::intern("set_mute"));
+ set_msg_handler(pmt::intern("set_mute"),
+ boost::bind(&@NAME_IMPL@::set_mute_pmt, this, _1));
}
@NAME_IMPL@::~@NAME_IMPL@()
diff --git a/gr-blocks/lib/mute_XX_impl.h.t b/gr-blocks/lib/mute_XX_impl.h.t
index b519bb20a1..8234583bbf 100644
--- a/gr-blocks/lib/mute_XX_impl.h.t
+++ b/gr-blocks/lib/mute_XX_impl.h.t
@@ -41,6 +41,7 @@ namespace gr {
bool mute() const { return d_mute; }
void set_mute(bool mute) { d_mute = mute; }
+ void set_mute_pmt(pmt::pmt_t msg) { set_mute(pmt::to_bool(msg)); }
int work(int noutput_items,
gr_vector_const_void_star &input_items,
diff --git a/gr-blocks/lib/sub_ff_impl.cc b/gr-blocks/lib/sub_ff_impl.cc
new file mode 100644
index 0000000000..8ea1a47c8b
--- /dev/null
+++ b/gr-blocks/lib/sub_ff_impl.cc
@@ -0,0 +1,81 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2014 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <sub_ff_impl.h>
+#include <gnuradio/io_signature.h>
+#include <volk/volk.h>
+
+namespace gr {
+ namespace blocks {
+
+ sub_ff::sptr
+ sub_ff::make(size_t vlen)
+ {
+ return gnuradio::get_initial_sptr
+ (new sub_ff_impl(vlen));
+ }
+
+ sub_ff_impl::sub_ff_impl(size_t vlen)
+ : sync_block("@sub_ff",
+ io_signature::make(1, -1, sizeof(float)*vlen),
+ io_signature::make(1, 1, sizeof(float)*vlen)),
+ d_vlen(vlen)
+ {
+ const int alignment_multiple =
+ volk_get_alignment() / sizeof(float);
+ set_alignment(std::max(1, alignment_multiple));
+ }
+
+ int
+ sub_ff_impl::work(int noutput_items,
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items)
+ {
+ float *out = (float*)output_items[0];
+
+ int ninputs = input_items.size();
+ int noi = noutput_items*d_vlen;
+
+ //for(size_t i = 0; i < noutput_items*d_vlen; i++){
+ // @I_TYPE@ acc = ((@I_TYPE@ *) input_items[0])[i];
+ // for (int j = 1; j < ninputs; j++)
+ // acc -= ((@I_TYPE@ *) input_items[j])[i];
+ //
+ // *optr++ = (@O_TYPE@) acc;
+ //}
+
+ const float *in = (const float*)input_items[0];
+ memcpy(out, in, noi*sizeof(float));
+ for(int i = 1; i < ninputs; i++) {
+ in = (const float*)input_items[i];
+ volk_32f_x2_subtract_32f(out, out, in, noi);
+ }
+
+ return noutput_items;
+ }
+
+ } /* namespace blocks */
+} /* namespace gr */
diff --git a/gr-blocks/lib/sub_ff_impl.h b/gr-blocks/lib/sub_ff_impl.h
new file mode 100644
index 0000000000..b4eff66ae6
--- /dev/null
+++ b/gr-blocks/lib/sub_ff_impl.h
@@ -0,0 +1,47 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2014 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef INCLUDED_BLOCKS_SUB_FF_IMPL_H
+#define INCLUDED_BLOCKS_SUB_FF_IMPL_H
+
+#include <gnuradio/blocks/sub_ff.h>
+
+namespace gr {
+ namespace blocks {
+
+ class BLOCKS_API sub_ff_impl : public sub_ff
+ {
+ private:
+ size_t d_vlen;
+
+ public:
+ sub_ff_impl(size_t vlen);
+
+ int work(int noutput_items,
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items);
+ };
+
+ } /* namespace blocks */
+} /* namespace gr */
+
+#endif /* INCLUDED_BLOCKS_SUB_FF_IMPL_H */
diff --git a/gr-blocks/python/blocks/qa_add_mult_div_sub.py b/gr-blocks/python/blocks/qa_add_mult_div_sub.py
index 7c9b2beac0..8699b3a085 100755
--- a/gr-blocks/python/blocks/qa_add_mult_div_sub.py
+++ b/gr-blocks/python/blocks/qa_add_mult_div_sub.py
@@ -200,6 +200,78 @@ class test_add_mult_div_sub(gr_unittest.TestCase):
self.help_ii((src1_data, src2_data),
expected_result, op)
+ def test_sub_ii1(self):
+ src1_data = (1, 2, 3, 4, 5)
+ expected_result = (1, 2, 3, 4, 5)
+
+ src = blocks.vector_source_i(src1_data)
+ op = blocks.sub_ii()
+ dst = blocks.vector_sink_i()
+ self.tb.connect(src, op, dst)
+ self.tb.run()
+ result_data = dst.data()
+ self.assertEqual(expected_result, result_data)
+
+ def test_sub_ss(self):
+ src1_data = (1, 2, 3, 4, 5)
+ src2_data = (8, -3, 4, 8, 2)
+ expected_result = (-7, 5, -1, -4, 3)
+ op = blocks.sub_ss()
+ self.help_ss((src1_data, src2_data),
+ expected_result, op)
+
+ def test_sub_ss1(self):
+ src1_data = (1, 2, 3, 4, 5)
+ expected_result = (1, 2, 3, 4, 5)
+
+ src = blocks.vector_source_s(src1_data)
+ op = blocks.sub_ss()
+ dst = blocks.vector_sink_s()
+ self.tb.connect(src, op, dst)
+ self.tb.run()
+ result_data = dst.data()
+ self.assertEqual(expected_result, result_data)
+
+ def test_sub_ff(self):
+ src1_data = (1, 2, 3, 4, 5)
+ src2_data = (8, -3, 4, 8, 2)
+ expected_result = (-7, 5, -1, -4, 3)
+ op = blocks.sub_ff()
+ self.help_ff((src1_data, src2_data),
+ expected_result, op)
+
+ def test_sub_ff1(self):
+ src1_data = (1, 2, 3, 4, 5)
+ expected_result = (1, 2, 3, 4, 5)
+
+ src = blocks.vector_source_f(src1_data)
+ op = blocks.sub_ff()
+ dst = blocks.vector_sink_f()
+ self.tb.connect(src, op, dst)
+ self.tb.run()
+ result_data = dst.data()
+ self.assertEqual(expected_result, result_data)
+
+ def test_sub_cc(self):
+ src1_data = (1, 2, 3, 4, 5)
+ src2_data = (8, -3, 4, 8, 2)
+ expected_result = (-7, 5, -1, -4, 3)
+ op = blocks.sub_cc()
+ self.help_cc((src1_data, src2_data),
+ expected_result, op)
+
+ def test_sub_cc1(self):
+ src1_data = (1, 2, 3, 4, 5)
+ expected_result = (1, 2, 3, 4, 5)
+
+ src = blocks.vector_source_c(src1_data)
+ op = blocks.sub_cc()
+ dst = blocks.vector_sink_c()
+ self.tb.connect(src, op, dst)
+ self.tb.run()
+ result_data = dst.data()
+ self.assertEqual(expected_result, result_data)
+
def test_div_ff(self):
src1_data = ( 5, 9, -15, 1024)
src2_data = (10, 3, -5, 64)
diff --git a/gr-blocks/python/blocks/qa_max.py b/gr-blocks/python/blocks/qa_max.py
index 441582ac88..709dbee72e 100755
--- a/gr-blocks/python/blocks/qa_max.py
+++ b/gr-blocks/python/blocks/qa_max.py
@@ -46,7 +46,7 @@ class test_max(gr_unittest.TestCase):
result_data = dst.data()
self.assertEqual(expected_result, result_data)
- def test_002(self):
+ def stest_002(self):
src_data=(-100,-99,-98,-97,-96,-1)
expected_result = (float(max(src_data)),)
@@ -60,6 +60,120 @@ class test_max(gr_unittest.TestCase):
result_data = dst.data()
self.assertEqual(expected_result, result_data)
+ def stest_003(self):
+ src_data0 = (0, 2, -3, 0, 12, 0)
+ src_data1 = (1, 1, 1, 1, 1, 1)
+
+ expected_result = [float(max(x,y)) for x,y in zip(src_data0, src_data1)]
+
+ src0 = blocks.vector_source_f(src_data0)
+ src1 = blocks.vector_source_f(src_data1)
+ op = blocks.max_ff(1)
+ dst = blocks.vector_sink_f()
+
+ self.tb.connect(src0, (op, 0))
+ self.tb.connect(src1, (op, 1))
+ self.tb.connect(op, dst)
+ self.tb.run()
+ result_data = dst.data()
+ self.assertEqual(expected_result, result_data)
+
+ def stest_004(self):
+ dim = 2
+ src_data0 = (0, 2, -3, 0, 12, 0)
+ src_data1 = (1, 1, 1, 1, 1, 1)
+
+ expected_data = []
+ tmp = [float(max(x,y)) for x,y in zip(src_data0, src_data1)]
+ for i in xrange(len(tmp)/dim):
+ expected_data.append(float(max(tmp[i*dim:(i+1)*dim])))
+
+ src0 = blocks.vector_source_f(src_data0)
+ s2v0 = blocks.stream_to_vector(gr.sizeof_float,dim)
+ src1 = blocks.vector_source_f(src_data1)
+ s2v1 = blocks.stream_to_vector(gr.sizeof_float,dim)
+ op = blocks.max_ff(dim)
+ dst = blocks.vector_sink_f()
+
+ self.tb.connect(src0, s2v0, (op, 0))
+ self.tb.connect(src1, s2v1, (op, 1))
+ self.tb.connect(op, dst)
+ self.tb.run()
+ result_data = dst.data()
+ self.assertEqual(expected_result, result_data)
+
+
+ def stest_s001(self):
+ src_data = (0, 2, -3, 0, 12, 0)
+ expected_result = (max(src_data),)
+
+ src = blocks.vector_source_s(src_data)
+ s2v = blocks.stream_to_vector(gr.sizeof_short,len(src_data))
+ op = blocks.max_ss(len(src_data))
+ dst = blocks.vector_sink_s()
+
+ self.tb.connect(src, s2v, op, dst)
+ self.tb.run()
+ result_data = dst.data()
+ self.assertEqual(expected_result, result_data)
+
+ def stest_s002(self):
+ src_data=(-100,-99,-98,-97,-96,-1)
+ expected_result = (max(src_data),)
+
+ src = blocks.vector_source_s(src_data)
+ s2v = blocks.stream_to_vector(gr.sizeof_short, len(src_data))
+ op = blocks.max_ss(len(src_data))
+ dst = blocks.vector_sink_s()
+
+ self.tb.connect(src, s2v, op, dst)
+ self.tb.run()
+ result_data = dst.data()
+ self.assertEqual(expected_result, result_data)
+
+
+ def stest_s003(self):
+ src_data0 = (0, 2, -3, 0, 12, 0)
+ src_data1 = (1, 1, 1, 1, 1, 1)
+
+ expected_result = [max(x,y) for x,y in zip(src_data0, src_data1)]
+
+ src0 = blocks.vector_source_s(src_data0)
+ src1 = blocks.vector_source_s(src_data1)
+ op = blocks.max_ss(1)
+ dst = blocks.vector_sink_s()
+
+ self.tb.connect(src0, (op, 0))
+ self.tb.connect(src1, (op, 1))
+ self.tb.connect(op, dst)
+ self.tb.run()
+ result_data = dst.data()
+ self.assertEqual(expected_result, result_data)
+
+ def stest_s004(self):
+ dim = 2
+ src_data0 = (0, 2, -3, 0, 12, 0)
+ src_data1 = (1, 1, 1, 1, 1, 1)
+
+ expected_data = []
+ tmp = [max(x,y) for x,y in zip(src_data0, src_data1)]
+ for i in xrange(len(tmp)/dim):
+ expected_data.append(max(tmp[i*dim:(i+1)*dim]))
+
+ src0 = blocks.vector_source_s(src_data0)
+ s2v0 = blocks.stream_to_vector(gr.sizeof_short,dim)
+ src1 = blocks.vector_source_s(src_data1)
+ s2v1 = blocks.stream_to_vector(gr.sizeof_short,dim)
+ op = blocks.max_ss(dim)
+ dst = blocks.vector_sink_s()
+
+ self.tb.connect(src0, s2v0, (op, 0))
+ self.tb.connect(src1, s2v1, (op, 1))
+ self.tb.connect(op, dst)
+ self.tb.run()
+ result_data = dst.data()
+ self.assertEqual(expected_result, result_data)
+
+
if __name__ == '__main__':
gr_unittest.run(test_max, "test_max.xml")
-
diff --git a/gr-blocks/python/blocks/qa_min.py b/gr-blocks/python/blocks/qa_min.py
new file mode 100644
index 0000000000..642782a1a1
--- /dev/null
+++ b/gr-blocks/python/blocks/qa_min.py
@@ -0,0 +1,178 @@
+#!/usr/bin/env python
+#
+# Copyright 2014 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+#
+
+from gnuradio import gr, gr_unittest, blocks
+
+import math
+
+class test_min(gr_unittest.TestCase):
+
+ def setUp(self):
+ self.tb = gr.top_block()
+
+ def tearDown(self):
+ self.tb = None
+
+ def test_001(self):
+ src_data = (0, 0.2, -0.25, 0, 12, 0)
+ expected_result = (float(min(src_data)),)
+
+ src = blocks.vector_source_f(src_data)
+ s2v = blocks.stream_to_vector(gr.sizeof_float, len(src_data))
+ op = blocks.min_ff(len(src_data))
+ dst = blocks.vector_sink_f()
+
+ self.tb.connect(src, s2v, op, dst)
+ self.tb.run()
+ result_data = dst.data()
+ self.assertEqual(expected_result, result_data)
+
+ def stest_002(self):
+ src_data=(-100,-99,-98,-97,-96,-1)
+ expected_result = (float(min(src_data)),)
+
+ src = blocks.vector_source_f(src_data)
+ s2v = blocks.stream_to_vector(gr.sizeof_float, len(src_data))
+ op = blocks.min_ff(len(src_data))
+ dst = blocks.vector_sink_f()
+
+ self.tb.connect(src, s2v, op, dst)
+ self.tb.run()
+ result_data = dst.data()
+ self.assertEqual(expected_result, result_data)
+
+ def stest_003(self):
+ src_data0 = (0, 2, -3, 0, 12, 0)
+ src_data1 = (1, 1, 1, 1, 1, 1)
+
+ expected_result = [float(min(x,y)) for x,y in zip(src_data0, src_data1)]
+
+ src0 = blocks.vector_source_f(src_data0)
+ src1 = blocks.vector_source_f(src_data1)
+ op = blocks.min_ff(1)
+ dst = blocks.vector_sink_f()
+
+ self.tb.connect(src0, (op, 0))
+ self.tb.connect(src1, (op, 1))
+ self.tb.connect(op, dst)
+ self.tb.run()
+ result_data = dst.data()
+ self.assertEqual(expected_result, result_data)
+
+ def stest_004(self):
+ dim = 2
+ src_data0 = (0, 2, -3, 0, 12, 0)
+ src_data1 = (1, 1, 1, 1, 1, 1)
+
+ expected_data = []
+ tmp = [float(min(x,y)) for x,y in zip(src_data0, src_data1)]
+ for i in xrange(len(tmp)/dim):
+ expected_data.append(float(min(tmp[i*dim:(i+1)*dim])))
+
+ src0 = blocks.vector_source_f(src_data0)
+ s2v0 = blocks.stream_to_vector(gr.sizeof_float,dim)
+ src1 = blocks.vector_source_f(src_data1)
+ s2v1 = blocks.stream_to_vector(gr.sizeof_float,dim)
+ op = blocks.min_ff(dim)
+ dst = blocks.vector_sink_f()
+
+ self.tb.connect(src0, s2v0, (op, 0))
+ self.tb.connect(src1, s2v1, (op, 1))
+ self.tb.connect(op, dst)
+ self.tb.run()
+ result_data = dst.data()
+ self.assertEqual(expected_result, result_data)
+
+
+ def stest_s001(self):
+ src_data = (0, 2, -3, 0, 12, 0)
+ expected_result = (min(src_data),)
+
+ src = blocks.vector_source_s(src_data)
+ s2v = blocks.stream_to_vector(gr.sizeof_short,len(src_data))
+ op = blocks.min_ss(len(src_data))
+ dst = blocks.vector_sink_s()
+
+ self.tb.connect(src, s2v, op, dst)
+ self.tb.run()
+ result_data = dst.data()
+ self.assertEqual(expected_result, result_data)
+
+ def stest_s002(self):
+ src_data=(-100,-99,-98,-97,-96,-1)
+ expected_result = (min(src_data),)
+
+ src = blocks.vector_source_s(src_data)
+ s2v = blocks.stream_to_vector(gr.sizeof_short, len(src_data))
+ op = blocks.min_ss(len(src_data))
+ dst = blocks.vector_sink_s()
+
+ self.tb.connect(src, s2v, op, dst)
+ self.tb.run()
+ result_data = dst.data()
+ self.assertEqual(expected_result, result_data)
+
+
+ def stest_s003(self):
+ src_data0 = (0, 2, -3, 0, 12, 0)
+ src_data1 = (1, 1, 1, 1, 1, 1)
+
+ expected_result = [min(x,y) for x,y in zip(src_data0, src_data1)]
+
+ src0 = blocks.vector_source_s(src_data0)
+ src1 = blocks.vector_source_s(src_data1)
+ op = blocks.min_ss(1)
+ dst = blocks.vector_sink_s()
+
+ self.tb.connect(src0, (op, 0))
+ self.tb.connect(src1, (op, 1))
+ self.tb.connect(op, dst)
+ self.tb.run()
+ result_data = dst.data()
+ self.assertEqual(expected_result, result_data)
+
+ def stest_s004(self):
+ dim = 2
+ src_data0 = (0, 2, -3, 0, 12, 0)
+ src_data1 = (1, 1, 1, 1, 1, 1)
+
+ expected_data = []
+ tmp = [min(x,y) for x,y in zip(src_data0, src_data1)]
+ for i in xrange(len(tmp)/dim):
+ expected_data.append(min(tmp[i*dim:(i+1)*dim]))
+
+ src0 = blocks.vector_source_s(src_data0)
+ s2v0 = blocks.stream_to_vector(gr.sizeof_short,dim)
+ src1 = blocks.vector_source_s(src_data1)
+ s2v1 = blocks.stream_to_vector(gr.sizeof_short,dim)
+ op = blocks.min_ss(dim)
+ dst = blocks.vector_sink_s()
+
+ self.tb.connect(src0, s2v0, (op, 0))
+ self.tb.connect(src1, s2v1, (op, 1))
+ self.tb.connect(op, dst)
+ self.tb.run()
+ result_data = dst.data()
+ self.assertEqual(expected_result, result_data)
+
+if __name__ == '__main__':
+ gr_unittest.run(test_min, "test_min.xml")
diff --git a/gr-blocks/python/blocks/qa_multiply_matrix_ff.py b/gr-blocks/python/blocks/qa_multiply_matrix_ff.py
new file mode 100755
index 0000000000..fdf020552a
--- /dev/null
+++ b/gr-blocks/python/blocks/qa_multiply_matrix_ff.py
@@ -0,0 +1,172 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+#
+# Copyright 2014 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+#
+
+import time
+import numpy
+import os
+import pmt
+from gnuradio import gr, gr_unittest
+from gnuradio import blocks
+
+class test_multiply_matrix_ff (gr_unittest.TestCase):
+
+ def setUp (self):
+ self.tb = gr.top_block ()
+ self.multiplier = None
+
+ def tearDown (self):
+ self.tb = None
+ self.multiplier = None
+
+ def run_once(self, X_in, A, tpp=gr.TPP_DONT, A2=None, tags=None, msg_A=None):
+ """ Run the test for given input-, output- and matrix values.
+ Every row from X_in is considered an input signal on a port. """
+ X_in = numpy.matrix(X_in)
+ A_matrix = numpy.matrix(A)
+ (N, M) = A_matrix.shape
+ self.assertTrue(N == X_in.shape[0])
+ # Calc expected
+ Y_out_exp = numpy.matrix(numpy.zeros((M, X_in.shape[1])))
+ self.multiplier = blocks.multiply_matrix_ff(A, tpp)
+ if A2 is not None:
+ self.multiplier.set_A(A2)
+ A = A2
+ A_matrix = numpy.matrix(A)
+ for i in xrange(N):
+ if tags is None:
+ these_tags = ()
+ else:
+ these_tags = (tags[i],)
+ self.tb.connect(blocks.vector_source_f(X_in[i].tolist()[0], tags=these_tags), (self.multiplier, i))
+ sinks = []
+ for i in xrange(M):
+ sinks.append(blocks.vector_sink_f())
+ self.tb.connect((self.multiplier, i), sinks[i])
+ # Run and check
+ self.tb.run()
+ for i in xrange(X_in.shape[1]):
+ Y_out_exp[:,i] = A_matrix * X_in[:,i]
+ Y_out = [list(x.data()) for x in sinks]
+ if tags is not None:
+ self.the_tags = []
+ for i in xrange(M):
+ self.the_tags.append(sinks[i].tags())
+ self.assertEqual(list(Y_out), Y_out_exp.tolist())
+
+
+ def test_001_t (self):
+ """ Simplest possible check: N==M, unit matrix """
+ X_in = (
+ (1, 2, 3, 4),
+ (5, 6, 7, 8),
+ )
+ A = (
+ (1, 0),
+ (0, 1),
+ )
+ self.run_once(X_in, A)
+
+ def test_002_t (self):
+ """ Switch check: N==M, flipped unit matrix """
+ X_in = (
+ (1, 2, 3, 4),
+ (5, 6, 7, 8),
+ )
+ A = (
+ (0, 1),
+ (1, 0),
+ )
+ self.run_once(X_in, A)
+
+ def test_003_t (self):
+ """ Average """
+ X_in = (
+ (1, 1, 1, 1),
+ (2, 2, 2, 2),
+ )
+ A = (
+ (0.5, 0.5),
+ (0.5, 0.5),
+ )
+ self.run_once(X_in, A)
+
+ def test_004_t (self):
+ """ Set """
+ X_in = (
+ (1, 2, 3, 4),
+ (5, 6, 7, 8),
+ )
+ A1 = (
+ (1, 0),
+ (0, 1),
+ )
+ A2 = (
+ (0, 1),
+ (1, 0),
+ )
+ self.run_once(X_in, A1, A2=A2)
+
+ def test_005_t (self):
+ """ Tags """
+ X_in = (
+ (1, 2, 3, 4),
+ (5, 6, 7, 8),
+ )
+ A = (
+ (0, 1), # Flip them round
+ (1, 0),
+ )
+ tag1 = gr.tag_t()
+ tag1.offset = 0
+ tag1.key = pmt.intern("in1")
+ tag1.value = pmt.PMT_T
+ tag2 = gr.tag_t()
+ tag2.offset = 0
+ tag2.key = pmt.intern("in2")
+ tag2.value = pmt.PMT_T
+ self.run_once(X_in, A, tpp=999, tags=(tag1, tag2))
+ self.assertTrue(pmt.equal(tag1.key, self.the_tags[1][0].key))
+ self.assertTrue(pmt.equal(tag2.key, self.the_tags[0][0].key))
+
+ #def test_006_t (self):
+ #""" Message passing """
+ #X_in = (
+ #(1, 2, 3, 4),
+ #(5, 6, 7, 8),
+ #)
+ #A1 = (
+ #(1, 0),
+ #(0, 1),
+ #)
+ #msg_A = (
+ #(0, 1),
+ #(1, 0),
+ #)
+ #self.run_once(X_in, A1, msg_A=msg_A)
+
+
+
+if __name__ == '__main__':
+ #gr_unittest.run(test_multiply_matrix_ff, "test_multiply_matrix_ff.xml")
+ gr_unittest.run(test_multiply_matrix_ff)
+
diff --git a/gr-blocks/swig/blocks_swig3.i b/gr-blocks/swig/blocks_swig3.i
index ab921a559a..9c0208388e 100644
--- a/gr-blocks/swig/blocks_swig3.i
+++ b/gr-blocks/swig/blocks_swig3.i
@@ -47,6 +47,9 @@
#include "gnuradio/blocks/max_ff.h"
#include "gnuradio/blocks/max_ii.h"
#include "gnuradio/blocks/max_ss.h"
+#include "gnuradio/blocks/min_ff.h"
+#include "gnuradio/blocks/min_ii.h"
+#include "gnuradio/blocks/min_ss.h"
#include "gnuradio/blocks/moving_average_cc.h"
#include "gnuradio/blocks/moving_average_ff.h"
#include "gnuradio/blocks/moving_average_ii.h"
@@ -64,6 +67,7 @@
#include "gnuradio/blocks/multiply_const_vii.h"
#include "gnuradio/blocks/multiply_const_vff.h"
#include "gnuradio/blocks/multiply_const_vcc.h"
+#include "gnuradio/blocks/multiply_matrix_ff.h"
#include "gnuradio/blocks/mute_ss.h"
#include "gnuradio/blocks/mute_ii.h"
#include "gnuradio/blocks/mute_ff.h"
@@ -89,6 +93,9 @@
%include "gnuradio/blocks/max_ff.h"
%include "gnuradio/blocks/max_ii.h"
%include "gnuradio/blocks/max_ss.h"
+%include "gnuradio/blocks/min_ff.h"
+%include "gnuradio/blocks/min_ii.h"
+%include "gnuradio/blocks/min_ss.h"
%include "gnuradio/blocks/moving_average_cc.h"
%include "gnuradio/blocks/moving_average_ff.h"
%include "gnuradio/blocks/moving_average_ii.h"
@@ -106,6 +113,7 @@
%include "gnuradio/blocks/multiply_const_vii.h"
%include "gnuradio/blocks/multiply_const_vff.h"
%include "gnuradio/blocks/multiply_const_vcc.h"
+%include "gnuradio/blocks/multiply_matrix_ff.h"
%include "gnuradio/blocks/mute_ss.h"
%include "gnuradio/blocks/mute_ii.h"
%include "gnuradio/blocks/mute_ff.h"
@@ -130,6 +138,9 @@ GR_SWIG_BLOCK_MAGIC2(blocks, lfsr_32k_source_s);
GR_SWIG_BLOCK_MAGIC2(blocks, max_ff);
GR_SWIG_BLOCK_MAGIC2(blocks, max_ii);
GR_SWIG_BLOCK_MAGIC2(blocks, max_ss);
+GR_SWIG_BLOCK_MAGIC2(blocks, min_ff);
+GR_SWIG_BLOCK_MAGIC2(blocks, min_ii);
+GR_SWIG_BLOCK_MAGIC2(blocks, min_ss);
GR_SWIG_BLOCK_MAGIC2(blocks, moving_average_cc);
GR_SWIG_BLOCK_MAGIC2(blocks, moving_average_ff);
GR_SWIG_BLOCK_MAGIC2(blocks, moving_average_ii);
@@ -147,6 +158,7 @@ GR_SWIG_BLOCK_MAGIC2(blocks, multiply_const_vss);
GR_SWIG_BLOCK_MAGIC2(blocks, multiply_const_vii);
GR_SWIG_BLOCK_MAGIC2(blocks, multiply_const_vff);
GR_SWIG_BLOCK_MAGIC2(blocks, multiply_const_vcc);
+GR_SWIG_BLOCK_MAGIC2(blocks, multiply_matrix_ff);
GR_SWIG_BLOCK_MAGIC2(blocks, mute_ss);
GR_SWIG_BLOCK_MAGIC2(blocks, mute_ii);
GR_SWIG_BLOCK_MAGIC2(blocks, mute_ff);
diff --git a/gr-channels/examples/demo_spec_an.grc b/gr-channels/examples/demo_spec_an.grc
index 572ded6e67..0a13f64369 100644
--- a/gr-channels/examples/demo_spec_an.grc
+++ b/gr-channels/examples/demo_spec_an.grc
@@ -1,39 +1,90 @@
<?xml version='1.0' encoding='ASCII'?>
<flow_graph>
- <timestamp>Thu Aug 1 13:13:07 2013</timestamp>
+ <timestamp>Wed Jul 9 15:47:18 2014</timestamp>
<block>
- <key>blocks_add_xx</key>
+ <key>options</key>
<param>
<key>id</key>
- <value>blocks_add_xx_0</value>
+ <value>demo_spec_an</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
+ <key>title</key>
+ <value></value>
</param>
<param>
- <key>num_inputs</key>
- <value>2</value>
+ <key>author</key>
+ <value>mettus</value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>description</key>
+ <value></value>
</param>
<param>
- <key>affinity</key>
+ <key>window_size</key>
+ <value>1280, 1024</value>
+ </param>
+ <param>
+ <key>generate_options</key>
+ <value>qt_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>minoutbuf</key>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(0, -1)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
<value>0</value>
</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>100000</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
<param>
<key>_coordinate</key>
- <value>(251, 344)</value>
+ <value>(234, 0)</value>
</param>
<param>
<key>_rotation</key>
@@ -55,8 +106,12 @@
<value>1000</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(17, 84)</value>
+ <value>(151, 0)</value>
</param>
<param>
<key>_rotation</key>
@@ -64,22 +119,42 @@
</param>
</block>
<block>
- <key>variable</key>
+ <key>blocks_rms_xx</key>
<param>
<key>id</key>
- <value>samp_rate</value>
+ <value>blocks_rms_xx_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>100000</value>
+ <key>type</key>
+ <value>complex</value>
+ </param>
+ <param>
+ <key>alpha</key>
+ <value>.0001</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(10, 170)</value>
+ <value>(491, 138)</value>
</param>
<param>
<key>_rotation</key>
@@ -101,8 +176,12 @@
<value>import math</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(238, 60)</value>
+ <value>(-1, 77)</value>
</param>
<param>
<key>_rotation</key>
@@ -110,10 +189,10 @@
</param>
</block>
<block>
- <key>analog_noise_source_x</key>
+ <key>blocks_rms_xx</key>
<param>
<key>id</key>
- <value>analog_noise_source_x_0</value>
+ <value>blocks_rms_xx_0_0</value>
</param>
<param>
<key>_enabled</key>
@@ -124,16 +203,12 @@
<value>complex</value>
</param>
<param>
- <key>noise_type</key>
- <value>analog.GR_GAUSSIAN</value>
- </param>
- <param>
- <key>amp</key>
- <value>math.pow(10.0,snr/20.0)/math.sqrt(2.0)</value>
+ <key>alpha</key>
+ <value>.0001</value>
</param>
<param>
- <key>seed</key>
- <value>42</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>affinity</key>
@@ -144,8 +219,12 @@
<value>0</value>
</param>
<param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(16, 295)</value>
+ <value>(458, 301)</value>
</param>
<param>
<key>_rotation</key>
@@ -153,54 +232,46 @@
</param>
</block>
<block>
- <key>variable_slider</key>
+ <key>blocks_add_xx</key>
<param>
<key>id</key>
- <value>freq_offset</value>
+ <value>blocks_add_xx_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>label</key>
- <value>Freq_offset</value>
- </param>
- <param>
- <key>value</key>
- <value>0</value>
- </param>
- <param>
- <key>min</key>
- <value>-5*samp_rate/fft_size</value>
+ <key>type</key>
+ <value>complex</value>
</param>
<param>
- <key>max</key>
- <value>5*samp_rate/fft_size</value>
+ <key>num_inputs</key>
+ <value>2</value>
</param>
<param>
- <key>num_steps</key>
- <value>200</value>
+ <key>vlen</key>
+ <value>1</value>
</param>
<param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>grid_pos</key>
- <value></value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>notebook</key>
- <value></value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(314, 514)</value>
+ <value>(244, 187)</value>
</param>
<param>
<key>_rotation</key>
@@ -208,10 +279,10 @@
</param>
</block>
<block>
- <key>analog_sig_source_x</key>
+ <key>analog_noise_source_x</key>
<param>
<key>id</key>
- <value>analog_sig_source_x_0</value>
+ <value>analog_noise_source_x_0</value>
</param>
<param>
<key>_enabled</key>
@@ -222,24 +293,20 @@
<value>complex</value>
</param>
<param>
- <key>samp_rate</key>
- <value>samp_rate</value>
- </param>
- <param>
- <key>waveform</key>
- <value>analog.GR_COS_WAVE</value>
+ <key>noise_type</key>
+ <value>analog.GR_GAUSSIAN</value>
</param>
<param>
- <key>freq</key>
- <value>float(samp_rate)/float(fft_size)*26+freq_offset</value>
+ <key>amp</key>
+ <value>math.pow(10.0,snr/20.0)/math.sqrt(2.0)</value>
</param>
<param>
- <key>amp</key>
- <value>1.0</value>
+ <key>seed</key>
+ <value>42</value>
</param>
<param>
- <key>offset</key>
- <value>0</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>affinity</key>
@@ -250,8 +317,12 @@
<value>0</value>
</param>
<param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(16, 386)</value>
+ <value>(11, 138)</value>
</param>
<param>
<key>_rotation</key>
@@ -281,6 +352,14 @@
<value>1</value>
</param>
<param>
+ <key>ignoretag</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
@@ -289,8 +368,12 @@
<value>0</value>
</param>
<param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(370, 357)</value>
+ <value>(363, 200)</value>
</param>
<param>
<key>_rotation</key>
@@ -298,124 +381,334 @@
</param>
</block>
<block>
- <key>variable_slider</key>
+ <key>qtgui_time_sink_x</key>
<param>
<key>id</key>
- <value>snr</value>
+ <value>qtgui_time_sink_x_0</value>
</param>
<param>
<key>_enabled</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>complex</value>
+ </param>
+ <param>
+ <key>name</key>
+ <value>Scope Plot</value>
+ </param>
+ <param>
+ <key>size</key>
+ <value>1024</value>
+ </param>
+ <param>
+ <key>srate</key>
+ <value>samp_rate</value>
+ </param>
+ <param>
+ <key>autoscale</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>ymin</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>ymax</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>nconnections</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>update_time</key>
+ <value>0.10</value>
+ </param>
+ <param>
+ <key>entags</key>
<value>True</value>
</param>
<param>
- <key>label</key>
- <value>"Noise Level"</value>
+ <key>gui_hint</key>
+ <value></value>
</param>
<param>
- <key>value</key>
+ <key>tr_mode</key>
+ <value>qtgui.TRIG_MODE_FREE</value>
+ </param>
+ <param>
+ <key>tr_slope</key>
+ <value>qtgui.TRIG_SLOPE_POS</value>
+ </param>
+ <param>
+ <key>tr_level</key>
+ <value>0.0</value>
+ </param>
+ <param>
+ <key>tr_delay</key>
<value>0</value>
</param>
<param>
- <key>min</key>
- <value>-100</value>
+ <key>tr_chan</key>
+ <value>0</value>
</param>
<param>
- <key>max</key>
- <value>100</value>
+ <key>tr_tag</key>
+ <value>""</value>
</param>
<param>
- <key>num_steps</key>
- <value>200</value>
+ <key>label1</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width1</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color1</key>
+ <value>"blue"</value>
+ </param>
+ <param>
+ <key>style1</key>
+ <value>1</value>
</param>
<param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
+ <key>marker1</key>
+ <value>-1</value>
</param>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>alpha1</key>
+ <value>1.0</value>
</param>
<param>
- <key>grid_pos</key>
+ <key>label2</key>
<value></value>
</param>
<param>
- <key>notebook</key>
+ <key>width2</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color2</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>style2</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker2</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha2</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label3</key>
<value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(167, 510)</value>
+ <key>width3</key>
+ <value>1</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>color3</key>
+ <value>"green"</value>
</param>
- </block>
- <block>
- <key>blocks_rms_xx</key>
<param>
- <key>id</key>
- <value>blocks_rms_xx_0</value>
+ <key>style3</key>
+ <value>1</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>marker3</key>
+ <value>-1</value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
+ <key>alpha3</key>
+ <value>1.0</value>
</param>
<param>
- <key>alpha</key>
- <value>.0001</value>
+ <key>label4</key>
+ <value></value>
</param>
<param>
- <key>affinity</key>
+ <key>width4</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color4</key>
+ <value>"black"</value>
+ </param>
+ <param>
+ <key>style4</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker4</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha4</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label5</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>width5</key>
+ <value>1</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(491, 138)</value>
+ <key>color5</key>
+ <value>"cyan"</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>style5</key>
+ <value>1</value>
</param>
- </block>
- <block>
- <key>blocks_rms_xx</key>
<param>
- <key>id</key>
- <value>blocks_rms_xx_0_0</value>
+ <key>marker5</key>
+ <value>-1</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>alpha5</key>
+ <value>1.0</value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
+ <key>label6</key>
+ <value></value>
</param>
<param>
- <key>alpha</key>
- <value>.0001</value>
+ <key>width6</key>
+ <value>1</value>
</param>
<param>
- <key>affinity</key>
+ <key>color6</key>
+ <value>"magenta"</value>
+ </param>
+ <param>
+ <key>style6</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker6</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha6</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label7</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>width7</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color7</key>
+ <value>"yellow"</value>
+ </param>
+ <param>
+ <key>style7</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker7</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha7</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label8</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color8</key>
+ <value>"dark red"</value>
+ </param>
+ <param>
+ <key>style8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker8</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha8</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label9</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color9</key>
+ <value>"dark green"</value>
+ </param>
+ <param>
+ <key>style9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker9</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha9</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label10</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color10</key>
+ <value>"blue"</value>
+ </param>
+ <param>
+ <key>style10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker10</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha10</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(465, 458)</value>
+ <value>(853, 100)</value>
</param>
<param>
<key>_rotation</key>
@@ -445,6 +738,10 @@
<value>2</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
@@ -453,8 +750,12 @@
<value>0</value>
</param>
<param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(680, 630)</value>
+ <value>(665, 388)</value>
</param>
<param>
<key>_rotation</key>
@@ -484,6 +785,10 @@
<value>1</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
@@ -492,8 +797,12 @@
<value>0</value>
</param>
<param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(813, 640)</value>
+ <value>(814, 393)</value>
</param>
<param>
<key>_rotation</key>
@@ -501,81 +810,159 @@
</param>
</block>
<block>
- <key>wxgui_numbersink2</key>
+ <key>variable_qtgui_range</key>
<param>
<key>id</key>
- <value>snr_disp</value>
+ <value>snr</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>float</value>
+ <key>label</key>
+ <value>Noise Level</value>
</param>
<param>
- <key>title</key>
- <value>SNR</value>
+ <key>value</key>
+ <value>0</value>
</param>
<param>
- <key>units</key>
- <value>dB</value>
+ <key>start</key>
+ <value>-100</value>
</param>
<param>
- <key>samp_rate</key>
- <value>samp_rate</value>
+ <key>stop</key>
+ <value>100</value>
</param>
<param>
- <key>min_value</key>
- <value>-100</value>
+ <key>step</key>
+ <value>1</value>
</param>
<param>
- <key>max_value</key>
- <value>100</value>
+ <key>widget</key>
+ <value>counter_slider</value>
</param>
<param>
- <key>factor</key>
- <value>1.0</value>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
+ </param>
+ <param>
+ <key>min_len</key>
+ <value>200</value>
</param>
<param>
- <key>decimal_places</key>
- <value>5</value>
+ <key>gui_hint</key>
+ <value></value>
</param>
<param>
- <key>ref_level</key>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(348, 0)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
<value>0</value>
</param>
+ </block>
+ <block>
+ <key>variable_qtgui_range</key>
<param>
- <key>number_rate</key>
- <value>15</value>
+ <key>id</key>
+ <value>freq_offset</value>
</param>
<param>
- <key>peak_hold</key>
- <value>False</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>average</key>
- <value>False</value>
+ <key>label</key>
+ <value>Frequency Offset</value>
</param>
<param>
- <key>avg_alpha</key>
+ <key>value</key>
<value>0</value>
</param>
<param>
- <key>show_gauge</key>
- <value>False</value>
+ <key>start</key>
+ <value>-5*samp_rate/fft_size</value>
+ </param>
+ <param>
+ <key>stop</key>
+ <value>5*samp_rate/fft_size</value>
+ </param>
+ <param>
+ <key>step</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>widget</key>
+ <value>counter_slider</value>
+ </param>
+ <param>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
</param>
<param>
- <key>win_size</key>
+ <key>min_len</key>
+ <value>200</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
<value></value>
</param>
<param>
- <key>grid_pos</key>
+ <key>alias</key>
<value></value>
</param>
<param>
- <key>notebook</key>
+ <key>_coordinate</key>
+ <value>(487, 0)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>analog_sig_source_x</key>
+ <param>
+ <key>id</key>
+ <value>analog_sig_source_x_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>complex</value>
+ </param>
+ <param>
+ <key>samp_rate</key>
+ <value>samp_rate</value>
+ </param>
+ <param>
+ <key>waveform</key>
+ <value>analog.GR_COS_WAVE</value>
+ </param>
+ <param>
+ <key>freq</key>
+ <value>float(samp_rate)/float(fft_size)*26+freq_offset</value>
+ </param>
+ <param>
+ <key>amp</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>offset</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>alias</key>
<value></value>
</param>
<param>
@@ -583,8 +970,16 @@
<value></value>
</param>
<param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(907, 654)</value>
+ <value>(12, 228)</value>
</param>
<param>
<key>_rotation</key>
@@ -592,10 +987,10 @@
</param>
</block>
<block>
- <key>wxgui_numbersink2</key>
+ <key>qtgui_number_sink</key>
<param>
<key>id</key>
- <value>wxgui_numbersink2_0</value>
+ <value>qtgui_number_sink_snr</value>
</param>
<param>
<key>_enabled</key>
@@ -606,67 +1001,119 @@
<value>float</value>
</param>
<param>
- <key>title</key>
- <value>Noise Amplitude</value>
+ <key>autoscale</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>avg</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>graph_type</key>
+ <value>qtgui.NUM_GRAPH_HORIZ</value>
+ </param>
+ <param>
+ <key>nconnections</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>min</key>
+ <value>-1</value>
</param>
<param>
- <key>units</key>
+ <key>max</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>update_time</key>
+ <value>0.10</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
<value></value>
</param>
<param>
- <key>samp_rate</key>
- <value>samp_rate</value>
+ <key>label1</key>
+ <value>SNR</value>
</param>
<param>
- <key>min_value</key>
- <value>-100</value>
+ <key>color1</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>max_value</key>
- <value>100</value>
+ <key>label2</key>
+ <value></value>
</param>
<param>
- <key>factor</key>
- <value>1.0</value>
+ <key>color2</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>decimal_places</key>
- <value>5</value>
+ <key>label3</key>
+ <value></value>
</param>
<param>
- <key>ref_level</key>
- <value>0</value>
+ <key>color3</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>number_rate</key>
- <value>15</value>
+ <key>label4</key>
+ <value></value>
</param>
<param>
- <key>peak_hold</key>
- <value>False</value>
+ <key>color4</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>average</key>
- <value>False</value>
+ <key>label5</key>
+ <value></value>
</param>
<param>
- <key>avg_alpha</key>
- <value>0</value>
+ <key>color5</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>show_gauge</key>
- <value>False</value>
+ <key>label6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color6</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>label7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color7</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>label8</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color8</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>win_size</key>
+ <key>label9</key>
<value></value>
</param>
<param>
- <key>grid_pos</key>
+ <key>color9</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>label10</key>
<value></value>
</param>
<param>
- <key>notebook</key>
+ <key>color10</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>alias</key>
<value></value>
</param>
<param>
@@ -675,7 +1122,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(774, 46)</value>
+ <value>(948, 385)</value>
</param>
<param>
<key>_rotation</key>
@@ -683,10 +1130,10 @@
</param>
</block>
<block>
- <key>wxgui_numbersink2</key>
+ <key>qtgui_freq_sink_x</key>
<param>
<key>id</key>
- <value>wxgui_numbersink2_0_0</value>
+ <value>qtgui_freq_sink_x_0</value>
</param>
<param>
<key>_enabled</key>
@@ -694,150 +1141,219 @@
</param>
<param>
<key>type</key>
- <value>float</value>
+ <value>complex</value>
</param>
<param>
- <key>title</key>
- <value>Signal Amplitude</value>
+ <key>name</key>
+ <value>FFT Plot</value>
</param>
<param>
- <key>units</key>
- <value></value>
+ <key>fftsize</key>
+ <value>1024</value>
</param>
<param>
- <key>samp_rate</key>
- <value>samp_rate</value>
+ <key>wintype</key>
+ <value>firdes.WIN_FLATTOP</value>
</param>
<param>
- <key>min_value</key>
- <value>-100</value>
+ <key>fc</key>
+ <value>0</value>
</param>
<param>
- <key>max_value</key>
- <value>100</value>
+ <key>bw</key>
+ <value>1.0</value>
</param>
<param>
- <key>factor</key>
+ <key>autoscale</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>average</key>
<value>1.0</value>
</param>
<param>
- <key>decimal_places</key>
- <value>5</value>
+ <key>ymin</key>
+ <value>-140</value>
</param>
<param>
- <key>ref_level</key>
- <value>0</value>
+ <key>ymax</key>
+ <value>10</value>
</param>
<param>
- <key>number_rate</key>
- <value>15</value>
+ <key>nconnections</key>
+ <value>1</value>
</param>
<param>
- <key>peak_hold</key>
- <value>False</value>
+ <key>update_time</key>
+ <value>0.10</value>
</param>
<param>
- <key>average</key>
- <value>False</value>
+ <key>gui_hint</key>
+ <value></value>
</param>
<param>
- <key>avg_alpha</key>
- <value>0</value>
+ <key>label1</key>
+ <value></value>
</param>
<param>
- <key>show_gauge</key>
- <value>False</value>
+ <key>width1</key>
+ <value>1</value>
</param>
<param>
- <key>win_size</key>
- <value></value>
+ <key>color1</key>
+ <value>"blue"</value>
</param>
<param>
- <key>grid_pos</key>
+ <key>alpha1</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label2</key>
<value></value>
</param>
<param>
- <key>notebook</key>
+ <key>width2</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color2</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>alpha2</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label3</key>
<value></value>
</param>
<param>
- <key>affinity</key>
+ <key>width3</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color3</key>
+ <value>"green"</value>
+ </param>
+ <param>
+ <key>alpha3</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label4</key>
<value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(774, 452)</value>
+ <key>width4</key>
+ <value>1</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>color4</key>
+ <value>"black"</value>
</param>
- </block>
- <block>
- <key>wxgui_scopesink2</key>
<param>
- <key>id</key>
- <value>wxgui_scopesink2_0</value>
+ <key>alpha4</key>
+ <value>1.0</value>
</param>
<param>
- <key>_enabled</key>
- <value>False</value>
+ <key>label5</key>
+ <value></value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
+ <key>width5</key>
+ <value>1</value>
</param>
<param>
- <key>title</key>
- <value>Scope Plot</value>
+ <key>color5</key>
+ <value>"cyan"</value>
</param>
<param>
- <key>samp_rate</key>
- <value>samp_rate</value>
+ <key>alpha5</key>
+ <value>1.0</value>
</param>
<param>
- <key>v_scale</key>
- <value>0</value>
+ <key>label6</key>
+ <value></value>
</param>
<param>
- <key>v_offset</key>
- <value>0</value>
+ <key>width6</key>
+ <value>1</value>
</param>
<param>
- <key>t_scale</key>
- <value>0</value>
+ <key>color6</key>
+ <value>"magenta"</value>
</param>
<param>
- <key>ac_couple</key>
- <value>False</value>
+ <key>alpha6</key>
+ <value>1.0</value>
</param>
<param>
- <key>xy_mode</key>
- <value>False</value>
+ <key>label7</key>
+ <value></value>
</param>
<param>
- <key>num_inputs</key>
+ <key>width7</key>
<value>1</value>
</param>
<param>
- <key>win_size</key>
+ <key>color7</key>
+ <value>"yellow"</value>
+ </param>
+ <param>
+ <key>alpha7</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label8</key>
<value></value>
</param>
<param>
- <key>grid_pos</key>
+ <key>width8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color8</key>
+ <value>"dark red"</value>
+ </param>
+ <param>
+ <key>alpha8</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label9</key>
<value></value>
</param>
<param>
- <key>notebook</key>
+ <key>width9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color9</key>
+ <value>"dark green"</value>
+ </param>
+ <param>
+ <key>alpha9</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label10</key>
<value></value>
</param>
<param>
- <key>trig_mode</key>
- <value>wxgui.TRIG_MODE_AUTO</value>
+ <key>width10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color10</key>
+ <value>"dark blue"</value>
</param>
<param>
- <key>y_axis_label</key>
- <value>Counts</value>
+ <key>alpha10</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>affinity</key>
@@ -845,7 +1361,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(696, 244)</value>
+ <value>(853, 219)</value>
</param>
<param>
<key>_rotation</key>
@@ -853,10 +1369,10 @@
</param>
</block>
<block>
- <key>wxgui_fftsink2</key>
+ <key>qtgui_number_sink</key>
<param>
<key>id</key>
- <value>wxgui_fftsink2_0</value>
+ <value>qtgui_number_sink_signal_amplitude</value>
</param>
<param>
<key>_enabled</key>
@@ -864,75 +1380,123 @@
</param>
<param>
<key>type</key>
- <value>complex</value>
+ <value>float</value>
</param>
<param>
- <key>title</key>
- <value>FFT Plot</value>
+ <key>autoscale</key>
+ <value>False</value>
</param>
<param>
- <key>samp_rate</key>
- <value>samp_rate</value>
+ <key>avg</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>graph_type</key>
+ <value>qtgui.NUM_GRAPH_HORIZ</value>
</param>
<param>
- <key>baseband_freq</key>
+ <key>nconnections</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>min</key>
<value>0</value>
</param>
<param>
- <key>y_per_div</key>
- <value>10</value>
+ <key>max</key>
+ <value>2</value>
</param>
<param>
- <key>y_divs</key>
- <value>15</value>
+ <key>update_time</key>
+ <value>0.10</value>
</param>
<param>
- <key>ref_level</key>
- <value>0</value>
+ <key>gui_hint</key>
+ <value></value>
+ </param>
+ <param>
+ <key>label1</key>
+ <value>Signal Amplitude</value>
</param>
<param>
- <key>ref_scale</key>
- <value>2.0</value>
+ <key>color1</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>fft_size</key>
- <value>fft_size</value>
+ <key>label2</key>
+ <value></value>
</param>
<param>
- <key>fft_rate</key>
- <value>20</value>
+ <key>color2</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>peak_hold</key>
- <value>False</value>
+ <key>label3</key>
+ <value></value>
</param>
<param>
- <key>average</key>
- <value>False</value>
+ <key>color3</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>avg_alpha</key>
- <value>0</value>
+ <key>label4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color4</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>label5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color5</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>label6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color6</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>label7</key>
+ <value></value>
</param>
<param>
- <key>win</key>
- <value>window.flattop</value>
+ <key>color7</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>win_size</key>
+ <key>label8</key>
<value></value>
</param>
<param>
- <key>grid_pos</key>
+ <key>color8</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>label9</key>
<value></value>
</param>
<param>
- <key>notebook</key>
+ <key>color9</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>label10</key>
<value></value>
</param>
<param>
- <key>freqvar</key>
- <value>None</value>
+ <key>color10</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>affinity</key>
@@ -940,7 +1504,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(894, 271)</value>
+ <value>(660, 286)</value>
</param>
<param>
<key>_rotation</key>
@@ -948,58 +1512,142 @@
</param>
</block>
<block>
- <key>options</key>
+ <key>qtgui_number_sink</key>
<param>
<key>id</key>
- <value>demo_spec_an</value>
+ <value>qtgui_number_sink_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>title</key>
+ <key>type</key>
+ <value>float</value>
+ </param>
+ <param>
+ <key>autoscale</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>avg</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>graph_type</key>
+ <value>qtgui.NUM_GRAPH_HORIZ</value>
+ </param>
+ <param>
+ <key>nconnections</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>min</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>max</key>
+ <value>100</value>
+ </param>
+ <param>
+ <key>update_time</key>
+ <value>0.10</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
<value></value>
</param>
<param>
- <key>author</key>
- <value>mettus</value>
+ <key>label1</key>
+ <value>Noise Amplitude</value>
</param>
<param>
- <key>description</key>
+ <key>color1</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>label2</key>
<value></value>
</param>
<param>
- <key>window_size</key>
- <value>1280, 1024</value>
+ <key>color2</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>generate_options</key>
- <value>wx_gui</value>
+ <key>label3</key>
+ <value></value>
</param>
<param>
- <key>category</key>
- <value>Custom</value>
+ <key>color3</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>run_options</key>
- <value>prompt</value>
+ <key>label4</key>
+ <value></value>
</param>
<param>
- <key>run</key>
- <value>True</value>
+ <key>color4</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>max_nouts</key>
- <value>0</value>
+ <key>label5</key>
+ <value></value>
</param>
<param>
- <key>realtime_scheduling</key>
+ <key>color5</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>label6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color6</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>label7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color7</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>label8</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color8</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>label9</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color9</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>label10</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color10</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
<value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(10, 10)</value>
+ <value>(733, 2)</value>
</param>
<param>
<key>_rotation</key>
@@ -1007,38 +1655,38 @@
</param>
</block>
<connection>
- <source_block_id>analog_sig_source_x_0</source_block_id>
- <sink_block_id>blocks_add_xx_0</sink_block_id>
+ <source_block_id>blocks_divide_xx_0</source_block_id>
+ <sink_block_id>blocks_nlog10_ff_0</sink_block_id>
<source_key>0</source_key>
- <sink_key>1</sink_key>
+ <sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>analog_noise_source_x_0</source_block_id>
- <sink_block_id>blocks_add_xx_0</sink_block_id>
+ <source_block_id>blocks_rms_xx_0</source_block_id>
+ <sink_block_id>blocks_divide_xx_0</sink_block_id>
<source_key>0</source_key>
- <sink_key>0</sink_key>
+ <sink_key>1</sink_key>
</connection>
<connection>
- <source_block_id>blocks_add_xx_0</source_block_id>
- <sink_block_id>blocks_throttle_0</sink_block_id>
+ <source_block_id>blocks_rms_xx_0_0</source_block_id>
+ <sink_block_id>blocks_divide_xx_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>blocks_throttle_0</source_block_id>
- <sink_block_id>wxgui_fftsink2_0</sink_block_id>
+ <source_block_id>blocks_rms_xx_0</source_block_id>
+ <sink_block_id>qtgui_number_sink_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>analog_noise_source_x_0</source_block_id>
- <sink_block_id>blocks_rms_xx_0</sink_block_id>
+ <source_block_id>blocks_rms_xx_0_0</source_block_id>
+ <sink_block_id>qtgui_number_sink_signal_amplitude</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>blocks_rms_xx_0</source_block_id>
- <sink_block_id>wxgui_numbersink2_0</sink_block_id>
+ <source_block_id>blocks_throttle_0</source_block_id>
+ <sink_block_id>qtgui_freq_sink_x_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
@@ -1049,38 +1697,38 @@
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>blocks_rms_xx_0_0</source_block_id>
- <sink_block_id>wxgui_numbersink2_0_0</sink_block_id>
+ <source_block_id>analog_noise_source_x_0</source_block_id>
+ <sink_block_id>blocks_rms_xx_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>blocks_nlog10_ff_0</source_block_id>
- <sink_block_id>snr_disp</sink_block_id>
+ <source_block_id>blocks_add_xx_0</source_block_id>
+ <sink_block_id>blocks_throttle_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>blocks_divide_xx_0</source_block_id>
- <sink_block_id>blocks_nlog10_ff_0</sink_block_id>
+ <source_block_id>analog_noise_source_x_0</source_block_id>
+ <sink_block_id>blocks_add_xx_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>blocks_rms_xx_0</source_block_id>
- <sink_block_id>blocks_divide_xx_0</sink_block_id>
+ <source_block_id>analog_sig_source_x_0</source_block_id>
+ <sink_block_id>blocks_add_xx_0</sink_block_id>
<source_key>0</source_key>
<sink_key>1</sink_key>
</connection>
<connection>
- <source_block_id>blocks_rms_xx_0_0</source_block_id>
- <sink_block_id>blocks_divide_xx_0</sink_block_id>
+ <source_block_id>blocks_throttle_0</source_block_id>
+ <sink_block_id>qtgui_time_sink_x_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>blocks_throttle_0</source_block_id>
- <sink_block_id>wxgui_scopesink2_0</sink_block_id>
+ <source_block_id>blocks_nlog10_ff_0</source_block_id>
+ <sink_block_id>qtgui_number_sink_snr</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
diff --git a/gr-channels/lib/CMakeLists.txt b/gr-channels/lib/CMakeLists.txt
index 390eb63ee1..305b4e08d6 100644
--- a/gr-channels/lib/CMakeLists.txt
+++ b/gr-channels/lib/CMakeLists.txt
@@ -82,6 +82,18 @@ add_dependencies(gnuradio-channels
gnuradio-runtime gnuradio-filter gnuradio-analog gnuradio-blocks)
if(ENABLE_STATIC_LIBS)
+ if(ENABLE_GR_CTRLPORT)
+ # Remove GR_CTRLPORT set this target's definitions.
+ # Makes sure we don't try to use ControlPort stuff in source files
+ # since Ice will not work with static libs.
+ GET_DIRECTORY_PROPERTY(STATIC_DEFS COMPILE_DEFINITIONS)
+ list(REMOVE_ITEM STATIC_DEFS "GR_CTRLPORT")
+ SET_PROPERTY(DIRECTORY PROPERTY COMPILE_DEFINITIONS "${STATIC_DEFS}")
+
+ # readd it to the target since we removed it from the directory-wide list.
+ SET_PROPERTY(TARGET gnuradio-channels APPEND PROPERTY COMPILE_DEFINITIONS "GR_CTRLPORT")
+ endif(ENABLE_GR_CTRLPORT)
+
add_library(gnuradio-channels_static STATIC ${channels_sources})
add_dependencies(gnuradio-channels_static
diff --git a/gr-comedi/lib/CMakeLists.txt b/gr-comedi/lib/CMakeLists.txt
index efd1bf76c3..98d4270087 100644
--- a/gr-comedi/lib/CMakeLists.txt
+++ b/gr-comedi/lib/CMakeLists.txt
@@ -57,6 +57,18 @@ target_link_libraries(gnuradio-comedi ${comedi_libs})
GR_LIBRARY_FOO(gnuradio-comedi RUNTIME_COMPONENT "comedi_runtime" DEVEL_COMPONENT "comedi_devel")
if(ENABLE_STATIC_LIBS)
+ if(ENABLE_GR_CTRLPORT)
+ # Remove GR_CTRLPORT set this target's definitions.
+ # Makes sure we don't try to use ControlPort stuff in source files
+ # since Ice will not work with static libs.
+ GET_DIRECTORY_PROPERTY(STATIC_DEFS COMPILE_DEFINITIONS)
+ list(REMOVE_ITEM STATIC_DEFS "GR_CTRLPORT")
+ SET_PROPERTY(DIRECTORY PROPERTY COMPILE_DEFINITIONS "${STATIC_DEFS}")
+
+ # readd it to the target since we removed it from the directory-wide list.
+ SET_PROPERTY(TARGET gnuradio-comedi APPEND PROPERTY COMPILE_DEFINITIONS "GR_CTRLPORT")
+ endif(ENABLE_GR_CTRLPORT)
+
add_library(gnuradio-comedi_static STATIC ${comedi_sources})
if(NOT WIN32)
diff --git a/gr-digital/examples/demod/ber_simulation.grc b/gr-digital/examples/demod/ber_simulation.grc
index 72d52d3730..8f9351fe1a 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>Mon Jan 14 11:20:53 2013</timestamp>
+ <timestamp>Sat Jul 12 13:50:53 2014</timestamp>
<block>
<key>options</key>
<param>
@@ -29,7 +29,7 @@
</param>
<param>
<key>generate_options</key>
- <value>wx_gui</value>
+ <value>qt_gui</value>
</param>
<param>
<key>category</key>
@@ -52,6 +52,10 @@
<value></value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(16, 10)</value>
</param>
@@ -61,30 +65,26 @@
</param>
</block>
<block>
- <key>blocks_throttle</key>
+ <key>variable</key>
<param>
<key>id</key>
- <value>blocks_throttle</value>
+ <value>const_type</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>byte</value>
- </param>
- <param>
- <key>samples_per_second</key>
- <value>samp_rate</value>
+ <key>value</key>
+ <value>1</value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(284, 24)</value>
+ <value>(18, 428)</value>
</param>
<param>
<key>_rotation</key>
@@ -92,30 +92,53 @@
</param>
</block>
<block>
- <key>blocks_add_xx</key>
+ <key>variable</key>
<param>
<key>id</key>
- <value>blocks_add_xx</value>
+ <value>const</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
+ <key>value</key>
+ <value>(digital.constellation_bpsk(), digital.constellation_qpsk(), digital.constellation_8psk())</value>
</param>
<param>
- <key>num_inputs</key>
- <value>2</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>_coordinate</key>
+ <value>(116, 310)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </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>100e3</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(486, 151)</value>
+ <value>(16, 308)</value>
</param>
<param>
<key>_rotation</key>
@@ -123,10 +146,10 @@
</param>
</block>
<block>
- <key>wxgui_numbersink2</key>
+ <key>blocks_throttle</key>
<param>
<key>id</key>
- <value>wxgui_numbersink2</value>
+ <value>blocks_throttle</value>
</param>
<param>
<key>_enabled</key>
@@ -134,98 +157,172 @@
</param>
<param>
<key>type</key>
- <value>float</value>
+ <value>byte</value>
</param>
<param>
- <key>title</key>
- <value>BER</value>
+ <key>samples_per_second</key>
+ <value>samp_rate</value>
</param>
<param>
- <key>units</key>
- <value>%</value>
+ <key>vlen</key>
+ <value>1</value>
</param>
<param>
- <key>samp_rate</key>
- <value>samp_rate</value>
+ <key>ignoretag</key>
+ <value>True</value>
</param>
<param>
- <key>min_value</key>
- <value>0.0</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>max_value</key>
- <value>1.0</value>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(284, 24)</value>
</param>
<param>
- <key>factor</key>
- <value>100</value>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>import</key>
+ <param>
+ <key>id</key>
+ <value>import</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>import</key>
+ <value>import math</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>decimal_places</key>
- <value>4</value>
+ <key>_coordinate</key>
+ <value>(18, 373)</value>
</param>
<param>
- <key>ref_level</key>
+ <key>_rotation</key>
<value>0</value>
</param>
+ </block>
+ <block>
+ <key>analog_random_source_x</key>
<param>
- <key>number_rate</key>
- <value>15</value>
+ <key>id</key>
+ <value>analog_random_source_x</value>
</param>
<param>
- <key>peak_hold</key>
- <value>False</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>average</key>
- <value>False</value>
+ <key>type</key>
+ <value>byte</value>
</param>
<param>
- <key>avg_alpha</key>
+ <key>min</key>
<value>0</value>
</param>
<param>
- <key>show_gauge</key>
- <value>False</value>
+ <key>max</key>
+ <value>const[const_type].arity()</value>
</param>
<param>
- <key>win_size</key>
- <value></value>
+ <key>num_samps</key>
+ <value>10000000</value>
+ </param>
+ <param>
+ <key>repeat</key>
+ <value>True</value>
</param>
<param>
- <key>grid_pos</key>
- <value>1, 0, 1, 1</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>notebook</key>
+ <key>affinity</key>
<value></value>
</param>
<param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(791, 228)</value>
+ <value>(17, 125)</value>
</param>
<param>
<key>_rotation</key>
- <value>180</value>
+ <value>0</value>
</param>
</block>
<block>
- <key>import</key>
+ <key>analog_noise_source_x</key>
<param>
<key>id</key>
- <value>import</value>
+ <value>analog_noise_source_x</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>import</key>
- <value>import math</value>
+ <key>type</key>
+ <value>complex</value>
+ </param>
+ <param>
+ <key>noise_type</key>
+ <value>analog.GR_GAUSSIAN</value>
+ </param>
+ <param>
+ <key>amp</key>
+ <value>1.0 / math.sqrt(2.0 * const[const_type].bits_per_symbol() * 10**(EbN0/10))</value>
+ </param>
+ <param>
+ <key>seed</key>
+ <value>42</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(18, 373)</value>
+ <value>(16, 224)</value>
</param>
<param>
<key>_rotation</key>
@@ -233,54 +330,54 @@
</param>
</block>
<block>
- <key>variable_slider</key>
+ <key>digital_chunks_to_symbols_xx</key>
<param>
<key>id</key>
- <value>EbN0</value>
+ <value>digital_chunks_to_symbols_xx</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>label</key>
- <value>Eb/N0 (dB)</value>
+ <key>in_type</key>
+ <value>byte</value>
</param>
<param>
- <key>value</key>
- <value>10</value>
+ <key>out_type</key>
+ <value>complex</value>
</param>
<param>
- <key>min</key>
- <value>-10</value>
+ <key>symbol_table</key>
+ <value>const[const_type].points()</value>
</param>
<param>
- <key>max</key>
- <value>200</value>
+ <key>dimension</key>
+ <value>1</value>
</param>
<param>
- <key>num_steps</key>
- <value>211</value>
+ <key>num_ports</key>
+ <value>1</value>
</param>
<param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>grid_pos</key>
- <value></value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>notebook</key>
- <value></value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(311, 309)</value>
+ <value>(240, 140)</value>
</param>
<param>
<key>_rotation</key>
@@ -288,22 +385,38 @@
</param>
</block>
<block>
- <key>variable</key>
+ <key>digital_constellation_decoder_cb</key>
<param>
<key>id</key>
- <value>const</value>
+ <value>digital_constellation_decoder_cb_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>(digital.constellation_bpsk(), digital.constellation_qpsk(), digital.constellation_8psk())</value>
+ <key>constellation</key>
+ <value>const[const_type].base()</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(116, 310)</value>
+ <value>(618, 164)</value>
</param>
<param>
<key>_rotation</key>
@@ -311,38 +424,58 @@
</param>
</block>
<block>
- <key>analog_random_source_x</key>
+ <key>variable_qtgui_range</key>
<param>
<key>id</key>
- <value>analog_random_source_x</value>
+ <value>EbN0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>byte</value>
+ <key>label</key>
+ <value>Eb / N0 (dB)</value>
</param>
<param>
- <key>min</key>
- <value>0</value>
+ <key>value</key>
+ <value>10</value>
</param>
<param>
- <key>max</key>
- <value>const[const_type].arity()</value>
+ <key>start</key>
+ <value>-10</value>
</param>
<param>
- <key>num_samps</key>
- <value>10000000</value>
+ <key>stop</key>
+ <value>200</value>
</param>
<param>
- <key>repeat</key>
- <value>True</value>
+ <key>step</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>widget</key>
+ <value>counter_slider</value>
+ </param>
+ <param>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
+ </param>
+ <param>
+ <key>min_len</key>
+ <value>200</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value></value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(17, 125)</value>
+ <value>(317, 281)</value>
</param>
<param>
<key>_rotation</key>
@@ -350,34 +483,42 @@
</param>
</block>
<block>
- <key>analog_noise_source_x</key>
+ <key>variable_qtgui_label</key>
<param>
<key>id</key>
- <value>analog_noise_source_x</value>
+ <value>variable_qtgui_label_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
+ <key>label</key>
+ <value>Constellation Type</value>
+ </param>
+ <param>
<key>type</key>
- <value>complex</value>
+ <value>string</value>
</param>
<param>
- <key>noise_type</key>
- <value>analog.GR_GAUSSIAN</value>
+ <key>value</key>
+ <value>{0: 'BPSK', 1: 'QPSK', 2: '8-PSK'}[const_type] + " - Change const_type for different constellation types!"</value>
</param>
<param>
- <key>amp</key>
- <value>1.0 / math.sqrt(2.0 * const[const_type].bits_per_symbol() * 10**(EbN0/10))</value>
+ <key>formatter</key>
+ <value>None</value>
</param>
<param>
- <key>seed</key>
- <value>42</value>
+ <key>gui_hint</key>
+ <value></value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(16, 224)</value>
+ <value>(294, 413)</value>
</param>
<param>
<key>_rotation</key>
@@ -385,38 +526,46 @@
</param>
</block>
<block>
- <key>digital_chunks_to_symbols_xx</key>
+ <key>blocks_add_xx</key>
<param>
<key>id</key>
- <value>digital_chunks_to_symbols_xx</value>
+ <value>blocks_add_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>
+ <key>type</key>
<value>complex</value>
</param>
<param>
- <key>symbol_table</key>
- <value>const[const_type].points()</value>
+ <key>num_inputs</key>
+ <value>2</value>
</param>
<param>
- <key>dimension</key>
+ <key>vlen</key>
<value>1</value>
</param>
<param>
- <key>num_ports</key>
- <value>1</value>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(240, 140)</value>
+ <value>(486, 151)</value>
</param>
<param>
<key>_rotation</key>
@@ -446,6 +595,22 @@
<value>const[const_type].bits_per_symbol()</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(720, 25)</value>
</param>
@@ -455,143 +620,334 @@
</param>
</block>
<block>
- <key>digital_constellation_decoder_cb</key>
+ <key>qtgui_const_sink_x</key>
<param>
<key>id</key>
- <value>digital_constellation_decoder_cb_0</value>
+ <value>qtgui_const_sink_x_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>constellation</key>
- <value>const[const_type].base()</value>
+ <key>type</key>
+ <value>complex</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(618, 164)</value>
+ <key>name</key>
+ <value>"foo"</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>size</key>
+ <value>1024</value>
</param>
- </block>
- <block>
- <key>wxgui_scopesink2</key>
<param>
- <key>id</key>
- <value>wxgui_scopesink2_0</value>
+ <key>grid</key>
+ <value>False</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>autoscale</key>
+ <value>False</value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
+ <key>ymin</key>
+ <value>-2</value>
</param>
<param>
- <key>title</key>
+ <key>ymax</key>
+ <value>2</value>
+ </param>
+ <param>
+ <key>xmin</key>
+ <value>-2</value>
+ </param>
+ <param>
+ <key>xmax</key>
+ <value>2</value>
+ </param>
+ <param>
+ <key>nconnections</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>update_time</key>
+ <value>0.10</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value>2,0,1,1</value>
+ </param>
+ <param>
+ <key>tr_mode</key>
+ <value>qtgui.TRIG_MODE_FREE</value>
+ </param>
+ <param>
+ <key>tr_slope</key>
+ <value>qtgui.TRIG_SLOPE_POS</value>
+ </param>
+ <param>
+ <key>tr_level</key>
+ <value>0.0</value>
+ </param>
+ <param>
+ <key>tr_chan</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>tr_tag</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>label1</key>
<value>"Constellation: "+str(const[const_type].arity()) + "-PSK"</value>
</param>
<param>
- <key>samp_rate</key>
- <value>samp_rate</value>
+ <key>width1</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color1</key>
+ <value>"blue"</value>
+ </param>
+ <param>
+ <key>style1</key>
+ <value>0</value>
</param>
<param>
- <key>v_scale</key>
+ <key>marker1</key>
<value>0</value>
</param>
<param>
- <key>v_offset</key>
+ <key>alpha1</key>
+ <value>0.6</value>
+ </param>
+ <param>
+ <key>label2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width2</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color2</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>style2</key>
<value>0</value>
</param>
<param>
- <key>t_scale</key>
+ <key>marker2</key>
<value>0</value>
</param>
<param>
- <key>ac_couple</key>
- <value>False</value>
+ <key>alpha2</key>
+ <value>1.0</value>
</param>
<param>
- <key>xy_mode</key>
- <value>True</value>
+ <key>label3</key>
+ <value></value>
</param>
<param>
- <key>num_inputs</key>
+ <key>width3</key>
<value>1</value>
</param>
<param>
- <key>win_size</key>
+ <key>color3</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>style3</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>marker3</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>alpha3</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label4</key>
<value></value>
</param>
<param>
- <key>grid_pos</key>
- <value>2, 0, 1, 1</value>
+ <key>width4</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color4</key>
+ <value>"red"</value>
</param>
<param>
- <key>notebook</key>
+ <key>style4</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>marker4</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>alpha4</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label5</key>
<value></value>
</param>
<param>
- <key>trig_mode</key>
- <value>wxgui.TRIG_MODE_AUTO</value>
+ <key>width5</key>
+ <value>1</value>
</param>
<param>
- <key>y_axis_label</key>
- <value>Counts</value>
+ <key>color5</key>
+ <value>"red"</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(623, 228)</value>
+ <key>style5</key>
+ <value>0</value>
</param>
<param>
- <key>_rotation</key>
+ <key>marker5</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>variable</key>
<param>
- <key>id</key>
- <value>samp_rate</value>
+ <key>alpha5</key>
+ <value>1.0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>label6</key>
+ <value></value>
</param>
<param>
- <key>value</key>
- <value>100e3</value>
+ <key>width6</key>
+ <value>1</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(16, 308)</value>
+ <key>color6</key>
+ <value>"red"</value>
</param>
<param>
- <key>_rotation</key>
+ <key>style6</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>variable</key>
<param>
- <key>id</key>
- <value>const_type</value>
+ <key>marker6</key>
+ <value>0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>alpha6</key>
+ <value>1.0</value>
</param>
<param>
- <key>value</key>
+ <key>label7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width7</key>
<value>1</value>
</param>
<param>
+ <key>color7</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>style7</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>marker7</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>alpha7</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label8</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color8</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>style8</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>marker8</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>alpha8</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label9</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color9</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>style9</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>marker9</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>alpha9</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label10</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color10</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>style10</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>marker10</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>alpha10</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(18, 428)</value>
+ <value>(603, 253)</value>
</param>
<param>
<key>_rotation</key>
@@ -599,42 +955,226 @@
</param>
</block>
<block>
- <key>variable_static_text</key>
+ <key>qtgui_number_sink</key>
<param>
<key>id</key>
- <value>variable_static_text_0</value>
+ <value>qtgui_number_sink_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>label</key>
- <value>Constellation Type</value>
+ <key>name</key>
+ <value>""</value>
</param>
<param>
- <key>value</key>
- <value>{0: 'BPSK', 1: 'QPSK', 2: '8-PSK'}[const_type] + " - Change const_type for different constellation types!"</value>
+ <key>type</key>
+ <value>float</value>
</param>
<param>
- <key>converver</key>
- <value>str_converter</value>
+ <key>autoscale</key>
+ <value>True</value>
</param>
<param>
- <key>formatter</key>
- <value>None</value>
+ <key>avg</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>graph_type</key>
+ <value>qtgui.NUM_GRAPH_HORIZ</value>
+ </param>
+ <param>
+ <key>nconnections</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>min</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>max</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>update_time</key>
+ <value>0.10</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value>1,0,1,1</value>
+ </param>
+ <param>
+ <key>label1</key>
+ <value>BER</value>
</param>
<param>
- <key>grid_pos</key>
+ <key>unit1</key>
+ <value>x10^-6</value>
+ </param>
+ <param>
+ <key>color1</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor1</key>
+ <value>1e6</value>
+ </param>
+ <param>
+ <key>label2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>unit2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color2</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor2</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>label3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>unit3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color3</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor3</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>label4</key>
<value></value>
</param>
<param>
- <key>notebook</key>
+ <key>unit4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color4</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor4</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>label5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>unit5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color5</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor5</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>label6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>unit6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color6</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor6</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>label7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>unit7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color7</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor7</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>label8</key>
+ <value></value>
+ </param>
+ <param>
+ <key>unit8</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color8</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>label9</key>
+ <value></value>
+ </param>
+ <param>
+ <key>unit9</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color9</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>label10</key>
+ <value></value>
+ </param>
+ <param>
+ <key>unit10</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color10</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
<value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(422, 311)</value>
+ <value>(940, 26)</value>
</param>
<param>
<key>_rotation</key>
@@ -642,12 +1182,6 @@
</param>
</block>
<connection>
- <source_block_id>blks2_error_rate</source_block_id>
- <sink_block_id>wxgui_numbersink2</sink_block_id>
- <source_key>0</source_key>
- <sink_key>0</sink_key>
- </connection>
- <connection>
<source_block_id>blocks_throttle</source_block_id>
<sink_block_id>blks2_error_rate</sink_block_id>
<source_key>0</source_key>
@@ -678,12 +1212,6 @@
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>blocks_add_xx</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_constellation_decoder_cb_0</source_block_id>
<sink_block_id>blks2_error_rate</sink_block_id>
<source_key>0</source_key>
@@ -695,4 +1223,16 @@
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
+ <connection>
+ <source_block_id>blocks_add_xx</source_block_id>
+ <sink_block_id>qtgui_const_sink_x_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>blks2_error_rate</source_block_id>
+ <sink_block_id>qtgui_number_sink_0</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 399d6a8e01..a75f8b640d 100644
--- a/gr-digital/examples/demod/digital_freq_lock.grc
+++ b/gr-digital/examples/demod/digital_freq_lock.grc
@@ -1,6 +1,6 @@
<?xml version='1.0' encoding='ASCII'?>
<flow_graph>
- <timestamp>Tue Jan 15 14:17:18 2013</timestamp>
+ <timestamp>Sat Jul 12 13:47:40 2014</timestamp>
<block>
<key>options</key>
<param>
@@ -29,7 +29,7 @@
</param>
<param>
<key>generate_options</key>
- <value>wx_gui</value>
+ <value>qt_gui</value>
</param>
<param>
<key>category</key>
@@ -52,6 +52,10 @@
<value></value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(-1, 0)</value>
</param>
@@ -64,7 +68,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>sps</value>
+ <value>samp_rate</value>
</param>
<param>
<key>_enabled</key>
@@ -72,11 +76,15 @@
</param>
<param>
<key>value</key>
- <value>4</value>
+ <value>32000</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(166, -2)</value>
+ <value>(311, -1)</value>
</param>
<param>
<key>_rotation</key>
@@ -98,8 +106,12 @@
<value>0.35</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(231, 0)</value>
+ <value>(223, 0)</value>
</param>
<param>
<key>_rotation</key>
@@ -110,7 +122,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>samp_rate</value>
+ <value>sps</value>
</param>
<param>
<key>_enabled</key>
@@ -118,11 +130,15 @@
</param>
<param>
<key>value</key>
- <value>32000</value>
+ <value>4</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(439, -1)</value>
+ <value>(154, 0)</value>
</param>
<param>
<key>_rotation</key>
@@ -130,54 +146,62 @@
</param>
</block>
<block>
- <key>variable_slider</key>
+ <key>digital_psk_mod</key>
<param>
<key>id</key>
- <value>freq_offset</value>
+ <value>digital_psk_mod_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>label</key>
- <value>Frequency Offset</value>
+ <key>constellation_points</key>
+ <value>2</value>
</param>
<param>
- <key>value</key>
- <value>0</value>
+ <key>mod_code</key>
+ <value>"gray"</value>
</param>
<param>
- <key>min</key>
- <value>-0.5</value>
+ <key>differential</key>
+ <value>False</value>
</param>
<param>
- <key>max</key>
- <value>0.5</value>
+ <key>samples_per_symbol</key>
+ <value>sps</value>
</param>
<param>
- <key>num_steps</key>
- <value>1000</value>
+ <key>excess_bw</key>
+ <value>rolloff</value>
</param>
<param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
+ <key>verbose</key>
+ <value>False</value>
</param>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>log</key>
+ <value>False</value>
</param>
<param>
- <key>grid_pos</key>
+ <key>alias</key>
<value></value>
</param>
<param>
- <key>notebook</key>
+ <key>affinity</key>
<value></value>
</param>
<param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(673, -1)</value>
+ <value>(202, 142)</value>
</param>
<param>
<key>_rotation</key>
@@ -185,10 +209,10 @@
</param>
</block>
<block>
- <key>wxgui_scopesink2</key>
+ <key>analog_random_source_x</key>
<param>
<key>id</key>
- <value>wxgui_scopesink2_0_0</value>
+ <value>analog_random_source_x</value>
</param>
<param>
<key>_enabled</key>
@@ -196,63 +220,102 @@
</param>
<param>
<key>type</key>
- <value>complex</value>
+ <value>byte</value>
</param>
<param>
- <key>title</key>
- <value>Frequency Corrected Signal</value>
+ <key>min</key>
+ <value>0</value>
</param>
<param>
- <key>samp_rate</key>
- <value>samp_rate</value>
+ <key>max</key>
+ <value>256</value>
+ </param>
+ <param>
+ <key>num_samps</key>
+ <value>10000000</value>
+ </param>
+ <param>
+ <key>repeat</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>v_scale</key>
+ <key>minoutbuf</key>
<value>0</value>
</param>
<param>
- <key>v_offset</key>
+ <key>maxoutbuf</key>
<value>0</value>
</param>
<param>
- <key>t_scale</key>
+ <key>_coordinate</key>
+ <value>(8, 150)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
<value>0</value>
</param>
+ </block>
+ <block>
+ <key>channels_channel_model</key>
<param>
- <key>ac_couple</key>
- <value>False</value>
+ <key>id</key>
+ <value>channels_channel_model_0</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>noise_voltage</key>
+ <value>noise_amp</value>
</param>
<param>
- <key>win_size</key>
- <value></value>
+ <key>freq_offset</key>
+ <value>freq_offset</value>
+ </param>
+ <param>
+ <key>epsilon</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>taps</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>seed</key>
+ <value>42</value>
+ </param>
+ <param>
+ <key>block_tags</key>
+ <value>False</value>
</param>
<param>
- <key>grid_pos</key>
+ <key>alias</key>
<value></value>
</param>
<param>
- <key>notebook</key>
- <value>notebook_0,1</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>trig_mode</key>
- <value>wxgui.TRIG_MODE_AUTO</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>y_axis_label</key>
- <value>Counts</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(439, 289)</value>
+ <value>(681, 142)</value>
</param>
<param>
<key>_rotation</key>
@@ -260,10 +323,10 @@
</param>
</block>
<block>
- <key>wxgui_fftsink2</key>
+ <key>blocks_throttle</key>
<param>
<key>id</key>
- <value>wxgui_fftsink2_0_0</value>
+ <value>blocks_throttle_0</value>
</param>
<param>
<key>_enabled</key>
@@ -274,76 +337,91 @@
<value>complex</value>
</param>
<param>
- <key>title</key>
- <value>Frequency Corrected Signal</value>
+ <key>samples_per_second</key>
+ <value>samp_rate</value>
</param>
<param>
- <key>samp_rate</key>
- <value>samp_rate</value>
+ <key>vlen</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>ignoretag</key>
+ <value>True</value>
</param>
<param>
- <key>baseband_freq</key>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
<value>0</value>
</param>
<param>
- <key>y_per_div</key>
- <value>10</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>y_divs</key>
- <value>10</value>
+ <key>_coordinate</key>
+ <value>(469, 172)</value>
</param>
<param>
- <key>ref_level</key>
- <value>10</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
+ </block>
+ <block>
+ <key>digital_fll_band_edge_cc</key>
<param>
- <key>ref_scale</key>
- <value>2.0</value>
+ <key>id</key>
+ <value>digital_fll_band_edge_cc_0</value>
</param>
<param>
- <key>fft_size</key>
- <value>1024</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>fft_rate</key>
- <value>30</value>
+ <key>type</key>
+ <value>cc</value>
</param>
<param>
- <key>peak_hold</key>
- <value>False</value>
+ <key>samps_per_sym</key>
+ <value>sps</value>
</param>
<param>
- <key>average</key>
- <value>False</value>
+ <key>rolloff</key>
+ <value>rolloff</value>
</param>
<param>
- <key>avg_alpha</key>
- <value>0</value>
+ <key>filter_size</key>
+ <value>44</value>
</param>
<param>
- <key>win</key>
- <value>None</value>
+ <key>w</key>
+ <value>freq_bw</value>
</param>
<param>
- <key>win_size</key>
+ <key>alias</key>
<value></value>
</param>
<param>
- <key>grid_pos</key>
+ <key>affinity</key>
<value></value>
</param>
<param>
- <key>notebook</key>
- <value>notebook_0,0</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>freqvar</key>
- <value>None</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(439, 423)</value>
+ <value>(583, 286)</value>
</param>
<param>
<key>_rotation</key>
@@ -351,10 +429,10 @@
</param>
</block>
<block>
- <key>variable_slider</key>
+ <key>variable_qtgui_range</key>
<param>
<key>id</key>
- <value>freq_bw</value>
+ <value>noise_amp</value>
</param>
<param>
<key>_enabled</key>
@@ -362,43 +440,47 @@
</param>
<param>
<key>label</key>
- <value>FLL Loop Bandwidth</value>
+ <value>Channel Noise</value>
</param>
<param>
<key>value</key>
<value>0</value>
</param>
<param>
- <key>min</key>
+ <key>start</key>
<value>0</value>
</param>
<param>
- <key>max</key>
- <value>0.1</value>
+ <key>stop</key>
+ <value>1</value>
</param>
<param>
- <key>num_steps</key>
- <value>1000</value>
+ <key>step</key>
+ <value>0.01</value>
</param>
<param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
+ <key>widget</key>
+ <value>counter_slider</value>
</param>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
</param>
<param>
- <key>grid_pos</key>
- <value></value>
+ <key>min_len</key>
+ <value>200</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value>0, 0, 1, 1</value>
</param>
<param>
- <key>notebook</key>
+ <key>alias</key>
<value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(74, 436)</value>
+ <value>(498, 0)</value>
</param>
<param>
<key>_rotation</key>
@@ -406,34 +488,254 @@
</param>
</block>
<block>
- <key>notebook</key>
+ <key>qtgui_freq_sink_x</key>
<param>
<key>id</key>
- <value>notebook_0</value>
+ <value>qtgui_freq_sink_x_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>style</key>
- <value>wx.NB_TOP</value>
+ <key>type</key>
+ <value>complex</value>
+ </param>
+ <param>
+ <key>name</key>
+ <value>Signal into Receiver</value>
+ </param>
+ <param>
+ <key>fftsize</key>
+ <value>1024</value>
+ </param>
+ <param>
+ <key>wintype</key>
+ <value>firdes.WIN_BLACKMAN_hARRIS</value>
+ </param>
+ <param>
+ <key>fc</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>bw</key>
+ <value>samp_rate</value>
+ </param>
+ <param>
+ <key>grid</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>autoscale</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>average</key>
+ <value>0.1</value>
+ </param>
+ <param>
+ <key>ymin</key>
+ <value>-120</value>
+ </param>
+ <param>
+ <key>ymax</key>
+ <value>-20</value>
+ </param>
+ <param>
+ <key>nconnections</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>update_time</key>
+ <value>0.10</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value>notebook@0</value>
+ </param>
+ <param>
+ <key>showports</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>label1</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width1</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color1</key>
+ <value>"blue"</value>
+ </param>
+ <param>
+ <key>alpha1</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width2</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color2</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>alpha2</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width3</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color3</key>
+ <value>"green"</value>
+ </param>
+ <param>
+ <key>alpha3</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width4</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color4</key>
+ <value>"black"</value>
+ </param>
+ <param>
+ <key>alpha4</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width5</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color5</key>
+ <value>"cyan"</value>
+ </param>
+ <param>
+ <key>alpha5</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width6</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color6</key>
+ <value>"magenta"</value>
+ </param>
+ <param>
+ <key>alpha6</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width7</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color7</key>
+ <value>"yellow"</value>
+ </param>
+ <param>
+ <key>alpha7</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label8</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color8</key>
+ <value>"dark red"</value>
+ </param>
+ <param>
+ <key>alpha8</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label9</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color9</key>
+ <value>"dark green"</value>
+ </param>
+ <param>
+ <key>alpha9</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label10</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color10</key>
+ <value>"dark blue"</value>
</param>
<param>
- <key>labels</key>
- <value>['Freq', 'Time']</value>
+ <key>alpha10</key>
+ <value>1.0</value>
</param>
<param>
- <key>grid_pos</key>
+ <key>alias</key>
<value></value>
</param>
<param>
- <key>notebook</key>
+ <key>affinity</key>
<value></value>
</param>
<param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(108, 568)</value>
+ <value>(931, 200)</value>
</param>
<param>
<key>_rotation</key>
@@ -441,38 +743,58 @@
</param>
</block>
<block>
- <key>digital_fll_band_edge_cc</key>
+ <key>variable_qtgui_range</key>
<param>
<key>id</key>
- <value>digital_fll_band_edge_cc_0</value>
+ <value>freq_offset</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>cc</value>
+ <key>label</key>
+ <value>Frequency Offset</value>
</param>
<param>
- <key>samps_per_sym</key>
- <value>sps</value>
+ <key>value</key>
+ <value>0</value>
</param>
<param>
- <key>rolloff</key>
- <value>rolloff</value>
+ <key>start</key>
+ <value>-.5</value>
</param>
<param>
- <key>filter_size</key>
- <value>44</value>
+ <key>stop</key>
+ <value>.5</value>
</param>
<param>
- <key>w</key>
- <value>freq_bw</value>
+ <key>step</key>
+ <value>0.01</value>
+ </param>
+ <param>
+ <key>widget</key>
+ <value>counter_slider</value>
+ </param>
+ <param>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
+ </param>
+ <param>
+ <key>min_len</key>
+ <value>200</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value>0, 1, 1, 1</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(75, 295)</value>
+ <value>(624, 0)</value>
</param>
<param>
<key>_rotation</key>
@@ -480,90 +802,109 @@
</param>
</block>
<block>
- <key>wxgui_fftsink2</key>
+ <key>variable_qtgui_range</key>
<param>
<key>id</key>
- <value>wxgui_fftsink2_0</value>
+ <value>freq_bw</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
- </param>
- <param>
- <key>title</key>
- <value>Signal into Receiver</value>
+ <key>label</key>
+ <value></value>
</param>
<param>
- <key>samp_rate</key>
- <value>samp_rate</value>
+ <key>value</key>
+ <value>0</value>
</param>
<param>
- <key>baseband_freq</key>
+ <key>start</key>
<value>0</value>
</param>
<param>
- <key>y_per_div</key>
- <value>10</value>
+ <key>stop</key>
+ <value>0.1</value>
</param>
<param>
- <key>y_divs</key>
- <value>10</value>
+ <key>step</key>
+ <value>0.001</value>
</param>
<param>
- <key>ref_level</key>
- <value>10</value>
+ <key>widget</key>
+ <value>counter_slider</value>
</param>
<param>
- <key>ref_scale</key>
- <value>2.0</value>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
</param>
<param>
- <key>fft_size</key>
- <value>1024</value>
+ <key>min_len</key>
+ <value>200</value>
</param>
<param>
- <key>fft_rate</key>
- <value>30</value>
+ <key>gui_hint</key>
+ <value>1, 0, 1, 2</value>
</param>
<param>
- <key>peak_hold</key>
- <value>False</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>average</key>
- <value>False</value>
+ <key>_coordinate</key>
+ <value>(399, 290)</value>
</param>
<param>
- <key>avg_alpha</key>
+ <key>_rotation</key>
<value>0</value>
</param>
+ </block>
+ <block>
+ <key>qtgui_tab_widget</key>
+ <param>
+ <key>id</key>
+ <value>notebook</value>
+ </param>
<param>
- <key>win</key>
- <value>None</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>win_size</key>
- <value></value>
+ <key>num_tabs</key>
+ <value>2</value>
</param>
<param>
- <key>grid_pos</key>
- <value></value>
+ <key>label0</key>
+ <value>Frequency</value>
+ </param>
+ <param>
+ <key>label1</key>
+ <value>Time</value>
+ </param>
+ <param>
+ <key>label2</key>
+ <value>Tab 2</value>
+ </param>
+ <param>
+ <key>label3</key>
+ <value>Tab 3</value>
+ </param>
+ <param>
+ <key>label4</key>
+ <value>Tab 4</value>
</param>
<param>
- <key>notebook</key>
- <value>notebook_0,0</value>
+ <key>gui_hint</key>
+ <value>2, 0, 1, 2</value>
</param>
<param>
- <key>freqvar</key>
- <value>None</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(918, 107)</value>
+ <value>(0, 69)</value>
</param>
<param>
<key>_rotation</key>
@@ -571,10 +912,10 @@
</param>
</block>
<block>
- <key>wxgui_scopesink2</key>
+ <key>qtgui_time_sink_x</key>
<param>
<key>id</key>
- <value>wxgui_scopesink2_0</value>
+ <value>qtgui_time_sink_x_0_0</value>
</param>
<param>
<key>_enabled</key>
@@ -585,107 +926,332 @@
<value>complex</value>
</param>
<param>
- <key>title</key>
+ <key>name</key>
<value>Signal into Receiver</value>
</param>
<param>
- <key>samp_rate</key>
+ <key>ylabel</key>
+ <value>Amplitude</value>
+ </param>
+ <param>
+ <key>yunit</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>size</key>
+ <value>1024</value>
+ </param>
+ <param>
+ <key>srate</key>
<value>samp_rate</value>
</param>
<param>
- <key>v_scale</key>
- <value>0</value>
+ <key>grid</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>autoscale</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>ymin</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>ymax</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>nconnections</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>update_time</key>
+ <value>0.10</value>
+ </param>
+ <param>
+ <key>entags</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value>notebook@1</value>
</param>
<param>
- <key>v_offset</key>
+ <key>tr_mode</key>
+ <value>qtgui.TRIG_MODE_FREE</value>
+ </param>
+ <param>
+ <key>tr_slope</key>
+ <value>qtgui.TRIG_SLOPE_POS</value>
+ </param>
+ <param>
+ <key>tr_level</key>
+ <value>0.0</value>
+ </param>
+ <param>
+ <key>tr_delay</key>
<value>0</value>
</param>
<param>
- <key>t_scale</key>
+ <key>tr_chan</key>
<value>0</value>
</param>
<param>
- <key>ac_couple</key>
- <value>False</value>
+ <key>tr_tag</key>
+ <value>""</value>
</param>
<param>
- <key>xy_mode</key>
- <value>False</value>
+ <key>label1</key>
+ <value></value>
</param>
<param>
- <key>num_inputs</key>
+ <key>width1</key>
<value>1</value>
</param>
<param>
- <key>win_size</key>
+ <key>color1</key>
+ <value>"blue"</value>
+ </param>
+ <param>
+ <key>style1</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker1</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha1</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label2</key>
<value></value>
</param>
<param>
- <key>grid_pos</key>
+ <key>width2</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color2</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>style2</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker2</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha2</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label3</key>
<value></value>
</param>
<param>
- <key>notebook</key>
- <value>notebook_0,1</value>
+ <key>width3</key>
+ <value>1</value>
</param>
<param>
- <key>trig_mode</key>
- <value>wxgui.TRIG_MODE_AUTO</value>
+ <key>color3</key>
+ <value>"green"</value>
</param>
<param>
- <key>y_axis_label</key>
- <value>Counts</value>
+ <key>style3</key>
+ <value>1</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(918, 0)</value>
+ <key>marker3</key>
+ <value>-1</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>alpha3</key>
+ <value>1.0</value>
</param>
- </block>
- <block>
- <key>digital_psk_mod</key>
<param>
- <key>id</key>
- <value>digital_psk_mod_0</value>
+ <key>label4</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>width4</key>
+ <value>1</value>
</param>
<param>
- <key>constellation_points</key>
- <value>2</value>
+ <key>color4</key>
+ <value>"black"</value>
</param>
<param>
- <key>mod_code</key>
- <value>"gray"</value>
+ <key>style4</key>
+ <value>1</value>
</param>
<param>
- <key>differential</key>
- <value>False</value>
+ <key>marker4</key>
+ <value>-1</value>
</param>
<param>
- <key>samples_per_symbol</key>
- <value>sps</value>
+ <key>alpha4</key>
+ <value>1.0</value>
</param>
<param>
- <key>excess_bw</key>
- <value>rolloff</value>
+ <key>label5</key>
+ <value></value>
</param>
<param>
- <key>verbose</key>
- <value>False</value>
+ <key>width5</key>
+ <value>1</value>
</param>
<param>
- <key>log</key>
- <value>False</value>
+ <key>color5</key>
+ <value>"cyan"</value>
+ </param>
+ <param>
+ <key>style5</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker5</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha5</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width6</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color6</key>
+ <value>"magenta"</value>
+ </param>
+ <param>
+ <key>style6</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker6</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha6</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width7</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color7</key>
+ <value>"yellow"</value>
+ </param>
+ <param>
+ <key>style7</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker7</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha7</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label8</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color8</key>
+ <value>"dark red"</value>
+ </param>
+ <param>
+ <key>style8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker8</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha8</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label9</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color9</key>
+ <value>"dark green"</value>
+ </param>
+ <param>
+ <key>style9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker9</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha9</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label10</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color10</key>
+ <value>"blue"</value>
+ </param>
+ <param>
+ <key>style10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker10</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha10</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(202, 142)</value>
+ <value>(928, 41)</value>
</param>
<param>
<key>_rotation</key>
@@ -693,10 +1259,10 @@
</param>
</block>
<block>
- <key>analog_random_source_x</key>
+ <key>qtgui_time_sink_x</key>
<param>
<key>id</key>
- <value>analog_random_source_x</value>
+ <value>qtgui_time_sink_x_0</value>
</param>
<param>
<key>_enabled</key>
@@ -704,66 +1270,335 @@
</param>
<param>
<key>type</key>
- <value>byte</value>
+ <value>complex</value>
</param>
<param>
- <key>min</key>
- <value>0</value>
+ <key>name</key>
+ <value>Frequency Corrected Signal</value>
</param>
<param>
- <key>max</key>
- <value>256</value>
+ <key>ylabel</key>
+ <value>Amplitude</value>
</param>
<param>
- <key>num_samps</key>
- <value>10000000</value>
+ <key>yunit</key>
+ <value>""</value>
</param>
<param>
- <key>repeat</key>
+ <key>size</key>
+ <value>1024</value>
+ </param>
+ <param>
+ <key>srate</key>
+ <value>samp_rate</value>
+ </param>
+ <param>
+ <key>grid</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>autoscale</key>
<value>True</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(8, 150)</value>
+ <key>ymin</key>
+ <value>-1</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>ymax</key>
+ <value>1</value>
</param>
- </block>
- <block>
- <key>channels_channel_model</key>
<param>
- <key>id</key>
- <value>channels_channel_model_0</value>
+ <key>nconnections</key>
+ <value>1</value>
</param>
<param>
- <key>_enabled</key>
+ <key>update_time</key>
+ <value>0.10</value>
+ </param>
+ <param>
+ <key>entags</key>
<value>True</value>
</param>
<param>
- <key>noise_voltage</key>
- <value>noise_amp</value>
+ <key>gui_hint</key>
+ <value>notebook@1</value>
</param>
<param>
- <key>freq_offset</key>
- <value>freq_offset</value>
+ <key>tr_mode</key>
+ <value>qtgui.TRIG_MODE_FREE</value>
</param>
<param>
- <key>epsilon</key>
+ <key>tr_slope</key>
+ <value>qtgui.TRIG_SLOPE_POS</value>
+ </param>
+ <param>
+ <key>tr_level</key>
+ <value>0.0</value>
+ </param>
+ <param>
+ <key>tr_delay</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>tr_chan</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>tr_tag</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>label1</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width1</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color1</key>
+ <value>"blue"</value>
+ </param>
+ <param>
+ <key>style1</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker1</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha1</key>
<value>1.0</value>
</param>
<param>
- <key>taps</key>
+ <key>label2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width2</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color2</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>style2</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker2</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha2</key>
<value>1.0</value>
</param>
<param>
- <key>seed</key>
- <value>42</value>
+ <key>label3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width3</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color3</key>
+ <value>"green"</value>
+ </param>
+ <param>
+ <key>style3</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker3</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha3</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width4</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color4</key>
+ <value>"black"</value>
+ </param>
+ <param>
+ <key>style4</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker4</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha4</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width5</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color5</key>
+ <value>"cyan"</value>
+ </param>
+ <param>
+ <key>style5</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker5</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha5</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width6</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color6</key>
+ <value>"magenta"</value>
+ </param>
+ <param>
+ <key>style6</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker6</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha6</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width7</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color7</key>
+ <value>"yellow"</value>
+ </param>
+ <param>
+ <key>style7</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker7</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha7</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label8</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color8</key>
+ <value>"dark red"</value>
+ </param>
+ <param>
+ <key>style8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker8</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha8</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label9</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color9</key>
+ <value>"dark green"</value>
+ </param>
+ <param>
+ <key>style9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker9</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha9</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label10</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color10</key>
+ <value>"blue"</value>
+ </param>
+ <param>
+ <key>style10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker10</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha10</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(681, 142)</value>
+ <value>(930, 324)</value>
</param>
<param>
<key>_rotation</key>
@@ -771,10 +1606,10 @@
</param>
</block>
<block>
- <key>blocks_throttle</key>
+ <key>qtgui_freq_sink_x</key>
<param>
<key>id</key>
- <value>blocks_throttle_0</value>
+ <value>qtgui_freq_sink_x_1</value>
</param>
<param>
<key>_enabled</key>
@@ -785,71 +1620,240 @@
<value>complex</value>
</param>
<param>
- <key>samples_per_second</key>
- <value>samp_rate</value>
+ <key>name</key>
+ <value>Frequency Corrected Signal</value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>fftsize</key>
+ <value>1024</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(487, 174)</value>
+ <key>wintype</key>
+ <value>firdes.WIN_BLACKMAN_hARRIS</value>
</param>
<param>
- <key>_rotation</key>
+ <key>fc</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>variable_slider</key>
<param>
- <key>id</key>
- <value>noise_amp</value>
+ <key>bw</key>
+ <value>samp_rate</value>
</param>
<param>
- <key>_enabled</key>
+ <key>grid</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>autoscale</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>average</key>
+ <value>0.1</value>
+ </param>
+ <param>
+ <key>ymin</key>
+ <value>-120</value>
+ </param>
+ <param>
+ <key>ymax</key>
+ <value>-20</value>
+ </param>
+ <param>
+ <key>nconnections</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>update_time</key>
+ <value>0.10</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value>notebook@0</value>
+ </param>
+ <param>
+ <key>showports</key>
<value>True</value>
</param>
<param>
- <key>label</key>
- <value>Channel Noise</value>
+ <key>label1</key>
+ <value></value>
</param>
<param>
- <key>value</key>
- <value>0</value>
+ <key>width1</key>
+ <value>1</value>
</param>
<param>
- <key>min</key>
- <value>0</value>
+ <key>color1</key>
+ <value>"blue"</value>
</param>
<param>
- <key>max</key>
+ <key>alpha1</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width2</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color2</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>alpha2</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width3</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color3</key>
+ <value>"green"</value>
+ </param>
+ <param>
+ <key>alpha3</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width4</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color4</key>
+ <value>"black"</value>
+ </param>
+ <param>
+ <key>alpha4</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width5</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color5</key>
+ <value>"cyan"</value>
+ </param>
+ <param>
+ <key>alpha5</key>
<value>1.0</value>
</param>
<param>
- <key>num_steps</key>
- <value>1000</value>
+ <key>label6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width6</key>
+ <value>1</value>
</param>
<param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
+ <key>color6</key>
+ <value>"magenta"</value>
</param>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>alpha6</key>
+ <value>1.0</value>
</param>
<param>
- <key>grid_pos</key>
+ <key>label7</key>
<value></value>
</param>
<param>
- <key>notebook</key>
+ <key>width7</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color7</key>
+ <value>"yellow"</value>
+ </param>
+ <param>
+ <key>alpha7</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label8</key>
<value></value>
</param>
<param>
+ <key>width8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color8</key>
+ <value>"dark red"</value>
+ </param>
+ <param>
+ <key>alpha8</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label9</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color9</key>
+ <value>"dark green"</value>
+ </param>
+ <param>
+ <key>alpha9</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label10</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color10</key>
+ <value>"dark blue"</value>
+ </param>
+ <param>
+ <key>alpha10</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(549, 0)</value>
+ <value>(929, 436)</value>
</param>
<param>
<key>_rotation</key>
@@ -857,50 +1861,50 @@
</param>
</block>
<connection>
- <source_block_id>channels_channel_model_0</source_block_id>
- <sink_block_id>wxgui_scopesink2_0</sink_block_id>
+ <source_block_id>analog_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>channels_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>blocks_throttle_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>analog_random_source_x</source_block_id>
- <sink_block_id>digital_psk_mod_0</sink_block_id>
+ <source_block_id>blocks_throttle_0</source_block_id>
+ <sink_block_id>channels_channel_model_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>blocks_throttle_0</sink_block_id>
+ <source_block_id>channels_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>blocks_throttle_0</source_block_id>
- <sink_block_id>channels_channel_model_0</sink_block_id>
+ <source_block_id>channels_channel_model_0</source_block_id>
+ <sink_block_id>qtgui_freq_sink_x_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>channels_channel_model_0</source_block_id>
- <sink_block_id>digital_fll_band_edge_cc_0</sink_block_id>
+ <sink_block_id>qtgui_time_sink_x_0_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>
+ <sink_block_id>qtgui_time_sink_x_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>
+ <sink_block_id>qtgui_freq_sink_x_1</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
diff --git a/gr-digital/examples/demod/dpsk_loopback.grc b/gr-digital/examples/demod/dpsk_loopback.grc
index daa076c47b..c0ad423a5b 100644
--- a/gr-digital/examples/demod/dpsk_loopback.grc
+++ b/gr-digital/examples/demod/dpsk_loopback.grc
@@ -1,59 +1,51 @@
<?xml version='1.0' encoding='ASCII'?>
<flow_graph>
- <timestamp>Sat Nov 10 15:13:23 2012</timestamp>
+ <timestamp>Tue Jul 8 23:26:29 2014</timestamp>
<block>
- <key>options</key>
+ <key>blocks_throttle</key>
<param>
<key>id</key>
- <value>dpsk_loopback</value>
+ <value>blocks_throttle_0_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>title</key>
- <value>DPSK Loopback</value>
- </param>
- <param>
- <key>author</key>
- <value>GNU Radio</value>
- </param>
- <param>
- <key>description</key>
- <value>Encode a signal into a packet, modulate, demodulate, decode and show it's the same data.</value>
+ <key>type</key>
+ <value>float</value>
</param>
<param>
- <key>window_size</key>
- <value>1280, 1024</value>
+ <key>samples_per_second</key>
+ <value>samp_rate</value>
</param>
<param>
- <key>generate_options</key>
- <value>wx_gui</value>
+ <key>vlen</key>
+ <value>1</value>
</param>
<param>
- <key>category</key>
- <value>Custom</value>
+ <key>ignoretag</key>
+ <value>True</value>
</param>
<param>
- <key>run_options</key>
- <value>prompt</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>run</key>
- <value>True</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>max_nouts</key>
+ <key>minoutbuf</key>
<value>0</value>
</param>
<param>
- <key>realtime_scheduling</key>
- <value></value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(10, 10)</value>
+ <value>(381, 51)</value>
</param>
<param>
<key>_rotation</key>
@@ -75,63 +67,12 @@
<value>10000</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(11, 120)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>variable_slider</key>
- <param>
- <key>id</key>
- <value>freq</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>label</key>
- <value>Frequency (Hz)</value>
- </param>
- <param>
- <key>value</key>
- <value>500</value>
- </param>
- <param>
- <key>min</key>
- <value>0</value>
- </param>
- <param>
- <key>max</key>
- <value>samp_rate/2</value>
- </param>
- <param>
- <key>num_steps</key>
- <value>100</value>
- </param>
- <param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
- </param>
- <param>
- <key>converver</key>
- <value>float_converter</value>
- </param>
- <param>
- <key>grid_pos</key>
- <value></value>
- </param>
- <param>
- <key>notebook</key>
+ <key>alias</key>
<value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(13, 188)</value>
+ <value>(5, 115)</value>
</param>
<param>
<key>_rotation</key>
@@ -139,10 +80,10 @@
</param>
</block>
<block>
- <key>blocks_throttle</key>
+ <key>blks2_packet_encoder</key>
<param>
<key>id</key>
- <value>blocks_throttle_0_0</value>
+ <value>blks2_packet_encoder_0</value>
</param>
<param>
<key>_enabled</key>
@@ -153,54 +94,43 @@
<value>float</value>
</param>
<param>
- <key>samples_per_second</key>
- <value>samp_rate</value>
+ <key>samples_per_symbol</key>
+ <value>2</value>
</param>
<param>
- <key>vlen</key>
+ <key>bits_per_symbol</key>
<value>1</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(381, 51)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
+ <key>preamble</key>
+ <value></value>
</param>
- </block>
- <block>
- <key>blks2_packet_encoder</key>
<param>
- <key>id</key>
- <value>blks2_packet_encoder_0</value>
+ <key>access_code</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
+ <key>pad_for_usrp</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>float</value>
- </param>
- <param>
- <key>samples_per_symbol</key>
- <value>2</value>
+ <key>payload_length</key>
+ <value>0</value>
</param>
<param>
- <key>bits_per_symbol</key>
- <value>1</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>access_code</key>
+ <key>affinity</key>
<value></value>
</param>
<param>
- <key>pad_for_usrp</key>
- <value>True</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>payload_length</key>
+ <key>maxoutbuf</key>
<value>0</value>
</param>
<param>
@@ -247,6 +177,22 @@
<value>False</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(806, 27)</value>
</param>
@@ -306,6 +252,22 @@
<value>False</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(745, 139)</value>
</param>
@@ -315,10 +277,10 @@
</param>
</block>
<block>
- <key>wxgui_scopesink2</key>
+ <key>blks2_packet_decoder</key>
<param>
<key>id</key>
- <value>wxgui_scopesink2_0</value>
+ <value>blks2_packet_decoder_0</value>
</param>
<param>
<key>_enabled</key>
@@ -329,60 +291,367 @@
<value>float</value>
</param>
<param>
- <key>title</key>
- <value>Scope Plot</value>
+ <key>access_code</key>
+ <value></value>
</param>
<param>
- <key>samp_rate</key>
- <value>samp_rate</value>
+ <key>threshold</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>v_scale</key>
+ <key>minoutbuf</key>
<value>0</value>
</param>
<param>
- <key>v_offset</key>
+ <key>maxoutbuf</key>
<value>0</value>
</param>
<param>
- <key>t_scale</key>
- <value>1./freq</value>
+ <key>_coordinate</key>
+ <value>(545, 187)</value>
</param>
<param>
- <key>ac_couple</key>
- <value>False</value>
+ <key>_rotation</key>
+ <value>180</value>
+ </param>
+ </block>
+ <block>
+ <key>qtgui_time_sink_x</key>
+ <param>
+ <key>id</key>
+ <value>qtgui_time_sink_x_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>xy_mode</key>
+ <key>type</key>
+ <value>float</value>
+ </param>
+ <param>
+ <key>name</key>
+ <value>QT GUI Plot</value>
+ </param>
+ <param>
+ <key>size</key>
+ <value>1024</value>
+ </param>
+ <param>
+ <key>srate</key>
+ <value>samp_rate</value>
+ </param>
+ <param>
+ <key>autoscale</key>
<value>False</value>
</param>
<param>
- <key>num_inputs</key>
+ <key>ymin</key>
+ <value>-1.1</value>
+ </param>
+ <param>
+ <key>ymax</key>
+ <value>1.1</value>
+ </param>
+ <param>
+ <key>nconnections</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>update_time</key>
+ <value>0.10</value>
+ </param>
+ <param>
+ <key>entags</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value></value>
+ </param>
+ <param>
+ <key>tr_mode</key>
+ <value>qtgui.TRIG_MODE_FREE</value>
+ </param>
+ <param>
+ <key>tr_slope</key>
+ <value>qtgui.TRIG_SLOPE_POS</value>
+ </param>
+ <param>
+ <key>tr_level</key>
+ <value>0.0</value>
+ </param>
+ <param>
+ <key>tr_delay</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>tr_chan</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>tr_tag</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>label1</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width1</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color1</key>
+ <value>"blue"</value>
+ </param>
+ <param>
+ <key>style1</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker1</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha1</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width2</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color2</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>style2</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker2</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha2</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width3</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color3</key>
+ <value>"green"</value>
+ </param>
+ <param>
+ <key>style3</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker3</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha3</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width4</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color4</key>
+ <value>"black"</value>
+ </param>
+ <param>
+ <key>style4</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker4</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha4</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width5</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color5</key>
+ <value>"cyan"</value>
+ </param>
+ <param>
+ <key>style5</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker5</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha5</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width6</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color6</key>
+ <value>"magenta"</value>
+ </param>
+ <param>
+ <key>style6</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker6</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha6</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width7</key>
<value>1</value>
</param>
<param>
- <key>win_size</key>
+ <key>color7</key>
+ <value>"yellow"</value>
+ </param>
+ <param>
+ <key>style7</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker7</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha7</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label8</key>
<value></value>
</param>
<param>
- <key>grid_pos</key>
+ <key>width8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color8</key>
+ <value>"dark red"</value>
+ </param>
+ <param>
+ <key>style8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker8</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha8</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label9</key>
<value></value>
</param>
<param>
- <key>notebook</key>
+ <key>width9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color9</key>
+ <value>"dark green"</value>
+ </param>
+ <param>
+ <key>style9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker9</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha9</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label10</key>
<value></value>
</param>
<param>
- <key>trig_mode</key>
- <value>wxgui.TRIG_MODE_AUTO</value>
+ <key>width10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color10</key>
+ <value>"blue"</value>
</param>
<param>
- <key>y_axis_label</key>
- <value>Counts</value>
+ <key>style10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker10</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha10</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(184, 163)</value>
+ <value>(249, 172)</value>
</param>
<param>
<key>_rotation</key>
@@ -390,42 +659,121 @@
</param>
</block>
<block>
- <key>analog_sig_source_x</key>
+ <key>variable_qtgui_range</key>
<param>
<key>id</key>
- <value>analog_sig_source_x_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></value>
</param>
<param>
- <key>samp_rate</key>
- <value>samp_rate</value>
+ <key>value</key>
+ <value>500</value>
</param>
<param>
- <key>waveform</key>
- <value>analog.GR_COS_WAVE</value>
+ <key>start</key>
+ <value>0</value>
</param>
<param>
- <key>freq</key>
- <value>freq</value>
+ <key>stop</key>
+ <value>5000</value>
</param>
<param>
- <key>amp</key>
+ <key>step</key>
<value>1</value>
</param>
<param>
- <key>offset</key>
+ <key>widget</key>
+ <value>counter_slider</value>
+ </param>
+ <param>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
+ </param>
+ <param>
+ <key>min_len</key>
+ <value>200</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value></value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(0, 187)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
<value>0</value>
</param>
+ </block>
+ <block>
+ <key>options</key>
+ <param>
+ <key>id</key>
+ <value>dpsk_loopback</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>title</key>
+ <value>DPSK Loopback</value>
+ </param>
+ <param>
+ <key>author</key>
+ <value>GNU Radio</value>
+ </param>
+ <param>
+ <key>description</key>
+ <value>Encode a signal into a packet, modulate, demodulate, decode and show it's the same data.</value>
+ </param>
+ <param>
+ <key>window_size</key>
+ <value>1280, 1024</value>
+ </param>
+ <param>
+ <key>generate_options</key>
+ <value>qt_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>alias</key>
+ <value></value>
+ </param>
<param>
<key>_coordinate</key>
- <value>(190, 19)</value>
+ <value>(0, -1)</value>
</param>
<param>
<key>_rotation</key>
@@ -433,10 +781,10 @@
</param>
</block>
<block>
- <key>blks2_packet_decoder</key>
+ <key>analog_sig_source_x</key>
<param>
<key>id</key>
- <value>blks2_packet_decoder_0</value>
+ <value>analog_sig_source_x_0</value>
</param>
<param>
<key>_enabled</key>
@@ -447,29 +795,51 @@
<value>float</value>
</param>
<param>
- <key>access_code</key>
+ <key>samp_rate</key>
+ <value>samp_rate</value>
+ </param>
+ <param>
+ <key>waveform</key>
+ <value>analog.GR_COS_WAVE</value>
+ </param>
+ <param>
+ <key>freq</key>
+ <value>freq</value>
+ </param>
+ <param>
+ <key>amp</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>offset</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>alias</key>
<value></value>
</param>
<param>
- <key>threshold</key>
- <value>-1</value>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(545, 187)</value>
+ <value>(188, 23)</value>
</param>
<param>
<key>_rotation</key>
- <value>180</value>
+ <value>0</value>
</param>
</block>
<connection>
- <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>
- <connection>
<source_block_id>blks2_packet_encoder_0</source_block_id>
<sink_block_id>digital_dxpsk_mod_1</sink_block_id>
<source_key>0</source_key>
@@ -499,4 +869,10 @@
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
+ <connection>
+ <source_block_id>blks2_packet_decoder_0</source_block_id>
+ <sink_block_id>qtgui_time_sink_x_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
</flow_graph>
diff --git a/gr-digital/examples/demod/mpsk_demod.grc b/gr-digital/examples/demod/mpsk_demod.grc
index f1f0e2fd6d..3c1c2e8726 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>Sun Mar 17 21:08:14 2013</timestamp>
+ <timestamp>Sat Jul 12 13:49:08 2014</timestamp>
<block>
<key>options</key>
<param>
@@ -52,6 +52,10 @@
<value></value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(10, 10)</value>
</param>
@@ -75,6 +79,10 @@
<value>32000</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(10, 170)</value>
</param>
@@ -84,6 +92,33 @@
</param>
</block>
<block>
+ <key>variable</key>
+ <param>
+ <key>id</key>
+ <value>samps_per_sym</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>4</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(12, 99)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
<key>analog_random_source_x</key>
<param>
<key>id</key>
@@ -114,6 +149,22 @@
<value>True</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(161, 119)</value>
</param>
@@ -123,234 +174,330 @@
</param>
</block>
<block>
- <key>variable</key>
+ <key>qtgui_const_sink_x</key>
<param>
<key>id</key>
- <value>samps_per_sym</value>
+ <value>qtgui_const_sink_x_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>4</value>
+ <key>type</key>
+ <value>complex</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(12, 99)</value>
+ <key>name</key>
+ <value></value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>size</key>
+ <value>1024</value>
</param>
- </block>
- <block>
- <key>variable_qtgui_range</key>
<param>
- <key>id</key>
- <value>freq_off</value>
+ <key>grid</key>
+ <value>False</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>autoscale</key>
+ <value>False</value>
</param>
<param>
- <key>label</key>
- <value>Freq. Offset</value>
+ <key>ymin</key>
+ <value>-2</value>
</param>
<param>
- <key>value</key>
+ <key>ymax</key>
+ <value>2</value>
+ </param>
+ <param>
+ <key>xmin</key>
+ <value>-2</value>
+ </param>
+ <param>
+ <key>xmax</key>
+ <value>2</value>
+ </param>
+ <param>
+ <key>nconnections</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>update_time</key>
+ <value>0.10</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value>notebook@0</value>
+ </param>
+ <param>
+ <key>tr_mode</key>
+ <value>qtgui.TRIG_MODE_FREE</value>
+ </param>
+ <param>
+ <key>tr_slope</key>
+ <value>qtgui.TRIG_SLOPE_POS</value>
+ </param>
+ <param>
+ <key>tr_level</key>
+ <value>0.0</value>
+ </param>
+ <param>
+ <key>tr_chan</key>
<value>0</value>
</param>
<param>
- <key>start</key>
- <value>-0.5</value>
+ <key>tr_tag</key>
+ <value>""</value>
</param>
<param>
- <key>stop</key>
- <value>0.5</value>
+ <key>label1</key>
+ <value></value>
</param>
<param>
- <key>step</key>
- <value>0.01</value>
+ <key>width1</key>
+ <value>1</value>
</param>
<param>
- <key>widget</key>
- <value>counter_slider</value>
+ <key>color1</key>
+ <value>"blue"</value>
</param>
<param>
- <key>orient</key>
- <value>Qt.Horizontal</value>
+ <key>style1</key>
+ <value>0</value>
</param>
<param>
- <key>min_len</key>
- <value>200</value>
+ <key>marker1</key>
+ <value>0</value>
</param>
<param>
- <key>gui_hint</key>
+ <key>alpha1</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label2</key>
<value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(17, 260)</value>
+ <key>width2</key>
+ <value>1</value>
</param>
<param>
- <key>_rotation</key>
+ <key>color2</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>style2</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>variable_qtgui_range</key>
<param>
- <key>id</key>
- <value>noise</value>
+ <key>marker2</key>
+ <value>0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>alpha2</key>
+ <value>1.0</value>
</param>
<param>
- <key>label</key>
- <value>Noise</value>
+ <key>label3</key>
+ <value></value>
</param>
<param>
- <key>value</key>
- <value>0.1</value>
+ <key>width3</key>
+ <value>1</value>
</param>
<param>
- <key>start</key>
+ <key>color3</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>style3</key>
<value>0</value>
</param>
<param>
- <key>stop</key>
+ <key>marker3</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>alpha3</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width4</key>
<value>1</value>
</param>
<param>
- <key>step</key>
- <value>0.01</value>
+ <key>color4</key>
+ <value>"red"</value>
</param>
<param>
- <key>widget</key>
- <value>counter_slider</value>
+ <key>style4</key>
+ <value>0</value>
</param>
<param>
- <key>orient</key>
- <value>Qt.Horizontal</value>
+ <key>marker4</key>
+ <value>0</value>
</param>
<param>
- <key>min_len</key>
- <value>200</value>
+ <key>alpha4</key>
+ <value>1.0</value>
</param>
<param>
- <key>gui_hint</key>
+ <key>label5</key>
<value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(146, 262)</value>
+ <key>width5</key>
+ <value>1</value>
</param>
<param>
- <key>_rotation</key>
+ <key>color5</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>style5</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>qtgui_tab_widget</key>
<param>
- <key>id</key>
- <value>notebook</value>
+ <key>marker5</key>
+ <value>0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>alpha5</key>
+ <value>1.0</value>
</param>
<param>
- <key>num_tabs</key>
- <value>2</value>
+ <key>label6</key>
+ <value></value>
</param>
<param>
- <key>label0</key>
- <value>Constellation</value>
+ <key>width6</key>
+ <value>1</value>
</param>
<param>
- <key>label1</key>
- <value>Spectrum</value>
+ <key>color6</key>
+ <value>"red"</value>
</param>
<param>
- <key>label2</key>
- <value>Tab 2</value>
+ <key>style6</key>
+ <value>0</value>
</param>
<param>
- <key>label3</key>
- <value>Tab 3</value>
+ <key>marker6</key>
+ <value>0</value>
</param>
<param>
- <key>label4</key>
- <value>Tab 4</value>
+ <key>alpha6</key>
+ <value>1.0</value>
</param>
<param>
- <key>gui_hint</key>
+ <key>label7</key>
<value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(21, 394)</value>
+ <key>width7</key>
+ <value>1</value>
</param>
<param>
- <key>_rotation</key>
+ <key>color7</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>style7</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>qtgui_const_sink_x</key>
<param>
- <key>id</key>
- <value>qtgui_const_sink_x_0</value>
+ <key>marker7</key>
+ <value>0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>alpha7</key>
+ <value>1.0</value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
+ <key>label8</key>
+ <value></value>
</param>
<param>
- <key>name</key>
+ <key>width8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color8</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>style8</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>marker8</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>alpha8</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label9</key>
<value></value>
</param>
<param>
- <key>size</key>
- <value>1024</value>
+ <key>width9</key>
+ <value>1</value>
</param>
<param>
- <key>ymin</key>
- <value>-2</value>
+ <key>color9</key>
+ <value>"red"</value>
</param>
<param>
- <key>ymax</key>
- <value>2</value>
+ <key>style9</key>
+ <value>0</value>
</param>
<param>
- <key>xmin</key>
- <value>-2</value>
+ <key>marker9</key>
+ <value>0</value>
</param>
<param>
- <key>xmax</key>
- <value>2</value>
+ <key>alpha9</key>
+ <value>1.0</value>
</param>
<param>
- <key>nconnections</key>
+ <key>label10</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width10</key>
<value>1</value>
</param>
<param>
- <key>update_time</key>
- <value>0.10</value>
+ <key>color10</key>
+ <value>"red"</value>
</param>
<param>
- <key>gui_hint</key>
- <value>notebook@0</value>
+ <key>style10</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>marker10</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>alpha10</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
@@ -396,6 +543,18 @@
<value>samp_rate</value>
</param>
<param>
+ <key>grid</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>autoscale</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>average</key>
+ <value>1.0</value>
+ </param>
+ <param>
<key>ymin</key>
<value>-140</value>
</param>
@@ -416,6 +575,186 @@
<value>notebook@1</value>
</param>
<param>
+ <key>showports</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>label1</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width1</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color1</key>
+ <value>"blue"</value>
+ </param>
+ <param>
+ <key>alpha1</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width2</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color2</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>alpha2</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width3</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color3</key>
+ <value>"green"</value>
+ </param>
+ <param>
+ <key>alpha3</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width4</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color4</key>
+ <value>"black"</value>
+ </param>
+ <param>
+ <key>alpha4</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width5</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color5</key>
+ <value>"cyan"</value>
+ </param>
+ <param>
+ <key>alpha5</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width6</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color6</key>
+ <value>"magenta"</value>
+ </param>
+ <param>
+ <key>alpha6</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width7</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color7</key>
+ <value>"yellow"</value>
+ </param>
+ <param>
+ <key>alpha7</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label8</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color8</key>
+ <value>"dark red"</value>
+ </param>
+ <param>
+ <key>alpha8</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label9</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color9</key>
+ <value>"dark green"</value>
+ </param>
+ <param>
+ <key>alpha9</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label10</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color10</key>
+ <value>"dark blue"</value>
+ </param>
+ <param>
+ <key>alpha10</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(810, 65)</value>
</param>
@@ -459,6 +798,22 @@
<value>False</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(361, 119)</value>
</param>
@@ -490,6 +845,26 @@
<value>1</value>
</param>
<param>
+ <key>ignoretag</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(597, 142)</value>
</param>
@@ -529,6 +904,26 @@
<value>0</value>
</param>
<param>
+ <key>block_tags</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(494, 263)</value>
</param>
@@ -537,6 +932,175 @@
<value>0</value>
</param>
</block>
+ <block>
+ <key>variable_qtgui_range</key>
+ <param>
+ <key>id</key>
+ <value>freq_off</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>label</key>
+ <value>Freq. Offset</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>start</key>
+ <value>-0.5</value>
+ </param>
+ <param>
+ <key>stop</key>
+ <value>0.5</value>
+ </param>
+ <param>
+ <key>step</key>
+ <value>0.01</value>
+ </param>
+ <param>
+ <key>widget</key>
+ <value>counter_slider</value>
+ </param>
+ <param>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
+ </param>
+ <param>
+ <key>min_len</key>
+ <value>200</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value>1,1,1,1</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(17, 260)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable_qtgui_range</key>
+ <param>
+ <key>id</key>
+ <value>noise</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>label</key>
+ <value>Noise</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>0.1</value>
+ </param>
+ <param>
+ <key>start</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>stop</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>step</key>
+ <value>0.01</value>
+ </param>
+ <param>
+ <key>widget</key>
+ <value>counter_slider</value>
+ </param>
+ <param>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
+ </param>
+ <param>
+ <key>min_len</key>
+ <value>200</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value>1,0,1,1</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(146, 262)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>qtgui_tab_widget</key>
+ <param>
+ <key>id</key>
+ <value>notebook</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>num_tabs</key>
+ <value>2</value>
+ </param>
+ <param>
+ <key>label0</key>
+ <value>Constellation</value>
+ </param>
+ <param>
+ <key>label1</key>
+ <value>Spectrum</value>
+ </param>
+ <param>
+ <key>label2</key>
+ <value>Tab 2</value>
+ </param>
+ <param>
+ <key>label3</key>
+ <value>Tab 3</value>
+ </param>
+ <param>
+ <key>label4</key>
+ <value>Tab 4</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value>0,0,1,2</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(21, 394)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
<connection>
<source_block_id>analog_random_source_x_0</source_block_id>
<sink_block_id>digital_dxpsk_mod_0</sink_block_id>
diff --git a/gr-digital/examples/demod/pam_sync.grc b/gr-digital/examples/demod/pam_sync.grc
index 98b4d4a63d..e3de4296e2 100644
--- a/gr-digital/examples/demod/pam_sync.grc
+++ b/gr-digital/examples/demod/pam_sync.grc
@@ -1,59 +1,54 @@
<?xml version='1.0' encoding='ASCII'?>
<flow_graph>
- <timestamp>Sun Mar 17 21:08:58 2013</timestamp>
+ <timestamp>Wed Jul 9 12:32:34 2014</timestamp>
<block>
- <key>options</key>
+ <key>variable</key>
<param>
<key>id</key>
- <value>pam_sync</value>
+ <value>sig_amp</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>title</key>
- <value></value>
- </param>
- <param>
- <key>author</key>
- <value></value>
+ <key>value</key>
+ <value>1.0</value>
</param>
<param>
- <key>description</key>
+ <key>alias</key>
<value></value>
</param>
<param>
- <key>window_size</key>
- <value>1280, 1024</value>
- </param>
- <param>
- <key>generate_options</key>
- <value>wx_gui</value>
+ <key>_coordinate</key>
+ <value>(887, -1)</value>
</param>
<param>
- <key>category</key>
- <value>Custom</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
+ </block>
+ <block>
+ <key>variable</key>
<param>
- <key>run_options</key>
- <value>prompt</value>
+ <key>id</key>
+ <value>const</value>
</param>
<param>
- <key>run</key>
+ <key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>max_nouts</key>
- <value>0</value>
+ <key>value</key>
+ <value>digital.qpsk_constellation()</value>
</param>
<param>
- <key>realtime_scheduling</key>
+ <key>alias</key>
<value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(-1, 0)</value>
+ <value>(336, -2)</value>
</param>
<param>
<key>_rotation</key>
@@ -64,7 +59,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>const</value>
+ <value>samp_rate</value>
</param>
<param>
<key>_enabled</key>
@@ -72,11 +67,15 @@
</param>
<param>
<key>value</key>
- <value>digital.qpsk_constellation()</value>
+ <value>128000</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(336, -2)</value>
+ <value>(193, -1)</value>
</param>
<param>
<key>_rotation</key>
@@ -84,22 +83,26 @@
</param>
</block>
<block>
- <key>virtual_sink</key>
+ <key>variable</key>
<param>
<key>id</key>
- <value>virtual_sink_0</value>
+ <value>spb</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>stream_id</key>
- <value>input_signal_probe</value>
+ <key>value</key>
+ <value>4.0</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(330, 183)</value>
+ <value>(513, -1)</value>
</param>
<param>
<key>_rotation</key>
@@ -110,7 +113,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>samp_rate</value>
+ <value>rolloff</value>
</param>
<param>
<key>_enabled</key>
@@ -118,11 +121,15 @@
</param>
<param>
<key>value</key>
- <value>128000</value>
+ <value>0.35</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(193, -1)</value>
+ <value>(578, -1)</value>
</param>
<param>
<key>_rotation</key>
@@ -130,38 +137,53 @@
</param>
</block>
<block>
- <key>analog_random_source_x</key>
+ <key>variable</key>
<param>
<key>id</key>
- <value>analog_random_source_x</value>
+ <value>rrctaps</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>byte</value>
+ <key>value</key>
+ <value>firdes.root_raised_cosine(nfilts,1.0,1.0/(nfilts*spb), rolloff, int(11*spb*nfilts))</value>
</param>
<param>
- <key>min</key>
- <value>0</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>max</key>
- <value>const.arity()</value>
+ <key>_coordinate</key>
+ <value>(660, 0)</value>
</param>
<param>
- <key>num_samps</key>
- <value>10000000</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
+ </block>
+ <block>
+ <key>variable</key>
<param>
- <key>repeat</key>
+ <key>id</key>
+ <value>nfilts</value>
+ </param>
+ <param>
+ <key>_enabled</key>
<value>True</value>
</param>
<param>
+ <key>value</key>
+ <value>32</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(0, 72)</value>
+ <value>(816, 0)</value>
</param>
<param>
<key>_rotation</key>
@@ -169,74 +191,77 @@
</param>
</block>
<block>
- <key>wxgui_scopesink2</key>
+ <key>virtual_sink</key>
<param>
<key>id</key>
- <value>wxgui_scopesink2_0_0_1</value>
+ <value>virtual_sink_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
+ <key>stream_id</key>
+ <value>input_signal_probe</value>
</param>
<param>
- <key>title</key>
- <value>Pre-sync Signal</value>
+ <key>_coordinate</key>
+ <value>(330, 183)</value>
</param>
<param>
- <key>samp_rate</key>
- <value>samp_rate</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
+ </block>
+ <block>
+ <key>analog_random_source_x</key>
<param>
- <key>v_scale</key>
- <value>.5</value>
+ <key>id</key>
+ <value>analog_random_source_x</value>
</param>
<param>
- <key>v_offset</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>t_scale</key>
- <value>0</value>
+ <key>type</key>
+ <value>byte</value>
</param>
<param>
- <key>ac_couple</key>
- <value>False</value>
+ <key>min</key>
+ <value>0</value>
</param>
<param>
- <key>xy_mode</key>
- <value>False</value>
+ <key>max</key>
+ <value>const.arity()</value>
</param>
<param>
- <key>num_inputs</key>
- <value>1</value>
+ <key>num_samps</key>
+ <value>10000000</value>
</param>
<param>
- <key>win_size</key>
- <value></value>
+ <key>repeat</key>
+ <value>True</value>
</param>
<param>
- <key>grid_pos</key>
+ <key>alias</key>
<value></value>
</param>
<param>
- <key>notebook</key>
- <value>notebook_0,1</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>trig_mode</key>
- <value>wxgui.TRIG_MODE_AUTO</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>y_axis_label</key>
- <value>Counts</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(1081, 439)</value>
+ <value>(0, 72)</value>
</param>
<param>
<key>_rotation</key>
@@ -244,90 +269,121 @@
</param>
</block>
<block>
- <key>wxgui_fftsink2</key>
+ <key>digital_chunks_to_symbols_xx</key>
<param>
<key>id</key>
- <value>wxgui_fftsink2_0</value>
+ <value>digital_chunks_to_symbols_xx</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
+ <key>in_type</key>
+ <value>byte</value>
+ </param>
+ <param>
+ <key>out_type</key>
<value>complex</value>
</param>
<param>
- <key>title</key>
- <value>Received spectrum</value>
+ <key>symbol_table</key>
+ <value>const.points()</value>
</param>
<param>
- <key>samp_rate</key>
- <value>samp_rate</value>
+ <key>dimension</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>num_ports</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>baseband_freq</key>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
<value>0</value>
</param>
<param>
- <key>y_per_div</key>
- <value>10</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>y_divs</key>
- <value>10</value>
+ <key>_coordinate</key>
+ <value>(178, 87)</value>
</param>
<param>
- <key>ref_level</key>
- <value>10</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
+ </block>
+ <block>
+ <key>digital_pfb_clock_sync_xxx</key>
<param>
- <key>ref_scale</key>
- <value>2.0</value>
+ <key>id</key>
+ <value>digital_pfb_clock_sync_xxx_0</value>
</param>
<param>
- <key>fft_size</key>
- <value>1024</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>fft_rate</key>
- <value>30</value>
+ <key>type</key>
+ <value>ccf</value>
</param>
<param>
- <key>peak_hold</key>
- <value>False</value>
+ <key>sps</key>
+ <value>spb</value>
</param>
<param>
- <key>average</key>
- <value>False</value>
+ <key>loop_bw</key>
+ <value>time_bw</value>
</param>
<param>
- <key>avg_alpha</key>
- <value>0</value>
+ <key>taps</key>
+ <value>rrctaps</value>
+ </param>
+ <param>
+ <key>filter_size</key>
+ <value>nfilts</value>
+ </param>
+ <param>
+ <key>init_phase</key>
+ <value>16</value>
</param>
<param>
- <key>win</key>
- <value>None</value>
+ <key>max_dev</key>
+ <value>1.5</value>
+ </param>
+ <param>
+ <key>osps</key>
+ <value>1</value>
</param>
<param>
- <key>win_size</key>
+ <key>alias</key>
<value></value>
</param>
<param>
- <key>grid_pos</key>
+ <key>affinity</key>
<value></value>
</param>
<param>
- <key>notebook</key>
- <value>notebook_0,1</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>freqvar</key>
- <value>None</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(1081, 563)</value>
+ <value>(598, 241)</value>
</param>
<param>
<key>_rotation</key>
@@ -335,54 +391,58 @@
</param>
</block>
<block>
- <key>variable_slider</key>
+ <key>channels_channel_model</key>
<param>
<key>id</key>
- <value>phase_bw</value>
+ <value>channels_channel_model_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>label</key>
- <value>Costas Loop (Phase) Bandwidth</value>
+ <key>noise_voltage</key>
+ <value>noise_amp</value>
</param>
<param>
- <key>value</key>
- <value>0</value>
+ <key>freq_offset</key>
+ <value>freq_offset</value>
</param>
<param>
- <key>min</key>
- <value>0</value>
+ <key>epsilon</key>
+ <value>interpratio</value>
</param>
<param>
- <key>max</key>
- <value>0.1</value>
+ <key>taps</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>seed</key>
+ <value>42</value>
</param>
<param>
- <key>num_steps</key>
- <value>1000</value>
+ <key>block_tags</key>
+ <value>False</value>
</param>
<param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>grid_pos</key>
- <value>(7,2,1,1)</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>notebook</key>
- <value></value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(866, 313)</value>
+ <value>(59, 184)</value>
</param>
<param>
<key>_rotation</key>
@@ -390,61 +450,46 @@
</param>
</block>
<block>
- <key>digital_chunks_to_symbols_xx</key>
+ <key>blocks_multiply_const_vxx</key>
<param>
<key>id</key>
- <value>digital_chunks_to_symbols_xx</value>
+ <value>blocks_multiply_const_vxx_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>
+ <key>type</key>
<value>complex</value>
</param>
<param>
- <key>symbol_table</key>
- <value>const.points()</value>
+ <key>const</key>
+ <value>sig_amp</value>
</param>
<param>
- <key>dimension</key>
+ <key>vlen</key>
<value>1</value>
</param>
<param>
- <key>num_ports</key>
- <value>1</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(178, 87)</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>_rotation</key>
+ <key>minoutbuf</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.0</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(513, -1)</value>
+ <value>(807, 95)</value>
</param>
<param>
<key>_rotation</key>
@@ -452,45 +497,50 @@
</param>
</block>
<block>
- <key>variable</key>
+ <key>blocks_throttle</key>
<param>
<key>id</key>
- <value>rolloff</value>
+ <value>blocks_throttle_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>0.35</value>
+ <key>type</key>
+ <value>complex</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(578, -1)</value>
+ <key>samples_per_second</key>
+ <value>samp_rate</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>vlen</key>
+ <value>1</value>
</param>
- </block>
- <block>
- <key>variable</key>
<param>
- <key>id</key>
- <value>rrctaps</value>
+ <key>ignoretag</key>
+ <value>True</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>value</key>
- <value>firdes.root_raised_cosine(nfilts,1.0,1.0/(nfilts*spb), rolloff, int(11*spb*nfilts))</value>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(660, 0)</value>
+ <value>(987, 95)</value>
</param>
<param>
<key>_rotation</key>
@@ -498,45 +548,58 @@
</param>
</block>
<block>
- <key>variable</key>
+ <key>pfb_arb_resampler_xxx</key>
<param>
<key>id</key>
- <value>sig_amp</value>
+ <value>pfb_arb_resampler_xxx_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>1.0</value>
+ <key>type</key>
+ <value>ccf</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(887, -1)</value>
+ <key>rrate</key>
+ <value>spb</value>
</param>
<param>
- <key>_rotation</key>
+ <key>taps</key>
+ <value>firdes.root_raised_cosine(nfilts, 1.0, 1.0/nfilts, rolloff, int(11*spb*nfilts))</value>
+ </param>
+ <param>
+ <key>nfilts</key>
+ <value>32</value>
+ </param>
+ <param>
+ <key>atten</key>
+ <value>100</value>
+ </param>
+ <param>
+ <key>samp_delay</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>variable</key>
<param>
- <key>id</key>
- <value>nfilts</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>value</key>
- <value>32</value>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(816, 0)</value>
+ <value>(455, 72)</value>
</param>
<param>
<key>_rotation</key>
@@ -544,50 +607,58 @@
</param>
</block>
<block>
- <key>digital_pfb_clock_sync_xxx</key>
+ <key>variable_qtgui_range</key>
<param>
<key>id</key>
- <value>digital_pfb_clock_sync_xxx_0</value>
+ <value>interpratio</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>ccf</value>
+ <key>label</key>
+ <value>Timing Offset</value>
</param>
<param>
- <key>sps</key>
- <value>spb</value>
+ <key>value</key>
+ <value>1</value>
</param>
<param>
- <key>loop_bw</key>
- <value>time_bw</value>
+ <key>start</key>
+ <value>.99</value>
</param>
<param>
- <key>taps</key>
- <value>rrctaps</value>
+ <key>stop</key>
+ <value>1.01</value>
</param>
<param>
- <key>filter_size</key>
- <value>nfilts</value>
+ <key>step</key>
+ <value>0.0001</value>
</param>
<param>
- <key>init_phase</key>
- <value>16</value>
+ <key>widget</key>
+ <value>counter_slider</value>
</param>
<param>
- <key>max_dev</key>
- <value>1.5</value>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
</param>
<param>
- <key>osps</key>
- <value>1</value>
+ <key>min_len</key>
+ <value>200</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value>3,2,1,1</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(598, 241)</value>
+ <value>(0, 452)</value>
</param>
<param>
<key>_rotation</key>
@@ -595,38 +666,58 @@
</param>
</block>
<block>
- <key>pfb_arb_resampler_xxx</key>
+ <key>variable_qtgui_range</key>
<param>
<key>id</key>
- <value>pfb_arb_resampler_xxx_0</value>
+ <value>noise_amp</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>ccf</value>
+ <key>label</key>
+ <value>Channel Noise</value>
</param>
<param>
- <key>rrate</key>
- <value>spb</value>
+ <key>value</key>
+ <value>0</value>
</param>
<param>
- <key>taps</key>
- <value>firdes.root_raised_cosine(nfilts, 1.0, 1.0/nfilts, rolloff, int(11*spb*nfilts))</value>
+ <key>start</key>
+ <value>0</value>
</param>
<param>
- <key>nfilts</key>
- <value>32</value>
+ <key>stop</key>
+ <value>1</value>
</param>
<param>
- <key>atten</key>
- <value>100</value>
+ <key>step</key>
+ <value>.001</value>
+ </param>
+ <param>
+ <key>widget</key>
+ <value>counter_slider</value>
+ </param>
+ <param>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
+ </param>
+ <param>
+ <key>min_len</key>
+ <value>200</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value>1,2,1,1</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(503, 63)</value>
+ <value>(136, 317)</value>
</param>
<param>
<key>_rotation</key>
@@ -634,7 +725,7 @@
</param>
</block>
<block>
- <key>variable_slider</key>
+ <key>variable_qtgui_range</key>
<param>
<key>id</key>
<value>freq_offset</value>
@@ -652,36 +743,40 @@
<value>0</value>
</param>
<param>
- <key>min</key>
- <value>-0.5</value>
+ <key>start</key>
+ <value>-.5</value>
</param>
<param>
- <key>max</key>
- <value>0.5</value>
+ <key>stop</key>
+ <value>.5</value>
+ </param>
+ <param>
+ <key>step</key>
+ <value>.01</value>
</param>
<param>
- <key>num_steps</key>
- <value>1000</value>
+ <key>widget</key>
+ <value>counter_slider</value>
</param>
<param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
</param>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>min_len</key>
+ <value>200</value>
</param>
<param>
- <key>grid_pos</key>
- <value>(2,2,1,1)</value>
+ <key>gui_hint</key>
+ <value>2,2,1,1</value>
</param>
<param>
- <key>notebook</key>
+ <key>alias</key>
<value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(8, 314)</value>
+ <value>(-1, 317)</value>
</param>
<param>
<key>_rotation</key>
@@ -689,54 +784,50 @@
</param>
</block>
<block>
- <key>variable_slider</key>
+ <key>qtgui_tab_widget</key>
<param>
<key>id</key>
- <value>noise_amp</value>
+ <value>notebook</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>label</key>
- <value>Channel Noise</value>
+ <key>num_tabs</key>
+ <value>2</value>
</param>
<param>
- <key>value</key>
- <value>0</value>
+ <key>label0</key>
+ <value>Synched Signal</value>
</param>
<param>
- <key>min</key>
- <value>0</value>
+ <key>label1</key>
+ <value>Received Signal</value>
</param>
<param>
- <key>max</key>
- <value>1.0</value>
+ <key>label2</key>
+ <value>Tab 2</value>
</param>
<param>
- <key>num_steps</key>
- <value>1000</value>
+ <key>label3</key>
+ <value>Tab 3</value>
</param>
<param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
+ <key>label4</key>
+ <value>Tab 4</value>
</param>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>gui_hint</key>
+ <value>1,1,8,1</value>
</param>
<param>
- <key>grid_pos</key>
- <value>(1,2,1,1)</value>
- </param>
- <param>
- <key>notebook</key>
+ <key>alias</key>
<value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(136, 314)</value>
+ <value>(150, 492)</value>
</param>
<param>
<key>_rotation</key>
@@ -744,38 +835,58 @@
</param>
</block>
<block>
- <key>channels_channel_model</key>
+ <key>variable_qtgui_range</key>
<param>
<key>id</key>
- <value>channels_channel_model_0</value>
+ <value>freq_bw</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>noise_voltage</key>
- <value>noise_amp</value>
+ <key>label</key>
+ <value>FLL Bandwidth</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>start</key>
+ <value>0</value>
</param>
<param>
- <key>taps</key>
- <value>1.0</value>
+ <key>stop</key>
+ <value>.05</value>
</param>
<param>
- <key>seed</key>
- <value>42</value>
+ <key>step</key>
+ <value>.001</value>
+ </param>
+ <param>
+ <key>widget</key>
+ <value>counter_slider</value>
+ </param>
+ <param>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
+ </param>
+ <param>
+ <key>min_len</key>
+ <value>200</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value>4,2,1,1</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(59, 184)</value>
+ <value>(331, 383)</value>
</param>
<param>
<key>_rotation</key>
@@ -813,8 +924,24 @@
<value>freq_bw</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(331, 238)</value>
+ <value>(331, 237)</value>
</param>
<param>
<key>_rotation</key>
@@ -822,145 +949,238 @@
</param>
</block>
<block>
- <key>variable_slider</key>
+ <key>qtgui_freq_sink_x</key>
<param>
<key>id</key>
- <value>freq_bw</value>
+ <value>qtgui_freq_sink_x_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>label</key>
- <value>FLL Bandwidth</value>
+ <key>type</key>
+ <value>complex</value>
</param>
<param>
- <key>value</key>
+ <key>name</key>
+ <value>Post-sync Spectrum</value>
+ </param>
+ <param>
+ <key>fftsize</key>
+ <value>1024</value>
+ </param>
+ <param>
+ <key>wintype</key>
+ <value>firdes.WIN_BLACKMAN_hARRIS</value>
+ </param>
+ <param>
+ <key>fc</key>
<value>0</value>
</param>
<param>
- <key>min</key>
- <value>0.0</value>
+ <key>bw</key>
+ <value>samp_rate</value>
</param>
<param>
- <key>max</key>
- <value>0.05</value>
+ <key>autoscale</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>average</key>
+ <value>0.2</value>
</param>
<param>
- <key>num_steps</key>
- <value>1000</value>
+ <key>ymin</key>
+ <value>-140</value>
</param>
<param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
+ <key>ymax</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>nconnections</key>
+ <value>1</value>
</param>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>update_time</key>
+ <value>0.10</value>
</param>
<param>
- <key>grid_pos</key>
- <value>(4,2,1,1)</value>
+ <key>gui_hint</key>
+ <value>notebook@0</value>
</param>
<param>
- <key>notebook</key>
+ <key>label1</key>
<value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(335, 379)</value>
+ <key>width1</key>
+ <value>1</value>
</param>
<param>
- <key>_rotation</key>
- <value>180</value>
+ <key>color1</key>
+ <value>"blue"</value>
</param>
- </block>
- <block>
- <key>wxgui_fftsink2</key>
<param>
- <key>id</key>
- <value>wxgui_fftsink2_0_0</value>
+ <key>alpha1</key>
+ <value>1.0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>label2</key>
+ <value></value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
+ <key>width2</key>
+ <value>1</value>
</param>
<param>
- <key>title</key>
- <value>Post-sync spectrum</value>
+ <key>color2</key>
+ <value>"red"</value>
</param>
<param>
- <key>samp_rate</key>
- <value>samp_rate</value>
+ <key>alpha2</key>
+ <value>1.0</value>
</param>
<param>
- <key>baseband_freq</key>
- <value>0</value>
+ <key>label3</key>
+ <value></value>
</param>
<param>
- <key>y_per_div</key>
- <value>10</value>
+ <key>width3</key>
+ <value>1</value>
</param>
<param>
- <key>y_divs</key>
- <value>10</value>
+ <key>color3</key>
+ <value>"green"</value>
</param>
<param>
- <key>ref_level</key>
- <value>10</value>
+ <key>alpha3</key>
+ <value>1.0</value>
</param>
<param>
- <key>ref_scale</key>
- <value>2.0</value>
+ <key>label4</key>
+ <value></value>
</param>
<param>
- <key>fft_size</key>
- <value>1024</value>
+ <key>width4</key>
+ <value>1</value>
</param>
<param>
- <key>fft_rate</key>
- <value>30</value>
+ <key>color4</key>
+ <value>"black"</value>
</param>
<param>
- <key>peak_hold</key>
- <value>False</value>
+ <key>alpha4</key>
+ <value>1.0</value>
</param>
<param>
- <key>average</key>
- <value>False</value>
+ <key>label5</key>
+ <value></value>
</param>
<param>
- <key>avg_alpha</key>
- <value>0</value>
+ <key>width5</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color5</key>
+ <value>"cyan"</value>
+ </param>
+ <param>
+ <key>alpha5</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width6</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color6</key>
+ <value>"magenta"</value>
+ </param>
+ <param>
+ <key>alpha6</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width7</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color7</key>
+ <value>"yellow"</value>
+ </param>
+ <param>
+ <key>alpha7</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label8</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color8</key>
+ <value>"dark red"</value>
</param>
<param>
- <key>win</key>
- <value>None</value>
+ <key>alpha8</key>
+ <value>1.0</value>
</param>
<param>
- <key>win_size</key>
+ <key>label9</key>
<value></value>
</param>
<param>
- <key>grid_pos</key>
+ <key>width9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color9</key>
+ <value>"dark green"</value>
+ </param>
+ <param>
+ <key>alpha9</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label10</key>
<value></value>
</param>
<param>
- <key>notebook</key>
- <value>notebook_0,0</value>
+ <key>width10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color10</key>
+ <value>"dark blue"</value>
+ </param>
+ <param>
+ <key>alpha10</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>freqvar</key>
- <value>None</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(337, 523)</value>
+ <value>(337, 519)</value>
</param>
<param>
<key>_rotation</key>
@@ -986,6 +1206,22 @@
<value>const.arity()</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(871, 225)</value>
</param>
@@ -995,10 +1231,10 @@
</param>
</block>
<block>
- <key>wxgui_scopesink2</key>
+ <key>qtgui_time_sink_x</key>
<param>
<key>id</key>
- <value>wxgui_scopesink2_0</value>
+ <value>qtgui_time_sink_x_0</value>
</param>
<param>
<key>_enabled</key>
@@ -1009,60 +1245,320 @@
<value>complex</value>
</param>
<param>
- <key>title</key>
+ <key>name</key>
<value>Post-sync Signal</value>
</param>
<param>
- <key>samp_rate</key>
+ <key>size</key>
+ <value>1024</value>
+ </param>
+ <param>
+ <key>srate</key>
<value>samp_rate</value>
</param>
<param>
- <key>v_scale</key>
- <value>0</value>
+ <key>autoscale</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>ymin</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>ymax</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>nconnections</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>update_time</key>
+ <value>0.10</value>
+ </param>
+ <param>
+ <key>entags</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value>notebook@0</value>
+ </param>
+ <param>
+ <key>tr_mode</key>
+ <value>qtgui.TRIG_MODE_FREE</value>
+ </param>
+ <param>
+ <key>tr_slope</key>
+ <value>qtgui.TRIG_SLOPE_POS</value>
+ </param>
+ <param>
+ <key>tr_level</key>
+ <value>0.0</value>
</param>
<param>
- <key>v_offset</key>
+ <key>tr_delay</key>
<value>0</value>
</param>
<param>
- <key>t_scale</key>
+ <key>tr_chan</key>
<value>0</value>
</param>
<param>
- <key>ac_couple</key>
- <value>False</value>
+ <key>tr_tag</key>
+ <value>""</value>
</param>
<param>
- <key>xy_mode</key>
- <value>True</value>
+ <key>label1</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width1</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color1</key>
+ <value>"blue"</value>
+ </param>
+ <param>
+ <key>style1</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker1</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha1</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width2</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color2</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>style2</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker2</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha2</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width3</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color3</key>
+ <value>"green"</value>
</param>
<param>
- <key>num_inputs</key>
+ <key>style3</key>
<value>1</value>
</param>
<param>
- <key>win_size</key>
+ <key>marker3</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha3</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width4</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color4</key>
+ <value>"black"</value>
+ </param>
+ <param>
+ <key>style4</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker4</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha4</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label5</key>
<value></value>
</param>
<param>
- <key>grid_pos</key>
+ <key>width5</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color5</key>
+ <value>"cyan"</value>
+ </param>
+ <param>
+ <key>style5</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker5</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha5</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label6</key>
<value></value>
</param>
<param>
- <key>notebook</key>
- <value>notebook_0,0</value>
+ <key>width6</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color6</key>
+ <value>"magenta"</value>
</param>
<param>
- <key>trig_mode</key>
- <value>wxgui.TRIG_MODE_AUTO</value>
+ <key>style6</key>
+ <value>1</value>
</param>
<param>
- <key>y_axis_label</key>
- <value>Counts</value>
+ <key>marker6</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha6</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width7</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color7</key>
+ <value>"yellow"</value>
+ </param>
+ <param>
+ <key>style7</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker7</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha7</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label8</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color8</key>
+ <value>"dark red"</value>
+ </param>
+ <param>
+ <key>style8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker8</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha8</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label9</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color9</key>
+ <value>"dark green"</value>
+ </param>
+ <param>
+ <key>style9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker9</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha9</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label10</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color10</key>
+ <value>"blue"</value>
+ </param>
+ <param>
+ <key>style10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker10</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha10</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(1103, 196)</value>
+ <value>(1096, 198)</value>
</param>
<param>
<key>_rotation</key>
@@ -1070,22 +1566,58 @@
</param>
</block>
<block>
- <key>virtual_source</key>
+ <key>variable_qtgui_range</key>
<param>
<key>id</key>
- <value>virtual_source_0</value>
+ <value>time_bw</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>stream_id</key>
- <value>input_signal_probe</value>
+ <key>label</key>
+ <value>Timing Loop BW</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>start</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>stop</key>
+ <value>.1</value>
+ </param>
+ <param>
+ <key>step</key>
+ <value>.001</value>
+ </param>
+ <param>
+ <key>widget</key>
+ <value>counter_slider</value>
+ </param>
+ <param>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
+ </param>
+ <param>
+ <key>min_len</key>
+ <value>200</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value>5,2,1,1</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(828, 562)</value>
+ <value>(586, 402)</value>
</param>
<param>
<key>_rotation</key>
@@ -1093,30 +1625,58 @@
</param>
</block>
<block>
- <key>blocks_multiply_const_vxx</key>
+ <key>variable_qtgui_range</key>
<param>
<key>id</key>
- <value>blocks_multiply_const_vxx_0</value>
+ <value>phase_bw</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
+ <key>label</key>
+ <value>Costas Loop (Phase) Bandwidth</value>
</param>
<param>
- <key>const</key>
- <value>sig_amp</value>
+ <key>value</key>
+ <value>0</value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>start</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>stop</key>
+ <value>.1</value>
+ </param>
+ <param>
+ <key>step</key>
+ <value>.001</value>
+ </param>
+ <param>
+ <key>widget</key>
+ <value>counter_slider</value>
+ </param>
+ <param>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
+ </param>
+ <param>
+ <key>min_len</key>
+ <value>200</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value>7,2,1,1</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(807, 95)</value>
+ <value>(844, 325)</value>
</param>
<param>
<key>_rotation</key>
@@ -1124,10 +1684,10 @@
</param>
</block>
<block>
- <key>blocks_throttle</key>
+ <key>qtgui_freq_sink_x</key>
<param>
<key>id</key>
- <value>blocks_throttle_0</value>
+ <value>qtgui_freq_sink_x_1</value>
</param>
<param>
<key>_enabled</key>
@@ -1138,16 +1698,224 @@
<value>complex</value>
</param>
<param>
- <key>samples_per_second</key>
+ <key>name</key>
+ <value>Received Spectrum</value>
+ </param>
+ <param>
+ <key>fftsize</key>
+ <value>1024</value>
+ </param>
+ <param>
+ <key>wintype</key>
+ <value>firdes.WIN_BLACKMAN_hARRIS</value>
+ </param>
+ <param>
+ <key>fc</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>bw</key>
<value>samp_rate</value>
</param>
<param>
- <key>vlen</key>
+ <key>autoscale</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>average</key>
+ <value>0.2</value>
+ </param>
+ <param>
+ <key>ymin</key>
+ <value>-140</value>
+ </param>
+ <param>
+ <key>ymax</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>nconnections</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>update_time</key>
+ <value>0.10</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value>notebook@1</value>
+ </param>
+ <param>
+ <key>label1</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width1</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color1</key>
+ <value>"blue"</value>
+ </param>
+ <param>
+ <key>alpha1</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width2</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color2</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>alpha2</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width3</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color3</key>
+ <value>"green"</value>
+ </param>
+ <param>
+ <key>alpha3</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width4</key>
<value>1</value>
</param>
<param>
+ <key>color4</key>
+ <value>"black"</value>
+ </param>
+ <param>
+ <key>alpha4</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width5</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color5</key>
+ <value>"cyan"</value>
+ </param>
+ <param>
+ <key>alpha5</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width6</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color6</key>
+ <value>"magenta"</value>
+ </param>
+ <param>
+ <key>alpha6</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width7</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color7</key>
+ <value>"yellow"</value>
+ </param>
+ <param>
+ <key>alpha7</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label8</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color8</key>
+ <value>"dark red"</value>
+ </param>
+ <param>
+ <key>alpha8</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label9</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color9</key>
+ <value>"dark green"</value>
+ </param>
+ <param>
+ <key>alpha9</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label10</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color10</key>
+ <value>"dark blue"</value>
+ </param>
+ <param>
+ <key>alpha10</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(987, 95)</value>
+ <value>(1101, 481)</value>
</param>
<param>
<key>_rotation</key>
@@ -1155,144 +1923,420 @@
</param>
</block>
<block>
- <key>variable_slider</key>
+ <key>virtual_source</key>
<param>
<key>id</key>
- <value>time_bw</value>
+ <value>virtual_source_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>label</key>
- <value>Timing Loop BW</value>
+ <key>stream_id</key>
+ <value>input_signal_probe</value>
</param>
<param>
- <key>value</key>
+ <key>_coordinate</key>
+ <value>(836, 476)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
<value>0</value>
</param>
+ </block>
+ <block>
+ <key>qtgui_time_sink_x</key>
<param>
- <key>min</key>
+ <key>id</key>
+ <value>qtgui_time_sink_x_0_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>complex</value>
+ </param>
+ <param>
+ <key>name</key>
+ <value>Pre-sync Signal</value>
+ </param>
+ <param>
+ <key>size</key>
+ <value>1024</value>
+ </param>
+ <param>
+ <key>srate</key>
+ <value>samp_rate</value>
+ </param>
+ <param>
+ <key>autoscale</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>ymin</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>ymax</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>nconnections</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>update_time</key>
+ <value>0.10</value>
+ </param>
+ <param>
+ <key>entags</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value>notebook@1</value>
+ </param>
+ <param>
+ <key>tr_mode</key>
+ <value>qtgui.TRIG_MODE_FREE</value>
+ </param>
+ <param>
+ <key>tr_slope</key>
+ <value>qtgui.TRIG_SLOPE_POS</value>
+ </param>
+ <param>
+ <key>tr_level</key>
+ <value>0.0</value>
+ </param>
+ <param>
+ <key>tr_delay</key>
<value>0</value>
</param>
<param>
- <key>max</key>
- <value>0.1</value>
+ <key>tr_chan</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>tr_tag</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>label1</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width1</key>
+ <value>1</value>
</param>
<param>
- <key>num_steps</key>
- <value>1000</value>
+ <key>color1</key>
+ <value>"blue"</value>
</param>
<param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
+ <key>style1</key>
+ <value>1</value>
</param>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>marker1</key>
+ <value>-1</value>
</param>
<param>
- <key>grid_pos</key>
- <value>(5,2,1,1)</value>
+ <key>alpha1</key>
+ <value>1.0</value>
</param>
<param>
- <key>notebook</key>
+ <key>label2</key>
<value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(598, 388)</value>
+ <key>width2</key>
+ <value>1</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>color2</key>
+ <value>"red"</value>
</param>
- </block>
- <block>
- <key>variable_slider</key>
<param>
- <key>id</key>
- <value>interpratio</value>
+ <key>style2</key>
+ <value>1</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>marker2</key>
+ <value>-1</value>
</param>
<param>
- <key>label</key>
- <value>Timing Offset</value>
+ <key>alpha2</key>
+ <value>1.0</value>
</param>
<param>
- <key>value</key>
- <value>1.00</value>
+ <key>label3</key>
+ <value></value>
</param>
<param>
- <key>min</key>
- <value>0.99</value>
+ <key>width3</key>
+ <value>1</value>
</param>
<param>
- <key>max</key>
- <value>1.01</value>
+ <key>color3</key>
+ <value>"green"</value>
+ </param>
+ <param>
+ <key>style3</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker3</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha3</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width4</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color4</key>
+ <value>"black"</value>
+ </param>
+ <param>
+ <key>style4</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker4</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha4</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label5</key>
+ <value></value>
</param>
<param>
- <key>num_steps</key>
- <value>1000</value>
+ <key>width5</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color5</key>
+ <value>"cyan"</value>
+ </param>
+ <param>
+ <key>style5</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker5</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha5</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width6</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color6</key>
+ <value>"magenta"</value>
+ </param>
+ <param>
+ <key>style6</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker6</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha6</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width7</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color7</key>
+ <value>"yellow"</value>
+ </param>
+ <param>
+ <key>style7</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker7</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha7</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label8</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color8</key>
+ <value>"dark red"</value>
+ </param>
+ <param>
+ <key>style8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker8</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha8</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label9</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color9</key>
+ <value>"dark green"</value>
+ </param>
+ <param>
+ <key>style9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker9</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha9</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label10</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color10</key>
+ <value>"blue"</value>
+ </param>
+ <param>
+ <key>style10</key>
+ <value>1</value>
</param>
<param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
+ <key>marker10</key>
+ <value>-1</value>
</param>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>alpha10</key>
+ <value>1.0</value>
</param>
<param>
- <key>grid_pos</key>
- <value>(3,2,1,1)</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>notebook</key>
+ <key>affinity</key>
<value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(42, 459)</value>
+ <value>(1104, 349)</value>
</param>
<param>
<key>_rotation</key>
- <value>180</value>
+ <value>0</value>
</param>
</block>
<block>
- <key>notebook</key>
+ <key>options</key>
<param>
<key>id</key>
- <value>notebook_0</value>
+ <value>pam_sync</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>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>qt_gui</value>
+ </param>
+ <param>
+ <key>category</key>
+ <value>Custom</value>
</param>
<param>
- <key>labels</key>
- <value>['Synched Signal', 'Received Signal']</value>
+ <key>run_options</key>
+ <value>prompt</value>
</param>
<param>
- <key>grid_pos</key>
- <value>(1,1,8,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>alias</key>
<value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(9, 601)</value>
+ <value>(-1, 0)</value>
</param>
<param>
<key>_rotation</key>
@@ -1318,12 +2362,6 @@
<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_key>0</source_key>
- <sink_key>0</sink_key>
- </connection>
- <connection>
<source_block_id>pfb_arb_resampler_xxx_0</source_block_id>
<sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
<source_key>0</source_key>
@@ -1336,44 +2374,50 @@
<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>analog_random_source_x</source_block_id>
+ <sink_block_id>digital_chunks_to_symbols_xx</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>blocks_throttle_0</source_block_id>
+ <sink_block_id>channels_channel_model_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>blocks_multiply_const_vxx_0</source_block_id>
+ <sink_block_id>blocks_throttle_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>analog_random_source_x</source_block_id>
- <sink_block_id>digital_chunks_to_symbols_xx</sink_block_id>
+ <source_block_id>digital_chunks_to_symbols_xx</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>blocks_throttle_0</source_block_id>
- <sink_block_id>channels_channel_model_0</sink_block_id>
+ <source_block_id>digital_fll_band_edge_cc_0</source_block_id>
+ <sink_block_id>qtgui_freq_sink_x_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
- <sink_block_id>blocks_throttle_0</sink_block_id>
+ <source_block_id>digital_costas_loop_cc_0</source_block_id>
+ <sink_block_id>qtgui_time_sink_x_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>digital_chunks_to_symbols_xx</source_block_id>
- <sink_block_id>pfb_arb_resampler_xxx_0</sink_block_id>
+ <source_block_id>virtual_source_0</source_block_id>
+ <sink_block_id>qtgui_freq_sink_x_1</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>qtgui_time_sink_x_0_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 0e4dd4933a..cb1f1ad981 100644
--- a/gr-digital/examples/demod/pam_timing.grc
+++ b/gr-digital/examples/demod/pam_timing.grc
@@ -1,6 +1,6 @@
<?xml version='1.0' encoding='ASCII'?>
<flow_graph>
- <timestamp>Tue Jan 15 15:21:46 2013</timestamp>
+ <timestamp>Sat Jul 12 13:50:56 2014</timestamp>
<block>
<key>options</key>
<param>
@@ -29,7 +29,7 @@
</param>
<param>
<key>generate_options</key>
- <value>wx_gui</value>
+ <value>qt_gui</value>
</param>
<param>
<key>category</key>
@@ -52,6 +52,10 @@
<value></value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(-1, 0)</value>
</param>
@@ -61,38 +65,53 @@
</param>
</block>
<block>
- <key>analog_random_source_x</key>
+ <key>variable</key>
<param>
<key>id</key>
- <value>analog_random_source_x</value>
+ <value>const</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>byte</value>
+ <key>value</key>
+ <value>digital.qpsk_constellation()</value>
</param>
<param>
- <key>min</key>
- <value>0</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>max</key>
- <value>const.arity()</value>
+ <key>_coordinate</key>
+ <value>(206, 116)</value>
</param>
<param>
- <key>num_samps</key>
- <value>10000000</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
+ </block>
+ <block>
+ <key>variable</key>
<param>
- <key>repeat</key>
+ <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>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(-1, 163)</value>
+ <value>(791, 46)</value>
</param>
<param>
<key>_rotation</key>
@@ -100,38 +119,53 @@
</param>
</block>
<block>
- <key>digital_chunks_to_symbols_xx</key>
+ <key>variable</key>
<param>
<key>id</key>
- <value>digital_chunks_to_symbols_xx</value>
+ <value>samp_rate</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>in_type</key>
- <value>byte</value>
+ <key>value</key>
+ <value>32000</value>
</param>
<param>
- <key>out_type</key>
- <value>complex</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>symbol_table</key>
- <value>const.points()</value>
+ <key>_coordinate</key>
+ <value>(267, 357)</value>
</param>
<param>
- <key>dimension</key>
- <value>1</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
+ </block>
+ <block>
+ <key>variable</key>
<param>
- <key>num_ports</key>
- <value>1</value>
+ <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>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(203, 178)</value>
+ <value>(300, 0)</value>
</param>
<param>
<key>_rotation</key>
@@ -142,7 +176,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>const</value>
+ <value>rolloff</value>
</param>
<param>
<key>_enabled</key>
@@ -150,11 +184,15 @@
</param>
<param>
<key>value</key>
- <value>digital.qpsk_constellation()</value>
+ <value>.35</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(206, 116)</value>
+ <value>(482, 335)</value>
</param>
<param>
<key>_rotation</key>
@@ -162,22 +200,26 @@
</param>
</block>
<block>
- <key>import</key>
+ <key>variable</key>
<param>
<key>id</key>
- <value>import_0</value>
+ <value>nfilts</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>import</key>
- <value>from gnuradio import digital</value>
+ <key>value</key>
+ <value>32</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(-1, 61)</value>
+ <value>(562, 334)</value>
</param>
<param>
<key>_rotation</key>
@@ -185,22 +227,54 @@
</param>
</block>
<block>
- <key>variable</key>
+ <key>analog_random_source_x</key>
<param>
<key>id</key>
- <value>spb</value>
+ <value>analog_random_source_x</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>4.2563</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>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(300, 0)</value>
+ <value>(-1, 163)</value>
</param>
<param>
<key>_rotation</key>
@@ -208,22 +282,54 @@
</param>
</block>
<block>
- <key>variable</key>
+ <key>digital_chunks_to_symbols_xx</key>
<param>
<key>id</key>
- <value>sig_amp</value>
+ <value>digital_chunks_to_symbols_xx</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>value</key>
+ <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>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(791, 46)</value>
+ <value>(203, 178)</value>
</param>
<param>
<key>_rotation</key>
@@ -253,6 +359,26 @@
<value>1</value>
</param>
<param>
+ <key>ignoretag</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(258, 431)</value>
</param>
@@ -292,6 +418,26 @@
<value>42</value>
</param>
<param>
+ <key>block_tags</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(57, 401)</value>
</param>
@@ -301,22 +447,58 @@
</param>
</block>
<block>
- <key>variable</key>
+ <key>pfb_arb_resampler_xxx</key>
<param>
<key>id</key>
- <value>samp_rate</value>
+ <value>pfb_arb_resampler_xxx_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>32000</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(nfilts, nfilts, 1.0, rolloff, 44*nfilts)</value>
+ </param>
+ <param>
+ <key>nfilts</key>
+ <value>32</value>
+ </param>
+ <param>
+ <key>atten</key>
+ <value>100</value>
+ </param>
+ <param>
+ <key>samp_delay</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(267, 357)</value>
+ <value>(458, 179)</value>
</param>
<param>
<key>_rotation</key>
@@ -324,22 +506,26 @@
</param>
</block>
<block>
- <key>variable</key>
+ <key>import</key>
<param>
<key>id</key>
- <value>rolloff</value>
+ <value>import_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>.35</value>
+ <key>import</key>
+ <value>from gnuradio import digital</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(482, 335)</value>
+ <value>(-1, 61)</value>
</param>
<param>
<key>_rotation</key>
@@ -347,22 +533,46 @@
</param>
</block>
<block>
- <key>variable</key>
+ <key>blocks_multiply_const_vxx</key>
<param>
<key>id</key>
- <value>nfilts</value>
+ <value>blocks_multiply_const_vxx_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>32</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>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(562, 335)</value>
+ <value>(760, 159)</value>
</param>
<param>
<key>_rotation</key>
@@ -370,10 +580,10 @@
</param>
</block>
<block>
- <key>digital_pfb_clock_sync_xxx</key>
+ <key>qtgui_time_sink_x</key>
<param>
<key>id</key>
- <value>digital_pfb_clock_sync_xxx_0</value>
+ <value>qtgui_time_sink_x_0</value>
</param>
<param>
<key>_enabled</key>
@@ -381,39 +591,335 @@
</param>
<param>
<key>type</key>
- <value>ccf</value>
+ <value>complex</value>
</param>
<param>
- <key>sps</key>
- <value>spb</value>
+ <key>name</key>
+ <value>Error</value>
</param>
<param>
- <key>loop_bw</key>
- <value>time_bw</value>
+ <key>ylabel</key>
+ <value>Amplitude</value>
</param>
<param>
- <key>taps</key>
- <value>firdes.root_raised_cosine(nfilts, nfilts*spb, 1.0, rolloff, 44*nfilts)</value>
+ <key>yunit</key>
+ <value>""</value>
</param>
<param>
- <key>filter_size</key>
- <value>nfilts</value>
+ <key>size</key>
+ <value>1024</value>
</param>
<param>
- <key>init_phase</key>
- <value>16</value>
+ <key>srate</key>
+ <value>samp_rate</value>
</param>
<param>
- <key>max_dev</key>
- <value>1.5</value>
+ <key>grid</key>
+ <value>False</value>
</param>
<param>
- <key>osps</key>
+ <key>autoscale</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>ymin</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>ymax</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>nconnections</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>update_time</key>
+ <value>0.10</value>
+ </param>
+ <param>
+ <key>entags</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value>notebook@3</value>
+ </param>
+ <param>
+ <key>tr_mode</key>
+ <value>qtgui.TRIG_MODE_FREE</value>
+ </param>
+ <param>
+ <key>tr_slope</key>
+ <value>qtgui.TRIG_SLOPE_POS</value>
+ </param>
+ <param>
+ <key>tr_level</key>
+ <value>0.0</value>
+ </param>
+ <param>
+ <key>tr_delay</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>tr_chan</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>tr_tag</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>label1</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width1</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color1</key>
+ <value>"blue"</value>
+ </param>
+ <param>
+ <key>style1</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker1</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha1</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width2</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color2</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>style2</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker2</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha2</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width3</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color3</key>
+ <value>"green"</value>
+ </param>
+ <param>
+ <key>style3</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker3</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha3</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width4</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color4</key>
+ <value>"black"</value>
+ </param>
+ <param>
+ <key>style4</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker4</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha4</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width5</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color5</key>
+ <value>"cyan"</value>
+ </param>
+ <param>
+ <key>style5</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker5</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha5</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width6</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color6</key>
+ <value>"magenta"</value>
+ </param>
+ <param>
+ <key>style6</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker6</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha6</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width7</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color7</key>
+ <value>"yellow"</value>
+ </param>
+ <param>
+ <key>style7</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker7</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha7</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label8</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color8</key>
+ <value>"dark red"</value>
+ </param>
+ <param>
+ <key>style8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker8</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha8</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label9</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color9</key>
+ <value>"dark green"</value>
+ </param>
+ <param>
+ <key>style9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker9</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha9</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label10</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width10</key>
<value>1</value>
</param>
<param>
+ <key>color10</key>
+ <value>"blue"</value>
+ </param>
+ <param>
+ <key>style10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker10</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha10</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(467, 403)</value>
+ <value>(1020, 128)</value>
</param>
<param>
<key>_rotation</key>
@@ -421,38 +927,50 @@
</param>
</block>
<block>
- <key>pfb_arb_resampler_xxx</key>
+ <key>qtgui_tab_widget</key>
<param>
<key>id</key>
- <value>pfb_arb_resampler_xxx_0</value>
+ <value>notebook</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>ccf</value>
+ <key>num_tabs</key>
+ <value>4</value>
</param>
<param>
- <key>rrate</key>
- <value>spb</value>
+ <key>label0</key>
+ <value>Error</value>
</param>
<param>
- <key>taps</key>
- <value>firdes.root_raised_cosine(nfilts, nfilts, 1.0, rolloff, 44*nfilts)</value>
+ <key>label1</key>
+ <value>Phase</value>
</param>
<param>
- <key>nfilts</key>
- <value>32</value>
+ <key>label2</key>
+ <value>Freq</value>
</param>
<param>
- <key>atten</key>
- <value>100</value>
+ <key>label3</key>
+ <value>Resampled Signal</value>
+ </param>
+ <param>
+ <key>label4</key>
+ <value>Tab 4</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value>1,1,5,1</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(458, 179)</value>
+ <value>(485, 554)</value>
</param>
<param>
<key>_rotation</key>
@@ -460,74 +978,176 @@
</param>
</block>
<block>
- <key>wxgui_scopesink2</key>
+ <key>variable_qtgui_range</key>
<param>
<key>id</key>
- <value>wxgui_scopesink2_0_0_1</value>
+ <value>interpratio</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
+ <key>label</key>
+ <value>Timing Offset</value>
</param>
<param>
- <key>title</key>
- <value>Error</value>
+ <key>value</key>
+ <value>1</value>
</param>
<param>
- <key>samp_rate</key>
- <value>samp_rate</value>
+ <key>start</key>
+ <value>.99</value>
</param>
<param>
- <key>v_scale</key>
- <value>.5</value>
+ <key>stop</key>
+ <value>1.01</value>
</param>
<param>
- <key>v_offset</key>
- <value>0</value>
+ <key>step</key>
+ <value>0.0001</value>
+ </param>
+ <param>
+ <key>widget</key>
+ <value>counter_slider</value>
+ </param>
+ <param>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
+ </param>
+ <param>
+ <key>min_len</key>
+ <value>200</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value>2,2,1,1</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(6, 526)</value>
</param>
<param>
- <key>t_scale</key>
+ <key>_rotation</key>
<value>0</value>
</param>
+ </block>
+ <block>
+ <key>variable_qtgui_range</key>
<param>
- <key>ac_couple</key>
- <value>False</value>
+ <key>id</key>
+ <value>noise_amp</value>
</param>
<param>
- <key>xy_mode</key>
- <value>False</value>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>label</key>
+ <value>Channel Noise</value>
</param>
<param>
- <key>num_inputs</key>
+ <key>value</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>start</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>stop</key>
<value>1</value>
</param>
<param>
- <key>win_size</key>
- <value></value>
+ <key>step</key>
+ <value>.001</value>
</param>
<param>
- <key>grid_pos</key>
+ <key>widget</key>
+ <value>counter_slider</value>
+ </param>
+ <param>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
+ </param>
+ <param>
+ <key>min_len</key>
+ <value>200</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value>3,2,1,1</value>
+ </param>
+ <param>
+ <key>alias</key>
<value></value>
</param>
<param>
- <key>notebook</key>
- <value>notebook_0,3</value>
+ <key>_coordinate</key>
+ <value>(130, 528)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable_qtgui_range</key>
+ <param>
+ <key>id</key>
+ <value>freq_offset</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>
+ </param>
+ <param>
+ <key>start</key>
+ <value>-.5</value>
+ </param>
+ <param>
+ <key>stop</key>
+ <value>.5</value>
+ </param>
+ <param>
+ <key>step</key>
+ <value>.01</value>
+ </param>
+ <param>
+ <key>widget</key>
+ <value>counter_slider</value>
+ </param>
+ <param>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
+ </param>
+ <param>
+ <key>min_len</key>
+ <value>200</value>
</param>
<param>
- <key>trig_mode</key>
- <value>wxgui.TRIG_MODE_AUTO</value>
+ <key>gui_hint</key>
+ <value>4,2,1,1</value>
</param>
<param>
- <key>y_axis_label</key>
- <value>Counts</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(961, 84)</value>
+ <value>(268, 527)</value>
</param>
<param>
<key>_rotation</key>
@@ -535,10 +1155,10 @@
</param>
</block>
<block>
- <key>wxgui_scopesink2</key>
+ <key>qtgui_time_sink_x</key>
<param>
<key>id</key>
- <value>wxgui_scopesink2_0_0_0</value>
+ <value>qtgui_time_sink_x_1_1</value>
</param>
<param>
<key>_enabled</key>
@@ -549,60 +1169,332 @@
<value>float</value>
</param>
<param>
- <key>title</key>
- <value>Scope Plot</value>
+ <key>name</key>
+ <value>Phase</value>
</param>
<param>
- <key>samp_rate</key>
+ <key>ylabel</key>
+ <value>Amplitude</value>
+ </param>
+ <param>
+ <key>yunit</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>size</key>
+ <value>1024</value>
+ </param>
+ <param>
+ <key>srate</key>
<value>samp_rate</value>
</param>
<param>
- <key>v_scale</key>
- <value>9</value>
+ <key>grid</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>autoscale</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>ymin</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>ymax</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>nconnections</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>update_time</key>
+ <value>0.10</value>
+ </param>
+ <param>
+ <key>entags</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value>notebook@1</value>
+ </param>
+ <param>
+ <key>tr_mode</key>
+ <value>qtgui.TRIG_MODE_FREE</value>
+ </param>
+ <param>
+ <key>tr_slope</key>
+ <value>qtgui.TRIG_SLOPE_POS</value>
+ </param>
+ <param>
+ <key>tr_level</key>
+ <value>0.0</value>
</param>
<param>
- <key>v_offset</key>
+ <key>tr_delay</key>
<value>0</value>
</param>
<param>
- <key>t_scale</key>
+ <key>tr_chan</key>
<value>0</value>
</param>
<param>
- <key>ac_couple</key>
- <value>False</value>
+ <key>tr_tag</key>
+ <value>""</value>
</param>
<param>
- <key>xy_mode</key>
- <value>False</value>
+ <key>label1</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width1</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color1</key>
+ <value>"blue"</value>
+ </param>
+ <param>
+ <key>style1</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker1</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha1</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width2</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color2</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>style2</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker2</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha2</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width3</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color3</key>
+ <value>"green"</value>
+ </param>
+ <param>
+ <key>style3</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker3</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha3</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width4</key>
+ <value>1</value>
</param>
<param>
- <key>num_inputs</key>
+ <key>color4</key>
+ <value>"black"</value>
+ </param>
+ <param>
+ <key>style4</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker4</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha4</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width5</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color5</key>
+ <value>"cyan"</value>
+ </param>
+ <param>
+ <key>style5</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker5</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha5</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width6</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color6</key>
+ <value>"magenta"</value>
+ </param>
+ <param>
+ <key>style6</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker6</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha6</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width7</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color7</key>
+ <value>"yellow"</value>
+ </param>
+ <param>
+ <key>style7</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker7</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha7</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label8</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color8</key>
+ <value>"dark red"</value>
+ </param>
+ <param>
+ <key>style8</key>
<value>1</value>
</param>
<param>
- <key>win_size</key>
+ <key>marker8</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha8</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label9</key>
<value></value>
</param>
<param>
- <key>grid_pos</key>
+ <key>width9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color9</key>
+ <value>"dark green"</value>
+ </param>
+ <param>
+ <key>style9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker9</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha9</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label10</key>
<value></value>
</param>
<param>
- <key>notebook</key>
- <value>notebook_0,1</value>
+ <key>width10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color10</key>
+ <value>"blue"</value>
+ </param>
+ <param>
+ <key>style10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker10</key>
+ <value>-1</value>
</param>
<param>
- <key>trig_mode</key>
- <value>wxgui.TRIG_MODE_AUTO</value>
+ <key>alpha10</key>
+ <value>1.0</value>
</param>
<param>
- <key>y_axis_label</key>
- <value>Counts</value>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(991, 592)</value>
+ <value>(1014, 622)</value>
</param>
<param>
<key>_rotation</key>
@@ -610,10 +1502,10 @@
</param>
</block>
<block>
- <key>wxgui_scopesink2</key>
+ <key>qtgui_time_sink_x</key>
<param>
<key>id</key>
- <value>wxgui_scopesink2_0</value>
+ <value>qtgui_time_sink_x_1_0</value>
</param>
<param>
<key>_enabled</key>
@@ -621,63 +1513,335 @@
</param>
<param>
<key>type</key>
- <value>complex</value>
+ <value>float</value>
</param>
<param>
- <key>title</key>
- <value>Scope Plot</value>
+ <key>name</key>
+ <value>Rate</value>
+ </param>
+ <param>
+ <key>ylabel</key>
+ <value>Amplitude</value>
+ </param>
+ <param>
+ <key>yunit</key>
+ <value>""</value>
</param>
<param>
- <key>samp_rate</key>
+ <key>size</key>
+ <value>1024</value>
+ </param>
+ <param>
+ <key>srate</key>
<value>samp_rate</value>
</param>
<param>
- <key>v_scale</key>
- <value>0</value>
+ <key>grid</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>autoscale</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>ymin</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>ymax</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>nconnections</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>update_time</key>
+ <value>0.10</value>
+ </param>
+ <param>
+ <key>entags</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value>notebook@2</value>
+ </param>
+ <param>
+ <key>tr_mode</key>
+ <value>qtgui.TRIG_MODE_FREE</value>
+ </param>
+ <param>
+ <key>tr_slope</key>
+ <value>qtgui.TRIG_SLOPE_POS</value>
+ </param>
+ <param>
+ <key>tr_level</key>
+ <value>0.0</value>
</param>
<param>
- <key>v_offset</key>
+ <key>tr_delay</key>
<value>0</value>
</param>
<param>
- <key>t_scale</key>
+ <key>tr_chan</key>
<value>0</value>
</param>
<param>
- <key>ac_couple</key>
- <value>False</value>
+ <key>tr_tag</key>
+ <value>""</value>
</param>
<param>
- <key>xy_mode</key>
- <value>False</value>
+ <key>label1</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width1</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color1</key>
+ <value>"blue"</value>
+ </param>
+ <param>
+ <key>style1</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker1</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha1</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width2</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color2</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>style2</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker2</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha2</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width3</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color3</key>
+ <value>"green"</value>
+ </param>
+ <param>
+ <key>style3</key>
+ <value>1</value>
</param>
<param>
- <key>num_inputs</key>
+ <key>marker3</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha3</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width4</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color4</key>
+ <value>"black"</value>
+ </param>
+ <param>
+ <key>style4</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker4</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha4</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width5</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color5</key>
+ <value>"cyan"</value>
+ </param>
+ <param>
+ <key>style5</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker5</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha5</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width6</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color6</key>
+ <value>"magenta"</value>
+ </param>
+ <param>
+ <key>style6</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker6</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha6</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width7</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color7</key>
+ <value>"yellow"</value>
+ </param>
+ <param>
+ <key>style7</key>
<value>1</value>
</param>
<param>
- <key>win_size</key>
+ <key>marker7</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha7</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label8</key>
<value></value>
</param>
<param>
- <key>grid_pos</key>
+ <key>width8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color8</key>
+ <value>"dark red"</value>
+ </param>
+ <param>
+ <key>style8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker8</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha8</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label9</key>
<value></value>
</param>
<param>
- <key>notebook</key>
+ <key>width9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color9</key>
+ <value>"dark green"</value>
+ </param>
+ <param>
+ <key>style9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker9</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha9</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label10</key>
<value></value>
</param>
<param>
- <key>trig_mode</key>
- <value>wxgui.TRIG_MODE_AUTO</value>
+ <key>width10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color10</key>
+ <value>"blue"</value>
+ </param>
+ <param>
+ <key>style10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker10</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha10</key>
+ <value>1.0</value>
</param>
<param>
- <key>y_axis_label</key>
- <value>Counts</value>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(1029, 243)</value>
+ <value>(1018, 503)</value>
</param>
<param>
<key>_rotation</key>
@@ -685,10 +1849,10 @@
</param>
</block>
<block>
- <key>wxgui_scopesink2</key>
+ <key>qtgui_time_sink_x</key>
<param>
<key>id</key>
- <value>wxgui_scopesink2_0_0</value>
+ <value>qtgui_time_sink_x_1</value>
</param>
<param>
<key>_enabled</key>
@@ -699,60 +1863,332 @@
<value>float</value>
</param>
<param>
- <key>title</key>
+ <key>name</key>
<value>Error</value>
</param>
<param>
- <key>samp_rate</key>
+ <key>ylabel</key>
+ <value>Amplitude</value>
+ </param>
+ <param>
+ <key>yunit</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>size</key>
+ <value>1024</value>
+ </param>
+ <param>
+ <key>srate</key>
<value>samp_rate</value>
</param>
<param>
- <key>v_scale</key>
- <value>3</value>
+ <key>grid</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>autoscale</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>ymin</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>ymax</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>nconnections</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>update_time</key>
+ <value>0.10</value>
+ </param>
+ <param>
+ <key>entags</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value>notebook@0</value>
+ </param>
+ <param>
+ <key>tr_mode</key>
+ <value>qtgui.TRIG_MODE_FREE</value>
</param>
<param>
- <key>v_offset</key>
+ <key>tr_slope</key>
+ <value>qtgui.TRIG_SLOPE_POS</value>
+ </param>
+ <param>
+ <key>tr_level</key>
+ <value>0.0</value>
+ </param>
+ <param>
+ <key>tr_delay</key>
<value>0</value>
</param>
<param>
- <key>t_scale</key>
+ <key>tr_chan</key>
<value>0</value>
</param>
<param>
- <key>ac_couple</key>
- <value>False</value>
+ <key>tr_tag</key>
+ <value>""</value>
</param>
<param>
- <key>xy_mode</key>
- <value>False</value>
+ <key>label1</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width1</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color1</key>
+ <value>"blue"</value>
+ </param>
+ <param>
+ <key>style1</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker1</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha1</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width2</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color2</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>style2</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker2</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha2</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width3</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color3</key>
+ <value>"green"</value>
+ </param>
+ <param>
+ <key>style3</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker3</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha3</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width4</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color4</key>
+ <value>"black"</value>
+ </param>
+ <param>
+ <key>style4</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker4</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha4</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width5</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color5</key>
+ <value>"cyan"</value>
+ </param>
+ <param>
+ <key>style5</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker5</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha5</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width6</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color6</key>
+ <value>"magenta"</value>
+ </param>
+ <param>
+ <key>style6</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker6</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha6</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width7</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color7</key>
+ <value>"yellow"</value>
+ </param>
+ <param>
+ <key>style7</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker7</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha7</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label8</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color8</key>
+ <value>"dark red"</value>
</param>
<param>
- <key>num_inputs</key>
+ <key>style8</key>
<value>1</value>
</param>
<param>
- <key>win_size</key>
+ <key>marker8</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha8</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label9</key>
<value></value>
</param>
<param>
- <key>grid_pos</key>
+ <key>width9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color9</key>
+ <value>"dark green"</value>
+ </param>
+ <param>
+ <key>style9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker9</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha9</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label10</key>
<value></value>
</param>
<param>
- <key>notebook</key>
- <value>notebook_0,0</value>
+ <key>width10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color10</key>
+ <value>"blue"</value>
+ </param>
+ <param>
+ <key>style10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker10</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha10</key>
+ <value>1.0</value>
</param>
<param>
- <key>trig_mode</key>
- <value>wxgui.TRIG_MODE_AUTO</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>y_axis_label</key>
- <value>Counts</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(1029, 335)</value>
+ <value>(1017, 378)</value>
</param>
<param>
<key>_rotation</key>
@@ -760,10 +2196,10 @@
</param>
</block>
<block>
- <key>wxgui_scopesink2</key>
+ <key>qtgui_time_sink_x</key>
<param>
<key>id</key>
- <value>wxgui_scopesink2_0_0_0_0</value>
+ <value>qtgui_time_sink_x_0_0</value>
</param>
<param>
<key>_enabled</key>
@@ -771,259 +2207,335 @@
</param>
<param>
<key>type</key>
- <value>float</value>
+ <value>complex</value>
</param>
<param>
- <key>title</key>
+ <key>name</key>
<value>Scope Plot</value>
</param>
<param>
- <key>samp_rate</key>
- <value>samp_rate</value>
+ <key>ylabel</key>
+ <value>Amplitude</value>
</param>
<param>
- <key>v_scale</key>
- <value>1.25</value>
+ <key>yunit</key>
+ <value>""</value>
</param>
<param>
- <key>v_offset</key>
- <value>0</value>
+ <key>size</key>
+ <value>1024</value>
</param>
<param>
- <key>t_scale</key>
- <value>0</value>
+ <key>srate</key>
+ <value>samp_rate</value>
</param>
<param>
- <key>ac_couple</key>
+ <key>grid</key>
<value>False</value>
</param>
<param>
- <key>xy_mode</key>
+ <key>autoscale</key>
<value>False</value>
</param>
<param>
- <key>num_inputs</key>
+ <key>ymin</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>ymax</key>
<value>1</value>
</param>
<param>
- <key>win_size</key>
- <value></value>
+ <key>nconnections</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>update_time</key>
+ <value>0.10</value>
</param>
<param>
- <key>grid_pos</key>
+ <key>entags</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
<value></value>
</param>
<param>
- <key>notebook</key>
- <value>notebook_0,2</value>
+ <key>tr_mode</key>
+ <value>qtgui.TRIG_MODE_FREE</value>
</param>
<param>
- <key>trig_mode</key>
- <value>wxgui.TRIG_MODE_AUTO</value>
+ <key>tr_slope</key>
+ <value>qtgui.TRIG_SLOPE_POS</value>
</param>
<param>
- <key>y_axis_label</key>
- <value>Counts</value>
+ <key>tr_level</key>
+ <value>0.0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(1024, 462)</value>
+ <key>tr_delay</key>
+ <value>0</value>
</param>
<param>
- <key>_rotation</key>
+ <key>tr_chan</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>blocks_multiply_const_vxx</key>
<param>
- <key>id</key>
- <value>blocks_multiply_const_vxx_0</value>
+ <key>tr_tag</key>
+ <value>""</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>label1</key>
+ <value></value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
+ <key>width1</key>
+ <value>1</value>
</param>
<param>
- <key>const</key>
- <value>sig_amp</value>
+ <key>color1</key>
+ <value>"blue"</value>
</param>
<param>
- <key>vlen</key>
+ <key>style1</key>
<value>1</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(760, 159)</value>
+ <key>marker1</key>
+ <value>-1</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>alpha1</key>
+ <value>1.0</value>
</param>
- </block>
- <block>
- <key>variable_slider</key>
<param>
- <key>id</key>
- <value>interpratio</value>
+ <key>label2</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>width2</key>
+ <value>1</value>
</param>
<param>
- <key>label</key>
- <value>Timing Offset</value>
+ <key>color2</key>
+ <value>"red"</value>
</param>
<param>
- <key>value</key>
- <value>1.00</value>
+ <key>style2</key>
+ <value>1</value>
</param>
<param>
- <key>min</key>
- <value>0.99</value>
+ <key>marker2</key>
+ <value>-1</value>
</param>
<param>
- <key>max</key>
- <value>1.01</value>
+ <key>alpha2</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width3</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color3</key>
+ <value>"green"</value>
</param>
<param>
- <key>num_steps</key>
- <value>1000</value>
+ <key>style3</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker3</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha3</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width4</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color4</key>
+ <value>"black"</value>
</param>
<param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
+ <key>style4</key>
+ <value>1</value>
</param>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>marker4</key>
+ <value>-1</value>
</param>
<param>
- <key>grid_pos</key>
- <value>(2,2,1,1)</value>
+ <key>alpha4</key>
+ <value>1.0</value>
</param>
<param>
- <key>notebook</key>
+ <key>label5</key>
<value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(4, 530)</value>
+ <key>width5</key>
+ <value>1</value>
</param>
<param>
- <key>_rotation</key>
- <value>180</value>
+ <key>color5</key>
+ <value>"cyan"</value>
</param>
- </block>
- <block>
- <key>variable_slider</key>
<param>
- <key>id</key>
- <value>time_bw</value>
+ <key>style5</key>
+ <value>1</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>marker5</key>
+ <value>-1</value>
</param>
<param>
- <key>label</key>
- <value>Timing Loop BW</value>
+ <key>alpha5</key>
+ <value>1.0</value>
</param>
<param>
- <key>value</key>
- <value>0</value>
+ <key>label6</key>
+ <value></value>
</param>
<param>
- <key>min</key>
- <value>0</value>
+ <key>width6</key>
+ <value>1</value>
</param>
<param>
- <key>max</key>
- <value>0.1</value>
+ <key>color6</key>
+ <value>"magenta"</value>
+ </param>
+ <param>
+ <key>style6</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker6</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha6</key>
+ <value>1.0</value>
</param>
<param>
- <key>num_steps</key>
- <value>1000</value>
+ <key>label7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width7</key>
+ <value>1</value>
</param>
<param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
+ <key>color7</key>
+ <value>"yellow"</value>
</param>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>style7</key>
+ <value>1</value>
</param>
<param>
- <key>grid_pos</key>
- <value>(1,2,1,1)</value>
+ <key>marker7</key>
+ <value>-1</value>
</param>
<param>
- <key>notebook</key>
+ <key>alpha7</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label8</key>
<value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(552, 4)</value>
+ <key>width8</key>
+ <value>1</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>color8</key>
+ <value>"dark red"</value>
</param>
- </block>
- <block>
- <key>variable_slider</key>
<param>
- <key>id</key>
- <value>noise_amp</value>
+ <key>style8</key>
+ <value>1</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>marker8</key>
+ <value>-1</value>
</param>
<param>
- <key>label</key>
- <value>Channel Noise</value>
+ <key>alpha8</key>
+ <value>1.0</value>
</param>
<param>
- <key>value</key>
- <value>0</value>
+ <key>label9</key>
+ <value></value>
</param>
<param>
- <key>min</key>
- <value>0</value>
+ <key>width9</key>
+ <value>1</value>
</param>
<param>
- <key>max</key>
+ <key>color9</key>
+ <value>"dark green"</value>
+ </param>
+ <param>
+ <key>style9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker9</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha9</key>
<value>1.0</value>
</param>
<param>
- <key>num_steps</key>
- <value>1000</value>
+ <key>label10</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color10</key>
+ <value>"blue"</value>
+ </param>
+ <param>
+ <key>style10</key>
+ <value>1</value>
</param>
<param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
+ <key>marker10</key>
+ <value>-1</value>
</param>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>alpha10</key>
+ <value>1.0</value>
</param>
<param>
- <key>grid_pos</key>
- <value>(3,2,1,1)</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>notebook</key>
+ <key>affinity</key>
<value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(149, 530)</value>
+ <value>(1029, 281)</value>
</param>
<param>
<key>_rotation</key>
@@ -1031,10 +2543,10 @@
</param>
</block>
<block>
- <key>variable_slider</key>
+ <key>variable_qtgui_range</key>
<param>
<key>id</key>
- <value>freq_offset</value>
+ <value>time_bw</value>
</param>
<param>
<key>_enabled</key>
@@ -1042,43 +2554,47 @@
</param>
<param>
<key>label</key>
- <value>Frequency Offset</value>
+ <value>Timing Loop BW</value>
</param>
<param>
<key>value</key>
<value>0</value>
</param>
<param>
- <key>min</key>
- <value>-0.5</value>
+ <key>start</key>
+ <value>0</value>
</param>
<param>
- <key>max</key>
- <value>0.5</value>
+ <key>stop</key>
+ <value>.1</value>
+ </param>
+ <param>
+ <key>step</key>
+ <value>.001</value>
</param>
<param>
- <key>num_steps</key>
- <value>1000</value>
+ <key>widget</key>
+ <value>counter_slider</value>
</param>
<param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
</param>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>min_len</key>
+ <value>200</value>
</param>
<param>
- <key>grid_pos</key>
- <value>(4,2,1,1)</value>
+ <key>gui_hint</key>
+ <value>1,2,1,1</value>
</param>
<param>
- <key>notebook</key>
+ <key>alias</key>
<value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(293, 530)</value>
+ <value>(451, 0)</value>
</param>
<param>
<key>_rotation</key>
@@ -1086,34 +2602,66 @@
</param>
</block>
<block>
- <key>notebook</key>
+ <key>digital_pfb_clock_sync_xxx</key>
<param>
<key>id</key>
- <value>notebook_0</value>
+ <value>digital_pfb_clock_sync_xxx_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>style</key>
- <value>wx.NB_TOP</value>
+ <key>type</key>
+ <value>ccf</value>
+ </param>
+ <param>
+ <key>sps</key>
+ <value>spb</value>
+ </param>
+ <param>
+ <key>loop_bw</key>
+ <value>time_bw</value>
+ </param>
+ <param>
+ <key>taps</key>
+ <value>firdes.root_raised_cosine(nfilts, nfilts*spb, 1.0, rolloff, 44*nfilts)</value>
+ </param>
+ <param>
+ <key>filter_size</key>
+ <value>nfilts</value>
+ </param>
+ <param>
+ <key>init_phase</key>
+ <value>16</value>
</param>
<param>
- <key>labels</key>
- <value>['error', 'phase', 'freq', 'Resampled Signal']</value>
+ <key>max_dev</key>
+ <value>1.5</value>
</param>
<param>
- <key>grid_pos</key>
- <value>(1,1,5,1)</value>
+ <key>osps</key>
+ <value>1</value>
</param>
<param>
- <key>notebook</key>
+ <key>alias</key>
<value></value>
</param>
<param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(443, 577)</value>
+ <value>(467, 403)</value>
</param>
<param>
<key>_rotation</key>
@@ -1127,63 +2675,63 @@
<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_0</sink_block_id>
- <source_key>2</source_key>
+ <source_block_id>pfb_arb_resampler_xxx_0</source_block_id>
+ <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
+ <source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
- <sink_block_id>wxgui_scopesink2_0_0_1</sink_block_id>
+ <source_block_id>digital_chunks_to_symbols_xx</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>pfb_arb_resampler_xxx_0</source_block_id>
- <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
+ <source_block_id>analog_random_source_x</source_block_id>
+ <sink_block_id>digital_chunks_to_symbols_xx</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>digital_chunks_to_symbols_xx</source_block_id>
- <sink_block_id>pfb_arb_resampler_xxx_0</sink_block_id>
+ <source_block_id>channels_channel_model_0</source_block_id>
+ <sink_block_id>blocks_throttle_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>analog_random_source_x</source_block_id>
- <sink_block_id>digital_chunks_to_symbols_xx</sink_block_id>
+ <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
+ <sink_block_id>channels_channel_model_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_0</sink_block_id>
- <source_key>3</source_key>
+ <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
+ <sink_block_id>qtgui_time_sink_x_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_block_id>qtgui_time_sink_x_0_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</sink_block_id>
- <source_key>0</source_key>
+ <sink_block_id>qtgui_time_sink_x_1</sink_block_id>
+ <source_key>1</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>channels_channel_model_0</source_block_id>
- <sink_block_id>blocks_throttle_0</sink_block_id>
- <source_key>0</source_key>
+ <source_block_id>digital_pfb_clock_sync_xxx_0</source_block_id>
+ <sink_block_id>qtgui_time_sink_x_1_1</sink_block_id>
+ <source_key>3</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
- <sink_block_id>channels_channel_model_0</sink_block_id>
- <source_key>0</source_key>
+ <source_block_id>digital_pfb_clock_sync_xxx_0</source_block_id>
+ <sink_block_id>qtgui_time_sink_x_1_0</sink_block_id>
+ <source_key>2</source_key>
<sink_key>0</sink_key>
</connection>
</flow_graph>
diff --git a/gr-digital/examples/demod/test_corr_and_sync.grc b/gr-digital/examples/demod/test_corr_and_sync.grc
index 71dca83c9a..91e09dd203 100644
--- a/gr-digital/examples/demod/test_corr_and_sync.grc
+++ b/gr-digital/examples/demod/test_corr_and_sync.grc
@@ -1,6 +1,6 @@
<?xml version='1.0' encoding='ASCII'?>
<flow_graph>
- <timestamp>Thu Apr 24 14:08:23 2014</timestamp>
+ <timestamp>Fri Jul 11 16:54:10 2014</timestamp>
<block>
<key>options</key>
<param>
@@ -52,6 +52,10 @@
<value></value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(10, 10)</value>
</param>
@@ -64,7 +68,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>rrc_taps</value>
+ <value>samp_rate</value>
</param>
<param>
<key>_enabled</key>
@@ -72,11 +76,15 @@
</param>
<param>
<key>value</key>
- <value>firdes.root_raised_cosine(nfilts, nfilts, 1.0/float(sps), eb, 5*sps*nfilts)</value>
+ <value>100000</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(1075, 73)</value>
+ <value>(11, 72)</value>
</param>
<param>
<key>_rotation</key>
@@ -87,7 +95,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>nfilts</value>
+ <value>eb</value>
</param>
<param>
<key>_enabled</key>
@@ -95,11 +103,15 @@
</param>
<param>
<key>value</key>
- <value>32</value>
+ <value>0.35</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(1074, 9)</value>
+ <value>(346, 72)</value>
</param>
<param>
<key>_rotation</key>
@@ -110,7 +122,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>payload_size</value>
+ <value>matched_filter</value>
</param>
<param>
<key>_enabled</key>
@@ -118,11 +130,15 @@
</param>
<param>
<key>value</key>
- <value>992</value>
+ <value>firdes.root_raised_cosine(nfilts, nfilts, 1, eb, int(11*sps*nfilts))</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(101, 73)</value>
+ <value>(429, 72)</value>
</param>
<param>
<key>_rotation</key>
@@ -133,7 +149,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>gap</value>
+ <value>preamble</value>
</param>
<param>
<key>_enabled</key>
@@ -141,11 +157,15 @@
</param>
<param>
<key>value</key>
- <value>20000</value>
+ <value>[1,-1,1,-1,1,1,-1,-1,1,1,-1,1,1,1,-1,1,1,-1,1,-1,-1,1,-1,-1,1,1,1,-1,-1,-1,1,-1,1,1,1,1,-1,-1,1,-1,1,-1,-1,-1,1,1,-1,-1,-1,-1,1,-1,-1,-1,-1,-1,1,1,1,1,1,1,-1,-1]</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(202, 72)</value>
+ <value>(279, 8)</value>
</param>
<param>
<key>_rotation</key>
@@ -156,7 +176,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>bb_filter</value>
+ <value>sps</value>
</param>
<param>
<key>_enabled</key>
@@ -164,11 +184,15 @@
</param>
<param>
<key>value</key>
- <value>firdes.root_raised_cosine(sps, sps, 1, eb, 101)</value>
+ <value>4</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(429, 8)</value>
+ <value>(278, 72)</value>
</param>
<param>
<key>_rotation</key>
@@ -179,7 +203,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>sps</value>
+ <value>bb_filter</value>
</param>
<param>
<key>_enabled</key>
@@ -187,11 +211,15 @@
</param>
<param>
<key>value</key>
- <value>4</value>
+ <value>firdes.root_raised_cosine(sps, sps, 1, eb, 101)</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(278, 72)</value>
+ <value>(429, 8)</value>
</param>
<param>
<key>_rotation</key>
@@ -202,7 +230,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>preamble</value>
+ <value>gap</value>
</param>
<param>
<key>_enabled</key>
@@ -210,11 +238,15 @@
</param>
<param>
<key>value</key>
- <value>[1,-1,1,-1,1,1,-1,-1,1,1,-1,1,1,1,-1,1,1,-1,1,-1,-1,1,-1,-1,1,1,1,-1,-1,-1,1,-1,1,1,1,1,-1,-1,1,-1,1,-1,-1,-1,1,1,-1,-1,-1,-1,1,-1,-1,-1,-1,-1,1,1,1,1,1,1,-1,-1]</value>
+ <value>20000</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(279, 8)</value>
+ <value>(202, 72)</value>
</param>
<param>
<key>_rotation</key>
@@ -225,7 +257,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>matched_filter</value>
+ <value>payload_size</value>
</param>
<param>
<key>_enabled</key>
@@ -233,11 +265,15 @@
</param>
<param>
<key>value</key>
- <value>firdes.root_raised_cosine(nfilts, nfilts, 1, eb, int(11*sps*nfilts))</value>
+ <value>992</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(429, 72)</value>
+ <value>(101, 73)</value>
</param>
<param>
<key>_rotation</key>
@@ -248,7 +284,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>eb</value>
+ <value>nfilts</value>
</param>
<param>
<key>_enabled</key>
@@ -256,11 +292,15 @@
</param>
<param>
<key>value</key>
- <value>0.35</value>
+ <value>32</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(346, 72)</value>
+ <value>(1074, 9)</value>
</param>
<param>
<key>_rotation</key>
@@ -271,7 +311,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>samp_rate</value>
+ <value>rrc_taps</value>
</param>
<param>
<key>_enabled</key>
@@ -279,11 +319,15 @@
</param>
<param>
<key>value</key>
- <value>100000</value>
+ <value>firdes.root_raised_cosine(nfilts, nfilts, 1.0/float(sps), eb, 5*sps*nfilts)</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(11, 72)</value>
+ <value>(1075, 73)</value>
</param>
<param>
<key>_rotation</key>
@@ -305,6 +349,10 @@
<value>1</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
@@ -340,6 +388,10 @@
<value>1</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
@@ -383,6 +435,10 @@
<value>sps</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
@@ -438,6 +494,10 @@
<value>False</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
@@ -485,6 +545,10 @@
<value>True</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
@@ -536,6 +600,10 @@
<value>1</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
@@ -591,6 +659,10 @@
<value>False</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
@@ -638,6 +710,10 @@
<value>1</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
@@ -685,6 +761,10 @@
<value>[[0,],]</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
@@ -720,6 +800,10 @@
<value>import scipy</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(181, 16)</value>
</param>
@@ -775,6 +859,10 @@
<value>3,1,1,1</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(692, 7)</value>
</param>
@@ -830,6 +918,10 @@
<value>4,0,1,1</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(808, 7)</value>
</param>
@@ -885,6 +977,10 @@
<value>4,1,1,1</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(950, 8)</value>
</param>
@@ -940,6 +1036,10 @@
<value>3,0,1,1</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(584, 7)</value>
</param>
@@ -991,6 +1091,10 @@
<value>1</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
@@ -1042,6 +1146,10 @@
<value>True</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
@@ -1077,6 +1185,10 @@
<value>8</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
@@ -1124,6 +1236,10 @@
<value>1</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
@@ -1155,10 +1271,6 @@
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>"ok"</value>
- </param>
- <param>
<key>sym_map</key>
<value>[0,1]</value>
</param>
@@ -1183,6 +1295,10 @@
<value>None</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(1237, 27)</value>
</param>
@@ -1214,6 +1330,10 @@
<value>2</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
@@ -1281,6 +1401,10 @@
<value>5,0,1,2</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(875, 571)</value>
</param>
@@ -1308,6 +1432,10 @@
<value>1</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
@@ -1343,6 +1471,10 @@
<value>8</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
@@ -1390,6 +1522,10 @@
<value>1</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
@@ -1437,6 +1573,10 @@
<value>[[0,],]</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
@@ -1484,6 +1624,10 @@
<value>1</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
@@ -1523,6 +1667,10 @@
<value>1</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
@@ -1562,6 +1710,14 @@
<value></value>
</param>
<param>
+ <key>ylabel</key>
+ <value>Amplitude</value>
+ </param>
+ <param>
+ <key>yunit</key>
+ <value>""</value>
+ </param>
+ <param>
<key>size</key>
<value>20000</value>
</param>
@@ -1570,6 +1726,10 @@
<value>samp_rate</value>
</param>
<param>
+ <key>grid</key>
+ <value>False</value>
+ </param>
+ <param>
<key>autoscale</key>
<value>False</value>
</param>
@@ -1862,6 +2022,10 @@
<value>1.0</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
@@ -1889,6 +2053,10 @@
<value>constel</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
@@ -1928,6 +2096,14 @@
<value></value>
</param>
<param>
+ <key>ylabel</key>
+ <value>Amplitude</value>
+ </param>
+ <param>
+ <key>yunit</key>
+ <value>""</value>
+ </param>
+ <param>
<key>size</key>
<value>80000</value>
</param>
@@ -1936,6 +2112,10 @@
<value>samp_rate</value>
</param>
<param>
+ <key>grid</key>
+ <value>False</value>
+ </param>
+ <param>
<key>autoscale</key>
<value>False</value>
</param>
@@ -2228,6 +2408,10 @@
<value>1.0</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
@@ -2241,10 +2425,53 @@
</param>
</block>
<block>
- <key>qtgui_time_sink_x</key>
+ <key>digital_costas_loop_cc</key>
<param>
<key>id</key>
- <value>qtgui_time_sink_x_0</value>
+ <value>digital_costas_loop_cc_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>w</key>
+ <value>1*3.14/50.0</value>
+ </param>
+ <param>
+ <key>order</key>
+ <value>2</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(1091, 303)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>qtgui_const_sink_x</key>
+ <param>
+ <key>id</key>
+ <value>qtgui_const_sink_x_0</value>
</param>
<param>
<key>_enabled</key>
@@ -2260,11 +2487,11 @@
</param>
<param>
<key>size</key>
- <value>50000</value>
+ <value>1000</value>
</param>
<param>
- <key>srate</key>
- <value>samp_rate</value>
+ <key>grid</key>
+ <value>False</value>
</param>
<param>
<key>autoscale</key>
@@ -2279,6 +2506,14 @@
<value>2</value>
</param>
<param>
+ <key>xmin</key>
+ <value>-2</value>
+ </param>
+ <param>
+ <key>xmax</key>
+ <value>2</value>
+ </param>
+ <param>
<key>nconnections</key>
<value>1</value>
</param>
@@ -2287,12 +2522,8 @@
<value>0.10</value>
</param>
<param>
- <key>entags</key>
- <value>True</value>
- </param>
- <param>
<key>gui_hint</key>
- <value>0,0,1,1</value>
+ <value>0,1,1,1</value>
</param>
<param>
<key>tr_mode</key>
@@ -2304,11 +2535,7 @@
</param>
<param>
<key>tr_level</key>
- <value>1</value>
- </param>
- <param>
- <key>tr_delay</key>
- <value>0.1</value>
+ <value>0</value>
</param>
<param>
<key>tr_chan</key>
@@ -2332,11 +2559,11 @@
</param>
<param>
<key>style1</key>
- <value>1</value>
+ <value>0</value>
</param>
<param>
<key>marker1</key>
- <value>-1</value>
+ <value>0</value>
</param>
<param>
<key>alpha1</key>
@@ -2356,11 +2583,11 @@
</param>
<param>
<key>style2</key>
- <value>1</value>
+ <value>0</value>
</param>
<param>
<key>marker2</key>
- <value>-1</value>
+ <value>0</value>
</param>
<param>
<key>alpha2</key>
@@ -2376,15 +2603,15 @@
</param>
<param>
<key>color3</key>
- <value>"green"</value>
+ <value>"red"</value>
</param>
<param>
<key>style3</key>
- <value>1</value>
+ <value>0</value>
</param>
<param>
<key>marker3</key>
- <value>-1</value>
+ <value>0</value>
</param>
<param>
<key>alpha3</key>
@@ -2400,15 +2627,15 @@
</param>
<param>
<key>color4</key>
- <value>"black"</value>
+ <value>"red"</value>
</param>
<param>
<key>style4</key>
- <value>1</value>
+ <value>0</value>
</param>
<param>
<key>marker4</key>
- <value>-1</value>
+ <value>0</value>
</param>
<param>
<key>alpha4</key>
@@ -2424,15 +2651,15 @@
</param>
<param>
<key>color5</key>
- <value>"cyan"</value>
+ <value>"red"</value>
</param>
<param>
<key>style5</key>
- <value>1</value>
+ <value>0</value>
</param>
<param>
<key>marker5</key>
- <value>-1</value>
+ <value>0</value>
</param>
<param>
<key>alpha5</key>
@@ -2448,15 +2675,15 @@
</param>
<param>
<key>color6</key>
- <value>"magenta"</value>
+ <value>"red"</value>
</param>
<param>
<key>style6</key>
- <value>1</value>
+ <value>0</value>
</param>
<param>
<key>marker6</key>
- <value>-1</value>
+ <value>0</value>
</param>
<param>
<key>alpha6</key>
@@ -2472,15 +2699,15 @@
</param>
<param>
<key>color7</key>
- <value>"yellow"</value>
+ <value>"red"</value>
</param>
<param>
<key>style7</key>
- <value>1</value>
+ <value>0</value>
</param>
<param>
<key>marker7</key>
- <value>-1</value>
+ <value>0</value>
</param>
<param>
<key>alpha7</key>
@@ -2496,15 +2723,15 @@
</param>
<param>
<key>color8</key>
- <value>"dark red"</value>
+ <value>"red"</value>
</param>
<param>
<key>style8</key>
- <value>1</value>
+ <value>0</value>
</param>
<param>
<key>marker8</key>
- <value>-1</value>
+ <value>0</value>
</param>
<param>
<key>alpha8</key>
@@ -2520,15 +2747,15 @@
</param>
<param>
<key>color9</key>
- <value>"dark green"</value>
+ <value>"red"</value>
</param>
<param>
<key>style9</key>
- <value>1</value>
+ <value>0</value>
</param>
<param>
<key>marker9</key>
- <value>-1</value>
+ <value>0</value>
</param>
<param>
<key>alpha9</key>
@@ -2544,27 +2771,31 @@
</param>
<param>
<key>color10</key>
- <value>"blue"</value>
+ <value>"red"</value>
</param>
<param>
<key>style10</key>
- <value>1</value>
+ <value>0</value>
</param>
<param>
<key>marker10</key>
- <value>-1</value>
+ <value>0</value>
</param>
<param>
<key>alpha10</key>
<value>1.0</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
- <value>0</value>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(1398, 370)</value>
+ <value>(1399, 283)</value>
</param>
<param>
<key>_rotation</key>
@@ -2572,65 +2803,42 @@
</param>
</block>
<block>
- <key>digital_costas_loop_cc</key>
+ <key>qtgui_time_sink_x</key>
<param>
<key>id</key>
- <value>digital_costas_loop_cc_0</value>
+ <value>qtgui_time_sink_x_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>w</key>
- <value>1*3.14/50.0</value>
- </param>
- <param>
- <key>order</key>
- <value>2</value>
+ <key>type</key>
+ <value>complex</value>
</param>
<param>
- <key>affinity</key>
+ <key>name</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
- </param>
- <param>
- <key>maxoutbuf</key>
- <value>0</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(1091, 303)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>qtgui_const_sink_x</key>
- <param>
- <key>id</key>
- <value>qtgui_const_sink_x_0</value>
+ <key>ylabel</key>
+ <value>Amplitude</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>yunit</key>
+ <value>""</value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
+ <key>size</key>
+ <value>50000</value>
</param>
<param>
- <key>name</key>
- <value></value>
+ <key>srate</key>
+ <value>samp_rate</value>
</param>
<param>
- <key>size</key>
- <value>1000</value>
+ <key>grid</key>
+ <value>False</value>
</param>
<param>
<key>autoscale</key>
@@ -2645,14 +2853,6 @@
<value>2</value>
</param>
<param>
- <key>xmin</key>
- <value>-2</value>
- </param>
- <param>
- <key>xmax</key>
- <value>2</value>
- </param>
- <param>
<key>nconnections</key>
<value>1</value>
</param>
@@ -2661,8 +2861,12 @@
<value>0.10</value>
</param>
<param>
+ <key>entags</key>
+ <value>True</value>
+ </param>
+ <param>
<key>gui_hint</key>
- <value>0,1,1,1</value>
+ <value>0,0,1,1</value>
</param>
<param>
<key>tr_mode</key>
@@ -2674,7 +2878,11 @@
</param>
<param>
<key>tr_level</key>
- <value>0</value>
+ <value>1</value>
+ </param>
+ <param>
+ <key>tr_delay</key>
+ <value>0.1</value>
</param>
<param>
<key>tr_chan</key>
@@ -2698,11 +2906,11 @@
</param>
<param>
<key>style1</key>
- <value>0</value>
+ <value>1</value>
</param>
<param>
<key>marker1</key>
- <value>0</value>
+ <value>-1</value>
</param>
<param>
<key>alpha1</key>
@@ -2722,11 +2930,11 @@
</param>
<param>
<key>style2</key>
- <value>0</value>
+ <value>1</value>
</param>
<param>
<key>marker2</key>
- <value>0</value>
+ <value>-1</value>
</param>
<param>
<key>alpha2</key>
@@ -2742,15 +2950,15 @@
</param>
<param>
<key>color3</key>
- <value>"red"</value>
+ <value>"green"</value>
</param>
<param>
<key>style3</key>
- <value>0</value>
+ <value>1</value>
</param>
<param>
<key>marker3</key>
- <value>0</value>
+ <value>-1</value>
</param>
<param>
<key>alpha3</key>
@@ -2766,15 +2974,15 @@
</param>
<param>
<key>color4</key>
- <value>"red"</value>
+ <value>"black"</value>
</param>
<param>
<key>style4</key>
- <value>0</value>
+ <value>1</value>
</param>
<param>
<key>marker4</key>
- <value>0</value>
+ <value>-1</value>
</param>
<param>
<key>alpha4</key>
@@ -2790,15 +2998,15 @@
</param>
<param>
<key>color5</key>
- <value>"red"</value>
+ <value>"cyan"</value>
</param>
<param>
<key>style5</key>
- <value>0</value>
+ <value>1</value>
</param>
<param>
<key>marker5</key>
- <value>0</value>
+ <value>-1</value>
</param>
<param>
<key>alpha5</key>
@@ -2814,15 +3022,15 @@
</param>
<param>
<key>color6</key>
- <value>"red"</value>
+ <value>"magenta"</value>
</param>
<param>
<key>style6</key>
- <value>0</value>
+ <value>1</value>
</param>
<param>
<key>marker6</key>
- <value>0</value>
+ <value>-1</value>
</param>
<param>
<key>alpha6</key>
@@ -2838,15 +3046,15 @@
</param>
<param>
<key>color7</key>
- <value>"red"</value>
+ <value>"yellow"</value>
</param>
<param>
<key>style7</key>
- <value>0</value>
+ <value>1</value>
</param>
<param>
<key>marker7</key>
- <value>0</value>
+ <value>-1</value>
</param>
<param>
<key>alpha7</key>
@@ -2862,15 +3070,15 @@
</param>
<param>
<key>color8</key>
- <value>"red"</value>
+ <value>"dark red"</value>
</param>
<param>
<key>style8</key>
- <value>0</value>
+ <value>1</value>
</param>
<param>
<key>marker8</key>
- <value>0</value>
+ <value>-1</value>
</param>
<param>
<key>alpha8</key>
@@ -2886,15 +3094,15 @@
</param>
<param>
<key>color9</key>
- <value>"red"</value>
+ <value>"dark green"</value>
</param>
<param>
<key>style9</key>
- <value>0</value>
+ <value>1</value>
</param>
<param>
<key>marker9</key>
- <value>0</value>
+ <value>-1</value>
</param>
<param>
<key>alpha9</key>
@@ -2910,27 +3118,31 @@
</param>
<param>
<key>color10</key>
- <value>"red"</value>
+ <value>"blue"</value>
</param>
<param>
<key>style10</key>
- <value>0</value>
+ <value>1</value>
</param>
<param>
<key>marker10</key>
- <value>0</value>
+ <value>-1</value>
</param>
<param>
<key>alpha10</key>
<value>1.0</value>
</param>
<param>
- <key>affinity</key>
+ <key>alias</key>
<value></value>
</param>
<param>
+ <key>affinity</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(1399, 283)</value>
+ <value>(1398, 370)</value>
</param>
<param>
<key>_rotation</key>
diff --git a/gr-digital/examples/ofdm/ofdm_loopback.grc b/gr-digital/examples/ofdm/ofdm_loopback.grc
index a2c93145c4..fbb26cae92 100644
--- a/gr-digital/examples/ofdm/ofdm_loopback.grc
+++ b/gr-digital/examples/ofdm/ofdm_loopback.grc
@@ -1,59 +1,27 @@
<?xml version='1.0' encoding='ASCII'?>
<flow_graph>
- <timestamp>Sun Nov 3 19:13:00 2013</timestamp>
+ <timestamp>Wed Jul 9 15:53:31 2014</timestamp>
<block>
- <key>options</key>
+ <key>variable</key>
<param>
<key>id</key>
- <value>ofdm_loopback_example</value>
+ <value>len_tag_key</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>title</key>
- <value>OFDM Loopback Example</value>
- </param>
- <param>
- <key>author</key>
- <value></value>
- </param>
- <param>
- <key>description</key>
- <value>Transmit a pre-defined signal (a complex sine) as OFDM packets.</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>
+ <key>value</key>
+ <value>"packet_len"</value>
</param>
<param>
- <key>realtime_scheduling</key>
+ <key>alias</key>
<value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(0, -1)</value>
+ <value>(283, 6)</value>
</param>
<param>
<key>_rotation</key>
@@ -75,6 +43,10 @@
<value>100000</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(493, 7)</value>
</param>
@@ -98,31 +70,12 @@
<value>64</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(403, 8)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>variable</key>
- <param>
- <key>id</key>
- <value>len_tag_key</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>value</key>
- <value>"packet_len"</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(283, 6)</value>
+ <value>(403, 8)</value>
</param>
<param>
<key>_rotation</key>
@@ -144,6 +97,10 @@
<value>50</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(182, 6)</value>
</param>
@@ -183,6 +140,10 @@
<value>1</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
@@ -191,6 +152,10 @@
<value>0</value>
</param>
<param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(5, 124)</value>
</param>
@@ -200,10 +165,10 @@
</param>
</block>
<block>
- <key>wxgui_fftsink2</key>
+ <key>blocks_tag_debug</key>
<param>
<key>id</key>
- <value>wxgui_fftsink2_0</value>
+ <value>blocks_tag_debug_0</value>
</param>
<param>
<key>_enabled</key>
@@ -211,83 +176,90 @@
</param>
<param>
<key>type</key>
- <value>complex</value>
+ <value>byte</value>
</param>
<param>
- <key>title</key>
- <value>Rx Spectrum</value>
+ <key>name</key>
+ <value>Rx Packets</value>
</param>
<param>
- <key>samp_rate</key>
- <value>100e3</value>
+ <key>filter</key>
+ <value>""</value>
</param>
<param>
- <key>baseband_freq</key>
- <value>0</value>
+ <key>num_inputs</key>
+ <value>1</value>
</param>
<param>
- <key>y_per_div</key>
- <value>10</value>
+ <key>vlen</key>
+ <value>1</value>
</param>
<param>
- <key>y_divs</key>
- <value>10</value>
+ <key>display</key>
+ <value>True</value>
</param>
<param>
- <key>ref_level</key>
- <value>0</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>ref_scale</key>
- <value>2.0</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>fft_size</key>
- <value>1024</value>
+ <key>_coordinate</key>
+ <value>(325, 483)</value>
</param>
<param>
- <key>fft_rate</key>
- <value>15</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
+ </block>
+ <block>
+ <key>blocks_stream_to_tagged_stream</key>
<param>
- <key>peak_hold</key>
- <value>False</value>
+ <key>id</key>
+ <value>blocks_stream_to_tagged_stream_0</value>
</param>
<param>
- <key>average</key>
- <value>False</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>avg_alpha</key>
- <value>0</value>
+ <key>type</key>
+ <value>byte</value>
</param>
<param>
- <key>win</key>
- <value>None</value>
+ <key>vlen</key>
+ <value>1</value>
</param>
<param>
- <key>win_size</key>
- <value></value>
+ <key>packet_len</key>
+ <value>packet_len</value>
+ </param>
+ <param>
+ <key>len_tag_key</key>
+ <value>len_tag_key</value>
</param>
<param>
- <key>grid_pos</key>
+ <key>alias</key>
<value></value>
</param>
<param>
- <key>notebook</key>
+ <key>affinity</key>
<value></value>
</param>
<param>
- <key>freqvar</key>
- <value>None</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>affinity</key>
- <value></value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(51, 500)</value>
+ <value>(282, 132)</value>
</param>
<param>
<key>_rotation</key>
@@ -295,73 +267,66 @@
</param>
</block>
<block>
- <key>blocks_tag_debug</key>
+ <key>digital_ofdm_rx</key>
<param>
<key>id</key>
- <value>blocks_tag_debug_0</value>
+ <value>digital_ofdm_rx_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>byte</value>
- </param>
- <param>
- <key>name</key>
- <value>Rx Packets</value>
+ <key>fft_len</key>
+ <value>fft_len</value>
</param>
<param>
- <key>num_inputs</key>
- <value>1</value>
+ <key>cp_len</key>
+ <value>fft_len/4</value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>packet_len_key</key>
+ <value>"rx_len"</value>
</param>
<param>
- <key>display</key>
- <value>True</value>
+ <key>occupied_carriers</key>
+ <value>()</value>
</param>
<param>
- <key>affinity</key>
- <value></value>
+ <key>pilot_carriers</key>
+ <value>()</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(325, 483)</value>
+ <key>pilot_symbols</key>
+ <value>()</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>sync_word1</key>
+ <value>()</value>
</param>
- </block>
- <block>
- <key>blocks_stream_to_tagged_stream</key>
<param>
- <key>id</key>
- <value>blocks_stream_to_tagged_stream_0</value>
+ <key>sync_word2</key>
+ <value>()</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>header_mod</key>
+ <value>"BPSK"</value>
</param>
<param>
- <key>type</key>
- <value>byte</value>
+ <key>payload_mod</key>
+ <value>"QPSK"</value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>scramble_bits</key>
+ <value>False</value>
</param>
<param>
- <key>packet_len</key>
- <value>packet_len</value>
+ <key>log</key>
+ <value>False</value>
</param>
<param>
- <key>len_tag_key</key>
- <value>len_tag_key</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>affinity</key>
@@ -372,8 +337,12 @@
<value>0</value>
</param>
<param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(282, 132)</value>
+ <value>(52, 374)</value>
</param>
<param>
<key>_rotation</key>
@@ -381,10 +350,10 @@
</param>
</block>
<block>
- <key>digital_ofdm_rx</key>
+ <key>digital_ofdm_tx</key>
<param>
<key>id</key>
- <value>digital_ofdm_rx_0</value>
+ <value>digital_ofdm_tx_0</value>
</param>
<param>
<key>_enabled</key>
@@ -400,7 +369,7 @@
</param>
<param>
<key>packet_len_key</key>
- <value>"rx_len"</value>
+ <value>len_tag_key</value>
</param>
<param>
<key>occupied_carriers</key>
@@ -431,6 +400,10 @@
<value>"QPSK"</value>
</param>
<param>
+ <key>rolloff</key>
+ <value>0</value>
+ </param>
+ <param>
<key>scramble_bits</key>
<value>False</value>
</param>
@@ -439,6 +412,10 @@
<value>False</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
@@ -447,8 +424,12 @@
<value>0</value>
</param>
<param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(52, 374)</value>
+ <value>(557, 94)</value>
</param>
<param>
<key>_rotation</key>
@@ -456,16 +437,44 @@
</param>
</block>
<block>
- <key>blocks_uchar_to_float</key>
+ <key>channels_channel_model</key>
<param>
<key>id</key>
- <value>blocks_uchar_to_float_0</value>
+ <value>channels_channel_model_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
+ <key>noise_voltage</key>
+ <value>noise_voltage</value>
+ </param>
+ <param>
+ <key>freq_offset</key>
+ <value>freq_offset * 1.0/fft_len</value>
+ </param>
+ <param>
+ <key>epsilon</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>taps</key>
+ <value>1.0 + 1.0j</value>
+ </param>
+ <param>
+ <key>seed</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>block_tags</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
@@ -474,19 +483,23 @@
<value>0</value>
</param>
<param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(326, 408)</value>
+ <value>(453, 244)</value>
</param>
<param>
<key>_rotation</key>
- <value>0</value>
+ <value>180</value>
</param>
</block>
<block>
- <key>wxgui_scopesink2</key>
+ <key>blocks_throttle</key>
<param>
<key>id</key>
- <value>wxgui_scopesink2_0</value>
+ <value>blocks_throttle_0</value>
</param>
<param>
<key>_enabled</key>
@@ -494,59 +507,270 @@
</param>
<param>
<key>type</key>
- <value>float</value>
+ <value>complex</value>
</param>
<param>
- <key>title</key>
- <value>Scope Plot</value>
+ <key>samples_per_second</key>
+ <value>samp_rate</value>
</param>
<param>
- <key>samp_rate</key>
- <value>1.0</value>
+ <key>vlen</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>ignoretag</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>v_scale</key>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
<value>0</value>
</param>
<param>
- <key>v_offset</key>
+ <key>maxoutbuf</key>
<value>0</value>
</param>
<param>
- <key>t_scale</key>
+ <key>_coordinate</key>
+ <value>(177, 281)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>180</value>
+ </param>
+ </block>
+ <block>
+ <key>qtgui_freq_sink_x</key>
+ <param>
+ <key>id</key>
+ <value>qtgui_freq_sink_x_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>complex</value>
+ </param>
+ <param>
+ <key>name</key>
+ <value>Rx Spectrum</value>
+ </param>
+ <param>
+ <key>fftsize</key>
+ <value>1024</value>
+ </param>
+ <param>
+ <key>wintype</key>
+ <value>firdes.WIN_BLACKMAN_hARRIS</value>
+ </param>
+ <param>
+ <key>fc</key>
<value>0</value>
</param>
<param>
- <key>ac_couple</key>
- <value>False</value>
+ <key>bw</key>
+ <value>samp_rate</value>
</param>
<param>
- <key>xy_mode</key>
+ <key>autoscale</key>
<value>False</value>
</param>
<param>
- <key>num_inputs</key>
+ <key>average</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>ymin</key>
+ <value>-140</value>
+ </param>
+ <param>
+ <key>ymax</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>nconnections</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>update_time</key>
+ <value>0.10</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value></value>
+ </param>
+ <param>
+ <key>label1</key>
+ <value>Rx Spectrum</value>
+ </param>
+ <param>
+ <key>width1</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color1</key>
+ <value>"blue"</value>
+ </param>
+ <param>
+ <key>alpha1</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width2</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color2</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>alpha2</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width3</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color3</key>
+ <value>"green"</value>
+ </param>
+ <param>
+ <key>alpha3</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width4</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color4</key>
+ <value>"black"</value>
+ </param>
+ <param>
+ <key>alpha4</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width5</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color5</key>
+ <value>"cyan"</value>
+ </param>
+ <param>
+ <key>alpha5</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width6</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color6</key>
+ <value>"magenta"</value>
+ </param>
+ <param>
+ <key>alpha6</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width7</key>
<value>1</value>
</param>
<param>
- <key>win_size</key>
+ <key>color7</key>
+ <value>"yellow"</value>
+ </param>
+ <param>
+ <key>alpha7</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label8</key>
<value></value>
</param>
<param>
- <key>grid_pos</key>
+ <key>width8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color8</key>
+ <value>"dark red"</value>
+ </param>
+ <param>
+ <key>alpha8</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label9</key>
<value></value>
</param>
<param>
- <key>notebook</key>
+ <key>width9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color9</key>
+ <value>"dark green"</value>
+ </param>
+ <param>
+ <key>alpha9</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label10</key>
<value></value>
</param>
<param>
- <key>trig_mode</key>
- <value>wxgui.TRIG_MODE_AUTO</value>
+ <key>width10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color10</key>
+ <value>"dark blue"</value>
+ </param>
+ <param>
+ <key>alpha10</key>
+ <value>1.0</value>
</param>
<param>
- <key>y_axis_label</key>
- <value>Counts</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>affinity</key>
@@ -554,7 +778,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(530, 382)</value>
+ <value>(52, 527)</value>
</param>
<param>
<key>_rotation</key>
@@ -562,78 +786,117 @@
</param>
</block>
<block>
- <key>digital_ofdm_tx</key>
+ <key>variable_qtgui_range</key>
<param>
<key>id</key>
- <value>digital_ofdm_tx_0</value>
+ <value>freq_offset</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>fft_len</key>
- <value>fft_len</value>
+ <key>label</key>
+ <value>Frequency Offset (Multiples of Sub-carrier spacing)</value>
</param>
<param>
- <key>cp_len</key>
- <value>fft_len/4</value>
+ <key>value</key>
+ <value>0</value>
</param>
<param>
- <key>packet_len_key</key>
- <value>len_tag_key</value>
+ <key>start</key>
+ <value>-3</value>
</param>
<param>
- <key>occupied_carriers</key>
- <value>()</value>
+ <key>stop</key>
+ <value>3</value>
</param>
<param>
- <key>pilot_carriers</key>
- <value>()</value>
+ <key>step</key>
+ <value>.01</value>
</param>
<param>
- <key>pilot_symbols</key>
- <value>()</value>
+ <key>widget</key>
+ <value>counter_slider</value>
</param>
<param>
- <key>sync_word1</key>
- <value>()</value>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
</param>
<param>
- <key>sync_word2</key>
- <value>()</value>
+ <key>min_len</key>
+ <value>200</value>
</param>
<param>
- <key>header_mod</key>
- <value>"BPSK"</value>
+ <key>gui_hint</key>
+ <value></value>
</param>
<param>
- <key>payload_mod</key>
- <value>"QPSK"</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>rolloff</key>
+ <key>_coordinate</key>
+ <value>(458, 518)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
<value>0</value>
</param>
+ </block>
+ <block>
+ <key>variable_qtgui_range</key>
<param>
- <key>scramble_bits</key>
- <value>False</value>
+ <key>id</key>
+ <value>noise_voltage</value>
</param>
<param>
- <key>log</key>
- <value>False</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>affinity</key>
- <value></value>
+ <key>label</key>
+ <value>Noise Amplitude</value>
</param>
<param>
- <key>minoutbuf</key>
+ <key>value</key>
+ <value>0.1</value>
+ </param>
+ <param>
+ <key>start</key>
<value>0</value>
</param>
<param>
+ <key>stop</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>step</key>
+ <value>.01</value>
+ </param>
+ <param>
+ <key>widget</key>
+ <value>counter_slider</value>
+ </param>
+ <param>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
+ </param>
+ <param>
+ <key>min_len</key>
+ <value>200</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value></value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(557, 94)</value>
+ <value>(652, 501)</value>
</param>
<param>
<key>_rotation</key>
@@ -641,40 +904,83 @@
</param>
</block>
<block>
- <key>channels_channel_model</key>
+ <key>options</key>
<param>
<key>id</key>
- <value>channels_channel_model_0</value>
+ <value>ofdm_loopback_example</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>noise_voltage</key>
- <value>noise_voltage</value>
+ <key>title</key>
+ <value>OFDM Loopback Example</value>
</param>
<param>
- <key>freq_offset</key>
- <value>freq_offset * 1.0/fft_len</value>
+ <key>author</key>
+ <value></value>
</param>
<param>
- <key>epsilon</key>
- <value>1.0</value>
+ <key>description</key>
+ <value>Transmit a pre-defined signal (a complex sine) as OFDM packets.</value>
</param>
<param>
- <key>taps</key>
- <value>1.0 + 1.0j</value>
+ <key>window_size</key>
+ <value>1280, 1024</value>
</param>
<param>
- <key>seed</key>
+ <key>generate_options</key>
+ <value>qt_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>block_tags</key>
+ <key>realtime_scheduling</key>
+ <value></value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(0, -1)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>blocks_uchar_to_float</key>
+ <param>
+ <key>id</key>
+ <value>blocks_uchar_to_float_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
<value>True</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
@@ -683,19 +989,23 @@
<value>0</value>
</param>
<param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(453, 244)</value>
+ <value>(326, 408)</value>
</param>
<param>
<key>_rotation</key>
- <value>180</value>
+ <value>0</value>
</param>
</block>
<block>
- <key>blocks_throttle</key>
+ <key>qtgui_time_sink_x</key>
<param>
<key>id</key>
- <value>blocks_throttle_0</value>
+ <value>qtgui_time_sink_x_0</value>
</param>
<param>
<key>_enabled</key>
@@ -703,137 +1013,323 @@
</param>
<param>
<key>type</key>
- <value>complex</value>
+ <value>float</value>
</param>
<param>
- <key>samples_per_second</key>
+ <key>name</key>
+ <value>Scope Plot</value>
+ </param>
+ <param>
+ <key>size</key>
+ <value>1024</value>
+ </param>
+ <param>
+ <key>srate</key>
<value>samp_rate</value>
</param>
<param>
- <key>vlen</key>
+ <key>autoscale</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>ymin</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>ymax</key>
<value>1</value>
</param>
<param>
- <key>affinity</key>
+ <key>nconnections</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>update_time</key>
+ <value>0.10</value>
+ </param>
+ <param>
+ <key>entags</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
+ <key>tr_mode</key>
+ <value>qtgui.TRIG_MODE_FREE</value>
+ </param>
+ <param>
+ <key>tr_slope</key>
+ <value>qtgui.TRIG_SLOPE_POS</value>
+ </param>
+ <param>
+ <key>tr_level</key>
+ <value>0.0</value>
+ </param>
+ <param>
+ <key>tr_delay</key>
<value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(177, 281)</value>
+ <key>tr_chan</key>
+ <value>0</value>
</param>
<param>
- <key>_rotation</key>
- <value>180</value>
+ <key>tr_tag</key>
+ <value>""</value>
</param>
- </block>
- <block>
- <key>variable_slider</key>
<param>
- <key>id</key>
- <value>freq_offset</value>
+ <key>label1</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>width1</key>
+ <value>1</value>
</param>
<param>
- <key>label</key>
- <value>Frequency Offset (Multiples of Sub-carrier spacing)</value>
+ <key>color1</key>
+ <value>"blue"</value>
</param>
<param>
- <key>value</key>
- <value>0</value>
+ <key>style1</key>
+ <value>1</value>
</param>
<param>
- <key>min</key>
- <value>-3</value>
+ <key>marker1</key>
+ <value>-1</value>
</param>
<param>
- <key>max</key>
- <value>3</value>
+ <key>alpha1</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label2</key>
+ <value></value>
</param>
<param>
- <key>num_steps</key>
- <value>100</value>
+ <key>width2</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color2</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>style2</key>
+ <value>1</value>
</param>
<param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
+ <key>marker2</key>
+ <value>-1</value>
</param>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>alpha2</key>
+ <value>1.0</value>
</param>
<param>
- <key>grid_pos</key>
+ <key>label3</key>
<value></value>
</param>
<param>
- <key>notebook</key>
+ <key>width3</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color3</key>
+ <value>"green"</value>
+ </param>
+ <param>
+ <key>style3</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker3</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha3</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label4</key>
<value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(466, 508)</value>
+ <key>width4</key>
+ <value>1</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>color4</key>
+ <value>"black"</value>
</param>
- </block>
- <block>
- <key>variable_slider</key>
<param>
- <key>id</key>
- <value>noise_voltage</value>
+ <key>style4</key>
+ <value>1</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>marker4</key>
+ <value>-1</value>
</param>
<param>
- <key>label</key>
- <value>Noise Amplitude</value>
+ <key>alpha4</key>
+ <value>1.0</value>
</param>
<param>
- <key>value</key>
- <value>0.01</value>
+ <key>label5</key>
+ <value></value>
</param>
<param>
- <key>min</key>
- <value>0</value>
+ <key>width5</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color5</key>
+ <value>"cyan"</value>
+ </param>
+ <param>
+ <key>style5</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker5</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha5</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width6</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color6</key>
+ <value>"magenta"</value>
+ </param>
+ <param>
+ <key>style6</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker6</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha6</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label7</key>
+ <value></value>
</param>
<param>
- <key>max</key>
+ <key>width7</key>
<value>1</value>
</param>
<param>
- <key>num_steps</key>
- <value>100</value>
+ <key>color7</key>
+ <value>"yellow"</value>
+ </param>
+ <param>
+ <key>style7</key>
+ <value>1</value>
</param>
<param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
+ <key>marker7</key>
+ <value>-1</value>
</param>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>alpha7</key>
+ <value>1.0</value>
</param>
<param>
- <key>grid_pos</key>
+ <key>label8</key>
<value></value>
</param>
<param>
- <key>notebook</key>
+ <key>width8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color8</key>
+ <value>"dark red"</value>
+ </param>
+ <param>
+ <key>style8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker8</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha8</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label9</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color9</key>
+ <value>"dark green"</value>
+ </param>
+ <param>
+ <key>style9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker9</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha9</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label10</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color10</key>
+ <value>"blue"</value>
+ </param>
+ <param>
+ <key>style10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker10</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha10</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
<value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(653, 505)</value>
+ <value>(550, 382)</value>
</param>
<param>
<key>_rotation</key>
@@ -848,12 +1344,6 @@
</connection>
<connection>
<source_block_id>blocks_throttle_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>blocks_throttle_0</source_block_id>
<sink_block_id>digital_ofdm_rx_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
@@ -883,14 +1373,20 @@
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>blocks_uchar_to_float_0</source_block_id>
- <sink_block_id>wxgui_scopesink2_0</sink_block_id>
+ <source_block_id>channels_channel_model_0</source_block_id>
+ <sink_block_id>blocks_throttle_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>channels_channel_model_0</source_block_id>
- <sink_block_id>blocks_throttle_0</sink_block_id>
+ <source_block_id>blocks_throttle_0</source_block_id>
+ <sink_block_id>qtgui_freq_sink_x_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>blocks_uchar_to_float_0</source_block_id>
+ <sink_block_id>qtgui_time_sink_x_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
diff --git a/gr-digital/examples/ofdm/rx_ofdm.grc b/gr-digital/examples/ofdm/rx_ofdm.grc
index 3853853a27..0d00567712 100644
--- a/gr-digital/examples/ofdm/rx_ofdm.grc
+++ b/gr-digital/examples/ofdm/rx_ofdm.grc
@@ -1,59 +1,27 @@
<?xml version='1.0' encoding='ASCII'?>
<flow_graph>
- <timestamp>Sun Feb 2 14:07:51 2014</timestamp>
+ <timestamp>Wed Jul 9 15:50:17 2014</timestamp>
<block>
- <key>options</key>
+ <key>variable</key>
<param>
<key>id</key>
- <value>rx_ofdm</value>
+ <value>samp_rate</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>title</key>
- <value>OFDM Rx</value>
- </param>
- <param>
- <key>author</key>
- <value></value>
- </param>
- <param>
- <key>description</key>
- <value>Example of an OFDM receiver</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>
+ <key>value</key>
+ <value>10000</value>
</param>
<param>
- <key>realtime_scheduling</key>
+ <key>alias</key>
<value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(0, -1)</value>
+ <value>(170, 65)</value>
</param>
<param>
<key>_rotation</key>
@@ -64,7 +32,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>payload_mod</value>
+ <value>header_formatter</value>
</param>
<param>
<key>_enabled</key>
@@ -72,11 +40,15 @@
</param>
<param>
<key>value</key>
- <value>digital.constellation_qpsk()</value>
+ <value>digital.packet_header_ofdm(occupied_carriers, n_syms=1, len_tag_key=packet_length_tag_key, frame_len_tag_key=length_tag_key, bits_per_header_sym=header_mod.bits_per_symbol(), bits_per_payload_sym=payload_mod.bits_per_symbol(), scramble_header=False)</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(663, 1)</value>
+ <value>(855, 0)</value>
</param>
<param>
<key>_rotation</key>
@@ -87,7 +59,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>samp_rate</value>
+ <value>packet_length_tag_key</value>
</param>
<param>
<key>_enabled</key>
@@ -95,11 +67,15 @@
</param>
<param>
<key>value</key>
- <value>10000</value>
+ <value>"packet_len"</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(170, 65)</value>
+ <value>(1132, 0)</value>
</param>
<param>
<key>_rotation</key>
@@ -110,7 +86,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>header_equalizer</value>
+ <value>length_tag_key</value>
</param>
<param>
<key>_enabled</key>
@@ -118,11 +94,15 @@
</param>
<param>
<key>value</key>
- <value>digital.ofdm_equalizer_simpledfe(fft_len, header_mod.base(), occupied_carriers, pilot_carriers, pilot_symbols)</value>
+ <value>"frame_len"</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(931, 69)</value>
+ <value>(367, -1)</value>
</param>
<param>
<key>_rotation</key>
@@ -133,7 +113,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>payload_equalizer</value>
+ <value>occupied_carriers</value>
</param>
<param>
<key>_enabled</key>
@@ -141,11 +121,15 @@
</param>
<param>
<key>value</key>
- <value>digital.ofdm_equalizer_simpledfe(fft_len, payload_mod.base(), occupied_carriers, pilot_carriers, pilot_symbols, 1)</value>
+ <value>(range(-26, -21) + range(-20, -7) + range(-6, 0) + range(1, 7) + range(8, 21) + range(22, 27),)</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(1112, 73)</value>
+ <value>(541, 70)</value>
</param>
<param>
<key>_rotation</key>
@@ -156,7 +140,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>sync_word2</value>
+ <value>pilot_symbols</value>
</param>
<param>
<key>_enabled</key>
@@ -164,11 +148,15 @@
</param>
<param>
<key>value</key>
- <value>[0j, 0j, 0j, 0j, 0j, 0j, (-1+0j), (-1+0j), (-1+0j), (-1+0j), (1+0j), (1+0j), (-1+0j), (-1+0j), (-1+0j), (1+0j), (-1+0j), (1+0j), (1+0j), (1 +0j), (1+0j), (1+0j), (-1+0j), (-1+0j), (-1+0j), (-1+0j), (-1+0j), (1+0j), (-1+0j), (-1+0j), (1+0j), (-1+0j), 0j, (1+0j), (-1+0j), (1+0j), (1+0j), (1+0j), (-1+0j), (1+0j), (1+0j), (1+0j), (-1+0j), (1+0j), (1+0j), (1+0j), (1+0j), (-1+0j), (1+0j), (-1+0j), (-1+0j), (-1+0j), (1+0j), (-1+0j), (1+0j), (-1+0j), (-1+0j), (-1+0j), (-1+0j), 0j, 0j, 0j, 0j, 0j]</value>
+ <value>((1, 1, 1, -1,),)</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(399, 66)</value>
+ <value>(813, 70)</value>
</param>
<param>
<key>_rotation</key>
@@ -179,7 +167,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>sync_word1</value>
+ <value>pilot_carriers</value>
</param>
<param>
<key>_enabled</key>
@@ -187,11 +175,15 @@
</param>
<param>
<key>value</key>
- <value>[0., 0., 0., 0., 0., 0., 0., 1.41421356, 0., -1.41421356, 0., 1.41421356, 0., -1.41421356, 0., -1.41421356, 0., -1.41421356, 0., 1.41421356, 0., -1.41421356, 0., 1.41421356, 0., -1.41421356, 0., -1.41421356, 0., -1.41421356, 0., -1.41421356, 0., 1.41421356, 0., -1.41421356, 0., 1.41421356, 0., 1.41421356, 0., 1.41421356, 0., -1.41421356, 0., 1.41421356, 0., 1.41421356, 0., 1.41421356, 0., -1.41421356, 0., 1.41421356, 0., 1.41421356, 0., 1.41421356, 0., 0., 0., 0., 0., 0.]</value>
+ <value>((-21, -7, 7, 21,),)</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(255, 67)</value>
+ <value>(692, 70)</value>
</param>
<param>
<key>_rotation</key>
@@ -202,7 +194,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>fft_len</value>
+ <value>packet_len</value>
</param>
<param>
<key>_enabled</key>
@@ -210,11 +202,15 @@
</param>
<param>
<key>value</key>
- <value>64</value>
+ <value>96</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(301, -1)</value>
+ <value>(1034, 0)</value>
</param>
<param>
<key>_rotation</key>
@@ -236,6 +232,10 @@
<value>digital.constellation_bpsk()</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(490, 0)</value>
</param>
@@ -248,7 +248,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>packet_len</value>
+ <value>fft_len</value>
</param>
<param>
<key>_enabled</key>
@@ -256,34 +256,15 @@
</param>
<param>
<key>value</key>
- <value>96</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(1034, 0)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>variable</key>
- <param>
- <key>id</key>
- <value>pilot_carriers</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
+ <value>64</value>
</param>
<param>
- <key>value</key>
- <value>((-21, -7, 7, 21,),)</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(692, 70)</value>
+ <value>(301, -1)</value>
</param>
<param>
<key>_rotation</key>
@@ -294,7 +275,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>pilot_symbols</value>
+ <value>sync_word1</value>
</param>
<param>
<key>_enabled</key>
@@ -302,11 +283,15 @@
</param>
<param>
<key>value</key>
- <value>((1, 1, 1, -1,),)</value>
+ <value>[0., 0., 0., 0., 0., 0., 0., 1.41421356, 0., -1.41421356, 0., 1.41421356, 0., -1.41421356, 0., -1.41421356, 0., -1.41421356, 0., 1.41421356, 0., -1.41421356, 0., 1.41421356, 0., -1.41421356, 0., -1.41421356, 0., -1.41421356, 0., -1.41421356, 0., 1.41421356, 0., -1.41421356, 0., 1.41421356, 0., 1.41421356, 0., 1.41421356, 0., -1.41421356, 0., 1.41421356, 0., 1.41421356, 0., 1.41421356, 0., -1.41421356, 0., 1.41421356, 0., 1.41421356, 0., 1.41421356, 0., 0., 0., 0., 0., 0.]</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(813, 70)</value>
+ <value>(255, 67)</value>
</param>
<param>
<key>_rotation</key>
@@ -317,7 +302,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>occupied_carriers</value>
+ <value>sync_word2</value>
</param>
<param>
<key>_enabled</key>
@@ -325,11 +310,15 @@
</param>
<param>
<key>value</key>
- <value>(range(-26, -21) + range(-20, -7) + range(-6, 0) + range(1, 7) + range(8, 21) + range(22, 27),)</value>
+ <value>[0j, 0j, 0j, 0j, 0j, 0j, (-1+0j), (-1+0j), (-1+0j), (-1+0j), (1+0j), (1+0j), (-1+0j), (-1+0j), (-1+0j), (1+0j), (-1+0j), (1+0j), (1+0j), (1 +0j), (1+0j), (1+0j), (-1+0j), (-1+0j), (-1+0j), (-1+0j), (-1+0j), (1+0j), (-1+0j), (-1+0j), (1+0j), (-1+0j), 0j, (1+0j), (-1+0j), (1+0j), (1+0j), (1+0j), (-1+0j), (1+0j), (1+0j), (1+0j), (-1+0j), (1+0j), (1+0j), (1+0j), (1+0j), (-1+0j), (1+0j), (-1+0j), (-1+0j), (-1+0j), (1+0j), (-1+0j), (1+0j), (-1+0j), (-1+0j), (-1+0j), (-1+0j), 0j, 0j, 0j, 0j, 0j]</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(541, 70)</value>
+ <value>(399, 66)</value>
</param>
<param>
<key>_rotation</key>
@@ -340,7 +329,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>length_tag_key</value>
+ <value>payload_equalizer</value>
</param>
<param>
<key>_enabled</key>
@@ -348,11 +337,15 @@
</param>
<param>
<key>value</key>
- <value>"frame_len"</value>
+ <value>digital.ofdm_equalizer_simpledfe(fft_len, payload_mod.base(), occupied_carriers, pilot_carriers, pilot_symbols, 1)</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(367, -1)</value>
+ <value>(1112, 73)</value>
</param>
<param>
<key>_rotation</key>
@@ -363,7 +356,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>packet_length_tag_key</value>
+ <value>header_equalizer</value>
</param>
<param>
<key>_enabled</key>
@@ -371,11 +364,15 @@
</param>
<param>
<key>value</key>
- <value>"packet_len"</value>
+ <value>digital.ofdm_equalizer_simpledfe(fft_len, header_mod.base(), occupied_carriers, pilot_carriers, pilot_symbols)</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(1132, 0)</value>
+ <value>(931, 69)</value>
</param>
<param>
<key>_rotation</key>
@@ -386,7 +383,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>header_formatter</value>
+ <value>payload_mod</value>
</param>
<param>
<key>_enabled</key>
@@ -394,11 +391,15 @@
</param>
<param>
<key>value</key>
- <value>digital.packet_header_ofdm(occupied_carriers, n_syms=1, len_tag_key=packet_length_tag_key, frame_len_tag_key=length_tag_key, bits_per_header_sym=header_mod.bits_per_symbol(), bits_per_payload_sym=payload_mod.bits_per_symbol(), scramble_header=False)</value>
+ <value>digital.constellation_qpsk()</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(855, 0)</value>
+ <value>(663, 1)</value>
</param>
<param>
<key>_rotation</key>
@@ -420,6 +421,10 @@
<value>from gnuradio.digital.utils import tagged_streams</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(163, 0)</value>
</param>
@@ -459,6 +464,10 @@
<value>True</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
@@ -494,6 +503,10 @@
<value>-2.0/fft_len</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
@@ -541,6 +554,10 @@
<value>True</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
@@ -584,6 +601,10 @@
<value>1</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
@@ -627,6 +648,10 @@
<value>False</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
@@ -662,6 +687,10 @@
<value>header_formatter.base()</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
@@ -697,6 +726,10 @@
<value>header_mod.base()</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
@@ -752,6 +785,10 @@
<value>1</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
@@ -822,6 +859,10 @@
<value>packet_length_tag_key</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
@@ -877,6 +918,10 @@
<value>False</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
@@ -932,6 +977,10 @@
<value>1</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
@@ -1056,6 +1105,10 @@
<value>1</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
@@ -1111,6 +1164,10 @@
<value>0</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
@@ -1173,6 +1230,10 @@
<value>packet_length_tag_key</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
@@ -1220,6 +1281,10 @@
<value>True</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
@@ -1255,6 +1320,10 @@
<value>payload_mod.base()</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
@@ -1333,6 +1402,10 @@
<value>True</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
@@ -1380,6 +1453,10 @@
<value>True</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
@@ -1463,6 +1540,10 @@
<value>True</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
@@ -1534,6 +1615,10 @@
<value>()</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
@@ -1593,6 +1678,10 @@
<value>True</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
@@ -1652,6 +1741,10 @@
<value>True</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
@@ -1699,6 +1792,10 @@
<value>1</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
@@ -1719,6 +1816,69 @@
<value>0</value>
</param>
</block>
+ <block>
+ <key>options</key>
+ <param>
+ <key>id</key>
+ <value>rx_ofdm</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>title</key>
+ <value>OFDM Rx</value>
+ </param>
+ <param>
+ <key>author</key>
+ <value></value>
+ </param>
+ <param>
+ <key>description</key>
+ <value>Example of an OFDM receiver</value>
+ </param>
+ <param>
+ <key>window_size</key>
+ <value>1280, 1024</value>
+ </param>
+ <param>
+ <key>generate_options</key>
+ <value>qt_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>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(1, 0)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
<connection>
<source_block_id>analog_random_source_x_0</source_block_id>
<sink_block_id>blocks_stream_to_tagged_stream_0</sink_block_id>
diff --git a/gr-digital/examples/ofdm/tx_ofdm.grc b/gr-digital/examples/ofdm/tx_ofdm.grc
index 80d7f7f9e4..368f16bd80 100644
--- a/gr-digital/examples/ofdm/tx_ofdm.grc
+++ b/gr-digital/examples/ofdm/tx_ofdm.grc
@@ -1,59 +1,27 @@
<?xml version='1.0' encoding='ASCII'?>
<flow_graph>
- <timestamp>Sun Nov 3 18:45:28 2013</timestamp>
+ <timestamp>Wed Jul 9 15:49:47 2014</timestamp>
<block>
- <key>options</key>
+ <key>variable</key>
<param>
<key>id</key>
- <value>tx_ofdm</value>
+ <value>sync_word2</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>title</key>
- <value>OFDM Tx</value>
- </param>
- <param>
- <key>author</key>
- <value></value>
- </param>
- <param>
- <key>description</key>
- <value>Example of an OFDM Transmitter</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>run</value>
- </param>
- <param>
- <key>run</key>
- <value>True</value>
- </param>
- <param>
- <key>max_nouts</key>
- <value>0</value>
+ <key>value</key>
+ <value>[0, 0, 0, 0, 0, 0, -1, -1, -1, -1, 1, 1, -1, -1, -1, 1, -1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, 1, -1, -1, 1, -1, 0, 1, -1, 1, 1, 1, -1, 1, 1, 1, -1, 1, 1, 1, 1, -1, 1, -1, -1, -1, 1, -1, 1, -1, -1, -1, -1, 0, 0, 0, 0, 0] </value>
</param>
<param>
- <key>realtime_scheduling</key>
+ <key>alias</key>
<value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(0, -1)</value>
+ <value>(496, 128)</value>
</param>
<param>
<key>_rotation</key>
@@ -64,7 +32,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>sync_word1</value>
+ <value>length_tag_key</value>
</param>
<param>
<key>_enabled</key>
@@ -72,11 +40,15 @@
</param>
<param>
<key>value</key>
- <value>[0., 0., 0., 0., 0., 0., 0., 1.41421356, 0., -1.41421356, 0., 1.41421356, 0., -1.41421356, 0., -1.41421356, 0., -1.41421356, 0., 1.41421356, 0., -1.41421356, 0., 1.41421356, 0., -1.41421356, 0., -1.41421356, 0., -1.41421356, 0., -1.41421356, 0., 1.41421356, 0., -1.41421356, 0., 1.41421356, 0., 1.41421356, 0., 1.41421356, 0., -1.41421356, 0., 1.41421356, 0., 1.41421356, 0., 1.41421356, 0., -1.41421356, 0., 1.41421356, 0., 1.41421356, 0., 1.41421356, 0., 0., 0., 0., 0., 0.]</value>
+ <value>"packet_len"</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(352, 128)</value>
+ <value>(352, 0)</value>
</param>
<param>
<key>_rotation</key>
@@ -87,7 +59,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>sync_word2</value>
+ <value>samp_rate</value>
</param>
<param>
<key>_enabled</key>
@@ -95,11 +67,15 @@
</param>
<param>
<key>value</key>
- <value>[0, 0, 0, 0, 0, 0, -1, -1, -1, -1, 1, 1, -1, -1, -1, 1, -1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, 1, -1, -1, 1, -1, 0, 1, -1, 1, 1, 1, -1, 1, 1, 1, -1, 1, 1, 1, 1, -1, 1, -1, -1, -1, 1, -1, 1, -1, -1, -1, -1, 0, 0, 0, 0, 0] </value>
+ <value>100000</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(496, 128)</value>
+ <value>(255, 0)</value>
</param>
<param>
<key>_rotation</key>
@@ -110,7 +86,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>pilot_symbols</value>
+ <value>rolloff</value>
</param>
<param>
<key>_enabled</key>
@@ -118,11 +94,15 @@
</param>
<param>
<key>value</key>
- <value>((1, 1, 1, -1,),)</value>
+ <value>0</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(601, 64)</value>
+ <value>(898, -1)</value>
</param>
<param>
<key>_rotation</key>
@@ -133,7 +113,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>occupied_carriers</value>
+ <value>payload_mod</value>
</param>
<param>
<key>_enabled</key>
@@ -141,11 +121,15 @@
</param>
<param>
<key>value</key>
- <value>(range(-26, -21) + range(-20, -7) + range(-6, 0) + range(1, 7) + range(8, 21) + range(22, 27),)</value>
+ <value>digital.constellation_qpsk()</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(329, 64)</value>
+ <value>(734, 0)</value>
</param>
<param>
<key>_rotation</key>
@@ -156,7 +140,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>pilot_carriers</value>
+ <value>header_mod</value>
</param>
<param>
<key>_enabled</key>
@@ -164,11 +148,15 @@
</param>
<param>
<key>value</key>
- <value>((-21, -7, 7, 21,),)</value>
+ <value>digital.constellation_bpsk()</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(480, 64)</value>
+ <value>(567, 0)</value>
</param>
<param>
<key>_rotation</key>
@@ -179,7 +167,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>header_formatter</value>
+ <value>packet_len</value>
</param>
<param>
<key>_enabled</key>
@@ -187,11 +175,15 @@
</param>
<param>
<key>value</key>
- <value>digital.packet_header_ofdm(occupied_carriers, 1, length_tag_key)</value>
+ <value>96</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(708, 64)</value>
+ <value>(476, 0)</value>
</param>
<param>
<key>_rotation</key>
@@ -213,6 +205,10 @@
<value>64</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(181, -1)</value>
</param>
@@ -225,7 +221,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>packet_len</value>
+ <value>header_formatter</value>
</param>
<param>
<key>_enabled</key>
@@ -233,34 +229,15 @@
</param>
<param>
<key>value</key>
- <value>96</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(476, 0)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>variable</key>
- <param>
- <key>id</key>
- <value>header_mod</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
+ <value>digital.packet_header_ofdm(occupied_carriers, 1, length_tag_key)</value>
</param>
<param>
- <key>value</key>
- <value>digital.constellation_bpsk()</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(567, 0)</value>
+ <value>(708, 64)</value>
</param>
<param>
<key>_rotation</key>
@@ -271,7 +248,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>payload_mod</value>
+ <value>pilot_carriers</value>
</param>
<param>
<key>_enabled</key>
@@ -279,11 +256,15 @@
</param>
<param>
<key>value</key>
- <value>digital.constellation_qpsk()</value>
+ <value>((-21, -7, 7, 21,),)</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(734, 0)</value>
+ <value>(480, 64)</value>
</param>
<param>
<key>_rotation</key>
@@ -294,7 +275,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>rolloff</value>
+ <value>occupied_carriers</value>
</param>
<param>
<key>_enabled</key>
@@ -302,11 +283,15 @@
</param>
<param>
<key>value</key>
- <value>0</value>
+ <value>(range(-26, -21) + range(-20, -7) + range(-6, 0) + range(1, 7) + range(8, 21) + range(22, 27),)</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(898, -1)</value>
+ <value>(329, 64)</value>
</param>
<param>
<key>_rotation</key>
@@ -317,7 +302,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>samp_rate</value>
+ <value>pilot_symbols</value>
</param>
<param>
<key>_enabled</key>
@@ -325,11 +310,15 @@
</param>
<param>
<key>value</key>
- <value>100000</value>
+ <value>((1, 1, 1, -1,),)</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(255, 0)</value>
+ <value>(601, 64)</value>
</param>
<param>
<key>_rotation</key>
@@ -340,7 +329,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>length_tag_key</value>
+ <value>sync_word1</value>
</param>
<param>
<key>_enabled</key>
@@ -348,11 +337,15 @@
</param>
<param>
<key>value</key>
- <value>"packet_len"</value>
+ <value>[0., 0., 0., 0., 0., 0., 0., 1.41421356, 0., -1.41421356, 0., 1.41421356, 0., -1.41421356, 0., -1.41421356, 0., -1.41421356, 0., 1.41421356, 0., -1.41421356, 0., 1.41421356, 0., -1.41421356, 0., -1.41421356, 0., -1.41421356, 0., -1.41421356, 0., 1.41421356, 0., -1.41421356, 0., 1.41421356, 0., 1.41421356, 0., 1.41421356, 0., -1.41421356, 0., 1.41421356, 0., 1.41421356, 0., 1.41421356, 0., -1.41421356, 0., 1.41421356, 0., 1.41421356, 0., 1.41421356, 0., 0., 0., 0., 0., 0.]</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(352, 0)</value>
+ <value>(352, 128)</value>
</param>
<param>
<key>_rotation</key>
@@ -397,6 +390,10 @@
<value>import numpy</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(237, 93)</value>
</param>
@@ -420,6 +417,10 @@
<value>from gnuradio.digital.utils import tagged_streams</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(99, 93)</value>
</param>
@@ -443,6 +444,10 @@
<value>import random</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(3, 94)</value>
</param>
@@ -528,6 +533,10 @@
<value>1</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
@@ -536,6 +545,10 @@
<value>0</value>
</param>
<param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(212, 450)</value>
</param>
@@ -625,6 +638,10 @@
<value>1</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
@@ -633,6 +650,10 @@
<value>0</value>
</param>
<param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(414, 548)</value>
</param>
@@ -664,6 +685,10 @@
<value>1</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
@@ -672,6 +697,10 @@
<value>0</value>
</param>
<param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(209, 747)</value>
</param>
@@ -711,6 +740,10 @@
<value>1</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
@@ -719,6 +752,10 @@
<value>0</value>
</param>
<param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(214, 376)</value>
</param>
@@ -758,6 +795,10 @@
<value>True</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
@@ -766,6 +807,10 @@
<value>0</value>
</param>
<param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(13, 220)</value>
</param>
@@ -805,6 +850,10 @@
<value>0</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
@@ -813,6 +862,10 @@
<value>0</value>
</param>
<param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(510, 428)</value>
</param>
@@ -848,6 +901,10 @@
<value>length_tag_key</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
@@ -856,6 +913,10 @@
<value>0</value>
</param>
<param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(632, 564)</value>
</param>
@@ -887,6 +948,10 @@
<value>False</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
@@ -895,6 +960,10 @@
<value>0</value>
</param>
<param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(372, 747)</value>
</param>
@@ -930,6 +999,10 @@
<value>False</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
@@ -938,6 +1011,10 @@
<value>0</value>
</param>
<param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(710, 301)</value>
</param>
@@ -961,6 +1038,14 @@
<value>header_formatter.formatter()</value>
</param>
<param>
+ <key>len_tag_key</key>
+ <value>"packet_len"</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
@@ -969,6 +1054,10 @@
<value>0</value>
</param>
<param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(703, 242)</value>
</param>
@@ -1004,6 +1093,10 @@
<value>length_tag_key</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
@@ -1012,6 +1105,10 @@
<value>0</value>
</param>
<param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(193, 235)</value>
</param>
@@ -1108,6 +1205,10 @@
<value>length_tag_key</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
@@ -1116,6 +1217,10 @@
<value>0</value>
</param>
<param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(430, 235)</value>
</param>
@@ -1159,6 +1264,10 @@
<value>length_tag_key</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
@@ -1167,6 +1276,10 @@
<value>0</value>
</param>
<param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(192, 540)</value>
</param>
@@ -1222,78 +1335,141 @@
</param>
</block>
<block>
- <key>wxgui_scopesink2</key>
+ <key>digital_ofdm_rx</key>
<param>
<key>id</key>
- <value>wxgui_scopesink2_0</value>
+ <value>digital_ofdm_rx_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
+ <key>fft_len</key>
+ <value>fft_len</value>
</param>
<param>
- <key>title</key>
- <value>Scope Plot</value>
+ <key>cp_len</key>
+ <value>fft_len/4</value>
</param>
<param>
- <key>samp_rate</key>
- <value>samp_rate</value>
+ <key>packet_len_key</key>
+ <value>"length"</value>
</param>
<param>
- <key>v_scale</key>
- <value>0</value>
+ <key>occupied_carriers</key>
+ <value>occupied_carriers</value>
</param>
<param>
- <key>v_offset</key>
- <value>0</value>
+ <key>pilot_carriers</key>
+ <value>pilot_carriers</value>
</param>
<param>
- <key>t_scale</key>
- <value>0</value>
+ <key>pilot_symbols</key>
+ <value>pilot_symbols</value>
</param>
<param>
- <key>ac_couple</key>
- <value>False</value>
+ <key>sync_word1</key>
+ <value>sync_word1</value>
+ </param>
+ <param>
+ <key>sync_word2</key>
+ <value>sync_word2</value>
+ </param>
+ <param>
+ <key>header_mod</key>
+ <value>"BPSK"</value>
+ </param>
+ <param>
+ <key>payload_mod</key>
+ <value>"QPSK"</value>
</param>
<param>
- <key>xy_mode</key>
+ <key>scramble_bits</key>
<value>False</value>
</param>
<param>
- <key>num_inputs</key>
- <value>1</value>
+ <key>log</key>
+ <value>False</value>
</param>
<param>
- <key>win_size</key>
+ <key>alias</key>
<value></value>
</param>
<param>
- <key>grid_pos</key>
+ <key>affinity</key>
<value></value>
</param>
<param>
- <key>notebook</key>
- <value></value>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(439, 823)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>channels_channel_model</key>
+ <param>
+ <key>id</key>
+ <value>channels_channel_model_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>noise_voltage</key>
+ <value>0.0</value>
+ </param>
+ <param>
+ <key>freq_offset</key>
+ <value>0.0</value>
+ </param>
+ <param>
+ <key>epsilon</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>taps</key>
+ <value>1.0 + 1.0j</value>
+ </param>
+ <param>
+ <key>seed</key>
+ <value>0</value>
</param>
<param>
- <key>trig_mode</key>
- <value>wxgui.TRIG_MODE_AUTO</value>
+ <key>block_tags</key>
+ <value>True</value>
</param>
<param>
- <key>y_axis_label</key>
- <value>Counts</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>affinity</key>
<value></value>
</param>
<param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(992, 716)</value>
+ <value>(193, 858)</value>
</param>
<param>
<key>_rotation</key>
@@ -1301,10 +1477,10 @@
</param>
</block>
<block>
- <key>wxgui_fftsink2</key>
+ <key>blocks_tag_debug</key>
<param>
<key>id</key>
- <value>wxgui_fftsink2_0</value>
+ <value>blocks_tag_debug_0</value>
</param>
<param>
<key>_enabled</key>
@@ -1312,83 +1488,90 @@
</param>
<param>
<key>type</key>
- <value>complex</value>
+ <value>byte</value>
</param>
<param>
- <key>title</key>
- <value>FFT Plot</value>
+ <key>name</key>
+ <value>Rx'd Packets</value>
</param>
<param>
- <key>samp_rate</key>
- <value>samp_rate</value>
+ <key>filter</key>
+ <value>""</value>
</param>
<param>
- <key>baseband_freq</key>
- <value>0</value>
+ <key>num_inputs</key>
+ <value>1</value>
</param>
<param>
- <key>y_per_div</key>
- <value>10</value>
+ <key>vlen</key>
+ <value>1</value>
</param>
<param>
- <key>y_divs</key>
- <value>10</value>
+ <key>display</key>
+ <value>True</value>
</param>
<param>
- <key>ref_level</key>
- <value>0</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>ref_scale</key>
- <value>2.0</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>fft_size</key>
- <value>1024</value>
+ <key>_coordinate</key>
+ <value>(689, 889)</value>
</param>
<param>
- <key>fft_rate</key>
- <value>15</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
+ </block>
+ <block>
+ <key>blocks_throttle</key>
<param>
- <key>peak_hold</key>
- <value>False</value>
+ <key>id</key>
+ <value>blocks_throttle_0</value>
</param>
<param>
- <key>average</key>
- <value>False</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>avg_alpha</key>
- <value>0</value>
+ <key>type</key>
+ <value>complex</value>
</param>
<param>
- <key>win</key>
- <value>None</value>
+ <key>samples_per_second</key>
+ <value>samp_rate</value>
</param>
<param>
- <key>win_size</key>
- <value></value>
+ <key>vlen</key>
+ <value>1</value>
</param>
<param>
- <key>grid_pos</key>
+ <key>ignoretag</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>alias</key>
<value></value>
</param>
<param>
- <key>notebook</key>
+ <key>affinity</key>
<value></value>
</param>
<param>
- <key>freqvar</key>
- <value>None</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>affinity</key>
- <value></value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(994, 810)</value>
+ <value>(559, 747)</value>
</param>
<param>
<key>_rotation</key>
@@ -1396,125 +1579,238 @@
</param>
</block>
<block>
- <key>digital_ofdm_rx</key>
+ <key>qtgui_freq_sink_x</key>
<param>
<key>id</key>
- <value>digital_ofdm_rx_0</value>
+ <value>qtgui_freq_sink_x_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>fft_len</key>
- <value>fft_len</value>
+ <key>type</key>
+ <value>complex</value>
</param>
<param>
- <key>cp_len</key>
- <value>fft_len/4</value>
+ <key>name</key>
+ <value>FFT Plot</value>
</param>
<param>
- <key>packet_len_key</key>
- <value>"length"</value>
+ <key>fftsize</key>
+ <value>1024</value>
</param>
<param>
- <key>occupied_carriers</key>
- <value>occupied_carriers</value>
+ <key>wintype</key>
+ <value>firdes.WIN_BLACKMAN_hARRIS</value>
</param>
<param>
- <key>pilot_carriers</key>
- <value>pilot_carriers</value>
+ <key>fc</key>
+ <value>0</value>
</param>
<param>
- <key>pilot_symbols</key>
- <value>pilot_symbols</value>
+ <key>bw</key>
+ <value>samp_rate</value>
</param>
<param>
- <key>sync_word1</key>
- <value>sync_word1</value>
+ <key>autoscale</key>
+ <value>True</value>
</param>
<param>
- <key>sync_word2</key>
- <value>sync_word2</value>
+ <key>average</key>
+ <value>1.0</value>
</param>
<param>
- <key>header_mod</key>
- <value>"BPSK"</value>
+ <key>ymin</key>
+ <value>-140</value>
</param>
<param>
- <key>payload_mod</key>
- <value>"QPSK"</value>
+ <key>ymax</key>
+ <value>10</value>
</param>
<param>
- <key>scramble_bits</key>
- <value>False</value>
+ <key>nconnections</key>
+ <value>1</value>
</param>
<param>
- <key>log</key>
- <value>False</value>
+ <key>update_time</key>
+ <value>0.10</value>
</param>
<param>
- <key>affinity</key>
+ <key>gui_hint</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>label1</key>
+ <value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(439, 823)</value>
+ <key>width1</key>
+ <value>1</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>color1</key>
+ <value>"blue"</value>
</param>
- </block>
- <block>
- <key>channels_channel_model</key>
<param>
- <key>id</key>
- <value>channels_channel_model_0</value>
+ <key>alpha1</key>
+ <value>1.0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>label2</key>
+ <value></value>
</param>
<param>
- <key>noise_voltage</key>
- <value>0.0</value>
+ <key>width2</key>
+ <value>1</value>
</param>
<param>
- <key>freq_offset</key>
- <value>0.0</value>
+ <key>color2</key>
+ <value>"red"</value>
</param>
<param>
- <key>epsilon</key>
+ <key>alpha2</key>
<value>1.0</value>
</param>
<param>
- <key>taps</key>
- <value>1.0 + 1.0j</value>
+ <key>label3</key>
+ <value></value>
</param>
<param>
- <key>seed</key>
- <value>0</value>
+ <key>width3</key>
+ <value>1</value>
</param>
<param>
- <key>block_tags</key>
- <value>True</value>
+ <key>color3</key>
+ <value>"green"</value>
</param>
<param>
- <key>affinity</key>
+ <key>alpha3</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label4</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>width4</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color4</key>
+ <value>"black"</value>
+ </param>
+ <param>
+ <key>alpha4</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width5</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color5</key>
+ <value>"cyan"</value>
+ </param>
+ <param>
+ <key>alpha5</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width6</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color6</key>
+ <value>"magenta"</value>
+ </param>
+ <param>
+ <key>alpha6</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width7</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color7</key>
+ <value>"yellow"</value>
+ </param>
+ <param>
+ <key>alpha7</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label8</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color8</key>
+ <value>"dark red"</value>
+ </param>
+ <param>
+ <key>alpha8</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label9</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color9</key>
+ <value>"dark green"</value>
+ </param>
+ <param>
+ <key>alpha9</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label10</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color10</key>
+ <value>"dark blue"</value>
+ </param>
+ <param>
+ <key>alpha10</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(193, 858)</value>
+ <value>(966, 841)</value>
</param>
<param>
<key>_rotation</key>
@@ -1522,10 +1818,10 @@
</param>
</block>
<block>
- <key>blocks_tag_debug</key>
+ <key>qtgui_time_sink_x</key>
<param>
<key>id</key>
- <value>blocks_tag_debug_0</value>
+ <value>qtgui_time_sink_x_0</value>
</param>
<param>
<key>_enabled</key>
@@ -1533,31 +1829,323 @@
</param>
<param>
<key>type</key>
- <value>byte</value>
+ <value>complex</value>
</param>
<param>
<key>name</key>
- <value>Rx'd Packets</value>
+ <value>Scope Plot</value>
</param>
<param>
- <key>num_inputs</key>
+ <key>size</key>
+ <value>1024</value>
+ </param>
+ <param>
+ <key>srate</key>
+ <value>samp_rate</value>
+ </param>
+ <param>
+ <key>autoscale</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>ymin</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>ymax</key>
<value>1</value>
</param>
<param>
- <key>vlen</key>
+ <key>nconnections</key>
<value>1</value>
</param>
<param>
- <key>display</key>
+ <key>update_time</key>
+ <value>0.10</value>
+ </param>
+ <param>
+ <key>entags</key>
<value>True</value>
</param>
<param>
+ <key>gui_hint</key>
+ <value></value>
+ </param>
+ <param>
+ <key>tr_mode</key>
+ <value>qtgui.TRIG_MODE_FREE</value>
+ </param>
+ <param>
+ <key>tr_slope</key>
+ <value>qtgui.TRIG_SLOPE_POS</value>
+ </param>
+ <param>
+ <key>tr_level</key>
+ <value>0.0</value>
+ </param>
+ <param>
+ <key>tr_delay</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>tr_chan</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>tr_tag</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>label1</key>
+ <value>Scope Plot</value>
+ </param>
+ <param>
+ <key>width1</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color1</key>
+ <value>"blue"</value>
+ </param>
+ <param>
+ <key>style1</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker1</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha1</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width2</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color2</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>style2</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker2</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha2</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width3</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color3</key>
+ <value>"green"</value>
+ </param>
+ <param>
+ <key>style3</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker3</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha3</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width4</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color4</key>
+ <value>"black"</value>
+ </param>
+ <param>
+ <key>style4</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker4</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha4</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width5</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color5</key>
+ <value>"cyan"</value>
+ </param>
+ <param>
+ <key>style5</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker5</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha5</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width6</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color6</key>
+ <value>"magenta"</value>
+ </param>
+ <param>
+ <key>style6</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker6</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha6</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width7</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color7</key>
+ <value>"yellow"</value>
+ </param>
+ <param>
+ <key>style7</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker7</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha7</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label8</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color8</key>
+ <value>"dark red"</value>
+ </param>
+ <param>
+ <key>style8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker8</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha8</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label9</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color9</key>
+ <value>"dark green"</value>
+ </param>
+ <param>
+ <key>style9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker9</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha9</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label10</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color10</key>
+ <value>"blue"</value>
+ </param>
+ <param>
+ <key>style10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker10</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha10</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(689, 889)</value>
+ <value>(962, 714)</value>
</param>
<param>
<key>_rotation</key>
@@ -1565,38 +2153,62 @@
</param>
</block>
<block>
- <key>blocks_throttle</key>
+ <key>options</key>
<param>
<key>id</key>
- <value>blocks_throttle_0</value>
+ <value>tx_ofdm</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
+ <key>title</key>
+ <value>OFDM Tx</value>
</param>
<param>
- <key>samples_per_second</key>
- <value>samp_rate</value>
+ <key>author</key>
+ <value></value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>description</key>
+ <value>Example of an OFDM Transmitter</value>
</param>
<param>
- <key>affinity</key>
- <value></value>
+ <key>window_size</key>
+ <value>1280, 1024</value>
</param>
<param>
- <key>minoutbuf</key>
+ <key>generate_options</key>
+ <value>qt_gui</value>
+ </param>
+ <param>
+ <key>category</key>
+ <value>Custom</value>
+ </param>
+ <param>
+ <key>run_options</key>
+ <value>run</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>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(559, 747)</value>
+ <value>(1, 0)</value>
</param>
<param>
<key>_rotation</key>
@@ -1682,18 +2294,6 @@
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>blocks_throttle_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>blocks_throttle_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>blocks_stream_to_tagged_stream_0</source_block_id>
<sink_block_id>digital_crc32_bb_0</sink_block_id>
<source_key>0</source_key>
@@ -1747,4 +2347,16 @@
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
+ <connection>
+ <source_block_id>blocks_throttle_0</source_block_id>
+ <sink_block_id>qtgui_freq_sink_x_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>blocks_throttle_0</source_block_id>
+ <sink_block_id>qtgui_time_sink_x_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
</flow_graph>
diff --git a/gr-digital/grc/digital_constellation.xml b/gr-digital/grc/digital_constellation.xml
index 8d2a34f1fa..4ca78984a7 100644
--- a/gr-digital/grc/digital_constellation.xml
+++ b/gr-digital/grc/digital_constellation.xml
@@ -7,65 +7,57 @@
###################################################
-->
<block>
- <name>Constellation Object</name>
- <key>variable_constellation</key>
- <category>Modulators</category>
- <import>from gnuradio import digital</import>
- <var_make>self.$(id) = $(id) = digital.constellation_calcdist($const_points, $sym_map, $rot_sym, $dims).base()
+ <name>Constellation Object</name>
+ <key>variable_constellation</key>
+ <category>Modulators</category>
+ <import>from gnuradio import digital</import>
+ <var_make>self.$(id) = $(id) = digital.constellation_calcdist($const_points, $sym_map, $rot_sym, $dims).base()
#if str($soft_dec_lut).lower() == '"auto"' or str($soft_dec_lut).lower() == "'auto'"
self.$(id).gen_soft_dec_lut($precision)
#else if str($soft_dec_lut) != 'None'
self.$(id).set_soft_dec_lut($soft_dec_lut, $precision)
#end if
</var_make>
- <make></make>
- <!--<callback></callback>-->
+ <var_value>digital.constellation_calcdist($const_points, $sym_map, $rot_sym, $dims)</var_value>
+ <make></make>
+ <!--<callback></callback>-->
- <!-- Required to 'trick' GRC into using this as a proper variable-->
- <param>
- <name>Ignore Me</name>
- <key>value</key>
- <value>"ok"</value>
- <type>raw</type>
- <hide>all</hide>
- </param>
-
- <param>
- <name>Symbol Map</name>
- <key>sym_map</key>
- <value>[0, 1, 3, 2]</value>
- <type>int_vector</type>
- </param>
- <param>
- <name>Constellation Points</name>
- <key>const_points</key>
- <value>[-1-1j, -1+1j, 1+1j, 1-1j]</value>
- <type>complex_vector</type>
+ <param>
+ <name>Symbol Map</name>
+ <key>sym_map</key>
+ <value>[0, 1, 3, 2]</value>
+ <type>int_vector</type>
+ </param>
+ <param>
+ <name>Constellation Points</name>
+ <key>const_points</key>
+ <value>[-1-1j, -1+1j, 1+1j, 1-1j]</value>
+ <type>complex_vector</type>
</param>
<param>
- <name>Rotational Symmetry</name>
- <key>rot_sym</key>
- <value>4</value>
- <type>int</type>
+ <name>Rotational Symmetry</name>
+ <key>rot_sym</key>
+ <value>4</value>
+ <type>int</type>
</param>
<param>
- <name>Dimensionality</name>
- <key>dims</key>
- <value>1</value>
- <type>int</type>
+ <name>Dimensionality</name>
+ <key>dims</key>
+ <value>1</value>
+ <type>int</type>
</param>
- <param>
- <name>Soft Decisions Precision</name>
- <key>precision</key>
- <value>8</value>
- <type>int</type>
- <hide>part</hide>
- </param>
- <param>
- <name>Soft Decisions LUT</name>
- <key>soft_dec_lut</key>
- <value>None</value>
- <type>raw</type>
- <hide>#if str($soft_dec_lut) == 'None' then 'part' else 'none'#</hide>
- </param>
+ <param>
+ <name>Soft Decisions Precision</name>
+ <key>precision</key>
+ <value>8</value>
+ <type>int</type>
+ <hide>part</hide>
+ </param>
+ <param>
+ <name>Soft Decisions LUT</name>
+ <key>soft_dec_lut</key>
+ <value>None</value>
+ <type>raw</type>
+ <hide>#if str($soft_dec_lut) == 'None' then 'part' else 'none'#</hide>
+ </param>
</block>
diff --git a/gr-digital/grc/digital_constellation_receiver_cb.xml b/gr-digital/grc/digital_constellation_receiver_cb.xml
index 134e027759..06155ecae9 100644
--- a/gr-digital/grc/digital_constellation_receiver_cb.xml
+++ b/gr-digital/grc/digital_constellation_receiver_cb.xml
@@ -5,69 +5,88 @@
###################################################
-->
<block>
- <name>Constellation Receiver</name>
- <key>digital_constellation_receiver_cb</key>
- <import>from gnuradio import digital</import>
- <make>digital.constellation_receiver_cb($constellation, $loop_bw, $fmin, $fmax)</make>
- <param>
- <name>Constellation Object</name>
- <key>constellation</key>
- <type>raw</type>
- </param>
- <param>
- <name>Loop Bandwidth</name>
- <key>loop_bw</key>
- <type>real</type>
- </param>
- <param>
- <name>Minimum Freq Deviation</name>
- <key>fmin</key>
- <type>real</type>
- </param>
- <param>
- <name>Maximum Freq Deviation</name>
- <key>fmax</key>
- <type>real</type>
- </param>
- <sink>
- <name>in</name>
- <type>complex</type>
- </sink>
+ <name>Constellation Receiver</name>
+ <key>digital_constellation_receiver_cb</key>
+ <import>from gnuradio import digital</import>
+ <make>digital.constellation_receiver_cb($constellation, $loop_bw, $fmin, $fmax)</make>
+ <param>
+ <name>Constellation Object</name>
+ <key>constellation</key>
+ <type>raw</type>
+ </param>
+ <param>
+ <name>Loop Bandwidth</name>
+ <key>loop_bw</key>
+ <type>real</type>
+ </param>
+ <param>
+ <name>Minimum Freq Deviation</name>
+ <key>fmin</key>
+ <type>real</type>
+ </param>
+ <param>
+ <name>Maximum Freq Deviation</name>
+ <key>fmax</key>
+ <type>real</type>
+ </param>
- <sink>
- <name>set_constellation</name>
- <type>message</type>
- <optional>1</optional>
- </sink>
+ <param>
+ <name>Show Msg Ports</name>
+ <key>showports</key>
+ <value>True</value>
+ <type>enum</type>
+ <hide>part</hide>
+ <option>
+ <name>Yes</name>
+ <key>False</key>
+ </option>
+ <option>
+ <name>No</name>
+ <key>True</key>
+ </option>
+ </param>
- <sink>
- <name>rotate_phase</name>
- <type>message</type>
- <optional>1</optional>
- </sink>
+ <sink>
+ <name>in</name>
+ <type>complex</type>
+ </sink>
- <source>
- <name>out</name>
- <type>byte</type>
- </source>
- <source>
- <name>error</name>
- <type>float</type>
- <optional>1</optional>
- </source>
- <source>
- <name>phase</name>
- <type>float</type>
- <optional>1</optional>
- </source>
- <source>
- <name>frequency</name>
- <type>float</type>
- <optional>1</optional>
- </source>
- <source>
- <name>symbol</name>
- <type>complex</type>
- <optional>1</optional>
- </source>
+ <sink>
+ <name>set_constellation</name>
+ <type>message</type>
+ <optional>1</optional>
+ <hide>$showports</hide>
+ </sink>
+
+ <sink>
+ <name>rotate_phase</name>
+ <type>message</type>
+ <optional>1</optional>
+ <hide>$showports</hide>
+ </sink>
+
+ <source>
+ <name>out</name>
+ <type>byte</type>
+ </source>
+ <source>
+ <name>error</name>
+ <type>float</type>
+ <optional>1</optional>
+ </source>
+ <source>
+ <name>phase</name>
+ <type>float</type>
+ <optional>1</optional>
+ </source>
+ <source>
+ <name>frequency</name>
+ <type>float</type>
+ <optional>1</optional>
+ </source>
+ <source>
+ <name>symbol</name>
+ <type>complex</type>
+ <optional>1</optional>
+ </source>
</block>
diff --git a/gr-digital/grc/digital_constellation_rect.xml b/gr-digital/grc/digital_constellation_rect.xml
index e6acc14bc4..fee750ac1f 100644
--- a/gr-digital/grc/digital_constellation_rect.xml
+++ b/gr-digital/grc/digital_constellation_rect.xml
@@ -9,79 +9,71 @@
<block>
<name>Constellation Rect. Object</name>
<key>variable_constellation_rect</key>
- <category>Modulators</category>
+ <category>Modulators</category>
<import>from gnuradio import digital</import>
- <var_make>self.$(id) = $(id) = digital.constellation_rect($const_points, $sym_map, $rot_sym, $real_sect, $imag_sect, $w_real_sect, $w_imag_sect).base()
+ <var_make>self.$(id) = $(id) = digital.constellation_rect($const_points, $sym_map, $rot_sym, $real_sect, $imag_sect, $w_real_sect, $w_imag_sect).base()
#if str($softbits_lut) != 'None'
self.$(id).set_softbits($softbits_lut, $precision)
#end if
</var_make>
- <make></make>
- <!--<callback>set_softbits($softbits_lut, $precision)</callback>-->
-
- <!-- Required to 'trick' GRC into using this as a proper variable-->
- <param>
- <name>Ignore Me</name>
- <key>value</key>
- <value>"ok"</value>
- <type>raw</type>
- <hide>all</hide>
- </param>
+ <var_value>digital.constellation_rect($const_points, $sym_map, $rot_sym, $real_sect, $imag_sect, $w_real_sect, $w_imag_sect)</var_value>
+ <make></make>
+ <!--<callback>set_softbits($softbits_lut, $precision)</callback>-->
<param>
- <name>Symbol Map</name>
- <key>sym_map</key>
- <value>[0, 1, 3, 2]</value>
- <type>int_vector</type>
+ <name>Symbol Map</name>
+ <key>sym_map</key>
+ <value>[0, 1, 3, 2]</value>
+ <type>int_vector</type>
</param>
<param>
- <name>Constellation Points</name>
- <key>const_points</key>
- <value>[-1-1j, -1+1j, 1+1j, 1-1j]</value>
- <type>complex_vector</type>
+ <name>Constellation Points</name>
+ <key>const_points</key>
+ <value>[-1-1j, -1+1j, 1+1j, 1-1j]</value>
+ <type>complex_vector</type>
</param>
<param>
- <name>Rotational Symmetry</name>
- <key>rot_sym</key>
- <value>4</value>
- <type>int</type>
+ <name>Rotational Symmetry</name>
+ <key>rot_sym</key>
+ <value>4</value>
+ <type>int</type>
</param>
<param>
- <name>Real Sectors</name>
- <key>real_sect</key>
- <value>2</value>
- <type>int</type>
+ <name>Real Sectors</name>
+ <key>real_sect</key>
+ <value>2</value>
+ <type>int</type>
</param>
<param>
- <name>Imaginary Sectors</name>
- <key>imag_sect</key>
- <value>2</value>
- <type>int</type>
+ <name>Imaginary Sectors</name>
+ <key>imag_sect</key>
+ <value>2</value>
+ <type>int</type>
</param>
<param>
- <name>Width Real Sectors</name>
- <key>w_real_sect</key>
- <value>1</value>
- <type>int</type>
+ <name>Width Real Sectors</name>
+ <key>w_real_sect</key>
+ <value>1</value>
+ <type>int</type>
</param>
<param>
- <name>Width Imaginary Sectors</name>
- <key>w_imag_sect</key>
- <value>1</value>
- <type>int</type>
+ <name>Width Imaginary Sectors</name>
+ <key>w_imag_sect</key>
+ <value>1</value>
+ <type>int</type>
</param>
- <param>
- <name>Soft bits precision</name>
- <key>precision</key>
- <value>8</value>
- <type>int</type>
- <hide>part</hide>
- </param>
- <param>
- <name>Soft bits LUT</name>
- <key>softbits_lut</key>
- <value>None</value>
- <type>raw</type>
- <hide>#if str($softbits_lut) == 'None' then 'part' else 'none'#</hide>
- </param>
+ <param>
+ <name>Soft bits precision</name>
+ <key>precision</key>
+ <value>8</value>
+ <type>int</type>
+ <hide>part</hide>
+ </param>
+ <param>
+ <name>Soft bits LUT</name>
+ <key>softbits_lut</key>
+ <value>None</value>
+ <type>raw</type>
+ <hide>#if str($softbits_lut) == 'None' then 'part' else 'none'#</hide>
+ </param>
</block>
diff --git a/gr-digital/include/gnuradio/digital/CMakeLists.txt b/gr-digital/include/gnuradio/digital/CMakeLists.txt
index 0d958e867f..c39b12bed2 100644
--- a/gr-digital/include/gnuradio/digital/CMakeLists.txt
+++ b/gr-digital/include/gnuradio/digital/CMakeLists.txt
@@ -1,4 +1,4 @@
-# Copyright 2011-2013 Free Software Foundation, Inc.
+# Copyright 2011-2014 Free Software Foundation, Inc.
#
# This file is part of GNU Radio
#
@@ -18,53 +18,10 @@
# Boston, MA 02110-1301, USA.
########################################################################
-# generate helper scripts to expand templated files
-########################################################################
-include(GrPython)
-
-file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py "
-#!${PYTHON_EXECUTABLE}
-
-import sys, os, re
-sys.path.append('${GR_RUNTIME_PYTHONPATH}')
-os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
-os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
-
-if __name__ == '__main__':
- import build_utils
- root, inp = sys.argv[1:3]
- for sig in sys.argv[3:]:
- name = re.sub ('X+', sig, root)
- d = build_utils.standard_dict2(name, sig, 'digital')
- build_utils.expand_template(d, inp)
-
-")
-
-macro(expand_h root)
- #make a list of all the generated files
- unset(expanded_files_h)
- foreach(sig ${ARGN})
- string(REGEX REPLACE "X+" ${sig} name ${root})
- list(APPEND expanded_files_h ${CMAKE_CURRENT_BINARY_DIR}/${name}.h)
- endforeach(sig)
-
- #create a command to generate the files
- add_custom_command(
- OUTPUT ${expanded_files_h}
- DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.h.t
- COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
- ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
- ${root} ${root}.h.t ${ARGN}
- )
-
- #install rules for the generated h files
- list(APPEND generated_includes ${expanded_files_h})
-endmacro(expand_h)
-
-########################################################################
-# Invoke macro to generate various sources
+# Invoke macro to generate various headers
#######################################################################
-expand_h(chunks_to_symbols_XX bf bc sf sc if ic)
+include(GrMiscUtils)
+GR_EXPAND_X_H(digital chunks_to_symbols_XX bf bc sf sc if ic)
add_custom_target(digital_generated_includes DEPENDS
${generated_includes}
diff --git a/gr-digital/lib/CMakeLists.txt b/gr-digital/lib/CMakeLists.txt
index 2c03f6d686..ac9e00e787 100644
--- a/gr-digital/lib/CMakeLists.txt
+++ b/gr-digital/lib/CMakeLists.txt
@@ -1,4 +1,4 @@
-# Copyright 2011-2013 Free Software Foundation, Inc.
+# Copyright 2011-2014 Free Software Foundation, Inc.
#
# This file is part of GNU Radio
#
@@ -41,70 +41,10 @@ if(ENABLE_GR_CTRLPORT)
endif(ENABLE_GR_CTRLPORT)
########################################################################
-# generate helper scripts to expand templated files
-########################################################################
-include(GrPython)
-
-file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py "
-#!${PYTHON_EXECUTABLE}
-
-import sys, os, re
-sys.path.append('${GR_RUNTIME_PYTHONPATH}')
-os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
-os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
-
-if __name__ == '__main__':
- import build_utils
- root, inp = sys.argv[1:3]
- for sig in sys.argv[3:]:
- name = re.sub ('X+', sig, root)
- d = build_utils.standard_impl_dict2(name, sig, 'digital')
- build_utils.expand_template(d, inp)
-")
-
-macro(expand_cc root)
- #make a list of all the generated files
- unset(expanded_files_cc)
- unset(expanded_files_h)
- foreach(sig ${ARGN})
- string(REGEX REPLACE "X+" ${sig} name ${root})
- list(APPEND expanded_files_cc ${CMAKE_CURRENT_BINARY_DIR}/${name}.cc)
- list(APPEND expanded_files_h ${CMAKE_CURRENT_BINARY_DIR}/${name}.h)
- endforeach(sig)
-
- #create a command to generate the source files
- add_custom_command(
- OUTPUT ${expanded_files_cc}
- DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.cc.t
- COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
- ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
- ${root} ${root}.cc.t ${ARGN}
- )
-
- #create a command to generate the header file
- add_custom_command(
- OUTPUT ${expanded_files_h}
- DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.h.t
- COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
- ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
- ${root} ${root}.h.t ${ARGN}
- )
-
- #make source files depends on headers to force generation
- set_source_files_properties(${expanded_files_cc}
- PROPERTIES OBJECT_DEPENDS "${expanded_files_h}"
- )
-
- #install rules for the generated cc files
- list(APPEND generated_sources ${expanded_files_cc})
- list(APPEND generated_headers ${expanded_files_h})
-endmacro(expand_cc)
-
-
-########################################################################
# Invoke macro to generate various sources
########################################################################
-expand_cc(chunks_to_symbols_XX_impl bf bc sf sc if ic)
+include(GrMiscUtils)
+GR_EXPAND_X_CC_H(digital chunks_to_symbols_XX_impl bf bc sf sc if ic)
########################################################################
# Setup library
@@ -201,7 +141,6 @@ list(APPEND digital_libs
${LOG4CPP_LIBRARIES}
)
-
add_library(gnuradio-digital SHARED ${digital_sources})
target_link_libraries(gnuradio-digital ${digital_libs})
GR_LIBRARY_FOO(gnuradio-digital RUNTIME_COMPONENT "digital_runtime" DEVEL_COMPONENT "digital_devel")
@@ -217,6 +156,18 @@ add_dependencies(
)
if(ENABLE_STATIC_LIBS)
+ if(ENABLE_GR_CTRLPORT)
+ # Remove GR_CTRLPORT set this target's definitions.
+ # Makes sure we don't try to use ControlPort stuff in source files
+ # since Ice will not work with static libs.
+ GET_DIRECTORY_PROPERTY(STATIC_DEFS COMPILE_DEFINITIONS)
+ list(REMOVE_ITEM STATIC_DEFS "GR_CTRLPORT")
+ SET_PROPERTY(DIRECTORY PROPERTY COMPILE_DEFINITIONS "${STATIC_DEFS}")
+
+ # readd it to the target since we removed it from the directory-wide list.
+ SET_PROPERTY(TARGET gnuradio-digital APPEND PROPERTY COMPILE_DEFINITIONS "GR_CTRLPORT")
+ endif(ENABLE_GR_CTRLPORT)
+
add_library(gnuradio-digital_static STATIC ${digital_sources})
add_dependencies(gnuradio-digital_static
diff --git a/gr-digital/lib/binary_slicer_fb_impl.cc b/gr-digital/lib/binary_slicer_fb_impl.cc
index 565f751ec6..6852661ead 100644
--- a/gr-digital/lib/binary_slicer_fb_impl.cc
+++ b/gr-digital/lib/binary_slicer_fb_impl.cc
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2006,2010-2012 Free Software Foundation, Inc.
+ * Copyright 2006,2010-2012,2014 Free Software Foundation, Inc.
*
* This file is part of GNU Radio
*
@@ -27,6 +27,7 @@
#include "binary_slicer_fb_impl.h"
#include <gnuradio/io_signature.h>
#include <gnuradio/math.h>
+#include <volk/volk.h>
namespace gr {
namespace digital {
@@ -38,9 +39,12 @@ namespace gr {
binary_slicer_fb_impl::binary_slicer_fb_impl()
: sync_block("binary_slicer_fb",
- io_signature::make(1, 1, sizeof(float)),
- io_signature::make(1, 1, sizeof(unsigned char)))
+ io_signature::make(1, 1, sizeof(float)),
+ io_signature::make(1, 1, sizeof(int8_t)))
{
+ const int alignment_multiple =
+ volk_get_alignment() / sizeof(int8_t);
+ set_alignment(std::max(1,alignment_multiple));
}
binary_slicer_fb_impl::~binary_slicer_fb_impl()
@@ -53,11 +57,9 @@ namespace gr {
gr_vector_void_star &output_items)
{
const float *in = (const float *)input_items[0];
- unsigned char *out = (unsigned char *)output_items[0];
+ int8_t *out = (int8_t *)output_items[0];
- for(int i = 0; i < noutput_items; i++) {
- out[i] = gr::binary_slicer(in[i]);
- }
+ volk_32f_binary_slicer_8i(out, in, noutput_items);
return noutput_items;
}
diff --git a/gr-dtv/CMakeLists.txt b/gr-dtv/CMakeLists.txt
new file mode 100644
index 0000000000..bccfff7886
--- /dev/null
+++ b/gr-dtv/CMakeLists.txt
@@ -0,0 +1,108 @@
+# Copyright 2014 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+########################################################################
+# Setup dependencies
+########################################################################
+include(GrBoost)
+
+########################################################################
+# Register component
+########################################################################
+include(GrComponent)
+
+GR_REGISTER_COMPONENT("gr-dtv" ENABLE_GR_DTV
+ Boost_FOUND
+ ENABLE_GNURADIO_RUNTIME
+)
+
+GR_SET_GLOBAL(GR_DTV_INCLUDE_DIRS
+ ${CMAKE_CURRENT_SOURCE_DIR}/lib
+ ${CMAKE_CURRENT_SOURCE_DIR}/include
+ ${CMAKE_CURRENT_BINARY_DIR}/lib
+)
+
+########################################################################
+# Begin conditional configuration
+########################################################################
+if(ENABLE_GR_DTV)
+
+########################################################################
+# Setup CPack components
+########################################################################
+include(GrPackage)
+CPACK_SET(CPACK_COMPONENT_GROUP_DTV_DESCRIPTION "GNU Radio DTV Blocks")
+
+CPACK_COMPONENT("dtv_runtime"
+ GROUP "DTV"
+ DISPLAY_NAME "Runtime"
+ DESCRIPTION "Runtime"
+ DEPENDS "runtime_runtime"
+)
+
+CPACK_COMPONENT("dtv_devel"
+ GROUP "DTV"
+ DISPLAY_NAME "Development"
+ DESCRIPTION "C++ headers, package config, import libraries"
+ DEPENDS "runtime_devel"
+)
+
+CPACK_COMPONENT("dtv_python"
+ GROUP "DTV"
+ DISPLAY_NAME "Python"
+ DESCRIPTION "Python modules for runtime; GRC xml files"
+ DEPENDS "runtime_python;dtv_runtime"
+)
+
+CPACK_COMPONENT("dtv_swig"
+ GROUP "DTV"
+ DISPLAY_NAME "SWIG"
+ DESCRIPTION "SWIG development .i files"
+ DEPENDS "runtime_swig;dtv_python;dtv_devel"
+)
+
+########################################################################
+# Add subdirectories
+########################################################################
+add_subdirectory(include/gnuradio/dtv)
+add_subdirectory(lib)
+if(ENABLE_PYTHON)
+ add_subdirectory(swig)
+ add_subdirectory(python/dtv)
+ add_subdirectory(grc)
+ add_subdirectory(examples)
+ add_subdirectory(apps)
+endif(ENABLE_PYTHON)
+add_subdirectory(doc)
+
+########################################################################
+# Create Pkg Config File
+########################################################################
+configure_file(
+ ${CMAKE_CURRENT_SOURCE_DIR}/gnuradio-dtv.pc.in
+ ${CMAKE_CURRENT_BINARY_DIR}/gnuradio-dtv.pc
+@ONLY)
+
+install(
+ FILES ${CMAKE_CURRENT_BINARY_DIR}/gnuradio-dtv.pc
+ DESTINATION ${GR_LIBRARY_DIR}/pkgconfig
+ COMPONENT "dtv_devel"
+)
+
+endif(ENABLE_GR_DTV)
diff --git a/gr-dtv/apps/CMakeLists.txt b/gr-dtv/apps/CMakeLists.txt
new file mode 100644
index 0000000000..f328234e3d
--- /dev/null
+++ b/gr-dtv/apps/CMakeLists.txt
@@ -0,0 +1,29 @@
+# Copyright 2014 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+include(GrPython)
+
+########################################################################
+# Install some dtv apps
+########################################################################
+GR_PYTHON_INSTALL(
+ PROGRAMS
+ DESTINATION ${GR_RUNTIME_DIR}
+ COMPONENT "dtv_python"
+)
diff --git a/gr-dtv/doc/CMakeLists.txt b/gr-dtv/doc/CMakeLists.txt
new file mode 100644
index 0000000000..b21afa8abf
--- /dev/null
+++ b/gr-dtv/doc/CMakeLists.txt
@@ -0,0 +1,23 @@
+# Copyright 2014 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+install(
+ FILES README.dtv
+ DESTINATION ${GR_PKG_DOC_DIR}
+)
diff --git a/gr-dtv/doc/README.dtv b/gr-dtv/doc/README.dtv
new file mode 100644
index 0000000000..23639f0269
--- /dev/null
+++ b/gr-dtv/doc/README.dtv
@@ -0,0 +1,13 @@
+This is the GNU Radio DTV package. It contains the blocks that
+implement various digital television standards.
+
+To use the DTV blocks, the Python namespaces is in gnuradio.dtv, which
+would be normally imported as:
+
+ from gnuradio import dtv
+
+See the Doxygen documentation for details about the blocks available
+in this package. A quick listing of the details can be found in Python
+after importing by using:
+
+ help(dtv)
diff --git a/gr-dtv/examples/CMakeLists.txt b/gr-dtv/examples/CMakeLists.txt
new file mode 100644
index 0000000000..82b663d924
--- /dev/null
+++ b/gr-dtv/examples/CMakeLists.txt
@@ -0,0 +1,26 @@
+# Copyright 2014 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+include(GrPython)
+
+GR_PYTHON_INSTALL(
+ PROGRAMS
+ DESTINATION ${GR_PKG_DTV_EXAMPLES_DIR}
+ COMPONENT "dtv_python"
+)
diff --git a/gr-dtv/examples/file_atsc_rx.grc b/gr-dtv/examples/file_atsc_rx.grc
new file mode 100644
index 0000000000..c75f45d3fc
--- /dev/null
+++ b/gr-dtv/examples/file_atsc_rx.grc
@@ -0,0 +1,485 @@
+<?xml version='1.0' encoding='ASCII'?>
+<flow_graph>
+ <timestamp>Tue Jul 22 14:34:09 2014</timestamp>
+ <block>
+ <key>variable</key>
+ <param>
+ <key>id</key>
+ <value>atsc_sym_rate</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>4.5e6/286*684</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(94, 115)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable</key>
+ <param>
+ <key>id</key>
+ <value>sample_rate</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>6.25e6</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(278, 200)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable</key>
+ <param>
+ <key>id</key>
+ <value>duration</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>30</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(381, 198)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable</key>
+ <param>
+ <key>id</key>
+ <value>gain</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>18</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(205, 200)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable</key>
+ <param>
+ <key>id</key>
+ <value>freq</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>605e6</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(117, 201)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable</key>
+ <param>
+ <key>id</key>
+ <value>antenna</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>"TX/RX"</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(27, 201)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable</key>
+ <param>
+ <key>id</key>
+ <value>sps</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>1.1</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(20, 115)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable</key>
+ <param>
+ <key>id</key>
+ <value>oversampled_rate</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>atsc_sym_rate*sps</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(207, 115)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>options</key>
+ <param>
+ <key>id</key>
+ <value>file_atsc_rx</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>title</key>
+ <value>Receive ATSC from UHD</value>
+ </param>
+ <param>
+ <key>author</key>
+ <value></value>
+ </param>
+ <param>
+ <key>description</key>
+ <value></value>
+ </param>
+ <param>
+ <key>window_size</key>
+ <value>4000, 4000</value>
+ </param>
+ <param>
+ <key>generate_options</key>
+ <value>no_gui</value>
+ </param>
+ <param>
+ <key>category</key>
+ <value>Custom</value>
+ </param>
+ <param>
+ <key>run_options</key>
+ <value>run</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>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(11, 10)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>blocks_interleaved_short_to_complex</key>
+ <param>
+ <key>id</key>
+ <value>blocks_interleaved_short_to_complex_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>vector_input</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>swap</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(206, 337)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>dtv_atsc_rx</key>
+ <param>
+ <key>id</key>
+ <value>dtv_atsc_rx_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>rate</key>
+ <value>sample_rate</value>
+ </param>
+ <param>
+ <key>sps</key>
+ <value>1.5</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(398, 329)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>blocks_file_sink</key>
+ <param>
+ <key>id</key>
+ <value>blocks_file_sink_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>file</key>
+ <value>mpeg.ts</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>byte</value>
+ </param>
+ <param>
+ <key>vlen</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>unbuffered</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>append</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(605, 321)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>blocks_file_source</key>
+ <param>
+ <key>id</key>
+ <value>blocks_file_source_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>file</key>
+ <value>atsc_iq.sc16</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>short</value>
+ </param>
+ <param>
+ <key>repeat</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>vlen</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(33, 329)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <connection>
+ <source_block_id>blocks_file_source_0</source_block_id>
+ <sink_block_id>blocks_interleaved_short_to_complex_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>blocks_interleaved_short_to_complex_0</source_block_id>
+ <sink_block_id>dtv_atsc_rx_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>dtv_atsc_rx_0</source_block_id>
+ <sink_block_id>blocks_file_sink_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+</flow_graph>
diff --git a/gr-dtv/examples/uhd_atsc_capture.grc b/gr-dtv/examples/uhd_atsc_capture.grc
new file mode 100644
index 0000000000..eb341bfe52
--- /dev/null
+++ b/gr-dtv/examples/uhd_atsc_capture.grc
@@ -0,0 +1,1076 @@
+<?xml version='1.0' encoding='ASCII'?>
+<flow_graph>
+ <timestamp>Tue Jul 22 14:30:13 2014</timestamp>
+ <block>
+ <key>variable</key>
+ <param>
+ <key>id</key>
+ <value>atsc_sym_rate</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>4.5e6/286*684</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(94, 115)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable</key>
+ <param>
+ <key>id</key>
+ <value>sample_rate</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>6.25e6</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(278, 200)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable</key>
+ <param>
+ <key>id</key>
+ <value>duration</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>30</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(381, 198)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable</key>
+ <param>
+ <key>id</key>
+ <value>gain</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>18</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(205, 200)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable</key>
+ <param>
+ <key>id</key>
+ <value>freq</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>605e6</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(117, 201)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable</key>
+ <param>
+ <key>id</key>
+ <value>antenna</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>"TX/RX"</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(27, 201)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable</key>
+ <param>
+ <key>id</key>
+ <value>sps</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>1.1</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(20, 115)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable</key>
+ <param>
+ <key>id</key>
+ <value>oversampled_rate</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>atsc_sym_rate*sps</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(207, 115)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>uhd_usrp_source</key>
+ <param>
+ <key>id</key>
+ <value>u</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>sc16</value>
+ </param>
+ <param>
+ <key>otw</key>
+ <value></value>
+ </param>
+ <param>
+ <key>stream_args</key>
+ <value></value>
+ </param>
+ <param>
+ <key>stream_chans</key>
+ <value>[]</value>
+ </param>
+ <param>
+ <key>dev_addr</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>dev_args</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>sync</key>
+ <value></value>
+ </param>
+ <param>
+ <key>clock_rate</key>
+ <value>0.0</value>
+ </param>
+ <param>
+ <key>num_mboards</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>clock_source0</key>
+ <value></value>
+ </param>
+ <param>
+ <key>time_source0</key>
+ <value></value>
+ </param>
+ <param>
+ <key>sd_spec0</key>
+ <value></value>
+ </param>
+ <param>
+ <key>clock_source1</key>
+ <value></value>
+ </param>
+ <param>
+ <key>time_source1</key>
+ <value></value>
+ </param>
+ <param>
+ <key>sd_spec1</key>
+ <value></value>
+ </param>
+ <param>
+ <key>clock_source2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>time_source2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>sd_spec2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>clock_source3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>time_source3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>sd_spec3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>clock_source4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>time_source4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>sd_spec4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>clock_source5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>time_source5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>sd_spec5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>clock_source6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>time_source6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>sd_spec6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>clock_source7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>time_source7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>sd_spec7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>nchan</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>samp_rate</key>
+ <value>sample_rate</value>
+ </param>
+ <param>
+ <key>center_freq0</key>
+ <value>freq</value>
+ </param>
+ <param>
+ <key>gain0</key>
+ <value>gain</value>
+ </param>
+ <param>
+ <key>ant0</key>
+ <value>antenna</value>
+ </param>
+ <param>
+ <key>bw0</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq1</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain1</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant1</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw1</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq2</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain2</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw2</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq3</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain3</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw3</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq4</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain4</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw4</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq5</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain5</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw5</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq6</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain6</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw6</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq7</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain7</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw7</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq8</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain8</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant8</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw8</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq9</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain9</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant9</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw9</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq10</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain10</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant10</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw10</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq11</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain11</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant11</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw11</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq12</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain12</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant12</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw12</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq13</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain13</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant13</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw13</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq14</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain14</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant14</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw14</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq15</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain15</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant15</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw15</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq16</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain16</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant16</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw16</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq17</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain17</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant17</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw17</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq18</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain18</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant18</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw18</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq19</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain19</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant19</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw19</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq20</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain20</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant20</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw20</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq21</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain21</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant21</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw21</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq22</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain22</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant22</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw22</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq23</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain23</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant23</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw23</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq24</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain24</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant24</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw24</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq25</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain25</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant25</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw25</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq26</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain26</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant26</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw26</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq27</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain27</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant27</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw27</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq28</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain28</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant28</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw28</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq29</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain29</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant29</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw29</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq30</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain30</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant30</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw30</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq31</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain31</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant31</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw31</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(43, 319)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>blocks_head</key>
+ <param>
+ <key>id</key>
+ <value>blocks_head_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>short</value>
+ </param>
+ <param>
+ <key>num_items</key>
+ <value>int(sample_rate*duration)</value>
+ </param>
+ <param>
+ <key>vlen</key>
+ <value>2</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(294, 335)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>blocks_file_sink</key>
+ <param>
+ <key>id</key>
+ <value>blocks_file_sink_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>file</key>
+ <value>atsc_iq.sc16</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>short</value>
+ </param>
+ <param>
+ <key>vlen</key>
+ <value>2</value>
+ </param>
+ <param>
+ <key>unbuffered</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>append</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(464, 319)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>options</key>
+ <param>
+ <key>id</key>
+ <value>uhd_atsc_capture</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>title</key>
+ <value>Receive ATSC from UHD</value>
+ </param>
+ <param>
+ <key>author</key>
+ <value></value>
+ </param>
+ <param>
+ <key>description</key>
+ <value></value>
+ </param>
+ <param>
+ <key>window_size</key>
+ <value>4000, 4000</value>
+ </param>
+ <param>
+ <key>generate_options</key>
+ <value>no_gui</value>
+ </param>
+ <param>
+ <key>category</key>
+ <value>Custom</value>
+ </param>
+ <param>
+ <key>run_options</key>
+ <value>run</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>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(11, 9)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <connection>
+ <source_block_id>u</source_block_id>
+ <sink_block_id>blocks_head_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>blocks_head_0</source_block_id>
+ <sink_block_id>blocks_file_sink_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+</flow_graph>
diff --git a/gr-dtv/examples/uhd_rx_atsc.grc b/gr-dtv/examples/uhd_rx_atsc.grc
new file mode 100644
index 0000000000..4ff6c90716
--- /dev/null
+++ b/gr-dtv/examples/uhd_rx_atsc.grc
@@ -0,0 +1,1976 @@
+<?xml version='1.0' encoding='ASCII'?>
+<flow_graph>
+ <timestamp>Tue Jul 22 12:06:50 2014</timestamp>
+ <block>
+ <key>options</key>
+ <param>
+ <key>id</key>
+ <value>uhd_rx_atsc</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>title</key>
+ <value>Receive ATSC from UHD</value>
+ </param>
+ <param>
+ <key>author</key>
+ <value></value>
+ </param>
+ <param>
+ <key>description</key>
+ <value></value>
+ </param>
+ <param>
+ <key>window_size</key>
+ <value>4000, 4000</value>
+ </param>
+ <param>
+ <key>generate_options</key>
+ <value>qt_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>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(10, 10)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable</key>
+ <param>
+ <key>id</key>
+ <value>oversampled_rate</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>atsc_sym_rate*sps</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(207, 115)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable</key>
+ <param>
+ <key>id</key>
+ <value>atsc_sym_rate</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>4.5e6/286*684</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(94, 115)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable</key>
+ <param>
+ <key>id</key>
+ <value>sps</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>1.1</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(20, 115)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>qtgui_tab_widget</key>
+ <param>
+ <key>id</key>
+ <value>displays</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>num_tabs</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>label0</key>
+ <value>RX Spectrum</value>
+ </param>
+ <param>
+ <key>label1</key>
+ <value>Baseband</value>
+ </param>
+ <param>
+ <key>label2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>label3</key>
+ <value>Tab 3</value>
+ </param>
+ <param>
+ <key>label4</key>
+ <value>Tab 4</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value>0,0,1,4</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(191, 28)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable_qtgui_chooser</key>
+ <param>
+ <key>id</key>
+ <value>antenna</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>label</key>
+ <value>Antenna</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>string</value>
+ </param>
+ <param>
+ <key>num_opts</key>
+ <value>2</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>TX/RX</value>
+ </param>
+ <param>
+ <key>options</key>
+ <value>[0, 1, 2]</value>
+ </param>
+ <param>
+ <key>labels</key>
+ <value>[]</value>
+ </param>
+ <param>
+ <key>option0</key>
+ <value>TX/RX</value>
+ </param>
+ <param>
+ <key>label0</key>
+ <value>TX/RX</value>
+ </param>
+ <param>
+ <key>option1</key>
+ <value>RX2</value>
+ </param>
+ <param>
+ <key>label1</key>
+ <value>RX2</value>
+ </param>
+ <param>
+ <key>option2</key>
+ <value>2</value>
+ </param>
+ <param>
+ <key>label2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>option3</key>
+ <value>3</value>
+ </param>
+ <param>
+ <key>label3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>option4</key>
+ <value>4</value>
+ </param>
+ <param>
+ <key>label4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>widget</key>
+ <value>radio_buttons</value>
+ </param>
+ <param>
+ <key>orient</key>
+ <value>Qt.QVBoxLayout</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value>1,0,1,1</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(342, 20)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable_qtgui_entry</key>
+ <param>
+ <key>id</key>
+ <value>sample_rate</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>label</key>
+ <value>Sample Rate</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>real</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>6.25e6</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value>1,2,1,1</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(486, 104)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable_qtgui_range</key>
+ <param>
+ <key>id</key>
+ <value>gain</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>label</key>
+ <value>Gain</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>18</value>
+ </param>
+ <param>
+ <key>start</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>stop</key>
+ <value>31</value>
+ </param>
+ <param>
+ <key>step</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>widget</key>
+ <value>counter_slider</value>
+ </param>
+ <param>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
+ </param>
+ <param>
+ <key>min_len</key>
+ <value>200</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value>1,3,1,1</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(621, 20)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>blocks_file_sink</key>
+ <param>
+ <key>id</key>
+ <value>blocks_file_sink_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>file</key>
+ <value>mpeg.ts</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>byte</value>
+ </param>
+ <param>
+ <key>vlen</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>unbuffered</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>append</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(1055, 497)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable_qtgui_entry</key>
+ <param>
+ <key>id</key>
+ <value>freq</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>label</key>
+ <value>Frequency</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>real</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>605e6</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value>1,1,1,1</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(487, 18)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>analog_agc_xx</key>
+ <param>
+ <key>id</key>
+ <value>agc</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>float</value>
+ </param>
+ <param>
+ <key>rate</key>
+ <value>1e-5</value>
+ </param>
+ <param>
+ <key>reference</key>
+ <value>4.0</value>
+ </param>
+ <param>
+ <key>gain</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>max_gain</key>
+ <value>65536</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(860, 318)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>dtv_atsc_fpll</key>
+ <param>
+ <key>id</key>
+ <value>fpll</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>rate</key>
+ <value>oversampled_rate</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(500, 342)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>dc_blocker_xx</key>
+ <param>
+ <key>id</key>
+ <value>dc_blocker_xx_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>ff</value>
+ </param>
+ <param>
+ <key>length</key>
+ <value>4096</value>
+ </param>
+ <param>
+ <key>long_form</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(703, 334)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>dtv_atsc_equalizer</key>
+ <param>
+ <key>id</key>
+ <value>dtv_atsc_equalizer_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(684, 433)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>dtv_atsc_fs_checker</key>
+ <param>
+ <key>id</key>
+ <value>dtv_atsc_fs_checker_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(465, 433)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>dtv_atsc_sync</key>
+ <param>
+ <key>id</key>
+ <value>dtv_atsc_sync_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>rate</key>
+ <value>oversampled_rate</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(272, 429)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>dtv_atsc_viterbi_decoder</key>
+ <param>
+ <key>id</key>
+ <value>dtv_atsc_viterbi_decoder_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(859, 433)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>dtv_atsc_depad</key>
+ <param>
+ <key>id</key>
+ <value>dtv_atsc_depad_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(876, 517)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>dtv_atsc_derandomizer</key>
+ <param>
+ <key>id</key>
+ <value>dtv_atsc_derandomizer_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(694, 517)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>dtv_atsc_rs_decoder</key>
+ <param>
+ <key>id</key>
+ <value>dtv_atsc_rs_decoder_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(456, 517)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>dtv_atsc_deinterleaver</key>
+ <param>
+ <key>id</key>
+ <value>dtv_atsc_deinterleaver_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(276, 517)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>dtv_atsc_rx_filter</key>
+ <param>
+ <key>id</key>
+ <value>rx_filter</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>rate</key>
+ <value>sample_rate</value>
+ </param>
+ <param>
+ <key>sps</key>
+ <value>sps</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(286, 334)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>qtgui_freq_sink_x</key>
+ <param>
+ <key>id</key>
+ <value>usrp_freq_sink</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>complex</value>
+ </param>
+ <param>
+ <key>name</key>
+ <value>"RX Spectrum"</value>
+ </param>
+ <param>
+ <key>fftsize</key>
+ <value>4096</value>
+ </param>
+ <param>
+ <key>wintype</key>
+ <value>firdes.WIN_BLACKMAN_hARRIS</value>
+ </param>
+ <param>
+ <key>fc</key>
+ <value>freq</value>
+ </param>
+ <param>
+ <key>bw</key>
+ <value>sample_rate</value>
+ </param>
+ <param>
+ <key>grid</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>autoscale</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>average</key>
+ <value>0.2</value>
+ </param>
+ <param>
+ <key>ymin</key>
+ <value>-140</value>
+ </param>
+ <param>
+ <key>ymax</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>nconnections</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>update_time</key>
+ <value>0.10</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value>displays@0</value>
+ </param>
+ <param>
+ <key>showports</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>label1</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width1</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color1</key>
+ <value>"blue"</value>
+ </param>
+ <param>
+ <key>alpha1</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width2</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color2</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>alpha2</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width3</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color3</key>
+ <value>"green"</value>
+ </param>
+ <param>
+ <key>alpha3</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width4</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color4</key>
+ <value>"black"</value>
+ </param>
+ <param>
+ <key>alpha4</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width5</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color5</key>
+ <value>"cyan"</value>
+ </param>
+ <param>
+ <key>alpha5</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width6</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color6</key>
+ <value>"magenta"</value>
+ </param>
+ <param>
+ <key>alpha6</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width7</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color7</key>
+ <value>"yellow"</value>
+ </param>
+ <param>
+ <key>alpha7</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label8</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color8</key>
+ <value>"dark red"</value>
+ </param>
+ <param>
+ <key>alpha8</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label9</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color9</key>
+ <value>"dark green"</value>
+ </param>
+ <param>
+ <key>alpha9</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label10</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color10</key>
+ <value>"dark blue"</value>
+ </param>
+ <param>
+ <key>alpha10</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(35, 216)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>180</value>
+ </param>
+ </block>
+ <block>
+ <key>uhd_usrp_source</key>
+ <param>
+ <key>id</key>
+ <value>u</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>fc32</value>
+ </param>
+ <param>
+ <key>otw</key>
+ <value></value>
+ </param>
+ <param>
+ <key>stream_args</key>
+ <value></value>
+ </param>
+ <param>
+ <key>stream_chans</key>
+ <value>[]</value>
+ </param>
+ <param>
+ <key>dev_addr</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>dev_args</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>sync</key>
+ <value></value>
+ </param>
+ <param>
+ <key>clock_rate</key>
+ <value>0.0</value>
+ </param>
+ <param>
+ <key>num_mboards</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>clock_source0</key>
+ <value></value>
+ </param>
+ <param>
+ <key>time_source0</key>
+ <value></value>
+ </param>
+ <param>
+ <key>sd_spec0</key>
+ <value></value>
+ </param>
+ <param>
+ <key>clock_source1</key>
+ <value></value>
+ </param>
+ <param>
+ <key>time_source1</key>
+ <value></value>
+ </param>
+ <param>
+ <key>sd_spec1</key>
+ <value></value>
+ </param>
+ <param>
+ <key>clock_source2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>time_source2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>sd_spec2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>clock_source3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>time_source3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>sd_spec3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>clock_source4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>time_source4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>sd_spec4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>clock_source5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>time_source5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>sd_spec5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>clock_source6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>time_source6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>sd_spec6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>clock_source7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>time_source7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>sd_spec7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>nchan</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>samp_rate</key>
+ <value>sample_rate</value>
+ </param>
+ <param>
+ <key>center_freq0</key>
+ <value>freq</value>
+ </param>
+ <param>
+ <key>gain0</key>
+ <value>gain</value>
+ </param>
+ <param>
+ <key>ant0</key>
+ <value>antenna</value>
+ </param>
+ <param>
+ <key>bw0</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq1</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain1</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant1</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw1</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq2</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain2</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw2</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq3</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain3</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw3</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq4</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain4</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw4</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq5</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain5</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw5</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq6</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain6</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw6</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq7</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain7</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw7</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq8</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain8</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant8</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw8</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq9</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain9</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant9</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw9</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq10</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain10</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant10</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw10</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq11</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain11</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant11</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw11</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq12</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain12</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant12</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw12</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq13</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain13</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant13</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw13</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq14</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain14</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant14</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw14</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq15</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain15</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant15</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw15</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq16</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain16</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant16</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw16</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq17</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain17</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant17</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw17</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq18</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain18</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant18</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw18</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq19</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain19</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant19</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw19</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq20</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain20</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant20</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw20</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq21</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain21</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant21</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw21</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq22</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain22</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant22</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw22</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq23</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain23</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant23</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw23</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq24</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain24</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant24</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw24</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq25</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain25</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant25</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw25</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq26</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain26</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant26</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw26</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq27</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain27</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant27</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw27</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq28</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain28</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant28</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw28</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq29</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain29</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant29</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw29</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq30</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain30</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant30</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw30</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq31</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain31</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant31</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw31</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(42, 318)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <connection>
+ <source_block_id>dtv_atsc_viterbi_decoder_0</source_block_id>
+ <sink_block_id>dtv_atsc_deinterleaver_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>u</source_block_id>
+ <sink_block_id>rx_filter</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>rx_filter</source_block_id>
+ <sink_block_id>fpll</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>fpll</source_block_id>
+ <sink_block_id>dc_blocker_xx_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>dc_blocker_xx_0</source_block_id>
+ <sink_block_id>agc</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>dtv_atsc_equalizer_0</source_block_id>
+ <sink_block_id>dtv_atsc_viterbi_decoder_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>dtv_atsc_fs_checker_0</source_block_id>
+ <sink_block_id>dtv_atsc_equalizer_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>dtv_atsc_sync_0</source_block_id>
+ <sink_block_id>dtv_atsc_fs_checker_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>agc</source_block_id>
+ <sink_block_id>dtv_atsc_sync_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>dtv_atsc_depad_0</source_block_id>
+ <sink_block_id>blocks_file_sink_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>dtv_atsc_derandomizer_0</source_block_id>
+ <sink_block_id>dtv_atsc_depad_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>dtv_atsc_rs_decoder_0</source_block_id>
+ <sink_block_id>dtv_atsc_derandomizer_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>dtv_atsc_deinterleaver_0</source_block_id>
+ <sink_block_id>dtv_atsc_rs_decoder_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>u</source_block_id>
+ <sink_block_id>usrp_freq_sink</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+</flow_graph>
diff --git a/gr-dtv/gnuradio-dtv.pc.in b/gr-dtv/gnuradio-dtv.pc.in
new file mode 100644
index 0000000000..bac3b06745
--- /dev/null
+++ b/gr-dtv/gnuradio-dtv.pc.in
@@ -0,0 +1,11 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: gnuradio-dtv
+Description: GNU Radio's digital TV signal processing blocks
+Requires: gnuradio-runtime gnuradio-filter gnuradio-analog
+Version: @LIBVER@
+Libs: -L${libdir} -lgnuradio-dtv
+Cflags: -I${includedir}
diff --git a/gr-dtv/grc/CMakeLists.txt b/gr-dtv/grc/CMakeLists.txt
new file mode 100644
index 0000000000..bd8d67a4ce
--- /dev/null
+++ b/gr-dtv/grc/CMakeLists.txt
@@ -0,0 +1,35 @@
+# Copyright 2014 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+install(FILES
+ dtv_atsc_deinterleaver.xml
+ dtv_atsc_depad.xml
+ dtv_atsc_derandomizer.xml
+ dtv_atsc_equalizer.xml
+ dtv_atsc_fpll.xml
+ dtv_atsc_fs_checker.xml
+ dtv_atsc_rs_decoder.xml
+ dtv_atsc_rx.xml
+ dtv_atsc_rx_filter.xml
+ dtv_atsc_sync.xml
+ dtv_atsc_viterbi_decoder.xml
+ dtv_block_tree.xml
+ DESTINATION ${GRC_BLOCKS_DIR}
+ COMPONENT "dtv_python"
+)
diff --git a/gr-dtv/grc/dtv_atsc_deinterleaver.xml b/gr-dtv/grc/dtv_atsc_deinterleaver.xml
new file mode 100644
index 0000000000..051ea77554
--- /dev/null
+++ b/gr-dtv/grc/dtv_atsc_deinterleaver.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0"?>
+<!--
+###################################################
+## ATSC Deinterleaver
+###################################################
+ -->
+<block>
+ <name>ATSC Deinterleaver</name>
+ <key>dtv_atsc_deinterleaver</key>
+ <import>from gnuradio import dtv</import>
+ <make>dtv.atsc_deinterleaver()</make>
+
+ <sink>
+ <name>in</name>
+ <type>byte</type>
+ <vlen>256</vlen>
+ </sink>
+
+ <source>
+ <name>out</name>
+ <type>byte</type>
+ <vlen>256</vlen>
+ </source>
+
+</block>
diff --git a/gr-dtv/grc/dtv_atsc_depad.xml b/gr-dtv/grc/dtv_atsc_depad.xml
new file mode 100644
index 0000000000..95a1380914
--- /dev/null
+++ b/gr-dtv/grc/dtv_atsc_depad.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0"?>
+<!--
+###################################################
+## ATSC Depad
+###################################################
+ -->
+<block>
+ <name>ATSC Depad</name>
+ <key>dtv_atsc_depad</key>
+ <import>from gnuradio import dtv</import>
+ <make>dtv.atsc_depad()</make>
+
+ <sink>
+ <name>in</name>
+ <type>byte</type>
+ <vlen>256</vlen>
+ </sink>
+
+ <source>
+ <name>out</name>
+ <type>byte</type>
+ </source>
+
+</block>
diff --git a/gr-dtv/grc/dtv_atsc_derandomizer.xml b/gr-dtv/grc/dtv_atsc_derandomizer.xml
new file mode 100644
index 0000000000..5473f47e8c
--- /dev/null
+++ b/gr-dtv/grc/dtv_atsc_derandomizer.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0"?>
+<!--
+###################################################
+## ATSC Derandomizer
+###################################################
+ -->
+<block>
+ <name>ATSC Derandomizer</name>
+ <key>dtv_atsc_derandomizer</key>
+ <import>from gnuradio import dtv</import>
+ <make>dtv.atsc_derandomizer()</make>
+
+ <sink>
+ <name>in</name>
+ <type>byte</type>
+ <vlen>256</vlen>
+ </sink>
+
+ <source>
+ <name>out</name>
+ <type>byte</type>
+ <vlen>256</vlen>
+ </source>
+
+</block>
diff --git a/gr-dtv/grc/dtv_atsc_equalizer.xml b/gr-dtv/grc/dtv_atsc_equalizer.xml
new file mode 100644
index 0000000000..7faf65fd22
--- /dev/null
+++ b/gr-dtv/grc/dtv_atsc_equalizer.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0"?>
+<!--
+###################################################
+## ATSC Equalizer
+###################################################
+ -->
+<block>
+ <name>ATSC Equalizer</name>
+ <key>dtv_atsc_equalizer</key>
+ <import>from gnuradio import dtv</import>
+ <make>dtv.atsc_equalizer()</make>
+
+ <sink>
+ <name>in</name>
+ <type>byte</type>
+ <vlen>4096</vlen>
+ </sink>
+
+ <source>
+ <name>out</name>
+ <type>byte</type>
+ <vlen>4096</vlen>
+ </source>
+
+</block>
diff --git a/gr-dtv/grc/dtv_atsc_fpll.xml b/gr-dtv/grc/dtv_atsc_fpll.xml
new file mode 100644
index 0000000000..00d28ce8b6
--- /dev/null
+++ b/gr-dtv/grc/dtv_atsc_fpll.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0"?>
+<!--
+###################################################
+## ATSC Receiver PLL
+###################################################
+ -->
+<block>
+ <name>ATSC Receiver FPLL</name>
+ <key>dtv_atsc_fpll</key>
+ <import>from gnuradio import dtv</import>
+ <make>dtv.atsc_fpll($rate)</make>
+
+ <param>
+ <name>Sample Rate</name>
+ <key>rate</key>
+ <type>float</type>
+ </param>
+
+ <sink>
+ <name>in</name>
+ <type>complex</type>
+ </sink>
+
+ <source>
+ <name>out</name>
+ <type>float</type>
+ </source>
+
+</block>
diff --git a/gr-dtv/grc/dtv_atsc_fs_checker.xml b/gr-dtv/grc/dtv_atsc_fs_checker.xml
new file mode 100644
index 0000000000..4c733d53b9
--- /dev/null
+++ b/gr-dtv/grc/dtv_atsc_fs_checker.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0"?>
+<!--
+###################################################
+## ATSC Field Sync Checker
+###################################################
+ -->
+<block>
+ <name>ATSC Field Sync Checker</name>
+ <key>dtv_atsc_fs_checker</key>
+ <import>from gnuradio import dtv</import>
+ <make>dtv.atsc_fs_checker()</make>
+
+ <sink>
+ <name>in</name>
+ <type>byte</type>
+ <vlen>4096</vlen>
+ </sink>
+
+ <source>
+ <name>out</name>
+ <type>byte</type>
+ <vlen>4096</vlen>
+ </source>
+
+</block>
diff --git a/gr-dtv/grc/dtv_atsc_rs_decoder.xml b/gr-dtv/grc/dtv_atsc_rs_decoder.xml
new file mode 100644
index 0000000000..18a3053f00
--- /dev/null
+++ b/gr-dtv/grc/dtv_atsc_rs_decoder.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0"?>
+<!--
+###################################################
+## ATSC Reed–Solomon Decoder
+###################################################
+ -->
+<block>
+ <name>ATSC Reed–Solomon Decoder</name>
+ <key>dtv_atsc_rs_decoder</key>
+ <import>from gnuradio import dtv</import>
+ <make>dtv.atsc_rs_decoder()</make>
+
+ <sink>
+ <name>in</name>
+ <type>byte</type>
+ <vlen>256</vlen>
+ </sink>
+
+ <source>
+ <name>out</name>
+ <type>byte</type>
+ <vlen>256</vlen>
+ </source>
+
+</block>
diff --git a/gr-dtv/grc/dtv_atsc_rx.xml b/gr-dtv/grc/dtv_atsc_rx.xml
new file mode 100644
index 0000000000..900769609f
--- /dev/null
+++ b/gr-dtv/grc/dtv_atsc_rx.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0"?>
+<!--
+###################################################
+## ATSC Receive Pipeline
+###################################################
+ -->
+<block>
+ <name>ATSC Receive Pipeline</name>
+ <key>dtv_atsc_rx</key>
+ <import>from gnuradio import dtv</import>
+ <make>dtv.atsc_rx($rate,$sps)</make>
+
+ <param>
+ <name>Input Rate</name>
+ <key>rate</key>
+ <type>float</type>
+ </param>
+
+ <param>
+ <name>Oversampling Ratio</name>
+ <key>sps</key>
+ <type>float</type>
+ </param>
+
+ <sink>
+ <name>in</name>
+ <type>complex</type>
+ </sink>
+
+ <source>
+ <name>out</name>
+ <type>byte</type>
+ </source>
+
+</block>
diff --git a/gr-dtv/grc/dtv_atsc_rx_filter.xml b/gr-dtv/grc/dtv_atsc_rx_filter.xml
new file mode 100644
index 0000000000..bc8bf0914a
--- /dev/null
+++ b/gr-dtv/grc/dtv_atsc_rx_filter.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0"?>
+<!--
+###################################################
+## ATSC RX Filter
+###################################################
+ -->
+<block>
+ <name>ATSC RX Filter</name>
+ <key>dtv_atsc_rx_filter</key>
+ <import>from gnuradio import dtv</import>
+ <make>dtv.atsc_rx_filter($rate,$sps)</make>
+
+ <param>
+ <name>Input Rate</name>
+ <key>rate</key>
+ <type>float</type>
+ </param>
+
+ <param>
+ <name>Oversampling Ratio</name>
+ <key>sps</key>
+ <type>float</type>
+ </param>
+
+ <sink>
+ <name>in</name>
+ <type>complex</type>
+ </sink>
+
+ <source>
+ <name>out</name>
+ <type>complex</type>
+ </source>
+
+</block>
diff --git a/gr-dtv/grc/dtv_atsc_sync.xml b/gr-dtv/grc/dtv_atsc_sync.xml
new file mode 100644
index 0000000000..a9528f84a0
--- /dev/null
+++ b/gr-dtv/grc/dtv_atsc_sync.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0"?>
+<!--
+###################################################
+## ATSC Receiver Sync
+###################################################
+ -->
+<block>
+ <name>ATSC Receiver SYNC</name>
+ <key>dtv_atsc_sync</key>
+ <import>from gnuradio import dtv</import>
+ <make>dtv.atsc_sync($rate)</make>
+
+ <param>
+ <name>Sample Rate</name>
+ <key>rate</key>
+ <type>float</type>
+ </param>
+
+ <sink>
+ <name>in</name>
+ <type>float</type>
+ </sink>
+
+ <source>
+ <name>out</name>
+ <type>byte</type>
+ <vlen>4096</vlen>
+ </source>
+
+</block>
diff --git a/gr-dtv/grc/dtv_atsc_viterbi_decoder.xml b/gr-dtv/grc/dtv_atsc_viterbi_decoder.xml
new file mode 100644
index 0000000000..23d58d08af
--- /dev/null
+++ b/gr-dtv/grc/dtv_atsc_viterbi_decoder.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0"?>
+<!--
+###################################################
+## ATSC Equalizer
+###################################################
+ -->
+<block>
+ <name>ATSC Viterbi Decoder</name>
+ <key>dtv_atsc_viterbi_decoder</key>
+ <import>from gnuradio import dtv</import>
+ <make>dtv.atsc_viterbi_decoder()</make>
+
+ <sink>
+ <name>in</name>
+ <type>byte</type>
+ <vlen>4096</vlen>
+ </sink>
+
+ <source>
+ <name>out</name>
+ <type>byte</type>
+ <vlen>256</vlen>
+ </source>
+
+</block>
diff --git a/gr-dtv/grc/dtv_block_tree.xml b/gr-dtv/grc/dtv_block_tree.xml
new file mode 100644
index 0000000000..8b84c361b4
--- /dev/null
+++ b/gr-dtv/grc/dtv_block_tree.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0"?>
+
+<!--
+ Copyright 2014 Free Software Foundation, Inc.
+
+ This file is part of GNU Radio
+
+ GNU Radio is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ GNU Radio is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with GNU Radio; see the file COPYING. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street,
+ Boston, MA 02110-1301, USA.
+-->
+
+<!--
+###################################################
+##Block Tree for GR DTV blocks.
+###################################################
+ -->
+<cat>
+ <name></name> <!-- Blank for Root Name -->
+ <cat>
+ <name>Digital Television</name>
+ <cat>
+ <name>ATSC</name>
+ <block>dtv_atsc_deinterleaver</block>
+ <block>dtv_atsc_depad</block>
+ <block>dtv_atsc_derandomizer</block>
+ <block>dtv_atsc_equalizer</block>
+ <block>dtv_atsc_fpll</block>
+ <block>dtv_atsc_fs_checker</block>
+ <block>dtv_atsc_rs_decoder</block>
+ <block>dtv_atsc_rx</block>
+ <block>dtv_atsc_rx_filter</block>
+ <block>dtv_atsc_sync</block>
+ <block>dtv_atsc_viterbi_decoder</block>
+ </cat>
+ </cat>
+</cat>
diff --git a/gr-dtv/include/gnuradio/dtv/CMakeLists.txt b/gr-dtv/include/gnuradio/dtv/CMakeLists.txt
new file mode 100644
index 0000000000..d9a01421a3
--- /dev/null
+++ b/gr-dtv/include/gnuradio/dtv/CMakeLists.txt
@@ -0,0 +1,37 @@
+# Copyright 2014 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+########################################################################
+# Install header files
+########################################################################
+install(FILES
+ api.h
+ atsc_consts.h
+ atsc_deinterleaver.h
+ atsc_depad.h
+ atsc_derandomizer.h
+ atsc_equalizer.h
+ atsc_fpll.h
+ atsc_fs_checker.h
+ atsc_rs_decoder.h
+ atsc_sync.h
+ atsc_viterbi_decoder.h
+ DESTINATION ${GR_INCLUDE_DIR}/gnuradio/dtv
+ COMPONENT "dtv_devel"
+)
diff --git a/gr-dtv/include/gnuradio/dtv/api.h b/gr-dtv/include/gnuradio/dtv/api.h
new file mode 100644
index 0000000000..14fd46981a
--- /dev/null
+++ b/gr-dtv/include/gnuradio/dtv/api.h
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2014 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef INCLUDED_DTV_API_H
+#define INCLUDED_DTV_API_H
+
+#include <gnuradio/attributes.h>
+
+#ifdef gnuradio_dtv_EXPORTS
+# define DTV_API __GR_ATTR_EXPORT
+#else
+# define DTV_API __GR_ATTR_IMPORT
+#endif
+
+#endif /* INCLUDED_DTV_API_H */
diff --git a/gr-dtv/include/gnuradio/dtv/atsc_consts.h b/gr-dtv/include/gnuradio/dtv/atsc_consts.h
new file mode 100644
index 0000000000..12b594788d
--- /dev/null
+++ b/gr-dtv/include/gnuradio/dtv/atsc_consts.h
@@ -0,0 +1,47 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2014 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef INCLUDED_DTV_ATSC_CONSTS_H
+#define INCLUDED_DTV_ATSC_CONSTS_H
+
+#include <gnuradio/dtv/api.h>
+
+namespace gr {
+ namespace dtv {
+
+ // These will go into an mpeg_consts.h once other mod/demods are done
+ static const int ATSC_MPEG_DATA_LENGTH = 187;
+ static const int ATSC_MPEG_PKT_LENGTH = 188; // sync + data
+ static const int ATSC_MPEG_RS_ENCODED_LENGTH = 207;
+ static const int MPEG_SYNC_BYTE = 0x47;
+ static const int MPEG_TRANSPORT_ERROR_BIT = 0x80; // top bit of byte after SYNC
+
+ // ATSC specific constants
+ static const double ATSC_SYMBOL_RATE = 4.5e6/286*684; // ~10.76 MHz
+ static const double ATSC_DATA_SEGMENT_RATE = ATSC_SYMBOL_RATE/832; // ~12.935 kHz
+ static const int ATSC_DATA_SEGMENT_LENGTH = 832; // includes 4 sync symbols at beginning
+ static const int ATSC_DSEGS_PER_FIELD = 312; // regular data segs / field
+
+ } /* namespace dtv */
+} /* namespace gr */
+
+#endif /* INCLUDED_DTV_ATSC_CONSTS_H */
diff --git a/gr-dtv/include/gnuradio/dtv/atsc_deinterleaver.h b/gr-dtv/include/gnuradio/dtv/atsc_deinterleaver.h
new file mode 100644
index 0000000000..658aa47a96
--- /dev/null
+++ b/gr-dtv/include/gnuradio/dtv/atsc_deinterleaver.h
@@ -0,0 +1,54 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2014 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef INCLUDED_DTV_ATSC_DEINTERLEAVER_H
+#define INCLUDED_DTV_ATSC_DEINTERLEAVER_H
+
+#include <gnuradio/dtv/api.h>
+#include <gnuradio/sync_block.h>
+
+namespace gr {
+ namespace dtv {
+
+ /*!
+ * \brief ATSC deinterleave RS encoded ATSC data ( atsc_mpeg_packet_rs_encoded --> atsc_mpeg_packet_rs_encoded)
+ * \ingroup dtv_atsc
+ *
+ * input: atsc_mpeg_packet_rs_encoded; output: atsc_mpeg_packet_rs_encoded
+ */
+ class DTV_API atsc_deinterleaver : virtual public gr::sync_block
+ {
+ public:
+
+ // gr::dtv::atsc_deinterleaver::sptr
+ typedef boost::shared_ptr<atsc_deinterleaver> sptr;
+
+ /*!
+ * \brief Make a new instance of gr::dtv::atsc_deinterleaver.
+ */
+ static sptr make();
+ };
+
+ } /* namespace dtv */
+} /* namespace gr */
+
+#endif /* INCLUDED_DTV_ATSC_DEINTERLEAVER_H */
diff --git a/gr-dtv/include/gnuradio/dtv/atsc_depad.h b/gr-dtv/include/gnuradio/dtv/atsc_depad.h
new file mode 100644
index 0000000000..4dfe21a6f9
--- /dev/null
+++ b/gr-dtv/include/gnuradio/dtv/atsc_depad.h
@@ -0,0 +1,54 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2014 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef INCLUDED_DTV_ATSC_DEPAD_H
+#define INCLUDED_DTV_ATSC_DEPAD_H
+
+#include <gnuradio/dtv/api.h>
+#include <gnuradio/sync_interpolator.h>
+
+namespace gr {
+ namespace dtv {
+
+ /*!
+ * \brief ATSC depad mpeg ts packets from 256 byte atsc_mpeg_packet to 188 byte char
+ * \ingroup dtv_atsc
+ *
+ * input: atsc_mpeg_packet; output: unsigned char
+ */
+ class DTV_API atsc_depad : virtual public gr::sync_interpolator
+ {
+ public:
+
+ // gr::dtv::atsc_depad::sptr
+ typedef boost::shared_ptr<atsc_depad> sptr;
+
+ /*!
+ * \brief Make a new instance of gr::dtv::atsc_depad.
+ */
+ static sptr make();
+ };
+
+ } /* namespace dtv */
+} /* namespace gr */
+
+#endif /* INCLUDED_DTV_ATSC_DEPAD_H */
diff --git a/gr-dtv/include/gnuradio/dtv/atsc_derandomizer.h b/gr-dtv/include/gnuradio/dtv/atsc_derandomizer.h
new file mode 100644
index 0000000000..d941cae004
--- /dev/null
+++ b/gr-dtv/include/gnuradio/dtv/atsc_derandomizer.h
@@ -0,0 +1,54 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2014 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef INCLUDED_DTV_ATSC_DERANDOMIZER_H
+#define INCLUDED_DTV_ATSC_DERANDOMIZER_H
+
+#include <gnuradio/dtv/api.h>
+#include <gnuradio/sync_block.h>
+
+namespace gr {
+ namespace dtv {
+
+ /*!
+ * \brief ATSC "dewhiten" incoming mpeg transport stream packets
+ * \ingroup dtv_atsc
+ *
+ * input: atsc_mpeg_packet_no_sync; output: atsc_mpeg_packet;
+ */
+ class DTV_API atsc_derandomizer : virtual public gr::sync_block
+ {
+ public:
+
+ // gr::dtv::atsc_derandomizer::sptr
+ typedef boost::shared_ptr<atsc_derandomizer> sptr;
+
+ /*!
+ * \brief Make a new instance of gr::dtv::atsc_derandomizer.
+ */
+ static sptr make();
+ };
+
+ } /* namespace dtv */
+} /* namespace gr */
+
+#endif /* INCLUDED_DTV_ATSC_DERANDOMIZER_H */
diff --git a/gr-dtv/include/gnuradio/dtv/atsc_equalizer.h b/gr-dtv/include/gnuradio/dtv/atsc_equalizer.h
new file mode 100644
index 0000000000..3fe101ac25
--- /dev/null
+++ b/gr-dtv/include/gnuradio/dtv/atsc_equalizer.h
@@ -0,0 +1,53 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2014 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef INCLUDED_DTV_ATSC_EQUALIZER_H
+#define INCLUDED_DTV_ATSC_EQUALIZER_H
+
+#include <gnuradio/dtv/api.h>
+#include <gnuradio/block.h>
+
+namespace gr {
+ namespace dtv {
+
+ /*!
+ * \brief ATSC Receiver Equalizer
+ *
+ * \ingroup dtv_atsc
+ */
+ class DTV_API atsc_equalizer : virtual public gr::block
+ {
+ public:
+
+ // gr::dtv::atsc_equalizer::sptr
+ typedef boost::shared_ptr<atsc_equalizer> sptr;
+
+ /*!
+ * \brief Make a new instance of gr::dtv::atsc_equalizer.
+ */
+ static sptr make();
+ };
+
+ } /* namespace dtv */
+} /* namespace gr */
+
+#endif /* INCLUDED_DTV_ATSC_EQUALIZER_H */
diff --git a/gr-dtv/include/gnuradio/dtv/atsc_fpll.h b/gr-dtv/include/gnuradio/dtv/atsc_fpll.h
new file mode 100644
index 0000000000..6dc30413da
--- /dev/null
+++ b/gr-dtv/include/gnuradio/dtv/atsc_fpll.h
@@ -0,0 +1,70 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2014 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef INCLUDED_DTV_ATSC_FPLL_H
+#define INCLUDED_DTV_ATSC_FPLL_H
+
+#include <gnuradio/dtv/api.h>
+#include <gnuradio/sync_block.h>
+
+namespace gr {
+ namespace dtv {
+
+ /*!
+ * \brief ATSC Receiver FPLL
+ *
+ * This block is takes in a complex I/Q baseband stream from the
+ * receive filter and outputs the 8-level symbol stream.
+ *
+ * It does this by first locally generating a pilot tone and
+ * complex mixing with the input signal. This results in the
+ * pilot tone shifting to DC and places the signal in the upper
+ * sideband.
+ *
+ * As no information is encoded in the phase of the waveform, the
+ * Q channel is then discarded, producing a real signal with the
+ * lower sideband restored.
+ *
+ * The 8-level symbol stream still has a DC offset, and still
+ * requires symbol timing recovery.
+ *
+ * \ingroup dtv_atsc
+ */
+ class DTV_API atsc_fpll : virtual public gr::sync_block
+ {
+ public:
+
+ // gr::dtv::atsc_fpll::sptr
+ typedef boost::shared_ptr<atsc_fpll> sptr;
+
+ /*!
+ * \brief Make a new instance of gr::dtv::atsc_fpll.
+ *
+ * param rate Sample rate of incoming stream
+ */
+ static sptr make(float rate);
+ };
+
+ } /* namespace dtv */
+} /* namespace gr */
+
+#endif /* INCLUDED_DTV_ATSC_FPLL_H */
diff --git a/gr-dtv/include/gnuradio/dtv/atsc_fs_checker.h b/gr-dtv/include/gnuradio/dtv/atsc_fs_checker.h
new file mode 100644
index 0000000000..d5a4a7d083
--- /dev/null
+++ b/gr-dtv/include/gnuradio/dtv/atsc_fs_checker.h
@@ -0,0 +1,53 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2014 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef INCLUDED_DTV_ATSC_FS_CHECKER_H
+#define INCLUDED_DTV_ATSC_FS_CHECKER_H
+
+#include <gnuradio/dtv/api.h>
+#include <gnuradio/block.h>
+
+namespace gr {
+ namespace dtv {
+
+ /*!
+ * \brief ATSC Receiver FS_CHECKER
+ *
+ * \ingroup dtv_atsc
+ */
+ class DTV_API atsc_fs_checker : virtual public gr::block
+ {
+ public:
+
+ // gr::dtv::atsc_fs_checker::sptr
+ typedef boost::shared_ptr<atsc_fs_checker> sptr;
+
+ /*!
+ * \brief Make a new instance of gr::dtv::atsc_fs_checker.
+ */
+ static sptr make();
+ };
+
+ } /* namespace dtv */
+} /* namespace gr */
+
+#endif /* INCLUDED_DTV_ATSC_FS_CHECKER_H */
diff --git a/gr-dtv/include/gnuradio/dtv/atsc_rs_decoder.h b/gr-dtv/include/gnuradio/dtv/atsc_rs_decoder.h
new file mode 100644
index 0000000000..92eb263e5d
--- /dev/null
+++ b/gr-dtv/include/gnuradio/dtv/atsc_rs_decoder.h
@@ -0,0 +1,53 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2014 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef INCLUDED_DTV_ATSC_RS_DECODER_H
+#define INCLUDED_DTV_ATSC_RS_DECODER_H
+
+#include <gnuradio/dtv/api.h>
+#include <gnuradio/sync_block.h>
+
+namespace gr {
+ namespace dtv {
+
+ /*!
+ * \brief ATSC Receiver Reed-Solomon Decoder
+ *
+ * \ingroup dtv_atsc
+ */
+ class DTV_API atsc_rs_decoder : virtual public gr::sync_block
+ {
+ public:
+
+ // gr::dtv::atsc_rs_decoder::sptr
+ typedef boost::shared_ptr<atsc_rs_decoder> sptr;
+
+ /*!
+ * \brief Make a new instance of gr::dtv::atsc_rs_decoder.
+ */
+ static sptr make();
+ };
+
+ } /* namespace dtv */
+} /* namespace gr */
+
+#endif /* INCLUDED_DTV_ATSC_RS_DECODER_H */
diff --git a/gr-dtv/include/gnuradio/dtv/atsc_sync.h b/gr-dtv/include/gnuradio/dtv/atsc_sync.h
new file mode 100644
index 0000000000..8a2aded60d
--- /dev/null
+++ b/gr-dtv/include/gnuradio/dtv/atsc_sync.h
@@ -0,0 +1,55 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2014 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef INCLUDED_DTV_ATSC_SYNC_H
+#define INCLUDED_DTV_ATSC_SYNC_H
+
+#include <gnuradio/dtv/api.h>
+#include <gnuradio/sync_block.h>
+
+namespace gr {
+ namespace dtv {
+
+ /*!
+ * \brief ATSC Receiver SYNC
+ *
+ * \ingroup dtv_atsc
+ */
+ class DTV_API atsc_sync : virtual public gr::block
+ {
+ public:
+
+ // gr::dtv::atsc_sync::sptr
+ typedef boost::shared_ptr<atsc_sync> sptr;
+
+ /*!
+ * \brief Make a new instance of gr::dtv::atsc_sync.
+ *
+ * param rate Sample rate of incoming stream
+ */
+ static sptr make(float rate);
+ };
+
+ } /* namespace dtv */
+} /* namespace gr */
+
+#endif /* INCLUDED_DTV_ATSC_SYNC_H */
diff --git a/gr-dtv/include/gnuradio/dtv/atsc_viterbi_decoder.h b/gr-dtv/include/gnuradio/dtv/atsc_viterbi_decoder.h
new file mode 100644
index 0000000000..a4c18c39da
--- /dev/null
+++ b/gr-dtv/include/gnuradio/dtv/atsc_viterbi_decoder.h
@@ -0,0 +1,53 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2014 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef INCLUDED_DTV_ATSC_VITERBI_DECODER_H
+#define INCLUDED_DTV_ATSC_VITERBI_DECODER_H
+
+#include <gnuradio/dtv/api.h>
+#include <gnuradio/sync_block.h>
+
+namespace gr {
+ namespace dtv {
+
+ /*!
+ * \brief ATSC Viterbi Decoder
+ *
+ * \ingroup dtv_atsc
+ */
+ class DTV_API atsc_viterbi_decoder : virtual public gr::sync_block
+ {
+ public:
+
+ // gr::dtv::atsc_viterbi_decoder::sptr
+ typedef boost::shared_ptr<atsc_viterbi_decoder> sptr;
+
+ /*!
+ * \brief Make a new instance of gr::dtv::atsc_viterbi_decoder.
+ */
+ static sptr make();
+ };
+
+ } /* namespace dtv */
+} /* namespace gr */
+
+#endif /* INCLUDED_DTV_ATSC_VITERBI_DECODER_H */
diff --git a/gr-dtv/lib/CMakeLists.txt b/gr-dtv/lib/CMakeLists.txt
new file mode 100644
index 0000000000..9227f24c96
--- /dev/null
+++ b/gr-dtv/lib/CMakeLists.txt
@@ -0,0 +1,104 @@
+# Copyright 2014 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+########################################################################
+# Setup the include and linker paths
+########################################################################
+include_directories(
+ ${CMAKE_CURRENT_SOURCE_DIR}
+ ${GR_DTV_INCLUDE_DIRS}
+ ${GR_FILTER_INCLUDE_DIRS}
+ ${GR_ANALOG_INCLUDE_DIRS}
+ ${GR_FEC_INCLUDE_DIRS}
+ ${GNURADIO_RUNTIME_INCLUDE_DIRS}
+ ${Boost_INCLUDE_DIRS}
+)
+
+link_directories(${Boost_LIBRARY_DIRS})
+
+if(ENABLE_GR_CTRLPORT)
+ ADD_DEFINITIONS(-DGR_CTRLPORT)
+ include_directories(${ICE_INCLUDE_DIR})
+endif(ENABLE_GR_CTRLPORT)
+
+########################################################################
+# Generate viterbi mux source
+# http://www.vtk.org/Wiki/CMake_Cross_Compiling#Using_executables_in_the_build_created_during_the_build
+########################################################################
+if(NOT CMAKE_CROSSCOMPILING)
+ add_executable(atsc_viterbi_gen atsc/atsc_viterbi_gen.cc)
+ export(TARGETS atsc_viterbi_gen APPEND FILE ${EXPORT_FILE})
+endif()
+
+set(atsc_viterbi_mux_cc ${CMAKE_CURRENT_BINARY_DIR}/atsc_viterbi_mux.cc)
+
+add_custom_command(
+ OUTPUT ${atsc_viterbi_mux_cc}
+ DEPENDS atsc_viterbi_gen
+ COMMAND atsc_viterbi_gen -o ${atsc_viterbi_mux_cc}
+)
+
+########################################################################
+# Setup library
+########################################################################
+list(APPEND dtv_sources
+ ${atsc_viterbi_mux_cc}
+ atsc/atsc_deinterleaver_impl.cc
+ atsc/atsc_depad_impl.cc
+ atsc/atsc_derandomizer_impl.cc
+ atsc/atsc_equalizer_impl.cc
+ atsc/atsc_fpll_impl.cc
+ atsc/atsc_fs_checker_impl.cc
+ atsc/atsc_randomize.cc
+ atsc/atsc_rs_decoder_impl.cc
+ atsc/atsc_sync_impl.cc
+ atsc/atsc_fake_single_viterbi.cc
+ atsc/atsc_single_viterbi.cc
+ atsc/atsc_viterbi_decoder_impl.cc
+)
+
+if(ENABLE_GR_CTRLPORT)
+list(APPEND dtv_sources
+)
+endif(ENABLE_GR_CTRLPORT)
+
+list(APPEND dtv_libs
+ gnuradio-runtime
+ gnuradio-analog
+ gnuradio-filter
+ gnuradio-fec
+)
+
+#Add Windows DLL resource file if using MSVC
+if(MSVC)
+ include(${CMAKE_SOURCE_DIR}/cmake/Modules/GrVersion.cmake)
+
+ configure_file(
+ ${CMAKE_CURRENT_SOURCE_DIR}/gnuradio-dtv.rc.in
+ ${CMAKE_CURRENT_BINARY_DIR}/gnuradio-dtv.rc
+ @ONLY)
+
+ list(APPEND dtv_sources
+ ${CMAKE_CURRENT_BINARY_DIR}/gnuradio-dtv.rc
+ )
+endif(MSVC)
+
+add_library(gnuradio-dtv SHARED ${dtv_sources})
+target_link_libraries(gnuradio-dtv ${dtv_libs})
+GR_LIBRARY_FOO(gnuradio-dtv RUNTIME_COMPONENT "dtv_runtime" DEVEL_COMPONENT "dtv_devel")
diff --git a/gr-dtv/lib/atsc/atsc_deinterleaver_impl.cc b/gr-dtv/lib/atsc/atsc_deinterleaver_impl.cc
new file mode 100644
index 0000000000..7b2001aacb
--- /dev/null
+++ b/gr-dtv/lib/atsc/atsc_deinterleaver_impl.cc
@@ -0,0 +1,97 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2014 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "atsc_deinterleaver_impl.h"
+#include "gnuradio/dtv/atsc_consts.h"
+#include <gnuradio/io_signature.h>
+
+namespace gr {
+ namespace dtv {
+
+ atsc_deinterleaver::sptr
+ atsc_deinterleaver::make()
+ {
+ return gnuradio::get_initial_sptr
+ (new atsc_deinterleaver_impl());
+ }
+
+ atsc_deinterleaver_impl::atsc_deinterleaver_impl()
+ : gr::sync_block("atsc_deinterleaver",
+ io_signature::make(1, 1, sizeof(atsc_mpeg_packet_rs_encoded)),
+ io_signature::make(1, 1, sizeof(atsc_mpeg_packet_rs_encoded))),
+ alignment_fifo (156)
+ {
+ m_fifo.resize(52);
+
+ for (int i = 0; i < 52; i++)
+ m_fifo[52 - 1 - i] = new interleaver_fifo<unsigned char>(i * 4);
+
+ sync();
+ }
+
+ atsc_deinterleaver_impl::~atsc_deinterleaver_impl()
+ {
+ for (int i = 0; i < 52; i++)
+ delete m_fifo[i];
+ }
+
+ void atsc_deinterleaver_impl::reset()
+ {
+ sync();
+ for (int i = 0; i < 52; i++)
+ m_fifo[i]->reset();
+ }
+
+ int
+ atsc_deinterleaver_impl::work(int noutput_items,
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items)
+ {
+ const atsc_mpeg_packet_rs_encoded *in = (const atsc_mpeg_packet_rs_encoded *)input_items[0];
+ atsc_mpeg_packet_rs_encoded *out = (atsc_mpeg_packet_rs_encoded *)output_items[0];
+
+ for (int i = 0; i < noutput_items; i++) {
+ assert (in[i].pli.regular_seg_p());
+ plinfo::sanity_check(in[i].pli);
+
+ // reset commutator if required using INPUT pipeline info
+ if (in[i].pli.first_regular_seg_p())
+ sync();
+
+ // remap OUTPUT pipeline info to reflect 52 data segment end-to-end delay
+ plinfo::delay (out[i].pli, in[i].pli, 52);
+
+ // now do the actual deinterleaving
+ for (unsigned int j = 0; j < sizeof(in[i].data); j++) {
+ out[i].data[j] = alignment_fifo.stuff(transform (in[i].data[j]));
+ }
+ }
+
+ return noutput_items;
+ }
+
+ } /* namespace dtv */
+} /* namespace gr */
diff --git a/gr-dtv/lib/atsc/atsc_deinterleaver_impl.h b/gr-dtv/lib/atsc/atsc_deinterleaver_impl.h
new file mode 100644
index 0000000000..75eb7e877d
--- /dev/null
+++ b/gr-dtv/lib/atsc/atsc_deinterleaver_impl.h
@@ -0,0 +1,75 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2014 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef INCLUDED_DTV_ATSC_DEINTERLEAVER_IMPL_H
+#define INCLUDED_DTV_ATSC_DEINTERLEAVER_IMPL_H
+
+#include <gnuradio/dtv/atsc_deinterleaver.h>
+#include "atsc_types.h"
+#include "interleaver_fifo.h"
+
+namespace gr {
+ namespace dtv {
+
+ class atsc_deinterleaver_impl : public atsc_deinterleaver
+ {
+ private:
+ //! transform a single symbol
+ unsigned char transform(unsigned char input) {
+ unsigned char retval = m_fifo[m_commutator]->stuff(input);
+ m_commutator++;
+ if (m_commutator >= 52)
+ m_commutator = 0;
+ return retval;
+ }
+
+ /*!
+ * Note: The use of the alignment_fifo keeps the encoder and decoder
+ * aligned if both are synced to a field boundary. There may be other
+ * ways to implement this function. This is a best guess as to how
+ * this should behave, as we have no test vectors for either the
+ * interleaver or deinterleaver.
+ */
+ interleaver_fifo<unsigned char> alignment_fifo;
+
+ int m_commutator;
+ std::vector<interleaver_fifo<unsigned char> *> m_fifo;
+
+ public:
+ atsc_deinterleaver_impl();
+ ~atsc_deinterleaver_impl();
+
+ int work(int noutput_items,
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items);
+
+ //! reset interleaver (flushes contents and resets commutator)
+ void reset();
+
+ //! sync interleaver (resets commutator, but doesn't flush fifos)
+ void sync() { m_commutator = 0; }
+ };
+
+ } /* namespace dtv */
+} /* namespace gr */
+
+#endif /* INCLUDED_DTV_ATSC_DEINTERLEAVER_IMPL_H */
diff --git a/gr-dtv/lib/atsc/atsc_depad_impl.cc b/gr-dtv/lib/atsc/atsc_depad_impl.cc
new file mode 100644
index 0000000000..e1172e630c
--- /dev/null
+++ b/gr-dtv/lib/atsc/atsc_depad_impl.cc
@@ -0,0 +1,66 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2014 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "atsc_depad_impl.h"
+#include "gnuradio/dtv/atsc_consts.h"
+#include <gnuradio/io_signature.h>
+
+namespace gr {
+ namespace dtv {
+
+ atsc_depad::sptr
+ atsc_depad::make()
+ {
+ return gnuradio::get_initial_sptr
+ (new atsc_depad_impl());
+ }
+
+ atsc_depad_impl::atsc_depad_impl()
+ : gr::sync_interpolator("atsc_depad",
+ io_signature::make(1, 1, sizeof(atsc_mpeg_packet)),
+ io_signature::make(1, 1, sizeof(unsigned char)),
+ ATSC_MPEG_PKT_LENGTH)
+ {
+ }
+
+ int
+ atsc_depad_impl::work (int noutput_items,
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items)
+ {
+ const atsc_mpeg_packet *in = (const atsc_mpeg_packet *)input_items[0];
+ unsigned char *out = (unsigned char *)output_items[0];
+
+ int i;
+
+ for (i = 0; i < noutput_items/ATSC_MPEG_PKT_LENGTH; i++)
+ memcpy(&out[i * ATSC_MPEG_PKT_LENGTH], in[i].data, ATSC_MPEG_PKT_LENGTH);
+
+ return i * ATSC_MPEG_PKT_LENGTH;
+ }
+
+ } /* namespace dtv */
+} /* namespace gr */
diff --git a/gr-dtv/lib/atsc/atsc_depad_impl.h b/gr-dtv/lib/atsc/atsc_depad_impl.h
new file mode 100644
index 0000000000..d29b1cfe9e
--- /dev/null
+++ b/gr-dtv/lib/atsc/atsc_depad_impl.h
@@ -0,0 +1,45 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2014 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef INCLUDED_DTV_ATSC_DEPAD_IMPL_H
+#define INCLUDED_DTV_ATSC_DEPAD_IMPL_H
+
+#include <gnuradio/dtv/atsc_depad.h>
+#include "atsc_types.h"
+
+namespace gr {
+ namespace dtv {
+
+ class atsc_depad_impl : public atsc_depad
+ {
+ public:
+ atsc_depad_impl();
+
+ int work(int noutput_items,
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items);
+ };
+
+ } /* namespace dtv */
+} /* namespace gr */
+
+#endif /* INCLUDED_DTV_ATSC_DEPAD_IMPL_H */
diff --git a/gr-dtv/lib/atsc/atsc_derandomizer_impl.cc b/gr-dtv/lib/atsc/atsc_derandomizer_impl.cc
new file mode 100644
index 0000000000..364713f7b5
--- /dev/null
+++ b/gr-dtv/lib/atsc/atsc_derandomizer_impl.cc
@@ -0,0 +1,79 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2014 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "atsc_derandomizer_impl.h"
+#include "gnuradio/dtv/atsc_consts.h"
+#include <gnuradio/io_signature.h>
+
+namespace gr {
+ namespace dtv {
+
+ atsc_derandomizer::sptr
+ atsc_derandomizer::make()
+ {
+ return gnuradio::get_initial_sptr
+ (new atsc_derandomizer_impl());
+ }
+
+ atsc_derandomizer_impl::atsc_derandomizer_impl()
+ : gr::sync_block("dtv_atsc_derandomizer",
+ io_signature::make(1, 1, sizeof(atsc_mpeg_packet_no_sync)),
+ io_signature::make(1, 1, sizeof(atsc_mpeg_packet)))
+ {
+ d_rand.reset();
+ }
+
+ int
+ atsc_derandomizer_impl::work (int noutput_items,
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items)
+ {
+ const atsc_mpeg_packet_no_sync *in = (const atsc_mpeg_packet_no_sync *) input_items[0];
+ atsc_mpeg_packet *out = (atsc_mpeg_packet *) output_items[0];
+
+ for (int i = 0; i < noutput_items; i++){
+
+ assert(in[i].pli.regular_seg_p());
+
+ if (in[i].pli.first_regular_seg_p())
+ d_rand.reset();
+
+ d_rand.derandomize(out[i], in[i]);
+
+ // Check the pipeline info for error status and and set the
+ // corresponding bit in transport packet header.
+
+ if (in[i].pli.transport_error_p())
+ out[i].data[1] |= MPEG_TRANSPORT_ERROR_BIT;
+ else
+ out[i].data[1] &= ~MPEG_TRANSPORT_ERROR_BIT;
+ }
+
+ return noutput_items;
+ }
+
+ } /* namespace dtv */
+} /* namespace gr */
diff --git a/gr-dtv/lib/atsc/atsc_derandomizer_impl.h b/gr-dtv/lib/atsc/atsc_derandomizer_impl.h
new file mode 100644
index 0000000000..a307a51d86
--- /dev/null
+++ b/gr-dtv/lib/atsc/atsc_derandomizer_impl.h
@@ -0,0 +1,48 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2014 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef INCLUDED_DTV_ATSC_DERANDOMIZER_IMPL_H
+#define INCLUDED_DTV_ATSC_DERANDOMIZER_IMPL_H
+
+#include <gnuradio/dtv/atsc_derandomizer.h>
+#include "atsc_randomize.h"
+
+namespace gr {
+ namespace dtv {
+
+ class atsc_derandomizer_impl : public atsc_derandomizer
+ {
+ private:
+ atsc_randomize d_rand;
+
+ public:
+ atsc_derandomizer_impl();
+
+ int work(int noutput_items,
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items);
+ };
+
+ } /* namespace dtv */
+} /* namespace gr */
+
+#endif /* INCLUDED_DTV_ATSC_DERANDOMIZER_IMPL_H */
diff --git a/gr-dtv/lib/atsc/atsc_equalizer_impl.cc b/gr-dtv/lib/atsc/atsc_equalizer_impl.cc
new file mode 100644
index 0000000000..c804be6dc7
--- /dev/null
+++ b/gr-dtv/lib/atsc/atsc_equalizer_impl.cc
@@ -0,0 +1,183 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2014 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "atsc_equalizer_impl.h"
+#include "atsc_types.h"
+#include "atsc_pnXXX_impl.h"
+#include <gnuradio/io_signature.h>
+
+namespace gr {
+ namespace dtv {
+
+ atsc_equalizer::sptr
+ atsc_equalizer::make()
+ {
+ return gnuradio::get_initial_sptr
+ (new atsc_equalizer_impl());
+ }
+
+ static float
+ bin_map (int bit)
+ {
+ return bit ? +5 : -5;
+ }
+
+ static void
+ init_field_sync_common (float *p, int mask)
+ {
+ int i = 0;
+
+ p[i++] = bin_map (1); // data segment sync pulse
+ p[i++] = bin_map (0);
+ p[i++] = bin_map (0);
+ p[i++] = bin_map (1);
+
+ for (int j = 0; j < 511; j++) // PN511
+ p[i++] = bin_map (atsc_pn511[j]);
+
+ for (int j = 0; j < 63; j++) // PN63
+ p[i++] = bin_map (atsc_pn63[j]);
+
+ for (int j = 0; j < 63; j++) // PN63, toggled on field 2
+ p[i++] = bin_map (atsc_pn63[j] ^ mask);
+
+ for (int j = 0; j < 63; j++) // PN63
+ p[i++] = bin_map (atsc_pn63[j]);
+ }
+
+ atsc_equalizer_impl::atsc_equalizer_impl()
+ : gr::block("dtv_atsc_equalizer",
+ io_signature::make(1, 1, sizeof(atsc_soft_data_segment)),
+ io_signature::make(1, 1, sizeof(atsc_soft_data_segment)))
+ {
+ init_field_sync_common(training_sequence1, 0);
+ init_field_sync_common(training_sequence2, 1);
+
+ for (int i = 0; i < NTAPS; i++)
+ d_taps[i] = 0.0;
+
+ d_buff_not_filled = true;
+ }
+
+ atsc_equalizer_impl::~atsc_equalizer_impl()
+ {
+ }
+
+ void
+ atsc_equalizer_impl::filterN(const float *input_samples, float *output_samples, int nsamples)
+ {
+ for (int j = 0; j < nsamples; j++) {
+ output_samples[j] = 0;
+ for(int i = 0; i < NTAPS; i++)
+ output_samples[j] += d_taps[i] * input_samples[j + i];
+ }
+ }
+
+ void
+ atsc_equalizer_impl::adaptN(const float *input_samples,
+ const float *training_pattern,
+ float *output_samples,
+ int nsamples)
+ {
+ static const double BETA = 0.00005; // FIXME figure out what this ought to be
+ // FIXME add gear-shifting
+
+ for(int j = 0; j < nsamples; j++) {
+ output_samples[j] = 0;
+ for( int i = 0; i < NTAPS; i++ )
+ output_samples[j] += d_taps[i] * input_samples[j + i];
+
+ double e = output_samples[j] - training_pattern[j];
+
+ // update taps...
+ for( int i = 0; i < NTAPS; i++ )
+ d_taps[i] -= BETA * e * (double)(input_samples[j + i]);
+ }
+ }
+
+ int
+ atsc_equalizer_impl::general_work(int noutput_items,
+ gr_vector_int &ninput_items,
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items)
+ {
+ const atsc_soft_data_segment *in = (const atsc_soft_data_segment *) input_items[0];
+ atsc_soft_data_segment *out = (atsc_soft_data_segment *) output_items[0];
+
+ int output_produced = 0;
+ int i = 0;
+
+ if(d_buff_not_filled) {
+ for(int j = 0; j < ATSC_DATA_SEGMENT_LENGTH; j++)
+ data_mem[NPRETAPS + j] = in[i].data[j];
+ d_flags = in[i].pli._flags;
+ d_segno = in[i].pli._segno;
+ d_buff_not_filled = false;
+ i++;
+ }
+
+ for (; i < noutput_items; i++) {
+
+ for(int j = 0; j < NTAPS - NPRETAPS; j++)
+ data_mem[ATSC_DATA_SEGMENT_LENGTH + NPRETAPS + j] = in[i].data[j];
+
+ if(d_segno == -1) {
+ if(d_flags & 0x0010) {
+ adaptN(data_mem, training_sequence2, data_mem2, KNOWN_FIELD_SYNC_LENGTH);
+ //filterN(&data_mem[KNOWN_FIELD_SYNC_LENGTH], data_mem2, ATSC_DATA_SEGMENT_LENGTH - KNOWN_FIELD_SYNC_LENGTH);
+ }
+ else if( !(d_flags & 0x0010) ) {
+ adaptN( data_mem, training_sequence1, data_mem2, KNOWN_FIELD_SYNC_LENGTH );
+ //filterN(&data_mem[KNOWN_FIELD_SYNC_LENGTH], data_mem2, ATSC_DATA_SEGMENT_LENGTH - KNOWN_FIELD_SYNC_LENGTH);
+ }
+ }
+ else {
+ filterN(data_mem, data_mem2, ATSC_DATA_SEGMENT_LENGTH);
+
+ for(int j = 0; j < ATSC_DATA_SEGMENT_LENGTH; j++)
+ out[output_produced].data[j] = data_mem2[j];
+
+ out[output_produced].pli._flags = d_flags;
+ out[output_produced].pli._segno = d_segno;
+ output_produced++;
+ }
+
+ for( int j = 0; j < NPRETAPS; j++ )
+ data_mem[j] = data_mem[ATSC_DATA_SEGMENT_LENGTH + j];
+
+ for(int j = 0; j < ATSC_DATA_SEGMENT_LENGTH; j++)
+ data_mem[NPRETAPS + j] = in[i].data[j];
+
+ d_flags = in[i].pli._flags;
+ d_segno = in[i].pli._segno;
+ }
+
+ consume_each(noutput_items);
+ return output_produced;
+ }
+
+ } /* namespace dtv */
+} /* namespace gr */
diff --git a/gr-dtv/lib/atsc/atsc_equalizer_impl.h b/gr-dtv/lib/atsc/atsc_equalizer_impl.h
new file mode 100644
index 0000000000..6ff89ca646
--- /dev/null
+++ b/gr-dtv/lib/atsc/atsc_equalizer_impl.h
@@ -0,0 +1,71 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2014 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef INCLUDED_DTV_ATSC_EQUALIZER_IMPL_H
+#define INCLUDED_DTV_ATSC_EQUALIZER_IMPL_H
+
+#include <gnuradio/dtv/atsc_equalizer.h>
+#include <gnuradio/dtv/atsc_consts.h>
+#include "atsc_syminfo_impl.h"
+
+namespace gr {
+ namespace dtv {
+
+ class atsc_equalizer_impl : public atsc_equalizer
+ {
+ private:
+ static const int NTAPS = 64;
+ static const int NPRETAPS = (int) (NTAPS * 0.8); // probably should be either .2 or .8
+
+ // the length of the field sync pattern that we know unequivocally
+ static const int KNOWN_FIELD_SYNC_LENGTH = 4 + 511 + 3 * 63;
+
+ float training_sequence1[KNOWN_FIELD_SYNC_LENGTH];
+ float training_sequence2[KNOWN_FIELD_SYNC_LENGTH];
+
+ void filterN(const float *input_samples, float *output_samples, int nsamples);
+ void adaptN(const float *input_samples, const float *training_pattern,
+ float *output_samples, int nsamples);
+
+ float d_taps[NTAPS];
+
+ float data_mem[ATSC_DATA_SEGMENT_LENGTH + NTAPS]; // Buffer for previous data packet
+ float data_mem2[ATSC_DATA_SEGMENT_LENGTH];
+ unsigned short d_flags;
+ short d_segno;
+
+ int d_buff_not_filled;
+
+ public:
+ atsc_equalizer_impl();
+ ~atsc_equalizer_impl();
+
+ virtual int general_work(int noutput_items,
+ gr_vector_int &ninput_items,
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items);
+ };
+
+ } /* namespace dtv */
+} /* namespace gr */
+
+#endif /* INCLUDED_DTV_ATSC_EQUALIZER_IMPL_H */
diff --git a/gr-dtv/lib/atsc/atsc_fake_single_viterbi.cc b/gr-dtv/lib/atsc/atsc_fake_single_viterbi.cc
new file mode 100644
index 0000000000..ffe410292e
--- /dev/null
+++ b/gr-dtv/lib/atsc/atsc_fake_single_viterbi.cc
@@ -0,0 +1,72 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2014 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "atsc_fake_single_viterbi.h"
+
+namespace gr {
+ namespace dtv {
+
+ void
+ atsc_fake_single_viterbi::reset()
+ {
+ post_coder_state = 0;
+ }
+
+ atsc_fake_single_viterbi::atsc_fake_single_viterbi()
+ {
+ reset();
+ }
+
+ /*
+ * implement simple slicer and post coder
+ */
+ char
+ atsc_fake_single_viterbi::decode(float input)
+ {
+ int y2, y1;
+
+ if (input < -4){
+ y2 = 0;
+ y1 = 0;
+ }
+ else if (input < 0){
+ y2 = 0;
+ y1 = 1;
+ }
+ else if (input < 4){
+ y2 = 1;
+ y1 = 0;
+ }
+ else {
+ y2 = 1;
+ y1 = 1;
+ }
+
+ int x1 = y1;
+ int x2 = y2 ^ post_coder_state;
+ post_coder_state = y2;
+
+ return (x2 << 1) | x1;
+ }
+
+ } /* namespace dtv */
+} /* namespace gr */
diff --git a/gr-dtv/lib/atsc/atsc_fake_single_viterbi.h b/gr-dtv/lib/atsc/atsc_fake_single_viterbi.h
new file mode 100644
index 0000000000..9ca546a6ab
--- /dev/null
+++ b/gr-dtv/lib/atsc/atsc_fake_single_viterbi.h
@@ -0,0 +1,52 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2014 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef INCLUDED_ATSC_FAKE_SINGLE_VITERBI_H
+#define INCLUDED_ATSC_FAKE_SINGLE_VITERBI_H
+
+namespace gr {
+ namespace dtv {
+
+ class atsc_fake_single_viterbi
+ {
+ public:
+ atsc_fake_single_viterbi();
+
+ /*!
+ * \p INPUT ideally takes on the values +/- 1,3,5,7
+ * return is decoded dibit in the range [0, 3]
+ */
+ char decode (float input);
+
+ void reset();
+
+ //! internal delay of decoder
+ int delay() { return 0; }
+
+ protected:
+ int post_coder_state;
+ };
+
+ } /* namespace dtv */
+} /* namespace gr */
+
+#endif /* INCLUDED_ATSC_FAKE_SINGLE_VITERBI_H */
diff --git a/gr-dtv/lib/atsc/atsc_fpll_impl.cc b/gr-dtv/lib/atsc/atsc_fpll_impl.cc
new file mode 100644
index 0000000000..2015e350ef
--- /dev/null
+++ b/gr-dtv/lib/atsc/atsc_fpll_impl.cc
@@ -0,0 +1,95 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2014 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "atsc_fpll_impl.h"
+#include <gnuradio/io_signature.h>
+#include <gnuradio/math.h>
+#include <gnuradio/sincos.h>
+
+namespace gr {
+ namespace dtv {
+
+ atsc_fpll::sptr
+ atsc_fpll::make(float rate)
+ {
+ return gnuradio::get_initial_sptr
+ (new atsc_fpll_impl(rate));
+ }
+
+ atsc_fpll_impl::atsc_fpll_impl(float rate)
+ : sync_block("dtv_atsc_fpll",
+ io_signature::make(1, 1, sizeof(gr_complex)),
+ io_signature::make(1, 1, sizeof(float)))
+ {
+ d_afc.set_taps(1.0-exp(-1.0/rate/5e-6));
+ d_nco.set_freq((-3e6 + 0.309e6)/rate*2*M_PI);
+ d_nco.set_phase(0.0);
+ }
+
+ atsc_fpll_impl::~atsc_fpll_impl()
+ {
+ }
+
+ int
+ atsc_fpll_impl::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];
+ float *out = (float *)output_items[0];
+
+ for (int k = 0; k < noutput_items; k++) {
+ float a_cos, a_sin;
+
+ d_nco.step(); // increment phase
+ d_nco.sincos(&a_sin, &a_cos); // compute cos and sin
+
+ // Mix out carrier and output I-only signal
+ gr_complex result = in[k]*gr_complex(a_sin, a_cos);
+ out[k] = result.real();
+
+ // Update phase/freq error
+ gr_complex filtered = d_afc.filter(result);
+ float x = gr::fast_atan2f(filtered.imag(), filtered.real());
+
+ // avoid slamming filter with big transitions
+ static const float limit = M_PI/2.0;
+ if (x > limit)
+ x = limit;
+ else if (x < -limit)
+ x = -limit;
+
+ static const float alpha = 0.01;
+ static const float beta = alpha*alpha/4.0;
+ d_nco.adjust_phase(alpha*x);
+ d_nco.adjust_freq(beta*x);
+ }
+
+ return noutput_items;
+ }
+
+ } /* namespace dtv */
+} /* namespace gr */
diff --git a/gr-dtv/lib/atsc/atsc_fpll_impl.h b/gr-dtv/lib/atsc/atsc_fpll_impl.h
new file mode 100644
index 0000000000..e06fc09cc5
--- /dev/null
+++ b/gr-dtv/lib/atsc/atsc_fpll_impl.h
@@ -0,0 +1,53 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2014 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef INCLUDED_DTV_ATSC_FPLL_IMPL_H
+#define INCLUDED_DTV_ATSC_FPLL_IMPL_H
+
+#include <gnuradio/dtv/atsc_fpll.h>
+#include <gnuradio/nco.h>
+#include <gnuradio/filter/single_pole_iir.h>
+#include <gnuradio/analog/agc.h>
+#include <stdio.h>
+
+namespace gr {
+ namespace dtv {
+
+ class atsc_fpll_impl : public atsc_fpll
+ {
+ private:
+ gr::nco<float,float> d_nco;
+ gr::filter::single_pole_iir<gr_complex,gr_complex,float> d_afc;
+
+ public:
+ atsc_fpll_impl(float rate);
+ ~atsc_fpll_impl();
+
+ virtual int work(int noutput_items,
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items);
+ };
+
+ } /* namespace dtv */
+} /* namespace gr */
+
+#endif /* INCLUDED_DTV_ATSC_FPLL_IMPL_H */
diff --git a/gr-dtv/lib/atsc/atsc_fs_checker_impl.cc b/gr-dtv/lib/atsc/atsc_fs_checker_impl.cc
new file mode 100644
index 0000000000..3a39bc794b
--- /dev/null
+++ b/gr-dtv/lib/atsc/atsc_fs_checker_impl.cc
@@ -0,0 +1,128 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2014 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "atsc_fs_checker_impl.h"
+#include "atsc_types.h"
+#include "atsc_syminfo_impl.h"
+#include "atsc_pnXXX_impl.h"
+#include "gnuradio/dtv/atsc_consts.h"
+#include <gnuradio/io_signature.h>
+
+static const int PN511_ERROR_LIMIT = 20; // max number of bits wrong
+static const int PN63_ERROR_LIMIT = 5;
+
+namespace gr {
+ namespace dtv {
+
+ atsc_fs_checker::sptr
+ atsc_fs_checker::make()
+ {
+ return gnuradio::get_initial_sptr
+ (new atsc_fs_checker_impl());
+ }
+
+ atsc_fs_checker_impl::atsc_fs_checker_impl()
+ : gr::block("dtv_atsc_fs_checker",
+ io_signature::make(1, 1, sizeof(atsc_soft_data_segment)),
+ io_signature::make(1, 1, sizeof(atsc_soft_data_segment)))
+ {
+ reset();
+ }
+
+ void
+ atsc_fs_checker_impl::reset()
+ {
+ d_index = 0;
+ memset (d_sample_sr, 0, sizeof (d_sample_sr));
+ memset (d_tag_sr, 0, sizeof (d_tag_sr));
+ memset (d_bit_sr, 0, sizeof (d_bit_sr));
+ d_field_num = 0;
+ d_segment_num = 0;
+ }
+
+ atsc_fs_checker_impl::~atsc_fs_checker_impl()
+ {
+ }
+
+ int
+ atsc_fs_checker_impl::general_work(int noutput_items,
+ gr_vector_int &ninput_items,
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items)
+ {
+ const atsc_soft_data_segment *in = (const atsc_soft_data_segment *) input_items[0];
+ atsc_soft_data_segment *out = (atsc_soft_data_segment *) output_items[0];
+
+ int output_produced = 0;
+
+ for (int i = 0; i < noutput_items; i++) {
+ // check for a hit on the PN 511 pattern
+ int errors = 0;
+
+ for (int j = 0; j < LENGTH_511 && errors < PN511_ERROR_LIMIT; j++)
+ errors += (in[i].data[j + OFFSET_511] >= 0) ^ atsc_pn511[j];
+
+ //std::cout << errors << std::endl;
+
+ if (errors < PN511_ERROR_LIMIT) { // 511 pattern is good.
+ // determine if this is field 1 or field 2
+ errors = 0;
+ for (int j = 0; j < LENGTH_2ND_63; j++)
+ errors += (in[i].data[j + OFFSET_2ND_63] >= 0) ^ atsc_pn63[j];
+
+ // we should have either field 1 (== PN63) or field 2 (== ~PN63)
+ if (errors <= PN63_ERROR_LIMIT) {
+ //std::cout << "Found FIELD_SYNC_1" << std::endl;
+ d_field_num = 1; // We are in field number 1 now
+ d_segment_num = -1; // This is the first segment
+ }
+ else if (errors >= (LENGTH_2ND_63 - PN63_ERROR_LIMIT)) {
+ //std::cout << "Found FIELD_SYNC_2" << std::endl;
+ d_field_num = 2; // We are in field number 2 now
+ d_segment_num = -1; // This is the first segment
+ }
+ else {
+ // should be extremely rare.
+ std::cerr << "!!! atsc_fs_checker: PN63 error count = " << errors << std::endl;
+ }
+ }
+
+ if( d_field_num == 1 || d_field_num == 2 ) { // If we have sync
+ // So we copy out current packet data to an output packet and fill its plinfo
+ for( int j = 0; j < ATSC_DATA_SEGMENT_LENGTH; j++ )
+ out[output_produced].data[j] = in[i].data[j];
+ out[output_produced].pli.set_regular_seg((d_field_num == 2), d_segment_num);
+ d_segment_num++;
+ output_produced++;
+ }
+ }
+
+ consume_each(noutput_items);
+ return output_produced;
+ }
+
+ } /* namespace dtv */
+} /* namespace gr */
diff --git a/gr-dtv/lib/atsc/atsc_fs_checker_impl.h b/gr-dtv/lib/atsc/atsc_fs_checker_impl.h
new file mode 100644
index 0000000000..1210ae5830
--- /dev/null
+++ b/gr-dtv/lib/atsc/atsc_fs_checker_impl.h
@@ -0,0 +1,67 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2014 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef INCLUDED_DTV_ATSC_FS_CHECKER_IMPL_H
+#define INCLUDED_DTV_ATSC_FS_CHECKER_IMPL_H
+
+#include <gnuradio/dtv/atsc_fs_checker.h>
+#include "atsc_syminfo_impl.h"
+
+namespace gr {
+ namespace dtv {
+
+ class atsc_fs_checker_impl : public atsc_fs_checker
+ {
+ private:
+ static const int SRSIZE = 1024; // must be power of two
+ int d_index; // points at oldest sample
+ float d_sample_sr[SRSIZE]; // sample shift register
+ atsc::syminfo d_tag_sr[SRSIZE]; // tag shift register
+ unsigned char d_bit_sr[SRSIZE]; // binary decision shift register
+ int d_field_num;
+ int d_segment_num;
+
+ static const int OFFSET_511 = 4; // offset to second PN 63 pattern
+ static const int LENGTH_511 = 511; // length of PN 63 pattern
+ static const int OFFSET_2ND_63 = 578; // offset to second PN 63 pattern
+ static const int LENGTH_2ND_63 = 63; // length of PN 63 pattern
+
+ inline static int wrap (int index){ return index & (SRSIZE - 1); }
+ inline static int incr (int index){ return wrap (index + 1); }
+ inline static int decr (int index){ return wrap (index - 1); }
+
+ public:
+ atsc_fs_checker_impl();
+ ~atsc_fs_checker_impl();
+
+ void reset();
+
+ virtual int general_work(int noutput_items,
+ gr_vector_int &ninput_items,
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items);
+ };
+
+ } /* namespace dtv */
+} /* namespace gr */
+
+#endif /* INCLUDED_DTV_ATSC_FS_CHECKER_IMPL_H */
diff --git a/gr-dtv/lib/atsc/atsc_interleaver_fifo.h b/gr-dtv/lib/atsc/atsc_interleaver_fifo.h
new file mode 100644
index 0000000000..0d40389c74
--- /dev/null
+++ b/gr-dtv/lib/atsc/atsc_interleaver_fifo.h
@@ -0,0 +1,86 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2014 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef INCLUDED_DTV_ATSC_INTERLEAVER_FIFO_H
+#define INCLUDED_DTV_ATSC_INTERLEAVER_FIFO_H
+
+#include <string.h>
+
+namespace gr {
+ namespace dtv {
+
+ template<class symbol_type>
+ class interleaver_fifo {
+ public:
+
+ interleaver_fifo(unsigned int size);
+ ~interleaver_fifo();
+
+ //! reset interleaver (flushes contents and resets commutator)
+ void reset ();
+
+ //! stuff a symbol into the fifo and return the oldest
+ symbol_type stuff(symbol_type input) {
+ if (m_size == 0)
+ return input;
+
+ symbol_type retval = m_fifo[m_position];
+ m_fifo[m_position] = input;
+ m_position++;
+ if (m_position >= m_size)
+ m_position = 0;
+
+ return retval;
+ }
+
+ protected:
+ unsigned int m_size;
+ unsigned int m_position;
+ symbol_type *m_fifo;
+ };
+
+ template<class symbol_type>
+ interleaver_fifo<symbol_type>::interleaver_fifo(unsigned int size)
+ {
+ m_size = size;
+ m_position = 0;
+ m_fifo = new symbol_type[size];
+ memset (m_fifo, 0, m_size * sizeof(symbol_type));
+ }
+
+ template<class symbol_type>
+ interleaver_fifo<symbol_type>::~interleaver_fifo()
+ {
+ delete [] m_fifo;
+ }
+
+ template<class symbol_type> void
+ interleaver_fifo<symbol_type>::reset()
+ {
+ m_position = 0;
+ memset (m_fifo, 0, m_size * sizeof (symbol_type));
+ }
+
+ } /* namespace dtv */
+} /* namespace gr */
+
+#endif /* INCLUDED_DTV_ATSC_INTERLEAVER_FIFO_H */
diff --git a/gr-dtv/lib/atsc/atsc_pnXXX_impl.h b/gr-dtv/lib/atsc/atsc_pnXXX_impl.h
new file mode 100644
index 0000000000..d4b86dcdbb
--- /dev/null
+++ b/gr-dtv/lib/atsc/atsc_pnXXX_impl.h
@@ -0,0 +1,59 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2002,2013 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef INCLUDED_DTV_ATSC_PNXXX_H
+#define INCLUDED_DTV_ATSC_PNXXX_H
+
+#include <gnuradio/dtv/api.h>
+
+const unsigned char atsc_pn511[511] = {
+ 0,0,0,0, 0,0,0,1, 0,1,1,1, 1,1,1,1, 1,1,0,0, 1,0,1,0, 1,0,1,0, 1,1,1,0,
+ 0,1,1,0, 0,1,1,0, 1,0,0,0, 1,0,0,0, 1,0,0,1, 1,1,1,0, 0,0,0,1, 1,1,0,1,
+
+ 0,1,1,1, 1,1,0,1, 0,0,1,1, 0,1,0,1, 0,0,1,1, 1,0,1,1, 0,0,1,1, 1,0,1,0,
+ 0,1,0,0, 0,1,0,1, 1,0,0,0, 1,1,1,1, 0,0,1,0, 0,0,0,1, 0,1,0,0, 0,1,1,1,
+
+ 1,1,0,0, 1,1,1,1, 0,1,0,1, 0,0,0,1, 0,1,0,0, 1,1,0,0, 0,0,1,1, 0,0,0,1,
+ 0,0,0,0, 0,1,0,0, 0,0,1,1, 1,1,1,1, 0,0,0,0, 0,1,0,1, 0,1,0,0, 0,0,0,0,
+
+ 1,1,0,0, 1,1,1,1, 1,1,1,0, 1,1,1,0, 1,0,1,0, 1,0,0,1, 0,1,1,0, 0,1,1,0,
+ 0,0,1,1, 0,1,1,1, 0,1,1,1, 1,0,1,1, 0,1,0,0, 1,0,1,0, 0,1,0,0, 1,1,1,0,
+
+ 0,1,1,1, 0,0,0,1, 0,1,1,1, 0,1,0,0, 0,0,1,1, 0,1,0,0, 1,1,1,1, 1,0,1,1,
+ 0,0,0,1, 0,1,0,1, 1,0,1,1, 1,1,0,0, 1,1,0,1, 1,0,1,0, 1,1,1,0, 1,1,0,1,
+
+ 1,0,0,1, 0,1,1,0, 1,1,0,1, 1,1,0,0, 1,0,0,1, 0,0,1,0, 1,1,1,0, 0,0,1,1,
+ 1,0,0,1, 0,1,1,1, 1,0,1,0, 0,0,1,1, 0,1,0,1, 1,0,0,0, 0,1,0,0, 1,1,0,1,
+
+ 1,1,1,1, 0,0,0,1, 0,0,1,0, 1,0,1,1, 1,1,0,0, 0,1,1,0, 0,1,0,1, 0,0,0,0,
+ 1,0,0,0, 1,1,0,0, 0,0,0,1, 1,1,1,0, 1,1,1,1, 1,1,0,1, 0,1,1,0, 1,0,1,0,
+
+ 1,1,0,0, 1,0,0,1, 1,0,0,1, 0,0,0,1, 1,1,0,1, 1,1,0,0, 0,0,1,0, 1,1,0,1,
+ 0,0,0,0, 0,1,1,0, 1,1,0,0, 0,0,0,0, 1,0,0,1, 0,0,0,0, 0,0,0,1, 1,1,0
+};
+
+const unsigned char atsc_pn63[63] = {
+ 1,1,1,0, 0,1,0,0, 1,0,1,1, 0,1,1,1, 0,1,1,0, 0,1,1,0, 1,0,1,0, 1,1,1,1,
+ 1,1,0,0, 0,0,0,1, 0,0,0,0, 1,1,0,0, 0,1,0,1, 0,0,1,1, 1,1,0,1, 0,0,0
+};
+
+#endif /* INCLUDED_DTV_ATSC_PNXXX_H */
diff --git a/gr-dtv/lib/atsc/atsc_randomize.cc b/gr-dtv/lib/atsc/atsc_randomize.cc
new file mode 100644
index 0000000000..769b08587a
--- /dev/null
+++ b/gr-dtv/lib/atsc/atsc_randomize.cc
@@ -0,0 +1,117 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2014 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "atsc_randomize.h"
+
+namespace gr {
+ namespace dtv {
+
+ unsigned char atsc_randomize::s_output_map[1 << 14];
+ bool atsc_randomize::s_output_map_initialized_p = false;
+
+ atsc_randomize::atsc_randomize ()
+ {
+ d_state = PRELOAD_VALUE;
+
+ if (!s_output_map_initialized_p)
+ initialize_output_map ();
+ }
+
+ /*!
+ * \brief Generate the table used in the fast_output_map function.
+ *
+ * The table has 16K byte entries, but because of how is is used, only
+ * 256 entries end up being resident in the cache. This seems
+ * like a good use of memory. We can get away with a 16K table
+ * because the low two bits of the state do not affect the output
+ * function. By shifting right those two bits we shrink the table,
+ * and also get better cache line utilization.
+ */
+ void
+ atsc_randomize::initialize_output_map ()
+ {
+ s_output_map_initialized_p = true;
+
+ for (int i = 0; i < (1 << 14); i++)
+ s_output_map[i] = slow_output_map (i << 2);
+ }
+
+
+ void
+ atsc_randomize::reset ()
+ {
+ d_state = PRELOAD_VALUE;
+ }
+
+ void
+ atsc_randomize::randomize (atsc_mpeg_packet_no_sync &out, const atsc_mpeg_packet &in)
+ {
+ assert (in.data[0] == MPEG_SYNC_BYTE); // confirm it's there, then drop
+
+ for (int i = 0; i < ATSC_MPEG_DATA_LENGTH; i++)
+ out.data[i] = in.data[i + 1] ^ output_and_clk ();
+ }
+
+ void
+ atsc_randomize::derandomize (atsc_mpeg_packet &out, const atsc_mpeg_packet_no_sync &in)
+ {
+ out.data[0] = MPEG_SYNC_BYTE; // add sync byte to beginning of packet
+
+ for (int i = 0; i < ATSC_MPEG_DATA_LENGTH; i++)
+ out.data[i + 1] = in.data[i] ^ output_and_clk ();
+ }
+
+
+ unsigned char
+ atsc_randomize::slow_output_map (int st)
+ {
+ int output = 0;
+
+ if (st & 0x8000)
+ output |= 0x01;
+
+ if (st & 0x2000)
+ output |= 0x02;
+
+ if (st & 0x1000)
+ output |= 0x04;
+
+ if (st & 0x0200)
+ output |= 0x08;
+
+ if (st & 0x0020)
+ output |= 0x10;
+
+ if (st & 0x0010)
+ output |= 0x20;
+
+ if (st & 0x0008)
+ output |= 0x40;
+
+ if (st & 0x0004)
+ output |= 0x80;
+
+ return output;
+ }
+
+ } /* namespace dtv */
+} /* namespace gr */
diff --git a/gr-dtv/lib/atsc/atsc_randomize.h b/gr-dtv/lib/atsc/atsc_randomize.h
new file mode 100644
index 0000000000..0903240f48
--- /dev/null
+++ b/gr-dtv/lib/atsc/atsc_randomize.h
@@ -0,0 +1,92 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2014 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef INCLUDED_ATSC_RANDOMIZE_H
+#define INCLUDED_ATSC_RANDOMIZE_H
+
+#include "atsc_types.h"
+
+namespace gr {
+ namespace dtv {
+
+ class atsc_randomize
+ {
+ public:
+ atsc_randomize();
+
+ /*! \brief reset randomizer LFSR
+ *
+ * must be called during the Data Segment Sync interval prior to the
+ * first data segment. I.e., the LFSR is reset prior to the first
+ * field of each VSB data frame.
+ */
+ void reset ();
+
+ //! randomize (whiten) mpeg packet and remove leading MPEG-2 sync byte
+ void randomize (atsc_mpeg_packet_no_sync &out, const atsc_mpeg_packet &in);
+
+ //! derandomize (de-whiten) mpeg packet and add leading MPEG-2 sync byte
+ void derandomize (atsc_mpeg_packet &out, const atsc_mpeg_packet_no_sync &in);
+
+ unsigned int state() const { return d_state; }
+ private:
+ static void initialize_output_map ();
+ static unsigned char slow_output_map (int st);
+
+ static unsigned char fast_output_map (int st){
+ return s_output_map[(st & 0xb23c) >> 2]; // Magic const with 8 bits set improves cache
+ // utilization. The bits correspond to the taps
+ // used in output calculation. Others may be
+ // safely ignored.
+ }
+
+ //! return current output value
+ unsigned char output (){
+ return fast_output_map (d_state);
+ }
+
+ //! clock LFSR; advance to next state.
+ void clk (){
+ if (d_state & 0x1)
+ d_state = ((d_state ^ MASK) >> 1) | 0x8000;
+ else
+ d_state = d_state >> 1;
+ }
+
+ //! return current output value and advance to next state
+ unsigned char output_and_clk (){
+ unsigned char r = output ();
+ clk ();
+ return r;
+ }
+
+ unsigned int d_state;
+
+ static const unsigned int PRELOAD_VALUE = 0x018f; /* 0xf180 bit reversed */
+ static const unsigned int MASK = 0xa638;
+ static unsigned char s_output_map[1 << 14];
+ static bool s_output_map_initialized_p;
+ };
+ } /* namespace dtv */
+} /* namespace gr */
+
+#endif /* INCLUDED_ATSC_RANDOMIZE_H */
diff --git a/gr-dtv/lib/atsc/atsc_rs_decoder_impl.cc b/gr-dtv/lib/atsc/atsc_rs_decoder_impl.cc
new file mode 100644
index 0000000000..7a950e716e
--- /dev/null
+++ b/gr-dtv/lib/atsc/atsc_rs_decoder_impl.cc
@@ -0,0 +1,131 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2014 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "atsc_rs_decoder_impl.h"
+#include "gnuradio/dtv/atsc_consts.h"
+#include <gnuradio/io_signature.h>
+
+namespace gr {
+ namespace dtv {
+
+ static const int rs_init_symsize = 8;
+ static const int rs_init_gfpoly = 0x11d;
+ static const int rs_init_fcr = 0; // first consecutive root
+ static const int rs_init_prim = 1; // primitive is 1 (alpha)
+ static const int rs_init_nroots = 20;
+
+ static const int N = (1 << rs_init_symsize) - 1; // 255
+ static const int K = N - rs_init_nroots; // 235
+
+ static const int amount_of_pad = N - ATSC_MPEG_RS_ENCODED_LENGTH; // 48
+
+ atsc_rs_decoder::sptr
+ atsc_rs_decoder::make()
+ {
+ return gnuradio::get_initial_sptr
+ (new atsc_rs_decoder_impl());
+ }
+
+ atsc_rs_decoder_impl::atsc_rs_decoder_impl()
+ : gr::sync_block("dtv_atsc_rs_decoder",
+ io_signature::make(1, 1, sizeof(atsc_mpeg_packet_rs_encoded)),
+ io_signature::make(1, 1, sizeof(atsc_mpeg_packet_no_sync)))
+ {
+ d_rs = init_rs_char(rs_init_symsize, rs_init_gfpoly, rs_init_fcr, rs_init_prim, rs_init_nroots);
+ assert (d_rs != 0);
+ nerrors_corrrected_count = 0;
+ bad_packet_count = 0;
+ total_packets = 0;
+ }
+
+ int atsc_rs_decoder_impl::decode (atsc_mpeg_packet_no_sync &out, const atsc_mpeg_packet_rs_encoded &in)
+ {
+ unsigned char tmp[N];
+ int ncorrections;
+
+ assert((int)(amount_of_pad + sizeof(in.data)) == N);
+
+ // add missing prefix zero padding to message
+ memset(tmp, 0, amount_of_pad);
+ memcpy(&tmp[amount_of_pad], in.data, sizeof(in.data));
+
+ // correct message...
+ ncorrections = decode_rs_char(d_rs, tmp, 0, 0);
+
+ // copy corrected message to output, skipping prefix zero padding
+ memcpy (out.data, &tmp[amount_of_pad], sizeof (out.data));
+
+ return ncorrections;
+ }
+
+ atsc_rs_decoder_impl::~atsc_rs_decoder_impl()
+ {
+ if (d_rs)
+ free_rs_char (d_rs);
+ d_rs = 0;
+ }
+
+ int
+ atsc_rs_decoder_impl::work(int noutput_items,
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items)
+ {
+ const atsc_mpeg_packet_rs_encoded *in = (const atsc_mpeg_packet_rs_encoded *)input_items[0];
+ atsc_mpeg_packet_no_sync *out = (atsc_mpeg_packet_no_sync *)output_items[0];
+
+ for (int i = 0; i < noutput_items; i++) {
+ assert(in[i].pli.regular_seg_p());
+ out[i].pli = in[i].pli; // copy pipeline info...
+
+ int nerrors_corrrected = decode(out[i], in[i]);
+ out[i].pli.set_transport_error(nerrors_corrrected == -1);
+ if (nerrors_corrrected == -1)
+ bad_packet_count++;
+ else
+ nerrors_corrrected_count += nerrors_corrrected;
+
+ total_packets++;
+ #if 0
+ if (total_packets > 1000) {
+ // FIXME: convert to logger
+ std::cout << "Error rate: "
+ << (float)nerrors_corrrected_count/total_packets
+ << "\tPacket error rate: "
+ << (float)bad_packet_count/total_packets
+ << std::endl;
+
+ nerrors_corrrected_count = 0;
+ bad_packet_count = 0;
+ total_packets = 0;
+ }
+ #endif
+ }
+
+ return noutput_items;
+ }
+
+ } /* namespace dtv */
+} /* namespace gr */
diff --git a/gr-dtv/lib/atsc/atsc_rs_decoder_impl.h b/gr-dtv/lib/atsc/atsc_rs_decoder_impl.h
new file mode 100644
index 0000000000..57460128dc
--- /dev/null
+++ b/gr-dtv/lib/atsc/atsc_rs_decoder_impl.h
@@ -0,0 +1,62 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2014 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef INCLUDED_DTV_ATSC_RS_DECODER_IMPL_H
+#define INCLUDED_DTV_ATSC_RS_DECODER_IMPL_H
+
+#include <gnuradio/dtv/atsc_rs_decoder.h>
+#include "atsc_types.h"
+
+extern "C" {
+#include <gnuradio/fec/rs.h>
+}
+
+namespace gr {
+ namespace dtv {
+
+ class atsc_rs_decoder_impl : public atsc_rs_decoder
+ {
+ private:
+ int nerrors_corrrected_count;
+ int bad_packet_count;
+ int total_packets;
+ void *d_rs;
+
+ public:
+ atsc_rs_decoder_impl();
+ ~atsc_rs_decoder_impl();
+
+ /*!
+ * Decode RS encoded packet.
+ * \returns a count of corrected symbols, or -1 if the block was uncorrectible.
+ */
+ int decode(atsc_mpeg_packet_no_sync &out, const atsc_mpeg_packet_rs_encoded &in);
+
+ int work(int noutput_items,
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items);
+ };
+
+ } /* namespace dtv */
+} /* namespace gr */
+
+#endif /* INCLUDED_DTV_ATSC_RS_DECODER_IMPL_H */
diff --git a/gr-dtv/lib/atsc/atsc_single_viterbi.cc b/gr-dtv/lib/atsc/atsc_single_viterbi.cc
new file mode 100644
index 0000000000..385940e453
--- /dev/null
+++ b/gr-dtv/lib/atsc/atsc_single_viterbi.cc
@@ -0,0 +1,123 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2002, 2014 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "atsc_single_viterbi.h"
+#include <math.h>
+
+namespace gr {
+ namespace dtv {
+
+ /* was_sent is a table of what symbol we get given what bit pair
+ was sent and what state we where in [state][pair] */
+ const int atsc_single_viterbi::was_sent[4][4] = {
+ {0,2,4,6},
+ {0,2,4,6},
+ {1,3,5,7},
+ {1,3,5,7},
+ };
+
+ /* transition_table is a table of what state we were in
+ given current state and bit pair sent [state][pair] */
+ const int atsc_single_viterbi::transition_table[4][4] = {
+ {0,2,0,2},
+ {2,0,2,0},
+ {1,3,1,3},
+ {3,1,3,1},
+ };
+
+ void
+ atsc_single_viterbi::reset()
+ {
+ for (unsigned int i = 0; i<2; i++)
+ for (unsigned int j = 0; j<4; j++) {
+ path_metrics[i][j] = 0;
+ traceback[i][j] = 0;
+ }
+ post_coder_state = 0;
+ phase = 0;
+ }
+
+ atsc_single_viterbi::atsc_single_viterbi()
+ {
+ reset();
+ }
+
+ char
+ atsc_single_viterbi::decode(float input)
+ {
+ unsigned int best_state = 0;
+ float best_state_metric = 100000;
+
+ /* Precompute distances from input to each possible symbol */
+ float distances[8] = { (float)fabs( input + 7 ), (float)fabs( input + 5 ),
+ (float)fabs( input + 3 ), (float)fabs( input + 1 ),
+ (float)fabs( input - 1 ), (float)fabs( input - 3 ),
+ (float)fabs( input - 5 ), (float)fabs( input - 7 ) };
+
+ /* We start by iterating over all possible states */
+ for (unsigned int state = 0; state < 4; state++) {
+ /* Next we find the most probable path from the previous
+ states to the state we are testing, we only need to look at
+ the 4 paths that can be taken given the 2-bit input */
+ int min_metric_symb = 0;
+ float min_metric = distances[was_sent[state][0]] + path_metrics[phase][transition_table[state][0]];
+ for (unsigned int symbol_sent = 1; symbol_sent < 4; symbol_sent++)
+ if( (distances[was_sent[state][symbol_sent]] + path_metrics[phase][transition_table[state][symbol_sent]]) < min_metric) {
+ min_metric = distances[was_sent[state][symbol_sent]] + path_metrics[phase][transition_table[state][symbol_sent]];
+ min_metric_symb = symbol_sent;
+ }
+
+ path_metrics[phase^1][state] = min_metric;
+ traceback[phase^1][state] = (((unsigned long long)min_metric_symb) << 62) | (traceback[phase][transition_table[state][min_metric_symb]] >> 2);
+
+ /* If this is the most probable state so far remember it, this
+ only needs to be checked when we are about to output a path
+ so this test can be saved till later if needed, if perfomed
+ later it could also be optimized with SIMD instructions.
+ Even better this check could be eliminated as we are
+ outputing the tail of our traceback not the head, for any
+ head state path will tend towards the optimal path with a
+ probability approaching 1 in just 8 or so transitions
+ */
+ if(min_metric <= best_state_metric) {
+ best_state_metric = min_metric;
+ best_state = state;
+ }
+ }
+
+ if(best_state_metric > 10000) {
+ for(unsigned int state = 0; state < 4; state++)
+ path_metrics[phase^1][state] -= best_state_metric;
+ }
+ phase ^= 1;
+
+ int y2 = (0x2 & traceback[phase][best_state]) >> 1;
+ int x2 = y2 ^ post_coder_state;
+ post_coder_state = y2;
+
+ return ( x2 << 1 ) | (0x1 & traceback[phase][best_state]);
+ }
+
+ } /* namespace dtv */
+} /* namespace gr */
+
+
diff --git a/gr-dtv/lib/atsc/atsc_single_viterbi.h b/gr-dtv/lib/atsc/atsc_single_viterbi.h
new file mode 100644
index 0000000000..3c756c7690
--- /dev/null
+++ b/gr-dtv/lib/atsc/atsc_single_viterbi.h
@@ -0,0 +1,60 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2002, 2014 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef INCLUDED_DTV_ATSC_SINGLE_VITERBI_H
+#define INCLUDED_DTV_ATSC_SINGLE_VITERBI_H
+
+namespace gr {
+ namespace dtv {
+
+ class atsc_single_viterbi
+ {
+ public:
+ atsc_single_viterbi();
+
+ static const unsigned int TB_LEN = 32;
+
+ /*!
+ * \p INPUT ideally takes on the values +/- 1,3,5,7
+ * return is decoded dibit in the range [0, 3]
+ */
+ char decode(float input);
+
+ void reset ();
+
+ //! internal delay of decoder
+ static int delay () { return TB_LEN - 1; }
+
+ protected:
+ static const int transition_table[4][4];
+ static const int was_sent[4][4];
+
+ float path_metrics [2][4];
+ unsigned long long traceback [2][4];
+ unsigned char phase;
+ int post_coder_state;
+ };
+
+ } /* namespace dtv */
+} /* namespace gr */
+
+#endif /* INCLUDED_DTV_ATSC_SINGLE_VITERBI_H */
diff --git a/gr-dtv/lib/atsc/atsc_syminfo_impl.h b/gr-dtv/lib/atsc/atsc_syminfo_impl.h
new file mode 100644
index 0000000000..4a5008e5f8
--- /dev/null
+++ b/gr-dtv/lib/atsc/atsc_syminfo_impl.h
@@ -0,0 +1,62 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2014 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+#ifndef INCLUDED_GR_DTV_ATSC_SYMINFO_H
+#define INCLUDED_GR_DTV_ATSC_SYMINFO_H
+
+namespace gr {
+ namespace dtv {
+ namespace atsc {
+
+ static const unsigned int SI_SEGMENT_NUM_MASK = 0x1ff;
+ static const unsigned int SI_FIELD_SYNC_SEGMENT_NUM = SI_SEGMENT_NUM_MASK; // conceptually -1
+
+ struct syminfo {
+ unsigned int symbol_num : 10; // 0..831
+ unsigned int segment_num : 9; // 0..311 and SI_FIELD_SYNC_SEGMENT_NUM
+ unsigned int field_num : 1; // 0..1
+ unsigned int valid : 1; // contents are valid
+ };
+
+
+ static inline bool
+ tag_is_start_field_sync (syminfo tag)
+ {
+ return tag.symbol_num == 0 && tag.segment_num == SI_FIELD_SYNC_SEGMENT_NUM && tag.valid;
+ }
+
+ static inline bool
+ tag_is_start_field_sync_1 (syminfo tag)
+ {
+ return tag_is_start_field_sync (tag) && tag.field_num == 0;
+ }
+
+ static inline bool
+ tag_is_start_field_sync_2 (syminfo tag)
+ {
+ return tag_is_start_field_sync (tag) && tag.field_num == 1;
+ }
+
+ } /* namespace atsc */
+ } /* namespace dtv */
+} /* namespace gr */
+
+#endif /* INCLUDED_GR_DTV_ATSC_SYMINFO_H */
diff --git a/gr-dtv/lib/atsc/atsc_sync_impl.cc b/gr-dtv/lib/atsc/atsc_sync_impl.cc
new file mode 100644
index 0000000000..ec46d6b8d1
--- /dev/null
+++ b/gr-dtv/lib/atsc/atsc_sync_impl.cc
@@ -0,0 +1,196 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2014 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "atsc_sync_impl.h"
+#include "atsc_types.h"
+#include <gnuradio/io_signature.h>
+
+namespace gr {
+ namespace dtv {
+
+ atsc_sync::sptr
+ atsc_sync::make(float rate)
+ {
+ return gnuradio::get_initial_sptr
+ (new atsc_sync_impl(rate));
+ }
+
+ atsc_sync_impl::atsc_sync_impl(float rate)
+ : gr::block("dtv_atsc_sync",
+ io_signature::make(1, 1, sizeof(float)),
+ io_signature::make(1, 1, sizeof(atsc_soft_data_segment))),
+ d_next_input(0), d_rx_clock_to_symbol_freq(rate/ATSC_SYMBOL_RATE),
+ d_si(0)
+ {
+ d_loop.set_taps(LOOP_FILTER_TAP);
+ reset();
+ }
+
+ void
+ atsc_sync_impl::reset()
+ {
+ d_w = d_rx_clock_to_symbol_freq;
+ d_mu = 0.5;
+
+ for (int i = 0; i < ATSC_DATA_SEGMENT_LENGTH; i++)
+ sample_mem[i] = 0;
+
+ d_timing_adjust = 0;
+ d_counter = 0;
+ d_symbol_index = 0;
+ d_seg_locked = false;
+
+ d_sr = 0;
+
+ for (int i = 0; i < ATSC_DATA_SEGMENT_LENGTH; i++)
+ d_integrator[i] = SSI_MIN;
+ }
+
+ atsc_sync_impl::~atsc_sync_impl()
+ {
+ }
+
+ void
+ atsc_sync_impl::forecast(int noutput_items,
+ gr_vector_int &ninput_items_required)
+ {
+ unsigned ninputs = ninput_items_required.size();
+ for (unsigned i = 0; i < ninputs; i++)
+ ninput_items_required[i] = static_cast<int>(noutput_items * d_rx_clock_to_symbol_freq * ATSC_DATA_SEGMENT_LENGTH) + 1500 - 1;
+ }
+
+ int
+ atsc_sync_impl::general_work(int noutput_items,
+ gr_vector_int &ninput_items,
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items)
+ {
+ const float *in = (const float *) input_items[0];
+ atsc_soft_data_segment *soft_data_segment_out = (atsc_soft_data_segment *) output_items[0];
+
+ float interp_sample;
+
+ // amount actually consumed
+ d_si = 0;
+
+ for (output_produced = 0; output_produced < noutput_items && (d_si + (int)d_interp.ntaps()) < ninput_items[0];) {
+ // First we interpolate a sample from input to work with
+ interp_sample = d_interp.interpolate(&in[d_si], d_mu);
+
+ // Apply our timing adjustment slowly over several samples
+ d_mu += ADJUSTMENT_GAIN * 1e3 * d_timing_adjust;
+
+ double s = d_mu + d_w;
+ double float_incr = floor(s);
+ d_mu = s - float_incr;
+ d_incr = (int)float_incr;
+
+ assert (d_incr >= 1 && d_incr <= 3);
+ d_si += d_incr;
+
+ // Remember the sample at this count position
+ sample_mem[d_counter] = interp_sample;
+
+ // Is the sample positive or negative?
+ int bit = (interp_sample < 0 ? 0 : 1);
+
+ // Put the sign bit into our shift register
+ d_sr = ((bit & 1) << 3) | (d_sr >> 1);
+
+ // When +,-,-,+ (0x9, 1001) samples show up we have likely found a segment
+ // sync, it is more likely the segment sync will show up at about the same
+ // spot every ATSC_DATA_SEGMENT_LENGTH samples so we add some weight
+ // to this spot every pass to prevent random +,-,-,+ symbols from
+ // confusing our synchronizer
+ d_integrator[d_counter] += ((d_sr == 0x9) ? +2 : -1);
+ if(d_integrator[d_counter] < SSI_MIN) d_integrator[d_counter] = SSI_MIN;
+ if(d_integrator[d_counter] > SSI_MAX) d_integrator[d_counter] = SSI_MAX;
+
+ d_symbol_index++;
+ if( d_symbol_index >= ATSC_DATA_SEGMENT_LENGTH )
+ d_symbol_index = 0;
+
+ d_counter++;
+ if( d_counter >= ATSC_DATA_SEGMENT_LENGTH ) { // counter just wrapped...
+ int best_correlation_value = d_integrator[0];
+ int best_correlation_index = 0;
+
+ for(int i = 1; i < ATSC_DATA_SEGMENT_LENGTH; i++)
+ if (d_integrator[i] > best_correlation_value) {
+ best_correlation_value = d_integrator[i];
+ best_correlation_index = i;
+ }
+
+ d_seg_locked = best_correlation_value >= MIN_SEG_LOCK_CORRELATION_VALUE;
+
+ // the coefficients are -1,-1,+1,+1
+ //d_timing_adjust = sample_mem[best_correlation_index - 3] +
+ // sample_mem[best_correlation_index - 2] -
+ // sample_mem[best_correlation_index - 1] -
+ // sample_mem[best_correlation_index];
+
+ //printf( "d_timing_adjust = %f\n", d_timing_adjust );
+
+ int corr_count = best_correlation_index;
+
+ d_timing_adjust = -sample_mem[corr_count--];
+ if( corr_count < 0 ) corr_count = ATSC_DATA_SEGMENT_LENGTH - 1;
+ d_timing_adjust -= sample_mem[corr_count--];
+ if( corr_count < 0 ) corr_count = ATSC_DATA_SEGMENT_LENGTH - 1;
+ d_timing_adjust += sample_mem[corr_count--];
+ if( corr_count < 0 ) corr_count = ATSC_DATA_SEGMENT_LENGTH - 1;
+ d_timing_adjust += sample_mem[corr_count--];
+
+ d_symbol_index = SYMBOL_INDEX_OFFSET - 1 - best_correlation_index;
+ if (d_symbol_index < 0)
+ d_symbol_index += ATSC_DATA_SEGMENT_LENGTH;
+
+ d_counter = 0;
+ }
+
+ // If we are locked we can start filling and producing data packets
+ // Due to the way we lock the first data packet will almost always be
+ // half full, this is OK becouse the fs_checker will not let packets though
+ // untill a non-corrupted field packet is found
+ if( d_seg_locked ) {
+ data_mem[d_symbol_index] = interp_sample;
+
+ if( d_symbol_index >= (ATSC_DATA_SEGMENT_LENGTH - 1) )
+ {
+ for( int i = 0; i < ATSC_DATA_SEGMENT_LENGTH; i++ )
+ soft_data_segment_out[output_produced].data[i] = data_mem[i];
+ output_produced++;
+ }
+ }
+ }
+
+ consume_each(d_si);
+ return output_produced;
+
+ }
+
+ } /* namespace dtv */
+} /* namespace gr */
diff --git a/gr-dtv/lib/atsc/atsc_sync_impl.h b/gr-dtv/lib/atsc/atsc_sync_impl.h
new file mode 100644
index 0000000000..eb0ad17286
--- /dev/null
+++ b/gr-dtv/lib/atsc/atsc_sync_impl.h
@@ -0,0 +1,83 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2014 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef INCLUDED_DTV_ATSC_SYNC_IMPL_H
+#define INCLUDED_DTV_ATSC_SYNC_IMPL_H
+
+#include <gnuradio/dtv/atsc_consts.h>
+#include <gnuradio/dtv/atsc_sync.h>
+#include <gnuradio/filter/single_pole_iir.h>
+#include <gnuradio/filter/mmse_fir_interpolator_ff.h>
+
+namespace gr {
+ namespace dtv {
+
+ class atsc_sync_impl : public atsc_sync
+ {
+ private:
+ static const double LOOP_FILTER_TAP = 0.0005; // 0.0005 works
+ static const double ADJUSTMENT_GAIN = 1.0e-5 / (10 * ATSC_DATA_SEGMENT_LENGTH);
+ static const int SYMBOL_INDEX_OFFSET = 3;
+ static const int MIN_SEG_LOCK_CORRELATION_VALUE = 5;
+ static const int SSI_MIN = -16;
+ static const int SSI_MAX = 15;
+
+ gr::filter::single_pole_iir<float,float,float> d_loop; // ``VCO'' loop filter
+ gr::filter::mmse_fir_interpolator_ff d_interp;
+
+ unsigned long long d_next_input;
+ double d_rx_clock_to_symbol_freq;
+ int d_si;
+ double d_w; // ratio of PERIOD of Tx to Rx clocks
+ double d_mu; // fractional delay [0,1]
+ int d_incr;
+
+ float sample_mem[ATSC_DATA_SEGMENT_LENGTH];
+ float data_mem[ATSC_DATA_SEGMENT_LENGTH];
+
+ double d_timing_adjust;
+ int d_counter; // free running mod 832 counter
+ int d_symbol_index;
+ bool d_seg_locked;
+ int d_sr; // 4 bit shift register
+ signed char d_integrator[ATSC_DATA_SEGMENT_LENGTH];
+ int output_produced;
+
+ public:
+ atsc_sync_impl(float rate);
+ ~atsc_sync_impl();
+
+ void reset();
+
+ void forecast(int noutput_items,
+ gr_vector_int &ninput_items_required);
+
+ virtual int general_work(int noutput_items,
+ gr_vector_int &ninput_items,
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items);
+ };
+
+ } /* namespace dtv */
+} /* namespace gr */
+
+#endif /* INCLUDED_DTV_ATSC_SYNC_IMPL_H */
diff --git a/gr-dtv/lib/atsc/atsc_types.h b/gr-dtv/lib/atsc/atsc_types.h
new file mode 100644
index 0000000000..e9f82bae8c
--- /dev/null
+++ b/gr-dtv/lib/atsc/atsc_types.h
@@ -0,0 +1,269 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2001,2006,2014 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef DTV_INCLUDED_ATSC_TYPES_H
+#define DTV_INCLUDED_ATSC_TYPES_H
+
+#include <gnuradio/dtv/atsc_consts.h>
+#include <cstring>
+#include <cassert>
+
+namespace gr {
+ namespace dtv {
+
+ /*!
+ * \brief pipeline info that flows with data
+ *
+ * Not all modules need all the info
+ */
+ class plinfo {
+ public:
+ plinfo () : _flags (0), _segno (0) { }
+
+ // accessors
+
+ bool field_sync1_p () const { return (_flags & fl_field_sync1) != 0; }
+ bool field_sync2_p () const { return (_flags & fl_field_sync2) != 0; }
+ bool field_sync_p () const { return field_sync1_p () || field_sync2_p (); }
+
+ bool regular_seg_p () const { return (_flags & fl_regular_seg) != 0; }
+
+ bool in_field1_p () const { return (_flags & fl_field2) == 0; }
+ bool in_field2_p () const { return (_flags & fl_field2) != 0; }
+
+ bool first_regular_seg_p () const { return (_flags & fl_first_regular_seg) != 0; }
+
+ bool transport_error_p () const { return (_flags & fl_transport_error) != 0; }
+
+ unsigned int segno () const { return _segno; }
+ unsigned int flags () const { return _flags; }
+
+ // setters
+
+ void set_field_sync1 ()
+ {
+ _segno = 0;
+ _flags = fl_field_sync1;
+ }
+
+ void set_field_sync2 ()
+ {
+ _segno = 0;
+ _flags = fl_field_sync2 | fl_field2;
+ }
+
+ void set_regular_seg (bool field2, int segno)
+ {
+ //assert (0 <= segno && segno < ATSC_DSEGS_PER_FIELD);
+ _segno = segno;
+ _flags = fl_regular_seg;
+ if (segno == 0)
+ _flags |= fl_first_regular_seg;
+ if (segno >= ATSC_DSEGS_PER_FIELD)
+ _flags |= fl_transport_error;
+ if (field2)
+ _flags |= fl_field2;
+ }
+
+ void set_transport_error (bool error){
+ if (error)
+ _flags |= fl_transport_error;
+ else
+ _flags &= ~fl_transport_error;
+ }
+
+ // overload equality operator
+ bool operator== (const plinfo &other) const {
+ return (_flags == other._flags && _segno == other._segno);
+ }
+
+ bool operator!= (const plinfo &other) const {
+ return !(_flags == other._flags && _segno == other._segno);
+ }
+
+ /*!
+ * Set \p OUT such that it reflects a \p NSEGS_OF_DELAY
+ * pipeline delay from \p IN.
+ */
+ static void delay (plinfo &out, const plinfo &in, int nsegs_of_delay)
+ {
+ assert (in.regular_seg_p ());
+ assert (nsegs_of_delay >= 0);
+
+ int s = in.segno ();
+ if (in.in_field2_p ())
+ s += ATSC_DSEGS_PER_FIELD;
+
+ s -= nsegs_of_delay;
+ if (s < 0)
+ s += 2 * ATSC_DSEGS_PER_FIELD;
+
+ //assert (0 <= s && s < 2 * ATSC_DSEGS_PER_FIELD);
+
+ if (s < ATSC_DSEGS_PER_FIELD)
+ out.set_regular_seg (false, s); // field 1
+ else
+ out.set_regular_seg (true, s - ATSC_DSEGS_PER_FIELD); // field 2
+ }
+
+ /*!
+ * confirm that \p X is plausible
+ */
+ static void sanity_check (const plinfo &in)
+ {
+ // basic sanity checks...
+ //assert (x.segno () >= 0);
+ //assert (x.segno () < (unsigned) ATSC_DSEGS_PER_FIELD);
+ //assert ((x.flags () & ~0x3f) == 0);
+
+ //assert (x.regular_seg_p () ^ x.field_sync_p ());
+ //assert ((x.segno () != 0) ^ x.first_regular_seg_p ());
+ }
+
+ unsigned short _flags; // bitmask
+ short _segno; // segment number [-1,311] -1 is the field sync segment
+
+ protected:
+ // these three are mutually exclusive
+ // This is a regular data segment.
+ static const int fl_regular_seg = 0x0001;
+ // This is a field sync segment, for 1st half of a field.
+ static const int fl_field_sync1 = 0x0002;
+ // This is a field sync segment, for 2nd half of a field.
+ static const int fl_field_sync2 = 0x0004;
+
+ // This bit is on ONLY when fl_regular_seg is set AND when this is
+ // the first regular data segment AFTER a field sync segment. This
+ // segment causes various processing modules to reset.
+ static const int fl_first_regular_seg = 0x0008;
+
+ // which field are we in?
+ static const int fl_field2 = 0x0010; // else field 1
+
+ // This bit is set when Reed-Solomon decoding detects an error that it
+ // can't correct. Note that other error detection (e.g. Viterbi) do not
+ // set it, since Reed-Solomon will correct many of those. This bit is
+ // then copied into the final Transport Stream packet so that MPEG
+ // software can see that the 188-byte data segment has been corrupted.
+ static const int fl_transport_error = 0x0020;
+ };
+
+
+
+
+ class atsc_mpeg_packet {
+ public:
+ static const int NPAD = 68;
+ unsigned char data[ATSC_MPEG_DATA_LENGTH + 1]; // first byte is sync
+ unsigned char _pad_[NPAD]; // pad to power of 2 (256)
+
+ // overload equality operator
+ bool operator== (const atsc_mpeg_packet &other) const {
+ return std::memcmp (data, other.data, sizeof (data)) == 0;
+ };
+
+ bool operator!= (const atsc_mpeg_packet &other) const {
+ return !(std::memcmp (data, other.data, sizeof (data)) == 0);
+ };
+ };
+
+ class atsc_mpeg_packet_no_sync {
+ public:
+ static const int NPAD = 65;
+ plinfo pli;
+ unsigned char data[ATSC_MPEG_DATA_LENGTH];
+ unsigned char _pad_[NPAD]; // pad to power of 2 (256)
+
+ // overload equality operator
+ bool operator== (const atsc_mpeg_packet_no_sync &other) const {
+ return std::memcmp (data, other.data, sizeof (data)) == 0;
+ }
+
+ bool operator!= (const atsc_mpeg_packet_no_sync &other) const {
+ return !(std::memcmp (data, other.data, sizeof (data)) == 0);
+ }
+ };
+
+ class atsc_mpeg_packet_rs_encoded {
+ public:
+ static const int NPAD = 45;
+ plinfo pli;
+ unsigned char data[ATSC_MPEG_RS_ENCODED_LENGTH];
+ unsigned char _pad_[NPAD]; // pad to power of 2 (256)
+
+ // overload equality operator
+ bool operator== (const atsc_mpeg_packet_rs_encoded &other) const {
+ return std::memcmp (data, other.data, sizeof (data)) == 0;
+ }
+
+ bool operator!= (const atsc_mpeg_packet_rs_encoded &other) const {
+ return !(std::memcmp (data, other.data, sizeof (data)) == 0);
+ }
+ };
+
+
+ //! contains 832 3 bit symbols. The low 3 bits in the byte hold the symbol.
+
+ class atsc_data_segment {
+ public:
+ static const int NPAD = 188;
+ plinfo pli;
+ unsigned char data[ATSC_DATA_SEGMENT_LENGTH];
+ unsigned char _pad_[NPAD]; // pad to power of 2 (1024)
+
+ // overload equality operator
+ bool operator== (const atsc_data_segment &other) const {
+ return std::memcmp (data, other.data, sizeof (data)) == 0;
+ }
+
+ bool operator!= (const atsc_data_segment &other) const {
+ return !(std::memcmp (data, other.data, sizeof (data)) == 0);
+ }
+ };
+
+ /*!
+ * Contains 832 bipolar floating point symbols.
+ * Nominal values are +/- {1, 3, 5, 7}.
+ * This data type represents the input to the viterbi decoder.
+ */
+
+ class atsc_soft_data_segment {
+ public:
+ static const int NPAD = 764;
+ plinfo pli;
+ float data[ATSC_DATA_SEGMENT_LENGTH];
+ unsigned char _pad_[NPAD]; // pad to power of 2 (4096)
+
+ // overload equality operator
+ bool operator== (const atsc_data_segment &other) const {
+ return std::memcmp (data, other.data, sizeof (data)) == 0;
+ }
+
+ bool operator!= (const atsc_data_segment &other) const {
+ return !(std::memcmp (data, other.data, sizeof (data)) == 0);
+ }
+ };
+
+ } /* namespace dtv */
+} /* namespace gr */
+
+#endif /* _ATSC_TYPES_H_ */
diff --git a/gr-dtv/lib/atsc/atsc_viterbi_decoder_impl.cc b/gr-dtv/lib/atsc/atsc_viterbi_decoder_impl.cc
new file mode 100644
index 0000000000..430eb55a17
--- /dev/null
+++ b/gr-dtv/lib/atsc/atsc_viterbi_decoder_impl.cc
@@ -0,0 +1,139 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2014 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gnuradio/io_signature.h>
+#include "atsc_viterbi_decoder_impl.h"
+#include "atsc_types.h"
+#include <atsc_viterbi_mux.cc> // machine generated
+
+namespace gr {
+ namespace dtv {
+
+ atsc_viterbi_decoder::sptr
+ atsc_viterbi_decoder::make()
+ {
+ return gnuradio::get_initial_sptr
+ (new atsc_viterbi_decoder_impl());
+ }
+
+ atsc_viterbi_decoder_impl::atsc_viterbi_decoder_impl()
+ : sync_block("dtv_atsc_viterbi_decoder",
+ io_signature::make(1, 1, sizeof(atsc_soft_data_segment)),
+ io_signature::make(1, 1, sizeof(atsc_mpeg_packet_rs_encoded)))
+ {
+ set_output_multiple(NCODERS);
+
+ /*
+ * These fifo's handle the alignment problem caused by the
+ * inherent decoding delay of the individual viterbi decoders.
+ * The net result is that this entire block has a pipeline latency
+ * of 12 complete segments.
+ *
+ * If anybody cares, it is possible to do it with less delay, but
+ * this approach is at least somewhat understandable...
+ */
+
+ // the -4 is for the 4 sync symbols
+ int fifo_size = ATSC_DATA_SEGMENT_LENGTH - 4 - viterbi[0].delay();
+ for (int i = 0; i < NCODERS; i++)
+ fifo[i] = new fifo_t(fifo_size);
+
+ reset();
+ }
+
+ atsc_viterbi_decoder_impl::~atsc_viterbi_decoder_impl()
+ {
+ for (int i = 0; i < NCODERS; i++)
+ delete fifo[i];
+ }
+
+ void
+ atsc_viterbi_decoder_impl::reset()
+ {
+ for (int i = 0; i < NCODERS; i++)
+ fifo[i]->reset();
+ }
+
+ int
+ atsc_viterbi_decoder_impl::work(int noutput_items,
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items)
+ {
+ const atsc_soft_data_segment *in = (const atsc_soft_data_segment *) input_items[0];
+ atsc_mpeg_packet_rs_encoded *out = (atsc_mpeg_packet_rs_encoded *) output_items[0];
+
+ // The way the fs_checker works ensures we start getting packets
+ // starting with a field sync, and out input multiple is set to
+ // 12, so we should always get a mod 12 numbered first packet
+ assert(noutput_items % NCODERS == 0);
+
+ int dbwhere;
+ int dbindex;
+ int shift;
+ float symbols[NCODERS][enco_which_max];
+ unsigned char dibits[NCODERS][enco_which_max];
+
+ unsigned char out_copy[OUTPUT_SIZE];
+
+ for (int i = 0; i < noutput_items; i += NCODERS) {
+ /* Build a continuous symbol buffer for each encoder */
+ for (unsigned int encoder = 0; encoder < NCODERS; encoder++)
+ for (unsigned int k = 0; k < enco_which_max; k++)
+ symbols[encoder][k] = in[i + (enco_which_syms[encoder][k]/832)].data[enco_which_syms[encoder][k] % 832];
+
+ /* Now run each of the 12 Viterbi decoders over their subset of
+ the input symbols */
+ for (unsigned int encoder = 0; encoder < NCODERS; encoder++)
+ for (unsigned int k = 0; k < enco_which_max; k++)
+ dibits[encoder][k] = viterbi[encoder].decode(symbols[encoder][k]);
+
+ /* Move dibits into their location in the output buffer */
+ for (unsigned int encoder = 0; encoder < NCODERS; encoder++) {
+ for (unsigned int k = 0; k < enco_which_max; k++) {
+ /* Store the dibit into the output data segment */
+ dbwhere = enco_which_dibits[encoder][k];
+ dbindex = dbwhere >> 3;
+ shift = dbwhere & 0x7;
+ out_copy[dbindex] = (out_copy[dbindex] & ~(0x03 << shift)) | (fifo[encoder]->stuff(dibits[encoder][k]) << shift);
+ } /* Symbols fed into one encoder */
+ } /* Encoders */
+
+ // copy output from contiguous temp buffer into final output
+ for (int j = 0; j < NCODERS; j++) {
+ memcpy (&out[i + j].data[0],
+ &out_copy[j * OUTPUT_SIZE/NCODERS],
+ ATSC_MPEG_RS_ENCODED_LENGTH * sizeof(out_copy[0]));
+
+ // adjust pipeline info to reflect 12 segment delay
+ plinfo::delay(out[i + j].pli, in[i + j].pli, NCODERS);
+ }
+ }
+
+ return noutput_items;
+ }
+
+ } /* namespace dtv */
+} /* namespace gr */
diff --git a/gr-dtv/lib/atsc/atsc_viterbi_decoder_impl.h b/gr-dtv/lib/atsc/atsc_viterbi_decoder_impl.h
new file mode 100644
index 0000000000..b4fbbd1033
--- /dev/null
+++ b/gr-dtv/lib/atsc/atsc_viterbi_decoder_impl.h
@@ -0,0 +1,76 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2014 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef INCLUDED_DTV_ATSC_VITERBI_DECODER_IMPL_H
+#define INCLUDED_DTV_ATSC_VITERBI_DECODER_IMPL_H
+
+#include <gnuradio/dtv/atsc_viterbi_decoder.h>
+#include <gnuradio/dtv/atsc_consts.h>
+#include "atsc_syminfo_impl.h"
+#include "atsc_interleaver_fifo.h"
+
+#define USE_SIMPLE_SLICER 0
+#define NCODERS 12
+
+#if USE_SIMPLE_SLICER
+#include "atsc_fake_single_viterbi.h"
+#else
+#include "atsc_single_viterbi.h"
+#endif
+
+namespace gr {
+ namespace dtv {
+
+#if USE_SIMPLE_SLICER
+ typedef atsc_fake_single_viterbi single_viterbi_t;
+#else
+ typedef atsc_single_viterbi single_viterbi_t;
+#endif
+
+ class atsc_viterbi_decoder_impl : public atsc_viterbi_decoder
+ {
+ private:
+ int last_start;
+ typedef interleaver_fifo<unsigned char> fifo_t;
+
+ static const int SEGMENT_SIZE = ATSC_MPEG_RS_ENCODED_LENGTH; // 207
+ static const int OUTPUT_SIZE = (SEGMENT_SIZE * 12);
+ static const int INPUT_SIZE = (ATSC_DATA_SEGMENT_LENGTH * 12);
+
+ single_viterbi_t viterbi[NCODERS];
+ fifo_t *fifo[NCODERS];
+
+ public:
+ atsc_viterbi_decoder_impl();
+ ~atsc_viterbi_decoder_impl();
+
+ void reset();
+
+ virtual int work(int noutput_items,
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items);
+ };
+
+ } /* namespace dtv */
+} /* namespace gr */
+
+#endif /* INCLUDED_DTV_ATSC_VITERBI_DECODER_IMPL_H */
diff --git a/gr-dtv/lib/atsc/atsc_viterbi_gen.cc b/gr-dtv/lib/atsc/atsc_viterbi_gen.cc
new file mode 100644
index 0000000000..bff3c47736
--- /dev/null
+++ b/gr-dtv/lib/atsc/atsc_viterbi_gen.cc
@@ -0,0 +1,267 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2002,2006 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include <iostream>
+#include <stdio.h>
+
+using std::cerr;
+
+/*
+ * Trellis-encode a whole pile of 12 data segments for ATSC.
+ * This also includes scrambling the data among twelve Trellis encoders.
+ *
+ * Input is twelve 207-byte blocks of raw data (Reed-Solomon output that's
+ * been scrambled up by interleaving with other blocks).
+ *
+ * Output is 12 x 208 x 4 bytes, each byte containing a 3-bit symbol.
+ * The first 4 bytes are the segment sync symbol.
+ *
+ Got the first version of Trellis encoder coded. Compiles, but I
+ didn't realize that each data segment contains an odd number of BITS!
+ The second data segment in a field starts by pulling bits out of the
+ middles of the bytes it's encoding. You actually have to read all the
+ entries in that table on page 59 AND 60 to get it.
+
+ There's a 4-segment asymmetric pattern of bit accesses.
+ There's a 3-segment asymmetric pattern of muxing encoders.
+
+ The result is there's a 12-segment pattern that repeats throughout
+ the encoding of a field. So this routine now encodes 12 segments at once.
+
+ This encoding system was either designed by a complete idiot or by
+ a complete genius. It's highly complex when it could have been very
+ simple. Now the question is whether
+ this incredible complexity buys us anything subtle and important.
+ */
+
+#define SEGMENT_SIZE 207
+#define INPUT_SIZE (SEGMENT_SIZE * 12)
+#define DIBITS_PER_BYTE 4
+#define EXTRAS (4 * 12) /* FIXME, sync symbols and such */
+#define SYMBOLS_OUT ((INPUT_SIZE * DIBITS_PER_BYTE) + EXTRAS)
+#define SEGOF(x) ( (x) / ((SEGMENT_SIZE+1) * DIBITS_PER_BYTE))
+#define SYMOF(x) (((x) % ((SEGMENT_SIZE+1) * DIBITS_PER_BYTE))-4)
+#define ENCODERS 12
+#define ENCODER_SEG_BUMP 4
+
+
+/* Shift counts to bit numbers (high order, low order); 9x entries unused */
+static const int bit1[8] = {1, 99, 3, 98, 5, 97, 7, 96};
+static const int bit2[8] = {0, 99, 2, 98, 4, 97, 6, 96};
+
+/* Detailed Debugging */
+int debug_dec = 0;
+
+/*
+ * Build indirect data structures to say which symbols go into which
+ * encoder, and then where the resulting dibits from the encoders go.
+ */
+int
+build_decode_structures (char *fileout)
+{
+ int retval = 0;
+ int i;
+ int encoder;
+ int trellis_wheredata[ENCODERS];
+ unsigned char *symp, *next_sym_seg;
+ unsigned char symbols[SYMBOLS_OUT];
+ int chunk;
+ int shift;
+ int skip_encoder_bump;
+ int *enco_syms[ENCODERS];
+ int *enco_dibits[ENCODERS];
+ int j;
+ /* The data structures we'll build and then spit out... */
+ int sync_symbol_indices[1000];
+ int sync_symbol_indices_max;
+ int enco_which_syms[ENCODERS][INPUT_SIZE];
+ int enco_which_dibits[ENCODERS][INPUT_SIZE];
+ int enco_which_max;
+ #define BIT_PTR(int,shif) (((int) << 3) | ((shif) & 0x7))
+ /* Running indices into them as we build 'em... */
+ int *syncsyms = sync_symbol_indices;
+
+ /* Start our running pointers at the start of our per-encoder subarrays */
+ for (i = 0; i < ENCODERS; i++) {
+ enco_dibits[i] = enco_which_dibits[i];
+ enco_syms[i] = enco_which_syms[i];
+ }
+
+ encoder = ENCODERS - ENCODER_SEG_BUMP;
+ skip_encoder_bump = 0;
+ symp = symbols;
+ next_sym_seg = symp;
+
+ for (chunk = 0;
+ chunk < INPUT_SIZE;
+ chunk += ENCODERS) {
+ /* Associate data bytes with the Trellis encoders.
+ They get loaded or stored in an order that depends on where we are in the
+ segment sync progress (sigh).
+ GRR! When the chunk reload happens at the same time as the
+ segment boundary, we should bump the encoder NOW for the reload,
+ rather than LATER during the bitshift transition!!! */
+ if (symp >= next_sym_seg) {
+ encoder = (encoder + ENCODER_SEG_BUMP) % ENCODERS;
+ skip_encoder_bump = 1;
+ }
+
+ /* Remember where the data bytes are going to go, once we've
+ accumulated them from the 12 interleaved decoders */
+ for (i = 0; i < ENCODERS; i++) {
+ trellis_wheredata[encoder] = chunk+i;
+ encoder++;
+ if (encoder >= ENCODERS) encoder = 0;
+ }
+
+ for (shift = 6; shift >= 0; shift -= 2) {
+
+ /* Segment boundaries happen to occur on some bitshift transitions. */
+ if (symp >= next_sym_seg) {
+ /* Segment transition. Output a data segment sync symbol, and
+ mess with the trellis encoder mux. */
+ *syncsyms++ = symp - symbols;
+ symp += 4;
+ next_sym_seg = symp + (SEGMENT_SIZE * DIBITS_PER_BYTE);
+
+ if (!skip_encoder_bump)
+ encoder = (encoder + ENCODER_SEG_BUMP) % ENCODERS;
+ skip_encoder_bump = 0;
+ }
+
+ /* Now run each of the 12 Trellis encoders to spit out 12 symbols.
+ Each encoder takes input from the same byte of the chunk, but the
+ outputs of the encoders come out in various orders.
+ NOPE -- this is false. The encoders take input from various
+ bytes of the chunk (which changes at segment sync time), AND
+ they also come out in various orders. You really do have to
+ keep separate track of: the datasegs bytes, the encoders, and
+ the symbol bytes -- because they're all moving with respect to
+ each other!!! */
+ for (i = 0; i < ENCODERS; i++) {
+ if (debug_dec)
+ printf ("Seg %ld Symb %3ld Trell %2d Byte %6d Bits %d-%d = ",
+ (long) SEGOF(symp-symbols), (long) SYMOF(symp-symbols),
+ encoder, trellis_wheredata[encoder],
+ bit1[shift], bit2[shift]);
+
+ /* Decoding: Grab symbol, run through decoder, slice dibit into
+ buffer. */
+ /* This symbol goes into this encoder next */
+ *(enco_syms[encoder]++) = symp - symbols;
+ symp++;
+ /* The next output from this encoder goes into these dibits */
+ *(enco_dibits[encoder]++) = BIT_PTR(trellis_wheredata[encoder], shift);
+
+ encoder++; if (encoder >= ENCODERS) encoder = 0;
+ } /* Encoders */
+ } /* Bit shifts */
+
+#if 0
+ /* Now dump out the chunk of 12 data bytes that the twelve decoders have
+ accumulated. */
+ unsigned char trellis_buffer[ENCODERS];
+ unsigned char dibit;
+ unsigned char symbol;
+ int save_state;
+ for (i = 0; i < ENCODERS; i++) {
+ datasegs [trellis_wheredata[encoder]] = trellis_buffer[encoder];
+ encoder++;
+ if (encoder >= ENCODERS) encoder = 0;
+ } /* Dumping encoder bytes */
+#endif
+ } /* Chunks */
+
+ /* Now print the resulting data structures in C++ */
+
+ if (!freopen(fileout, "w", stdout))
+ return 2;
+
+ printf ("/*\n\
+ * atsc_viterbi_mux.cc\n\
+ *\n\
+ * Data structures for knowing which symbols are fed to which\n\
+ * Viterbi decoders, and then where to put the resulting output dibits.\n\
+ *\n\
+ * Generated by 'atsc_viterbi_gen.cc'.\n\
+ */\n\n");
+ sync_symbol_indices_max = syncsyms - sync_symbol_indices;
+ printf ("const unsigned int sync_symbol_indices_max = %d;\n",
+ sync_symbol_indices_max);
+ printf ("const unsigned int sync_symbol_indices[%d] = {\n ",
+ sync_symbol_indices_max);
+ for (i = 0; i < sync_symbol_indices_max; i++) {
+ printf ("%d,%s", sync_symbol_indices[i], (7 == i%8)? "\n ": " ");
+ }
+ printf ("};\n\n");
+
+ enco_which_max = enco_dibits[0] - enco_which_dibits[0];
+ for (i = 0; i < ENCODERS; i++)
+ if (enco_which_max != enco_dibits[i] - enco_which_dibits[i]) {
+ cerr << "Encoder " << i << " has different max_dibits " <<
+ enco_dibits[i] - enco_which_dibits[i] << " than " << enco_which_max;
+ retval = 3;
+ }
+
+ printf ("const unsigned int enco_which_max = %d;\n" , enco_which_max);
+
+ printf ("const unsigned int enco_which_syms[%d][%d] = {\n",
+ ENCODERS, enco_which_max);
+ for (i = 0; i < ENCODERS; i++) {
+ printf (" /* %d */\n {", i);
+ for (j = 0; j < enco_which_max; j++)
+ printf ("%d,%s", enco_which_syms[i][j], (7 == j%8)? "\n ": " ");
+ printf ("},\n");
+ }
+ printf ("};\n\n");
+
+ printf ("const unsigned int enco_which_dibits[%d][%d] = {\n",
+ ENCODERS, enco_which_max);
+ for (i = 0; i < ENCODERS; i++) {
+ printf (" /* %d */\n {", i);
+ for (j = 0; j < enco_which_max; j++)
+ printf ("%d,%s", enco_which_dibits[i][j], (7 == j%8)? "\n ": " ");
+ printf ("},\n");
+ }
+ printf ("};\n\n");
+ return retval;
+}
+
+int
+usage()
+{
+ cerr << "atsc_viterbi_gen: Usage:\n";
+ cerr << " ./atsc_viterbi_gen -o atsc_viterbi_mux.cc\n";
+ cerr << "That's all, folks!\n";
+ return 1;
+}
+
+
+int
+main(int argc, char **argv)
+{
+ if (argc != 3) return usage();
+ if (argv[1][0] != '-'
+ || argv[1][1] != 'o'
+ || argv[1][2] != 0 ) return usage();
+ return build_decode_structures(argv[2]);
+}
diff --git a/gr-dtv/lib/atsc/interleaver_fifo.h b/gr-dtv/lib/atsc/interleaver_fifo.h
new file mode 100644
index 0000000000..bc23b2d5d0
--- /dev/null
+++ b/gr-dtv/lib/atsc/interleaver_fifo.h
@@ -0,0 +1,84 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2014 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef _INTERLEAVER_FIFO_H_
+#define _INTERLEAVER_FIFO_H_
+
+#include <string.h>
+
+/*!
+ * \brief template class for interleaver fifo
+ */
+
+template<class symbol_type>
+class interleaver_fifo {
+ public:
+
+ interleaver_fifo (unsigned int size);
+ ~interleaver_fifo ();
+
+ //! reset interleaver (flushes contents and resets commutator)
+ void reset ();
+
+ //! stuff a symbol into the fifo and return the oldest
+ symbol_type stuff (symbol_type input){
+ if (m_size == 0)
+ return input;
+
+ symbol_type retval = m_fifo[m_position];
+ m_fifo[m_position] = input;
+ m_position++;
+ if (m_position >= m_size)
+ m_position = 0;
+
+ return retval;
+ }
+
+protected:
+ unsigned int m_size;
+ unsigned int m_position;
+ symbol_type *m_fifo;
+};
+
+template<class symbol_type>
+interleaver_fifo<symbol_type>::interleaver_fifo (unsigned int size)
+{
+ m_size = size;
+ m_position = 0;
+ m_fifo = new symbol_type[size];
+ memset (m_fifo, 0, m_size * sizeof (symbol_type));
+}
+
+template<class symbol_type>
+interleaver_fifo<symbol_type>::~interleaver_fifo ()
+{
+ delete [] m_fifo;
+}
+
+template<class symbol_type> void
+interleaver_fifo<symbol_type>::reset ()
+{
+ m_position = 0;
+ memset (m_fifo, 0, m_size * sizeof (symbol_type));
+}
+
+#endif /* _INTERLEAVER_FIFO_H_ */
diff --git a/gr-dtv/lib/gnuradio-dtv.rc.in b/gr-dtv/lib/gnuradio-dtv.rc.in
new file mode 100644
index 0000000000..0909e4fc8b
--- /dev/null
+++ b/gr-dtv/lib/gnuradio-dtv.rc.in
@@ -0,0 +1,55 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2014 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include <afxres.h>
+
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION @MAJOR_VERSION@,@API_COMPAT@,@RC_MINOR_VERSION@,@RC_MAINT_VERSION@
+ PRODUCTVERSION @MAJOR_VERSION@,@API_COMPAT@,@RC_MINOR_VERSION@,@RC_MAINT_VERSION@
+ FILEFLAGSMASK 0x3fL
+#ifndef NDEBUG
+ FILEFLAGS 0x0L
+#else
+ FILEFLAGS 0x1L
+#endif
+ FILEOS VOS__WINDOWS32
+ FILETYPE VFT_DLL
+ FILESUBTYPE VFT2_DRV_INSTALLABLE
+ BEGIN
+ BLOCK "StringFileInfo"
+ BEGIN
+ BLOCK "040904b0"
+ BEGIN
+ VALUE "FileDescription", "gnuradio-dtv"
+ VALUE "FileVersion", "@VERSION@"
+ VALUE "InternalName", "gnuradio-dtv.dll"
+ VALUE "LegalCopyright", "Licensed under GPLv3 or any later version"
+ VALUE "OriginalFilename", "gnuradio-dtv.dll"
+ VALUE "ProductName", "gnuradio-dtv"
+ VALUE "ProductVersion", "@VERSION@"
+ END
+ END
+ BLOCK "VarFileInfo"
+ BEGIN
+ VALUE "Translation", 0x409, 1200
+ END
+ END
diff --git a/gr-dtv/python/dtv/CMakeLists.txt b/gr-dtv/python/dtv/CMakeLists.txt
new file mode 100644
index 0000000000..543c2c14cf
--- /dev/null
+++ b/gr-dtv/python/dtv/CMakeLists.txt
@@ -0,0 +1,50 @@
+# Copyright 2014 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+########################################################################
+# Install python examples
+########################################################################
+include(GrPython)
+
+GR_PYTHON_INSTALL(
+ FILES
+ __init__.py
+ atsc_rx.py
+ atsc_rx_filter.py
+ DESTINATION ${GR_PYTHON_DIR}/gnuradio/dtv
+ COMPONENT "dtv_python"
+)
+
+########################################################################
+# Handle the unit tests
+########################################################################
+if(ENABLE_TESTING)
+ set(GR_TEST_TARGET_DEPS "")
+ set(GR_TEST_LIBRARY_DIRS "")
+ set(GR_TEST_PYTHON_DIRS
+ ${CMAKE_BINARY_DIR}/gnuradio-runtime/python
+ )
+
+ include(GrTest)
+ file(GLOB py_qa_test_files "qa_*.py")
+ foreach(py_qa_test_file ${py_qa_test_files})
+ get_filename_component(py_qa_test_name ${py_qa_test_file} NAME_WE)
+ GR_ADD_TEST(${py_qa_test_name} ${QA_PYTHON_EXECUTABLE} ${PYTHON_DASH_B} ${py_qa_test_file})
+ endforeach(py_qa_test_file)
+endif(ENABLE_TESTING)
diff --git a/gr-dtv/python/dtv/__init__.py b/gr-dtv/python/dtv/__init__.py
new file mode 100644
index 0000000000..8d2b8bfbcf
--- /dev/null
+++ b/gr-dtv/python/dtv/__init__.py
@@ -0,0 +1,37 @@
+#
+# Copyright 2014 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+#
+
+# The presence of this file turns this directory into a Python package
+
+'''
+Blocks and utilities for digital TV module.
+'''
+import os
+
+try:
+ from dtv_swig import *
+except ImportError:
+ dirname, filename = os.path.split(os.path.abspath(__file__))
+ __path__.append(os.path.join(dirname, "..", "..", "swig"))
+ from dtv_swig import *
+
+# Import pure python code here
+from atsc_rx import *
diff --git a/gr-dtv/python/dtv/atsc_rx.py b/gr-dtv/python/dtv/atsc_rx.py
new file mode 100644
index 0000000000..590e5f041c
--- /dev/null
+++ b/gr-dtv/python/dtv/atsc_rx.py
@@ -0,0 +1,70 @@
+#!/usr/bin/env /usr/bin/python
+#
+# Copyright 2014 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+from gnuradio import gr, filter, analog
+from atsc_rx_filter import *
+
+class atsc_rx(gr.hier_block2):
+ def __init__(self, input_rate, sps):
+ gr.hier_block2.__init__(self, "atsc_rx",
+ gr.io_signature(1, 1, gr.sizeof_gr_complex), # Input signature
+ gr.io_signature(1, 1, gr.sizeof_char)) # Output signature
+
+ # ATSC receiver filter/interpolator
+ rx_filt = atsc_rx_filter(input_rate, sps)
+
+ # Lock on to pilot tone, shift to DC, then discard Q channel
+ output_rate = ATSC_SYMBOL_RATE*sps
+ pll = dtv.atsc_fpll(output_rate)
+
+ # Remove pilot tone now at DC
+ dcr = filter.dc_blocker_ff(4096)
+
+ # Normalize signal to proper constellation amplitude
+ agc = analog.agc_ff(1e-5, 4.0)
+
+ # Synchronize bit and segement timing
+ btl = dtv.atsc_sync(output_rate)
+
+ # Check for correct field sync
+ fsc = dtv.atsc_fs_checker()
+
+ # Equalize channel using training sequences
+ equ = dtv.atsc_equalizer()
+
+ # Remove convolutional trellis coding
+ vit = dtv.atsc_viterbi_decoder()
+
+ # Remove convolutional interleaving
+ dei = dtv.atsc_deinterleaver()
+
+ # Reed-Solomon decode
+ rsd = dtv.atsc_rs_decoder()
+
+ # Derandomize MPEG2-TS packet
+ der = dtv.atsc_derandomizer()
+
+ # Remove padding from packet
+ dep = dtv.atsc_depad()
+
+ # Connect pipeline
+ self.connect(self, rx_filt, pll, dcr, agc, btl, fsc, equ)
+ self.connect(equ, vit, dei, rsd, der, dep, self)
diff --git a/gr-dtv/python/dtv/atsc_rx_filter.py b/gr-dtv/python/dtv/atsc_rx_filter.py
new file mode 100644
index 0000000000..e860fa265a
--- /dev/null
+++ b/gr-dtv/python/dtv/atsc_rx_filter.py
@@ -0,0 +1,55 @@
+#!/usr/bin/env /usr/bin/python
+#
+# Copyright 2014 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+from gnuradio import gr, filter
+import dtv_swig as dtv
+
+# FIXME move these into separate constants module
+ATSC_CHANNEL_BW = 6.0e6
+ATSC_SYMBOL_RATE = 4.5e6/286*684 # ~10.76 Mbaud
+ATSC_RRC_SYMS = 8 # filter kernel extends over 2N+1 symbols
+
+class atsc_rx_filter(gr.hier_block2):
+ def __init__(self, input_rate, sps):
+ gr.hier_block2.__init__(self, "atsc_rx_filter",
+ gr.io_signature(1, 1, gr.sizeof_gr_complex), # Input signature
+ gr.io_signature(1, 1, gr.sizeof_gr_complex)) # Output signature
+
+ # Create matched RX filter with RRC response for fractional
+ # interpolator.
+ nfilts = 16
+ output_rate = ATSC_SYMBOL_RATE*sps # Desired oversampled sample rate
+ filter_rate = input_rate*nfilts
+ symbol_rate = ATSC_SYMBOL_RATE/2.0 # One-sided bandwidth of sideband
+ excess_bw = 0.1152 #1.0-(0.5*ATSC_SYMBOL_RATE/ATSC_CHANNEL_BW) # ~10.3%
+ ntaps = int((2*ATSC_RRC_SYMS+1)*sps*nfilts)
+ interp = output_rate/input_rate
+ gain = nfilts*symbol_rate/filter_rate
+ rrc_taps = filter.firdes.root_raised_cosine(gain, # Filter gain
+ filter_rate, # PFB filter prototype rate
+ symbol_rate, # ATSC symbol rate
+ excess_bw, # ATSC RRC excess bandwidth
+ ntaps) # Length of filter
+
+ pfb = filter.pfb_arb_resampler_ccf(interp, rrc_taps, nfilts)
+
+ # Connect pipeline
+ self.connect(self, pfb, self)
diff --git a/gr-dtv/python/dtv/qa_dtv.py b/gr-dtv/python/dtv/qa_dtv.py
new file mode 100755
index 0000000000..a0f6edf801
--- /dev/null
+++ b/gr-dtv/python/dtv/qa_dtv.py
@@ -0,0 +1,37 @@
+#!/usr/bin/env python
+#
+# Copyright 2014 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+#
+
+from gnuradio import gr, gr_unittest, dtv
+
+class test_dtv(gr_unittest.TestCase):
+
+ def setUp(self):
+ self.tb = gr.top_block()
+
+ def tearDown(self):
+ self.tb = None
+
+ def test_000(self):
+ pass
+
+if __name__ == '__main__':
+ gr_unittest.run(test_dtv, "test_dtv.xml")
diff --git a/gr-dtv/swig/CMakeLists.txt b/gr-dtv/swig/CMakeLists.txt
new file mode 100644
index 0000000000..f1899a4964
--- /dev/null
+++ b/gr-dtv/swig/CMakeLists.txt
@@ -0,0 +1,56 @@
+# Copyright 2014 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+########################################################################
+# Setup swig generation
+########################################################################
+include(GrPython)
+include(GrSwig)
+
+set(GR_SWIG_INCLUDE_DIRS
+ ${GR_DTV_INCLUDE_DIRS}
+ ${GNURADIO_RUNTIME_SWIG_INCLUDE_DIRS}
+ ${Boost_INCLUDE_DIRS}
+)
+
+if(ENABLE_GR_CTRLPORT)
+ list(APPEND GR_SWIG_FLAGS "-DGR_CTRLPORT")
+ list(APPEND GR_SWIG_INCLUDE_DIRS ${ICE_INCLUDE_DIR})
+endif(ENABLE_GR_CTRLPORT)
+
+set(GR_SWIG_DOC_FILE ${CMAKE_CURRENT_BINARY_DIR}/dtv_swig_doc.i)
+set(GR_SWIG_DOC_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/../include/gnuradio/dtv)
+set(GR_SWIG_DOCS_TARGET_DEPS runtime_swig_swig_doc)
+set(GR_SWIG_LIBRARIES gnuradio-dtv)
+
+GR_SWIG_MAKE(dtv_swig dtv_swig.i)
+
+GR_SWIG_INSTALL(
+ TARGETS dtv_swig
+ DESTINATION ${GR_PYTHON_DIR}/gnuradio/dtv
+ COMPONENT "dtv_python"
+)
+
+install(
+ FILES
+ dtv_swig.i
+ ${CMAKE_CURRENT_BINARY_DIR}/dtv_swig_doc.i
+ DESTINATION ${GR_INCLUDE_DIR}/gnuradio/swig
+ COMPONENT "dtv_swig"
+)
diff --git a/gr-dtv/swig/dtv_swig.i b/gr-dtv/swig/dtv_swig.i
new file mode 100644
index 0000000000..91c910d52a
--- /dev/null
+++ b/gr-dtv/swig/dtv_swig.i
@@ -0,0 +1,60 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2014 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#define DTV_API
+
+%include "gnuradio.i"
+
+//load generated python docstrings
+%include "dtv_swig_doc.i"
+
+%{
+#include "gnuradio/dtv/atsc_deinterleaver.h"
+#include "gnuradio/dtv/atsc_depad.h"
+#include "gnuradio/dtv/atsc_derandomizer.h"
+#include "gnuradio/dtv/atsc_equalizer.h"
+#include "gnuradio/dtv/atsc_fpll.h"
+#include "gnuradio/dtv/atsc_fs_checker.h"
+#include "gnuradio/dtv/atsc_rs_decoder.h"
+#include "gnuradio/dtv/atsc_sync.h"
+#include "gnuradio/dtv/atsc_viterbi_decoder.h"
+%}
+
+%include "gnuradio/dtv/atsc_deinterleaver.h"
+%include "gnuradio/dtv/atsc_depad.h"
+%include "gnuradio/dtv/atsc_derandomizer.h"
+%include "gnuradio/dtv/atsc_equalizer.h"
+%include "gnuradio/dtv/atsc_fpll.h"
+%include "gnuradio/dtv/atsc_fs_checker.h"
+%include "gnuradio/dtv/atsc_rs_decoder.h"
+%include "gnuradio/dtv/atsc_sync.h"
+%include "gnuradio/dtv/atsc_viterbi_decoder.h"
+
+GR_SWIG_BLOCK_MAGIC2(dtv, atsc_deinterleaver);
+GR_SWIG_BLOCK_MAGIC2(dtv, atsc_depad);
+GR_SWIG_BLOCK_MAGIC2(dtv, atsc_derandomizer);
+GR_SWIG_BLOCK_MAGIC2(dtv, atsc_equalizer)
+GR_SWIG_BLOCK_MAGIC2(dtv, atsc_fpll);
+GR_SWIG_BLOCK_MAGIC2(dtv, atsc_fs_checker);
+GR_SWIG_BLOCK_MAGIC2(dtv, atsc_rs_decoder);
+GR_SWIG_BLOCK_MAGIC2(dtv, atsc_sync);
+GR_SWIG_BLOCK_MAGIC2(dtv, atsc_viterbi_decoder);
diff --git a/gr-fcd/examples/grc/CMakeLists.txt b/gr-fcd/examples/grc/CMakeLists.txt
index e33fdf1825..5e883e3754 100644
--- a/gr-fcd/examples/grc/CMakeLists.txt
+++ b/gr-fcd/examples/grc/CMakeLists.txt
@@ -19,7 +19,7 @@
INSTALL(FILES
fcd_apt_rx.grc
- fcd_fft_wx.grc
+ fcd_fft.grc
fcd_nfm_rx.grc
DESTINATION ${GR_PKG_FCD_EXAMPLES_DIR}
COMPONENT "fcd_examples"
diff --git a/gr-fcd/examples/grc/fcd_apt_rx.grc b/gr-fcd/examples/grc/fcd_apt_rx.grc
index 3c88db7edd..f68d235f3e 100644
--- a/gr-fcd/examples/grc/fcd_apt_rx.grc
+++ b/gr-fcd/examples/grc/fcd_apt_rx.grc
@@ -1,6 +1,6 @@
<?xml version='1.0' encoding='ASCII'?>
<flow_graph>
- <timestamp>Mon Mar 18 10:04:36 2013</timestamp>
+ <timestamp>Mon Jul 14 15:02:48 2014</timestamp>
<block>
<key>options</key>
<param>
@@ -29,7 +29,7 @@
</param>
<param>
<key>generate_options</key>
- <value>wx_gui</value>
+ <value>qt_gui</value>
</param>
<param>
<key>category</key>
@@ -52,6 +52,10 @@
<value></value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(10, 10)</value>
</param>
@@ -61,42 +65,107 @@
</param>
</block>
<block>
- <key>variable_static_text</key>
+ <key>variable</key>
<param>
<key>id</key>
- <value>rec_info</value>
+ <value>wav_file</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>label</key>
- <value>Recording to</value>
+ <key>value</key>
+ <value>prefix + datetime.now().strftime("%Y.%m.%d.%H.%M.%S") + ".wav"</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(803, 441)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable</key>
+ <param>
+ <key>id</key>
+ <value>prefix</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>value</key>
- <value>wav_file</value>
+ <value>"FCD_APT_REC-"</value>
</param>
<param>
- <key>converver</key>
- <value>str_converter</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>formatter</key>
- <value>None</value>
+ <key>_coordinate</key>
+ <value>(666, 442)</value>
</param>
<param>
- <key>grid_pos</key>
- <value>1,1,1,1</value>
+ <key>_rotation</key>
+ <value>0</value>
+ </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>96000</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(190, 11)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable</key>
+ <param>
+ <key>id</key>
+ <value>max_dev</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>17000</value>
</param>
<param>
- <key>notebook</key>
+ <key>alias</key>
<value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(641, 14)</value>
+ <value>(282, 11)</value>
</param>
<param>
<key>_rotation</key>
@@ -115,7 +184,7 @@
</param>
<param>
<key>device_name</key>
- <value>hw:1</value>
+ <value>hw:0</value>
</param>
<param>
<key>freq</key>
@@ -150,8 +219,24 @@
<value>1.0</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(68, 215)</value>
+ <value>(65, 134)</value>
</param>
<param>
<key>_rotation</key>
@@ -159,50 +244,62 @@
</param>
</block>
<block>
- <key>variable_chooser</key>
+ <key>analog_fm_demod_cf</key>
<param>
<key>id</key>
- <value>fcd_lna_gain</value>
+ <value>analog_fm_demod_cf_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>label</key>
- <value>LNA gain [dB]</value>
+ <key>chan_rate</key>
+ <value>samp_rate</value>
</param>
<param>
- <key>value</key>
- <value>20.0</value>
+ <key>audio_decim</key>
+ <value>2</value>
</param>
<param>
- <key>choices</key>
- <value>[30.0, 25.0, 20.0, 17.5, 15.0, 12.5, 10.0, 7.5, 5.0, 2.5, 0.0, -2.5, -5.0]</value>
+ <key>deviation</key>
+ <value>max_dev</value>
</param>
<param>
- <key>labels</key>
- <value>[]</value>
+ <key>audio_pass</key>
+ <value>5000</value>
</param>
<param>
- <key>type</key>
- <value>drop_down</value>
+ <key>audio_stop</key>
+ <value>7000</value>
</param>
<param>
- <key>style</key>
- <value>wx.RA_HORIZONTAL</value>
+ <key>gain</key>
+ <value>1.0</value>
</param>
<param>
- <key>grid_pos</key>
- <value>2,0,1,1</value>
+ <key>tau</key>
+ <value>75e-6</value>
</param>
<param>
- <key>notebook</key>
+ <key>alias</key>
<value></value>
</param>
<param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(247, 405)</value>
+ <value>(602, 150)</value>
</param>
<param>
<key>_rotation</key>
@@ -210,50 +307,54 @@
</param>
</block>
<block>
- <key>variable_chooser</key>
+ <key>rational_resampler_xxx</key>
<param>
<key>id</key>
- <value>sat_freq</value>
+ <value>rational_resampler_xxx_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>label</key>
- <value>Satellite</value>
+ <key>type</key>
+ <value>fff</value>
</param>
<param>
- <key>value</key>
- <value>137500000</value>
+ <key>interp</key>
+ <value>11025</value>
</param>
<param>
- <key>choices</key>
- <value>[137500000,137620000,137912500,137100000]</value>
+ <key>decim</key>
+ <value>48000</value>
</param>
<param>
- <key>labels</key>
- <value>["NOAA-15","NOAA-17","NOAA-18","NOAA-19"]</value>
+ <key>taps</key>
+ <value>[]</value>
</param>
<param>
- <key>type</key>
- <value>drop_down</value>
+ <key>fbw</key>
+ <value>0</value>
</param>
<param>
- <key>style</key>
- <value>wx.RA_HORIZONTAL</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>grid_pos</key>
- <value>1,0,1,1</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>notebook</key>
- <value></value>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(58, 403)</value>
+ <value>(588, 342)</value>
</param>
<param>
<key>_rotation</key>
@@ -261,90 +362,112 @@
</param>
</block>
<block>
- <key>wxgui_fftsink2</key>
+ <key>audio_sink</key>
<param>
<key>id</key>
- <value>fftsink</value>
+ <value>audio_sink</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
+ <key>samp_rate</key>
+ <value>48000</value>
</param>
<param>
- <key>title</key>
- <value>FCD Spectrum</value>
+ <key>device_name</key>
+ <value></value>
</param>
<param>
- <key>samp_rate</key>
- <value>samp_rate</value>
+ <key>ok_to_block</key>
+ <value>True</value>
</param>
<param>
- <key>baseband_freq</key>
- <value>sat_freq</value>
+ <key>num_inputs</key>
+ <value>1</value>
</param>
<param>
- <key>y_per_div</key>
- <value>10</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>y_divs</key>
- <value>10</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>ref_level</key>
- <value>0.0</value>
+ <key>_coordinate</key>
+ <value>(831, 198)</value>
</param>
<param>
- <key>ref_scale</key>
- <value>1.0</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
+ </block>
+ <block>
+ <key>import</key>
<param>
- <key>fft_size</key>
- <value>512</value>
+ <key>id</key>
+ <value>import_0</value>
</param>
<param>
- <key>fft_rate</key>
- <value>15</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>peak_hold</key>
- <value>False</value>
+ <key>import</key>
+ <value>from datetime import datetime</value>
</param>
<param>
- <key>average</key>
- <value>False</value>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(549, 442)</value>
</param>
<param>
- <key>avg_alpha</key>
+ <key>_rotation</key>
<value>0</value>
</param>
+ </block>
+ <block>
+ <key>blocks_wavfile_sink</key>
<param>
- <key>win</key>
- <value>None</value>
+ <key>id</key>
+ <value>wavfile_sink</value>
</param>
<param>
- <key>win_size</key>
- <value></value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>grid_pos</key>
- <value>0,0,1,2</value>
+ <key>file</key>
+ <value>wav_file</value>
+ </param>
+ <param>
+ <key>nchan</key>
+ <value>1</value>
</param>
<param>
- <key>notebook</key>
+ <key>samp_rate</key>
+ <value>11025</value>
+ </param>
+ <param>
+ <key>bits_per_sample</key>
+ <value>16</value>
+ </param>
+ <param>
+ <key>alias</key>
<value></value>
</param>
<param>
- <key>freqvar</key>
- <value>None</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(375, 11)</value>
+ <value>(842, 350)</value>
</param>
<param>
<key>_rotation</key>
@@ -352,22 +475,70 @@
</param>
</block>
<block>
- <key>variable</key>
+ <key>low_pass_filter</key>
<param>
<key>id</key>
- <value>samp_rate</value>
+ <value>low_pass_filter</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>96000</value>
+ <key>type</key>
+ <value>fir_filter_ccf</value>
+ </param>
+ <param>
+ <key>decim</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>interp</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>gain</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>samp_rate</key>
+ <value>samp_rate</value>
+ </param>
+ <param>
+ <key>cutoff_freq</key>
+ <value>25000</value>
+ </param>
+ <param>
+ <key>width</key>
+ <value>5000</value>
+ </param>
+ <param>
+ <key>win</key>
+ <value>firdes.WIN_HAMMING</value>
+ </param>
+ <param>
+ <key>beta</key>
+ <value>6.76</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(190, 11)</value>
+ <value>(403, 150)</value>
</param>
<param>
<key>_rotation</key>
@@ -375,80 +546,98 @@
</param>
</block>
<block>
- <key>variable</key>
+ <key>variable_qtgui_chooser</key>
<param>
<key>id</key>
- <value>max_dev</value>
+ <value>sat_freq</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>17000</value>
+ <key>label</key>
+ <value>Satellite</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(282, 11)</value>
+ <key>type</key>
+ <value>real</value>
</param>
<param>
- <key>_rotation</key>
+ <key>num_opts</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>blocks_wavfile_sink</key>
<param>
- <key>id</key>
- <value>wavfile_sink</value>
+ <key>value</key>
+ <value>137500000</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>options</key>
+ <value>[137500000,137620000,137912500,137100000]</value>
</param>
<param>
- <key>file</key>
- <value>wav_file</value>
+ <key>labels</key>
+ <value>["NOAA-15","NOAA-17","NOAA-18","NOAA-19"]</value>
</param>
<param>
- <key>nchan</key>
+ <key>option0</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>label0</key>
+ <value></value>
+ </param>
+ <param>
+ <key>option1</key>
<value>1</value>
</param>
<param>
- <key>samp_rate</key>
- <value>11025</value>
+ <key>label1</key>
+ <value></value>
</param>
<param>
- <key>bits_per_sample</key>
- <value>16</value>
+ <key>option2</key>
+ <value>2</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(845, 431)</value>
+ <key>label2</key>
+ <value></value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>option3</key>
+ <value>3</value>
</param>
- </block>
- <block>
- <key>import</key>
<param>
- <key>id</key>
- <value>import_0</value>
+ <key>label3</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>option4</key>
+ <value>4</value>
</param>
<param>
- <key>import</key>
- <value>from datetime import datetime</value>
+ <key>label4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>widget</key>
+ <value>combo_box</value>
+ </param>
+ <param>
+ <key>orient</key>
+ <value>Qt.QVBoxLayout</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value>1,0,1,1</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(552, 523)</value>
+ <value>(57, 360)</value>
</param>
<param>
<key>_rotation</key>
@@ -456,22 +645,42 @@
</param>
</block>
<block>
- <key>variable</key>
+ <key>variable_qtgui_label</key>
<param>
<key>id</key>
- <value>prefix</value>
+ <value>rec_info</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
+ <key>label</key>
+ <value>Recording to</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>string</value>
+ </param>
+ <param>
<key>value</key>
- <value>"FCD_APT_REC-"</value>
+ <value>wav_file</value>
+ </param>
+ <param>
+ <key>formatter</key>
+ <value>None</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value>1,1,1,1</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(669, 523)</value>
+ <value>(761, 20)</value>
</param>
<param>
<key>_rotation</key>
@@ -479,112 +688,254 @@
</param>
</block>
<block>
- <key>variable</key>
+ <key>qtgui_freq_sink_x</key>
<param>
<key>id</key>
- <value>wav_file</value>
+ <value>qtgui_freq_sink_x_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>prefix + datetime.now().strftime("%Y.%m.%d.%H.%M.%S") + ".wav"</value>
+ <key>type</key>
+ <value>complex</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(806, 522)</value>
+ <key>name</key>
+ <value>""</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>fftsize</key>
+ <value>512</value>
</param>
- </block>
- <block>
- <key>low_pass_filter</key>
<param>
- <key>id</key>
- <value>low_pass_filter</value>
+ <key>wintype</key>
+ <value>firdes.WIN_BLACKMAN_hARRIS</value>
</param>
<param>
- <key>_enabled</key>
+ <key>fc</key>
+ <value>sat_freq</value>
+ </param>
+ <param>
+ <key>bw</key>
+ <value>samp_rate</value>
+ </param>
+ <param>
+ <key>grid</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>autoscale</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>average</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>ymin</key>
+ <value>-140</value>
+ </param>
+ <param>
+ <key>ymax</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>nconnections</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>update_time</key>
+ <value>0.10</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value>0,0,1,2</value>
+ </param>
+ <param>
+ <key>showports</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>fir_filter_ccf</value>
+ <key>label1</key>
+ <value></value>
</param>
<param>
- <key>decim</key>
+ <key>width1</key>
<value>1</value>
</param>
<param>
- <key>interp</key>
+ <key>color1</key>
+ <value>"blue"</value>
+ </param>
+ <param>
+ <key>alpha1</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width2</key>
<value>1</value>
</param>
<param>
- <key>gain</key>
+ <key>color2</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>alpha2</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width3</key>
<value>1</value>
</param>
<param>
- <key>samp_rate</key>
- <value>samp_rate</value>
+ <key>color3</key>
+ <value>"green"</value>
</param>
<param>
- <key>cutoff_freq</key>
- <value>25000</value>
+ <key>alpha3</key>
+ <value>1.0</value>
</param>
<param>
- <key>width</key>
- <value>5000</value>
+ <key>label4</key>
+ <value></value>
</param>
<param>
- <key>win</key>
- <value>firdes.WIN_HAMMING</value>
+ <key>width4</key>
+ <value>1</value>
</param>
<param>
- <key>beta</key>
- <value>6.76</value>
+ <key>color4</key>
+ <value>"black"</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(374, 231)</value>
+ <key>alpha4</key>
+ <value>1.0</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>label5</key>
+ <value></value>
</param>
- </block>
- <block>
- <key>audio_sink</key>
<param>
- <key>id</key>
- <value>audio_sink</value>
+ <key>width5</key>
+ <value>1</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>color5</key>
+ <value>"cyan"</value>
</param>
<param>
- <key>samp_rate</key>
- <value>48000</value>
+ <key>alpha5</key>
+ <value>1.0</value>
</param>
<param>
- <key>device_name</key>
+ <key>label6</key>
<value></value>
</param>
<param>
- <key>ok_to_block</key>
- <value>True</value>
+ <key>width6</key>
+ <value>1</value>
</param>
<param>
- <key>num_inputs</key>
+ <key>color6</key>
+ <value>"magenta"</value>
+ </param>
+ <param>
+ <key>alpha6</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width7</key>
<value>1</value>
</param>
<param>
+ <key>color7</key>
+ <value>"yellow"</value>
+ </param>
+ <param>
+ <key>alpha7</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label8</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color8</key>
+ <value>"dark red"</value>
+ </param>
+ <param>
+ <key>alpha8</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label9</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color9</key>
+ <value>"dark green"</value>
+ </param>
+ <param>
+ <key>alpha9</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label10</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color10</key>
+ <value>"dark blue"</value>
+ </param>
+ <param>
+ <key>alpha10</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(834, 279)</value>
+ <value>(399, 50)</value>
</param>
<param>
<key>_rotation</key>
@@ -592,85 +943,98 @@
</param>
</block>
<block>
- <key>rational_resampler_xxx</key>
+ <key>variable_qtgui_chooser</key>
<param>
<key>id</key>
- <value>rational_resampler_xxx_0</value>
+ <value>fcd_lna_gain</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
+ <key>label</key>
+ <value>LNA Gain (dB)</value>
+ </param>
+ <param>
<key>type</key>
- <value>fff</value>
+ <value>real</value>
</param>
<param>
- <key>interp</key>
- <value>11025</value>
+ <key>num_opts</key>
+ <value>0</value>
</param>
<param>
- <key>decim</key>
- <value>48000</value>
+ <key>value</key>
+ <value>20</value>
</param>
<param>
- <key>taps</key>
+ <key>options</key>
+ <value>[30.0, 25.0, 20.0, 17.5, 15.0, 12.5, 10.0, 7.5, 5.0, 2.5, 0.0, -2.5, -5.0]</value>
+ </param>
+ <param>
+ <key>labels</key>
<value>[]</value>
</param>
<param>
- <key>fbw</key>
+ <key>option0</key>
<value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(591, 423)</value>
+ <key>label0</key>
+ <value></value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>option1</key>
+ <value>1</value>
</param>
- </block>
- <block>
- <key>analog_fm_demod_cf</key>
<param>
- <key>id</key>
- <value>analog_fm_demod_cf_0</value>
+ <key>label1</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>option2</key>
+ <value>2</value>
</param>
<param>
- <key>chan_rate</key>
- <value>samp_rate</value>
+ <key>label2</key>
+ <value></value>
</param>
<param>
- <key>audio_decim</key>
- <value>2</value>
+ <key>option3</key>
+ <value>3</value>
</param>
<param>
- <key>deviation</key>
- <value>max_dev</value>
+ <key>label3</key>
+ <value></value>
</param>
<param>
- <key>audio_pass</key>
- <value>5000</value>
+ <key>option4</key>
+ <value>4</value>
</param>
<param>
- <key>audio_stop</key>
- <value>7000</value>
+ <key>label4</key>
+ <value></value>
</param>
<param>
- <key>gain</key>
- <value>1.0</value>
+ <key>widget</key>
+ <value>combo_box</value>
</param>
<param>
- <key>tau</key>
- <value>75e-6</value>
+ <key>orient</key>
+ <value>Qt.QVBoxLayout</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value>2,0,1,1</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(605, 231)</value>
+ <value>(247, 363)</value>
</param>
<param>
<key>_rotation</key>
@@ -678,20 +1042,20 @@
</param>
</block>
<connection>
- <source_block_id>rational_resampler_xxx_0</source_block_id>
- <sink_block_id>wavfile_sink</sink_block_id>
+ <source_block_id>fcd_source_c_0</source_block_id>
+ <sink_block_id>qtgui_freq_sink_x_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>fcd_source_c_0</source_block_id>
- <sink_block_id>fftsink</sink_block_id>
+ <source_block_id>analog_fm_demod_cf_0</source_block_id>
+ <sink_block_id>rational_resampler_xxx_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>fcd_source_c_0</source_block_id>
- <sink_block_id>low_pass_filter</sink_block_id>
+ <source_block_id>analog_fm_demod_cf_0</source_block_id>
+ <sink_block_id>audio_sink</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
@@ -702,14 +1066,14 @@
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>analog_fm_demod_cf_0</source_block_id>
- <sink_block_id>audio_sink</sink_block_id>
+ <source_block_id>fcd_source_c_0</source_block_id>
+ <sink_block_id>low_pass_filter</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>analog_fm_demod_cf_0</source_block_id>
- <sink_block_id>rational_resampler_xxx_0</sink_block_id>
+ <source_block_id>rational_resampler_xxx_0</source_block_id>
+ <sink_block_id>wavfile_sink</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
diff --git a/gr-fcd/examples/grc/fcd_fft.grc b/gr-fcd/examples/grc/fcd_fft.grc
new file mode 100644
index 0000000000..5a91fca4f4
--- /dev/null
+++ b/gr-fcd/examples/grc/fcd_fft.grc
@@ -0,0 +1,564 @@
+<?xml version='1.0' encoding='ASCII'?>
+<flow_graph>
+ <timestamp>Mon Jul 14 14:53:06 2014</timestamp>
+ <block>
+ <key>options</key>
+ <param>
+ <key>id</key>
+ <value>fcd_fft</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>title</key>
+ <value>Funcube Dongle FFT scope</value>
+ </param>
+ <param>
+ <key>author</key>
+ <value>Alexandru Csete OZ9AEC</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>qt_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>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(10, 10)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable</key>
+ <param>
+ <key>id</key>
+ <value>samp_rate</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>96000</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(201, 11)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable_qtgui_entry</key>
+ <param>
+ <key>id</key>
+ <value>fcd_freq</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>label</key>
+ <value>FCD Freq</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>real</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>145.5e6</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value>1,0,1,1</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(299, 12)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable_qtgui_chooser</key>
+ <param>
+ <key>id</key>
+ <value>fcd_lna_gain</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>label</key>
+ <value>LNA Gain (dB)</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>real</value>
+ </param>
+ <param>
+ <key>num_opts</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>options</key>
+ <value>[30.0, 25.0, 20.0, 17.5, 15.0, 12.5, 10.0, 7.5, 5.0, 2.5, 0.0, -2.5, -5.0]</value>
+ </param>
+ <param>
+ <key>labels</key>
+ <value>[]</value>
+ </param>
+ <param>
+ <key>option0</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>label0</key>
+ <value></value>
+ </param>
+ <param>
+ <key>option1</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>label1</key>
+ <value></value>
+ </param>
+ <param>
+ <key>option2</key>
+ <value>2</value>
+ </param>
+ <param>
+ <key>label2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>option3</key>
+ <value>3</value>
+ </param>
+ <param>
+ <key>label3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>option4</key>
+ <value>4</value>
+ </param>
+ <param>
+ <key>label4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>widget</key>
+ <value>combo_box</value>
+ </param>
+ <param>
+ <key>orient</key>
+ <value>Qt.QVBoxLayout</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value>2,0,1,1</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(439, 11)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>fcd_source_c</key>
+ <param>
+ <key>id</key>
+ <value>fcd_source_c_1</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>device_name</key>
+ <value>hw:0</value>
+ </param>
+ <param>
+ <key>freq</key>
+ <value>fcd_freq</value>
+ </param>
+ <param>
+ <key>lna</key>
+ <value>fcd_lna_gain</value>
+ </param>
+ <param>
+ <key>mixer</key>
+ <value>+12</value>
+ </param>
+ <param>
+ <key>ppm</key>
+ <value>-120</value>
+ </param>
+ <param>
+ <key>dci</key>
+ <value>0.0</value>
+ </param>
+ <param>
+ <key>dcq</key>
+ <value>0.0</value>
+ </param>
+ <param>
+ <key>iq_phase</key>
+ <value>0.0</value>
+ </param>
+ <param>
+ <key>iq_gain</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(13, 134)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>qtgui_freq_sink_x</key>
+ <param>
+ <key>id</key>
+ <value>qtgui_freq_sink_x_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>complex</value>
+ </param>
+ <param>
+ <key>name</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>fftsize</key>
+ <value>512</value>
+ </param>
+ <param>
+ <key>wintype</key>
+ <value>firdes.WIN_BLACKMAN_hARRIS</value>
+ </param>
+ <param>
+ <key>fc</key>
+ <value>fcd_freq</value>
+ </param>
+ <param>
+ <key>bw</key>
+ <value>samp_rate</value>
+ </param>
+ <param>
+ <key>grid</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>autoscale</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>average</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>ymin</key>
+ <value>-140</value>
+ </param>
+ <param>
+ <key>ymax</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>nconnections</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>update_time</key>
+ <value>0.05</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value>0,0,1,2</value>
+ </param>
+ <param>
+ <key>showports</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>label1</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width1</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color1</key>
+ <value>"blue"</value>
+ </param>
+ <param>
+ <key>alpha1</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width2</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color2</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>alpha2</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width3</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color3</key>
+ <value>"green"</value>
+ </param>
+ <param>
+ <key>alpha3</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width4</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color4</key>
+ <value>"black"</value>
+ </param>
+ <param>
+ <key>alpha4</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width5</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color5</key>
+ <value>"cyan"</value>
+ </param>
+ <param>
+ <key>alpha5</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width6</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color6</key>
+ <value>"magenta"</value>
+ </param>
+ <param>
+ <key>alpha6</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width7</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color7</key>
+ <value>"yellow"</value>
+ </param>
+ <param>
+ <key>alpha7</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label8</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color8</key>
+ <value>"dark red"</value>
+ </param>
+ <param>
+ <key>alpha8</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label9</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color9</key>
+ <value>"dark green"</value>
+ </param>
+ <param>
+ <key>alpha9</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label10</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color10</key>
+ <value>"dark blue"</value>
+ </param>
+ <param>
+ <key>alpha10</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(282, 182)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <connection>
+ <source_block_id>fcd_source_c_1</source_block_id>
+ <sink_block_id>qtgui_freq_sink_x_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+</flow_graph>
diff --git a/gr-fcd/examples/grc/fcd_fft_wx.grc b/gr-fcd/examples/grc/fcd_fft_wx.grc
deleted file mode 100644
index c045bbfa24..0000000000
--- a/gr-fcd/examples/grc/fcd_fft_wx.grc
+++ /dev/null
@@ -1,320 +0,0 @@
-<?xml version='1.0' encoding='ASCII'?>
-<flow_graph>
- <timestamp>Sun May 8 18:02:35 2011</timestamp>
- <block>
- <key>options</key>
- <param>
- <key>id</key>
- <value>fcd_fft_wx</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>title</key>
- <value>Funcube Dongle FFT scope</value>
- </param>
- <param>
- <key>author</key>
- <value>Alexandru Csete OZ9AEC</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>realtime_scheduling</key>
- <value></value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(10, 10)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>variable</key>
- <param>
- <key>id</key>
- <value>samp_rate</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>value</key>
- <value>96000</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(201, 11)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>variable_text_box</key>
- <param>
- <key>id</key>
- <value>fcd_freq</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>label</key>
- <value>FCD freq</value>
- </param>
- <param>
- <key>value</key>
- <value>145500000</value>
- </param>
- <param>
- <key>converver</key>
- <value>float_converter</value>
- </param>
- <param>
- <key>formatter</key>
- <value>None</value>
- </param>
- <param>
- <key>grid_pos</key>
- <value>1,0,1,1</value>
- </param>
- <param>
- <key>notebook</key>
- <value></value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(300, 11)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>variable_chooser</key>
- <param>
- <key>id</key>
- <value>fcd_lna_gain</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>label</key>
- <value>LNA gain [dB]</value>
- </param>
- <param>
- <key>value</key>
- <value>20.0</value>
- </param>
- <param>
- <key>choices</key>
- <value>[30.0, 25.0, 20.0, 17.5, 15.0, 12.5, 10.0, 7.5, 5.0, 2.5, 0.0, -2.5, -5.0]</value>
- </param>
- <param>
- <key>labels</key>
- <value>[]</value>
- </param>
- <param>
- <key>type</key>
- <value>drop_down</value>
- </param>
- <param>
- <key>style</key>
- <value>wx.RA_HORIZONTAL</value>
- </param>
- <param>
- <key>grid_pos</key>
- <value>2,0,1,1</value>
- </param>
- <param>
- <key>notebook</key>
- <value></value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(446, 10)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>wxgui_fftsink2</key>
- <param>
- <key>id</key>
- <value>wxgui_fftsink2_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>type</key>
- <value>complex</value>
- </param>
- <param>
- <key>title</key>
- <value>FCD Spectrum</value>
- </param>
- <param>
- <key>samp_rate</key>
- <value>samp_rate</value>
- </param>
- <param>
- <key>baseband_freq</key>
- <value>fcd_freq</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>0</value>
- </param>
- <param>
- <key>ref_scale</key>
- <value>1.0</value>
- </param>
- <param>
- <key>fft_size</key>
- <value>512</value>
- </param>
- <param>
- <key>fft_rate</key>
- <value>15</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>
- <value>0,0,1,2</value>
- </param>
- <param>
- <key>notebook</key>
- <value></value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(442, 176)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>fcd_source_c</key>
- <param>
- <key>id</key>
- <value>fcd_source_c_1</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>device_name</key>
- <value>hw:1</value>
- </param>
- <param>
- <key>freq</key>
- <value>fcd_freq</value>
- </param>
- <param>
- <key>lna</key>
- <value>fcd_lna_gain</value>
- </param>
- <param>
- <key>ppm</key>
- <value>-120</value>
- </param>
- <param>
- <key>dci</key>
- <value>0.0</value>
- </param>
- <param>
- <key>dcq</key>
- <value>0.0</value>
- </param>
- <param>
- <key>iq_phase</key>
- <value>0.0</value>
- </param>
- <param>
- <key>iq_gain</key>
- <value>1.0</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(95, 192)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <connection>
- <source_block_id>fcd_source_c_1</source_block_id>
- <sink_block_id>wxgui_fftsink2_0</sink_block_id>
- <source_key>0</source_key>
- <sink_key>0</sink_key>
- </connection>
-</flow_graph>
diff --git a/gr-fcd/examples/grc/fcd_nfm_rx.grc b/gr-fcd/examples/grc/fcd_nfm_rx.grc
index afe343a834..af56c4f28e 100644
--- a/gr-fcd/examples/grc/fcd_nfm_rx.grc
+++ b/gr-fcd/examples/grc/fcd_nfm_rx.grc
@@ -1,6 +1,6 @@
<?xml version='1.0' encoding='ASCII'?>
<flow_graph>
- <timestamp>Mon Mar 18 10:11:39 2013</timestamp>
+ <timestamp>Mon Jul 14 15:02:45 2014</timestamp>
<block>
<key>options</key>
<param>
@@ -29,7 +29,7 @@
</param>
<param>
<key>generate_options</key>
- <value>wx_gui</value>
+ <value>qt_gui</value>
</param>
<param>
<key>category</key>
@@ -52,6 +52,10 @@
<value></value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(10, 10)</value>
</param>
@@ -61,42 +65,53 @@
</param>
</block>
<block>
- <key>variable_static_text</key>
+ <key>variable</key>
<param>
<key>id</key>
- <value>rx_freq</value>
+ <value>xlate_filter_taps</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>label</key>
- <value>Receive</value>
+ <key>value</key>
+ <value>firdes.low_pass(1, samp_rate, 48000, 5000, firdes.WIN_HAMMING, 6.76)</value>
</param>
<param>
- <key>value</key>
- <value>freq+(offset_coarse+offset_fine)</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>_coordinate</key>
+ <value>(428, 294)</value>
</param>
<param>
- <key>formatter</key>
- <value>None</value>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable</key>
+ <param>
+ <key>id</key>
+ <value>samp_rate</value>
</param>
<param>
- <key>grid_pos</key>
- <value>5,3,1,1</value>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>96000</value>
</param>
<param>
- <key>notebook</key>
+ <key>alias</key>
<value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(491, 10)</value>
+ <value>(182, 11)</value>
</param>
<param>
<key>_rotation</key>
@@ -104,54 +119,70 @@
</param>
</block>
<block>
- <key>variable_slider</key>
+ <key>low_pass_filter</key>
<param>
<key>id</key>
- <value>offset_fine</value>
+ <value>low_pass_filter</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>label</key>
- <value>Fine tune</value>
+ <key>type</key>
+ <value>fir_filter_ccf</value>
</param>
<param>
- <key>value</key>
- <value>0</value>
+ <key>decim</key>
+ <value>1</value>
</param>
<param>
- <key>min</key>
- <value>-1000</value>
+ <key>interp</key>
+ <value>1</value>
</param>
<param>
- <key>max</key>
- <value>1000</value>
+ <key>gain</key>
+ <value>1</value>
</param>
<param>
- <key>num_steps</key>
- <value>400</value>
+ <key>samp_rate</key>
+ <value>samp_rate</value>
</param>
<param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
+ <key>cutoff_freq</key>
+ <value>width/2</value>
</param>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>width</key>
+ <value>trans</value>
</param>
<param>
- <key>grid_pos</key>
- <value>6,0,1,2</value>
+ <key>win</key>
+ <value>firdes.WIN_HAMMING</value>
+ </param>
+ <param>
+ <key>beta</key>
+ <value>6.76</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>notebook</key>
+ <key>affinity</key>
<value></value>
</param>
<param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(9, 279)</value>
+ <value>(742, 266)</value>
</param>
<param>
<key>_rotation</key>
@@ -159,54 +190,70 @@
</param>
</block>
<block>
- <key>variable_slider</key>
+ <key>fcd_source_c</key>
<param>
<key>id</key>
- <value>offset_coarse</value>
+ <value>fcd_source_c_1</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>label</key>
- <value>Coarse tune</value>
+ <key>device_name</key>
+ <value>hw:0</value>
</param>
<param>
- <key>value</key>
- <value>0</value>
+ <key>freq</key>
+ <value>freq</value>
</param>
<param>
- <key>min</key>
- <value>-48000</value>
+ <key>lna</key>
+ <value>rf_gain</value>
</param>
<param>
- <key>max</key>
- <value>48000</value>
+ <key>mixer</key>
+ <value>+12</value>
</param>
<param>
- <key>num_steps</key>
- <value>960</value>
+ <key>ppm</key>
+ <value>-120</value>
</param>
<param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
+ <key>dci</key>
+ <value>0.0</value>
</param>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>dcq</key>
+ <value>0.0</value>
</param>
<param>
- <key>grid_pos</key>
- <value>6,2,1,2</value>
+ <key>iq_phase</key>
+ <value>0.0</value>
</param>
<param>
- <key>notebook</key>
+ <key>iq_gain</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
<value></value>
</param>
<param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(10, 130)</value>
+ <value>(165, 157)</value>
</param>
<param>
<key>_rotation</key>
@@ -214,54 +261,54 @@
</param>
</block>
<block>
- <key>variable_slider</key>
+ <key>freq_xlating_fir_filter_xxx</key>
<param>
<key>id</key>
- <value>width</value>
+ <value>freq_xlating_fir_filter_xxx_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>label</key>
- <value>Filter</value>
+ <key>type</key>
+ <value>ccc</value>
</param>
<param>
- <key>value</key>
- <value>10000</value>
+ <key>decim</key>
+ <value>1</value>
</param>
<param>
- <key>min</key>
- <value>2000</value>
+ <key>taps</key>
+ <value>xlate_filter_taps</value>
</param>
<param>
- <key>max</key>
- <value>40000</value>
+ <key>center_freq</key>
+ <value>-(offset_coarse+offset_fine)</value>
</param>
<param>
- <key>num_steps</key>
- <value>760</value>
+ <key>samp_rate</key>
+ <value>samp_rate</value>
</param>
<param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>grid_pos</key>
- <value>7,0,1,1</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>notebook</key>
- <value></value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(9, 431)</value>
+ <value>(422, 173)</value>
</param>
<param>
<key>_rotation</key>
@@ -269,144 +316,254 @@
</param>
</block>
<block>
- <key>variable_slider</key>
+ <key>qtgui_freq_sink_x</key>
<param>
<key>id</key>
- <value>trans</value>
+ <value>qtgui_freq_sink_x_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>label</key>
- <value>Trans</value>
+ <key>type</key>
+ <value>complex</value>
</param>
<param>
- <key>value</key>
- <value>1500</value>
+ <key>name</key>
+ <value>""</value>
</param>
<param>
- <key>min</key>
- <value>500</value>
+ <key>fftsize</key>
+ <value>512</value>
</param>
<param>
- <key>max</key>
- <value>5000</value>
+ <key>wintype</key>
+ <value>firdes.WIN_BLACKMAN_hARRIS</value>
+ </param>
+ <param>
+ <key>fc</key>
+ <value>rx_freq*display_selector</value>
</param>
<param>
- <key>num_steps</key>
- <value>900</value>
+ <key>bw</key>
+ <value>samp_rate</value>
</param>
<param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
+ <key>grid</key>
+ <value>False</value>
</param>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>autoscale</key>
+ <value>False</value>
</param>
<param>
- <key>grid_pos</key>
- <value>8,0,1,1</value>
+ <key>average</key>
+ <value>1.0</value>
</param>
<param>
- <key>notebook</key>
- <value></value>
+ <key>ymin</key>
+ <value>-140</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(10, 577)</value>
+ <key>ymax</key>
+ <value>10</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>nconnections</key>
+ <value>1</value>
</param>
- </block>
- <block>
- <key>variable_slider</key>
<param>
- <key>id</key>
- <value>af_gain</value>
+ <key>update_time</key>
+ <value>0.05</value>
</param>
<param>
- <key>_enabled</key>
+ <key>gui_hint</key>
+ <value>0,0,5,4</value>
+ </param>
+ <param>
+ <key>showports</key>
<value>True</value>
</param>
<param>
- <key>label</key>
- <value>VOL</value>
+ <key>label1</key>
+ <value></value>
</param>
<param>
- <key>value</key>
+ <key>width1</key>
<value>1</value>
</param>
<param>
- <key>min</key>
- <value>0</value>
+ <key>color1</key>
+ <value>"blue"</value>
</param>
<param>
- <key>max</key>
- <value>5</value>
+ <key>alpha1</key>
+ <value>1.0</value>
</param>
<param>
- <key>num_steps</key>
- <value>50</value>
+ <key>label2</key>
+ <value></value>
</param>
<param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
+ <key>width2</key>
+ <value>1</value>
</param>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>color2</key>
+ <value>"red"</value>
</param>
<param>
- <key>grid_pos</key>
- <value>8,1,1,1</value>
+ <key>alpha2</key>
+ <value>1.0</value>
</param>
<param>
- <key>notebook</key>
+ <key>label3</key>
<value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(168, 726)</value>
+ <key>width3</key>
+ <value>1</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>color3</key>
+ <value>"green"</value>
</param>
- </block>
- <block>
- <key>audio_sink</key>
<param>
- <key>id</key>
- <value>audio_sink</value>
+ <key>alpha3</key>
+ <value>1.0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>label4</key>
+ <value></value>
</param>
<param>
- <key>samp_rate</key>
- <value>48000</value>
+ <key>width4</key>
+ <value>1</value>
</param>
<param>
- <key>device_name</key>
+ <key>color4</key>
+ <value>"black"</value>
+ </param>
+ <param>
+ <key>alpha4</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label5</key>
<value></value>
</param>
<param>
- <key>ok_to_block</key>
- <value>True</value>
+ <key>width5</key>
+ <value>1</value>
</param>
<param>
- <key>num_inputs</key>
- <value>2</value>
+ <key>color5</key>
+ <value>"cyan"</value>
+ </param>
+ <param>
+ <key>alpha5</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width6</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color6</key>
+ <value>"magenta"</value>
+ </param>
+ <param>
+ <key>alpha6</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width7</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color7</key>
+ <value>"yellow"</value>
+ </param>
+ <param>
+ <key>alpha7</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label8</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color8</key>
+ <value>"dark red"</value>
+ </param>
+ <param>
+ <key>alpha8</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label9</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color9</key>
+ <value>"dark green"</value>
+ </param>
+ <param>
+ <key>alpha9</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label10</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color10</key>
+ <value>"dark blue"</value>
+ </param>
+ <param>
+ <key>alpha10</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(882, 511)</value>
+ <value>(732, 165)</value>
</param>
<param>
<key>_rotation</key>
@@ -414,22 +571,38 @@
</param>
</block>
<block>
- <key>variable</key>
+ <key>variable_qtgui_entry</key>
<param>
<key>id</key>
- <value>samp_rate</value>
+ <value>freq</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
+ <key>label</key>
+ <value>FCD Freq</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>real</value>
+ </param>
+ <param>
<key>value</key>
- <value>96000</value>
+ <value>144.47e6</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value>5,1,1,1</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(210, 12)</value>
+ <value>(282, 10)</value>
</param>
<param>
<key>_rotation</key>
@@ -437,10 +610,10 @@
</param>
</block>
<block>
- <key>variable_slider</key>
+ <key>variable_qtgui_label</key>
<param>
<key>id</key>
- <value>sql_lev</value>
+ <value>rx_freq</value>
</param>
<param>
<key>_enabled</key>
@@ -448,43 +621,74 @@
</param>
<param>
<key>label</key>
- <value>SQL</value>
+ <value>Receive</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>real</value>
</param>
<param>
<key>value</key>
- <value>-100</value>
+ <value>freq+(offset_coarse+offset_fine)</value>
</param>
<param>
- <key>min</key>
- <value>-100</value>
+ <key>formatter</key>
+ <value>None</value>
</param>
<param>
- <key>max</key>
+ <key>gui_hint</key>
+ <value>4,3,1,1</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(430, 10)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
<value>0</value>
</param>
+ </block>
+ <block>
+ <key>analog_simple_squelch_cc</key>
+ <param>
+ <key>id</key>
+ <value>analog_simple_squelch_cc_0</value>
+ </param>
<param>
- <key>num_steps</key>
- <value>500</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
+ <key>threshold</key>
+ <value>sql_lev</value>
</param>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>alpha</key>
+ <value>1</value>
</param>
<param>
- <key>grid_pos</key>
- <value>7,2,1,1</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>notebook</key>
+ <key>affinity</key>
<value></value>
</param>
<param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(328, 728)</value>
+ <value>(199, 498)</value>
</param>
<param>
<key>_rotation</key>
@@ -492,22 +696,50 @@
</param>
</block>
<block>
- <key>variable</key>
+ <key>analog_nbfm_rx</key>
<param>
<key>id</key>
- <value>xlate_filter_taps</value>
+ <value>analog_nbfm_rx_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>firdes.low_pass(1, samp_rate, 48000, 5000, firdes.WIN_HAMMING, 6.76)</value>
+ <key>audio_rate</key>
+ <value>48000</value>
+ </param>
+ <param>
+ <key>quad_rate</key>
+ <value>96000</value>
+ </param>
+ <param>
+ <key>tau</key>
+ <value>75e-6</value>
+ </param>
+ <param>
+ <key>max_dev</key>
+ <value>5e3</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(428, 294)</value>
+ <value>(391, 482)</value>
</param>
<param>
<key>_rotation</key>
@@ -515,50 +747,46 @@
</param>
</block>
<block>
- <key>variable_chooser</key>
+ <key>blocks_multiply_const_vxx</key>
<param>
<key>id</key>
- <value>display_selector</value>
+ <value>blocks_multiply_const_vxx_1</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>label</key>
- <value>Spectrum</value>
- </param>
- <param>
- <key>value</key>
- <value>0</value>
+ <key>type</key>
+ <value>float</value>
</param>
<param>
- <key>choices</key>
- <value>[0, 1]</value>
+ <key>const</key>
+ <value>af_gain</value>
</param>
<param>
- <key>labels</key>
- <value>['Baseband','RF']</value>
+ <key>vlen</key>
+ <value>1</value>
</param>
<param>
- <key>type</key>
- <value>drop_down</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>style</key>
- <value>wx.RA_HORIZONTAL</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>grid_pos</key>
- <value>5,0,1,1</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>notebook</key>
- <value></value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(481, 728)</value>
+ <value>(580, 506)</value>
</param>
<param>
<key>_rotation</key>
@@ -566,42 +794,42 @@
</param>
</block>
<block>
- <key>variable_text_box</key>
+ <key>audio_sink</key>
<param>
<key>id</key>
- <value>freq</value>
+ <value>audio_sink</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>label</key>
- <value>FCD Freq</value>
+ <key>samp_rate</key>
+ <value>48000</value>
</param>
<param>
- <key>value</key>
- <value>144470000</value>
+ <key>device_name</key>
+ <value></value>
</param>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>ok_to_block</key>
+ <value>True</value>
</param>
<param>
- <key>formatter</key>
- <value>None</value>
+ <key>num_inputs</key>
+ <value>2</value>
</param>
<param>
- <key>grid_pos</key>
- <value>5,1,1,1</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>notebook</key>
+ <key>affinity</key>
<value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(339, 9)</value>
+ <value>(757, 510)</value>
</param>
<param>
<key>_rotation</key>
@@ -609,10 +837,10 @@
</param>
</block>
<block>
- <key>variable_slider</key>
+ <key>variable_qtgui_range</key>
<param>
<key>id</key>
- <value>rf_gain</value>
+ <value>offset_coarse</value>
</param>
<param>
<key>_enabled</key>
@@ -620,43 +848,47 @@
</param>
<param>
<key>label</key>
- <value>RF</value>
+ <value>Coarse Tune</value>
</param>
<param>
<key>value</key>
- <value>20</value>
+ <value>0</value>
</param>
<param>
- <key>min</key>
- <value>-5</value>
+ <key>start</key>
+ <value>-48000</value>
</param>
<param>
- <key>max</key>
- <value>30</value>
+ <key>stop</key>
+ <value>48000</value>
</param>
<param>
- <key>num_steps</key>
- <value>35</value>
+ <key>step</key>
+ <value>100</value>
</param>
<param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
+ <key>widget</key>
+ <value>counter</value>
</param>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
</param>
<param>
- <key>grid_pos</key>
- <value>7,1,1,1</value>
+ <key>min_len</key>
+ <value>200</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value>6,2,1,2</value>
</param>
<param>
- <key>notebook</key>
+ <key>alias</key>
<value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(11, 725)</value>
+ <value>(11, 123)</value>
</param>
<param>
<key>_rotation</key>
@@ -664,54 +896,58 @@
</param>
</block>
<block>
- <key>fcd_source_c</key>
+ <key>variable_qtgui_range</key>
<param>
<key>id</key>
- <value>fcd_source_c_1</value>
+ <value>offset_fine</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>device_name</key>
- <value>hw:1</value>
+ <key>label</key>
+ <value>Fine Tune</value>
</param>
<param>
- <key>freq</key>
- <value>freq</value>
+ <key>value</key>
+ <value>0</value>
</param>
<param>
- <key>lna</key>
- <value>rf_gain</value>
+ <key>start</key>
+ <value>-1000</value>
</param>
<param>
- <key>mixer</key>
- <value>+12</value>
+ <key>stop</key>
+ <value>1000</value>
</param>
<param>
- <key>ppm</key>
- <value>-120</value>
+ <key>step</key>
+ <value>1</value>
</param>
<param>
- <key>dci</key>
- <value>0.0</value>
+ <key>widget</key>
+ <value>counter</value>
</param>
<param>
- <key>dcq</key>
- <value>0.0</value>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
</param>
<param>
- <key>iq_phase</key>
- <value>0.0</value>
+ <key>min_len</key>
+ <value>200</value>
</param>
<param>
- <key>iq_gain</key>
- <value>1.0</value>
+ <key>gui_hint</key>
+ <value>6,0,1,2</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(165, 157)</value>
+ <value>(11, 250)</value>
</param>
<param>
<key>_rotation</key>
@@ -719,90 +955,117 @@
</param>
</block>
<block>
- <key>wxgui_fftsink2</key>
+ <key>variable_qtgui_range</key>
<param>
<key>id</key>
- <value>fftsink</value>
+ <value>width</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
+ <key>label</key>
+ <value>Filter</value>
</param>
<param>
- <key>title</key>
- <value></value>
+ <key>value</key>
+ <value>10000</value>
</param>
<param>
- <key>samp_rate</key>
- <value>samp_rate</value>
+ <key>start</key>
+ <value>2000</value>
</param>
<param>
- <key>baseband_freq</key>
- <value>rx_freq*display_selector</value>
+ <key>stop</key>
+ <value>40000</value>
</param>
<param>
- <key>y_per_div</key>
- <value>10</value>
+ <key>step</key>
+ <value>100</value>
</param>
<param>
- <key>y_divs</key>
- <value>10</value>
+ <key>widget</key>
+ <value>counter</value>
</param>
<param>
- <key>ref_level</key>
- <value>0</value>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
</param>
<param>
- <key>ref_scale</key>
- <value>1.0</value>
+ <key>min_len</key>
+ <value>200</value>
</param>
<param>
- <key>fft_size</key>
- <value>512</value>
+ <key>gui_hint</key>
+ <value>7,0,1,1</value>
</param>
<param>
- <key>fft_rate</key>
- <value>15</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>peak_hold</key>
- <value>False</value>
+ <key>_coordinate</key>
+ <value>(11, 377)</value>
</param>
<param>
- <key>average</key>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable_qtgui_range</key>
+ <param>
+ <key>id</key>
+ <value>trans</value>
+ </param>
+ <param>
+ <key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>avg_alpha</key>
- <value>0.5</value>
+ <key>label</key>
+ <value>Trans</value>
</param>
<param>
- <key>win</key>
- <value>None</value>
+ <key>value</key>
+ <value>1500</value>
</param>
<param>
- <key>win_size</key>
- <value>800,300</value>
+ <key>start</key>
+ <value>500</value>
</param>
<param>
- <key>grid_pos</key>
- <value>0,0,5,4</value>
+ <key>stop</key>
+ <value>5000</value>
</param>
<param>
- <key>notebook</key>
- <value></value>
+ <key>step</key>
+ <value>1</value>
</param>
<param>
- <key>freqvar</key>
- <value>None</value>
+ <key>widget</key>
+ <value>counter</value>
+ </param>
+ <param>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
+ </param>
+ <param>
+ <key>min_len</key>
+ <value>200</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value>8,0,1,1</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(742, 24)</value>
+ <value>(10, 504)</value>
</param>
<param>
<key>_rotation</key>
@@ -810,38 +1073,58 @@
</param>
</block>
<block>
- <key>freq_xlating_fir_filter_xxx</key>
+ <key>variable_qtgui_range</key>
<param>
<key>id</key>
- <value>freq_xlating_fir_filter_xxx_0</value>
+ <value>rf_gain</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>ccc</value>
+ <key>label</key>
+ <value>RF</value>
</param>
<param>
- <key>decim</key>
+ <key>value</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>start</key>
+ <value>-5</value>
+ </param>
+ <param>
+ <key>stop</key>
+ <value>30</value>
+ </param>
+ <param>
+ <key>step</key>
<value>1</value>
</param>
<param>
- <key>taps</key>
- <value>xlate_filter_taps</value>
+ <key>widget</key>
+ <value>counter</value>
</param>
<param>
- <key>center_freq</key>
- <value>-(offset_coarse+offset_fine)</value>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
</param>
<param>
- <key>samp_rate</key>
- <value>samp_rate</value>
+ <key>min_len</key>
+ <value>200</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value>7,1,1,1</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(422, 173)</value>
+ <value>(10, 632)</value>
</param>
<param>
<key>_rotation</key>
@@ -849,54 +1132,58 @@
</param>
</block>
<block>
- <key>low_pass_filter</key>
+ <key>variable_qtgui_range</key>
<param>
<key>id</key>
- <value>low_pass_filter</value>
+ <value>af_gain</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>fir_filter_ccf</value>
+ <key>label</key>
+ <value>VOL</value>
</param>
<param>
- <key>decim</key>
+ <key>value</key>
<value>1</value>
</param>
<param>
- <key>interp</key>
- <value>1</value>
+ <key>start</key>
+ <value>0</value>
</param>
<param>
- <key>gain</key>
- <value>1</value>
+ <key>stop</key>
+ <value>5</value>
</param>
<param>
- <key>samp_rate</key>
- <value>samp_rate</value>
+ <key>step</key>
+ <value>0.1</value>
</param>
<param>
- <key>cutoff_freq</key>
- <value>width/2</value>
+ <key>widget</key>
+ <value>counter</value>
</param>
<param>
- <key>width</key>
- <value>trans</value>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
</param>
<param>
- <key>win</key>
- <value>firdes.WIN_HAMMING</value>
+ <key>min_len</key>
+ <value>200</value>
</param>
<param>
- <key>beta</key>
- <value>6.76</value>
+ <key>gui_hint</key>
+ <value>8,1,1,1</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(742, 266)</value>
+ <value>(124, 632)</value>
</param>
<param>
<key>_rotation</key>
@@ -904,26 +1191,58 @@
</param>
</block>
<block>
- <key>analog_simple_squelch_cc</key>
+ <key>variable_qtgui_range</key>
<param>
<key>id</key>
- <value>analog_simple_squelch_cc_0</value>
+ <value>sql_lev</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>threshold</key>
- <value>sql_lev</value>
+ <key>label</key>
+ <value>SQL</value>
</param>
<param>
- <key>alpha</key>
+ <key>value</key>
+ <value>-100</value>
+ </param>
+ <param>
+ <key>start</key>
+ <value>-100</value>
+ </param>
+ <param>
+ <key>stop</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>step</key>
<value>1</value>
</param>
<param>
+ <key>widget</key>
+ <value>counter</value>
+ </param>
+ <param>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
+ </param>
+ <param>
+ <key>min_len</key>
+ <value>200</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value>7,2,1,1</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(227, 499)</value>
+ <value>(232, 632)</value>
</param>
<param>
<key>_rotation</key>
@@ -931,65 +1250,98 @@
</param>
</block>
<block>
- <key>blocks_multiply_const_vxx</key>
+ <key>variable_qtgui_chooser</key>
<param>
<key>id</key>
- <value>blocks_multiply_const_vxx_1</value>
+ <value>display_selector</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
+ <key>label</key>
+ <value>Spectrum</value>
+ </param>
+ <param>
<key>type</key>
- <value>float</value>
+ <value>real</value>
</param>
<param>
- <key>const</key>
- <value>af_gain</value>
+ <key>num_opts</key>
+ <value>0</value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>value</key>
+ <value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(674, 507)</value>
+ <key>options</key>
+ <value>[0,1]</value>
</param>
<param>
- <key>_rotation</key>
+ <key>labels</key>
+ <value>['Baseband','RF']</value>
+ </param>
+ <param>
+ <key>option0</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>analog_nbfm_rx</key>
<param>
- <key>id</key>
- <value>analog_nbfm_rx_0</value>
+ <key>label0</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>option1</key>
+ <value>1</value>
</param>
<param>
- <key>audio_rate</key>
- <value>48000</value>
+ <key>label1</key>
+ <value></value>
</param>
<param>
- <key>quad_rate</key>
- <value>96000</value>
+ <key>option2</key>
+ <value>2</value>
</param>
<param>
- <key>tau</key>
- <value>75e-6</value>
+ <key>label2</key>
+ <value></value>
</param>
<param>
- <key>max_dev</key>
- <value>5e3</value>
+ <key>option3</key>
+ <value>3</value>
+ </param>
+ <param>
+ <key>label3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>option4</key>
+ <value>4</value>
+ </param>
+ <param>
+ <key>label4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>widget</key>
+ <value>combo_box</value>
+ </param>
+ <param>
+ <key>orient</key>
+ <value>Qt.QVBoxLayout</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value>5,0,1,1</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(440, 483)</value>
+ <value>(356, 632)</value>
</param>
<param>
<key>_rotation</key>
@@ -1016,12 +1368,6 @@
</connection>
<connection>
<source_block_id>freq_xlating_fir_filter_xxx_0</source_block_id>
- <sink_block_id>fftsink</sink_block_id>
- <source_key>0</source_key>
- <sink_key>0</sink_key>
- </connection>
- <connection>
- <source_block_id>freq_xlating_fir_filter_xxx_0</source_block_id>
<sink_block_id>low_pass_filter</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
@@ -1044,4 +1390,10 @@
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
+ <connection>
+ <source_block_id>freq_xlating_fir_filter_xxx_0</source_block_id>
+ <sink_block_id>qtgui_freq_sink_x_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
</flow_graph>
diff --git a/gr-fec/grc/variable_cc_decoder_def_list.xml b/gr-fec/grc/variable_cc_decoder_def_list.xml
index 7c72757868..daa7c73ef4 100644
--- a/gr-fec/grc/variable_cc_decoder_def_list.xml
+++ b/gr-fec/grc/variable_cc_decoder_def_list.xml
@@ -15,7 +15,9 @@ self.$(id) = $(id) = fec.cc_decoder.make($framebits, $k, $rate, $polys, $state_s
self.$(id) = $(id) = map( (lambda a: fec.cc_decoder.make($framebits, $k, $rate, $polys, $state_start, $state_end, $mode, $padding)), range(0,$dim1) ); #slurp
#else
self.$(id) = $(id) = map( (lambda b: map( ( lambda a: fec.cc_decoder.make($framebits, $k, $rate, $polys, $state_start, $state_end, $mode, $padding)), range(0,$dim2) ) ), range(0,$dim1)); #slurp
-#end if</var_make>
+#end if
+ </var_make>
+ <var_value>fec.cc_decoder.make($framebits, $k, $rate, $polys, $state_start, $state_end, $mode, $padding)</var_value>
<make></make>
<param>
diff --git a/gr-fec/grc/variable_cc_encoder_def_list.xml b/gr-fec/grc/variable_cc_encoder_def_list.xml
index 1e7aa8ad71..92965204d1 100644
--- a/gr-fec/grc/variable_cc_encoder_def_list.xml
+++ b/gr-fec/grc/variable_cc_encoder_def_list.xml
@@ -15,18 +15,12 @@ self.$(id) = $(id) = fec.cc_encoder_make($framebits, $k, $rate, $polys, $state_s
self.$(id) = $(id) = map( (lambda a: fec.cc_encoder_make($framebits, $k, $rate, $polys, $state_start, $mode, $padding)), range(0,$dim1) ); #slurp
#else
self.$(id) = $(id) = map( (lambda b: map( ( lambda a: fec.cc_encoder_make($framebits, $k, $rate, $polys, $state_start, $mode, $padding)), range(0,$dim2) ) ), range(0,$dim1)); #slurp
-#end if</var_make>
+#end if
+ </var_make>
+ <var_value>fec.cc_encoder_make($framebits, $k, $rate, $polys, $state_start, $mode, $padding)</var_value>
<make></make>
<param>
- <name>Ignore Me</name>
- <key>value</key>
- <value>"ok"</value>
- <type>raw</type>
- <hide>all</hide>
- </param>
-
- <param>
<name>Parallelism</name>
<key>ndim</key>
<value>0</value>
diff --git a/gr-fec/grc/variable_ccsds_encoder_def_list.xml b/gr-fec/grc/variable_ccsds_encoder_def_list.xml
index fb0cb05a80..d925fd1a7e 100644
--- a/gr-fec/grc/variable_ccsds_encoder_def_list.xml
+++ b/gr-fec/grc/variable_ccsds_encoder_def_list.xml
@@ -15,18 +15,12 @@ self.$(id) = $(id) = fec.ccsds_encoder_make($framebits, $state_start, $mode)
self.$(id) = $(id) = map( (lambda a: fec.ccsds_encoder_make($framebits, $state_start, $mode)), range(0,$dim1) ); #slurp
#else
self.$(id) = $(id) = map( (lambda b: map( ( lambda a: fec.ccsds_encoder_make($framebits, $state_start, $mode)), range(0,$dim2) ) ), range(0,$dim1)); #slurp
-#end if</var_make>
+#end if
+ </var_make>
+ <var_value>fec.ccsds_encoder_make($framebits, $state_start, $mode)</var_value>
<make></make>
<param>
- <name>Ignore Me</name>
- <key>value</key>
- <value>"ok"</value>
- <type>raw</type>
- <hide>all</hide>
- </param>
-
- <param>
<name>Parallelism</name>
<key>ndim</key>
<value>0</value>
diff --git a/gr-fec/grc/variable_dummy_decoder_def_list.xml b/gr-fec/grc/variable_dummy_decoder_def_list.xml
index 49728d357f..4a27971c87 100644
--- a/gr-fec/grc/variable_dummy_decoder_def_list.xml
+++ b/gr-fec/grc/variable_dummy_decoder_def_list.xml
@@ -15,7 +15,9 @@ self.$(id) = $(id) = fec.dummy_decoder.make($framebits)
self.$(id) = $(id) = map((lambda a: fec.dummy_decoder.make($framebits)), range(0,$dim1)) #slurp
#else
self.$(id) = $(id) = map((lambda b: map((lambda a: fec.dummy_decoder.make($framebits)), range(0,$dim2))), range(0,$dim1)) #slurp
-#end if</var_make>
+#end if
+ </var_make>
+ <var_value>fec.dummy_decoder.make($framebits)</var_value>
<make></make>
<param>
diff --git a/gr-fec/grc/variable_dummy_encoder_def_list.xml b/gr-fec/grc/variable_dummy_encoder_def_list.xml
index c2c3f3f995..351fddadaf 100644
--- a/gr-fec/grc/variable_dummy_encoder_def_list.xml
+++ b/gr-fec/grc/variable_dummy_encoder_def_list.xml
@@ -15,18 +15,12 @@ self.$(id) = $(id) = fec.dummy_encoder_make($framebits)
self.$(id) = $(id) = map((lambda a: fec.dummy_encoder_make($framebits)), range(0,$dim1)) #slurp
#else
self.$(id) = $(id) = map((lambda b: map((lambda a: fec.dummy_encoder_make($framebits)), range(0,$dim2))), range(0,$dim1)) #slurp
-#end if</var_make>
+#end if
+ </var_make>
+ <var_value>fec.dummy_encoder_make($framebits)</var_value>
<make></make>
<param>
- <name>Ignore Me</name>
- <key>value</key>
- <value>"ok"</value>
- <type>raw</type>
- <hide>all</hide>
- </param>
-
- <param>
<name>Parallelism</name>
<key>ndim</key>
<value>0</value>
diff --git a/gr-fec/grc/variable_repetition_decoder_def_list.xml b/gr-fec/grc/variable_repetition_decoder_def_list.xml
index eba43f9b06..cbeef445fa 100644
--- a/gr-fec/grc/variable_repetition_decoder_def_list.xml
+++ b/gr-fec/grc/variable_repetition_decoder_def_list.xml
@@ -15,7 +15,9 @@ self.$(id) = $(id) = fec.repetition_decoder.make($framebits, $rep, $prob)
self.$(id) = $(id) = map( (lambda a: fec.repetition_decoder.make($framebits, $rep, $prob)), range(0,$dim1) ) #slurp
#else
self.$(id) = $(id) = map( (lambda b: map( ( lambda a: fec.repetition_decoder.make($framebits, $rep, $prob)), range(0,$dim2) ) ), range(0,$dim1)) #slurp
-#end if</var_make>
+#end if
+ </var_make>
+ <var_value>fec.repetition_decoder.make($framebits, $rep, $prob)</var_value>
<make></make>
<param>
diff --git a/gr-fec/grc/variable_repetition_encoder_def_list.xml b/gr-fec/grc/variable_repetition_encoder_def_list.xml
index e2668b286c..e8554189cc 100644
--- a/gr-fec/grc/variable_repetition_encoder_def_list.xml
+++ b/gr-fec/grc/variable_repetition_encoder_def_list.xml
@@ -15,18 +15,12 @@ self.$(id) = $(id) = fec.repetition_encoder_make($framebits, $rep)
self.$(id) = $(id) = map((lambda a: fec.repetition_encoder_make($framebits, $rep)), range(0,$dim1)) #slurp
#else
self.$(id) = $(id) = map((lambda b: map((lambda a: fec.repetition_encoder_make($framebits, $rep)), range(0,$dim2))), range(0,$dim1)) #slurp
-#end if</var_make>
+#end if
+ </var_make>
+ <var_value>fec.repetition_encoder_make($framebits, $rep)</var_value>
<make></make>
<param>
- <name>Ignore Me</name>
- <key>value</key>
- <value>"ok"</value>
- <type>raw</type>
- <hide>all</hide>
- </param>
-
- <param>
<name>Parallelism</name>
<key>ndim</key>
<value></value>
diff --git a/gr-fec/include/gnuradio/fec/CMakeLists.txt b/gr-fec/include/gnuradio/fec/CMakeLists.txt
index a91a68a996..63bc32ced9 100644
--- a/gr-fec/include/gnuradio/fec/CMakeLists.txt
+++ b/gr-fec/include/gnuradio/fec/CMakeLists.txt
@@ -18,63 +18,9 @@
# Boston, MA 02110-1301, USA.
########################################################################
-# generate helper scripts to expand templated files
-########################################################################
-include(GrPython)
-
-file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py "
-#!${PYTHON_EXECUTABLE}
-
-import sys, os, re
-sys.path.append('${GR_RUNTIME_PYTHONPATH}')
-os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
-os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
-
-if __name__ == '__main__':
- import build_utils
- root, inp = sys.argv[1:3]
- for sig in sys.argv[3:]:
- name = re.sub ('X+', sig, root)
- d = build_utils.standard_dict(name, sig, 'fec')
- build_utils.expand_template(d, inp)
-
-")
-
-macro(expand_h root)
- #make a list of all the generated files
- unset(expanded_files_h)
- foreach(sig ${ARGN})
- string(REGEX REPLACE "X+" ${sig} name ${root})
- list(APPEND expanded_files_h ${CMAKE_CURRENT_BINARY_DIR}/${name}.h)
- endforeach(sig)
-
- #create a command to generate the files
- add_custom_command(
- OUTPUT ${expanded_files_h}
- DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.h.t
- COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
- ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
- ${root} ${root}.h.t ${ARGN}
- )
-
- #install rules for the generated h files
- list(APPEND generated_includes ${expanded_files_h})
-endmacro(expand_h)
-
-########################################################################
-# Invoke macro to generate various sources
-########################################################################
-#expand_h(foo_XX ss ii cc)
-
-add_custom_target(fec_generated_includes DEPENDS
- ${generated_includes}
-)
-
-########################################################################
# Install header files
########################################################################
install(FILES
- ${generated_includes}
api.h
generic_decoder.h
generic_encoder.h
diff --git a/gr-fec/lib/CMakeLists.txt b/gr-fec/lib/CMakeLists.txt
index 40b829987f..cbc5e5facd 100644
--- a/gr-fec/lib/CMakeLists.txt
+++ b/gr-fec/lib/CMakeLists.txt
@@ -101,6 +101,18 @@ target_link_libraries(gnuradio-fec ${gnuradio_fec_libs})
GR_LIBRARY_FOO(gnuradio-fec RUNTIME_COMPONENT "fec_runtime" DEVEL_COMPONENT "fec_devel")
if(ENABLE_STATIC_LIBS)
+ if(ENABLE_GR_CTRLPORT)
+ # Remove GR_CTRLPORT set this target's definitions.
+ # Makes sure we don't try to use ControlPort stuff in source files
+ # since Ice will not work with static libs.
+ GET_DIRECTORY_PROPERTY(STATIC_DEFS COMPILE_DEFINITIONS)
+ list(REMOVE_ITEM STATIC_DEFS "GR_CTRLPORT")
+ SET_PROPERTY(DIRECTORY PROPERTY COMPILE_DEFINITIONS "${STATIC_DEFS}")
+
+ # readd it to the target since we removed it from the directory-wide list.
+ SET_PROPERTY(TARGET gnuradio-fec APPEND PROPERTY COMPILE_DEFINITIONS "GR_CTRLPORT")
+ endif(ENABLE_GR_CTRLPORT)
+
add_library(gnuradio-fec_static STATIC ${gnuradio_fec_sources})
if(NOT WIN32)
diff --git a/gr-fec/lib/dummy_decoder_impl.cc b/gr-fec/lib/dummy_decoder_impl.cc
index 5ab91d0799..105057447f 100644
--- a/gr-fec/lib/dummy_decoder_impl.cc
+++ b/gr-fec/lib/dummy_decoder_impl.cc
@@ -116,6 +116,7 @@ namespace gr {
int8_t *out = (int8_t*)outbuffer;
//memcpy(out, in, d_frame_size*sizeof(char));
+ //volk_32f_binary_slicer_8i(out, in, d_frame_size);
volk_32f_s32f_convert_8i(out, in, 1.0/2.0, d_frame_size);
}
diff --git a/gr-fft/lib/CMakeLists.txt b/gr-fft/lib/CMakeLists.txt
index c1c58f36fd..41f6a9b728 100644
--- a/gr-fft/lib/CMakeLists.txt
+++ b/gr-fft/lib/CMakeLists.txt
@@ -84,6 +84,18 @@ target_link_libraries(gnuradio-fft ${fft_libs})
GR_LIBRARY_FOO(gnuradio-fft RUNTIME_COMPONENT "fft_runtime" DEVEL_COMPONENT "fft_devel")
if(ENABLE_STATIC_LIBS)
+ if(ENABLE_GR_CTRLPORT)
+ # Remove GR_CTRLPORT set this target's definitions.
+ # Makes sure we don't try to use ControlPort stuff in source files
+ # since Ice will not work with static libs.
+ GET_DIRECTORY_PROPERTY(STATIC_DEFS COMPILE_DEFINITIONS)
+ list(REMOVE_ITEM STATIC_DEFS "GR_CTRLPORT")
+ SET_PROPERTY(DIRECTORY PROPERTY COMPILE_DEFINITIONS "${STATIC_DEFS}")
+
+ # readd it to the target since we removed it from the directory-wide list.
+ SET_PROPERTY(TARGET gnuradio-fft APPEND PROPERTY COMPILE_DEFINITIONS "GR_CTRLPORT")
+ endif(ENABLE_GR_CTRLPORT)
+
add_library(gnuradio-fft_static STATIC ${fft_sources})
if(NOT WIN32)
diff --git a/gr-filter/examples/resampler_demo.grc b/gr-filter/examples/resampler_demo.grc
index 62ebdd34cd..17875f67bb 100644
--- a/gr-filter/examples/resampler_demo.grc
+++ b/gr-filter/examples/resampler_demo.grc
@@ -1,6 +1,6 @@
<?xml version='1.0' encoding='ASCII'?>
<flow_graph>
- <timestamp>Sun Feb 24 19:43:22 2013</timestamp>
+ <timestamp>Sat Jul 12 13:34:43 2014</timestamp>
<block>
<key>options</key>
<param>
@@ -29,7 +29,7 @@
</param>
<param>
<key>generate_options</key>
- <value>wx_gui</value>
+ <value>qt_gui</value>
</param>
<param>
<key>category</key>
@@ -52,8 +52,12 @@
<value></value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(10, 10)</value>
+ <value>(-2, 0)</value>
</param>
<param>
<key>_rotation</key>
@@ -64,7 +68,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>rs_taps</value>
+ <value>nphases</value>
</param>
<param>
<key>_enabled</key>
@@ -72,11 +76,15 @@
</param>
<param>
<key>value</key>
- <value>firdes.low_pass(nphases, nphases, frac_bw, 0.5-frac_bw)</value>
+ <value>32</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(273, 154)</value>
+ <value>(653, -1)</value>
</param>
<param>
<key>_rotation</key>
@@ -87,7 +95,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>nphases</value>
+ <value>rs_taps</value>
</param>
<param>
<key>_enabled</key>
@@ -95,11 +103,15 @@
</param>
<param>
<key>value</key>
- <value>32</value>
+ <value>firdes.low_pass(nphases, nphases, frac_bw, 0.5-frac_bw)</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(185, 153)</value>
+ <value>(741, -1)</value>
</param>
<param>
<key>_rotation</key>
@@ -107,10 +119,37 @@
</param>
</block>
<block>
- <key>variable_static_text</key>
+ <key>import</key>
<param>
<key>id</key>
- <value>samp_rate</value>
+ <value>import_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>import</key>
+ <value>import math</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(0, 74)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable_qtgui_label</key>
+ <param>
+ <key>id</key>
+ <value>new_rate</value>
</param>
<param>
<key>_enabled</key>
@@ -118,31 +157,31 @@
</param>
<param>
<key>label</key>
- <value>Sample Rate</value>
+ <value>Resampling Rate</value>
</param>
<param>
- <key>value</key>
- <value>44100</value>
+ <key>type</key>
+ <value>real</value>
</param>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>value</key>
+ <value>48000</value>
</param>
<param>
<key>formatter</key>
<value>None</value>
</param>
<param>
- <key>grid_pos</key>
- <value>0, 0, 1, 1</value>
+ <key>gui_hint</key>
+ <value>0,1,1,1</value>
</param>
<param>
- <key>notebook</key>
+ <key>alias</key>
<value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(179, 14)</value>
+ <value>(291, 0)</value>
</param>
<param>
<key>_rotation</key>
@@ -150,42 +189,58 @@
</param>
</block>
<block>
- <key>variable_static_text</key>
+ <key>analog_sig_source_x</key>
<param>
<key>id</key>
- <value>new_rate</value>
+ <value>analog_sig_source_x_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>label</key>
- <value>Resampled Rate</value>
+ <key>type</key>
+ <value>float</value>
</param>
<param>
- <key>value</key>
- <value>48000</value>
+ <key>samp_rate</key>
+ <value>samp_rate</value>
</param>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>waveform</key>
+ <value>analog.GR_TRI_WAVE</value>
</param>
<param>
- <key>formatter</key>
- <value>None</value>
+ <key>freq</key>
+ <value>0.05</value>
</param>
<param>
- <key>grid_pos</key>
- <value>0, 1, 1, 1</value>
+ <key>amp</key>
+ <value>2</value>
+ </param>
+ <param>
+ <key>offset</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>notebook</key>
+ <key>affinity</key>
<value></value>
</param>
<param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(328, 15)</value>
+ <value>(4, 137)</value>
</param>
<param>
<key>_rotation</key>
@@ -193,7 +248,7 @@
</param>
</block>
<block>
- <key>variable_static_text</key>
+ <key>variable_qtgui_label</key>
<param>
<key>id</key>
<value>frac_bw</value>
@@ -207,28 +262,28 @@
<value>Fractional Bandwidth</value>
</param>
<param>
- <key>value</key>
- <value>0.45</value>
+ <key>type</key>
+ <value>real</value>
</param>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>value</key>
+ <value>.45</value>
</param>
<param>
<key>formatter</key>
<value>lambda x: "%0.2f"%x</value>
</param>
<param>
- <key>grid_pos</key>
+ <key>gui_hint</key>
<value>0,2,1,1</value>
</param>
<param>
- <key>notebook</key>
+ <key>alias</key>
<value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(473, 14)</value>
+ <value>(431, -1)</value>
</param>
<param>
<key>_rotation</key>
@@ -236,10 +291,10 @@
</param>
</block>
<block>
- <key>pfb_arb_resampler_xxx</key>
+ <key>blocks_add_const_vxx</key>
<param>
<key>id</key>
- <value>pfb_arb_resampler_xxx_0</value>
+ <value>adder</value>
</param>
<param>
<key>_enabled</key>
@@ -247,27 +302,86 @@
</param>
<param>
<key>type</key>
- <value>ccf</value>
+ <value>float</value>
</param>
<param>
- <key>rrate</key>
- <value>float(new_rate)/samp_rate</value>
+ <key>const</key>
+ <value>-1.0</value>
</param>
<param>
- <key>taps</key>
- <value>rs_taps</value>
+ <key>vlen</key>
+ <value>1</value>
</param>
<param>
- <key>nfilts</key>
- <value>nphases</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>atten</key>
- <value>100</value>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(649, 469)</value>
+ <value>(175, 169)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>blocks_throttle</key>
+ <param>
+ <key>id</key>
+ <value>throttle</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>float</value>
+ </param>
+ <param>
+ <key>samples_per_second</key>
+ <value>samp_rate</value>
+ </param>
+ <param>
+ <key>vlen</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>ignoretag</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(307, 169)</value>
</param>
<param>
<key>_rotation</key>
@@ -289,8 +403,24 @@
<value>math.pi</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(429, 501)</value>
+ <value>(478, 169)</value>
</param>
<param>
<key>_rotation</key>
@@ -298,101 +428,112 @@
</param>
</block>
<block>
- <key>wxgui_fftsink2</key>
+ <key>variable_qtgui_label</key>
<param>
<key>id</key>
- <value>orig_fft</value>
+ <value>samp_rate</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
+ <key>label</key>
+ <value>Sampling Rate</value>
+ </param>
+ <param>
<key>type</key>
- <value>complex</value>
+ <value>real</value>
</param>
<param>
- <key>title</key>
- <value>Original Spectrum</value>
+ <key>value</key>
+ <value>44100</value>
</param>
<param>
- <key>samp_rate</key>
- <value>samp_rate</value>
+ <key>formatter</key>
+ <value>None</value>
</param>
<param>
- <key>baseband_freq</key>
- <value>0</value>
+ <key>gui_hint</key>
+ <value>0,0,1,1</value>
</param>
<param>
- <key>y_per_div</key>
- <value>10</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>y_divs</key>
- <value>10</value>
+ <key>_coordinate</key>
+ <value>(162, 0)</value>
</param>
<param>
- <key>ref_level</key>
- <value>30</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
+ </block>
+ <block>
+ <key>pfb_arb_resampler_xxx</key>
<param>
- <key>ref_scale</key>
- <value>2.0</value>
+ <key>id</key>
+ <value>pfb_arb_resampler_xxx_0</value>
</param>
<param>
- <key>fft_size</key>
- <value>1024</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>fft_rate</key>
- <value>30</value>
+ <key>type</key>
+ <value>ccf</value>
</param>
<param>
- <key>peak_hold</key>
- <value>False</value>
+ <key>rrate</key>
+ <value>float(new_rate)/samp_rate</value>
</param>
<param>
- <key>average</key>
- <value>False</value>
+ <key>taps</key>
+ <value>rs_taps</value>
</param>
<param>
- <key>avg_alpha</key>
- <value>0</value>
+ <key>nfilts</key>
+ <value>nphases</value>
</param>
<param>
- <key>win</key>
- <value>None</value>
+ <key>atten</key>
+ <value>100</value>
</param>
<param>
- <key>win_size</key>
- <value></value>
+ <key>samp_delay</key>
+ <value>0</value>
</param>
<param>
- <key>grid_pos</key>
- <value>1, 0, 1, 3</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>notebook</key>
+ <key>affinity</key>
<value></value>
</param>
<param>
- <key>freqvar</key>
- <value>None</value>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(414, 279)</value>
+ <value>(343, 253)</value>
</param>
<param>
<key>_rotation</key>
- <value>180</value>
+ <value>0</value>
</param>
</block>
<block>
- <key>wxgui_fftsink2</key>
+ <key>qtgui_freq_sink_x</key>
<param>
<key>id</key>
- <value>resamp_fft</value>
+ <value>qtgui_freq_sink_x_0</value>
</param>
<param>
<key>_enabled</key>
@@ -403,150 +544,240 @@
<value>complex</value>
</param>
<param>
- <key>title</key>
- <value>Resampled Spectrum</value>
+ <key>name</key>
+ <value>Original Spectrum</value>
</param>
<param>
- <key>samp_rate</key>
- <value>new_rate</value>
+ <key>fftsize</key>
+ <value>1024</value>
+ </param>
+ <param>
+ <key>wintype</key>
+ <value>firdes.WIN_BLACKMAN_hARRIS</value>
</param>
<param>
- <key>baseband_freq</key>
+ <key>fc</key>
<value>0</value>
</param>
<param>
- <key>y_per_div</key>
- <value>10</value>
+ <key>bw</key>
+ <value>samp_rate</value>
</param>
<param>
- <key>y_divs</key>
- <value>10</value>
+ <key>grid</key>
+ <value>False</value>
</param>
<param>
- <key>ref_level</key>
- <value>30</value>
+ <key>autoscale</key>
+ <value>False</value>
</param>
<param>
- <key>ref_scale</key>
- <value>2.0</value>
+ <key>average</key>
+ <value>1.0</value>
</param>
<param>
- <key>fft_size</key>
- <value>1024</value>
+ <key>ymin</key>
+ <value>-140</value>
+ </param>
+ <param>
+ <key>ymax</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>nconnections</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>update_time</key>
+ <value>0.10</value>
</param>
<param>
- <key>fft_rate</key>
- <value>30</value>
+ <key>gui_hint</key>
+ <value>1,0,1,3</value>
</param>
<param>
- <key>peak_hold</key>
+ <key>showports</key>
<value>True</value>
</param>
<param>
- <key>average</key>
- <value>False</value>
+ <key>label1</key>
+ <value>Original Spectrum</value>
</param>
<param>
- <key>avg_alpha</key>
- <value>0</value>
+ <key>width1</key>
+ <value>1</value>
</param>
<param>
- <key>win</key>
- <value>None</value>
+ <key>color1</key>
+ <value>"blue"</value>
+ </param>
+ <param>
+ <key>alpha1</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label2</key>
+ <value>Resampled Spectrum</value>
+ </param>
+ <param>
+ <key>width2</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color2</key>
+ <value>"red"</value>
</param>
<param>
- <key>win_size</key>
+ <key>alpha2</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label3</key>
<value></value>
</param>
<param>
- <key>grid_pos</key>
- <value>2, 0, 1, 3</value>
+ <key>width3</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color3</key>
+ <value>"green"</value>
+ </param>
+ <param>
+ <key>alpha3</key>
+ <value>1.0</value>
</param>
<param>
- <key>notebook</key>
+ <key>label4</key>
<value></value>
</param>
<param>
- <key>freqvar</key>
- <value>None</value>
+ <key>width4</key>
+ <value>1</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(645, 241)</value>
+ <key>color4</key>
+ <value>"black"</value>
</param>
<param>
- <key>_rotation</key>
- <value>180</value>
+ <key>alpha4</key>
+ <value>1.0</value>
</param>
- </block>
- <block>
- <key>blocks_add_const_vxx</key>
<param>
- <key>id</key>
- <value>adder</value>
+ <key>label5</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>width5</key>
+ <value>1</value>
</param>
<param>
- <key>type</key>
- <value>float</value>
+ <key>color5</key>
+ <value>"cyan"</value>
</param>
<param>
- <key>const</key>
- <value>-1.0</value>
+ <key>alpha5</key>
+ <value>1.0</value>
</param>
<param>
- <key>vlen</key>
+ <key>label6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width6</key>
<value>1</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(227, 303)</value>
+ <key>color6</key>
+ <value>"magenta"</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>alpha6</key>
+ <value>1.0</value>
</param>
- </block>
- <block>
- <key>analog_sig_source_x</key>
<param>
- <key>id</key>
- <value>analog_sig_source_x_0</value>
+ <key>label7</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>width7</key>
+ <value>1</value>
</param>
<param>
- <key>type</key>
- <value>float</value>
+ <key>color7</key>
+ <value>"yellow"</value>
</param>
<param>
- <key>samp_rate</key>
- <value>samp_rate</value>
+ <key>alpha7</key>
+ <value>1.0</value>
</param>
<param>
- <key>waveform</key>
- <value>analog.GR_TRI_WAVE</value>
+ <key>label8</key>
+ <value></value>
</param>
<param>
- <key>freq</key>
- <value>0.05</value>
+ <key>width8</key>
+ <value>1</value>
</param>
<param>
- <key>amp</key>
- <value>2</value>
+ <key>color8</key>
+ <value>"dark red"</value>
</param>
<param>
- <key>offset</key>
+ <key>alpha8</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label9</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color9</key>
+ <value>"dark green"</value>
+ </param>
+ <param>
+ <key>alpha9</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label10</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color10</key>
+ <value>"dark blue"</value>
+ </param>
+ <param>
+ <key>alpha10</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
<value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(36, 271)</value>
+ <value>(660, 135)</value>
</param>
<param>
<key>_rotation</key>
@@ -554,53 +785,254 @@
</param>
</block>
<block>
- <key>import</key>
+ <key>qtgui_freq_sink_x</key>
<param>
<key>id</key>
- <value>import_0</value>
+ <value>qtgui_freq_sink_x_0_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>import</key>
- <value>import math</value>
+ <key>type</key>
+ <value>complex</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(11, 75)</value>
+ <key>name</key>
+ <value>Resampled Spectrum</value>
</param>
<param>
- <key>_rotation</key>
+ <key>fftsize</key>
+ <value>1024</value>
+ </param>
+ <param>
+ <key>wintype</key>
+ <value>firdes.WIN_BLACKMAN_hARRIS</value>
+ </param>
+ <param>
+ <key>fc</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>blocks_throttle</key>
<param>
- <key>id</key>
- <value>throttle</value>
+ <key>bw</key>
+ <value>new_rate</value>
</param>
<param>
- <key>_enabled</key>
+ <key>grid</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>autoscale</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>average</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>ymin</key>
+ <value>-140</value>
+ </param>
+ <param>
+ <key>ymax</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>nconnections</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>update_time</key>
+ <value>0.10</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value>2,0,1,3</value>
+ </param>
+ <param>
+ <key>showports</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>float</value>
+ <key>label1</key>
+ <value>Original Spectrum</value>
</param>
<param>
- <key>samples_per_second</key>
- <value>samp_rate</value>
+ <key>width1</key>
+ <value>1</value>
</param>
<param>
- <key>vlen</key>
+ <key>color1</key>
+ <value>"blue"</value>
+ </param>
+ <param>
+ <key>alpha1</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label2</key>
+ <value>Resampled Spectrum</value>
+ </param>
+ <param>
+ <key>width2</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color2</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>alpha2</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width3</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color3</key>
+ <value>"green"</value>
+ </param>
+ <param>
+ <key>alpha3</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width4</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color4</key>
+ <value>"black"</value>
+ </param>
+ <param>
+ <key>alpha4</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width5</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color5</key>
+ <value>"cyan"</value>
+ </param>
+ <param>
+ <key>alpha5</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width6</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color6</key>
+ <value>"magenta"</value>
+ </param>
+ <param>
+ <key>alpha6</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width7</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color7</key>
+ <value>"yellow"</value>
+ </param>
+ <param>
+ <key>alpha7</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label8</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color8</key>
+ <value>"dark red"</value>
+ </param>
+ <param>
+ <key>alpha8</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label9</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color9</key>
+ <value>"dark green"</value>
+ </param>
+ <param>
+ <key>alpha9</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label10</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width10</key>
<value>1</value>
</param>
<param>
+ <key>color10</key>
+ <value>"dark blue"</value>
+ </param>
+ <param>
+ <key>alpha10</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(227, 492)</value>
+ <value>(636, 253)</value>
</param>
<param>
<key>_rotation</key>
@@ -608,38 +1040,38 @@
</param>
</block>
<connection>
- <source_block_id>adder</source_block_id>
- <sink_block_id>throttle</sink_block_id>
+ <source_block_id>throttle</source_block_id>
+ <sink_block_id>analog_frequency_modulator_fc_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>pfb_arb_resampler_xxx_0</source_block_id>
- <sink_block_id>resamp_fft</sink_block_id>
+ <source_block_id>analog_frequency_modulator_fc_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>throttle</source_block_id>
- <sink_block_id>analog_frequency_modulator_fc_0</sink_block_id>
+ <source_block_id>analog_frequency_modulator_fc_0</source_block_id>
+ <sink_block_id>qtgui_freq_sink_x_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>analog_frequency_modulator_fc_0</source_block_id>
- <sink_block_id>pfb_arb_resampler_xxx_0</sink_block_id>
+ <source_block_id>analog_sig_source_x_0</source_block_id>
+ <sink_block_id>adder</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>analog_frequency_modulator_fc_0</source_block_id>
- <sink_block_id>orig_fft</sink_block_id>
+ <source_block_id>adder</source_block_id>
+ <sink_block_id>throttle</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>analog_sig_source_x_0</source_block_id>
- <sink_block_id>adder</sink_block_id>
+ <source_block_id>pfb_arb_resampler_xxx_0</source_block_id>
+ <sink_block_id>qtgui_freq_sink_x_0_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
diff --git a/gr-filter/include/gnuradio/filter/CMakeLists.txt b/gr-filter/include/gnuradio/filter/CMakeLists.txt
index b5cc432c6a..e75f02b7a2 100644
--- a/gr-filter/include/gnuradio/filter/CMakeLists.txt
+++ b/gr-filter/include/gnuradio/filter/CMakeLists.txt
@@ -1,4 +1,4 @@
-# Copyright 2012 Free Software Foundation, Inc.
+# Copyright 2012,2014 Free Software Foundation, Inc.
#
# This file is part of GNU Radio
#
@@ -18,56 +18,13 @@
# Boston, MA 02110-1301, USA.
########################################################################
-# generate helper scripts to expand templated files
-########################################################################
-include(GrPython)
-
-file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py "
-#!${PYTHON_EXECUTABLE}
-
-import sys, os, re
-sys.path.append('${GR_RUNTIME_PYTHONPATH}')
-os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
-os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
-
-if __name__ == '__main__':
- import build_utils
- root, inp = sys.argv[1:3]
- for sig in sys.argv[3:]:
- name = re.sub ('X+', sig, root)
- d = build_utils.standard_dict2(name, sig, 'filter')
- build_utils.expand_template(d, inp)
-
-")
-
-macro(expand_h root)
- #make a list of all the generated files
- unset(expanded_files_h)
- foreach(sig ${ARGN})
- string(REGEX REPLACE "X+" ${sig} name ${root})
- list(APPEND expanded_files_h ${CMAKE_CURRENT_BINARY_DIR}/${name}.h)
- endforeach(sig)
-
- #create a command to generate the files
- add_custom_command(
- OUTPUT ${expanded_files_h}
- DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.h.t
- COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
- ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
- ${root} ${root}.h.t ${ARGN}
- )
-
- #install rules for the generated h files
- list(APPEND generated_includes ${expanded_files_h})
-endmacro(expand_h)
-
-########################################################################
-# Invoke macro to generate various sources
+# Invoke macro to generate various headers
#######################################################################
-expand_h(fir_filter_XXX ccc ccf fcc fff fsf scc)
-expand_h(freq_xlating_fir_filter_XXX ccc ccf fcc fcf scf scc)
-expand_h(interp_fir_filter_XXX ccc ccf fcc fff fsf scc)
-expand_h(rational_resampler_base_XXX ccc ccf fcc fff fsf scc)
+include(GrMiscUtils)
+GR_EXPAND_X_H(filter fir_filter_XXX ccc ccf fcc fff fsf scc)
+GR_EXPAND_X_H(filter freq_xlating_fir_filter_XXX ccc ccf fcc fcf scf scc)
+GR_EXPAND_X_H(filter interp_fir_filter_XXX ccc ccf fcc fff fsf scc)
+GR_EXPAND_X_H(filter rational_resampler_base_XXX ccc ccf fcc fff fsf scc)
add_custom_target(filter_generated_includes DEPENDS
${generated_includes}
diff --git a/gr-filter/lib/CMakeLists.txt b/gr-filter/lib/CMakeLists.txt
index 5f1dd56a5c..99f54ca91c 100644
--- a/gr-filter/lib/CMakeLists.txt
+++ b/gr-filter/lib/CMakeLists.txt
@@ -1,4 +1,4 @@
-# Copyright 2012-2013 Free Software Foundation, Inc.
+# Copyright 2012-2014 Free Software Foundation, Inc.
#
# This file is part of GNU Radio
#
@@ -18,73 +18,13 @@
# Boston, MA 02110-1301, USA.
########################################################################
-# generate helper scripts to expand templated files
+# Invoke macro to generate various sources and headers
########################################################################
-include(GrPython)
-
-file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py "
-#!${PYTHON_EXECUTABLE}
-
-import sys, os, re
-sys.path.append('${GR_RUNTIME_PYTHONPATH}')
-os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
-os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
-
-if __name__ == '__main__':
- import build_utils
- root, inp = sys.argv[1:3]
- for sig in sys.argv[3:]:
- name = re.sub ('X+', sig, root)
- d = build_utils.standard_impl_dict2(name, sig, 'filter')
- build_utils.expand_template(d, inp)
-")
-
-macro(expand_cc root)
- #make a list of all the generated files
- unset(expanded_files_cc)
- unset(expanded_files_h)
- foreach(sig ${ARGN})
- string(REGEX REPLACE "X+" ${sig} name ${root})
- list(APPEND expanded_files_cc ${CMAKE_CURRENT_BINARY_DIR}/${name}.cc)
- list(APPEND expanded_files_h ${CMAKE_CURRENT_BINARY_DIR}/${name}.h)
- endforeach(sig)
-
- #create a command to generate the source files
- add_custom_command(
- OUTPUT ${expanded_files_cc}
- DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.cc.t
- COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
- ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
- ${root} ${root}.cc.t ${ARGN}
- )
-
- #create a command to generate the header file
- add_custom_command(
- OUTPUT ${expanded_files_h}
- DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.h.t
- COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
- ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
- ${root} ${root}.h.t ${ARGN}
- )
-
- #make source files depends on headers to force generation
- set_source_files_properties(${expanded_files_cc}
- PROPERTIES OBJECT_DEPENDS "${expanded_files_h}"
- )
-
- #install rules for the generated cc files
- list(APPEND generated_sources ${expanded_files_cc})
- list(APPEND generated_headers ${expanded_files_h})
-endmacro(expand_cc)
-
-########################################################################
-# Invoke macro to generate various sources
-########################################################################
-expand_cc(fir_filter_XXX_impl ccc ccf fcc fff fsf scc)
-expand_cc(freq_xlating_fir_filter_XXX_impl ccc ccf fcc fcf scf scc)
-expand_cc(interp_fir_filter_XXX_impl ccc ccf fcc fff fsf scc)
-expand_cc(rational_resampler_base_XXX_impl ccc ccf fcc fff fsf scc)
-
+include(GrMiscUtils)
+GR_EXPAND_X_CC_H(filter fir_filter_XXX_impl ccc ccf fcc fff fsf scc)
+GR_EXPAND_X_CC_H(filter freq_xlating_fir_filter_XXX_impl ccc ccf fcc fcf scf scc)
+GR_EXPAND_X_CC_H(filter interp_fir_filter_XXX_impl ccc ccf fcc fff fsf scc)
+GR_EXPAND_X_CC_H(filter rational_resampler_base_XXX_impl ccc ccf fcc fff fsf scc)
########################################################################
# Setup the include and linker paths
@@ -185,6 +125,18 @@ add_dependencies(gnuradio-filter
gnuradio-runtime gnuradio-fft)
if(ENABLE_STATIC_LIBS)
+ if(ENABLE_GR_CTRLPORT)
+ # Remove GR_CTRLPORT set this target's definitions.
+ # Makes sure we don't try to use ControlPort stuff in source files
+ # since Ice will not work with static libs.
+ GET_DIRECTORY_PROPERTY(STATIC_DEFS COMPILE_DEFINITIONS)
+ list(REMOVE_ITEM STATIC_DEFS "GR_CTRLPORT")
+ SET_PROPERTY(DIRECTORY PROPERTY COMPILE_DEFINITIONS "${STATIC_DEFS}")
+
+ # readd it to the target since we removed it from the directory-wide list.
+ SET_PROPERTY(TARGET gnuradio-filter APPEND PROPERTY COMPILE_DEFINITIONS "GR_CTRLPORT")
+ endif(ENABLE_GR_CTRLPORT)
+
add_library(gnuradio-filter_static STATIC ${filter_sources})
add_dependencies(gnuradio-filter_static
diff --git a/gr-noaa/examples/file_rx_hrpt.grc b/gr-noaa/examples/file_rx_hrpt.grc
index 3a7caaed71..93a39d1f5d 100644
--- a/gr-noaa/examples/file_rx_hrpt.grc
+++ b/gr-noaa/examples/file_rx_hrpt.grc
@@ -1,69 +1,63 @@
<?xml version='1.0' encoding='ASCII'?>
<flow_graph>
- <timestamp>Thu Oct 27 13:48:25 2011</timestamp>
+ <timestamp>Sat Jul 12 11:18:29 2014</timestamp>
<block>
- <key>variable</key>
+ <key>options</key>
<param>
<key>id</key>
- <value>max_carrier_offset</value>
+ <value>file_rx_hrpt</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>2*math.pi*100e3/sample_rate</value>
+ <key>title</key>
+ <value>USRP HRPT Receiver</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(575, 19)</value>
+ <key>author</key>
+ <value></value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>description</key>
+ <value></value>
</param>
- </block>
- <block>
- <key>variable</key>
<param>
- <key>id</key>
- <value>sym_rate</value>
+ <key>window_size</key>
+ <value>4096,4096</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>generate_options</key>
+ <value>no_gui</value>
</param>
<param>
- <key>value</key>
- <value>600*1109</value>
+ <key>category</key>
+ <value>Custom</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(301, 19)</value>
+ <key>run_options</key>
+ <value>prompt</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>run</key>
+ <value>True</value>
</param>
- </block>
- <block>
- <key>variable</key>
<param>
- <key>id</key>
- <value>sps</value>
+ <key>max_nouts</key>
+ <value>0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>realtime_scheduling</key>
+ <value></value>
</param>
<param>
- <key>value</key>
- <value>sample_rate/sym_rate</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(397, 19)</value>
+ <value>(10, 10)</value>
</param>
<param>
<key>_rotation</key>
@@ -74,7 +68,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>hs</value>
+ <value>sample_rate</value>
</param>
<param>
<key>_enabled</key>
@@ -82,11 +76,15 @@
</param>
<param>
<key>value</key>
- <value>int(sps/2.0)</value>
+ <value>4e6</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(499, 19)</value>
+ <value>(198, 17)</value>
</param>
<param>
<key>_rotation</key>
@@ -97,7 +95,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>max_clock_offset</value>
+ <value>config_filename</value>
</param>
<param>
<key>_enabled</key>
@@ -105,11 +103,15 @@
</param>
<param>
<key>value</key>
- <value>100e-6</value>
+ <value>os.environ['HOME']+'/.gnuradio/config.conf'</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(705, 19)</value>
+ <value>(13, 168)</value>
</param>
<param>
<key>_rotation</key>
@@ -117,22 +119,26 @@
</param>
</block>
<block>
- <key>import</key>
+ <key>variable</key>
<param>
<key>id</key>
- <value>import_0</value>
+ <value>max_clock_offset</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>import</key>
- <value>import math, os</value>
+ <key>value</key>
+ <value>100e-6</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(9, 106)</value>
+ <value>(705, 19)</value>
</param>
<param>
<key>_rotation</key>
@@ -143,7 +149,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>config_filename</value>
+ <value>hs</value>
</param>
<param>
<key>_enabled</key>
@@ -151,11 +157,15 @@
</param>
<param>
<key>value</key>
- <value>os.environ['HOME']+'/.gnuradio/config.conf'</value>
+ <value>int(sps/2.0)</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(13, 168)</value>
+ <value>(499, 19)</value>
</param>
<param>
<key>_rotation</key>
@@ -166,7 +176,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>sample_rate</value>
+ <value>sps</value>
</param>
<param>
<key>_enabled</key>
@@ -174,11 +184,15 @@
</param>
<param>
<key>value</key>
- <value>4e6</value>
+ <value>sample_rate/sym_rate</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(198, 17)</value>
+ <value>(397, 19)</value>
</param>
<param>
<key>_rotation</key>
@@ -186,42 +200,26 @@
</param>
</block>
<block>
- <key>digital_clock_recovery_mm_xx</key>
+ <key>variable</key>
<param>
<key>id</key>
- <value>digital_clock_recovery_mm_xx_0</value>
+ <value>sym_rate</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>float</value>
- </param>
- <param>
- <key>omega</key>
- <value>sps/2.0</value>
- </param>
- <param>
- <key>gain_omega</key>
- <value>clock_alpha**2/4.0</value>
- </param>
- <param>
- <key>mu</key>
- <value>0.5</value>
- </param>
- <param>
- <key>gain_mu</key>
- <value>clock_alpha</value>
+ <key>value</key>
+ <value>600*1109</value>
</param>
<param>
- <key>omega_relative_limit</key>
- <value>max_clock_offset</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(897, 341)</value>
+ <value>(301, 19)</value>
</param>
<param>
<key>_rotation</key>
@@ -229,22 +227,26 @@
</param>
</block>
<block>
- <key>virtual_sink</key>
+ <key>variable</key>
<param>
<key>id</key>
- <value>virtual_sink_0</value>
+ <value>max_carrier_offset</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>stream_id</key>
- <value>baseband</value>
+ <key>value</key>
+ <value>2*math.pi*100e3/sample_rate</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(1139, 373)</value>
+ <value>(575, 19)</value>
</param>
<param>
<key>_rotation</key>
@@ -252,30 +254,26 @@
</param>
</block>
<block>
- <key>noaa_hrpt_pll_cf</key>
+ <key>import</key>
<param>
<key>id</key>
- <value>pll</value>
+ <value>import_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>alpha</key>
- <value>pll_alpha</value>
- </param>
- <param>
- <key>beta</key>
- <value>pll_alpha**2/4.0</value>
+ <key>import</key>
+ <value>import math, os</value>
</param>
<param>
- <key>max_offset</key>
- <value>max_carrier_offset</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(470, 357)</value>
+ <value>(9, 106)</value>
</param>
<param>
<key>_rotation</key>
@@ -283,10 +281,10 @@
</param>
</block>
<block>
- <key>blocks_moving_average_xx</key>
+ <key>digital_clock_recovery_mm_xx</key>
<param>
<key>id</key>
- <value>blocks_moving_average_xx_0</value>
+ <value>digital_clock_recovery_mm_xx_0</value>
</param>
<param>
<key>_enabled</key>
@@ -297,55 +295,44 @@
<value>float</value>
</param>
<param>
- <key>length</key>
- <value>hs</value>
- </param>
- <param>
- <key>scale</key>
- <value>1.0/hs</value>
- </param>
- <param>
- <key>max_iter</key>
- <value>4000</value>
+ <key>omega</key>
+ <value>sps/2.0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(683, 357)</value>
+ <key>gain_omega</key>
+ <value>clock_alpha**2/4.0</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>mu</key>
+ <value>0.5</value>
</param>
- </block>
- <block>
- <key>blocks_file_sink</key>
<param>
- <key>id</key>
- <value>frame_sink</value>
+ <key>gain_mu</key>
+ <value>clock_alpha</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>omega_relative_limit</key>
+ <value>max_clock_offset</value>
</param>
<param>
- <key>file</key>
- <value>output_filename</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>type</key>
- <value>short</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>unbuffered</key>
- <value>False</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(809, 595)</value>
+ <value>(897, 341)</value>
</param>
<param>
<key>_rotation</key>
@@ -353,26 +340,22 @@
</param>
</block>
<block>
- <key>noaa_hrpt_decoder</key>
+ <key>virtual_sink</key>
<param>
<key>id</key>
- <value>decoder</value>
+ <value>virtual_sink_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>verbose</key>
- <value>True</value>
- </param>
- <param>
- <key>output</key>
- <value>True</value>
+ <key>stream_id</key>
+ <value>baseband</value>
</param>
<param>
<key>_coordinate</key>
- <value>(810, 496)</value>
+ <value>(1139, 373)</value>
</param>
<param>
<key>_rotation</key>
@@ -380,10 +363,10 @@
</param>
</block>
<block>
- <key>gr_agc_xx</key>
+ <key>blocks_moving_average_xx</key>
<param>
<key>id</key>
- <value>agc</value>
+ <value>blocks_moving_average_xx_0</value>
</param>
<param>
<key>_enabled</key>
@@ -391,46 +374,39 @@
</param>
<param>
<key>type</key>
- <value>complex</value>
+ <value>float</value>
</param>
<param>
- <key>rate</key>
- <value>1e-6</value>
+ <key>length</key>
+ <value>hs</value>
</param>
<param>
- <key>reference</key>
- <value>1.0</value>
+ <key>scale</key>
+ <value>1.0/hs</value>
</param>
<param>
- <key>gain</key>
- <value>1.0</value>
+ <key>max_iter</key>
+ <value>4000</value>
</param>
<param>
- <key>max_gain</key>
- <value>1.0</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(302, 349)</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>_rotation</key>
+ <key>minoutbuf</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>blocks_interleaved_short_to_complex</key>
- <param>
- <key>id</key>
- <value>blocks_interleaved_short_to_complex_0</value>
- </param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(92, 377)</value>
+ <value>(683, 357)</value>
</param>
<param>
<key>_rotation</key>
@@ -438,65 +414,81 @@
</param>
</block>
<block>
- <key>blocks_throttle</key>
+ <key>blocks_file_sink</key>
<param>
<key>id</key>
- <value>throttle</value>
+ <value>frame_sink</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>short</value>
+ <key>file</key>
+ <value>output_filename</value>
</param>
<param>
- <key>samples_per_second</key>
- <value>2*sample_rate</value>
+ <key>type</key>
+ <value>short</value>
</param>
<param>
<key>vlen</key>
<value>1</value>
</param>
<param>
+ <key>unbuffered</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>append</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(94, 323)</value>
+ <value>(809, 595)</value>
</param>
<param>
<key>_rotation</key>
- <value>180</value>
+ <value>0</value>
</param>
</block>
<block>
- <key>blocks_file_source</key>
+ <key>noaa_hrpt_decoder</key>
<param>
<key>id</key>
- <value>blocks_file_source_0</value>
+ <value>decoder</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>file</key>
- <value>input_filename</value>
+ <key>verbose</key>
+ <value>True</value>
</param>
<param>
- <key>type</key>
- <value>short</value>
+ <key>output</key>
+ <value>True</value>
</param>
<param>
- <key>repeat</key>
- <value>False</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(95, 257)</value>
+ <value>(810, 496)</value>
</param>
<param>
<key>_rotation</key>
@@ -538,6 +530,10 @@
<value>freq</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(218, 104)</value>
</param>
@@ -581,6 +577,10 @@
<value>gain</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(375, 105)</value>
</param>
@@ -624,6 +624,10 @@
<value>pll_alpha</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(534, 104)</value>
</param>
@@ -667,6 +671,10 @@
<value>clock_alpha</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(692, 104)</value>
</param>
@@ -710,6 +718,10 @@
<value>output_filename</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(850, 105)</value>
</param>
@@ -729,6 +741,22 @@
<value>True</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(598, 546)</value>
</param>
@@ -771,6 +799,22 @@
<value>True</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(332, 546)</value>
</param>
@@ -780,54 +824,246 @@
</param>
</block>
<block>
- <key>options</key>
+ <key>noaa_hrpt_pll_cf</key>
<param>
<key>id</key>
- <value>file_rx_hrpt</value>
+ <value>pll</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>title</key>
- <value>USRP HRPT Receiver</value>
+ <key>alpha</key>
+ <value>pll_alpha</value>
</param>
<param>
- <key>author</key>
+ <key>beta</key>
+ <value>pll_alpha**2/4.0</value>
+ </param>
+ <param>
+ <key>max_offset</key>
+ <value>max_carrier_offset</value>
+ </param>
+ <param>
+ <key>alias</key>
<value></value>
</param>
<param>
- <key>description</key>
+ <key>affinity</key>
<value></value>
</param>
<param>
- <key>window_size</key>
- <value>4096,4096</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>generate_options</key>
- <value>no_gui</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>category</key>
- <value>Custom</value>
+ <key>_coordinate</key>
+ <value>(470, 357)</value>
</param>
<param>
- <key>run_options</key>
- <value>prompt</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
+ </block>
+ <block>
+ <key>blocks_interleaved_short_to_complex</key>
<param>
- <key>run</key>
+ <key>id</key>
+ <value>blocks_interleaved_short_to_complex_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>realtime_scheduling</key>
+ <key>vector_input</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>swap</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
<value></value>
</param>
<param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(10, 10)</value>
+ <value>(99, 373)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>blocks_file_source</key>
+ <param>
+ <key>id</key>
+ <value>blocks_file_source_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>file</key>
+ <value>input_filename</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>short</value>
+ </param>
+ <param>
+ <key>repeat</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>vlen</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(102, 253)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>blocks_throttle</key>
+ <param>
+ <key>id</key>
+ <value>throttle</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>short</value>
+ </param>
+ <param>
+ <key>samples_per_second</key>
+ <value>2*sample_rate</value>
+ </param>
+ <param>
+ <key>vlen</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>ignoretag</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(101, 319)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>180</value>
+ </param>
+ </block>
+ <block>
+ <key>analog_agc_xx</key>
+ <param>
+ <key>id</key>
+ <value>analog_agc_xx_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>complex</value>
+ </param>
+ <param>
+ <key>rate</key>
+ <value>1e-6</value>
+ </param>
+ <param>
+ <key>reference</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>gain</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>max_gain</key>
+ <value>65536</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(285, 349)</value>
</param>
<param>
<key>_rotation</key>
@@ -853,50 +1089,50 @@
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>agc</source_block_id>
- <sink_block_id>pll</sink_block_id>
+ <source_block_id>deframer</source_block_id>
+ <sink_block_id>decoder</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>deframer</source_block_id>
- <sink_block_id>decoder</sink_block_id>
+ <sink_block_id>frame_sink</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>deframer</source_block_id>
- <sink_block_id>frame_sink</sink_block_id>
+ <source_block_id>throttle</source_block_id>
+ <sink_block_id>blocks_interleaved_short_to_complex_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>blocks_interleaved_short_to_complex_0</source_block_id>
- <sink_block_id>agc</sink_block_id>
+ <source_block_id>virtual_source_0</source_block_id>
+ <sink_block_id>digital_binary_slicer_fb_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>throttle</source_block_id>
- <sink_block_id>blocks_interleaved_short_to_complex_0</sink_block_id>
+ <source_block_id>digital_binary_slicer_fb_0</source_block_id>
+ <sink_block_id>deframer</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>blocks_file_source_0</source_block_id>
- <sink_block_id>throttle</sink_block_id>
+ <source_block_id>analog_agc_xx_0</source_block_id>
+ <sink_block_id>pll</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>digital_binary_slicer_fb_0</sink_block_id>
+ <source_block_id>blocks_interleaved_short_to_complex_0</source_block_id>
+ <sink_block_id>analog_agc_xx_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>digital_binary_slicer_fb_0</source_block_id>
- <sink_block_id>deframer</sink_block_id>
+ <source_block_id>blocks_file_source_0</source_block_id>
+ <sink_block_id>throttle</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
diff --git a/gr-noaa/examples/hrpt_demod.grc b/gr-noaa/examples/hrpt_demod.grc
index 1400f5ed1f..cbb02d83ca 100644
--- a/gr-noaa/examples/hrpt_demod.grc
+++ b/gr-noaa/examples/hrpt_demod.grc
@@ -1,6 +1,6 @@
<?xml version='1.0' encoding='ASCII'?>
<flow_graph>
- <timestamp>Thu Oct 27 13:51:57 2011</timestamp>
+ <timestamp>Sat Jul 12 11:19:23 2014</timestamp>
<block>
<key>options</key>
<param>
@@ -44,10 +44,18 @@
<value>True</value>
</param>
<param>
+ <key>max_nouts</key>
+ <value>0</value>
+ </param>
+ <param>
<key>realtime_scheduling</key>
<value></value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(10, 10)</value>
</param>
@@ -71,6 +79,10 @@
<value>2*math.pi*100e3/sample_rate</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(575, 19)</value>
</param>
@@ -94,6 +106,10 @@
<value>int(sps/2.0)</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(499, 19)</value>
</param>
@@ -103,22 +119,26 @@
</param>
</block>
<block>
- <key>import</key>
+ <key>variable</key>
<param>
<key>id</key>
- <value>import_0</value>
+ <value>max_clock_offset</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>import</key>
- <value>import math, os</value>
+ <key>value</key>
+ <value>100e-6</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(11, 103)</value>
+ <value>(710, 17)</value>
</param>
<param>
<key>_rotation</key>
@@ -126,34 +146,26 @@
</param>
</block>
<block>
- <key>parameter</key>
+ <key>variable</key>
<param>
<key>id</key>
- <value>input_filename</value>
+ <value>sym_rate</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>label</key>
- <value>input_filename</value>
- </param>
- <param>
<key>value</key>
- <value>usrp.dat</value>
- </param>
- <param>
- <key>type</key>
- <value>string</value>
+ <value>600*1109</value>
</param>
<param>
- <key>short_id</key>
- <value>F</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(618, 102)</value>
+ <value>(307, 18)</value>
</param>
<param>
<key>_rotation</key>
@@ -161,69 +173,53 @@
</param>
</block>
<block>
- <key>parameter</key>
+ <key>variable</key>
<param>
<key>id</key>
- <value>output_filename</value>
+ <value>sps</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>label</key>
- <value>output_filename</value>
- </param>
- <param>
<key>value</key>
- <value>frames.dat</value>
- </param>
- <param>
- <key>type</key>
- <value>string</value>
+ <value>sample_rate/sym_rate</value>
</param>
<param>
- <key>short_id</key>
- <value>o</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(726, 102)</value>
+ <value>(400, 17)</value>
</param>
<param>
<key>_rotation</key>
- <value>180</value>
+ <value>0</value>
</param>
</block>
<block>
- <key>blocks_file_source</key>
+ <key>variable</key>
<param>
<key>id</key>
- <value>file_source</value>
+ <value>sample_rate</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>file</key>
- <value>input_filename</value>
- </param>
- <param>
- <key>type</key>
- <value>short</value>
- </param>
- <param>
- <key>repeat</key>
- <value>False</value>
+ <key>value</key>
+ <value>4e6</value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(63, 277)</value>
+ <value>(198, 17)</value>
</param>
<param>
<key>_rotation</key>
@@ -231,18 +227,26 @@
</param>
</block>
<block>
- <key>blocks_interleaved_short_to_complex</key>
+ <key>import</key>
<param>
<key>id</key>
- <value>cs2cf</value>
+ <value>import_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
+ <key>import</key>
+ <value>import math, os</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(275, 289)</value>
+ <value>(11, 103)</value>
</param>
<param>
<key>_rotation</key>
@@ -250,38 +254,38 @@
</param>
</block>
<block>
- <key>gr_agc_xx</key>
+ <key>parameter</key>
<param>
<key>id</key>
- <value>agc</value>
+ <value>input_filename</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
+ <key>label</key>
+ <value>input_filename</value>
</param>
<param>
- <key>rate</key>
- <value>1e-5</value>
+ <key>value</key>
+ <value>usrp.dat</value>
</param>
<param>
- <key>reference</key>
- <value>1.0</value>
+ <key>type</key>
+ <value>string</value>
</param>
<param>
- <key>gain</key>
- <value>1.0/32768.0</value>
+ <key>short_id</key>
+ <value>F</value>
</param>
<param>
- <key>max_gain</key>
- <value>1.0</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(117, 394)</value>
+ <value>(618, 102)</value>
</param>
<param>
<key>_rotation</key>
@@ -289,99 +293,89 @@
</param>
</block>
<block>
- <key>noaa_hrpt_pll_cf</key>
+ <key>parameter</key>
<param>
<key>id</key>
- <value>pll</value>
+ <value>output_filename</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>alpha</key>
- <value>pll_alpha</value>
+ <key>label</key>
+ <value>output_filename</value>
</param>
<param>
- <key>beta</key>
- <value>pll_alpha**2/4.0</value>
+ <key>value</key>
+ <value>frames.dat</value>
</param>
<param>
- <key>max_offset</key>
- <value>max_carrier_offset</value>
+ <key>type</key>
+ <value>string</value>
+ </param>
+ <param>
+ <key>short_id</key>
+ <value>o</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(292, 402)</value>
+ <value>(726, 102)</value>
</param>
<param>
<key>_rotation</key>
- <value>0</value>
+ <value>180</value>
</param>
</block>
<block>
- <key>variable</key>
+ <key>blocks_file_source</key>
<param>
<key>id</key>
- <value>max_clock_offset</value>
+ <value>file_source</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>100e-6</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(710, 17)</value>
+ <key>file</key>
+ <value>input_filename</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>type</key>
+ <value>short</value>
</param>
- </block>
- <block>
- <key>variable</key>
<param>
- <key>id</key>
- <value>sym_rate</value>
+ <key>repeat</key>
+ <value>False</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>vlen</key>
+ <value>1</value>
</param>
<param>
- <key>value</key>
- <value>600*1109</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(307, 18)</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>_rotation</key>
+ <key>minoutbuf</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>variable</key>
<param>
- <key>id</key>
- <value>sps</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>value</key>
- <value>sample_rate/sym_rate</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(400, 17)</value>
+ <value>(63, 277)</value>
</param>
<param>
<key>_rotation</key>
@@ -415,6 +409,10 @@
<value>d</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(202, 102)</value>
</param>
@@ -450,6 +448,10 @@
<value>p</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(294, 101)</value>
</param>
@@ -485,6 +487,10 @@
<value>s</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(395, 101)</value>
</param>
@@ -512,6 +518,14 @@
<value>False</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(1150, 341)</value>
</param>
@@ -547,6 +561,18 @@
<value>False</value>
</param>
<param>
+ <key>append</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(1144, 489)</value>
</param>
@@ -582,31 +608,24 @@
<value>4000</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(504, 402)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
+ <key>alias</key>
+ <value></value>
</param>
- </block>
- <block>
- <key>variable</key>
<param>
- <key>id</key>
- <value>sample_rate</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>value</key>
- <value>4e6</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(198, 17)</value>
+ <value>(504, 402)</value>
</param>
<param>
<key>_rotation</key>
@@ -648,6 +667,22 @@
<value>max_clock_offset</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(704, 386)</value>
</param>
@@ -667,6 +702,22 @@
<value>True</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(1142, 422)</value>
</param>
@@ -686,6 +737,22 @@
<value>True</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(957, 422)</value>
</param>
@@ -694,6 +761,151 @@
<value>0</value>
</param>
</block>
+ <block>
+ <key>blocks_interleaved_short_to_complex</key>
+ <param>
+ <key>id</key>
+ <value>cs2cf</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>vector_input</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>swap</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(275, 289)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>noaa_hrpt_pll_cf</key>
+ <param>
+ <key>id</key>
+ <value>pll</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>alpha</key>
+ <value>pll_alpha</value>
+ </param>
+ <param>
+ <key>beta</key>
+ <value>pll_alpha**2/4.0</value>
+ </param>
+ <param>
+ <key>max_offset</key>
+ <value>max_carrier_offset</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(292, 402)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>analog_agc_xx</key>
+ <param>
+ <key>id</key>
+ <value>analog_agc_xx_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>complex</value>
+ </param>
+ <param>
+ <key>rate</key>
+ <value>1e-5</value>
+ </param>
+ <param>
+ <key>reference</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>gain</key>
+ <value>1.0/32768.0</value>
+ </param>
+ <param>
+ <key>max_gain</key>
+ <value>65536</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(124, 394)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
<connection>
<source_block_id>file_source</source_block_id>
<sink_block_id>cs2cf</sink_block_id>
@@ -707,18 +919,6 @@
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>cs2cf</source_block_id>
- <sink_block_id>agc</sink_block_id>
- <source_key>0</source_key>
- <sink_key>0</sink_key>
- </connection>
- <connection>
- <source_block_id>agc</source_block_id>
- <sink_block_id>pll</sink_block_id>
- <source_key>0</source_key>
- <sink_key>0</sink_key>
- </connection>
- <connection>
<source_block_id>noaa_hrpt_deframer_0</source_block_id>
<sink_block_id>blocks_file_sink_0</sink_block_id>
<source_key>0</source_key>
@@ -748,4 +948,16 @@
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
+ <connection>
+ <source_block_id>cs2cf</source_block_id>
+ <sink_block_id>analog_agc_xx_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>analog_agc_xx_0</source_block_id>
+ <sink_block_id>pll</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
</flow_graph>
diff --git a/gr-noaa/examples/usrp_rx_hrpt.grc b/gr-noaa/examples/usrp_rx_hrpt.grc
index 56d07446bf..209bf41c56 100644
--- a/gr-noaa/examples/usrp_rx_hrpt.grc
+++ b/gr-noaa/examples/usrp_rx_hrpt.grc
@@ -1,6 +1,6 @@
<?xml version='1.0' encoding='ASCII'?>
<flow_graph>
- <timestamp>Thu Oct 27 13:26:39 2011</timestamp>
+ <timestamp>Sat Jul 12 11:19:58 2014</timestamp>
<block>
<key>options</key>
<param>
@@ -44,10 +44,18 @@
<value>True</value>
</param>
<param>
+ <key>max_nouts</key>
+ <value>0</value>
+ </param>
+ <param>
<key>realtime_scheduling</key>
<value></value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(10, 10)</value>
</param>
@@ -60,7 +68,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>max_carrier_offset</value>
+ <value>sample_rate</value>
</param>
<param>
<key>_enabled</key>
@@ -68,11 +76,15 @@
</param>
<param>
<key>value</key>
- <value>2*math.pi*100e3/sample_rate</value>
+ <value>4e6</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(575, 19)</value>
+ <value>(198, 17)</value>
</param>
<param>
<key>_rotation</key>
@@ -83,7 +95,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>sym_rate</value>
+ <value>config_filename</value>
</param>
<param>
<key>_enabled</key>
@@ -91,11 +103,15 @@
</param>
<param>
<key>value</key>
- <value>600*1109</value>
+ <value>os.environ['HOME']+'/.gnuradio/config.conf'</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(301, 19)</value>
+ <value>(13, 168)</value>
</param>
<param>
<key>_rotation</key>
@@ -106,7 +122,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>sps</value>
+ <value>max_clock_offset</value>
</param>
<param>
<key>_enabled</key>
@@ -114,11 +130,15 @@
</param>
<param>
<key>value</key>
- <value>sample_rate/sym_rate</value>
+ <value>100e-6</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(397, 19)</value>
+ <value>(705, 19)</value>
</param>
<param>
<key>_rotation</key>
@@ -140,6 +160,10 @@
<value>int(sps/2.0)</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(499, 19)</value>
</param>
@@ -149,6 +173,87 @@
</param>
</block>
<block>
+ <key>variable</key>
+ <param>
+ <key>id</key>
+ <value>sps</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>sample_rate/sym_rate</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(397, 19)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable</key>
+ <param>
+ <key>id</key>
+ <value>sym_rate</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>600*1109</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(301, 19)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable</key>
+ <param>
+ <key>id</key>
+ <value>max_carrier_offset</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>2*math.pi*100e3/sample_rate</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(575, 19)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
<key>variable_slider</key>
<param>
<key>id</key>
@@ -195,6 +300,10 @@
<value></value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(340, 106)</value>
</param>
@@ -238,6 +347,10 @@
<value></value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(199, 106)</value>
</param>
@@ -293,6 +406,10 @@
<value></value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(479, 106)</value>
</param>
@@ -348,6 +465,10 @@
<value></value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(618, 106)</value>
</param>
@@ -383,6 +504,10 @@
<value></value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(12, 249)</value>
</param>
@@ -392,86 +517,140 @@
</param>
</block>
<block>
- <key>wxgui_fftsink2</key>
+ <key>variable_config</key>
<param>
<key>id</key>
- <value>rx_fft</value>
+ <value>addr</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
+ <key>value</key>
+ <value>""</value>
+ </param>
+ <param>
<key>type</key>
- <value>complex</value>
+ <value>string</value>
</param>
<param>
- <key>title</key>
- <value>RX Spectrum</value>
+ <key>config_file</key>
+ <value>config_filename</value>
</param>
<param>
- <key>samp_rate</key>
- <value>sample_rate</value>
+ <key>section</key>
+ <value>'usrp_rx_hrpt'</value>
</param>
<param>
- <key>baseband_freq</key>
- <value>freq</value>
+ <key>option</key>
+ <value>'addr'</value>
</param>
<param>
- <key>y_per_div</key>
- <value>5</value>
+ <key>writeback</key>
+ <value>addr</value>
</param>
<param>
- <key>y_divs</key>
- <value>8</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>ref_level</key>
- <value>-5</value>
+ <key>_coordinate</key>
+ <value>(194, 253)</value>
</param>
<param>
- <key>ref_scale</key>
- <value>2.0</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
+ </block>
+ <block>
+ <key>variable_static_text</key>
<param>
- <key>fft_size</key>
- <value>1024</value>
+ <key>id</key>
+ <value>addr_text</value>
</param>
<param>
- <key>fft_rate</key>
- <value>15</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>peak_hold</key>
- <value>False</value>
+ <key>label</key>
+ <value>USRP Addr</value>
</param>
<param>
- <key>average</key>
- <value>True</value>
+ <key>value</key>
+ <value>addr</value>
</param>
<param>
- <key>avg_alpha</key>
- <value>0.1</value>
+ <key>converver</key>
+ <value>str_converter</value>
</param>
<param>
- <key>win</key>
+ <key>formatter</key>
<value>None</value>
</param>
<param>
- <key>win_size</key>
- <value>640, 360</value>
+ <key>grid_pos</key>
+ <value>1, 0, 1, 1</value>
+ </param>
+ <param>
+ <key>notebook</key>
+ <value></value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(828, 20)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable_static_text</key>
+ <param>
+ <key>id</key>
+ <value>rate_text</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>label</key>
+ <value>Baseband Rate</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>sample_rate</value>
+ </param>
+ <param>
+ <key>converver</key>
+ <value>float_converter</value>
+ </param>
+ <param>
+ <key>formatter</key>
+ <value>None</value>
</param>
<param>
<key>grid_pos</key>
- <value>0, 0, 1, 1</value>
+ <value>1, 1, 1, 1</value>
</param>
<param>
<key>notebook</key>
- <value>displays, 0</value>
+ <value></value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(477, 457)</value>
+ <value>(973, 20)</value>
</param>
<param>
<key>_rotation</key>
@@ -479,22 +658,26 @@
</param>
</block>
<block>
- <key>variable</key>
+ <key>import</key>
<param>
<key>id</key>
- <value>max_clock_offset</value>
+ <value>import_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>100e-6</value>
+ <key>import</key>
+ <value>import math, os</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(705, 19)</value>
+ <value>(9, 106)</value>
</param>
<param>
<key>_rotation</key>
@@ -502,38 +685,46 @@
</param>
</block>
<block>
- <key>gr_agc_xx</key>
+ <key>variable_config</key>
<param>
<key>id</key>
- <value>agc</value>
+ <value>output_filename</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
+ <key>value</key>
+ <value>'frames.hrpt'</value>
+ </param>
+ <param>
<key>type</key>
- <value>complex</value>
+ <value>string</value>
</param>
<param>
- <key>rate</key>
- <value>1e-6</value>
+ <key>config_file</key>
+ <value>config_filename</value>
</param>
<param>
- <key>reference</key>
- <value>1.0</value>
+ <key>section</key>
+ <value>'usrp_rx_hrpt'</value>
</param>
<param>
- <key>gain</key>
- <value>1.0</value>
+ <key>option</key>
+ <value>'filename'</value>
</param>
<param>
- <key>max_gain</key>
- <value>1.0</value>
+ <key>writeback</key>
+ <value>output_filename</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(301, 705)</value>
+ <value>(990, 255)</value>
</param>
<param>
<key>_rotation</key>
@@ -541,30 +732,46 @@
</param>
</block>
<block>
- <key>noaa_hrpt_pll_cf</key>
+ <key>variable_config</key>
<param>
<key>id</key>
- <value>pll</value>
+ <value>saved_clock_alpha</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>alpha</key>
- <value>pll_alpha</value>
+ <key>value</key>
+ <value>0.01</value>
</param>
<param>
- <key>beta</key>
- <value>pll_alpha**2/4.0</value>
+ <key>type</key>
+ <value>real</value>
</param>
<param>
- <key>max_offset</key>
- <value>max_carrier_offset</value>
+ <key>config_file</key>
+ <value>config_filename</value>
+ </param>
+ <param>
+ <key>section</key>
+ <value>'usrp_rx_hrpt'</value>
+ </param>
+ <param>
+ <key>option</key>
+ <value>'clock_alpha'</value>
+ </param>
+ <param>
+ <key>writeback</key>
+ <value>clock_alpha</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(469, 713)</value>
+ <value>(832, 254)</value>
</param>
<param>
<key>_rotation</key>
@@ -575,7 +782,7 @@
<key>variable_config</key>
<param>
<key>id</key>
- <value>addr</value>
+ <value>saved_pll_alpha</value>
</param>
<param>
<key>_enabled</key>
@@ -583,11 +790,11 @@
</param>
<param>
<key>value</key>
- <value>""</value>
+ <value>0.01</value>
</param>
<param>
<key>type</key>
- <value>string</value>
+ <value>real</value>
</param>
<param>
<key>config_file</key>
@@ -599,15 +806,19 @@
</param>
<param>
<key>option</key>
- <value>'addr'</value>
+ <value>'pll_alpha'</value>
</param>
<param>
<key>writeback</key>
- <value>addr</value>
+ <value>pll_alpha</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(194, 253)</value>
+ <value>(674, 254)</value>
</param>
<param>
<key>_rotation</key>
@@ -615,1256 +826,1317 @@
</param>
</block>
<block>
- <key>uhd_usrp_source</key>
+ <key>variable_config</key>
<param>
<key>id</key>
- <value>uhd_usrp_source_0</value>
+ <value>saved_gain</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
+ <key>value</key>
+ <value>35</value>
+ </param>
+ <param>
<key>type</key>
- <value>complex</value>
+ <value>real</value>
</param>
<param>
- <key>dev_addr</key>
- <value>addr</value>
+ <key>config_file</key>
+ <value>config_filename</value>
</param>
<param>
- <key>sync</key>
- <value></value>
+ <key>section</key>
+ <value>'usrp_rx_hrpt'</value>
</param>
<param>
- <key>clock_rate</key>
- <value>0.0</value>
+ <key>option</key>
+ <value>'gain'</value>
</param>
<param>
- <key>num_mboards</key>
- <value>1</value>
+ <key>writeback</key>
+ <value>gain</value>
</param>
<param>
- <key>ref_source0</key>
+ <key>alias</key>
<value></value>
</param>
<param>
- <key>sd_spec0</key>
- <value></value>
+ <key>_coordinate</key>
+ <value>(515, 255)</value>
</param>
<param>
- <key>ref_source1</key>
- <value></value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
+ </block>
+ <block>
+ <key>variable_config</key>
<param>
- <key>sd_spec1</key>
- <value></value>
+ <key>id</key>
+ <value>saved_freq</value>
</param>
<param>
- <key>ref_source2</key>
- <value></value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>sd_spec2</key>
- <value></value>
+ <key>value</key>
+ <value>1698e6</value>
</param>
<param>
- <key>ref_source3</key>
- <value></value>
+ <key>type</key>
+ <value>real</value>
</param>
<param>
- <key>sd_spec3</key>
- <value></value>
+ <key>config_file</key>
+ <value>config_filename</value>
</param>
<param>
- <key>ref_source4</key>
- <value></value>
+ <key>section</key>
+ <value>'usrp_rx_hrpt'</value>
</param>
<param>
- <key>sd_spec4</key>
- <value></value>
+ <key>option</key>
+ <value>'freq'</value>
</param>
<param>
- <key>ref_source5</key>
- <value></value>
+ <key>writeback</key>
+ <value>freq</value>
</param>
<param>
- <key>sd_spec5</key>
+ <key>alias</key>
<value></value>
</param>
<param>
- <key>ref_source6</key>
- <value></value>
+ <key>_coordinate</key>
+ <value>(358, 254)</value>
</param>
<param>
- <key>sd_spec6</key>
- <value></value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
+ </block>
+ <block>
+ <key>wxgui_scopesink2</key>
<param>
- <key>ref_source7</key>
- <value></value>
+ <key>id</key>
+ <value>demod_scope</value>
</param>
<param>
- <key>sd_spec7</key>
- <value></value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>nchan</key>
- <value>1</value>
+ <key>type</key>
+ <value>float</value>
+ </param>
+ <param>
+ <key>title</key>
+ <value>Post-Demod</value>
</param>
<param>
<key>samp_rate</key>
- <value>sample_rate</value>
+ <value>sym_rate*2.0</value>
</param>
<param>
- <key>center_freq0</key>
- <value>freq</value>
+ <key>v_scale</key>
+ <value>0.5</value>
</param>
<param>
- <key>gain0</key>
+ <key>v_offset</key>
<value>0</value>
</param>
<param>
- <key>ant0</key>
- <value></value>
+ <key>t_scale</key>
+ <value>10.0/sym_rate</value>
</param>
<param>
- <key>bw0</key>
- <value>0</value>
+ <key>ac_couple</key>
+ <value>False</value>
</param>
<param>
- <key>center_freq1</key>
- <value>0</value>
+ <key>xy_mode</key>
+ <value>False</value>
</param>
<param>
- <key>gain1</key>
- <value>0</value>
+ <key>num_inputs</key>
+ <value>1</value>
</param>
<param>
- <key>ant1</key>
+ <key>win_size</key>
<value></value>
</param>
<param>
- <key>bw1</key>
- <value>0</value>
+ <key>grid_pos</key>
+ <value>0, 0, 1, 1</value>
</param>
<param>
- <key>center_freq2</key>
- <value>0</value>
+ <key>notebook</key>
+ <value>displays, 1</value>
</param>
<param>
- <key>gain2</key>
- <value>0</value>
+ <key>trig_mode</key>
+ <value>wxgui.TRIG_MODE_AUTO</value>
</param>
<param>
- <key>ant2</key>
+ <key>y_axis_label</key>
+ <value>Counts</value>
+ </param>
+ <param>
+ <key>alias</key>
<value></value>
</param>
<param>
- <key>bw2</key>
- <value>0</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>center_freq3</key>
- <value>0</value>
+ <key>_coordinate</key>
+ <value>(666, 542)</value>
</param>
<param>
- <key>gain3</key>
- <value>0</value>
+ <key>_rotation</key>
+ <value>180</value>
</param>
+ </block>
+ <block>
+ <key>blocks_moving_average_xx</key>
<param>
- <key>ant3</key>
- <value></value>
+ <key>id</key>
+ <value>blocks_moving_average_xx_0</value>
</param>
<param>
- <key>bw3</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>center_freq4</key>
- <value>0</value>
+ <key>type</key>
+ <value>float</value>
</param>
<param>
- <key>gain4</key>
- <value>0</value>
+ <key>length</key>
+ <value>hs</value>
</param>
<param>
- <key>ant4</key>
+ <key>scale</key>
+ <value>1.0/hs</value>
+ </param>
+ <param>
+ <key>max_iter</key>
+ <value>4000</value>
+ </param>
+ <param>
+ <key>alias</key>
<value></value>
</param>
<param>
- <key>bw4</key>
- <value>0</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>center_freq5</key>
+ <key>minoutbuf</key>
<value>0</value>
</param>
<param>
- <key>gain5</key>
+ <key>maxoutbuf</key>
<value>0</value>
</param>
<param>
- <key>ant5</key>
- <value></value>
+ <key>_coordinate</key>
+ <value>(682, 713)</value>
</param>
<param>
- <key>bw5</key>
+ <key>_rotation</key>
<value>0</value>
</param>
+ </block>
+ <block>
+ <key>virtual_sink</key>
<param>
- <key>center_freq6</key>
- <value>0</value>
+ <key>id</key>
+ <value>virtual_sink_0</value>
</param>
<param>
- <key>gain6</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>ant6</key>
- <value></value>
+ <key>stream_id</key>
+ <value>baseband</value>
</param>
<param>
- <key>bw6</key>
- <value>0</value>
+ <key>_coordinate</key>
+ <value>(1138, 729)</value>
</param>
<param>
- <key>center_freq7</key>
+ <key>_rotation</key>
<value>0</value>
</param>
+ </block>
+ <block>
+ <key>digital_clock_recovery_mm_xx</key>
<param>
- <key>gain7</key>
- <value>0</value>
+ <key>id</key>
+ <value>digital_clock_recovery_mm_xx_0</value>
</param>
<param>
- <key>ant7</key>
- <value></value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>bw7</key>
- <value>0</value>
+ <key>type</key>
+ <value>float</value>
</param>
<param>
- <key>center_freq8</key>
- <value>0</value>
+ <key>omega</key>
+ <value>sps/2.0</value>
</param>
<param>
- <key>gain8</key>
- <value>0</value>
+ <key>gain_omega</key>
+ <value>clock_alpha**2/4.0</value>
</param>
<param>
- <key>ant8</key>
- <value></value>
+ <key>mu</key>
+ <value>0.5</value>
</param>
<param>
- <key>bw8</key>
- <value>0</value>
+ <key>gain_mu</key>
+ <value>clock_alpha</value>
</param>
<param>
- <key>center_freq9</key>
- <value>0</value>
+ <key>omega_relative_limit</key>
+ <value>max_clock_offset</value>
</param>
<param>
- <key>gain9</key>
- <value>0</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>ant9</key>
+ <key>affinity</key>
<value></value>
</param>
<param>
- <key>bw9</key>
+ <key>minoutbuf</key>
<value>0</value>
</param>
<param>
- <key>center_freq10</key>
+ <key>maxoutbuf</key>
<value>0</value>
</param>
<param>
- <key>gain10</key>
+ <key>_coordinate</key>
+ <value>(896, 697)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
<value>0</value>
</param>
+ </block>
+ <block>
+ <key>virtual_source</key>
<param>
- <key>ant10</key>
- <value></value>
+ <key>id</key>
+ <value>virtual_source_0</value>
</param>
<param>
- <key>bw10</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>center_freq11</key>
- <value>0</value>
+ <key>stream_id</key>
+ <value>baseband</value>
</param>
<param>
- <key>gain11</key>
+ <key>_coordinate</key>
+ <value>(173, 971)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
<value>0</value>
</param>
+ </block>
+ <block>
+ <key>digital_binary_slicer_fb</key>
<param>
- <key>ant11</key>
+ <key>id</key>
+ <value>digital_binary_slicer_fb_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>alias</key>
<value></value>
</param>
<param>
- <key>bw11</key>
- <value>0</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>center_freq12</key>
+ <key>minoutbuf</key>
<value>0</value>
</param>
<param>
- <key>gain12</key>
+ <key>maxoutbuf</key>
<value>0</value>
</param>
<param>
- <key>ant12</key>
- <value></value>
+ <key>_coordinate</key>
+ <value>(423, 975)</value>
</param>
<param>
- <key>bw12</key>
+ <key>_rotation</key>
<value>0</value>
</param>
+ </block>
+ <block>
+ <key>noaa_hrpt_deframer</key>
<param>
- <key>center_freq13</key>
- <value>0</value>
+ <key>id</key>
+ <value>deframer</value>
</param>
<param>
- <key>gain13</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>ant13</key>
+ <key>alias</key>
<value></value>
</param>
<param>
- <key>bw13</key>
- <value>0</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>center_freq14</key>
+ <key>minoutbuf</key>
<value>0</value>
</param>
<param>
- <key>gain14</key>
+ <key>maxoutbuf</key>
<value>0</value>
</param>
<param>
- <key>ant14</key>
- <value></value>
+ <key>_coordinate</key>
+ <value>(762, 975)</value>
</param>
<param>
- <key>bw14</key>
+ <key>_rotation</key>
<value>0</value>
</param>
+ </block>
+ <block>
+ <key>noaa_hrpt_decoder</key>
<param>
- <key>center_freq15</key>
- <value>0</value>
+ <key>id</key>
+ <value>decoder</value>
</param>
<param>
- <key>gain15</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>ant15</key>
+ <key>verbose</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>output</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>alias</key>
<value></value>
</param>
<param>
- <key>bw15</key>
- <value>0</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>center_freq16</key>
- <value>0</value>
+ <key>_coordinate</key>
+ <value>(974, 925)</value>
</param>
<param>
- <key>gain16</key>
+ <key>_rotation</key>
<value>0</value>
</param>
+ </block>
+ <block>
+ <key>blocks_file_sink</key>
<param>
- <key>ant16</key>
- <value></value>
+ <key>id</key>
+ <value>frame_sink</value>
</param>
<param>
- <key>bw16</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>center_freq17</key>
- <value>0</value>
+ <key>file</key>
+ <value>output_filename</value>
</param>
<param>
- <key>gain17</key>
- <value>0</value>
+ <key>type</key>
+ <value>short</value>
</param>
<param>
- <key>ant17</key>
- <value></value>
+ <key>vlen</key>
+ <value>1</value>
</param>
<param>
- <key>bw17</key>
- <value>0</value>
+ <key>unbuffered</key>
+ <value>False</value>
</param>
<param>
- <key>center_freq18</key>
- <value>0</value>
+ <key>append</key>
+ <value>False</value>
</param>
<param>
- <key>gain18</key>
- <value>0</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>ant18</key>
+ <key>affinity</key>
<value></value>
</param>
<param>
- <key>bw18</key>
- <value>0</value>
+ <key>_coordinate</key>
+ <value>(973, 1024)</value>
</param>
<param>
- <key>center_freq19</key>
+ <key>_rotation</key>
<value>0</value>
</param>
+ </block>
+ <block>
+ <key>wxgui_fftsink2</key>
<param>
- <key>gain19</key>
- <value>0</value>
+ <key>id</key>
+ <value>rx_fft</value>
</param>
<param>
- <key>ant19</key>
- <value></value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>bw19</key>
- <value>0</value>
+ <key>type</key>
+ <value>complex</value>
</param>
<param>
- <key>center_freq20</key>
- <value>0</value>
+ <key>title</key>
+ <value>RX Spectrum</value>
</param>
<param>
- <key>gain20</key>
- <value>0</value>
+ <key>samp_rate</key>
+ <value>sample_rate</value>
</param>
<param>
- <key>ant20</key>
- <value></value>
+ <key>baseband_freq</key>
+ <value>freq</value>
</param>
<param>
- <key>bw20</key>
- <value>0</value>
+ <key>y_per_div</key>
+ <value>5</value>
</param>
<param>
- <key>center_freq21</key>
- <value>0</value>
+ <key>y_divs</key>
+ <value>8</value>
</param>
<param>
- <key>gain21</key>
- <value>0</value>
+ <key>ref_level</key>
+ <value>-5</value>
</param>
<param>
- <key>ant21</key>
- <value></value>
+ <key>ref_scale</key>
+ <value>2.0</value>
</param>
<param>
- <key>bw21</key>
- <value>0</value>
+ <key>fft_size</key>
+ <value>1024</value>
</param>
<param>
- <key>center_freq22</key>
- <value>0</value>
+ <key>fft_rate</key>
+ <value>15</value>
</param>
<param>
- <key>gain22</key>
- <value>0</value>
+ <key>peak_hold</key>
+ <value>False</value>
</param>
<param>
- <key>ant22</key>
- <value></value>
+ <key>average</key>
+ <value>True</value>
</param>
<param>
- <key>bw22</key>
- <value>0</value>
+ <key>avg_alpha</key>
+ <value>0.1</value>
</param>
<param>
- <key>center_freq23</key>
- <value>0</value>
+ <key>win</key>
+ <value>None</value>
</param>
<param>
- <key>gain23</key>
- <value>0</value>
+ <key>win_size</key>
+ <value>640, 360</value>
</param>
<param>
- <key>ant23</key>
- <value></value>
+ <key>grid_pos</key>
+ <value>0, 0, 1, 1</value>
</param>
<param>
- <key>bw23</key>
- <value>0</value>
+ <key>notebook</key>
+ <value>displays, 0</value>
</param>
<param>
- <key>center_freq24</key>
- <value>0</value>
+ <key>freqvar</key>
+ <value>None</value>
</param>
<param>
- <key>gain24</key>
- <value>0</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>ant24</key>
+ <key>affinity</key>
<value></value>
</param>
<param>
- <key>bw24</key>
- <value>0</value>
+ <key>_coordinate</key>
+ <value>(477, 457)</value>
</param>
<param>
- <key>center_freq25</key>
+ <key>_rotation</key>
<value>0</value>
</param>
+ </block>
+ <block>
+ <key>noaa_hrpt_pll_cf</key>
<param>
- <key>gain25</key>
- <value>0</value>
+ <key>id</key>
+ <value>pll</value>
</param>
<param>
- <key>ant25</key>
- <value></value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>bw25</key>
- <value>0</value>
+ <key>alpha</key>
+ <value>pll_alpha</value>
</param>
<param>
- <key>center_freq26</key>
- <value>0</value>
+ <key>beta</key>
+ <value>pll_alpha**2/4.0</value>
</param>
<param>
- <key>gain26</key>
- <value>0</value>
+ <key>max_offset</key>
+ <value>max_carrier_offset</value>
</param>
<param>
- <key>ant26</key>
+ <key>alias</key>
<value></value>
</param>
<param>
- <key>bw26</key>
- <value>0</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>center_freq27</key>
+ <key>minoutbuf</key>
<value>0</value>
</param>
<param>
- <key>gain27</key>
+ <key>maxoutbuf</key>
<value>0</value>
</param>
<param>
- <key>ant27</key>
- <value></value>
+ <key>_coordinate</key>
+ <value>(469, 713)</value>
</param>
<param>
- <key>bw27</key>
+ <key>_rotation</key>
<value>0</value>
</param>
+ </block>
+ <block>
+ <key>uhd_usrp_source</key>
<param>
- <key>center_freq28</key>
- <value>0</value>
+ <key>id</key>
+ <value>uhd_usrp_source_0</value>
</param>
<param>
- <key>gain28</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>ant28</key>
+ <key>type</key>
+ <value>fc32</value>
+ </param>
+ <param>
+ <key>otw</key>
<value></value>
</param>
<param>
- <key>bw28</key>
- <value>0</value>
+ <key>stream_args</key>
+ <value></value>
</param>
<param>
- <key>center_freq29</key>
- <value>0</value>
+ <key>stream_chans</key>
+ <value>[]</value>
</param>
<param>
- <key>gain29</key>
- <value>0</value>
+ <key>dev_addr</key>
+ <value>addr</value>
</param>
<param>
- <key>ant29</key>
+ <key>dev_args</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>sync</key>
<value></value>
</param>
<param>
- <key>bw29</key>
- <value>0</value>
+ <key>clock_rate</key>
+ <value>0.0</value>
</param>
<param>
- <key>center_freq30</key>
- <value>0</value>
+ <key>num_mboards</key>
+ <value>1</value>
</param>
<param>
- <key>gain30</key>
- <value>0</value>
+ <key>clock_source0</key>
+ <value></value>
</param>
<param>
- <key>ant30</key>
+ <key>time_source0</key>
<value></value>
</param>
<param>
- <key>bw30</key>
- <value>0</value>
+ <key>sd_spec0</key>
+ <value></value>
</param>
<param>
- <key>center_freq31</key>
- <value>0</value>
+ <key>clock_source1</key>
+ <value></value>
</param>
<param>
- <key>gain31</key>
- <value>0</value>
+ <key>time_source1</key>
+ <value></value>
</param>
<param>
- <key>ant31</key>
+ <key>sd_spec1</key>
<value></value>
</param>
<param>
- <key>bw31</key>
- <value>0</value>
+ <key>clock_source2</key>
+ <value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(49, 713)</value>
+ <key>time_source2</key>
+ <value></value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>sd_spec2</key>
+ <value></value>
</param>
- </block>
- <block>
- <key>variable_static_text</key>
<param>
- <key>id</key>
- <value>addr_text</value>
+ <key>clock_source3</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>time_source3</key>
+ <value></value>
</param>
<param>
- <key>label</key>
- <value>USRP Addr</value>
+ <key>sd_spec3</key>
+ <value></value>
</param>
<param>
- <key>value</key>
- <value>addr</value>
+ <key>clock_source4</key>
+ <value></value>
</param>
<param>
- <key>converver</key>
- <value>str_converter</value>
+ <key>time_source4</key>
+ <value></value>
</param>
<param>
- <key>formatter</key>
- <value>None</value>
+ <key>sd_spec4</key>
+ <value></value>
</param>
<param>
- <key>grid_pos</key>
- <value>1, 0, 1, 1</value>
+ <key>clock_source5</key>
+ <value></value>
</param>
<param>
- <key>notebook</key>
+ <key>time_source5</key>
<value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(828, 20)</value>
+ <key>sd_spec5</key>
+ <value></value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>clock_source6</key>
+ <value></value>
</param>
- </block>
- <block>
- <key>variable_static_text</key>
<param>
- <key>id</key>
- <value>rate_text</value>
+ <key>time_source6</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>sd_spec6</key>
+ <value></value>
</param>
<param>
- <key>label</key>
- <value>Baseband Rate</value>
+ <key>clock_source7</key>
+ <value></value>
</param>
<param>
- <key>value</key>
- <value>sample_rate</value>
+ <key>time_source7</key>
+ <value></value>
</param>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>sd_spec7</key>
+ <value></value>
</param>
<param>
- <key>formatter</key>
- <value>None</value>
+ <key>nchan</key>
+ <value>1</value>
</param>
<param>
- <key>grid_pos</key>
- <value>1, 1, 1, 1</value>
+ <key>samp_rate</key>
+ <value>sample_rate</value>
</param>
<param>
- <key>notebook</key>
- <value></value>
+ <key>center_freq0</key>
+ <value>freq</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(973, 20)</value>
+ <key>gain0</key>
+ <value>0</value>
</param>
<param>
- <key>_rotation</key>
+ <key>ant0</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw0</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>import</key>
<param>
- <key>id</key>
- <value>import_0</value>
+ <key>center_freq1</key>
+ <value>0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>gain1</key>
+ <value>0</value>
</param>
<param>
- <key>import</key>
- <value>import math, os</value>
+ <key>ant1</key>
+ <value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(9, 106)</value>
+ <key>bw1</key>
+ <value>0</value>
</param>
<param>
- <key>_rotation</key>
+ <key>center_freq2</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>variable</key>
<param>
- <key>id</key>
- <value>config_filename</value>
+ <key>gain2</key>
+ <value>0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>ant2</key>
+ <value></value>
</param>
<param>
- <key>value</key>
- <value>os.environ['HOME']+'/.gnuradio/config.conf'</value>
+ <key>bw2</key>
+ <value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(13, 168)</value>
+ <key>center_freq3</key>
+ <value>0</value>
</param>
<param>
- <key>_rotation</key>
+ <key>gain3</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>variable_config</key>
<param>
- <key>id</key>
- <value>output_filename</value>
+ <key>ant3</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>bw3</key>
+ <value>0</value>
</param>
<param>
- <key>value</key>
- <value>'frames.hrpt'</value>
+ <key>center_freq4</key>
+ <value>0</value>
</param>
<param>
- <key>type</key>
- <value>string</value>
+ <key>gain4</key>
+ <value>0</value>
</param>
<param>
- <key>config_file</key>
- <value>config_filename</value>
+ <key>ant4</key>
+ <value></value>
</param>
<param>
- <key>section</key>
- <value>'usrp_rx_hrpt'</value>
+ <key>bw4</key>
+ <value>0</value>
</param>
<param>
- <key>option</key>
- <value>'filename'</value>
+ <key>center_freq5</key>
+ <value>0</value>
</param>
<param>
- <key>writeback</key>
- <value>output_filename</value>
+ <key>gain5</key>
+ <value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(990, 255)</value>
+ <key>ant5</key>
+ <value></value>
</param>
<param>
- <key>_rotation</key>
+ <key>bw5</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>variable_config</key>
<param>
- <key>id</key>
- <value>saved_clock_alpha</value>
+ <key>center_freq6</key>
+ <value>0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>gain6</key>
+ <value>0</value>
</param>
<param>
- <key>value</key>
- <value>0.01</value>
+ <key>ant6</key>
+ <value></value>
</param>
<param>
- <key>type</key>
- <value>real</value>
+ <key>bw6</key>
+ <value>0</value>
</param>
<param>
- <key>config_file</key>
- <value>config_filename</value>
+ <key>center_freq7</key>
+ <value>0</value>
</param>
<param>
- <key>section</key>
- <value>'usrp_rx_hrpt'</value>
+ <key>gain7</key>
+ <value>0</value>
</param>
<param>
- <key>option</key>
- <value>'clock_alpha'</value>
+ <key>ant7</key>
+ <value></value>
</param>
<param>
- <key>writeback</key>
- <value>clock_alpha</value>
+ <key>bw7</key>
+ <value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(832, 254)</value>
+ <key>center_freq8</key>
+ <value>0</value>
</param>
<param>
- <key>_rotation</key>
+ <key>gain8</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>variable_config</key>
<param>
- <key>id</key>
- <value>saved_pll_alpha</value>
+ <key>ant8</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>bw8</key>
+ <value>0</value>
</param>
<param>
- <key>value</key>
- <value>0.01</value>
+ <key>center_freq9</key>
+ <value>0</value>
</param>
<param>
- <key>type</key>
- <value>real</value>
+ <key>gain9</key>
+ <value>0</value>
</param>
<param>
- <key>config_file</key>
- <value>config_filename</value>
+ <key>ant9</key>
+ <value></value>
</param>
<param>
- <key>section</key>
- <value>'usrp_rx_hrpt'</value>
+ <key>bw9</key>
+ <value>0</value>
</param>
<param>
- <key>option</key>
- <value>'pll_alpha'</value>
+ <key>center_freq10</key>
+ <value>0</value>
</param>
<param>
- <key>writeback</key>
- <value>pll_alpha</value>
+ <key>gain10</key>
+ <value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(674, 254)</value>
+ <key>ant10</key>
+ <value></value>
</param>
<param>
- <key>_rotation</key>
+ <key>bw10</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>variable_config</key>
<param>
- <key>id</key>
- <value>saved_gain</value>
+ <key>center_freq11</key>
+ <value>0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>gain11</key>
+ <value>0</value>
</param>
<param>
- <key>value</key>
- <value>35</value>
+ <key>ant11</key>
+ <value></value>
</param>
<param>
- <key>type</key>
- <value>real</value>
+ <key>bw11</key>
+ <value>0</value>
</param>
<param>
- <key>config_file</key>
- <value>config_filename</value>
+ <key>center_freq12</key>
+ <value>0</value>
</param>
<param>
- <key>section</key>
- <value>'usrp_rx_hrpt'</value>
+ <key>gain12</key>
+ <value>0</value>
</param>
<param>
- <key>option</key>
- <value>'gain'</value>
+ <key>ant12</key>
+ <value></value>
</param>
<param>
- <key>writeback</key>
- <value>gain</value>
+ <key>bw12</key>
+ <value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(515, 255)</value>
+ <key>center_freq13</key>
+ <value>0</value>
</param>
<param>
- <key>_rotation</key>
+ <key>gain13</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>variable_config</key>
<param>
- <key>id</key>
- <value>saved_freq</value>
+ <key>ant13</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>bw13</key>
+ <value>0</value>
</param>
<param>
- <key>value</key>
- <value>1698e6</value>
+ <key>center_freq14</key>
+ <value>0</value>
</param>
<param>
- <key>type</key>
- <value>real</value>
+ <key>gain14</key>
+ <value>0</value>
</param>
<param>
- <key>config_file</key>
- <value>config_filename</value>
+ <key>ant14</key>
+ <value></value>
</param>
<param>
- <key>section</key>
- <value>'usrp_rx_hrpt'</value>
+ <key>bw14</key>
+ <value>0</value>
</param>
<param>
- <key>option</key>
- <value>'freq'</value>
+ <key>center_freq15</key>
+ <value>0</value>
</param>
<param>
- <key>writeback</key>
- <value>freq</value>
+ <key>gain15</key>
+ <value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(358, 254)</value>
+ <key>ant15</key>
+ <value></value>
</param>
<param>
- <key>_rotation</key>
+ <key>bw15</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>variable</key>
<param>
- <key>id</key>
- <value>sample_rate</value>
+ <key>center_freq16</key>
+ <value>0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>gain16</key>
+ <value>0</value>
</param>
<param>
- <key>value</key>
- <value>4e6</value>
+ <key>ant16</key>
+ <value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(198, 17)</value>
+ <key>bw16</key>
+ <value>0</value>
</param>
<param>
- <key>_rotation</key>
+ <key>center_freq17</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>wxgui_scopesink2</key>
<param>
- <key>id</key>
- <value>demod_scope</value>
+ <key>gain17</key>
+ <value>0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>ant17</key>
+ <value></value>
</param>
<param>
- <key>type</key>
- <value>float</value>
+ <key>bw17</key>
+ <value>0</value>
</param>
<param>
- <key>title</key>
- <value>Post-Demod</value>
+ <key>center_freq18</key>
+ <value>0</value>
</param>
<param>
- <key>samp_rate</key>
- <value>sym_rate*2.0</value>
+ <key>gain18</key>
+ <value>0</value>
</param>
<param>
- <key>v_scale</key>
- <value>0.5</value>
+ <key>ant18</key>
+ <value></value>
</param>
<param>
- <key>v_offset</key>
+ <key>bw18</key>
<value>0</value>
</param>
<param>
- <key>t_scale</key>
- <value>10.0/sym_rate</value>
+ <key>center_freq19</key>
+ <value>0</value>
</param>
<param>
- <key>ac_couple</key>
- <value>False</value>
+ <key>gain19</key>
+ <value>0</value>
</param>
<param>
- <key>xy_mode</key>
- <value>False</value>
+ <key>ant19</key>
+ <value></value>
</param>
<param>
- <key>num_inputs</key>
- <value>1</value>
+ <key>bw19</key>
+ <value>0</value>
</param>
<param>
- <key>win_size</key>
+ <key>center_freq20</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain20</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant20</key>
<value></value>
</param>
<param>
- <key>grid_pos</key>
- <value>0, 0, 1, 1</value>
+ <key>bw20</key>
+ <value>0</value>
</param>
<param>
- <key>notebook</key>
- <value>displays, 1</value>
+ <key>center_freq21</key>
+ <value>0</value>
</param>
<param>
- <key>trig_mode</key>
- <value>wxgui.TRIG_MODE_AUTO</value>
+ <key>gain21</key>
+ <value>0</value>
</param>
<param>
- <key>y_axis_label</key>
- <value>Counts</value>
+ <key>ant21</key>
+ <value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(666, 542)</value>
+ <key>bw21</key>
+ <value>0</value>
</param>
<param>
- <key>_rotation</key>
- <value>180</value>
+ <key>center_freq22</key>
+ <value>0</value>
</param>
- </block>
- <block>
- <key>blocks_moving_average_xx</key>
<param>
- <key>id</key>
- <value>blocks_moving_average_xx_0</value>
+ <key>gain22</key>
+ <value>0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>ant22</key>
+ <value></value>
</param>
<param>
- <key>type</key>
- <value>float</value>
+ <key>bw22</key>
+ <value>0</value>
</param>
<param>
- <key>length</key>
- <value>hs</value>
+ <key>center_freq23</key>
+ <value>0</value>
</param>
<param>
- <key>scale</key>
- <value>1.0/hs</value>
+ <key>gain23</key>
+ <value>0</value>
</param>
<param>
- <key>max_iter</key>
- <value>4000</value>
+ <key>ant23</key>
+ <value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(682, 713)</value>
+ <key>bw23</key>
+ <value>0</value>
</param>
<param>
- <key>_rotation</key>
+ <key>center_freq24</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>virtual_sink</key>
<param>
- <key>id</key>
- <value>virtual_sink_0</value>
+ <key>gain24</key>
+ <value>0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>ant24</key>
+ <value></value>
</param>
<param>
- <key>stream_id</key>
- <value>baseband</value>
+ <key>bw24</key>
+ <value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(1138, 729)</value>
+ <key>center_freq25</key>
+ <value>0</value>
</param>
<param>
- <key>_rotation</key>
+ <key>gain25</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>digital_clock_recovery_mm_xx</key>
<param>
- <key>id</key>
- <value>digital_clock_recovery_mm_xx_0</value>
+ <key>ant25</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>bw25</key>
+ <value>0</value>
</param>
<param>
- <key>type</key>
- <value>float</value>
+ <key>center_freq26</key>
+ <value>0</value>
</param>
<param>
- <key>omega</key>
- <value>sps/2.0</value>
+ <key>gain26</key>
+ <value>0</value>
</param>
<param>
- <key>gain_omega</key>
- <value>clock_alpha**2/4.0</value>
+ <key>ant26</key>
+ <value></value>
</param>
<param>
- <key>mu</key>
- <value>0.5</value>
+ <key>bw26</key>
+ <value>0</value>
</param>
<param>
- <key>gain_mu</key>
- <value>clock_alpha</value>
+ <key>center_freq27</key>
+ <value>0</value>
</param>
<param>
- <key>omega_relative_limit</key>
- <value>max_clock_offset</value>
+ <key>gain27</key>
+ <value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(896, 697)</value>
+ <key>ant27</key>
+ <value></value>
</param>
<param>
- <key>_rotation</key>
+ <key>bw27</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>virtual_source</key>
<param>
- <key>id</key>
- <value>virtual_source_0</value>
+ <key>center_freq28</key>
+ <value>0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>gain28</key>
+ <value>0</value>
</param>
<param>
- <key>stream_id</key>
- <value>baseband</value>
+ <key>ant28</key>
+ <value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(173, 971)</value>
+ <key>bw28</key>
+ <value>0</value>
</param>
<param>
- <key>_rotation</key>
+ <key>center_freq29</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>digital_binary_slicer_fb</key>
<param>
- <key>id</key>
- <value>digital_binary_slicer_fb_0</value>
+ <key>gain29</key>
+ <value>0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>ant29</key>
+ <value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(423, 975)</value>
+ <key>bw29</key>
+ <value>0</value>
</param>
<param>
- <key>_rotation</key>
+ <key>center_freq30</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>noaa_hrpt_deframer</key>
<param>
- <key>id</key>
- <value>deframer</value>
+ <key>gain30</key>
+ <value>0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>ant30</key>
+ <value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(762, 975)</value>
+ <key>bw30</key>
+ <value>0</value>
</param>
<param>
- <key>_rotation</key>
+ <key>center_freq31</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>noaa_hrpt_decoder</key>
<param>
- <key>id</key>
- <value>decoder</value>
+ <key>gain31</key>
+ <value>0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>ant31</key>
+ <value></value>
</param>
<param>
- <key>verbose</key>
- <value>True</value>
+ <key>bw31</key>
+ <value>0</value>
</param>
<param>
- <key>output</key>
- <value>True</value>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(974, 925)</value>
+ <value>(49, 713)</value>
</param>
<param>
<key>_rotation</key>
@@ -1872,34 +2144,54 @@
</param>
</block>
<block>
- <key>blocks_file_sink</key>
+ <key>analog_agc_xx</key>
<param>
<key>id</key>
- <value>frame_sink</value>
+ <value>analog_agc_xx_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>file</key>
- <value>output_filename</value>
+ <key>type</key>
+ <value>complex</value>
</param>
<param>
- <key>type</key>
- <value>short</value>
+ <key>rate</key>
+ <value>1e-6</value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>reference</key>
+ <value>1.0</value>
</param>
<param>
- <key>unbuffered</key>
- <value>False</value>
+ <key>gain</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>max_gain</key>
+ <value>65536</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(973, 1024)</value>
+ <value>(276, 705)</value>
</param>
<param>
<key>_rotation</key>
@@ -1919,24 +2211,6 @@
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>agc</source_block_id>
- <sink_block_id>pll</sink_block_id>
- <source_key>0</source_key>
- <sink_key>0</sink_key>
- </connection>
- <connection>
- <source_block_id>agc</source_block_id>
- <sink_block_id>rx_fft</sink_block_id>
- <source_key>0</source_key>
- <sink_key>0</sink_key>
- </connection>
- <connection>
- <source_block_id>uhd_usrp_source_0</source_block_id>
- <sink_block_id>agc</sink_block_id>
- <source_key>0</source_key>
- <sink_key>0</sink_key>
- </connection>
- <connection>
<source_block_id>pll</source_block_id>
<sink_block_id>blocks_moving_average_xx_0</sink_block_id>
<source_key>0</source_key>
@@ -1972,4 +2246,22 @@
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
+ <connection>
+ <source_block_id>analog_agc_xx_0</source_block_id>
+ <sink_block_id>rx_fft</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>analog_agc_xx_0</source_block_id>
+ <sink_block_id>pll</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>uhd_usrp_source_0</source_block_id>
+ <sink_block_id>analog_agc_xx_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
</flow_graph>
diff --git a/gr-noaa/examples/usrp_rx_hrpt_nogui.grc b/gr-noaa/examples/usrp_rx_hrpt_nogui.grc
index 3594ca035f..f8722fa61c 100644
--- a/gr-noaa/examples/usrp_rx_hrpt_nogui.grc
+++ b/gr-noaa/examples/usrp_rx_hrpt_nogui.grc
@@ -1,6 +1,6 @@
<?xml version='1.0' encoding='ASCII'?>
<flow_graph>
- <timestamp>Thu Oct 27 13:48:57 2011</timestamp>
+ <timestamp>Sat Jul 12 11:20:19 2014</timestamp>
<block>
<key>options</key>
<param>
@@ -44,10 +44,18 @@
<value>True</value>
</param>
<param>
+ <key>max_nouts</key>
+ <value>0</value>
+ </param>
+ <param>
<key>realtime_scheduling</key>
<value></value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(10, 10)</value>
</param>
@@ -60,7 +68,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>max_carrier_offset</value>
+ <value>sample_rate</value>
</param>
<param>
<key>_enabled</key>
@@ -68,11 +76,15 @@
</param>
<param>
<key>value</key>
- <value>2*math.pi*100e3/sample_rate</value>
+ <value>4e6</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(575, 19)</value>
+ <value>(198, 17)</value>
</param>
<param>
<key>_rotation</key>
@@ -83,7 +95,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>sym_rate</value>
+ <value>config_filename</value>
</param>
<param>
<key>_enabled</key>
@@ -91,11 +103,15 @@
</param>
<param>
<key>value</key>
- <value>600*1109</value>
+ <value>os.environ['HOME']+'/.gnuradio/config.conf'</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(301, 19)</value>
+ <value>(13, 168)</value>
</param>
<param>
<key>_rotation</key>
@@ -106,7 +122,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>sps</value>
+ <value>max_clock_offset</value>
</param>
<param>
<key>_enabled</key>
@@ -114,11 +130,15 @@
</param>
<param>
<key>value</key>
- <value>sample_rate/sym_rate</value>
+ <value>100e-6</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(397, 19)</value>
+ <value>(705, 19)</value>
</param>
<param>
<key>_rotation</key>
@@ -140,6 +160,10 @@
<value>int(sps/2.0)</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(499, 19)</value>
</param>
@@ -152,7 +176,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>max_clock_offset</value>
+ <value>sps</value>
</param>
<param>
<key>_enabled</key>
@@ -160,11 +184,15 @@
</param>
<param>
<key>value</key>
- <value>100e-6</value>
+ <value>sample_rate/sym_rate</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(705, 19)</value>
+ <value>(397, 19)</value>
</param>
<param>
<key>_rotation</key>
@@ -172,22 +200,26 @@
</param>
</block>
<block>
- <key>import</key>
+ <key>variable</key>
<param>
<key>id</key>
- <value>import_0</value>
+ <value>sym_rate</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>import</key>
- <value>import math, os</value>
+ <key>value</key>
+ <value>600*1109</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(9, 106)</value>
+ <value>(301, 19)</value>
</param>
<param>
<key>_rotation</key>
@@ -198,7 +230,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>config_filename</value>
+ <value>max_carrier_offset</value>
</param>
<param>
<key>_enabled</key>
@@ -206,11 +238,15 @@
</param>
<param>
<key>value</key>
- <value>os.environ['HOME']+'/.gnuradio/config.conf'</value>
+ <value>2*math.pi*100e3/sample_rate</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(13, 168)</value>
+ <value>(575, 19)</value>
</param>
<param>
<key>_rotation</key>
@@ -218,22 +254,26 @@
</param>
</block>
<block>
- <key>variable</key>
+ <key>import</key>
<param>
<key>id</key>
- <value>sample_rate</value>
+ <value>import_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>4e6</value>
+ <key>import</key>
+ <value>import math, os</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(198, 17)</value>
+ <value>(9, 106)</value>
</param>
<param>
<key>_rotation</key>
@@ -275,6 +315,10 @@
<value>clock_alpha</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(833, 104)</value>
</param>
@@ -318,6 +362,10 @@
<value>pll_alpha</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(675, 104)</value>
</param>
@@ -361,6 +409,10 @@
<value>gain</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(516, 105)</value>
</param>
@@ -404,6 +456,10 @@
<value>freq</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(359, 104)</value>
</param>
@@ -447,6 +503,10 @@
<value>output_filename</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(991, 105)</value>
</param>
@@ -490,6 +550,22 @@
<value>max_clock_offset</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(897, 341)</value>
</param>
@@ -522,6 +598,279 @@
</param>
</block>
<block>
+ <key>blocks_moving_average_xx</key>
+ <param>
+ <key>id</key>
+ <value>blocks_moving_average_xx_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>float</value>
+ </param>
+ <param>
+ <key>length</key>
+ <value>hs</value>
+ </param>
+ <param>
+ <key>scale</key>
+ <value>1.0/hs</value>
+ </param>
+ <param>
+ <key>max_iter</key>
+ <value>4000</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(683, 357)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>blocks_file_sink</key>
+ <param>
+ <key>id</key>
+ <value>frame_sink</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>file</key>
+ <value>output_filename</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>short</value>
+ </param>
+ <param>
+ <key>vlen</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>unbuffered</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>append</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(809, 595)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>noaa_hrpt_deframer</key>
+ <param>
+ <key>id</key>
+ <value>deframer</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(598, 546)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>digital_binary_slicer_fb</key>
+ <param>
+ <key>id</key>
+ <value>digital_binary_slicer_fb_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(259, 546)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>virtual_source</key>
+ <param>
+ <key>id</key>
+ <value>virtual_source_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>stream_id</key>
+ <value>baseband</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(40, 542)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>noaa_hrpt_decoder</key>
+ <param>
+ <key>id</key>
+ <value>decoder</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>verbose</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>output</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(810, 496)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable_config</key>
+ <param>
+ <key>id</key>
+ <value>addr</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>string</value>
+ </param>
+ <param>
+ <key>config_file</key>
+ <value>config_filename</value>
+ </param>
+ <param>
+ <key>section</key>
+ <value>'usrp_rx_hrpt'</value>
+ </param>
+ <param>
+ <key>option</key>
+ <value>'addr'</value>
+ </param>
+ <param>
+ <key>writeback</key>
+ <value>addr</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(195, 103)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
<key>uhd_usrp_source</key>
<param>
<key>id</key>
@@ -533,13 +882,29 @@
</param>
<param>
<key>type</key>
- <value>complex</value>
+ <value>fc32</value>
+ </param>
+ <param>
+ <key>otw</key>
+ <value></value>
+ </param>
+ <param>
+ <key>stream_args</key>
+ <value></value>
+ </param>
+ <param>
+ <key>stream_chans</key>
+ <value>[]</value>
</param>
<param>
<key>dev_addr</key>
<value>addr</value>
</param>
<param>
+ <key>dev_args</key>
+ <value>""</value>
+ </param>
+ <param>
<key>sync</key>
<value></value>
</param>
@@ -552,7 +917,11 @@
<value>1</value>
</param>
<param>
- <key>ref_source0</key>
+ <key>clock_source0</key>
+ <value></value>
+ </param>
+ <param>
+ <key>time_source0</key>
<value></value>
</param>
<param>
@@ -560,7 +929,11 @@
<value></value>
</param>
<param>
- <key>ref_source1</key>
+ <key>clock_source1</key>
+ <value></value>
+ </param>
+ <param>
+ <key>time_source1</key>
<value></value>
</param>
<param>
@@ -568,7 +941,11 @@
<value></value>
</param>
<param>
- <key>ref_source2</key>
+ <key>clock_source2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>time_source2</key>
<value></value>
</param>
<param>
@@ -576,7 +953,11 @@
<value></value>
</param>
<param>
- <key>ref_source3</key>
+ <key>clock_source3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>time_source3</key>
<value></value>
</param>
<param>
@@ -584,7 +965,11 @@
<value></value>
</param>
<param>
- <key>ref_source4</key>
+ <key>clock_source4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>time_source4</key>
<value></value>
</param>
<param>
@@ -592,7 +977,11 @@
<value></value>
</param>
<param>
- <key>ref_source5</key>
+ <key>clock_source5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>time_source5</key>
<value></value>
</param>
<param>
@@ -600,7 +989,11 @@
<value></value>
</param>
<param>
- <key>ref_source6</key>
+ <key>clock_source6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>time_source6</key>
<value></value>
</param>
<param>
@@ -608,7 +1001,11 @@
<value></value>
</param>
<param>
- <key>ref_source7</key>
+ <key>clock_source7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>time_source7</key>
<value></value>
</param>
<param>
@@ -1136,113 +1533,24 @@
<value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(50, 357)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>noaa_hrpt_pll_cf</key>
- <param>
- <key>id</key>
- <value>pll</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>alpha</key>
- <value>pll_alpha</value>
- </param>
- <param>
- <key>beta</key>
- <value>pll_alpha**2/4.0</value>
- </param>
- <param>
- <key>max_offset</key>
- <value>max_carrier_offset</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(470, 357)</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>_rotation</key>
+ <key>minoutbuf</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>gr_agc_xx</key>
- <param>
- <key>id</key>
- <value>agc</value>
- </param>
<param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>type</key>
- <value>complex</value>
- </param>
- <param>
- <key>rate</key>
- <value>1e-6</value>
- </param>
- <param>
- <key>reference</key>
- <value>1.0</value>
- </param>
- <param>
- <key>gain</key>
- <value>1.0</value>
- </param>
- <param>
- <key>max_gain</key>
- <value>1.0</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(302, 349)</value>
- </param>
- <param>
- <key>_rotation</key>
+ <key>maxoutbuf</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>blocks_moving_average_xx</key>
- <param>
- <key>id</key>
- <value>blocks_moving_average_xx_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>type</key>
- <value>float</value>
- </param>
- <param>
- <key>length</key>
- <value>hs</value>
- </param>
- <param>
- <key>scale</key>
- <value>1.0/hs</value>
- </param>
- <param>
- <key>max_iter</key>
- <value>4000</value>
- </param>
<param>
<key>_coordinate</key>
- <value>(683, 357)</value>
+ <value>(50, 357)</value>
</param>
<param>
<key>_rotation</key>
@@ -1250,72 +1558,46 @@
</param>
</block>
<block>
- <key>blocks_file_sink</key>
+ <key>noaa_hrpt_pll_cf</key>
<param>
<key>id</key>
- <value>frame_sink</value>
+ <value>pll</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>file</key>
- <value>output_filename</value>
+ <key>alpha</key>
+ <value>pll_alpha</value>
</param>
<param>
- <key>type</key>
- <value>short</value>
+ <key>beta</key>
+ <value>pll_alpha**2/4.0</value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>max_offset</key>
+ <value>max_carrier_offset</value>
</param>
<param>
- <key>unbuffered</key>
- <value>False</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(809, 595)</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>_rotation</key>
+ <key>minoutbuf</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>noaa_hrpt_deframer</key>
- <param>
- <key>id</key>
- <value>deframer</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(598, 546)</value>
- </param>
<param>
- <key>_rotation</key>
+ <key>maxoutbuf</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>digital_binary_slicer_fb</key>
- <param>
- <key>id</key>
- <value>digital_binary_slicer_fb_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
<param>
<key>_coordinate</key>
- <value>(259, 546)</value>
+ <value>(470, 357)</value>
</param>
<param>
<key>_rotation</key>
@@ -1323,92 +1605,54 @@
</param>
</block>
<block>
- <key>virtual_source</key>
+ <key>analog_agc_xx</key>
<param>
<key>id</key>
- <value>virtual_source_0</value>
+ <value>analog_agc_xx_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>stream_id</key>
- <value>baseband</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(40, 542)</value>
+ <key>type</key>
+ <value>complex</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>rate</key>
+ <value>1e-6</value>
</param>
- </block>
- <block>
- <key>noaa_hrpt_decoder</key>
<param>
- <key>id</key>
- <value>decoder</value>
+ <key>reference</key>
+ <value>1.0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>gain</key>
+ <value>1.0</value>
</param>
<param>
- <key>verbose</key>
- <value>True</value>
+ <key>max_gain</key>
+ <value>65536</value>
</param>
<param>
- <key>output</key>
- <value>True</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(810, 496)</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>_rotation</key>
+ <key>minoutbuf</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>variable_config</key>
- <param>
- <key>id</key>
- <value>addr</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
<param>
- <key>value</key>
- <value>""</value>
- </param>
- <param>
- <key>type</key>
- <value>string</value>
- </param>
- <param>
- <key>config_file</key>
- <value>config_filename</value>
- </param>
- <param>
- <key>section</key>
- <value>'usrp_rx_hrpt'</value>
- </param>
- <param>
- <key>option</key>
- <value>'addr'</value>
- </param>
- <param>
- <key>writeback</key>
- <value>addr</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(195, 103)</value>
+ <value>(286, 349)</value>
</param>
<param>
<key>_rotation</key>
@@ -1434,18 +1678,6 @@
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>uhd_usrp_source_0</source_block_id>
- <sink_block_id>agc</sink_block_id>
- <source_key>0</source_key>
- <sink_key>0</sink_key>
- </connection>
- <connection>
- <source_block_id>agc</source_block_id>
- <sink_block_id>pll</sink_block_id>
- <source_key>0</source_key>
- <sink_key>0</sink_key>
- </connection>
- <connection>
<source_block_id>digital_binary_slicer_fb_0</source_block_id>
<sink_block_id>deframer</sink_block_id>
<source_key>0</source_key>
@@ -1469,4 +1701,16 @@
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
+ <connection>
+ <source_block_id>uhd_usrp_source_0</source_block_id>
+ <sink_block_id>analog_agc_xx_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>analog_agc_xx_0</source_block_id>
+ <sink_block_id>pll</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
</flow_graph>
diff --git a/gr-noaa/lib/CMakeLists.txt b/gr-noaa/lib/CMakeLists.txt
index ef75789d79..5e7ede7210 100644
--- a/gr-noaa/lib/CMakeLists.txt
+++ b/gr-noaa/lib/CMakeLists.txt
@@ -68,6 +68,18 @@ target_link_libraries(gnuradio-noaa ${noaa_libs})
GR_LIBRARY_FOO(gnuradio-noaa RUNTIME_COMPONENT "noaa_runtime" DEVEL_COMPONENT "noaa_devel")
if(ENABLE_STATIC_LIBS)
+ if(ENABLE_GR_CTRLPORT)
+ # Remove GR_CTRLPORT set this target's definitions.
+ # Makes sure we don't try to use ControlPort stuff in source files
+ # since Ice will not work with static libs.
+ GET_DIRECTORY_PROPERTY(STATIC_DEFS COMPILE_DEFINITIONS)
+ list(REMOVE_ITEM STATIC_DEFS "GR_CTRLPORT")
+ SET_PROPERTY(DIRECTORY PROPERTY COMPILE_DEFINITIONS "${STATIC_DEFS}")
+
+ # readd it to the target since we removed it from the directory-wide list.
+ SET_PROPERTY(TARGET gnuradio-noaa APPEND PROPERTY COMPILE_DEFINITIONS "GR_CTRLPORT")
+ endif(ENABLE_GR_CTRLPORT)
+
add_library(gnuradio-noaa_static STATIC ${noaa_sources})
if(NOT WIN32)
diff --git a/gr-pager/apps/usrp_rx_flex.grc b/gr-pager/apps/usrp_rx_flex.grc
index b6833aa526..e806f0df9d 100644
--- a/gr-pager/apps/usrp_rx_flex.grc
+++ b/gr-pager/apps/usrp_rx_flex.grc
@@ -1,6 +1,6 @@
<?xml version='1.0' encoding='ASCII'?>
<flow_graph>
- <timestamp>Thu Oct 29 11:01:22 2009</timestamp>
+ <timestamp>Sat Jul 12 11:24:07 2014</timestamp>
<block>
<key>options</key>
<param>
@@ -44,10 +44,18 @@
<value>True</value>
</param>
<param>
+ <key>max_nouts</key>
+ <value>0</value>
+ </param>
+ <param>
<key>realtime_scheduling</key>
<value></value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(10, 10)</value>
</param>
@@ -60,7 +68,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>adc_rate</value>
+ <value>bb_decim</value>
</param>
<param>
<key>_enabled</key>
@@ -68,11 +76,15 @@
</param>
<param>
<key>value</key>
- <value>64e6</value>
+ <value>8</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(225, 12)</value>
+ <value>(1027, 864)</value>
</param>
<param>
<key>_rotation</key>
@@ -83,7 +95,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>sample_rate</value>
+ <value>bb_interp</value>
</param>
<param>
<key>_enabled</key>
@@ -91,11 +103,15 @@
</param>
<param>
<key>value</key>
- <value>adc_rate/decim</value>
+ <value>5</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(382, 12)</value>
+ <value>(938, 862)</value>
</param>
<param>
<key>_rotation</key>
@@ -106,7 +122,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>freq</value>
+ <value>ma_ntaps</value>
</param>
<param>
<key>_enabled</key>
@@ -114,11 +130,15 @@
</param>
<param>
<key>value</key>
- <value>band_freq+(channel-61)*25e3</value>
+ <value>int(channel_rate/symbol_rate)</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(480, 11)</value>
+ <value>(850, 863)</value>
</param>
<param>
<key>_rotation</key>
@@ -126,121 +146,80 @@
</param>
</block>
<block>
- <key>wxgui_fftsink2</key>
+ <key>variable</key>
<param>
<key>id</key>
- <value>wxgui_fftsink2_0</value>
+ <value>nchan_taps</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
- </param>
- <param>
- <key>title</key>
- <value>FLEX Spectrum</value>
- </param>
- <param>
- <key>samp_rate</key>
- <value>sample_rate</value>
- </param>
- <param>
- <key>baseband_freq</key>
- <value>band_freq</value>
+ <key>value</key>
+ <value>len(channel_taps)</value>
</param>
<param>
- <key>y_per_div</key>
- <value>10</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>y_divs</key>
- <value>10</value>
+ <key>_coordinate</key>
+ <value>(412, 931)</value>
</param>
<param>
- <key>ref_level</key>
+ <key>_rotation</key>
<value>0</value>
</param>
+ </block>
+ <block>
+ <key>variable</key>
<param>
- <key>ref_scale</key>
- <value>65536</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>
+ <key>id</key>
+ <value>baseband_rate</value>
</param>
<param>
- <key>avg_alpha</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>win</key>
- <value>None</value>
+ <key>value</key>
+ <value>16000</value>
</param>
<param>
- <key>win_size</key>
+ <key>alias</key>
<value></value>
</param>
<param>
- <key>grid_pos</key>
- <value>0,0,1,1</value>
- </param>
- <param>
- <key>notebook</key>
- <value>displays,0</value>
- </param>
- <param>
<key>_coordinate</key>
- <value>(34, 508)</value>
+ <value>(1019, 17)</value>
</param>
<param>
<key>_rotation</key>
- <value>180</value>
+ <value>0</value>
</param>
</block>
<block>
- <key>notebook</key>
+ <key>variable</key>
<param>
<key>id</key>
- <value>displays</value>
+ <value>channel_rate</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>['RX Spectrum','Baseband']</value>
- </param>
- <param>
- <key>grid_pos</key>
- <value>1, 0, 1, 5</value>
+ <key>value</key>
+ <value>8*3200</value>
</param>
<param>
- <key>notebook</key>
+ <key>alias</key>
<value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(9, 209)</value>
+ <value>(792, 13)</value>
</param>
<param>
<key>_rotation</key>
@@ -248,22 +227,26 @@
</param>
</block>
<block>
- <key>import</key>
+ <key>variable</key>
<param>
<key>id</key>
- <value>import_0</value>
+ <value>passband</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>import</key>
- <value>import os, math</value>
+ <key>value</key>
+ <value>2*(deviation+symbol_rate)</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(10, 76)</value>
+ <value>(327, 930)</value>
</param>
<param>
<key>_rotation</key>
@@ -271,58 +254,53 @@
</param>
</block>
<block>
- <key>usrp_simple_source_x</key>
+ <key>variable</key>
<param>
<key>id</key>
- <value>usrp_source</value>
+ <value>config_filename</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
+ <key>value</key>
+ <value>os.environ["HOME"]+"/.gnuradio/config.conf"</value>
</param>
<param>
- <key>format</key>
+ <key>alias</key>
<value></value>
</param>
<param>
- <key>which</key>
- <value>0</value>
- </param>
- <param>
- <key>decimation</key>
- <value>decim</value>
- </param>
- <param>
- <key>frequency</key>
- <value>band_freq</value>
+ <key>_coordinate</key>
+ <value>(9, 133)</value>
</param>
<param>
- <key>lo_offset</key>
- <value>float('inf')</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
+ </block>
+ <block>
+ <key>variable</key>
<param>
- <key>gain</key>
- <value>rx_gain</value>
+ <key>id</key>
+ <value>channel_taps</value>
</param>
<param>
- <key>side</key>
- <value>A</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>rx_ant</key>
- <value>RXA</value>
+ <key>value</key>
+ <value>firdes.low_pass(10, sample_rate, passband/2.0, (channel_rate-passband)/2.0)</value>
</param>
<param>
- <key>hb_filters</key>
+ <key>alias</key>
<value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(32, 734)</value>
+ <value>(325, 857)</value>
</param>
<param>
<key>_rotation</key>
@@ -330,38 +308,26 @@
</param>
</block>
<block>
- <key>filter_freq_xlating_fir_filter_xxx</key>
+ <key>variable</key>
<param>
<key>id</key>
- <value>filter_freq_xlating_fir_filter_xxx_0</value>
+ <value>demod_k</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>ccc</value>
- </param>
- <param>
- <key>decim</key>
- <value>channel_decim</value>
- </param>
- <param>
- <key>taps</key>
- <value>channel_taps</value>
- </param>
- <param>
- <key>center_freq</key>
- <value>band_freq-freq+offset</value>
+ <key>value</key>
+ <value>3*channel_rate/(2*math.pi*deviation)</value>
</param>
<param>
- <key>samp_rate</key>
- <value>sample_rate</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(321, 750)</value>
+ <value>(598, 857)</value>
</param>
<param>
<key>_rotation</key>
@@ -369,90 +335,84 @@
</param>
</block>
<block>
- <key>wxgui_fftsink2</key>
+ <key>variable</key>
<param>
<key>id</key>
- <value>wxgui_fftsink2_1</value>
+ <value>deviation</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
- </param>
- <param>
- <key>title</key>
- <value>Channel Spectrum</value>
- </param>
- <param>
- <key>samp_rate</key>
- <value>channel_rate</value>
- </param>
- <param>
- <key>baseband_freq</key>
- <value>freq</value>
+ <key>value</key>
+ <value>4800</value>
</param>
<param>
- <key>y_per_div</key>
- <value>10</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>y_divs</key>
- <value>10</value>
+ <key>_coordinate</key>
+ <value>(688, 14)</value>
</param>
<param>
- <key>ref_level</key>
+ <key>_rotation</key>
<value>0</value>
</param>
+ </block>
+ <block>
+ <key>variable</key>
<param>
- <key>ref_scale</key>
- <value>65536</value>
+ <key>id</key>
+ <value>channel_decim</value>
</param>
<param>
- <key>fft_size</key>
- <value>1024</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>fft_rate</key>
- <value>30</value>
+ <key>value</key>
+ <value>int(sample_rate/channel_rate)</value>
</param>
<param>
- <key>peak_hold</key>
- <value>False</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>average</key>
- <value>False</value>
+ <key>_coordinate</key>
+ <value>(906, 12)</value>
</param>
<param>
- <key>avg_alpha</key>
+ <key>_rotation</key>
<value>0</value>
</param>
+ </block>
+ <block>
+ <key>variable</key>
<param>
- <key>win</key>
- <value>None</value>
+ <key>id</key>
+ <value>symbol_rate</value>
</param>
<param>
- <key>win_size</key>
- <value></value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>grid_pos</key>
- <value>1, 0, 1, 1</value>
+ <key>value</key>
+ <value>3200</value>
</param>
<param>
- <key>notebook</key>
- <value>displays, 0</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(344, 511)</value>
+ <value>(590, 12)</value>
</param>
<param>
<key>_rotation</key>
- <value>180</value>
+ <value>0</value>
</param>
</block>
<block>
@@ -470,6 +430,10 @@
<value>20</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(310, 11)</value>
</param>
@@ -482,7 +446,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>symbol_rate</value>
+ <value>freq</value>
</param>
<param>
<key>_enabled</key>
@@ -490,11 +454,15 @@
</param>
<param>
<key>value</key>
- <value>3200</value>
+ <value>band_freq+(channel-61)*25e3</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(590, 12)</value>
+ <value>(480, 11)</value>
</param>
<param>
<key>_rotation</key>
@@ -505,7 +473,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>channel_decim</value>
+ <value>sample_rate</value>
</param>
<param>
<key>_enabled</key>
@@ -513,11 +481,15 @@
</param>
<param>
<key>value</key>
- <value>int(sample_rate/channel_rate)</value>
+ <value>adc_rate/decim</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(906, 12)</value>
+ <value>(382, 12)</value>
</param>
<param>
<key>_rotation</key>
@@ -528,7 +500,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>deviation</value>
+ <value>adc_rate</value>
</param>
<param>
<key>_enabled</key>
@@ -536,11 +508,15 @@
</param>
<param>
<key>value</key>
- <value>4800</value>
+ <value>64e6</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(688, 14)</value>
+ <value>(225, 12)</value>
</param>
<param>
<key>_rotation</key>
@@ -548,45 +524,38 @@
</param>
</block>
<block>
- <key>variable</key>
+ <key>notebook</key>
<param>
<key>id</key>
- <value>demod_k</value>
+ <value>displays</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>3*channel_rate/(2*math.pi*deviation)</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(598, 857)</value>
+ <key>style</key>
+ <value>wx.NB_TOP</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>labels</key>
+ <value>['RX Spectrum','Baseband']</value>
</param>
- </block>
- <block>
- <key>variable</key>
<param>
- <key>id</key>
- <value>channel_taps</value>
+ <key>grid_pos</key>
+ <value>1, 0, 1, 5</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>notebook</key>
+ <value></value>
</param>
<param>
- <key>value</key>
- <value>firdes.low_pass(10, sample_rate, passband/2.0, (channel_rate-passband)/2.0)</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(325, 857)</value>
+ <value>(9, 209)</value>
</param>
<param>
<key>_rotation</key>
@@ -594,22 +563,26 @@
</param>
</block>
<block>
- <key>variable</key>
+ <key>import</key>
<param>
<key>id</key>
- <value>config_filename</value>
+ <value>import_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>os.environ["HOME"]+"/.gnuradio/config.conf"</value>
+ <key>import</key>
+ <value>import os, math</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(9, 133)</value>
+ <value>(10, 76)</value>
</param>
<param>
<key>_rotation</key>
@@ -651,6 +624,10 @@
<value>band_freq</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(228, 311)</value>
</param>
@@ -694,6 +671,10 @@
<value>channel</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(387, 312)</value>
</param>
@@ -737,6 +718,10 @@
<value>offset</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(547, 312)</value>
</param>
@@ -780,6 +765,10 @@
<value>rx_gain</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(706, 312)</value>
</param>
@@ -823,6 +812,10 @@
<value></value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(225, 121)</value>
</param>
@@ -866,54 +859,12 @@
<value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(801, 124)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>variable</key>
- <param>
- <key>id</key>
- <value>passband</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>value</key>
- <value>2*(deviation+symbol_rate)</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(327, 930)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>variable</key>
- <param>
- <key>id</key>
- <value>channel_rate</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>value</key>
- <value>8*3200</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(792, 13)</value>
+ <value>(801, 124)</value>
</param>
<param>
<key>_rotation</key>
@@ -967,6 +918,10 @@
<value></value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(376, 120)</value>
</param>
@@ -1022,6 +977,10 @@
<value></value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(658, 122)</value>
</param>
@@ -1077,6 +1036,10 @@
<value></value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(518, 118)</value>
</param>
@@ -1086,22 +1049,22 @@
</param>
</block>
<block>
- <key>analog_quadrature_demod_cf</key>
+ <key>virtual_source</key>
<param>
<key>id</key>
- <value>fm_demod</value>
+ <value>virtual_source_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>gain</key>
- <value>demod_k</value>
+ <key>stream_id</key>
+ <value>baseband</value>
</param>
<param>
<key>_coordinate</key>
- <value>(599, 774)</value>
+ <value>(79, 1186)</value>
</param>
<param>
<key>_rotation</key>
@@ -1109,22 +1072,38 @@
</param>
</block>
<block>
- <key>variable</key>
+ <key>pager_slicer_fb</key>
<param>
<key>id</key>
- <value>baseband_rate</value>
+ <value>pager_slicer_fb_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>16000</value>
+ <key>alpha</key>
+ <value>1e-6</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(1019, 17)</value>
+ <value>(304, 1186)</value>
</param>
<param>
<key>_rotation</key>
@@ -1132,45 +1111,160 @@
</param>
</block>
<block>
- <key>variable</key>
+ <key>wxgui_scopesink2</key>
<param>
<key>id</key>
- <value>nchan_taps</value>
+ <value>wxgui_scopesink2_0</value>
</param>
<param>
<key>_enabled</key>
- <value>True</value>
+ <value>False</value>
</param>
<param>
- <key>value</key>
- <value>len(channel_taps)</value>
+ <key>type</key>
+ <value>float</value>
+ </param>
+ <param>
+ <key>title</key>
+ <value>Slicer Output</value>
+ </param>
+ <param>
+ <key>samp_rate</key>
+ <value>baseband_rate</value>
+ </param>
+ <param>
+ <key>v_scale</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>v_offset</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>t_scale</key>
+ <value>40.0/baseband_rate</value>
+ </param>
+ <param>
+ <key>ac_couple</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>xy_mode</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>num_inputs</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>win_size</key>
+ <value></value>
+ </param>
+ <param>
+ <key>grid_pos</key>
+ <value>1,0,1,1</value>
+ </param>
+ <param>
+ <key>notebook</key>
+ <value>displays, 1</value>
+ </param>
+ <param>
+ <key>trig_mode</key>
+ <value>wxgui.TRIG_MODE_AUTO</value>
+ </param>
+ <param>
+ <key>y_axis_label</key>
+ <value>Counts</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(412, 931)</value>
+ <value>(75, 1044)</value>
</param>
<param>
<key>_rotation</key>
+ <value>180</value>
+ </param>
+ </block>
+ <block>
+ <key>blocks_char_to_float</key>
+ <param>
+ <key>id</key>
+ <value>blocks_char_to_float_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>vlen</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>scale</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
<value>0</value>
</param>
+ <param>
+ <key>_coordinate</key>
+ <value>(325, 1088)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>180</value>
+ </param>
</block>
<block>
- <key>variable</key>
+ <key>pager_flex_sync</key>
<param>
<key>id</key>
- <value>ma_ntaps</value>
+ <value>pager_flex_sync_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>int(channel_rate/symbol_rate)</value>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(850, 863)</value>
+ <value>(529, 1139)</value>
</param>
<param>
<key>_rotation</key>
@@ -1178,22 +1272,34 @@
</param>
</block>
<block>
- <key>variable</key>
+ <key>pager_flex_deinterleave</key>
<param>
<key>id</key>
- <value>bb_interp</value>
+ <value>pager_flex_deinterleave_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>5</value>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(938, 862)</value>
+ <value>(777, 1116)</value>
</param>
<param>
<key>_rotation</key>
@@ -1201,22 +1307,42 @@
</param>
</block>
<block>
- <key>virtual_sink</key>
+ <key>blocks_null_sink</key>
<param>
<key>id</key>
- <value>virtual_sink_0</value>
+ <value>blocks_null_sink_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>stream_id</key>
- <value>baseband</value>
+ <key>type</key>
+ <value>int</value>
+ </param>
+ <param>
+ <key>vlen</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>num_inputs</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>bus_conns</key>
+ <value>[[0,],]</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(1100, 774)</value>
+ <value>(1042, 1116)</value>
</param>
<param>
<key>_rotation</key>
@@ -1224,38 +1350,69 @@
</param>
</block>
<block>
- <key>blks2_rational_resampler_xxx</key>
+ <key>pager_flex_deinterleave</key>
<param>
<key>id</key>
- <value>resampler</value>
+ <value>pager_flex_deinterleave_0_1_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>fff</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>decim</key>
- <value>bb_decim</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>interp</key>
- <value>bb_interp</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>taps</key>
- <value>[1.0/ma_ntaps,]*ma_ntaps*bb_interp</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(778, 1168)</value>
</param>
<param>
- <key>fractional_bw</key>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>pager_flex_deinterleave</key>
+ <param>
+ <key>id</key>
+ <value>pager_flex_deinterleave_0_1</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
<value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(851, 750)</value>
+ <value>(776, 1225)</value>
</param>
<param>
<key>_rotation</key>
@@ -1263,22 +1420,34 @@
</param>
</block>
<block>
- <key>variable</key>
+ <key>pager_flex_deinterleave</key>
<param>
<key>id</key>
- <value>bb_decim</value>
+ <value>pager_flex_deinterleave_0_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>8</value>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(1027, 864)</value>
+ <value>(776, 1273)</value>
</param>
<param>
<key>_rotation</key>
@@ -1286,10 +1455,10 @@
</param>
</block>
<block>
- <key>wxgui_scopesink2</key>
+ <key>blocks_null_sink</key>
<param>
<key>id</key>
- <value>wxgui_scopesink2_0_0</value>
+ <value>blocks_null_sink_0_0</value>
</param>
<param>
<key>_enabled</key>
@@ -1297,78 +1466,117 @@
</param>
<param>
<key>type</key>
- <value>float</value>
+ <value>int</value>
</param>
<param>
- <key>title</key>
- <value>Baseband</value>
+ <key>vlen</key>
+ <value>1</value>
</param>
<param>
- <key>samp_rate</key>
- <value>16e3</value>
+ <key>num_inputs</key>
+ <value>1</value>
</param>
<param>
- <key>v_scale</key>
- <value>1</value>
+ <key>bus_conns</key>
+ <value>[[0,],]</value>
</param>
<param>
- <key>v_offset</key>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(1042, 1168)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
<value>0</value>
</param>
+ </block>
+ <block>
+ <key>blocks_null_sink</key>
<param>
- <key>t_scale</key>
- <value>40.0/16e3</value>
+ <key>id</key>
+ <value>blocks_null_sink_0_1</value>
</param>
<param>
- <key>ac_couple</key>
- <value>False</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>xy_mode</key>
- <value>False</value>
+ <key>type</key>
+ <value>int</value>
+ </param>
+ <param>
+ <key>vlen</key>
+ <value>1</value>
</param>
<param>
<key>num_inputs</key>
<value>1</value>
</param>
<param>
- <key>win_size</key>
- <value></value>
+ <key>bus_conns</key>
+ <value>[[0,],]</value>
</param>
<param>
- <key>grid_pos</key>
- <value>0, 0, 1, 1</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>notebook</key>
- <value>displays, 1</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(851, 586)</value>
+ <value>(1041, 1225)</value>
</param>
<param>
<key>_rotation</key>
- <value>180</value>
+ <value>0</value>
</param>
</block>
<block>
- <key>virtual_source</key>
+ <key>blocks_null_sink</key>
<param>
<key>id</key>
- <value>virtual_source_0</value>
+ <value>blocks_null_sink_0_2</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>stream_id</key>
- <value>baseband</value>
+ <key>type</key>
+ <value>int</value>
+ </param>
+ <param>
+ <key>vlen</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>num_inputs</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>bus_conns</key>
+ <value>[[0,],]</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(79, 1186)</value>
+ <value>(1040, 1273)</value>
</param>
<param>
<key>_rotation</key>
@@ -1376,22 +1584,22 @@
</param>
</block>
<block>
- <key>pager_slicer_fb</key>
+ <key>virtual_sink</key>
<param>
<key>id</key>
- <value>pager_slicer_fb_0</value>
+ <value>virtual_sink_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>alpha</key>
- <value>1e-6</value>
+ <key>stream_id</key>
+ <value>baseband</value>
</param>
<param>
<key>_coordinate</key>
- <value>(304, 1186)</value>
+ <value>(1100, 774)</value>
</param>
<param>
<key>_rotation</key>
@@ -1402,11 +1610,11 @@
<key>wxgui_scopesink2</key>
<param>
<key>id</key>
- <value>wxgui_scopesink2_0</value>
+ <value>wxgui_scopesink2_0_0</value>
</param>
<param>
<key>_enabled</key>
- <value>False</value>
+ <value>True</value>
</param>
<param>
<key>type</key>
@@ -1414,11 +1622,11 @@
</param>
<param>
<key>title</key>
- <value>Slicer Output</value>
+ <value>Baseband</value>
</param>
<param>
<key>samp_rate</key>
- <value>baseband_rate</value>
+ <value>16e3</value>
</param>
<param>
<key>v_scale</key>
@@ -1430,7 +1638,7 @@
</param>
<param>
<key>t_scale</key>
- <value>40.0/baseband_rate</value>
+ <value>40.0/16e3</value>
</param>
<param>
<key>ac_couple</key>
@@ -1450,34 +1658,31 @@
</param>
<param>
<key>grid_pos</key>
- <value>1,0,1,1</value>
+ <value>0, 0, 1, 1</value>
</param>
<param>
<key>notebook</key>
<value>displays, 1</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(75, 1044)</value>
+ <key>trig_mode</key>
+ <value>wxgui.TRIG_MODE_AUTO</value>
</param>
<param>
- <key>_rotation</key>
- <value>180</value>
+ <key>y_axis_label</key>
+ <value>Counts</value>
</param>
- </block>
- <block>
- <key>blocks_char_to_float</key>
<param>
- <key>id</key>
- <value>blocks_char_to_float_0</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
- <value>False</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(325, 1088)</value>
+ <value>(851, 586)</value>
</param>
<param>
<key>_rotation</key>
@@ -1485,37 +1690,54 @@
</param>
</block>
<block>
- <key>pager_flex_sync</key>
+ <key>rational_resampler_xxx</key>
<param>
<key>id</key>
- <value>pager_flex_sync_0</value>
+ <value>rational_resampler_xxx_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(529, 1139)</value>
+ <key>type</key>
+ <value>fff</value>
</param>
<param>
- <key>_rotation</key>
+ <key>interp</key>
+ <value>bb_decim</value>
+ </param>
+ <param>
+ <key>decim</key>
+ <value>bb_interp</value>
+ </param>
+ <param>
+ <key>taps</key>
+ <value>[1.0/ma_ntaps,]*ma_ntaps*bb_interp</value>
+ </param>
+ <param>
+ <key>fbw</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>pager_flex_deinterleave</key>
<param>
- <key>id</key>
- <value>pager_flex_deinterleave_0</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(777, 1116)</value>
+ <value>(831, 750)</value>
</param>
<param>
<key>_rotation</key>
@@ -1523,26 +1745,38 @@
</param>
</block>
<block>
- <key>blocks_null_sink</key>
+ <key>analog_quadrature_demod_cf</key>
<param>
<key>id</key>
- <value>blocks_null_sink_0</value>
+ <value>fm_demod</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>int</value>
+ <key>gain</key>
+ <value>demod_k</value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(1042, 1116)</value>
+ <value>(599, 774)</value>
</param>
<param>
<key>_rotation</key>
@@ -1550,67 +1784,109 @@
</param>
</block>
<block>
- <key>pager_flex_deinterleave</key>
+ <key>wxgui_fftsink2</key>
<param>
<key>id</key>
- <value>pager_flex_deinterleave_0_1_0</value>
+ <value>wxgui_fftsink2_1</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(778, 1168)</value>
+ <key>type</key>
+ <value>complex</value>
</param>
<param>
- <key>_rotation</key>
+ <key>title</key>
+ <value>Channel Spectrum</value>
+ </param>
+ <param>
+ <key>samp_rate</key>
+ <value>channel_rate</value>
+ </param>
+ <param>
+ <key>baseband_freq</key>
+ <value>freq</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>0</value>
</param>
- </block>
- <block>
- <key>pager_flex_deinterleave</key>
<param>
- <key>id</key>
- <value>pager_flex_deinterleave_0_1</value>
+ <key>ref_scale</key>
+ <value>65536</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>fft_size</key>
+ <value>1024</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(776, 1225)</value>
+ <key>fft_rate</key>
+ <value>30</value>
</param>
<param>
- <key>_rotation</key>
+ <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>
- </block>
- <block>
- <key>pager_flex_deinterleave</key>
<param>
- <key>id</key>
- <value>pager_flex_deinterleave_0_0</value>
+ <key>win</key>
+ <value>None</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>win_size</key>
+ <value></value>
+ </param>
+ <param>
+ <key>grid_pos</key>
+ <value>1, 0, 1, 1</value>
+ </param>
+ <param>
+ <key>notebook</key>
+ <value>displays, 0</value>
+ </param>
+ <param>
+ <key>freqvar</key>
+ <value>None</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(776, 1273)</value>
+ <value>(344, 511)</value>
</param>
<param>
<key>_rotation</key>
- <value>0</value>
+ <value>180</value>
</param>
</block>
<block>
- <key>blocks_null_sink</key>
+ <key>wxgui_fftsink2</key>
<param>
<key>id</key>
- <value>blocks_null_sink_0_0</value>
+ <value>wxgui_fftsink2_0</value>
</param>
<param>
<key>_enabled</key>
@@ -1618,26 +1894,98 @@
</param>
<param>
<key>type</key>
- <value>int</value>
+ <value>complex</value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>title</key>
+ <value>FLEX Spectrum</value>
+ </param>
+ <param>
+ <key>samp_rate</key>
+ <value>sample_rate</value>
+ </param>
+ <param>
+ <key>baseband_freq</key>
+ <value>band_freq</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>0</value>
+ </param>
+ <param>
+ <key>ref_scale</key>
+ <value>65536</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>
+ <value>0,0,1,1</value>
+ </param>
+ <param>
+ <key>notebook</key>
+ <value>displays,0</value>
+ </param>
+ <param>
+ <key>freqvar</key>
+ <value>None</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(1042, 1168)</value>
+ <value>(34, 508)</value>
</param>
<param>
<key>_rotation</key>
- <value>0</value>
+ <value>180</value>
</param>
</block>
<block>
- <key>blocks_null_sink</key>
+ <key>freq_xlating_fir_filter_xxx</key>
<param>
<key>id</key>
- <value>blocks_null_sink_0_1</value>
+ <value>freq_xlating_fir_filter_xxx_0</value>
</param>
<param>
<key>_enabled</key>
@@ -1645,15 +1993,43 @@
</param>
<param>
<key>type</key>
- <value>int</value>
+ <value>ccc</value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>decim</key>
+ <value>channel_decim</value>
+ </param>
+ <param>
+ <key>taps</key>
+ <value>channel_taps</value>
+ </param>
+ <param>
+ <key>center_freq</key>
+ <value>band_freq-freq+offset</value>
+ </param>
+ <param>
+ <key>samp_rate</key>
+ <value>sample_rate</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(1041, 1225)</value>
+ <value>(339, 741)</value>
</param>
<param>
<key>_rotation</key>
@@ -1661,10 +2037,10 @@
</param>
</block>
<block>
- <key>blocks_null_sink</key>
+ <key>uhd_usrp_source</key>
<param>
<key>id</key>
- <value>blocks_null_sink_0_2</value>
+ <value>uhd_usrp_source_0</value>
</param>
<param>
<key>_enabled</key>
@@ -1672,15 +2048,675 @@
</param>
<param>
<key>type</key>
- <value>int</value>
+ <value>fc32</value>
</param>
<param>
- <key>vlen</key>
+ <key>otw</key>
+ <value>sc16</value>
+ </param>
+ <param>
+ <key>stream_args</key>
+ <value></value>
+ </param>
+ <param>
+ <key>stream_chans</key>
+ <value>[]</value>
+ </param>
+ <param>
+ <key>dev_addr</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>dev_args</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>sync</key>
+ <value></value>
+ </param>
+ <param>
+ <key>clock_rate</key>
+ <value>0.0</value>
+ </param>
+ <param>
+ <key>num_mboards</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>clock_source0</key>
+ <value></value>
+ </param>
+ <param>
+ <key>time_source0</key>
+ <value></value>
+ </param>
+ <param>
+ <key>sd_spec0</key>
+ <value></value>
+ </param>
+ <param>
+ <key>clock_source1</key>
+ <value></value>
+ </param>
+ <param>
+ <key>time_source1</key>
+ <value></value>
+ </param>
+ <param>
+ <key>sd_spec1</key>
+ <value></value>
+ </param>
+ <param>
+ <key>clock_source2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>time_source2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>sd_spec2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>clock_source3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>time_source3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>sd_spec3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>clock_source4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>time_source4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>sd_spec4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>clock_source5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>time_source5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>sd_spec5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>clock_source6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>time_source6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>sd_spec6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>clock_source7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>time_source7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>sd_spec7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>nchan</key>
<value>1</value>
</param>
<param>
+ <key>samp_rate</key>
+ <value>sample_rate</value>
+ </param>
+ <param>
+ <key>center_freq0</key>
+ <value>band_freq</value>
+ </param>
+ <param>
+ <key>gain0</key>
+ <value>rx_gain</value>
+ </param>
+ <param>
+ <key>ant0</key>
+ <value>RX2</value>
+ </param>
+ <param>
+ <key>bw0</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq1</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain1</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant1</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw1</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq2</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain2</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw2</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq3</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain3</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw3</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq4</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain4</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw4</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq5</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain5</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw5</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq6</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain6</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw6</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq7</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain7</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw7</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq8</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain8</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant8</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw8</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq9</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain9</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant9</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw9</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq10</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain10</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant10</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw10</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq11</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain11</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant11</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw11</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq12</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain12</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant12</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw12</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq13</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain13</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant13</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw13</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq14</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain14</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant14</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw14</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq15</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain15</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant15</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw15</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq16</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain16</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant16</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw16</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq17</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain17</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant17</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw17</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq18</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain18</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant18</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw18</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq19</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain19</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant19</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw19</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq20</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain20</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant20</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw20</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq21</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain21</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant21</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw21</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq22</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain22</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant22</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw22</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq23</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain23</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant23</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw23</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq24</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain24</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant24</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw24</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq25</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain25</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant25</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw25</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq26</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain26</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant26</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw26</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq27</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain27</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant27</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw27</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq28</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain28</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant28</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw28</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq29</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain29</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant29</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw29</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq30</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain30</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant30</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw30</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq31</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain31</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant31</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw31</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(1040, 1273)</value>
+ <value>(20, 735)</value>
</param>
<param>
<key>_rotation</key>
@@ -1688,48 +2724,6 @@
</param>
</block>
<connection>
- <source_block_id>filter_freq_xlating_fir_filter_xxx_0</source_block_id>
- <sink_block_id>wxgui_fftsink2_1</sink_block_id>
- <source_key>0</source_key>
- <sink_key>0</sink_key>
- </connection>
- <connection>
- <source_block_id>usrp_source</source_block_id>
- <sink_block_id>filter_freq_xlating_fir_filter_xxx_0</sink_block_id>
- <source_key>0</source_key>
- <sink_key>0</sink_key>
- </connection>
- <connection>
- <source_block_id>usrp_source</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>filter_freq_xlating_fir_filter_xxx_0</source_block_id>
- <sink_block_id>fm_demod</sink_block_id>
- <source_key>0</source_key>
- <sink_key>0</sink_key>
- </connection>
- <connection>
- <source_block_id>resampler</source_block_id>
- <sink_block_id>wxgui_scopesink2_0_0</sink_block_id>
- <source_key>0</source_key>
- <sink_key>0</sink_key>
- </connection>
- <connection>
- <source_block_id>fm_demod</source_block_id>
- <sink_block_id>resampler</sink_block_id>
- <source_key>0</source_key>
- <sink_key>0</sink_key>
- </connection>
- <connection>
- <source_block_id>resampler</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>pager_slicer_fb_0</source_block_id>
<sink_block_id>pager_flex_sync_0</sink_block_id>
<source_key>0</source_key>
@@ -1801,4 +2795,46 @@
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
+ <connection>
+ <source_block_id>fm_demod</source_block_id>
+ <sink_block_id>rational_resampler_xxx_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>rational_resampler_xxx_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>rational_resampler_xxx_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>freq_xlating_fir_filter_xxx_0</source_block_id>
+ <sink_block_id>fm_demod</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>freq_xlating_fir_filter_xxx_0</source_block_id>
+ <sink_block_id>wxgui_fftsink2_1</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>uhd_usrp_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>uhd_usrp_source_0</source_block_id>
+ <sink_block_id>freq_xlating_fir_filter_xxx_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
</flow_graph>
diff --git a/gr-pager/lib/CMakeLists.txt b/gr-pager/lib/CMakeLists.txt
index f59d770be7..ddecf916d3 100644
--- a/gr-pager/lib/CMakeLists.txt
+++ b/gr-pager/lib/CMakeLists.txt
@@ -76,6 +76,18 @@ target_link_libraries(gnuradio-pager ${pager_libs})
GR_LIBRARY_FOO(gnuradio-pager RUNTIME_COMPONENT "pager_runtime" DEVEL_COMPONENT "pager_devel")
if(ENABLE_STATIC_LIBS)
+ if(ENABLE_GR_CTRLPORT)
+ # Remove GR_CTRLPORT set this target's definitions.
+ # Makes sure we don't try to use ControlPort stuff in source files
+ # since Ice will not work with static libs.
+ GET_DIRECTORY_PROPERTY(STATIC_DEFS COMPILE_DEFINITIONS)
+ list(REMOVE_ITEM STATIC_DEFS "GR_CTRLPORT")
+ SET_PROPERTY(DIRECTORY PROPERTY COMPILE_DEFINITIONS "${STATIC_DEFS}")
+
+ # readd it to the target since we removed it from the directory-wide list.
+ SET_PROPERTY(TARGET gnuradio-pager APPEND PROPERTY COMPILE_DEFINITIONS "GR_CTRLPORT")
+ endif(ENABLE_GR_CTRLPORT)
+
add_library(gnuradio-pager_static STATIC ${pager_sources})
if(NOT WIN32)
diff --git a/gr-qtgui/grc/qtgui_const_sink_x.xml b/gr-qtgui/grc/qtgui_const_sink_x.xml
index 0062bcaba8..a6fb2af840 100644
--- a/gr-qtgui/grc/qtgui_const_sink_x.xml
+++ b/gr-qtgui/grc/qtgui_const_sink_x.xml
@@ -21,6 +21,7 @@ self.$(id).set_y_axis($ymin, $ymax)
self.$(id).set_x_axis($xmin, $xmax)
self.$(id).set_trigger_mode($tr_mode, $tr_slope, $tr_level, $tr_chan, $tr_tag)
self.$(id).enable_autoscale($autoscale)
+self.$(id).enable_grid($grid)
labels = [$label1, $label2, $label3, $label4, $label5,
$label6, $label7, $label8, $label9, $label10]
@@ -83,6 +84,22 @@ $(gui_hint()($win))</make>
</param>
<param>
+ <name>Grid</name>
+ <key>grid</key>
+ <value>False</value>
+ <type>enum</type>
+ <hide>part</hide>
+ <option>
+ <name>Yes</name>
+ <key>True</key>
+ </option>
+ <option>
+ <name>No</name>
+ <key>False</key>
+ </option>
+ </param>
+
+ <param>
<name>Autoscale</name>
<key>autoscale</key>
<value>False</value>
diff --git a/gr-qtgui/grc/qtgui_freq_sink_x.xml b/gr-qtgui/grc/qtgui_freq_sink_x.xml
index beed7fa921..94989f5c68 100644
--- a/gr-qtgui/grc/qtgui_freq_sink_x.xml
+++ b/gr-qtgui/grc/qtgui_freq_sink_x.xml
@@ -23,6 +23,7 @@ qtgui.$(type.fcn)(
self.$(id).set_update_time($update_time)
self.$(id).set_y_axis($ymin, $ymax)
self.$(id).enable_autoscale($autoscale)
+self.$(id).enable_grid($grid)
self.$(id).set_fft_average($average)
labels = [$label1, $label2, $label3, $label4, $label5,
@@ -72,59 +73,77 @@ $(gui_hint()($win))</make>
<hide>#if len($name()) > 0 then 'none' else 'part'#</hide>
</param>
- <param>
- <name>FFT Size</name>
- <key>fftsize</key>
- <value>1024</value>
- <type>int</type>
- </param>
- <param>
- <name>Window Type</name>
- <key>wintype</key>
- <value>firdes.WIN_BLACKMAN_hARRIS</value>
- <type>enum</type>
- <hide>part</hide>
- <option>
- <name>Blackman-harris</name>
- <key>firdes.WIN_BLACKMAN_hARRIS</key>
- </option>
- <option>
- <name>Hamming</name>
- <key>firdes.WIN_HAMMING</key>
- </option>
- <option>
- <name>Hann</name>
- <key>firdes.WIN_HANN</key>
- </option>
- <option>
- <name>Blackman</name>
- <key>firdes.WIN_BLACKMAN</key>
- </option>
- <option>
- <name>Rectangular</name>
- <key>firdes.WIN_RECTANGULAR</key>
- </option>
- <option>
- <name>Kaiser</name>
- <key>firdes.WIN_KAISER</key>
- </option>
- <option>
- <name>Flat-top</name>
- <key>firdes.WIN_FLATTOP</key>
- </option>
- </param>
- <param>
- <name>Center Frequency (Hz)</name>
- <key>fc</key>
- <value>0</value>
- <type>real</type>
- </param>
- <param>
- <name>Bandwidth (Hz)</name>
- <key>bw</key>
- <value>samp_rate</value>
- <type>real</type>
- </param>
+ <param>
+ <name>FFT Size</name>
+ <key>fftsize</key>
+ <value>1024</value>
+ <type>int</type>
+ </param>
+
+ <param>
+ <name>Window Type</name>
+ <key>wintype</key>
+ <value>firdes.WIN_BLACKMAN_hARRIS</value>
+ <type>enum</type>
+ <hide>part</hide>
+ <option>
+ <name>Blackman-harris</name>
+ <key>firdes.WIN_BLACKMAN_hARRIS</key>
+ </option>
+ <option>
+ <name>Hamming</name>
+ <key>firdes.WIN_HAMMING</key>
+ </option>
+ <option>
+ <name>Hann</name>
+ <key>firdes.WIN_HANN</key>
+ </option>
+ <option>
+ <name>Blackman</name>
+ <key>firdes.WIN_BLACKMAN</key>
+ </option>
+ <option>
+ <name>Rectangular</name>
+ <key>firdes.WIN_RECTANGULAR</key>
+ </option>
+ <option>
+ <name>Kaiser</name>
+ <key>firdes.WIN_KAISER</key>
+ </option>
+ <option>
+ <name>Flat-top</name>
+ <key>firdes.WIN_FLATTOP</key>
+ </option>
+ </param>
+
+ <param>
+ <name>Center Frequency (Hz)</name>
+ <key>fc</key>
+ <value>0</value>
+ <type>real</type>
+ </param>
+ <param>
+ <name>Bandwidth (Hz)</name>
+ <key>bw</key>
+ <value>samp_rate</value>
+ <type>real</type>
+ </param>
+
+ <param>
+ <name>Grid</name>
+ <key>grid</key>
+ <value>False</value>
+ <type>enum</type>
+ <hide>part</hide>
+ <option>
+ <name>Yes</name>
+ <key>True</key>
+ </option>
+ <option>
+ <name>No</name>
+ <key>False</key>
+ </option>
+ </param>
<param>
<name>Autoscale</name>
@@ -202,6 +221,21 @@ $(gui_hint()($win))</make>
<hide>part</hide>
</param>
+ <param>
+ <name>Show Msg Ports</name>
+ <key>showports</key>
+ <value>True</value>
+ <type>enum</type>
+ <hide>part</hide>
+ <option>
+ <name>Yes</name>
+ <key>False</key>
+ </option>
+ <option>
+ <name>No</name>
+ <key>True</key>
+ </option>
+ </param>
<param>
<name>Line 1 Label</name>
@@ -558,12 +592,14 @@ $(gui_hint()($win))</make>
<name>freq</name>
<type>message</type>
<optional>1</optional>
+ <hide>$showports</hide>
</sink>
<source>
<name>freq</name>
<type>message</type>
<optional>1</optional>
+ <hide>$showports</hide>
</source>
<doc>
diff --git a/gr-qtgui/grc/qtgui_histogram_sink_x.xml b/gr-qtgui/grc/qtgui_histogram_sink_x.xml
index a7137ac6a1..7165fb8421 100644
--- a/gr-qtgui/grc/qtgui_histogram_sink_x.xml
+++ b/gr-qtgui/grc/qtgui_histogram_sink_x.xml
@@ -5,12 +5,12 @@
###################################################
-->
<block>
- <name>QT GUI Histogram Sink</name>
- <key>qtgui_histogram_sink_x</key>
- <import>from PyQt4 import Qt</import>
- <import>from gnuradio import qtgui</import>
- <import>import sip</import>
- <make>#set $win = 'self._%s_win'%$id
+ <name>QT GUI Histogram Sink</name>
+ <key>qtgui_histogram_sink_x</key>
+ <import>from PyQt4 import Qt</import>
+ <import>from gnuradio import qtgui</import>
+ <import>import sip</import>
+ <make>#set $win = 'self._%s_win'%$id
qtgui.histogram_sink_f(
$size,
$bins,
@@ -23,6 +23,7 @@ qtgui.histogram_sink_f(
self.$(id).set_update_time($update_time)
self.$(id).enable_autoscale($autoscale)
self.$(id).enable_accumulate($accum)
+self.$(id).enable_grid($grid)
labels = [$label1, $label2, $label3, $label4, $label5,
$label6, $label7, $label8, $label9, $label10]
@@ -48,104 +49,125 @@ for i in xrange($nconnections):
self.$(id).set_line_alpha(i, alphas[i])
self._$(id)_win = sip.wrapinstance(self.$(id).pyqwidget(), Qt.QWidget)
-$(gui_hint()($win))</make>
- <callback>set_update_time($update_time)</callback>
- <callback>set_title($which, $title)</callback>
- <callback>set_color($which, $color)</callback>
- <callback>set_bins($bins)</callback>
- <callback>set_bins($bins)</callback>
- <callback>set_x_axis($xmin, $xmax)</callback>
-
- <param_tab_order>
- <tab>General</tab>
- <tab>Config</tab>
- </param_tab_order>
-
- <param>
- <name>Name</name>
- <key>name</key>
- <value>""</value>
- <type>string</type>
- <hide>#if len($name()) > 0 then 'none' else 'part'#</hide>
- </param>
-
- <param>
- <name>Number of Points</name>
- <key>size</key>
- <value>1024</value>
- <type>int</type>
- </param>
- <param>
- <name>Number of Bins</name>
- <key>bins</key>
- <value>100</value>
- <type>int</type>
- </param>
-
- <param>
- <name>Autoscale</name>
- <key>autoscale</key>
- <value>True</value>
- <type>enum</type>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- </param>
-
- <param>
- <name>Accumulate</name>
- <key>accum</key>
- <value>False</value>
- <type>enum</type>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- </param>
-
- <param>
- <name>Min x-axis</name>
- <key>xmin</key>
- <value>-1</value>
- <type>real</type>
- </param>
- <param>
- <name>Max x-axis</name>
- <key>xmax</key>
- <value>1</value>
- <type>real</type>
- </param>
- <param>
- <name>Number of Inputs</name>
- <key>nconnections</key>
- <value>1</value>
- <type>int</type>
- <hide>part</hide>
- </param>
- <param>
- <name>Update Period</name>
- <key>update_time</key>
- <value>0.10</value>
- <type>float</type>
- <hide>part</hide>
- </param>
- <param>
- <name>GUI Hint</name>
- <key>gui_hint</key>
- <value></value>
- <type>gui_hint</type>
- <hide>part</hide>
- </param>
+$(gui_hint()($win))
+ </make>
+ <callback>set_update_time($update_time)</callback>
+ <callback>set_title($which, $title)</callback>
+ <callback>set_color($which, $color)</callback>
+ <callback>set_bins($bins)</callback>
+ <callback>set_bins($bins)</callback>
+ <callback>set_x_axis($xmin, $xmax)</callback>
+
+ <param_tab_order>
+ <tab>General</tab>
+ <tab>Config</tab>
+ </param_tab_order>
+
+ <param>
+ <name>Name</name>
+ <key>name</key>
+ <value>""</value>
+ <type>string</type>
+ <hide>#if len($name()) > 0 then 'none' else 'part'#</hide>
+ </param>
+
+ <param>
+ <name>Number of Points</name>
+ <key>size</key>
+ <value>1024</value>
+ <type>int</type>
+ </param>
+
+ <param>
+ <name>Number of Bins</name>
+ <key>bins</key>
+ <value>100</value>
+ <type>int</type>
+ </param>
+
+ <param>
+ <name>Grid</name>
+ <key>grid</key>
+ <value>False</value>
+ <type>enum</type>
+ <hide>part</hide>
+ <option>
+ <name>Yes</name>
+ <key>True</key>
+ </option>
+ <option>
+ <name>No</name>
+ <key>False</key>
+ </option>
+ </param>
+ <param>
+ <name>Autoscale</name>
+ <key>autoscale</key>
+ <value>True</value>
+ <type>enum</type>
+ <option>
+ <name>Yes</name>
+ <key>True</key>
+ </option>
+ <option>
+ <name>No</name>
+ <key>False</key>
+ </option>
+ </param>
+
+ <param>
+ <name>Accumulate</name>
+ <key>accum</key>
+ <value>False</value>
+ <type>enum</type>
+ <option>
+ <name>Yes</name>
+ <key>True</key>
+ </option>
+ <option>
+ <name>No</name>
+ <key>False</key>
+ </option>
+ </param>
+
+ <param>
+ <name>Min x-axis</name>
+ <key>xmin</key>
+ <value>-1</value>
+ <type>real</type>
+ </param>
+
+ <param>
+ <name>Max x-axis</name>
+ <key>xmax</key>
+ <value>1</value>
+ <type>real</type>
+ </param>
+
+ <param>
+ <name>Number of Inputs</name>
+ <key>nconnections</key>
+ <value>1</value>
+ <type>int</type>
+ <hide>part</hide>
+ </param>
+
+ <param>
+ <name>Update Period</name>
+ <key>update_time</key>
+ <value>0.10</value>
+ <type>float</type>
+ <hide>part</hide>
+ </param>
+
+ <param>
+ <name>GUI Hint</name>
+ <key>gui_hint</key>
+ <value></value>
+ <type>gui_hint</type>
+ <hide>part</hide>
+ </param>
<param>
<name>Line 1 Label</name>
diff --git a/gr-qtgui/grc/qtgui_label.xml b/gr-qtgui/grc/qtgui_label.xml
index 40cf3859a3..0d844a1ab4 100644
--- a/gr-qtgui/grc/qtgui_label.xml
+++ b/gr-qtgui/grc/qtgui_label.xml
@@ -5,61 +5,83 @@
## a gui static text form
###################################################
-->
+
<block>
- <name>QT GUI Label</name>
- <key>variable_qtgui_label</key>
- <import>from PyQt4 import Qt</import>
- <import>from gnuradio import eng_notation</import>
- <var_make>self.$(id) = $(id) = $value</var_make>
- <make>#set $win = 'self._%s_tool_bar'%$id
+ <name>QT GUI Label</name>
+ <key>variable_qtgui_label</key>
+ <import>from PyQt4 import Qt</import>
+ <import>from gnuradio import eng_notation</import>
+ <var_make>self.$(id) = $(id) = $value</var_make>
+ <make>#set $win = 'self._%s_tool_bar'%$id
$win = Qt.QToolBar(self)
#if not $label()
#set $label = '"%s"'%$id
#end if
+
+if $(formatter):
+ self._$(id)_formatter = $formatter
+else:
+ self._$(id)_formatter = lambda x: x
+
$(win).addWidget(Qt.QLabel($label+": "))
-self._$(id)_label = Qt.QLabel(str(self.$id))
+self._$(id)_label = Qt.QLabel(str(self._$(id)_formatter(self.$id)))
self._$(id)_tool_bar.addWidget(self._$(id)_label)
-$(gui_hint()($win))</make>
- <callback>self.set_$(id)($value)</callback>
- <callback>Qt.QMetaObject.invokeMethod(self._$(id)_label, "setText", Qt.Q_ARG("QString", $(type.str)($id)))</callback>
- <param>
- <name>Label</name>
- <key>label</key>
- <value></value>
- <type>string</type>
- <hide>#if $label() then 'none' else 'part'#</hide>
- </param>
- <param>
- <name>Type</name>
- <key>type</key>
- <value>int</value>
- <type>enum</type>
- <hide>part</hide>
- <option><name>Float</name><key>real</key><opt>conv:eng_notation.str_to_num</opt><opt>str:eng_notation.num_to_str</opt></option>
- <option><name>Integer</name><key>int</key><opt>conv:int</opt><opt>str:str</opt></option>
- <option><name>String</name><key>string</key><opt>conv:str</opt><opt>str:str</opt></option>
- <option><name>Boolean</name><key>bool</key><opt>conv:bool</opt><opt>str:str</opt></option>
- <option><name>Any</name><key>raw</key><opt>conv:eval</opt><opt>str:repr</opt></option>
- </param>
- <param>
- <name>Default Value</name>
- <key>value</key>
- <value>0</value>
- <type>$type</type>
- </param>
- <param>
- <name>GUI Hint</name>
- <key>gui_hint</key>
- <value></value>
- <type>gui_hint</type>
- <hide>part</hide>
- </param>
- <doc>
+$(gui_hint()($win))
+ </make>
+
+ <callback>self.set_$(id)(self._$(id)_formatter($value))</callback>
+ <callback>Qt.QMetaObject.invokeMethod(self._$(id)_label, "setText", Qt.Q_ARG("QString", $(type.str)($id)))</callback>
+
+ <param>
+ <name>Label</name>
+ <key>label</key>
+ <value></value>
+ <type>string</type>
+ <hide>#if $label() then 'none' else 'part'#</hide>
+ </param>
+
+ <param>
+ <name>Type</name>
+ <key>type</key>
+ <value>int</value>
+ <type>enum</type>
+ <hide>part</hide>
+ <option><name>Float</name><key>real</key><opt>conv:eng_notation.str_to_num</opt><opt>str:eng_notation.num_to_str</opt></option>
+ <option><name>Integer</name><key>int</key><opt>conv:int</opt><opt>str:str</opt></option>
+ <option><name>String</name><key>string</key><opt>conv:str</opt><opt>str:str</opt></option>
+ <option><name>Boolean</name><key>bool</key><opt>conv:bool</opt><opt>str:str</opt></option>
+ <option><name>Any</name><key>raw</key><opt>conv:eval</opt><opt>str:repr</opt></option>
+ </param>
+
+ <param>
+ <name>Default Value</name>
+ <key>value</key>
+ <value>0</value>
+ <type>$type</type>
+ </param>
+
+ <param>
+ <name>Formatter</name>
+ <key>formatter</key>
+ <value>None</value>
+ <type>raw</type>
+ <hide>part</hide>
+ </param>
+
+ <param>
+ <name>GUI Hint</name>
+ <key>gui_hint</key>
+ <value></value>
+ <type>gui_hint</type>
+ <hide>part</hide>
+ </param>
+
+ <doc>
This block creates a variable with a label widget for text. \
Leave the label blank to use the variable id as the label.
The GUI hint can be used to position the widget within the application. \
The hint is of the form [tab_id@tab_index]: [row, col, row_span, col_span]. \
Both the tab specification and the grid position are optional.
- </doc>
+ </doc>
</block>
diff --git a/gr-qtgui/grc/qtgui_number_sink.xml b/gr-qtgui/grc/qtgui_number_sink.xml
index af74bca0bf..e7b232e36f 100644
--- a/gr-qtgui/grc/qtgui_number_sink.xml
+++ b/gr-qtgui/grc/qtgui_number_sink.xml
@@ -18,11 +18,16 @@ qtgui.number_sink(
$nconnections
)
self.$(id).set_update_time($update_time)
+self.$(id).set_title($name)
labels = [$label1, $label2, $label3, $label4, $label5,
$label6, $label7, $label8, $label9, $label10]
+units = [$unit1, $unit2, $unit3, $unit4, $unit5,
+ $unit6, $unit7, $unit8, $unit9, $unit10]
colors = [$color1, $color2, $color3, $color4, $color5,
$color6, $color7, $color8, $color9, $color10]
+factor = [$factor1, $factor2, $factor3, $factor4, $factor5,
+ $factor6, $factor7, $factor8, $factor9, $factor10]
for i in xrange($nconnections):
self.$(id).set_min(i, $min)
self.$(id).set_max(i, $max)
@@ -31,6 +36,8 @@ for i in xrange($nconnections):
self.$(id).set_label(i, "Data {0}".format(i))
else:
self.$(id).set_label(i, labels[i])
+ self.$(id).set_unit(i, units[i])
+ self.$(id).set_factor(i, factor[i])
self.$(id).enable_autoscale($autoscale)
self._$(id)_win = sip.wrapinstance(self.$(id).pyqwidget(), Qt.QWidget)
@@ -43,6 +50,14 @@ $(gui_hint()($win))</make>
</param_tab_order>
<param>
+ <name>Name</name>
+ <key>name</key>
+ <value>""</value>
+ <type>string</type>
+ <hide>#if len($name()) > 0 then 'none' else 'part'#</hide>
+ </param>
+
+ <param>
<name>Input Type</name>
<key>type</key>
<type>enum</type>
@@ -162,6 +177,14 @@ $(gui_hint()($win))</make>
</param>
<param>
+ <name>Line 1 Unit</name>
+ <key>unit1</key>
+ <type>string</type>
+ <hide>#if int($nconnections()) >= 1 then 'part' else 'all'#</hide>
+ <tab>Config</tab>
+ </param>
+
+ <param>
<name>Line 1 Color</name>
<key>color1</key>
<type>enum</type>
@@ -189,6 +212,15 @@ $(gui_hint()($win))</make>
<tab>Config</tab>
</param>
+ <param>
+ <name>Line 1 Factor</name>
+ <key>factor1</key>
+ <value>1</value>
+ <type>float</type>
+ <hide>#if int($nconnections()) >= 1 then 'part' else 'all'#</hide>
+ <tab>Config</tab>
+ </param>
+
<param>
<base_key>label1</base_key>
@@ -198,12 +230,26 @@ $(gui_hint()($win))</make>
</param>
<param>
+ <base_key>unit1</base_key>
+ <name>Line 2 Unit</name>
+ <key>unit2</key>
+ <hide>#if int($nconnections()) >= 2 then 'part' else 'all'#</hide>
+ </param>
+
+ <param>
<base_key>color1</base_key>
<name>Line 2 Color</name>
<key>color2</key>
<hide>#if int($nconnections()) >= 2 then 'part' else 'all'#</hide>
</param>
+ <param>
+ <base_key>factor1</base_key>
+ <name>Line 2 Factor</name>
+ <key>factor2</key>
+ <hide>#if int($nconnections()) >= 2 then 'part' else 'all'#</hide>
+ </param>
+
<param>
<base_key>label1</base_key>
@@ -213,12 +259,26 @@ $(gui_hint()($win))</make>
</param>
<param>
+ <base_key>unit1</base_key>
+ <name>Line 3 Unit</name>
+ <key>unit3</key>
+ <hide>#if int($nconnections()) >= 3 then 'part' else 'all'#</hide>
+ </param>
+
+ <param>
<base_key>color1</base_key>
<name>Line 3 Color</name>
<key>color3</key>
<hide>#if int($nconnections()) >= 3 then 'part' else 'all'#</hide>
</param>
+ <param>
+ <base_key>factor1</base_key>
+ <name>Line 3 Factor</name>
+ <key>factor3</key>
+ <hide>#if int($nconnections()) >= 3 then 'part' else 'all'#</hide>
+ </param>
+
<param>
<base_key>label1</base_key>
@@ -228,12 +288,26 @@ $(gui_hint()($win))</make>
</param>
<param>
+ <base_key>unit1</base_key>
+ <name>Line 4 Unit</name>
+ <key>unit4</key>
+ <hide>#if int($nconnections()) >= 4 then 'part' else 'all'#</hide>
+ </param>
+
+ <param>
<base_key>color1</base_key>
<name>Line 4 Color</name>
<key>color4</key>
<hide>#if int($nconnections()) >= 4 then 'part' else 'all'#</hide>
</param>
+ <param>
+ <base_key>factor1</base_key>
+ <name>Line 4 Factor</name>
+ <key>factor4</key>
+ <hide>#if int($nconnections()) >= 4 then 'part' else 'all'#</hide>
+ </param>
+
<param>
<base_key>label1</base_key>
@@ -243,12 +317,26 @@ $(gui_hint()($win))</make>
</param>
<param>
+ <base_key>unit1</base_key>
+ <name>Line 5 Unit</name>
+ <key>unit5</key>
+ <hide>#if int($nconnections()) >= 5 then 'part' else 'all'#</hide>
+ </param>
+
+ <param>
<base_key>color1</base_key>
<name>Line 5 Color</name>
<key>color5</key>
<hide>#if int($nconnections()) >= 5 then 'part' else 'all'#</hide>
</param>
+ <param>
+ <base_key>factor1</base_key>
+ <name>Line 5 Factor</name>
+ <key>factor5</key>
+ <hide>#if int($nconnections()) >= 5 then 'part' else 'all'#</hide>
+ </param>
+
<param>
<base_key>label1</base_key>
@@ -258,12 +346,26 @@ $(gui_hint()($win))</make>
</param>
<param>
+ <base_key>unit1</base_key>
+ <name>Line 6 Unit</name>
+ <key>unit6</key>
+ <hide>#if int($nconnections()) >= 6 then 'part' else 'all'#</hide>
+ </param>
+
+ <param>
<base_key>color1</base_key>
<name>Line 6 Color</name>
<key>color6</key>
<hide>#if int($nconnections()) >= 6 then 'part' else 'all'#</hide>
</param>
+ <param>
+ <base_key>factor1</base_key>
+ <name>Line 6 Factor</name>
+ <key>factor6</key>
+ <hide>#if int($nconnections()) >= 6 then 'part' else 'all'#</hide>
+ </param>
+
<param>
<base_key>label1</base_key>
@@ -273,12 +375,26 @@ $(gui_hint()($win))</make>
</param>
<param>
+ <base_key>unit1</base_key>
+ <name>Line 7 Unit</name>
+ <key>unit7</key>
+ <hide>#if int($nconnections()) >= 7 then 'part' else 'all'#</hide>
+ </param>
+
+ <param>
<base_key>color1</base_key>
<name>Line 7 Color</name>
<key>color7</key>
<hide>#if int($nconnections()) >= 7 then 'part' else 'all'#</hide>
</param>
+ <param>
+ <base_key>factor1</base_key>
+ <name>Line 7 Factor</name>
+ <key>factor7</key>
+ <hide>#if int($nconnections()) >= 7 then 'part' else 'all'#</hide>
+ </param>
+
<param>
<base_key>label1</base_key>
@@ -288,12 +404,26 @@ $(gui_hint()($win))</make>
</param>
<param>
+ <base_key>unit1</base_key>
+ <name>Line 8 Unit</name>
+ <key>unit8</key>
+ <hide>#if int($nconnections()) >= 8 then 'part' else 'all'#</hide>
+ </param>
+
+ <param>
<base_key>color1</base_key>
<name>Line 8 Color</name>
<key>color8</key>
<hide>#if int($nconnections()) >= 8 then 'part' else 'all'#</hide>
</param>
+ <param>
+ <base_key>factor1</base_key>
+ <name>Line 8 Factor</name>
+ <key>factor8</key>
+ <hide>#if int($nconnections()) >= 8 then 'part' else 'all'#</hide>
+ </param>
+
<param>
<base_key>label1</base_key>
@@ -303,12 +433,26 @@ $(gui_hint()($win))</make>
</param>
<param>
+ <base_key>unit1</base_key>
+ <name>Line 9 Unit</name>
+ <key>unit9</key>
+ <hide>#if int($nconnections()) >= 9 then 'part' else 'all'#</hide>
+ </param>
+
+ <param>
<base_key>color1</base_key>
<name>Line 9 Color</name>
<key>color9</key>
<hide>#if int($nconnections()) >= 9 then 'part' else 'all'#</hide>
</param>
+ <param>
+ <base_key>factor1</base_key>
+ <name>Line 9 Factor</name>
+ <key>factor9</key>
+ <hide>#if int($nconnections()) >= 9 then 'part' else 'all'#</hide>
+ </param>
+
<param>
<base_key>label1</base_key>
@@ -318,12 +462,26 @@ $(gui_hint()($win))</make>
</param>
<param>
+ <base_key>unit1</base_key>
+ <name>Line 10 Unit</name>
+ <key>unit10</key>
+ <hide>#if int($nconnections()) >= 10 then 'part' else 'all'#</hide>
+ </param>
+
+ <param>
<base_key>color1</base_key>
<name>Line 10 Color</name>
<key>color10</key>
<hide>#if int($nconnections()) >= 10 then 'part' else 'all'#</hide>
</param>
+ <param>
+ <base_key>factor1</base_key>
+ <name>Line 10 Factor</name>
+ <key>factor10</key>
+ <hide>#if int($nconnections()) >= 10 then 'part' else 'all'#</hide>
+ </param>
+
<sink>
<name>in</name>
diff --git a/gr-qtgui/grc/qtgui_sink_x.xml b/gr-qtgui/grc/qtgui_sink_x.xml
index 618973ed59..7488ea59d8 100644
--- a/gr-qtgui/grc/qtgui_sink_x.xml
+++ b/gr-qtgui/grc/qtgui_sink_x.xml
@@ -5,13 +5,13 @@
###################################################
-->
<block>
- <name>QT GUI Sink</name>
- <key>qtgui_sink_x</key>
- <import>from PyQt4 import Qt</import>
- <import>from gnuradio import qtgui</import>
- <import>from gnuradio.filter import firdes</import>
- <import>import sip</import>
- <make>#set $win = 'self._%s_win'%$id
+ <name>QT GUI Sink</name>
+ <key>qtgui_sink_x</key>
+ <import>from PyQt4 import Qt</import>
+ <import>from gnuradio import qtgui</import>
+ <import>from gnuradio.filter import firdes</import>
+ <import>import sip</import>
+ <make>#set $win = 'self._%s_win'%$id
qtgui.$(type.fcn)(
$fftsize, \#fftsize
$wintype, \#wintype
@@ -36,162 +36,192 @@ def $(id)_callback(p, num):
Qt.QObject.connect(self._$(id)_win, Qt.SIGNAL("plotPointSelected(QPointF, int)"), $(id)_callback )
#end if
-</make>
- <callback>set_frequency_range($fc, $bw)</callback>
- <param>
- <name>Type</name>
- <key>type</key>
- <value>complex</value>
- <type>enum</type>
- <option><name>Complex</name><key>complex</key><opt>fcn:sink_c</opt></option>
- <option><name>Float</name><key>float</key><opt>fcn:sink_f</opt></option>
- </param>
- <param>
- <name>Name</name>
- <key>name</key>
- <value>""</value>
- <type>string</type>
- <hide>#if len($name()) > 0 then 'none' else 'part'#</hide>
- </param>
- <param>
- <name>FFT Size</name>
- <key>fftsize</key>
- <value>1024</value>
- <type>int</type>
- </param>
- <param>
- <name>Window Type</name>
- <key>wintype</key>
- <value>firdes.WIN_BLACKMAN_hARRIS</value>
- <type>int</type>
- <hide>part</hide>
- <option>
- <name>Blackman-harris</name>
- <key>firdes.WIN_BLACKMAN_hARRIS</key>
- </option>
- <option>
- <name>Hamming</name>
- <key>firdes.WIN_HAMMING</key>
- </option>
- <option>
- <name>Hann</name>
- <key>firdes.WIN_HANN</key>
- </option>
- <option>
- <name>Blackman</name>
- <key>firdes.WIN_BLACKMAN</key>
- </option>
- <option>
- <name>Rectangular</name>
- <key>firdes.WIN_RECTANGULAR</key>
- </option>
- <option>
- <name>Kaiser</name>
- <key>firdes.WIN_KAISER</key>
- </option>
- </param>
- <param>
- <name>Center Frequency (Hz)</name>
- <key>fc</key>
- <value>0</value>
- <type>real</type>
- </param>
- <param>
- <name>Bandwidth (Hz)</name>
- <key>bw</key>
- <value>samp_rate</value>
- <type>real</type>
- </param>
- <param>
- <name>Update Rate</name>
- <key>rate</key>
- <value>10</value>
- <type>real</type>
- </param>
-
- <param>
- <name>Show RF Freq</name>
- <key>showrf</key>
- <value>False</value>
- <type>enum</type>
- <hide>part</hide>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- </param>
-
- <param>
- <name>Plot Frequency</name>
- <key>plotfreq</key>
- <value>True</value>
- <type>bool</type>
- <hide>part</hide>
- <option><name>On</name><key>True</key></option>
- <option><name>Off</name><key>False</key></option>
- </param>
- <param>
- <name>Plot Waterfall</name>
- <key>plotwaterfall</key>
- <value>True</value>
- <type>bool</type>
- <hide>part</hide>
- <option><name>On</name><key>True</key></option>
- <option><name>Off</name><key>False</key></option>
- </param>
- <param>
- <name>Plot Time</name>
- <key>plottime</key>
- <value>True</value>
- <type>bool</type>
- <hide>part</hide>
- <option><name>On</name><key>True</key></option>
- <option><name>Off</name><key>False</key></option>
- </param>
- <param>
- <name>Plot Const</name>
- <key>plotconst</key>
- <value>True</value>
- <type>bool</type>
- <hide>part</hide>
- <option><name>On</name><key>True</key></option>
- <option><name>Off</name><key>False</key></option>
- </param>
- <param>
- <name>GUI Hint</name>
- <key>gui_hint</key>
- <value></value>
- <type>gui_hint</type>
- <hide>part</hide>
- </param>
- <param>
- <name>Clicked freq variable</name>
- <key>freqchangevar</key>
- <value>None</value>
- <type>raw</type>
- <hide>part</hide>
- </param>
-
- <sink>
- <name>in</name>
- <type>$type</type>
- <nports>$num_inputs</nports>
- </sink>
+ </make>
+ <callback>set_frequency_range($fc, $bw)</callback>
+
+ <param>
+ <name>Type</name>
+ <key>type</key>
+ <value>complex</value>
+ <type>enum</type>
+ <option><name>Complex</name><key>complex</key><opt>fcn:sink_c</opt></option>
+ <option><name>Float</name><key>float</key><opt>fcn:sink_f</opt></option>
+ </param>
+
+ <param>
+ <name>Name</name>
+ <key>name</key>
+ <value>""</value>
+ <type>string</type>
+ <hide>#if len($name()) > 0 then 'none' else 'part'#</hide>
+ </param>
+
+ <param>
+ <name>FFT Size</name>
+ <key>fftsize</key>
+ <value>1024</value>
+ <type>int</type>
+ </param>
+
+ <param>
+ <name>Window Type</name>
+ <key>wintype</key>
+ <value>firdes.WIN_BLACKMAN_hARRIS</value>
+ <type>int</type>
+ <hide>part</hide>
+ <option>
+ <name>Blackman-harris</name>
+ <key>firdes.WIN_BLACKMAN_hARRIS</key>
+ </option>
+ <option>
+ <name>Hamming</name>
+ <key>firdes.WIN_HAMMING</key>
+ </option>
+ <option>
+ <name>Hann</name>
+ <key>firdes.WIN_HANN</key>
+ </option>
+ <option>
+ <name>Blackman</name>
+ <key>firdes.WIN_BLACKMAN</key>
+ </option>
+ <option>
+ <name>Rectangular</name>
+ <key>firdes.WIN_RECTANGULAR</key>
+ </option>
+ <option>
+ <name>Kaiser</name>
+ <key>firdes.WIN_KAISER</key>
+ </option>
+ </param>
+
+ <param>
+ <name>Center Frequency (Hz)</name>
+ <key>fc</key>
+ <value>0</value>
+ <type>real</type>
+ </param>
+
+ <param>
+ <name>Bandwidth (Hz)</name>
+ <key>bw</key>
+ <value>samp_rate</value>
+ <type>real</type>
+ </param>
+
+ <param>
+ <name>Update Rate</name>
+ <key>rate</key>
+ <value>10</value>
+ <type>real</type>
+ </param>
+
+ <param>
+ <name>Show RF Freq</name>
+ <key>showrf</key>
+ <value>False</value>
+ <type>enum</type>
+ <hide>part</hide>
+ <option>
+ <name>Yes</name>
+ <key>True</key>
+ </option>
+ <option>
+ <name>No</name>
+ <key>False</key>
+ </option>
+ </param>
+
+ <param>
+ <name>Plot Frequency</name>
+ <key>plotfreq</key>
+ <value>True</value>
+ <type>bool</type>
+ <hide>part</hide>
+ <option><name>On</name><key>True</key></option>
+ <option><name>Off</name><key>False</key></option>
+ </param>
+
+ <param>
+ <name>Plot Waterfall</name>
+ <key>plotwaterfall</key>
+ <value>True</value>
+ <type>bool</type>
+ <hide>part</hide>
+ <option><name>On</name><key>True</key></option>
+ <option><name>Off</name><key>False</key></option>
+ </param>
+
+ <param>
+ <name>Plot Time</name>
+ <key>plottime</key>
+ <value>True</value>
+ <type>bool</type>
+ <hide>part</hide>
+ <option><name>On</name><key>True</key></option>
+ <option><name>Off</name><key>False</key></option>
+ </param>
+
+ <param>
+ <name>Plot Const</name>
+ <key>plotconst</key>
+ <value>True</value>
+ <type>bool</type>
+ <hide>part</hide>
+ <option><name>On</name><key>True</key></option>
+ <option><name>Off</name><key>False</key></option>
+ </param>
+
+ <param>
+ <name>GUI Hint</name>
+ <key>gui_hint</key>
+ <value></value>
+ <type>gui_hint</type>
+ <hide>part</hide>
+ </param>
+
+ <param>
+ <name>Clicked freq variable</name>
+ <key>freqchangevar</key>
+ <value>None</value>
+ <type>raw</type>
+ <hide>part</hide>
+ </param>
+
+ <param>
+ <name>Show Msg Ports</name>
+ <key>showports</key>
+ <value>True</value>
+ <type>enum</type>
+ <hide>part</hide>
+ <option>
+ <name>Yes</name>
+ <key>False</key>
+ </option>
+ <option>
+ <name>No</name>
+ <key>True</key>
+ </option>
+ </param>
+
+ <sink>
+ <name>in</name>
+ <type>$type</type>
+ <nports>$num_inputs</nports>
+ </sink>
<sink>
<name>freq</name>
<type>message</type>
<optional>1</optional>
+ <hide>$showports</hide>
</sink>
<source>
<name>freq</name>
<type>message</type>
<optional>1</optional>
+ <hide>$showports</hide>
</source>
<doc>
diff --git a/gr-qtgui/grc/qtgui_time_raster_x.xml b/gr-qtgui/grc/qtgui_time_raster_x.xml
index d303e7f42a..16619cb1e9 100644
--- a/gr-qtgui/grc/qtgui_time_raster_x.xml
+++ b/gr-qtgui/grc/qtgui_time_raster_x.xml
@@ -5,12 +5,12 @@
###################################################
-->
<block>
- <name>QT GUI Time Raster Sink</name>
- <key>qtgui_time_raster_sink_x</key>
- <import>from PyQt4 import Qt</import>
- <import>from gnuradio import qtgui</import>
- <import>import sip</import>
- <make>#set $win = 'self._%s_win'%$id
+ <name>QT GUI Time Raster Sink</name>
+ <key>qtgui_time_raster_sink_x</key>
+ <import>from PyQt4 import Qt</import>
+ <import>from gnuradio import qtgui</import>
+ <import>import sip</import>
+ <make>#set $win = 'self._%s_win'%$id
qtgui.$(type.fcn)(
$samp_rate,
$nrows,
@@ -22,6 +22,8 @@ qtgui.$(type.fcn)(
)
self.$(id).set_update_time($update_time)
+self.$(id).set_intensity_range($zmin, $zmax)
+self.$(id).enable_grid($grid)
labels = [$label1, $label2, $label3, $label4, $label5,
$label6, $label7, $label8, $label9, $label10]
@@ -39,87 +41,126 @@ for i in xrange($nconnections):
self._$(id)_win = sip.wrapinstance(self.$(id).pyqwidget(), Qt.QWidget)
$(gui_hint()($win))</make>
- <callback>set_num_rows($nrows)</callback>
- <callback>set_num_cols($ncols)</callback>
- <callback>set_multiplier($mult)</callback>
- <callback>set_offset($offset)</callback>
- <callback>set_update_time($update_time)</callback>
- <callback>set_title($which, $title)</callback>
- <callback>set_color($which, $color)</callback>
-
- <param_tab_order>
- <tab>General</tab>
- <tab>Config</tab>
- </param_tab_order>
-
- <param>
- <name>Type</name>
- <key>type</key>
- <value>complex</value>
- <type>enum</type>
- <option><name>Byte</name><key>byte</key><opt>fcn:time_raster_sink_b</opt></option>
- <option><name>Float</name><key>float</key><opt>fcn:time_raster_sink_f</opt></option>
- </param>
-
- <param>
- <name>Name</name>
- <key>name</key>
- <value>""</value>
- <type>string</type>
- <hide>#if len($name()) > 0 then 'none' else 'part'#</hide>
- </param>
-
- <param>
- <name>Sample Rate</name>
- <key>samp_rate</key>
- <value>samp_rate</value>
- <type>real</type>
- </param>
- <param>
- <name>Num. Rows</name>
- <key>nrows</key>
- <type>int</type>
- </param>
- <param>
- <name>Num. Cols</name>
- <key>ncols</key>
- <type>int</type>
- </param>
- <param>
- <name>Multiplier</name>
- <key>mult</key>
- <value>[]</value>
- <type>real_vector</type>
- <hide>part</hide>
- </param>
- <param>
- <name>Offset</name>
- <key>offset</key>
- <value>[]</value>
- <type>real_vector</type>
- <hide>part</hide>
- </param>
- <param>
- <name>Number of Inputs</name>
- <key>nconnections</key>
- <value>1</value>
- <type>int</type>
- <hide>part</hide>
- </param>
- <param>
- <name>Update Period</name>
- <key>update_time</key>
- <value>0.10</value>
- <type>real</type>
- <hide>part</hide>
- </param>
- <param>
- <name>GUI Hint</name>
- <key>gui_hint</key>
- <value></value>
- <type>gui_hint</type>
- <hide>part</hide>
- </param>
+ <callback>set_num_rows($nrows)</callback>
+ <callback>set_num_cols($ncols)</callback>
+ <callback>set_multiplier($mult)</callback>
+ <callback>set_offset($offset)</callback>
+ <callback>set_update_time($update_time)</callback>
+ <callback>set_title($which, $title)</callback>
+ <callback>set_color($which, $color)</callback>
+
+ <param_tab_order>
+ <tab>General</tab>
+ <tab>Config</tab>
+ </param_tab_order>
+
+ <param>
+ <name>Type</name>
+ <key>type</key>
+ <value>complex</value>
+ <type>enum</type>
+ <option><name>Byte</name><key>byte</key><opt>fcn:time_raster_sink_b</opt></option>
+ <option><name>Float</name><key>float</key><opt>fcn:time_raster_sink_f</opt></option>
+ </param>
+
+ <param>
+ <name>Name</name>
+ <key>name</key>
+ <value>""</value>
+ <type>string</type>
+ <hide>#if len($name()) > 0 then 'none' else 'part'#</hide>
+ </param>
+
+ <param>
+ <name>Sample Rate</name>
+ <key>samp_rate</key>
+ <value>samp_rate</value>
+ <type>real</type>
+ </param>
+
+ <param>
+ <name>Num. Rows</name>
+ <key>nrows</key>
+ <type>int</type>
+ </param>
+
+ <param>
+ <name>Num. Cols</name>
+ <key>ncols</key>
+ <type>int</type>
+ </param>
+
+ <param>
+ <name>Grid</name>
+ <key>grid</key>
+ <value>False</value>
+ <type>enum</type>
+ <hide>part</hide>
+ <option>
+ <name>Yes</name>
+ <key>True</key>
+ </option>
+ <option>
+ <name>No</name>
+ <key>False</key>
+ </option>
+ </param>
+
+ <param>
+ <name>Int. min</name>
+ <key>zmin</key>
+ <value>-1</value>
+ <type>real</type>
+ <hide>part</hide>
+ </param>
+
+ <param>
+ <name>Int. max</name>
+ <key>zmax</key>
+ <value>1</value>
+ <type>real</type>
+ <hide>part</hide>
+ </param>
+
+ <param>
+ <name>Multiplier</name>
+ <key>mult</key>
+ <value>[]</value>
+ <type>real_vector</type>
+ <hide>part</hide>
+ </param>
+
+ <param>
+ <name>Offset</name>
+ <key>offset</key>
+ <value>[]</value>
+ <type>real_vector</type>
+ <hide>part</hide>
+ </param>
+
+ <param>
+ <name>Number of Inputs</name>
+ <key>nconnections</key>
+ <value>1</value>
+ <type>int</type>
+ <hide>part</hide>
+ </param>
+
+ <param>
+ <name>Update Period</name>
+ <key>update_time</key>
+ <value>0.10</value>
+ <type>real</type>
+ <hide>part</hide>
+ </param>
+
+ <param>
+ <name>GUI Hint</name>
+ <key>gui_hint</key>
+ <value></value>
+ <type>gui_hint</type>
+ <hide>part</hide>
+ </param>
<param>
diff --git a/gr-qtgui/grc/qtgui_time_sink_x.xml b/gr-qtgui/grc/qtgui_time_sink_x.xml
index f40487e61f..2d1cc6552e 100644
--- a/gr-qtgui/grc/qtgui_time_sink_x.xml
+++ b/gr-qtgui/grc/qtgui_time_sink_x.xml
@@ -20,9 +20,13 @@ qtgui.$(type.fcn)(
)
self.$(id).set_update_time($update_time)
self.$(id).set_y_axis($ymin, $ymax)
+
+self.$(id).set_y_label($ylabel, $yunit)
+
self.$(id).enable_tags(-1, $entags)
self.$(id).set_trigger_mode($tr_mode, $tr_slope, $tr_level, $tr_delay, $tr_chan, $tr_tag)
self.$(id).enable_autoscale($autoscale)
+self.$(id).enable_grid($grid)
labels = [$label1, $label2, $label3, $label4, $label5,
$label6, $label7, $label8, $label9, $label10]
@@ -97,6 +101,22 @@ $(gui_hint()($win))</make>
</param>
<param>
+ <name>Y Axis Label</name>
+ <key>ylabel</key>
+ <value>Amplitude</value>
+ <type>string</type>
+ <hide>part</hide>
+ </param>
+
+ <param>
+ <name>Y Axis Unit</name>
+ <key>yunit</key>
+ <value>""</value>
+ <type>string</type>
+ <hide>part</hide>
+ </param>
+
+ <param>
<name>Number of Points</name>
<key>size</key>
<value>1024</value>
@@ -110,6 +130,22 @@ $(gui_hint()($win))</make>
</param>
<param>
+ <name>Grid</name>
+ <key>grid</key>
+ <value>False</value>
+ <type>enum</type>
+ <hide>part</hide>
+ <option>
+ <name>Yes</name>
+ <key>True</key>
+ </option>
+ <option>
+ <name>No</name>
+ <key>False</key>
+ </option>
+ </param>
+
+ <param>
<name>Autoscale</name>
<key>autoscale</key>
<value>False</value>
diff --git a/gr-qtgui/grc/qtgui_waterfall_sink_x.xml b/gr-qtgui/grc/qtgui_waterfall_sink_x.xml
index 36df704a3e..d6e0f5911b 100644
--- a/gr-qtgui/grc/qtgui_waterfall_sink_x.xml
+++ b/gr-qtgui/grc/qtgui_waterfall_sink_x.xml
@@ -21,6 +21,7 @@ qtgui.$(type.fcn)(
$nconnections \#number of inputs
)
self.$(id).set_update_time($update_time)
+self.$(id).enable_grid($grid)
labels = [$label1, $label2, $label3, $label4, $label5,
$label6, $label7, $label8, $label9, $label10]
@@ -51,115 +52,150 @@ $(gui_hint()($win))</make>
<tab>Config</tab>
</param_tab_order>
- <param>
- <name>Type</name>
- <key>type</key>
- <value>complex</value>
- <type>enum</type>
- <option><name>Complex</name><key>complex</key><opt>fcn:waterfall_sink_c</opt></option>
- <option><name>Float</name><key>float</key><opt>fcn:waterfall_sink_f</opt></option>
- </param>
-
- <param>
- <name>Name</name>
- <key>name</key>
- <value>""</value>
- <type>string</type>
- <hide>#if len($name()) > 0 then 'none' else 'part'#</hide>
- </param>
-
- <param>
- <name>FFT Size</name>
- <key>fftsize</key>
- <value>1024</value>
- <type>int</type>
- </param>
- <param>
- <name>Window Type</name>
- <key>wintype</key>
- <value>firdes.WIN_BLACKMAN_hARRIS</value>
- <type>int</type>
- <hide>part</hide>
- <option>
- <name>Blackman-harris</name>
- <key>firdes.WIN_BLACKMAN_hARRIS</key>
- </option>
- <option>
- <name>Hamming</name>
- <key>firdes.WIN_HAMMING</key>
- </option>
- <option>
- <name>Hann</name>
- <key>firdes.WIN_HANN</key>
- </option>
- <option>
- <name>Blackman</name>
- <key>firdes.WIN_BLACKMAN</key>
- </option>
- <option>
- <name>Rectangular</name>
+ <param>
+ <name>Type</name>
+ <key>type</key>
+ <value>complex</value>
+ <type>enum</type>
+ <option><name>Complex</name><key>complex</key><opt>fcn:waterfall_sink_c</opt></option>
+ <option><name>Float</name><key>float</key><opt>fcn:waterfall_sink_f</opt></option>
+ </param>
+
+ <param>
+ <name>Name</name>
+ <key>name</key>
+ <value>""</value>
+ <type>string</type>
+ <hide>#if len($name()) > 0 then 'none' else 'part'#</hide>
+ </param>
+
+ <param>
+ <name>FFT Size</name>
+ <key>fftsize</key>
+ <value>1024</value>
+ <type>int</type>
+ </param>
+
+ <param>
+ <name>Window Type</name>
+ <key>wintype</key>
+ <value>firdes.WIN_BLACKMAN_hARRIS</value>
+ <type>int</type>
+ <hide>part</hide>
+ <option>
+ <name>Blackman-harris</name>
+ <key>firdes.WIN_BLACKMAN_hARRIS</key>
+ </option>
+ <option>
+ <name>Hamming</name>
+ <key>firdes.WIN_HAMMING</key>
+ </option>
+ <option>
+ <name>Hann</name>
+ <key>firdes.WIN_HANN</key>
+ </option>
+ <option>
+ <name>Blackman</name>
+ <key>firdes.WIN_BLACKMAN</key>
+ </option>
+ <option>
+ <name>Rectangular</name>
<key>firdes.WIN_RECTANGULAR</key>
- </option>
- <option>
- <name>Kaiser</name>
- <key>firdes.WIN_KAISER</key>
- </option>
- <option>
- <name>Flat-top</name>
- <key>firdes.WIN_FLATTOP</key>
- </option>
- </param>
- <param>
- <name>Center Frequency (Hz)</name>
- <key>fc</key>
- <value>0</value>
- <type>real</type>
- </param>
- <param>
- <name>Bandwidth (Hz)</name>
- <key>bw</key>
- <value>samp_rate</value>
- <type>real</type>
- </param>
-
- <param>
- <name>Intensity Min</name>
- <key>int_min</key>
- <value>-140</value>
- <type>float</type>
- <hide>part</hide>
- </param>
-
- <param>
- <name>Intensity Max</name>
- <key>int_max</key>
- <value>10</value>
- <type>float</type>
- <hide>part</hide>
- </param>
-
- <param>
- <name>Number of Inputs</name>
- <key>nconnections</key>
- <value>1</value>
- <type>int</type>
- <hide>part</hide>
- </param>
- <param>
- <name>Update Period</name>
- <key>update_time</key>
- <value>0.10</value>
- <type>real</type>
- <hide>part</hide>
- </param>
- <param>
- <name>GUI Hint</name>
- <key>gui_hint</key>
- <value></value>
- <type>gui_hint</type>
- <hide>part</hide>
- </param>
+ </option>
+ <option>
+ <name>Kaiser</name>
+ <key>firdes.WIN_KAISER</key>
+ </option>
+ <option>
+ <name>Flat-top</name>
+ <key>firdes.WIN_FLATTOP</key>
+ </option>
+ </param>
+
+ <param>
+ <name>Center Frequency (Hz)</name>
+ <key>fc</key>
+ <value>0</value>
+ <type>real</type>
+ </param>
+
+ <param>
+ <name>Bandwidth (Hz)</name>
+ <key>bw</key>
+ <value>samp_rate</value>
+ <type>real</type>
+ </param>
+
+ <param>
+ <name>Intensity Min</name>
+ <key>int_min</key>
+ <value>-140</value>
+ <type>float</type>
+ <hide>part</hide>
+ </param>
+
+ <param>
+ <name>Intensity Max</name>
+ <key>int_max</key>
+ <value>10</value>
+ <type>float</type>
+ <hide>part</hide>
+ </param>
+
+ <param>
+ <name>Grid</name>
+ <key>grid</key>
+ <value>False</value>
+ <type>enum</type>
+ <hide>part</hide>
+ <option>
+ <name>Yes</name>
+ <key>True</key>
+ </option>
+ <option>
+ <name>No</name>
+ <key>False</key>
+ </option>
+ </param>
+
+ <param>
+ <name>Number of Inputs</name>
+ <key>nconnections</key>
+ <value>1</value>
+ <type>int</type>
+ <hide>part</hide>
+ </param>
+
+ <param>
+ <name>Update Period</name>
+ <key>update_time</key>
+ <value>0.10</value>
+ <type>real</type>
+ <hide>part</hide>
+ </param>
+ <param>
+ <name>GUI Hint</name>
+ <key>gui_hint</key>
+ <value></value>
+ <type>gui_hint</type>
+ <hide>part</hide>
+ </param>
+ <param>
+ <name>Show Msg Ports</name>
+ <key>showports</key>
+ <value>True</value>
+ <type>enum</type>
+ <hide>part</hide>
+ <option>
+ <name>Yes</name>
+ <key>False</key>
+ </option>
+ <option>
+ <name>No</name>
+ <key>True</key>
+ </option>
+ </param>
<param>
@@ -420,12 +456,14 @@ $(gui_hint()($win))</make>
<name>freq</name>
<type>message</type>
<optional>1</optional>
+ <hide>$showports</hide>
</sink>
<source>
<name>freq</name>
<type>message</type>
<optional>1</optional>
+ <hide>$showports</hide>
</source>
<doc>
diff --git a/gr-qtgui/include/gnuradio/qtgui/FrequencyDisplayPlot.h b/gr-qtgui/include/gnuradio/qtgui/FrequencyDisplayPlot.h
index f5e8f0f7ad..ac7dfe8b6d 100644
--- a/gr-qtgui/include/gnuradio/qtgui/FrequencyDisplayPlot.h
+++ b/gr-qtgui/include/gnuradio/qtgui/FrequencyDisplayPlot.h
@@ -76,6 +76,8 @@ public:
void replot();
void setYaxis(double min, double max);
+ double getYMin() const;
+ double getYMax() const;
void setTraceColour (QColor);
void setBGColour (QColor c);
diff --git a/gr-qtgui/include/gnuradio/qtgui/TimeDomainDisplayPlot.h b/gr-qtgui/include/gnuradio/qtgui/TimeDomainDisplayPlot.h
index 8874a7e6cc..81601cee97 100644
--- a/gr-qtgui/include/gnuradio/qtgui/TimeDomainDisplayPlot.h
+++ b/gr-qtgui/include/gnuradio/qtgui/TimeDomainDisplayPlot.h
@@ -63,6 +63,9 @@ public slots:
void enableTagMarker(int which, bool en);
+ void setYLabel(const std::string &label,
+ const std::string &unit="");
+
private:
void _resetXAxisPoints();
void _autoScale(double bottom, double top);
diff --git a/gr-qtgui/include/gnuradio/qtgui/const_sink_c.h b/gr-qtgui/include/gnuradio/qtgui/const_sink_c.h
index 84f9a87891..b942032d51 100644
--- a/gr-qtgui/include/gnuradio/qtgui/const_sink_c.h
+++ b/gr-qtgui/include/gnuradio/qtgui/const_sink_c.h
@@ -132,6 +132,7 @@ namespace gr {
virtual void enable_menu(bool en=true) = 0;
virtual void enable_autoscale(bool en) = 0;
+ virtual void enable_grid(bool en) = 0;
virtual int nsamps() const = 0;
virtual void reset() = 0;
diff --git a/gr-qtgui/include/gnuradio/qtgui/form_menus.h b/gr-qtgui/include/gnuradio/qtgui/form_menus.h
index d22577ef67..77834062de 100644
--- a/gr-qtgui/include/gnuradio/qtgui/form_menus.h
+++ b/gr-qtgui/include/gnuradio/qtgui/form_menus.h
@@ -1542,4 +1542,68 @@ private:
/********************************************************************/
+class ItemFloatAct: public QAction
+{
+ Q_OBJECT
+
+public:
+ ItemFloatAct(int which, QString title, QWidget *parent)
+ : QAction(title, parent), d_which(which)
+ {
+ d_diag = new QDialog(parent);
+ d_diag->setWindowTitle(title);
+ d_diag->setModal(true);
+
+ d_text = new QLineEdit();
+
+ QGridLayout *layout = new QGridLayout(d_diag);
+ QPushButton *btn_ok = new QPushButton(tr("OK"));
+ QPushButton *btn_cancel = new QPushButton(tr("Cancel"));
+
+ layout->addWidget(d_text, 0, 0, 1, 2);
+ layout->addWidget(btn_ok, 1, 0);
+ layout->addWidget(btn_cancel, 1, 1);
+
+ connect(btn_ok, SIGNAL(clicked()), this, SLOT(getText()));
+ connect(btn_cancel, SIGNAL(clicked()), d_diag, SLOT(close()));
+
+ connect(this, SIGNAL(triggered()), this, SLOT(getTextDiag()));
+ }
+
+ ~ItemFloatAct()
+ {}
+
+ void setText(float f)
+ {
+ d_text->setText(QString("%1").arg(f));
+ }
+
+
+signals:
+ void whichTrigger(int which, float data);
+
+public slots:
+ void getTextDiag()
+ {
+ d_diag->show();
+ }
+
+private slots:
+ void getText()
+ {
+ emit whichTrigger(d_which, d_text->text().toFloat());
+ d_diag->accept();
+ }
+
+private:
+ int d_which;
+ QDialog *d_diag;
+ QLineEdit *d_text;
+};
+
+
+
+/********************************************************************/
+
+
#endif /* FORM_MENUS_H */
diff --git a/gr-qtgui/include/gnuradio/qtgui/freqdisplayform.h b/gr-qtgui/include/gnuradio/qtgui/freqdisplayform.h
index c0cd36ef23..7cd077e6f8 100644
--- a/gr-qtgui/include/gnuradio/qtgui/freqdisplayform.h
+++ b/gr-qtgui/include/gnuradio/qtgui/freqdisplayform.h
@@ -66,6 +66,8 @@ public slots:
void setFrequencyRange(const double centerfreq,
const double bandwidth);
void setYaxis(double min, double max);
+ void setYMax(const QString &m);
+ void setYMin(const QString &m);
void autoScale(bool en);
void clearMaxHold();
void clearMinHold();
diff --git a/gr-qtgui/include/gnuradio/qtgui/number_sink.h b/gr-qtgui/include/gnuradio/qtgui/number_sink.h
index a34eab38a5..c814100844 100644
--- a/gr-qtgui/include/gnuradio/qtgui/number_sink.h
+++ b/gr-qtgui/include/gnuradio/qtgui/number_sink.h
@@ -85,6 +85,9 @@ namespace gr {
virtual void set_label(int which, const std::string &label) = 0;
virtual void set_min(int which, float min) = 0;
virtual void set_max(int which, float max) = 0;
+ virtual void set_title(const std::string &title) = 0;
+ virtual void set_unit(int which, const std::string &unit) = 0;
+ virtual void set_factor(int which, float factor) = 0;
virtual float average() const = 0;
virtual graph_t graph_type() const = 0;
@@ -93,6 +96,9 @@ namespace gr {
virtual std::string label(int which) const = 0;
virtual float min(int which) const = 0;
virtual float max(int which) const = 0;
+ virtual std::string title() const = 0;
+ virtual std::string unit(int which) const = 0;
+ virtual float factor(int which) const = 0;
virtual void enable_menu(bool en=true) = 0;
virtual void enable_autoscale(bool en=true) = 0;
diff --git a/gr-qtgui/include/gnuradio/qtgui/numberdisplayform.h b/gr-qtgui/include/gnuradio/qtgui/numberdisplayform.h
index c33f9b455f..6f90766903 100644
--- a/gr-qtgui/include/gnuradio/qtgui/numberdisplayform.h
+++ b/gr-qtgui/include/gnuradio/qtgui/numberdisplayform.h
@@ -51,6 +51,9 @@ class NumberDisplayForm : public QWidget
float updateTime() const;
int scaleMin(int which);
int scaleMax(int which);
+ std::string title() const;
+ std::string unit(int which) const;
+ float factor(int which) const;
public slots:
void mousePressEvent(QMouseEvent * e);
@@ -71,6 +74,9 @@ public slots:
void setScaleMin(int which, int min);
void setScaleMax(int which, int max);
void autoScale(bool on);
+ void setTitle(const std::string &title);
+ void setUnit(int which, const std::string &unit);
+ void setFactor(int which, float factor);
private slots:
void newData(const QEvent*);
@@ -93,6 +99,7 @@ private:
QAction *d_stop_act;
QList<QMenu*> d_label_menu;
std::vector<LineTitleAction*> d_label_act;
+ std::vector<ItemFloatAct*> d_factor_act;
FFTAverageMenu *d_avg_menu;
NumberLayoutMenu *d_layout_menu;
std::vector<NumberColorMapMenu*> d_color_menu;
@@ -100,6 +107,10 @@ private:
QAction *d_autoscale_act;
PopupMenu *d_update_time_menu;
QAction *d_save_act;
+
+ QLabel *d_title;
+ std::vector<std::string> d_unit;
+ std::vector<float> d_factor;
};
#endif /* NUMBER_DISPLAY_FORM_H */
diff --git a/gr-qtgui/include/gnuradio/qtgui/time_sink_c.h b/gr-qtgui/include/gnuradio/qtgui/time_sink_c.h
index 8ce6e2e84a..84a8a4dd5a 100644
--- a/gr-qtgui/include/gnuradio/qtgui/time_sink_c.h
+++ b/gr-qtgui/include/gnuradio/qtgui/time_sink_c.h
@@ -78,6 +78,8 @@ namespace gr {
#endif
virtual void set_y_axis(double min, double max) = 0;
+ virtual void set_y_label(const std::string &label,
+ const std::string &unit="") = 0;
virtual void set_update_time(double t) = 0;
virtual void set_title(const std::string &title) = 0;
virtual void set_line_label(int which, const std::string &label) = 0;
diff --git a/gr-qtgui/include/gnuradio/qtgui/time_sink_f.h b/gr-qtgui/include/gnuradio/qtgui/time_sink_f.h
index 1a0949247f..b39c898e66 100644
--- a/gr-qtgui/include/gnuradio/qtgui/time_sink_f.h
+++ b/gr-qtgui/include/gnuradio/qtgui/time_sink_f.h
@@ -76,6 +76,8 @@ namespace gr {
#endif
virtual void set_y_axis(double min, double max) = 0;
+ virtual void set_y_label(const std::string &label,
+ const std::string &unit="") = 0;
virtual void set_update_time(double t) = 0;
virtual void set_title(const std::string &title) = 0;
virtual void set_line_label(int which, const std::string &line) = 0;
diff --git a/gr-qtgui/include/gnuradio/qtgui/timedisplayform.h b/gr-qtgui/include/gnuradio/qtgui/timedisplayform.h
index 7e09e3c428..e52e28c3d6 100644
--- a/gr-qtgui/include/gnuradio/qtgui/timedisplayform.h
+++ b/gr-qtgui/include/gnuradio/qtgui/timedisplayform.h
@@ -58,6 +58,8 @@ public slots:
void setSampleRate(const double samprate);
void setSampleRate(const QString &samprate);
void setYaxis(double min, double max);
+ void setYLabel(const std::string &label,
+ const std::string &unit="");
void setNPoints(const int);
void setStem(bool en);
void autoScale(bool en);
diff --git a/gr-qtgui/include/gnuradio/qtgui/timerasterdisplayform.h b/gr-qtgui/include/gnuradio/qtgui/timerasterdisplayform.h
index dff2986cc8..1abc6ebe16 100644
--- a/gr-qtgui/include/gnuradio/qtgui/timerasterdisplayform.h
+++ b/gr-qtgui/include/gnuradio/qtgui/timerasterdisplayform.h
@@ -72,6 +72,8 @@ public slots:
void setIntensityRange(const double minIntensity,
const double maxIntensity);
+ void setMaxIntensity(const QString &m);
+ void setMinIntensity(const QString &m);
void setColorMap(int which,
const int newType,
@@ -86,8 +88,8 @@ private slots:
void newData(const QEvent *updateEvent);
private:
- double d_min_val;
- double d_max_val;
+ double d_min_val, d_cur_min_val;
+ double d_max_val, d_cur_max_val;
};
#endif /* TIMERASTER_DISPLAY_FORM_H */
diff --git a/gr-qtgui/include/gnuradio/qtgui/waterfalldisplayform.h b/gr-qtgui/include/gnuradio/qtgui/waterfalldisplayform.h
index 5af2680b8a..8017d5ce8f 100644
--- a/gr-qtgui/include/gnuradio/qtgui/waterfalldisplayform.h
+++ b/gr-qtgui/include/gnuradio/qtgui/waterfalldisplayform.h
@@ -75,6 +75,8 @@ public slots:
void setIntensityRange(const double minIntensity,
const double maxIntensity);
+ void setMaxIntensity(const QString &m);
+ void setMinIntensity(const QString &m);
void setAlpha(int which, int alpha);
@@ -101,8 +103,8 @@ private:
bool d_clicked;
double d_clicked_freq;
- double d_min_val;
- double d_max_val;
+ double d_min_val, d_cur_min_val;
+ double d_max_val, d_cur_max_val;
FFTSizeMenu *d_sizemenu;
FFTAverageMenu *d_avgmenu;
diff --git a/gr-qtgui/lib/CMakeLists.txt b/gr-qtgui/lib/CMakeLists.txt
index 22f7bda973..5858a1c43b 100644
--- a/gr-qtgui/lib/CMakeLists.txt
+++ b/gr-qtgui/lib/CMakeLists.txt
@@ -164,6 +164,18 @@ target_link_libraries(gnuradio-qtgui ${qtgui_libs})
GR_LIBRARY_FOO(gnuradio-qtgui RUNTIME_COMPONENT "qtgui_runtime" DEVEL_COMPONENT "qtgui_devel")
if(ENABLE_STATIC_LIBS)
+ if(ENABLE_GR_CTRLPORT)
+ # Remove GR_CTRLPORT set this target's definitions.
+ # Makes sure we don't try to use ControlPort stuff in source files
+ # since Ice will not work with static libs.
+ GET_DIRECTORY_PROPERTY(STATIC_DEFS COMPILE_DEFINITIONS)
+ list(REMOVE_ITEM STATIC_DEFS "GR_CTRLPORT")
+ SET_PROPERTY(DIRECTORY PROPERTY COMPILE_DEFINITIONS "${STATIC_DEFS}")
+
+ # readd it to the target since we removed it from the directory-wide list.
+ SET_PROPERTY(TARGET gnuradio-qtgui APPEND PROPERTY COMPILE_DEFINITIONS "GR_CTRLPORT")
+ endif(ENABLE_GR_CTRLPORT)
+
add_library(gnuradio-qtgui_static STATIC ${qtgui_sources})
if(NOT WIN32)
diff --git a/gr-qtgui/lib/FrequencyDisplayPlot.cc b/gr-qtgui/lib/FrequencyDisplayPlot.cc
index 19ebac1a82..12835bcd27 100644
--- a/gr-qtgui/lib/FrequencyDisplayPlot.cc
+++ b/gr-qtgui/lib/FrequencyDisplayPlot.cc
@@ -262,6 +262,18 @@ FrequencyDisplayPlot::setYaxis(double min, double max)
d_zoomer->setZoomBase();
}
+double
+FrequencyDisplayPlot::getYMin() const
+{
+ return d_ymin;
+}
+
+double
+FrequencyDisplayPlot::getYMax() const
+{
+ return d_ymax;
+}
+
void
FrequencyDisplayPlot::setFrequencyRange(const double centerfreq,
const double bandwidth,
@@ -438,7 +450,9 @@ void
FrequencyDisplayPlot::_autoScale(double bottom, double top)
{
// Auto scale the y-axis with a margin of 10 dB on either side.
- setYaxis(bottom - 10, top + 10);
+ d_ymin = bottom-10;
+ d_ymax = top+10;
+ setYaxis(d_ymin, d_ymax);
}
void
diff --git a/gr-qtgui/lib/TimeDomainDisplayPlot.cc b/gr-qtgui/lib/TimeDomainDisplayPlot.cc
index 8c0601a5b5..3fc592481f 100644
--- a/gr-qtgui/lib/TimeDomainDisplayPlot.cc
+++ b/gr-qtgui/lib/TimeDomainDisplayPlot.cc
@@ -66,7 +66,7 @@ public:
#else /* QWT_VERSION < 0x060100 */
TimeDomainDisplayZoomer(QWidget* canvas, const unsigned int timePrecision)
#endif /* QWT_VERSION < 0x060100 */
- : QwtPlotZoomer(canvas),TimePrecisionClass(timePrecision)
+ : QwtPlotZoomer(canvas),TimePrecisionClass(timePrecision),d_yUnitType("V")
{
setTrackerMode(QwtPicker::AlwaysOn);
}
@@ -85,23 +85,30 @@ public:
d_unitType = type;
}
+ void setYUnitType(const std::string &type)
+ {
+ d_yUnitType = type;
+ }
+
protected:
using QwtPlotZoomer::trackerText;
virtual QwtText trackerText( const QPoint& p ) const
{
QwtText t;
QwtDoublePoint dp = QwtPlotZoomer::invTransform(p);
- if((dp.y() > 0.0001) && (dp.y() < 10000)) {
- t.setText(QString("%1 %2, %3 V").
+ if((fabs(dp.y()) > 0.0001) && (fabs(dp.y()) < 10000)) {
+ t.setText(QString("%1 %2, %3 %4").
arg(dp.x(), 0, 'f', getTimePrecision()).
arg(d_unitType.c_str()).
- arg(dp.y(), 0, 'f', 4));
+ arg(dp.y(), 0, 'f', 4).
+ arg(d_yUnitType.c_str()));
}
else {
- t.setText(QString("%1 %2, %3 V").
+ t.setText(QString("%1 %2, %3 %4").
arg(dp.x(), 0, 'f', getTimePrecision()).
arg(d_unitType.c_str()).
- arg(dp.y(), 0, 'e', 4));
+ arg(dp.y(), 0, 'e', 4).
+ arg(d_yUnitType.c_str()));
}
return t;
@@ -109,6 +116,7 @@ protected:
private:
std::string d_unitType;
+ std::string d_yUnitType;
};
@@ -550,4 +558,15 @@ TimeDomainDisplayPlot::enableTagMarker(int which, bool en)
throw std::runtime_error("TimeDomainDisplayPlot: enabled tag marker does not exist.\n");
}
+void
+TimeDomainDisplayPlot::setYLabel(const std::string &label,
+ const std::string &unit)
+{
+ std::string l = label;
+ if(unit.length() > 0)
+ l += " (" + unit + ")";
+ setAxisTitle(QwtPlot::yLeft, QString(l.c_str()));
+ ((TimeDomainDisplayZoomer*)d_zoomer)->setYUnitType(unit);
+}
+
#endif /* TIME_DOMAIN_DISPLAY_PLOT_C */
diff --git a/gr-qtgui/lib/const_sink_c_impl.cc b/gr-qtgui/lib/const_sink_c_impl.cc
index a1e1d096d6..f7bdc01489 100644
--- a/gr-qtgui/lib/const_sink_c_impl.cc
+++ b/gr-qtgui/lib/const_sink_c_impl.cc
@@ -354,6 +354,12 @@ namespace gr {
}
void
+ const_sink_c_impl::enable_grid(bool en)
+ {
+ d_main_gui->setGrid(en);
+ }
+
+ void
const_sink_c_impl::reset()
{
gr::thread::scoped_lock lock(d_setlock);
diff --git a/gr-qtgui/lib/const_sink_c_impl.h b/gr-qtgui/lib/const_sink_c_impl.h
index e28ac3fded..a7f0096dfb 100644
--- a/gr-qtgui/lib/const_sink_c_impl.h
+++ b/gr-qtgui/lib/const_sink_c_impl.h
@@ -114,6 +114,7 @@ namespace gr {
int nsamps() const;
void enable_menu(bool en);
void enable_autoscale(bool en);
+ void enable_grid(bool en);
void reset();
int work(int noutput_items,
diff --git a/gr-qtgui/lib/freqdisplayform.cc b/gr-qtgui/lib/freqdisplayform.cc
index e9968df0b2..ccc7fe9e07 100644
--- a/gr-qtgui/lib/freqdisplayform.cc
+++ b/gr-qtgui/lib/freqdisplayform.cc
@@ -55,6 +55,16 @@ FreqDisplayForm::FreqDisplayForm(int nplots, QWidget* parent)
connect(d_winmenu, SIGNAL(whichTrigger(gr::filter::firdes::win_type)),
this, SLOT(setFFTWindowType(const gr::filter::firdes::win_type)));
+ PopupMenu *maxymenu = new PopupMenu("Y Max", this);
+ d_menu->addAction(maxymenu);
+ connect(maxymenu, SIGNAL(whichTrigger(QString)),
+ this, SLOT(setYMax(QString)));
+
+ PopupMenu *minymenu = new PopupMenu("Y Min", this);
+ d_menu->addAction(minymenu);
+ connect(minymenu, SIGNAL(whichTrigger(QString)),
+ this, SLOT(setYMin(QString)));
+
d_clearmax_act = new QAction("Clear Max", this);
d_menu->addAction(d_clearmax_act);
connect(d_clearmax_act, SIGNAL(triggered()),
@@ -179,6 +189,24 @@ FreqDisplayForm::setYaxis(double min, double max)
}
void
+FreqDisplayForm::setYMax(const QString &m)
+{
+ double new_max = m.toDouble();
+ double cur_ymin = getPlot()->getYMin();
+ if(new_max > cur_ymin)
+ setYaxis(cur_ymin, new_max);
+}
+
+void
+FreqDisplayForm::setYMin(const QString &m)
+{
+ double new_min = m.toDouble();
+ double cur_ymax = getPlot()->getYMax();
+ if(new_min < cur_ymax)
+ setYaxis(new_min, cur_ymax);
+}
+
+void
FreqDisplayForm::autoScale(bool en)
{
if(en) {
diff --git a/gr-qtgui/lib/number_sink_impl.cc b/gr-qtgui/lib/number_sink_impl.cc
index 4e513d5b8a..ca4a567ca3 100644
--- a/gr-qtgui/lib/number_sink_impl.cc
+++ b/gr-qtgui/lib/number_sink_impl.cc
@@ -197,7 +197,25 @@ namespace gr {
void
number_sink_impl::set_max(int which, float max)
{
- return d_main_gui->setScaleMax(which, max);
+ d_main_gui->setScaleMax(which, max);
+ }
+
+ void
+ number_sink_impl::set_title(const std::string &title)
+ {
+ d_main_gui->setTitle(title);
+ }
+
+ void
+ number_sink_impl::set_unit(int which, const std::string &unit)
+ {
+ d_main_gui->setUnit(which, unit);
+ }
+
+ void
+ number_sink_impl::set_factor(int which, float factor)
+ {
+ d_main_gui->setFactor(which, factor);
}
float
@@ -242,6 +260,24 @@ namespace gr {
return d_main_gui->scaleMax(which);
}
+ std::string
+ number_sink_impl::title() const
+ {
+ return d_main_gui->title();
+ }
+
+ std::string
+ number_sink_impl::unit(int which) const
+ {
+ return d_main_gui->unit(which);
+ }
+
+ float
+ number_sink_impl::factor(int which) const
+ {
+ return d_main_gui->factor(which);
+ }
+
void
number_sink_impl::enable_menu(bool en)
{
diff --git a/gr-qtgui/lib/number_sink_impl.h b/gr-qtgui/lib/number_sink_impl.h
index 13fc5ef866..0e357ef1d3 100644
--- a/gr-qtgui/lib/number_sink_impl.h
+++ b/gr-qtgui/lib/number_sink_impl.h
@@ -89,6 +89,9 @@ namespace gr {
void set_label(int which, const std::string &label);
void set_min(int which, float min);
void set_max(int which, float max);
+ void set_title(const std::string &title);
+ void set_unit(int which, const std::string &unit);
+ void set_factor(int which, float factor);
float average() const;
graph_t graph_type() const;
@@ -97,6 +100,9 @@ namespace gr {
std::string label(int which) const;
float min(int which) const;
float max(int which) const;
+ std::string title() const;
+ std::string unit(int which) const;
+ float factor(int which) const;
void enable_menu(bool en);
void enable_autoscale(bool en=true);
diff --git a/gr-qtgui/lib/numberdisplayform.cc b/gr-qtgui/lib/numberdisplayform.cc
index b2b3fe453a..0dd433c62b 100644
--- a/gr-qtgui/lib/numberdisplayform.cc
+++ b/gr-qtgui/lib/numberdisplayform.cc
@@ -32,11 +32,15 @@ NumberDisplayForm::NumberDisplayForm(int nplots, gr::qtgui::graph_t type,
: QWidget(parent)
{
d_nplots = nplots;
+ d_graph_type = type;
+ d_title = new QLabel(QString(""));
d_layout = new QGridLayout(this);
for(int i = 0; i < d_nplots; i++) {
d_min.push_back(+1e32);
d_max.push_back(-1e32);
d_label.push_back(new QLabel(QString("Data %1").arg(i)));
+ d_unit.push_back("");
+ d_factor.push_back(1);
d_text_box.push_back(new QLabel(QString("0")));
d_indicator.push_back(new QwtThermo());
@@ -105,6 +109,11 @@ NumberDisplayForm::NumberDisplayForm(int nplots, gr::qtgui::graph_t type,
this, SLOT(setColor(int, const QColor&, const QColor&)));
d_label_menu[i]->addMenu(d_color_menu[i]);
+ d_factor_act.push_back(new ItemFloatAct(i, "Factor", this));
+ connect(d_factor_act[i], SIGNAL(whichTrigger(int, float)),
+ this, SLOT(setFactor(int, float)));
+ d_label_menu[i]->addAction(d_factor_act[i]);
+
d_menu->addMenu(d_label_menu[i]);
}
@@ -230,10 +239,12 @@ NumberDisplayForm::newData(const QEvent* updateEvent)
const std::vector<float> samples = tevent->getSamples();
for(int i = 0; i < d_nplots; i++) {
- d_text_box[i]->setText(QString("%1").arg(samples[i], 4, ' '));
- d_indicator[i]->setValue(samples[i]);
- d_min[i] = std::min(d_min[i], samples[i]);
- d_max[i] = std::max(d_max[i], samples[i]);
+ float f = d_factor[i]*samples[i];
+ d_text_box[i]->setText(QString("%1 %2").arg(f, 4, ' ').\
+ arg(QString(d_unit[i].c_str())));
+ d_indicator[i]->setValue(f);
+ d_min[i] = std::min(d_min[i], f);
+ d_max[i] = std::max(d_max[i], f);
if(d_autoscale_state) {
d_indicator[i]->setScale(d_min[i], d_max[i]);
@@ -254,12 +265,23 @@ NumberDisplayForm::customEvent(QEvent * e)
void
NumberDisplayForm::setGraphType(const gr::qtgui::graph_t type)
{
+ int off = 0;
+
+ // Remove all widgets from the layout
+ QLayoutItem *item;
+ while((item = d_layout->takeAt(0)) != NULL) {
+ d_layout->removeItem(item);
+ }
+
+ // If we have a title, add it at the 0,0 grid point (top left)
+ // set off = 1 to offset the rest of the widgets
+ if(d_title->text().length() > 0) {
+ d_layout->addWidget(d_title, 0, 0);
+ off = 1;
+ }
+
d_graph_type = type;
for(int i = 0; i < d_nplots; i++) {
- d_layout->removeWidget(d_indicator[i]);
- d_layout->removeWidget(d_label[i]);
- d_layout->removeWidget(d_text_box[i]);
-
switch(d_graph_type) {
case(gr::qtgui::NUM_GRAPH_HORIZ):
#if QWT_VERSION < 0x060100
@@ -268,9 +290,9 @@ NumberDisplayForm::setGraphType(const gr::qtgui::graph_t type)
d_indicator[i]->setOrientation(Qt::Horizontal);
#endif /* if QWT_VERSION < 0x060100 */
d_indicator[i]->setVisible(true);
- d_layout->addWidget(d_label[i], 2*i, 0);
- d_layout->addWidget(d_text_box[i], 2*i, 1);
- d_layout->addWidget(d_indicator[i], 2*i+1, 1);
+ d_layout->addWidget(d_label[i], 2*i+off, 0);
+ d_layout->addWidget(d_text_box[i], 2*i+off, 1);
+ d_layout->addWidget(d_indicator[i], 2*i+1+off, 1);
break;
case(gr::qtgui::NUM_GRAPH_VERT):
#if QWT_VERSION < 0x060100
@@ -279,15 +301,15 @@ NumberDisplayForm::setGraphType(const gr::qtgui::graph_t type)
d_indicator[i]->setOrientation(Qt::Vertical);
#endif /* if QWT_VERSION < 0x060100 */
d_indicator[i]->setVisible(true);
- d_layout->addWidget(d_label[i], 0, i);
- d_layout->addWidget(d_text_box[i], 1, i);
- d_layout->addWidget(d_indicator[i], 2, i);
+ d_layout->addWidget(d_label[i], 0+off, i);
+ d_layout->addWidget(d_text_box[i], 1+off, i);
+ d_layout->addWidget(d_indicator[i], 2+off, i);
break;
case(gr::qtgui::NUM_GRAPH_NONE):
default:
d_indicator[i]->setVisible(false);
- d_layout->addWidget(d_label[i], 0, i);
- d_layout->addWidget(d_text_box[i], 1, i);
+ d_layout->addWidget(d_label[i], 0+off, i);
+ d_layout->addWidget(d_text_box[i], 1+off, i);
break;
}
}
@@ -435,7 +457,59 @@ NumberDisplayForm::autoScale(bool on)
// Reset the autoscale limits
for(int i = 0; i < d_nplots; i++) {
- d_min.push_back(+1e32);
- d_max.push_back(-1e32);
+ d_min[i] = +1e32;
+ d_max[i] = -1e32;
}
}
+
+std::string
+NumberDisplayForm::title() const
+{
+ return d_title->text().toStdString();
+}
+
+void
+NumberDisplayForm::setTitle(const std::string &title)
+{
+ std::string t = title;
+ if(t.length() > 0)
+ t = "<b><FONT SIZE=4>" + title + "</b>";
+ d_title->setText(QString(t.c_str()));
+ setGraphType(d_graph_type);
+}
+
+std::string
+NumberDisplayForm::unit(int which) const
+{
+ if(static_cast<size_t>(which) >= d_unit.size())
+ throw std::runtime_error("NumberDisplayForm::units: invalid 'which'.\n");
+
+ return d_unit[which];
+}
+
+void
+NumberDisplayForm::setUnit(int which, const std::string &unit)
+{
+ if(static_cast<size_t>(which) >= d_unit.size())
+ throw std::runtime_error("NumberDisplayForm::setUnits: invalid 'which'.\n");
+
+ d_unit[which] = unit;
+}
+
+float
+NumberDisplayForm::factor(int which) const
+{
+ if(static_cast<size_t>(which) >= d_factor.size())
+ throw std::runtime_error("NumberDisplayForm::factor: invalid 'which'.\n");
+
+ return d_factor[which];
+}
+
+void
+NumberDisplayForm::setFactor(int which, float factor)
+{
+ if(static_cast<size_t>(which) >= d_factor.size())
+ throw std::runtime_error("NumberDisplayForm::setFactor: invalid 'which'.\n");
+
+ d_factor[which] = factor;
+}
diff --git a/gr-qtgui/lib/time_sink_c_impl.cc b/gr-qtgui/lib/time_sink_c_impl.cc
index 664c164316..e7c580d378 100644
--- a/gr-qtgui/lib/time_sink_c_impl.cc
+++ b/gr-qtgui/lib/time_sink_c_impl.cc
@@ -173,6 +173,13 @@ namespace gr {
}
void
+ time_sink_c_impl::set_y_label(const std::string &label,
+ const std::string &unit)
+ {
+ d_main_gui->setYLabel(label, unit);
+ }
+
+ void
time_sink_c_impl::set_update_time(double t)
{
//convert update time to ticks
diff --git a/gr-qtgui/lib/time_sink_c_impl.h b/gr-qtgui/lib/time_sink_c_impl.h
index 4e6ffb3db4..378296918d 100644
--- a/gr-qtgui/lib/time_sink_c_impl.h
+++ b/gr-qtgui/lib/time_sink_c_impl.h
@@ -90,6 +90,8 @@ namespace gr {
#endif
void set_y_axis(double min, double max);
+ void set_y_label(const std::string &label,
+ const std::string &unit="");
void set_update_time(double t);
void set_title(const std::string &title);
void set_line_label(int which, const std::string &label);
diff --git a/gr-qtgui/lib/time_sink_f_impl.cc b/gr-qtgui/lib/time_sink_f_impl.cc
index b444d78302..4328c2c719 100644
--- a/gr-qtgui/lib/time_sink_f_impl.cc
+++ b/gr-qtgui/lib/time_sink_f_impl.cc
@@ -175,6 +175,13 @@ namespace gr {
}
void
+ time_sink_f_impl::set_y_label(const std::string &label,
+ const std::string &unit)
+ {
+ d_main_gui->setYLabel(label, unit);
+ }
+
+ void
time_sink_f_impl::set_update_time(double t)
{
//convert update time to ticks
diff --git a/gr-qtgui/lib/time_sink_f_impl.h b/gr-qtgui/lib/time_sink_f_impl.h
index 6b3252cc2e..2da1db97d1 100644
--- a/gr-qtgui/lib/time_sink_f_impl.h
+++ b/gr-qtgui/lib/time_sink_f_impl.h
@@ -90,6 +90,8 @@ namespace gr {
#endif
void set_y_axis(double min, double max);
+ void set_y_label(const std::string &label,
+ const std::string &unit="");
void set_update_time(double t);
void set_title(const std::string &title);
void set_line_label(int which, const std::string &label);
diff --git a/gr-qtgui/lib/timedisplayform.cc b/gr-qtgui/lib/timedisplayform.cc
index f6669465e3..6d1deba05f 100644
--- a/gr-qtgui/lib/timedisplayform.cc
+++ b/gr-qtgui/lib/timedisplayform.cc
@@ -186,6 +186,13 @@ TimeDisplayForm::setYaxis(double min, double max)
getPlot()->setYaxis(min, max);
}
+void
+TimeDisplayForm::setYLabel(const std::string &label,
+ const std::string &unit)
+{
+ getPlot()->setYLabel(label, unit);
+}
+
int
TimeDisplayForm::getNPoints() const
{
@@ -362,4 +369,3 @@ TimeDisplayForm::getTriggerTagKey() const
{
return d_trig_tag_key;
}
-
diff --git a/gr-qtgui/lib/timerasterdisplayform.cc b/gr-qtgui/lib/timerasterdisplayform.cc
index 382e91607c..eb5405d112 100644
--- a/gr-qtgui/lib/timerasterdisplayform.cc
+++ b/gr-qtgui/lib/timerasterdisplayform.cc
@@ -91,6 +91,16 @@ TimeRasterDisplayForm::TimeRasterDisplayForm(int nplots,
connect(rowsmenu, SIGNAL(whichTrigger(QString)),
this, SLOT(setNumRows(QString)));
+ PopupMenu *maxintmenu = new PopupMenu("Int. Max", this);
+ d_menu->addAction(maxintmenu);
+ connect(maxintmenu, SIGNAL(whichTrigger(QString)),
+ this, SLOT(setMaxIntensity(QString)));
+
+ PopupMenu *minintmenu = new PopupMenu("Int. Min", this);
+ d_menu->addAction(minintmenu);
+ connect(minintmenu, SIGNAL(whichTrigger(QString)),
+ this, SLOT(setMinIntensity(QString)));
+
getPlot()->setIntensityRange(0, zmax);
Reset();
@@ -155,8 +165,6 @@ TimeRasterDisplayForm::newData(const QEvent *updateEvent)
const std::vector<double*> dataPoints = event->getPoints();
const uint64_t numDataPoints = event->getNumDataPoints();
- d_min_val = 10;
- d_max_val = -10;
for(size_t i=0; i < dataPoints.size(); i++) {
double *min_val = std::min_element(&dataPoints[i][0], &dataPoints[i][numDataPoints-1]);
double *max_val = std::max_element(&dataPoints[i][0], &dataPoints[i][numDataPoints-1]);
@@ -239,18 +247,36 @@ TimeRasterDisplayForm::setAlpha(int which, int alpha)
void
TimeRasterDisplayForm::setIntensityRange(const double minIntensity,
- const double maxIntensity)
+ const double maxIntensity)
{
+ // reset max and min values
+ d_min_val = 10;
+ d_max_val = -10;
+
+ d_cur_min_val = minIntensity;
+ d_cur_max_val = maxIntensity;
getPlot()->setIntensityRange(minIntensity, maxIntensity);
getPlot()->replot();
}
void
-TimeRasterDisplayForm::autoScale(bool en)
+TimeRasterDisplayForm::setMaxIntensity(const QString &m)
{
- double min_int = d_min_val;
- double max_int = d_max_val;
+ double new_max = m.toDouble();
+ if(new_max > d_cur_min_val)
+ setIntensityRange(d_cur_min_val, new_max);
+}
- getPlot()->setIntensityRange(min_int, max_int);
- getPlot()->replot();
+void
+TimeRasterDisplayForm::setMinIntensity(const QString &m)
+{
+ double new_min = m.toDouble();
+ if(new_min < d_cur_max_val)
+ setIntensityRange(new_min, d_cur_max_val);
+}
+
+void
+TimeRasterDisplayForm::autoScale(bool en)
+{
+ setIntensityRange(d_min_val, d_max_val);
}
diff --git a/gr-qtgui/lib/waterfalldisplayform.cc b/gr-qtgui/lib/waterfalldisplayform.cc
index 51f518f375..fdf09d9180 100644
--- a/gr-qtgui/lib/waterfalldisplayform.cc
+++ b/gr-qtgui/lib/waterfalldisplayform.cc
@@ -91,6 +91,16 @@ WaterfallDisplayForm::WaterfallDisplayForm(int nplots, QWidget* parent)
connect(d_winmenu, SIGNAL(whichTrigger(gr::filter::firdes::win_type)),
this, SLOT(setFFTWindowType(const gr::filter::firdes::win_type)));
+ PopupMenu *maxintmenu = new PopupMenu("Int. Max", this);
+ d_menu->addAction(maxintmenu);
+ connect(maxintmenu, SIGNAL(whichTrigger(QString)),
+ this, SLOT(setMaxIntensity(QString)));
+
+ PopupMenu *minintmenu = new PopupMenu("Int. Min", this);
+ d_menu->addAction(minintmenu);
+ connect(minintmenu, SIGNAL(whichTrigger(QString)),
+ this, SLOT(setMinIntensity(QString)));
+
Reset();
connect(d_display_plot, SIGNAL(plotPointSelected(const QPointF)),
@@ -119,8 +129,6 @@ WaterfallDisplayForm::newData(const QEvent *updateEvent)
const uint64_t numDataPoints = event->getNumDataPoints();
const gr::high_res_timer_type dataTimestamp = event->getDataTimestamp();
- d_min_val = 1000;
- d_max_val = -1000;
for(size_t i=0; i < dataPoints.size(); i++) {
double *min_val = std::min_element(&dataPoints[i][0], &dataPoints[i][numDataPoints-1]);
double *max_val = std::max_element(&dataPoints[i][0], &dataPoints[i][numDataPoints-1]);
@@ -257,18 +265,39 @@ void
WaterfallDisplayForm::setIntensityRange(const double minIntensity,
const double maxIntensity)
{
+ // reset max and min values
+ d_min_val = 1000;
+ d_max_val = -1000;
+
+ d_cur_min_val = minIntensity;
+ d_cur_max_val = maxIntensity;
getPlot()->setIntensityRange(minIntensity, maxIntensity);
getPlot()->replot();
}
void
+WaterfallDisplayForm::setMaxIntensity(const QString &m)
+{
+ double new_max = m.toDouble();
+ if(new_max > d_cur_min_val)
+ setIntensityRange(d_cur_min_val, new_max);
+}
+
+void
+WaterfallDisplayForm::setMinIntensity(const QString &m)
+{
+ double new_min = m.toDouble();
+ if(new_min < d_cur_max_val)
+ setIntensityRange(new_min, d_cur_max_val);
+}
+
+void
WaterfallDisplayForm::autoScale(bool en)
{
double min_int = d_min_val - 5;
double max_int = d_max_val + 10;
- getPlot()->setIntensityRange(min_int, max_int);
- getPlot()->replot();
+ setIntensityRange(min_int, max_int);
}
void
diff --git a/gr-trellis/examples/grc/CMakeLists.txt b/gr-trellis/examples/grc/CMakeLists.txt
index 46b825d888..9927215581 100644
--- a/gr-trellis/examples/grc/CMakeLists.txt
+++ b/gr-trellis/examples/grc/CMakeLists.txt
@@ -17,13 +17,40 @@
# the Free Software Foundation, Inc., 51 Franklin Street,
# Boston, MA 02110-1301, USA.
+## Configure GRC examples to point to the right fsm_files directory
+set(FSM_FILE_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/${GR_PKG_TRELLIS_EXAMPLES_DIR}/fsm_files/")
+configure_file(
+ "${CMAKE_CURRENT_LIST_DIR}/pccc.grc"
+ "${CMAKE_CURRENT_BINARY_DIR}/pccc.grc"
+)
+
+configure_file(
+ "${CMAKE_CURRENT_LIST_DIR}/pccc1.grc"
+ "${CMAKE_CURRENT_BINARY_DIR}/pccc1.grc"
+)
+
+configure_file(
+ "${CMAKE_CURRENT_LIST_DIR}/sccc.grc"
+ "${CMAKE_CURRENT_BINARY_DIR}/sccc.grc"
+)
+
+configure_file(
+ "${CMAKE_CURRENT_LIST_DIR}/sccc1.grc"
+ "${CMAKE_CURRENT_BINARY_DIR}/sccc1.grc"
+)
+
+configure_file(
+ "${CMAKE_CURRENT_LIST_DIR}/interference_cancellation.grc"
+ "${CMAKE_CURRENT_BINARY_DIR}/interference_cancellation.grc"
+)
+
install(
FILES
- interference_cancellation.grc
- pccc1.grc
- pccc.grc
- sccc1.grc
- sccc.grc
+ ${CMAKE_CURRENT_BINARY_DIR}/interference_cancellation.grc
+ ${CMAKE_CURRENT_BINARY_DIR}/pccc.grc
+ ${CMAKE_CURRENT_BINARY_DIR}/pccc1.grc
+ ${CMAKE_CURRENT_BINARY_DIR}/sccc1.grc
+ ${CMAKE_CURRENT_BINARY_DIR}/sccc.grc
readme.txt
DESTINATION ${GR_PKG_TRELLIS_EXAMPLES_DIR}
COMPONENT "trellis-examples"
diff --git a/gr-trellis/examples/grc/interference_cancellation.grc b/gr-trellis/examples/grc/interference_cancellation.grc
index 1c42a72f37..2ccc723235 100644
--- a/gr-trellis/examples/grc/interference_cancellation.grc
+++ b/gr-trellis/examples/grc/interference_cancellation.grc
@@ -1,6 +1,6 @@
<?xml version='1.0' encoding='ASCII'?>
<flow_graph>
- <timestamp>Sat Nov 10 15:39:57 2012</timestamp>
+ <timestamp>Mon Jul 28 14:00:18 2014</timestamp>
<block>
<key>options</key>
<param>
@@ -29,7 +29,7 @@
</param>
<param>
<key>generate_options</key>
- <value>wx_gui</value>
+ <value>qt_gui</value>
</param>
<param>
<key>category</key>
@@ -52,6 +52,10 @@
<value></value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(10, 10)</value>
</param>
@@ -61,54 +65,26 @@
</param>
</block>
<block>
- <key>variable_slider</key>
+ <key>variable</key>
<param>
<key>id</key>
- <value>alpha</value>
+ <value>prefix</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>label</key>
- <value>P1/P</value>
- </param>
- <param>
<key>value</key>
- <value>0.6</value>
- </param>
- <param>
- <key>min</key>
- <value>0</value>
+ <value>"@FSM_FILE_INSTALL_DIR@"</value>
</param>
<param>
- <key>max</key>
- <value>1.0</value>
- </param>
- <param>
- <key>num_steps</key>
- <value>100</value>
- </param>
- <param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
- </param>
- <param>
- <key>converver</key>
- <value>float_converter</value>
- </param>
- <param>
- <key>grid_pos</key>
- <value></value>
- </param>
- <param>
- <key>notebook</key>
+ <key>alias</key>
<value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(243, 11)</value>
+ <value>(660, 11)</value>
</param>
<param>
<key>_rotation</key>
@@ -116,54 +92,53 @@
</param>
</block>
<block>
- <key>variable_slider</key>
+ <key>variable</key>
<param>
<key>id</key>
- <value>snr_db</value>
+ <value>block</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>label</key>
- <value>P/sigma^2 (dB)</value>
- </param>
- <param>
<key>value</key>
- <value>16</value>
+ <value>1000</value>
</param>
<param>
- <key>min</key>
- <value>0</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>max</key>
- <value>20</value>
+ <key>_coordinate</key>
+ <value>(583, 10)</value>
</param>
<param>
- <key>num_steps</key>
- <value>100</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
+ </block>
+ <block>
+ <key>variable</key>
<param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
+ <key>id</key>
+ <value>R</value>
</param>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>grid_pos</key>
- <value></value>
+ <key>value</key>
+ <value>100e3</value>
</param>
<param>
- <key>notebook</key>
+ <key>alias</key>
<value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(447, 14)</value>
+ <value>(502, 10)</value>
</param>
<param>
<key>_rotation</key>
@@ -185,8 +160,12 @@
<value>10**(-snr_db/10)</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(637, 13)</value>
+ <value>(428, 10)</value>
</param>
<param>
<key>_rotation</key>
@@ -224,6 +203,22 @@
<value>True</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(21, 170)</value>
</param>
@@ -263,6 +258,22 @@
<value>True</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(25, 291)</value>
</param>
@@ -294,6 +305,22 @@
<value>2</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(536, 529)</value>
</param>
@@ -325,35 +352,24 @@
<value>1</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(771, 525)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>blocks_short_to_float</key>
- <param>
- <key>id</key>
- <value>blocks_short_to_float_0</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>scale</key>
- <value>1</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(994, 545)</value>
+ <value>(771, 525)</value>
</param>
<param>
<key>_rotation</key>
@@ -383,6 +399,22 @@
<value>2</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(535, 792)</value>
</param>
@@ -392,10 +424,10 @@
</param>
</block>
<block>
- <key>blocks_multiply_xx</key>
+ <key>blocks_sub_xx</key>
<param>
<key>id</key>
- <value>blocks_multiply_xx_1</value>
+ <value>blocks_sub_xx_2</value>
</param>
<param>
<key>_enabled</key>
@@ -403,19 +435,35 @@
</param>
<param>
<key>type</key>
- <value>short</value>
+ <value>complex</value>
+ </param>
+ <param>
+ <key>vlen</key>
+ <value>1</value>
</param>
<param>
<key>num_inputs</key>
<value>2</value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(785, 779)</value>
+ <value>(944, 978)</value>
</param>
<param>
<key>_rotation</key>
@@ -423,26 +471,46 @@
</param>
</block>
<block>
- <key>blocks_short_to_float</key>
+ <key>blocks_sub_xx</key>
<param>
<key>id</key>
- <value>blocks_short_to_float_2</value>
+ <value>blocks_sub_xx_1</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
+ <key>type</key>
+ <value>short</value>
+ </param>
+ <param>
<key>vlen</key>
<value>1</value>
</param>
<param>
- <key>scale</key>
- <value>1</value>
+ <key>num_inputs</key>
+ <value>2</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(1005, 798)</value>
+ <value>(540, 1141)</value>
</param>
<param>
<key>_rotation</key>
@@ -453,7 +521,7 @@
<key>blocks_sub_xx</key>
<param>
<key>id</key>
- <value>blocks_sub_xx_2</value>
+ <value>blocks_sub_xx_2_0</value>
</param>
<param>
<key>_enabled</key>
@@ -472,8 +540,24 @@
<value>2</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(944, 978)</value>
+ <value>(975, 1342)</value>
</param>
<param>
<key>_rotation</key>
@@ -484,7 +568,7 @@
<key>blocks_sub_xx</key>
<param>
<key>id</key>
- <value>blocks_sub_xx_1</value>
+ <value>blocks_sub_xx_1_0</value>
</param>
<param>
<key>_enabled</key>
@@ -503,8 +587,24 @@
<value>2</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(540, 1141)</value>
+ <value>(559, 1536)</value>
</param>
<param>
<key>_rotation</key>
@@ -512,10 +612,10 @@
</param>
</block>
<block>
- <key>blocks_multiply_xx</key>
+ <key>blocks_add_xx</key>
<param>
<key>id</key>
- <value>blocks_multiply_xx_2</value>
+ <value>blocks_add_xx_0</value>
</param>
<param>
<key>_enabled</key>
@@ -523,7 +623,7 @@
</param>
<param>
<key>type</key>
- <value>short</value>
+ <value>complex</value>
</param>
<param>
<key>num_inputs</key>
@@ -534,35 +634,24 @@
<value>1</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(796, 1136)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>blocks_short_to_float</key>
- <param>
- <key>id</key>
- <value>blocks_short_to_float_1</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>scale</key>
- <value>1</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(1009, 1156)</value>
+ <value>(1224, 245)</value>
</param>
<param>
<key>_rotation</key>
@@ -570,10 +659,10 @@
</param>
</block>
<block>
- <key>blocks_sub_xx</key>
+ <key>analog_noise_source_x</key>
<param>
<key>id</key>
- <value>blocks_sub_xx_2_0</value>
+ <value>analog_noise_source_x_0</value>
</param>
<param>
<key>_enabled</key>
@@ -584,16 +673,36 @@
<value>complex</value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>noise_type</key>
+ <value>analog.GR_GAUSSIAN</value>
</param>
<param>
- <key>num_inputs</key>
- <value>2</value>
+ <key>amp</key>
+ <value>noisevar</value>
+ </param>
+ <param>
+ <key>seed</key>
+ <value>-42</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(975, 1342)</value>
+ <value>(1178, 321)</value>
</param>
<param>
<key>_rotation</key>
@@ -601,10 +710,10 @@
</param>
</block>
<block>
- <key>blocks_sub_xx</key>
+ <key>blocks_throttle</key>
<param>
<key>id</key>
- <value>blocks_sub_xx_1_0</value>
+ <value>blocks_throttle_0</value>
</param>
<param>
<key>_enabled</key>
@@ -615,16 +724,36 @@
<value>short</value>
</param>
<param>
+ <key>samples_per_second</key>
+ <value>R</value>
+ </param>
+ <param>
<key>vlen</key>
<value>1</value>
</param>
<param>
- <key>num_inputs</key>
- <value>2</value>
+ <key>ignoretag</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(559, 1536)</value>
+ <value>(579, 143)</value>
</param>
<param>
<key>_rotation</key>
@@ -632,10 +761,10 @@
</param>
</block>
<block>
- <key>blocks_multiply_xx</key>
+ <key>blocks_multiply_const_vxx</key>
<param>
<key>id</key>
- <value>blocks_multiply_xx_2_0</value>
+ <value>blocks_multiply_const_vxx_0</value>
</param>
<param>
<key>_enabled</key>
@@ -643,19 +772,35 @@
</param>
<param>
<key>type</key>
- <value>short</value>
+ <value>complex</value>
</param>
<param>
- <key>num_inputs</key>
- <value>2</value>
+ <key>const</key>
+ <value>alpha**0.5</value>
</param>
<param>
<key>vlen</key>
<value>1</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(771, 1530)</value>
+ <value>(988, 196)</value>
</param>
<param>
<key>_rotation</key>
@@ -663,26 +808,54 @@
</param>
</block>
<block>
- <key>blocks_short_to_float</key>
+ <key>digital_chunks_to_symbols_xx</key>
<param>
<key>id</key>
- <value>blocks_short_to_float_1_0</value>
+ <value>digital_chunks_to_symbols_xx_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>vlen</key>
+ <key>in_type</key>
+ <value>short</value>
+ </param>
+ <param>
+ <key>out_type</key>
+ <value>complex</value>
+ </param>
+ <param>
+ <key>symbol_table</key>
+ <value>1,1j,-1j,-1</value>
+ </param>
+ <param>
+ <key>dimension</key>
<value>1</value>
</param>
<param>
- <key>scale</key>
+ <key>num_ports</key>
<value>1</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(1010, 1551)</value>
+ <value>(703, 211)</value>
</param>
<param>
<key>_rotation</key>
@@ -690,10 +863,10 @@
</param>
</block>
<block>
- <key>trellis_viterbi_combined_xx</key>
+ <key>blocks_multiply_const_vxx</key>
<param>
<key>id</key>
- <value>trellis_viterbi_combined_xx_1</value>
+ <value>blocks_multiply_const_vxx_1</value>
</param>
<param>
<key>_enabled</key>
@@ -701,43 +874,35 @@
</param>
<param>
<key>type</key>
- <value>c</value>
- </param>
- <param>
- <key>out_type</key>
- <value>s</value>
- </param>
- <param>
- <key>fsm_args</key>
- <value>prefix+"gr-trellis/src/examples/fsm_files/awgn1o2_16.fsm"</value>
+ <value>complex</value>
</param>
<param>
- <key>block_size</key>
- <value>1000</value>
+ <key>const</key>
+ <value>(1-alpha)**0.5</value>
</param>
<param>
- <key>init_state</key>
- <value>-1</value>
+ <key>vlen</key>
+ <value>1</value>
</param>
<param>
- <key>final_state</key>
- <value>-1</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>dim</key>
- <value>1</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>table</key>
- <value>alpha**0.5*1,alpha**0.5*1j,alpha**0.5*(-1j),alpha**0.5*(-1)</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>metric_type</key>
- <value>digital.TRELLIS_EUCLIDEAN</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(79, 501)</value>
+ <value>(994, 319)</value>
</param>
<param>
<key>_rotation</key>
@@ -745,54 +910,54 @@
</param>
</block>
<block>
- <key>trellis_viterbi_combined_xx</key>
+ <key>digital_chunks_to_symbols_xx</key>
<param>
<key>id</key>
- <value>trellis_viterbi_combined_xx_2</value>
+ <value>digital_chunks_to_symbols_xx_0_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>c</value>
+ <key>in_type</key>
+ <value>short</value>
</param>
<param>
<key>out_type</key>
- <value>s</value>
+ <value>complex</value>
</param>
<param>
- <key>fsm_args</key>
- <value>prefix+"gr-trellis/src/examples/fsm_files/awgn1o2_16.fsm"</value>
+ <key>symbol_table</key>
+ <value>1,1j,-1j,-1</value>
</param>
<param>
- <key>block_size</key>
- <value>1000</value>
+ <key>dimension</key>
+ <value>1</value>
</param>
<param>
- <key>init_state</key>
- <value>-1</value>
+ <key>num_ports</key>
+ <value>1</value>
</param>
<param>
- <key>final_state</key>
- <value>-1</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>dim</key>
- <value>1</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>table</key>
- <value>(1-alpha)**0.5*1,(1-alpha)**0.5*1j,(1-alpha)**0.5*(-1j),(1-alpha)**0.5*(-1)</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>metric_type</key>
- <value>digital.TRELLIS_EUCLIDEAN</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(82, 766)</value>
+ <value>(703, 311)</value>
</param>
<param>
<key>_rotation</key>
@@ -800,54 +965,54 @@
</param>
</block>
<block>
- <key>trellis_viterbi_combined_xx</key>
+ <key>digital_chunks_to_symbols_xx</key>
<param>
<key>id</key>
- <value>trellis_viterbi_combined_xx_0</value>
+ <value>digital_chunks_to_symbols_xx_0_0_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>c</value>
+ <key>in_type</key>
+ <value>short</value>
</param>
<param>
<key>out_type</key>
- <value>s</value>
+ <value>complex</value>
</param>
<param>
- <key>fsm_args</key>
- <value>prefix+"gr-trellis/src/examples/fsm_files/awgn1o2_16.fsm"</value>
+ <key>symbol_table</key>
+ <value>1,1j,-1j,-1</value>
</param>
<param>
- <key>block_size</key>
- <value>1000</value>
+ <key>dimension</key>
+ <value>1</value>
</param>
<param>
- <key>init_state</key>
- <value>-1</value>
+ <key>num_ports</key>
+ <value>1</value>
</param>
<param>
- <key>final_state</key>
- <value>-1</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>dim</key>
- <value>1</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>table</key>
- <value>(1-alpha)**0.5*1,(1-alpha)**0.5*1j,(1-alpha)**0.5*(-1j),(1-alpha)**0.5*(-1)</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>metric_type</key>
- <value>digital.TRELLIS_EUCLIDEAN</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(83, 1111)</value>
+ <value>(418, 1000)</value>
</param>
<param>
<key>_rotation</key>
@@ -855,10 +1020,10 @@
</param>
</block>
<block>
- <key>trellis_viterbi_combined_xx</key>
+ <key>blocks_multiply_const_vxx</key>
<param>
<key>id</key>
- <value>trellis_viterbi_combined_xx_0_0</value>
+ <value>blocks_multiply_const_vxx_2</value>
</param>
<param>
<key>_enabled</key>
@@ -866,43 +1031,35 @@
</param>
<param>
<key>type</key>
- <value>c</value>
- </param>
- <param>
- <key>out_type</key>
- <value>s</value>
- </param>
- <param>
- <key>fsm_args</key>
- <value>prefix+"gr-trellis/src/examples/fsm_files/awgn1o2_16.fsm"</value>
+ <value>complex</value>
</param>
<param>
- <key>block_size</key>
- <value>1000</value>
+ <key>const</key>
+ <value>alpha**0.5</value>
</param>
<param>
- <key>init_state</key>
- <value>-1</value>
+ <key>vlen</key>
+ <value>1</value>
</param>
<param>
- <key>final_state</key>
- <value>-1</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>dim</key>
- <value>1</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>table</key>
- <value>alpha**0.5*1,alpha**0.5*1j,alpha**0.5*(-1j),alpha**0.5*(-1)</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>metric_type</key>
- <value>digital.TRELLIS_EUCLIDEAN</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(75, 1495)</value>
+ <value>(710, 1008)</value>
</param>
<param>
<key>_rotation</key>
@@ -910,10 +1067,10 @@
</param>
</block>
<block>
- <key>wxgui_scopesink2</key>
+ <key>blocks_multiply_const_vxx</key>
<param>
<key>id</key>
- <value>wxgui_scopesink2_0</value>
+ <value>blocks_multiply_const_vxx_2_0</value>
</param>
<param>
<key>_enabled</key>
@@ -924,60 +1081,87 @@
<value>complex</value>
</param>
<param>
- <key>title</key>
- <value>Scope Plot</value>
+ <key>const</key>
+ <value>(1-alpha)**0.5</value>
</param>
<param>
- <key>samp_rate</key>
- <value>R</value>
+ <key>vlen</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>v_scale</key>
+ <key>minoutbuf</key>
<value>0</value>
</param>
<param>
- <key>v_offset</key>
+ <key>maxoutbuf</key>
<value>0</value>
</param>
<param>
- <key>t_scale</key>
+ <key>_coordinate</key>
+ <value>(733, 1374)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
<value>0</value>
</param>
+ </block>
+ <block>
+ <key>digital_chunks_to_symbols_xx</key>
<param>
- <key>ac_couple</key>
- <value>False</value>
+ <key>id</key>
+ <value>digital_chunks_to_symbols_xx_0_0_1</value>
</param>
<param>
- <key>xy_mode</key>
+ <key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>num_inputs</key>
+ <key>in_type</key>
+ <value>short</value>
+ </param>
+ <param>
+ <key>out_type</key>
+ <value>complex</value>
+ </param>
+ <param>
+ <key>symbol_table</key>
+ <value>1,1j,-1j,-1</value>
+ </param>
+ <param>
+ <key>dimension</key>
<value>1</value>
</param>
<param>
- <key>win_size</key>
- <value></value>
+ <key>num_ports</key>
+ <value>1</value>
</param>
<param>
- <key>grid_pos</key>
+ <key>alias</key>
<value></value>
</param>
<param>
- <key>notebook</key>
+ <key>affinity</key>
<value></value>
</param>
<param>
- <key>trig_mode</key>
- <value>wxgui.TRIG_MODE_AUTO</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>y_axis_label</key>
- <value>Counts</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(1533, 149)</value>
+ <value>(420, 1366)</value>
</param>
<param>
<key>_rotation</key>
@@ -985,76 +1169,164 @@
</param>
</block>
<block>
- <key>variable</key>
+ <key>variable_qtgui_range</key>
<param>
<key>id</key>
- <value>prefix</value>
+ <value>alpha</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
+ <key>label</key>
+ <value>P1/P</value>
+ </param>
+ <param>
<key>value</key>
- <value>"/n/harrisville/x/anastas/gnuradio_trunk/"</value>
+ <value>0.6</value>
+ </param>
+ <param>
+ <key>start</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>stop</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>step</key>
+ <value>0.01</value>
+ </param>
+ <param>
+ <key>widget</key>
+ <value>counter_slider</value>
+ </param>
+ <param>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
+ </param>
+ <param>
+ <key>min_len</key>
+ <value>200</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value></value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(871, 14)</value>
+ <value>(177, 10)</value>
</param>
<param>
<key>_rotation</key>
- <value>0</value>
+ <value>180</value>
</param>
</block>
<block>
- <key>trellis_encoder_xx</key>
+ <key>variable_qtgui_range</key>
<param>
<key>id</key>
- <value>trellis_encoder_xx_0</value>
+ <value>snr_db</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>ss</value>
+ <key>label</key>
+ <value>P/sigma^2 (dB)</value>
</param>
<param>
- <key>fsm_args</key>
- <value>prefix+"gr-trellis/src/examples/fsm_files/awgn1o2_16.fsm"</value>
+ <key>value</key>
+ <value>16</value>
</param>
<param>
- <key>init_state</key>
+ <key>start</key>
<value>0</value>
</param>
<param>
+ <key>stop</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>step</key>
+ <value>0.01</value>
+ </param>
+ <param>
+ <key>widget</key>
+ <value>counter_slider</value>
+ </param>
+ <param>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
+ </param>
+ <param>
+ <key>min_len</key>
+ <value>200</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value></value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(340, 187)</value>
+ <value>(300, 10)</value>
</param>
<param>
<key>_rotation</key>
- <value>0</value>
+ <value>180</value>
</param>
</block>
<block>
- <key>variable</key>
+ <key>blocks_add_xx</key>
<param>
<key>id</key>
- <value>R</value>
+ <value>blocks_add_xx_1</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>100e3</value>
+ <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>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(748, 12)</value>
+ <value>(1400, 262)</value>
</param>
<param>
<key>_rotation</key>
@@ -1062,10 +1334,10 @@
</param>
</block>
<block>
- <key>wxgui_numbersink2</key>
+ <key>qtgui_const_sink_x</key>
<param>
<key>id</key>
- <value>wxgui_numbersink2_0</value>
+ <value>qtgui_const_sink_x_0</value>
</param>
<param>
<key>_enabled</key>
@@ -1073,249 +1345,366 @@
</param>
<param>
<key>type</key>
- <value>float</value>
+ <value>complex</value>
</param>
<param>
- <key>title</key>
- <value>BER 1 (raw)</value>
+ <key>name</key>
+ <value>Constellation</value>
</param>
<param>
- <key>units</key>
- <value>BER</value>
+ <key>size</key>
+ <value>1024</value>
</param>
<param>
- <key>samp_rate</key>
- <value>R</value>
+ <key>grid</key>
+ <value>False</value>
</param>
<param>
- <key>min_value</key>
- <value>0</value>
+ <key>autoscale</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>ymin</key>
+ <value>-2</value>
+ </param>
+ <param>
+ <key>ymax</key>
+ <value>2</value>
+ </param>
+ <param>
+ <key>xmin</key>
+ <value>-2</value>
</param>
<param>
- <key>max_value</key>
+ <key>xmax</key>
+ <value>2</value>
+ </param>
+ <param>
+ <key>nconnections</key>
<value>1</value>
</param>
<param>
- <key>factor</key>
- <value>1.0</value>
+ <key>update_time</key>
+ <value>0.10</value>
</param>
<param>
- <key>decimal_places</key>
- <value>6</value>
+ <key>gui_hint</key>
+ <value></value>
+ </param>
+ <param>
+ <key>tr_mode</key>
+ <value>qtgui.TRIG_MODE_FREE</value>
</param>
<param>
- <key>ref_level</key>
+ <key>tr_slope</key>
+ <value>qtgui.TRIG_SLOPE_POS</value>
+ </param>
+ <param>
+ <key>tr_level</key>
+ <value>0.0</value>
+ </param>
+ <param>
+ <key>tr_chan</key>
<value>0</value>
</param>
<param>
- <key>number_rate</key>
- <value>15</value>
+ <key>tr_tag</key>
+ <value>""</value>
</param>
<param>
- <key>peak_hold</key>
- <value>False</value>
+ <key>label1</key>
+ <value></value>
</param>
<param>
- <key>average</key>
- <value>True</value>
+ <key>width1</key>
+ <value>1</value>
</param>
<param>
- <key>avg_alpha</key>
- <value>0.001</value>
+ <key>color1</key>
+ <value>"blue"</value>
</param>
<param>
- <key>show_gauge</key>
- <value>True</value>
+ <key>style1</key>
+ <value>0</value>
</param>
<param>
- <key>win_size</key>
- <value></value>
+ <key>marker1</key>
+ <value>0</value>
</param>
<param>
- <key>grid_pos</key>
- <value>0,0,1,1</value>
+ <key>alpha1</key>
+ <value>1.0</value>
</param>
<param>
- <key>notebook</key>
+ <key>label2</key>
<value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(1267, 410)</value>
+ <key>width2</key>
+ <value>1</value>
</param>
<param>
- <key>_rotation</key>
+ <key>color2</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>style2</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>wxgui_numbersink2</key>
<param>
- <key>id</key>
- <value>wxgui_numbersink2_2</value>
+ <key>marker2</key>
+ <value>0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>alpha2</key>
+ <value>1.0</value>
</param>
<param>
- <key>type</key>
- <value>float</value>
+ <key>label3</key>
+ <value></value>
</param>
<param>
- <key>title</key>
- <value>BER 2 (raw)</value>
+ <key>width3</key>
+ <value>1</value>
</param>
<param>
- <key>units</key>
- <value>BER</value>
+ <key>color3</key>
+ <value>"red"</value>
</param>
<param>
- <key>samp_rate</key>
- <value>R</value>
+ <key>style3</key>
+ <value>0</value>
</param>
<param>
- <key>min_value</key>
+ <key>marker3</key>
<value>0</value>
</param>
<param>
- <key>max_value</key>
+ <key>alpha3</key>
<value>1.0</value>
</param>
<param>
- <key>factor</key>
- <value>1.0</value>
+ <key>label4</key>
+ <value></value>
</param>
<param>
- <key>decimal_places</key>
- <value>6</value>
+ <key>width4</key>
+ <value>1</value>
</param>
<param>
- <key>ref_level</key>
+ <key>color4</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>style4</key>
<value>0</value>
</param>
<param>
- <key>number_rate</key>
- <value>15</value>
+ <key>marker4</key>
+ <value>0</value>
</param>
<param>
- <key>peak_hold</key>
- <value>False</value>
+ <key>alpha4</key>
+ <value>1.0</value>
</param>
<param>
- <key>average</key>
- <value>True</value>
+ <key>label5</key>
+ <value></value>
</param>
<param>
- <key>avg_alpha</key>
- <value>0.001</value>
+ <key>width5</key>
+ <value>1</value>
</param>
<param>
- <key>show_gauge</key>
- <value>True</value>
+ <key>color5</key>
+ <value>"red"</value>
</param>
<param>
- <key>win_size</key>
+ <key>style5</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>marker5</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>alpha5</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label6</key>
<value></value>
</param>
<param>
- <key>grid_pos</key>
- <value>0,1,1,1</value>
+ <key>width6</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color6</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>style6</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>marker6</key>
+ <value>0</value>
</param>
<param>
- <key>notebook</key>
+ <key>alpha6</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label7</key>
<value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(1260, 659)</value>
+ <key>width7</key>
+ <value>1</value>
</param>
<param>
- <key>_rotation</key>
+ <key>color7</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>style7</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>wxgui_numbersink2</key>
<param>
- <key>id</key>
- <value>wxgui_numbersink2_3</value>
+ <key>marker7</key>
+ <value>0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>alpha7</key>
+ <value>1.0</value>
</param>
<param>
- <key>type</key>
- <value>float</value>
+ <key>label8</key>
+ <value></value>
</param>
<param>
- <key>title</key>
- <value>BER 2 (after cancelling user 1)</value>
+ <key>width8</key>
+ <value>1</value>
</param>
<param>
- <key>units</key>
- <value>BER</value>
+ <key>color8</key>
+ <value>"red"</value>
</param>
<param>
- <key>samp_rate</key>
- <value>R</value>
+ <key>style8</key>
+ <value>0</value>
</param>
<param>
- <key>min_value</key>
+ <key>marker8</key>
<value>0</value>
</param>
<param>
- <key>max_value</key>
+ <key>alpha8</key>
<value>1.0</value>
</param>
<param>
- <key>factor</key>
+ <key>label9</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color9</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>style9</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>marker9</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>alpha9</key>
<value>1.0</value>
</param>
<param>
- <key>decimal_places</key>
- <value>6</value>
+ <key>label10</key>
+ <value></value>
</param>
<param>
- <key>ref_level</key>
+ <key>width10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color10</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>style10</key>
<value>0</value>
</param>
<param>
- <key>number_rate</key>
- <value>15</value>
+ <key>marker10</key>
+ <value>0</value>
</param>
<param>
- <key>peak_hold</key>
- <value>False</value>
+ <key>alpha10</key>
+ <value>1.0</value>
</param>
<param>
- <key>average</key>
- <value>True</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>avg_alpha</key>
- <value>0.001</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>show_gauge</key>
+ <key>_coordinate</key>
+ <value>(0, 0)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>blocks_short_to_float</key>
+ <param>
+ <key>id</key>
+ <value>blocks_short_to_float_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>win_size</key>
- <value></value>
+ <key>vlen</key>
+ <value>1</value>
</param>
<param>
- <key>grid_pos</key>
- <value>1,1,1,1</value>
+ <key>scale</key>
+ <value>1</value>
</param>
<param>
- <key>notebook</key>
+ <key>alias</key>
<value></value>
</param>
<param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(1262, 1020)</value>
+ <value>(1010, 1551)</value>
</param>
<param>
<key>_rotation</key>
@@ -1323,86 +1712,226 @@
</param>
</block>
<block>
- <key>wxgui_numbersink2</key>
+ <key>qtgui_number_sink</key>
<param>
<key>id</key>
- <value>wxgui_numbersink2_3_0</value>
+ <value>qtgui_number_sink_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
+ <key>name</key>
+ <value>""</value>
+ </param>
+ <param>
<key>type</key>
<value>float</value>
</param>
<param>
- <key>title</key>
- <value>BER 1 (after cancelling user 2)</value>
+ <key>autoscale</key>
+ <value>False</value>
</param>
<param>
- <key>units</key>
- <value>BER</value>
+ <key>avg</key>
+ <value>0.001</value>
</param>
<param>
- <key>samp_rate</key>
- <value>R</value>
+ <key>graph_type</key>
+ <value>qtgui.NUM_GRAPH_HORIZ</value>
</param>
<param>
- <key>min_value</key>
- <value>0</value>
+ <key>nconnections</key>
+ <value>1</value>
</param>
<param>
- <key>max_value</key>
- <value>1.0</value>
+ <key>min</key>
+ <value>-1</value>
</param>
<param>
- <key>factor</key>
- <value>1.0</value>
+ <key>max</key>
+ <value>1</value>
</param>
<param>
- <key>decimal_places</key>
- <value>6</value>
+ <key>update_time</key>
+ <value>0.10</value>
</param>
<param>
- <key>ref_level</key>
- <value>0</value>
+ <key>gui_hint</key>
+ <value>0,0,1,1</value>
</param>
<param>
- <key>number_rate</key>
- <value>15</value>
+ <key>label1</key>
+ <value></value>
</param>
<param>
- <key>peak_hold</key>
- <value>False</value>
+ <key>unit1</key>
+ <value></value>
</param>
<param>
- <key>average</key>
- <value>True</value>
+ <key>color1</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>avg_alpha</key>
- <value>0.001</value>
+ <key>factor1</key>
+ <value>1</value>
</param>
<param>
- <key>show_gauge</key>
- <value>True</value>
+ <key>label2</key>
+ <value></value>
</param>
<param>
- <key>win_size</key>
+ <key>unit2</key>
<value></value>
</param>
<param>
- <key>grid_pos</key>
- <value>1,0,1,1</value>
+ <key>color2</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor2</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>label3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>unit3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color3</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor3</key>
+ <value>1</value>
</param>
<param>
- <key>notebook</key>
+ <key>label4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>unit4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color4</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor4</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>label5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>unit5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color5</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor5</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>label6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>unit6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color6</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor6</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>label7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>unit7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color7</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor7</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>label8</key>
+ <value></value>
+ </param>
+ <param>
+ <key>unit8</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color8</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>label9</key>
+ <value></value>
+ </param>
+ <param>
+ <key>unit9</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color9</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>label10</key>
+ <value></value>
+ </param>
+ <param>
+ <key>unit10</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color10</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
<value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(1269, 1417)</value>
+ <value>(1257, 471)</value>
</param>
<param>
<key>_rotation</key>
@@ -1410,10 +1939,10 @@
</param>
</block>
<block>
- <key>blocks_add_xx</key>
+ <key>trellis_encoder_xx</key>
<param>
<key>id</key>
- <value>blocks_add_xx_1</value>
+ <value>trellis_encoder_xx_1</value>
</param>
<param>
<key>_enabled</key>
@@ -1421,19 +1950,35 @@
</param>
<param>
<key>type</key>
- <value>complex</value>
+ <value>ss</value>
</param>
<param>
- <key>num_inputs</key>
- <value>2</value>
+ <key>fsm_args</key>
+ <value>prefix+"/awgn1o2_16.fsm"</value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>init_state</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(1400, 262)</value>
+ <value>(336, 311)</value>
</param>
<param>
<key>_rotation</key>
@@ -1441,10 +1986,10 @@
</param>
</block>
<block>
- <key>blocks_add_xx</key>
+ <key>trellis_encoder_xx</key>
<param>
<key>id</key>
- <value>blocks_add_xx_0</value>
+ <value>trellis_encoder_xx_0</value>
</param>
<param>
<key>_enabled</key>
@@ -1452,19 +1997,35 @@
</param>
<param>
<key>type</key>
- <value>complex</value>
+ <value>ss</value>
</param>
<param>
- <key>num_inputs</key>
- <value>2</value>
+ <key>fsm_args</key>
+ <value>prefix+"/awgn1o2_16.fsm"</value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>init_state</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(1224, 245)</value>
+ <value>(340, 187)</value>
</param>
<param>
<key>_rotation</key>
@@ -1472,10 +2033,10 @@
</param>
</block>
<block>
- <key>analog_noise_source_x</key>
+ <key>trellis_viterbi_combined_xx</key>
<param>
<key>id</key>
- <value>analog_noise_source_x_0</value>
+ <value>trellis_viterbi_combined_xx_1</value>
</param>
<param>
<key>_enabled</key>
@@ -1483,23 +2044,59 @@
</param>
<param>
<key>type</key>
- <value>complex</value>
+ <value>c</value>
</param>
<param>
- <key>noise_type</key>
- <value>analog.GR_GAUSSIAN</value>
+ <key>out_type</key>
+ <value>s</value>
</param>
<param>
- <key>amp</key>
- <value>noisevar</value>
+ <key>fsm_args</key>
+ <value>prefix+"/awgn1o2_16.fsm"</value>
</param>
<param>
- <key>seed</key>
- <value>-42</value>
+ <key>block_size</key>
+ <value>1000</value>
+ </param>
+ <param>
+ <key>init_state</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>final_state</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>dim</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>table</key>
+ <value>alpha**0.5*1,alpha**0.5*1j,alpha**0.5*(-1j),alpha**0.5*(-1)</value>
+ </param>
+ <param>
+ <key>metric_type</key>
+ <value>digital.TRELLIS_EUCLIDEAN</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(1178, 321)</value>
+ <value>(79, 501)</value>
</param>
<param>
<key>_rotation</key>
@@ -1507,10 +2104,10 @@
</param>
</block>
<block>
- <key>blocks_throttle</key>
+ <key>trellis_viterbi_combined_xx</key>
<param>
<key>id</key>
- <value>blocks_throttle_0</value>
+ <value>trellis_viterbi_combined_xx_2</value>
</param>
<param>
<key>_enabled</key>
@@ -1518,19 +2115,59 @@
</param>
<param>
<key>type</key>
- <value>short</value>
+ <value>c</value>
</param>
<param>
- <key>samples_per_second</key>
- <value>R</value>
+ <key>out_type</key>
+ <value>s</value>
</param>
<param>
- <key>vlen</key>
+ <key>fsm_args</key>
+ <value>prefix+"/awgn1o2_16.fsm"</value>
+ </param>
+ <param>
+ <key>block_size</key>
+ <value>1000</value>
+ </param>
+ <param>
+ <key>init_state</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>final_state</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>dim</key>
<value>1</value>
</param>
<param>
+ <key>table</key>
+ <value>(1-alpha)**0.5*1,(1-alpha)**0.5*1j,(1-alpha)**0.5*(-1j),(1-alpha)**0.5*(-1)</value>
+ </param>
+ <param>
+ <key>metric_type</key>
+ <value>digital.TRELLIS_EUCLIDEAN</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(579, 143)</value>
+ <value>(82, 766)</value>
</param>
<param>
<key>_rotation</key>
@@ -1538,10 +2175,10 @@
</param>
</block>
<block>
- <key>blocks_multiply_const_vxx</key>
+ <key>trellis_viterbi_combined_xx</key>
<param>
<key>id</key>
- <value>blocks_multiply_const_vxx_0</value>
+ <value>trellis_viterbi_combined_xx_0</value>
</param>
<param>
<key>_enabled</key>
@@ -1549,19 +2186,59 @@
</param>
<param>
<key>type</key>
- <value>complex</value>
+ <value>c</value>
</param>
<param>
- <key>const</key>
- <value>alpha**0.5</value>
+ <key>out_type</key>
+ <value>s</value>
</param>
<param>
- <key>vlen</key>
+ <key>fsm_args</key>
+ <value>prefix+"/awgn1o2_16.fsm"</value>
+ </param>
+ <param>
+ <key>block_size</key>
+ <value>1000</value>
+ </param>
+ <param>
+ <key>init_state</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>final_state</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>dim</key>
<value>1</value>
</param>
<param>
+ <key>table</key>
+ <value>(1-alpha)**0.5*1,(1-alpha)**0.5*1j,(1-alpha)**0.5*(-1j),(1-alpha)**0.5*(-1)</value>
+ </param>
+ <param>
+ <key>metric_type</key>
+ <value>digital.TRELLIS_EUCLIDEAN</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(988, 196)</value>
+ <value>(83, 1111)</value>
</param>
<param>
<key>_rotation</key>
@@ -1569,38 +2246,70 @@
</param>
</block>
<block>
- <key>digital_chunks_to_symbols_xx</key>
+ <key>trellis_viterbi_combined_xx</key>
<param>
<key>id</key>
- <value>digital_chunks_to_symbols_xx_0</value>
+ <value>trellis_viterbi_combined_xx_0_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>in_type</key>
- <value>short</value>
+ <key>type</key>
+ <value>c</value>
</param>
<param>
<key>out_type</key>
- <value>complex</value>
+ <value>s</value>
</param>
<param>
- <key>symbol_table</key>
- <value>1,1j,-1j,-1</value>
+ <key>fsm_args</key>
+ <value>prefix+"/awgn1o2_16.fsm"</value>
</param>
<param>
- <key>dimension</key>
- <value>1</value>
+ <key>block_size</key>
+ <value>1000</value>
</param>
<param>
- <key>num_ports</key>
+ <key>init_state</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>final_state</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>dim</key>
<value>1</value>
</param>
<param>
+ <key>table</key>
+ <value>alpha**0.5*1,alpha**0.5*1j,alpha**0.5*(-1j),alpha**0.5*(-1)</value>
+ </param>
+ <param>
+ <key>metric_type</key>
+ <value>digital.TRELLIS_EUCLIDEAN</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(703, 211)</value>
+ <value>(75, 1495)</value>
</param>
<param>
<key>_rotation</key>
@@ -1608,10 +2317,10 @@
</param>
</block>
<block>
- <key>blocks_multiply_const_vxx</key>
+ <key>blocks_multiply_xx</key>
<param>
<key>id</key>
- <value>blocks_multiply_const_vxx_1</value>
+ <value>blocks_multiply_xx_2_0</value>
</param>
<param>
<key>_enabled</key>
@@ -1619,19 +2328,35 @@
</param>
<param>
<key>type</key>
- <value>complex</value>
+ <value>short</value>
</param>
<param>
- <key>const</key>
- <value>(1-alpha)**0.5</value>
+ <key>num_inputs</key>
+ <value>2</value>
</param>
<param>
<key>vlen</key>
<value>1</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(994, 319)</value>
+ <value>(771, 1530)</value>
</param>
<param>
<key>_rotation</key>
@@ -1639,30 +2364,42 @@
</param>
</block>
<block>
- <key>trellis_encoder_xx</key>
+ <key>blocks_short_to_float</key>
<param>
<key>id</key>
- <value>trellis_encoder_xx_1</value>
+ <value>blocks_short_to_float_1</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>ss</value>
+ <key>vlen</key>
+ <value>1</value>
</param>
<param>
- <key>fsm_args</key>
- <value>prefix+"gr-trellis/src/examples/fsm_files/awgn1o2_16.fsm"</value>
+ <key>scale</key>
+ <value>1</value>
</param>
<param>
- <key>init_state</key>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
<value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(336, 311)</value>
+ <value>(985, 1608)</value>
</param>
<param>
<key>_rotation</key>
@@ -1670,38 +2407,226 @@
</param>
</block>
<block>
- <key>digital_chunks_to_symbols_xx</key>
+ <key>qtgui_number_sink</key>
<param>
<key>id</key>
- <value>digital_chunks_to_symbols_xx_0_0</value>
+ <value>qtgui_number_sink_0_0_0_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>in_type</key>
- <value>short</value>
+ <key>name</key>
+ <value>""</value>
</param>
<param>
- <key>out_type</key>
- <value>complex</value>
+ <key>type</key>
+ <value>float</value>
</param>
<param>
- <key>symbol_table</key>
- <value>1,1j,-1j,-1</value>
+ <key>autoscale</key>
+ <value>False</value>
</param>
<param>
- <key>dimension</key>
+ <key>avg</key>
+ <value>0.001</value>
+ </param>
+ <param>
+ <key>graph_type</key>
+ <value>qtgui.NUM_GRAPH_HORIZ</value>
+ </param>
+ <param>
+ <key>nconnections</key>
<value>1</value>
</param>
<param>
- <key>num_ports</key>
+ <key>min</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>max</key>
<value>1</value>
</param>
<param>
+ <key>update_time</key>
+ <value>0.10</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value>1,0,1,1</value>
+ </param>
+ <param>
+ <key>label1</key>
+ <value>BER 2 (raw)</value>
+ </param>
+ <param>
+ <key>unit1</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color1</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor1</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>label2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>unit2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color2</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor2</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>label3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>unit3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color3</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor3</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>label4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>unit4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color4</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor4</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>label5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>unit5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color5</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor5</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>label6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>unit6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color6</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor6</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>label7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>unit7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color7</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor7</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>label8</key>
+ <value></value>
+ </param>
+ <param>
+ <key>unit8</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color8</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>label9</key>
+ <value></value>
+ </param>
+ <param>
+ <key>unit9</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color9</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>label10</key>
+ <value></value>
+ </param>
+ <param>
+ <key>unit10</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color10</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(703, 311)</value>
+ <value>(1272, 1551)</value>
</param>
<param>
<key>_rotation</key>
@@ -1709,38 +2634,89 @@
</param>
</block>
<block>
- <key>digital_chunks_to_symbols_xx</key>
+ <key>blocks_multiply_xx</key>
<param>
<key>id</key>
- <value>digital_chunks_to_symbols_xx_0_0_0</value>
+ <value>blocks_multiply_xx_1</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>in_type</key>
+ <key>type</key>
<value>short</value>
</param>
<param>
- <key>out_type</key>
- <value>complex</value>
+ <key>num_inputs</key>
+ <value>2</value>
</param>
<param>
- <key>symbol_table</key>
- <value>1,1j,-1j,-1</value>
+ <key>vlen</key>
+ <value>1</value>
</param>
<param>
- <key>dimension</key>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(785, 779)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>blocks_short_to_float</key>
+ <param>
+ <key>id</key>
+ <value>blocks_short_to_float_2</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>vlen</key>
<value>1</value>
</param>
<param>
- <key>num_ports</key>
+ <key>scale</key>
<value>1</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(418, 1000)</value>
+ <value>(1013, 735)</value>
</param>
<param>
<key>_rotation</key>
@@ -1748,10 +2724,10 @@
</param>
</block>
<block>
- <key>blocks_multiply_const_vxx</key>
+ <key>blocks_multiply_xx</key>
<param>
<key>id</key>
- <value>blocks_multiply_const_vxx_2</value>
+ <value>blocks_multiply_xx_2</value>
</param>
<param>
<key>_enabled</key>
@@ -1759,19 +2735,35 @@
</param>
<param>
<key>type</key>
- <value>complex</value>
+ <value>short</value>
</param>
<param>
- <key>const</key>
- <value>alpha**0.5</value>
+ <key>num_inputs</key>
+ <value>2</value>
</param>
<param>
<key>vlen</key>
<value>1</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(710, 1008)</value>
+ <value>(796, 1136)</value>
</param>
<param>
<key>_rotation</key>
@@ -1779,30 +2771,42 @@
</param>
</block>
<block>
- <key>trellis_encoder_xx</key>
+ <key>blocks_short_to_float</key>
<param>
<key>id</key>
- <value>trellis_encoder_xx_2</value>
+ <value>blocks_short_to_float_3</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>ss</value>
+ <key>vlen</key>
+ <value>1</value>
</param>
<param>
- <key>fsm_args</key>
- <value>prefix+"gr-trellis/src/examples/fsm_files/awgn1o2_16.fsm"</value>
+ <key>scale</key>
+ <value>1</value>
</param>
<param>
- <key>init_state</key>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
<value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(89, 1000)</value>
+ <value>(1002, 1149)</value>
</param>
<param>
<key>_rotation</key>
@@ -1810,30 +2814,226 @@
</param>
</block>
<block>
- <key>blocks_multiply_const_vxx</key>
+ <key>qtgui_number_sink</key>
<param>
<key>id</key>
- <value>blocks_multiply_const_vxx_2_0</value>
+ <value>qtgui_number_sink_0_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
+ <key>name</key>
+ <value>""</value>
+ </param>
+ <param>
<key>type</key>
- <value>complex</value>
+ <value>float</value>
</param>
<param>
- <key>const</key>
- <value>(1-alpha)**0.5</value>
+ <key>autoscale</key>
+ <value>False</value>
</param>
<param>
- <key>vlen</key>
+ <key>avg</key>
+ <value>0.001</value>
+ </param>
+ <param>
+ <key>graph_type</key>
+ <value>qtgui.NUM_GRAPH_HORIZ</value>
+ </param>
+ <param>
+ <key>nconnections</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>min</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>max</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>update_time</key>
+ <value>0.10</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value>0,1,1,1</value>
+ </param>
+ <param>
+ <key>label1</key>
+ <value>BER 2 (raw)</value>
+ </param>
+ <param>
+ <key>unit1</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color1</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor1</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>label2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>unit2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color2</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor2</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>label3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>unit3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color3</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor3</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>label4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>unit4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color4</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor4</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>label5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>unit5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color5</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor5</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>label6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>unit6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color6</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor6</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>label7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>unit7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color7</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor7</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>label8</key>
+ <value></value>
+ </param>
+ <param>
+ <key>unit8</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color8</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>label9</key>
+ <value></value>
+ </param>
+ <param>
+ <key>unit9</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color9</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor9</key>
<value>1</value>
</param>
<param>
+ <key>label10</key>
+ <value></value>
+ </param>
+ <param>
+ <key>unit10</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color10</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(733, 1374)</value>
+ <value>(1223, 1133)</value>
</param>
<param>
<key>_rotation</key>
@@ -1856,13 +3056,29 @@
</param>
<param>
<key>fsm_args</key>
- <value>prefix+"gr-trellis/src/examples/fsm_files/awgn1o2_16.fsm"</value>
+ <value>prefix+"/awgn1o2_16.fsm"</value>
</param>
<param>
<key>init_state</key>
<value>0</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(103, 1366)</value>
</param>
@@ -1872,38 +3088,273 @@
</param>
</block>
<block>
- <key>digital_chunks_to_symbols_xx</key>
+ <key>trellis_encoder_xx</key>
<param>
<key>id</key>
- <value>digital_chunks_to_symbols_xx_0_0_1</value>
+ <value>trellis_encoder_xx_2</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>in_type</key>
- <value>short</value>
+ <key>type</key>
+ <value>ss</value>
</param>
<param>
- <key>out_type</key>
- <value>complex</value>
+ <key>fsm_args</key>
+ <value>prefix+"/awgn1o2_16.fsm"</value>
</param>
<param>
- <key>symbol_table</key>
- <value>1,1j,-1j,-1</value>
+ <key>init_state</key>
+ <value>0</value>
</param>
<param>
- <key>dimension</key>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(89, 1000)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>qtgui_number_sink</key>
+ <param>
+ <key>id</key>
+ <value>qtgui_number_sink_0_0_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>name</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>float</value>
+ </param>
+ <param>
+ <key>autoscale</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>avg</key>
+ <value>0.001</value>
+ </param>
+ <param>
+ <key>graph_type</key>
+ <value>qtgui.NUM_GRAPH_HORIZ</value>
+ </param>
+ <param>
+ <key>nconnections</key>
<value>1</value>
</param>
<param>
- <key>num_ports</key>
+ <key>min</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>max</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>update_time</key>
+ <value>0.10</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value>1,1,1,1</value>
+ </param>
+ <param>
+ <key>label1</key>
+ <value></value>
+ </param>
+ <param>
+ <key>unit1</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color1</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor1</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>label2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>unit2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color2</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor2</key>
<value>1</value>
</param>
<param>
+ <key>label3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>unit3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color3</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor3</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>label4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>unit4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color4</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor4</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>label5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>unit5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color5</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor5</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>label6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>unit6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color6</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor6</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>label7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>unit7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color7</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor7</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>label8</key>
+ <value></value>
+ </param>
+ <param>
+ <key>unit8</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color8</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>label9</key>
+ <value></value>
+ </param>
+ <param>
+ <key>unit9</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color9</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>label10</key>
+ <value></value>
+ </param>
+ <param>
+ <key>unit10</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color10</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(420, 1366)</value>
+ <value>(1266, 720)</value>
</param>
<param>
<key>_rotation</key>
@@ -1953,18 +3404,6 @@
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>blocks_short_to_float_0</source_block_id>
- <sink_block_id>wxgui_numbersink2_0</sink_block_id>
- <source_key>0</source_key>
- <sink_key>0</sink_key>
- </connection>
- <connection>
- <source_block_id>blocks_multiply_xx_2</source_block_id>
- <sink_block_id>blocks_short_to_float_1</sink_block_id>
- <source_key>0</source_key>
- <sink_key>0</sink_key>
- </connection>
- <connection>
<source_block_id>analog_random_source_x_0</source_block_id>
<sink_block_id>trellis_encoder_xx_0</sink_block_id>
<source_key>0</source_key>
@@ -2037,18 +3476,6 @@
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>blocks_multiply_xx_1</source_block_id>
- <sink_block_id>blocks_short_to_float_2</sink_block_id>
- <source_key>0</source_key>
- <sink_key>0</sink_key>
- </connection>
- <connection>
- <source_block_id>blocks_short_to_float_2</source_block_id>
- <sink_block_id>wxgui_numbersink2_2</sink_block_id>
- <source_key>0</source_key>
- <sink_key>0</sink_key>
- </connection>
- <connection>
<source_block_id>trellis_viterbi_combined_xx_2</source_block_id>
<sink_block_id>blocks_sub_xx_3</sink_block_id>
<source_key>0</source_key>
@@ -2067,36 +3494,18 @@
<sink_key>1</sink_key>
</connection>
<connection>
- <source_block_id>blocks_add_xx_1</source_block_id>
- <sink_block_id>trellis_viterbi_combined_xx_2</sink_block_id>
- <source_key>0</source_key>
- <sink_key>0</sink_key>
- </connection>
- <connection>
<source_block_id>analog_random_source_x_1</source_block_id>
<sink_block_id>blocks_sub_xx_3</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>blocks_short_to_float_1</source_block_id>
- <sink_block_id>wxgui_numbersink2_3</sink_block_id>
- <source_key>0</source_key>
- <sink_key>0</sink_key>
- </connection>
- <connection>
<source_block_id>trellis_viterbi_combined_xx_2</source_block_id>
<sink_block_id>trellis_encoder_xx_2_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>blocks_multiply_xx_2_0</source_block_id>
- <sink_block_id>blocks_short_to_float_1_0</sink_block_id>
- <source_key>0</source_key>
- <sink_key>0</sink_key>
- </connection>
- <connection>
<source_block_id>trellis_viterbi_combined_xx_0_0</source_block_id>
<sink_block_id>blocks_sub_xx_1_0</sink_block_id>
<source_key>0</source_key>
@@ -2121,12 +3530,6 @@
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>blocks_short_to_float_1_0</source_block_id>
- <sink_block_id>wxgui_numbersink2_3_0</sink_block_id>
- <source_key>0</source_key>
- <sink_key>0</sink_key>
- </connection>
- <connection>
<source_block_id>blocks_add_xx_1</source_block_id>
<sink_block_id>blocks_sub_xx_2_0</sink_block_id>
<source_key>0</source_key>
@@ -2145,12 +3548,6 @@
<sink_key>1</sink_key>
</connection>
<connection>
- <source_block_id>blocks_add_xx_1</source_block_id>
- <sink_block_id>wxgui_scopesink2_0</sink_block_id>
- <source_key>0</source_key>
- <sink_key>0</sink_key>
- </connection>
- <connection>
<source_block_id>trellis_encoder_xx_0</source_block_id>
<sink_block_id>blocks_throttle_0</sink_block_id>
<source_key>0</source_key>
@@ -2210,4 +3607,58 @@
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
+ <connection>
+ <source_block_id>blocks_add_xx_1</source_block_id>
+ <sink_block_id>qtgui_const_sink_x_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>blocks_add_xx_1</source_block_id>
+ <sink_block_id>trellis_viterbi_combined_xx_2</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>blocks_short_to_float_0</source_block_id>
+ <sink_block_id>qtgui_number_sink_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>blocks_multiply_xx_2_0</source_block_id>
+ <sink_block_id>blocks_short_to_float_1</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>blocks_short_to_float_1</source_block_id>
+ <sink_block_id>qtgui_number_sink_0_0_0_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>blocks_multiply_xx_1</source_block_id>
+ <sink_block_id>blocks_short_to_float_2</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>blocks_short_to_float_2</source_block_id>
+ <sink_block_id>qtgui_number_sink_0_0_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>blocks_multiply_xx_2</source_block_id>
+ <sink_block_id>blocks_short_to_float_3</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>blocks_short_to_float_3</source_block_id>
+ <sink_block_id>qtgui_number_sink_0_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
</flow_graph>
diff --git a/gr-trellis/examples/grc/pccc.grc b/gr-trellis/examples/grc/pccc.grc
index 3563f2fe56..c642a71940 100644
--- a/gr-trellis/examples/grc/pccc.grc
+++ b/gr-trellis/examples/grc/pccc.grc
@@ -1,11 +1,11 @@
<?xml version='1.0' encoding='ASCII'?>
<flow_graph>
- <timestamp>Thu Dec 27 13:49:53 2012</timestamp>
+ <timestamp>Mon Jul 28 14:02:43 2014</timestamp>
<block>
<key>options</key>
<param>
<key>id</key>
- <value>sccc1</value>
+ <value>pccc</value>
</param>
<param>
<key>_enabled</key>
@@ -13,7 +13,7 @@
</param>
<param>
<key>title</key>
- <value>Serially Concatenated Convolutional Code</value>
+ <value>Parallel Concatenated Convolutional Code</value>
</param>
<param>
<key>author</key>
@@ -29,7 +29,7 @@
</param>
<param>
<key>generate_options</key>
- <value>wx_gui</value>
+ <value>qt_gui</value>
</param>
<param>
<key>category</key>
@@ -52,6 +52,10 @@
<value></value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(10, 10)</value>
</param>
@@ -64,7 +68,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>noisevar</value>
+ <value>prefix</value>
</param>
<param>
<key>_enabled</key>
@@ -72,11 +76,15 @@
</param>
<param>
<key>value</key>
- <value>10**(-snr_db/10)</value>
+ <value>"@FSM_FILE_INSTALL_DIR@"</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(389, 15)</value>
+ <value>(520, 11)</value>
</param>
<param>
<key>_rotation</key>
@@ -87,7 +95,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>prefix</value>
+ <value>noisevar</value>
</param>
<param>
<key>_enabled</key>
@@ -95,11 +103,15 @@
</param>
<param>
<key>value</key>
- <value>"/n/harrisville/x/anastas/gnuradio_trunk/"</value>
+ <value>10**(-snr_db/10)</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(590, 15)</value>
+ <value>(279, 10)</value>
</param>
<param>
<key>_rotation</key>
@@ -110,7 +122,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>block</value>
+ <value>R</value>
</param>
<param>
<key>_enabled</key>
@@ -118,11 +130,15 @@
</param>
<param>
<key>value</key>
- <value>1000</value>
+ <value>100e3</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(764, 16)</value>
+ <value>(358, 10)</value>
</param>
<param>
<key>_rotation</key>
@@ -130,54 +146,26 @@
</param>
</block>
<block>
- <key>variable_slider</key>
+ <key>variable</key>
<param>
<key>id</key>
- <value>snr_db</value>
+ <value>block</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>label</key>
- <value>SNR (dB)</value>
- </param>
- <param>
<key>value</key>
- <value>5</value>
- </param>
- <param>
- <key>min</key>
- <value>-10</value>
- </param>
- <param>
- <key>max</key>
- <value>10</value>
- </param>
- <param>
- <key>num_steps</key>
- <value>100</value>
- </param>
- <param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
- </param>
- <param>
- <key>converver</key>
- <value>float_converter</value>
- </param>
- <param>
- <key>grid_pos</key>
- <value></value>
+ <value>1000</value>
</param>
<param>
- <key>notebook</key>
+ <key>alias</key>
<value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(229, 13)</value>
+ <value>(438, 10)</value>
</param>
<param>
<key>_rotation</key>
@@ -185,10 +173,10 @@
</param>
</block>
<block>
- <key>blocks_multiply_xx</key>
+ <key>analog_random_source_x</key>
<param>
<key>id</key>
- <value>blocks_multiply_xx_2_0</value>
+ <value>analog_random_source_x_0</value>
</param>
<param>
<key>_enabled</key>
@@ -199,43 +187,40 @@
<value>short</value>
</param>
<param>
- <key>num_inputs</key>
- <value>2</value>
+ <key>min</key>
+ <value>0</value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>max</key>
+ <value>2</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(392, 591)</value>
+ <key>num_samps</key>
+ <value>1000</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>repeat</key>
+ <value>True</value>
</param>
- </block>
- <block>
- <key>blocks_short_to_float</key>
<param>
- <key>id</key>
- <value>blocks_short_to_float_1_0</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>scale</key>
- <value>1</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(535, 609)</value>
+ <value>(21, 170)</value>
</param>
<param>
<key>_rotation</key>
@@ -243,10 +228,10 @@
</param>
</block>
<block>
- <key>wxgui_numbersink2</key>
+ <key>blocks_throttle</key>
<param>
<key>id</key>
- <value>wxgui_numbersink2_3_0</value>
+ <value>blocks_throttle_0</value>
</param>
<param>
<key>_enabled</key>
@@ -254,75 +239,39 @@
</param>
<param>
<key>type</key>
- <value>float</value>
- </param>
- <param>
- <key>title</key>
- <value>BER</value>
- </param>
- <param>
- <key>units</key>
- <value>BER</value>
+ <value>short</value>
</param>
<param>
- <key>samp_rate</key>
+ <key>samples_per_second</key>
<value>R</value>
</param>
<param>
- <key>min_value</key>
- <value>0</value>
- </param>
- <param>
- <key>max_value</key>
- <value>1.0</value>
- </param>
- <param>
- <key>factor</key>
- <value>1.0</value>
- </param>
- <param>
- <key>decimal_places</key>
- <value>6</value>
- </param>
- <param>
- <key>ref_level</key>
- <value>0</value>
- </param>
- <param>
- <key>number_rate</key>
- <value>15</value>
- </param>
- <param>
- <key>peak_hold</key>
- <value>False</value>
+ <key>vlen</key>
+ <value>1</value>
</param>
<param>
- <key>average</key>
+ <key>ignoretag</key>
<value>True</value>
</param>
<param>
- <key>avg_alpha</key>
- <value>0.001</value>
- </param>
- <param>
- <key>show_gauge</key>
- <value>True</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>win_size</key>
+ <key>affinity</key>
<value></value>
</param>
<param>
- <key>grid_pos</key>
- <value>1,0,1,1</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>notebook</key>
- <value></value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(713, 426)</value>
+ <value>(559, 104)</value>
</param>
<param>
<key>_rotation</key>
@@ -330,113 +279,113 @@
</param>
</block>
<block>
- <key>wxgui_scopesink2</key>
+ <key>variable_qtgui_range</key>
<param>
<key>id</key>
- <value>wxgui_scopesink2_0</value>
+ <value>snr_db</value>
</param>
<param>
<key>_enabled</key>
- <value>False</value>
- </param>
- <param>
- <key>type</key>
- <value>float</value>
- </param>
- <param>
- <key>title</key>
- <value>Scope Plot</value>
+ <value>True</value>
</param>
<param>
- <key>samp_rate</key>
- <value>R</value>
+ <key>label</key>
+ <value>SNR (dB)</value>
</param>
<param>
- <key>v_scale</key>
- <value>0</value>
+ <key>value</key>
+ <value>5</value>
</param>
<param>
- <key>v_offset</key>
- <value>0</value>
+ <key>start</key>
+ <value>-10</value>
</param>
<param>
- <key>t_scale</key>
- <value>0</value>
+ <key>stop</key>
+ <value>10</value>
</param>
<param>
- <key>ac_couple</key>
- <value>False</value>
+ <key>step</key>
+ <value>0.01</value>
</param>
<param>
- <key>xy_mode</key>
- <value>False</value>
+ <key>widget</key>
+ <value>counter_slider</value>
</param>
<param>
- <key>num_inputs</key>
- <value>1</value>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
</param>
<param>
- <key>win_size</key>
- <value></value>
+ <key>min_len</key>
+ <value>200</value>
</param>
<param>
- <key>grid_pos</key>
+ <key>gui_hint</key>
<value></value>
</param>
<param>
- <key>notebook</key>
+ <key>alias</key>
<value></value>
</param>
<param>
- <key>trig_mode</key>
- <value>wxgui.TRIG_MODE_AUTO</value>
- </param>
- <param>
- <key>y_axis_label</key>
- <value>Counts</value>
- </param>
- <param>
<key>_coordinate</key>
- <value>(952, 73)</value>
+ <value>(177, 10)</value>
</param>
<param>
<key>_rotation</key>
- <value>0</value>
+ <value>180</value>
</param>
</block>
<block>
- <key>analog_random_source_x</key>
+ <key>digital_chunks_to_symbols_xx</key>
<param>
<key>id</key>
- <value>analog_random_source_x_0</value>
+ <value>digital_chunks_to_symbols_xx_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
+ <key>in_type</key>
<value>short</value>
</param>
<param>
- <key>min</key>
- <value>0</value>
+ <key>out_type</key>
+ <value>complex</value>
</param>
<param>
- <key>max</key>
+ <key>symbol_table</key>
+ <value>-7,0, -5,0, -3,0, -1,0, 1,0, 3,0, 5,0, 7,0, 0,-7,0, -5,0, -3,0, -1,0, 1,0, 3,0, 5,0, 7,0</value>
+ </param>
+ <param>
+ <key>dimension</key>
<value>2</value>
</param>
<param>
- <key>num_samps</key>
- <value>1000</value>
+ <key>num_ports</key>
+ <value>1</value>
</param>
<param>
- <key>repeat</key>
- <value>True</value>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(21, 170)</value>
+ <value>(559, 180)</value>
</param>
<param>
<key>_rotation</key>
@@ -459,7 +408,7 @@
</param>
<param>
<key>o_fsm_args</key>
- <value>prefix+"gr-trellis/src/examples/fsm_files/awgn1o2_4.fsm"</value>
+ <value>prefix + "/awgn1o2_4.fsm"</value>
</param>
<param>
<key>o_init_state</key>
@@ -467,7 +416,7 @@
</param>
<param>
<key>i_fsm_args</key>
- <value>prefix+"gr-trellis/src/examples/fsm_files/awgn1o2_4.fsm"</value>
+ <value>prefix + "/awgn1o2_4.fsm"</value>
</param>
<param>
<key>i_init_state</key>
@@ -482,31 +431,24 @@
<value>block</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(236, 147)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
+ <key>alias</key>
+ <value></value>
</param>
- </block>
- <block>
- <key>variable</key>
<param>
- <key>id</key>
- <value>R</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>value</key>
- <value>100e3</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(482, 17)</value>
+ <value>(234, 154)</value>
</param>
<param>
<key>_rotation</key>
@@ -525,7 +467,7 @@
</param>
<param>
<key>type</key>
- <value>f</value>
+ <value>c</value>
</param>
<param>
<key>out_type</key>
@@ -533,7 +475,7 @@
</param>
<param>
<key>o_fsm_args</key>
- <value>prefix+"gr-trellis/src/examples/fsm_files/awgn1o2_4.fsm"</value>
+ <value>prefix + "/awgn1o2_4.fsm"</value>
</param>
<param>
<key>o_init_state</key>
@@ -545,7 +487,7 @@
</param>
<param>
<key>i_fsm_args</key>
- <value>prefix+"gr-trellis/src/examples/fsm_files/awgn1o2_4.fsm"</value>
+ <value>prefix + "/awgn1o2_4.fsm"</value>
</param>
<param>
<key>i_init_state</key>
@@ -573,7 +515,7 @@
</param>
<param>
<key>table</key>
- <value>-7,0, -5,0, -3,0, -1,0, 1,0, 3,0, 5,0, 7,0, 0,-7,0, -5,0, -3,0, -1,0, 1,0, 3,0, 5,0, 7</value>
+ <value>-7,0, -5,0, -3,0, -1,0, 1,0, 3,0, 5,0, 7,0, 0,-7,0, -5,0, -3,0, -1,0, 1,0, 3,0, 5,0, 7,0</value>
</param>
<param>
<key>metric_type</key>
@@ -588,8 +530,71 @@
<value>1.0</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(196, 274)</value>
+ <value>(234, 299)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>180</value>
+ </param>
+ </block>
+ <block>
+ <key>blocks_multiply_xx</key>
+ <param>
+ <key>id</key>
+ <value>blocks_multiply_xx_2_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>short</value>
+ </param>
+ <param>
+ <key>num_inputs</key>
+ <value>2</value>
+ </param>
+ <param>
+ <key>vlen</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(421, 574)</value>
</param>
<param>
<key>_rotation</key>
@@ -619,8 +624,67 @@
<value>2</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(217, 597)</value>
+ <value>(246, 580)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>blocks_short_to_float</key>
+ <param>
+ <key>id</key>
+ <value>blocks_short_to_float_1_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>vlen</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>scale</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(564, 592)</value>
</param>
<param>
<key>_rotation</key>
@@ -639,7 +703,7 @@
</param>
<param>
<key>type</key>
- <value>float</value>
+ <value>complex</value>
</param>
<param>
<key>noise_type</key>
@@ -654,8 +718,24 @@
<value>-42</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(584, 259)</value>
+ <value>(520, 309)</value>
</param>
<param>
<key>_rotation</key>
@@ -663,10 +743,10 @@
</param>
</block>
<block>
- <key>blocks_throttle</key>
+ <key>blocks_add_xx</key>
<param>
<key>id</key>
- <value>blocks_throttle_0</value>
+ <value>blocks_add_xx_1</value>
</param>
<param>
<key>_enabled</key>
@@ -674,19 +754,35 @@
</param>
<param>
<key>type</key>
- <value>short</value>
+ <value>complex</value>
</param>
<param>
- <key>samples_per_second</key>
- <value>R</value>
+ <key>num_inputs</key>
+ <value>2</value>
</param>
<param>
<key>vlen</key>
<value>1</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(517, 103)</value>
+ <value>(816, 192)</value>
</param>
<param>
<key>_rotation</key>
@@ -694,69 +790,226 @@
</param>
</block>
<block>
- <key>digital_chunks_to_symbols_xx</key>
+ <key>qtgui_number_sink</key>
<param>
<key>id</key>
- <value>digital_chunks_to_symbols_xx_0</value>
+ <value>qtgui_number_sink_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>in_type</key>
- <value>short</value>
+ <key>name</key>
+ <value>""</value>
</param>
<param>
- <key>out_type</key>
+ <key>type</key>
<value>float</value>
</param>
<param>
- <key>symbol_table</key>
- <value>-7,0,-5,0,-3,0,-1,0,1,0,3,0,5,0,7,0,-7,0,-5,0,-3,0,-1,0,1,0,3,0,5,0,7</value>
+ <key>autoscale</key>
+ <value>True</value>
</param>
<param>
- <key>dimension</key>
- <value>2</value>
+ <key>avg</key>
+ <value>0.001</value>
</param>
<param>
- <key>num_ports</key>
- <value>1</value>
+ <key>graph_type</key>
+ <value>qtgui.NUM_GRAPH_HORIZ</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(559, 180)</value>
+ <key>nconnections</key>
+ <value>1</value>
</param>
<param>
- <key>_rotation</key>
+ <key>min</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>blocks_add_xx</key>
<param>
- <key>id</key>
- <value>blocks_add_xx_1</value>
+ <key>max</key>
+ <value>1</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>update_time</key>
+ <value>0.01</value>
</param>
<param>
- <key>type</key>
- <value>float</value>
+ <key>gui_hint</key>
+ <value></value>
</param>
<param>
- <key>num_inputs</key>
- <value>2</value>
+ <key>label1</key>
+ <value></value>
</param>
<param>
- <key>vlen</key>
+ <key>unit1</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color1</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor1</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>label2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>unit2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color2</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor2</key>
<value>1</value>
</param>
<param>
+ <key>label3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>unit3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color3</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor3</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>label4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>unit4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color4</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor4</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>label5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>unit5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color5</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor5</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>label6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>unit6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color6</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor6</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>label7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>unit7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color7</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor7</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>label8</key>
+ <value></value>
+ </param>
+ <param>
+ <key>unit8</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color8</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>label9</key>
+ <value></value>
+ </param>
+ <param>
+ <key>unit9</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color9</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>label10</key>
+ <value></value>
+ </param>
+ <param>
+ <key>unit10</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color10</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(951, 256)</value>
+ <value>(571, 477)</value>
</param>
<param>
<key>_rotation</key>
@@ -765,55 +1018,49 @@
</block>
<connection>
<source_block_id>analog_random_source_x_0</source_block_id>
- <sink_block_id>blocks_sub_xx_0</sink_block_id>
+ <sink_block_id>trellis_pccc_encoder_xx_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>blocks_add_xx_1</source_block_id>
- <sink_block_id>wxgui_scopesink2_0</sink_block_id>
+ <sink_block_id>trellis_pccc_decoder_combined_xx_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>blocks_multiply_xx_2_0</source_block_id>
- <sink_block_id>blocks_short_to_float_1_0</sink_block_id>
+ <source_block_id>analog_noise_source_x_0</source_block_id>
+ <sink_block_id>blocks_add_xx_1</sink_block_id>
<source_key>0</source_key>
- <sink_key>0</sink_key>
+ <sink_key>1</sink_key>
</connection>
<connection>
- <source_block_id>blocks_short_to_float_1_0</source_block_id>
- <sink_block_id>wxgui_numbersink2_3_0</sink_block_id>
+ <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
+ <sink_block_id>blocks_add_xx_1</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>blocks_sub_xx_0</source_block_id>
- <sink_block_id>blocks_multiply_xx_2_0</sink_block_id>
+ <source_block_id>blocks_throttle_0</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>blocks_sub_xx_0</source_block_id>
- <sink_block_id>blocks_multiply_xx_2_0</sink_block_id>
- <source_key>0</source_key>
- <sink_key>1</sink_key>
- </connection>
- <connection>
- <source_block_id>analog_random_source_x_0</source_block_id>
- <sink_block_id>trellis_pccc_encoder_xx_0</sink_block_id>
+ <source_block_id>trellis_pccc_encoder_xx_0</source_block_id>
+ <sink_block_id>blocks_throttle_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>trellis_pccc_encoder_xx_0</source_block_id>
- <sink_block_id>blocks_throttle_0</sink_block_id>
+ <source_block_id>analog_random_source_x_0</source_block_id>
+ <sink_block_id>blocks_sub_xx_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>blocks_add_xx_1</source_block_id>
- <sink_block_id>trellis_pccc_decoder_combined_xx_0</sink_block_id>
+ <source_block_id>blocks_short_to_float_1_0</source_block_id>
+ <sink_block_id>qtgui_number_sink_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
@@ -824,20 +1071,20 @@
<sink_key>1</sink_key>
</connection>
<connection>
- <source_block_id>analog_noise_source_x_0</source_block_id>
- <sink_block_id>blocks_add_xx_1</sink_block_id>
+ <source_block_id>blocks_sub_xx_0</source_block_id>
+ <sink_block_id>blocks_multiply_xx_2_0</sink_block_id>
<source_key>0</source_key>
<sink_key>1</sink_key>
</connection>
<connection>
- <source_block_id>blocks_throttle_0</source_block_id>
- <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
+ <source_block_id>blocks_sub_xx_0</source_block_id>
+ <sink_block_id>blocks_multiply_xx_2_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>blocks_add_xx_1</sink_block_id>
+ <source_block_id>blocks_multiply_xx_2_0</source_block_id>
+ <sink_block_id>blocks_short_to_float_1_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
diff --git a/gr-trellis/examples/grc/pccc1.grc b/gr-trellis/examples/grc/pccc1.grc
index c6c6773904..acb112d255 100644
--- a/gr-trellis/examples/grc/pccc1.grc
+++ b/gr-trellis/examples/grc/pccc1.grc
@@ -1,6 +1,6 @@
<?xml version='1.0' encoding='ASCII'?>
<flow_graph>
- <timestamp>Sat Nov 10 15:36:08 2012</timestamp>
+ <timestamp>Mon Jul 28 14:09:00 2014</timestamp>
<block>
<key>options</key>
<param>
@@ -13,7 +13,7 @@
</param>
<param>
<key>title</key>
- <value>Serially Concatenated Convolutional Code</value>
+ <value>Parallel Concatenated Convolutional Code</value>
</param>
<param>
<key>author</key>
@@ -29,7 +29,7 @@
</param>
<param>
<key>generate_options</key>
- <value>wx_gui</value>
+ <value>qt_gui</value>
</param>
<param>
<key>category</key>
@@ -52,6 +52,10 @@
<value></value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(10, 10)</value>
</param>
@@ -64,7 +68,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>noisevar</value>
+ <value>prefix</value>
</param>
<param>
<key>_enabled</key>
@@ -72,11 +76,15 @@
</param>
<param>
<key>value</key>
- <value>10**(-snr_db/10)</value>
+ <value>"@FSM_FILE_INSTALL_DIR@"</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(389, 15)</value>
+ <value>(513, 10)</value>
</param>
<param>
<key>_rotation</key>
@@ -87,7 +95,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>prefix</value>
+ <value>block</value>
</param>
<param>
<key>_enabled</key>
@@ -95,11 +103,15 @@
</param>
<param>
<key>value</key>
- <value>"/n/harrisville/x/anastas/gnuradio_trunk/"</value>
+ <value>1000</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(590, 15)</value>
+ <value>(441, 10)</value>
</param>
<param>
<key>_rotation</key>
@@ -110,7 +122,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>block</value>
+ <value>R</value>
</param>
<param>
<key>_enabled</key>
@@ -118,11 +130,15 @@
</param>
<param>
<key>value</key>
- <value>1000</value>
+ <value>100e3</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(764, 16)</value>
+ <value>(358, 10)</value>
</param>
<param>
<key>_rotation</key>
@@ -130,54 +146,81 @@
</param>
</block>
<block>
- <key>variable_slider</key>
+ <key>variable</key>
<param>
<key>id</key>
- <value>snr_db</value>
+ <value>noisevar</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>label</key>
- <value>SNR (dB)</value>
+ <key>value</key>
+ <value>10**(-snr_db/10)</value>
</param>
<param>
- <key>value</key>
- <value>5</value>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(279, 10)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>analog_random_source_x</key>
+ <param>
+ <key>id</key>
+ <value>analog_random_source_x_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>short</value>
</param>
<param>
<key>min</key>
- <value>-10</value>
+ <value>0</value>
</param>
<param>
<key>max</key>
- <value>10</value>
+ <value>2</value>
</param>
<param>
- <key>num_steps</key>
- <value>100</value>
+ <key>num_samps</key>
+ <value>1000</value>
</param>
<param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
+ <key>repeat</key>
+ <value>True</value>
</param>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>grid_pos</key>
+ <key>affinity</key>
<value></value>
</param>
<param>
- <key>notebook</key>
- <value></value>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(229, 13)</value>
+ <value>(21, 170)</value>
</param>
<param>
<key>_rotation</key>
@@ -185,144 +228,226 @@
</param>
</block>
<block>
- <key>blocks_multiply_xx</key>
+ <key>qtgui_number_sink</key>
<param>
<key>id</key>
- <value>blocks_multiply_xx_2_0</value>
+ <value>qtgui_number_sink_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
+ <key>name</key>
+ <value>""</value>
+ </param>
+ <param>
<key>type</key>
- <value>short</value>
+ <value>float</value>
</param>
<param>
- <key>num_inputs</key>
- <value>2</value>
+ <key>autoscale</key>
+ <value>False</value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>avg</key>
+ <value>0.001</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(392, 591)</value>
+ <key>graph_type</key>
+ <value>qtgui.NUM_GRAPH_HORIZ</value>
</param>
<param>
- <key>_rotation</key>
+ <key>nconnections</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>min</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>blocks_short_to_float</key>
<param>
- <key>id</key>
- <value>blocks_short_to_float_1_0</value>
+ <key>max</key>
+ <value>1</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>update_time</key>
+ <value>0.10</value>
</param>
<param>
- <key>vlen</key>
+ <key>gui_hint</key>
+ <value>1,0,1,1</value>
+ </param>
+ <param>
+ <key>label1</key>
+ <value></value>
+ </param>
+ <param>
+ <key>unit1</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color1</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor1</key>
<value>1</value>
</param>
<param>
- <key>scale</key>
+ <key>label2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>unit2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color2</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor2</key>
<value>1</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(535, 609)</value>
+ <key>label3</key>
+ <value></value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>unit3</key>
+ <value></value>
</param>
- </block>
- <block>
- <key>wxgui_numbersink2</key>
<param>
- <key>id</key>
- <value>wxgui_numbersink2_3_0</value>
+ <key>color3</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>factor3</key>
+ <value>1</value>
</param>
<param>
- <key>type</key>
- <value>float</value>
+ <key>label4</key>
+ <value></value>
</param>
<param>
- <key>title</key>
- <value>BER</value>
+ <key>unit4</key>
+ <value></value>
</param>
<param>
- <key>units</key>
- <value>BER</value>
+ <key>color4</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>samp_rate</key>
- <value>R</value>
+ <key>factor4</key>
+ <value>1</value>
</param>
<param>
- <key>min_value</key>
- <value>0</value>
+ <key>label5</key>
+ <value></value>
</param>
<param>
- <key>max_value</key>
- <value>1.0</value>
+ <key>unit5</key>
+ <value></value>
</param>
<param>
- <key>factor</key>
- <value>1.0</value>
+ <key>color5</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>decimal_places</key>
- <value>6</value>
+ <key>factor5</key>
+ <value>1</value>
</param>
<param>
- <key>ref_level</key>
- <value>0</value>
+ <key>label6</key>
+ <value></value>
</param>
<param>
- <key>number_rate</key>
- <value>15</value>
+ <key>unit6</key>
+ <value></value>
</param>
<param>
- <key>peak_hold</key>
- <value>False</value>
+ <key>color6</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>average</key>
- <value>True</value>
+ <key>factor6</key>
+ <value>1</value>
</param>
<param>
- <key>avg_alpha</key>
- <value>0.001</value>
+ <key>label7</key>
+ <value></value>
</param>
<param>
- <key>show_gauge</key>
- <value>True</value>
+ <key>unit7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color7</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor7</key>
+ <value>1</value>
</param>
<param>
- <key>win_size</key>
+ <key>label8</key>
<value></value>
</param>
<param>
- <key>grid_pos</key>
- <value>1,0,1,1</value>
+ <key>unit8</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color8</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>label9</key>
+ <value></value>
</param>
<param>
- <key>notebook</key>
+ <key>unit9</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color9</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>label10</key>
+ <value></value>
+ </param>
+ <param>
+ <key>unit10</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color10</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
<value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(713, 426)</value>
+ <value>(632, 509)</value>
</param>
<param>
<key>_rotation</key>
@@ -330,74 +455,89 @@
</param>
</block>
<block>
- <key>wxgui_scopesink2</key>
+ <key>blocks_short_to_float</key>
<param>
<key>id</key>
- <value>wxgui_scopesink2_0</value>
+ <value>blocks_short_to_float_1_0</value>
</param>
<param>
<key>_enabled</key>
- <value>False</value>
+ <value>True</value>
</param>
<param>
- <key>type</key>
- <value>float</value>
+ <key>vlen</key>
+ <value>1</value>
</param>
<param>
- <key>title</key>
- <value>Scope Plot</value>
+ <key>scale</key>
+ <value>1</value>
</param>
<param>
- <key>samp_rate</key>
- <value>R</value>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>v_scale</key>
+ <key>minoutbuf</key>
<value>0</value>
</param>
<param>
- <key>v_offset</key>
+ <key>maxoutbuf</key>
<value>0</value>
</param>
<param>
- <key>t_scale</key>
+ <key>_coordinate</key>
+ <value>(375, 525)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
<value>0</value>
</param>
+ </block>
+ <block>
+ <key>blocks_multiply_xx</key>
<param>
- <key>ac_couple</key>
- <value>False</value>
+ <key>id</key>
+ <value>blocks_multiply_xx_2_0</value>
</param>
<param>
- <key>xy_mode</key>
- <value>False</value>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>short</value>
</param>
<param>
<key>num_inputs</key>
- <value>1</value>
+ <value>2</value>
</param>
<param>
- <key>win_size</key>
- <value></value>
+ <key>vlen</key>
+ <value>1</value>
</param>
<param>
- <key>grid_pos</key>
+ <key>alias</key>
<value></value>
</param>
<param>
- <key>notebook</key>
+ <key>affinity</key>
<value></value>
</param>
<param>
- <key>trig_mode</key>
- <value>wxgui.TRIG_MODE_AUTO</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>y_axis_label</key>
- <value>Counts</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(952, 73)</value>
+ <value>(232, 507)</value>
</param>
<param>
<key>_rotation</key>
@@ -405,10 +545,10 @@
</param>
</block>
<block>
- <key>analog_random_source_x</key>
+ <key>blocks_sub_xx</key>
<param>
<key>id</key>
- <value>analog_random_source_x_0</value>
+ <value>blocks_sub_xx_0</value>
</param>
<param>
<key>_enabled</key>
@@ -419,24 +559,32 @@
<value>short</value>
</param>
<param>
- <key>min</key>
- <value>0</value>
+ <key>vlen</key>
+ <value>1</value>
</param>
<param>
- <key>max</key>
+ <key>num_inputs</key>
<value>2</value>
</param>
<param>
- <key>num_samps</key>
- <value>1000</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>repeat</key>
- <value>True</value>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(21, 170)</value>
+ <value>(57, 513)</value>
</param>
<param>
<key>_rotation</key>
@@ -444,34 +592,62 @@
</param>
</block>
<block>
- <key>blocks_sub_xx</key>
+ <key>variable_qtgui_range</key>
<param>
<key>id</key>
- <value>blocks_sub_xx_0</value>
+ <value>snr_db</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>short</value>
+ <key>label</key>
+ <value>SNR (dB)</value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>value</key>
+ <value>5</value>
</param>
<param>
- <key>num_inputs</key>
- <value>2</value>
+ <key>start</key>
+ <value>-10</value>
+ </param>
+ <param>
+ <key>stop</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>step</key>
+ <value>0.01</value>
+ </param>
+ <param>
+ <key>widget</key>
+ <value>counter_slider</value>
+ </param>
+ <param>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
+ </param>
+ <param>
+ <key>min_len</key>
+ <value>200</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value></value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(217, 597)</value>
+ <value>(177, 10)</value>
</param>
<param>
<key>_rotation</key>
- <value>0</value>
+ <value>180</value>
</param>
</block>
<block>
@@ -490,7 +666,7 @@
</param>
<param>
<key>o_fsm_args</key>
- <value>prefix+"gr-trellis/src/examples/fsm_files/awgn1o2_4.fsm"</value>
+ <value>prefix+"/awgn1o2_4.fsm"</value>
</param>
<param>
<key>o_init_state</key>
@@ -498,7 +674,7 @@
</param>
<param>
<key>i_fsm_args</key>
- <value>prefix+"gr-trellis/src/examples/fsm_files/awgn1o2_4.fsm"</value>
+ <value>prefix+"/awgn1o2_4.fsm"</value>
</param>
<param>
<key>i_init_state</key>
@@ -513,8 +689,79 @@
<value>block</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(236, 147)</value>
+ <value>(235, 154)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>trellis_metrics_x</key>
+ <param>
+ <key>id</key>
+ <value>trellis_metrics_x_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>f</value>
+ </param>
+ <param>
+ <key>card</key>
+ <value>16</value>
+ </param>
+ <param>
+ <key>dim</key>
+ <value>2</value>
+ </param>
+ <param>
+ <key>table</key>
+ <value>-7,0, -5,0, -3,0, -1,0, 1,0, 3,0, 5,0, 7,0, 0,-7,0, -5,0, -3,0, -1,0, 1,0, 3,0, 5,0, 7,0</value>
+ </param>
+ <param>
+ <key>metric_type</key>
+ <value>digital.TRELLIS_EUCLIDEAN</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(89, 380)</value>
</param>
<param>
<key>_rotation</key>
@@ -537,7 +784,7 @@
</param>
<param>
<key>o_fsm_args</key>
- <value>prefix+"gr-trellis/src/examples/fsm_files/awgn1o2_4.fsm"</value>
+ <value>prefix+"/awgn1o2_4.fsm"</value>
</param>
<param>
<key>o_init_state</key>
@@ -549,7 +796,7 @@
</param>
<param>
<key>i_fsm_args</key>
- <value>prefix+"gr-trellis/src/examples/fsm_files/awgn1o2_4.fsm"</value>
+ <value>prefix+"/awgn1o2_4.fsm"</value>
</param>
<param>
<key>i_init_state</key>
@@ -576,8 +823,24 @@
<value>trellis.TRELLIS_MIN_SUM</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(357, 304)</value>
+ <value>(379, 332)</value>
</param>
<param>
<key>_rotation</key>
@@ -585,61 +848,54 @@
</param>
</block>
<block>
- <key>trellis_metrics_x</key>
+ <key>digital_chunks_to_symbols_xx</key>
<param>
<key>id</key>
- <value>trellis_metrics_x_0</value>
+ <value>digital_chunks_to_symbols_xx_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>f</value>
- </param>
- <param>
- <key>card</key>
- <value>16</value>
+ <key>in_type</key>
+ <value>short</value>
</param>
<param>
- <key>dim</key>
- <value>2</value>
+ <key>out_type</key>
+ <value>float</value>
</param>
<param>
- <key>table</key>
- <value>-7,0, -5,0, -3,0, -1,0, 1,0, 3,0, 5,0, 7,0, 0,-7,0, -5,0, -3,0, -1,0, 1,0, 3,0, 5,0, 7</value>
+ <key>symbol_table</key>
+ <value>-7,0,-5,0,-3,0,-1,0,1,0,3,0,5,0,7,0,-7,0,-5,0,-3,0,-1,0,1,0,3,0,5,0,7,0</value>
</param>
<param>
- <key>metric_type</key>
- <value>digital.TRELLIS_EUCLIDEAN</value>
+ <key>dimension</key>
+ <value>2</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(58, 354)</value>
+ <key>num_ports</key>
+ <value>1</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>alias</key>
+ <value></value>
</param>
- </block>
- <block>
- <key>variable</key>
<param>
- <key>id</key>
- <value>R</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>value</key>
- <value>100e3</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(482, 17)</value>
+ <value>(552, 164)</value>
</param>
<param>
<key>_rotation</key>
@@ -669,39 +925,28 @@
<value>1</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(517, 103)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>blocks_add_xx</key>
- <param>
- <key>id</key>
- <value>blocks_add_xx_1</value>
+ <key>ignoretag</key>
+ <value>True</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>type</key>
- <value>float</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>num_inputs</key>
- <value>2</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(951, 256)</value>
+ <value>(553, 89)</value>
</param>
<param>
<key>_rotation</key>
@@ -709,38 +954,50 @@
</param>
</block>
<block>
- <key>digital_chunks_to_symbols_xx</key>
+ <key>analog_noise_source_x</key>
<param>
<key>id</key>
- <value>digital_chunks_to_symbols_xx_0</value>
+ <value>analog_noise_source_x_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>in_type</key>
- <value>short</value>
+ <key>type</key>
+ <value>float</value>
</param>
<param>
- <key>out_type</key>
- <value>float</value>
+ <key>noise_type</key>
+ <value>analog.GR_GAUSSIAN</value>
</param>
<param>
- <key>symbol_table</key>
- <value>-7,0,-5,0,-3,0,-1,0,1,0,3,0,5,0,7,0,-7,0,-5,0,-3,0,-1,0,1,0,3,0,5,0,7</value>
+ <key>amp</key>
+ <value>noisevar</value>
</param>
<param>
- <key>dimension</key>
- <value>2</value>
+ <key>seed</key>
+ <value>-42</value>
</param>
<param>
- <key>num_ports</key>
- <value>1</value>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(552, 178)</value>
+ <value>(551, 230)</value>
</param>
<param>
<key>_rotation</key>
@@ -748,10 +1005,10 @@
</param>
</block>
<block>
- <key>analog_noise_source_x</key>
+ <key>blocks_add_xx</key>
<param>
<key>id</key>
- <value>analog_noise_source_x_0</value>
+ <value>blocks_add_xx_1</value>
</param>
<param>
<key>_enabled</key>
@@ -762,20 +1019,32 @@
<value>float</value>
</param>
<param>
- <key>noise_type</key>
- <value>analog.GR_GAUSSIAN</value>
+ <key>num_inputs</key>
+ <value>2</value>
</param>
<param>
- <key>amp</key>
- <value>noisevar</value>
+ <key>vlen</key>
+ <value>1</value>
</param>
<param>
- <key>seed</key>
- <value>-42</value>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(622, 257)</value>
+ <value>(839, 176)</value>
</param>
<param>
<key>_rotation</key>
@@ -790,80 +1059,74 @@
</connection>
<connection>
<source_block_id>blocks_add_xx_1</source_block_id>
- <sink_block_id>wxgui_scopesink2_0</sink_block_id>
+ <sink_block_id>trellis_metrics_x_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>blocks_multiply_xx_2_0</source_block_id>
- <sink_block_id>blocks_short_to_float_1_0</sink_block_id>
+ <source_block_id>analog_random_source_x_0</source_block_id>
+ <sink_block_id>trellis_pccc_encoder_xx_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>blocks_short_to_float_1_0</source_block_id>
- <sink_block_id>wxgui_numbersink2_3_0</sink_block_id>
+ <source_block_id>trellis_pccc_encoder_xx_0</source_block_id>
+ <sink_block_id>blocks_throttle_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>blocks_sub_xx_0</source_block_id>
- <sink_block_id>blocks_multiply_xx_2_0</sink_block_id>
+ <source_block_id>trellis_metrics_x_0</source_block_id>
+ <sink_block_id>trellis_pccc_decoder_x_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>blocks_sub_xx_0</source_block_id>
- <sink_block_id>blocks_multiply_xx_2_0</sink_block_id>
+ <source_block_id>trellis_pccc_decoder_x_0</source_block_id>
+ <sink_block_id>blocks_sub_xx_0</sink_block_id>
<source_key>0</source_key>
<sink_key>1</sink_key>
</connection>
<connection>
- <source_block_id>blocks_add_xx_1</source_block_id>
- <sink_block_id>trellis_metrics_x_0</sink_block_id>
+ <source_block_id>blocks_short_to_float_1_0</source_block_id>
+ <sink_block_id>qtgui_number_sink_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>analog_random_source_x_0</source_block_id>
- <sink_block_id>trellis_pccc_encoder_xx_0</sink_block_id>
+ <source_block_id>blocks_sub_xx_0</source_block_id>
+ <sink_block_id>blocks_multiply_xx_2_0</sink_block_id>
<source_key>0</source_key>
- <sink_key>0</sink_key>
+ <sink_key>1</sink_key>
</connection>
<connection>
- <source_block_id>trellis_pccc_encoder_xx_0</source_block_id>
- <sink_block_id>blocks_throttle_0</sink_block_id>
+ <source_block_id>blocks_sub_xx_0</source_block_id>
+ <sink_block_id>blocks_multiply_xx_2_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>trellis_metrics_x_0</source_block_id>
- <sink_block_id>trellis_pccc_decoder_x_0</sink_block_id>
+ <source_block_id>blocks_multiply_xx_2_0</source_block_id>
+ <sink_block_id>blocks_short_to_float_1_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>trellis_pccc_decoder_x_0</source_block_id>
- <sink_block_id>blocks_sub_xx_0</sink_block_id>
+ <source_block_id>analog_noise_source_x_0</source_block_id>
+ <sink_block_id>blocks_add_xx_1</sink_block_id>
<source_key>0</source_key>
<sink_key>1</sink_key>
</connection>
<connection>
- <source_block_id>blocks_throttle_0</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>blocks_add_xx_1</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>analog_noise_source_x_0</source_block_id>
- <sink_block_id>blocks_add_xx_1</sink_block_id>
+ <source_block_id>blocks_throttle_0</source_block_id>
+ <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
<source_key>0</source_key>
- <sink_key>1</sink_key>
+ <sink_key>0</sink_key>
</connection>
</flow_graph>
diff --git a/gr-trellis/examples/grc/sccc.grc b/gr-trellis/examples/grc/sccc.grc
index 3c10d0cece..9d516743b6 100644
--- a/gr-trellis/examples/grc/sccc.grc
+++ b/gr-trellis/examples/grc/sccc.grc
@@ -1,6 +1,6 @@
<?xml version='1.0' encoding='ASCII'?>
<flow_graph>
- <timestamp>Sat Nov 10 15:34:26 2012</timestamp>
+ <timestamp>Mon Jul 28 14:09:50 2014</timestamp>
<block>
<key>options</key>
<param>
@@ -29,7 +29,7 @@
</param>
<param>
<key>generate_options</key>
- <value>wx_gui</value>
+ <value>qt_gui</value>
</param>
<param>
<key>category</key>
@@ -52,6 +52,10 @@
<value></value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(10, 10)</value>
</param>
@@ -64,7 +68,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>noisevar</value>
+ <value>prefix</value>
</param>
<param>
<key>_enabled</key>
@@ -72,11 +76,15 @@
</param>
<param>
<key>value</key>
- <value>10**(-snr_db/10)</value>
+ <value>"@FSM_FILE_INSTALL_DIR@"</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(389, 15)</value>
+ <value>(514, 10)</value>
</param>
<param>
<key>_rotation</key>
@@ -84,38 +92,26 @@
</param>
</block>
<block>
- <key>analog_random_source_x</key>
+ <key>variable</key>
<param>
<key>id</key>
- <value>analog_random_source_x_0</value>
+ <value>block</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>short</value>
- </param>
- <param>
- <key>min</key>
- <value>0</value>
- </param>
- <param>
- <key>max</key>
- <value>2</value>
- </param>
- <param>
- <key>num_samps</key>
+ <key>value</key>
<value>1000</value>
</param>
<param>
- <key>repeat</key>
- <value>True</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(21, 170)</value>
+ <value>(441, 10)</value>
</param>
<param>
<key>_rotation</key>
@@ -126,7 +122,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>prefix</value>
+ <value>R</value>
</param>
<param>
<key>_enabled</key>
@@ -134,11 +130,15 @@
</param>
<param>
<key>value</key>
- <value>"/n/harrisville/x/anastas/gnuradio_trunk/"</value>
+ <value>100e3</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(590, 15)</value>
+ <value>(358, 10)</value>
</param>
<param>
<key>_rotation</key>
@@ -149,7 +149,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>block</value>
+ <value>noisevar</value>
</param>
<param>
<key>_enabled</key>
@@ -157,11 +157,15 @@
</param>
<param>
<key>value</key>
- <value>1000</value>
+ <value>10**(-snr_db/10)</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(764, 16)</value>
+ <value>(279, 10)</value>
</param>
<param>
<key>_rotation</key>
@@ -169,10 +173,10 @@
</param>
</block>
<block>
- <key>blocks_sub_xx</key>
+ <key>analog_random_source_x</key>
<param>
<key>id</key>
- <value>blocks_sub_xx_0</value>
+ <value>analog_random_source_x_0</value>
</param>
<param>
<key>_enabled</key>
@@ -183,16 +187,40 @@
<value>short</value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>min</key>
+ <value>0</value>
</param>
<param>
- <key>num_inputs</key>
+ <key>max</key>
<value>2</value>
</param>
<param>
+ <key>num_samps</key>
+ <value>1000</value>
+ </param>
+ <param>
+ <key>repeat</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(445, 517)</value>
+ <value>(21, 170)</value>
</param>
<param>
<key>_rotation</key>
@@ -200,10 +228,10 @@
</param>
</block>
<block>
- <key>blocks_multiply_xx</key>
+ <key>blocks_add_xx</key>
<param>
<key>id</key>
- <value>blocks_multiply_xx_2_0</value>
+ <value>blocks_add_xx_1</value>
</param>
<param>
<key>_enabled</key>
@@ -211,7 +239,7 @@
</param>
<param>
<key>type</key>
- <value>short</value>
+ <value>complex</value>
</param>
<param>
<key>num_inputs</key>
@@ -222,8 +250,24 @@
<value>1</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(228.25, 798.39170361874085)</value>
+ <value>(951, 256)</value>
</param>
<param>
<key>_rotation</key>
@@ -231,26 +275,50 @@
</param>
</block>
<block>
- <key>blocks_short_to_float</key>
+ <key>analog_noise_source_x</key>
<param>
<key>id</key>
- <value>blocks_short_to_float_1_0</value>
+ <value>analog_noise_source_x_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>type</key>
+ <value>complex</value>
</param>
<param>
- <key>scale</key>
- <value>1</value>
+ <key>noise_type</key>
+ <value>analog.GR_GAUSSIAN</value>
+ </param>
+ <param>
+ <key>amp</key>
+ <value>noisevar</value>
+ </param>
+ <param>
+ <key>seed</key>
+ <value>-42</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(416, 815)</value>
+ <value>(549, 250)</value>
</param>
<param>
<key>_rotation</key>
@@ -258,54 +326,50 @@
</param>
</block>
<block>
- <key>variable_slider</key>
+ <key>blocks_throttle</key>
<param>
<key>id</key>
- <value>snr_db</value>
+ <value>blocks_throttle_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>label</key>
- <value>SNR (dB)</value>
- </param>
- <param>
- <key>value</key>
- <value>5</value>
+ <key>type</key>
+ <value>short</value>
</param>
<param>
- <key>min</key>
- <value>-10</value>
+ <key>samples_per_second</key>
+ <value>R</value>
</param>
<param>
- <key>max</key>
- <value>10</value>
+ <key>vlen</key>
+ <value>1</value>
</param>
<param>
- <key>num_steps</key>
- <value>100</value>
+ <key>ignoretag</key>
+ <value>True</value>
</param>
<param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>grid_pos</key>
- <value></value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>notebook</key>
- <value></value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(229, 13)</value>
+ <value>(551, 116)</value>
</param>
<param>
<key>_rotation</key>
@@ -313,22 +377,46 @@
</param>
</block>
<block>
- <key>variable</key>
+ <key>blocks_sub_xx</key>
<param>
<key>id</key>
- <value>R</value>
+ <value>blocks_sub_xx_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>10e3</value>
+ <key>type</key>
+ <value>short</value>
+ </param>
+ <param>
+ <key>vlen</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>num_inputs</key>
+ <value>2</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(482, 17)</value>
+ <value>(239, 548)</value>
</param>
<param>
<key>_rotation</key>
@@ -336,74 +424,89 @@
</param>
</block>
<block>
- <key>wxgui_scopesink2</key>
+ <key>blocks_multiply_xx</key>
<param>
<key>id</key>
- <value>wxgui_scopesink2_0</value>
+ <value>blocks_multiply_xx_2_0</value>
</param>
<param>
<key>_enabled</key>
- <value>False</value>
+ <value>True</value>
</param>
<param>
<key>type</key>
- <value>complex</value>
+ <value>short</value>
</param>
<param>
- <key>title</key>
- <value>Scope Plot</value>
+ <key>num_inputs</key>
+ <value>2</value>
</param>
<param>
- <key>samp_rate</key>
- <value>R</value>
+ <key>vlen</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>v_scale</key>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
<value>0</value>
</param>
<param>
- <key>v_offset</key>
+ <key>maxoutbuf</key>
<value>0</value>
</param>
<param>
- <key>t_scale</key>
+ <key>_coordinate</key>
+ <value>(418, 551)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
<value>0</value>
</param>
+ </block>
+ <block>
+ <key>blocks_short_to_float</key>
<param>
- <key>ac_couple</key>
- <value>False</value>
+ <key>id</key>
+ <value>blocks_short_to_float_1_0</value>
</param>
<param>
- <key>xy_mode</key>
+ <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>scale</key>
+ <value>1</value>
</param>
<param>
- <key>grid_pos</key>
+ <key>alias</key>
<value></value>
</param>
<param>
- <key>notebook</key>
+ <key>affinity</key>
<value></value>
</param>
<param>
- <key>trig_mode</key>
- <value>wxgui.TRIG_MODE_AUTO</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>y_axis_label</key>
- <value>Counts</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(952, 73)</value>
+ <value>(605, 564)</value>
</param>
<param>
<key>_rotation</key>
@@ -411,46 +514,54 @@
</param>
</block>
<block>
- <key>trellis_sccc_encoder_xx</key>
+ <key>digital_chunks_to_symbols_xx</key>
<param>
<key>id</key>
- <value>trellis_sccc_encoder_xx_0</value>
+ <value>digital_chunks_to_symbols_xx_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>ss</value>
+ <key>in_type</key>
+ <value>short</value>
</param>
<param>
- <key>o_fsm_args</key>
- <value>prefix+"gr-trellis/src/examples/fsm_files/awgn1o2_4.fsm"</value>
+ <key>out_type</key>
+ <value>complex</value>
</param>
<param>
- <key>o_init_state</key>
- <value>0</value>
+ <key>symbol_table</key>
+ <value>1,0,1j,0,-1j,0,-1,0,1,0,1j,0,-1j,0,-1,0</value>
</param>
<param>
- <key>i_fsm_args</key>
- <value>prefix+"gr-trellis/src/examples/fsm_files/awgn2o3_4.fsm"</value>
+ <key>dimension</key>
+ <value>2</value>
</param>
<param>
- <key>i_init_state</key>
- <value>0</value>
+ <key>num_ports</key>
+ <value>1</value>
</param>
<param>
- <key>interleaver_args</key>
- <value>trellis.interleaver(block,666)</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>bl</key>
- <value>block</value>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(242, 154)</value>
+ <value>(551, 181)</value>
</param>
<param>
<key>_rotation</key>
@@ -458,169 +569,226 @@
</param>
</block>
<block>
- <key>wxgui_numbersink2</key>
+ <key>qtgui_number_sink</key>
<param>
<key>id</key>
- <value>wxgui_numbersink2_3_0</value>
+ <value>qtgui_number_sink_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
+ <key>name</key>
+ <value>""</value>
+ </param>
+ <param>
<key>type</key>
<value>float</value>
</param>
<param>
- <key>title</key>
- <value>BER</value>
+ <key>autoscale</key>
+ <value>False</value>
</param>
<param>
- <key>units</key>
- <value>BER</value>
+ <key>avg</key>
+ <value>0.001</value>
</param>
<param>
- <key>samp_rate</key>
- <value>R</value>
+ <key>graph_type</key>
+ <value>qtgui.NUM_GRAPH_HORIZ</value>
+ </param>
+ <param>
+ <key>nconnections</key>
+ <value>1</value>
</param>
<param>
- <key>min_value</key>
+ <key>min</key>
<value>0</value>
</param>
<param>
- <key>max_value</key>
- <value>1.0</value>
+ <key>max</key>
+ <value>1</value>
</param>
<param>
- <key>factor</key>
- <value>1.0</value>
+ <key>update_time</key>
+ <value>0.10</value>
</param>
<param>
- <key>decimal_places</key>
- <value>6</value>
+ <key>gui_hint</key>
+ <value>1,0,1,1</value>
</param>
<param>
- <key>ref_level</key>
- <value>0</value>
+ <key>label1</key>
+ <value></value>
</param>
<param>
- <key>number_rate</key>
- <value>15</value>
+ <key>unit1</key>
+ <value></value>
</param>
<param>
- <key>peak_hold</key>
- <value>False</value>
+ <key>color1</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>average</key>
- <value>True</value>
+ <key>factor1</key>
+ <value>1</value>
</param>
<param>
- <key>avg_alpha</key>
- <value>0.001</value>
+ <key>label2</key>
+ <value></value>
</param>
<param>
- <key>show_gauge</key>
- <value>True</value>
+ <key>unit2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color2</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>win_size</key>
+ <key>factor2</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>label3</key>
<value></value>
</param>
<param>
- <key>grid_pos</key>
- <value>1,0,1,1</value>
+ <key>unit3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color3</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>notebook</key>
+ <key>factor3</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>label4</key>
<value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(688, 572)</value>
+ <key>unit4</key>
+ <value></value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>color4</key>
+ <value>("black", "black")</value>
</param>
- </block>
- <block>
- <key>trellis_sccc_decoder_combined_xx</key>
<param>
- <key>id</key>
- <value>trellis_sccc_decoder_combined_xx_0</value>
+ <key>factor4</key>
+ <value>1</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>label5</key>
+ <value></value>
</param>
<param>
- <key>type</key>
- <value>c</value>
+ <key>unit5</key>
+ <value></value>
</param>
<param>
- <key>out_type</key>
- <value>s</value>
+ <key>color5</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>o_fsm_args</key>
- <value>prefix+"gr-trellis/src/examples/fsm_files/awgn1o2_4.fsm"</value>
+ <key>factor5</key>
+ <value>1</value>
</param>
<param>
- <key>o_init_state</key>
- <value>0</value>
+ <key>label6</key>
+ <value></value>
</param>
<param>
- <key>o_final_state</key>
- <value>-1</value>
+ <key>unit6</key>
+ <value></value>
</param>
<param>
- <key>i_fsm_args</key>
- <value>prefix+"gr-trellis/src/examples/fsm_files/awgn2o3_4.fsm"</value>
+ <key>color6</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>i_init_state</key>
- <value>0</value>
+ <key>factor6</key>
+ <value>1</value>
</param>
<param>
- <key>i_final_state</key>
- <value>-1</value>
+ <key>label7</key>
+ <value></value>
</param>
<param>
- <key>interleaver</key>
- <value>trellis.interleaver(block,666)</value>
+ <key>unit7</key>
+ <value></value>
</param>
<param>
- <key>block_size</key>
- <value>block</value>
+ <key>color7</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>iterations</key>
- <value>5</value>
+ <key>factor7</key>
+ <value>1</value>
</param>
<param>
- <key>dim</key>
- <value>2</value>
+ <key>label8</key>
+ <value></value>
</param>
<param>
- <key>table</key>
- <value>1,0,1j,0,-1j,0,-1,0, 0,1,0,1j,0,-1j,0,-1</value>
+ <key>unit8</key>
+ <value></value>
</param>
<param>
- <key>metric_type</key>
- <value>digital.TRELLIS_EUCLIDEAN</value>
+ <key>color8</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>siso_type</key>
- <value>trellis.TRELLIS_SUM_PRODUCT</value>
+ <key>factor8</key>
+ <value>1</value>
</param>
<param>
- <key>scaling</key>
- <value>1.0</value>
+ <key>label9</key>
+ <value></value>
+ </param>
+ <param>
+ <key>unit9</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color9</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>label10</key>
+ <value></value>
+ </param>
+ <param>
+ <key>unit10</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color10</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(159, 335)</value>
+ <value>(788, 548)</value>
</param>
<param>
<key>_rotation</key>
@@ -628,41 +796,69 @@
</param>
</block>
<block>
- <key>blocks_throttle</key>
+ <key>variable_qtgui_range</key>
<param>
<key>id</key>
- <value>blocks_throttle_0</value>
+ <value>snr_db</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>short</value>
+ <key>label</key>
+ <value>SNR (dB)</value>
</param>
<param>
- <key>samples_per_second</key>
- <value>R</value>
+ <key>value</key>
+ <value>5</value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>start</key>
+ <value>-10</value>
+ </param>
+ <param>
+ <key>stop</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>step</key>
+ <value>0.01</value>
+ </param>
+ <param>
+ <key>widget</key>
+ <value>counter_slider</value>
+ </param>
+ <param>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
+ </param>
+ <param>
+ <key>min_len</key>
+ <value>200</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value></value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(514, 105)</value>
+ <value>(177, 10)</value>
</param>
<param>
<key>_rotation</key>
- <value>0</value>
+ <value>180</value>
</param>
</block>
<block>
- <key>blocks_add_xx</key>
+ <key>trellis_sccc_encoder_xx</key>
<param>
<key>id</key>
- <value>blocks_add_xx_1</value>
+ <value>trellis_sccc_encoder_xx_0</value>
</param>
<param>
<key>_enabled</key>
@@ -670,93 +866,150 @@
</param>
<param>
<key>type</key>
- <value>complex</value>
+ <value>ss</value>
</param>
<param>
- <key>num_inputs</key>
- <value>2</value>
+ <key>o_fsm_args</key>
+ <value>prefix+"/awgn1o2_4.fsm"</value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>o_init_state</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>i_fsm_args</key>
+ <value>prefix+"/awgn2o3_4.fsm"</value>
+ </param>
+ <param>
+ <key>i_init_state</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>interleaver_args</key>
+ <value>trellis.interleaver(block,666)</value>
+ </param>
+ <param>
+ <key>bl</key>
+ <value>block</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(951, 256)</value>
+ <value>(242, 154)</value>
</param>
<param>
<key>_rotation</key>
- <value>0</value>
+ <value>180</value>
</param>
</block>
<block>
- <key>digital_chunks_to_symbols_xx</key>
+ <key>trellis_sccc_decoder_combined_xx</key>
<param>
<key>id</key>
- <value>digital_chunks_to_symbols_xx_0</value>
+ <value>trellis_sccc_decoder_combined_xx_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>in_type</key>
- <value>short</value>
+ <key>type</key>
+ <value>c</value>
</param>
<param>
<key>out_type</key>
- <value>complex</value>
+ <value>s</value>
</param>
<param>
- <key>symbol_table</key>
- <value>1,0,1j,0,-1j,0,-1,0,0,1,0,1j,0,-1j,0,01</value>
+ <key>o_fsm_args</key>
+ <value>prefix+"/awgn1o2_4.fsm"</value>
</param>
<param>
- <key>dimension</key>
- <value>2</value>
+ <key>o_init_state</key>
+ <value>0</value>
</param>
<param>
- <key>num_ports</key>
- <value>1</value>
+ <key>o_final_state</key>
+ <value>-1</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(551, 181)</value>
+ <key>i_fsm_args</key>
+ <value>prefix+"/awgn2o3_4.fsm"</value>
</param>
<param>
- <key>_rotation</key>
+ <key>i_init_state</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>analog_noise_source_x</key>
<param>
- <key>id</key>
- <value>analog_noise_source_x_0</value>
+ <key>i_final_state</key>
+ <value>-1</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>interleaver</key>
+ <value>trellis.interleaver(block,666)</value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
+ <key>block_size</key>
+ <value>block</value>
</param>
<param>
- <key>noise_type</key>
- <value>analog.GR_GAUSSIAN</value>
+ <key>iterations</key>
+ <value>5</value>
</param>
<param>
- <key>amp</key>
- <value>noisevar</value>
+ <key>dim</key>
+ <value>2</value>
</param>
<param>
- <key>seed</key>
- <value>-42</value>
+ <key>table</key>
+ <value>1,0,1j,0,-1j,0,-1,0,1,0,1j,0,-1j,0,-1,0</value>
+ </param>
+ <param>
+ <key>metric_type</key>
+ <value>digital.TRELLIS_EUCLIDEAN</value>
+ </param>
+ <param>
+ <key>siso_type</key>
+ <value>trellis.TRELLIS_SUM_PRODUCT</value>
+ </param>
+ <param>
+ <key>scaling</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(651, 270)</value>
+ <value>(241, 287)</value>
</param>
<param>
<key>_rotation</key>
@@ -770,12 +1023,6 @@
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>blocks_add_xx_1</source_block_id>
- <sink_block_id>wxgui_scopesink2_0</sink_block_id>
- <source_key>0</source_key>
- <sink_key>0</sink_key>
- </connection>
- <connection>
<source_block_id>analog_random_source_x_0</source_block_id>
<sink_block_id>trellis_sccc_encoder_xx_0</sink_block_id>
<source_key>0</source_key>
@@ -800,20 +1047,20 @@
<sink_key>1</sink_key>
</connection>
<connection>
- <source_block_id>blocks_multiply_xx_2_0</source_block_id>
- <sink_block_id>blocks_short_to_float_1_0</sink_block_id>
+ <source_block_id>blocks_throttle_0</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>blocks_short_to_float_1_0</source_block_id>
- <sink_block_id>wxgui_numbersink2_3_0</sink_block_id>
+ <source_block_id>analog_noise_source_x_0</source_block_id>
+ <sink_block_id>blocks_add_xx_1</sink_block_id>
<source_key>0</source_key>
- <sink_key>0</sink_key>
+ <sink_key>1</sink_key>
</connection>
<connection>
- <source_block_id>blocks_sub_xx_0</source_block_id>
- <sink_block_id>blocks_multiply_xx_2_0</sink_block_id>
+ <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
+ <sink_block_id>blocks_add_xx_1</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
@@ -824,20 +1071,20 @@
<sink_key>1</sink_key>
</connection>
<connection>
- <source_block_id>blocks_throttle_0</source_block_id>
- <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
+ <source_block_id>blocks_sub_xx_0</source_block_id>
+ <sink_block_id>blocks_multiply_xx_2_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>analog_noise_source_x_0</source_block_id>
- <sink_block_id>blocks_add_xx_1</sink_block_id>
+ <source_block_id>blocks_multiply_xx_2_0</source_block_id>
+ <sink_block_id>blocks_short_to_float_1_0</sink_block_id>
<source_key>0</source_key>
- <sink_key>1</sink_key>
+ <sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
- <sink_block_id>blocks_add_xx_1</sink_block_id>
+ <source_block_id>blocks_short_to_float_1_0</source_block_id>
+ <sink_block_id>qtgui_number_sink_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
diff --git a/gr-trellis/examples/grc/sccc1.grc b/gr-trellis/examples/grc/sccc1.grc
index 4fdf81c811..71b3f76625 100644
--- a/gr-trellis/examples/grc/sccc1.grc
+++ b/gr-trellis/examples/grc/sccc1.grc
@@ -1,6 +1,6 @@
<?xml version='1.0' encoding='ASCII'?>
<flow_graph>
- <timestamp>Sat Nov 10 15:41:10 2012</timestamp>
+ <timestamp>Mon Jul 28 14:10:35 2014</timestamp>
<block>
<key>options</key>
<param>
@@ -29,7 +29,7 @@
</param>
<param>
<key>generate_options</key>
- <value>wx_gui</value>
+ <value>qt_gui</value>
</param>
<param>
<key>category</key>
@@ -52,6 +52,10 @@
<value></value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(10, 10)</value>
</param>
@@ -64,7 +68,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>noisevar</value>
+ <value>prefix</value>
</param>
<param>
<key>_enabled</key>
@@ -72,11 +76,15 @@
</param>
<param>
<key>value</key>
- <value>10**(-snr_db/10)</value>
+ <value>"@FSM_FILE_INSTALL_DIR@"</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(389, 15)</value>
+ <value>(513, 10)</value>
</param>
<param>
<key>_rotation</key>
@@ -84,38 +92,26 @@
</param>
</block>
<block>
- <key>analog_random_source_x</key>
+ <key>variable</key>
<param>
<key>id</key>
- <value>analog_random_source_x_0</value>
+ <value>block</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>short</value>
- </param>
- <param>
- <key>min</key>
- <value>0</value>
- </param>
- <param>
- <key>max</key>
- <value>2</value>
- </param>
- <param>
- <key>num_samps</key>
+ <key>value</key>
<value>1000</value>
</param>
<param>
- <key>repeat</key>
- <value>True</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(21, 170)</value>
+ <value>(441, 10)</value>
</param>
<param>
<key>_rotation</key>
@@ -126,7 +122,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>prefix</value>
+ <value>R</value>
</param>
<param>
<key>_enabled</key>
@@ -134,11 +130,15 @@
</param>
<param>
<key>value</key>
- <value>"/n/harrisville/x/anastas/gnuradio_trunk/"</value>
+ <value>100e3</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(590, 15)</value>
+ <value>(358, 10)</value>
</param>
<param>
<key>_rotation</key>
@@ -149,7 +149,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>block</value>
+ <value>noisevar</value>
</param>
<param>
<key>_enabled</key>
@@ -157,11 +157,15 @@
</param>
<param>
<key>value</key>
- <value>1000</value>
+ <value>10**(-snr_db/10)</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(764, 16)</value>
+ <value>(279, 10)</value>
</param>
<param>
<key>_rotation</key>
@@ -169,77 +173,54 @@
</param>
</block>
<block>
- <key>variable_slider</key>
+ <key>analog_random_source_x</key>
<param>
<key>id</key>
- <value>snr_db</value>
+ <value>analog_random_source_x_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>label</key>
- <value>SNR (dB)</value>
- </param>
- <param>
- <key>value</key>
- <value>5</value>
+ <key>type</key>
+ <value>short</value>
</param>
<param>
<key>min</key>
- <value>-10</value>
+ <value>0</value>
</param>
<param>
<key>max</key>
- <value>10</value>
- </param>
- <param>
- <key>num_steps</key>
- <value>100</value>
+ <value>2</value>
</param>
<param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
+ <key>num_samps</key>
+ <value>1000</value>
</param>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>repeat</key>
+ <value>True</value>
</param>
<param>
- <key>grid_pos</key>
+ <key>alias</key>
<value></value>
</param>
<param>
- <key>notebook</key>
+ <key>affinity</key>
<value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(229, 13)</value>
- </param>
- <param>
- <key>_rotation</key>
+ <key>minoutbuf</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>variable</key>
- <param>
- <key>id</key>
- <value>R</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
<param>
- <key>value</key>
- <value>10e3</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(482, 17)</value>
+ <value>(21, 170)</value>
</param>
<param>
<key>_rotation</key>
@@ -247,10 +228,10 @@
</param>
</block>
<block>
- <key>trellis_sccc_encoder_xx</key>
+ <key>blocks_throttle</key>
<param>
<key>id</key>
- <value>trellis_sccc_encoder_xx_0</value>
+ <value>blocks_throttle_0</value>
</param>
<param>
<key>_enabled</key>
@@ -258,35 +239,39 @@
</param>
<param>
<key>type</key>
- <value>ss</value>
+ <value>short</value>
</param>
<param>
- <key>o_fsm_args</key>
- <value>prefix+"gr-trellis/src/examples/fsm_files/awgn1o2_4.fsm"</value>
+ <key>samples_per_second</key>
+ <value>R</value>
</param>
<param>
- <key>o_init_state</key>
- <value>0</value>
+ <key>vlen</key>
+ <value>1</value>
</param>
<param>
- <key>i_fsm_args</key>
- <value>prefix+"gr-trellis/src/examples/fsm_files/awgn2o3_4.fsm"</value>
+ <key>ignoretag</key>
+ <value>True</value>
</param>
<param>
- <key>i_init_state</key>
- <value>0</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>interleaver_args</key>
- <value>trellis.interleaver(block,666)</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>bl</key>
- <value>block</value>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(242, 154)</value>
+ <value>(607, 110)</value>
</param>
<param>
<key>_rotation</key>
@@ -294,62 +279,46 @@
</param>
</block>
<block>
- <key>trellis_sccc_decoder_x</key>
+ <key>blocks_add_xx</key>
<param>
<key>id</key>
- <value>trellis_sccc_decoder_x_0</value>
+ <value>blocks_add_xx_1</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>out_type</key>
- <value>s</value>
+ <key>type</key>
+ <value>float</value>
</param>
<param>
- <key>o_fsm_args</key>
- <value>prefix+"gr-trellis/src/examples/fsm_files/awgn1o2_4.fsm"</value>
+ <key>num_inputs</key>
+ <value>2</value>
</param>
<param>
- <key>o_init_state</key>
- <value>0</value>
+ <key>vlen</key>
+ <value>1</value>
</param>
<param>
- <key>o_final_state</key>
- <value>-1</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>i_fsm_args</key>
- <value>prefix+"gr-trellis/src/examples/fsm_files/awgn2o3_4.fsm"</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>i_init_state</key>
+ <key>minoutbuf</key>
<value>0</value>
</param>
<param>
- <key>i_final_state</key>
- <value>-1</value>
- </param>
- <param>
- <key>interleaver</key>
- <value>trellis.interleaver(block,666)</value>
- </param>
- <param>
- <key>block_size</key>
- <value>block</value>
- </param>
- <param>
- <key>iterations</key>
- <value>10</value>
- </param>
- <param>
- <key>siso_type</key>
- <value>trellis.TRELLIS_MIN_SUM</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(333, 305)</value>
+ <value>(932, 187)</value>
</param>
<param>
<key>_rotation</key>
@@ -357,10 +326,10 @@
</param>
</block>
<block>
- <key>blocks_sub_xx</key>
+ <key>blocks_multiply_xx</key>
<param>
<key>id</key>
- <value>blocks_sub_xx_0</value>
+ <value>blocks_multiply_xx_2_0</value>
</param>
<param>
<key>_enabled</key>
@@ -371,16 +340,32 @@
<value>short</value>
</param>
<param>
+ <key>num_inputs</key>
+ <value>2</value>
+ </param>
+ <param>
<key>vlen</key>
<value>1</value>
</param>
<param>
- <key>num_inputs</key>
- <value>2</value>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(217, 597)</value>
+ <value>(233, 480)</value>
</param>
<param>
<key>_rotation</key>
@@ -388,10 +373,10 @@
</param>
</block>
<block>
- <key>blocks_multiply_xx</key>
+ <key>blocks_sub_xx</key>
<param>
<key>id</key>
- <value>blocks_multiply_xx_2_0</value>
+ <value>blocks_sub_xx_0</value>
</param>
<param>
<key>_enabled</key>
@@ -402,16 +387,32 @@
<value>short</value>
</param>
<param>
+ <key>vlen</key>
+ <value>1</value>
+ </param>
+ <param>
<key>num_inputs</key>
<value>2</value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(392, 591)</value>
+ <value>(58, 486)</value>
</param>
<param>
<key>_rotation</key>
@@ -437,8 +438,24 @@
<value>1</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(535, 609)</value>
+ <value>(376, 498)</value>
</param>
<param>
<key>_rotation</key>
@@ -446,10 +463,10 @@
</param>
</block>
<block>
- <key>wxgui_numbersink2</key>
+ <key>trellis_metrics_x</key>
<param>
<key>id</key>
- <value>wxgui_numbersink2_3_0</value>
+ <value>trellis_metrics_x_0</value>
</param>
<param>
<key>_enabled</key>
@@ -457,75 +474,98 @@
</param>
<param>
<key>type</key>
- <value>float</value>
+ <value>f</value>
</param>
<param>
- <key>title</key>
- <value>BER</value>
+ <key>card</key>
+ <value>8</value>
</param>
<param>
- <key>units</key>
- <value>BER</value>
+ <key>dim</key>
+ <value>1</value>
</param>
<param>
- <key>samp_rate</key>
- <value>R</value>
+ <key>table</key>
+ <value>-7, -5, -3, -1, 1, 3, 5, 7</value>
</param>
<param>
- <key>min_value</key>
- <value>0</value>
+ <key>metric_type</key>
+ <value>digital.TRELLIS_EUCLIDEAN</value>
</param>
<param>
- <key>max_value</key>
- <value>1.0</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>factor</key>
- <value>1.0</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>decimal_places</key>
- <value>6</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>ref_level</key>
+ <key>maxoutbuf</key>
<value>0</value>
</param>
<param>
- <key>number_rate</key>
- <value>15</value>
+ <key>_coordinate</key>
+ <value>(63, 328)</value>
</param>
<param>
- <key>peak_hold</key>
- <value>False</value>
+ <key>_rotation</key>
+ <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>average</key>
+ <key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>avg_alpha</key>
- <value>0.001</value>
+ <key>in_type</key>
+ <value>short</value>
</param>
<param>
- <key>show_gauge</key>
- <value>True</value>
+ <key>out_type</key>
+ <value>float</value>
</param>
<param>
- <key>win_size</key>
- <value></value>
+ <key>symbol_table</key>
+ <value>-7,-5,-3,-1,1,3,5,7</value>
</param>
<param>
- <key>grid_pos</key>
- <value>1,0,1,1</value>
+ <key>dimension</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>num_ports</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>notebook</key>
+ <key>affinity</key>
<value></value>
</param>
<param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(713, 426)</value>
+ <value>(607, 175)</value>
</param>
<param>
<key>_rotation</key>
@@ -533,10 +573,10 @@
</param>
</block>
<block>
- <key>trellis_metrics_x</key>
+ <key>analog_noise_source_x</key>
<param>
<key>id</key>
- <value>trellis_metrics_x_0</value>
+ <value>analog_noise_source_x_0</value>
</param>
<param>
<key>_enabled</key>
@@ -544,27 +584,39 @@
</param>
<param>
<key>type</key>
- <value>f</value>
+ <value>float</value>
</param>
<param>
- <key>card</key>
- <value>8</value>
+ <key>noise_type</key>
+ <value>analog.GR_GAUSSIAN</value>
</param>
<param>
- <key>dim</key>
- <value>1</value>
+ <key>amp</key>
+ <value>noisevar</value>
</param>
<param>
- <key>table</key>
- <value>-7, -5, -3, -1, 1, 3, 5, 7</value>
+ <key>seed</key>
+ <value>-42</value>
</param>
<param>
- <key>metric_type</key>
- <value>digital.TRELLIS_EUCLIDEAN</value>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(58, 354)</value>
+ <value>(606, 242)</value>
</param>
<param>
<key>_rotation</key>
@@ -572,105 +624,226 @@
</param>
</block>
<block>
- <key>wxgui_scopesink2</key>
+ <key>qtgui_number_sink</key>
<param>
<key>id</key>
- <value>wxgui_scopesink2_0</value>
+ <value>qtgui_number_sink_0</value>
</param>
<param>
<key>_enabled</key>
- <value>False</value>
+ <value>True</value>
+ </param>
+ <param>
+ <key>name</key>
+ <value>""</value>
</param>
<param>
<key>type</key>
<value>float</value>
</param>
<param>
- <key>title</key>
- <value>Scope Plot</value>
+ <key>autoscale</key>
+ <value>False</value>
</param>
<param>
- <key>samp_rate</key>
- <value>R</value>
+ <key>avg</key>
+ <value>0.001</value>
</param>
<param>
- <key>v_scale</key>
- <value>0</value>
+ <key>graph_type</key>
+ <value>qtgui.NUM_GRAPH_HORIZ</value>
</param>
<param>
- <key>v_offset</key>
- <value>0</value>
+ <key>nconnections</key>
+ <value>1</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>False</value>
+ <key>update_time</key>
+ <value>0.10</value>
</param>
<param>
- <key>num_inputs</key>
+ <key>gui_hint</key>
+ <value>1,0,1,1</value>
+ </param>
+ <param>
+ <key>label1</key>
+ <value></value>
+ </param>
+ <param>
+ <key>unit1</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color1</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor1</key>
<value>1</value>
</param>
<param>
- <key>win_size</key>
+ <key>label2</key>
<value></value>
</param>
<param>
- <key>grid_pos</key>
+ <key>unit2</key>
<value></value>
</param>
<param>
- <key>notebook</key>
+ <key>color2</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor2</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>label3</key>
<value></value>
</param>
<param>
- <key>trig_mode</key>
- <value>wxgui.TRIG_MODE_AUTO</value>
+ <key>unit3</key>
+ <value></value>
</param>
<param>
- <key>y_axis_label</key>
- <value>Counts</value>
+ <key>color3</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(952, 73)</value>
+ <key>factor3</key>
+ <value>1</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>label4</key>
+ <value></value>
</param>
- </block>
- <block>
- <key>blocks_throttle</key>
<param>
- <key>id</key>
- <value>blocks_throttle_0</value>
+ <key>unit4</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>color4</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>type</key>
- <value>short</value>
+ <key>factor4</key>
+ <value>1</value>
</param>
<param>
- <key>samples_per_second</key>
- <value>R</value>
+ <key>label5</key>
+ <value></value>
</param>
<param>
- <key>vlen</key>
+ <key>unit5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color5</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor5</key>
<value>1</value>
</param>
<param>
+ <key>label6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>unit6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color6</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor6</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>label7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>unit7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color7</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor7</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>label8</key>
+ <value></value>
+ </param>
+ <param>
+ <key>unit8</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color8</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>label9</key>
+ <value></value>
+ </param>
+ <param>
+ <key>unit9</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color9</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>label10</key>
+ <value></value>
+ </param>
+ <param>
+ <key>unit10</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color10</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(517, 103)</value>
+ <value>(609, 482)</value>
</param>
<param>
<key>_rotation</key>
@@ -678,49 +851,69 @@
</param>
</block>
<block>
- <key>digital_chunks_to_symbols_xx</key>
+ <key>variable_qtgui_range</key>
<param>
<key>id</key>
- <value>digital_chunks_to_symbols_xx_0</value>
+ <value>snr_db</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>in_type</key>
- <value>short</value>
+ <key>label</key>
+ <value>SNR (dB)</value>
</param>
<param>
- <key>out_type</key>
- <value>float</value>
+ <key>value</key>
+ <value>5</value>
</param>
<param>
- <key>symbol_table</key>
- <value>-7,-5,-3,-1,1,3,5,7</value>
+ <key>start</key>
+ <value>-10</value>
</param>
<param>
- <key>dimension</key>
- <value>1</value>
+ <key>stop</key>
+ <value>10</value>
</param>
<param>
- <key>num_ports</key>
- <value>1</value>
+ <key>step</key>
+ <value>0.01</value>
+ </param>
+ <param>
+ <key>widget</key>
+ <value>counter_slider</value>
+ </param>
+ <param>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
+ </param>
+ <param>
+ <key>min_len</key>
+ <value>200</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value></value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(607, 175)</value>
+ <value>(177, 10)</value>
</param>
<param>
<key>_rotation</key>
- <value>0</value>
+ <value>180</value>
</param>
</block>
<block>
- <key>blocks_add_xx</key>
+ <key>trellis_sccc_encoder_xx</key>
<param>
<key>id</key>
- <value>blocks_add_xx_1</value>
+ <value>trellis_sccc_encoder_xx_0</value>
</param>
<param>
<key>_enabled</key>
@@ -728,19 +921,51 @@
</param>
<param>
<key>type</key>
- <value>float</value>
+ <value>ss</value>
</param>
<param>
- <key>num_inputs</key>
- <value>2</value>
+ <key>o_fsm_args</key>
+ <value>prefix+"/awgn1o2_4.fsm"</value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>o_init_state</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>i_fsm_args</key>
+ <value>prefix+"/awgn2o3_4.fsm"</value>
+ </param>
+ <param>
+ <key>i_init_state</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>interleaver_args</key>
+ <value>trellis.interleaver(block,666)</value>
+ </param>
+ <param>
+ <key>bl</key>
+ <value>block</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(951, 256)</value>
+ <value>(294, 154)</value>
</param>
<param>
<key>_rotation</key>
@@ -748,34 +973,78 @@
</param>
</block>
<block>
- <key>analog_noise_source_x</key>
+ <key>trellis_sccc_decoder_x</key>
<param>
<key>id</key>
- <value>analog_noise_source_x_0</value>
+ <value>trellis_sccc_decoder_x_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>float</value>
+ <key>out_type</key>
+ <value>s</value>
</param>
<param>
- <key>noise_type</key>
- <value>analog.GR_GAUSSIAN</value>
+ <key>o_fsm_args</key>
+ <value>prefix+"/awgn1o2_4.fsm"</value>
</param>
<param>
- <key>amp</key>
- <value>noisevar</value>
+ <key>o_init_state</key>
+ <value>0</value>
</param>
<param>
- <key>seed</key>
- <value>-42</value>
+ <key>o_final_state</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>i_fsm_args</key>
+ <value>prefix+"/awgn2o3_4.fsm"</value>
+ </param>
+ <param>
+ <key>i_init_state</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>i_final_state</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>interleaver</key>
+ <value>trellis.interleaver(block,666)</value>
+ </param>
+ <param>
+ <key>block_size</key>
+ <value>block</value>
+ </param>
+ <param>
+ <key>iterations</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>siso_type</key>
+ <value>trellis.TRELLIS_MIN_SUM</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(632, 254)</value>
+ <value>(292, 280)</value>
</param>
<param>
<key>_rotation</key>
@@ -789,12 +1058,6 @@
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>blocks_add_xx_1</source_block_id>
- <sink_block_id>wxgui_scopesink2_0</sink_block_id>
- <source_key>0</source_key>
- <sink_key>0</sink_key>
- </connection>
- <connection>
<source_block_id>analog_random_source_x_0</source_block_id>
<sink_block_id>trellis_sccc_encoder_xx_0</sink_block_id>
<source_key>0</source_key>
@@ -807,30 +1070,6 @@
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>blocks_multiply_xx_2_0</source_block_id>
- <sink_block_id>blocks_short_to_float_1_0</sink_block_id>
- <source_key>0</source_key>
- <sink_key>0</sink_key>
- </connection>
- <connection>
- <source_block_id>blocks_short_to_float_1_0</source_block_id>
- <sink_block_id>wxgui_numbersink2_3_0</sink_block_id>
- <source_key>0</source_key>
- <sink_key>0</sink_key>
- </connection>
- <connection>
- <source_block_id>blocks_sub_xx_0</source_block_id>
- <sink_block_id>blocks_multiply_xx_2_0</sink_block_id>
- <source_key>0</source_key>
- <sink_key>0</sink_key>
- </connection>
- <connection>
- <source_block_id>blocks_sub_xx_0</source_block_id>
- <sink_block_id>blocks_multiply_xx_2_0</sink_block_id>
- <source_key>0</source_key>
- <sink_key>1</sink_key>
- </connection>
- <connection>
<source_block_id>blocks_add_xx_1</source_block_id>
<sink_block_id>trellis_metrics_x_0</sink_block_id>
<source_key>0</source_key>
@@ -866,4 +1105,28 @@
<source_key>0</source_key>
<sink_key>1</sink_key>
</connection>
+ <connection>
+ <source_block_id>blocks_sub_xx_0</source_block_id>
+ <sink_block_id>blocks_multiply_xx_2_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>1</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>blocks_sub_xx_0</source_block_id>
+ <sink_block_id>blocks_multiply_xx_2_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>blocks_multiply_xx_2_0</source_block_id>
+ <sink_block_id>blocks_short_to_float_1_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>blocks_short_to_float_1_0</source_block_id>
+ <sink_block_id>qtgui_number_sink_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
</flow_graph>
diff --git a/gr-trellis/grc/trellis_encoder_xx.xml b/gr-trellis/grc/trellis_encoder_xx.xml
index fe9c38f22c..d877d53c53 100644
--- a/gr-trellis/grc/trellis_encoder_xx.xml
+++ b/gr-trellis/grc/trellis_encoder_xx.xml
@@ -6,72 +6,73 @@
-->
<block>
- <name>Trellis Encoder</name>
- <key>trellis_encoder_xx</key>
- <category>Trellis Coding</category>
- <import>from gnuradio import trellis</import>
- <make>trellis.encoder_$(type)(trellis.fsm($fsm_args), $init_state)</make>
- <param>
- <name>Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Byte->Byte</name>
- <key>bb</key>
- <opt>input:byte</opt>
- <opt>output:byte</opt>
- </option>
- <option>
- <name>Byte->Short</name>
- <key>bs</key>
- <opt>input:byte</opt>
- <opt>output:short</opt>
- </option>
- <option>
- <name>Byte->Int</name>
- <key>bi</key>
- <opt>input:byte</opt>
- <opt>output:int</opt>
- </option>
- <option>
- <name>Short->Short</name>
- <key>ss</key>
- <opt>input:short</opt>
- <opt>output:short</opt>
- </option>
- <option>
- <name>Short->Int</name>
- <key>si</key>
- <opt>input:short</opt>
- <opt>output:int</opt>
- </option>
- <option>
- <name>Int->Int</name>
- <key>ii</key>
- <opt>input:int</opt>
- <opt>output:int</opt>
- </option>
- </param>
- <param>
- <name>FSM Args</name>
- <key>fsm_args</key>
- <type>raw</type>
- </param>
- <param>
- <name>Initial State</name>
- <key>init_state</key>
- <value>0</value>
- <type>int</type>
- </param>
- <sink>
- <name>in</name>
- <type>$type.input</type>
- </sink>
- <source>
- <name>out</name>
- <type>$type.output</type>
- </source>
- <doc>
+ <name>Trellis Encoder</name>
+ <key>trellis_encoder_xx</key>
+ <category>Trellis Coding</category>
+ <import>from gnuradio import trellis</import>
+ <make>trellis.encoder_$(type)(trellis.fsm($fsm_args), $init_state)</make>
+ <param>
+ <name>Type</name>
+ <key>type</key>
+ <type>enum</type>
+ <option>
+ <name>Byte->Byte</name>
+ <key>bb</key>
+ <opt>input:byte</opt>
+ <opt>output:byte</opt>
+ </option>
+ <option>
+ <name>Byte->Short</name>
+ <key>bs</key>
+ <opt>input:byte</opt>
+ <opt>output:short</opt>
+ </option>
+ <option>
+ <name>Byte->Int</name>
+ <key>bi</key>
+ <opt>input:byte</opt>
+ <opt>output:int</opt>
+ </option>
+ <option>
+ <name>Short->Short</name>
+ <key>ss</key>
+ <opt>input:short</opt>
+ <opt>output:short</opt>
+ </option>
+ <option>
+ <name>Short->Int</name>
+ <key>si</key>
+ <opt>input:short</opt>
+ <opt>output:int</opt>
+ </option>
+ <option>
+ <name>Int->Int</name>
+ <key>ii</key>
+ <opt>input:int</opt>
+ <opt>output:int</opt>
+ </option>
+ </param>
+ <param>
+ <name>FSM Args</name>
+ <key>fsm_args</key>
+ <type>raw</type>
+ </param>
+ <param>
+ <name>Initial State</name>
+ <key>init_state</key>
+ <value>0</value>
+ <type>int</type>
+ </param>
+ <check>(isinstance(eval(""" $fsm_args """[1:-1], locals(),globals()), str) and open($fsm_args).close()) or True</check>
+ <sink>
+ <name>in</name>
+ <type>$type.input</type>
+ </sink>
+ <source>
+ <name>out</name>
+ <type>$type.output</type>
+ </source>
+ <doc>
The fsm arguments are passed directly to the trellis.fsm() constructor.
- </doc>
+ </doc>
</block>
diff --git a/gr-trellis/grc/trellis_pccc_decoder_combined_xx.xml b/gr-trellis/grc/trellis_pccc_decoder_combined_xx.xml
index 2583f0858b..9bb4b034ac 100644
--- a/gr-trellis/grc/trellis_pccc_decoder_combined_xx.xml
+++ b/gr-trellis/grc/trellis_pccc_decoder_combined_xx.xml
@@ -7,164 +7,166 @@
<block>
- <name>PCCC Decoder Combo</name>
- <key>trellis_pccc_decoder_combined_xx</key>
- <category>Trellis Coding</category>
- <import>from gnuradio import trellis, digital</import>
- <make>trellis.pccc_decoder_combined_$(type)$(out_type)(
- trellis.fsm($o_fsm_args), $o_init_state, $o_final_state,
- trellis.fsm($i_fsm_args), $i_init_state, $i_final_state,
- trellis.interleaver($interleaver),
- $block_size,
- $iterations,
- $siso_type,
- $dim, $table, $metric_type,
- $scaling)
- </make>
+ <name>PCCC Decoder Combo</name>
+ <key>trellis_pccc_decoder_combined_xx</key>
+ <category>Trellis Coding</category>
+ <import>from gnuradio import trellis, digital</import>
+ <make>trellis.pccc_decoder_combined_$(type)$(out_type)(
+ trellis.fsm($o_fsm_args), $o_init_state, $o_final_state,
+ trellis.fsm($i_fsm_args), $i_init_state, $i_final_state,
+ trellis.interleaver($interleaver),
+ $block_size,
+ $iterations,
+ $siso_type,
+ $dim, $table, $metric_type,
+ $scaling)
+ </make>
<callback>set_TABLE($table)</callback>
- <param>
- <name>Input Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>c</key>
- <opt>io:complex</opt>
- <opt>table:complex_vector</opt>
- </option>
- <option>
- <name>Float</name>
- <key>f</key>
- <opt>io:float</opt>
- <opt>table:real_vector</opt>
- </option>
- </param>
- <param>
- <name>Output Type</name>
- <key>out_type</key>
- <type>enum</type>
- <option>
- <name>Int</name>
- <key>i</key>
- <opt>io:int</opt>
- </option>
- <option>
- <name>Short</name>
- <key>s</key>
- <opt>io:short</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>b</key>
- <opt>io:byte</opt>
- </option>
- </param>
- <param>
- <name>FSM 1</name>
- <key>o_fsm_args</key>
- <type>raw</type>
- </param>
- <param>
- <name>Initial State 1</name>
- <key>o_init_state</key>
- <value>0</value>
- <type>int</type>
- </param>
- <param>
- <name>Final State 1</name>
- <key>o_final_state</key>
- <value>-1</value>
- <type>int</type>
- </param>
- <param>
- <name>FSM 2</name>
- <key>i_fsm_args</key>
- <type>raw</type>
- </param>
- <param>
- <name>Initial State 2</name>
- <key>i_init_state</key>
- <value>0</value>
- <type>int</type>
- </param>
- <param>
- <name>Final State 2</name>
- <key>i_final_state</key>
- <value>-1</value>
- <type>int</type>
- </param>
- <param>
- <name>Interleaver</name>
- <key>interleaver</key>
- <type>raw</type>
- </param>
- <param>
- <name>Block Size</name>
- <key>block_size</key>
- <type>int</type>
- </param>
- <param>
- <name>Iterations</name>
- <key>iterations</key>
- <value>10</value>
- <type>int</type>
- </param>
- <param>
- <name>Dimensionality</name>
- <key>dim</key>
- <type>int</type>
- </param>
- <param>
- <name>Constellation</name>
- <key>table</key>
- <type>$type.table</type>
- </param>
- <param>
- <name>Metric Type</name>
- <key>metric_type</key>
- <type>enum</type>
- <option>
- <name>Euclidean</name>
- <key>digital.TRELLIS_EUCLIDEAN</key>
- </option>
- <option>
- <name>Hard Symbol</name>
- <key>digital.TRELLIS_HARD_SYMBOL</key>
- </option>
- <option>
- <name>Hard Bit</name>
- <key>digital.TRELLIS_HARD_BIT</key>
- </option>
- </param>
- <param>
- <name>SISO Type</name>
- <key>siso_type</key>
- <type>enum</type>
- <option>
- <name>Min Sum</name>
- <key>trellis.TRELLIS_MIN_SUM</key>
- </option>
- <option>
- <name>Sum Product</name>
- <key>trellis.TRELLIS_SUM_PRODUCT</key>
- </option>
- </param>
- <param>
- <name>Scaling</name>
- <key>scaling</key>
- <value>1.0</value>
- <type>real</type>
- </param>
- <sink>
- <name>in</name>
- <type>$type.io</type>
- </sink>
- <source>
- <name>out</name>
- <type>$out_type.io</type>
- </source>
- <doc>
+ <param>
+ <name>Input Type</name>
+ <key>type</key>
+ <type>enum</type>
+ <option>
+ <name>Complex</name>
+ <key>c</key>
+ <opt>io:complex</opt>
+ <opt>table:complex_vector</opt>
+ </option>
+ <option>
+ <name>Float</name>
+ <key>f</key>
+ <opt>io:float</opt>
+ <opt>table:real_vector</opt>
+ </option>
+ </param>
+ <param>
+ <name>Output Type</name>
+ <key>out_type</key>
+ <type>enum</type>
+ <option>
+ <name>Int</name>
+ <key>i</key>
+ <opt>io:int</opt>
+ </option>
+ <option>
+ <name>Short</name>
+ <key>s</key>
+ <opt>io:short</opt>
+ </option>
+ <option>
+ <name>Byte</name>
+ <key>b</key>
+ <opt>io:byte</opt>
+ </option>
+ </param>
+ <param>
+ <name>FSM 1</name>
+ <key>o_fsm_args</key>
+ <type>raw</type>
+ </param>
+ <param>
+ <name>Initial State 1</name>
+ <key>o_init_state</key>
+ <value>0</value>
+ <type>int</type>
+ </param>
+ <param>
+ <name>Final State 1</name>
+ <key>o_final_state</key>
+ <value>-1</value>
+ <type>int</type>
+ </param>
+ <param>
+ <name>FSM 2</name>
+ <key>i_fsm_args</key>
+ <type>raw</type>
+ </param>
+ <param>
+ <name>Initial State 2</name>
+ <key>i_init_state</key>
+ <value>0</value>
+ <type>int</type>
+ </param>
+ <param>
+ <name>Final State 2</name>
+ <key>i_final_state</key>
+ <value>-1</value>
+ <type>int</type>
+ </param>
+ <param>
+ <name>Interleaver</name>
+ <key>interleaver</key>
+ <type>raw</type>
+ </param>
+ <param>
+ <name>Block Size</name>
+ <key>block_size</key>
+ <type>int</type>
+ </param>
+ <param>
+ <name>Iterations</name>
+ <key>iterations</key>
+ <value>10</value>
+ <type>int</type>
+ </param>
+ <param>
+ <name>Dimensionality</name>
+ <key>dim</key>
+ <type>int</type>
+ </param>
+ <param>
+ <name>Constellation</name>
+ <key>table</key>
+ <type>$type.table</type>
+ </param>
+ <param>
+ <name>Metric Type</name>
+ <key>metric_type</key>
+ <type>enum</type>
+ <option>
+ <name>Euclidean</name>
+ <key>digital.TRELLIS_EUCLIDEAN</key>
+ </option>
+ <option>
+ <name>Hard Symbol</name>
+ <key>digital.TRELLIS_HARD_SYMBOL</key>
+ </option>
+ <option>
+ <name>Hard Bit</name>
+ <key>digital.TRELLIS_HARD_BIT</key>
+ </option>
+ </param>
+ <param>
+ <name>SISO Type</name>
+ <key>siso_type</key>
+ <type>enum</type>
+ <option>
+ <name>Min Sum</name>
+ <key>trellis.TRELLIS_MIN_SUM</key>
+ </option>
+ <option>
+ <name>Sum Product</name>
+ <key>trellis.TRELLIS_SUM_PRODUCT</key>
+ </option>
+ </param>
+ <param>
+ <name>Scaling</name>
+ <key>scaling</key>
+ <value>1.0</value>
+ <type>real</type>
+ </param>
+ <check>(isinstance(eval(""" $o_fsm_args """[1:-1], locals(),globals()), str) and open($o_fsm_args).close()) or True</check>
+ <check>(isinstance(eval(""" $i_fsm_args """[1:-1], locals(),globals()), str) and open($i_fsm_args).close()) or True </check>
+ <sink>
+ <name>in</name>
+ <type>$type.io</type>
+ </sink>
+ <source>
+ <name>out</name>
+ <type>$out_type.io</type>
+ </source>
+ <doc>
PCCC turbo Decoder combined with metric calculation.
The fsm arguments are passed directly to the trellis.fsm() constructor.
- </doc>
+ </doc>
</block>
diff --git a/gr-trellis/grc/trellis_pccc_decoder_x.xml b/gr-trellis/grc/trellis_pccc_decoder_x.xml
index 046731547b..81f4282728 100644
--- a/gr-trellis/grc/trellis_pccc_decoder_x.xml
+++ b/gr-trellis/grc/trellis_pccc_decoder_x.xml
@@ -7,111 +7,113 @@
<block>
- <name>PCCC Decoder</name>
- <key>trellis_pccc_decoder_x</key>
- <category>Trellis Coding</category>
- <import>from gnuradio import trellis</import>
- <make>trellis.pccc_decoder_$(out_type)(
- trellis.fsm($o_fsm_args), $o_init_state, $o_final_state,
- trellis.fsm($i_fsm_args), $i_init_state, $i_final_state,
- trellis.interleaver($interleaver),
- $block_size,
- $iterations,
+ <name>PCCC Decoder</name>
+ <key>trellis_pccc_decoder_x</key>
+ <category>Trellis Coding</category>
+ <import>from gnuradio import trellis</import>
+ <make>trellis.pccc_decoder_$(out_type)(
+ trellis.fsm($o_fsm_args), $o_init_state, $o_final_state,
+ trellis.fsm($i_fsm_args), $i_init_state, $i_final_state,
+ trellis.interleaver($interleaver),
+ $block_size,
+ $iterations,
$siso_type)
- </make>
- <param>
- <name>Output Type</name>
- <key>out_type</key>
- <type>enum</type>
- <option>
- <name>Int</name>
- <key>i</key>
- <opt>io:int</opt>
- </option>
- <option>
- <name>Short</name>
- <key>s</key>
- <opt>io:short</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>b</key>
- <opt>io:byte</opt>
- </option>
- </param>
- <param>
- <name>FSM 1</name>
- <key>o_fsm_args</key>
- <type>raw</type>
- </param>
- <param>
- <name>Initial State 1</name>
- <key>o_init_state</key>
- <value>0</value>
- <type>int</type>
- </param>
- <param>
- <name>Final State 1</name>
- <key>o_final_state</key>
- <value>-1</value>
- <type>int</type>
- </param>
- <param>
- <name>FSM 2</name>
- <key>i_fsm_args</key>
- <type>raw</type>
- </param>
- <param>
- <name>Initial State 2</name>
- <key>i_init_state</key>
- <value>0</value>
- <type>int</type>
- </param>
- <param>
- <name>Final State 2</name>
- <key>i_final_state</key>
- <value>-1</value>
- <type>int</type>
- </param>
- <param>
- <name>Interleaver</name>
- <key>interleaver</key>
- <type>raw</type>
- </param>
- <param>
- <name>Block Size</name>
- <key>block_size</key>
- <type>int</type>
- </param>
- <param>
- <name>Iterations</name>
- <key>iterations</key>
- <value>10</value>
- <type>int</type>
- </param>
- <param>
- <name>SISO Type</name>
- <key>siso_type</key>
- <type>enum</type>
- <option>
- <name>Min Sum</name>
- <key>trellis.TRELLIS_MIN_SUM</key>
- </option>
- <option>
- <name>Sum Product</name>
- <key>trellis.TRELLIS_SUM_PRODUCT</key>
- </option>
- </param>
- <sink>
- <name>in</name>
- <type>float</type>
- </sink>
- <source>
- <name>out</name>
- <type>$out_type.io</type>
- </source>
- <doc>
+ </make>
+ <param>
+ <name>Output Type</name>
+ <key>out_type</key>
+ <type>enum</type>
+ <option>
+ <name>Int</name>
+ <key>i</key>
+ <opt>io:int</opt>
+ </option>
+ <option>
+ <name>Short</name>
+ <key>s</key>
+ <opt>io:short</opt>
+ </option>
+ <option>
+ <name>Byte</name>
+ <key>b</key>
+ <opt>io:byte</opt>
+ </option>
+ </param>
+ <param>
+ <name>FSM 1</name>
+ <key>o_fsm_args</key>
+ <type>raw</type>
+ </param>
+ <param>
+ <name>Initial State 1</name>
+ <key>o_init_state</key>
+ <value>0</value>
+ <type>int</type>
+ </param>
+ <param>
+ <name>Final State 1</name>
+ <key>o_final_state</key>
+ <value>-1</value>
+ <type>int</type>
+ </param>
+ <param>
+ <name>FSM 2</name>
+ <key>i_fsm_args</key>
+ <type>raw</type>
+ </param>
+ <param>
+ <name>Initial State 2</name>
+ <key>i_init_state</key>
+ <value>0</value>
+ <type>int</type>
+ </param>
+ <param>
+ <name>Final State 2</name>
+ <key>i_final_state</key>
+ <value>-1</value>
+ <type>int</type>
+ </param>
+ <param>
+ <name>Interleaver</name>
+ <key>interleaver</key>
+ <type>raw</type>
+ </param>
+ <param>
+ <name>Block Size</name>
+ <key>block_size</key>
+ <type>int</type>
+ </param>
+ <param>
+ <name>Iterations</name>
+ <key>iterations</key>
+ <value>10</value>
+ <type>int</type>
+ </param>
+ <param>
+ <name>SISO Type</name>
+ <key>siso_type</key>
+ <type>enum</type>
+ <option>
+ <name>Min Sum</name>
+ <key>trellis.TRELLIS_MIN_SUM</key>
+ </option>
+ <option>
+ <name>Sum Product</name>
+ <key>trellis.TRELLIS_SUM_PRODUCT</key>
+ </option>
+ </param>
+ <check>(isinstance(eval(""" $o_fsm_args """[1:-1], locals(),globals()), str) and open($o_fsm_args).close()) or True</check>
+ <check>(isinstance(eval(""" $i_fsm_args """[1:-1], locals(),globals()), str) and open($i_fsm_args).close()) or True </check>
+ <sink>
+ <name>in</name>
+ <type>float</type>
+ </sink>
+ <source>
+ <name>out</name>
+ <type>$out_type.io</type>
+ </source>
+ <doc>
PCCC turbo Decoder.
The fsm and interleaver arguments are passed directly to the trellis.fsm() and trellis.interleaver() constructors.
- </doc>
+ </doc>
</block>
diff --git a/gr-trellis/grc/trellis_pccc_encoder_xx.xml b/gr-trellis/grc/trellis_pccc_encoder_xx.xml
index 7441ba8fc9..faaa0c1233 100644
--- a/gr-trellis/grc/trellis_pccc_encoder_xx.xml
+++ b/gr-trellis/grc/trellis_pccc_encoder_xx.xml
@@ -6,93 +6,95 @@
-->
<block>
- <name>PCCC Encoder</name>
- <key>trellis_pccc_encoder_xx</key>
- <category>Trellis Coding</category>
- <import>from gnuradio import trellis</import>
- <make>trellis.pccc_encoder_$(type)(trellis.fsm($o_fsm_args), $o_init_state, trellis.fsm($i_fsm_args), $i_init_state, trellis.interleaver($interleaver_args), $bl)</make>
- <param>
- <name>Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Byte->Byte</name>
- <key>bb</key>
- <opt>input:byte</opt>
- <opt>output:byte</opt>
- </option>
- <option>
- <name>Byte->Short</name>
- <key>bs</key>
- <opt>input:byte</opt>
- <opt>output:short</opt>
- </option>
- <option>
- <name>Byte->Int</name>
- <key>bi</key>
- <opt>input:byte</opt>
- <opt>output:int</opt>
- </option>
- <option>
- <name>Short->Short</name>
- <key>ss</key>
- <opt>input:short</opt>
- <opt>output:short</opt>
- </option>
- <option>
- <name>Short->Int</name>
- <key>si</key>
- <opt>input:short</opt>
- <opt>output:int</opt>
- </option>
- <option>
- <name>Int->Int</name>
- <key>ii</key>
- <opt>input:int</opt>
- <opt>output:int</opt>
- </option>
- </param>
- <param>
- <name>FSM 1</name>
- <key>o_fsm_args</key>
- <type>raw</type>
- </param>
- <param>
- <name>Initial State 1</name>
- <key>o_init_state</key>
- <value>0</value>
- <type>int</type>
- </param>
- <param>
- <name>FSM 2</name>
- <key>i_fsm_args</key>
- <type>raw</type>
- </param>
- <param>
- <name>Initial State 2</name>
- <key>i_init_state</key>
- <value>0</value>
- <type>int</type>
- </param>
- <param>
- <name>Interleaver</name>
- <key>interleaver_args</key>
- <type>raw</type>
- </param>
- <param>
- <name>Blocklength</name>
- <key>bl</key>
- <type>int</type>
- </param>
- <sink>
- <name>in</name>
- <type>$type.input</type>
- </sink>
- <source>
- <name>out</name>
- <type>$type.output</type>
- </source>
- <doc>
+ <name>PCCC Encoder</name>
+ <key>trellis_pccc_encoder_xx</key>
+ <category>Trellis Coding</category>
+ <import>from gnuradio import trellis</import>
+ <make>trellis.pccc_encoder_$(type)(trellis.fsm($o_fsm_args), $o_init_state, trellis.fsm($i_fsm_args), $i_init_state, trellis.interleaver($interleaver_args), $bl)</make>
+ <param>
+ <name>Type</name>
+ <key>type</key>
+ <type>enum</type>
+ <option>
+ <name>Byte->Byte</name>
+ <key>bb</key>
+ <opt>input:byte</opt>
+ <opt>output:byte</opt>
+ </option>
+ <option>
+ <name>Byte->Short</name>
+ <key>bs</key>
+ <opt>input:byte</opt>
+ <opt>output:short</opt>
+ </option>
+ <option>
+ <name>Byte->Int</name>
+ <key>bi</key>
+ <opt>input:byte</opt>
+ <opt>output:int</opt>
+ </option>
+ <option>
+ <name>Short->Short</name>
+ <key>ss</key>
+ <opt>input:short</opt>
+ <opt>output:short</opt>
+ </option>
+ <option>
+ <name>Short->Int</name>
+ <key>si</key>
+ <opt>input:short</opt>
+ <opt>output:int</opt>
+ </option>
+ <option>
+ <name>Int->Int</name>
+ <key>ii</key>
+ <opt>input:int</opt>
+ <opt>output:int</opt>
+ </option>
+ </param>
+ <param>
+ <name>FSM 1</name>
+ <key>o_fsm_args</key>
+ <type>raw</type>
+ </param>
+ <param>
+ <name>Initial State 1</name>
+ <key>o_init_state</key>
+ <value>0</value>
+ <type>int</type>
+ </param>
+ <param>
+ <name>FSM 2</name>
+ <key>i_fsm_args</key>
+ <type>raw</type>
+ </param>
+ <param>
+ <name>Initial State 2</name>
+ <key>i_init_state</key>
+ <value>0</value>
+ <type>int</type>
+ </param>
+ <param>
+ <name>Interleaver</name>
+ <key>interleaver_args</key>
+ <type>raw</type>
+ </param>
+ <param>
+ <name>Blocklength</name>
+ <key>bl</key>
+ <type>int</type>
+ </param>
+ <check>(isinstance(eval(""" $o_fsm_args """[1:-1], locals(),globals()), str) and open($o_fsm_args).close()) or True</check>
+ <check>(isinstance(eval(""" $i_fsm_args """[1:-1], locals(),globals()), str) and open($i_fsm_args).close()) or True </check>
+ <sink>
+ <name>in</name>
+ <type>$type.input</type>
+ </sink>
+ <source>
+ <name>out</name>
+ <type>$type.output</type>
+ </source>
+ <doc>
The fsm and interleaver arguments are passed directly to the trellis.fsm() and trellis.interleaver() constructors.
- </doc>
+ </doc>
</block>
diff --git a/gr-trellis/grc/trellis_sccc_decoder_combined_xx.xml b/gr-trellis/grc/trellis_sccc_decoder_combined_xx.xml
index eee4e2b9e4..bacc16cf5e 100644
--- a/gr-trellis/grc/trellis_sccc_decoder_combined_xx.xml
+++ b/gr-trellis/grc/trellis_sccc_decoder_combined_xx.xml
@@ -7,164 +7,166 @@
<block>
- <name>SCCC Decoder Combo</name>
- <key>trellis_sccc_decoder_combined_xx</key>
- <category>Trellis Coding</category>
- <import>from gnuradio import trellis, digital</import>
- <make>trellis.sccc_decoder_combined_$(type)$(out_type)(
- trellis.fsm($o_fsm_args), $o_init_state, $o_final_state,
- trellis.fsm($i_fsm_args), $i_init_state, $i_final_state,
- trellis.interleaver($interleaver),
- $block_size,
- $iterations,
+ <name>SCCC Decoder Combo</name>
+ <key>trellis_sccc_decoder_combined_xx</key>
+ <category>Trellis Coding</category>
+ <import>from gnuradio import trellis, digital</import>
+ <make>trellis.sccc_decoder_combined_$(type)$(out_type)(
+ trellis.fsm($o_fsm_args), $o_init_state, $o_final_state,
+ trellis.fsm($i_fsm_args), $i_init_state, $i_final_state,
+ trellis.interleaver($interleaver),
+ $block_size,
+ $iterations,
$siso_type,
- $dim, $table, $metric_type,
- $scaling)
- </make>
+ $dim, $table, $metric_type,
+ $scaling)
+ </make>
<callback>set_TABLE($table)</callback>
- <param>
- <name>Input Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>c</key>
- <opt>io:complex</opt>
- <opt>table:complex_vector</opt>
- </option>
- <option>
- <name>Float</name>
- <key>f</key>
- <opt>io:float</opt>
- <opt>table:real_vector</opt>
- </option>
- </param>
- <param>
- <name>Output Type</name>
- <key>out_type</key>
- <type>enum</type>
- <option>
- <name>Int</name>
- <key>i</key>
- <opt>io:int</opt>
- </option>
- <option>
- <name>Short</name>
- <key>s</key>
- <opt>io:short</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>b</key>
- <opt>io:byte</opt>
- </option>
- </param>
- <param>
- <name>Outer FSM</name>
- <key>o_fsm_args</key>
- <type>raw</type>
- </param>
- <param>
- <name>Outer Initial State</name>
- <key>o_init_state</key>
- <value>0</value>
- <type>int</type>
- </param>
- <param>
- <name>Outer Final State</name>
- <key>o_final_state</key>
- <value>-1</value>
- <type>int</type>
- </param>
- <param>
- <name>Inner FSM</name>
- <key>i_fsm_args</key>
- <type>raw</type>
- </param>
- <param>
- <name>Inner Initial State</name>
- <key>i_init_state</key>
- <value>0</value>
- <type>int</type>
- </param>
- <param>
- <name>Inner Final State</name>
- <key>i_final_state</key>
- <value>-1</value>
- <type>int</type>
- </param>
- <param>
- <name>Interleaver</name>
- <key>interleaver</key>
- <type>raw</type>
- </param>
- <param>
- <name>Block Size</name>
- <key>block_size</key>
- <type>int</type>
- </param>
- <param>
- <name>Iterations</name>
- <key>iterations</key>
- <value>10</value>
- <type>int</type>
- </param>
- <param>
- <name>Dimensionality</name>
- <key>dim</key>
- <type>int</type>
- </param>
- <param>
- <name>Constellation</name>
- <key>table</key>
- <type>$type.table</type>
- </param>
- <param>
- <name>Metric Type</name>
- <key>metric_type</key>
- <type>enum</type>
- <option>
- <name>Euclidean</name>
- <key>digital.TRELLIS_EUCLIDEAN</key>
- </option>
- <option>
- <name>Hard Symbol</name>
- <key>digital.TRELLIS_HARD_SYMBOL</key>
- </option>
- <option>
- <name>Hard Bit</name>
- <key>digital.TRELLIS_HARD_BIT</key>
- </option>
- </param>
- <param>
- <name>SISO Type</name>
- <key>siso_type</key>
- <type>enum</type>
- <option>
- <name>Min Sum</name>
- <key>trellis.TRELLIS_MIN_SUM</key>
- </option>
- <option>
- <name>Sum Product</name>
- <key>trellis.TRELLIS_SUM_PRODUCT</key>
- </option>
- </param>
- <param>
- <name>Scaling</name>
- <key>scaling</key>
- <value>1.0</value>
- <type>real</type>
- </param>
- <sink>
- <name>in</name>
- <type>$type.io</type>
- </sink>
- <source>
- <name>out</name>
- <type>$out_type.io</type>
- </source>
- <doc>
+ <param>
+ <name>Input Type</name>
+ <key>type</key>
+ <type>enum</type>
+ <option>
+ <name>Complex</name>
+ <key>c</key>
+ <opt>io:complex</opt>
+ <opt>table:complex_vector</opt>
+ </option>
+ <option>
+ <name>Float</name>
+ <key>f</key>
+ <opt>io:float</opt>
+ <opt>table:real_vector</opt>
+ </option>
+ </param>
+ <param>
+ <name>Output Type</name>
+ <key>out_type</key>
+ <type>enum</type>
+ <option>
+ <name>Int</name>
+ <key>i</key>
+ <opt>io:int</opt>
+ </option>
+ <option>
+ <name>Short</name>
+ <key>s</key>
+ <opt>io:short</opt>
+ </option>
+ <option>
+ <name>Byte</name>
+ <key>b</key>
+ <opt>io:byte</opt>
+ </option>
+ </param>
+ <param>
+ <name>Outer FSM</name>
+ <key>o_fsm_args</key>
+ <type>raw</type>
+ </param>
+ <param>
+ <name>Outer Initial State</name>
+ <key>o_init_state</key>
+ <value>0</value>
+ <type>int</type>
+ </param>
+ <param>
+ <name>Outer Final State</name>
+ <key>o_final_state</key>
+ <value>-1</value>
+ <type>int</type>
+ </param>
+ <param>
+ <name>Inner FSM</name>
+ <key>i_fsm_args</key>
+ <type>raw</type>
+ </param>
+ <param>
+ <name>Inner Initial State</name>
+ <key>i_init_state</key>
+ <value>0</value>
+ <type>int</type>
+ </param>
+ <param>
+ <name>Inner Final State</name>
+ <key>i_final_state</key>
+ <value>-1</value>
+ <type>int</type>
+ </param>
+ <param>
+ <name>Interleaver</name>
+ <key>interleaver</key>
+ <type>raw</type>
+ </param>
+ <param>
+ <name>Block Size</name>
+ <key>block_size</key>
+ <type>int</type>
+ </param>
+ <param>
+ <name>Iterations</name>
+ <key>iterations</key>
+ <value>10</value>
+ <type>int</type>
+ </param>
+ <param>
+ <name>Dimensionality</name>
+ <key>dim</key>
+ <type>int</type>
+ </param>
+ <param>
+ <name>Constellation</name>
+ <key>table</key>
+ <type>$type.table</type>
+ </param>
+ <param>
+ <name>Metric Type</name>
+ <key>metric_type</key>
+ <type>enum</type>
+ <option>
+ <name>Euclidean</name>
+ <key>digital.TRELLIS_EUCLIDEAN</key>
+ </option>
+ <option>
+ <name>Hard Symbol</name>
+ <key>digital.TRELLIS_HARD_SYMBOL</key>
+ </option>
+ <option>
+ <name>Hard Bit</name>
+ <key>digital.TRELLIS_HARD_BIT</key>
+ </option>
+ </param>
+ <param>
+ <name>SISO Type</name>
+ <key>siso_type</key>
+ <type>enum</type>
+ <option>
+ <name>Min Sum</name>
+ <key>trellis.TRELLIS_MIN_SUM</key>
+ </option>
+ <option>
+ <name>Sum Product</name>
+ <key>trellis.TRELLIS_SUM_PRODUCT</key>
+ </option>
+ </param>
+ <param>
+ <name>Scaling</name>
+ <key>scaling</key>
+ <value>1.0</value>
+ <type>real</type>
+ </param>
+ <check>(isinstance(eval(""" $o_fsm_args """[1:-1], locals(),globals()), str) and open($o_fsm_args).close()) or True</check>
+ <check>(isinstance(eval(""" $i_fsm_args """[1:-1], locals(),globals()), str) and open($i_fsm_args).close()) or True </check>
+ <sink>
+ <name>in</name>
+ <type>$type.io</type>
+ </sink>
+ <source>
+ <name>out</name>
+ <type>$out_type.io</type>
+ </source>
+ <doc>
SCCC turbo Decoder combined with metric calculation.
The fsm arguments are passed directly to the trellis.fsm() constructor.
- </doc>
+ </doc>
</block>
diff --git a/gr-trellis/grc/trellis_sccc_decoder_x.xml b/gr-trellis/grc/trellis_sccc_decoder_x.xml
index ac65a6a49d..38348cbb51 100644
--- a/gr-trellis/grc/trellis_sccc_decoder_x.xml
+++ b/gr-trellis/grc/trellis_sccc_decoder_x.xml
@@ -7,111 +7,113 @@
<block>
- <name>SCCC Decoder</name>
- <key>trellis_sccc_decoder_x</key>
- <category>Trellis Coding</category>
- <import>from gnuradio import trellis</import>
- <make>trellis.sccc_decoder_$(out_type)(
- trellis.fsm($o_fsm_args), $o_init_state, $o_final_state,
- trellis.fsm($i_fsm_args), $i_init_state, $i_final_state,
- trellis.interleaver($interleaver),
- $block_size,
- $iterations,
+ <name>SCCC Decoder</name>
+ <key>trellis_sccc_decoder_x</key>
+ <category>Trellis Coding</category>
+ <import>from gnuradio import trellis</import>
+ <make>trellis.sccc_decoder_$(out_type)(
+ trellis.fsm($o_fsm_args), $o_init_state, $o_final_state,
+ trellis.fsm($i_fsm_args), $i_init_state, $i_final_state,
+ trellis.interleaver($interleaver),
+ $block_size,
+ $iterations,
$siso_type)
- </make>
- <param>
- <name>Output Type</name>
- <key>out_type</key>
- <type>enum</type>
- <option>
- <name>Int</name>
- <key>i</key>
- <opt>io:int</opt>
- </option>
- <option>
- <name>Short</name>
- <key>s</key>
- <opt>io:short</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>b</key>
- <opt>io:byte</opt>
- </option>
- </param>
- <param>
- <name>Outer FSM</name>
- <key>o_fsm_args</key>
- <type>raw</type>
- </param>
- <param>
- <name>Outer Initial State</name>
- <key>o_init_state</key>
- <value>0</value>
- <type>int</type>
- </param>
- <param>
- <name>Outer Final State</name>
- <key>o_final_state</key>
- <value>-1</value>
- <type>int</type>
- </param>
- <param>
- <name>Inner FSM</name>
- <key>i_fsm_args</key>
- <type>raw</type>
- </param>
- <param>
- <name>Inner Initial State</name>
- <key>i_init_state</key>
- <value>0</value>
- <type>int</type>
- </param>
- <param>
- <name>Inner Final State</name>
- <key>i_final_state</key>
- <value>-1</value>
- <type>int</type>
- </param>
- <param>
- <name>Interleaver</name>
- <key>interleaver</key>
- <type>raw</type>
- </param>
- <param>
- <name>Block Size</name>
- <key>block_size</key>
- <type>int</type>
- </param>
- <param>
- <name>Iterations</name>
- <key>iterations</key>
- <value>10</value>
- <type>int</type>
- </param>
- <param>
- <name>SISO Type</name>
- <key>siso_type</key>
- <type>enum</type>
- <option>
- <name>Min Sum</name>
- <key>trellis.TRELLIS_MIN_SUM</key>
- </option>
- <option>
- <name>Sum Product</name>
- <key>trellis.TRELLIS_SUM_PRODUCT</key>
- </option>
- </param>
- <sink>
- <name>in</name>
- <type>float</type>
- </sink>
- <source>
- <name>out</name>
- <type>$out_type.io</type>
- </source>
- <doc>
+ </make>
+ <param>
+ <name>Output Type</name>
+ <key>out_type</key>
+ <type>enum</type>
+ <option>
+ <name>Int</name>
+ <key>i</key>
+ <opt>io:int</opt>
+ </option>
+ <option>
+ <name>Short</name>
+ <key>s</key>
+ <opt>io:short</opt>
+ </option>
+ <option>
+ <name>Byte</name>
+ <key>b</key>
+ <opt>io:byte</opt>
+ </option>
+ </param>
+ <param>
+ <name>Outer FSM</name>
+ <key>o_fsm_args</key>
+ <type>raw</type>
+ </param>
+ <param>
+ <name>Outer Initial State</name>
+ <key>o_init_state</key>
+ <value>0</value>
+ <type>int</type>
+ </param>
+ <param>
+ <name>Outer Final State</name>
+ <key>o_final_state</key>
+ <value>-1</value>
+ <type>int</type>
+ </param>
+ <param>
+ <name>Inner FSM</name>
+ <key>i_fsm_args</key>
+ <type>raw</type>
+ </param>
+ <param>
+ <name>Inner Initial State</name>
+ <key>i_init_state</key>
+ <value>0</value>
+ <type>int</type>
+ </param>
+ <param>
+ <name>Inner Final State</name>
+ <key>i_final_state</key>
+ <value>-1</value>
+ <type>int</type>
+ </param>
+ <param>
+ <name>Interleaver</name>
+ <key>interleaver</key>
+ <type>raw</type>
+ </param>
+ <param>
+ <name>Block Size</name>
+ <key>block_size</key>
+ <type>int</type>
+ </param>
+ <param>
+ <name>Iterations</name>
+ <key>iterations</key>
+ <value>10</value>
+ <type>int</type>
+ </param>
+ <param>
+ <name>SISO Type</name>
+ <key>siso_type</key>
+ <type>enum</type>
+ <option>
+ <name>Min Sum</name>
+ <key>trellis.TRELLIS_MIN_SUM</key>
+ </option>
+ <option>
+ <name>Sum Product</name>
+ <key>trellis.TRELLIS_SUM_PRODUCT</key>
+ </option>
+ </param>
+ <check>(isinstance(eval(""" $o_fsm_args """[1:-1], locals(),globals()), str) and open($o_fsm_args).close()) or True</check>
+ <check>(isinstance(eval(""" $i_fsm_args """[1:-1], locals(),globals()), str) and open($i_fsm_args).close()) or True </check>
+ <sink>
+ <name>in</name>
+ <type>float</type>
+ </sink>
+ <source>
+ <name>out</name>
+ <type>$out_type.io</type>
+ </source>
+ <doc>
SCCC turbo Decoder.
The fsm and interleaver arguments are passed directly to the trellis.fsm() and trellis.interleaver() constructors.
- </doc>
+ </doc>
</block>
diff --git a/gr-trellis/grc/trellis_sccc_encoder_xx.xml b/gr-trellis/grc/trellis_sccc_encoder_xx.xml
index f1054bf795..a87db79ac2 100644
--- a/gr-trellis/grc/trellis_sccc_encoder_xx.xml
+++ b/gr-trellis/grc/trellis_sccc_encoder_xx.xml
@@ -6,93 +6,95 @@
-->
<block>
- <name>SCCC Encoder</name>
- <key>trellis_sccc_encoder_xx</key>
- <category>Trellis Coding</category>
- <import>from gnuradio import trellis</import>
- <make>trellis.sccc_encoder_$(type)(trellis.fsm($o_fsm_args), $o_init_state, trellis.fsm($i_fsm_args), $i_init_state, trellis.interleaver($interleaver_args), $bl)</make>
- <param>
- <name>Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Byte->Byte</name>
- <key>bb</key>
- <opt>input:byte</opt>
- <opt>output:byte</opt>
- </option>
- <option>
- <name>Byte->Short</name>
- <key>bs</key>
- <opt>input:byte</opt>
- <opt>output:short</opt>
- </option>
- <option>
- <name>Byte->Int</name>
- <key>bi</key>
- <opt>input:byte</opt>
- <opt>output:int</opt>
- </option>
- <option>
- <name>Short->Short</name>
- <key>ss</key>
- <opt>input:short</opt>
- <opt>output:short</opt>
- </option>
- <option>
- <name>Short->Int</name>
- <key>si</key>
- <opt>input:short</opt>
- <opt>output:int</opt>
- </option>
- <option>
- <name>Int->Int</name>
- <key>ii</key>
- <opt>input:int</opt>
- <opt>output:int</opt>
- </option>
- </param>
- <param>
- <name>Outer FSM</name>
- <key>o_fsm_args</key>
- <type>raw</type>
- </param>
- <param>
- <name>Outer Initial State</name>
- <key>o_init_state</key>
- <value>0</value>
- <type>int</type>
- </param>
- <param>
- <name>Inner FSM</name>
- <key>i_fsm_args</key>
- <type>raw</type>
- </param>
- <param>
- <name>Inner Initial State</name>
- <key>i_init_state</key>
- <value>0</value>
- <type>int</type>
- </param>
- <param>
- <name>Interleaver</name>
- <key>interleaver_args</key>
- <type>raw</type>
- </param>
- <param>
- <name>Blocklength</name>
- <key>bl</key>
- <type>int</type>
- </param>
- <sink>
- <name>in</name>
- <type>$type.input</type>
- </sink>
- <source>
- <name>out</name>
- <type>$type.output</type>
- </source>
- <doc>
+ <name>SCCC Encoder</name>
+ <key>trellis_sccc_encoder_xx</key>
+ <category>Trellis Coding</category>
+ <import>from gnuradio import trellis</import>
+ <make>trellis.sccc_encoder_$(type)(trellis.fsm($o_fsm_args), $o_init_state, trellis.fsm($i_fsm_args), $i_init_state, trellis.interleaver($interleaver_args), $bl)</make>
+ <param>
+ <name>Type</name>
+ <key>type</key>
+ <type>enum</type>
+ <option>
+ <name>Byte->Byte</name>
+ <key>bb</key>
+ <opt>input:byte</opt>
+ <opt>output:byte</opt>
+ </option>
+ <option>
+ <name>Byte->Short</name>
+ <key>bs</key>
+ <opt>input:byte</opt>
+ <opt>output:short</opt>
+ </option>
+ <option>
+ <name>Byte->Int</name>
+ <key>bi</key>
+ <opt>input:byte</opt>
+ <opt>output:int</opt>
+ </option>
+ <option>
+ <name>Short->Short</name>
+ <key>ss</key>
+ <opt>input:short</opt>
+ <opt>output:short</opt>
+ </option>
+ <option>
+ <name>Short->Int</name>
+ <key>si</key>
+ <opt>input:short</opt>
+ <opt>output:int</opt>
+ </option>
+ <option>
+ <name>Int->Int</name>
+ <key>ii</key>
+ <opt>input:int</opt>
+ <opt>output:int</opt>
+ </option>
+ </param>
+ <param>
+ <name>Outer FSM</name>
+ <key>o_fsm_args</key>
+ <type>raw</type>
+ </param>
+ <param>
+ <name>Outer Initial State</name>
+ <key>o_init_state</key>
+ <value>0</value>
+ <type>int</type>
+ </param>
+ <param>
+ <name>Inner FSM</name>
+ <key>i_fsm_args</key>
+ <type>raw</type>
+ </param>
+ <param>
+ <name>Inner Initial State</name>
+ <key>i_init_state</key>
+ <value>0</value>
+ <type>int</type>
+ </param>
+ <param>
+ <name>Interleaver</name>
+ <key>interleaver_args</key>
+ <type>raw</type>
+ </param>
+ <param>
+ <name>Blocklength</name>
+ <key>bl</key>
+ <type>int</type>
+ </param>
+ <check>(isinstance(eval(""" $o_fsm_args """[1:-1], locals(),globals()), str) and open($o_fsm_args).close()) or True</check>
+ <check>(isinstance(eval(""" $i_fsm_args """[1:-1], locals(),globals()), str) and open($i_fsm_args).close()) or True </check>
+ <sink>
+ <name>in</name>
+ <type>$type.input</type>
+ </sink>
+ <source>
+ <name>out</name>
+ <type>$type.output</type>
+ </source>
+ <doc>
The fsm and interleaver arguments are passed directly to the trellis.fsm() and trellis.interleaver() constructors.
- </doc>
+ </doc>
</block>
diff --git a/gr-trellis/grc/trellis_siso_f.xml b/gr-trellis/grc/trellis_siso_f.xml
index 523e6a3aac..67eeb27189 100644
--- a/gr-trellis/grc/trellis_siso_f.xml
+++ b/gr-trellis/grc/trellis_siso_f.xml
@@ -7,82 +7,83 @@
<block>
- <name>SISO</name>
- <key>trellis_siso_f</key>
- <category>Trellis Coding</category>
- <import>from gnuradio import trellis</import>
- <make>trellis.siso_f(trellis.fsm($fsm_args), $block_size, $init_state, $final_state, $a_post_in, $a_post_out, $siso_type)</make>
- <param>
- <name>FSM Args</name>
- <key>fsm_args</key>
- <type>raw</type>
- </param>
- <param>
- <name>Block Size</name>
- <key>block_size</key>
- <type>int</type>
- </param>
- <param>
- <name>Initial State</name>
- <key>init_state</key>
- <value>0</value>
- <type>int</type>
- </param>
- <param>
- <name>Final State</name>
- <key>final_state</key>
- <value>-1</value>
- <type>int</type>
- </param>
- <param>
- <name>A-posteriori In</name>
- <key>a_post_in</key>
- <type>enum</type>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- </param>
- <param>
- <name>A-posteriori Out</name>
- <key>a_post_out</key>
- <type>enum</type>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- </param>
- <param>
- <name>SISO Type</name>
- <key>siso_type</key>
- <type>enum</type>
- <option>
- <name>Min Sum</name>
- <key>trellis.TRELLIS_MIN_SUM</key>
- </option>
- <option>
- <name>Sum Product</name>
- <key>trellis.TRELLIS_SUM_PRODUCT</key>
- </option>
- </param>
- <sink>
- <name>in</name>
- <type>float</type>
- </sink>
- <source>
- <name>out</name>
- <type>float</type>
- </source>
- <doc>
+ <name>SISO</name>
+ <key>trellis_siso_f</key>
+ <category>Trellis Coding</category>
+ <import>from gnuradio import trellis</import>
+ <make>trellis.siso_f(trellis.fsm($fsm_args), $block_size, $init_state, $final_state, $a_post_in, $a_post_out, $siso_type)</make>
+ <param>
+ <name>FSM Args</name>
+ <key>fsm_args</key>
+ <type>raw</type>
+ </param>
+ <param>
+ <name>Block Size</name>
+ <key>block_size</key>
+ <type>int</type>
+ </param>
+ <param>
+ <name>Initial State</name>
+ <key>init_state</key>
+ <value>0</value>
+ <type>int</type>
+ </param>
+ <param>
+ <name>Final State</name>
+ <key>final_state</key>
+ <value>-1</value>
+ <type>int</type>
+ </param>
+ <param>
+ <name>A-posteriori In</name>
+ <key>a_post_in</key>
+ <type>enum</type>
+ <option>
+ <name>Yes</name>
+ <key>True</key>
+ </option>
+ <option>
+ <name>No</name>
+ <key>False</key>
+ </option>
+ </param>
+ <param>
+ <name>A-posteriori Out</name>
+ <key>a_post_out</key>
+ <type>enum</type>
+ <option>
+ <name>Yes</name>
+ <key>True</key>
+ </option>
+ <option>
+ <name>No</name>
+ <key>False</key>
+ </option>
+ </param>
+ <param>
+ <name>SISO Type</name>
+ <key>siso_type</key>
+ <type>enum</type>
+ <option>
+ <name>Min Sum</name>
+ <key>trellis.TRELLIS_MIN_SUM</key>
+ </option>
+ <option>
+ <name>Sum Product</name>
+ <key>trellis.TRELLIS_SUM_PRODUCT</key>
+ </option>
+ </param>
+ <check>(isinstance(eval(""" $fsm_args """[1:-1], locals(),globals()), str) and open($fsm_args).close()) or True</check>
+ <sink>
+ <name>in</name>
+ <type>float</type>
+ </sink>
+ <source>
+ <name>out</name>
+ <type>float</type>
+ </source>
+ <doc>
BCJR Algorithm. \
The fsm arguments are passed directly to the trellis.fsm() constructor.
- </doc>
+ </doc>
</block>
diff --git a/gr-trellis/grc/trellis_viterbi_combined_xx.xml b/gr-trellis/grc/trellis_viterbi_combined_xx.xml
index 7faf735fe1..81b49860a5 100644
--- a/gr-trellis/grc/trellis_viterbi_combined_xx.xml
+++ b/gr-trellis/grc/trellis_viterbi_combined_xx.xml
@@ -7,120 +7,121 @@
<block>
- <name>Viterbi Combo</name>
- <key>trellis_viterbi_combined_xx</key>
- <category>Trellis Coding</category>
- <import>from gnuradio import trellis, digital</import>
- <make>trellis.viterbi_combined_$(type)$(out_type)(trellis.fsm($fsm_args), $block_size, $init_state, $final_state, $dim, $table, $metric_type)</make>
+ <name>Viterbi Combo</name>
+ <key>trellis_viterbi_combined_xx</key>
+ <category>Trellis Coding</category>
+ <import>from gnuradio import trellis, digital</import>
+ <make>trellis.viterbi_combined_$(type)$(out_type)(trellis.fsm($fsm_args), $block_size, $init_state, $final_state, $dim, $table, $metric_type)</make>
<callback>set_TABLE($table)</callback>
- <param>
- <name>Input Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>c</key>
- <opt>io:complex</opt>
- <opt>table:complex_vector</opt>
- </option>
- <option>
- <name>Float</name>
- <key>f</key>
- <opt>io:float</opt>
- <opt>table:real_vector</opt>
- </option>
- <option>
- <name>Int</name>
- <key>i</key>
- <opt>io:int</opt>
- <opt>table:int_vector</opt>
- </option>
- <option>
- <name>Short</name>
- <key>s</key>
- <opt>io:short</opt>
- <opt>table:int_vector</opt>
- </option>
- </param>
- <param>
- <name>Output Type</name>
- <key>out_type</key>
- <type>enum</type>
- <option>
- <name>Int</name>
- <key>i</key>
- <opt>io:int</opt>
- </option>
- <option>
- <name>Short</name>
- <key>s</key>
- <opt>io:short</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>b</key>
- <opt>io:byte</opt>
- </option>
- </param>
- <param>
- <name>FSM Args</name>
- <key>fsm_args</key>
- <type>raw</type>
- </param>
- <param>
- <name>Block Size</name>
- <key>block_size</key>
- <type>int</type>
- </param>
- <param>
- <name>Initial State</name>
- <key>init_state</key>
- <value>0</value>
- <type>int</type>
- </param>
- <param>
- <name>Final State</name>
- <key>final_state</key>
- <value>-1</value>
- <type>int</type>
- </param>
- <param>
- <name>Dimensionality</name>
- <key>dim</key>
- <type>int</type>
- </param>
- <param>
- <name>Constellation</name>
- <key>table</key>
- <type>$type.table</type>
- </param>
- <param>
- <name>Metric Type</name>
- <key>metric_type</key>
- <type>enum</type>
- <option>
- <name>Euclidean</name>
- <key>digital.TRELLIS_EUCLIDEAN</key>
- </option>
- <option>
- <name>Hard Symbol</name>
- <key>digital.TRELLIS_HARD_SYMBOL</key>
- </option>
- <option>
- <name>Hard Bit</name>
- <key>digital.TRELLIS_HARD_BIT</key>
- </option>
- </param>
- <sink>
- <name>in</name>
- <type>$type.io</type>
- </sink>
- <source>
- <name>out</name>
- <type>$out_type.io</type>
- </source>
- <doc>
+ <param>
+ <name>Input Type</name>
+ <key>type</key>
+ <type>enum</type>
+ <option>
+ <name>Complex</name>
+ <key>c</key>
+ <opt>io:complex</opt>
+ <opt>table:complex_vector</opt>
+ </option>
+ <option>
+ <name>Float</name>
+ <key>f</key>
+ <opt>io:float</opt>
+ <opt>table:real_vector</opt>
+ </option>
+ <option>
+ <name>Int</name>
+ <key>i</key>
+ <opt>io:int</opt>
+ <opt>table:int_vector</opt>
+ </option>
+ <option>
+ <name>Short</name>
+ <key>s</key>
+ <opt>io:short</opt>
+ <opt>table:int_vector</opt>
+ </option>
+ </param>
+ <param>
+ <name>Output Type</name>
+ <key>out_type</key>
+ <type>enum</type>
+ <option>
+ <name>Int</name>
+ <key>i</key>
+ <opt>io:int</opt>
+ </option>
+ <option>
+ <name>Short</name>
+ <key>s</key>
+ <opt>io:short</opt>
+ </option>
+ <option>
+ <name>Byte</name>
+ <key>b</key>
+ <opt>io:byte</opt>
+ </option>
+ </param>
+ <param>
+ <name>FSM Args</name>
+ <key>fsm_args</key>
+ <type>raw</type>
+ </param>
+ <param>
+ <name>Block Size</name>
+ <key>block_size</key>
+ <type>int</type>
+ </param>
+ <param>
+ <name>Initial State</name>
+ <key>init_state</key>
+ <value>0</value>
+ <type>int</type>
+ </param>
+ <param>
+ <name>Final State</name>
+ <key>final_state</key>
+ <value>-1</value>
+ <type>int</type>
+ </param>
+ <param>
+ <name>Dimensionality</name>
+ <key>dim</key>
+ <type>int</type>
+ </param>
+ <param>
+ <name>Constellation</name>
+ <key>table</key>
+ <type>$type.table</type>
+ </param>
+ <param>
+ <name>Metric Type</name>
+ <key>metric_type</key>
+ <type>enum</type>
+ <option>
+ <name>Euclidean</name>
+ <key>digital.TRELLIS_EUCLIDEAN</key>
+ </option>
+ <option>
+ <name>Hard Symbol</name>
+ <key>digital.TRELLIS_HARD_SYMBOL</key>
+ </option>
+ <option>
+ <name>Hard Bit</name>
+ <key>digital.TRELLIS_HARD_BIT</key>
+ </option>
+ </param>
+ <check>(isinstance(eval(""" $fsm_args """[1:-1], locals(),globals()), str) and open($fsm_args).close()) or True</check>
+ <sink>
+ <name>in</name>
+ <type>$type.io</type>
+ </sink>
+ <source>
+ <name>out</name>
+ <type>$out_type.io</type>
+ </source>
+ <doc>
Viterbi Decoder combined with metric calculation. \
The fsm arguments are passed directly to the trellis.fsm() constructor.
- </doc>
+ </doc>
</block>
diff --git a/gr-trellis/grc/trellis_viterbi_x.xml b/gr-trellis/grc/trellis_viterbi_x.xml
index 861b23f124..734bb5386a 100644
--- a/gr-trellis/grc/trellis_viterbi_x.xml
+++ b/gr-trellis/grc/trellis_viterbi_x.xml
@@ -7,63 +7,64 @@
<block>
- <name>Viterbi</name>
- <key>trellis_viterbi_x</key>
- <category>Trellis Coding</category>
- <import>from gnuradio import trellis</import>
- <make>trellis.viterbi_$(type)(trellis.fsm($fsm_args), $block_size, $init_state, $final_state)</make>
- <param>
- <name>Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Int</name>
- <key>i</key>
- <opt>io:int</opt>
- </option>
- <option>
- <name>Short</name>
- <key>s</key>
- <opt>io:short</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>b</key>
- <opt>io:byte</opt>
- </option>
- </param>
- <param>
- <name>FSM Args</name>
- <key>fsm_args</key>
- <type>raw</type>
- </param>
- <param>
- <name>Block Size</name>
- <key>block_size</key>
- <type>int</type>
- </param>
- <param>
- <name>Initial State</name>
- <key>init_state</key>
- <value>0</value>
- <type>int</type>
- </param>
- <param>
- <name>Final State</name>
- <key>final_state</key>
- <value>-1</value>
- <type>int</type>
- </param>
- <sink>
- <name>in</name>
- <type>float</type>
- </sink>
- <source>
- <name>out</name>
- <type>$type.io</type>
- </source>
- <doc>
+ <name>Viterbi</name>
+ <key>trellis_viterbi_x</key>
+ <category>Trellis Coding</category>
+ <import>from gnuradio import trellis</import>
+ <make>trellis.viterbi_$(type)(trellis.fsm($fsm_args), $block_size, $init_state, $final_state)</make>
+ <param>
+ <name>Type</name>
+ <key>type</key>
+ <type>enum</type>
+ <option>
+ <name>Int</name>
+ <key>i</key>
+ <opt>io:int</opt>
+ </option>
+ <option>
+ <name>Short</name>
+ <key>s</key>
+ <opt>io:short</opt>
+ </option>
+ <option>
+ <name>Byte</name>
+ <key>b</key>
+ <opt>io:byte</opt>
+ </option>
+ </param>
+ <param>
+ <name>FSM Args</name>
+ <key>fsm_args</key>
+ <type>raw</type>
+ </param>
+ <param>
+ <name>Block Size</name>
+ <key>block_size</key>
+ <type>int</type>
+ </param>
+ <param>
+ <name>Initial State</name>
+ <key>init_state</key>
+ <value>0</value>
+ <type>int</type>
+ </param>
+ <param>
+ <name>Final State</name>
+ <key>final_state</key>
+ <value>-1</value>
+ <type>int</type>
+ </param>
+ <check>(isinstance(eval(""" $fsm_args """[1:-1], locals(),globals()), str) and open($fsm_args).close()) or True</check>
+ <sink>
+ <name>in</name>
+ <type>float</type>
+ </sink>
+ <source>
+ <name>out</name>
+ <type>$type.io</type>
+ </source>
+ <doc>
Viterbi Decoder. \
The fsm arguments are passed directly to the trellis.fsm() constructor.
- </doc>
+ </doc>
</block>
diff --git a/gr-trellis/include/gnuradio/trellis/CMakeLists.txt b/gr-trellis/include/gnuradio/trellis/CMakeLists.txt
index 5f30cc8e4e..ef60ce7370 100644
--- a/gr-trellis/include/gnuradio/trellis/CMakeLists.txt
+++ b/gr-trellis/include/gnuradio/trellis/CMakeLists.txt
@@ -1,4 +1,4 @@
-# Copyright 2012 Free Software Foundation, Inc.
+# Copyright 2012,2014 Free Software Foundation, Inc.
#
# This file is part of GNU Radio
#
@@ -18,62 +18,19 @@
# Boston, MA 02110-1301, USA.
########################################################################
-# generate helper scripts to expand templated files
+# Invoke macro to generate various headers
########################################################################
-include(GrPython)
-
-file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py "
-#!${PYTHON_EXECUTABLE}
-
-import sys, os, re
-sys.path.append('${GR_RUNTIME_PYTHONPATH}')
-os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
-os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
-
-if __name__ == '__main__':
- import build_utils
- root, inp = sys.argv[1:3]
- for sig in sys.argv[3:]:
- name = re.sub ('X+', sig, root)
- d = build_utils.standard_dict2(name, sig, 'trellis')
- build_utils.expand_template(d, inp)
-
-")
-
-macro(expand_h root)
- #make a list of all the generated files
- unset(expanded_files_h)
- foreach(sig ${ARGN})
- string(REGEX REPLACE "X+" ${sig} name ${root})
- list(APPEND expanded_files_h ${CMAKE_CURRENT_BINARY_DIR}/${name}.h)
- endforeach(sig)
-
- #create a command to generate the files
- add_custom_command(
- OUTPUT ${expanded_files_h}
- DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.h.t
- COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
- ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
- ${root} ${root}.h.t ${ARGN}
- )
-
- #install rules for the generated h files
- list(APPEND generated_includes ${expanded_files_h})
-endmacro(expand_h)
-
-########################################################################
-# Invoke macro to generate various sources
-#######################################################################
-expand_h(encoder_XX bb bs bi ss si ii)
-expand_h(sccc_encoder_XX bb bs bi ss si ii)
-expand_h(pccc_encoder_XX bb bs bi ss si ii)
-expand_h(metrics_X s i f c)
-expand_h(viterbi_X b s i)
-expand_h(viterbi_combined_XX sb ss si ib is ii fb fs fi cb cs ci)
-expand_h(sccc_decoder_X b s i)
-expand_h(sccc_decoder_combined_XX fb fs fi cb cs ci)
-expand_h(pccc_decoder_X b s i)
-expand_h(pccc_decoder_combined_XX fb fs fi cb cs ci)
+include(GrMiscUtils)
+GR_EXPAND_X_H(trellis encoder_XX bb bs bi ss si ii)
+GR_EXPAND_X_H(trellis sccc_encoder_XX bb bs bi ss si ii)
+GR_EXPAND_X_H(trellis pccc_encoder_XX bb bs bi ss si ii)
+GR_EXPAND_X_H(trellis metrics_X s i f c)
+GR_EXPAND_X_H(trellis viterbi_X b s i)
+GR_EXPAND_X_H(trellis viterbi_combined_XX sb ss si ib is ii fb fs fi cb cs ci)
+GR_EXPAND_X_H(trellis sccc_decoder_X b s i)
+GR_EXPAND_X_H(trellis sccc_decoder_combined_XX fb fs fi cb cs ci)
+GR_EXPAND_X_H(trellis pccc_decoder_X b s i)
+GR_EXPAND_X_H(trellis pccc_decoder_combined_XX fb fs fi cb cs ci)
add_custom_target(trellis_generated_includes DEPENDS
${generated_includes}
diff --git a/gr-trellis/lib/CMakeLists.txt b/gr-trellis/lib/CMakeLists.txt
index 2cc53c6107..b23e058f7f 100644
--- a/gr-trellis/lib/CMakeLists.txt
+++ b/gr-trellis/lib/CMakeLists.txt
@@ -1,4 +1,4 @@
-# Copyright 2012 Free Software Foundation, Inc.
+# Copyright 2012,2014 Free Software Foundation, Inc.
#
# This file is part of GNU Radio
#
@@ -37,78 +37,19 @@ if(ENABLE_GR_CTRLPORT)
endif(ENABLE_GR_CTRLPORT)
#######################################################################
-# generate the python helper script which calls into the build utils
+# Invoke macro to generate various sources and headers
########################################################################
-include(GrPython)
-
-file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py "
-#!${PYTHON_EXECUTABLE}
-
-import sys, os, re
-sys.path.append('${GR_RUNTIME_PYTHONPATH}')
-os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'
-os.chdir('${CMAKE_CURRENT_BINARY_DIR}')
-
-if __name__ == '__main__':
- import build_utils
- root, inp = sys.argv[1:3]
- for sig in sys.argv[3:]:
- name = re.sub ('X+', sig, root)
- d = build_utils.standard_impl_dict2(name, sig, 'trellis')
- build_utils.expand_template(d, inp)
-")
-
-macro(expand_cc root)
- #make a list of all the generated files
- unset(expanded_files_cc)
- unset(expanded_files_h)
- foreach(sig ${ARGN})
- string(REGEX REPLACE "X+" ${sig} name ${root})
- list(APPEND expanded_files_cc ${CMAKE_CURRENT_BINARY_DIR}/${name}.cc)
- list(APPEND expanded_files_h ${CMAKE_CURRENT_BINARY_DIR}/${name}.h)
- endforeach(sig)
-
- #create a command to generate the source files
- add_custom_command(
- OUTPUT ${expanded_files_cc}
- DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.cc.t
- COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
- ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
- ${root} ${root}.cc.t ${ARGN}
- )
-
- #create a command to generate the header file
- add_custom_command(
- OUTPUT ${expanded_files_h}
- DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.h.t
- COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
- ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py
- ${root} ${root}.h.t ${ARGN}
- )
-
- #make source files depends on headers to force generation
- set_source_files_properties(${expanded_files_cc}
- PROPERTIES OBJECT_DEPENDS "${expanded_files_h}"
- )
-
- #install rules for the generated cc files
- list(APPEND generated_sources ${expanded_files_cc})
- list(APPEND generated_headers ${expanded_files_h})
-endmacro(expand_cc)
-
-########################################################################
-# Invoke macro to generate various sources
-########################################################################
-expand_cc(encoder_XX_impl bb bs bi ss si ii)
-expand_cc(sccc_encoder_XX_impl bb bs bi ss si ii)
-expand_cc(pccc_encoder_XX_impl bb bs bi ss si ii)
-expand_cc(metrics_X_impl s i f c)
-expand_cc(viterbi_X_impl b s i)
-expand_cc(viterbi_combined_XX_impl sb ss si ib is ii fb fs fi cb cs ci)
-expand_cc(sccc_decoder_X_impl b s i)
-expand_cc(sccc_decoder_combined_XX_impl fb fs fi cb cs ci)
-expand_cc(pccc_decoder_X_impl b s i)
-expand_cc(pccc_decoder_combined_XX_impl fb fs fi cb cs ci)
+include(GrMiscUtils)
+GR_EXPAND_X_CC_H(trellis encoder_XX_impl bb bs bi ss si ii)
+GR_EXPAND_X_CC_H(trellis sccc_encoder_XX_impl bb bs bi ss si ii)
+GR_EXPAND_X_CC_H(trellis pccc_encoder_XX_impl bb bs bi ss si ii)
+GR_EXPAND_X_CC_H(trellis metrics_X_impl s i f c)
+GR_EXPAND_X_CC_H(trellis viterbi_X_impl b s i)
+GR_EXPAND_X_CC_H(trellis viterbi_combined_XX_impl sb ss si ib is ii fb fs fi cb cs ci)
+GR_EXPAND_X_CC_H(trellis sccc_decoder_X_impl b s i)
+GR_EXPAND_X_CC_H(trellis sccc_decoder_combined_XX_impl fb fs fi cb cs ci)
+GR_EXPAND_X_CC_H(trellis pccc_decoder_X_impl b s i)
+GR_EXPAND_X_CC_H(trellis pccc_decoder_combined_XX_impl fb fs fi cb cs ci)
########################################################################
# Setup library
@@ -155,6 +96,18 @@ add_dependencies(gnuradio-trellis
gnuradio-runtime gnuradio-digital)
if(ENABLE_STATIC_LIBS)
+ if(ENABLE_GR_CTRLPORT)
+ # Remove GR_CTRLPORT set this target's definitions.
+ # Makes sure we don't try to use ControlPort stuff in source files
+ # since Ice will not work with static libs.
+ GET_DIRECTORY_PROPERTY(STATIC_DEFS COMPILE_DEFINITIONS)
+ list(REMOVE_ITEM STATIC_DEFS "GR_CTRLPORT")
+ SET_PROPERTY(DIRECTORY PROPERTY COMPILE_DEFINITIONS "${STATIC_DEFS}")
+
+ # readd it to the target since we removed it from the directory-wide list.
+ SET_PROPERTY(TARGET gnuradio-trellis APPEND PROPERTY COMPILE_DEFINITIONS "GR_CTRLPORT")
+ endif(ENABLE_GR_CTRLPORT)
+
add_library(gnuradio-trellis_static STATIC ${trellis_sources})
add_dependencies(gnuradio-trellis_static
diff --git a/gr-uhd/doc/uhd.dox b/gr-uhd/doc/uhd.dox
index 538c98c438..7a71b240b4 100644
--- a/gr-uhd/doc/uhd.dox
+++ b/gr-uhd/doc/uhd.dox
@@ -1,4 +1,3 @@
-// vim: set ft=doxygen:
/*! \page page_uhd UHD Interface
\section Introduction
@@ -22,15 +21,61 @@ by using:
\endcode
-\section External Documentation
+\section uhd_external_docs External Documentation
-Ettus Research keeps the comprehensive documentation to the underlying UHD driver, which can be found:
+Ettus Research maintains the comprehensive documentation to the underlying UHD driver, which can be found at:
- http://files.ettus.com/uhd_docs/manual/html/
+http://files.ettus.com/uhd_docs/manual/html/
The UHD Doxygen page is located at:
- http://files.ettus.com/uhd_docs/doxygen/html/index.html
+http://files.ettus.com/uhd_docs/doxygen/html/index.html
+
+
+\section uhd_command_syntax Command Syntax
+
+The UHD sink and source can be controlled by a message port. These message ports
+take commands, which are PMTs formatted as such:
+
+ (command, value, [channel])
+
+A command PMT is either a pair or a tuple. If it's a tuple, it must have either 2 or 3 elements.
+Any other type of PMT will throw an error.
+
+The `command` part is a string, which defines the command. `value` is a PMT whose format depends
+on the command issued. Finally, `channel` is an integer PMT value that specifies which channel
+this command shall be specified on. If this value is omitted, then it either applies this command
+to all channels or channel zero, depending on which command is used.
+
+Example:
+\code{.cpp}
+pmt::pmt_t command = pmt::cons( // We make a pair, but pmt::make_tuple() is also valid!
+ pmt::mp("freq"), // Use the 'freq' command, which sets the frequency
+ pmt::mp(1.1e9) // Set the frequency to 1.1 GHz
+);
+\endcode
+
+This PMT would set the frequency to 1.1 GHz on all channels. We make use of the pmt::mp() function
+which automatically sets the PMT types. Assume we only want to set the frequency on channel 1
+(i.e. the second channel). In this case, we must construct a tuple:
+\code{.cpp}
+pmt::pmt_t command = pmt::make_tuple(
+ pmt::mp("freq"), // Use the 'freq' command, which sets the frequency
+ pmt::mp(1.1e9) // Set the frequency to 1.1 GHz
+ pmt::mp(1) // Select channel 1
+);
+\endcode
+
+
+\subsection uhd_command_syntax_cmds Common commands
+
+The following commands are understood by both UHD Source and Sink:
+
+Command name | Value Type | Description
+-------------|------------|-------------------------------------------------------------
+`freq` | double | Sets the Tx or Rx frequency. Defaults to all channels.
+`lo_offset` | double | Sets an LO offset. Defaults to all channels.
+`gain` | double | Sets the Tx or Rx gain (in dB). Defaults to all channels.
\section Configuring a UHD object
@@ -100,3 +145,4 @@ resampler to take care of the difference.
\endcode
*/
+// vim: set ft=doxygen:
diff --git a/gr-uhd/examples/grc/uhd_const_wave.grc b/gr-uhd/examples/grc/uhd_const_wave.grc
index 46596109de..dfbbea6e88 100644
--- a/gr-uhd/examples/grc/uhd_const_wave.grc
+++ b/gr-uhd/examples/grc/uhd_const_wave.grc
@@ -1,6 +1,6 @@
<?xml version='1.0' encoding='ASCII'?>
<flow_graph>
- <timestamp>Mon Mar 18 11:04:05 2013</timestamp>
+ <timestamp>Sat Jul 12 14:52:24 2014</timestamp>
<block>
<key>options</key>
<param>
@@ -29,7 +29,7 @@
</param>
<param>
<key>generate_options</key>
- <value>wx_gui</value>
+ <value>qt_gui</value>
</param>
<param>
<key>category</key>
@@ -52,208 +52,12 @@
<value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(10, 10)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>variable_slider</key>
- <param>
- <key>id</key>
- <value>ampl</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>label</key>
- <value>Amplitude</value>
- </param>
- <param>
- <key>value</key>
- <value>.1</value>
- </param>
- <param>
- <key>min</key>
- <value>0</value>
- </param>
- <param>
- <key>max</key>
- <value>1</value>
- </param>
- <param>
- <key>num_steps</key>
- <value>100</value>
- </param>
- <param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
- </param>
- <param>
- <key>converver</key>
- <value>float_converter</value>
- </param>
- <param>
- <key>grid_pos</key>
- <value></value>
- </param>
- <param>
- <key>notebook</key>
- <value></value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(174, 313)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>variable_slider</key>
- <param>
- <key>id</key>
- <value>tun_gain</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>label</key>
- <value>UHD Gain</value>
- </param>
- <param>
- <key>value</key>
- <value>gain</value>
- </param>
- <param>
- <key>min</key>
- <value>0</value>
- </param>
- <param>
- <key>max</key>
- <value>20</value>
- </param>
- <param>
- <key>num_steps</key>
- <value>100</value>
- </param>
- <param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
- </param>
- <param>
- <key>converver</key>
- <value>float_converter</value>
- </param>
- <param>
- <key>grid_pos</key>
- <value></value>
- </param>
- <param>
- <key>notebook</key>
+ <key>alias</key>
<value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(318, 314)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>variable_slider</key>
- <param>
- <key>id</key>
- <value>tun_freq</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>label</key>
- <value>UHD Freq (Hz)</value>
- </param>
- <param>
- <key>value</key>
- <value>freq</value>
- </param>
- <param>
- <key>min</key>
- <value>2.4e9</value>
- </param>
- <param>
- <key>max</key>
- <value>2.5e9</value>
- </param>
- <param>
- <key>num_steps</key>
- <value>100</value>
- </param>
- <param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
- </param>
- <param>
- <key>converver</key>
- <value>float_converter</value>
- </param>
- <param>
- <key>grid_pos</key>
- <value></value>
- </param>
- <param>
- <key>notebook</key>
- <value></value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(24, 315)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>parameter</key>
- <param>
- <key>id</key>
- <value>address</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>label</key>
- <value>IP Address</value>
- </param>
- <param>
- <key>value</key>
- <value>addr=192.168.11.2</value>
- </param>
- <param>
- <key>type</key>
- <value>string</value>
- </param>
- <param>
- <key>short_id</key>
- <value>a</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(188, 12)</value>
+ <value>(10, 9)</value>
</param>
<param>
<key>_rotation</key>
@@ -287,6 +91,10 @@
<value>s</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(342, 14)</value>
</param>
@@ -322,6 +130,10 @@
<value>f</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(468, 14)</value>
</param>
@@ -357,6 +169,10 @@
<value>g</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(616, 13)</value>
</param>
@@ -388,10 +204,18 @@
<value></value>
</param>
<param>
+ <key>stream_chans</key>
+ <value>[]</value>
+ </param>
+ <param>
<key>dev_addr</key>
<value>address</value>
</param>
<param>
+ <key>dev_args</key>
+ <value>""</value>
+ </param>
+ <param>
<key>sync</key>
<value></value>
</param>
@@ -1020,6 +844,18 @@
<value>0</value>
</param>
<param>
+ <key>len_tag_name</key>
+ <value></value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(308, 169)</value>
</param>
@@ -1047,6 +883,22 @@
<value>ampl</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(74, 193)</value>
</param>
@@ -1055,6 +907,222 @@
<value>0</value>
</param>
</block>
+ <block>
+ <key>variable_qtgui_range</key>
+ <param>
+ <key>id</key>
+ <value>ampl</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>label</key>
+ <value>Amplitude</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>0.1</value>
+ </param>
+ <param>
+ <key>start</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>stop</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>step</key>
+ <value>0.01</value>
+ </param>
+ <param>
+ <key>widget</key>
+ <value>counter_slider</value>
+ </param>
+ <param>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
+ </param>
+ <param>
+ <key>min_len</key>
+ <value>200</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value></value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(170, 314)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable_qtgui_range</key>
+ <param>
+ <key>id</key>
+ <value>tun_freq</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>label</key>
+ <value>UHD Freq (Hz)</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>2.45e9</value>
+ </param>
+ <param>
+ <key>start</key>
+ <value>2.4e9</value>
+ </param>
+ <param>
+ <key>stop</key>
+ <value>2.5e9</value>
+ </param>
+ <param>
+ <key>step</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>widget</key>
+ <value>counter_slider</value>
+ </param>
+ <param>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
+ </param>
+ <param>
+ <key>min_len</key>
+ <value>200</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value></value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(31, 317)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable_qtgui_range</key>
+ <param>
+ <key>id</key>
+ <value>tun_gain</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>label</key>
+ <value>UHD Gain</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>start</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>stop</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>step</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>widget</key>
+ <value>counter_slider</value>
+ </param>
+ <param>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
+ </param>
+ <param>
+ <key>min_len</key>
+ <value>200</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value></value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(302, 307)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>parameter</key>
+ <param>
+ <key>id</key>
+ <value>address</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>label</key>
+ <value>IP Address</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>addr=192.168.10.2</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>string</value>
+ </param>
+ <param>
+ <key>short_id</key>
+ <value>a</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(188, 12)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
<connection>
<source_block_id>analog_const_source_x_0</source_block_id>
<sink_block_id>uhd_usrp_sink_0</sink_block_id>
diff --git a/gr-uhd/examples/grc/uhd_dpsk_mod.grc b/gr-uhd/examples/grc/uhd_dpsk_mod.grc
index 1e5bfd5ddb..be6ec55b01 100644
--- a/gr-uhd/examples/grc/uhd_dpsk_mod.grc
+++ b/gr-uhd/examples/grc/uhd_dpsk_mod.grc
@@ -1,6 +1,6 @@
<?xml version='1.0' encoding='ASCII'?>
<flow_graph>
- <timestamp>Sat Oct 8 14:44:48 2011</timestamp>
+ <timestamp>Sat Jul 12 15:58:18 2014</timestamp>
<block>
<key>options</key>
<param>
@@ -29,7 +29,7 @@
</param>
<param>
<key>generate_options</key>
- <value>wx_gui</value>
+ <value>qt_gui</value>
</param>
<param>
<key>category</key>
@@ -44,12 +44,20 @@
<value>True</value>
</param>
<param>
+ <key>max_nouts</key>
+ <value>0</value>
+ </param>
+ <param>
<key>realtime_scheduling</key>
<value></value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(10, 10)</value>
+ <value>(-5, -2)</value>
</param>
<param>
<key>_rotation</key>
@@ -71,8 +79,12 @@
<value>8</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(33, 280)</value>
+ <value>(743, 124)</value>
</param>
<param>
<key>_rotation</key>
@@ -80,86 +92,92 @@
</param>
</block>
<block>
- <key>wxgui_fftsink2</key>
+ <key>variable</key>
<param>
<key>id</key>
- <value>wxgui_fftsink2_0</value>
+ <value>rolloff</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
+ <key>value</key>
+ <value>.35</value>
</param>
<param>
- <key>title</key>
- <value>FFT Plot</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>samp_rate</key>
- <value>samp_rate</value>
+ <key>_coordinate</key>
+ <value>(566, 548)</value>
</param>
<param>
- <key>baseband_freq</key>
- <value>tun_freq</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
+ </block>
+ <block>
+ <key>variable</key>
<param>
- <key>y_per_div</key>
- <value>10</value>
+ <key>id</key>
+ <value>nfilts</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>value</key>
+ <value>32</value>
</param>
<param>
- <key>ref_scale</key>
- <value>2.0</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>fft_size</key>
- <value>1024</value>
+ <key>_coordinate</key>
+ <value>(653, 548)</value>
</param>
<param>
- <key>fft_rate</key>
- <value>30</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
+ </block>
+ <block>
+ <key>parameter</key>
<param>
- <key>peak_hold</key>
- <value>False</value>
+ <key>id</key>
+ <value>tx_gain</value>
</param>
<param>
- <key>average</key>
- <value>False</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>avg_alpha</key>
- <value>0</value>
+ <key>label</key>
+ <value>Default TX Gain</value>
</param>
<param>
- <key>win</key>
- <value>None</value>
+ <key>value</key>
+ <value>0</value>
</param>
<param>
- <key>win_size</key>
- <value></value>
+ <key>type</key>
+ <value>eng_float</value>
</param>
<param>
- <key>grid_pos</key>
+ <key>short_id</key>
<value></value>
</param>
<param>
- <key>notebook</key>
+ <key>alias</key>
<value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(697, 248)</value>
+ <value>(968, 0)</value>
</param>
<param>
<key>_rotation</key>
@@ -167,74 +185,77 @@
</param>
</block>
<block>
- <key>wxgui_scopesink2</key>
+ <key>parameter</key>
<param>
<key>id</key>
- <value>wxgui_scopesink2_0</value>
+ <value>freq</value>
</param>
<param>
<key>_enabled</key>
- <value>False</value>
+ <value>True</value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
+ <key>label</key>
+ <value>Default Frequency</value>
</param>
<param>
- <key>title</key>
- <value>Scope Plot</value>
+ <key>value</key>
+ <value>2.45e9</value>
</param>
<param>
- <key>samp_rate</key>
- <value>samp_rate</value>
+ <key>type</key>
+ <value>eng_float</value>
</param>
<param>
- <key>v_scale</key>
- <value>0</value>
+ <key>short_id</key>
+ <value>f</value>
</param>
<param>
- <key>v_offset</key>
- <value>0</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>t_scale</key>
- <value>1e-6</value>
+ <key>_coordinate</key>
+ <value>(634, 0)</value>
</param>
<param>
- <key>ac_couple</key>
- <value>False</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
+ </block>
+ <block>
+ <key>parameter</key>
<param>
- <key>xy_mode</key>
- <value>True</value>
+ <key>id</key>
+ <value>samp_rate</value>
</param>
<param>
- <key>num_inputs</key>
- <value>1</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>win_size</key>
- <value></value>
+ <key>label</key>
+ <value>Sample Rate</value>
</param>
<param>
- <key>grid_pos</key>
- <value></value>
+ <key>value</key>
+ <value>1e6</value>
</param>
<param>
- <key>notebook</key>
- <value></value>
+ <key>type</key>
+ <value>eng_float</value>
</param>
<param>
- <key>trig_mode</key>
- <value>wxgui.TRIG_MODE_AUTO</value>
+ <key>short_id</key>
+ <value>s</value>
</param>
<param>
- <key>y_axis_label</key>
- <value>Counts</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(469, 355)</value>
+ <value>(508, 0)</value>
</param>
<param>
<key>_rotation</key>
@@ -242,38 +263,38 @@
</param>
</block>
<block>
- <key>analog_random_source_x</key>
+ <key>parameter</key>
<param>
<key>id</key>
- <value>analog_random_source_x_0</value>
+ <value>address0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>byte</value>
+ <key>label</key>
+ <value>IP Address, Dev 0</value>
</param>
<param>
- <key>min</key>
- <value>0</value>
+ <key>value</key>
+ <value>addr=192.168.10.2</value>
</param>
<param>
- <key>max</key>
- <value>256</value>
+ <key>type</key>
+ <value>string</value>
</param>
<param>
- <key>num_samps</key>
- <value>1000</value>
+ <key>short_id</key>
+ <value></value>
</param>
<param>
- <key>repeat</key>
- <value>True</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(245, 139)</value>
+ <value>(162, 0)</value>
</param>
<param>
<key>_rotation</key>
@@ -281,30 +302,38 @@
</param>
</block>
<block>
- <key>blocks_multiply_const_vxx</key>
+ <key>parameter</key>
<param>
<key>id</key>
- <value>blocks_multiply_const_vxx_0</value>
+ <value>freq_offset</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
+ <key>label</key>
+ <value>Rx Frequency Offset</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>0</value>
+ </param>
+ <param>
<key>type</key>
- <value>complex</value>
+ <value>eng_float</value>
</param>
<param>
- <key>const</key>
- <value>ampl</value>
+ <key>short_id</key>
+ <value>o</value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(647, 163)</value>
+ <value>(789, 0)</value>
</param>
<param>
<key>_rotation</key>
@@ -312,10 +341,10 @@
</param>
</block>
<block>
- <key>variable_slider</key>
+ <key>parameter</key>
<param>
<key>id</key>
- <value>tun_rx_gain</value>
+ <value>rx_gain</value>
</param>
<param>
<key>_enabled</key>
@@ -323,43 +352,27 @@
</param>
<param>
<key>label</key>
- <value>UHD RX Gain</value>
+ <value>Default RX Gain</value>
</param>
<param>
<key>value</key>
- <value>rx_gain</value>
- </param>
- <param>
- <key>min</key>
<value>0</value>
</param>
<param>
- <key>max</key>
- <value>20</value>
- </param>
- <param>
- <key>num_steps</key>
- <value>100</value>
- </param>
- <param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
- </param>
- <param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>type</key>
+ <value>eng_float</value>
</param>
<param>
- <key>grid_pos</key>
+ <key>short_id</key>
<value></value>
</param>
<param>
- <key>notebook</key>
+ <key>alias</key>
<value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(477, 509)</value>
+ <value>(1102, 0)</value>
</param>
<param>
<key>_rotation</key>
@@ -367,54 +380,73 @@
</param>
</block>
<block>
- <key>variable_slider</key>
+ <key>import</key>
<param>
<key>id</key>
- <value>rx_freq_off</value>
+ <value>import_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>label</key>
- <value>RX Freq Offset (Hz)</value>
+ <key>import</key>
+ <value>from gnuradio import digital</value>
</param>
<param>
- <key>value</key>
- <value>freq_offset</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>min</key>
- <value>-50e3</value>
+ <key>_coordinate</key>
+ <value>(169, 93)</value>
</param>
<param>
- <key>max</key>
- <value>+50e3</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
+ </block>
+ <block>
+ <key>blocks_multiply_const_vxx</key>
<param>
- <key>num_steps</key>
- <value>100</value>
+ <key>id</key>
+ <value>blocks_multiply_const_vxx_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>complex</value>
</param>
<param>
- <key>grid_pos</key>
+ <key>const</key>
+ <value>ampl</value>
+ </param>
+ <param>
+ <key>vlen</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alias</key>
<value></value>
</param>
<param>
- <key>notebook</key>
+ <key>affinity</key>
<value></value>
</param>
<param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(190, 507)</value>
+ <value>(396, 161)</value>
</param>
<param>
<key>_rotation</key>
@@ -422,10 +454,10 @@
</param>
</block>
<block>
- <key>parameter</key>
+ <key>variable_qtgui_range</key>
<param>
<key>id</key>
- <value>rx_gain</value>
+ <value>ampl</value>
</param>
<param>
<key>_enabled</key>
@@ -433,23 +465,47 @@
</param>
<param>
<key>label</key>
- <value>Default RX Gain</value>
+ <value>Amplitude</value>
</param>
<param>
<key>value</key>
+ <value>0.1</value>
+ </param>
+ <param>
+ <key>start</key>
<value>0</value>
</param>
<param>
- <key>type</key>
- <value>eng_float</value>
+ <key>stop</key>
+ <value>1</value>
</param>
<param>
- <key>short_id</key>
+ <key>step</key>
+ <value>0.01</value>
+ </param>
+ <param>
+ <key>widget</key>
+ <value>counter_slider</value>
+ </param>
+ <param>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
+ </param>
+ <param>
+ <key>min_len</key>
+ <value>200</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value></value>
+ </param>
+ <param>
+ <key>alias</key>
<value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(1137, 8)</value>
+ <value>(916, 115)</value>
</param>
<param>
<key>_rotation</key>
@@ -460,7 +516,7 @@
<key>parameter</key>
<param>
<key>id</key>
- <value>freq_offset</value>
+ <value>address1</value>
</param>
<param>
<key>_enabled</key>
@@ -468,23 +524,27 @@
</param>
<param>
<key>label</key>
- <value>Rx Frequency Offset</value>
+ <value>IP Address, Dev 1</value>
</param>
<param>
<key>value</key>
- <value>0</value>
+ <value>addr=192.168.10.2</value>
</param>
<param>
<key>type</key>
- <value>eng_float</value>
+ <value>string</value>
</param>
<param>
<key>short_id</key>
- <value>o</value>
+ <value></value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(824, 8)</value>
+ <value>(322, 0)</value>
</param>
<param>
<key>_rotation</key>
@@ -492,10 +552,10 @@
</param>
</block>
<block>
- <key>uhd_usrp_source</key>
+ <key>uhd_usrp_sink</key>
<param>
<key>id</key>
- <value>uhd_usrp_source_0</value>
+ <value>uhd_usrp_sink_0</value>
</param>
<param>
<key>_enabled</key>
@@ -503,11 +563,27 @@
</param>
<param>
<key>type</key>
- <value>complex</value>
+ <value>fc32</value>
+ </param>
+ <param>
+ <key>otw</key>
+ <value></value>
+ </param>
+ <param>
+ <key>stream_args</key>
+ <value></value>
+ </param>
+ <param>
+ <key>stream_chans</key>
+ <value>[]</value>
</param>
<param>
<key>dev_addr</key>
- <value>address1</value>
+ <value>address0</value>
+ </param>
+ <param>
+ <key>dev_args</key>
+ <value>""</value>
</param>
<param>
<key>sync</key>
@@ -522,15 +598,23 @@
<value>1</value>
</param>
<param>
- <key>ref_source0</key>
+ <key>clock_source0</key>
+ <value></value>
+ </param>
+ <param>
+ <key>time_source0</key>
<value></value>
</param>
<param>
<key>sd_spec0</key>
+ <value>B:0</value>
+ </param>
+ <param>
+ <key>clock_source1</key>
<value></value>
</param>
<param>
- <key>ref_source1</key>
+ <key>time_source1</key>
<value></value>
</param>
<param>
@@ -538,7 +622,11 @@
<value></value>
</param>
<param>
- <key>ref_source2</key>
+ <key>clock_source2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>time_source2</key>
<value></value>
</param>
<param>
@@ -546,7 +634,11 @@
<value></value>
</param>
<param>
- <key>ref_source3</key>
+ <key>clock_source3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>time_source3</key>
<value></value>
</param>
<param>
@@ -554,7 +646,11 @@
<value></value>
</param>
<param>
- <key>ref_source4</key>
+ <key>clock_source4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>time_source4</key>
<value></value>
</param>
<param>
@@ -562,7 +658,11 @@
<value></value>
</param>
<param>
- <key>ref_source5</key>
+ <key>clock_source5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>time_source5</key>
<value></value>
</param>
<param>
@@ -570,7 +670,11 @@
<value></value>
</param>
<param>
- <key>ref_source6</key>
+ <key>clock_source6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>time_source6</key>
<value></value>
</param>
<param>
@@ -578,7 +682,11 @@
<value></value>
</param>
<param>
- <key>ref_source7</key>
+ <key>clock_source7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>time_source7</key>
<value></value>
</param>
<param>
@@ -595,7 +703,7 @@
</param>
<param>
<key>center_freq0</key>
- <value>tun_freq+rx_freq_off</value>
+ <value>tun_freq</value>
</param>
<param>
<key>gain0</key>
@@ -1106,8 +1214,20 @@
<value>0</value>
</param>
<param>
+ <key>len_tag_name</key>
+ <value></value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(216, 288)</value>
+ <value>(576, 131)</value>
</param>
<param>
<key>_rotation</key>
@@ -1115,187 +1235,341 @@
</param>
</block>
<block>
- <key>wxgui_constellationsink2</key>
+ <key>qtgui_const_sink_x</key>
<param>
<key>id</key>
- <value>wxgui_constellationsink2_0</value>
+ <value>qtgui_const_sink_x_0</value>
</param>
<param>
<key>_enabled</key>
- <value>True</value>
+ <value>False</value>
</param>
<param>
- <key>title</key>
- <value>Constellation Plot</value>
+ <key>type</key>
+ <value>complex</value>
</param>
<param>
- <key>samp_rate</key>
- <value>samp_rate</value>
+ <key>name</key>
+ <value>""</value>
</param>
<param>
- <key>frame_rate</key>
- <value>5</value>
+ <key>size</key>
+ <value>1024</value>
</param>
<param>
- <key>const_size</key>
- <value>2048</value>
+ <key>autoscale</key>
+ <value>False</value>
</param>
<param>
- <key>M</key>
- <value>4</value>
+ <key>ymin</key>
+ <value>-2</value>
</param>
<param>
- <key>theta</key>
+ <key>ymax</key>
+ <value>2</value>
+ </param>
+ <param>
+ <key>xmin</key>
+ <value>-2</value>
+ </param>
+ <param>
+ <key>xmax</key>
+ <value>2</value>
+ </param>
+ <param>
+ <key>nconnections</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>update_time</key>
+ <value>0.10</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value></value>
+ </param>
+ <param>
+ <key>tr_mode</key>
+ <value>qtgui.TRIG_MODE_FREE</value>
+ </param>
+ <param>
+ <key>tr_slope</key>
+ <value>qtgui.TRIG_SLOPE_POS</value>
+ </param>
+ <param>
+ <key>tr_level</key>
+ <value>0.0</value>
+ </param>
+ <param>
+ <key>tr_chan</key>
<value>0</value>
</param>
<param>
- <key>loop_bw</key>
- <value>6.28/100.0</value>
+ <key>tr_tag</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>label1</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width1</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color1</key>
+ <value>"blue"</value>
+ </param>
+ <param>
+ <key>style1</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>marker1</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>alpha1</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width2</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color2</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>style2</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>marker2</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>alpha2</key>
+ <value>1.0</value>
</param>
<param>
- <key>fmax</key>
- <value>0.06</value>
+ <key>label3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width3</key>
+ <value>1</value>
</param>
<param>
- <key>mu</key>
- <value>0.5</value>
+ <key>color3</key>
+ <value>"red"</value>
</param>
<param>
- <key>gain_mu</key>
- <value>0.005</value>
+ <key>style3</key>
+ <value>0</value>
</param>
<param>
- <key>symbol_rate</key>
- <value>samp_rate/samps_per_sym</value>
+ <key>marker3</key>
+ <value>0</value>
</param>
<param>
- <key>omega_limit</key>
- <value>0.005</value>
+ <key>alpha3</key>
+ <value>1.0</value>
</param>
<param>
- <key>win_size</key>
+ <key>label4</key>
<value></value>
</param>
<param>
- <key>grid_pos</key>
+ <key>width4</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color4</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>style4</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>marker4</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>alpha4</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label5</key>
<value></value>
</param>
<param>
- <key>notebook</key>
+ <key>width5</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color5</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>style5</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>marker5</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>alpha5</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label6</key>
<value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(862, 336)</value>
+ <key>width6</key>
+ <value>1</value>
</param>
<param>
- <key>_rotation</key>
+ <key>color6</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>style6</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>digital_dxpsk_mod</key>
<param>
- <key>id</key>
- <value>digital_dxpsk_mod_0</value>
+ <key>marker6</key>
+ <value>0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>alpha6</key>
+ <value>1.0</value>
</param>
<param>
- <key>type</key>
- <value>dqpsk</value>
+ <key>label7</key>
+ <value></value>
</param>
<param>
- <key>samples_per_symbol</key>
- <value>samps_per_sym</value>
+ <key>width7</key>
+ <value>1</value>
</param>
<param>
- <key>excess_bw</key>
- <value>0.35</value>
+ <key>color7</key>
+ <value>"red"</value>
</param>
<param>
- <key>gray_coded</key>
- <value>True</value>
+ <key>style7</key>
+ <value>0</value>
</param>
<param>
- <key>verbose</key>
- <value>False</value>
+ <key>marker7</key>
+ <value>0</value>
</param>
<param>
- <key>log</key>
- <value>False</value>
+ <key>alpha7</key>
+ <value>1.0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(426, 139)</value>
+ <key>label8</key>
+ <value></value>
</param>
<param>
- <key>_rotation</key>
+ <key>width8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color8</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>style8</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>variable_slider</key>
<param>
- <key>id</key>
- <value>ampl</value>
+ <key>marker8</key>
+ <value>0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>alpha8</key>
+ <value>1.0</value>
</param>
<param>
- <key>label</key>
- <value>Amplitude</value>
+ <key>label9</key>
+ <value></value>
</param>
<param>
- <key>value</key>
- <value>.1</value>
+ <key>width9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color9</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>style9</key>
+ <value>0</value>
</param>
<param>
- <key>min</key>
+ <key>marker9</key>
<value>0</value>
</param>
<param>
- <key>max</key>
+ <key>alpha9</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label10</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width10</key>
<value>1</value>
</param>
<param>
- <key>num_steps</key>
- <value>100</value>
+ <key>color10</key>
+ <value>"red"</value>
</param>
<param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
+ <key>style10</key>
+ <value>0</value>
</param>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>marker10</key>
+ <value>0</value>
</param>
<param>
- <key>grid_pos</key>
+ <key>alpha10</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>alias</key>
<value></value>
</param>
<param>
- <key>notebook</key>
+ <key>affinity</key>
<value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(33, 353)</value>
+ <value>(1, 367)</value>
</param>
<param>
<key>_rotation</key>
- <value>0</value>
+ <value>180</value>
</param>
</block>
<block>
- <key>uhd_usrp_sink</key>
+ <key>uhd_usrp_source</key>
<param>
<key>id</key>
- <value>uhd_usrp_sink_0</value>
+ <value>uhd_usrp_source_0</value>
</param>
<param>
<key>_enabled</key>
@@ -1303,11 +1577,27 @@
</param>
<param>
<key>type</key>
- <value>complex</value>
+ <value>fc32</value>
+ </param>
+ <param>
+ <key>otw</key>
+ <value></value>
+ </param>
+ <param>
+ <key>stream_args</key>
+ <value></value>
+ </param>
+ <param>
+ <key>stream_chans</key>
+ <value>[]</value>
</param>
<param>
<key>dev_addr</key>
- <value>address0</value>
+ <value>address1</value>
+ </param>
+ <param>
+ <key>dev_args</key>
+ <value>""</value>
</param>
<param>
<key>sync</key>
@@ -1322,15 +1612,23 @@
<value>1</value>
</param>
<param>
- <key>ref_source0</key>
+ <key>clock_source0</key>
+ <value></value>
+ </param>
+ <param>
+ <key>time_source0</key>
<value></value>
</param>
<param>
<key>sd_spec0</key>
+ <value>A:0</value>
+ </param>
+ <param>
+ <key>clock_source1</key>
<value></value>
</param>
<param>
- <key>ref_source1</key>
+ <key>time_source1</key>
<value></value>
</param>
<param>
@@ -1338,7 +1636,11 @@
<value></value>
</param>
<param>
- <key>ref_source2</key>
+ <key>clock_source2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>time_source2</key>
<value></value>
</param>
<param>
@@ -1346,7 +1648,11 @@
<value></value>
</param>
<param>
- <key>ref_source3</key>
+ <key>clock_source3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>time_source3</key>
<value></value>
</param>
<param>
@@ -1354,7 +1660,11 @@
<value></value>
</param>
<param>
- <key>ref_source4</key>
+ <key>clock_source4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>time_source4</key>
<value></value>
</param>
<param>
@@ -1362,7 +1672,11 @@
<value></value>
</param>
<param>
- <key>ref_source5</key>
+ <key>clock_source5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>time_source5</key>
<value></value>
</param>
<param>
@@ -1370,7 +1684,11 @@
<value></value>
</param>
<param>
- <key>ref_source6</key>
+ <key>clock_source6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>time_source6</key>
<value></value>
</param>
<param>
@@ -1378,7 +1696,11 @@
<value></value>
</param>
<param>
- <key>ref_source7</key>
+ <key>clock_source7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>time_source7</key>
<value></value>
</param>
<param>
@@ -1395,7 +1717,7 @@
</param>
<param>
<key>center_freq0</key>
- <value>tun_freq</value>
+ <value>tun_freq+rx_freq_off</value>
</param>
<param>
<key>gain0</key>
@@ -1906,8 +2228,24 @@
<value>0</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(838, 139)</value>
+ <value>(-1, 242)</value>
</param>
<param>
<key>_rotation</key>
@@ -1915,54 +2253,113 @@
</param>
</block>
<block>
- <key>variable_slider</key>
+ <key>digital_dxpsk_mod</key>
<param>
<key>id</key>
- <value>tun_tx_gain</value>
+ <value>digital_dxpsk_mod_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>label</key>
- <value>UHD TX Gain</value>
+ <key>type</key>
+ <value>dqpsk</value>
</param>
<param>
- <key>value</key>
- <value>tx_gain</value>
+ <key>samples_per_symbol</key>
+ <value>samps_per_sym</value>
+ </param>
+ <param>
+ <key>excess_bw</key>
+ <value>0.35</value>
</param>
<param>
- <key>min</key>
+ <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>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(204, 138)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
<value>0</value>
</param>
+ </block>
+ <block>
+ <key>blocks_vector_source_x</key>
<param>
- <key>max</key>
- <value>20</value>
+ <key>id</key>
+ <value>blocks_vector_source_x_0</value>
</param>
<param>
- <key>num_steps</key>
- <value>100</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
+ <key>type</key>
+ <value>byte</value>
+ </param>
+ <param>
+ <key>vector</key>
+ <value>range(256)</value>
</param>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>tags</key>
+ <value>[]</value>
</param>
<param>
- <key>grid_pos</key>
+ <key>repeat</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>vlen</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alias</key>
<value></value>
</param>
<param>
- <key>notebook</key>
+ <key>affinity</key>
<value></value>
</param>
<param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(351, 508)</value>
+ <value>(6, 142)</value>
</param>
<param>
<key>_rotation</key>
@@ -1970,10 +2367,345 @@
</param>
</block>
<block>
- <key>parameter</key>
+ <key>qtgui_time_sink_x</key>
<param>
<key>id</key>
- <value>address0</value>
+ <value>qtgui_time_sink_x_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>complex</value>
+ </param>
+ <param>
+ <key>name</key>
+ <value>Rx Time Signal</value>
+ </param>
+ <param>
+ <key>size</key>
+ <value>1024</value>
+ </param>
+ <param>
+ <key>srate</key>
+ <value>samp_rate</value>
+ </param>
+ <param>
+ <key>autoscale</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>ymin</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>ymax</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>nconnections</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>update_time</key>
+ <value>0.10</value>
+ </param>
+ <param>
+ <key>entags</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value></value>
+ </param>
+ <param>
+ <key>tr_mode</key>
+ <value>qtgui.TRIG_MODE_FREE</value>
+ </param>
+ <param>
+ <key>tr_slope</key>
+ <value>qtgui.TRIG_SLOPE_POS</value>
+ </param>
+ <param>
+ <key>tr_level</key>
+ <value>0.0</value>
+ </param>
+ <param>
+ <key>tr_delay</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>tr_chan</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>tr_tag</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>label1</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width1</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color1</key>
+ <value>"blue"</value>
+ </param>
+ <param>
+ <key>style1</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker1</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha1</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width2</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color2</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>style2</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker2</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha2</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width3</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color3</key>
+ <value>"green"</value>
+ </param>
+ <param>
+ <key>style3</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker3</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha3</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width4</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color4</key>
+ <value>"black"</value>
+ </param>
+ <param>
+ <key>style4</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker4</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha4</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width5</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color5</key>
+ <value>"cyan"</value>
+ </param>
+ <param>
+ <key>style5</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker5</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha5</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width6</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color6</key>
+ <value>"magenta"</value>
+ </param>
+ <param>
+ <key>style6</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker6</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha6</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width7</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color7</key>
+ <value>"yellow"</value>
+ </param>
+ <param>
+ <key>style7</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker7</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha7</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label8</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color8</key>
+ <value>"dark red"</value>
+ </param>
+ <param>
+ <key>style8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker8</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha8</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label9</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color9</key>
+ <value>"dark green"</value>
+ </param>
+ <param>
+ <key>style9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker9</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha9</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label10</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color10</key>
+ <value>"blue"</value>
+ </param>
+ <param>
+ <key>style10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker10</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha10</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(294, 265)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable_qtgui_range</key>
+ <param>
+ <key>id</key>
+ <value>tun_freq</value>
</param>
<param>
<key>_enabled</key>
@@ -1981,23 +2713,47 @@
</param>
<param>
<key>label</key>
- <value>IP Address, Dev 0</value>
+ <value>UHD Freq (Hz)</value>
</param>
<param>
<key>value</key>
- <value>addr=192.168.10.2</value>
+ <value>1.982e9</value>
</param>
<param>
- <key>type</key>
- <value>string</value>
+ <key>start</key>
+ <value>1.9e9</value>
</param>
<param>
- <key>short_id</key>
+ <key>stop</key>
+ <value>2.5e9</value>
+ </param>
+ <param>
+ <key>step</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>widget</key>
+ <value>counter_slider</value>
+ </param>
+ <param>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
+ </param>
+ <param>
+ <key>min_len</key>
+ <value>200</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value></value>
+ </param>
+ <param>
+ <key>alias</key>
<value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(197, 11)</value>
+ <value>(5, 545)</value>
</param>
<param>
<key>_rotation</key>
@@ -2005,10 +2761,10 @@
</param>
</block>
<block>
- <key>parameter</key>
+ <key>variable_qtgui_range</key>
<param>
<key>id</key>
- <value>address1</value>
+ <value>tun_rx_gain</value>
</param>
<param>
<key>_enabled</key>
@@ -2016,23 +2772,47 @@
</param>
<param>
<key>label</key>
- <value>IP Address, Dev 1</value>
+ <value>UHD Rx Gain</value>
</param>
<param>
<key>value</key>
- <value>addr=192.168.11.2</value>
+ <value>0</value>
</param>
<param>
- <key>type</key>
- <value>string</value>
+ <key>start</key>
+ <value>0</value>
</param>
<param>
- <key>short_id</key>
+ <key>stop</key>
+ <value>30</value>
+ </param>
+ <param>
+ <key>step</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>widget</key>
+ <value>counter_slider</value>
+ </param>
+ <param>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
+ </param>
+ <param>
+ <key>min_len</key>
+ <value>200</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value></value>
+ </param>
+ <param>
+ <key>alias</key>
<value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(357, 11)</value>
+ <value>(391, 546)</value>
</param>
<param>
<key>_rotation</key>
@@ -2040,10 +2820,10 @@
</param>
</block>
<block>
- <key>parameter</key>
+ <key>variable_qtgui_range</key>
<param>
<key>id</key>
- <value>samp_rate</value>
+ <value>tun_tx_gain</value>
</param>
<param>
<key>_enabled</key>
@@ -2051,23 +2831,47 @@
</param>
<param>
<key>label</key>
- <value>Sample Rate</value>
+ <value>UHD Tx Gain</value>
</param>
<param>
<key>value</key>
- <value>1e6</value>
+ <value>0</value>
</param>
<param>
- <key>type</key>
- <value>eng_float</value>
+ <key>start</key>
+ <value>0</value>
</param>
<param>
- <key>short_id</key>
- <value>s</value>
+ <key>stop</key>
+ <value>30</value>
+ </param>
+ <param>
+ <key>step</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>widget</key>
+ <value>counter_slider</value>
+ </param>
+ <param>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
+ </param>
+ <param>
+ <key>min_len</key>
+ <value>200</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value></value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(543, 8)</value>
+ <value>(277, 546)</value>
</param>
<param>
<key>_rotation</key>
@@ -2075,10 +2879,10 @@
</param>
</block>
<block>
- <key>parameter</key>
+ <key>variable_qtgui_range</key>
<param>
<key>id</key>
- <value>freq</value>
+ <value>rx_freq_off</value>
</param>
<param>
<key>_enabled</key>
@@ -2086,23 +2890,122 @@
</param>
<param>
<key>label</key>
- <value>Default Frequency</value>
+ <value>Rx Freq Offset (Hz)</value>
</param>
<param>
<key>value</key>
- <value>2.45e9</value>
+ <value>0</value>
+ </param>
+ <param>
+ <key>start</key>
+ <value>-50e3</value>
+ </param>
+ <param>
+ <key>stop</key>
+ <value>50e3</value>
+ </param>
+ <param>
+ <key>step</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>widget</key>
+ <value>counter_slider</value>
+ </param>
+ <param>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
+ </param>
+ <param>
+ <key>min_len</key>
+ <value>200</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value></value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(130, 547)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>digital_dxpsk_demod</key>
+ <param>
+ <key>id</key>
+ <value>digital_dxpsk_demod_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>type</key>
- <value>eng_float</value>
+ <value>dqpsk</value>
</param>
<param>
- <key>short_id</key>
- <value>f</value>
+ <key>samples_per_symbol</key>
+ <value>samps_per_sym</value>
+ </param>
+ <param>
+ <key>excess_bw</key>
+ <value>0.35</value>
+ </param>
+ <param>
+ <key>freq_bw</key>
+ <value>6.28/100.0</value>
+ </param>
+ <param>
+ <key>phase_bw</key>
+ <value>6.28/100.0</value>
+ </param>
+ <param>
+ <key>timing_bw</key>
+ <value>6.28/100.0</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>sync_out</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(669, 8)</value>
+ <value>(294, 375)</value>
</param>
<param>
<key>_rotation</key>
@@ -2110,34 +3013,420 @@
</param>
</block>
<block>
- <key>parameter</key>
+ <key>blocks_unpacked_to_packed_xx</key>
<param>
<key>id</key>
- <value>tx_gain</value>
+ <value>blocks_unpacked_to_packed_xx_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>label</key>
- <value>Default TX Gain</value>
+ <key>type</key>
+ <value>byte</value>
</param>
<param>
- <key>value</key>
+ <key>bits_per_chunk</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>endianness</key>
+ <value>gr.GR_LSB_FIRST</value>
+ </param>
+ <param>
+ <key>num_ports</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
<value>0</value>
</param>
<param>
+ <key>_coordinate</key>
+ <value>(542, 420)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>blocks_uchar_to_float</key>
+ <param>
+ <key>id</key>
+ <value>blocks_uchar_to_float_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(747, 431)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>qtgui_time_sink_x</key>
+ <param>
+ <key>id</key>
+ <value>qtgui_time_sink_x_1</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
<key>type</key>
- <value>eng_float</value>
+ <value>float</value>
</param>
<param>
- <key>short_id</key>
+ <key>name</key>
+ <value>Received Data</value>
+ </param>
+ <param>
+ <key>size</key>
+ <value>1024</value>
+ </param>
+ <param>
+ <key>srate</key>
+ <value>samp_rate</value>
+ </param>
+ <param>
+ <key>autoscale</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>ymin</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>ymax</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>nconnections</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>update_time</key>
+ <value>0.10</value>
+ </param>
+ <param>
+ <key>entags</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value></value>
+ </param>
+ <param>
+ <key>tr_mode</key>
+ <value>qtgui.TRIG_MODE_FREE</value>
+ </param>
+ <param>
+ <key>tr_slope</key>
+ <value>qtgui.TRIG_SLOPE_POS</value>
+ </param>
+ <param>
+ <key>tr_level</key>
+ <value>0.0</value>
+ </param>
+ <param>
+ <key>tr_delay</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>tr_chan</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>tr_tag</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>label1</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width1</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color1</key>
+ <value>"blue"</value>
+ </param>
+ <param>
+ <key>style1</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker1</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha1</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width2</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color2</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>style2</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker2</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha2</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width3</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color3</key>
+ <value>"green"</value>
+ </param>
+ <param>
+ <key>style3</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker3</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha3</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width4</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color4</key>
+ <value>"black"</value>
+ </param>
+ <param>
+ <key>style4</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker4</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha4</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width5</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color5</key>
+ <value>"cyan"</value>
+ </param>
+ <param>
+ <key>style5</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker5</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha5</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width6</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color6</key>
+ <value>"magenta"</value>
+ </param>
+ <param>
+ <key>style6</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker6</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha6</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width7</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color7</key>
+ <value>"yellow"</value>
+ </param>
+ <param>
+ <key>style7</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker7</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha7</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label8</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color8</key>
+ <value>"dark red"</value>
+ </param>
+ <param>
+ <key>style8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker8</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha8</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label9</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color9</key>
+ <value>"dark green"</value>
+ </param>
+ <param>
+ <key>style9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker9</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha9</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label10</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color10</key>
+ <value>"blue"</value>
+ </param>
+ <param>
+ <key>style10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker10</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha10</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
<value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(1003, 8)</value>
+ <value>(923, 405)</value>
</param>
<param>
<key>_rotation</key>
@@ -2145,54 +3434,238 @@
</param>
</block>
<block>
- <key>variable_slider</key>
+ <key>qtgui_freq_sink_x</key>
<param>
<key>id</key>
- <value>tun_freq</value>
+ <value>qtgui_freq_sink_x_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>label</key>
- <value>Freq (Hz)</value>
+ <key>type</key>
+ <value>complex</value>
</param>
<param>
- <key>value</key>
- <value>freq</value>
+ <key>name</key>
+ <value>Received Spectrum</value>
</param>
<param>
- <key>min</key>
- <value>2.4e9</value>
+ <key>fftsize</key>
+ <value>1024</value>
</param>
<param>
- <key>max</key>
- <value>2.5e9</value>
+ <key>wintype</key>
+ <value>firdes.WIN_BLACKMAN_hARRIS</value>
+ </param>
+ <param>
+ <key>fc</key>
+ <value>tun_freq+rx_freq_off</value>
+ </param>
+ <param>
+ <key>bw</key>
+ <value>samp_rate</value>
+ </param>
+ <param>
+ <key>autoscale</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>average</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>ymin</key>
+ <value>-140</value>
+ </param>
+ <param>
+ <key>ymax</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>nconnections</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>update_time</key>
+ <value>0.10</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value></value>
+ </param>
+ <param>
+ <key>label1</key>
+ <value>Received Spectrum</value>
+ </param>
+ <param>
+ <key>width1</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color1</key>
+ <value>"blue"</value>
+ </param>
+ <param>
+ <key>alpha1</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label2</key>
+ <value></value>
</param>
<param>
- <key>num_steps</key>
- <value>100</value>
+ <key>width2</key>
+ <value>1</value>
</param>
<param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
+ <key>color2</key>
+ <value>"red"</value>
</param>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>alpha2</key>
+ <value>1.0</value>
</param>
<param>
- <key>grid_pos</key>
+ <key>label3</key>
<value></value>
</param>
<param>
- <key>notebook</key>
+ <key>width3</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color3</key>
+ <value>"green"</value>
+ </param>
+ <param>
+ <key>alpha3</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width4</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color4</key>
+ <value>"black"</value>
+ </param>
+ <param>
+ <key>alpha4</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width5</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color5</key>
+ <value>"cyan"</value>
+ </param>
+ <param>
+ <key>alpha5</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width6</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color6</key>
+ <value>"magenta"</value>
+ </param>
+ <param>
+ <key>alpha6</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width7</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color7</key>
+ <value>"yellow"</value>
+ </param>
+ <param>
+ <key>alpha7</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label8</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color8</key>
+ <value>"dark red"</value>
+ </param>
+ <param>
+ <key>alpha8</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label9</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color9</key>
+ <value>"dark green"</value>
+ </param>
+ <param>
+ <key>alpha9</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label10</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color10</key>
+ <value>"dark blue"</value>
+ </param>
+ <param>
+ <key>alpha10</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
<value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(35, 506)</value>
+ <value>(610, 254)</value>
</param>
<param>
<key>_rotation</key>
@@ -2201,19 +3674,19 @@
</block>
<connection>
<source_block_id>uhd_usrp_source_0</source_block_id>
- <sink_block_id>wxgui_fftsink2_0</sink_block_id>
+ <sink_block_id>qtgui_const_sink_x_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>uhd_usrp_source_0</source_block_id>
- <sink_block_id>wxgui_constellationsink2_0</sink_block_id>
+ <sink_block_id>qtgui_freq_sink_x_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>uhd_usrp_source_0</source_block_id>
- <sink_block_id>wxgui_scopesink2_0</sink_block_id>
+ <source_block_id>digital_dxpsk_mod_0</source_block_id>
+ <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
@@ -2224,14 +3697,38 @@
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>analog_random_source_x_0</source_block_id>
+ <source_block_id>uhd_usrp_source_0</source_block_id>
+ <sink_block_id>digital_dxpsk_demod_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>uhd_usrp_source_0</source_block_id>
+ <sink_block_id>qtgui_time_sink_x_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>blocks_vector_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>blocks_multiply_const_vxx_0</sink_block_id>
+ <source_block_id>digital_dxpsk_demod_0</source_block_id>
+ <sink_block_id>blocks_unpacked_to_packed_xx_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>blocks_unpacked_to_packed_xx_0</source_block_id>
+ <sink_block_id>blocks_uchar_to_float_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>blocks_uchar_to_float_0</source_block_id>
+ <sink_block_id>qtgui_time_sink_x_1</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
diff --git a/gr-uhd/examples/grc/uhd_fft.grc b/gr-uhd/examples/grc/uhd_fft.grc
index 08e5f70edb..13271cae74 100644
--- a/gr-uhd/examples/grc/uhd_fft.grc
+++ b/gr-uhd/examples/grc/uhd_fft.grc
@@ -1,6 +1,6 @@
<?xml version='1.0' encoding='ASCII'?>
<flow_graph>
- <timestamp>Mon Mar 18 15:42:27 2013</timestamp>
+ <timestamp>Sat Jul 12 16:12:28 2014</timestamp>
<block>
<key>options</key>
<param>
@@ -29,7 +29,7 @@
</param>
<param>
<key>generate_options</key>
- <value>wx_gui</value>
+ <value>qt_gui</value>
</param>
<param>
<key>category</key>
@@ -52,8 +52,12 @@
<value></value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(15, 15)</value>
+ <value>(-1, -3)</value>
</param>
<param>
<key>_rotation</key>
@@ -61,22 +65,38 @@
</param>
</block>
<block>
- <key>import</key>
+ <key>parameter</key>
<param>
<key>id</key>
- <value>import_0</value>
+ <value>param_gain</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>import</key>
- <value>import numpy</value>
+ <key>label</key>
+ <value>Default Gain</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>eng_float</value>
+ </param>
+ <param>
+ <key>short_id</key>
+ <value>g</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(15, 121)</value>
+ <value>(642, 0)</value>
</param>
<param>
<key>_rotation</key>
@@ -110,8 +130,12 @@
<value>s</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(358, 14)</value>
+ <value>(328, 0)</value>
</param>
<param>
<key>_rotation</key>
@@ -145,8 +169,39 @@
<value>f</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(478, 0)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>import</key>
+ <param>
+ <key>id</key>
+ <value>import_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>import</key>
+ <value>import numpy</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(508, 14)</value>
+ <value>(4, 105)</value>
</param>
<param>
<key>_rotation</key>
@@ -157,7 +212,7 @@
<key>parameter</key>
<param>
<key>id</key>
- <value>param_gain</value>
+ <value>address</value>
</param>
<param>
<key>_enabled</key>
@@ -165,23 +220,78 @@
</param>
<param>
<key>label</key>
- <value>Default Gain</value>
+ <value>IP Address</value>
</param>
<param>
<key>value</key>
- <value>0</value>
+ <value>addr=192.168.10.2</value>
</param>
<param>
<key>type</key>
- <value>eng_float</value>
+ <value>string</value>
</param>
<param>
<key>short_id</key>
- <value>g</value>
+ <value>a</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(160, 0)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>qtgui_tab_widget</key>
+ <param>
+ <key>id</key>
+ <value>display</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>num_tabs</key>
+ <value>3</value>
+ </param>
+ <param>
+ <key>label0</key>
+ <value>Spectrum</value>
+ </param>
+ <param>
+ <key>label1</key>
+ <value>Waterfall</value>
+ </param>
+ <param>
+ <key>label2</key>
+ <value>Scope</value>
+ </param>
+ <param>
+ <key>label3</key>
+ <value>Tab 3</value>
+ </param>
+ <param>
+ <key>label4</key>
+ <value>Tab 4</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value>2,0,1,4</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(672, 13)</value>
+ <value>(6, 178)</value>
</param>
<param>
<key>_rotation</key>
@@ -189,10 +299,348 @@
</param>
</block>
<block>
- <key>wxgui_scopesink2</key>
+ <key>variable_qtgui_range</key>
<param>
<key>id</key>
- <value>wxgui_scopesink2_0</value>
+ <value>gain</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>label</key>
+ <value>RX Gain</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>15</value>
+ </param>
+ <param>
+ <key>start</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>stop</key>
+ <value>31.5</value>
+ </param>
+ <param>
+ <key>step</key>
+ <value>.5</value>
+ </param>
+ <param>
+ <key>widget</key>
+ <value>counter_slider</value>
+ </param>
+ <param>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
+ </param>
+ <param>
+ <key>min_len</key>
+ <value>200</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value>1,2,1,2</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(694, 216)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable_qtgui_range</key>
+ <param>
+ <key>id</key>
+ <value>freq</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>label</key>
+ <value>RX Tune Frequency</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>2.45e9</value>
+ </param>
+ <param>
+ <key>start</key>
+ <value>50e6</value>
+ </param>
+ <param>
+ <key>stop</key>
+ <value>6e9</value>
+ </param>
+ <param>
+ <key>step</key>
+ <value>100e3</value>
+ </param>
+ <param>
+ <key>widget</key>
+ <value>counter_slider</value>
+ </param>
+ <param>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
+ </param>
+ <param>
+ <key>min_len</key>
+ <value>200</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value>1,0,1,2</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(538, 214)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable_qtgui_chooser</key>
+ <param>
+ <key>id</key>
+ <value>ant</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>label</key>
+ <value>Antenna</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>string</value>
+ </param>
+ <param>
+ <key>num_opts</key>
+ <value>4</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>RX2</value>
+ </param>
+ <param>
+ <key>options</key>
+ <value>[0, 1, 2]</value>
+ </param>
+ <param>
+ <key>labels</key>
+ <value>[]</value>
+ </param>
+ <param>
+ <key>option0</key>
+ <value>RX2</value>
+ </param>
+ <param>
+ <key>label0</key>
+ <value>RX2</value>
+ </param>
+ <param>
+ <key>option1</key>
+ <value>TX/RX</value>
+ </param>
+ <param>
+ <key>label1</key>
+ <value>TX/RX</value>
+ </param>
+ <param>
+ <key>option2</key>
+ <value>J1</value>
+ </param>
+ <param>
+ <key>label2</key>
+ <value>J1</value>
+ </param>
+ <param>
+ <key>option3</key>
+ <value>J2</value>
+ </param>
+ <param>
+ <key>label3</key>
+ <value>J2</value>
+ </param>
+ <param>
+ <key>option4</key>
+ <value>4</value>
+ </param>
+ <param>
+ <key>label4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>widget</key>
+ <value>combo_box</value>
+ </param>
+ <param>
+ <key>orient</key>
+ <value>Qt.QVBoxLayout</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value>0,2,1,2</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(810, 124)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable_qtgui_label</key>
+ <param>
+ <key>id</key>
+ <value>lo_locked_probe</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>label</key>
+ <value>LO locked</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>bool</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>chan0_lo_locked.to_bool()</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value>0,1,1,1</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(662, 127)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable_qtgui_label</key>
+ <param>
+ <key>id</key>
+ <value>samp_rate</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>label</key>
+ <value>Sample Rate</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>real</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>1e6</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value>0,0,1,1</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(543, 128)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable_function_probe</key>
+ <param>
+ <key>id</key>
+ <value>chan0_lo_locked</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>uhd.sensor_value("", False, "")</value>
+ </param>
+ <param>
+ <key>block_id</key>
+ <value>uhd_usrp_source_0</value>
+ </param>
+ <param>
+ <key>function_name</key>
+ <value>get_sensor</value>
+ </param>
+ <param>
+ <key>function_args</key>
+ <value>"'lo_locked'"</value>
+ </param>
+ <param>
+ <key>poll_rate</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(1014, 164)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>qtgui_waterfall_sink_x</key>
+ <param>
+ <key>id</key>
+ <value>qtgui_waterfall_sink_x_0</value>
</param>
<param>
<key>_enabled</key>
@@ -203,60 +651,407 @@
<value>complex</value>
</param>
<param>
- <key>title</key>
- <value>Scope Plot</value>
+ <key>name</key>
+ <value>Scope</value>
</param>
<param>
- <key>samp_rate</key>
+ <key>fftsize</key>
+ <value>1024</value>
+ </param>
+ <param>
+ <key>wintype</key>
+ <value>firdes.WIN_BLACKMAN_hARRIS</value>
+ </param>
+ <param>
+ <key>fc</key>
+ <value>freq</value>
+ </param>
+ <param>
+ <key>bw</key>
<value>samp_rate</value>
</param>
<param>
- <key>v_scale</key>
+ <key>nconnections</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>update_time</key>
+ <value>0.10</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value>display@1:3,0,1,4</value>
+ </param>
+ <param>
+ <key>label1</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color1</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>alpha1</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color2</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>alpha2</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color3</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>alpha3</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color4</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>alpha4</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color5</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>alpha5</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color6</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>alpha6</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color7</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>alpha7</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label8</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color8</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>alpha8</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label9</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color9</key>
<value>0</value>
</param>
<param>
- <key>v_offset</key>
+ <key>alpha9</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label10</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color10</key>
<value>0</value>
</param>
<param>
- <key>t_scale</key>
+ <key>alpha10</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(325, 328)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
<value>0</value>
</param>
+ </block>
+ <block>
+ <key>qtgui_freq_sink_x</key>
+ <param>
+ <key>id</key>
+ <value>qtgui_freq_sink_x_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>complex</value>
+ </param>
+ <param>
+ <key>name</key>
+ <value>Spectrum</value>
+ </param>
+ <param>
+ <key>fftsize</key>
+ <value>1024</value>
+ </param>
+ <param>
+ <key>wintype</key>
+ <value>firdes.WIN_BLACKMAN_hARRIS</value>
+ </param>
+ <param>
+ <key>fc</key>
+ <value>freq</value>
+ </param>
+ <param>
+ <key>bw</key>
+ <value>samp_rate</value>
+ </param>
+ <param>
+ <key>autoscale</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>average</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>ymin</key>
+ <value>-140</value>
+ </param>
+ <param>
+ <key>ymax</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>nconnections</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>update_time</key>
+ <value>0.10</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value>display@0:3,0,1,4</value>
+ </param>
+ <param>
+ <key>label1</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width1</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color1</key>
+ <value>"blue"</value>
+ </param>
+ <param>
+ <key>alpha1</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width2</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color2</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>alpha2</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label3</key>
+ <value></value>
+ </param>
<param>
- <key>ac_couple</key>
- <value>False</value>
+ <key>width3</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color3</key>
+ <value>"green"</value>
+ </param>
+ <param>
+ <key>alpha3</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width4</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color4</key>
+ <value>"black"</value>
+ </param>
+ <param>
+ <key>alpha4</key>
+ <value>1.0</value>
</param>
<param>
- <key>xy_mode</key>
- <value>False</value>
+ <key>label5</key>
+ <value></value>
</param>
<param>
- <key>num_inputs</key>
+ <key>width5</key>
<value>1</value>
</param>
<param>
- <key>win_size</key>
+ <key>color5</key>
+ <value>"cyan"</value>
+ </param>
+ <param>
+ <key>alpha5</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label6</key>
<value></value>
</param>
<param>
- <key>grid_pos</key>
+ <key>width6</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color6</key>
+ <value>"magenta"</value>
+ </param>
+ <param>
+ <key>alpha6</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label7</key>
<value></value>
</param>
<param>
- <key>notebook</key>
- <value>nb0, 2</value>
+ <key>width7</key>
+ <value>1</value>
</param>
<param>
- <key>trig_mode</key>
- <value>wxgui.TRIG_MODE_AUTO</value>
+ <key>color7</key>
+ <value>"yellow"</value>
</param>
<param>
- <key>y_axis_label</key>
- <value>Counts</value>
+ <key>alpha7</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label8</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color8</key>
+ <value>"dark red"</value>
+ </param>
+ <param>
+ <key>alpha8</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label9</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color9</key>
+ <value>"dark green"</value>
+ </param>
+ <param>
+ <key>alpha9</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label10</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color10</key>
+ <value>"dark blue"</value>
+ </param>
+ <param>
+ <key>alpha10</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(314, 250)</value>
+ <value>(311, 217)</value>
</param>
<param>
<key>_rotation</key>
@@ -286,10 +1081,18 @@
<value></value>
</param>
<param>
+ <key>stream_chans</key>
+ <value>[]</value>
+ </param>
+ <param>
<key>dev_addr</key>
<value>address</value>
</param>
<param>
+ <key>dev_args</key>
+ <value>""</value>
+ </param>
+ <param>
<key>sync</key>
<value></value>
</param>
@@ -918,176 +1721,24 @@
<value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(37, 394)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>variable_function_probe</key>
- <param>
- <key>id</key>
- <value>chan0_lo_locked</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>value</key>
- <value>uhd.sensor_value("", False, "")</value>
- </param>
- <param>
- <key>block_id</key>
- <value>uhd_usrp_source_0</value>
- </param>
- <param>
- <key>function_name</key>
- <value>get_sensor</value>
- </param>
- <param>
- <key>function_args</key>
- <value>"'lo_locked'"</value>
- </param>
- <param>
- <key>poll_rate</key>
- <value>10</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(583, 432)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>notebook</key>
- <param>
- <key>id</key>
- <value>nb0</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>['FFT', 'Waterfall', 'Scope']</value>
- </param>
- <param>
- <key>grid_pos</key>
- <value>0, 0, 1, 8</value>
- </param>
- <param>
- <key>notebook</key>
+ <key>alias</key>
<value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(15, 172)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>variable_chooser</key>
- <param>
- <key>id</key>
- <value>ant_xcvr</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>False</value>
- </param>
- <param>
- <key>label</key>
- <value>Antenna</value>
- </param>
- <param>
- <key>value</key>
- <value>"J2"</value>
- </param>
- <param>
- <key>choices</key>
- <value>["J2","J1"]</value>
- </param>
- <param>
- <key>labels</key>
- <value>["J2","J1"]</value>
- </param>
- <param>
- <key>type</key>
- <value>radio_buttons</value>
- </param>
- <param>
- <key>style</key>
- <value>wx.RA_HORIZONTAL</value>
- </param>
- <param>
- <key>grid_pos</key>
- <value></value>
- </param>
- <param>
- <key>notebook</key>
+ <key>affinity</key>
<value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(830, 278)</value>
- </param>
- <param>
- <key>_rotation</key>
+ <key>minoutbuf</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>variable_static_text</key>
- <param>
- <key>id</key>
- <value>lo_locked_probe</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>label</key>
- <value>LO Locked</value>
- </param>
<param>
- <key>value</key>
- <value>chan0_lo_locked.to_bool()</value>
- </param>
- <param>
- <key>converver</key>
- <value>str_converter</value>
- </param>
- <param>
- <key>formatter</key>
- <value>lambda x: x and "True" or "False"</value>
- </param>
- <param>
- <key>grid_pos</key>
- <value>1, 7, 1, 1</value>
- </param>
- <param>
- <key>notebook</key>
- <value></value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(583, 314)</value>
+ <value>(33, 295)</value>
</param>
<param>
<key>_rotation</key>
@@ -1095,412 +1746,334 @@
</param>
</block>
<block>
- <key>variable_chooser</key>
+ <key>qtgui_time_sink_x</key>
<param>
<key>id</key>
- <value>ant</value>
+ <value>qtgui_time_sink_x_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>label</key>
- <value>Antenna</value>
- </param>
- <param>
- <key>value</key>
- <value>"RX2"</value>
- </param>
- <param>
- <key>choices</key>
- <value>["RX2","TX/RX"]</value>
- </param>
- <param>
- <key>labels</key>
- <value>["RX2","TX/RX"]</value>
- </param>
- <param>
<key>type</key>
- <value>radio_buttons</value>
- </param>
- <param>
- <key>style</key>
- <value>wx.RA_HORIZONTAL</value>
- </param>
- <param>
- <key>grid_pos</key>
- <value>1, 4, 1, 2</value>
- </param>
- <param>
- <key>notebook</key>
- <value></value>
+ <value>complex</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(830, 130)</value>
+ <key>name</key>
+ <value>QT GUI Plot</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>size</key>
+ <value>1024</value>
</param>
- </block>
- <block>
- <key>wxgui_fftsink2</key>
<param>
- <key>id</key>
- <value>fft</value>
+ <key>srate</key>
+ <value>samp_rate</value>
</param>
<param>
- <key>_enabled</key>
+ <key>autoscale</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
- </param>
- <param>
- <key>title</key>
- <value>FFT Plot</value>
- </param>
- <param>
- <key>samp_rate</key>
- <value>samp_rate</value>
+ <key>ymin</key>
+ <value>-1</value>
</param>
<param>
- <key>baseband_freq</key>
- <value>freq</value>
- </param>
- <param>
- <key>y_per_div</key>
- <value>10</value>
+ <key>ymax</key>
+ <value>1</value>
</param>
<param>
- <key>y_divs</key>
- <value>15</value>
+ <key>nconnections</key>
+ <value>1</value>
</param>
<param>
- <key>ref_level</key>
- <value>0</value>
+ <key>update_time</key>
+ <value>0.10</value>
</param>
<param>
- <key>ref_scale</key>
- <value>2.0</value>
+ <key>entags</key>
+ <value>True</value>
</param>
<param>
- <key>fft_size</key>
- <value>1024</value>
+ <key>gui_hint</key>
+ <value>display@2:3,0,1,4</value>
</param>
<param>
- <key>fft_rate</key>
- <value>15</value>
+ <key>tr_mode</key>
+ <value>qtgui.TRIG_MODE_FREE</value>
</param>
<param>
- <key>peak_hold</key>
- <value>False</value>
+ <key>tr_slope</key>
+ <value>qtgui.TRIG_SLOPE_POS</value>
</param>
<param>
- <key>average</key>
- <value>False</value>
+ <key>tr_level</key>
+ <value>0.0</value>
</param>
<param>
- <key>avg_alpha</key>
+ <key>tr_delay</key>
<value>0</value>
</param>
<param>
- <key>win</key>
- <value>None</value>
+ <key>tr_chan</key>
+ <value>0</value>
</param>
<param>
- <key>win_size</key>
- <value>(-1, 400)</value>
+ <key>tr_tag</key>
+ <value>""</value>
</param>
<param>
- <key>grid_pos</key>
+ <key>label1</key>
<value></value>
</param>
<param>
- <key>notebook</key>
- <value>nb0, 0</value>
- </param>
- <param>
- <key>freqvar</key>
- <value>None</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(314, 359)</value>
+ <key>width1</key>
+ <value>1</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>color1</key>
+ <value>"blue"</value>
</param>
- </block>
- <block>
- <key>wxgui_waterfallsink2</key>
<param>
- <key>id</key>
- <value>wxgui_waterfallsink2_0</value>
+ <key>style1</key>
+ <value>1</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>marker1</key>
+ <value>-1</value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
+ <key>alpha1</key>
+ <value>1.0</value>
</param>
<param>
- <key>title</key>
- <value>Waterfall Plot</value>
+ <key>label2</key>
+ <value></value>
</param>
<param>
- <key>samp_rate</key>
- <value>samp_rate</value>
+ <key>width2</key>
+ <value>1</value>
</param>
<param>
- <key>baseband_freq</key>
- <value>0</value>
+ <key>color2</key>
+ <value>"red"</value>
</param>
<param>
- <key>dynamic_range</key>
- <value>100</value>
+ <key>style2</key>
+ <value>1</value>
</param>
<param>
- <key>ref_level</key>
- <value>0</value>
+ <key>marker2</key>
+ <value>-1</value>
</param>
<param>
- <key>ref_scale</key>
- <value>2.0</value>
+ <key>alpha2</key>
+ <value>1.0</value>
</param>
<param>
- <key>fft_size</key>
- <value>512</value>
+ <key>label3</key>
+ <value></value>
</param>
<param>
- <key>fft_rate</key>
- <value>15</value>
+ <key>width3</key>
+ <value>1</value>
</param>
<param>
- <key>average</key>
- <value>False</value>
+ <key>color3</key>
+ <value>"green"</value>
</param>
<param>
- <key>avg_alpha</key>
- <value>0</value>
+ <key>style3</key>
+ <value>1</value>
</param>
<param>
- <key>win</key>
- <value>None</value>
+ <key>marker3</key>
+ <value>-1</value>
</param>
<param>
- <key>win_size</key>
- <value>(-1, 400)</value>
+ <key>alpha3</key>
+ <value>1.0</value>
</param>
<param>
- <key>grid_pos</key>
+ <key>label4</key>
<value></value>
</param>
<param>
- <key>notebook</key>
- <value>nb0, 1</value>
+ <key>width4</key>
+ <value>1</value>
</param>
<param>
- <key>freqvar</key>
- <value>None</value>
+ <key>color4</key>
+ <value>"black"</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(313, 573)</value>
+ <key>style4</key>
+ <value>1</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>marker4</key>
+ <value>-1</value>
</param>
- </block>
- <block>
- <key>variable_text_box</key>
<param>
- <key>id</key>
- <value>samp_rate</value>
+ <key>alpha4</key>
+ <value>1.0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>label5</key>
+ <value></value>
</param>
<param>
- <key>label</key>
- <value>Sample Rate</value>
+ <key>width5</key>
+ <value>1</value>
</param>
<param>
- <key>value</key>
- <value>param_samp_rate</value>
+ <key>color5</key>
+ <value>"cyan"</value>
</param>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>style5</key>
+ <value>1</value>
</param>
<param>
- <key>formatter</key>
- <value>None</value>
+ <key>marker5</key>
+ <value>-1</value>
</param>
<param>
- <key>grid_pos</key>
- <value>1, 0, 1, 3</value>
+ <key>alpha5</key>
+ <value>1.0</value>
</param>
<param>
- <key>notebook</key>
+ <key>label6</key>
<value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(358, 129)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
+ <key>width6</key>
+ <value>1</value>
</param>
- </block>
- <block>
- <key>variable_slider</key>
<param>
- <key>id</key>
- <value>freq</value>
+ <key>color6</key>
+ <value>"magenta"</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>style6</key>
+ <value>1</value>
</param>
<param>
- <key>label</key>
- <value>RX Tune Frequency</value>
+ <key>marker6</key>
+ <value>-1</value>
</param>
<param>
- <key>value</key>
- <value>param_freq</value>
+ <key>alpha6</key>
+ <value>1.0</value>
</param>
<param>
- <key>min</key>
- <value>50e6</value>
+ <key>label7</key>
+ <value></value>
</param>
<param>
- <key>max</key>
- <value>6e9</value>
+ <key>width7</key>
+ <value>1</value>
</param>
<param>
- <key>num_steps</key>
- <value>1000</value>
+ <key>color7</key>
+ <value>"yellow"</value>
</param>
<param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
+ <key>style7</key>
+ <value>1</value>
</param>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>marker7</key>
+ <value>-1</value>
</param>
<param>
- <key>grid_pos</key>
- <value>3, 0, 1, 8</value>
+ <key>alpha7</key>
+ <value>1.0</value>
</param>
<param>
- <key>notebook</key>
+ <key>label8</key>
<value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(510, 128)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
+ <key>width8</key>
+ <value>1</value>
</param>
- </block>
- <block>
- <key>variable_slider</key>
<param>
- <key>id</key>
- <value>gain</value>
+ <key>color8</key>
+ <value>"dark red"</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>style8</key>
+ <value>1</value>
</param>
<param>
- <key>label</key>
- <value>RX Gain</value>
+ <key>marker8</key>
+ <value>-1</value>
</param>
<param>
- <key>value</key>
- <value>param_gain</value>
+ <key>alpha8</key>
+ <value>1.0</value>
</param>
<param>
- <key>min</key>
- <value>0</value>
+ <key>label9</key>
+ <value></value>
</param>
<param>
- <key>max</key>
- <value>31.5</value>
+ <key>width9</key>
+ <value>1</value>
</param>
<param>
- <key>num_steps</key>
- <value>63</value>
+ <key>color9</key>
+ <value>"dark green"</value>
</param>
<param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
+ <key>style9</key>
+ <value>1</value>
</param>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>marker9</key>
+ <value>-1</value>
</param>
<param>
- <key>grid_pos</key>
- <value>2, 0, 1, 8</value>
+ <key>alpha9</key>
+ <value>1.0</value>
</param>
<param>
- <key>notebook</key>
+ <key>label10</key>
<value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(679, 130)</value>
+ <key>width10</key>
+ <value>1</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>color10</key>
+ <value>"blue"</value>
</param>
- </block>
- <block>
- <key>parameter</key>
<param>
- <key>id</key>
- <value>address</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
+ <key>style10</key>
+ <value>1</value>
</param>
<param>
- <key>label</key>
- <value>IP Address</value>
+ <key>marker10</key>
+ <value>-1</value>
</param>
<param>
- <key>value</key>
- <value>addr=192.168.11.2</value>
+ <key>alpha10</key>
+ <value>1.0</value>
</param>
<param>
- <key>type</key>
- <value>string</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>short_id</key>
- <value>a</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(190, 15)</value>
+ <value>(333, 436)</value>
</param>
<param>
<key>_rotation</key>
@@ -1509,19 +2082,19 @@
</block>
<connection>
<source_block_id>uhd_usrp_source_0</source_block_id>
- <sink_block_id>wxgui_scopesink2_0</sink_block_id>
+ <sink_block_id>qtgui_time_sink_x_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>uhd_usrp_source_0</source_block_id>
- <sink_block_id>wxgui_waterfallsink2_0</sink_block_id>
+ <sink_block_id>qtgui_waterfall_sink_x_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>uhd_usrp_source_0</source_block_id>
- <sink_block_id>fft</sink_block_id>
+ <sink_block_id>qtgui_freq_sink_x_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
diff --git a/gr-uhd/examples/grc/uhd_msg_tune.grc b/gr-uhd/examples/grc/uhd_msg_tune.grc
new file mode 100644
index 0000000000..89022278be
--- /dev/null
+++ b/gr-uhd/examples/grc/uhd_msg_tune.grc
@@ -0,0 +1,1132 @@
+<?xml version='1.0' encoding='ASCII'?>
+<flow_graph>
+ <timestamp>Tue Jul 8 12:08:19 2014</timestamp>
+ <block>
+ <key>options</key>
+ <param>
+ <key>id</key>
+ <value>uhd_tune_msg</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>title</key>
+ <value>UHD Message Tuner</value>
+ </param>
+ <param>
+ <key>author</key>
+ <value></value>
+ </param>
+ <param>
+ <key>description</key>
+ <value>Tune a UHD source from a QT sink via messages.</value>
+ </param>
+ <param>
+ <key>window_size</key>
+ <value>1280, 1024</value>
+ </param>
+ <param>
+ <key>generate_options</key>
+ <value>qt_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>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(-1, -2)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable</key>
+ <param>
+ <key>id</key>
+ <value>initial_fc</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>100e6</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(-2, 172)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </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>2e6</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(1, 102)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable_qtgui_range</key>
+ <param>
+ <key>id</key>
+ <value>gain</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>label</key>
+ <value></value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>start</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>stop</key>
+ <value>60</value>
+ </param>
+ <param>
+ <key>step</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>widget</key>
+ <value>counter_slider</value>
+ </param>
+ <param>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
+ </param>
+ <param>
+ <key>min_len</key>
+ <value>200</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value></value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(103, 99)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>uhd_usrp_source</key>
+ <param>
+ <key>id</key>
+ <value>uhd_usrp_source_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>fc32</value>
+ </param>
+ <param>
+ <key>otw</key>
+ <value></value>
+ </param>
+ <param>
+ <key>stream_args</key>
+ <value></value>
+ </param>
+ <param>
+ <key>stream_chans</key>
+ <value>[]</value>
+ </param>
+ <param>
+ <key>dev_addr</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>dev_args</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>sync</key>
+ <value></value>
+ </param>
+ <param>
+ <key>clock_rate</key>
+ <value>0.0</value>
+ </param>
+ <param>
+ <key>num_mboards</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>clock_source0</key>
+ <value></value>
+ </param>
+ <param>
+ <key>time_source0</key>
+ <value></value>
+ </param>
+ <param>
+ <key>sd_spec0</key>
+ <value></value>
+ </param>
+ <param>
+ <key>clock_source1</key>
+ <value></value>
+ </param>
+ <param>
+ <key>time_source1</key>
+ <value></value>
+ </param>
+ <param>
+ <key>sd_spec1</key>
+ <value></value>
+ </param>
+ <param>
+ <key>clock_source2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>time_source2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>sd_spec2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>clock_source3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>time_source3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>sd_spec3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>clock_source4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>time_source4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>sd_spec4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>clock_source5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>time_source5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>sd_spec5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>clock_source6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>time_source6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>sd_spec6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>clock_source7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>time_source7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>sd_spec7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>nchan</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>samp_rate</key>
+ <value>samp_rate</value>
+ </param>
+ <param>
+ <key>center_freq0</key>
+ <value>initial_fc</value>
+ </param>
+ <param>
+ <key>gain0</key>
+ <value>gain</value>
+ </param>
+ <param>
+ <key>ant0</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw0</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq1</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain1</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant1</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw1</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq2</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain2</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw2</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq3</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain3</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw3</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq4</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain4</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw4</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq5</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain5</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw5</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq6</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain6</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw6</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq7</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain7</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw7</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq8</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain8</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant8</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw8</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq9</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain9</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant9</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw9</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq10</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain10</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant10</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw10</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq11</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain11</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant11</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw11</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq12</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain12</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant12</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw12</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq13</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain13</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant13</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw13</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq14</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain14</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant14</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw14</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq15</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain15</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant15</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw15</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq16</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain16</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant16</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw16</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq17</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain17</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant17</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw17</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq18</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain18</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant18</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw18</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq19</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain19</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant19</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw19</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq20</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain20</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant20</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw20</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq21</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain21</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant21</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw21</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq22</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain22</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant22</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw22</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq23</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain23</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant23</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw23</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq24</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain24</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant24</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw24</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq25</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain25</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant25</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw25</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq26</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain26</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant26</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw26</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq27</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain27</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant27</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw27</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq28</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain28</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant28</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw28</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq29</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain29</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant29</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw29</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq30</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain30</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant30</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw30</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq31</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain31</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant31</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw31</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(336, 8)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>qtgui_freq_sink_x</key>
+ <param>
+ <key>id</key>
+ <value>qtgui_freq_sink_x_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>complex</value>
+ </param>
+ <param>
+ <key>name</key>
+ <value>QT GUI Plot</value>
+ </param>
+ <param>
+ <key>fftsize</key>
+ <value>1024</value>
+ </param>
+ <param>
+ <key>wintype</key>
+ <value>firdes.WIN_BLACKMAN_hARRIS</value>
+ </param>
+ <param>
+ <key>fc</key>
+ <value>initial_fc</value>
+ </param>
+ <param>
+ <key>bw</key>
+ <value>samp_rate</value>
+ </param>
+ <param>
+ <key>autoscale</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>average</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>ymin</key>
+ <value>-140</value>
+ </param>
+ <param>
+ <key>ymax</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>nconnections</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>update_time</key>
+ <value>0.10</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value></value>
+ </param>
+ <param>
+ <key>label1</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width1</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color1</key>
+ <value>"blue"</value>
+ </param>
+ <param>
+ <key>alpha1</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width2</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color2</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>alpha2</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width3</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color3</key>
+ <value>"green"</value>
+ </param>
+ <param>
+ <key>alpha3</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width4</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color4</key>
+ <value>"black"</value>
+ </param>
+ <param>
+ <key>alpha4</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width5</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color5</key>
+ <value>"cyan"</value>
+ </param>
+ <param>
+ <key>alpha5</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width6</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color6</key>
+ <value>"magenta"</value>
+ </param>
+ <param>
+ <key>alpha6</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width7</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color7</key>
+ <value>"yellow"</value>
+ </param>
+ <param>
+ <key>alpha7</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label8</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color8</key>
+ <value>"dark red"</value>
+ </param>
+ <param>
+ <key>alpha8</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label9</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color9</key>
+ <value>"dark green"</value>
+ </param>
+ <param>
+ <key>alpha9</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label10</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color10</key>
+ <value>"dark blue"</value>
+ </param>
+ <param>
+ <key>alpha10</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(330, 104)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>180</value>
+ </param>
+ </block>
+ <connection>
+ <source_block_id>uhd_usrp_source_0</source_block_id>
+ <sink_block_id>qtgui_freq_sink_x_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>qtgui_freq_sink_x_0</source_block_id>
+ <sink_block_id>uhd_usrp_source_0</sink_block_id>
+ <source_key>freq</source_key>
+ <sink_key>command</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>qtgui_freq_sink_x_0</source_block_id>
+ <sink_block_id>qtgui_freq_sink_x_0</sink_block_id>
+ <source_key>freq</source_key>
+ <sink_key>freq</sink_key>
+ </connection>
+</flow_graph>
diff --git a/gr-uhd/examples/grc/uhd_rx_dpsk.grc b/gr-uhd/examples/grc/uhd_rx_dpsk.grc
index 8a9faa4b73..96b92c4484 100644
--- a/gr-uhd/examples/grc/uhd_rx_dpsk.grc
+++ b/gr-uhd/examples/grc/uhd_rx_dpsk.grc
@@ -1,6 +1,6 @@
<?xml version='1.0' encoding='ASCII'?>
<flow_graph>
- <timestamp>Mon Mar 18 11:10:25 2013</timestamp>
+ <timestamp>Sat Jul 12 15:58:45 2014</timestamp>
<block>
<key>options</key>
<param>
@@ -29,7 +29,7 @@
</param>
<param>
<key>generate_options</key>
- <value>wx_gui</value>
+ <value>qt_gui</value>
</param>
<param>
<key>category</key>
@@ -52,31 +52,12 @@
<value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(12, 9)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>variable</key>
- <param>
- <key>id</key>
- <value>samps_per_sym</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>value</key>
- <value>4</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(12, 88)</value>
+ <value>(-1, 0)</value>
</param>
<param>
<key>_rotation</key>
@@ -84,34 +65,26 @@
</param>
</block>
<block>
- <key>parameter</key>
+ <key>variable</key>
<param>
<key>id</key>
- <value>samp_rate</value>
+ <value>rolloff</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>label</key>
- <value>Sample Rate</value>
- </param>
- <param>
<key>value</key>
- <value>1e6</value>
+ <value>.35</value>
</param>
<param>
- <key>type</key>
- <value>eng_float</value>
- </param>
- <param>
- <key>short_id</key>
- <value>s</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(339, 11)</value>
+ <value>(570, 579)</value>
</param>
<param>
<key>_rotation</key>
@@ -119,34 +92,26 @@
</param>
</block>
<block>
- <key>parameter</key>
+ <key>variable</key>
<param>
<key>id</key>
- <value>freq</value>
+ <value>samps_per_sym</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>label</key>
- <value>Default Frequency</value>
- </param>
- <param>
<key>value</key>
- <value>2.45e9</value>
- </param>
- <param>
- <key>type</key>
- <value>eng_float</value>
+ <value>4</value>
</param>
<param>
- <key>short_id</key>
- <value>f</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(466, 11)</value>
+ <value>(881, -1)</value>
</param>
<param>
<key>_rotation</key>
@@ -154,34 +119,26 @@
</param>
</block>
<block>
- <key>parameter</key>
+ <key>variable</key>
<param>
<key>id</key>
- <value>gain</value>
+ <value>nfilts</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>label</key>
- <value>Default Gain</value>
- </param>
- <param>
<key>value</key>
- <value>0</value>
- </param>
- <param>
- <key>type</key>
- <value>eng_float</value>
+ <value>32</value>
</param>
<param>
- <key>short_id</key>
- <value>g</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(624, 14)</value>
+ <value>(657, 579)</value>
</param>
<param>
<key>_rotation</key>
@@ -215,8 +172,12 @@
<value>a</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(186, 10)</value>
+ <value>(158, 0)</value>
</param>
<param>
<key>_rotation</key>
@@ -227,7 +188,7 @@
<key>parameter</key>
<param>
<key>id</key>
- <value>freq_offset</value>
+ <value>gain</value>
</param>
<param>
<key>_enabled</key>
@@ -235,7 +196,7 @@
</param>
<param>
<key>label</key>
- <value>Rx Frequency Offset</value>
+ <value>Default Gain</value>
</param>
<param>
<key>value</key>
@@ -247,93 +208,15 @@
</param>
<param>
<key>short_id</key>
- <value>o</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(748, 15)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>variable_slider</key>
- <param>
- <key>id</key>
- <value>tun_freq</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>label</key>
- <value>Freq (Hz)</value>
- </param>
- <param>
- <key>value</key>
- <value>freq</value>
- </param>
- <param>
- <key>min</key>
- <value>2.4e9</value>
- </param>
- <param>
- <key>max</key>
- <value>2.5e9</value>
- </param>
- <param>
- <key>num_steps</key>
- <value>100</value>
- </param>
- <param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
- </param>
- <param>
- <key>converver</key>
- <value>float_converter</value>
- </param>
- <param>
- <key>grid_pos</key>
- <value></value>
+ <value>g</value>
</param>
<param>
- <key>notebook</key>
+ <key>alias</key>
<value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(12, 436)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>blocks_null_sink</key>
- <param>
- <key>id</key>
- <value>blocks_null_sink_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>type</key>
- <value>byte</value>
- </param>
- <param>
- <key>vlen</key>
- <value>1</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(615, 144)</value>
+ <value>(596, 0)</value>
</param>
<param>
<key>_rotation</key>
@@ -341,10 +224,10 @@
</param>
</block>
<block>
- <key>variable_slider</key>
+ <key>parameter</key>
<param>
<key>id</key>
- <value>timing_bw</value>
+ <value>freq</value>
</param>
<param>
<key>_enabled</key>
@@ -352,43 +235,27 @@
</param>
<param>
<key>label</key>
- <value>Timing Loop BW</value>
+ <value>Default Frequency</value>
</param>
<param>
<key>value</key>
- <value>6.28/100.0</value>
- </param>
- <param>
- <key>min</key>
- <value>0</value>
- </param>
- <param>
- <key>max</key>
- <value>1</value>
- </param>
- <param>
- <key>num_steps</key>
- <value>100</value>
- </param>
- <param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
+ <value>2.45e9</value>
</param>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>type</key>
+ <value>eng_float</value>
</param>
<param>
- <key>grid_pos</key>
- <value></value>
+ <key>short_id</key>
+ <value>f</value>
</param>
<param>
- <key>notebook</key>
+ <key>alias</key>
<value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(604, 436)</value>
+ <value>(438, 0)</value>
</param>
<param>
<key>_rotation</key>
@@ -396,10 +263,10 @@
</param>
</block>
<block>
- <key>variable_slider</key>
+ <key>parameter</key>
<param>
<key>id</key>
- <value>phase_bw</value>
+ <value>samp_rate</value>
</param>
<param>
<key>_enabled</key>
@@ -407,43 +274,27 @@
</param>
<param>
<key>label</key>
- <value>Phase Loop BW</value>
+ <value>Sample Rate</value>
</param>
<param>
<key>value</key>
- <value>6.28/100.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>100</value>
- </param>
- <param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
+ <value>1e6</value>
</param>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>type</key>
+ <value>eng_float</value>
</param>
<param>
- <key>grid_pos</key>
- <value></value>
+ <key>short_id</key>
+ <value>s</value>
</param>
<param>
- <key>notebook</key>
+ <key>alias</key>
<value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(461, 436)</value>
+ <value>(311, 0)</value>
</param>
<param>
<key>_rotation</key>
@@ -451,78 +302,38 @@
</param>
</block>
<block>
- <key>wxgui_constellationsink2</key>
+ <key>parameter</key>
<param>
<key>id</key>
- <value>wxgui_constellationsink2_0</value>
+ <value>freq_offset</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>
+ <key>label</key>
+ <value>Rx Frequency Offset</value>
</param>
<param>
- <key>theta</key>
+ <key>value</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/samps_per_sym</value>
- </param>
- <param>
- <key>omega_limit</key>
- <value>0.005</value>
- </param>
- <param>
- <key>win_size</key>
- <value></value>
+ <key>type</key>
+ <value>eng_float</value>
</param>
<param>
- <key>grid_pos</key>
- <value></value>
+ <key>short_id</key>
+ <value>o</value>
</param>
<param>
- <key>notebook</key>
+ <key>alias</key>
<value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(931, 313)</value>
+ <value>(720, 0)</value>
</param>
<param>
<key>_rotation</key>
@@ -530,90 +341,58 @@
</param>
</block>
<block>
- <key>wxgui_fftsink2</key>
+ <key>variable_qtgui_range</key>
<param>
<key>id</key>
- <value>wxgui_fftsink2_0</value>
+ <value>tun_freq</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
- </param>
- <param>
- <key>title</key>
- <value>FFT Plot</value>
- </param>
- <param>
- <key>samp_rate</key>
- <value>samp_rate</value>
- </param>
- <param>
- <key>baseband_freq</key>
- <value>tun_freq</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>label</key>
+ <value>UHD Freq (Hz)</value>
</param>
<param>
- <key>fft_size</key>
- <value>1024</value>
+ <key>value</key>
+ <value>2.45e9</value>
</param>
<param>
- <key>fft_rate</key>
- <value>30</value>
+ <key>start</key>
+ <value>2.4e9</value>
</param>
<param>
- <key>peak_hold</key>
- <value>False</value>
+ <key>stop</key>
+ <value>2.5e9</value>
</param>
<param>
- <key>average</key>
- <value>False</value>
+ <key>step</key>
+ <value>1</value>
</param>
<param>
- <key>avg_alpha</key>
- <value>0</value>
+ <key>widget</key>
+ <value>counter_slider</value>
</param>
<param>
- <key>win</key>
- <value>None</value>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
</param>
<param>
- <key>win_size</key>
- <value></value>
+ <key>min_len</key>
+ <value>200</value>
</param>
<param>
- <key>grid_pos</key>
+ <key>gui_hint</key>
<value></value>
</param>
<param>
- <key>notebook</key>
+ <key>alias</key>
<value></value>
</param>
<param>
- <key>freqvar</key>
- <value>None</value>
- </param>
- <param>
<key>_coordinate</key>
- <value>(710, 236)</value>
+ <value>(6, 448)</value>
</param>
<param>
<key>_rotation</key>
@@ -621,66 +400,7 @@
</param>
</block>
<block>
- <key>digital_dxpsk_demod</key>
- <param>
- <key>id</key>
- <value>digital_dxpsk_demod_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>freq_bw</key>
- <value>6.28/100.0</value>
- </param>
- <param>
- <key>phase_bw</key>
- <value>6.28/100.0</value>
- </param>
- <param>
- <key>timing_bw</key>
- <value>6.28/100.0</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>sync_out</key>
- <value>False</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(303, 154)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>variable_slider</key>
+ <key>variable_qtgui_range</key>
<param>
<key>id</key>
<value>rx_freq_off</value>
@@ -691,43 +411,47 @@
</param>
<param>
<key>label</key>
- <value>RX Freq Offset (Hz)</value>
+ <value>Rx Freq Offset (Hz)</value>
</param>
<param>
<key>value</key>
- <value>freq_offset</value>
+ <value>0</value>
</param>
<param>
- <key>min</key>
+ <key>start</key>
<value>-100e3</value>
</param>
<param>
- <key>max</key>
- <value>+100e3</value>
+ <key>stop</key>
+ <value>100e3</value>
</param>
<param>
- <key>num_steps</key>
- <value>100</value>
+ <key>step</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>widget</key>
+ <value>counter_slider</value>
</param>
<param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
</param>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>min_len</key>
+ <value>200</value>
</param>
<param>
- <key>grid_pos</key>
+ <key>gui_hint</key>
<value></value>
</param>
<param>
- <key>notebook</key>
+ <key>alias</key>
<value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(149, 437)</value>
+ <value>(134, 448)</value>
</param>
<param>
<key>_rotation</key>
@@ -735,7 +459,7 @@
</param>
</block>
<block>
- <key>variable_slider</key>
+ <key>variable_qtgui_range</key>
<param>
<key>id</key>
<value>tun_gain</value>
@@ -746,43 +470,47 @@
</param>
<param>
<key>label</key>
- <value>UHD Gain</value>
+ <value>UHD Tx Gain</value>
</param>
<param>
<key>value</key>
- <value>gain</value>
+ <value>0</value>
</param>
<param>
- <key>min</key>
+ <key>start</key>
<value>0</value>
</param>
<param>
- <key>max</key>
+ <key>stop</key>
<value>20</value>
</param>
<param>
- <key>num_steps</key>
- <value>100</value>
+ <key>step</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>widget</key>
+ <value>counter_slider</value>
</param>
<param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
</param>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>min_len</key>
+ <value>200</value>
</param>
<param>
- <key>grid_pos</key>
+ <key>gui_hint</key>
<value></value>
</param>
<param>
- <key>notebook</key>
+ <key>alias</key>
<value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(306, 438)</value>
+ <value>(286, 447)</value>
</param>
<param>
<key>_rotation</key>
@@ -812,10 +540,18 @@
<value></value>
</param>
<param>
+ <key>stream_chans</key>
+ <value>[]</value>
+ </param>
+ <param>
<key>dev_addr</key>
<value>address</value>
</param>
<param>
+ <key>dev_args</key>
+ <value>""</value>
+ </param>
+ <param>
<key>sync</key>
<value></value>
</param>
@@ -1444,8 +1180,381 @@
<value>0</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(0, 143)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>blocks_null_sink</key>
+ <param>
+ <key>id</key>
+ <value>blocks_null_sink_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>byte</value>
+ </param>
+ <param>
+ <key>vlen</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>num_inputs</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>bus_conns</key>
+ <value>[[0,],]</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(620, 168)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>digital_dxpsk_demod</key>
+ <param>
+ <key>id</key>
+ <value>digital_dxpsk_demod_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>freq_bw</key>
+ <value>6.28/100.0</value>
+ </param>
+ <param>
+ <key>phase_bw</key>
+ <value>6.28/100.0</value>
+ </param>
+ <param>
+ <key>timing_bw</key>
+ <value>6.28/100.0</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>sync_out</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(325, 112)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>qtgui_freq_sink_x</key>
+ <param>
+ <key>id</key>
+ <value>qtgui_freq_sink_x_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>complex</value>
+ </param>
+ <param>
+ <key>name</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>fftsize</key>
+ <value>1024</value>
+ </param>
+ <param>
+ <key>wintype</key>
+ <value>firdes.WIN_BLACKMAN_hARRIS</value>
+ </param>
+ <param>
+ <key>fc</key>
+ <value>tun_freq</value>
+ </param>
+ <param>
+ <key>bw</key>
+ <value>samp_rate</value>
+ </param>
+ <param>
+ <key>autoscale</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>average</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>ymin</key>
+ <value>-140</value>
+ </param>
+ <param>
+ <key>ymax</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>nconnections</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>update_time</key>
+ <value>0.10</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value></value>
+ </param>
+ <param>
+ <key>label1</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width1</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color1</key>
+ <value>"blue"</value>
+ </param>
+ <param>
+ <key>alpha1</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width2</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color2</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>alpha2</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width3</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color3</key>
+ <value>"green"</value>
+ </param>
+ <param>
+ <key>alpha3</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width4</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color4</key>
+ <value>"black"</value>
+ </param>
+ <param>
+ <key>alpha4</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width5</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color5</key>
+ <value>"cyan"</value>
+ </param>
+ <param>
+ <key>alpha5</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width6</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color6</key>
+ <value>"magenta"</value>
+ </param>
+ <param>
+ <key>alpha6</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width7</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color7</key>
+ <value>"yellow"</value>
+ </param>
+ <param>
+ <key>alpha7</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label8</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color8</key>
+ <value>"dark red"</value>
+ </param>
+ <param>
+ <key>alpha8</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label9</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color9</key>
+ <value>"dark green"</value>
+ </param>
+ <param>
+ <key>alpha9</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label10</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color10</key>
+ <value>"dark blue"</value>
+ </param>
+ <param>
+ <key>alpha10</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(18, 276)</value>
+ <value>(340, 283)</value>
</param>
<param>
<key>_rotation</key>
@@ -1466,13 +1575,7 @@
</connection>
<connection>
<source_block_id>uhd_usrp_source_0</source_block_id>
- <sink_block_id>wxgui_constellationsink2_0</sink_block_id>
- <source_key>0</source_key>
- <sink_key>0</sink_key>
- </connection>
- <connection>
- <source_block_id>uhd_usrp_source_0</source_block_id>
- <sink_block_id>wxgui_fftsink2_0</sink_block_id>
+ <sink_block_id>qtgui_freq_sink_x_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
diff --git a/gr-uhd/examples/grc/uhd_two_tone_loopback.grc b/gr-uhd/examples/grc/uhd_two_tone_loopback.grc
index 1884dd3ebf..f164d8522a 100644
--- a/gr-uhd/examples/grc/uhd_two_tone_loopback.grc
+++ b/gr-uhd/examples/grc/uhd_two_tone_loopback.grc
@@ -1,6 +1,6 @@
<?xml version='1.0' encoding='ASCII'?>
<flow_graph>
- <timestamp>Sat Nov 10 14:55:26 2012</timestamp>
+ <timestamp>Sat Jul 12 14:48:02 2014</timestamp>
<block>
<key>options</key>
<param>
@@ -29,7 +29,7 @@
</param>
<param>
<key>generate_options</key>
- <value>wx_gui</value>
+ <value>qt_gui</value>
</param>
<param>
<key>category</key>
@@ -52,8 +52,12 @@
<value></value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(10, 10)</value>
+ <value>(1, 0)</value>
</param>
<param>
<key>_rotation</key>
@@ -64,7 +68,7 @@
<key>parameter</key>
<param>
<key>id</key>
- <value>tx_gain</value>
+ <value>samp_rate</value>
</param>
<param>
<key>_enabled</key>
@@ -72,7 +76,46 @@
</param>
<param>
<key>label</key>
- <value>Default TX Gain</value>
+ <value>Sample Rate</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>500e3</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>eng_float</value>
+ </param>
+ <param>
+ <key>short_id</key>
+ <value>s</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(523, 0)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>parameter</key>
+ <param>
+ <key>id</key>
+ <value>rx_gain</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>label</key>
+ <value>Default RX Gain</value>
</param>
<param>
<key>value</key>
@@ -87,8 +130,51 @@
<value></value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(999, 11)</value>
+ <value>(1123, 0)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>parameter</key>
+ <param>
+ <key>id</key>
+ <value>freq_offset</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>label</key>
+ <value>Rx Frequency Offset</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>eng_float</value>
+ </param>
+ <param>
+ <key>short_id</key>
+ <value>o</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(804, 0)</value>
</param>
<param>
<key>_rotation</key>
@@ -122,8 +208,12 @@
<value>f</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(665, 11)</value>
+ <value>(649, 0)</value>
</param>
<param>
<key>_rotation</key>
@@ -134,7 +224,7 @@
<key>parameter</key>
<param>
<key>id</key>
- <value>freq_offset</value>
+ <value>tx_gain</value>
</param>
<param>
<key>_enabled</key>
@@ -142,7 +232,7 @@
</param>
<param>
<key>label</key>
- <value>Rx Frequency Offset</value>
+ <value>Default TX Gain</value>
</param>
<param>
<key>value</key>
@@ -154,11 +244,15 @@
</param>
<param>
<key>short_id</key>
- <value>o</value>
+ <value></value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(820, 11)</value>
+ <value>(983, 0)</value>
</param>
<param>
<key>_rotation</key>
@@ -169,7 +263,7 @@
<key>parameter</key>
<param>
<key>id</key>
- <value>address1</value>
+ <value>address0</value>
</param>
<param>
<key>_enabled</key>
@@ -177,11 +271,11 @@
</param>
<param>
<key>label</key>
- <value>IP Address, Dev 1</value>
+ <value>IP Address, Dev 0</value>
</param>
<param>
<key>value</key>
- <value>addr=192.168.11.2</value>
+ <value>addr=192.168.10.2</value>
</param>
<param>
<key>type</key>
@@ -192,8 +286,12 @@
<value></value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(353, 14)</value>
+ <value>(177, 0)</value>
</param>
<param>
<key>_rotation</key>
@@ -204,7 +302,7 @@
<key>parameter</key>
<param>
<key>id</key>
- <value>address0</value>
+ <value>address1</value>
</param>
<param>
<key>_enabled</key>
@@ -212,7 +310,7 @@
</param>
<param>
<key>label</key>
- <value>IP Address, Dev 0</value>
+ <value>IP Address, Dev 1</value>
</param>
<param>
<key>value</key>
@@ -227,8 +325,12 @@
<value></value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(193, 14)</value>
+ <value>(337, 0)</value>
</param>
<param>
<key>_rotation</key>
@@ -236,10 +338,10 @@
</param>
</block>
<block>
- <key>uhd_usrp_sink</key>
+ <key>uhd_usrp_source</key>
<param>
<key>id</key>
- <value>uhd_usrp_sink_0</value>
+ <value>uhd_usrp_source_0</value>
</param>
<param>
<key>_enabled</key>
@@ -258,8 +360,16 @@
<value></value>
</param>
<param>
+ <key>stream_chans</key>
+ <value>[]</value>
+ </param>
+ <param>
<key>dev_addr</key>
- <value>address0</value>
+ <value>address1</value>
+ </param>
+ <param>
+ <key>dev_args</key>
+ <value>""</value>
</param>
<param>
<key>sync</key>
@@ -283,7 +393,7 @@
</param>
<param>
<key>sd_spec0</key>
- <value></value>
+ <value>B:0</value>
</param>
<param>
<key>clock_source1</key>
@@ -890,8 +1000,24 @@
<value>0</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(669, 178)</value>
+ <value>(813, 281)</value>
</param>
<param>
<key>_rotation</key>
@@ -899,34 +1025,50 @@
</param>
</block>
<block>
- <key>parameter</key>
+ <key>analog_noise_source_x</key>
<param>
<key>id</key>
- <value>rx_gain</value>
+ <value>analog_noise_source_x_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>label</key>
- <value>Default RX Gain</value>
+ <key>type</key>
+ <value>complex</value>
</param>
<param>
- <key>value</key>
- <value>0</value>
+ <key>noise_type</key>
+ <value>analog.GR_GAUSSIAN</value>
</param>
<param>
- <key>type</key>
- <value>eng_float</value>
+ <key>amp</key>
+ <value>noise_ampl</value>
</param>
<param>
- <key>short_id</key>
+ <key>seed</key>
+ <value>-42</value>
+ </param>
+ <param>
+ <key>alias</key>
<value></value>
</param>
<param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(1139, 12)</value>
+ <value>(551, 324)</value>
</param>
<param>
<key>_rotation</key>
@@ -934,54 +1076,58 @@
</param>
</block>
<block>
- <key>variable_slider</key>
+ <key>analog_sig_source_x</key>
<param>
<key>id</key>
- <value>tone1</value>
+ <value>analog_sig_source_x_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>label</key>
- <value>Tone 1</value>
+ <key>type</key>
+ <value>complex</value>
</param>
<param>
- <key>value</key>
- <value>50e3</value>
+ <key>samp_rate</key>
+ <value>samp_rate</value>
</param>
<param>
- <key>min</key>
- <value>-samp_rate/2</value>
+ <key>waveform</key>
+ <value>analog.GR_COS_WAVE</value>
</param>
<param>
- <key>max</key>
- <value>samp_rate/2</value>
+ <key>freq</key>
+ <value>tone1</value>
+ </param>
+ <param>
+ <key>amp</key>
+ <value>tone_ampl</value>
</param>
<param>
- <key>num_steps</key>
- <value>100</value>
+ <key>offset</key>
+ <value>0</value>
</param>
<param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>grid_pos</key>
- <value>0, 0, 1, 4</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>notebook</key>
- <value></value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(161, 484)</value>
+ <value>(541, 98)</value>
</param>
<param>
<key>_rotation</key>
@@ -989,54 +1135,58 @@
</param>
</block>
<block>
- <key>variable_slider</key>
+ <key>analog_sig_source_x</key>
<param>
<key>id</key>
- <value>tone2</value>
+ <value>analog_sig_source_x_1</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>label</key>
- <value>Tone 2</value>
+ <key>type</key>
+ <value>complex</value>
</param>
<param>
- <key>value</key>
- <value>75e3</value>
+ <key>samp_rate</key>
+ <value>samp_rate</value>
</param>
<param>
- <key>min</key>
- <value>-samp_rate/2</value>
+ <key>waveform</key>
+ <value>analog.GR_COS_WAVE</value>
</param>
<param>
- <key>max</key>
- <value>samp_rate/2</value>
+ <key>freq</key>
+ <value>tone2</value>
</param>
<param>
- <key>num_steps</key>
- <value>100</value>
+ <key>amp</key>
+ <value>tone_ampl</value>
</param>
<param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
+ <key>offset</key>
+ <value>0</value>
</param>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>grid_pos</key>
- <value>0, 4, 1, 4</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>notebook</key>
- <value></value>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(308, 483)</value>
+ <value>(542, 209)</value>
</param>
<param>
<key>_rotation</key>
@@ -1044,54 +1194,46 @@
</param>
</block>
<block>
- <key>variable_slider</key>
+ <key>blocks_add_xx</key>
<param>
<key>id</key>
- <value>tun_tx_gain</value>
+ <value>blocks_add_xx</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>label</key>
- <value>UHD TX Gain</value>
- </param>
- <param>
- <key>value</key>
- <value>tx_gain</value>
- </param>
- <param>
- <key>min</key>
- <value>0</value>
+ <key>type</key>
+ <value>complex</value>
</param>
<param>
- <key>max</key>
- <value>20</value>
+ <key>num_inputs</key>
+ <value>3</value>
</param>
<param>
- <key>num_steps</key>
- <value>100</value>
+ <key>vlen</key>
+ <value>1</value>
</param>
<param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>grid_pos</key>
- <value></value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>notebook</key>
- <value></value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(655, 486)</value>
+ <value>(806, 134)</value>
</param>
<param>
<key>_rotation</key>
@@ -1099,109 +1241,238 @@
</param>
</block>
<block>
- <key>variable_slider</key>
+ <key>qtgui_freq_sink_x</key>
<param>
<key>id</key>
- <value>tun_freq</value>
+ <value>qtgui_freq_sink_x_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>label</key>
- <value>Freq (Hz)</value>
+ <key>type</key>
+ <value>complex</value>
</param>
<param>
- <key>value</key>
- <value>freq</value>
+ <key>name</key>
+ <value>""</value>
</param>
<param>
- <key>min</key>
- <value>2.4e9</value>
+ <key>fftsize</key>
+ <value>1024</value>
</param>
<param>
- <key>max</key>
- <value>2.5e9</value>
+ <key>wintype</key>
+ <value>firdes.WIN_BLACKMAN_hARRIS</value>
+ </param>
+ <param>
+ <key>fc</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>bw</key>
+ <value>samp_rate</value>
+ </param>
+ <param>
+ <key>autoscale</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>average</key>
+ <value>1.0</value>
</param>
<param>
- <key>num_steps</key>
- <value>100</value>
+ <key>ymin</key>
+ <value>-140</value>
</param>
<param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
+ <key>ymax</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>nconnections</key>
+ <value>1</value>
</param>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>update_time</key>
+ <value>0.10</value>
</param>
<param>
- <key>grid_pos</key>
+ <key>gui_hint</key>
+ <value>2,0,1,4</value>
+ </param>
+ <param>
+ <key>label1</key>
<value></value>
</param>
<param>
- <key>notebook</key>
+ <key>width1</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color1</key>
+ <value>"blue"</value>
+ </param>
+ <param>
+ <key>alpha1</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label2</key>
<value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(514, 487)</value>
+ <key>width2</key>
+ <value>1</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>color2</key>
+ <value>"red"</value>
</param>
- </block>
- <block>
- <key>variable_slider</key>
<param>
- <key>id</key>
- <value>tun_rx_gain</value>
+ <key>alpha2</key>
+ <value>1.0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>label3</key>
+ <value></value>
</param>
<param>
- <key>label</key>
- <value>UHD RX Gain</value>
+ <key>width3</key>
+ <value>1</value>
</param>
<param>
- <key>value</key>
- <value>rx_gain</value>
+ <key>color3</key>
+ <value>"green"</value>
</param>
<param>
- <key>min</key>
- <value>0</value>
+ <key>alpha3</key>
+ <value>1.0</value>
</param>
<param>
- <key>max</key>
- <value>20</value>
+ <key>label4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width4</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color4</key>
+ <value>"black"</value>
+ </param>
+ <param>
+ <key>alpha4</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width5</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color5</key>
+ <value>"cyan"</value>
+ </param>
+ <param>
+ <key>alpha5</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label6</key>
+ <value></value>
</param>
<param>
- <key>num_steps</key>
- <value>100</value>
+ <key>width6</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color6</key>
+ <value>"magenta"</value>
+ </param>
+ <param>
+ <key>alpha6</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width7</key>
+ <value>1</value>
</param>
<param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
+ <key>color7</key>
+ <value>"yellow"</value>
</param>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>alpha7</key>
+ <value>1.0</value>
</param>
<param>
- <key>grid_pos</key>
+ <key>label8</key>
<value></value>
</param>
<param>
- <key>notebook</key>
+ <key>width8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color8</key>
+ <value>"dark red"</value>
+ </param>
+ <param>
+ <key>alpha8</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label9</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color9</key>
+ <value>"dark green"</value>
+ </param>
+ <param>
+ <key>alpha9</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label10</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color10</key>
+ <value>"dark blue"</value>
+ </param>
+ <param>
+ <key>alpha10</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
<value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(781, 487)</value>
+ <value>(1086, 281)</value>
</param>
<param>
<key>_rotation</key>
@@ -1209,10 +1480,10 @@
</param>
</block>
<block>
- <key>uhd_usrp_source</key>
+ <key>uhd_usrp_sink</key>
<param>
<key>id</key>
- <value>uhd_usrp_source_0</value>
+ <value>uhd_usrp_sink_0</value>
</param>
<param>
<key>_enabled</key>
@@ -1231,8 +1502,16 @@
<value></value>
</param>
<param>
+ <key>stream_chans</key>
+ <value>[]</value>
+ </param>
+ <param>
<key>dev_addr</key>
- <value>address1</value>
+ <value>address0</value>
+ </param>
+ <param>
+ <key>dev_args</key>
+ <value>""</value>
</param>
<param>
<key>sync</key>
@@ -1256,7 +1535,7 @@
</param>
<param>
<key>sd_spec0</key>
- <value></value>
+ <value>A:0</value>
</param>
<param>
<key>clock_source1</key>
@@ -1863,8 +2142,20 @@
<value>0</value>
</param>
<param>
+ <key>len_tag_name</key>
+ <value></value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(672, 320)</value>
+ <value>(949, 140)</value>
</param>
<param>
<key>_rotation</key>
@@ -1872,10 +2163,10 @@
</param>
</block>
<block>
- <key>variable_slider</key>
+ <key>variable_qtgui_range</key>
<param>
<key>id</key>
- <value>tone_ampl</value>
+ <value>tun_freq</value>
</param>
<param>
<key>_enabled</key>
@@ -1883,43 +2174,47 @@
</param>
<param>
<key>label</key>
- <value>Tone Ampl</value>
+ <value>UHD Freq (Hz)</value>
</param>
<param>
<key>value</key>
- <value>0.15</value>
+ <value>2.45e9</value>
</param>
<param>
- <key>min</key>
- <value>0</value>
+ <key>start</key>
+ <value>2.4e9</value>
+ </param>
+ <param>
+ <key>stop</key>
+ <value>2.5e9</value>
</param>
<param>
- <key>max</key>
+ <key>step</key>
<value>1</value>
</param>
<param>
- <key>num_steps</key>
- <value>100</value>
+ <key>widget</key>
+ <value>counter_slider</value>
</param>
<param>
- <key>style</key>
- <value>wx.SL_VERTICAL</value>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
</param>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>min_len</key>
+ <value>200</value>
</param>
<param>
- <key>grid_pos</key>
- <value>1, 0, 2, 1</value>
+ <key>gui_hint</key>
+ <value>3,0,1,4</value>
</param>
<param>
- <key>notebook</key>
+ <key>alias</key>
<value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(14, 485)</value>
+ <value>(80, 431)</value>
</param>
<param>
<key>_rotation</key>
@@ -1927,10 +2222,10 @@
</param>
</block>
<block>
- <key>variable_slider</key>
+ <key>variable_qtgui_range</key>
<param>
<key>id</key>
- <value>noise_ampl</value>
+ <value>tone1</value>
</param>
<param>
<key>_enabled</key>
@@ -1938,43 +2233,47 @@
</param>
<param>
<key>label</key>
- <value>Noise Ampl</value>
+ <value>Tone 1</value>
</param>
<param>
<key>value</key>
- <value>0.1</value>
+ <value>samp_rate/4</value>
</param>
<param>
- <key>min</key>
- <value>0</value>
+ <key>start</key>
+ <value>-samp_rate/2</value>
+ </param>
+ <param>
+ <key>stop</key>
+ <value>samp_rate/2</value>
</param>
<param>
- <key>max</key>
+ <key>step</key>
<value>1</value>
</param>
<param>
- <key>num_steps</key>
- <value>100</value>
+ <key>widget</key>
+ <value>counter_slider</value>
</param>
<param>
- <key>style</key>
- <value>wx.SL_VERTICAL</value>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
</param>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>min_len</key>
+ <value>200</value>
</param>
<param>
- <key>grid_pos</key>
- <value>1, 1, 2, 1</value>
+ <key>gui_hint</key>
+ <value>0,0,1,2</value>
</param>
<param>
- <key>notebook</key>
+ <key>alias</key>
<value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(15, 335)</value>
+ <value>(1, 131)</value>
</param>
<param>
<key>_rotation</key>
@@ -1982,125 +2281,117 @@
</param>
</block>
<block>
- <key>wxgui_fftsink2</key>
+ <key>variable_qtgui_range</key>
<param>
<key>id</key>
- <value>wxgui_fftsink2</value>
+ <value>noise_ampl</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
- </param>
- <param>
- <key>title</key>
- <value>FFT Plot</value>
+ <key>label</key>
+ <value>Noise Amplitude</value>
</param>
<param>
- <key>samp_rate</key>
- <value>samp_rate</value>
+ <key>value</key>
+ <value>0.1</value>
</param>
<param>
- <key>baseband_freq</key>
+ <key>start</key>
<value>0</value>
</param>
<param>
- <key>y_per_div</key>
- <value>10</value>
+ <key>stop</key>
+ <value>1</value>
</param>
<param>
- <key>y_divs</key>
- <value>10</value>
+ <key>step</key>
+ <value>.001</value>
</param>
<param>
- <key>ref_level</key>
- <value>0</value>
+ <key>widget</key>
+ <value>counter_slider</value>
</param>
<param>
- <key>ref_scale</key>
- <value>2.0</value>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
</param>
<param>
- <key>fft_size</key>
- <value>512*2</value>
+ <key>min_len</key>
+ <value>200</value>
</param>
<param>
- <key>fft_rate</key>
- <value>15</value>
+ <key>gui_hint</key>
+ <value>1,0,1,2</value>
</param>
<param>
- <key>peak_hold</key>
- <value>False</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>average</key>
- <value>False</value>
+ <key>_coordinate</key>
+ <value>(0, 283)</value>
</param>
<param>
- <key>avg_alpha</key>
+ <key>_rotation</key>
<value>0</value>
</param>
+ </block>
+ <block>
+ <key>variable_qtgui_range</key>
<param>
- <key>win</key>
- <value>window.blackmanharris</value>
- </param>
- <param>
- <key>win_size</key>
- <value></value>
+ <key>id</key>
+ <value>tun_tx_gain</value>
</param>
<param>
- <key>grid_pos</key>
- <value>1, 2, 2, 4</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>notebook</key>
- <value></value>
+ <key>label</key>
+ <value>UHD Tx Gain</value>
</param>
<param>
- <key>freqvar</key>
- <value>None</value>
+ <key>value</key>
+ <value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(1114, 264)</value>
+ <key>start</key>
+ <value>0</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>stop</key>
+ <value>20</value>
</param>
- </block>
- <block>
- <key>parameter</key>
<param>
- <key>id</key>
- <value>samp_rate</value>
+ <key>step</key>
+ <value>1</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>widget</key>
+ <value>counter_slider</value>
</param>
<param>
- <key>label</key>
- <value>Sample Rate</value>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
</param>
<param>
- <key>value</key>
- <value>500e3</value>
+ <key>min_len</key>
+ <value>200</value>
</param>
<param>
- <key>type</key>
- <value>eng_float</value>
+ <key>gui_hint</key>
+ <value>4,0,1,2</value>
</param>
<param>
- <key>short_id</key>
- <value>s</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(539, 11)</value>
+ <value>(-1, 573)</value>
</param>
<param>
<key>_rotation</key>
@@ -2108,42 +2399,58 @@
</param>
</block>
<block>
- <key>analog_sig_source_x</key>
+ <key>variable_qtgui_range</key>
<param>
<key>id</key>
- <value>analog_sig_source_x_0</value>
+ <value>tone2</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
+ <key>label</key>
+ <value>Tone 2</value>
</param>
<param>
- <key>samp_rate</key>
- <value>samp_rate</value>
+ <key>value</key>
+ <value>samp_rate/5</value>
</param>
<param>
- <key>waveform</key>
- <value>analog.GR_COS_WAVE</value>
+ <key>start</key>
+ <value>-samp_rate/2</value>
</param>
<param>
- <key>freq</key>
- <value>tone1</value>
+ <key>stop</key>
+ <value>samp_rate/2</value>
</param>
<param>
- <key>amp</key>
- <value>tone_ampl</value>
+ <key>step</key>
+ <value>1</value>
</param>
<param>
- <key>offset</key>
- <value>0</value>
+ <key>widget</key>
+ <value>counter_slider</value>
+ </param>
+ <param>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
+ </param>
+ <param>
+ <key>min_len</key>
+ <value>200</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value>0,2,1,2</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(264, 136)</value>
+ <value>(126, 132)</value>
</param>
<param>
<key>_rotation</key>
@@ -2151,42 +2458,58 @@
</param>
</block>
<block>
- <key>analog_sig_source_x</key>
+ <key>variable_qtgui_range</key>
<param>
<key>id</key>
- <value>analog_sig_source_x_1</value>
+ <value>tone_ampl</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
+ <key>label</key>
+ <value>Tone Amplitude</value>
</param>
<param>
- <key>samp_rate</key>
- <value>samp_rate</value>
+ <key>value</key>
+ <value>0.15</value>
</param>
<param>
- <key>waveform</key>
- <value>analog.GR_COS_WAVE</value>
+ <key>start</key>
+ <value>0</value>
</param>
<param>
- <key>freq</key>
- <value>tone2</value>
+ <key>stop</key>
+ <value>1</value>
</param>
<param>
- <key>amp</key>
- <value>tone_ampl</value>
+ <key>step</key>
+ <value>.001</value>
</param>
<param>
- <key>offset</key>
- <value>0</value>
+ <key>widget</key>
+ <value>counter_slider</value>
+ </param>
+ <param>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
+ </param>
+ <param>
+ <key>min_len</key>
+ <value>200</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value>1,2,1,2</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(265, 247)</value>
+ <value>(152, 286)</value>
</param>
<param>
<key>_rotation</key>
@@ -2194,65 +2517,58 @@
</param>
</block>
<block>
- <key>blocks_add_xx</key>
+ <key>variable_qtgui_range</key>
<param>
<key>id</key>
- <value>blocks_add_xx</value>
+ <value>tun_rx_gain</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
- </param>
- <param>
- <key>num_inputs</key>
- <value>3</value>
+ <key>label</key>
+ <value>UHD Rx Gain</value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>value</key>
+ <value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(529, 172)</value>
+ <key>start</key>
+ <value>0</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>stop</key>
+ <value>20</value>
</param>
- </block>
- <block>
- <key>analog_noise_source_x</key>
<param>
- <key>id</key>
- <value>analog_noise_source_x_0</value>
+ <key>step</key>
+ <value>1</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>widget</key>
+ <value>counter_slider</value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
</param>
<param>
- <key>noise_type</key>
- <value>analog.GR_GAUSSIAN</value>
+ <key>min_len</key>
+ <value>200</value>
</param>
<param>
- <key>amp</key>
- <value>noise_ampl</value>
+ <key>gui_hint</key>
+ <value>4,2,1,2</value>
</param>
<param>
- <key>seed</key>
- <value>-42</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(288, 359)</value>
+ <value>(120, 571)</value>
</param>
<param>
<key>_rotation</key>
@@ -2260,14 +2576,8 @@
</param>
</block>
<connection>
- <source_block_id>blocks_add_xx</source_block_id>
- <sink_block_id>uhd_usrp_sink_0</sink_block_id>
- <source_key>0</source_key>
- <sink_key>0</sink_key>
- </connection>
- <connection>
<source_block_id>uhd_usrp_source_0</source_block_id>
- <sink_block_id>wxgui_fftsink2</sink_block_id>
+ <sink_block_id>qtgui_freq_sink_x_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
@@ -2289,4 +2599,10 @@
<source_key>0</source_key>
<sink_key>2</sink_key>
</connection>
+ <connection>
+ <source_block_id>blocks_add_xx</source_block_id>
+ <sink_block_id>uhd_usrp_sink_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
</flow_graph>
diff --git a/gr-uhd/examples/grc/uhd_tx_dpsk.grc b/gr-uhd/examples/grc/uhd_tx_dpsk.grc
index 5d57617673..815d87b742 100644
--- a/gr-uhd/examples/grc/uhd_tx_dpsk.grc
+++ b/gr-uhd/examples/grc/uhd_tx_dpsk.grc
@@ -1,6 +1,6 @@
<?xml version='1.0' encoding='ASCII'?>
<flow_graph>
- <timestamp>Mon Mar 18 11:11:06 2013</timestamp>
+ <timestamp>Sat Jul 12 14:07:03 2014</timestamp>
<block>
<key>options</key>
<param>
@@ -29,7 +29,7 @@
</param>
<param>
<key>generate_options</key>
- <value>wx_gui</value>
+ <value>qt_gui</value>
</param>
<param>
<key>category</key>
@@ -52,8 +52,12 @@
<value></value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(10, 10)</value>
+ <value>(-1, 0)</value>
</param>
<param>
<key>_rotation</key>
@@ -75,8 +79,12 @@
<value>4</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(10, 100)</value>
+ <value>(-1, 84)</value>
</param>
<param>
<key>_rotation</key>
@@ -84,10 +92,10 @@
</param>
</block>
<block>
- <key>variable_slider</key>
+ <key>parameter</key>
<param>
<key>id</key>
- <value>ampl</value>
+ <value>gain</value>
</param>
<param>
<key>_enabled</key>
@@ -95,43 +103,66 @@
</param>
<param>
<key>label</key>
- <value>Amplitude</value>
+ <value>Default Gain</value>
</param>
<param>
<key>value</key>
- <value>.1</value>
+ <value>0</value>
</param>
<param>
- <key>min</key>
+ <key>type</key>
+ <value>eng_float</value>
+ </param>
+ <param>
+ <key>short_id</key>
+ <value>g</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(589, 0)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
<value>0</value>
</param>
+ </block>
+ <block>
+ <key>parameter</key>
<param>
- <key>max</key>
- <value>1</value>
+ <key>id</key>
+ <value>freq</value>
</param>
<param>
- <key>num_steps</key>
- <value>100</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
+ <key>label</key>
+ <value>Default Frequency</value>
</param>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>value</key>
+ <value>2.45e9</value>
</param>
<param>
- <key>grid_pos</key>
- <value></value>
+ <key>type</key>
+ <value>eng_float</value>
+ </param>
+ <param>
+ <key>short_id</key>
+ <value>f</value>
</param>
<param>
- <key>notebook</key>
+ <key>alias</key>
<value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(7, 299)</value>
+ <value>(433, 1)</value>
</param>
<param>
<key>_rotation</key>
@@ -165,8 +196,12 @@
<value>s</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(334, 15)</value>
+ <value>(304, 0)</value>
</param>
<param>
<key>_rotation</key>
@@ -177,7 +212,7 @@
<key>parameter</key>
<param>
<key>id</key>
- <value>freq</value>
+ <value>address</value>
</param>
<param>
<key>_enabled</key>
@@ -185,23 +220,27 @@
</param>
<param>
<key>label</key>
- <value>Default Frequency</value>
+ <value>IP Address</value>
</param>
<param>
<key>value</key>
- <value>2.45e9</value>
+ <value>addr=192.168.10.2</value>
</param>
<param>
<key>type</key>
- <value>eng_float</value>
+ <value>string</value>
</param>
<param>
<key>short_id</key>
- <value>f</value>
+ <value>a</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(463, 17)</value>
+ <value>(147, 0)</value>
</param>
<param>
<key>_rotation</key>
@@ -209,10 +248,10 @@
</param>
</block>
<block>
- <key>variable_slider</key>
+ <key>variable_qtgui_range</key>
<param>
<key>id</key>
- <value>tun_gain</value>
+ <value>ampl</value>
</param>
<param>
<key>_enabled</key>
@@ -220,43 +259,47 @@
</param>
<param>
<key>label</key>
- <value>UHD Gain</value>
+ <value>Amplitude</value>
</param>
<param>
<key>value</key>
- <value>gain</value>
+ <value>0.1</value>
</param>
<param>
- <key>min</key>
+ <key>start</key>
<value>0</value>
</param>
<param>
- <key>max</key>
- <value>20</value>
+ <key>stop</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>step</key>
+ <value>0.01</value>
</param>
<param>
- <key>num_steps</key>
- <value>100</value>
+ <key>widget</key>
+ <value>counter_slider</value>
</param>
<param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
</param>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>min_len</key>
+ <value>200</value>
</param>
<param>
- <key>grid_pos</key>
+ <key>gui_hint</key>
<value></value>
</param>
<param>
- <key>notebook</key>
+ <key>alias</key>
<value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(151, 441)</value>
+ <value>(-1, 307)</value>
</param>
<param>
<key>_rotation</key>
@@ -264,7 +307,7 @@
</param>
</block>
<block>
- <key>variable_slider</key>
+ <key>variable_qtgui_range</key>
<param>
<key>id</key>
<value>tun_freq</value>
@@ -275,43 +318,47 @@
</param>
<param>
<key>label</key>
- <value>Freq (Hz)</value>
+ <value>UHD Freq (Hz)</value>
</param>
<param>
<key>value</key>
- <value>freq</value>
+ <value>2.45e9</value>
</param>
<param>
- <key>min</key>
+ <key>start</key>
<value>2.4e9</value>
</param>
<param>
- <key>max</key>
+ <key>stop</key>
<value>2.5e9</value>
</param>
<param>
- <key>num_steps</key>
- <value>100</value>
+ <key>step</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>widget</key>
+ <value>counter_slider</value>
</param>
<param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
</param>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>min_len</key>
+ <value>200</value>
</param>
<param>
- <key>grid_pos</key>
+ <key>gui_hint</key>
<value></value>
</param>
<param>
- <key>notebook</key>
+ <key>alias</key>
<value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(7, 441)</value>
+ <value>(0, 436)</value>
</param>
<param>
<key>_rotation</key>
@@ -319,38 +366,58 @@
</param>
</block>
<block>
- <key>analog_random_source_x</key>
+ <key>variable_qtgui_range</key>
<param>
<key>id</key>
- <value>analog_random_source_x_0</value>
+ <value>tun_gain</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>byte</value>
+ <key>label</key>
+ <value>UHD Tx Gain</value>
</param>
<param>
- <key>min</key>
+ <key>value</key>
<value>0</value>
</param>
<param>
- <key>max</key>
- <value>2**8</value>
+ <key>start</key>
+ <value>0</value>
</param>
<param>
- <key>num_samps</key>
- <value>1000</value>
+ <key>stop</key>
+ <value>20</value>
</param>
<param>
- <key>repeat</key>
- <value>True</value>
+ <key>step</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>widget</key>
+ <value>counter_slider</value>
+ </param>
+ <param>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
+ </param>
+ <param>
+ <key>min_len</key>
+ <value>200</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value></value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(177, 162)</value>
+ <value>(137, 435)</value>
</param>
<param>
<key>_rotation</key>
@@ -358,10 +425,10 @@
</param>
</block>
<block>
- <key>digital_dxpsk_mod</key>
+ <key>analog_random_source_x</key>
<param>
<key>id</key>
- <value>digital_dxpsk_mod_0</value>
+ <value>analog_random_source_x_0</value>
</param>
<param>
<key>_enabled</key>
@@ -369,31 +436,43 @@
</param>
<param>
<key>type</key>
- <value>dqpsk</value>
+ <value>byte</value>
</param>
<param>
- <key>samples_per_symbol</key>
- <value>samps_per_sym</value>
+ <key>min</key>
+ <value>0</value>
</param>
<param>
- <key>excess_bw</key>
- <value>0.35</value>
+ <key>max</key>
+ <value>2**8</value>
</param>
<param>
- <key>mod_code</key>
- <value>"gray"</value>
+ <key>num_samps</key>
+ <value>1000</value>
</param>
<param>
- <key>verbose</key>
- <value>False</value>
+ <key>repeat</key>
+ <value>True</value>
</param>
<param>
- <key>log</key>
- <value>False</value>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(366, 162)</value>
+ <value>(-1, 171)</value>
</param>
<param>
<key>_rotation</key>
@@ -401,69 +480,58 @@
</param>
</block>
<block>
- <key>parameter</key>
+ <key>digital_dxpsk_mod</key>
<param>
<key>id</key>
- <value>gain</value>
+ <value>digital_dxpsk_mod_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>label</key>
- <value>Default Gain</value>
- </param>
- <param>
- <key>value</key>
- <value>0</value>
- </param>
- <param>
<key>type</key>
- <value>eng_float</value>
+ <value>dqpsk</value>
</param>
<param>
- <key>short_id</key>
- <value>g</value>
+ <key>samples_per_symbol</key>
+ <value>samps_per_sym</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(619, 15)</value>
+ <key>excess_bw</key>
+ <value>0.35</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>mod_code</key>
+ <value>"gray"</value>
</param>
- </block>
- <block>
- <key>parameter</key>
<param>
- <key>id</key>
- <value>address</value>
+ <key>verbose</key>
+ <value>False</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>log</key>
+ <value>False</value>
</param>
<param>
- <key>label</key>
- <value>IP Address</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>value</key>
- <value>addr=192.168.10.2</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>type</key>
- <value>string</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>short_id</key>
- <value>a</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(177, 14)</value>
+ <value>(190, 171)</value>
</param>
<param>
<key>_rotation</key>
@@ -493,10 +561,18 @@
<value></value>
</param>
<param>
+ <key>stream_chans</key>
+ <value>[]</value>
+ </param>
+ <param>
<key>dev_addr</key>
<value>address</value>
</param>
<param>
+ <key>dev_args</key>
+ <value>""</value>
+ </param>
+ <param>
<key>sync</key>
<value></value>
</param>
@@ -1125,8 +1201,20 @@
<value>0</value>
</param>
<param>
+ <key>len_tag_name</key>
+ <value></value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(783, 162)</value>
+ <value>(617, 163)</value>
</param>
<param>
<key>_rotation</key>
@@ -1156,8 +1244,24 @@
<value>1</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(566, 186)</value>
+ <value>(388, 193)</value>
</param>
<param>
<key>_rotation</key>
@@ -1165,10 +1269,10 @@
</param>
</block>
<block>
- <key>wxgui_fftsink2</key>
+ <key>qtgui_freq_sink_x</key>
<param>
<key>id</key>
- <value>wxgui_fftsink2_0</value>
+ <value>qtgui_freq_sink_x_0</value>
</param>
<param>
<key>_enabled</key>
@@ -1179,76 +1283,224 @@
<value>complex</value>
</param>
<param>
- <key>title</key>
+ <key>name</key>
<value>Transmit Spectrum</value>
</param>
<param>
- <key>samp_rate</key>
- <value>samp_rate</value>
+ <key>fftsize</key>
+ <value>1024</value>
</param>
<param>
- <key>baseband_freq</key>
+ <key>wintype</key>
+ <value>firdes.WIN_BLACKMAN_hARRIS</value>
+ </param>
+ <param>
+ <key>fc</key>
<value>tun_freq</value>
</param>
<param>
- <key>y_per_div</key>
- <value>10</value>
+ <key>bw</key>
+ <value>samp_rate</value>
+ </param>
+ <param>
+ <key>autoscale</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>average</key>
+ <value>1.0</value>
</param>
<param>
- <key>y_divs</key>
+ <key>ymin</key>
+ <value>-140</value>
+ </param>
+ <param>
+ <key>ymax</key>
<value>10</value>
</param>
<param>
- <key>ref_level</key>
- <value>0</value>
+ <key>nconnections</key>
+ <value>1</value>
</param>
<param>
- <key>ref_scale</key>
- <value>2</value>
+ <key>update_time</key>
+ <value>0.10</value>
</param>
<param>
- <key>fft_size</key>
- <value>1024</value>
+ <key>gui_hint</key>
+ <value></value>
</param>
<param>
- <key>fft_rate</key>
- <value>20</value>
+ <key>label1</key>
+ <value></value>
</param>
<param>
- <key>peak_hold</key>
- <value>False</value>
+ <key>width1</key>
+ <value>1</value>
</param>
<param>
- <key>average</key>
- <value>False</value>
+ <key>color1</key>
+ <value>"blue"</value>
</param>
<param>
- <key>avg_alpha</key>
- <value>0</value>
+ <key>alpha1</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width2</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color2</key>
+ <value>"red"</value>
</param>
<param>
- <key>win</key>
- <value>None</value>
+ <key>alpha2</key>
+ <value>1.0</value>
</param>
<param>
- <key>win_size</key>
+ <key>label3</key>
<value></value>
</param>
<param>
- <key>grid_pos</key>
+ <key>width3</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color3</key>
+ <value>"green"</value>
+ </param>
+ <param>
+ <key>alpha3</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width4</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color4</key>
+ <value>"black"</value>
+ </param>
+ <param>
+ <key>alpha4</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width5</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color5</key>
+ <value>"cyan"</value>
+ </param>
+ <param>
+ <key>alpha5</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label6</key>
<value></value>
</param>
<param>
- <key>notebook</key>
+ <key>width6</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color6</key>
+ <value>"magenta"</value>
+ </param>
+ <param>
+ <key>alpha6</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label7</key>
<value></value>
</param>
<param>
- <key>freqvar</key>
- <value>None</value>
+ <key>width7</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color7</key>
+ <value>"yellow"</value>
+ </param>
+ <param>
+ <key>alpha7</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label8</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color8</key>
+ <value>"dark red"</value>
+ </param>
+ <param>
+ <key>alpha8</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label9</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color9</key>
+ <value>"dark green"</value>
+ </param>
+ <param>
+ <key>alpha9</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label10</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color10</key>
+ <value>"dark blue"</value>
+ </param>
+ <param>
+ <key>alpha10</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(827, 299)</value>
+ <value>(619, 285)</value>
</param>
<param>
<key>_rotation</key>
@@ -1263,19 +1515,19 @@
</connection>
<connection>
<source_block_id>blocks_multiply_const_vxx_0</source_block_id>
- <sink_block_id>wxgui_fftsink2_0</sink_block_id>
+ <sink_block_id>uhd_usrp_sink_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
- <sink_block_id>uhd_usrp_sink_0</sink_block_id>
+ <source_block_id>digital_dxpsk_mod_0</source_block_id>
+ <sink_block_id>blocks_multiply_const_vxx_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>blocks_multiply_const_vxx_0</sink_block_id>
+ <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
+ <sink_block_id>qtgui_freq_sink_x_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
diff --git a/gr-uhd/examples/grc/uhd_wbfm_receive.grc b/gr-uhd/examples/grc/uhd_wbfm_receive.grc
index e19015a790..153dbd94f3 100644
--- a/gr-uhd/examples/grc/uhd_wbfm_receive.grc
+++ b/gr-uhd/examples/grc/uhd_wbfm_receive.grc
@@ -1,6 +1,6 @@
<?xml version='1.0' encoding='ASCII'?>
<flow_graph>
- <timestamp>Mon Mar 18 11:13:02 2013</timestamp>
+ <timestamp>Sat Jul 12 14:40:24 2014</timestamp>
<block>
<key>options</key>
<param>
@@ -29,7 +29,7 @@
</param>
<param>
<key>generate_options</key>
- <value>wx_gui</value>
+ <value>qt_gui</value>
</param>
<param>
<key>category</key>
@@ -52,8 +52,39 @@
<value></value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(-2, 0)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable</key>
+ <param>
+ <key>id</key>
+ <value>audio_decim</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(10, 10)</value>
+ <value>(607, 192)</value>
</param>
<param>
<key>_rotation</key>
@@ -64,7 +95,7 @@
<key>parameter</key>
<param>
<key>id</key>
- <value>gain</value>
+ <value>address</value>
</param>
<param>
<key>_enabled</key>
@@ -72,23 +103,66 @@
</param>
<param>
<key>label</key>
- <value>Default Gain</value>
+ <value>IP Address</value>
</param>
<param>
<key>value</key>
+ <value>addr=192.168.10.2</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>string</value>
+ </param>
+ <param>
+ <key>short_id</key>
+ <value>a</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(162, 0)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
<value>0</value>
</param>
+ </block>
+ <block>
+ <key>parameter</key>
+ <param>
+ <key>id</key>
+ <value>samp_rate</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>label</key>
+ <value>Sample Rate</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>400e3</value>
+ </param>
<param>
<key>type</key>
<value>eng_float</value>
</param>
<param>
<key>short_id</key>
- <value>g</value>
+ <value>s</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(631, 15)</value>
+ <value>(315, 0)</value>
</param>
<param>
<key>_rotation</key>
@@ -99,7 +173,7 @@
<key>parameter</key>
<param>
<key>id</key>
- <value>freq</value>
+ <value>gain</value>
</param>
<param>
<key>_enabled</key>
@@ -107,11 +181,11 @@
</param>
<param>
<key>label</key>
- <value>Default Frequency</value>
+ <value>Default Gain</value>
</param>
<param>
<key>value</key>
- <value>93.3e6</value>
+ <value>0</value>
</param>
<param>
<key>type</key>
@@ -119,11 +193,15 @@
</param>
<param>
<key>short_id</key>
- <value>f</value>
+ <value>g</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(479, 15)</value>
+ <value>(594, 0)</value>
</param>
<param>
<key>_rotation</key>
@@ -131,10 +209,10 @@
</param>
</block>
<block>
- <key>variable_slider</key>
+ <key>parameter</key>
<param>
<key>id</key>
- <value>tun_freq</value>
+ <value>audio_output</value>
</param>
<param>
<key>_enabled</key>
@@ -142,43 +220,70 @@
</param>
<param>
<key>label</key>
- <value>Freq (Hz)</value>
+ <value>Audio Output Device</value>
</param>
<param>
<key>value</key>
- <value>freq</value>
+ <value></value>
</param>
<param>
- <key>min</key>
- <value>87.9e6</value>
+ <key>type</key>
+ <value>string</value>
</param>
<param>
- <key>max</key>
- <value>108.1e6</value>
+ <key>short_id</key>
+ <value>O</value>
</param>
<param>
- <key>num_steps</key>
- <value>100</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
+ <key>_coordinate</key>
+ <value>(732, 0)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>analog_wfm_rcv</key>
+ <param>
+ <key>id</key>
+ <value>analog_wfm_rcv</value>
</param>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>grid_pos</key>
+ <key>quad_rate</key>
+ <value>samp_rate</value>
+ </param>
+ <param>
+ <key>audio_decimation</key>
+ <value>audio_decim</value>
+ </param>
+ <param>
+ <key>alias</key>
<value></value>
</param>
<param>
- <key>notebook</key>
+ <key>affinity</key>
<value></value>
</param>
<param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(15, 441)</value>
+ <value>(597, 127)</value>
</param>
<param>
<key>_rotation</key>
@@ -186,54 +291,89 @@
</param>
</block>
<block>
- <key>variable_slider</key>
+ <key>audio_sink</key>
<param>
<key>id</key>
- <value>fine</value>
+ <value>audio_sink</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>label</key>
- <value>Fine Freq (MHz)</value>
+ <key>samp_rate</key>
+ <value>int(samp_rate/audio_decim)</value>
</param>
<param>
- <key>value</key>
+ <key>device_name</key>
+ <value>audio_output</value>
+ </param>
+ <param>
+ <key>ok_to_block</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>num_inputs</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(995, 135)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
<value>0</value>
</param>
+ </block>
+ <block>
+ <key>blocks_multiply_const_vxx</key>
<param>
- <key>min</key>
- <value>-.1</value>
+ <key>id</key>
+ <value>blocks_multiply_const_vxx</value>
</param>
<param>
- <key>max</key>
- <value>.1</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>num_steps</key>
- <value>100</value>
+ <key>type</key>
+ <value>float</value>
</param>
<param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
+ <key>const</key>
+ <value>volume</value>
</param>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>vlen</key>
+ <value>1</value>
</param>
<param>
- <key>grid_pos</key>
- <value>0, 2, 1, 2</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>notebook</key>
+ <key>affinity</key>
<value></value>
</param>
<param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(277, 444)</value>
+ <value>(808, 135)</value>
</param>
<param>
<key>_rotation</key>
@@ -241,54 +381,70 @@
</param>
</block>
<block>
- <key>variable_slider</key>
+ <key>low_pass_filter</key>
<param>
<key>id</key>
- <value>tun_gain</value>
+ <value>low_pass_filter_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>label</key>
- <value>UHD Gain</value>
+ <key>type</key>
+ <value>fir_filter_ccf</value>
</param>
<param>
- <key>value</key>
- <value>gain</value>
+ <key>decim</key>
+ <value>1</value>
</param>
<param>
- <key>min</key>
- <value>0</value>
+ <key>interp</key>
+ <value>1</value>
</param>
<param>
- <key>max</key>
- <value>20</value>
+ <key>gain</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>samp_rate</key>
+ <value>samp_rate</value>
+ </param>
+ <param>
+ <key>cutoff_freq</key>
+ <value>115e3</value>
</param>
<param>
- <key>num_steps</key>
- <value>100</value>
+ <key>width</key>
+ <value>30e3</value>
</param>
<param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
+ <key>win</key>
+ <value>firdes.WIN_HANN</value>
</param>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>beta</key>
+ <value>6.76</value>
</param>
<param>
- <key>grid_pos</key>
+ <key>alias</key>
<value></value>
</param>
<param>
- <key>notebook</key>
+ <key>affinity</key>
<value></value>
</param>
<param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(158, 440)</value>
+ <value>(261, 116)</value>
</param>
<param>
<key>_rotation</key>
@@ -296,7 +452,7 @@
</param>
</block>
<block>
- <key>variable_slider</key>
+ <key>variable_qtgui_range</key>
<param>
<key>id</key>
<value>volume</value>
@@ -314,36 +470,40 @@
<value>1</value>
</param>
<param>
- <key>min</key>
+ <key>start</key>
<value>0</value>
</param>
<param>
- <key>max</key>
+ <key>stop</key>
<value>10</value>
</param>
<param>
- <key>num_steps</key>
- <value>100</value>
+ <key>step</key>
+ <value>0.1</value>
+ </param>
+ <param>
+ <key>widget</key>
+ <value>counter_slider</value>
</param>
<param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
</param>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>min_len</key>
+ <value>200</value>
</param>
<param>
- <key>grid_pos</key>
+ <key>gui_hint</key>
<value>1, 0, 1, 4</value>
</param>
<param>
- <key>notebook</key>
+ <key>alias</key>
<value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(436, 446)</value>
+ <value>(802, 188)</value>
</param>
<param>
<key>_rotation</key>
@@ -351,30 +511,117 @@
</param>
</block>
<block>
- <key>blocks_multiply_const_vxx</key>
+ <key>variable_qtgui_range</key>
<param>
<key>id</key>
- <value>blocks_multiply_const_vxx</value>
+ <value>fine</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>float</value>
+ <key>label</key>
+ <value>Fine Freq (MHz)</value>
</param>
<param>
- <key>const</key>
- <value>volume</value>
+ <key>value</key>
+ <value>0</value>
</param>
<param>
- <key>vlen</key>
+ <key>start</key>
+ <value>-.1</value>
+ </param>
+ <param>
+ <key>stop</key>
+ <value>.1</value>
+ </param>
+ <param>
+ <key>step</key>
+ <value>.01</value>
+ </param>
+ <param>
+ <key>widget</key>
+ <value>counter_slider</value>
+ </param>
+ <param>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
+ </param>
+ <param>
+ <key>min_len</key>
+ <value>200</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value>0,2,1,2</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(253, 277)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable_qtgui_range</key>
+ <param>
+ <key>id</key>
+ <value>tun_gain</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>label</key>
+ <value>UHD Gain</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>start</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>stop</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>step</key>
<value>1</value>
</param>
<param>
+ <key>widget</key>
+ <value>counter_slider</value>
+ </param>
+ <param>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
+ </param>
+ <param>
+ <key>min_len</key>
+ <value>200</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value></value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(836, 161)</value>
+ <value>(141, 275)</value>
</param>
<param>
<key>_rotation</key>
@@ -404,10 +651,18 @@
<value></value>
</param>
<param>
+ <key>stream_chans</key>
+ <value>[]</value>
+ </param>
+ <param>
<key>dev_addr</key>
<value>address</value>
</param>
<param>
+ <key>dev_args</key>
+ <value>""</value>
+ </param>
+ <param>
<key>sync</key>
<value></value>
</param>
@@ -525,7 +780,7 @@
</param>
<param>
<key>center_freq0</key>
- <value>tun_freq+fine</value>
+ <value>(tun_freq+fine)*1e6</value>
</param>
<param>
<key>gain0</key>
@@ -1036,43 +1291,24 @@
<value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(14, 165)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>parameter</key>
- <param>
- <key>id</key>
- <value>samp_rate</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>label</key>
- <value>Sample Rate</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>value</key>
- <value>400e3</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>type</key>
- <value>eng_float</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>short_id</key>
- <value>s</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(352, 15)</value>
+ <value>(0, 139)</value>
</param>
<param>
<key>_rotation</key>
@@ -1080,238 +1316,238 @@
</param>
</block>
<block>
- <key>parameter</key>
+ <key>qtgui_freq_sink_x</key>
<param>
<key>id</key>
- <value>audio_output</value>
+ <value>qtgui_freq_sink_x_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>label</key>
- <value>Audio Output Device</value>
+ <key>type</key>
+ <value>complex</value>
</param>
<param>
- <key>value</key>
- <value></value>
+ <key>name</key>
+ <value>FFT Plot</value>
</param>
<param>
- <key>type</key>
- <value>string</value>
+ <key>fftsize</key>
+ <value>512</value>
</param>
<param>
- <key>short_id</key>
- <value>O</value>
+ <key>wintype</key>
+ <value>firdes.WIN_BLACKMAN_hARRIS</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(769, 13)</value>
+ <key>fc</key>
+ <value>(tun_freq+fine)*1e6</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>bw</key>
+ <value>samp_rate</value>
</param>
- </block>
- <block>
- <key>audio_sink</key>
<param>
- <key>id</key>
- <value>audio_sink</value>
+ <key>autoscale</key>
+ <value>False</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>average</key>
+ <value>1.0</value>
</param>
<param>
- <key>samp_rate</key>
- <value>int(samp_rate/audio_decim)</value>
+ <key>ymin</key>
+ <value>-140</value>
</param>
<param>
- <key>device_name</key>
- <value>audio_output</value>
+ <key>ymax</key>
+ <value>10</value>
</param>
<param>
- <key>ok_to_block</key>
- <value>True</value>
+ <key>nconnections</key>
+ <value>1</value>
</param>
<param>
- <key>num_inputs</key>
- <value>1</value>
+ <key>update_time</key>
+ <value>0.10</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(1023, 161)</value>
+ <key>gui_hint</key>
+ <value>2,0,2,4</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>label1</key>
+ <value></value>
</param>
- </block>
- <block>
- <key>low_pass_filter</key>
<param>
- <key>id</key>
- <value>low_pass_filter_0</value>
+ <key>width1</key>
+ <value>1</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>color1</key>
+ <value>"blue"</value>
</param>
<param>
- <key>type</key>
- <value>fir_filter_ccf</value>
+ <key>alpha1</key>
+ <value>1.0</value>
</param>
<param>
- <key>decim</key>
- <value>1</value>
+ <key>label2</key>
+ <value></value>
</param>
<param>
- <key>interp</key>
+ <key>width2</key>
<value>1</value>
</param>
<param>
- <key>gain</key>
- <value>1</value>
+ <key>color2</key>
+ <value>"red"</value>
</param>
<param>
- <key>samp_rate</key>
- <value>samp_rate</value>
+ <key>alpha2</key>
+ <value>1.0</value>
</param>
<param>
- <key>cutoff_freq</key>
- <value>115e3</value>
+ <key>label3</key>
+ <value></value>
</param>
<param>
- <key>width</key>
- <value>30e3</value>
+ <key>width3</key>
+ <value>1</value>
</param>
<param>
- <key>win</key>
- <value>firdes.WIN_HANN</value>
+ <key>color3</key>
+ <value>"green"</value>
</param>
<param>
- <key>beta</key>
- <value>6.76</value>
+ <key>alpha3</key>
+ <value>1.0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(326, 141)</value>
+ <key>label4</key>
+ <value></value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>width4</key>
+ <value>1</value>
</param>
- </block>
- <block>
- <key>variable</key>
<param>
- <key>id</key>
- <value>audio_decim</value>
+ <key>color4</key>
+ <value>"black"</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>alpha4</key>
+ <value>1.0</value>
</param>
<param>
- <key>value</key>
- <value>10</value>
+ <key>label5</key>
+ <value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(19, 351)</value>
+ <key>width5</key>
+ <value>1</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>color5</key>
+ <value>"cyan"</value>
</param>
- </block>
- <block>
- <key>wxgui_fftsink2</key>
<param>
- <key>id</key>
- <value>wxgui_fftsink2</value>
+ <key>alpha5</key>
+ <value>1.0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>label6</key>
+ <value></value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
+ <key>width6</key>
+ <value>1</value>
</param>
<param>
- <key>title</key>
- <value>FFT Plot</value>
+ <key>color6</key>
+ <value>"magenta"</value>
</param>
<param>
- <key>samp_rate</key>
- <value>samp_rate</value>
+ <key>alpha6</key>
+ <value>1.0</value>
</param>
<param>
- <key>baseband_freq</key>
- <value>(freq+fine)</value>
+ <key>label7</key>
+ <value></value>
</param>
<param>
- <key>y_per_div</key>
- <value>10</value>
+ <key>width7</key>
+ <value>1</value>
</param>
<param>
- <key>y_divs</key>
- <value>10</value>
+ <key>color7</key>
+ <value>"yellow"</value>
</param>
<param>
- <key>ref_level</key>
- <value>0</value>
+ <key>alpha7</key>
+ <value>1.0</value>
</param>
<param>
- <key>ref_scale</key>
- <value>2.0</value>
+ <key>label8</key>
+ <value></value>
</param>
<param>
- <key>fft_size</key>
- <value>512</value>
+ <key>width8</key>
+ <value>1</value>
</param>
<param>
- <key>fft_rate</key>
- <value>15</value>
+ <key>color8</key>
+ <value>"dark red"</value>
</param>
<param>
- <key>peak_hold</key>
- <value>False</value>
+ <key>alpha8</key>
+ <value>1.0</value>
</param>
<param>
- <key>average</key>
- <value>False</value>
+ <key>label9</key>
+ <value></value>
</param>
<param>
- <key>avg_alpha</key>
- <value>0</value>
+ <key>width9</key>
+ <value>1</value>
</param>
<param>
- <key>win</key>
- <value>None</value>
+ <key>color9</key>
+ <value>"dark green"</value>
+ </param>
+ <param>
+ <key>alpha9</key>
+ <value>1.0</value>
</param>
<param>
- <key>win_size</key>
+ <key>label10</key>
<value></value>
</param>
<param>
- <key>grid_pos</key>
- <value>2, 0, 2, 4</value>
+ <key>width10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color10</key>
+ <value>"dark blue"</value>
</param>
<param>
- <key>notebook</key>
+ <key>alpha10</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>alias</key>
<value></value>
</param>
<param>
- <key>freqvar</key>
- <value>None</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(624, 278)</value>
+ <value>(598, 272)</value>
</param>
<param>
<key>_rotation</key>
@@ -1319,26 +1555,38 @@
</param>
</block>
<block>
- <key>analog_wfm_rcv</key>
+ <key>parameter</key>
<param>
<key>id</key>
- <value>analog_wfm_rcv</value>
+ <value>freq</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>quad_rate</key>
- <value>samp_rate</value>
+ <key>label</key>
+ <value>Default Frequency</value>
</param>
<param>
- <key>audio_decimation</key>
- <value>audio_decim</value>
+ <key>value</key>
+ <value>93.3e6</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>eng_float</value>
+ </param>
+ <param>
+ <key>short_id</key>
+ <value>f</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(625, 153)</value>
+ <value>(442, 0)</value>
</param>
<param>
<key>_rotation</key>
@@ -1346,10 +1594,10 @@
</param>
</block>
<block>
- <key>parameter</key>
+ <key>variable_qtgui_range</key>
<param>
<key>id</key>
- <value>address</value>
+ <value>tun_freq</value>
</param>
<param>
<key>_enabled</key>
@@ -1357,23 +1605,47 @@
</param>
<param>
<key>label</key>
- <value>IP Address</value>
+ <value>UHD Freq (MHz)</value>
</param>
<param>
<key>value</key>
- <value>addr=192.168.10.2</value>
+ <value>freq/1e6</value>
</param>
<param>
- <key>type</key>
- <value>string</value>
+ <key>start</key>
+ <value>87.9</value>
</param>
<param>
- <key>short_id</key>
- <value>a</value>
+ <key>stop</key>
+ <value>108.1</value>
+ </param>
+ <param>
+ <key>step</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>widget</key>
+ <value>counter_slider</value>
+ </param>
+ <param>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
+ </param>
+ <param>
+ <key>min_len</key>
+ <value>200</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value>0,0,1,2</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(199, 14)</value>
+ <value>(6, 276)</value>
</param>
<param>
<key>_rotation</key>
@@ -1381,14 +1653,14 @@
</param>
</block>
<connection>
- <source_block_id>blocks_multiply_const_vxx</source_block_id>
- <sink_block_id>audio_sink</sink_block_id>
+ <source_block_id>low_pass_filter_0</source_block_id>
+ <sink_block_id>qtgui_freq_sink_x_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>analog_wfm_rcv</source_block_id>
- <sink_block_id>blocks_multiply_const_vxx</sink_block_id>
+ <source_block_id>uhd_usrp_source_0</source_block_id>
+ <sink_block_id>low_pass_filter_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
@@ -1399,14 +1671,14 @@
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>uhd_usrp_source_0</source_block_id>
- <sink_block_id>low_pass_filter_0</sink_block_id>
+ <source_block_id>analog_wfm_rcv</source_block_id>
+ <sink_block_id>blocks_multiply_const_vxx</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>low_pass_filter_0</source_block_id>
- <sink_block_id>wxgui_fftsink2</sink_block_id>
+ <source_block_id>blocks_multiply_const_vxx</source_block_id>
+ <sink_block_id>audio_sink</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
diff --git a/gr-uhd/examples/python/freq_hopping.py b/gr-uhd/examples/python/freq_hopping.py
index 903b0b23d4..5da5efa241 100755
--- a/gr-uhd/examples/python/freq_hopping.py
+++ b/gr-uhd/examples/python/freq_hopping.py
@@ -105,7 +105,9 @@ class FrequencyHopperSrc(gr.hier_block2):
gain_tag.key = pmt.string_to_symbol('tx_command')
gain_tag.value = pmt.cons(
pmt.intern("gain"),
- pmt.to_pmt((0, tx_gain))
+ # These are both valid:
+ #pmt.from_double(tx_gain)
+ pmt.cons(pmt.to_pmt(0), pmt.to_pmt(tx_gain))
)
tag_list = [gain_tag,]
for i in xrange(n_bursts):
@@ -114,7 +116,7 @@ class FrequencyHopperSrc(gr.hier_block2):
if i > 0 and post_tuning:
tune_tag.offset -= 1 # Move it to last sample of previous burst
tune_tag.key = pmt.string_to_symbol('tx_freq')
- tune_tag.value = pmt.to_pmt((0, self.hop_sequence[i]))
+ tune_tag.value = pmt.to_pmt(self.hop_sequence[i])
tag_list.append(tune_tag)
length_tag = gr.tag_t()
length_tag.offset = i * burst_length
diff --git a/gr-uhd/grc/gen_uhd_usrp_blocks.py b/gr-uhd/grc/gen_uhd_usrp_blocks.py
index 6490723589..c31ee1325e 100644
--- a/gr-uhd/grc/gen_uhd_usrp_blocks.py
+++ b/gr-uhd/grc/gen_uhd_usrp_blocks.py
@@ -312,6 +312,11 @@ self.\$(id).set_bandwidth(\$bw$(n), $n)
<check>\$num_mboards > 0</check>
<check>\$nchan >= \$num_mboards</check>
<check>(not \$stream_chans()) or (\$nchan == len(\$stream_chans))</check>
+ <sink>
+ <name>command</name>
+ <type>message</type>
+ <optional>1</optional>
+ </sink>
<$sourk>
<name>$direction</name>
<type>\$type.type</type>
diff --git a/gr-uhd/include/gnuradio/uhd/usrp_sink.h b/gr-uhd/include/gnuradio/uhd/usrp_sink.h
index d3e732cc30..ce8b18ba44 100644
--- a/gr-uhd/include/gnuradio/uhd/usrp_sink.h
+++ b/gr-uhd/include/gnuradio/uhd/usrp_sink.h
@@ -62,18 +62,17 @@ namespace gr {
/*!
* \brief DEPRECATED Make a new USRP sink block using the deprecated io_type_t.
+ * \ingroup uhd_blk
*
* This function will be removed in the future. Please use the other make function,
- * gr::uhd::make(const ::uhd::device_addr_t, const ::uhd::stream_args_t, const std::string).
- *
- * \ingroup uhd_blk
+ * gr::uhd::usrp_sink::make(const ::uhd::device_addr_t, const ::uhd::stream_args_t, const std::string).
*/
static sptr make(const ::uhd::device_addr_t &device_addr,
const ::uhd::io_type_t &io_type,
size_t num_channels);
/*!
- * \brief Make a new USRP sink block.
+ * \brief Make a new USRP sink block (usually a radio transmitter).
*
* The USRP sink block reads a stream and transmits the samples.
* The sink block also provides API calls for transmitter settings.
@@ -86,60 +85,55 @@ namespace gr {
* - pmt::string_to_symbol("tx_time")
* - pmt::string_to_symbol("tx_freq")
* - pmt::string_to_symbol("tx_command")
- * - pmt::string_to_symbol(length_tag_name)
+ * - pmt::string_to_symbol(tsb_tag_name)
*
* Any other tag will be ignored.
*
* The sob and eob (start and end of burst) tag values are pmt booleans.
* When present, burst tags should be set to true (pmt::PMT_T).
*
- * If length_tag_name is not an empty string, all "tx_sob" and "tx_eob"
+ * If `tsb_tag_name` is not an empty string, all "tx_sob" and "tx_eob"
* tags will be ignored, and the input is assumed to a tagged stream,
* as described in \ref page_tagged_stream_blocks.
- * The length tag value should be a PMT long specifying the number
- * of samples contained in the corresponding tagged stream.
*
* If sob/eob tags or length tags are used, this block understands that
* the data is bursty, and will configure the USRP to make sure there's
- * no underruns etc.
+ * no underruns after transmitting the final sample of a burst.
*
* The timestamp tag value is a PMT tuple of the following:
- * (uint64 seconds, and double fractional seconds).
+ * (uint64 seconds, double fractional seconds).
*
- * The tx_freq tag has to be a double, and will issue a tune command to the USRP
+ * The tx_freq tag has to be a double or a pair of form (channel, frequency),
+ * with frequency being a double and channel being an integer.
+ * This tag will trigger a tune command to the USRP
* to the given frequency, if possible. Note that oscillators need some time
* to stabilize after this! Don't expect clean data to be sent immediately after this command.
+ * If channel is omitted, and only a double is given, it will set this frequency to all
+ * channels.
*
* The command tag can carry a PMT command. See the following section.
*
- * \section uhd_commands Command interface
+ * \section uhd_tx_commands Command interface
*
* There are two ways of passing commands to this block:
- * 1) tx_command tag. The command is attached to a sample, and will executed
+ * 1. tx_command tag. The command is attached to a sample, and will executed
* before the sample is transmitted, and after the previous sample.
- * 2) The 'command' message port. The command is executed asynchronously,
+ * 2. The 'command' message port. The command is executed asynchronously,
* as soon as possible.
*
- * In both cases, the payload of the command is a PMT pair, with the first
- * item ('car') being the command name, and second ('cdr') the command value.
- *
- * Command name | Command value
- * -------------|--------------------------------------------------------------------------
- * `freq` | Tuple: (chan, new_freq). Requests a tune to `new_freq` on channel `chan`.
- * `lo_offset` | Tuple: (chan, lo_offset). Adds a LO offset on channel `chan`.
- * `gain` | Tuple: (chan, gain). Requests a gain change to `gain` on channel `chan`.
+ * In both cases, the payload of the command is a PMT command, as described
+ * in Section \ref uhd_command_syntax.
*
- * See the UHD manual for more detailed documentation:
- * http://code.ettus.com/redmine/ettus/projects/uhd/wiki
+ * For a more general description of the gr-uhd components, see \ref page_uhd.
*
* \param device_addr the address to identify the hardware
* \param stream_args the IO format and channel specification
- * \param length_tag_name the name of the tag identifying tagged stream length
+ * \param tsb_tag_name the name of the tag identifying tagged stream length
* \return a new USRP sink block object
*/
static sptr make(const ::uhd::device_addr_t &device_addr,
const ::uhd::stream_args_t &stream_args,
- const std::string &length_tag_name = "");
+ const std::string &tsb_tag_name = "");
/*!
* Set the start time for outgoing samples.
diff --git a/gr-uhd/include/gnuradio/uhd/usrp_source.h b/gr-uhd/include/gnuradio/uhd/usrp_source.h
index 2e165cf771..75e8f8b844 100644
--- a/gr-uhd/include/gnuradio/uhd/usrp_source.h
+++ b/gr-uhd/include/gnuradio/uhd/usrp_source.h
@@ -27,6 +27,7 @@
#include <gnuradio/sync_block.h>
#include <uhd/usrp/multi_usrp.hpp>
+// TODO In 3.8, UHD 3.4 will be required and we can remove all these ifdefs
#ifndef INCLUDED_UHD_STREAM_HPP
namespace uhd {
struct GR_UHD_API stream_args_t
@@ -60,41 +61,18 @@ namespace gr {
typedef boost::shared_ptr<usrp_source> sptr;
/*!
- * \brief Make a new USRP source block.
+ * \brief DEPRECATED Make a new USRP source block using the deprecated io_type_t.
* \ingroup uhd_blk
*
- * The USRP source block receives samples and writes to a stream.
- * The source block also provides API calls for receiver settings.
- *
- * RX Stream tagging:
- *
- * The following tag keys will be produced by the work function:
- * - pmt::string_to_symbol("rx_time")
- * - pmt::string_to_symbol("rx_rate")
- * - pmt::string_to_symbol("rx_freq")
- *
- * The timstamp tag value is a pmt tuple of the following:
- * (uint64 seconds, and double fractional seconds).
- * A timestamp tag is produced at start() and after overflows.
- *
- * The sample rate and center frequency tags are doubles,
- * representing the sample rate in Sps and frequency in Hz.
- * These tags are produced upon the user changing parameters.
- *
- * See the UHD manual for more detailed documentation:
- * http://code.ettus.com/redmine/ettus/projects/uhd/wiki
- *
- * \param device_addr the address to identify the hardware
- * \param io_type the desired output data type
- * \param num_channels number of stream from the device
- * \return a new USRP source block object
+ * This function will be removed in the future. Please use the other make function,
+ * gr::uhd::make(const ::uhd::device_addr_t, const ::uhd::stream_args_t, const std::string).
*/
static sptr make(const ::uhd::device_addr_t &device_addr,
const ::uhd::io_type_t &io_type,
size_t num_channels);
/*!
- * \brief Make a new USRP source block.
+ * \brief Make a new USRP source block (usually a radio receiver).
*
* The USRP source block receives samples and writes to a stream.
* The source block also provides API calls for receiver settings.
@@ -104,12 +82,16 @@ namespace gr {
* The following tag keys will be produced by the work function:
* - pmt::string_to_symbol("rx_time")
*
- * The timstamp tag value is a pmt tuple of the following:
+ * The timestamp tag value is a pmt tuple of the following:
* (uint64 seconds, and double fractional seconds).
* A timestamp tag is produced at start() and after overflows.
*
- * See the UHD manual for more detailed documentation:
- * http://code.ettus.com/redmine/ettus/projects/uhd/wiki
+ * \section uhd_rx_command_iface Command interface
+ *
+ * This block has a message port, which consumes UHD PMT commands.
+ * For a description of the command syntax, see Section \ref uhd_command_syntax.
+ *
+ * For a more general description of the gr-uhd components, see \ref page_uhd.
*
* \param device_addr the address to identify the hardware
* \param stream_args the IO format and channel specification
diff --git a/gr-uhd/lib/usrp_common.h b/gr-uhd/lib/usrp_common.h
new file mode 100644
index 0000000000..29caa585cf
--- /dev/null
+++ b/gr-uhd/lib/usrp_common.h
@@ -0,0 +1,198 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2014 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef INCLUDED_GR_UHD_USRP_COMMON_H
+#define INCLUDED_GR_UHD_USRP_COMMON_H
+
+#include <pmt/pmt.h>
+#include <boost/dynamic_bitset.hpp>
+#include <boost/make_shared.hpp>
+#include <boost/bind.hpp>
+#include <boost/thread.hpp>
+#include <uhd/usrp/multi_usrp.hpp>
+#include <uhd/convert.hpp>
+#include <iostream>
+
+namespace gr {
+ namespace uhd {
+ typedef boost::function< ::uhd::sensor_value_t (const std::string&)> get_sensor_fn_t;
+
+ static const double LOCK_TIMEOUT = 1.5; // s
+
+ //! Helper function for msg_handler_command:
+ // - Extracts command and the command value from the command PMT
+ // - Returns true if the command PMT is well formed
+ // - If a channel is given, return that as well, otherwise set the channel to -1
+ static bool _unpack_chan_command(
+ std::string &command,
+ pmt::pmt_t &cmd_val,
+ int &chan,
+ const pmt::pmt_t &cmd_pmt
+ ) {
+ try {
+ chan = -1; // Default value
+ if (pmt::is_tuple(cmd_pmt) and (pmt::length(cmd_pmt) == 2 or pmt::length(cmd_pmt) == 3)) {
+ command = pmt::symbol_to_string(pmt::tuple_ref(cmd_pmt, 0));
+ cmd_val = pmt::tuple_ref(cmd_pmt, 1);
+ if (pmt::length(cmd_pmt) == 3) {
+ chan = pmt::to_long(pmt::tuple_ref(cmd_pmt, 2));
+ }
+ }
+ else if (pmt::is_pair(cmd_pmt)) {
+ command = pmt::symbol_to_string(pmt::car(cmd_pmt));
+ cmd_val = pmt::cdr(cmd_pmt);
+ if (pmt::is_pair(cmd_val)) {
+ chan = pmt::to_long(pmt::car(cmd_val));
+ cmd_val = pmt::cdr(cmd_val);
+ }
+ }
+ else {
+ return false;
+ }
+ } catch (pmt::wrong_type w) {
+ return false;
+ }
+ return true;
+ }
+
+ //! Helper function for msg_handler_command:
+ // - Sets a value in vector_to_update to cmd_val, depending on chan
+ // - If chan is a positive integer, it will set vector_to_update[chan]
+ // - If chan is -1, it depends on minus_one_updates_all:
+ // - Either set vector_to_update[0] or
+ // - Set *all* entries in vector_to_update
+ // - Returns a dynamic_bitset, all indexes that where changed in
+ // vector_to_update are set to 1
+ template <typename T>
+ static boost::dynamic_bitset<> _update_vector_from_cmd_val(
+ std::vector<T> &vector_to_update,
+ int chan,
+ const T cmd_val,
+ bool minus_one_updates_all = false
+ ) {
+ boost::dynamic_bitset<> vals_updated(vector_to_update.size());
+ if (chan == -1) {
+ if (minus_one_updates_all) {
+ for (size_t i = 0; i < vector_to_update.size(); i++) {
+ if (vector_to_update[i] != cmd_val) {
+ vals_updated[i] = true;
+ vector_to_update[i] = cmd_val;
+ }
+ }
+ return vals_updated;
+ }
+ chan = 0;
+ }
+ if (vector_to_update[chan] != cmd_val) {
+ vector_to_update[chan] = cmd_val;
+ vals_updated[chan] = true;
+ }
+
+ return vals_updated;
+ }
+
+
+ /*! \brief Components common to USRP sink and source.
+ *
+ * \param device_addr Device address + options
+ * \param stream_args Stream args (cpu format, otw format...)
+ * \param ts_tag_name If this block produces or consumes stream tags, enter the corresponding tag name here
+ */
+ class usrp_common_impl
+ {
+ public:
+ usrp_common_impl(
+ const ::uhd::device_addr_t &device_addr,
+ const ::uhd::stream_args_t &stream_args,
+ const std::string &ts_tag_name
+ ) :
+ _stream_args(stream_args),
+ _nchan(stream_args.channels.size()),
+ _stream_now(_nchan == 1 and ts_tag_name.empty()),
+ _start_time_set(false)
+ {
+ if(stream_args.cpu_format == "fc32")
+ _type = boost::make_shared< ::uhd::io_type_t >(::uhd::io_type_t::COMPLEX_FLOAT32);
+ if(stream_args.cpu_format == "sc16")
+ _type = boost::make_shared< ::uhd::io_type_t >(::uhd::io_type_t::COMPLEX_INT16);
+ _dev = ::uhd::usrp::multi_usrp::make(device_addr);
+ };
+
+ ~usrp_common_impl() {};
+
+ protected:
+ /*! \brief Wait until a timeout or a sensor returns 'locked'.
+ *
+ * If a given sensor is not found, this still returns 'true', so we don't throw
+ * errors or warnings if a sensor wasn't implemented.
+ */
+ bool _wait_for_locked_sensor(
+ std::vector<std::string> sensor_names,
+ const std::string &sensor_name,
+ get_sensor_fn_t get_sensor_fn
+ ){
+ if (std::find(sensor_names.begin(), sensor_names.end(), sensor_name) == sensor_names.end())
+ return true;
+
+ boost::system_time start = boost::get_system_time();
+ boost::system_time first_lock_time;
+
+ while (true) {
+ if ((not first_lock_time.is_not_a_date_time()) and
+ (boost::get_system_time() > (first_lock_time + boost::posix_time::seconds(LOCK_TIMEOUT)))) {
+ break;
+ }
+
+ if (get_sensor_fn(sensor_name).to_bool()) {
+ if (first_lock_time.is_not_a_date_time())
+ first_lock_time = boost::get_system_time();
+ }
+ else {
+ first_lock_time = boost::system_time(); //reset to 'not a date time'
+
+ if (boost::get_system_time() > (start + boost::posix_time::seconds(LOCK_TIMEOUT))){
+ return false;
+ }
+ }
+
+ boost::this_thread::sleep(boost::posix_time::milliseconds(100));
+ }
+
+ return true;
+ }
+
+ //! Shared pointer to the underlying multi_usrp object
+ ::uhd::usrp::multi_usrp::sptr _dev;
+ const ::uhd::stream_args_t _stream_args;
+ boost::shared_ptr< ::uhd::io_type_t > _type;
+ //! Number of channels (i.e. number of in- or outputs)
+ size_t _nchan;
+ bool _stream_now;
+ ::uhd::time_spec_t _start_time;
+ bool _start_time_set;
+ };
+
+ } /* namespace uhd */
+} /* namespace gr */
+
+#endif /* INCLUDED_GR_UHD_USRP_COMMON_H */
+
diff --git a/gr-uhd/lib/usrp_sink_impl.cc b/gr-uhd/lib/usrp_sink_impl.cc
index f05d90e26a..20f6fd6237 100644
--- a/gr-uhd/lib/usrp_sink_impl.cc
+++ b/gr-uhd/lib/usrp_sink_impl.cc
@@ -25,11 +25,12 @@
#include "usrp_sink_impl.h"
#include "gr_uhd_common.h"
#include <gnuradio/io_signature.h>
-#include <boost/make_shared.hpp>
namespace gr {
namespace uhd {
+ static const size_t ALL_CHANS = ::uhd::usrp::multi_usrp::ALL_CHANS;
+
usrp_sink::sptr
usrp_sink::make(const ::uhd::device_addr_t &device_addr,
const ::uhd::io_type_t &io_type,
@@ -66,36 +67,63 @@ namespace gr {
: sync_block("gr uhd usrp sink",
args_to_io_sig(stream_args),
io_signature::make(0, 0, 0)),
- _stream_args(stream_args),
- _nchan(stream_args.channels.size()),
- _stream_now(_nchan == 1 and length_tag_name.empty()),
- _start_time_set(false),
+ usrp_common_impl(device_addr, stream_args, length_tag_name),
_length_tag_key(length_tag_name.empty() ? pmt::PMT_NIL : pmt::string_to_symbol(length_tag_name)),
_nitems_to_send(0),
- _curr_freq(stream_args.channels.size(), 0.0),
- _curr_lo_offset(stream_args.channels.size(), 0.0),
- _curr_gain(stream_args.channels.size(), 0.0),
- _chans_to_tune(stream_args.channels.size(), false),
- _call_tune(false)
- {
- if(stream_args.cpu_format == "fc32")
- _type = boost::make_shared< ::uhd::io_type_t >(::uhd::io_type_t::COMPLEX_FLOAT32);
- if(stream_args.cpu_format == "sc16")
- _type = boost::make_shared< ::uhd::io_type_t >(::uhd::io_type_t::COMPLEX_INT16);
- _dev = ::uhd::usrp::multi_usrp::make(device_addr);
-
+ _curr_freq(stream_args.channels.size(), 0.0),
+ _curr_lo_offset(stream_args.channels.size(), 0.0),
+ _curr_gain(stream_args.channels.size(), 0.0),
+ _chans_to_tune(stream_args.channels.size())
+ {
message_port_register_in(pmt::mp("command"));
set_msg_handler(
- pmt::mp("command"),
- boost::bind(&usrp_sink_impl::msg_handler_command, this, _1)
+ pmt::mp("command"),
+ boost::bind(&usrp_sink_impl::msg_handler_command, this, _1)
);
- //message_port_register_in(pmt::mp("query"));
- //set_msg_handler(
- //pmt::mp("query"),
- //boost::bind(&usrp_sink_impl::msg_handler_query, this, _1)
- //);
+
+ _check_sensors_locked();
}
+ bool usrp_sink_impl::_check_sensors_locked()
+ {
+ bool clocks_locked = true;
+
+ // 1) Check ref lock for all mboards
+ for (size_t mboard_index = 0; mboard_index < _dev->get_num_mboards(); mboard_index++) {
+ std::string sensor_name = "ref_locked";
+ if (_dev->get_clock_source(mboard_index) == "internal") {
+ continue;
+ }
+ else if (_dev->get_clock_source(mboard_index) == "mimo") {
+ sensor_name = "mimo_locked";
+ }
+ if (not _wait_for_locked_sensor(
+ get_mboard_sensor_names(mboard_index),
+ sensor_name,
+ boost::bind(&usrp_sink_impl::get_mboard_sensor, this, _1, mboard_index)
+ )) {
+ GR_LOG_WARN(d_logger, boost::format("Sensor '%s' failed to lock within timeout on motherboard %d.") % sensor_name % mboard_index);
+ clocks_locked = false;
+ }
+ }
+
+ // 2) Check LO for all channels
+ for (size_t i = 0; i < _nchan; i++) {
+ size_t chan_index = _stream_args.channels[i];
+ if (not _wait_for_locked_sensor(
+ get_sensor_names(chan_index),
+ "lo_locked",
+ boost::bind(&usrp_sink_impl::get_sensor, this, _1, chan_index)
+ )) {
+ GR_LOG_WARN(d_logger, boost::format("Sensor 'lo_locked' failed to lock within timeout on channel %d.") % chan_index);
+ clocks_locked = false;
+ }
+ }
+
+ return clocks_locked;
+ }
+
+
usrp_sink_impl::~usrp_sink_impl()
{
}
@@ -569,9 +597,12 @@ namespace gr {
_metadata.time_spec += ::uhd::time_spec_t(0, num_sent, _sample_rate);
// Some post-processing tasks if we actually transmitted the entire burst
- if (_call_tune and num_sent == size_t(ninput_items)) {
- _set_center_freq_from_internals_allchans();
- _call_tune = false;
+ if (not _pending_cmds.empty() and num_sent == size_t(ninput_items)) {
+ GR_LOG_DEBUG(d_debug_logger, boost::format("Executing %d pending commands.") % _pending_cmds.size());
+ BOOST_FOREACH(const pmt::pmt_t &cmd_pmt, _pending_cmds) {
+ msg_handler_command(cmd_pmt);
+ }
+ _pending_cmds.clear();
}
return num_sent;
@@ -593,10 +624,9 @@ namespace gr {
// Go through tag list until something indicates the end of a burst.
bool found_time_tag = false;
bool found_eob = false;
- bool found_freq_tag_in_burst = false;
- uint64_t freq_cmd_offset = 0;
- double freq_cmd_freq;
- int freq_cmd_chan;
+ // For commands that are in the middle in the burst:
+ std::vector<pmt::pmt_t> commands_in_burst; // Store the command
+ uint64_t in_burst_cmd_offset = 0; // Store its position
BOOST_FOREACH(const tag_t &my_tag, _tags) {
const uint64_t my_tag_count = my_tag.offset;
const pmt::pmt_t &key = my_tag.key;
@@ -606,7 +636,7 @@ namespace gr {
break;
}
- /* I. Bursts that can only be on the first sample of burst
+ /* I. Tags that can only be on the first sample of a burst
*
* This includes:
* - tx_time
@@ -631,7 +661,7 @@ namespace gr {
max_count = my_tag_count;
break;
}
- found_time_tag = true;
+ found_time_tag = true;
_metadata.has_time_spec = true;
_metadata.time_spec = ::uhd::time_spec_t
(pmt::to_uint64(pmt::tuple_ref(value, 0)),
@@ -644,8 +674,8 @@ namespace gr {
max_count = my_tag_count;
break;
}
- // Bursty tx will not use time specs, unless a tx_time tag is also given.
- _metadata.has_time_spec = false;
+ // Bursty tx will not use time specs, unless a tx_time tag is also given.
+ _metadata.has_time_spec = false;
_metadata.start_of_burst = pmt::to_bool(value);
}
@@ -653,49 +683,41 @@ namespace gr {
else if(not pmt::is_null(_length_tag_key) and pmt::equal(key, _length_tag_key)) {
if (my_tag_count != samp0_count) {
max_count = my_tag_count;
- break;
+ break;
}
//If there are still items left to send, the current burst has been preempted.
//Set the items remaining counter to the new burst length. Notify the user of
//the tag preemption.
- else if(_nitems_to_send > 0) {
+ else if(_nitems_to_send > 0) {
std::cerr << "tP" << std::flush;
}
_nitems_to_send = pmt::to_long(value);
_metadata.start_of_burst = true;
}
- /* II. Bursts that can be on the first OR last sample of a burst
+ /* II. Tags that can be on the first OR last sample of a burst
*
* This includes:
- * - tx_freq (tags that don't actually change the frequency are ignored)
+ * - tx_freq
*
* With these tags, we check if they're at the start of a burst, and do
* the appropriate action. Otherwise, make sure the corresponding sample
* is the last one.
*/
- else if (pmt::equal(key, FREQ_KEY) and my_tag_count == samp0_count) {
- int chan = pmt::to_long(pmt::tuple_ref(value, 0));
- double new_freq = pmt::to_double(pmt::tuple_ref(value, 1));
- if (new_freq != _curr_freq[chan]) {
- _curr_freq[chan] = new_freq;
- _set_center_freq_from_internals(chan);
- }
- }
-
- else if(pmt::equal(key, FREQ_KEY) and not found_freq_tag_in_burst) {
- int chan = pmt::to_long(pmt::tuple_ref(value, 0));
- double new_freq = pmt::to_double(pmt::tuple_ref(value, 1));
- if (new_freq != _curr_freq[chan]) {
- freq_cmd_freq = new_freq;
- freq_cmd_chan = chan;
- freq_cmd_offset = my_tag_count;
- max_count = my_tag_count + 1;
- found_freq_tag_in_burst = true;
- }
+ else if (pmt::equal(key, FREQ_KEY) and my_tag_count == samp0_count) {
+ // If it's on the first sample, immediately do the tune:
+ GR_LOG_DEBUG(d_debug_logger, boost::format("Received tx_freq on start of burst."));
+ msg_handler_command(pmt::cons(pmt::mp("freq"), value));
+ }
+ else if(pmt::equal(key, FREQ_KEY)) {
+ // If it's not on the first sample, queue this command and only tx until here:
+ GR_LOG_DEBUG(d_debug_logger, boost::format("Received tx_freq mid-burst."));
+ commands_in_burst.push_back(pmt::cons(pmt::mp("freq"), value));
+ max_count = my_tag_count + 1;
+ in_burst_cmd_offset = my_tag_count;
}
- /* III. Bursts that can only be on the last sample of a burst
+ /* III. Tags that can only be on the last sample of a burst
*
* This includes:
* - tx_eob
@@ -713,20 +735,25 @@ namespace gr {
found_eob = true;
}
- if (found_freq_tag_in_burst) {
+ // If a command was found in-burst that may appear at the end of burst,
+ // there's two options:
+ // 1) The command was actually on the last sample (eob). Then, stash the
+ // commands for running after work().
+ // 2) The command was not on the last sample. In this case, only send()
+ // until before the tag, so it will be on the first sample of the next run.
+ if (not commands_in_burst.empty()) {
if (not found_eob) {
// If it's in the middle of a burst, only send() until before the tag
- max_count = freq_cmd_offset;
- } else if (freq_cmd_offset < max_count) {
- // Otherwise, tune after work()
- _curr_freq[freq_cmd_chan] = freq_cmd_freq;
- _chans_to_tune[freq_cmd_chan] = true;
- _call_tune = true;
+ max_count = in_burst_cmd_offset;
+ } else if (in_burst_cmd_offset < max_count) {
+ BOOST_FOREACH(const pmt::pmt_t &cmd_pmt, commands_in_burst) {
+ _pending_cmds.push_back(cmd_pmt);
+ }
}
}
if (found_time_tag) {
- _metadata.has_time_spec = true;
+ _metadata.has_time_spec = true;
}
// Only transmit up to and including end of burst,
@@ -798,46 +825,44 @@ namespace gr {
/************** External interfaces (RPC + Message passing) ********************/
- // Helper function for msg_handler_command: Extracts chan and command value from
- // the 2-tuple in cmd_val, updates the value in vector_to_update[chan] and returns
- // true if it was different from the old value.
- bool _unpack_chan_command(pmt::pmt_t &cmd_val, int &chan, std::vector<double> &vector_to_update)
- {
- chan = pmt::to_long(pmt::tuple_ref(cmd_val, 0));
- double new_value = pmt::to_double(pmt::tuple_ref(cmd_val, 1));
- if (new_value == vector_to_update[chan]) {
- return false;
- } else {
- vector_to_update[chan] = new_value;
- return true;
- }
- }
-
void usrp_sink_impl::msg_handler_command(pmt::pmt_t msg)
{
- const std::string command(pmt::symbol_to_string(pmt::car(msg)));
- pmt::pmt_t value(pmt::cdr(msg));
- int chan = 0;
- if (command == "freq") {
- if (_unpack_chan_command(value, chan, _curr_freq)) {
- _set_center_freq_from_internals(chan);
- }
- } else if (command == "lo_offset") {
- if (_unpack_chan_command(value, chan, _curr_lo_offset)) {
- _set_center_freq_from_internals(chan);
- }
- } else if (command == "gain") {
- if (_unpack_chan_command(value, chan, _curr_gain)) {
- set_gain(_curr_gain[chan], chan);
- }
- } else {
- GR_LOG_ALERT(d_logger, boost::format("Received unknown command: %s") % command);
+ std::string command;
+ pmt::pmt_t cmd_value;
+ int chan = -1;
+ if (not _unpack_chan_command(command, cmd_value, chan, msg)) {
+ GR_LOG_ALERT(d_logger, boost::format("Error while unpacking command PMT: %s") % msg);
+ return;
+ }
+ GR_LOG_DEBUG(d_debug_logger, boost::format("Received command: %s") % command);
+ try {
+ if (command == "freq") {
+ _chans_to_tune = _update_vector_from_cmd_val<double>(
+ _curr_freq, chan, pmt::to_double(cmd_value), true
+ );
+ _set_center_freq_from_internals_allchans();
+ } else if (command == "lo_offset") {
+ _chans_to_tune = _update_vector_from_cmd_val<double>(
+ _curr_lo_offset, chan, pmt::to_double(cmd_value), true
+ );
+ _set_center_freq_from_internals_allchans();
+ } else if (command == "gain") {
+ boost::dynamic_bitset<> chans_to_change = _update_vector_from_cmd_val<double>(
+ _curr_gain, chan, pmt::to_double(cmd_value), true
+ );
+ if (chans_to_change.any()) {
+ for (size_t i = 0; i < chans_to_change.size(); i++) {
+ if (chans_to_change[i]) {
+ set_gain(_curr_gain[i], i);
+ }
+ }
+ }
+ } else {
+ GR_LOG_ALERT(d_logger, boost::format("Received unknown command: %s") % command);
+ }
+ } catch (pmt::wrong_type &e) {
+ GR_LOG_ALERT(d_logger, boost::format("Received command '%s' with invalid command value: %s") % command % cmd_value);
}
- }
-
- void usrp_sink_impl::msg_handler_query(pmt::pmt_t msg)
- {
- //tbi
}
void
diff --git a/gr-uhd/lib/usrp_sink_impl.h b/gr-uhd/lib/usrp_sink_impl.h
index 12a25658e3..21bb991b92 100644
--- a/gr-uhd/lib/usrp_sink_impl.h
+++ b/gr-uhd/lib/usrp_sink_impl.h
@@ -22,6 +22,7 @@
#include <gnuradio/uhd/usrp_sink.h>
#include <uhd/convert.hpp>
+#include "usrp_common.h"
static const pmt::pmt_t SOB_KEY = pmt::string_to_symbol("tx_sob");
static const pmt::pmt_t EOB_KEY = pmt::string_to_symbol("tx_eob");
@@ -51,7 +52,7 @@ namespace gr {
/***********************************************************************
* UHD Multi USRP Sink Impl
**********************************************************************/
- class usrp_sink_impl : public usrp_sink
+ class usrp_sink_impl : public usrp_sink, public usrp_common_impl
{
public:
usrp_sink_impl(const ::uhd::device_addr_t &device_addr,
@@ -122,34 +123,32 @@ namespace gr {
inline void tag_work(int &ninput_items);
private:
+ /*! \brief Run through all 'lock' sensors and make sure they are actually locked.
+ */
+ bool _check_sensors_locked();
+
//! Like set_center_freq(), but uses _curr_freq and _curr_lo_offset
::uhd::tune_result_t _set_center_freq_from_internals(size_t chan);
//! Calls _set_center_freq_from_internals() on all channels
void _set_center_freq_from_internals_allchans();
- //! Receives commands and handles them
- void msg_handler_command(pmt::pmt_t msg);
- //! Receives queries and posts a response
- void msg_handler_query(pmt::pmt_t msg);
- ::uhd::usrp::multi_usrp::sptr _dev;
- const ::uhd::stream_args_t _stream_args;
- boost::shared_ptr< ::uhd::io_type_t > _type;
#ifdef GR_UHD_USE_STREAM_API
::uhd::tx_streamer::sptr _tx_stream;
#endif
- size_t _nchan;
- bool _stream_now;
::uhd::tx_metadata_t _metadata;
double _sample_rate;
- ::uhd::time_spec_t _start_time;
- bool _start_time_set;
//stream tags related stuff
std::vector<tag_t> _tags;
const pmt::pmt_t _length_tag_key;
long _nitems_to_send;
+ /****** Command interface related **********/
+ //! Stores a list of commands for later execution
+ std::vector<pmt::pmt_t> _pending_cmds;
+ //! Receives commands and handles them
+ void msg_handler_command(pmt::pmt_t msg);
//! Stores the last value we told the USRP to tune to for every channel
// (this is not necessarily the true value the USRP is currently tuned to!).
// We could theoretically ask the device, but during streaming, we want to minimize
@@ -159,8 +158,7 @@ namespace gr {
std::vector<double> _curr_lo_offset;
//! Stores the last gain value we told the USRP to have for every channel.
std::vector<double> _curr_gain;
- std::vector<bool> _chans_to_tune;
- bool _call_tune;
+ boost::dynamic_bitset<> _chans_to_tune;
};
} /* namespace uhd */
diff --git a/gr-uhd/lib/usrp_source_impl.cc b/gr-uhd/lib/usrp_source_impl.cc
index e57db13a0b..53038bf202 100644
--- a/gr-uhd/lib/usrp_source_impl.cc
+++ b/gr-uhd/lib/usrp_source_impl.cc
@@ -20,6 +20,7 @@
* Boston, MA 02110-1301, USA.
*/
+#include "usrp_common.h"
#include "usrp_source_impl.h"
#include "gr_uhd_common.h"
#include <gnuradio/io_signature.h>
@@ -66,20 +67,59 @@ namespace gr {
sync_block("gr uhd usrp source",
io_signature::make(0, 0, 0),
args_to_io_sig(stream_args)),
- _stream_args(stream_args),
- _nchan(stream_args.channels.size()),
- _stream_now(_nchan == 1),
- _tag_now(false),
- _start_time_set(false)
- {
- if(stream_args.cpu_format == "fc32")
- _type = boost::make_shared< ::uhd::io_type_t >(::uhd::io_type_t::COMPLEX_FLOAT32);
- if(stream_args.cpu_format == "sc16")
- _type = boost::make_shared< ::uhd::io_type_t >(::uhd::io_type_t::COMPLEX_INT16);
+ usrp_common_impl(device_addr, stream_args, ""),
+ _tag_now(false)
+ {
std::stringstream str;
str << name() << unique_id();
_id = pmt::string_to_symbol(str.str());
- _dev = ::uhd::usrp::multi_usrp::make(device_addr);
+
+ message_port_register_in(pmt::mp("command"));
+ set_msg_handler(
+ pmt::mp("command"),
+ boost::bind(&usrp_source_impl::msg_handler_command, this, _1)
+ );
+
+ _check_sensors_locked();
+ }
+
+ bool usrp_source_impl::_check_sensors_locked()
+ {
+ bool clocks_locked = true;
+
+ // 1) Check ref lock for all mboards
+ for (size_t mboard_index = 0; mboard_index < _dev->get_num_mboards(); mboard_index++) {
+ std::string sensor_name = "ref_locked";
+ if (_dev->get_clock_source(mboard_index) == "internal") {
+ continue;
+ }
+ else if (_dev->get_clock_source(mboard_index) == "mimo") {
+ sensor_name = "mimo_locked";
+ }
+ if (not _wait_for_locked_sensor(
+ get_mboard_sensor_names(mboard_index),
+ sensor_name,
+ boost::bind(&usrp_source_impl::get_mboard_sensor, this, _1, mboard_index)
+ )) {
+ GR_LOG_WARN(d_logger, boost::format("Sensor '%s' failed to lock within timeout on motherboard %d.") % sensor_name % mboard_index);
+ clocks_locked = false;
+ }
+ }
+
+ // 2) Check LO for all channels
+ for (size_t i = 0; i < _nchan; i++) {
+ size_t chan_index = _stream_args.channels[i];
+ if (not _wait_for_locked_sensor(
+ get_sensor_names(chan_index),
+ "lo_locked",
+ boost::bind(&usrp_source_impl::get_sensor, this, _1, chan_index)
+ )) {
+ GR_LOG_WARN(d_logger, boost::format("Sensor 'lo_locked' failed to lock within timeout on channel %d.") % chan_index);
+ clocks_locked = false;
+ }
+ }
+
+ return clocks_locked;
}
usrp_source_impl::~usrp_source_impl()
@@ -670,6 +710,38 @@ namespace gr {
return num_samps;
}
+
+ /************** External interfaces (RPC + Message passing) ********************/
+ void usrp_source_impl::msg_handler_command(pmt::pmt_t msg)
+ {
+ std::string command;
+ pmt::pmt_t cmd_value;
+ int chan = -1;
+ if (not _unpack_chan_command(command, cmd_value, chan, msg)) {
+ GR_LOG_ALERT(d_logger, "Error while unpacking command PMT.");
+ }
+ if (command == "freq") {
+ double freq = pmt::to_double(cmd_value);
+ for (size_t i = 0; i < _nchan; i++) {
+ if (chan == -1 or chan == int(i)) {
+ set_center_freq(freq, i);
+ }
+ }
+ // TODO: implement
+ //} else if (command == "lo_offset") {
+ //;
+ } else if (command == "gain") {
+ double gain = pmt::to_double(cmd_value);
+ for (size_t i = 0; i < _nchan; i++) {
+ if (chan == -1 or chan == int(i)) {
+ set_gain(gain, i);
+ }
+ }
+ } else {
+ GR_LOG_ALERT(d_logger, boost::format("Received unknown command: %s") % command);
+ }
+ }
+
void
usrp_source_impl::setup_rpc()
{
diff --git a/gr-uhd/lib/usrp_source_impl.h b/gr-uhd/lib/usrp_source_impl.h
index 3cfa1aad35..6de4c9c6a3 100644
--- a/gr-uhd/lib/usrp_source_impl.h
+++ b/gr-uhd/lib/usrp_source_impl.h
@@ -23,6 +23,7 @@
#include <gnuradio/uhd/usrp_source.h>
#include <uhd/convert.hpp>
#include <boost/thread/mutex.hpp>
+#include "usrp_common.h"
static const pmt::pmt_t TIME_KEY = pmt::string_to_symbol("rx_time");
static const pmt::pmt_t RATE_KEY = pmt::string_to_symbol("rx_rate");
@@ -50,7 +51,7 @@ namespace gr {
/***********************************************************************
* UHD Multi USRP Source Impl
**********************************************************************/
- class usrp_source_impl : public usrp_source
+ class usrp_source_impl : public usrp_source, public usrp_common_impl
{
public:
usrp_source_impl(const ::uhd::device_addr_t &device_addr,
@@ -124,27 +125,37 @@ namespace gr {
gr_vector_void_star &output_items);
private:
- ::uhd::usrp::multi_usrp::sptr _dev;
- const ::uhd::stream_args_t _stream_args;
- boost::shared_ptr< ::uhd::io_type_t > _type;
-
+ /*! \brief Run through all 'lock' sensors and make sure they are actually locked.
+ */
+ bool _check_sensors_locked();
#ifdef GR_UHD_USE_STREAM_API
::uhd::rx_streamer::sptr _rx_stream;
size_t _samps_per_packet;
#endif
- size_t _nchan;
- bool _stream_now, _tag_now;
+ bool _tag_now;
::uhd::rx_metadata_t _metadata;
pmt::pmt_t _id;
- ::uhd::time_spec_t _start_time;
- bool _start_time_set;
-
//tag shadows
double _samp_rate;
double _center_freq;
boost::recursive_mutex d_mutex;
+
+ /****** Command interface related **********/
+ //! Receives commands and handles them
+ void msg_handler_command(pmt::pmt_t msg);
+ //! Stores the last value we told the USRP to tune to for every channel
+ // (this is not necessarily the true value the USRP is currently tuned to!).
+ // We could theoretically ask the device, but during streaming, we want to minimize
+ // communication with the USRP.
+ std::vector<double> _curr_freq;
+ //! Stores the last value we told the USRP to have the LO offset for every channel.
+ std::vector<double> _curr_lo_offset;
+ //! Stores the last gain value we told the USRP to have for every channel.
+ std::vector<double> _curr_gain;
+ boost::dynamic_bitset<> _chans_to_tune;
+ bool _call_tune;
};
} /* namespace uhd */
diff --git a/gr-video-sdl/lib/CMakeLists.txt b/gr-video-sdl/lib/CMakeLists.txt
index c431382366..24b916bae7 100644
--- a/gr-video-sdl/lib/CMakeLists.txt
+++ b/gr-video-sdl/lib/CMakeLists.txt
@@ -69,6 +69,18 @@ GR_LIBRARY_FOO(gnuradio-video-sdl RUNTIME_COMPONENT "video_sdl_runtime" DEVEL_CO
add_dependencies(gnuradio-video-sdl gnuradio-runtime)
if(ENABLE_STATIC_LIBS)
+ if(ENABLE_GR_CTRLPORT)
+ # Remove GR_CTRLPORT set this target's definitions.
+ # Makes sure we don't try to use ControlPort stuff in source files
+ # since Ice will not work with static libs.
+ GET_DIRECTORY_PROPERTY(STATIC_DEFS COMPILE_DEFINITIONS)
+ list(REMOVE_ITEM STATIC_DEFS "GR_CTRLPORT")
+ SET_PROPERTY(DIRECTORY PROPERTY COMPILE_DEFINITIONS "${STATIC_DEFS}")
+
+ # readd it to the target since we removed it from the directory-wide list.
+ SET_PROPERTY(TARGET gnuradio-video-sdl APPEND PROPERTY COMPILE_DEFINITIONS "GR_CTRLPORT")
+ endif(ENABLE_GR_CTRLPORT)
+
add_library(gnuradio-video-sdl_static STATIC ${video_sdl_sources})
add_dependencies(gnuradio-video-sdl_static gnuradio-runtime_static)
diff --git a/gr-vocoder/lib/CMakeLists.txt b/gr-vocoder/lib/CMakeLists.txt
index 4c373fdbfd..697f260ecc 100644
--- a/gr-vocoder/lib/CMakeLists.txt
+++ b/gr-vocoder/lib/CMakeLists.txt
@@ -162,6 +162,18 @@ target_link_libraries(gnuradio-vocoder ${vocoder_libs})
GR_LIBRARY_FOO(gnuradio-vocoder RUNTIME_COMPONENT "vocoder_runtime" DEVEL_COMPONENT "vocoder_devel")
if(ENABLE_STATIC_LIBS)
+ if(ENABLE_GR_CTRLPORT)
+ # Remove GR_CTRLPORT set this target's definitions.
+ # Makes sure we don't try to use ControlPort stuff in source files
+ # since Ice will not work with static libs.
+ GET_DIRECTORY_PROPERTY(STATIC_DEFS COMPILE_DEFINITIONS)
+ list(REMOVE_ITEM STATIC_DEFS "GR_CTRLPORT")
+ SET_PROPERTY(DIRECTORY PROPERTY COMPILE_DEFINITIONS "${STATIC_DEFS}")
+
+ # readd it to the target since we removed it from the directory-wide list.
+ SET_PROPERTY(TARGET gnuradio-vocoder APPEND PROPERTY COMPILE_DEFINITIONS "GR_CTRLPORT")
+ endif(ENABLE_GR_CTRLPORT)
+
add_library(gnuradio-vocoder_static STATIC ${gr_vocoder_sources})
if(NOT WIN32)
diff --git a/gr-wavelet/lib/CMakeLists.txt b/gr-wavelet/lib/CMakeLists.txt
index 4bb85dc431..ee311a1e9a 100644
--- a/gr-wavelet/lib/CMakeLists.txt
+++ b/gr-wavelet/lib/CMakeLists.txt
@@ -92,6 +92,18 @@ add_dependencies(gnuradio-wavelet
gnuradio-runtime)
if(ENABLE_STATIC_LIBS)
+ if(ENABLE_GR_CTRLPORT)
+ # Remove GR_CTRLPORT set this target's definitions.
+ # Makes sure we don't try to use ControlPort stuff in source files
+ # since Ice will not work with static libs.
+ GET_DIRECTORY_PROPERTY(STATIC_DEFS COMPILE_DEFINITIONS)
+ list(REMOVE_ITEM STATIC_DEFS "GR_CTRLPORT")
+ SET_PROPERTY(DIRECTORY PROPERTY COMPILE_DEFINITIONS "${STATIC_DEFS}")
+
+ # readd it to the target since we removed it from the directory-wide list.
+ SET_PROPERTY(TARGET gnuradio-wavelet APPEND PROPERTY COMPILE_DEFINITIONS "GR_CTRLPORT")
+ endif(ENABLE_GR_CTRLPORT)
+
add_library(gnuradio-wavelet_static STATIC ${gr_wavelet_sources})
add_dependencies(gnuradio-wavelet_static wavelet_generated_includes
diff --git a/gr-wxgui/lib/CMakeLists.txt b/gr-wxgui/lib/CMakeLists.txt
index 2a263d3a74..7f972f62c1 100644
--- a/gr-wxgui/lib/CMakeLists.txt
+++ b/gr-wxgui/lib/CMakeLists.txt
@@ -76,6 +76,18 @@ GR_LIBRARY_FOO(gnuradio-wxgui
DEVEL_COMPONENT "wxgui_devel")
if(ENABLE_STATIC_LIBS)
+ if(ENABLE_GR_CTRLPORT)
+ # Remove GR_CTRLPORT set this target's definitions.
+ # Makes sure we don't try to use ControlPort stuff in source files
+ # since Ice will not work with static libs.
+ GET_DIRECTORY_PROPERTY(STATIC_DEFS COMPILE_DEFINITIONS)
+ list(REMOVE_ITEM STATIC_DEFS "GR_CTRLPORT")
+ SET_PROPERTY(DIRECTORY PROPERTY COMPILE_DEFINITIONS "${STATIC_DEFS}")
+
+ # readd it to the target since we removed it from the directory-wide list.
+ SET_PROPERTY(TARGET gnuradio-wxgui APPEND PROPERTY COMPILE_DEFINITIONS "GR_CTRLPORT")
+ endif(ENABLE_GR_CTRLPORT)
+
add_library(gnuradio-wxgui_static STATIC ${gr_wxgui_sources})
if(NOT WIN32)
diff --git a/gr-zeromq/docs/zeromq.dox b/gr-zeromq/docs/zeromq.dox
new file mode 100644
index 0000000000..3709afc4b0
--- /dev/null
+++ b/gr-zeromq/docs/zeromq.dox
@@ -0,0 +1,22 @@
+/*! \page page_zeromq ZeroMQ
+
+\section Introduction
+
+This is the gr-zeromq package. It contains bindings for ZeroMQ.
+
+The Python namespace is in gnuradio.zeromq, which would be normally
+imported as:
+
+\code
+ from gnuradio import zeromq
+\endcode
+
+See the Doxygen documentation for details about the blocks available
+in this package. A quick listing of the details can be found in Python
+after importing by using:
+
+\code
+ help(zeromq)
+\endcode
+
+*/
diff --git a/gr-zeromq/examples/zeromq_pubsub.grc b/gr-zeromq/examples/zeromq_pubsub.grc
index 2b50b9f617..1c047eb55d 100644
--- a/gr-zeromq/examples/zeromq_pubsub.grc
+++ b/gr-zeromq/examples/zeromq_pubsub.grc
@@ -1,55 +1,63 @@
<?xml version='1.0' encoding='ASCII'?>
<flow_graph>
- <timestamp>Tue May 13 13:09:21 2014</timestamp>
+ <timestamp>Mon Jul 14 14:44:33 2014</timestamp>
<block>
- <key>analog_sig_source_x</key>
+ <key>options</key>
<param>
<key>id</key>
- <value>analog_sig_source_x_0</value>
+ <value>zeromq_pubsub</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
+ <key>title</key>
+ <value></value>
</param>
<param>
- <key>samp_rate</key>
- <value>samp_rate</value>
+ <key>author</key>
+ <value></value>
</param>
<param>
- <key>waveform</key>
- <value>analog.GR_TRI_WAVE</value>
+ <key>description</key>
+ <value></value>
</param>
<param>
- <key>freq</key>
- <value>2000</value>
+ <key>window_size</key>
+ <value>1280, 1024</value>
</param>
<param>
- <key>amp</key>
- <value>1</value>
+ <key>generate_options</key>
+ <value>qt_gui</value>
</param>
<param>
- <key>offset</key>
- <value>0</value>
+ <key>category</key>
+ <value>Custom</value>
</param>
<param>
- <key>affinity</key>
- <value></value>
+ <key>run_options</key>
+ <value>prompt</value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>run</key>
+ <value>True</value>
</param>
<param>
- <key>maxoutbuf</key>
+ <key>max_nouts</key>
<value>0</value>
</param>
<param>
+ <key>realtime_scheduling</key>
+ <value></value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(170, 78)</value>
+ <value>(10, 10)</value>
</param>
<param>
<key>_rotation</key>
@@ -71,6 +79,10 @@
<value>32000</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(10, 170)</value>
</param>
@@ -80,6 +92,65 @@
</param>
</block>
<block>
+ <key>analog_sig_source_x</key>
+ <param>
+ <key>id</key>
+ <value>analog_sig_source_x_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>complex</value>
+ </param>
+ <param>
+ <key>samp_rate</key>
+ <value>samp_rate</value>
+ </param>
+ <param>
+ <key>waveform</key>
+ <value>analog.GR_TRI_WAVE</value>
+ </param>
+ <param>
+ <key>freq</key>
+ <value>2000</value>
+ </param>
+ <param>
+ <key>amp</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>offset</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(170, 78)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
<key>blocks_add_xx</key>
<param>
<key>id</key>
@@ -102,6 +173,10 @@
<value>1</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
@@ -149,6 +224,10 @@
<value>True</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
@@ -196,6 +275,10 @@
<value>100</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
@@ -239,6 +322,10 @@
<value>8192</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
@@ -286,6 +373,10 @@
<value>100</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
@@ -307,10 +398,10 @@
</param>
</block>
<block>
- <key>wxgui_scopesink2</key>
+ <key>qtgui_time_sink_x</key>
<param>
<key>id</key>
- <value>wxgui_scopesink2_0</value>
+ <value>qtgui_time_sink_x_0</value>
</param>
<param>
<key>_enabled</key>
@@ -321,123 +412,332 @@
<value>complex</value>
</param>
<param>
- <key>title</key>
- <value>Scope Plot</value>
+ <key>name</key>
+ <value>""</value>
</param>
<param>
- <key>samp_rate</key>
+ <key>ylabel</key>
+ <value>Amplitude</value>
+ </param>
+ <param>
+ <key>yunit</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>size</key>
+ <value>100</value>
+ </param>
+ <param>
+ <key>srate</key>
<value>samp_rate</value>
</param>
<param>
- <key>v_scale</key>
- <value>0</value>
+ <key>grid</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>autoscale</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>ymin</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>ymax</key>
+ <value>2</value>
+ </param>
+ <param>
+ <key>nconnections</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>update_time</key>
+ <value>0.10</value>
</param>
<param>
- <key>v_offset</key>
+ <key>entags</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value></value>
+ </param>
+ <param>
+ <key>tr_mode</key>
+ <value>qtgui.TRIG_MODE_AUTO</value>
+ </param>
+ <param>
+ <key>tr_slope</key>
+ <value>qtgui.TRIG_SLOPE_POS</value>
+ </param>
+ <param>
+ <key>tr_level</key>
+ <value>0.0</value>
+ </param>
+ <param>
+ <key>tr_delay</key>
<value>0</value>
</param>
<param>
- <key>t_scale</key>
+ <key>tr_chan</key>
<value>0</value>
</param>
<param>
- <key>ac_couple</key>
- <value>False</value>
+ <key>tr_tag</key>
+ <value>""</value>
</param>
<param>
- <key>xy_mode</key>
- <value>False</value>
+ <key>label1</key>
+ <value></value>
</param>
<param>
- <key>num_inputs</key>
+ <key>width1</key>
<value>1</value>
</param>
<param>
- <key>win_size</key>
+ <key>color1</key>
+ <value>"blue"</value>
+ </param>
+ <param>
+ <key>style1</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker1</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha1</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label2</key>
<value></value>
</param>
<param>
- <key>grid_pos</key>
+ <key>width2</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color2</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>style2</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker2</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha2</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label3</key>
<value></value>
</param>
<param>
- <key>notebook</key>
+ <key>width3</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color3</key>
+ <value>"green"</value>
+ </param>
+ <param>
+ <key>style3</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker3</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha3</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label4</key>
<value></value>
</param>
<param>
- <key>trig_mode</key>
- <value>wxgui.TRIG_MODE_AUTO</value>
+ <key>width4</key>
+ <value>1</value>
</param>
<param>
- <key>y_axis_label</key>
- <value>Counts</value>
+ <key>color4</key>
+ <value>"black"</value>
</param>
<param>
- <key>affinity</key>
+ <key>style4</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker4</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha4</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label5</key>
<value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(444, 319)</value>
+ <key>width5</key>
+ <value>1</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>color5</key>
+ <value>"cyan"</value>
</param>
- </block>
- <block>
- <key>options</key>
<param>
- <key>id</key>
- <value>zeromq_pubsub</value>
+ <key>style5</key>
+ <value>1</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>marker5</key>
+ <value>-1</value>
</param>
<param>
- <key>title</key>
+ <key>alpha5</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label6</key>
<value></value>
</param>
<param>
- <key>author</key>
+ <key>width6</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color6</key>
+ <value>"magenta"</value>
+ </param>
+ <param>
+ <key>style6</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker6</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha6</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label7</key>
<value></value>
</param>
<param>
- <key>description</key>
+ <key>width7</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color7</key>
+ <value>"yellow"</value>
+ </param>
+ <param>
+ <key>style7</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker7</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha7</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label8</key>
<value></value>
</param>
<param>
- <key>window_size</key>
- <value>1280, 1024</value>
+ <key>width8</key>
+ <value>1</value>
</param>
<param>
- <key>generate_options</key>
- <value>wx_gui</value>
+ <key>color8</key>
+ <value>"dark red"</value>
</param>
<param>
- <key>category</key>
- <value>Custom</value>
+ <key>style8</key>
+ <value>1</value>
</param>
<param>
- <key>run_options</key>
- <value>prompt</value>
+ <key>marker8</key>
+ <value>-1</value>
</param>
<param>
- <key>run</key>
- <value>True</value>
+ <key>alpha8</key>
+ <value>1.0</value>
</param>
<param>
- <key>max_nouts</key>
- <value>0</value>
+ <key>label9</key>
+ <value></value>
</param>
<param>
- <key>realtime_scheduling</key>
+ <key>width9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color9</key>
+ <value>"dark green"</value>
+ </param>
+ <param>
+ <key>style9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker9</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha9</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label10</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color10</key>
+ <value>"blue"</value>
+ </param>
+ <param>
+ <key>style10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker10</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha10</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
<value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(10, 10)</value>
+ <value>(410, 319)</value>
</param>
<param>
<key>_rotation</key>
@@ -470,7 +770,7 @@
</connection>
<connection>
<source_block_id>zeromq_sub_source_0</source_block_id>
- <sink_block_id>wxgui_scopesink2_0</sink_block_id>
+ <sink_block_id>qtgui_time_sink_x_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
diff --git a/gr-zeromq/examples/zeromq_pushpull.grc b/gr-zeromq/examples/zeromq_pushpull.grc
index b087a513d3..25459e05c4 100644
--- a/gr-zeromq/examples/zeromq_pushpull.grc
+++ b/gr-zeromq/examples/zeromq_pushpull.grc
@@ -1,6 +1,6 @@
<?xml version='1.0' encoding='ASCII'?>
<flow_graph>
- <timestamp>Tue May 13 13:11:44 2014</timestamp>
+ <timestamp>Mon Jul 14 14:45:00 2014</timestamp>
<block>
<key>analog_sig_source_x</key>
<param>
@@ -36,6 +36,10 @@
<value>0</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
@@ -71,6 +75,10 @@
<value>32000</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(10, 170)</value>
</param>
@@ -102,6 +110,10 @@
<value>1</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
@@ -149,6 +161,10 @@
<value>True</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
@@ -170,58 +186,97 @@
</param>
</block>
<block>
- <key>options</key>
+ <key>zeromq_push_sink</key>
<param>
<key>id</key>
- <value>zeromq_pushpull</value>
+ <value>zeromq_push_sink_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>title</key>
- <value></value>
+ <key>type</key>
+ <value>complex</value>
</param>
<param>
- <key>author</key>
- <value></value>
+ <key>vlen</key>
+ <value>1</value>
</param>
<param>
- <key>description</key>
+ <key>address</key>
+ <value>tcp://127.0.0.1:5555</value>
+ </param>
+ <param>
+ <key>timeout</key>
+ <value>100</value>
+ </param>
+ <param>
+ <key>alias</key>
<value></value>
</param>
<param>
- <key>window_size</key>
- <value>1280, 1024</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>generate_options</key>
- <value>wx_gui</value>
+ <key>_coordinate</key>
+ <value>(722, 141)</value>
</param>
<param>
- <key>category</key>
- <value>Custom</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
+ </block>
+ <block>
+ <key>analog_fastnoise_source_x</key>
<param>
- <key>run_options</key>
- <value>prompt</value>
+ <key>id</key>
+ <value>analog_fastnoise_source_x_0</value>
</param>
<param>
- <key>run</key>
+ <key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>max_nouts</key>
+ <key>type</key>
+ <value>complex</value>
+ </param>
+ <param>
+ <key>noise_type</key>
+ <value>analog.GR_GAUSSIAN</value>
+ </param>
+ <param>
+ <key>amp</key>
+ <value>0.1</value>
+ </param>
+ <param>
+ <key>seed</key>
<value>0</value>
</param>
<param>
- <key>realtime_scheduling</key>
+ <key>samples</key>
+ <value>8192</value>
+ </param>
+ <param>
+ <key>alias</key>
<value></value>
</param>
<param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(10, 10)</value>
+ <value>(169, 196)</value>
</param>
<param>
<key>_rotation</key>
@@ -229,10 +284,10 @@
</param>
</block>
<block>
- <key>zeromq_push_sink</key>
+ <key>zeromq_pull_source</key>
<param>
<key>id</key>
- <value>zeromq_push_sink_0</value>
+ <value>zeromq_pull_source_0</value>
</param>
<param>
<key>_enabled</key>
@@ -255,12 +310,24 @@
<value>100</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
<param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(722, 141)</value>
+ <value>(167, 308)</value>
</param>
<param>
<key>_rotation</key>
@@ -268,46 +335,62 @@
</param>
</block>
<block>
- <key>zeromq_pull_source</key>
+ <key>options</key>
<param>
<key>id</key>
- <value>zeromq_pull_source_0</value>
+ <value>zeromq_pushpull</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
+ <key>title</key>
+ <value></value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>author</key>
+ <value></value>
</param>
<param>
- <key>address</key>
- <value>tcp://127.0.0.1:5555</value>
+ <key>description</key>
+ <value></value>
</param>
<param>
- <key>timeout</key>
- <value>100</value>
+ <key>window_size</key>
+ <value>1280, 1024</value>
</param>
<param>
- <key>affinity</key>
- <value></value>
+ <key>generate_options</key>
+ <value>qt_gui</value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>category</key>
+ <value>Custom</value>
</param>
<param>
- <key>maxoutbuf</key>
+ <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>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(167, 308)</value>
+ <value>(10, 10)</value>
</param>
<param>
<key>_rotation</key>
@@ -315,10 +398,10 @@
</param>
</block>
<block>
- <key>wxgui_scopesink2</key>
+ <key>qtgui_time_sink_x</key>
<param>
<key>id</key>
- <value>wxgui_scopesink2_0</value>
+ <value>qtgui_time_sink_x_0</value>
</param>
<param>
<key>_enabled</key>
@@ -329,115 +412,332 @@
<value>complex</value>
</param>
<param>
- <key>title</key>
- <value>Scope Plot</value>
+ <key>name</key>
+ <value>""</value>
</param>
<param>
- <key>samp_rate</key>
+ <key>ylabel</key>
+ <value>Amplitude</value>
+ </param>
+ <param>
+ <key>yunit</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>size</key>
+ <value>100</value>
+ </param>
+ <param>
+ <key>srate</key>
<value>samp_rate</value>
</param>
<param>
- <key>v_scale</key>
- <value>0</value>
+ <key>grid</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>autoscale</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>ymin</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>ymax</key>
+ <value>2</value>
</param>
<param>
- <key>v_offset</key>
+ <key>nconnections</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>update_time</key>
+ <value>0.10</value>
+ </param>
+ <param>
+ <key>entags</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value></value>
+ </param>
+ <param>
+ <key>tr_mode</key>
+ <value>qtgui.TRIG_MODE_AUTO</value>
+ </param>
+ <param>
+ <key>tr_slope</key>
+ <value>qtgui.TRIG_SLOPE_POS</value>
+ </param>
+ <param>
+ <key>tr_level</key>
+ <value>0.0</value>
+ </param>
+ <param>
+ <key>tr_delay</key>
<value>0</value>
</param>
<param>
- <key>t_scale</key>
+ <key>tr_chan</key>
<value>0</value>
</param>
<param>
- <key>ac_couple</key>
- <value>False</value>
+ <key>tr_tag</key>
+ <value>""</value>
</param>
<param>
- <key>xy_mode</key>
- <value>False</value>
+ <key>label1</key>
+ <value></value>
</param>
<param>
- <key>num_inputs</key>
+ <key>width1</key>
<value>1</value>
</param>
<param>
- <key>win_size</key>
+ <key>color1</key>
+ <value>"blue"</value>
+ </param>
+ <param>
+ <key>style1</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker1</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha1</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label2</key>
<value></value>
</param>
<param>
- <key>grid_pos</key>
+ <key>width2</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color2</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>style2</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker2</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha2</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label3</key>
<value></value>
</param>
<param>
- <key>notebook</key>
+ <key>width3</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color3</key>
+ <value>"green"</value>
+ </param>
+ <param>
+ <key>style3</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker3</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha3</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label4</key>
<value></value>
</param>
<param>
- <key>trig_mode</key>
- <value>wxgui.TRIG_MODE_AUTO</value>
+ <key>width4</key>
+ <value>1</value>
</param>
<param>
- <key>y_axis_label</key>
- <value>Counts</value>
+ <key>color4</key>
+ <value>"black"</value>
</param>
<param>
- <key>affinity</key>
+ <key>style4</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker4</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha4</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label5</key>
<value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(422, 300)</value>
+ <key>width5</key>
+ <value>1</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>color5</key>
+ <value>"cyan"</value>
</param>
- </block>
- <block>
- <key>analog_fastnoise_source_x</key>
<param>
- <key>id</key>
- <value>analog_fastnoise_source_x_0</value>
+ <key>style5</key>
+ <value>1</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>marker5</key>
+ <value>-1</value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
+ <key>alpha5</key>
+ <value>1.0</value>
</param>
<param>
- <key>noise_type</key>
- <value>analog.GR_GAUSSIAN</value>
+ <key>label6</key>
+ <value></value>
</param>
<param>
- <key>amp</key>
- <value>0.1</value>
+ <key>width6</key>
+ <value>1</value>
</param>
<param>
- <key>seed</key>
- <value>0</value>
+ <key>color6</key>
+ <value>"magenta"</value>
</param>
<param>
- <key>samples</key>
- <value>8192</value>
+ <key>style6</key>
+ <value>1</value>
</param>
<param>
- <key>affinity</key>
+ <key>marker6</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha6</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label7</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>width7</key>
+ <value>1</value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>color7</key>
+ <value>"yellow"</value>
+ </param>
+ <param>
+ <key>style7</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker7</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha7</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label8</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color8</key>
+ <value>"dark red"</value>
+ </param>
+ <param>
+ <key>style8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker8</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha8</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label9</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color9</key>
+ <value>"dark green"</value>
+ </param>
+ <param>
+ <key>style9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker9</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha9</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label10</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color10</key>
+ <value>"blue"</value>
+ </param>
+ <param>
+ <key>style10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker10</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha10</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(169, 196)</value>
+ <value>(381, 300)</value>
</param>
<param>
<key>_rotation</key>
@@ -451,12 +751,6 @@
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>zeromq_pull_source_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>analog_sig_source_x_0</source_block_id>
<sink_block_id>blocks_add_xx_0</sink_block_id>
<source_key>0</source_key>
@@ -474,4 +768,10 @@
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
+ <connection>
+ <source_block_id>zeromq_pull_source_0</source_block_id>
+ <sink_block_id>qtgui_time_sink_x_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
</flow_graph>
diff --git a/gr-zeromq/examples/zeromq_reqrep.grc b/gr-zeromq/examples/zeromq_reqrep.grc
index ede0e1b08a..6c299dd801 100644
--- a/gr-zeromq/examples/zeromq_reqrep.grc
+++ b/gr-zeromq/examples/zeromq_reqrep.grc
@@ -1,6 +1,6 @@
<?xml version='1.0' encoding='ASCII'?>
<flow_graph>
- <timestamp>Tue May 13 13:12:52 2014</timestamp>
+ <timestamp>Mon Jul 14 14:45:22 2014</timestamp>
<block>
<key>analog_sig_source_x</key>
<param>
@@ -36,6 +36,10 @@
<value>0</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
@@ -71,6 +75,10 @@
<value>32000</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(10, 170)</value>
</param>
@@ -80,10 +88,10 @@
</param>
</block>
<block>
- <key>zeromq_req_source</key>
+ <key>blocks_add_xx</key>
<param>
<key>id</key>
- <value>zeromq_req_source_0</value>
+ <value>blocks_add_xx_0</value>
</param>
<param>
<key>_enabled</key>
@@ -94,16 +102,16 @@
<value>complex</value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>num_inputs</key>
+ <value>2</value>
</param>
<param>
- <key>address</key>
- <value>tcp://127.0.0.1:5555</value>
+ <key>vlen</key>
+ <value>1</value>
</param>
<param>
- <key>timeout</key>
- <value>100</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>affinity</key>
@@ -119,7 +127,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(171, 306)</value>
+ <value>(411, 151)</value>
</param>
<param>
<key>_rotation</key>
@@ -127,10 +135,10 @@
</param>
</block>
<block>
- <key>wxgui_scopesink2</key>
+ <key>blocks_throttle</key>
<param>
<key>id</key>
- <value>wxgui_scopesink2_0</value>
+ <value>blocks_throttle_0</value>
</param>
<param>
<key>_enabled</key>
@@ -141,64 +149,134 @@
<value>complex</value>
</param>
<param>
- <key>title</key>
- <value>Scope Plot</value>
+ <key>samples_per_second</key>
+ <value>samp_rate</value>
</param>
<param>
- <key>samp_rate</key>
- <value>samp_rate</value>
+ <key>vlen</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>ignoretag</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>v_scale</key>
+ <key>minoutbuf</key>
<value>0</value>
</param>
<param>
- <key>v_offset</key>
+ <key>maxoutbuf</key>
<value>0</value>
</param>
<param>
- <key>t_scale</key>
+ <key>_coordinate</key>
+ <value>(534, 164)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
<value>0</value>
</param>
+ </block>
+ <block>
+ <key>zeromq_rep_sink</key>
<param>
- <key>ac_couple</key>
- <value>False</value>
+ <key>id</key>
+ <value>zeromq_rep_sink_0</value>
</param>
<param>
- <key>xy_mode</key>
- <value>False</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>num_inputs</key>
+ <key>type</key>
+ <value>complex</value>
+ </param>
+ <param>
+ <key>vlen</key>
<value>1</value>
</param>
<param>
- <key>win_size</key>
- <value></value>
+ <key>address</key>
+ <value>tcp://127.0.0.1:5555</value>
</param>
<param>
- <key>grid_pos</key>
+ <key>timeout</key>
+ <value>100</value>
+ </param>
+ <param>
+ <key>alias</key>
<value></value>
</param>
<param>
- <key>notebook</key>
+ <key>affinity</key>
<value></value>
</param>
<param>
- <key>trig_mode</key>
- <value>wxgui.TRIG_MODE_AUTO</value>
+ <key>_coordinate</key>
+ <value>(722, 148)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>analog_fastnoise_source_x</key>
+ <param>
+ <key>id</key>
+ <value>analog_fastnoise_source_x_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>complex</value>
+ </param>
+ <param>
+ <key>noise_type</key>
+ <value>analog.GR_GAUSSIAN</value>
</param>
<param>
- <key>y_axis_label</key>
- <value>Counts</value>
+ <key>amp</key>
+ <value>0.1</value>
+ </param>
+ <param>
+ <key>seed</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>samples</key>
+ <value>8192</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>affinity</key>
<value></value>
</param>
<param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(450, 298)</value>
+ <value>(169, 196)</value>
</param>
<param>
<key>_rotation</key>
@@ -206,10 +284,10 @@
</param>
</block>
<block>
- <key>blocks_add_xx</key>
+ <key>zeromq_req_source</key>
<param>
<key>id</key>
- <value>blocks_add_xx_0</value>
+ <value>zeromq_req_source_0</value>
</param>
<param>
<key>_enabled</key>
@@ -220,14 +298,22 @@
<value>complex</value>
</param>
<param>
- <key>num_inputs</key>
- <value>2</value>
- </param>
- <param>
<key>vlen</key>
<value>1</value>
</param>
<param>
+ <key>address</key>
+ <value>tcp://127.0.0.1:5555</value>
+ </param>
+ <param>
+ <key>timeout</key>
+ <value>100</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
@@ -241,7 +327,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(411, 151)</value>
+ <value>(171, 306)</value>
</param>
<param>
<key>_rotation</key>
@@ -276,7 +362,7 @@
</param>
<param>
<key>generate_options</key>
- <value>wx_gui</value>
+ <value>qt_gui</value>
</param>
<param>
<key>category</key>
@@ -299,6 +385,10 @@
<value></value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(10, 10)</value>
</param>
@@ -308,10 +398,10 @@
</param>
</block>
<block>
- <key>blocks_throttle</key>
+ <key>qtgui_time_sink_x</key>
<param>
<key>id</key>
- <value>blocks_throttle_0</value>
+ <value>qtgui_time_sink_x_0</value>
</param>
<param>
<key>_enabled</key>
@@ -322,122 +412,332 @@
<value>complex</value>
</param>
<param>
- <key>samples_per_second</key>
+ <key>name</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>ylabel</key>
+ <value>Amplitude</value>
+ </param>
+ <param>
+ <key>yunit</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>size</key>
+ <value>100</value>
+ </param>
+ <param>
+ <key>srate</key>
<value>samp_rate</value>
</param>
<param>
- <key>vlen</key>
+ <key>grid</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>autoscale</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>ymin</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>ymax</key>
+ <value>2</value>
+ </param>
+ <param>
+ <key>nconnections</key>
<value>1</value>
</param>
<param>
- <key>ignoretag</key>
+ <key>update_time</key>
+ <value>0.10</value>
+ </param>
+ <param>
+ <key>entags</key>
<value>True</value>
</param>
<param>
- <key>affinity</key>
+ <key>gui_hint</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
+ <key>tr_mode</key>
+ <value>qtgui.TRIG_MODE_AUTO</value>
+ </param>
+ <param>
+ <key>tr_slope</key>
+ <value>qtgui.TRIG_SLOPE_POS</value>
+ </param>
+ <param>
+ <key>tr_level</key>
+ <value>0.0</value>
+ </param>
+ <param>
+ <key>tr_delay</key>
<value>0</value>
</param>
<param>
- <key>maxoutbuf</key>
+ <key>tr_chan</key>
<value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(534, 164)</value>
+ <key>tr_tag</key>
+ <value>""</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>label1</key>
+ <value></value>
</param>
- </block>
- <block>
- <key>zeromq_rep_sink</key>
<param>
- <key>id</key>
- <value>zeromq_rep_sink_0</value>
+ <key>width1</key>
+ <value>1</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>color1</key>
+ <value>"blue"</value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
+ <key>style1</key>
+ <value>1</value>
</param>
<param>
- <key>vlen</key>
+ <key>marker1</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha1</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width2</key>
<value>1</value>
</param>
<param>
- <key>address</key>
- <value>tcp://127.0.0.1:5555</value>
+ <key>color2</key>
+ <value>"red"</value>
</param>
<param>
- <key>timeout</key>
- <value>100</value>
+ <key>style2</key>
+ <value>1</value>
</param>
<param>
- <key>affinity</key>
+ <key>marker2</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha2</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label3</key>
<value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(722, 148)</value>
+ <key>width3</key>
+ <value>1</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>color3</key>
+ <value>"green"</value>
</param>
- </block>
- <block>
- <key>analog_fastnoise_source_x</key>
<param>
- <key>id</key>
- <value>analog_fastnoise_source_x_0</value>
+ <key>style3</key>
+ <value>1</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>marker3</key>
+ <value>-1</value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
+ <key>alpha3</key>
+ <value>1.0</value>
</param>
<param>
- <key>noise_type</key>
- <value>analog.GR_GAUSSIAN</value>
+ <key>label4</key>
+ <value></value>
</param>
<param>
- <key>amp</key>
- <value>0.1</value>
+ <key>width4</key>
+ <value>1</value>
</param>
<param>
- <key>seed</key>
- <value>0</value>
+ <key>color4</key>
+ <value>"black"</value>
</param>
<param>
- <key>samples</key>
- <value>8192</value>
+ <key>style4</key>
+ <value>1</value>
</param>
<param>
- <key>affinity</key>
+ <key>marker4</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha4</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label5</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>width5</key>
+ <value>1</value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>color5</key>
+ <value>"cyan"</value>
+ </param>
+ <param>
+ <key>style5</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker5</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha5</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width6</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color6</key>
+ <value>"magenta"</value>
+ </param>
+ <param>
+ <key>style6</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker6</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha6</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width7</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color7</key>
+ <value>"yellow"</value>
+ </param>
+ <param>
+ <key>style7</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker7</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha7</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label8</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color8</key>
+ <value>"dark red"</value>
+ </param>
+ <param>
+ <key>style8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker8</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha8</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label9</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color9</key>
+ <value>"dark green"</value>
+ </param>
+ <param>
+ <key>style9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker9</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha9</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label10</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color10</key>
+ <value>"blue"</value>
+ </param>
+ <param>
+ <key>style10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker10</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha10</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(169, 196)</value>
+ <value>(385, 298)</value>
</param>
<param>
<key>_rotation</key>
@@ -470,7 +770,7 @@
</connection>
<connection>
<source_block_id>zeromq_req_source_0</source_block_id>
- <sink_block_id>wxgui_scopesink2_0</sink_block_id>
+ <sink_block_id>qtgui_time_sink_x_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
diff --git a/gr-zeromq/lib/CMakeLists.txt b/gr-zeromq/lib/CMakeLists.txt
index 952561b761..4506be21a9 100644
--- a/gr-zeromq/lib/CMakeLists.txt
+++ b/gr-zeromq/lib/CMakeLists.txt
@@ -70,6 +70,18 @@ target_link_libraries(gnuradio-zeromq ${zeromq_libs})
GR_LIBRARY_FOO(gnuradio-zeromq RUNTIME_COMPONENT "zeromq_runtime" DEVEL_COMPONENT "zeromq_devel")
if(ENABLE_STATIC_LIBS)
+ if(ENABLE_GR_CTRLPORT)
+ # Remove GR_CTRLPORT set this target's definitions.
+ # Makes sure we don't try to use ControlPort stuff in source files
+ # since Ice will not work with static libs.
+ GET_DIRECTORY_PROPERTY(STATIC_DEFS COMPILE_DEFINITIONS)
+ list(REMOVE_ITEM STATIC_DEFS "GR_CTRLPORT")
+ SET_PROPERTY(DIRECTORY PROPERTY COMPILE_DEFINITIONS "${STATIC_DEFS}")
+
+ # readd it to the target since we removed it from the directory-wide list.
+ SET_PROPERTY(TARGET gnuradio-zeromq APPEND PROPERTY COMPILE_DEFINITIONS "GR_CTRLPORT")
+ endif(ENABLE_GR_CTRLPORT)
+
add_library(gnuradio-zeromq_static STATIC ${zeromq_sources})
if(NOT WIN32)
diff --git a/grc/base/Block.py b/grc/base/Block.py
index a14ffd92fc..a8a699f29d 100644
--- a/grc/base/Block.py
+++ b/grc/base/Block.py
@@ -77,6 +77,7 @@ class Block(Element):
self._block_wrapper_path = n.find('block_wrapper_path')
self._bussify_sink = n.find('bus_sink')
self._bussify_source = n.find('bus_source')
+ self._var_value = n.find('var_value') or '$value'
# get list of param tabs
n_tabs = n.find('param_tab_order') or None
@@ -275,8 +276,10 @@ class Block(Element):
tmpl = str(tmpl)
if '$' not in tmpl: return tmpl
n = dict((p.get_key(), TemplateArg(p)) for p in self.get_params())
- try: return str(Template(tmpl, n))
- except Exception, e: return "-------->\n%s: %s\n<--------"%(e, tmpl)
+ try:
+ return str(Template(tmpl, n))
+ except Exception as err:
+ return "Template error: %s\n %s" % (tmpl, err)
##############################################
# Controller Modify
diff --git a/grc/base/Port.py b/grc/base/Port.py
index edc309bf05..34766bb4f8 100644
--- a/grc/base/Port.py
+++ b/grc/base/Port.py
@@ -36,6 +36,7 @@ class Port(Element):
self._name = n['name']
self._key = n['key']
self._type = n['type']
+ self._hide = n.find('hide') or ''
self._dir = dir
def validate(self):
@@ -65,15 +66,17 @@ class Port(Element):
def get_name(self):
number = ''
if self.get_type() == 'bus':
- busses = filter(lambda a: a._dir == self._dir, self.get_parent().get_ports_gui());
-
- number = str(busses.index(self)) + '#' + str(len(self.get_associated_ports()));
+ busses = filter(lambda a: a._dir == self._dir, self.get_parent().get_ports_gui())
+ number = str(busses.index(self)) + '#' + str(len(self.get_associated_ports()))
return self._name + number
def get_key(self): return self._key
def is_sink(self): return self._dir == 'sink'
def is_source(self): return self._dir == 'source'
def get_type(self): return self.get_parent().resolve_dependencies(self._type)
+ def get_hide(self):
+ value = self.get_parent().resolve_dependencies(self._hide).strip().lower()
+ return False if value in ('false', 'off', '0') else bool(value)
def get_connections(self):
"""
@@ -97,20 +100,18 @@ class Port(Element):
def get_associated_ports(self):
if not self.get_type() == 'bus':
- return [self];
+ return [self]
else:
if self.is_source():
- get_p = self.get_parent().get_sources;
- bus_structure = self.get_parent().current_bus_structure['source'];
- direc = 'source'
+ get_ports = self.get_parent().get_sources
+ bus_structure = self.get_parent().current_bus_structure['source']
else:
- get_p = self.get_parent().get_sinks;
- bus_structure = self.get_parent().current_bus_structure['sink'];
- direc = 'sink'
+ get_ports = self.get_parent().get_sinks
+ bus_structure = self.get_parent().current_bus_structure['sink']
- ports = [i for i in get_p() if not i.get_type() == 'bus'];
+ ports = [i for i in get_ports() if not i.get_type() == 'bus']
if bus_structure:
- busses = [i for i in get_p() if i.get_type() == 'bus'];
- bus_index = busses.index(self);
- ports = filter(lambda a: ports.index(a) in bus_structure[bus_index], ports);
- return ports;
+ busses = [i for i in get_ports() if i.get_type() == 'bus']
+ bus_index = busses.index(self)
+ ports = filter(lambda a: ports.index(a) in bus_structure[bus_index], ports)
+ return ports
diff --git a/grc/examples/simple/variable_config.grc b/grc/examples/simple/variable_config.grc
index 0b50b1e5bb..0b60abc813 100644
--- a/grc/examples/simple/variable_config.grc
+++ b/grc/examples/simple/variable_config.grc
@@ -1,6 +1,6 @@
<?xml version='1.0' encoding='ASCII'?>
<flow_graph>
- <timestamp>Sat Nov 10 15:20:12 2012</timestamp>
+ <timestamp>Sat Jul 12 16:15:51 2014</timestamp>
<block>
<key>options</key>
<param>
@@ -29,7 +29,7 @@
</param>
<param>
<key>generate_options</key>
- <value>wx_gui</value>
+ <value>qt_gui</value>
</param>
<param>
<key>category</key>
@@ -52,8 +52,12 @@
<value></value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(10, 10)</value>
+ <value>(-1, 2)</value>
</param>
<param>
<key>_rotation</key>
@@ -75,8 +79,12 @@
<value>32000</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(10, 170)</value>
+ <value>(-1, 125)</value>
</param>
<param>
<key>_rotation</key>
@@ -84,42 +92,58 @@
</param>
</block>
<block>
- <key>variable_config</key>
+ <key>analog_sig_source_x</key>
<param>
<key>id</key>
- <value>freq_init</value>
+ <value>analog_sig_source_x_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>1000</value>
- </param>
- <param>
<key>type</key>
- <value>real</value>
+ <value>complex</value>
</param>
<param>
- <key>config_file</key>
- <value>config.conf</value>
+ <key>samp_rate</key>
+ <value>samp_rate</value>
</param>
<param>
- <key>section</key>
- <value>main</value>
+ <key>waveform</key>
+ <value>analog.GR_COS_WAVE</value>
</param>
<param>
- <key>option</key>
+ <key>freq</key>
<value>freq</value>
</param>
<param>
- <key>writeback</key>
- <value>freq</value>
+ <key>amp</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>offset</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(255, 17)</value>
+ <value>(173, 201)</value>
</param>
<param>
<key>_rotation</key>
@@ -127,54 +151,50 @@
</param>
</block>
<block>
- <key>variable_slider</key>
+ <key>blocks_throttle</key>
<param>
<key>id</key>
- <value>freq</value>
+ <value>blocks_throttle_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>label</key>
- <value>Frequency (Hz)</value>
- </param>
- <param>
- <key>value</key>
- <value>freq_init</value>
+ <key>type</key>
+ <value>complex</value>
</param>
<param>
- <key>min</key>
- <value>-samp_rate/2</value>
+ <key>samples_per_second</key>
+ <value>samp_rate</value>
</param>
<param>
- <key>max</key>
- <value>samp_rate/2</value>
+ <key>vlen</key>
+ <value>1</value>
</param>
<param>
- <key>num_steps</key>
- <value>100</value>
+ <key>ignoretag</key>
+ <value>True</value>
</param>
<param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>grid_pos</key>
- <value></value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>notebook</key>
- <value></value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(429, 24)</value>
+ <value>(392, 233)</value>
</param>
<param>
<key>_rotation</key>
@@ -182,10 +202,10 @@
</param>
</block>
<block>
- <key>wxgui_fftsink2</key>
+ <key>qtgui_freq_sink_x</key>
<param>
<key>id</key>
- <value>wxgui_fftsink2_0</value>
+ <value>qtgui_freq_sink_x_0</value>
</param>
<param>
<key>_enabled</key>
@@ -196,76 +216,224 @@
<value>complex</value>
</param>
<param>
- <key>title</key>
- <value>FFT Plot</value>
+ <key>name</key>
+ <value>QT GUI Plot</value>
</param>
<param>
- <key>samp_rate</key>
- <value>samp_rate</value>
+ <key>fftsize</key>
+ <value>1024</value>
+ </param>
+ <param>
+ <key>wintype</key>
+ <value>firdes.WIN_BLACKMAN_hARRIS</value>
</param>
<param>
- <key>baseband_freq</key>
+ <key>fc</key>
<value>0</value>
</param>
<param>
- <key>y_per_div</key>
- <value>10</value>
+ <key>bw</key>
+ <value>samp_rate</value>
+ </param>
+ <param>
+ <key>autoscale</key>
+ <value>False</value>
</param>
<param>
- <key>y_divs</key>
+ <key>average</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>ymin</key>
+ <value>-140</value>
+ </param>
+ <param>
+ <key>ymax</key>
<value>10</value>
</param>
<param>
- <key>ref_level</key>
- <value>50</value>
+ <key>nconnections</key>
+ <value>1</value>
</param>
<param>
- <key>ref_scale</key>
- <value>2.0</value>
+ <key>update_time</key>
+ <value>0.10</value>
</param>
<param>
- <key>fft_size</key>
- <value>1024</value>
+ <key>gui_hint</key>
+ <value></value>
+ </param>
+ <param>
+ <key>label1</key>
+ <value></value>
</param>
<param>
- <key>fft_rate</key>
- <value>30</value>
+ <key>width1</key>
+ <value>1</value>
</param>
<param>
- <key>peak_hold</key>
- <value>False</value>
+ <key>color1</key>
+ <value>"blue"</value>
</param>
<param>
- <key>average</key>
- <value>False</value>
+ <key>alpha1</key>
+ <value>1.0</value>
</param>
<param>
- <key>avg_alpha</key>
- <value>0</value>
+ <key>label2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width2</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color2</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>alpha2</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width3</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color3</key>
+ <value>"green"</value>
+ </param>
+ <param>
+ <key>alpha3</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width4</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color4</key>
+ <value>"black"</value>
</param>
<param>
- <key>win</key>
- <value>None</value>
+ <key>alpha4</key>
+ <value>1.0</value>
</param>
<param>
- <key>win_size</key>
+ <key>label5</key>
<value></value>
</param>
<param>
- <key>grid_pos</key>
+ <key>width5</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color5</key>
+ <value>"cyan"</value>
+ </param>
+ <param>
+ <key>alpha5</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label6</key>
<value></value>
</param>
<param>
- <key>notebook</key>
+ <key>width6</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color6</key>
+ <value>"magenta"</value>
+ </param>
+ <param>
+ <key>alpha6</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label7</key>
<value></value>
</param>
<param>
- <key>freqvar</key>
- <value>None</value>
+ <key>width7</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color7</key>
+ <value>"yellow"</value>
+ </param>
+ <param>
+ <key>alpha7</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label8</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color8</key>
+ <value>"dark red"</value>
+ </param>
+ <param>
+ <key>alpha8</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label9</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color9</key>
+ <value>"dark green"</value>
+ </param>
+ <param>
+ <key>alpha9</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label10</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color10</key>
+ <value>"dark blue"</value>
+ </param>
+ <param>
+ <key>alpha10</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(671, 233)</value>
+ <value>(643, 221)</value>
</param>
<param>
<key>_rotation</key>
@@ -273,30 +441,58 @@
</param>
</block>
<block>
- <key>blocks_throttle</key>
+ <key>variable_qtgui_range</key>
<param>
<key>id</key>
- <value>blocks_throttle_0</value>
+ <value>freq</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
+ <key>label</key>
+ <value>Frequency (Hz)</value>
</param>
<param>
- <key>samples_per_second</key>
- <value>samp_rate</value>
+ <key>value</key>
+ <value>1e3</value>
</param>
<param>
- <key>vlen</key>
+ <key>start</key>
+ <value>-samp_rate/2</value>
+ </param>
+ <param>
+ <key>stop</key>
+ <value>samp_rate/2</value>
+ </param>
+ <param>
+ <key>step</key>
<value>1</value>
</param>
<param>
+ <key>widget</key>
+ <value>counter_slider</value>
+ </param>
+ <param>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
+ </param>
+ <param>
+ <key>min_len</key>
+ <value>200</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value></value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(392, 233)</value>
+ <value>(339, 9)</value>
</param>
<param>
<key>_rotation</key>
@@ -304,42 +500,46 @@
</param>
</block>
<block>
- <key>analog_sig_source_x</key>
+ <key>variable_config</key>
<param>
<key>id</key>
- <value>analog_sig_source_x_0</value>
+ <value>freq_init</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
+ <key>value</key>
+ <value>1000</value>
+ </param>
+ <param>
<key>type</key>
- <value>complex</value>
+ <value>real</value>
</param>
<param>
- <key>samp_rate</key>
- <value>samp_rate</value>
+ <key>config_file</key>
+ <value>/home/mbant/.gnuradio/config.conf</value>
</param>
<param>
- <key>waveform</key>
- <value>analog.GR_COS_WAVE</value>
+ <key>section</key>
+ <value>main</value>
</param>
<param>
- <key>freq</key>
+ <key>option</key>
<value>freq</value>
</param>
<param>
- <key>amp</key>
- <value>1</value>
+ <key>writeback</key>
+ <value>freq</value>
</param>
<param>
- <key>offset</key>
- <value>0</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(173, 201)</value>
+ <value>(168, 0)</value>
</param>
<param>
<key>_rotation</key>
@@ -347,14 +547,14 @@
</param>
</block>
<connection>
- <source_block_id>blocks_throttle_0</source_block_id>
- <sink_block_id>wxgui_fftsink2_0</sink_block_id>
+ <source_block_id>analog_sig_source_x_0</source_block_id>
+ <sink_block_id>blocks_throttle_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>analog_sig_source_x_0</source_block_id>
- <sink_block_id>blocks_throttle_0</sink_block_id>
+ <source_block_id>blocks_throttle_0</source_block_id>
+ <sink_block_id>qtgui_freq_sink_x_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
diff --git a/grc/examples/xmlrpc/xmlrpc_client.grc b/grc/examples/xmlrpc/xmlrpc_client.grc
index 3bb4e7ed3b..45d8af2824 100644
--- a/grc/examples/xmlrpc/xmlrpc_client.grc
+++ b/grc/examples/xmlrpc/xmlrpc_client.grc
@@ -1,6 +1,6 @@
<?xml version='1.0' encoding='ASCII'?>
<flow_graph>
- <timestamp>Thu Jul 24 14:27:44 2008</timestamp>
+ <timestamp>Sat Jul 12 17:10:55 2014</timestamp>
<block>
<key>options</key>
<param>
@@ -29,15 +29,101 @@
</param>
<param>
<key>generate_options</key>
- <value>wx_gui</value>
+ <value>qt_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>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(-2, 0)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </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>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(13, 172)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>xmlrpc_client</key>
+ <param>
+ <key>id</key>
+ <value>xmlrpc_client</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>addr</key>
+ <value>localhost</value>
+ </param>
+ <param>
+ <key>port</key>
+ <value>1234</value>
+ </param>
+ <param>
+ <key>callback</key>
+ <value>set_freq</value>
+ </param>
+ <param>
+ <key>variable</key>
+ <value>freq</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(10, 10)</value>
+ <value>(177, 0)</value>
</param>
<param>
<key>_rotation</key>
@@ -71,8 +157,12 @@
<value>ampl</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(409, 35)</value>
+ <value>(308, 0)</value>
</param>
<param>
<key>_rotation</key>
@@ -83,7 +173,7 @@
<key>xmlrpc_client</key>
<param>
<key>id</key>
- <value>xmlrpc_client</value>
+ <value>xmlrpc_client1</value>
</param>
<param>
<key>_enabled</key>
@@ -99,15 +189,19 @@
</param>
<param>
<key>callback</key>
- <value>set_freq</value>
+ <value>set_offset</value>
</param>
<param>
<key>variable</key>
- <value>freq</value>
+ <value>offset*ampl</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(222, 34)</value>
+ <value>(440, 4)</value>
</param>
<param>
<key>_rotation</key>
@@ -115,7 +209,7 @@
</param>
</block>
<block>
- <key>variable_slider</key>
+ <key>variable_qtgui_range</key>
<param>
<key>id</key>
<value>freq</value>
@@ -133,28 +227,40 @@
<value>1000</value>
</param>
<param>
- <key>min</key>
+ <key>start</key>
<value>0</value>
</param>
<param>
- <key>max</key>
- <value>5000</value>
+ <key>stop</key>
+ <value>5e3</value>
+ </param>
+ <param>
+ <key>step</key>
+ <value>1</value>
</param>
<param>
- <key>num_steps</key>
- <value>100</value>
+ <key>widget</key>
+ <value>counter_slider</value>
</param>
<param>
- <key>slider_type</key>
- <value>horizontal</value>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
</param>
<param>
- <key>grid_pos</key>
- <value>0, 0, 1, 2</value>
+ <key>min_len</key>
+ <value>200</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value>0,0,1,2</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(207, 162)</value>
+ <value>(209, 165)</value>
</param>
<param>
<key>_rotation</key>
@@ -162,7 +268,7 @@
</param>
</block>
<block>
- <key>variable_slider</key>
+ <key>variable_qtgui_range</key>
<param>
<key>id</key>
<value>ampl</value>
@@ -180,28 +286,40 @@
<value>1</value>
</param>
<param>
- <key>min</key>
+ <key>start</key>
<value>0</value>
</param>
<param>
- <key>max</key>
+ <key>stop</key>
<value>2</value>
</param>
<param>
- <key>num_steps</key>
- <value>100</value>
+ <key>step</key>
+ <value>.1</value>
+ </param>
+ <param>
+ <key>widget</key>
+ <value>counter_slider</value>
</param>
<param>
- <key>slider_type</key>
- <value>horizontal</value>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
</param>
<param>
- <key>grid_pos</key>
- <value>1, 0, 1, 2</value>
+ <key>min_len</key>
+ <value>200</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value>1,0,1,2</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(397, 167)</value>
+ <value>(367, 158)</value>
</param>
<param>
<key>_rotation</key>
@@ -209,7 +327,7 @@
</param>
</block>
<block>
- <key>variable_chooser</key>
+ <key>variable_qtgui_chooser</key>
<param>
<key>id</key>
<value>offset</value>
@@ -223,90 +341,88 @@
<value>Offset</value>
</param>
<param>
- <key>value_index</key>
- <value>1</value>
+ <key>type</key>
+ <value>int</value>
</param>
<param>
- <key>choices</key>
- <value>[-1, 0, 1]</value>
+ <key>num_opts</key>
+ <value>3</value>
</param>
<param>
- <key>labels</key>
- <value>["neg", "zero", "pos"]</value>
+ <key>value</key>
+ <value>0</value>
</param>
<param>
- <key>chooser_type</key>
- <value>radio_buttons_horizontal</value>
+ <key>options</key>
+ <value>[0, 1, 2]</value>
</param>
<param>
- <key>grid_pos</key>
- <value>2, 0, 1, 2</value>
+ <key>labels</key>
+ <value>[]</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(596, 177)</value>
+ <key>option0</key>
+ <value>-1</value>
</param>
<param>
- <key>_rotation</key>
+ <key>label0</key>
+ <value>neg</value>
+ </param>
+ <param>
+ <key>option1</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>xmlrpc_client</key>
<param>
- <key>id</key>
- <value>xmlrpc_client1</value>
+ <key>label1</key>
+ <value>zero</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>option2</key>
+ <value>1</value>
</param>
<param>
- <key>addr</key>
- <value>localhost</value>
+ <key>label2</key>
+ <value>pos</value>
</param>
<param>
- <key>port</key>
- <value>1234</value>
+ <key>option3</key>
+ <value>3</value>
</param>
<param>
- <key>callback</key>
- <value>set_offset</value>
+ <key>label3</key>
+ <value></value>
</param>
<param>
- <key>variable</key>
- <value>offset*ampl</value>
+ <key>option4</key>
+ <value>4</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(608, 39)</value>
+ <key>label4</key>
+ <value></value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>widget</key>
+ <value>combo_box</value>
</param>
- </block>
- <block>
- <key>variable</key>
<param>
- <key>id</key>
- <value>samp_rate</value>
+ <key>orient</key>
+ <value>Qt.QVBoxLayout</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>gui_hint</key>
+ <value>2,0,1,2</value>
</param>
<param>
- <key>value</key>
- <value>32000</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(13, 172)</value>
+ <value>(531, 145)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
</block>
-</flow_graph> \ No newline at end of file
+</flow_graph>
diff --git a/grc/examples/xmlrpc/xmlrpc_server.grc b/grc/examples/xmlrpc/xmlrpc_server.grc
index 3a133fd7c4..d210b2694e 100644
--- a/grc/examples/xmlrpc/xmlrpc_server.grc
+++ b/grc/examples/xmlrpc/xmlrpc_server.grc
@@ -1,6 +1,6 @@
<?xml version='1.0' encoding='ASCII'?>
<flow_graph>
- <timestamp>Sat Nov 10 15:20:55 2012</timestamp>
+ <timestamp>Sat Jul 12 17:11:40 2014</timestamp>
<block>
<key>options</key>
<param>
@@ -29,7 +29,7 @@
</param>
<param>
<key>generate_options</key>
- <value>wx_gui</value>
+ <value>qt_gui</value>
</param>
<param>
<key>category</key>
@@ -52,8 +52,12 @@
<value></value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(10, 10)</value>
+ <value>(0, -1)</value>
</param>
<param>
<key>_rotation</key>
@@ -64,7 +68,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>offset</value>
+ <value>ampl</value>
</param>
<param>
<key>_enabled</key>
@@ -72,11 +76,42 @@
</param>
<param>
<key>value</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(4, 291)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
<value>0</value>
</param>
+ </block>
+ <block>
+ <key>variable</key>
+ <param>
+ <key>id</key>
+ <value>freq</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>1000</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
<param>
<key>_coordinate</key>
- <value>(12, 390)</value>
+ <value>(2, 213)</value>
</param>
<param>
<key>_rotation</key>
@@ -84,26 +119,26 @@
</param>
</block>
<block>
- <key>xmlrpc_server</key>
+ <key>variable</key>
<param>
<key>id</key>
- <value>xmlrpc_server</value>
+ <value>samp_rate</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>addr</key>
- <value>localhost</value>
+ <key>value</key>
+ <value>32000</value>
</param>
<param>
- <key>port</key>
- <value>1234</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(395, 240)</value>
+ <value>(2, 136)</value>
</param>
<param>
<key>_rotation</key>
@@ -111,74 +146,136 @@
</param>
</block>
<block>
- <key>wxgui_scopesink2</key>
+ <key>variable</key>
<param>
<key>id</key>
- <value>wxgui_scopesink2</value>
+ <value>offset</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>float</value>
+ <key>value</key>
+ <value>0</value>
</param>
<param>
- <key>title</key>
- <value>Scope Plot</value>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(3, 366)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>analog_sig_source_x</key>
+ <param>
+ <key>id</key>
+ <value>analog_sig_source_x_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>float</value>
</param>
<param>
<key>samp_rate</key>
<value>samp_rate</value>
</param>
<param>
- <key>v_scale</key>
+ <key>waveform</key>
+ <value>analog.GR_COS_WAVE</value>
+ </param>
+ <param>
+ <key>freq</key>
+ <value>freq</value>
+ </param>
+ <param>
+ <key>amp</key>
+ <value>ampl</value>
+ </param>
+ <param>
+ <key>offset</key>
+ <value>offset</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
<value>0</value>
</param>
<param>
- <key>v_offset</key>
+ <key>maxoutbuf</key>
<value>0</value>
</param>
<param>
- <key>t_scale</key>
- <value>.001</value>
+ <key>_coordinate</key>
+ <value>(175, 0)</value>
</param>
<param>
- <key>ac_couple</key>
- <value>False</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
+ </block>
+ <block>
+ <key>blocks_throttle</key>
<param>
- <key>xy_mode</key>
- <value>False</value>
+ <key>id</key>
+ <value>blocks_throttle</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>num_inputs</key>
+ <key>type</key>
+ <value>float</value>
+ </param>
+ <param>
+ <key>samples_per_second</key>
+ <value>samp_rate</value>
+ </param>
+ <param>
+ <key>vlen</key>
<value>1</value>
</param>
<param>
- <key>win_size</key>
- <value></value>
+ <key>ignoretag</key>
+ <value>True</value>
</param>
<param>
- <key>grid_pos</key>
- <value>0, 0, 2, 4</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>notebook</key>
+ <key>affinity</key>
<value></value>
</param>
<param>
- <key>trig_mode</key>
- <value>wxgui.TRIG_MODE_AUTO</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>y_axis_label</key>
- <value>Counts</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(623, 28)</value>
+ <value>(399, 35)</value>
</param>
<param>
<key>_rotation</key>
@@ -186,10 +283,41 @@
</param>
</block>
<block>
- <key>wxgui_fftsink2</key>
+ <key>xmlrpc_server</key>
<param>
<key>id</key>
- <value>wxgui_fftsink2</value>
+ <value>xmlrpc_server</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>addr</key>
+ <value>localhost</value>
+ </param>
+ <param>
+ <key>port</key>
+ <value>1234</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(129, 137)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>qtgui_time_sink_x</key>
+ <param>
+ <key>id</key>
+ <value>qtgui_time_sink_x_0</value>
</param>
<param>
<key>_enabled</key>
@@ -200,176 +328,320 @@
<value>float</value>
</param>
<param>
- <key>title</key>
- <value>FFT Plot</value>
+ <key>name</key>
+ <value>Scope Plot</value>
</param>
<param>
- <key>samp_rate</key>
+ <key>size</key>
+ <value>1024</value>
+ </param>
+ <param>
+ <key>srate</key>
<value>samp_rate</value>
</param>
<param>
- <key>baseband_freq</key>
- <value>0</value>
+ <key>autoscale</key>
+ <value>False</value>
</param>
<param>
- <key>y_per_div</key>
- <value>10</value>
+ <key>ymin</key>
+ <value>-1</value>
</param>
<param>
- <key>y_divs</key>
- <value>8</value>
+ <key>ymax</key>
+ <value>1</value>
</param>
<param>
- <key>ref_level</key>
- <value>50</value>
+ <key>nconnections</key>
+ <value>1</value>
</param>
<param>
- <key>ref_scale</key>
- <value>2.0</value>
+ <key>update_time</key>
+ <value>0.10</value>
</param>
<param>
- <key>fft_size</key>
- <value>512</value>
+ <key>entags</key>
+ <value>True</value>
</param>
<param>
- <key>fft_rate</key>
- <value>15</value>
+ <key>gui_hint</key>
+ <value>0, 0, 2, 4</value>
</param>
<param>
- <key>peak_hold</key>
- <value>False</value>
+ <key>tr_mode</key>
+ <value>qtgui.TRIG_MODE_FREE</value>
</param>
<param>
- <key>average</key>
- <value>False</value>
+ <key>tr_slope</key>
+ <value>qtgui.TRIG_SLOPE_POS</value>
</param>
<param>
- <key>avg_alpha</key>
+ <key>tr_level</key>
+ <value>0.0</value>
+ </param>
+ <param>
+ <key>tr_delay</key>
<value>0</value>
</param>
<param>
- <key>win</key>
- <value>None</value>
+ <key>tr_chan</key>
+ <value>0</value>
</param>
<param>
- <key>win_size</key>
+ <key>tr_tag</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>label1</key>
<value></value>
</param>
<param>
- <key>grid_pos</key>
- <value>2, 0, 2, 4</value>
+ <key>width1</key>
+ <value>1</value>
</param>
<param>
- <key>notebook</key>
+ <key>color1</key>
+ <value>"blue"</value>
+ </param>
+ <param>
+ <key>style1</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker1</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha1</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label2</key>
<value></value>
</param>
<param>
- <key>freqvar</key>
- <value>None</value>
+ <key>width2</key>
+ <value>1</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(630, 233)</value>
+ <key>color2</key>
+ <value>"red"</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>style2</key>
+ <value>1</value>
</param>
- </block>
- <block>
- <key>variable</key>
<param>
- <key>id</key>
- <value>samp_rate</value>
+ <key>marker2</key>
+ <value>-1</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>alpha2</key>
+ <value>1.0</value>
</param>
<param>
- <key>value</key>
- <value>32000</value>
+ <key>label3</key>
+ <value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(11, 160)</value>
+ <key>width3</key>
+ <value>1</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>color3</key>
+ <value>"green"</value>
</param>
- </block>
- <block>
- <key>variable</key>
<param>
- <key>id</key>
- <value>freq</value>
+ <key>style3</key>
+ <value>1</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>marker3</key>
+ <value>-1</value>
</param>
<param>
- <key>value</key>
- <value>1000</value>
+ <key>alpha3</key>
+ <value>1.0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(11, 237)</value>
+ <key>label4</key>
+ <value></value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>width4</key>
+ <value>1</value>
</param>
- </block>
- <block>
- <key>variable</key>
<param>
- <key>id</key>
- <value>ampl</value>
+ <key>color4</key>
+ <value>"black"</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>style4</key>
+ <value>1</value>
</param>
<param>
- <key>value</key>
+ <key>marker4</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha4</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width5</key>
<value>1</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(13, 315)</value>
+ <key>color5</key>
+ <value>"cyan"</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>style5</key>
+ <value>1</value>
</param>
- </block>
- <block>
- <key>blocks_throttle</key>
<param>
- <key>id</key>
- <value>blocks_throttle</value>
+ <key>marker5</key>
+ <value>-1</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>alpha5</key>
+ <value>1.0</value>
</param>
<param>
- <key>type</key>
- <value>float</value>
+ <key>label6</key>
+ <value></value>
</param>
<param>
- <key>samples_per_second</key>
- <value>samp_rate</value>
+ <key>width6</key>
+ <value>1</value>
</param>
<param>
- <key>vlen</key>
+ <key>color6</key>
+ <value>"magenta"</value>
+ </param>
+ <param>
+ <key>style6</key>
<value>1</value>
</param>
<param>
+ <key>marker6</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha6</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width7</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color7</key>
+ <value>"yellow"</value>
+ </param>
+ <param>
+ <key>style7</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker7</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha7</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label8</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color8</key>
+ <value>"dark red"</value>
+ </param>
+ <param>
+ <key>style8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker8</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha8</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label9</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color9</key>
+ <value>"dark green"</value>
+ </param>
+ <param>
+ <key>style9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker9</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha9</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label10</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color10</key>
+ <value>"blue"</value>
+ </param>
+ <param>
+ <key>style10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>marker10</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>alpha10</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(386, 93)</value>
+ <value>(644, 13)</value>
</param>
<param>
<key>_rotation</key>
@@ -377,10 +649,10 @@
</param>
</block>
<block>
- <key>analog_sig_source_x</key>
+ <key>qtgui_freq_sink_x</key>
<param>
<key>id</key>
- <value>analog_sig_source_x_0</value>
+ <value>qtgui_freq_sink_x_0</value>
</param>
<param>
<key>_enabled</key>
@@ -391,28 +663,224 @@
<value>float</value>
</param>
<param>
- <key>samp_rate</key>
+ <key>name</key>
+ <value>Spectrum Plot</value>
+ </param>
+ <param>
+ <key>fftsize</key>
+ <value>1024</value>
+ </param>
+ <param>
+ <key>wintype</key>
+ <value>firdes.WIN_BLACKMAN_hARRIS</value>
+ </param>
+ <param>
+ <key>fc</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>bw</key>
<value>samp_rate</value>
</param>
<param>
- <key>waveform</key>
- <value>analog.GR_COS_WAVE</value>
+ <key>autoscale</key>
+ <value>False</value>
</param>
<param>
- <key>freq</key>
- <value>freq</value>
+ <key>average</key>
+ <value>1.0</value>
</param>
<param>
- <key>amp</key>
- <value>ampl</value>
+ <key>ymin</key>
+ <value>-140</value>
</param>
<param>
- <key>offset</key>
- <value>offset</value>
+ <key>ymax</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>nconnections</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>update_time</key>
+ <value>0.10</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value>2, 0, 2, 4</value>
+ </param>
+ <param>
+ <key>label1</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width1</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color1</key>
+ <value>"blue"</value>
+ </param>
+ <param>
+ <key>alpha1</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width2</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color2</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>alpha2</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width3</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color3</key>
+ <value>"green"</value>
+ </param>
+ <param>
+ <key>alpha3</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width4</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color4</key>
+ <value>"black"</value>
+ </param>
+ <param>
+ <key>alpha4</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width5</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color5</key>
+ <value>"cyan"</value>
+ </param>
+ <param>
+ <key>alpha5</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width6</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color6</key>
+ <value>"magenta"</value>
+ </param>
+ <param>
+ <key>alpha6</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width7</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color7</key>
+ <value>"yellow"</value>
+ </param>
+ <param>
+ <key>alpha7</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label8</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color8</key>
+ <value>"dark red"</value>
+ </param>
+ <param>
+ <key>alpha8</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label9</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color9</key>
+ <value>"dark green"</value>
+ </param>
+ <param>
+ <key>alpha9</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>label10</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>color10</key>
+ <value>"dark blue"</value>
+ </param>
+ <param>
+ <key>alpha10</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(164, 154)</value>
+ <value>(644, 126)</value>
</param>
<param>
<key>_rotation</key>
@@ -420,20 +888,20 @@
</param>
</block>
<connection>
- <source_block_id>blocks_throttle</source_block_id>
- <sink_block_id>wxgui_scopesink2</sink_block_id>
+ <source_block_id>analog_sig_source_x_0</source_block_id>
+ <sink_block_id>blocks_throttle</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>blocks_throttle</source_block_id>
- <sink_block_id>wxgui_fftsink2</sink_block_id>
+ <sink_block_id>qtgui_time_sink_x_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>analog_sig_source_x_0</source_block_id>
- <sink_block_id>blocks_throttle</sink_block_id>
+ <source_block_id>blocks_throttle</source_block_id>
+ <sink_block_id>qtgui_freq_sink_x_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
diff --git a/grc/gui/ActionHandler.py b/grc/gui/ActionHandler.py
index 2c1c9942d7..18b7c9aee0 100644
--- a/grc/gui/ActionHandler.py
+++ b/grc/gui/ActionHandler.py
@@ -118,6 +118,7 @@ class ActionHandler:
Actions.TYPES_WINDOW_DISPLAY, Actions.TOGGLE_BLOCKS_WINDOW,
Actions.TOGGLE_REPORTS_WINDOW, Actions.TOGGLE_HIDE_DISABLED_BLOCKS,
Actions.TOOLS_RUN_FDESIGN, Actions.TOGGLE_SCROLL_LOCK, Actions.CLEAR_REPORTS,
+ Actions.TOGGLE_AUTO_HIDE_PORT_LABELS
): action.set_sensitive(True)
if ParseXML.xml_failures:
Messages.send_xml_errors_if_any(ParseXML.xml_failures)
@@ -136,6 +137,7 @@ class ActionHandler:
Actions.TOGGLE_REPORTS_WINDOW.set_active(Preferences.reports_window_visibility())
Actions.TOGGLE_BLOCKS_WINDOW.set_active(Preferences.blocks_window_visibility())
Actions.TOGGLE_SCROLL_LOCK.set_active(Preferences.scroll_lock())
+ Actions.TOGGLE_AUTO_HIDE_PORT_LABELS.set_active(Preferences.auto_hide_port_labels())
elif action == Actions.APPLICATION_QUIT:
if self.main_window.close_pages():
gtk.main_quit()
@@ -383,6 +385,9 @@ class ActionHandler:
self.main_window.text_display.clear()
elif action == Actions.TOGGLE_HIDE_DISABLED_BLOCKS:
Actions.NOTHING_SELECT()
+ elif action == Actions.TOGGLE_AUTO_HIDE_PORT_LABELS:
+ Preferences.auto_hide_port_labels(action.get_active())
+ self.main_window.get_flow_graph().create_shapes()
##################################################
# Param Modifications
##################################################
diff --git a/grc/gui/Actions.py b/grc/gui/Actions.py
index a9ab41230d..484952b53a 100644
--- a/grc/gui/Actions.py
+++ b/grc/gui/Actions.py
@@ -242,6 +242,10 @@ TOGGLE_HIDE_DISABLED_BLOCKS = ToggleAction(
stock_id=gtk.STOCK_MISSING_IMAGE,
keypresses=(gtk.keysyms.d, gtk.gdk.CONTROL_MASK),
)
+TOGGLE_AUTO_HIDE_PORT_LABELS = ToggleAction(
+ label='Auto-hide port _labels',
+ tooltip='Automatically hide port labels',
+)
BLOCK_CREATE_HIER = Action(
label='C_reate Hier',
tooltip='Create hier block from selected blocks',
diff --git a/grc/gui/Bars.py b/grc/gui/Bars.py
index 11e35c992b..8dae0f6981 100644
--- a/grc/gui/Bars.py
+++ b/grc/gui/Bars.py
@@ -97,6 +97,9 @@ MENU_BAR_LIST = (
Actions.TOGGLE_SCROLL_LOCK,
Actions.CLEAR_REPORTS,
None,
+ Actions.TOGGLE_HIDE_DISABLED_BLOCKS,
+ Actions.TOGGLE_AUTO_HIDE_PORT_LABELS,
+ None,
Actions.ERRORS_WINDOW_DISPLAY,
Actions.FIND_BLOCKS,
]),
diff --git a/grc/gui/Block.py b/grc/gui/Block.py
index 49c0361eb9..0afb351647 100644
--- a/grc/gui/Block.py
+++ b/grc/gui/Block.py
@@ -175,12 +175,19 @@ class Block(Element):
#calculate width and height needed
self.W = self.label_width + 2*BLOCK_LABEL_PADDING
self.H = max(*(
- [self.label_height+2*BLOCK_LABEL_PADDING] + [2*PORT_BORDER_SEPARATION + \
- sum([port.H + PORT_SEPARATION for port in ports]) - PORT_SEPARATION
- for ports in (self.get_sources_gui(), self.get_sinks_gui())] +
- [4*PORT_BORDER_SEPARATION + \
- sum([(port.H) + PORT_SEPARATION for port in ports]) - PORT_SEPARATION
- for ports in ([i for i in self.get_sources_gui() if i.get_type() == 'bus'], [i for i in self.get_sinks_gui() if i.get_type() == 'bus'])]
+ [ # labels
+ self.label_height + 2 * BLOCK_LABEL_PADDING
+ ] +
+ [ # ports
+ 2 * PORT_BORDER_SEPARATION +
+ sum([port.H + PORT_SEPARATION for port in ports if not port.get_hide()]) - PORT_SEPARATION
+ for ports in (self.get_sources_gui(), self.get_sinks_gui())
+ ] +
+ [ # bus ports only
+ 4 * PORT_BORDER_SEPARATION +
+ sum([port.H + PORT_SEPARATION for port in ports if port.get_type() == 'bus']) - PORT_SEPARATION
+ for ports in (self.get_sources_gui(), self.get_sinks_gui())
+ ]
))
def draw(self, gc, window):
@@ -205,7 +212,8 @@ class Block(Element):
window.draw_drawable(gc, self.vertical_label, 0, 0, x+(self.H-self.label_height)/2, y+BLOCK_LABEL_PADDING, -1, -1)
#draw ports
for port in self.get_ports_gui():
- port.draw(gc, window)
+ if not port.get_hide():
+ port.draw(gc, window)
def what_is_selected(self, coor, coor_m=None):
"""
diff --git a/grc/gui/Element.py b/grc/gui/Element.py
index c43f0eb35c..95a4e2edab 100644
--- a/grc/gui/Element.py
+++ b/grc/gui/Element.py
@@ -262,3 +262,9 @@ class Element(object):
if rotation not in POSSIBLE_ROTATIONS:
raise Exception('"%s" is not one of the possible rotations: (%s)'%(rotation, POSSIBLE_ROTATIONS))
self.rotation = rotation
+
+ def mouse_over(self):
+ pass
+
+ def mouse_out(self):
+ pass
diff --git a/grc/gui/FlowGraph.py b/grc/gui/FlowGraph.py
index 2b3d08628a..bfe8fbfa4f 100644
--- a/grc/gui/FlowGraph.py
+++ b/grc/gui/FlowGraph.py
@@ -51,6 +51,8 @@ class FlowGraph(Element):
#selected ports
self._old_selected_port = None
self._new_selected_port = None
+ # current mouse hover element
+ self.element_under_mouse = None
#context menu
self._context_menu = gtk.Menu()
for action in [
@@ -544,35 +546,56 @@ class FlowGraph(Element):
def handle_mouse_motion(self, coordinate):
"""
- The mouse has moved, respond to mouse dragging.
+ The mouse has moved, respond to mouse dragging or notify elements
Move a selected element to the new coordinate.
Auto-scroll the scroll bars at the boundaries.
"""
#to perform a movement, the mouse must be pressed
# (no longer checking pending events via gtk.events_pending() - always true in Windows)
- if not self.mouse_pressed: return
- #perform autoscrolling
- width, height = self.get_size()
- x, y = coordinate
- h_adj = self.get_scroll_pane().get_hadjustment()
- v_adj = self.get_scroll_pane().get_vadjustment()
- for pos, length, adj, adj_val, adj_len in (
- (x, width, h_adj, h_adj.get_value(), h_adj.page_size),
- (y, height, v_adj, v_adj.get_value(), v_adj.page_size),
- ):
- #scroll if we moved near the border
- if pos-adj_val > adj_len-SCROLL_PROXIMITY_SENSITIVITY and adj_val+SCROLL_DISTANCE < length-adj_len:
- adj.set_value(adj_val+SCROLL_DISTANCE)
- adj.emit('changed')
- elif pos-adj_val < SCROLL_PROXIMITY_SENSITIVITY:
- adj.set_value(adj_val-SCROLL_DISTANCE)
- adj.emit('changed')
- #remove the connection if selected in drag event
- if len(self.get_selected_elements()) == 1 and self.get_selected_element().is_connection():
- Actions.ELEMENT_DELETE()
- #move the selected elements and record the new coordinate
- X, Y = self.get_coordinate()
- if not self.get_ctrl_mask(): self.move_selected((int(x - X), int(y - Y)))
- self.set_coordinate((x, y))
- #queue draw for animation
- self.queue_draw()
+ if not self.mouse_pressed:
+ # only continue if mouse-over stuff is enabled (just the auto-hide port label stuff for now)
+ if not Actions.TOGGLE_AUTO_HIDE_PORT_LABELS.get_active(): return
+ redraw = False
+ for element in reversed(self.get_elements()):
+ over_element = element.what_is_selected(coordinate)
+ if not over_element: continue
+ if over_element != self.element_under_mouse: # over sth new
+ if self.element_under_mouse:
+ redraw |= self.element_under_mouse.mouse_out() or False
+ self.element_under_mouse = over_element
+ redraw |= over_element.mouse_over() or False
+ break
+ else:
+ if self.element_under_mouse:
+ redraw |= self.element_under_mouse.mouse_out() or False
+ self.element_under_mouse = None
+ if redraw:
+ #self.create_labels()
+ self.create_shapes()
+ self.queue_draw()
+ else:
+ #perform autoscrolling
+ width, height = self.get_size()
+ x, y = coordinate
+ h_adj = self.get_scroll_pane().get_hadjustment()
+ v_adj = self.get_scroll_pane().get_vadjustment()
+ for pos, length, adj, adj_val, adj_len in (
+ (x, width, h_adj, h_adj.get_value(), h_adj.page_size),
+ (y, height, v_adj, v_adj.get_value(), v_adj.page_size),
+ ):
+ #scroll if we moved near the border
+ if pos-adj_val > adj_len-SCROLL_PROXIMITY_SENSITIVITY and adj_val+SCROLL_DISTANCE < length-adj_len:
+ adj.set_value(adj_val+SCROLL_DISTANCE)
+ adj.emit('changed')
+ elif pos-adj_val < SCROLL_PROXIMITY_SENSITIVITY:
+ adj.set_value(adj_val-SCROLL_DISTANCE)
+ adj.emit('changed')
+ #remove the connection if selected in drag event
+ if len(self.get_selected_elements()) == 1 and self.get_selected_element().is_connection():
+ Actions.ELEMENT_DELETE()
+ #move the selected elements and record the new coordinate
+ X, Y = self.get_coordinate()
+ if not self.get_ctrl_mask(): self.move_selected((int(x - X), int(y - Y)))
+ self.set_coordinate((x, y))
+ #queue draw for animation
+ self.queue_draw()
diff --git a/grc/gui/Port.py b/grc/gui/Port.py
index 8b4edfa430..b81b162f6e 100644
--- a/grc/gui/Port.py
+++ b/grc/gui/Port.py
@@ -23,14 +23,18 @@ from Constants import \
CONNECTOR_EXTENSION_INCREMENT, \
PORT_LABEL_PADDING, PORT_MIN_WIDTH
import Utils
+import Actions
import Colors
import pygtk
pygtk.require('2.0')
import gtk
+PORT_HIDDEN_MARKUP_TMPL="""\
+<span foreground="black" font_desc="Sans 7.5"> </span>"""
PORT_MARKUP_TMPL="""\
<span foreground="black" font_desc="Sans 7.5">$encode($port.get_name())</span>"""
+
class Port(Element):
"""The graphical port."""
@@ -40,7 +44,10 @@ class Port(Element):
Create list of connector coordinates.
"""
Element.__init__(self)
- self.connector_coordinates = dict()
+ self.W = self.H = self.w = self.h = 0
+ self._connector_coordinate = (0,0)
+ self._connector_length = 0
+ self._label_hidden = True
def create_shapes(self):
"""Create new areas and labels for the port."""
@@ -52,40 +59,42 @@ class Port(Element):
elif self.is_sink(): ports = self.get_parent().get_sinks_gui()
#get the max width
self.W = max([port.W for port in ports] + [PORT_MIN_WIDTH])
+ W = self.W if not self.label_hidden() else 10
#get a numeric index for this port relative to its sibling ports
try:
index = ports.index(self)
except:
if hasattr(self, '_connector_length'):
- del self._connector_length;
+ del self._connector_length
return
- length = len(ports)
+ length = len(filter(lambda p: not p.get_hide(), ports))
#reverse the order of ports for these rotations
if rotation in (180, 270): index = length-index-1
offset = (self.get_parent().H - length*self.H - (length-1)*PORT_SEPARATION)/2
#create areas and connector coordinates
if (self.is_sink() and rotation == 0) or (self.is_source() and rotation == 180):
- x = -1*self.W
+ x = -1*W
y = (PORT_SEPARATION+self.H)*index+offset
- self.add_area((x, y), (self.W, self.H))
+ self.add_area((x, y), (W, self.H))
self._connector_coordinate = (x-1, y+self.H/2)
elif (self.is_source() and rotation == 0) or (self.is_sink() and rotation == 180):
x = self.get_parent().W
y = (PORT_SEPARATION+self.H)*index+offset
- self.add_area((x, y), (self.W, self.H))
- self._connector_coordinate = (x+1+self.W, y+self.H/2)
+ self.add_area((x, y), (W, self.H))
+ self._connector_coordinate = (x+1+W, y+self.H/2)
elif (self.is_source() and rotation == 90) or (self.is_sink() and rotation == 270):
- y = -1*self.W
+ y = -1*W
x = (PORT_SEPARATION+self.H)*index+offset
- self.add_area((x, y), (self.H, self.W))
+ self.add_area((x, y), (self.H, W))
self._connector_coordinate = (x+self.H/2, y-1)
elif (self.is_sink() and rotation == 90) or (self.is_source() and rotation == 270):
y = self.get_parent().W
x = (PORT_SEPARATION+self.H)*index+offset
- self.add_area((x, y), (self.H, self.W))
- self._connector_coordinate = (x+self.H/2, y+1+self.W)
+ self.add_area((x, y), (self.H, W))
+ self._connector_coordinate = (x+self.H/2, y+1+W)
#the connector length
self._connector_length = CONNECTOR_EXTENSION_MINIMAL + CONNECTOR_EXTENSION_INCREMENT*index
+
def modify_height(self, start_height):
type_dict = {'bus':(lambda a: a * 3)};
@@ -102,8 +111,8 @@ class Port(Element):
layout = gtk.DrawingArea().create_pango_layout('')
layout.set_markup(Utils.parse_template(PORT_MARKUP_TMPL, port=self))
self.w, self.h = layout.get_pixel_size()
- self.W, self.H = 2*PORT_LABEL_PADDING+self.w, 2*PORT_LABEL_PADDING+self.h
- self.H = self.modify_height(self.H);
+ self.W, self.H = 2*PORT_LABEL_PADDING + self.w, 2*PORT_LABEL_PADDING+self.h
+ self.H = self.modify_height(self.H)
#create the pixmap
pixmap = self.get_parent().get_parent().new_pixmap(self.w, self.h)
gc = pixmap.new_gc()
@@ -129,6 +138,8 @@ class Port(Element):
border_color=self.is_highlighted() and Colors.HIGHLIGHT_COLOR or
self.get_parent().is_dummy_block() and Colors.MISSING_BLOCK_BORDER_COLOR or Colors.BORDER_COLOR,
)
+ if self.label_hidden():
+ return
X,Y = self.get_coordinate()
(x,y),(w,h) = self._areas_list[0] #use the first area's sizes to place the labels
if self.is_horizontal():
@@ -143,9 +154,9 @@ class Port(Element):
Returns:
the connector coordinate (x, y) tuple
"""
- x,y = self._connector_coordinate
- X,Y = self.get_coordinate()
- return (x+X, y+Y)
+ x, y = self._connector_coordinate
+ X, Y = self.get_coordinate()
+ return (x + X, y + Y)
def get_connector_direction(self):
"""
@@ -222,3 +233,26 @@ class Port(Element):
the parent's highlighting status
"""
return self.get_parent().is_highlighted()
+
+ def label_hidden(self):
+ """
+ Figure out if the label should be shown
+
+ Returns:
+ true if the label should be hidden
+ """
+ return self._label_hidden and Actions.TOGGLE_AUTO_HIDE_PORT_LABELS.get_active()
+
+ def mouse_over(self):
+ """
+ Called from flow graph on mouse-over
+ """
+ self._label_hidden = False
+ return Actions.TOGGLE_AUTO_HIDE_PORT_LABELS.get_active() # only redraw if necessary
+
+ def mouse_out(self):
+ """
+ Called from flow graph on mouse-out
+ """
+ self._label_hidden = True
+ return Actions.TOGGLE_AUTO_HIDE_PORT_LABELS.get_active() # only redraw if necessary
diff --git a/grc/gui/Preferences.py b/grc/gui/Preferences.py
index a6bd0d6603..d2ffc71410 100644
--- a/grc/gui/Preferences.py
+++ b/grc/gui/Preferences.py
@@ -101,3 +101,9 @@ def scroll_lock(visible=None):
else:
try: return _config_parser.getboolean('main', 'scroll_lock')
except: return True
+
+def auto_hide_port_labels(hide=None):
+ if hide is not None: _config_parser.set('main', 'auto_hide_port_labels', hide)
+ else:
+ try: return _config_parser.getboolean('main', 'auto_hide_port_labels')
+ except: return True
diff --git a/grc/python/Block.py b/grc/python/Block.py
index 7a1c3a254f..9556e8f061 100644
--- a/grc/python/Block.py
+++ b/grc/python/Block.py
@@ -19,6 +19,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
from .. base.Block import Block as _Block
from .. gui.Block import Block as _GUIBlock
+from . FlowGraph import _variable_matcher
import extract_docs
class Block(_Block, _GUIBlock):
@@ -90,6 +91,14 @@ class Block(_Block, _GUIBlock):
if not self.get_parent().evaluate(check_res):
self.add_error_message('Check "%s" failed.'%check)
except: self.add_error_message('Check "%s" did not evaluate.'%check)
+ # for variables check the value (only if var_value is used
+ if _variable_matcher.match(self.get_key()) and self._var_value != '$value':
+ value = self._var_value
+ try:
+ value = self.get_var_value()
+ self.get_parent().evaluate(value)
+ except Exception as err:
+ self.add_error_message('Value "%s" cannot be evaluated:\n%s' % (value, err))
def rewrite(self):
"""
@@ -169,6 +178,7 @@ class Block(_Block, _GUIBlock):
def get_make(self): return self.resolve_dependencies(self._make)
def get_var_make(self): return self.resolve_dependencies(self._var_make)
+ def get_var_value(self): return self.resolve_dependencies(self._var_value)
def get_callbacks(self):
"""
diff --git a/grc/python/FlowGraph.py b/grc/python/FlowGraph.py
index 114f708cb2..daec2d4310 100644
--- a/grc/python/FlowGraph.py
+++ b/grc/python/FlowGraph.py
@@ -262,7 +262,7 @@ class FlowGraph(_FlowGraph, _GUIFlowGraph):
#load variables
for variable in self.get_variables():
try:
- e = eval(variable.get_param('value').to_code(), n, n)
+ e = eval(variable.get_var_value(), n, n)
n[variable.get_id()] = e
except: pass
#make namespace public
diff --git a/grc/python/block.dtd b/grc/python/block.dtd
index 18e53fda2a..576b428111 100644
--- a/grc/python/block.dtd
+++ b/grc/python/block.dtd
@@ -25,15 +25,15 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
Top level element.
A block contains a name, ...parameters list, and list of IO ports.
-->
-<!ELEMENT block (name, key, category?, throttle?, import*, var_make?, make, callback*, param_tab_order?, param*, bus_sink?, bus_source?, check*, sink*, source*, bus_structure_sink?, bus_structure_source?, doc?, grc_source?)>
+<!ELEMENT block (name, key, category?, throttle?, import*, var_make?, var_value?, make, callback*, param_tab_order?, param*, bus_sink?, bus_source?, check*, sink*, source*, bus_structure_sink?, bus_structure_source?, doc?, grc_source?)>
<!--
Sub level elements.
-->
<!ELEMENT param_tab_order (tab+)>
<!ELEMENT param (base_key?, name, key, value?, type?, hide?, option*, tab?)>
<!ELEMENT option (name, key, opt*)>
-<!ELEMENT sink (name, type, vlen?, nports?, optional?)>
-<!ELEMENT source (name, type, vlen?, nports?, optional?)>
+<!ELEMENT sink (name, type, vlen?, nports?, optional?, hide?)>
+<!ELEMENT source (name, type, vlen?, nports?, optional?, hide?)>
<!--
Bottom level elements.
Character data only.
@@ -57,6 +57,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
<!ELEMENT bus_structure_sink (#PCDATA)>
<!ELEMENT bus_structure_source (#PCDATA)>
<!ELEMENT var_make (#PCDATA)>
+<!ELEMENT var_value (#PCDATA)>
<!ELEMENT make (#PCDATA)>
<!ELEMENT value (#PCDATA)>
<!ELEMENT callback (#PCDATA)>
diff --git a/volk/apps/volk_profile.cc b/volk/apps/volk_profile.cc
index f816c4e95e..074d1e7be4 100644
--- a/volk/apps/volk_profile.cc
+++ b/volk/apps/volk_profile.cc
@@ -177,6 +177,7 @@ int main(int argc, char *argv[]) {
VOLK_PROFILE(volk_32fc_s32fc_multiply_32fc, 1e-4, 0, 204602, 1000, &results, benchmark_mode, kernel_regex);
VOLK_PROFILE(volk_32f_s32f_multiply_32f, 1e-4, 1.0, 204602, 10000, &results, benchmark_mode, kernel_regex);
VOLK_PROFILE(volk_32f_binary_slicer_32i, 0, 1.0, 204602, 10000, &results, benchmark_mode, kernel_regex);
+ VOLK_PROFILE(volk_32f_binary_slicer_8i, 0, 1.0, 204602, 10000, &results, benchmark_mode, kernel_regex);
// Until we can update the config on a kernel by kernel basis
// do not overwrite volk_config when using a regex.
@@ -199,8 +200,8 @@ int main(int argc, char *argv[]) {
}
config << "\
-#thi s file is generated by volk_profile.\n\
-#the function name is followed by the preferred architecture.\n\
+#this file is generated by volk_profile.\n\
+#the function name is followed by the preferred architecture.\n\
";
BOOST_FOREACH(std::string result, results) {
diff --git a/volk/kernels/volk/asm/neon/volk_16i_max_star_horizontal_16i.s b/volk/kernels/volk/asm/neon/volk_16i_max_star_horizontal_16i.s
new file mode 100644
index 0000000000..2099355e7b
--- /dev/null
+++ b/volk/kernels/volk/asm/neon/volk_16i_max_star_horizontal_16i.s
@@ -0,0 +1,52 @@
+@ static inline void volk_16i_max_star_horizontal_16i_neonasm(float* cVector, const float* aVector, const float* bVector, unsigned int num_points);
+ .global volk_16i_max_star_horizontal_16i_neonasm
+volk_16i_max_star_horizontal_16i_neonasm:
+ @ r0 - cVector: pointer to output array
+ @ r1 - aVector: pointer to input array 1
+ @ r2 - num_points: number of items to process
+
+volk_16i_max_star_horizontal_16i_neonasm:
+ pld [r1:128]
+ push {r4, r5, r6} @ preserve register states
+ lsrs r5, r2, #4 @ 1/16th points = num_points/16
+ vmov.i32 q12, #0 @ q12 = [0,0,0,0]
+ beq .smallvector @ less than 16 elements in vector
+ mov r4, r1 @ r4 = aVector
+ mov r12, r0 @ gcc calls this ip
+ mov r3, #0 @ number = 0
+
+.loop1:
+ vld2.16 {d16-d19}, [r4]! @ aVector, interleaved load
+ pld [r4:128]
+ add r3, r3, #1 @ number += 1
+ cmp r3, r5 @ number < 1/16th points
+ vsub.i16 q10, q8, q9 @ subtraction
+ vcge.s16 q11, q10, #0 @ result > 0?
+ vcgt.s16 q10, q12, q10 @ result < 0?
+ vand.i16 q11, q8, q11 @ multiply by comparisons
+ vand.i16 q10, q9, q10 @ multiply by other comparison
+ vadd.i16 q10, q11, q10 @ add results to get max
+ vst1.16 {d20-d21}, [r12]! @ store the results
+ bne .loop1 @ at least 16 items left
+ add r1, r1, r3, lsl #5
+ add r0, r0, r3, lsl #4
+.smallvector:
+ ands r2, r2, #15
+ beq .end
+ mov r3, #0
+.loop3:
+ ldrh r4, [r1]
+ bic r5, r3, #1
+ ldrh ip, [r1, #2]
+ add r3, r3, #2
+ add r1, r1, #4
+ rsb r6, ip, r4
+ sxth r6, r6
+ cmp r6, #0
+ movgt ip, r4
+ cmp r3, r2
+ strh ip, [r0, r5]
+ bcc .loop3
+.end:
+ pop {r4, r5, r6}
+ bx lr
diff --git a/volk/kernels/volk/asm/neon/volk_32f_s32f_multiply_32f_neonasm.s b/volk/kernels/volk/asm/neon/volk_32f_s32f_multiply_32f_neonasm.s
new file mode 100644
index 0000000000..235d37538f
--- /dev/null
+++ b/volk/kernels/volk/asm/neon/volk_32f_s32f_multiply_32f_neonasm.s
@@ -0,0 +1,52 @@
+@ static inline void volk_32f_s32f_multiply_32f_neonasm(float* cVector, const float* aVector, const float* bVector, unsigned int num_points);
+ .global volk_32f_s32f_multiply_32f_neonasm
+volk_32f_s32f_multiply_32f_neonasm:
+ @ r0 - cVector: pointer to output array
+ @ r1 - aVector: pointer to input array 1
+ @ r2 - bVector: pointer to input array 2
+ @ r3 - num_points: number of items to process
+
+ stmfd sp!, {r4, r5, r6, r7, r8, r9, r10, r11, r12} @ prologue - save register states
+
+
+ @ quarter_points = num_points / 4
+ movs r11, r3, lsr #2
+ beq .loop2 @ if zero into quarterPoints
+
+ @ number = quarter_points
+ mov r10, r3
+ @ copy address of input vector
+ mov r4, r1
+ @ copy address of output vector
+ mov r5, r0
+
+ @ load the scalar to a quad register
+ @ vmov.32 d2[0], r2
+ @ The scalar might be in s0, not totally sure
+ vdup.32 q2, d0[0]
+
+ @ this is giving fits. Current theory is hf has something to do with it
+ .loop1:
+ @ vld1.32 {q1}, [r4:128]! @ aVal
+ @ vmul.f32 q3, q1, q2
+ @ vst1.32 {q3}, [r5:128]! @ cVal
+ @
+ @ subs r10, r10, #1
+ @ bne .loop1 @ first loop
+
+ @ number = quarter_points * 4
+ mov r10, r11, asl #2
+
+ .loop2:
+ @ cmp num_points, number
+ @ bls .done
+ @
+ @ vld1.32 {d0[0]}, [aVector]!
+ @ vmul.f32 s2, s0, s4
+ @ vst1.32 {d1[0]}, [cVector]!
+ @ add number, number, #1
+ @ b .loop2
+
+.done:
+ ldmfd sp!, {r4, r5, r6, r7, r8, r9, r10, r11, r12} @ epilogue - restore register states
+ bx lr
diff --git a/volk/kernels/volk/asm/neon/volk_32f_x2_add_32f_a_neonasm.s b/volk/kernels/volk/asm/neon/volk_32f_x2_add_32f_a_neonasm.s
new file mode 100644
index 0000000000..09e8638423
--- /dev/null
+++ b/volk/kernels/volk/asm/neon/volk_32f_x2_add_32f_a_neonasm.s
@@ -0,0 +1,54 @@
+@ static inline void volk_32f_x2_add_32f_a_neonasm(float* cVector, const float* aVector, const float* bVector, unsigned int num_points);
+ .global volk_32f_x2_add_32f_a_neonasm
+volk_32f_x2_add_32f_a_neonasm:
+ @ r0 - cVector: pointer to output array
+ @ r1 - aVector: pointer to input array 1
+ @ r2 - bVector: pointer to input array 2
+ @ r3 - num_points: number of items to process
+ cVector .req r0
+ aVector .req r1
+ bVector .req r2
+ num_points .req r3
+ quarterPoints .req r7
+ number .req r8
+ aVal .req q0 @ d0-d1
+ bVal .req q1 @ d2-d3
+ cVal .req q2 @ d4-d5
+
+ @ AAPCS Section 5.1.1
+ @ A subroutine must preserve the contents of the registers r4-r8, r10, r11 and SP
+ stmfd sp!, {r7, r8, sl} @ prologue - save register states
+
+ movs quarterPoints, num_points, lsr #2
+ beq .loop2 @ if zero into quarterPoints
+
+ mov number, #0 @ number, 0
+.loop1:
+ pld [aVector, #128] @ pre-load hint - this is implementation specific!
+ pld [bVector, #128] @ pre-load hint - this is implementation specific!
+
+ vld1.32 {d0-d1}, [aVector:128]! @ aVal
+ add number, number, #1
+ vld1.32 {d2-d3}, [bVector:128]! @ bVal
+ vadd.f32 cVal, bVal, aVal
+ cmp number, quarterPoints
+ vst1.32 {d4-d5}, [cVector:128]! @ cVal
+
+ ble .loop1 @ first loop
+
+ mov number, quarterPoints, asl #2
+
+.loop2:
+ cmp num_points, number
+ bls .done
+
+ vld1.32 {d0[0]}, [aVector]!
+ vld1.32 {d0[1]}, [bVector]!
+ vadd.f32 s2, s1, s0
+ vst1.32 {d1[0]}, [cVector]!
+ add number, number, #1
+ b .loop2
+
+.done:
+ ldmfd sp!, {r7, r8, sl} @ epilogue - restore register states
+ bx lr
diff --git a/volk/kernels/volk/asm/neon/volk_32f_x2_add_32f_a_neonpipeline.s b/volk/kernels/volk/asm/neon/volk_32f_x2_add_32f_a_neonpipeline.s
new file mode 100644
index 0000000000..4c8af8b51c
--- /dev/null
+++ b/volk/kernels/volk/asm/neon/volk_32f_x2_add_32f_a_neonpipeline.s
@@ -0,0 +1,68 @@
+@ static inline void volk_32f_x2_add_32f_a_neonpipeline(float* cVector, const float* aVector, const float* bVector, unsigned int num_points);
+ .global volk_32f_x2_add_32f_a_neonpipeline
+volk_32f_x2_add_32f_a_neonpipeline:
+ @ r0 - cVector: pointer to output array
+ @ r1 - aVector: pointer to input array 1
+ @ r2 - bVector: pointer to input array 2
+ @ r3 - num_points: number of items to process
+ cVector .req r0
+ aVector .req r1
+ bVector .req r2
+ num_points .req r3
+ quarterPoints .req r7
+ number .req r8
+ aVal .req q0 @ d0-d1
+ bVal .req q1 @ d2-d3
+ cVal .req q2 @ d4-d5
+
+ stmfd sp!, {r7, r8, sl} @ prologue - save register states
+
+ pld [aVector, #128] @ pre-load hint - this is implementation specific!
+ pld [bVector, #128] @ pre-load hint - this is implementation specific!
+
+ movs quarterPoints, num_points, lsr #2
+ beq .loop2 @ if zero into quarterPoints
+
+ mov number, quarterPoints
+
+ @ Optimizing for pipeline
+ vld1.32 {d0-d1}, [aVector:128]! @ aVal
+ vld1.32 {d2-d3}, [bVector:128]! @ bVal
+ subs number, number, #1
+
+.loop1:
+ pld [aVector, #128] @ pre-load hint - this is implementation specific!
+ pld [bVector, #128] @ pre-load hint - this is implementation specific!
+ vadd.f32 cVal, bVal, aVal
+ vld1.32 {d0-d1}, [aVector:128]! @ aVal
+ vld1.32 {d2-d3}, [bVector:128]! @ bVal
+ vst1.32 {d4-d5}, [cVector:128]! @ cVal
+
+ subs number, number, #1
+ bne .loop1 @ first loop
+
+ @ One more time
+ vadd.f32 cVal, bVal, aVal
+ vst1.32 {d4-d5}, [cVector:128]! @ cVal
+
+ mov number, quarterPoints, asl #2
+
+.loop2:
+ cmp num_points, number
+ bls .done
+
+ vld1.32 {d0[0]}, [aVector]!
+ vld1.32 {d0[1]}, [bVector]!
+ vadd.f32 s2, s1, s0
+ vst1.32 {d1[0]}, [cVector]!
+ add number, number, #1
+ b .loop2
+
+.done:
+ ldmfd sp!, {r7, r8, sl} @ epilogue - restore register states
+ bx lr
+
+
+
+
+
diff --git a/volk/kernels/volk/asm/neon/volk_32f_x2_dot_prod_32f_neonasm.s b/volk/kernels/volk/asm/neon/volk_32f_x2_dot_prod_32f_neonasm.s
new file mode 100644
index 0000000000..64579579e5
--- /dev/null
+++ b/volk/kernels/volk/asm/neon/volk_32f_x2_dot_prod_32f_neonasm.s
@@ -0,0 +1,58 @@
+@ static inline void volk_32f_x2_dot_prod_32f_neonasm(float* cVector, const float* aVector, const float* bVector, unsigned int num_points);
+ .global volk_32f_x2_dot_prod_32f_neonasm
+volk_32f_x2_dot_prod_32f_neonasm:
+ @ r0 - cVector: pointer to output array
+ @ r1 - aVector: pointer to input array 1
+ @ r2 - bVector: pointer to input array 2
+ @ r3 - num_points: number of items to process
+ cVector .req r0
+ aVector .req r1
+ bVector .req r2
+ num_points .req r3
+ quarterPoints .req r7
+ number .req r8
+ aVal .req q0 @ d0-d1
+ bVal .req q1 @ d2-d3
+ cVal .req q2 @ d4-d5
+
+ @ AAPCS Section 5.1.1
+ @ A subroutine must preserve the contents of the registers r4-r8, r10, r11 and SP
+ stmfd sp!, {r7, r8, sl} @ prologue - save register states
+
+ veor.32 q0, q0, q0
+ movs quarterPoints, num_points, lsr #2
+ beq .loop2 @ if zero into quarterPoints
+
+ mov number, #0 @ number, 0
+.loop1:
+ pld [aVector, #128] @ pre-load hint - this is implementation specific!
+ pld [bVector, #128] @ pre-load hint - this is implementation specific!
+
+ vld1.32 {q1}, [aVector:128]! @ aVal
+ vld1.32 {q2}, [bVector:128]! @ bVal
+ vmla.f32 q0, q1, q2
+
+ add number, number, #1
+ cmp number, quarterPoints
+ ble .loop1 @ first loop
+
+ @ strange order comes from trying to schedule instructions
+ vadd.f32 s0, s0, s1
+ vadd.f32 s2, s2, s3
+ mov number, quarterPoints, asl #2
+ vadd.f32 s0, s0, s2
+
+.loop2:
+ cmp num_points, number
+ bls .done
+
+ vld1.32 {d1[0]}, [aVector]!
+ vld1.32 {d1[1]}, [bVector]!
+ vmla.f32 s0, s2, s3
+ add number, number, #1
+ b .loop2
+
+.done:
+ vstr s0, [cVector]
+ ldmfd sp!, {r7, r8, sl} @ epilogue - restore register states
+ bx lr
diff --git a/volk/kernels/volk/asm/neon/volk_32f_x2_dot_prod_32f_neonasm_opts.s b/volk/kernels/volk/asm/neon/volk_32f_x2_dot_prod_32f_neonasm_opts.s
new file mode 100644
index 0000000000..3093edc121
--- /dev/null
+++ b/volk/kernels/volk/asm/neon/volk_32f_x2_dot_prod_32f_neonasm_opts.s
@@ -0,0 +1,116 @@
+@ static inline void volk_32f_x2_dot_prod_32f_neonasm_opts(float* cVector, const float* aVector, const float* bVector, unsigned int num_points);
+ @ r0 = cVector
+ @ r1 = aVector
+ @ r2 = bVector
+ @ r3 = num_points
+ .global volk_32f_x2_dot_prod_32f_neonasm_opts
+volk_32f_x2_dot_prod_32f_neonasm_opts:
+ push {r4, r5, r6, r7, r8, r9, r10, r11}
+ @ sixteenth_points = num_points / 16
+ lsrs r8, r3, #4
+ sub r13, r13, #16 @ subtracting 16 from stack pointer?, wat?
+ @ 0 out neon accumulators
+ veor q0, q3, q3
+ veor q1, q3, q3
+ veor q2, q3, q3
+ veor q3, q3, q3
+ beq .smallvector @ if less than 16 points skip main loop
+ mov r7, r2 @ copy input ptrs
+ mov r6, r1 @ copy input ptrs
+ mov r5, #0 @ loop counter
+.mainloop:
+ vld4.32 {d16,d18,d20,d22}, [r6]!
+ add r5, r5, #1 @ inc loop counter
+ cmp r5, r8 @ loop counter < sixteenth_points?
+ vld4.32 {d24,d26,d28,d30}, [r7]!
+ vld4.32 {d17,d19,d21,d23}, [r6]!
+ vld4.32 {d25,d27,d29,d31}, [r7]!
+ vmla.f32 q3, q8, q12
+ vmla.f32 q0, q13, q9
+ vmla.f32 q1, q14, q10
+ vmla.f32 q2, q15, q11
+ bne .mainloop
+ lsl r12, r8, #6 @ r12=r8/64
+ add r1, r1, r12
+ add r2, r2, r12
+.smallvector: @ actually this can be skipped for small vectors
+ vadd.f32 q3, q3, q0
+ lsl r8, r8, #4 @ sixteenth_points * 16
+ cmp r3, r8 @ num_points < sixteenth_points*16?
+ vadd.f32 q2, q1, q2
+ vadd.f32 q3, q2, q3 @ sum of 4 accumulators in to q3
+ vadd.f32 s15, s12, s15 @ q3 is s12-s15, so reduce to a single float
+ vadd.f32 s15, s15, s13
+ vadd.f32 s15, s15, s14
+ bls .done @ if vector is multiple of 16 then finish
+ sbfx r11, r1, #2, #1 @ check alignment
+ rsb r9, r8, r3
+ and r11, r11, #3
+ mov r6, r1
+ cmp r11, r9
+ movcs r11, r9
+ cmp r9, #3
+ movls r11, r9
+ cmp r11, #0
+ beq .nothingtodo
+ mov r5, r2
+ mov r12, r8
+.dlabel5:
+ add r12, r12, #1
+ vldmia r6!, {s14}
+ rsb r4, r8, r12
+ vldmia r5!, {s13}
+ cmp r4, r11
+ vmla.f32 s15, s13, s14
+ mov r7, r6
+ mov r4, r5
+ bcc .dlabel5
+ cmp r9, r11
+ beq .done
+.dlabel8:
+ rsb r9, r11, r9
+ lsr r8, r9, #2
+ lsls r10, r8, #2
+ beq .dlabel6
+ lsl r6, r11, #2
+ veor q8, q8, q8
+ add r1, r1, r6
+ add r6, r2, r6
+ mov r5, #0
+.dlabel9:
+ add r5, r5, #1
+ vld1.32 {d20-d21}, [r6]!
+ cmp r5, r8
+ vld1.64 {d18-d19}, [r1 :64]!
+ vmla.f32 q8, q10, q9
+ bcc .dlabel9
+ vadd.f32 d16, d16, d17
+ lsl r2, r10, #2
+ veor q9, q9, q9
+ add r7, r7, r2
+ vpadd.f32 d6, d16, d16
+ add r4, r4, r2
+ cmp r9, r10
+ add r12, r12, r10
+ vadd.f32 s15, s15, s12
+ beq .done
+.dlabel6:
+ mov r2, r7
+.dlabel7:
+ add r12, r12, #1
+ vldmia r2!, {s13}
+ cmp r3, r12
+ vldmia r4!, {s14}
+ vmla.f32 s15, s13, s14
+ bhi .dlabel7
+.done:
+ vstr s15, [r0]
+ add r13, r13, #16
+ pop {r4, r5, r6, r7, r8, r9, r10, r11}
+ bx lr @ lr is the return address
+.nothingtodo:
+ mov r12, r8
+ mov r4, r2
+ mov r7, r1
+ b .dlabel8
+
diff --git a/volk/kernels/volk/asm/neon/volk_32fc_32f_dot_prod_32fc_a_neonasm.s b/volk/kernels/volk/asm/neon/volk_32fc_32f_dot_prod_32fc_a_neonasm.s
new file mode 100644
index 0000000000..481cadee2c
--- /dev/null
+++ b/volk/kernels/volk/asm/neon/volk_32fc_32f_dot_prod_32fc_a_neonasm.s
@@ -0,0 +1,79 @@
+@ static inline void volk_32fc_32f_dot_prod_32fc_a_neonasm ( lv_32fc_t* result, const lv_32fc_t* input, const float* taps, unsigned int num_points) {
+ .global volk_32fc_32f_dot_prod_32fc_a_neonasm
+ volk_32fc_32f_dot_prod_32fc_a_neonasm:
+ @ r0 - result: pointer to output array (32fc)
+ @ r1 - input: pointer to input array 1 (32fc)
+ @ r2 - taps: pointer to input array 2 (32f)
+ @ r3 - num_points: number of items to process
+
+ result .req r0
+ input .req r1
+ taps .req r2
+ num_points .req r3
+ quarterPoints .req r7
+ number .req r8
+ @ Note that according to the ARM EABI (AAPCS) Section 5.1.1:
+ @ registers s16-s31 (d8-d15, q4-q7) must be preserved across subroutine calls;
+ @ registers s0-s15 (d0-d7, q0-q3) do not need to be preserved
+ @ registers d16-d31 (q8-q15), if present, do not need to be preserved.
+ realAccQ .req q0 @ d0-d1/s0-s3
+ compAccQ .req q1 @ d2-d3/s4-s7
+ realAccS .req s0 @ d0[0]
+ compAccS .req s4 @ d2[0]
+ tapsVal .req q2 @ d4-d5
+ outVal .req q3 @ d6-d7
+ realMul .req q8 @ d8-d9
+ compMul .req q9 @ d16-d17
+ inRealVal .req q10 @ d18-d19
+ inCompVal .req q11 @ d20-d21
+
+ stmfd sp!, {r7, r8, sl} @ prologue - save register states
+
+ veor realAccQ, realAccQ @ zero out accumulators
+ veor compAccQ, compAccQ @ zero out accumulators
+ movs quarterPoints, num_points, lsr #2
+ beq .loop2 @ if zero into quarterPoints
+
+ mov number, quarterPoints
+
+.loop1:
+ @ do work here
+ @pld [taps, #128] @ pre-load hint - this is implementation specific!
+ @pld [input, #128] @ pre-load hint - this is implementation specific!
+ vld1.32 {d4-d5}, [taps:128]! @ tapsVal
+ vld2.32 {d20-d23}, [input:128]! @ inRealVal, inCompVal
+ vmul.f32 realMul, tapsVal, inRealVal
+ vmul.f32 compMul, tapsVal, inCompVal
+ vadd.f32 realAccQ, realAccQ, realMul
+ vadd.f32 compAccQ, compAccQ, compMul
+ subs number, number, #1
+ bne .loop1 @ first loop
+
+ @ Sum up across realAccQ and compAccQ
+ vpadd.f32 d0, d0, d1 @ realAccQ +-> d0
+ vpadd.f32 d2, d2, d3 @ compAccQ +-> d2
+ vadd.f32 realAccS, s0, s1 @ sum the contents of d0 together (realAccQ)
+ vadd.f32 compAccS, s4, s5 @ sum the contents of d2 together (compAccQ)
+ @ critical values are now in s0 (realAccS), s4 (realAccQ)
+ mov number, quarterPoints, asl #2
+
+.loop2:
+ cmp num_points, number
+ bls .done
+
+ vld1.32 {d4[0]}, [taps]! @ s8
+ vld2.32 {d5[0],d6[0]}, [input]! @ s10, s12
+ vmul.f32 s5, s8, s10
+ vmul.f32 s6, s8, s12
+ vadd.f32 realAccS, realAccS, s5
+ vadd.f32 compAccS, compAccS, s6
+
+ add number, number, #1
+ b .loop2
+
+.done:
+ vst1.32 {d0[0]}, [result]! @ realAccS
+ vst1.32 {d2[0]}, [result] @ compAccS
+
+ ldmfd sp!, {r7, r8, sl} @ epilogue - restore register states
+ bx lr
diff --git a/volk/kernels/volk/asm/neon/volk_32fc_32f_dot_prod_32fc_a_neonasmpipeline.s b/volk/kernels/volk/asm/neon/volk_32fc_32f_dot_prod_32fc_a_neonasmpipeline.s
new file mode 100644
index 0000000000..aaf70e2cbc
--- /dev/null
+++ b/volk/kernels/volk/asm/neon/volk_32fc_32f_dot_prod_32fc_a_neonasmpipeline.s
@@ -0,0 +1,86 @@
+@ static inline void volk_32fc_32f_dot_prod_32fc_a_neonasmpipeline ( lv_32fc_t* result, const lv_32fc_t* input, const float* taps, unsigned int num_points) {
+ .global volk_32fc_32f_dot_prod_32fc_a_neonasmpipeline
+volk_32fc_32f_dot_prod_32fc_a_neonasmpipeline:
+ @ r0 - result: pointer to output array (32fc)
+ @ r1 - input: pointer to input array 1 (32fc)
+ @ r2 - taps: pointer to input array 2 (32f)
+ @ r3 - num_points: number of items to process
+
+ result .req r0
+ input .req r1
+ taps .req r2
+ num_points .req r3
+ quarterPoints .req r7
+ number .req r8
+ @ Note that according to the ARM EABI (AAPCS) Section 5.1.1:
+ @ registers s16-s31 (d8-d15, q4-q7) must be preserved across subroutine calls;
+ @ registers s0-s15 (d0-d7, q0-q3) do not need to be preserved
+ @ registers d16-d31 (q8-q15), if present, do not need to be preserved.
+ realAccQ .req q0 @ d0-d1/s0-s3
+ compAccQ .req q1 @ d2-d3/s4-s7
+ realAccS .req s0 @ d0[0]
+ compAccS .req s4 @ d2[0]
+ tapsVal .req q2 @ d4-d5
+ outVal .req q3 @ d6-d7
+ realMul .req q8 @ d8-d9
+ compMul .req q9 @ d16-d17
+ inRealVal .req q10 @ d18-d19
+ inCompVal .req q11 @ d20-d21
+
+ stmfd sp!, {r7, r8, sl} @ prologue - save register states
+
+ pld [taps, #128] @ pre-load hint - this is implementation specific!
+ pld [input, #128] @ pre-load hint - this is implementation specific!
+
+ veor realAccQ, realAccQ @ zero out accumulators
+ veor compAccQ, compAccQ @ zero out accumulators
+ movs quarterPoints, num_points, lsr #2
+ beq .loop2 @ if zero into quarterPoints
+
+ mov number, quarterPoints
+ @ Optimizing for pipeline
+ vld1.32 {d4-d5}, [taps:128]! @ tapsVal
+ vld2.32 {d18-d21}, [input:128]! @ inRealVal, inCompVal
+ subs number, number, #1
+
+.loop1:
+ @ do work here
+ pld [taps, #128] @ pre-load hint - this is implementation specific!
+ pld [input, #128] @ pre-load hint - this is implementation specific!
+ vmul.f32 realMul, tapsVal, inRealVal
+ vmul.f32 compMul, tapsVal, inCompVal
+ vadd.f32 realAccQ, realAccQ, realMul
+ vadd.f32 compAccQ, compAccQ, compMul
+ vld1.32 {d4-d5}, [taps:128]! @ tapsVal
+ vld2.32 {d18-d21}, [input:128]! @ inRealVal, inCompVal
+
+ subs number, number, #1
+ bne .loop1 @ first loop
+
+ @ Sum up across realAccQ and compAccQ
+ vpadd.f32 d0, d0, d1 @ realAccQ +-> d0
+ vpadd.f32 d2, d2, d3 @ compAccQ +-> d2
+ vadd.f32 realAccS, s0, s1 @ sum the contents of d0 together (realAccQ)
+ vadd.f32 compAccS, s4, s5 @ sum the contents of d2 together (compAccQ)
+ @ critical values are now in s0 (realAccS), s4 (realAccQ)
+ mov number, quarterPoints, asl #2
+.loop2:
+ cmp num_points, number
+ bls .done
+
+ vld1.32 {d4[0]}, [taps]! @ s8
+ vld2.32 {d5[0],d6[0]}, [input]! @ s10, s12
+ vmul.f32 s5, s8, s12
+ vmul.f32 s6, s8, s10
+ vadd.f32 realAccS, realAccS, s5
+ vadd.f32 compAccS, compAccS, s6
+
+ add number, number, #1
+ b .loop2
+
+.done:
+ vst1.32 {d0[0]}, [result]! @ realAccS
+ vst1.32 {d2[0]}, [result] @ compAccS
+
+ ldmfd sp!, {r7, r8, sl} @ epilogue - restore register states
+ bx lr
diff --git a/volk/kernels/volk/asm/neon/volk_32fc_32f_dot_prod_32fc_a_neonasmvmla.s b/volk/kernels/volk/asm/neon/volk_32fc_32f_dot_prod_32fc_a_neonasmvmla.s
new file mode 100644
index 0000000000..cb50e4bced
--- /dev/null
+++ b/volk/kernels/volk/asm/neon/volk_32fc_32f_dot_prod_32fc_a_neonasmvmla.s
@@ -0,0 +1,74 @@
+@ static inline void volk_32fc_32f_dot_prod_32fc_a_neonasmvmla ( lv_32fc_t* result, const lv_32fc_t* input, const float* taps, unsigned int num_points)
+ .global volk_32fc_32f_dot_prod_32fc_a_neonasmvmla
+volk_32fc_32f_dot_prod_32fc_a_neonasmvmla:
+ @ r0 - result: pointer to output array (32fc)
+ @ r1 - input: pointer to input array 1 (32fc)
+ @ r2 - taps: pointer to input array 2 (32f)
+ @ r3 - num_points: number of items to process
+
+ result .req r0
+ input .req r1
+ taps .req r2
+ num_points .req r3
+ quarterPoints .req r7
+ number .req r8
+ @ Note that according to the ARM EABI (AAPCS) Section 5.1.1:
+ @ registers s16-s31 (d8-d15, q4-q7) must be preserved across subroutine calls;
+ @ registers s0-s15 (d0-d7, q0-q3) do not need to be preserved
+ @ registers d16-d31 (q8-q15), if present, do not need to be preserved.
+ realAccQ .req q0 @ d0-d1/s0-s3
+ compAccQ .req q1 @ d2-d3/s4-s7
+ realAccS .req s0 @ d0[0]
+ compAccS .req s4 @ d2[0]
+ tapsVal .req q2 @ d4-d5
+ outVal .req q3 @ d6-d7
+ realMul .req q8 @ d8-d9
+ compMul .req q9 @ d16-d17
+ inRealVal .req q10 @ d18-d19
+ inCompVal .req q11 @ d20-d21
+
+ stmfd sp!, {r7, r8, sl} @ prologue - save register states
+
+ veor realAccQ, realAccQ @ zero out accumulators
+ veor compAccQ, compAccQ @ zero out accumulators
+ movs quarterPoints, num_points, lsr #2
+ beq .loop2 @ if zero into quarterPoints
+
+ mov number, quarterPoints
+
+.loop1:
+ @ do work here
+ pld [taps, #128] @ pre-load hint - this is implementation specific!
+ pld [input, #128] @ pre-load hint - this is implementation specific!
+ vld1.32 {d4-d5}, [taps:128]! @ tapsVal
+ vld2.32 {d18-d21}, [input:128]! @ inRealVal, inCompVal
+ vmla.f32 realAccQ, tapsVal, inRealVal
+ vmla.f32 compAccQ, tapsVal, inCompVal
+ subs number, number, #1
+ bne .loop1 @ first loop
+
+ @ Sum up across realAccQ and compAccQ
+ vpadd.f32 d0, d0, d1 @ realAccQ +-> d0
+ vpadd.f32 d2, d2, d3 @ compAccQ +-> d2
+ vadd.f32 realAccS, s0, s1 @ sum the contents of d0 together (realAccQ)
+ vadd.f32 compAccS, s4, s5 @ sum the contents of d2 together (compAccQ)
+ @ critical values are now in s0 (realAccS), s4 (compAccS)
+ mov number, quarterPoints, asl #2
+.loop2:
+ cmp num_points, number
+ bls .done
+
+ vld1.32 {d4[0]}, [taps]! @ s8
+ vld2.32 {d5[0],d6[0]}, [input]! @ s10, s12
+ vmla.f32 realAccS, s8, s10 @ d0[0]
+ vmla.f32 compAccS, s8, s12 @ d2[0]
+
+ add number, number, #1
+ b .loop2
+
+.done:
+ vst1.32 {d0[0]}, [result]! @ realAccS
+ vst1.32 {d2[0]}, [result] @ compAccS
+
+ ldmfd sp!, {r7, r8, sl} @ epilogue - restore register states
+ bx lr
diff --git a/volk/kernels/volk/asm/neon/volk_32fc_32f_dot_prod_32fc_unrollasm.s b/volk/kernels/volk/asm/neon/volk_32fc_32f_dot_prod_32fc_unrollasm.s
new file mode 100644
index 0000000000..7185ab9d17
--- /dev/null
+++ b/volk/kernels/volk/asm/neon/volk_32fc_32f_dot_prod_32fc_unrollasm.s
@@ -0,0 +1,146 @@
+@ static inline void volk_32fc_32f_dot_prod_32fc_unrollasm ( lv_32fc_t* result, const lv_32fc_t* input, const float* taps, unsigned int num_points)
+.global volk_32fc_32f_dot_prod_32fc_unrollasm
+volk_32fc_32f_dot_prod_32fc_unrollasm:
+ @ r0 - result: pointer to output array (32fc)
+ @ r1 - input: pointer to input array 1 (32fc)
+ @ r2 - taps: pointer to input array 2 (32f)
+ @ r3 - num_points: number of items to process
+
+ push {r4, r5, r6, r7, r8, r9}
+ vpush {q4-q7}
+ sub r13, r13, #56 @ 0x38
+ add r12, r13, #8
+ lsrs r8, r3, #3
+ veor.32 q2, q5, q5
+ veor.32 q3, q5, q5
+ veor.32 q4, q5, q5
+ veor.32 q5, q5, q5
+ beq .smallvector
+ vld2.32 {d20-d23}, [r1]!
+ vld1.32 {d24-d25}, [r2]!
+ mov r5, #1
+
+
+
+.mainloop:
+ vld2.32 {d14-d17}, [r1]! @ q7,q8
+ vld1.32 {d18-d19}, [r2]! @ q9
+
+ vmul.f32 q0, q12, q10 @ real mult
+ vmul.f32 q1, q12, q11 @ imag mult
+
+ add r5, r5, #1
+ cmp r5, r8
+
+ vadd.f32 q4, q4, q0@ q4 accumulates real
+ vadd.f32 q5, q5, q1@ q5 accumulates imag
+
+ vld2.32 {d20-d23}, [r1]! @ q10-q11
+ vld1.32 {d24-d25}, [r2]! @ q12
+
+ vmul.f32 q13, q9, q7
+ vmul.f32 q14, q9, q8
+ vadd.f32 q2, q2, q13 @ q2 accumulates real
+ vadd.f32 q3, q3, q14 @ q3 accumulates imag
+
+
+
+ bne .mainloop
+
+ vmul.f32 q0, q12, q10 @ real mult
+ vmul.f32 q1, q12, q11 @ imag mult
+
+ vadd.f32 q4, q4, q0@ q4 accumulates real
+ vadd.f32 q5, q5, q1@ q5 accumulates imag
+
+
+.smallvector:
+ vadd.f32 q0, q2, q4
+ add r12, r13, #24
+ lsl r8, r8, #3
+ vadd.f32 q1, q3, q5
+ cmp r3, r8
+
+ vadd.f32 d0, d0, d1
+ vadd.f32 d1, d2, d3
+ vadd.f32 s14, s0, s1
+ vadd.f32 s15, s2, s3
+
+ vstr s14, [r13]
+ vstr s15, [r13, #4]
+ bls .D1
+ rsb r12, r8, r3
+ lsr r4, r12, #2
+ cmp r4, #0
+ cmpne r12, #3
+ lsl r5, r4, #2
+ movhi r6, #0
+ movls r6, #1
+ bls .L1
+ vmov.i32 q10, #0 @ 0x00000000
+ mov r9, r1
+ mov r7, r2
+ vorr q11, q10, q10
+
+.smallloop:
+ add r6, r6, #1
+ vld2.32 {d16-d19}, [r9]!
+ cmp r4, r6
+ vld1.32 {d24-d25}, [r7]!
+ vmla.f32 q11, q12, q8
+ vmla.f32 q10, q12, q9
+ bhi .smallloop
+ vmov.i32 q9, #0 @ 0x00000000
+ cmp r12, r5
+ vadd.f32 d20, d20, d21
+ add r8, r8, r5
+ vorr q8, q9, q9
+ add r1, r1, r5, lsl #3
+ vadd.f32 d22, d22, d23
+ add r2, r2, r5, lsl #2
+ vpadd.f32 d18, d20, d20
+ vpadd.f32 d16, d22, d22
+ vmov.32 r4, d18[0]
+ vmov.32 r12, d16[0]
+ vmov s13, r4
+ vadd.f32 s15, s13, s15
+ vmov s13, r12
+ vadd.f32 s14, s13, s14
+ beq .finishreduction
+ .L1:
+ add r12, r8, #1
+ vldr s13, [r2]
+ cmp r3, r12
+ vldr s11, [r1]
+ vldr s12, [r1, #4]
+ vmla.f32 s14, s13, s11
+ vmla.f32 s15, s13, s12
+ bls .finishreduction
+ add r8, r8, #2
+ vldr s13, [r2, #4]
+ cmp r3, r8
+ vldr s11, [r1, #8]
+ vldr s12, [r1, #12]
+ vmla.f32 s14, s13, s11
+ vmla.f32 s15, s13, s12
+ bls .finishreduction
+ vldr s13, [r2, #8]
+ vldr s11, [r1, #16]
+ vldr s12, [r1, #20]
+ vmla.f32 s14, s13, s11
+ vmla.f32 s15, s13, s12
+
+.finishreduction:
+ vstr s14, [r13]
+ vstr s15, [r13, #4]
+ .D1:
+ ldr r3, [r13]
+ str r3, [r0]
+ ldr r3, [r13, #4]
+ str r3, [r0, #4]
+ add r13, r13, #56 @ 0x38
+ vpop {q4-q7}
+ pop {r4, r5, r6, r7, r8, r9}
+ bx r14
+
+
diff --git a/volk/kernels/volk/asm/neon/volk_32fc_x2_dot_prod_32fc_neonasm.s b/volk/kernels/volk/asm/neon/volk_32fc_x2_dot_prod_32fc_neonasm.s
new file mode 100644
index 0000000000..a1c5b7f184
--- /dev/null
+++ b/volk/kernels/volk/asm/neon/volk_32fc_x2_dot_prod_32fc_neonasm.s
@@ -0,0 +1,98 @@
+@ static inline void volk_32fc_x2_dot_prod_32fc_neonasm(float* cVector, const float* aVector, const float* bVector, unsigned int num_points);
+ .global volk_32fc_x2_dot_prod_32fc_neonasm
+volk_32fc_x2_dot_prod_32fc_neonasm:
+ push {r4, r5, r6, r7, r8, lr}
+ vpush {q0-q7}
+ vpush {q8-q15}
+ mov r8, r3 @ hold on to num_points (r8)
+ @ zero out accumulators -- leave 1 reg in alu
+ veor q8, q15, q15
+ mov r7, r0 @ (r7) is cVec
+ veor q9, q15, q15
+ mov r5, r1 @ (r5) is aVec
+ veor q10, q15, q15
+ mov r6, r2 @ (r6) is bVec
+ veor q11, q15, q15
+ lsrs r3, r3, #3 @ eighth_points (r3) = num_points/8
+ veor q12, q15, q15
+ mov r12, r2 @ (r12) is bVec
+ veor q13, q15, q15
+ mov r4, r1 @ (r4) is aVec
+ veor q14, q15, q15
+ veor q15, q15, q15
+ beq .smallvector @ nathan optimized this file based on an objdump
+ @ but I don't understand this jump. Seems like it should go to loop2
+ @ and smallvector (really vector reduction) shouldn't need to be a label
+ mov r2, #0 @ 0 out r2 (now number)
+.loop1:
+ add r2, r2, #1 @ increment number
+ vld4.32 {d0,d2,d4,d6}, [r12]! @ q0-q3
+ cmp r2, r3 @ is number < eighth_points
+ @pld [r12, #64]
+ vld4.32 {d8,d10,d12,d14}, [r4]! @ q4-q7
+ @pld [r4, #64]
+ vmla.f32 q12, q4, q0 @ real (re*re)
+ vmla.f32 q14, q4, q1 @ imag (re*im)
+ vmls.f32 q15, q5, q1 @ real (im*im)
+ vmla.f32 q13, q5, q0 @ imag (im*re)
+
+ vmla.f32 q8, q2, q6 @ real (re*re)
+ vmla.f32 q9, q2, q7 @ imag (re*im)
+ vmls.f32 q10, q3, q7 @ real (im*im)
+ vmla.f32 q11, q3, q6 @ imag (im*re)
+ bne .loop1
+ lsl r2, r3, #3 @ r2 = eighth_points * 8
+ add r6, r6, r2 @ bVec = bVec + eighth_points -- whyyyyy gcc?!?
+ add r5, r5, r2 @ aVec = aVec + eighth_points
+ @ q12-q13 were original real accumulators
+ @ q14-q15 were original imag accumulators
+ @ reduce 8 accumulators down to 2 (1 real, 1 imag)
+ vadd.f32 q8, q10, q8 @ real + real
+ vadd.f32 q11, q11, q9 @ imag + imag
+ vadd.f32 q12, q12, q15 @ real + real
+ vadd.f32 q14, q14, q13 @ imag + imag
+ vadd.f32 q8, q8, q12
+ vadd.f32 q9, q9, q14
+.smallvector:
+ lsl r4, r3, #3
+ cmp r8, r4
+ vst2.32 {d16-d19}, [sp :64] @ whaaaaat? no way this is necessary!
+ vldr s15, [sp, #8]
+ vldr s17, [sp]
+ vldr s16, [sp, #4]
+ vadd.f32 s17, s17, s15
+ vldr s11, [sp, #12]
+ vldr s12, [sp, #24]
+ vldr s13, [sp, #28]
+ vldr s14, [sp, #16]
+ vldr s15, [sp, #20]
+ vadd.f32 s16, s16, s11
+ vadd.f32 s17, s17, s12
+ vadd.f32 s16, s16, s13
+ vadd.f32 s17, s17, s14
+ vadd.f32 s16, s16, s15
+ vstr s17, [r7]
+ vstr s16, [r7, #4]
+ bls .done
+.loop2:
+ mov r3, r6
+ add r6, r6, #8
+ vldr s0, [r3]
+ vldr s1, [r6, #-4]
+ mov r3, r5
+ add r5, r5, #8
+ vldr s2, [r3]
+ vldr s3, [r5, #-4]
+ bl __mulsc3 @ GCC/Clang built-in. Portability?
+ add r4, r4, #1
+ cmp r4, r8
+ vadd.f32 s17, s17, s0
+ vadd.f32 s16, s16, s1
+ vstr s17, [r7]
+ vstr s16, [r7, #4]
+ bne .loop2
+.done:
+ vpop {q8-q15}
+ vpop {q0-q7}
+ pop {r4, r5, r6, r7, r8, pc}
+
diff --git a/volk/kernels/volk/asm/neon/volk_32fc_x2_dot_prod_32fc_neonasm_opttests.s b/volk/kernels/volk/asm/neon/volk_32fc_x2_dot_prod_32fc_neonasm_opttests.s
new file mode 100644
index 0000000000..77f026e1b0
--- /dev/null
+++ b/volk/kernels/volk/asm/neon/volk_32fc_x2_dot_prod_32fc_neonasm_opttests.s
@@ -0,0 +1,96 @@
+@ static inline void volk_32fc_x2_dot_prod_32fc_neonasm_opttests(float* cVector, const float* aVector, const float* bVector, unsigned int num_points)@
+.global volk_32fc_x2_dot_prod_32fc_neonasm_opttests
+volk_32fc_x2_dot_prod_32fc_neonasm_opttests:
+ push {r4, r5, r6, r7, r8, r9, sl, fp, lr}
+ vpush {d8-d15}
+ lsrs fp, r3, #3
+ sub sp, sp, #52 @ 0x34
+ mov r9, r3
+ mov sl, r0
+ mov r7, r1
+ mov r8, r2
+ vorr q0, q7, q7
+ vorr q1, q7, q7
+ vorr q2, q7, q7
+ vorr q3, q7, q7
+ vorr q4, q7, q7
+ vorr q5, q7, q7
+ veor q6, q7, q7
+ vorr q7, q7, q7
+ beq .smallvector
+ mov r4, r1
+ mov ip, r2
+ mov r3, #0
+.mainloop:
+ @mov r6, ip
+ @mov r5, r4
+ vld4.32 {d24,d26,d28,d30}, [r6]!
+ @add ip, ip, #64 @ 0x40
+ @add r4, r4, #64 @ 0x40
+ vld4.32 {d16,d18,d20,d22}, [r5]!
+ add r3, r3, #1
+ vld4.32 {d25,d27,d29,d31}, [r6]!
+ vld4.32 {d17,d19,d21,d23}, [r5]!
+ vmla.f32 q6, q8, q12
+ vmla.f32 q0, q9, q12
+ cmp r3, fp
+ vmls.f32 q5, q13, q9
+ vmla.f32 q2, q13, q8
+ vmla.f32 q7, q10, q14
+ vmla.f32 q1, q11, q14
+ vmls.f32 q4, q15, q11
+ vmla.f32 q3, q15, q10
+ bne .mainloop
+ lsl r3, fp, #6
+ add r8, r8, r3
+ add r7, r7, r3
+.smallvector:
+ vadd.f32 q3, q2, q3
+ add r3, sp, #16
+ lsl r4, fp, #3
+ vadd.f32 q4, q5, q4
+ cmp r9, r4
+ vadd.f32 q6, q6, q7
+ vadd.f32 q1, q0, q1
+ vadd.f32 q8, q6, q4
+ vadd.f32 q9, q1, q3
+ vst2.32 {d16-d19}, [r3 :64]
+ vldr s15, [sp, #24]
+ vldr s16, [sp, #16]
+ vldr s17, [sp, #20]
+ vadd.f32 s16, s16, s15
+ vldr s11, [sp, #28]
+ vldr s12, [sp, #40] @ 0x28
+ vldr s13, [sp, #44] @ 0x2c
+ vldr s14, [sp, #32]
+ vldr s15, [sp, #36] @ 0x24
+ vadd.f32 s17, s17, s11
+ vadd.f32 s16, s16, s12
+ vadd.f32 s17, s17, s13
+ vadd.f32 s16, s16, s14
+ vadd.f32 s17, s17, s15
+ vstr s16, [sl]
+ vstr s17, [sl, #4]
+ bls .epilog
+ add r5, sp, #8
+.tailcase:
+ ldr r3, [r7], #8
+ mov r0, r5
+ ldr r1, [r8], #8
+ add r4, r4, #1
+ ldr ip, [r7, #-4]
+ ldr r2, [r8, #-4]
+ str ip, [sp]
+ bl __mulsc3
+ vldr s14, [sp, #8]
+ vldr s15, [sp, #12]
+ vadd.f32 s16, s16, s14
+ cmp r4, r9
+ vadd.f32 s17, s17, s15
+ vstr s16, [sl]
+ vstr s17, [sl, #4]
+ bne .tailcase
+.epilog:
+ add sp, sp, #52 @ 0x34
+ vpop {d8-d15}
+ pop {r4, r5, r6, r7, r8, r9, sl, fp, pc}
diff --git a/volk/kernels/volk/asm/neon/volk_32fc_x2_multiply_32fc_neonasm.s b/volk/kernels/volk/asm/neon/volk_32fc_x2_multiply_32fc_neonasm.s
new file mode 100644
index 0000000000..5d79b466ac
--- /dev/null
+++ b/volk/kernels/volk/asm/neon/volk_32fc_x2_multiply_32fc_neonasm.s
@@ -0,0 +1,45 @@
+@ static inline void volk_32fc_x2_multiply_32fc_neonasm(float* cVector, const float* aVector, const float* bVector, unsigned int num_points);
+ .global volk_32fc_x2_multiply_32fc_neonasm
+volk_32fc_x2_multiply_32fc_neonasm:
+ push {r4, r5, r6, r7, r8, r9, r14}
+ lsrs r7, r3, #2
+ @ r0 is c vector
+ @ r1 is a vector
+ @ r2 is b vector
+ @ r3 is num_points
+ @ r7 is quarter_points
+ beq .smallvector
+ mov r5, #0
+.mainloop:
+ vld2.32 {d24-d27}, [r1]! @ ar=q12, ai=q13
+ add r5, r5, #1
+ cmp r5, r7
+ vld2.32 {d20-d23}, [r2]! @ br=q10, bi=q11
+ pld [r1]
+ pld [r2]
+ vmul.f32 q0, q12, q10 @ q15 = ar*br
+ vmul.f32 q1, q13, q11 @ q11 = ai*bi
+ vmul.f32 q2, q12, q11 @ q14 = ar*bi
+ vmul.f32 q3, q13, q10 @ q12 = ai*br
+ vsub.f32 q8, q0, q1 @ real
+ vadd.f32 q9, q2, q3 @ imag
+ vst2.32 {d16-d19}, [r0]!
+ bne .mainloop
+
+.smallvector:
+ lsl r5, r7, #2
+ cmp r3, r7
+ bls .done
+.tailcase:
+ add r5, r5, #1
+ vld1.32 d1, [r1]! @ s2, s3 = ar, ai
+ vld1.32 d0, [r2]! @ s0, s1 = br, bi
+ vmul.f32 s4, s0, s2 @ s4 = ar*br
+ vmul.f32 s5, s0, s3 @ s5 = ar*bi
+ vmls.f32 s4, s1, s3 @ s4 = s4 - ai*bi
+ vmla.f32 s5, s1, s2 @ s5 = s5 + ai*br
+ vst1.32 d2, [r0]!
+ cmp r3, r5
+ bne .tailcase
+.done:
+ pop {r4, r5, r6, r7, r8, r9, r15}
diff --git a/volk/kernels/volk/asm/neon/volk_arm_32fc_32f_dot_prod_32fc_a_neonpipeline.s b/volk/kernels/volk/asm/neon/volk_arm_32fc_32f_dot_prod_32fc_a_neonpipeline.s
new file mode 100644
index 0000000000..758e7436cd
--- /dev/null
+++ b/volk/kernels/volk/asm/neon/volk_arm_32fc_32f_dot_prod_32fc_a_neonpipeline.s
@@ -0,0 +1,92 @@
+@ static inline void volk_32fc_32f_dot_prod_32fc_a_neonpipeline ( lv_32fc_t* result, const lv_32fc_t* input, const float* taps, unsigned int num_points) {
+ .global volk_32fc_32f_dot_prod_32fc_a_neonpipeline
+volk_32fc_32f_dot_prod_32fc_a_neonpipeline:
+ @ r0 - result: pointer to output array (32fc)
+ @ r1 - input: pointer to input array 1 (32fc)
+ @ r2 - taps: pointer to input array 2 (32f)
+ @ r3 - num_points: number of items to process
+
+ result .req r0
+ input .req r1
+ taps .req r2
+ num_points .req r3
+ quarterPoints .req r7
+ number .req r8
+ @ Note that according to the ARM EABI (AAPCS) Section 5.1.1:
+ @ registers s16-s31 (d8-d15, q4-q7) must be preserved across subroutine calls;
+ @ registers s0-s15 (d0-d7, q0-q3) do not need to be preserved
+ @ registers d16-d31 (q8-q15), if present, do not need to be preserved.
+ realAccQ .req q0 @ d0-d1/s0-s3
+ compAccQ .req q1 @ d2-d3/s4-s7
+ realAccS .req s0 @ d0[0]
+ compAccS .req s4 @ d2[0]
+ tapsVal .req q2 @ d4-d5
+ outVal .req q3 @ d6-d7
+ realMul .req q8 @ d8-d9
+ compMul .req q9 @ d16-d17
+ inRealVal .req q10 @ d18-d19
+ inCompVal .req q11 @ d20-d21
+
+ stmfd sp!, {r7, r8, sl} @ prologue - save register states
+
+ pld [taps, #128] @ pre-load hint - this is implementation specific!
+ pld [input, #128] @ pre-load hint - this is implementation specific!
+
+ veor realAccQ, realAccQ @ zero out accumulators
+ veor compAccQ, compAccQ @ zero out accumulators
+ movs quarterPoints, num_points, lsr #2
+ beq .loop2 @ if zero into quarterPoints
+
+ mov number, quarterPoints
+ @ Optimizing for pipeline
+ vld1.32 {d4-d5}, [taps:128]! @ tapsVal
+ vld2.32 {d20-d23}, [input:128]! @ inRealVal, inCompVal
+ subs number, number, #1
+
+.loop1:
+ @ do work here
+ pld [taps, #128] @ pre-load hint - this is implementation specific!
+ pld [input, #128] @ pre-load hint - this is implementation specific!
+ vmul.f32 realMul, tapsVal, inRealVal
+ vmul.f32 compMul, tapsVal, inCompVal
+ vadd.f32 realAccQ, realAccQ, realMul
+ vadd.f32 compAccQ, compAccQ, compMul
+ vld1.32 {d4-d5}, [taps:128]! @ tapsVal
+ vld2.32 {d20-d23}, [input:128]! @ inRealVal, inCompVal
+
+ subs number, number, #1
+ bne .loop1 @ first loop
+
+ vmul.f32 realMul, tapsVal, inRealVal
+ vmul.f32 compMul, tapsVal, inCompVal
+ vadd.f32 realAccQ, realAccQ, realMul
+ vadd.f32 compAccQ, compAccQ, compMul
+
+ @ Sum up across realAccQ and compAccQ
+ vpadd.f32 d0, d0, d1 @ realAccQ +-> d0
+ vpadd.f32 d2, d2, d3 @ compAccQ +-> d2
+ vadd.f32 realAccS, s0, s1 @ sum the contents of d0 together (realAccQ)
+ vadd.f32 compAccS, s4, s5 @ sum the contents of d2 together (compAccQ)
+ @ critical values are now in s0 (realAccS), s4 (realAccQ)
+ mov number, quarterPoints, asl #2
+ sub number, number, #5
+.loop2:
+ cmp num_points, number
+ bls .done
+
+ vld1.32 {d4[0]}, [taps]! @ s8
+ vld2.32 {d5[0],d6[0]}, [input]! @ s10, s12
+ vmul.f32 s5, s8, s10
+ vmul.f32 s6, s8, s12
+ vadd.f32 realAccS, realAccS, s5
+ vadd.f32 compAccS, compAccS, s6
+
+ add number, number, #1
+ b .loop2
+
+.done:
+ vst1.32 {d0[0]}, [result]! @ realAccS
+ vst1.32 {d2[0]}, [result] @ compAccS
+
+ ldmfd sp!, {r7, r8, sl} @ epilogue - restore register states
+ bx lr
diff --git a/volk/kernels/volk/volk_16i_max_star_16i.h b/volk/kernels/volk/volk_16i_max_star_16i.h
index c67351c5fa..d296c43cb0 100644
--- a/volk/kernels/volk/volk_16i_max_star_16i.h
+++ b/volk/kernels/volk/volk_16i_max_star_16i.h
@@ -85,6 +85,44 @@ static inline void volk_16i_max_star_16i_a_ssse3(short* target, short* src0, un
#endif /*LV_HAVE_SSSE3*/
+#ifdef LV_HAVE_NEON
+#include <arm_neon.h>
+static inline void volk_16i_max_star_16i_neon(short* target, short* src0, unsigned int num_points) {
+ const unsigned int eighth_points = num_points / 8;
+ unsigned number;
+ int16x8_t input_vec;
+ int16x8_t diff, zeros;
+ uint16x8_t comp1, comp2;
+ zeros = veorq_s16(zeros, zeros);
+
+ int16x8x2_t tmpvec;
+
+ int16x8_t candidate_vec = vld1q_dup_s16(src0 );
+ short candidate;
+ ++src0;
+
+ for(number=0; number < eighth_points; ++number) {
+ input_vec = vld1q_s16(src0);
+ __builtin_prefetch(src0+16);
+ diff = vsubq_s16(candidate_vec, input_vec);
+ comp1 = vcgeq_s16(diff, zeros);
+ comp2 = vcltq_s16(diff, zeros);
+
+ tmpvec.val[0] = vandq_s16(candidate_vec, (int16x8_t)comp1);
+ tmpvec.val[1] = vandq_s16(input_vec, (int16x8_t)comp2);
+
+ candidate_vec = vaddq_s16(tmpvec.val[0], tmpvec.val[1]);
+ src0 += 8;
+ }
+ vst1q_s16(&candidate, candidate_vec);
+
+ for(number=0; number < num_points%8; number++) {
+ candidate = ((int16_t)(candidate - src0[number]) > 0) ? candidate : src0[number];
+ }
+ target[0] = candidate;
+}
+#endif /*LV_HAVE_NEON*/
+
#ifdef LV_HAVE_GENERIC
static inline void volk_16i_max_star_16i_generic(short* target, short* src0, unsigned int num_points) {
diff --git a/volk/kernels/volk/volk_16i_max_star_horizontal_16i.h b/volk/kernels/volk/volk_16i_max_star_horizontal_16i.h
index ef88ec094f..1915522947 100644
--- a/volk/kernels/volk/volk_16i_max_star_horizontal_16i.h
+++ b/volk/kernels/volk/volk_16i_max_star_horizontal_16i.h
@@ -110,6 +110,40 @@ static inline void volk_16i_max_star_horizontal_16i_a_ssse3(int16_t* target, in
#endif /*LV_HAVE_SSSE3*/
+#ifdef LV_HAVE_NEON
+#include <arm_neon.h>
+static inline void volk_16i_max_star_horizontal_16i_neon(int16_t* target, int16_t* src0, unsigned int num_points) {
+ const unsigned int eighth_points = num_points / 16;
+ unsigned number;
+ int16x8x2_t input_vec;
+ int16x8_t diff, max_vec, zeros;
+ uint16x8_t comp1, comp2;
+ zeros = veorq_s16(zeros, zeros);
+ for(number=0; number < eighth_points; ++number) {
+ input_vec = vld2q_s16(src0);
+ //__builtin_prefetch(src0+16);
+ diff = vsubq_s16(input_vec.val[0], input_vec.val[1]);
+ comp1 = vcgeq_s16(diff, zeros);
+ comp2 = vcltq_s16(diff, zeros);
+
+ input_vec.val[0] = vandq_s16(input_vec.val[0], (int16x8_t)comp1);
+ input_vec.val[1] = vandq_s16(input_vec.val[1], (int16x8_t)comp2);
+
+ max_vec = vaddq_s16(input_vec.val[0], input_vec.val[1]);
+ vst1q_s16(target, max_vec);
+ src0 += 16;
+ target += 8;
+ }
+ for(number=0; number < num_points%16; number+=2) {
+ target[number >> 1] = ((int16_t)(src0[number] - src0[number + 1]) > 0) ? src0[number] : src0[number+1];
+ }
+
+}
+#endif /* LV_HAVE_NEON */
+
+#ifdef LV_HAVE_NEON
+extern void volk_16i_max_star_horizontal_16i_neonasm(int16_t* target, int16_t* src0, unsigned int num_points);
+#endif /* LV_HAVE_NEON */
#ifdef LV_HAVE_GENERIC
static inline void volk_16i_max_star_horizontal_16i_generic(int16_t* target, int16_t* src0, unsigned int num_points) {
diff --git a/volk/kernels/volk/volk_16i_x4_quad_max_star_16i.h b/volk/kernels/volk/volk_16i_x4_quad_max_star_16i.h
index 56b2cc07ab..8e84b6ea17 100644
--- a/volk/kernels/volk/volk_16i_x4_quad_max_star_16i.h
+++ b/volk/kernels/volk/volk_16i_x4_quad_max_star_16i.h
@@ -165,6 +165,66 @@ static inline void volk_16i_x4_quad_max_star_16i_a_sse2(short* target, short* s
#endif /*LV_HAVE_SSE2*/
+#ifdef LV_HAVE_NEON
+#include <arm_neon.h>
+static inline void volk_16i_x4_quad_max_star_16i_neon(short* target, short* src0, short* src1, short* src2, short* src3, unsigned int num_points) {
+ const unsigned int eighth_points = num_points / 8;
+ unsigned i;
+
+ int16x8_t src0_vec, src1_vec, src2_vec, src3_vec;
+ int16x8_t diff12, diff34;
+ int16x8_t comp0, comp1, comp2, comp3;
+ int16x8_t result1_vec, result2_vec;
+ int16x8_t zeros;
+ zeros = veorq_s16(zeros, zeros);
+ for(i=0; i < eighth_points; ++i) {
+ src0_vec = vld1q_s16(src0);
+ src1_vec = vld1q_s16(src1);
+ src2_vec = vld1q_s16(src2);
+ src3_vec = vld1q_s16(src3);
+ diff12 = vsubq_s16(src0_vec, src1_vec);
+ diff34 = vsubq_s16(src2_vec, src3_vec);
+ comp0 = (int16x8_t)vcgeq_s16(diff12, zeros);
+ comp1 = (int16x8_t)vcltq_s16(diff12, zeros);
+ comp2 = (int16x8_t)vcgeq_s16(diff34, zeros);
+ comp3 = (int16x8_t)vcltq_s16(diff34, zeros);
+ comp0 = vandq_s16(src0_vec, comp0);
+ comp1 = vandq_s16(src1_vec, comp1);
+ comp2 = vandq_s16(src2_vec, comp2);
+ comp3 = vandq_s16(src3_vec, comp3);
+
+ result1_vec = vaddq_s16(comp0, comp1);
+ result2_vec = vaddq_s16(comp2, comp3);
+
+ diff12 = vsubq_s16(result1_vec, result2_vec);
+ comp0 = (int16x8_t)vcgeq_s16(diff12, zeros);
+ comp1 = (int16x8_t)vcltq_s16(diff12, zeros);
+ comp0 = vandq_s16(result1_vec, comp0);
+ comp1 = vandq_s16(result2_vec, comp1);
+ result1_vec = vaddq_s16(comp0, comp1);
+ vst1q_s16(target, result1_vec);
+ src0 += 8;
+ src1 += 8;
+ src2 += 8;
+ src3 += 8;
+ target += 8;
+ }
+
+
+ short temp0 = 0;
+ short temp1 = 0;
+ for(i=eighth_points*8; i < num_points; ++i) {
+ temp0 = ((short)(*src0 - *src1) > 0) ? *src0 : *src1;
+ temp1 = ((short)(*src2 - *src3) > 0) ? *src2 : *src3;
+ *target++ = ((short)(temp0 - temp1)>0) ? temp0 : temp1;
+ src0++;
+ src1++;
+ src2++;
+ src3++;
+ }
+}
+#endif /* LV_HAVE_NEON */
+
#ifdef LV_HAVE_GENERIC
static inline void volk_16i_x4_quad_max_star_16i_generic(short* target, short* src0, short* src1, short* src2, short* src3, unsigned int num_points) {
diff --git a/volk/kernels/volk/volk_16i_x5_add_quad_16i_x4.h b/volk/kernels/volk/volk_16i_x5_add_quad_16i_x4.h
index 9b6d19fd66..cd1952bccb 100644
--- a/volk/kernels/volk/volk_16i_x5_add_quad_16i_x4.h
+++ b/volk/kernels/volk/volk_16i_x5_add_quad_16i_x4.h
@@ -6,9 +6,6 @@
#include<stdio.h>
-
-
-
#ifdef LV_HAVE_SSE2
#include<xmmintrin.h>
#include<emmintrin.h>
@@ -112,6 +109,52 @@ static inline void volk_16i_x5_add_quad_16i_x4_a_sse2(short* target0, short* ta
}
#endif /*LV_HAVE_SSE2*/
+#ifdef LV_HAVE_NEON
+#include <arm_neon.h>
+static inline void volk_16i_x5_add_quad_16i_x4_neon(short* target0, short* target1, short* target2, short* target3, short* src0, short* src1, short* src2, short* src3, short* src4, unsigned int num_points) {
+
+ const unsigned int eighth_points = num_points / 8;
+ unsigned int number = 0;
+
+ int16x8_t src0_vec, src1_vec, src2_vec, src3_vec, src4_vec;
+ int16x8_t target0_vec, target1_vec, target2_vec, target3_vec;
+ for(number = 0; number < eighth_points; ++number) {
+ src0_vec = vld1q_s16(src0);
+ src1_vec = vld1q_s16(src1);
+ src2_vec = vld1q_s16(src2);
+ src3_vec = vld1q_s16(src3);
+ src4_vec = vld1q_s16(src4);
+
+ target0_vec = vaddq_s16(src0_vec , src1_vec);
+ target1_vec = vaddq_s16(src0_vec , src2_vec);
+ target2_vec = vaddq_s16(src0_vec , src3_vec);
+ target3_vec = vaddq_s16(src0_vec , src4_vec);
+
+ vst1q_s16(target0, target0_vec);
+ vst1q_s16(target1, target1_vec);
+ vst1q_s16(target2, target2_vec);
+ vst1q_s16(target3, target3_vec);
+ src0 += 8;
+ src1 += 8;
+ src2 += 8;
+ src3 += 8;
+ src4 += 8;
+ target0 += 8;
+ target1 += 8;
+ target2 += 8;
+ target3 += 8;
+ }
+
+ for(number = eighth_points * 8; number < num_points; ++number) {
+ *target0++ = *src0 + *src1++;
+ *target1++ = *src0 + *src2++;
+ *target2++ = *src0 + *src3++;
+ *target3++ = *src0++ + *src4++;
+ }
+}
+
+#endif /* LV_HAVE_NEON */
+
#ifdef LV_HAVE_GENERIC
diff --git a/volk/kernels/volk/volk_16u_byteswap.h b/volk/kernels/volk/volk_16u_byteswap.h
index 57f2008991..436caf0474 100644
--- a/volk/kernels/volk/volk_16u_byteswap.h
+++ b/volk/kernels/volk/volk_16u_byteswap.h
@@ -106,6 +106,36 @@ static inline void volk_16u_byteswap_a_sse2(uint16_t* intsToSwap, unsigned int n
}
#endif /* LV_HAVE_SSE2 */
+#ifdef LV_HAVE_NEON
+#include <arm_neon.h>
+/*!
+ \brief Byteswaps (in-place) an unaligned vector of int16_t's.
+ \param intsToSwap The vector of data to byte swap
+ \param numDataPoints The number of data points
+*/
+static inline void volk_16u_byteswap_neon(uint16_t* intsToSwap, unsigned int num_points){
+ unsigned int number;
+ unsigned int eighth_points = num_points / 8;
+ uint16x8_t input, output;
+ uint16_t* inputPtr = intsToSwap;
+
+ for(number = 0; number < eighth_points; number++) {
+ input = vld1q_u16(inputPtr);
+ output = vsriq_n_u16(output, input, 8);
+ output = vsliq_n_u16(output, input, 8);
+ vst1q_u16(inputPtr, output);
+ inputPtr += 8;
+ }
+
+ for(number = eighth_points * 8; number < num_points; number++){
+ uint16_t output = *inputPtr;
+ output = (((output >> 8) & 0xff) | ((output << 8) & 0xff00));
+ *inputPtr = output;
+ inputPtr++;
+ }
+}
+#endif /* LV_HAVE_NEON */
+
#ifdef LV_HAVE_GENERIC
/*!
\brief Byteswaps (in-place) an aligned vector of int16_t's.
diff --git a/volk/kernels/volk/volk_32f_binary_slicer_32i.h b/volk/kernels/volk/volk_32f_binary_slicer_32i.h
index 911df85ba4..f47d20fd37 100644
--- a/volk/kernels/volk/volk_32f_binary_slicer_32i.h
+++ b/volk/kernels/volk/volk_32f_binary_slicer_32i.h
@@ -1,5 +1,5 @@
-#ifndef INCLUDED_volk_32f_binary_slicer_32f_H
-#define INCLUDED_volk_32f_binary_slicer_32f_H
+#ifndef INCLUDED_volk_32f_binary_slicer_32i_H
+#define INCLUDED_volk_32f_binary_slicer_32i_H
#ifdef LV_HAVE_GENERIC
@@ -136,7 +136,7 @@ static inline void volk_32f_binary_slicer_32i_a_avx(int* cVector, const float* a
}
}
}
-#endif /* LV_HAVE_SSE2 */
+#endif /* LV_HAVE_AVX */
#ifdef LV_HAVE_SSE2
@@ -230,8 +230,8 @@ static inline void volk_32f_binary_slicer_32i_u_avx(int* cVector, const float* a
}
}
}
-#endif /* LV_HAVE_SSE2 */
+#endif /* LV_HAVE_AVX */
-#endif /* INCLUDED_volk_32f_binary_slicer_32f_H */
+#endif /* INCLUDED_volk_32f_binary_slicer_32i_H */
diff --git a/volk/kernels/volk/volk_32f_binary_slicer_8i.h b/volk/kernels/volk/volk_32f_binary_slicer_8i.h
new file mode 100644
index 0000000000..e24960cab7
--- /dev/null
+++ b/volk/kernels/volk/volk_32f_binary_slicer_8i.h
@@ -0,0 +1,187 @@
+#ifndef INCLUDED_volk_32f_binary_slicer_8i_H
+#define INCLUDED_volk_32f_binary_slicer_8i_H
+
+
+#ifdef LV_HAVE_GENERIC
+/*!
+ \brief Returns integer 1 if float input is greater than or equal to 0, 1 otherwise
+ \param cVector The char (int8_t) output (either 0 or 1)
+ \param aVector The float input
+ \param num_points The number of values in aVector and stored into cVector
+*/
+static inline void
+volk_32f_binary_slicer_8i_generic(int8_t* cVector, const float* aVector,
+ unsigned int num_points)
+{
+ int8_t* cPtr = cVector;
+ const float* aPtr = aVector;
+ unsigned int number = 0;
+
+ for(number = 0; number < num_points; number++) {
+ if(*aPtr++ >= 0) {
+ *cPtr++ = 1;
+ }
+ else {
+ *cPtr++ = 0;
+ }
+ }
+}
+#endif /* LV_HAVE_GENERIC */
+
+
+#ifdef LV_HAVE_GENERIC
+/*!
+ \brief Returns integer 1 if float input is greater than or equal to 0, 1 otherwise
+ \param cVector The char (int8_t) output (either 0 or 1)
+ \param aVector The float input
+ \param num_points The number of values in aVector and stored into cVector
+*/
+static inline void
+volk_32f_binary_slicer_8i_generic_branchless(int8_t* cVector, const float* aVector,
+ unsigned int num_points)
+{
+ int8_t* cPtr = cVector;
+ const float* aPtr = aVector;
+ unsigned int number = 0;
+
+ for(number = 0; number < num_points; number++){
+ *cPtr++ = (*aPtr++ >= 0);
+ }
+}
+#endif /* LV_HAVE_GENERIC */
+
+
+#ifdef LV_HAVE_SSE2
+#include <emmintrin.h>
+/*!
+ \brief Returns integer 1 if float input is greater than or equal to 0, 1 otherwise
+ \param cVector The char (int8_t) output (either 0 or 1)
+ \param aVector The float input
+ \param num_points The number of values in aVector and stored into cVector
+*/
+static inline void
+volk_32f_binary_slicer_8i_a_sse2(int8_t* cVector, const float* aVector,
+ unsigned int num_points)
+{
+ int8_t* cPtr = cVector;
+ const float* aPtr = aVector;
+ unsigned int number = 0;
+
+ unsigned int n16points = num_points / 16;
+ __m128 a0_val, a1_val, a2_val, a3_val;
+ __m128 res0_f, res1_f, res2_f, res3_f;
+ __m128i res0_i, res1_i, res2_i, res3_i;
+ __m128 zero_val;
+ zero_val = _mm_set1_ps(0.0f);
+
+ for(number = 0; number < n16points; number++) {
+ a0_val = _mm_load_ps(aPtr);
+ a1_val = _mm_load_ps(aPtr+4);
+ a2_val = _mm_load_ps(aPtr+8);
+ a3_val = _mm_load_ps(aPtr+12);
+
+ // compare >= 0; return float
+ res0_f = _mm_cmpge_ps(a0_val, zero_val);
+ res1_f = _mm_cmpge_ps(a1_val, zero_val);
+ res2_f = _mm_cmpge_ps(a2_val, zero_val);
+ res3_f = _mm_cmpge_ps(a3_val, zero_val);
+
+ // convert to 32i and >> 31
+ res0_i = _mm_srli_epi32(_mm_cvtps_epi32(res0_f), 31);
+ res1_i = _mm_srli_epi32(_mm_cvtps_epi32(res1_f), 31);
+ res2_i = _mm_srli_epi32(_mm_cvtps_epi32(res2_f), 31);
+ res3_i = _mm_srli_epi32(_mm_cvtps_epi32(res3_f), 31);
+
+ // pack into 16-bit results
+ res0_i = _mm_packs_epi32(res0_i, res1_i);
+ res2_i = _mm_packs_epi32(res2_i, res3_i);
+
+ // pack into 8-bit results
+ res0_i = _mm_packs_epi16(res0_i, res2_i);
+
+ _mm_store_si128((__m128i*)cPtr, res0_i);
+
+ cPtr += 16;
+ aPtr += 16;
+ }
+
+ for(number = n16points * 16; number < num_points; number++) {
+ if( *aPtr++ >= 0) {
+ *cPtr++ = 1;
+ }
+ else {
+ *cPtr++ = 0;
+ }
+ }
+}
+#endif /* LV_HAVE_SSE2 */
+
+
+
+#ifdef LV_HAVE_SSE2
+#include <emmintrin.h>
+/*!
+ \brief Returns integer 1 if float input is greater than or equal to 0, 1 otherwise
+ \param cVector The char (int8_t) output (either 0 or 1)
+ \param aVector The float input
+ \param num_points The number of values in aVector and stored into cVector
+*/
+static inline void
+volk_32f_binary_slicer_8i_u_sse2(int8_t* cVector, const float* aVector,
+ unsigned int num_points)
+{
+ int8_t* cPtr = cVector;
+ const float* aPtr = aVector;
+ unsigned int number = 0;
+
+ unsigned int n16points = num_points / 16;
+ __m128 a0_val, a1_val, a2_val, a3_val;
+ __m128 res0_f, res1_f, res2_f, res3_f;
+ __m128i res0_i, res1_i, res2_i, res3_i;
+ __m128 zero_val;
+ zero_val = _mm_set1_ps (0.0f);
+
+ for(number = 0; number < n16points; number++) {
+ a0_val = _mm_loadu_ps(aPtr);
+ a1_val = _mm_loadu_ps(aPtr+4);
+ a2_val = _mm_loadu_ps(aPtr+8);
+ a3_val = _mm_loadu_ps(aPtr+12);
+
+ // compare >= 0; return float
+ res0_f = _mm_cmpge_ps(a0_val, zero_val);
+ res1_f = _mm_cmpge_ps(a1_val, zero_val);
+ res2_f = _mm_cmpge_ps(a2_val, zero_val);
+ res3_f = _mm_cmpge_ps(a3_val, zero_val);
+
+ // convert to 32i and >> 31
+ res0_i = _mm_srli_epi32(_mm_cvtps_epi32(res0_f), 31);
+ res1_i = _mm_srli_epi32(_mm_cvtps_epi32(res1_f), 31);
+ res2_i = _mm_srli_epi32(_mm_cvtps_epi32(res2_f), 31);
+ res3_i = _mm_srli_epi32(_mm_cvtps_epi32(res3_f), 31);
+
+ // pack into 16-bit results
+ res0_i = _mm_packs_epi32(res0_i, res1_i);
+ res2_i = _mm_packs_epi32(res2_i, res3_i);
+
+ // pack into 8-bit results
+ res0_i = _mm_packs_epi16(res0_i, res2_i);
+
+ _mm_storeu_si128((__m128i*)cPtr, res0_i);
+
+ cPtr += 16;
+ aPtr += 16;
+ }
+
+ for(number = n16points * 16; number < num_points; number++) {
+ if( *aPtr++ >= 0) {
+ *cPtr++ = 1;
+ }
+ else {
+ *cPtr++ = 0;
+ }
+ }
+}
+#endif /* LV_HAVE_SSE2 */
+
+
+#endif /* INCLUDED_volk_32f_binary_slicer_8i_H */
diff --git a/volk/kernels/volk/volk_32f_invsqrt_32f.h b/volk/kernels/volk/volk_32f_invsqrt_32f.h
index 055370661a..8ea12a73c4 100644
--- a/volk/kernels/volk/volk_32f_invsqrt_32f.h
+++ b/volk/kernels/volk/volk_32f_invsqrt_32f.h
@@ -90,6 +90,37 @@ static inline void volk_32f_invsqrt_32f_a_sse(float* cVector, const float* aVect
}
#endif /* LV_HAVE_SSE */
+#ifdef LV_HAVE_NEON
+#include <arm_neon.h>
+/*!
+\brief Sqrts the two input vectors and store their results in the third vector
+\param cVector The vector where the results will be stored
+\param aVector One of the vectors to be invsqrted
+\param num_points The number of values in aVector and bVector to be invsqrted together and stored into cVector
+*/
+static inline void volk_32f_invsqrt_32f_neon(float* cVector, const float* aVector, unsigned int num_points){
+ unsigned int number;
+ const unsigned int quarter_points = num_points / 4;
+
+ float* cPtr = cVector;
+ const float* aPtr = aVector;
+ float32x4_t a_val, c_val;
+ for (number = 0; number < quarter_points; ++number)
+ {
+ a_val = vld1q_f32(aPtr);
+ c_val = vrsqrteq_f32(a_val);
+ vst1q_f32(cPtr, c_val);
+ aPtr += 4;
+ cPtr += 4;
+ }
+
+ for(number=quarter_points * 4;number < num_points; number++)
+ *cPtr++ = Q_rsqrt(*aPtr++);
+
+}
+#endif /* LV_HAVE_NEON */
+
+
#ifdef LV_HAVE_GENERIC
/*!
\brief Sqrts the two input vectors and store their results in the third vector
diff --git a/volk/kernels/volk/volk_32f_s32f_multiply_32f.h b/volk/kernels/volk/volk_32f_s32f_multiply_32f.h
index 2dd86a17c2..8665d4e90e 100644
--- a/volk/kernels/volk/volk_32f_s32f_multiply_32f.h
+++ b/volk/kernels/volk/volk_32f_s32f_multiply_32f.h
@@ -180,6 +180,35 @@ static inline void volk_32f_s32f_multiply_32f_a_avx(float* cVector, const float*
}
#endif /* LV_HAVE_AVX */
+#ifdef LV_HAVE_NEON
+#include <arm_neon.h>
+/*!
+ \brief Scalar float multiply
+ \param cVector The vector where the results will be stored
+ \param aVector One of the vectors to be multiplied
+ \param scalar the scalar value
+ \param num_points The number of values in aVector and bVector to be multiplied together and stored into cVector
+*/
+static inline void volk_32f_s32f_multiply_32f_u_neon(float* cVector, const float* aVector, const float scalar, unsigned int num_points){
+ unsigned int number = 0;
+ const float* inputPtr = aVector;
+ float* outputPtr = cVector;
+ const unsigned int quarterPoints = num_points / 4;
+
+ float32x4_t aVal, cVal;
+
+ for(number = 0; number < quarterPoints; number++){
+ aVal = vld1q_f32(inputPtr); // Load into NEON regs
+ cVal = vmulq_n_f32 (aVal, scalar); // Do the multiply
+ vst1q_f32(outputPtr, cVal); // Store results back to output
+ inputPtr += 4;
+ outputPtr += 4;
+ }
+ for(number = quarterPoints * 4; number < num_points; number++){
+ *outputPtr++ = (*inputPtr++) * scalar;
+ }
+}
+#endif /* LV_HAVE_NEON */
#ifdef LV_HAVE_GENERIC
/*!
@@ -216,6 +245,4 @@ static inline void volk_32f_s32f_multiply_32f_u_orc(float* cVector, const float*
#endif /* LV_HAVE_GENERIC */
-
-
#endif /* INCLUDED_volk_32f_s32f_multiply_32f_a_H */
diff --git a/volk/kernels/volk/volk_32f_sqrt_32f.h b/volk/kernels/volk/volk_32f_sqrt_32f.h
index ab9fffd7dc..f8f8cbd221 100644
--- a/volk/kernels/volk/volk_32f_sqrt_32f.h
+++ b/volk/kernels/volk/volk_32f_sqrt_32f.h
@@ -40,6 +40,37 @@ static inline void volk_32f_sqrt_32f_a_sse(float* cVector, const float* aVector,
}
#endif /* LV_HAVE_SSE */
+#ifdef LV_HAVE_NEON
+#include <arm_neon.h>
+
+/*!
+ \brief Sqrts the two input vectors and store their results in the third vector
+ \param cVector The vector where the results will be stored
+ \param aVector One of the vectors to be sqrted
+ \param num_points The number of values in aVector and bVector to be sqrted together and stored into cVector
+*/
+static inline void volk_32f_sqrt_32f_neon(float* cVector, const float* aVector, unsigned int num_points){
+ float* cPtr = cVector;
+ const float* aPtr = aVector;
+ unsigned int number = 0;
+ unsigned int quarter_points = num_points / 4;
+ float32x4_t in_vec, out_vec;
+
+ for(number = 0; number < quarter_points; number++){
+ in_vec = vld1q_f32(aPtr);
+ // note that armv8 has vsqrt_f32 which will be much better
+ out_vec = vrecpeq_f32(vrsqrteq_f32(in_vec) );
+ vst1q_f32(cPtr, out_vec);
+ aPtr += 4;
+ cPtr += 4;
+ }
+
+ for(number = quarter_points * 4; number < num_points; number++){
+ *cPtr++ = sqrtf(*aPtr++);
+ }
+}
+#endif /* LV_HAVE_NEON */
+
#ifdef LV_HAVE_GENERIC
/*!
\brief Sqrts the two input vectors and store their results in the third vector
diff --git a/volk/kernels/volk/volk_32f_x2_add_32f.h b/volk/kernels/volk/volk_32f_x2_add_32f.h
index 42278f6068..a9a1d4fbf0 100644
--- a/volk/kernels/volk/volk_32f_x2_add_32f.h
+++ b/volk/kernels/volk/volk_32f_x2_add_32f.h
@@ -109,6 +109,49 @@ static inline void volk_32f_x2_add_32f_a_sse(float* cVector, const float* aVecto
}
#endif /* LV_HAVE_SSE */
+#ifdef LV_HAVE_NEON
+#include <arm_neon.h>
+/*
+ \brief Adds the two input vectors and store their results in the third vector
+ \param cVector The vector where the results will be stored
+ \param aVector One of the vectors to be added
+ \param bVector One of the vectors to be added
+ \param num_points The number of values in aVector and bVector to be added together and stored into cVector
+*/
+static inline void volk_32f_x2_add_32f_u_neon(float* cVector, const float* aVector, const float* bVector, unsigned int num_points) {
+ unsigned int number = 0;
+ const unsigned int quarterPoints = num_points / 4;
+
+ float* cPtr = cVector;
+ const float* aPtr = aVector;
+ const float* bPtr= bVector;
+ float32x4_t aVal, bVal, cVal;
+ for(number=0; number < quarterPoints; number++){
+ // Load in to NEON registers
+ aVal = vld1q_f32(aPtr);
+ bVal = vld1q_f32(bPtr);
+ __builtin_prefetch(aPtr+4);
+ __builtin_prefetch(bPtr+4);
+
+ // vector add
+ cVal = vaddq_f32(aVal, bVal);
+ // Store the results back into the C container
+ vst1q_f32(cPtr,cVal);
+
+ aPtr += 4; // q uses quadwords, 4 floats per vadd
+ bPtr += 4;
+ cPtr += 4;
+ }
+
+ number = quarterPoints * 4; // should be = num_points
+ for(;number < num_points; number++){
+ *cPtr++ = (*aPtr++) + (*bPtr++);
+ }
+
+}
+
+#endif /* LV_HAVE_NEON */
+
#ifdef LV_HAVE_GENERIC
/*!
\brief Adds the two input vectors and store their results in the third vector
diff --git a/volk/kernels/volk/volk_32f_x2_dot_prod_32f.h b/volk/kernels/volk/volk_32f_x2_dot_prod_32f.h
index b91252e36f..ac6f56976b 100644
--- a/volk/kernels/volk/volk_32f_x2_dot_prod_32f.h
+++ b/volk/kernels/volk/volk_32f_x2_dot_prod_32f.h
@@ -577,4 +577,94 @@ static inline void volk_32f_x2_dot_prod_32f_a_avx( float* result, const float*
#endif /*LV_HAVE_AVX*/
+#ifdef LV_HAVE_NEON
+#include <arm_neon.h>
+
+static inline void volk_32f_x2_dot_prod_32f_neonopts(float * result, const float * input, const float * taps, unsigned int num_points) {
+
+ unsigned int quarter_points = num_points / 16;
+ float dotProduct = 0;
+ const float* aPtr = input;
+ const float* bPtr= taps;
+ unsigned int number = 0;
+
+ float32x4x4_t a_val, b_val, accumulator0;
+ accumulator0.val[0] = vdupq_n_f32(0);
+ accumulator0.val[1] = vdupq_n_f32(0);
+ accumulator0.val[2] = vdupq_n_f32(0);
+ accumulator0.val[3] = vdupq_n_f32(0);
+ // factor of 4 loop unroll with independent accumulators
+ // uses 12 out of 16 neon q registers
+ for( number = 0; number < quarter_points; ++number) {
+ a_val = vld4q_f32(aPtr);
+ b_val = vld4q_f32(bPtr);
+ accumulator0.val[0] = vmlaq_f32(accumulator0.val[0], a_val.val[0], b_val.val[0]);
+ accumulator0.val[1] = vmlaq_f32(accumulator0.val[1], a_val.val[1], b_val.val[1]);
+ accumulator0.val[2] = vmlaq_f32(accumulator0.val[2], a_val.val[2], b_val.val[2]);
+ accumulator0.val[3] = vmlaq_f32(accumulator0.val[3], a_val.val[3], b_val.val[3]);
+ aPtr += 16;
+ bPtr += 16;
+ }
+ accumulator0.val[0] = vaddq_f32(accumulator0.val[0], accumulator0.val[1]);
+ accumulator0.val[2] = vaddq_f32(accumulator0.val[2], accumulator0.val[3]);
+ accumulator0.val[0] = vaddq_f32(accumulator0.val[2], accumulator0.val[0]);
+ __VOLK_ATTR_ALIGNED(32) float accumulator[4];
+ vst1q_f32(accumulator, accumulator0.val[0]);
+ dotProduct = accumulator[0] + accumulator[1] + accumulator[2] + accumulator[3];
+
+ for(number = quarter_points*16; number < num_points; number++){
+ dotProduct += ((*aPtr++) * (*bPtr++));
+ }
+
+ *result = dotProduct;
+}
+
+#endif
+
+
+
+
+#ifdef LV_HAVE_NEON
+static inline void volk_32f_x2_dot_prod_32f_neon(float * result, const float * input, const float * taps, unsigned int num_points) {
+
+ unsigned int quarter_points = num_points / 8;
+ float dotProduct = 0;
+ const float* aPtr = input;
+ const float* bPtr= taps;
+ unsigned int number = 0;
+
+ float32x4x2_t a_val, b_val, accumulator_val;
+ accumulator_val.val[0] = vdupq_n_f32(0);
+ accumulator_val.val[1] = vdupq_n_f32(0);
+ // factor of 2 loop unroll with independent accumulators
+ for( number = 0; number < quarter_points; ++number) {
+ a_val = vld2q_f32(aPtr);
+ b_val = vld2q_f32(bPtr);
+ accumulator_val.val[0] = vmlaq_f32(accumulator_val.val[0], a_val.val[0], b_val.val[0]);
+ accumulator_val.val[1] = vmlaq_f32(accumulator_val.val[1], a_val.val[1], b_val.val[1]);
+ aPtr += 8;
+ bPtr += 8;
+ }
+ accumulator_val.val[0] = vaddq_f32(accumulator_val.val[0], accumulator_val.val[1]);
+ __VOLK_ATTR_ALIGNED(32) float accumulator[4];
+ vst1q_f32(accumulator, accumulator_val.val[0]);
+ dotProduct = accumulator[0] + accumulator[1] + accumulator[2] + accumulator[3];
+
+ for(number = quarter_points*8; number < num_points; number++){
+ dotProduct += ((*aPtr++) * (*bPtr++));
+ }
+
+ *result = dotProduct;
+}
+
+#endif /* LV_HAVE_NEON */
+
+#ifdef LV_HAVE_NEON
+extern void volk_32f_x2_dot_prod_32f_neonasm(float* cVector, const float* aVector, const float* bVector, unsigned int num_points);
+#endif /* LV_HAVE_NEON */
+
+#ifdef LV_HAVE_NEON
+extern void volk_32f_x2_dot_prod_32f_neonasm_opts(float* cVector, const float* aVector, const float* bVector, unsigned int num_points);
+#endif /* LV_HAVE_NEON */
+
#endif /*INCLUDED_volk_32f_x2_dot_prod_32f_a_H*/
diff --git a/volk/kernels/volk/volk_32f_x2_interleave_32fc.h b/volk/kernels/volk/volk_32f_x2_interleave_32fc.h
index 0935cb32bd..3591b24d69 100644
--- a/volk/kernels/volk/volk_32f_x2_interleave_32fc.h
+++ b/volk/kernels/volk/volk_32f_x2_interleave_32fc.h
@@ -48,6 +48,39 @@ static inline void volk_32f_x2_interleave_32fc_a_sse(lv_32fc_t* complexVector, c
}
#endif /* LV_HAVE_SSE */
+#ifdef LV_HAVE_NEON
+#include <arm_neon.h>
+/*!
+ \brief Interleaves the I & Q vector data into the complex vector.
+ \param iBuffer The I buffer data to be interleaved
+ \param qBuffer The Q buffer data to be interleaved
+ \param complexVector The complex output vector
+ \param num_points The number of complex data values to be interleaved
+*/
+static inline void volk_32f_x2_interleave_32fc_neon(lv_32fc_t* complexVector, const float* iBuffer, const float* qBuffer, unsigned int num_points){
+ unsigned int quarter_points = num_points / 4;
+ unsigned int number;
+ float* complexVectorPtr = (float*) complexVector;
+
+ float32x4x2_t complex_vec;
+ for(number=0; number < quarter_points; ++number) {
+ complex_vec.val[0] = vld1q_f32(iBuffer);
+ complex_vec.val[1] = vld1q_f32(qBuffer);
+ vst2q_f32(complexVectorPtr, complex_vec);
+ iBuffer += 4;
+ qBuffer += 4;
+ complexVectorPtr += 8;
+ }
+
+ for(number=quarter_points * 4; number < num_points; ++number) {
+ *complexVectorPtr++ = *iBuffer++;
+ *complexVectorPtr++ = *qBuffer++;
+ }
+
+}
+#endif /* LV_HAVE_NEON */
+
+
#ifdef LV_HAVE_GENERIC
/*!
\brief Interleaves the I & Q vector data into the complex vector.
diff --git a/volk/kernels/volk/volk_32f_x2_max_32f.h b/volk/kernels/volk/volk_32f_x2_max_32f.h
index 27633acae8..a1403fba18 100644
--- a/volk/kernels/volk/volk_32f_x2_max_32f.h
+++ b/volk/kernels/volk/volk_32f_x2_max_32f.h
@@ -45,6 +45,42 @@ static inline void volk_32f_x2_max_32f_a_sse(float* cVector, const float* aVecto
}
#endif /* LV_HAVE_SSE */
+#ifdef LV_HAVE_NEON
+#include <arm_neon.h>
+/*!
+ \brief Selects maximum value from each entry between bVector and aVector and store their results in the cVector
+ \param cVector The vector where the results will be stored
+ \param aVector The vector to be checked
+ \param bVector The vector to be checked
+ \param num_points The number of values in aVector and bVector to be checked and stored into cVector
+*/
+static inline void volk_32f_x2_max_32f_neon(float* cVector, const float* aVector, const float* bVector, unsigned int num_points){
+ unsigned int quarter_points = num_points / 4;
+ float* cPtr = cVector;
+ const float* aPtr = aVector;
+ const float* bPtr= bVector;
+ unsigned int number = 0;
+
+ float32x4_t a_vec, b_vec, c_vec;
+ for(number = 0; number < quarter_points; number++){
+ a_vec = vld1q_f32(aPtr);
+ b_vec = vld1q_f32(bPtr);
+ c_vec = vmaxq_f32(a_vec, b_vec);
+ vst1q_f32(cPtr, c_vec);
+ aPtr += 4;
+ bPtr += 4;
+ cPtr += 4;
+ }
+
+ for(number = quarter_points*4; number < num_points; number++){
+ const float a = *aPtr++;
+ const float b = *bPtr++;
+ *cPtr++ = ( a > b ? a : b);
+ }
+
+}
+#endif /* LV_HAVE_NEON */
+
#ifdef LV_HAVE_GENERIC
/*!
\brief Selects maximum value from each entry between bVector and aVector and store their results in the cVector
diff --git a/volk/kernels/volk/volk_32f_x2_min_32f.h b/volk/kernels/volk/volk_32f_x2_min_32f.h
index 4773d13211..f7598d6354 100644
--- a/volk/kernels/volk/volk_32f_x2_min_32f.h
+++ b/volk/kernels/volk/volk_32f_x2_min_32f.h
@@ -45,6 +45,44 @@ static inline void volk_32f_x2_min_32f_a_sse(float* cVector, const float* aVecto
}
#endif /* LV_HAVE_SSE */
+#ifdef LV_HAVE_NEON
+#include <arm_neon.h>
+
+/*!
+ \brief Selects minimum value from each entry between bVector and aVector and store their results in the cVector
+ \param cVector The vector where the results will be stored
+ \param aVector The vector to be checked
+ \param bVector The vector to be checked
+ \param num_points The number of values in aVector and bVector to be checked and stored into cVector
+*/
+static inline void volk_32f_x2_min_32f_neon(float* cVector, const float* aVector, const float* bVector, unsigned int num_points){
+ float* cPtr = cVector;
+ const float* aPtr = aVector;
+ const float* bPtr= bVector;
+ unsigned int number = 0;
+ unsigned int quarter_points = num_points / 4;
+
+ float32x4_t a_vec, b_vec, c_vec;
+ for(number = 0; number < quarter_points; number++){
+ a_vec = vld1q_f32(aPtr);
+ b_vec = vld1q_f32(bPtr);
+
+ c_vec = vminq_f32(a_vec, b_vec);
+
+ vst1q_f32(cPtr, c_vec);
+ aPtr += 4;
+ bPtr += 4;
+ cPtr += 4;
+ }
+
+ for(number = quarter_points*4; number < num_points; number++){
+ const float a = *aPtr++;
+ const float b = *bPtr++;
+ *cPtr++ = ( a < b ? a : b);
+ }
+}
+#endif /* LV_HAVE_NEON */
+
#ifdef LV_HAVE_GENERIC
/*!
\brief Selects minimum value from each entry between bVector and aVector and store their results in the cVector
diff --git a/volk/kernels/volk/volk_32f_x2_multiply_32f.h b/volk/kernels/volk/volk_32f_x2_multiply_32f.h
index 9fdbec0a2c..00b31859d6 100644
--- a/volk/kernels/volk/volk_32f_x2_multiply_32f.h
+++ b/volk/kernels/volk/volk_32f_x2_multiply_32f.h
@@ -188,6 +188,35 @@ static inline void volk_32f_x2_multiply_32f_a_avx(float* cVector, const float* a
}
#endif /* LV_HAVE_AVX */
+#ifdef LV_HAVE_NEON
+#include <arm_neon.h>
+
+/*!
+ \brief Multiplys the two input vectors and store their results in the third vector
+ \param cVector The vector where the results will be stored
+ \param aVector One of the vectors to be multiplied
+ \param bVector One of the vectors to be multiplied
+ \param num_points The number of values in aVector and bVector to be multiplied together and stored into cVector
+*/
+static inline void volk_32f_x2_multiply_32f_neon(float* cVector, const float* aVector, const float* bVector, unsigned int num_points){
+ const unsigned int quarter_points = num_points / 4;
+ unsigned int number;
+ float32x4_t avec, bvec, cvec;
+ for(number=0; number < quarter_points; ++number) {
+ avec = vld1q_f32(aVector);
+ bvec = vld1q_f32(bVector);
+ cvec = vmulq_f32(avec, bvec);
+ vst1q_f32(cVector, cvec);
+ aVector += 4;
+ bVector += 4;
+ cVector += 4;
+ }
+ for(number=quarter_points*4; number < num_points; ++number) {
+ *cVector++ = *aVector++ * *bVector++;
+ }
+}
+#endif /* LV_HAVE_NEON */
+
#ifdef LV_HAVE_GENERIC
/*!
\brief Multiplys the two input vectors and store their results in the third vector
diff --git a/volk/kernels/volk/volk_32f_x2_subtract_32f.h b/volk/kernels/volk/volk_32f_x2_subtract_32f.h
index 8ea491f988..c725ef8d4f 100644
--- a/volk/kernels/volk/volk_32f_x2_subtract_32f.h
+++ b/volk/kernels/volk/volk_32f_x2_subtract_32f.h
@@ -63,6 +63,42 @@ static inline void volk_32f_x2_subtract_32f_generic(float* cVector, const float*
}
#endif /* LV_HAVE_GENERIC */
+#ifdef LV_HAVE_NEON
+#include <arm_neon.h>
+
+/*!
+ \brief Subtracts bVector form aVector and store their results in the cVector
+ \param cVector The vector where the results will be stored
+ \param aVector The initial vector
+ \param bVector The vector to be subtracted
+ \param num_points The number of values in aVector and bVector to be subtracted together and stored into cVector
+*/
+static inline void volk_32f_x2_subtract_32f_neon(float* cVector, const float* aVector, const float* bVector, unsigned int num_points){
+ float* cPtr = cVector;
+ const float* aPtr = aVector;
+ const float* bPtr= bVector;
+ unsigned int number = 0;
+ unsigned int quarter_points = num_points / 4;
+
+ float32x4_t a_vec, b_vec, c_vec;
+
+ for(number = 0; number < quarter_points; number++){
+ a_vec = vld1q_f32(aPtr);
+ b_vec = vld1q_f32(bPtr);
+ c_vec = vsubq_f32(a_vec, b_vec);
+ vst1q_f32(cPtr, c_vec);
+ aPtr += 4;
+ bPtr += 4;
+ cPtr += 4;
+ }
+
+ for(number = quarter_points * 4; number < num_points; number++){
+ *cPtr++ = (*aPtr++) - (*bPtr++);
+ }
+}
+#endif /* LV_HAVE_NEON */
+
+
#ifdef LV_HAVE_ORC
/*!
\brief Subtracts bVector form aVector and store their results in the cVector
diff --git a/volk/kernels/volk/volk_32f_x3_sum_of_poly_32f.h b/volk/kernels/volk/volk_32f_x3_sum_of_poly_32f.h
index fdef68209e..0d3c2168c7 100644
--- a/volk/kernels/volk/volk_32f_x3_sum_of_poly_32f.h
+++ b/volk/kernels/volk/volk_32f_x3_sum_of_poly_32f.h
@@ -293,7 +293,138 @@ static inline void volk_32f_x3_sum_of_poly_32f_u_avx(float* target, float* src0,
}
#endif // LV_HAVE_AVX
+#ifdef LV_HAVE_NEON
+#include <arm_neon.h>
+static inline void volk_32f_x3_sum_of_poly_32f_a_neon(float* __restrict target, float* __restrict src0, float* __restrict center_point_array, float* __restrict cutoff, unsigned int num_points) {
+ unsigned int i;
+ float zero[4] = {0.0f, 0.0f, 0.0f, 0.0f };
+
+ float32x2_t x_to_1, x_to_2, x_to_3, x_to_4;
+ float32x2_t cutoff_vector;
+ float32x2x2_t x_low, x_high;
+ float32x4_t x_qvector, c_qvector, cpa_qvector;
+ float accumulator;
+ float res_accumulators[4];
+
+ c_qvector = vld1q_f32( zero );
+ // load the cutoff in to a vector
+ cutoff_vector = vdup_n_f32( *cutoff );
+ // ... center point array
+ cpa_qvector = vld1q_f32( center_point_array );
+
+ for(i=0; i < num_points; ++i) {
+ // load x (src0)
+ x_to_1 = vdup_n_f32( *src0++ );
+
+ // Get a vector of max(src0, cutoff)
+ x_to_1 = vmax_f32(x_to_1, cutoff_vector ); // x^1
+ x_to_2 = vmul_f32(x_to_1, x_to_1); // x^2
+ x_to_3 = vmul_f32(x_to_2, x_to_1); // x^3
+ x_to_4 = vmul_f32(x_to_3, x_to_1); // x^4
+ // zip up doubles to interleave
+ x_low = vzip_f32(x_to_1, x_to_2); // [x^2 | x^1 || x^2 | x^1]
+ x_high = vzip_f32(x_to_3, x_to_4); // [x^4 | x^3 || x^4 | x^3]
+ // float32x4_t vcombine_f32(float32x2_t low, float32x2_t high); // VMOV d0,d0
+ x_qvector = vcombine_f32(x_low.val[0], x_high.val[0]);
+ // now we finally have [x^4 | x^3 | x^2 | x] !
+
+ c_qvector = vmlaq_f32(c_qvector, x_qvector, cpa_qvector);
+
+ }
+ // there should be better vector reduction techniques
+ vst1q_f32(res_accumulators, c_qvector );
+ accumulator = res_accumulators[0] + res_accumulators[1] +
+ res_accumulators[2] + res_accumulators[3];
+
+ *target = accumulator + center_point_array[4] * (float)num_points;
+}
+
+#endif /* LV_HAVE_NEON */
+
+#ifdef LV_HAVE_NEON
+
+static inline void volk_32f_x3_sum_of_poly_32f_neonvert(float* __restrict target, float* __restrict src0, float* __restrict center_point_array, float* __restrict cutoff, unsigned int num_points) {
+
+
+ unsigned int i;
+ float zero[4] = {0.0f, 0.0f, 0.0f, 0.0f };
+
+ float accumulator;
+
+
+ float32x4_t accumulator1_vec, accumulator2_vec, accumulator3_vec, accumulator4_vec;
+ accumulator1_vec = vld1q_f32(zero);
+ accumulator2_vec = vld1q_f32(zero);
+ accumulator3_vec = vld1q_f32(zero);
+ accumulator4_vec = vld1q_f32(zero);
+ float32x4_t x_to_1, x_to_2, x_to_3, x_to_4;
+ float32x4_t cutoff_vector, cpa_0, cpa_1, cpa_2, cpa_3;
+
+ // load the cutoff in to a vector
+ cutoff_vector = vdupq_n_f32( *cutoff );
+ // ... center point array
+ cpa_0 = vdupq_n_f32(center_point_array[0]);
+ cpa_1 = vdupq_n_f32(center_point_array[1]);
+ cpa_2 = vdupq_n_f32(center_point_array[2]);
+ cpa_3 = vdupq_n_f32(center_point_array[3]);
+
+
+ // nathan is not sure why this is slower *and* wrong compared to neonvertfma
+ for(i=0; i < num_points/4; ++i) {
+ // load x
+ x_to_1 = vld1q_f32( src0 );
+
+ // Get a vector of max(src0, cutoff)
+ x_to_1 = vmaxq_f32(x_to_1, cutoff_vector ); // x^1
+ x_to_2 = vmulq_f32(x_to_1, x_to_1); // x^2
+ x_to_3 = vmulq_f32(x_to_2, x_to_1); // x^3
+ x_to_4 = vmulq_f32(x_to_3, x_to_1); // x^4
+ x_to_1 = vmulq_f32(x_to_1, cpa_0);
+ x_to_2 = vmulq_f32(x_to_2, cpa_1);
+ x_to_3 = vmulq_f32(x_to_3, cpa_2);
+ x_to_4 = vmulq_f32(x_to_4, cpa_3);
+ accumulator1_vec = vaddq_f32(accumulator1_vec, x_to_1);
+ accumulator2_vec = vaddq_f32(accumulator2_vec, x_to_2);
+ accumulator3_vec = vaddq_f32(accumulator3_vec, x_to_3);
+ accumulator4_vec = vaddq_f32(accumulator4_vec, x_to_4);
+
+ src0 += 4;
+ }
+ accumulator1_vec = vaddq_f32(accumulator1_vec, accumulator2_vec);
+ accumulator3_vec = vaddq_f32(accumulator3_vec, accumulator4_vec);
+ accumulator1_vec = vaddq_f32(accumulator1_vec, accumulator3_vec);
+
+ __VOLK_ATTR_ALIGNED(32) float res_accumulators[4];
+ vst1q_f32(res_accumulators, accumulator1_vec );
+ accumulator = res_accumulators[0] + res_accumulators[1] +
+ res_accumulators[2] + res_accumulators[3];
+
+ float fst = 0.0;
+ float sq = 0.0;
+ float thrd = 0.0;
+ float frth = 0.0;
+
+ for(i = 4*num_points/4; i < num_points; ++i) {
+ fst = src0[i];
+ fst = MAX(fst, *cutoff);
+
+ sq = fst * fst;
+ thrd = fst * sq;
+ frth = sq * sq;
+ //fith = sq * thrd;
+
+ accumulator += (center_point_array[0] * fst +
+ center_point_array[1] * sq +
+ center_point_array[2] * thrd +
+ center_point_array[3] * frth); //+
+ }
+
+ *target = accumulator + center_point_array[4] * (float)num_points;
+}
+
+#endif /* LV_HAVE_NEON */
+
#endif /*INCLUDED_volk_32f_x3_sum_of_poly_32f_a_H*/
diff --git a/volk/kernels/volk/volk_32fc_32f_dot_prod_32fc.h b/volk/kernels/volk/volk_32fc_32f_dot_prod_32fc.h
index 44535da6d8..6d0c8480e0 100644
--- a/volk/kernels/volk/volk_32fc_32f_dot_prod_32fc.h
+++ b/volk/kernels/volk/volk_32fc_32f_dot_prod_32fc.h
@@ -283,6 +283,159 @@ static inline void volk_32fc_32f_dot_prod_32fc_u_avx( lv_32fc_t* result, const l
}
#endif /*LV_HAVE_AVX*/
+#ifdef LV_HAVE_NEON
+#include <arm_neon.h>
+
+static inline void volk_32fc_32f_dot_prod_32fc_neon_unroll ( lv_32fc_t* __restrict result, const lv_32fc_t* __restrict input, const float* __restrict taps, unsigned int num_points) {
+
+ unsigned int number;
+ const unsigned int quarterPoints = num_points / 8;
+
+ float res[2];
+ float *realpt = &res[0], *imagpt = &res[1];
+ const float* inputPtr = (float*)input;
+ const float* tapsPtr = taps;
+ float zero[4] = {0.0f, 0.0f, 0.0f, 0.0f };
+ float accVector_real[4];
+ float accVector_imag[4];
+
+ float32x4x2_t inputVector0, inputVector1;
+ float32x4_t tapsVector0, tapsVector1;
+ float32x4_t tmp_real0, tmp_imag0;
+ float32x4_t tmp_real1, tmp_imag1;
+ float32x4_t real_accumulator0, imag_accumulator0;
+ float32x4_t real_accumulator1, imag_accumulator1;
+
+ // zero out accumulators
+ // take a *float, return float32x4_t
+ real_accumulator0 = vld1q_f32( zero );
+ imag_accumulator0 = vld1q_f32( zero );
+ real_accumulator1 = vld1q_f32( zero );
+ imag_accumulator1 = vld1q_f32( zero );
+
+ for(number=0 ;number < quarterPoints; number++){
+ // load doublewords and duplicate in to second lane
+ tapsVector0 = vld1q_f32(tapsPtr );
+ tapsVector1 = vld1q_f32(tapsPtr+4 );
+
+ // load quadword of complex numbers in to 2 lanes. 1st lane is real, 2dn imag
+ inputVector0 = vld2q_f32(inputPtr );
+ inputVector1 = vld2q_f32(inputPtr+8 );
+ // inputVector is now a struct of two vectors, 0th is real, 1st is imag
+
+ tmp_real0 = vmulq_f32(tapsVector0, inputVector0.val[0]);
+ tmp_imag0 = vmulq_f32(tapsVector0, inputVector0.val[1]);
+
+ tmp_real1 = vmulq_f32(tapsVector1, inputVector1.val[0]);
+ tmp_imag1 = vmulq_f32(tapsVector1, inputVector1.val[1]);
+
+ real_accumulator0 = vaddq_f32(real_accumulator0, tmp_real0);
+ imag_accumulator0 = vaddq_f32(imag_accumulator0, tmp_imag0);
+
+ real_accumulator1 = vaddq_f32(real_accumulator1, tmp_real1);
+ imag_accumulator1 = vaddq_f32(imag_accumulator1, tmp_imag1);
+
+ tapsPtr += 8;
+ inputPtr += 16;
+ }
+
+ real_accumulator0 = vaddq_f32( real_accumulator0, real_accumulator1);
+ imag_accumulator0 = vaddq_f32( imag_accumulator0, imag_accumulator1);
+ // void vst1q_f32( float32_t * ptr, float32x4_t val);
+ // store results back to a complex (array of 2 floats)
+ vst1q_f32(accVector_real, real_accumulator0);
+ vst1q_f32(accVector_imag, imag_accumulator0);
+ *realpt = accVector_real[0] + accVector_real[1] +
+ accVector_real[2] + accVector_real[3] ;
+
+ *imagpt = accVector_imag[0] + accVector_imag[1] +
+ accVector_imag[2] + accVector_imag[3] ;
+
+ // clean up the remainder
+ for(number=quarterPoints*8; number < num_points; number++){
+ *realpt += ((*inputPtr++) * (*tapsPtr));
+ *imagpt += ((*inputPtr++) * (*tapsPtr++));
+ }
+
+ *result = *(lv_32fc_t*)(&res[0]);
+}
+
+#endif /*LV_HAVE_NEON*/
+
+#ifdef LV_HAVE_NEON
+#include <arm_neon.h>
+
+static inline void volk_32fc_32f_dot_prod_32fc_a_neon ( lv_32fc_t* __restrict result, const lv_32fc_t* __restrict input, const float* __restrict taps, unsigned int num_points) {
+
+ unsigned int number;
+ const unsigned int quarterPoints = num_points / 4;
+
+ float res[2];
+ float *realpt = &res[0], *imagpt = &res[1];
+ const float* inputPtr = (float*)input;
+ const float* tapsPtr = taps;
+ float zero[4] = {0.0f, 0.0f, 0.0f, 0.0f };
+ float accVector_real[4];
+ float accVector_imag[4];
+
+ float32x4x2_t inputVector;
+ float32x4_t tapsVector;
+ float32x4_t tmp_real, tmp_imag;
+ float32x4_t real_accumulator, imag_accumulator;
+
+
+ // zero out accumulators
+ // take a *float, return float32x4_t
+ real_accumulator = vld1q_f32( zero );
+ imag_accumulator = vld1q_f32( zero );
+
+ for(number=0 ;number < quarterPoints; number++){
+ // load taps ( float32x2x2_t = vld1q_f32( float32_t const * ptr) )
+ // load doublewords and duplicate in to second lane
+ tapsVector = vld1q_f32(tapsPtr );
+
+ // load quadword of complex numbers in to 2 lanes. 1st lane is real, 2dn imag
+ inputVector = vld2q_f32(inputPtr );
+
+ tmp_real = vmulq_f32(tapsVector, inputVector.val[0]);
+ tmp_imag = vmulq_f32(tapsVector, inputVector.val[1]);
+
+ real_accumulator = vaddq_f32(real_accumulator, tmp_real);
+ imag_accumulator = vaddq_f32(imag_accumulator, tmp_imag);
+
+
+ tapsPtr += 4;
+ inputPtr += 8;
+
+ }
+
+ // store results back to a complex (array of 2 floats)
+ vst1q_f32(accVector_real, real_accumulator);
+ vst1q_f32(accVector_imag, imag_accumulator);
+ *realpt = accVector_real[0] + accVector_real[1] +
+ accVector_real[2] + accVector_real[3] ;
+
+ *imagpt = accVector_imag[0] + accVector_imag[1] +
+ accVector_imag[2] + accVector_imag[3] ;
+
+ // clean up the remainder
+ for(number=quarterPoints*4; number < num_points; number++){
+ *realpt += ((*inputPtr++) * (*tapsPtr));
+ *imagpt += ((*inputPtr++) * (*tapsPtr++));
+ }
+
+ *result = *(lv_32fc_t*)(&res[0]);
+}
+
+#endif /*LV_HAVE_NEON*/
+
+#ifdef LV_HAVE_NEON
+extern void volk_32fc_32f_dot_prod_32fc_a_neonasm ( lv_32fc_t* result, const lv_32fc_t* input, const float* taps, unsigned int num_points);
+#endif /*LV_HAVE_NEON*/
+
+#ifdef LV_HAVE_NEON
+extern void volk_32fc_32f_dot_prod_32fc_a_neonpipeline ( lv_32fc_t* result, const lv_32fc_t* input, const float* taps, unsigned int num_points);
+#endif /*LV_HAVE_NEON*/
#ifdef LV_HAVE_SSE
diff --git a/volk/kernels/volk/volk_32fc_32f_multiply_32fc.h b/volk/kernels/volk/volk_32fc_32f_multiply_32fc.h
index a12d078c68..21b71998c2 100644
--- a/volk/kernels/volk/volk_32fc_32f_multiply_32fc.h
+++ b/volk/kernels/volk/volk_32fc_32f_multiply_32fc.h
@@ -135,6 +135,43 @@ static inline void volk_32fc_32f_multiply_32fc_generic(lv_32fc_t* cVector, const
}
#endif /* LV_HAVE_GENERIC */
+#ifdef LV_HAVE_NEON
+#include <arm_neon.h>
+ /*!
+ \brief Multiplies the input complex vector with the input lv_32fc_t vector and store their results in the third vector
+ \param cVector The vector where the results will be stored
+ \param aVector The complex vector to be multiplied
+ \param bVector The vectors containing the lv_32fc_t values to be multiplied against each complex value in aVector
+ \param num_points The number of values in aVector and bVector to be multiplied together and stored into cVector
+ */
+static inline void volk_32fc_32f_multiply_32fc_neon(lv_32fc_t* cVector, const lv_32fc_t* aVector, const float* bVector, unsigned int num_points){
+ lv_32fc_t* cPtr = cVector;
+ const lv_32fc_t* aPtr = aVector;
+ const float* bPtr= bVector;
+ unsigned int number = 0;
+ unsigned int quarter_points = num_points / 4;
+
+ float32x4x2_t inputVector, outputVector;
+ float32x4_t tapsVector;
+ for(number = 0; number < quarter_points; number++){
+ inputVector = vld2q_f32((float*)aPtr);
+ tapsVector = vld1q_f32(bPtr);
+
+ outputVector.val[0] = vmulq_f32(inputVector.val[0], tapsVector);
+ outputVector.val[1] = vmulq_f32(inputVector.val[1], tapsVector);
+
+ vst2q_f32((float*)cPtr, outputVector);
+ aPtr += 4;
+ bPtr += 4;
+ cPtr += 4;
+ }
+
+ for(number = quarter_points * 4; number < num_points; number++){
+ *cPtr++ = (*aPtr++) * (*bPtr++);
+ }
+}
+#endif /* LV_HAVE_NEON */
+
#ifdef LV_HAVE_ORC
/*!
\brief Multiplies the input complex vector with the input lv_32fc_t vector and store their results in the third vector
diff --git a/volk/kernels/volk/volk_32fc_conjugate_32fc.h b/volk/kernels/volk/volk_32fc_conjugate_32fc.h
index dce897ff57..0f74b01816 100644
--- a/volk/kernels/volk/volk_32fc_conjugate_32fc.h
+++ b/volk/kernels/volk/volk_32fc_conjugate_32fc.h
@@ -106,6 +106,41 @@ static inline void volk_32fc_conjugate_32fc_a_sse3(lv_32fc_t* cVector, const lv_
}
#endif /* LV_HAVE_SSE3 */
+#ifdef LV_HAVE_NEON
+#include <arm_neon.h>
+ /*!
+ \brief Takes the conjugate of a complex vector.
+ \param cVector The vector where the results will be stored
+ \param aVector Vector to be conjugated
+ \param num_points The number of complex values in aVector to be conjugated and stored into cVector
+ */
+static inline void volk_32fc_conjugate_32fc_a_neon(lv_32fc_t* cVector, const lv_32fc_t* aVector, unsigned int num_points){
+ unsigned int number;
+ const unsigned int quarterPoints = num_points / 4;
+
+ float32x4x2_t x;
+ lv_32fc_t* c = cVector;
+ const lv_32fc_t* a = aVector;
+
+ for(number=0; number < quarterPoints; number++){
+ __builtin_prefetch(a+4);
+ x = vld2q_f32((float*)a); // Load the complex data as ar,br,cr,dr; ai,bi,ci,di
+
+ // xor the imaginary lane
+ x.val[1] = vnegq_f32( x.val[1]);
+
+ vst2q_f32((float*)c,x); // Store the results back into the C container
+
+ a += 4;
+ c += 4;
+ }
+
+ for(number=quarterPoints*4; number < num_points; number++){
+ *c++ = lv_conj(*a++);
+ }
+}
+#endif /* LV_HAVE_NEON */
+
#ifdef LV_HAVE_GENERIC
/*!
\brief Takes the conjugate of a complex vector.
diff --git a/volk/kernels/volk/volk_32fc_magnitude_32f.h b/volk/kernels/volk/volk_32fc_magnitude_32f.h
index 64e99cc1be..b6da7f3630 100644
--- a/volk/kernels/volk/volk_32fc_magnitude_32f.h
+++ b/volk/kernels/volk/volk_32fc_magnitude_32f.h
@@ -233,6 +233,114 @@ static inline void volk_32fc_magnitude_32f_a_generic(float* magnitudeVector, con
}
#endif /* LV_HAVE_GENERIC */
+#ifdef LV_HAVE_NEON
+#include <arm_neon.h>
+
+ /*!
+ \brief Calculates the magnitude of the complexVector and stores the results in the magnitudeVector
+ \param complexVector The vector containing the complex input values
+ \param magnitudeVector The vector containing the real output values
+ \param num_points The number of complex values in complexVector to be calculated and stored into cVector
+ */
+static inline void volk_32fc_magnitude_32f_neon(float* magnitudeVector, const lv_32fc_t* complexVector, unsigned int num_points){
+ unsigned int number;
+ unsigned int quarter_points = num_points / 4;
+ const float* complexVectorPtr = (float*)complexVector;
+ float* magnitudeVectorPtr = magnitudeVector;
+
+ float32x4x2_t complex_vec;
+ float32x4_t magnitude_vec;
+ for(number = 0; number < quarter_points; number++){
+ complex_vec = vld2q_f32(complexVectorPtr);
+ complex_vec.val[0] = vmulq_f32(complex_vec.val[0], complex_vec.val[0]);
+ magnitude_vec = vmlaq_f32(complex_vec.val[0], complex_vec.val[1], complex_vec.val[1]);
+ magnitude_vec = vrsqrteq_f32(magnitude_vec);
+ magnitude_vec = vrecpeq_f32( magnitude_vec ); // no plain ol' sqrt
+ vst1q_f32(magnitudeVectorPtr, magnitude_vec);
+
+ complexVectorPtr += 8;
+ magnitudeVectorPtr += 4;
+ }
+
+ for(number = quarter_points*4; number < num_points; number++){
+ const float real = *complexVectorPtr++;
+ const float imag = *complexVectorPtr++;
+ *magnitudeVectorPtr++ = sqrtf((real*real) + (imag*imag));
+ }
+}
+#endif /* LV_HAVE_NEON */
+
+#ifdef LV_HAVE_NEON
+ /*!
+ \brief Calculates the magnitude of the complexVector and stores the results in the magnitudeVector
+
+ This is an approximation from "Streamlining Digital Signal Processing" by
+ Richard Lyons. Apparently max error is about 1% and mean error is about 0.6%.
+ The basic idea is to do a weighted sum of the abs. value of imag and real parts
+ where weight A is always assigned to max(imag, real) and B is always min(imag,real).
+ There are two pairs of cofficients chosen based on whether min <= 0.4142 max.
+ This method is called equiripple-error magnitude estimation proposed by Filip in '73
+
+ \param complexVector The vector containing the complex input values
+ \param magnitudeVector The vector containing the real output values
+ \param num_points The number of complex values in complexVector to be calculated and stored into cVector
+ */
+static inline void volk_32fc_magnitude_32f_neon_fancy_sweet(float* magnitudeVector, const lv_32fc_t* complexVector, unsigned int num_points){
+ unsigned int number;
+ unsigned int quarter_points = num_points / 4;
+ const float* complexVectorPtr = (float*)complexVector;
+ float* magnitudeVectorPtr = magnitudeVector;
+
+ const float threshold = 0.4142135;
+
+ float32x4_t a_vec, b_vec, a_high, a_low, b_high, b_low;
+ a_high = vdupq_n_f32( 0.84 );
+ b_high = vdupq_n_f32( 0.561);
+ a_low = vdupq_n_f32( 0.99 );
+ b_low = vdupq_n_f32( 0.197);
+
+ uint32x4_t comp0, comp1;
+
+ float32x4x2_t complex_vec;
+ float32x4_t min_vec, max_vec, magnitude_vec;
+ float32x4_t real_abs, imag_abs;
+ for(number = 0; number < quarter_points; number++){
+ complex_vec = vld2q_f32(complexVectorPtr);
+
+ real_abs = vabsq_f32(complex_vec.val[0]);
+ imag_abs = vabsq_f32(complex_vec.val[1]);
+
+ min_vec = vminq_f32(real_abs, imag_abs);
+ max_vec = vmaxq_f32(real_abs, imag_abs);
+
+ // effective branch to choose coefficient pair.
+ comp0 = vcgtq_f32(min_vec, vmulq_n_f32(max_vec, threshold));
+ comp1 = vcleq_f32(min_vec, vmulq_n_f32(max_vec, threshold));
+
+ // and 0s or 1s with coefficients from previous effective branch
+ a_vec = (float32x4_t)vaddq_s32(vandq_s32((int32x4_t)comp0, (int32x4_t)a_high), vandq_s32((int32x4_t)comp1, (int32x4_t)a_low));
+ b_vec = (float32x4_t)vaddq_s32(vandq_s32((int32x4_t)comp0, (int32x4_t)b_high), vandq_s32((int32x4_t)comp1, (int32x4_t)b_low));
+
+ // coefficients chosen, do the weighted sum
+ min_vec = vmulq_f32(min_vec, b_vec);
+ max_vec = vmulq_f32(max_vec, a_vec);
+
+ magnitude_vec = vaddq_f32(min_vec, max_vec);
+ vst1q_f32(magnitudeVectorPtr, magnitude_vec);
+
+ complexVectorPtr += 8;
+ magnitudeVectorPtr += 4;
+ }
+
+ for(number = quarter_points*4; number < num_points; number++){
+ const float real = *complexVectorPtr++;
+ const float imag = *complexVectorPtr++;
+ *magnitudeVectorPtr++ = sqrtf((real*real) + (imag*imag));
+ }
+}
+#endif /* LV_HAVE_NEON */
+
+
#ifdef LV_HAVE_ORC
/*!
\brief Calculates the magnitude of the complexVector and stores the results in the magnitudeVector
diff --git a/volk/kernels/volk/volk_32fc_magnitude_squared_32f.h b/volk/kernels/volk/volk_32fc_magnitude_squared_32f.h
index 0af81401a8..878794ba79 100644
--- a/volk/kernels/volk/volk_32fc_magnitude_squared_32f.h
+++ b/volk/kernels/volk/volk_32fc_magnitude_squared_32f.h
@@ -206,6 +206,48 @@ static inline void volk_32fc_magnitude_squared_32f_a_sse(float* magnitudeVector,
}
#endif /* LV_HAVE_SSE */
+#ifdef LV_HAVE_NEON
+#include <arm_neon.h>
+//
+
+ /*!
+ \brief Calculates the magnitude squared of the complexVector and stores the results in the magnitudeVector
+ \param complexVector The vector containing the complex input values
+ \param magnitudeVector The vector containing the real output values
+ \param num_points The number of complex values in complexVector to be calculated and stored into cVector
+ */
+static inline void volk_32fc_magnitude_squared_32f_neon(float* magnitudeVector, const lv_32fc_t* complexVector, unsigned int num_points){
+ unsigned int number = 0;
+ const unsigned int quarterPoints = num_points / 4;
+
+ const float* complexVectorPtr = (float*)complexVector;
+ float* magnitudeVectorPtr = magnitudeVector;
+
+ float32x4x2_t cmplx_val;
+ float32x4_t result;
+ for(;number < quarterPoints; number++){
+ cmplx_val = vld2q_f32(complexVectorPtr);
+ complexVectorPtr += 8;
+
+ cmplx_val.val[0] = vmulq_f32(cmplx_val.val[0], cmplx_val.val[0]); // Square the values
+ cmplx_val.val[1] = vmulq_f32(cmplx_val.val[1], cmplx_val.val[1]); // Square the values
+
+ result = vaddq_f32(cmplx_val.val[0], cmplx_val.val[1]); // Add the I2 and Q2 values
+
+ vst1q_f32(magnitudeVectorPtr, result);
+ magnitudeVectorPtr += 4;
+ }
+
+ number = quarterPoints * 4;
+ for(; number < num_points; number++){
+ float val1Real = *complexVectorPtr++;
+ float val1Imag = *complexVectorPtr++;
+ *magnitudeVectorPtr++ = (val1Real * val1Real) + (val1Imag * val1Imag);
+ }
+}
+#endif /* LV_HAVE_NEON */
+
+
#ifdef LV_HAVE_GENERIC
/*!
\brief Calculates the magnitude squared of the complexVector and stores the results in the magnitudeVector
diff --git a/volk/kernels/volk/volk_32fc_x2_dot_prod_32fc.h b/volk/kernels/volk/volk_32fc_x2_dot_prod_32fc.h
index 657fa3158f..430b747ff2 100644
--- a/volk/kernels/volk/volk_32fc_x2_dot_prod_32fc.h
+++ b/volk/kernels/volk/volk_32fc_x2_dot_prod_32fc.h
@@ -760,4 +760,220 @@ static inline void volk_32fc_x2_dot_prod_32fc_a_sse4_1(lv_32fc_t* result, const
#endif /*LV_HAVE_SSE4_1*/
+#ifdef LV_HAVE_NEON
+#include <arm_neon.h>
+
+static inline void volk_32fc_x2_dot_prod_32fc_neon(lv_32fc_t* result, const lv_32fc_t* input, const lv_32fc_t* taps, unsigned int num_points) {
+
+ unsigned int quarter_points = num_points / 4;
+ unsigned int number;
+
+ lv_32fc_t* a_ptr = (lv_32fc_t*) taps;
+ lv_32fc_t* b_ptr = (lv_32fc_t*) input;
+ // for 2-lane vectors, 1st lane holds the real part,
+ // 2nd lane holds the imaginary part
+ float32x4x2_t a_val, b_val, c_val, accumulator;
+ float32x4x2_t tmp_real, tmp_imag;
+ accumulator.val[0] = vdupq_n_f32(0);
+ accumulator.val[1] = vdupq_n_f32(0);
+
+ for(number = 0; number < quarter_points; ++number) {
+ a_val = vld2q_f32((float*)a_ptr); // a0r|a1r|a2r|a3r || a0i|a1i|a2i|a3i
+ b_val = vld2q_f32((float*)b_ptr); // b0r|b1r|b2r|b3r || b0i|b1i|b2i|b3i
+ __builtin_prefetch(a_ptr+8);
+ __builtin_prefetch(b_ptr+8);
+
+ // multiply the real*real and imag*imag to get real result
+ // a0r*b0r|a1r*b1r|a2r*b2r|a3r*b3r
+ tmp_real.val[0] = vmulq_f32(a_val.val[0], b_val.val[0]);
+ // a0i*b0i|a1i*b1i|a2i*b2i|a3i*b3i
+ tmp_real.val[1] = vmulq_f32(a_val.val[1], b_val.val[1]);
+
+ // Multiply cross terms to get the imaginary result
+ // a0r*b0i|a1r*b1i|a2r*b2i|a3r*b3i
+ tmp_imag.val[0] = vmulq_f32(a_val.val[0], b_val.val[1]);
+ // a0i*b0r|a1i*b1r|a2i*b2r|a3i*b3r
+ tmp_imag.val[1] = vmulq_f32(a_val.val[1], b_val.val[0]);
+
+ c_val.val[0] = vsubq_f32(tmp_real.val[0], tmp_real.val[1]);
+ c_val.val[1] = vaddq_f32(tmp_imag.val[0], tmp_imag.val[1]);
+
+ accumulator.val[0] = vaddq_f32(accumulator.val[0], c_val.val[0]);
+ accumulator.val[1] = vaddq_f32(accumulator.val[1], c_val.val[1]);
+
+ a_ptr += 4;
+ b_ptr += 4;
+ }
+ lv_32fc_t accum_result[4];
+ vst2q_f32((float*)accum_result, accumulator);
+ *result = accum_result[0] + accum_result[1] + accum_result[2] + accum_result[3];
+
+ // tail case
+ for(number = quarter_points*4; number < num_points; ++number) {
+ *result += (*a_ptr++) * (*b_ptr++);
+ }
+
+}
+#endif /*LV_HAVE_NEON*/
+
+#ifdef LV_HAVE_NEON
+
+static inline void volk_32fc_x2_dot_prod_32fc_neon_opttests(lv_32fc_t* result, const lv_32fc_t* input, const lv_32fc_t* taps, unsigned int num_points) {
+
+ unsigned int quarter_points = num_points / 4;
+ unsigned int number;
+
+ lv_32fc_t* a_ptr = (lv_32fc_t*) taps;
+ lv_32fc_t* b_ptr = (lv_32fc_t*) input;
+ // for 2-lane vectors, 1st lane holds the real part,
+ // 2nd lane holds the imaginary part
+ float32x4x2_t a_val, b_val, accumulator;
+ float32x4x2_t tmp_imag;
+ accumulator.val[0] = vdupq_n_f32(0);
+ accumulator.val[1] = vdupq_n_f32(0);
+
+ for(number = 0; number < quarter_points; ++number) {
+ a_val = vld2q_f32((float*)a_ptr); // a0r|a1r|a2r|a3r || a0i|a1i|a2i|a3i
+ b_val = vld2q_f32((float*)b_ptr); // b0r|b1r|b2r|b3r || b0i|b1i|b2i|b3i
+ __builtin_prefetch(a_ptr+8);
+ __builtin_prefetch(b_ptr+8);
+
+ // do the first multiply
+ tmp_imag.val[1] = vmulq_f32(a_val.val[1], b_val.val[0]);
+ tmp_imag.val[0] = vmulq_f32(a_val.val[0], b_val.val[0]);
+
+ // use multiply accumulate/subtract to get result
+ tmp_imag.val[1] = vmlaq_f32(tmp_imag.val[1], a_val.val[0], b_val.val[1]);
+ tmp_imag.val[0] = vmlsq_f32(tmp_imag.val[0], a_val.val[1], b_val.val[1]);
+
+ accumulator.val[0] = vaddq_f32(accumulator.val[0], tmp_imag.val[0]);
+ accumulator.val[1] = vaddq_f32(accumulator.val[1], tmp_imag.val[1]);
+
+ // increment pointers
+ a_ptr += 4;
+ b_ptr += 4;
+ }
+ lv_32fc_t accum_result[4];
+ vst2q_f32((float*)accum_result, accumulator);
+ *result = accum_result[0] + accum_result[1] + accum_result[2] + accum_result[3];
+
+ // tail case
+ for(number = quarter_points*4; number < num_points; ++number) {
+ *result += (*a_ptr++) * (*b_ptr++);
+ }
+
+}
+#endif /*LV_HAVE_NEON*/
+
+#ifdef LV_HAVE_NEON
+static inline void volk_32fc_x2_dot_prod_32fc_neon_optfma(lv_32fc_t* result, const lv_32fc_t* input, const lv_32fc_t* taps, unsigned int num_points) {
+
+ unsigned int quarter_points = num_points / 4;
+ unsigned int number;
+
+ lv_32fc_t* a_ptr = (lv_32fc_t*) taps;
+ lv_32fc_t* b_ptr = (lv_32fc_t*) input;
+ // for 2-lane vectors, 1st lane holds the real part,
+ // 2nd lane holds the imaginary part
+ float32x4x2_t a_val, b_val, accumulator1, accumulator2;
+ accumulator1.val[0] = vdupq_n_f32(0);
+ accumulator1.val[1] = vdupq_n_f32(0);
+ accumulator2.val[0] = vdupq_n_f32(0);
+ accumulator2.val[1] = vdupq_n_f32(0);
+
+ for(number = 0; number < quarter_points; ++number) {
+ a_val = vld2q_f32((float*)a_ptr); // a0r|a1r|a2r|a3r || a0i|a1i|a2i|a3i
+ b_val = vld2q_f32((float*)b_ptr); // b0r|b1r|b2r|b3r || b0i|b1i|b2i|b3i
+ __builtin_prefetch(a_ptr+8);
+ __builtin_prefetch(b_ptr+8);
+
+ // use 2 accumulators to remove inter-instruction data dependencies
+ accumulator1.val[0] = vmlaq_f32(accumulator1.val[0], a_val.val[0], b_val.val[0]);
+ accumulator1.val[1] = vmlaq_f32(accumulator1.val[1], a_val.val[0], b_val.val[1]);
+ accumulator2.val[0] = vmlsq_f32(accumulator2.val[0], a_val.val[1], b_val.val[1]);
+ accumulator2.val[1] = vmlaq_f32(accumulator2.val[1], a_val.val[1], b_val.val[0]);
+ // increment pointers
+ a_ptr += 4;
+ b_ptr += 4;
+ }
+ accumulator1.val[0] = vaddq_f32(accumulator1.val[0], accumulator2.val[0]);
+ accumulator1.val[1] = vaddq_f32(accumulator1.val[1], accumulator2.val[1]);
+ lv_32fc_t accum_result[4];
+ vst2q_f32((float*)accum_result, accumulator1);
+ *result = accum_result[0] + accum_result[1] + accum_result[2] + accum_result[3];
+
+ // tail case
+ for(number = quarter_points*4; number < num_points; ++number) {
+ *result += (*a_ptr++) * (*b_ptr++);
+ }
+
+}
+#endif /*LV_HAVE_NEON*/
+
+#ifdef LV_HAVE_NEON
+static inline void volk_32fc_x2_dot_prod_32fc_neon_optfmaunroll(lv_32fc_t* result, const lv_32fc_t* input, const lv_32fc_t* taps, unsigned int num_points) {
+// NOTE: GCC does a poor job with this kernel, but the euivalent ASM code is very fast
+
+ unsigned int quarter_points = num_points / 8;
+ unsigned int number;
+
+ lv_32fc_t* a_ptr = (lv_32fc_t*) taps;
+ lv_32fc_t* b_ptr = (lv_32fc_t*) input;
+ // for 2-lane vectors, 1st lane holds the real part,
+ // 2nd lane holds the imaginary part
+ float32x4x4_t a_val, b_val, accumulator1, accumulator2;
+ float32x4x2_t reduced_accumulator;
+ accumulator1.val[0] = vdupq_n_f32(0);
+ accumulator1.val[1] = vdupq_n_f32(0);
+ accumulator1.val[2] = vdupq_n_f32(0);
+ accumulator1.val[3] = vdupq_n_f32(0);
+ accumulator2.val[0] = vdupq_n_f32(0);
+ accumulator2.val[1] = vdupq_n_f32(0);
+ accumulator2.val[2] = vdupq_n_f32(0);
+ accumulator2.val[3] = vdupq_n_f32(0);
+
+ // 8 input regs, 8 accumulators -> 16/16 neon regs are used
+ for(number = 0; number < quarter_points; ++number) {
+ a_val = vld4q_f32((float*)a_ptr); // a0r|a1r|a2r|a3r || a0i|a1i|a2i|a3i
+ b_val = vld4q_f32((float*)b_ptr); // b0r|b1r|b2r|b3r || b0i|b1i|b2i|b3i
+ __builtin_prefetch(a_ptr+8);
+ __builtin_prefetch(b_ptr+8);
+
+ // use 2 accumulators to remove inter-instruction data dependencies
+ accumulator1.val[0] = vmlaq_f32(accumulator1.val[0], a_val.val[0], b_val.val[0]);
+ accumulator1.val[1] = vmlaq_f32(accumulator1.val[1], a_val.val[0], b_val.val[1]);
+
+ accumulator1.val[2] = vmlaq_f32(accumulator1.val[2], a_val.val[2], b_val.val[2]);
+ accumulator1.val[3] = vmlaq_f32(accumulator1.val[3], a_val.val[2], b_val.val[3]);
+
+ accumulator2.val[0] = vmlsq_f32(accumulator2.val[0], a_val.val[1], b_val.val[1]);
+ accumulator2.val[1] = vmlaq_f32(accumulator2.val[1], a_val.val[1], b_val.val[0]);
+
+ accumulator2.val[2] = vmlsq_f32(accumulator2.val[2], a_val.val[3], b_val.val[3]);
+ accumulator2.val[3] = vmlaq_f32(accumulator2.val[3], a_val.val[3], b_val.val[2]);
+ // increment pointers
+ a_ptr += 8;
+ b_ptr += 8;
+ }
+ // reduce 8 accumulator lanes down to 2 (1 real and 1 imag)
+ accumulator1.val[0] = vaddq_f32(accumulator1.val[0], accumulator1.val[2]);
+ accumulator1.val[1] = vaddq_f32(accumulator1.val[1], accumulator1.val[3]);
+ accumulator2.val[0] = vaddq_f32(accumulator2.val[0], accumulator2.val[2]);
+ accumulator2.val[1] = vaddq_f32(accumulator2.val[1], accumulator2.val[3]);
+ reduced_accumulator.val[0] = vaddq_f32(accumulator1.val[0], accumulator2.val[0]);
+ reduced_accumulator.val[1] = vaddq_f32(accumulator1.val[1], accumulator2.val[1]);
+ // now reduce accumulators to scalars
+ lv_32fc_t accum_result[4];
+ vst2q_f32((float*)accum_result, reduced_accumulator);
+ *result = accum_result[0] + accum_result[1] + accum_result[2] + accum_result[3];
+
+ // tail case
+ for(number = quarter_points*8; number < num_points; ++number) {
+ *result += (*a_ptr++) * (*b_ptr++);
+ }
+
+}
+#endif /*LV_HAVE_NEON*/
+
+
#endif /*INCLUDED_volk_32fc_x2_dot_prod_32fc_a_H*/
diff --git a/volk/kernels/volk/volk_32fc_x2_multiply_32fc.h b/volk/kernels/volk/volk_32fc_x2_multiply_32fc.h
index 7db68c1bd8..7c723bcdb6 100644
--- a/volk/kernels/volk/volk_32fc_x2_multiply_32fc.h
+++ b/volk/kernels/volk/volk_32fc_x2_multiply_32fc.h
@@ -149,6 +149,117 @@ static inline void volk_32fc_x2_multiply_32fc_a_generic(lv_32fc_t* cVector, cons
}
#endif /* LV_HAVE_GENERIC */
+#ifdef LV_HAVE_NEON
+#include <arm_neon.h>
+
+ /*!
+ \brief Multiplies the two input complex vectors and stores their results in the third vector
+ \param cVector The vector where the results will be stored
+ \param aVector One of the vectors to be multiplied
+ \param bVector One of the vectors to be multiplied
+ \param num_points The number of complex values in aVector and bVector to be multiplied together and stored into cVector
+ */
+static inline void volk_32fc_x2_multiply_32fc_neon(lv_32fc_t* cVector, const lv_32fc_t* aVector, const lv_32fc_t* bVector, unsigned int num_points){
+
+ lv_32fc_t *a_ptr = (lv_32fc_t*) aVector;
+ lv_32fc_t *b_ptr = (lv_32fc_t*) bVector;
+ unsigned int quarter_points = num_points / 4;
+ float32x4x2_t a_val, b_val, c_val;
+ float32x4x2_t tmp_real, tmp_imag;
+ unsigned int number = 0;
+
+ for(number = 0; number < quarter_points; ++number) {
+ a_val = vld2q_f32((float*)a_ptr); // a0r|a1r|a2r|a3r || a0i|a1i|a2i|a3i
+ b_val = vld2q_f32((float*)b_ptr); // b0r|b1r|b2r|b3r || b0i|b1i|b2i|b3i
+ __builtin_prefetch(a_ptr+4);
+ __builtin_prefetch(b_ptr+4);
+
+ // multiply the real*real and imag*imag to get real result
+ // a0r*b0r|a1r*b1r|a2r*b2r|a3r*b3r
+ tmp_real.val[0] = vmulq_f32(a_val.val[0], b_val.val[0]);
+ // a0i*b0i|a1i*b1i|a2i*b2i|a3i*b3i
+ tmp_real.val[1] = vmulq_f32(a_val.val[1], b_val.val[1]);
+
+ // Multiply cross terms to get the imaginary result
+ // a0r*b0i|a1r*b1i|a2r*b2i|a3r*b3i
+ tmp_imag.val[0] = vmulq_f32(a_val.val[0], b_val.val[1]);
+ // a0i*b0r|a1i*b1r|a2i*b2r|a3i*b3r
+ tmp_imag.val[1] = vmulq_f32(a_val.val[1], b_val.val[0]);
+
+ // store the results
+ c_val.val[0] = vsubq_f32(tmp_real.val[0], tmp_real.val[1]);
+ c_val.val[1] = vaddq_f32(tmp_imag.val[0], tmp_imag.val[1]);
+ vst2q_f32((float*)cVector, c_val);
+
+ a_ptr += 4;
+ b_ptr += 4;
+ cVector += 4;
+ }
+
+ for(number = quarter_points*4; number < num_points; number++){
+ *cVector++ = (*a_ptr++) * (*b_ptr++);
+ }
+
+}
+#endif /* LV_HAVE_NEON */
+
+#ifdef LV_HAVE_NEON
+ /*!
+ \brief Multiplies the two input complex vectors and stores their results in the third vector
+ \param cVector The vector where the results will be stored
+ \param aVector One of the vectors to be multiplied
+ \param bVector One of the vectors to be multiplied
+ \param num_points The number of complex values in aVector and bVector to be multiplied together and stored into cVector
+ */
+static inline void volk_32fc_x2_multiply_32fc_neon_opttests(lv_32fc_t* cVector, const lv_32fc_t* aVector, const lv_32fc_t* bVector, unsigned int num_points){
+
+ lv_32fc_t *a_ptr = (lv_32fc_t*) aVector;
+ lv_32fc_t *b_ptr = (lv_32fc_t*) bVector;
+ unsigned int quarter_points = num_points / 4;
+ float32x4x2_t a_val, b_val;
+ float32x4x2_t tmp_imag;
+ unsigned int number = 0;
+
+ for(number = 0; number < quarter_points; ++number) {
+ a_val = vld2q_f32((float*)a_ptr); // a0r|a1r|a2r|a3r || a0i|a1i|a2i|a3i
+ b_val = vld2q_f32((float*)b_ptr); // b0r|b1r|b2r|b3r || b0i|b1i|b2i|b3i
+ __builtin_prefetch(a_ptr+4);
+ __builtin_prefetch(b_ptr+4);
+
+ // do the first multiply
+ tmp_imag.val[1] = vmulq_f32(a_val.val[1], b_val.val[0]);
+ tmp_imag.val[0] = vmulq_f32(a_val.val[0], b_val.val[0]);
+
+ // use multiply accumulate/subtract to get result
+ tmp_imag.val[1] = vmlaq_f32(tmp_imag.val[1], a_val.val[0], b_val.val[1]);
+ tmp_imag.val[0] = vmlsq_f32(tmp_imag.val[0], a_val.val[1], b_val.val[1]);
+
+ // store
+ vst2q_f32((float*)cVector, tmp_imag);
+ // increment pointers
+ a_ptr += 4;
+ b_ptr += 4;
+ cVector += 4;
+ }
+
+ for(number = quarter_points*4; number < num_points; number++){
+ *cVector++ = (*a_ptr++) * (*b_ptr++);
+ }
+
+}
+#endif /* LV_HAVE_NEON */
+
+#ifdef LV_HAVE_NEON
+ /*!
+ \brief Multiplies the two input complex vectors and stores their results in the third vector
+ \param cVector The vector where the results will be stored
+ \param aVector One of the vectors to be multiplied
+ \param bVector One of the vectors to be multiplied
+ \param num_points The number of complex values in aVector and bVector to be multiplied together and stored into cVector
+ */
+extern void volk_32fc_x2_multiply_32fc_neonasm(lv_32fc_t* cVector, const lv_32fc_t* aVector, const lv_32fc_t* bVector, unsigned int num_points);
+#endif /* LV_HAVE_NEON */
+
#ifdef LV_HAVE_ORC
/*!
\brief Multiplies the two input complex vectors and stores their results in the third vector
diff --git a/volk/kernels/volk/volk_32fc_x2_multiply_conjugate_32fc.h b/volk/kernels/volk/volk_32fc_x2_multiply_conjugate_32fc.h
index cfd6c007f1..dbc123ff25 100644
--- a/volk/kernels/volk/volk_32fc_x2_multiply_conjugate_32fc.h
+++ b/volk/kernels/volk/volk_32fc_x2_multiply_conjugate_32fc.h
@@ -138,6 +138,59 @@ static inline void volk_32fc_x2_multiply_conjugate_32fc_a_sse3(lv_32fc_t* cVecto
}
#endif /* LV_HAVE_SSE */
+#ifdef LV_HAVE_NEON
+#include <arm_neon.h>
+ /*!
+ \brief Multiplies vector a by the conjugate of vector b and stores the results in the third vector
+ \param cVector The vector where the results will be stored
+ \param aVector First vector to be multiplied
+ \param bVector Second vector that is conjugated before being multiplied
+ \param num_points The number of complex values in aVector and bVector to be multiplied together and stored into cVector
+ */
+static inline void volk_32fc_x2_multiply_conjugate_32fc_neon(lv_32fc_t* cVector, const lv_32fc_t* aVector, const lv_32fc_t* bVector, unsigned int num_points){
+
+ lv_32fc_t *a_ptr = (lv_32fc_t*) aVector;
+ lv_32fc_t *b_ptr = (lv_32fc_t*) bVector;
+ unsigned int quarter_points = num_points / 4;
+ float32x4x2_t a_val, b_val, c_val;
+ float32x4x2_t tmp_real, tmp_imag;
+ unsigned int number = 0;
+
+ for(number = 0; number < quarter_points; ++number) {
+ a_val = vld2q_f32((float*)a_ptr); // a0r|a1r|a2r|a3r || a0i|a1i|a2i|a3i
+ b_val = vld2q_f32((float*)b_ptr); // b0r|b1r|b2r|b3r || b0i|b1i|b2i|b3i
+ b_val.val[1] = vnegq_f32(b_val.val[1]);
+ __builtin_prefetch(a_ptr+4);
+ __builtin_prefetch(b_ptr+4);
+
+ // multiply the real*real and imag*imag to get real result
+ // a0r*b0r|a1r*b1r|a2r*b2r|a3r*b3r
+ tmp_real.val[0] = vmulq_f32(a_val.val[0], b_val.val[0]);
+ // a0i*b0i|a1i*b1i|a2i*b2i|a3i*b3i
+ tmp_real.val[1] = vmulq_f32(a_val.val[1], b_val.val[1]);
+
+ // Multiply cross terms to get the imaginary result
+ // a0r*b0i|a1r*b1i|a2r*b2i|a3r*b3i
+ tmp_imag.val[0] = vmulq_f32(a_val.val[0], b_val.val[1]);
+ // a0i*b0r|a1i*b1r|a2i*b2r|a3i*b3r
+ tmp_imag.val[1] = vmulq_f32(a_val.val[1], b_val.val[0]);
+
+ // store the results
+ c_val.val[0] = vsubq_f32(tmp_real.val[0], tmp_real.val[1]);
+ c_val.val[1] = vaddq_f32(tmp_imag.val[0], tmp_imag.val[1]);
+ vst2q_f32((float*)cVector, c_val);
+
+ a_ptr += 4;
+ b_ptr += 4;
+ cVector += 4;
+ }
+
+ for(number = quarter_points*4; number < num_points; number++){
+ *cVector++ = (*a_ptr++) * conj(*b_ptr++);
+ }
+}
+#endif /* LV_HAVE_NEON */
+
#ifdef LV_HAVE_GENERIC
/*!
\brief Multiplies vector a by the conjugate of vector b and stores the results in the third vector
diff --git a/volk/kernels/volk/volk_32fc_x2_square_dist_32f.h b/volk/kernels/volk/volk_32fc_x2_square_dist_32f.h
index 27a081b7cf..56b3d5c230 100644
--- a/volk/kernels/volk/volk_32fc_x2_square_dist_32f.h
+++ b/volk/kernels/volk/volk_32fc_x2_square_dist_32f.h
@@ -92,6 +92,36 @@ static inline void volk_32fc_x2_square_dist_32f_a_sse3(float* target, lv_32fc_t*
#endif /*LV_HAVE_SSE3*/
+#ifdef LV_HAVE_NEON
+#include <arm_neon.h>
+static inline void volk_32fc_x2_square_dist_32f_neon(float* target, lv_32fc_t* src0, lv_32fc_t* points, unsigned int num_points) {
+ const unsigned int quarter_points = num_points / 4;
+ unsigned int number;
+
+ float32x4x2_t a_vec, b_vec;
+ float32x4x2_t diff_vec;
+ float32x4_t tmp, tmp1, dist_sq;
+ a_vec.val[0] = vdupq_n_f32( lv_creal(src0[0]) );
+ a_vec.val[1] = vdupq_n_f32( lv_cimag(src0[0]) );
+ for(number=0; number < quarter_points; ++number) {
+ b_vec = vld2q_f32((float*)points);
+ diff_vec.val[0] = vsubq_f32(a_vec.val[0], b_vec.val[0]);
+ diff_vec.val[1] = vsubq_f32(a_vec.val[1], b_vec.val[1]);
+ tmp = vmulq_f32(diff_vec.val[0], diff_vec.val[0]);
+ tmp1 = vmulq_f32(diff_vec.val[1], diff_vec.val[1]);
+
+ dist_sq = vaddq_f32(tmp, tmp1);
+ vst1q_f32(target, dist_sq);
+ points += 4;
+ target += 4;
+ }
+ for(number=quarter_points*4; number < num_points; ++number) {
+ lv_32fc_t diff = src0[0] - *points++;
+ *target++ = lv_creal(diff) * lv_creal(diff) + lv_cimag(diff) * lv_cimag(diff);
+ }
+}
+#endif /* LV_HAVE_NEON */
+
#ifdef LV_HAVE_GENERIC
static inline void volk_32fc_x2_square_dist_32f_generic(float* target, lv_32fc_t* src0, lv_32fc_t* points, unsigned int num_points) {
diff --git a/volk/kernels/volk/volk_8i_convert_16i.h b/volk/kernels/volk/volk_8i_convert_16i.h
index 3e5c92723f..9776dfdc66 100644
--- a/volk/kernels/volk/volk_8i_convert_16i.h
+++ b/volk/kernels/volk/volk_8i_convert_16i.h
@@ -138,6 +138,45 @@ static inline void volk_8i_convert_16i_a_generic(int16_t* outputVector, const in
}
#endif /* LV_HAVE_GENERIC */
+#ifdef LV_HAVE_NEON
+#include <arm_neon.h>
+
+ /*!
+ \brief Converts the input 8 bit integer data into 16 bit integer data
+ \param inputVector The 8 bit input data buffer
+ \param outputVector The 16 bit output data buffer
+ \param num_points The number of data values to be converted
+ \note Input and output buffers do NOT need to be properly aligned
+ */
+static inline void volk_8i_convert_16i_neon(int16_t* outputVector, const int8_t* inputVector, unsigned int num_points){
+ int16_t* outputVectorPtr = outputVector;
+ const int8_t* inputVectorPtr = inputVector;
+ unsigned int number;
+ const unsigned int eighth_points = num_points / 8;
+
+ int8x8_t input_vec ;
+ int16x8_t converted_vec;
+
+ // NEON doesn't have a concept of 8 bit registers, so we are really
+ // dealing with the low half of 16-bit registers. Since this requires
+ // a move instruction we likely do better with ASM here.
+ for(number = 0; number < eighth_points; ++number) {
+ input_vec = vld1_s8(inputVectorPtr);
+ converted_vec = vmovl_s8(input_vec);
+ //converted_vec = vmulq_s16(converted_vec, scale_factor);
+ converted_vec = vshlq_n_s16(converted_vec, 8);
+ vst1q_s16( outputVectorPtr, converted_vec);
+
+ inputVectorPtr += 8;
+ outputVectorPtr += 8;
+ }
+
+ for(number = eighth_points * 8; number < num_points; number++){
+ *outputVectorPtr++ = ((int16_t)(*inputVectorPtr++)) * 256;
+ }
+}
+#endif /* LV_HAVE_NEON */
+
#ifdef LV_HAVE_ORC
/*!
\brief Converts the input 8 bit integer data into 16 bit integer data
diff --git a/volk/kernels/volk/volk_8ic_deinterleave_real_8i.h b/volk/kernels/volk/volk_8ic_deinterleave_real_8i.h
index c8ff18e67b..427c9abf55 100644
--- a/volk/kernels/volk/volk_8ic_deinterleave_real_8i.h
+++ b/volk/kernels/volk/volk_8ic_deinterleave_real_8i.h
@@ -61,6 +61,34 @@ static inline void volk_8ic_deinterleave_real_8i_generic(int8_t* iBuffer, const
}
#endif /* LV_HAVE_GENERIC */
+#ifdef LV_HAVE_NEON
+#include <arm_neon.h>
+/*!
+ \brief Deinterleaves the complex 8 bit vector into I vector data
+ \param complexVector The complex input vector
+ \param iBuffer The I buffer output data
+ \param num_points The number of complex data values to be deinterleaved
+*/
+static inline void volk_8ic_deinterleave_real_8i_neon(int8_t* iBuffer, const lv_8sc_t* complexVector, unsigned int num_points){
+ unsigned int number;
+ unsigned int sixteenth_points = num_points / 16;
+
+ int8x16x2_t input_vector;
+ for(number=0; number < sixteenth_points; ++number) {
+ input_vector = vld2q_s8((int8_t*) complexVector );
+ vst1q_s8(iBuffer, input_vector.val[0]);
+ iBuffer += 16;
+ complexVector += 16;
+ }
+
+ const int8_t* complexVectorPtr = (int8_t*)complexVector;
+ int8_t* iBufferPtr = iBuffer;
+ for(number = sixteenth_points*16; number < num_points; number++){
+ *iBufferPtr++ = *complexVectorPtr++;
+ complexVectorPtr++;
+ }
+}
+#endif /* LV_HAVE_NEON */
diff --git a/volk/lib/CMakeLists.txt b/volk/lib/CMakeLists.txt
index d72eb726e4..71f3268c62 100644
--- a/volk/lib/CMakeLists.txt
+++ b/volk/lib/CMakeLists.txt
@@ -101,7 +101,7 @@ macro(check_arch arch_name)
if (NOT ${have_flag})
set(have_${arch_name} FALSE)
endif()
- endforeach(flag)
+ endforeach()
if (have_${arch_name})
list(APPEND available_archs ${arch_name})
endif()
@@ -382,6 +382,44 @@ include_directories(
)
########################################################################
+# Handle ASM support
+# on by default, but let users turn it off
+########################################################################
+if(${CMAKE_VERSION} VERSION_GREATER "2.8.9")
+ set(ASM_ARCHS_AVAILABLE "armv7")
+
+ set(FULL_C_FLAGS "${CMAKE_C_FLAGS}" "${CMAKE_CXX_COMPILER_ARG1}")
+
+ # sort through a list of all architectures we have ASM for
+ # if we find one that matches our current system architecture
+ # set up the assembler flags and include the source files
+ foreach(ARCH ${ASM_ARCHS_AVAILABLE})
+ message(STATUS "--==>> -CFLAGS1: ${FULL_C_FLAGS}")
+ string(REGEX MATCH "${ARCH}" ASM_ARCH "${FULL_C_FLAGS}")
+ if( ASM_ARCH STREQUAL "armv7" )
+ set(ASM-ATT $ENV{ASM})
+ message(STATUS "---- Adding ASM files") # we always use ATT syntax
+ message(STATUS "-- Detected armv7 architecture; enabling ASM")
+ # setup architecture specific assembler flags
+ set(ARCH_ASM_FLAGS "-mfpu=neon -g")
+ # then add the files
+ include_directories(${CMAKE_SOURCE_DIR}/kernels/volk/asm/neon)
+ file(GLOB asm_files ${CMAKE_SOURCE_DIR}/kernels/volk/asm/neon/*.s)
+ foreach(asm_file ${asm_files})
+ list(APPEND volk_sources ${asm_file})
+ message(STATUS "Adding source file: ${asm_file}")
+ endforeach(asm_file)
+ endif()
+ set(CMAKE_ASM-ATT_FLAGS_INIT ${ARCH_ASM_FLAGS})
+ enable_language(ASM-ATT) # this must be after flags_init
+ message(STATUS "asm flags: ${CMAKE_ASM-ATT_FLAGS}")
+ endforeach(ARCH)
+
+else(${CMAKE_VERSION} VERSION_GREATER "2.8.9")
+ message(STATUS "Not enabling ASM support. CMake >= 2.8.10 required.")
+endif(${CMAKE_VERSION} VERSION_GREATER "2.8.9")
+
+########################################################################
# Handle orc support
########################################################################
if(ORC_FOUND)
@@ -436,7 +474,8 @@ list(APPEND volk_sources ${CMAKE_CURRENT_BINARY_DIR}/constants.c)
# Setup the volk sources list and library
########################################################################
if(NOT WIN32)
- add_definitions(-fvisibility=hidden)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden")
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden")
endif()
list(APPEND volk_sources
diff --git a/volk/lib/testqa.cc b/volk/lib/testqa.cc
index fc54b35a72..bc97ad16e5 100644
--- a/volk/lib/testqa.cc
+++ b/volk/lib/testqa.cc
@@ -113,3 +113,4 @@ VOLK_RUN_TESTS(volk_32fc_s32fc_rotatorpuppet_32fc, 1e-3, (lv_32fc_t)lv_cmake(0.9
VOLK_RUN_TESTS(volk_8u_conv_k7_r2puppet_8u, 0, 0, 2060, 1);
VOLK_RUN_TESTS(volk_32f_invsqrt_32f, 1e-2, 0, 20462, 1);
VOLK_RUN_TESTS(volk_32f_binary_slicer_32i, 0, 0, 20462, 1);
+VOLK_RUN_TESTS(volk_32f_binary_slicer_8i, 0, 0, 20462, 1);