summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Koslowski <koslowski@kit.edu>2016-09-12 14:16:50 -0600
committerSebastian Koslowski <koslowski@kit.edu>2016-09-12 14:19:29 -0600
commitf7cdfff6a85ce52b1d7c0b5131645fcb77405fe8 (patch)
tree908af9bf8d1c512e22116cb3afbc89eb5883cc93
parenta867a290194228d09ba93f0f46e3a4e4523f5396 (diff)
parentaf4323d1e471476efa255e3df745397f7c8a1b71 (diff)
Merge remote-tracking branch 'upstream/next' into gtk3
-rw-r--r--CMakeLists.txt5
-rw-r--r--cmake/Modules/FindGnuradio.cmake3
-rw-r--r--cmake/Modules/FindQwt.cmake14
-rw-r--r--cmake/Modules/GnuradioConfig.cmake.in1
-rw-r--r--cmake/msvc/config.h3
-rw-r--r--docs/RELEASE-NOTES-3.7.10.1.md68
-rw-r--r--docs/doxygen/Doxyfile.in5
-rw-r--r--docs/doxygen/other/build_guide.dox2
-rw-r--r--docs/doxygen/other/group_defs.dox1
-rw-r--r--docs/sphinx/source/index.rst14
-rw-r--r--docs/sphinx/source/wxgui.rst5
-rw-r--r--docs/sphinx/source/wxgui_blocks.rst7
-rw-r--r--gnuradio-runtime/include/gnuradio/basic_block.h15
-rw-r--r--gnuradio-runtime/lib/CMakeLists.txt2
-rw-r--r--gnuradio-runtime/lib/scheduler_sts.cc90
-rw-r--r--gnuradio-runtime/lib/scheduler_sts.h66
-rw-r--r--gnuradio-runtime/lib/single_threaded_scheduler.cc363
-rw-r--r--gnuradio-runtime/lib/single_threaded_scheduler.h65
-rw-r--r--gnuradio-runtime/lib/sys_paths.cc8
-rw-r--r--gnuradio-runtime/lib/top_block_impl.cc4
-rw-r--r--gnuradio-runtime/python/gnuradio/__init__.py1
-rw-r--r--gnuradio-runtime/swig/CMakeLists.txt1
-rw-r--r--gnuradio-runtime/swig/single_threaded_scheduler.i54
-rw-r--r--gr-audio/examples/python/CMakeLists.txt1
-rwxr-xr-xgr-audio/examples/python/audio_fft.py138
-rw-r--r--gr-audio/lib/portaudio/portaudio_sink.cc4
-rw-r--r--gr-audio/lib/portaudio/portaudio_source.cc4
-rw-r--r--gr-blocks/grc/blocks_block_tree.xml4
-rw-r--r--gr-blocks/grc/blocks_message_burst_source.xml58
-rw-r--r--gr-blocks/grc/blocks_message_sink.xml72
-rw-r--r--gr-blocks/grc/blocks_multiply_const_xx.xml (renamed from gr-blocks/grc/blocks_message_source.xml)34
-rw-r--r--gr-blocks/grc/blocks_pdu_filter.xml5
-rw-r--r--gr-blocks/grc/blocks_pdu_remove.xml1
-rw-r--r--gr-blocks/grc/blocks_pdu_set.xml2
-rw-r--r--gr-blocks/include/gnuradio/blocks/CMakeLists.txt3
-rw-r--r--gr-blocks/include/gnuradio/blocks/message_burst_source.h52
-rw-r--r--gr-blocks/include/gnuradio/blocks/message_sink.h52
-rw-r--r--gr-blocks/include/gnuradio/blocks/message_source.h54
-rw-r--r--gr-blocks/include/gnuradio/blocks/pdu_filter.h3
-rw-r--r--gr-blocks/include/gnuradio/blocks/pdu_remove.h1
-rw-r--r--gr-blocks/include/gnuradio/blocks/pdu_set.h2
-rw-r--r--gr-blocks/lib/CMakeLists.txt3
-rw-r--r--gr-blocks/lib/message_burst_source_impl.cc149
-rw-r--r--gr-blocks/lib/message_burst_source_impl.h58
-rw-r--r--gr-blocks/lib/message_sink_impl.cc132
-rw-r--r--gr-blocks/lib/message_sink_impl.h56
-rw-r--r--gr-blocks/lib/message_source_impl.cc151
-rw-r--r--gr-blocks/lib/message_source_impl.h62
-rw-r--r--gr-blocks/lib/pdu_filter_impl.h3
-rw-r--r--gr-blocks/lib/pdu_remove_impl.h1
-rw-r--r--gr-blocks/lib/pdu_set_impl.h2
-rw-r--r--gr-blocks/lib/tcp_server_sink_impl.cc6
-rwxr-xr-xgr-blocks/python/blocks/qa_message.py31
-rw-r--r--gr-blocks/python/blocks/qa_message_tags.py27
-rw-r--r--gr-blocks/python/grc_gnuradio/README3
-rw-r--r--gr-blocks/swig/blocks_swig0.i9
-rw-r--r--gr-digital/examples/CMakeLists.txt3
-rw-r--r--gr-digital/examples/demod/test_corr_and_sync.grc3332
-rw-r--r--gr-digital/examples/demod/uhd_corr_and_sync_rx.grc1677
-rw-r--r--gr-digital/examples/demod/uhd_corr_and_sync_tx.grc1619
-rw-r--r--gr-digital/grc/digital_block_tree.xml1
-rw-r--r--gr-digital/grc/digital_correlate_and_sync_cc.xml36
-rw-r--r--gr-digital/include/gnuradio/digital/CMakeLists.txt1
-rw-r--r--gr-digital/include/gnuradio/digital/correlate_and_sync_cc.h90
-rw-r--r--gr-digital/include/gnuradio/digital/glfsr.h22
-rw-r--r--gr-digital/include/gnuradio/digital/glfsr_source_b.h10
-rw-r--r--gr-digital/include/gnuradio/digital/glfsr_source_f.h10
-rw-r--r--gr-digital/lib/CMakeLists.txt1
-rw-r--r--gr-digital/lib/clock_recovery_mm_cc_impl.cc1
-rw-r--r--gr-digital/lib/clock_recovery_mm_ff_impl.cc1
-rw-r--r--gr-digital/lib/correlate_and_sync_cc_impl.cc172
-rw-r--r--gr-digital/lib/correlate_and_sync_cc_impl.h62
-rw-r--r--gr-digital/lib/glfsr.cc19
-rw-r--r--gr-digital/lib/glfsr_source_b_impl.cc38
-rw-r--r--gr-digital/lib/glfsr_source_b_impl.h14
-rw-r--r--gr-digital/lib/glfsr_source_f_impl.cc38
-rw-r--r--gr-digital/lib/glfsr_source_f_impl.h18
-rw-r--r--gr-digital/lib/modulate_vector.cc4
-rw-r--r--gr-digital/lib/pfb_clock_sync_fff_impl.cc2
-rw-r--r--gr-digital/python/digital/qa_correlate_and_sync.py104
-rw-r--r--gr-digital/swig/digital_swig.i5
-rw-r--r--gr-dtv/examples/README.dvbs8
-rw-r--r--gr-dtv/examples/catv_tx_64qam.grc1302
-rw-r--r--gr-dtv/examples/dvbs2_tx.grc629
-rw-r--r--gr-dtv/examples/dvbs_tx.grc792
-rw-r--r--gr-dtv/examples/dvbt_rx_8k.grc625
-rw-r--r--gr-dtv/examples/dvbt_tx_2k.grc2679
-rw-r--r--gr-dtv/examples/dvbt_tx_8k.grc2795
-rw-r--r--gr-dtv/examples/uhd_atsc_tx.grc8
-rw-r--r--gr-dtv/examples/vv003-cr23.grc1821
-rw-r--r--gr-dtv/examples/vv009-4kfft.grc1831
-rw-r--r--gr-dtv/examples/vv018-miso.grc2169
-rw-r--r--gr-dtv/grc/dtv_dvb_bbscrambler_bb.xml10
-rw-r--r--gr-dtv/grc/dtv_dvb_bch_bb.xml10
-rw-r--r--gr-dtv/grc/dtv_dvbt2_freqinterleaver_cc.xml4
-rw-r--r--gr-dtv/lib/CMakeLists.txt1
-rw-r--r--gr-dtv/lib/atsc/atsc_interleaver_impl.cc12
-rw-r--r--gr-dtv/lib/dvb/dvb_bbheader_bb_impl.cc7
-rw-r--r--gr-dtv/lib/dvbs2/dvbs2_physical_cc_impl.cc18
-rw-r--r--gr-dtv/lib/dvbt/dvbt_bit_inner_deinterleaver_impl.cc176
-rw-r--r--gr-dtv/lib/dvbt/dvbt_bit_inner_deinterleaver_impl.h7
-rw-r--r--gr-dtv/lib/dvbt/dvbt_bit_inner_interleaver_impl.cc175
-rw-r--r--gr-dtv/lib/dvbt/dvbt_bit_inner_interleaver_impl.h7
-rw-r--r--gr-dtv/lib/dvbt/dvbt_configure.cc3
-rw-r--r--gr-dtv/lib/dvbt/dvbt_demap_impl.cc11
-rw-r--r--gr-dtv/lib/dvbt/dvbt_energy_dispersal_impl.cc5
-rw-r--r--gr-dtv/lib/dvbt/dvbt_inner_coder_impl.cc50
-rw-r--r--gr-dtv/lib/dvbt/dvbt_inner_coder_impl.h9
-rw-r--r--gr-dtv/lib/dvbt/dvbt_map_impl.cc9
-rw-r--r--gr-dtv/lib/dvbt/dvbt_ofdm_sym_acquisition_impl.cc27
-rw-r--r--gr-dtv/lib/dvbt/dvbt_reed_solomon.cc475
-rw-r--r--gr-dtv/lib/dvbt/dvbt_reed_solomon.h70
-rw-r--r--gr-dtv/lib/dvbt/dvbt_reed_solomon_dec_impl.cc72
-rw-r--r--gr-dtv/lib/dvbt/dvbt_reed_solomon_dec_impl.h19
-rw-r--r--gr-dtv/lib/dvbt/dvbt_reed_solomon_enc_impl.cc59
-rw-r--r--gr-dtv/lib/dvbt/dvbt_reed_solomon_enc_impl.h16
-rw-r--r--gr-dtv/lib/dvbt/dvbt_reference_signals_impl.cc73
-rw-r--r--gr-dtv/lib/dvbt/dvbt_symbol_inner_interleaver_impl.cc9
-rw-r--r--gr-dtv/lib/dvbt/dvbt_viterbi_decoder_impl.cc11
-rw-r--r--gr-dtv/lib/dvbt2/dvbt2_cellinterleaver_cc_impl.cc11
-rw-r--r--gr-dtv/lib/dvbt2/dvbt2_framemapper_cc_impl.cc19
-rw-r--r--gr-dtv/lib/dvbt2/dvbt2_interleaver_bb_impl.cc20
-rw-r--r--gr-dtv/lib/dvbt2/dvbt2_paprtr_cc_impl.cc41
-rw-r--r--gr-dtv/lib/dvbt2/dvbt2_pilotgenerator_cc_impl.cc8
-rw-r--r--gr-fec/include/gnuradio/fec/polar_decoder_common.h2
-rw-r--r--gr-fec/lib/polar_decoder_common.cc2
-rw-r--r--gr-qtgui/CMakeLists.txt30
-rw-r--r--gr-qtgui/examples/c++/CMakeLists.txt8
-rwxr-xr-xgr-qtgui/examples/pyqt_const_c.py62
-rwxr-xr-xgr-qtgui/examples/pyqt_example_c.py59
-rwxr-xr-xgr-qtgui/examples/pyqt_example_f.py59
-rwxr-xr-xgr-qtgui/examples/pyqt_freq_c.py59
-rwxr-xr-xgr-qtgui/examples/pyqt_freq_f.py60
-rwxr-xr-xgr-qtgui/examples/pyqt_histogram_f.py73
-rwxr-xr-xgr-qtgui/examples/pyqt_time_c.py66
-rwxr-xr-xgr-qtgui/examples/pyqt_time_f.py67
-rwxr-xr-xgr-qtgui/examples/pyqt_time_raster_b.py19
-rwxr-xr-xgr-qtgui/examples/pyqt_time_raster_f.py19
-rwxr-xr-xgr-qtgui/examples/pyqt_waterfall_c.py59
-rwxr-xr-xgr-qtgui/examples/pyqt_waterfall_f.py62
-rw-r--r--gr-qtgui/examples/qtgui_tags_viewing.grc2243
-rw-r--r--gr-qtgui/grc/CMakeLists.txt27
-rw-r--r--gr-qtgui/grc/qtgui_ber_sink_b.xml2
-rw-r--r--gr-qtgui/grc/qtgui_check_box.xml2
-rw-r--r--gr-qtgui/grc/qtgui_chooser.xml4
-rw-r--r--gr-qtgui/grc/qtgui_const_sink_x.xml2
-rw-r--r--gr-qtgui/grc/qtgui_edit_box_msg.xml2
-rw-r--r--gr-qtgui/grc/qtgui_entry.xml2
-rw-r--r--gr-qtgui/grc/qtgui_freq_sink_x.xml2
-rw-r--r--gr-qtgui/grc/qtgui_histogram_sink_x.xml2
-rw-r--r--gr-qtgui/grc/qtgui_label.xml2
-rw-r--r--gr-qtgui/grc/qtgui_number_sink.xml2
-rw-r--r--gr-qtgui/grc/qtgui_push_button.xml2
-rw-r--r--gr-qtgui/grc/qtgui_sink_x.xml2
-rw-r--r--gr-qtgui/grc/qtgui_tab_widget.xml2
-rw-r--r--gr-qtgui/grc/qtgui_time_raster_x.xml2
-rw-r--r--gr-qtgui/grc/qtgui_time_sink_x.xml2
-rw-r--r--gr-qtgui/grc/qtgui_vector_sink_f.xml2
-rw-r--r--gr-qtgui/grc/qtgui_waterfall_sink_x.xml2
-rw-r--r--gr-qtgui/include/QtWidgets/QRegExpValidator9
-rw-r--r--gr-qtgui/include/gnuradio/qtgui/form_menus.h5
-rw-r--r--gr-qtgui/lib/CMakeLists.txt10
-rw-r--r--gr-qtgui/lib/SpectrumGUIClass.cc1
-rw-r--r--gr-qtgui/lib/const_sink_c_impl.cc2
-rw-r--r--gr-qtgui/lib/edit_box_msg_impl.cc4
-rw-r--r--gr-qtgui/lib/freq_sink_c_impl.cc2
-rw-r--r--gr-qtgui/lib/freq_sink_f_impl.cc2
-rw-r--r--gr-qtgui/lib/histogram_sink_f_impl.cc2
-rw-r--r--gr-qtgui/lib/sink_c_impl.cc2
-rw-r--r--gr-qtgui/lib/sink_f_impl.cc2
-rw-r--r--gr-qtgui/lib/time_raster_sink_b_impl.cc2
-rw-r--r--gr-qtgui/lib/time_raster_sink_f_impl.cc2
-rw-r--r--gr-qtgui/lib/time_sink_c_impl.cc2
-rw-r--r--gr-qtgui/lib/time_sink_f_impl.cc2
-rw-r--r--gr-qtgui/lib/vector_sink_f_impl.cc2
-rw-r--r--gr-qtgui/lib/waterfall_sink_c_impl.cc2
-rw-r--r--gr-qtgui/lib/waterfall_sink_f_impl.cc2
-rw-r--r--gr-qtgui/python/qtgui/CMakeLists.txt10
-rwxr-xr-xgr-qtgui/python/qtgui/range.py.cmakein (renamed from gr-qtgui/python/qtgui/range.py)27
-rw-r--r--gr-qtgui/themes/dark.qss1
-rw-r--r--gr-trellis/examples/grc/.gitignore1
-rw-r--r--gr-trellis/examples/grc/interference_cancellation.grc3264
-rw-r--r--gr-trellis/examples/grc/pccc.grc1230
-rw-r--r--gr-trellis/examples/grc/sccc.grc1152
-rw-r--r--gr-trellis/examples/grc/tcm.grc1234
-rw-r--r--gr-trellis/examples/grc/turbo_equalization.grc2700
-rw-r--r--gr-trellis/examples/grc/viterbi_equalization.grc1476
-rw-r--r--gr-uhd/CMakeLists.txt1
-rw-r--r--gr-uhd/apps/CMakeLists.txt47
-rw-r--r--gr-uhd/apps/hf_explorer/README28
-rwxr-xr-xgr-uhd/apps/hf_explorer/hfx.py755
-rw-r--r--gr-uhd/apps/hf_explorer/hfx_help180
-rw-r--r--gr-uhd/apps/hf_radio/README.TXT60
-rw-r--r--gr-uhd/apps/hf_radio/hfir.sci59
-rw-r--r--gr-uhd/apps/hf_radio/input.py78
-rw-r--r--gr-uhd/apps/hf_radio/output.py43
-rwxr-xr-xgr-uhd/apps/hf_radio/radio.py320
-rw-r--r--gr-uhd/apps/hf_radio/radio.xml441
-rw-r--r--gr-uhd/apps/hf_radio/ssb_taps1023
-rw-r--r--gr-uhd/apps/hf_radio/ssbagc.py72
-rw-r--r--gr-uhd/apps/hf_radio/ssbdemod.py118
-rw-r--r--gr-uhd/apps/hf_radio/startup.py1
-rwxr-xr-xgr-uhd/apps/hf_radio/ui.py316
-rwxr-xr-xgr-uhd/apps/uhd_fft_wx348
-rwxr-xr-xgr-uhd/apps/uhd_siggen_gui2
-rw-r--r--gr-uhd/examples/python/CMakeLists.txt41
-rwxr-xr-xgr-uhd/examples/python/fm_tx4.py211
-rwxr-xr-xgr-uhd/examples/python/fm_tx_2_daughterboards.py216
-rwxr-xr-xgr-uhd/examples/python/freq_hopping.py220
-rwxr-xr-xgr-uhd/examples/python/max_power.py142
-rwxr-xr-xgr-uhd/examples/python/usrp_am_mw_rcv.py316
-rwxr-xr-xgr-uhd/examples/python/usrp_nbfm_ptt.py494
-rwxr-xr-xgr-uhd/examples/python/usrp_nbfm_rcv.py384
-rwxr-xr-xgr-uhd/examples/python/usrp_spectrum_sense.py318
-rwxr-xr-xgr-uhd/examples/python/usrp_tv_rcv.py446
-rwxr-xr-xgr-uhd/examples/python/usrp_tv_rcv_nogui.py215
-rwxr-xr-xgr-uhd/examples/python/usrp_wfm_rcv.py290
-rwxr-xr-xgr-uhd/examples/python/usrp_wfm_rcv2_nogui.py157
-rwxr-xr-xgr-uhd/examples/python/usrp_wfm_rcv_fmdet.py353
-rwxr-xr-xgr-uhd/examples/python/usrp_wfm_rcv_nogui.py179
-rwxr-xr-xgr-uhd/examples/python/usrp_wfm_rcv_pll.py350
-rwxr-xr-xgr-uhd/examples/python/usrp_wfm_rcv_sca.py407
-rwxr-xr-xgr-uhd/examples/python/usrp_wxapt_rcv.py286
-rw-r--r--gr-utils/python/modtool/gr-newmod/docs/doxygen/doxyxml/doxyindex.py86
-rw-r--r--gr-utils/python/modtool/gr-newmod/docs/doxygen/swig_doc.py143
-rw-r--r--gr-wxgui/CMakeLists.txt91
-rw-r--r--gr-wxgui/README1
-rw-r--r--gr-wxgui/README.gl29
-rw-r--r--gr-wxgui/gr-wxgui.conf13
-rw-r--r--gr-wxgui/gr-wxgui.pc.in11
-rw-r--r--gr-wxgui/grc/CMakeLists.txt35
-rw-r--r--gr-wxgui/grc/__init__.py22
-rw-r--r--gr-wxgui/grc/notebook.xml70
-rw-r--r--gr-wxgui/grc/panel.py53
-rw-r--r--gr-wxgui/grc/top_block_gui.py87
-rw-r--r--gr-wxgui/grc/variable_check_box.xml85
-rw-r--r--gr-wxgui/grc/variable_chooser.xml123
-rw-r--r--gr-wxgui/grc/variable_slider.xml139
-rw-r--r--gr-wxgui/grc/variable_static_text.xml98
-rw-r--r--gr-wxgui/grc/variable_text_box.xml102
-rw-r--r--gr-wxgui/grc/wxgui_constellationsink2.xml141
-rw-r--r--gr-wxgui/grc/wxgui_fftsink2.xml246
-rw-r--r--gr-wxgui/grc/wxgui_histosink2.xml79
-rw-r--r--gr-wxgui/grc/wxgui_numbersink2.xml194
-rw-r--r--gr-wxgui/grc/wxgui_scopesink2.xml187
-rw-r--r--gr-wxgui/grc/wxgui_termsink.xml57
-rw-r--r--gr-wxgui/grc/wxgui_waterfallsink2.xml203
-rw-r--r--gr-wxgui/include/gnuradio/wxgui/CMakeLists.txt31
-rw-r--r--gr-wxgui/include/gnuradio/wxgui/api.h33
-rw-r--r--gr-wxgui/include/gnuradio/wxgui/histo_sink_f.h55
-rw-r--r--gr-wxgui/include/gnuradio/wxgui/oscope_guts.h131
-rw-r--r--gr-wxgui/include/gnuradio/wxgui/oscope_sink_f.h53
-rw-r--r--gr-wxgui/include/gnuradio/wxgui/oscope_sink_x.h91
-rw-r--r--gr-wxgui/include/gnuradio/wxgui/trigger_mode.h44
-rw-r--r--gr-wxgui/lib/CMakeLists.txt98
-rw-r--r--gr-wxgui/lib/gnuradio-wxgui.rc.in54
-rw-r--r--gr-wxgui/lib/histo_sink_f_impl.cc186
-rw-r--r--gr-wxgui/lib/histo_sink_f_impl.h63
-rw-r--r--gr-wxgui/lib/oscope_guts.cc439
-rw-r--r--gr-wxgui/lib/oscope_sink_f_impl.cc83
-rw-r--r--gr-wxgui/lib/oscope_sink_f_impl.h51
-rw-r--r--gr-wxgui/lib/oscope_sink_x.cc161
-rw-r--r--gr-wxgui/python/wxgui/CMakeLists.txt85
-rw-r--r--gr-wxgui/python/wxgui/__init__.py32
-rw-r--r--gr-wxgui/python/wxgui/common.py296
-rw-r--r--gr-wxgui/python/wxgui/const_window.py211
-rw-r--r--gr-wxgui/python/wxgui/constants.py76
-rw-r--r--gr-wxgui/python/wxgui/constsink_gl.py142
-rw-r--r--gr-wxgui/python/wxgui/fft_window.py412
-rw-r--r--gr-wxgui/python/wxgui/fftsink2.py41
-rw-r--r--gr-wxgui/python/wxgui/fftsink_gl.py204
-rw-r--r--gr-wxgui/python/wxgui/fftsink_nongl.py656
-rw-r--r--gr-wxgui/python/wxgui/form.py391
-rw-r--r--gr-wxgui/python/wxgui/forms/__init__.py102
-rw-r--r--gr-wxgui/python/wxgui/forms/converters.py154
-rw-r--r--gr-wxgui/python/wxgui/forms/forms.py675
-rw-r--r--gr-wxgui/python/wxgui/gui.py135
-rw-r--r--gr-wxgui/python/wxgui/histo_window.py168
-rw-r--r--gr-wxgui/python/wxgui/histosink_gl.py113
-rw-r--r--gr-wxgui/python/wxgui/number_window.py219
-rw-r--r--gr-wxgui/python/wxgui/numbersink2.py173
-rw-r--r--gr-wxgui/python/wxgui/plot.py1834
-rw-r--r--gr-wxgui/python/wxgui/plotter/__init__.py24
-rw-r--r--gr-wxgui/python/wxgui/plotter/bar_plotter.py150
-rw-r--r--gr-wxgui/python/wxgui/plotter/channel_plotter.py249
-rw-r--r--gr-wxgui/python/wxgui/plotter/common.py149
-rw-r--r--gr-wxgui/python/wxgui/plotter/gltext.py507
-rw-r--r--gr-wxgui/python/wxgui/plotter/grid_plotter_base.py458
-rw-r--r--gr-wxgui/python/wxgui/plotter/plotter_base.py220
-rw-r--r--gr-wxgui/python/wxgui/plotter/waterfall_plotter.py294
-rw-r--r--gr-wxgui/python/wxgui/powermate.py448
-rw-r--r--gr-wxgui/python/wxgui/pubsub.py153
-rw-r--r--gr-wxgui/python/wxgui/scope_window.py691
-rw-r--r--gr-wxgui/python/wxgui/scopesink2.py41
-rw-r--r--gr-wxgui/python/wxgui/scopesink_gl.py239
-rw-r--r--gr-wxgui/python/wxgui/scopesink_nongl.py654
-rw-r--r--gr-wxgui/python/wxgui/slider.py48
-rw-r--r--gr-wxgui/python/wxgui/stdgui2.py107
-rw-r--r--gr-wxgui/python/wxgui/termsink.py77
-rw-r--r--gr-wxgui/python/wxgui/waterfall_window.py328
-rw-r--r--gr-wxgui/python/wxgui/waterfallsink2.py41
-rw-r--r--gr-wxgui/python/wxgui/waterfallsink_gl.py176
-rw-r--r--gr-wxgui/python/wxgui/waterfallsink_nongl.py434
-rw-r--r--gr-wxgui/swig/CMakeLists.txt55
-rw-r--r--gr-wxgui/swig/wxgui_swig.i43
-rw-r--r--grc/blocks/CMakeLists.txt21
-rw-r--r--grc/blocks/options.xml58
-rw-r--r--grc/core/Block.py3
-rw-r--r--grc/core/Constants.py3
-rw-r--r--grc/core/Param.py64
-rw-r--r--grc/core/generator/Generator.py4
-rw-r--r--grc/core/generator/flow_graph.tmpl53
-rw-r--r--grc/gui/Colors.py3
-rw-r--r--grc/gui/MainWindow.py21
314 files changed, 20016 insertions, 44229 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 38041d58f2..8880155b71 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -25,7 +25,7 @@ endif(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR})
########################################################################
# Project setup
########################################################################
-cmake_minimum_required(VERSION 2.6)
+cmake_minimum_required(VERSION 2.8.12)
project(gnuradio CXX C)
enable_testing()
@@ -394,7 +394,6 @@ list(APPEND GR_TEST_PYTHON_DIRS
add_subdirectory(docs)
add_subdirectory(gnuradio-runtime)
add_subdirectory(gr-blocks)
-add_subdirectory(grc)
add_subdirectory(gr-fec)
add_subdirectory(gr-fft)
add_subdirectory(gr-filter)
@@ -411,8 +410,8 @@ add_subdirectory(gr-utils)
add_subdirectory(gr-video-sdl)
add_subdirectory(gr-vocoder)
add_subdirectory(gr-wavelet)
-add_subdirectory(gr-wxgui)
add_subdirectory(gr-zeromq)
+add_subdirectory(grc)
# Defining GR_CTRLPORT for gnuradio/config.h
if(ENABLE_GR_CTRLPORT)
diff --git a/cmake/Modules/FindGnuradio.cmake b/cmake/Modules/FindGnuradio.cmake
index 72b7313737..3e899f5d26 100644
--- a/cmake/Modules/FindGnuradio.cmake
+++ b/cmake/Modules/FindGnuradio.cmake
@@ -1,4 +1,4 @@
-# Copyright 2013 Free Software Foundation, Inc.
+# Copyright 2013,2016 Free Software Foundation, Inc.
#
# This file is part of GNU Radio
#
@@ -115,5 +115,4 @@ GR_MODULE(TRELLIS gnuradio-trellis gnuradio/trellis/api.h gnuradio-trellis)
GR_MODULE(UHD gnuradio-uhd gnuradio/uhd/api.h gnuradio-uhd)
GR_MODULE(VOCODER gnuradio-vocoder gnuradio/vocoder/api.h gnuradio-vocoder)
GR_MODULE(WAVELET gnuradio-wavelet gnuradio/wavelet/api.h gnuradio-wavelet)
-GR_MODULE(WXGUI gnuradio-wxgui gnuradio/wxgui/api.h gnuradio-wxgui)
GR_MODULE(PMT gnuradio-pmt pmt/pmt.h gnuradio-pmt)
diff --git a/cmake/Modules/FindQwt.cmake b/cmake/Modules/FindQwt.cmake
index da8bbe9049..0f24788c6d 100644
--- a/cmake/Modules/FindQwt.cmake
+++ b/cmake/Modules/FindQwt.cmake
@@ -5,16 +5,22 @@
# qwt_global.h holds a string with the QWT version;
# test to make sure it's at least 5.2
+if (${DESIRED_QT_VERSION} MATCHES 5)
+ set(QWT_QT_VERSION qt5)
+else()
+ set(QWT_QT_VERSION qt4)
+endif()
+
find_path(QWT_INCLUDE_DIRS
NAMES qwt_global.h
HINTS
${CMAKE_INSTALL_PREFIX}/include/qwt
${CMAKE_PREFIX_PATH}/include/qwt
PATHS
- /usr/local/include/qwt-qt4
+ /usr/local/include/qwt-${QWT_QT_VERSION}
/usr/local/include/qwt
/usr/include/qwt6
- /usr/include/qwt-qt4
+ /usr/include/qwt-${QWT_QT_VERSION}
/usr/include/qwt
/usr/include/qwt5
/opt/local/include/qwt
@@ -23,11 +29,11 @@ find_path(QWT_INCLUDE_DIRS
)
find_library (QWT_LIBRARIES
- NAMES qwt6 qwt6-qt4 qwt qwt-qt4 qwt5 qwtd5
+ NAMES qwt6 qwt6-${QWT_QT_VERSION} qwt qwt-${QWT_QT_VERSION} qwt5 qwtd5
HINTS
${CMAKE_INSTALL_PREFIX}/lib
${CMAKE_INSTALL_PREFIX}/lib64
- ${CMAKE_PREFIX_PATH}/lib
+ ${CMAKE_PREFIX_PATH}/lib
PATHS
/usr/local/lib
/usr/lib
diff --git a/cmake/Modules/GnuradioConfig.cmake.in b/cmake/Modules/GnuradioConfig.cmake.in
index d9ca22dd7a..b323a0d911 100644
--- a/cmake/Modules/GnuradioConfig.cmake.in
+++ b/cmake/Modules/GnuradioConfig.cmake.in
@@ -135,7 +135,6 @@ GR_MODULE(TRELLIS gnuradio-trellis gnuradio/trellis/api.h gnuradio-trellis)
GR_MODULE(UHD gnuradio-uhd gnuradio/uhd/api.h gnuradio-uhd)
GR_MODULE(VOCODER gnuradio-vocoder gnuradio/vocoder/api.h gnuradio-vocoder)
GR_MODULE(WAVELET gnuradio-wavelet gnuradio/wavelet/api.h gnuradio-wavelet)
-GR_MODULE(WXGUI gnuradio-wxgui gnuradio/wxgui/api.h gnuradio-wxgui)
GR_MODULE(ZEROMQ gnuradio-zeromq gnuradio/zeromq/api.h gnuradio-zeromq)
GR_MODULE(PMT gnuradio-runtime pmt/pmt.h gnuradio-pmt)
GR_MODULE(VOLK volk volk/volk.h volk)
diff --git a/cmake/msvc/config.h b/cmake/msvc/config.h
index 50515104db..99a2ea0f89 100644
--- a/cmake/msvc/config.h
+++ b/cmake/msvc/config.h
@@ -62,4 +62,7 @@ static inline float rintf(float x){return (x > 0.0f)? floorf(x + 0.5f) : ceilf(x
static inline long int random (void) { return rand(); }
static inline void srandom (unsigned int seed) { srand(seed); }
+#define srand48(seed) srand(seed)
+#define drand48() (double(rand()) / RAND_MAX)
+
#endif // _MSC_CONFIG_H_ ]
diff --git a/docs/RELEASE-NOTES-3.7.10.1.md b/docs/RELEASE-NOTES-3.7.10.1.md
new file mode 100644
index 0000000000..5cc9ab3053
--- /dev/null
+++ b/docs/RELEASE-NOTES-3.7.10.1.md
@@ -0,0 +1,68 @@
+ChangeLog v3.7.10.1
+=================
+
+This is the first bug-fix release for v3.7.10
+
+Contributors
+------------
+
+The following list of people directly contributed code to this
+release:
+
+ * Artem Pisarenko <ArtemPisarenko@users.noreply.github.com>
+ * Ben Hilburn <ben.hilburn@ettus.com>
+ * Christopher Chavez <chrischavez@gmx.us>
+ * Johnathan Corgan <johnathan@corganlabs.com>
+ * Jonathan Brucker <jonathan.brucke@gmail.com>
+ * Nicholas Corgan <n.corgan@gmail.com>
+ * Nicolas Cuervo <nicolas.cuervo@ettus.com>
+ * Ron Economos <w6rz@comcast.net>
+ * Sebastian Koslowski <koslowski@kit.edu>
+ * Stephen Larew <stephen@slarew.net>
+
+
+## Major Development Areas
+
+This contains bug fixes primarily for GRC and DTV.
+
+### GRC
+
+Catch more exceptions thrown by ConfigParser when reading corrupted grc.conf files.
+
+Fix the docstring update error for empty categories.
+
+Fix grcc to call refactored GRC code.
+
+Convert initially opened files to absolute paths to prevent attempting to read from tmp.
+
+Move startup checks back in to gnuradio-companion script from grc/checks.py.
+
+
+### DTV
+
+Fix a segfault that occurs from out-of-bounds access in
+dvbt_bit_inner_interleaver forecast by forecasting an enumerated list of all
+input streams.
+
+Fix VL-SNR framing.
+
+### Digital
+
+Enable update rate in block_recovery_mm blocks to keep tags close to the the proper clock-recovered sample time. Tag offsets will still be off between calls to work, but each work call updates the tag rate.
+
+### Analog
+
+Fix the derivative calculation in fmdet block.
+
+### Builds
+
+Fix linking GSL to gr-fec.
+
+Use gnu99 C standard rather than gnu11 standard to maintain support for GCC 4.6.3.
+
+### Other
+
+Minor spelling and documentation fixes.
+
+Fix uhd_siggen_gui when using lo_locked.
+
diff --git a/docs/doxygen/Doxyfile.in b/docs/doxygen/Doxyfile.in
index c5795dfa1f..731c0dfed8 100644
--- a/docs/doxygen/Doxyfile.in
+++ b/docs/doxygen/Doxyfile.in
@@ -181,8 +181,6 @@ STRIP_FROM_INC_PATH = @CMAKE_SOURCE_DIR@/gnuradio-runtime/include \
@CMAKE_BINARY_DIR@/gr-vocoder/include \
@CMAKE_SOURCE_DIR@/gr-wavelet/include \
@CMAKE_BINARY_DIR@/gr-wavelet/include \
- @CMAKE_SOURCE_DIR@/gr-wxgui/include \
- @CMAKE_BINARY_DIR@/gr-wxgui/include \
@CMAKE_SOURCE_DIR@/gr-zeromq/include \
@CMAKE_BINARY_DIR@/gr-zeromq/include \
@CMAKE_SOURCE_DIR@/volk/include \
@@ -754,7 +752,6 @@ EXCLUDE = @abs_top_srcdir@/volk \
@abs_top_builddir@/gr-trellis/doc \
@abs_top_builddir@/gr-trellis/swig/trellis_swig.py \
@abs_top_builddir@/gr-video-sdl/swig/video_sdl_swig.py \
- @abs_top_builddir@/gr-wxgui/python \
@abs_top_builddir@/grc \
@abs_top_builddir@/_CPack_Packages \
@abs_top_srcdir@/cmake \
@@ -813,8 +810,6 @@ EXCLUDE = @abs_top_srcdir@/volk \
@abs_top_builddir@/gr-vocoder/lib \
@abs_top_srcdir@/gr-wavelet/lib \
@abs_top_builddir@/gr-wavelet/lib \
- @abs_top_srcdir@/gr-wxgui/lib \
- @abs_top_builddir@/gr-wxgui/lib \
@abs_top_srcdir@/gr-zeromq/lib \
@abs_top_builddir@/gr-zeromq/lib \
@abs_top_srcdir@/volk/cmake/msvc \
diff --git a/docs/doxygen/other/build_guide.dox b/docs/doxygen/other/build_guide.dox
index 87e5a456f3..b7218a2dbe 100644
--- a/docs/doxygen/other/build_guide.dox
+++ b/docs/doxygen/other/build_guide.dox
@@ -52,8 +52,6 @@ first. Most recent systems have these packages available.
\li qwt (>= 5.2.0) http://sourceforge.net/projects/qwt/
\li pyqt (>= 4.10.0) http://www.riverbankcomputing.co.uk/software/pyqt/download
-\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)
diff --git a/docs/doxygen/other/group_defs.dox b/docs/doxygen/other/group_defs.dox
index 1cb3ff9f97..a534473ee4 100644
--- a/docs/doxygen/other/group_defs.dox
+++ b/docs/doxygen/other/group_defs.dox
@@ -48,7 +48,6 @@
/*! \defgroup uhd_blk UHD Interface */
/*! \defgroup waveform_generators_blk Waveform Generators */
/*! \defgroup wavelet_blk Wavelet Transforms */
-/*! \defgroup wxgui_blk WX Graphical Interfaces */
/*!
* \defgroup base_blk Base classes for GR Blocks
diff --git a/docs/sphinx/source/index.rst b/docs/sphinx/source/index.rst
index 5c14d22cce..137c17a6ba 100644
--- a/docs/sphinx/source/index.rst
+++ b/docs/sphinx/source/index.rst
@@ -25,7 +25,6 @@ gnuradio
blocks_video_sdl <video_sdl_blocks>
blocks_vocoder <vocoder_blocks>
blocks_wavelet <wavelet_blocks>
- blocks_wxgui <wxgui_blocks>
blocks_zeromq <zeromq_blocks>
analog <analog>
channels <channels>
@@ -37,7 +36,6 @@ gnuradio
trellis <trellis>
uhd <uhd>
vocoder <vocoder>
- wxgui <wxgui>
.. automodule:: gnuradio
.. automodule:: pmt
@@ -656,8 +654,6 @@ Instrumentation Blocks
gnuradio.qtgui.vector_sink_f
gnuradio.qtgui.waterfall_sink_c
gnuradio.qtgui.waterfall_sink_f
- gnuradio.wxgui.histo_sink_f
- gnuradio.wxgui.oscope_sink_f
@@ -1464,13 +1460,3 @@ Helper Classes: Vocoder
gnuradio.vocoder.codec2
gnuradio.vocoder.cvsd_encode_fb
gnuradio.vocoder.cvsd_decode_bf
-
-
-Helper Classes: WXGUI
----------------------
-
-.. autosummary::
- :nosignatures:
-
- gnuradio.wxgui.oscope_sink_x
- gnuradio.wxgui.histo_sink_f
diff --git a/docs/sphinx/source/wxgui.rst b/docs/sphinx/source/wxgui.rst
deleted file mode 100644
index dcaa4a8e4a..0000000000
--- a/docs/sphinx/source/wxgui.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-gnuradio.wxgui
-==============
-
-.. autoclass:: gnuradio.wxgui.oscope_sink_x
-.. autoclass:: gnuradio.wxgui.histo_sink_f
diff --git a/docs/sphinx/source/wxgui_blocks.rst b/docs/sphinx/source/wxgui_blocks.rst
deleted file mode 100644
index ccccd854da..0000000000
--- a/docs/sphinx/source/wxgui_blocks.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-gnuradio.wxgui
-==============
-
-.. automodule:: gnuradio.wxgui
-
-.. autoblock:: gnuradio.wxgui.histo_sink_f
-.. autoblock:: gnuradio.wxgui.oscope_sink_f
diff --git a/gnuradio-runtime/include/gnuradio/basic_block.h b/gnuradio-runtime/include/gnuradio/basic_block.h
index 8d7308efe2..7c343220b9 100644
--- a/gnuradio-runtime/include/gnuradio/basic_block.h
+++ b/gnuradio-runtime/include/gnuradio/basic_block.h
@@ -369,20 +369,15 @@ namespace gr {
d_msg_handlers[which_port] = msg_handler_t(msg_handler);
}
- virtual void set_processor_affinity(const std::vector<int> &mask)
- { throw std::runtime_error("set_processor_affinity not overloaded in child class."); }
+ virtual void set_processor_affinity(const std::vector<int> &mask) = 0;
- virtual void unset_processor_affinity()
- { throw std::runtime_error("unset_processor_affinity not overloaded in child class."); }
+ virtual void unset_processor_affinity() = 0;
- virtual std::vector<int> processor_affinity()
- { throw std::runtime_error("processor_affinity not overloaded in child class."); }
+ virtual std::vector<int> processor_affinity() = 0;
- virtual void set_log_level(std::string level)
- { throw std::runtime_error("set_log_level not overloaded in child class."); }
+ virtual void set_log_level(std::string level) = 0;
- virtual std::string log_level()
- { throw std::runtime_error("log_level not overloaded in child class."); }
+ virtual std::string log_level() = 0;
};
inline bool operator<(basic_block_sptr lhs, basic_block_sptr rhs)
diff --git a/gnuradio-runtime/lib/CMakeLists.txt b/gnuradio-runtime/lib/CMakeLists.txt
index e0196b669a..c6e42876ce 100644
--- a/gnuradio-runtime/lib/CMakeLists.txt
+++ b/gnuradio-runtime/lib/CMakeLists.txt
@@ -106,9 +106,7 @@ list(APPEND gnuradio_runtime_sources
realtime.cc
realtime_impl.cc
scheduler.cc
- scheduler_sts.cc
scheduler_tpb.cc
- single_threaded_scheduler.cc
sptr_magic.cc
sync_block.cc
sync_decimator.cc
diff --git a/gnuradio-runtime/lib/scheduler_sts.cc b/gnuradio-runtime/lib/scheduler_sts.cc
deleted file mode 100644
index 19d05b2316..0000000000
--- a/gnuradio-runtime/lib/scheduler_sts.cc
+++ /dev/null
@@ -1,90 +0,0 @@
-/* -*- c++ -*- */
-/*
- * Copyright 2008,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 this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "scheduler_sts.h"
-#include "single_threaded_scheduler.h"
-#include <gnuradio/thread/thread_body_wrapper.h>
-
-namespace gr {
-
- class sts_container
- {
- block_vector_t d_blocks;
-
- public:
- sts_container(block_vector_t blocks)
- : d_blocks(blocks) {}
-
- void operator()()
- {
- make_single_threaded_scheduler(d_blocks)->run();
- }
- };
-
- scheduler_sptr
- scheduler_sts::make(flat_flowgraph_sptr ffg, int max_noutput_items)
- {
- return scheduler_sptr(new scheduler_sts(ffg, max_noutput_items));
- }
-
- scheduler_sts::scheduler_sts(flat_flowgraph_sptr ffg, int max_noutput_items)
- : scheduler(ffg, max_noutput_items)
- {
- // Split the flattened flow graph into discrete partitions, each
- // of which is topologically sorted.
-
- std::vector<basic_block_vector_t> graphs = ffg->partition();
-
- // For each partition, create a thread to evaluate it using
- // an instance of the gr_single_threaded_scheduler
-
- for(std::vector<basic_block_vector_t>::iterator p = graphs.begin();
- p != graphs.end(); p++) {
-
- block_vector_t blocks = flat_flowgraph::make_block_vector(*p);
- d_threads.create_thread(
- gr::thread::thread_body_wrapper<sts_container>(sts_container(blocks),
- "single-threaded-scheduler"));
- }
- }
-
- scheduler_sts::~scheduler_sts()
- {
- stop();
- }
-
- void
- scheduler_sts::stop()
- {
- d_threads.interrupt_all();
- }
-
- void
- scheduler_sts::wait()
- {
- d_threads.join_all();
- }
-
-} /* namespace gr */
diff --git a/gnuradio-runtime/lib/scheduler_sts.h b/gnuradio-runtime/lib/scheduler_sts.h
deleted file mode 100644
index b4cddb4614..0000000000
--- a/gnuradio-runtime/lib/scheduler_sts.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/* -*- c++ -*- */
-/*
- * Copyright 2008,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 this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-#ifndef INCLUDED_GR_SCHEDULER_STS_H
-#define INCLUDED_GR_SCHEDULER_STS_H
-
-#include <gnuradio/api.h>
-#include <gnuradio/thread/thread_group.h>
-#include "scheduler.h"
-
-namespace gr {
-
- /*!
- * \brief Concrete scheduler that uses the single_threaded_scheduler
- */
- class GR_RUNTIME_API scheduler_sts : public scheduler
- {
- gr::thread::thread_group d_threads;
-
- protected:
- /*!
- * \brief Construct a scheduler and begin evaluating the graph.
- *
- * The scheduler will continue running until all blocks until they
- * report that they are done or the stop method is called.
- */
- scheduler_sts(flat_flowgraph_sptr ffg, int max_noutput_items);
-
- public:
- static scheduler_sptr make(flat_flowgraph_sptr ffg,
- int max_noutput_items);
-
- ~scheduler_sts();
-
- /*!
- * \brief Tell the scheduler to stop executing.
- */
- void stop();
-
- /*!
- * \brief Block until the graph is done.
- */
- void wait();
- };
-
-} /* namespace gr */
-
-#endif /* INCLUDED_GR_SCHEDULER_STS_H */
diff --git a/gnuradio-runtime/lib/single_threaded_scheduler.cc b/gnuradio-runtime/lib/single_threaded_scheduler.cc
deleted file mode 100644
index c86d26ca3a..0000000000
--- a/gnuradio-runtime/lib/single_threaded_scheduler.cc
+++ /dev/null
@@ -1,363 +0,0 @@
-/* -*- c++ -*- */
-/*
- * Copyright 2004 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 "single_threaded_scheduler.h"
-#include <gnuradio/block.h>
-#include <gnuradio/block_detail.h>
-#include <gnuradio/buffer.h>
-#include <boost/thread.hpp>
-#include <boost/format.hpp>
-#include <iostream>
-#include <limits>
-#include <assert.h>
-#include <stdio.h>
-
-namespace gr {
-
- // must be defined to either 0 or 1
-#define ENABLE_LOGGING 0
-
-#if (ENABLE_LOGGING)
-#define LOG(x) do { x; } while(0)
-#else
-#define LOG(x) do {;} while(0)
-#endif
-
- static int which_scheduler = 0;
-
- single_threaded_scheduler_sptr
- make_single_threaded_scheduler(const std::vector<block_sptr> &blocks)
- {
- return single_threaded_scheduler_sptr
- (new single_threaded_scheduler(blocks));
- }
-
- single_threaded_scheduler::single_threaded_scheduler(const std::vector<block_sptr> &blocks)
- : d_blocks(blocks), d_enabled(true), d_log(0)
- {
- if(ENABLE_LOGGING) {
- std::string name = str(boost::format("sst-%d.log") % which_scheduler++);
- d_log = new std::ofstream(name.c_str());
- *d_log << "single_threaded_scheduler: "
- << d_blocks.size ()
- << " blocks\n";
- }
- }
-
- single_threaded_scheduler::~single_threaded_scheduler()
- {
- if(ENABLE_LOGGING)
- delete d_log;
- }
-
- void
- single_threaded_scheduler::run()
- {
- // d_enabled = true; // KLUDGE
- main_loop ();
- }
-
- void
- single_threaded_scheduler::stop()
- {
- if(0)
- std::cout << "gr_singled_threaded_scheduler::stop() "
- << this << std::endl;
- d_enabled = false;
- }
-
- inline static unsigned int
- round_up(unsigned int n, unsigned int multiple)
- {
- return ((n + multiple - 1) / multiple) * multiple;
- }
-
- inline static unsigned int
- round_down(unsigned int n, unsigned int multiple)
- {
- return (n / multiple) * multiple;
- }
-
- //
- // Return minimum available write space in all our downstream
- // buffers or -1 if we're output blocked and the output we're
- // blocked on is done.
- //
- static int
- min_available_space(block_detail *d, int output_multiple)
- {
- int min_space = std::numeric_limits<int>::max();
-
- for(int i = 0; i < d->noutputs (); i++) {
- int n = round_down (d->output(i)->space_available (), output_multiple);
- if(n == 0) { // We're blocked on output.
- if(d->output(i)->done()) { // Downstream is done, therefore we're done.
- return -1;
- }
- return 0;
- }
- min_space = std::min (min_space, n);
- }
- return min_space;
- }
-
- void
- single_threaded_scheduler::main_loop()
- {
- static const int DEFAULT_CAPACITY = 16;
-
- int noutput_items;
- gr_vector_int ninput_items_required(DEFAULT_CAPACITY);
- gr_vector_int ninput_items(DEFAULT_CAPACITY);
- gr_vector_const_void_star input_items(DEFAULT_CAPACITY);
- gr_vector_void_star output_items(DEFAULT_CAPACITY);
- unsigned int bi;
- unsigned int nalive;
- int max_items_avail;
- bool made_progress_last_pass;
- bool making_progress;
-
- for(unsigned i = 0; i < d_blocks.size (); i++)
- d_blocks[i]->detail()->set_done (false); // reset any done flags
-
- for(unsigned i = 0; i < d_blocks.size (); i++) // enable any drivers, etc.
- d_blocks[i]->start();
-
- bi = 0;
- made_progress_last_pass = true;
- making_progress = false;
-
- // Loop while there are still blocks alive
-
- nalive = d_blocks.size ();
- while(d_enabled && nalive > 0) {
- if(boost::this_thread::interruption_requested())
- break;
-
- block *m = d_blocks[bi].get ();
- block_detail *d = m->detail().get ();
-
- LOG(*d_log << std::endl << m);
-
- if(d->done ())
- goto next_block;
-
- if(d->source_p ()) {
- // Invoke sources as a last resort. As long as the previous
- // pass made progress, don't call a source.
- if(made_progress_last_pass) {
- LOG(*d_log << " Skipping source\n");
- goto next_block;
- }
-
- ninput_items_required.resize (0);
- ninput_items.resize (0);
- input_items.resize (0);
- output_items.resize (d->noutputs ());
-
- // determine the minimum available output space
- noutput_items = min_available_space (d, m->output_multiple ());
- LOG(*d_log << " source\n noutput_items = " << noutput_items << std::endl);
- if(noutput_items == -1) // we're done
- goto were_done;
-
- if(noutput_items == 0) { // we're output blocked
- LOG(*d_log << " BLKD_OUT\n");
- goto next_block;
- }
-
- goto setup_call_to_work; // jump to common code
- }
-
- else if(d->sink_p ()) {
- ninput_items_required.resize (d->ninputs ());
- ninput_items.resize (d->ninputs ());
- input_items.resize (d->ninputs ());
- output_items.resize (0);
- LOG(*d_log << " sink\n");
-
- max_items_avail = 0;
- for(int i = 0; i < d->ninputs (); i++) {
- ninput_items[i] = d->input(i)->items_available();
- //if (ninput_items[i] == 0 && d->input(i)->done())
- if(ninput_items[i] < m->output_multiple() && d->input(i)->done())
- goto were_done;
-
- max_items_avail = std::max (max_items_avail, ninput_items[i]);
- }
-
- // take a swag at how much output we can sink
- noutput_items = (int) (max_items_avail * m->relative_rate ());
- noutput_items = round_down (noutput_items, m->output_multiple ());
- LOG(*d_log << " max_items_avail = " << max_items_avail << std::endl);
- LOG(*d_log << " noutput_items = " << noutput_items << std::endl);
-
- if(noutput_items == 0) { // we're blocked on input
- LOG(*d_log << " BLKD_IN\n");
- goto next_block;
- }
-
- goto try_again; // Jump to code shared with regular case.
- }
-
- else {
- // do the regular thing
- ninput_items_required.resize(d->ninputs ());
- ninput_items.resize(d->ninputs ());
- input_items.resize(d->ninputs ());
- output_items.resize(d->noutputs ());
-
- max_items_avail = 0;
- for(int i = 0; i < d->ninputs (); i++) {
- ninput_items[i] = d->input(i)->items_available ();
- max_items_avail = std::max(max_items_avail, ninput_items[i]);
- }
-
- // determine the minimum available output space
- noutput_items = min_available_space(d, m->output_multiple ());
- if(ENABLE_LOGGING){
- *d_log << " regular ";
- if(m->relative_rate() >= 1.0)
- *d_log << "1:" << m->relative_rate() << std::endl;
- else
- *d_log << 1.0/m->relative_rate() << ":1\n";
- *d_log << " max_items_avail = " << max_items_avail << std::endl;
- *d_log << " noutput_items = " << noutput_items << std::endl;
- }
- if(noutput_items == -1) // we're done
- goto were_done;
-
- if(noutput_items == 0) { // we're output blocked
- LOG(*d_log << " BLKD_OUT\n");
- goto next_block;
- }
-
-#if 0
- // Compute best estimate of noutput_items that we can really use.
- noutput_items =
- std::min((unsigned)noutput_items,
- std::max((unsigned)m->output_multiple(),
- round_up((unsigned)(max_items_avail * m->relative_rate()),
- m->output_multiple())));
-
- LOG(*d_log << " revised noutput_items = " << noutput_items << std::endl);
-#endif
-
- try_again:
- if(m->fixed_rate()) {
- // try to work it forward starting with max_items_avail.
- // We want to try to consume all the input we've got.
- int reqd_noutput_items = m->fixed_rate_ninput_to_noutput(max_items_avail);
- reqd_noutput_items = round_up(reqd_noutput_items, m->output_multiple());
- if(reqd_noutput_items > 0 && reqd_noutput_items <= noutput_items)
- noutput_items = reqd_noutput_items;
- }
-
- // ask the block how much input they need to produce noutput_items
- m->forecast(noutput_items, ninput_items_required);
-
- // See if we've got sufficient input available
- int i;
- for(i = 0; i < d->ninputs (); i++)
- if(ninput_items_required[i] > ninput_items[i]) // not enough
- break;
-
- if(i < d->ninputs()) { // not enough input on input[i]
- // if we can, try reducing the size of our output request
- if(noutput_items > m->output_multiple ()){
- noutput_items /= 2;
- noutput_items = round_up (noutput_items, m->output_multiple ());
- goto try_again;
- }
-
- // We're blocked on input
- LOG(*d_log << " BLKD_IN\n");
- if(d->input(i)->done()) // If the upstream block is done, we're done
- goto were_done;
-
- // Is it possible to ever fulfill this request?
- if(ninput_items_required[i] > d->input(i)->max_possible_items_available ()) {
- // Nope, never going to happen...
- std::cerr << "\nsched: <block " << m->name()
- << " (" << m->unique_id() << ")>"
- << " is requesting more input data\n"
- << " than we can provide.\n"
- << " ninput_items_required = "
- << ninput_items_required[i] << "\n"
- << " max_possible_items_available = "
- << d->input(i)->max_possible_items_available() << "\n"
- << " If this is a filter, consider reducing the number of taps.\n";
- goto were_done;
- }
-
- goto next_block;
- }
-
- // We've got enough data on each input to produce noutput_items.
- // Finish setting up the call to work.
- for(int i = 0; i < d->ninputs (); i++)
- input_items[i] = d->input(i)->read_pointer();
-
- setup_call_to_work:
-
- for(int i = 0; i < d->noutputs (); i++)
- output_items[i] = d->output(i)->write_pointer();
-
- // Do the actual work of the block
- int n = m->general_work(noutput_items, ninput_items,
- input_items, output_items);
- LOG(*d_log << " general_work: noutput_items = " << noutput_items
- << " result = " << n << std::endl);
-
- if(n == -1) // block is done
- goto were_done;
-
- d->produce_each(n); // advance write pointers
- if(n > 0)
- making_progress = true;
-
- goto next_block;
- }
- assert(0);
-
- were_done:
- LOG(*d_log << " were_done\n");
- d->set_done (true);
- nalive--;
-
- next_block:
- if(++bi >= d_blocks.size ()) {
- bi = 0;
- made_progress_last_pass = making_progress;
- making_progress = false;
- }
- }
-
- for(unsigned i = 0; i < d_blocks.size(); i++) // disable any drivers, etc.
- d_blocks[i]->stop();
- }
-
-} /* namespace gr */
diff --git a/gnuradio-runtime/lib/single_threaded_scheduler.h b/gnuradio-runtime/lib/single_threaded_scheduler.h
deleted file mode 100644
index eccbf03b36..0000000000
--- a/gnuradio-runtime/lib/single_threaded_scheduler.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/* -*- c++ -*- */
-/*
- * Copyright 2004 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_SINGLE_THREADED_SCHEDULER_H
-#define INCLUDED_GR_SINGLE_THREADED_SCHEDULER_H
-
-#include <gnuradio/api.h>
-#include <gnuradio/runtime_types.h>
-#include <fstream>
-
-namespace gr {
-
- class single_threaded_scheduler;
- typedef boost::shared_ptr<single_threaded_scheduler> single_threaded_scheduler_sptr;
-
- /*!
- * \brief Simple scheduler for stream computations.
- * \ingroup internal
- */
- class GR_RUNTIME_API single_threaded_scheduler
- {
- public:
- ~single_threaded_scheduler();
-
- void run();
- void stop();
-
- private:
- const std::vector<block_sptr> d_blocks;
- volatile bool d_enabled;
- std::ofstream *d_log;
-
- single_threaded_scheduler(const std::vector<block_sptr> &blocks);
-
- void main_loop();
-
- friend GR_RUNTIME_API single_threaded_scheduler_sptr
- make_single_threaded_scheduler(const std::vector<block_sptr> &blocks);
- };
-
- GR_RUNTIME_API single_threaded_scheduler_sptr
- make_single_threaded_scheduler(const std::vector<block_sptr> &blocks);
-
-} /* namespace gr */
-
-#endif /* INCLUDED_GR_SINGLE_THREADED_SCHEDULER_H */
diff --git a/gnuradio-runtime/lib/sys_paths.cc b/gnuradio-runtime/lib/sys_paths.cc
index 3bf6697bac..f63d7730e4 100644
--- a/gnuradio-runtime/lib/sys_paths.cc
+++ b/gnuradio-runtime/lib/sys_paths.cc
@@ -64,10 +64,16 @@ namespace gr {
return tmp_path();
}
- const char *userconf_path()
+ std::string __userconf_path()
{
boost::filesystem::path p(appdata_path());
p = p / ".gnuradio";
+ return p.string();
+ }
+
+ const char *userconf_path()
+ {
+ static std::string p(__userconf_path());
return p.c_str();
}
diff --git a/gnuradio-runtime/lib/top_block_impl.cc b/gnuradio-runtime/lib/top_block_impl.cc
index 3f94867bc2..d2a07e89ef 100644
--- a/gnuradio-runtime/lib/top_block_impl.cc
+++ b/gnuradio-runtime/lib/top_block_impl.cc
@@ -26,7 +26,6 @@
#include "top_block_impl.h"
#include "flat_flowgraph.h"
-#include "scheduler_sts.h"
#include "scheduler_tpb.h"
#include <gnuradio/top_block.h>
#include <gnuradio/prefs.h>
@@ -48,8 +47,7 @@ namespace gr {
const char *name;
scheduler_maker f;
} scheduler_table[] = {
- { "TPB", scheduler_tpb::make }, // first entry is default
- { "STS", scheduler_sts::make }
+ { "TPB", scheduler_tpb::make } // first entry is default
};
static scheduler_sptr
diff --git a/gnuradio-runtime/python/gnuradio/__init__.py b/gnuradio-runtime/python/gnuradio/__init__.py
index 43274dbd1c..062450cb5f 100644
--- a/gnuradio-runtime/python/gnuradio/__init__.py
+++ b/gnuradio-runtime/python/gnuradio/__init__.py
@@ -37,7 +37,6 @@ if path.endswith(path_ending):
__path__.append(os.path.join(build_path, 'gr-wavelet', 'python'))
__path__.append(os.path.join(build_path, 'gr-audio', 'python'))
__path__.append(os.path.join(build_path, 'gr-qtgui', 'python'))
- __path__.append(os.path.join(build_path, 'gr-wxgui', 'python'))
__path__.append(os.path.join(build_path, 'gr-video-sdl', 'python'))
__path__.append(os.path.join(build_path, 'gr-vocoder', 'python'))
__path__.append(os.path.join(build_path, 'gr-comedi', 'python'))
diff --git a/gnuradio-runtime/swig/CMakeLists.txt b/gnuradio-runtime/swig/CMakeLists.txt
index 1b6921fb07..698283fe4d 100644
--- a/gnuradio-runtime/swig/CMakeLists.txt
+++ b/gnuradio-runtime/swig/CMakeLists.txt
@@ -106,7 +106,6 @@ install(
pmt_swig.i
prefs.i
realtime.i
- single_threaded_scheduler.i
sync_block.i
sync_decimator.i
sync_interpolator.i
diff --git a/gnuradio-runtime/swig/single_threaded_scheduler.i b/gnuradio-runtime/swig/single_threaded_scheduler.i
deleted file mode 100644
index f4fbed075c..0000000000
--- a/gnuradio-runtime/swig/single_threaded_scheduler.i
+++ /dev/null
@@ -1,54 +0,0 @@
-/* -*- c++ -*- */
-/*
- * Copyright 2004,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.
- */
-
-#include <gnuradio/runtime.h>
-
-class gr::single_threaded_scheduler;
-typedef boost::shared_ptr<gr::single_threaded_scheduler> gr::single_threaded_scheduler_sptr;
-%template(single_threaded_scheduler_sptr) boost::shared_ptr<gr::single_threaded_scheduler>;
-%rename(single_threaded_scheduler) gr::make_single_threaded_scheduler;
-%ignore gr::single_threaded_scheduler;
-
-gr::single_threaded_scheduler_sptr
-gr::make_single_threaded_scheduler(const std::vector<gr::block_sptr> &modules);
-
-class gr::single_threaded_scheduler {
- public:
- ~single_threaded_scheduler ();
-
- // void run ();
- void stop ();
-
- private:
- single_threaded_scheduler (const std::vector<block_sptr> &modules);
-};
-
-#ifdef SWIGPYTHON
-%inline %{
- void sts_pyrun (gr::single_threaded_scheduler_sptr s) {
- Py_BEGIN_ALLOW_THREADS; // release global interpreter lock
- s->run ();
- Py_END_ALLOW_THREADS; // acquire global interpreter lock
- }
-%}
-#endif
-
diff --git a/gr-audio/examples/python/CMakeLists.txt b/gr-audio/examples/python/CMakeLists.txt
index 01a03fefcd..6e90b0ef5a 100644
--- a/gr-audio/examples/python/CMakeLists.txt
+++ b/gr-audio/examples/python/CMakeLists.txt
@@ -21,7 +21,6 @@ include(GrPython)
GR_PYTHON_INSTALL(PROGRAMS
audio_copy.py
- audio_fft.py
audio_play.py
audio_to_file.py
dial_tone.py
diff --git a/gr-audio/examples/python/audio_fft.py b/gr-audio/examples/python/audio_fft.py
deleted file mode 100755
index 519963da54..0000000000
--- a/gr-audio/examples/python/audio_fft.py
+++ /dev/null
@@ -1,138 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2004,2005,2007 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-#
-
-from gnuradio import gr, gru, audio
-from gnuradio import eng_notation
-from gnuradio.eng_option import eng_option
-from gnuradio.wxgui import stdgui2, fftsink2, waterfallsink2, scopesink2, form, slider
-from optparse import OptionParser
-import wx
-import sys
-
-class app_top_block(stdgui2.std_top_block):
- def __init__(self, frame, panel, vbox, argv):
- stdgui2.std_top_block.__init__(self, frame, panel, vbox, argv)
-
- self.frame = frame
- self.panel = panel
-
- parser = OptionParser(option_class=eng_option)
- parser.add_option("-W", "--waterfall", action="store_true", default=False,
- help="Enable waterfall display")
- parser.add_option("-S", "--oscilloscope", action="store_true", default=False,
- help="Enable oscilloscope display")
- parser.add_option("-I", "--audio-input", type="string", default="",
- help="pcm input device name. E.g., hw:0,0 or /dev/dsp")
- parser.add_option("-r", "--sample-rate", type="eng_float", default=48000,
- help="set sample rate to RATE (48000)")
-
- (options, args) = parser.parse_args()
- sample_rate = int(options.sample_rate)
-
- if len(args) != 0:
- parser.print_help()
- sys.exit(1)
-
- self.show_debug_info = True
-
- # build the graph
- if options.waterfall:
- self.scope = \
- waterfallsink2.waterfall_sink_f (panel, fft_size=1024, sample_rate=sample_rate)
- elif options.oscilloscope:
- self.scope = scopesink2.scope_sink_f(panel, sample_rate=sample_rate)
- else:
- self.scope = fftsink2.fft_sink_f (panel, fft_size=1024, sample_rate=sample_rate, fft_rate=30,
- ref_scale=1.0, ref_level=0, y_divs=12)
-
- self.src = audio.source (sample_rate, options.audio_input)
-
- self.connect(self.src, self.scope)
-
- self._build_gui(vbox)
-
- # set initial values
-
- def _set_status_msg(self, msg):
- self.frame.GetStatusBar().SetStatusText(msg, 0)
-
- def _build_gui(self, vbox):
-
- def _form_set_freq(kv):
- return self.set_freq(kv['freq'])
-
- vbox.Add(self.scope.win, 10, wx.EXPAND)
-
- #self._build_subpanel(vbox)
-
- def _build_subpanel(self, vbox_arg):
- # build a secondary information panel (sometimes hidden)
-
- # FIXME figure out how to have this be a subpanel that is always
- # created, but has its visibility controlled by foo.Show(True/False)
-
- def _form_set_decim(kv):
- return self.set_decim(kv['decim'])
-
- if not(self.show_debug_info):
- return
-
- panel = self.panel
- vbox = vbox_arg
- myform = self.myform
-
- #panel = wx.Panel(self.panel, -1)
- #vbox = wx.BoxSizer(wx.VERTICAL)
-
- hbox = wx.BoxSizer(wx.HORIZONTAL)
- hbox.Add((5,0), 0)
-
- myform['decim'] = form.int_field(
- parent=panel, sizer=hbox, label="Decim",
- callback=myform.check_input_and_call(_form_set_decim, self._set_status_msg))
-
- hbox.Add((5,0), 1)
- myform['fs@usb'] = form.static_float_field(
- parent=panel, sizer=hbox, label="Fs@USB")
-
- hbox.Add((5,0), 1)
- myform['dbname'] = form.static_text_field(
- parent=panel, sizer=hbox)
-
- hbox.Add((5,0), 1)
- myform['baseband'] = form.static_float_field(
- parent=panel, sizer=hbox, label="Analog BB")
-
- hbox.Add((5,0), 1)
- myform['ddc'] = form.static_float_field(
- parent=panel, sizer=hbox, label="DDC")
-
- hbox.Add((5,0), 0)
- vbox.Add(hbox, 0, wx.EXPAND)
-
-
-def main ():
- app = stdgui2.stdapp(app_top_block, "Audio FFT", nstatus=1)
- app.MainLoop()
-
-if __name__ == '__main__':
- main ()
diff --git a/gr-audio/lib/portaudio/portaudio_sink.cc b/gr-audio/lib/portaudio/portaudio_sink.cc
index 2397b65442..e6698adb72 100644
--- a/gr-audio/lib/portaudio/portaudio_sink.cc
+++ b/gr-audio/lib/portaudio/portaudio_sink.cc
@@ -24,6 +24,10 @@
#include "config.h"
#endif
+#ifdef _MSC_VER
+#include <io.h>
+#endif
+
#include "audio_registry.h"
#include <portaudio_sink.h>
#include <portaudio_impl.h>
diff --git a/gr-audio/lib/portaudio/portaudio_source.cc b/gr-audio/lib/portaudio/portaudio_source.cc
index 1e1bbfacbb..7f2e8f30b9 100644
--- a/gr-audio/lib/portaudio/portaudio_source.cc
+++ b/gr-audio/lib/portaudio/portaudio_source.cc
@@ -24,6 +24,10 @@
#include "config.h"
#endif
+#ifdef _MSC_VER
+#include <io.h>
+#endif
+
#include "audio_registry.h"
#include <portaudio_source.h>
#include <portaudio_impl.h>
diff --git a/gr-blocks/grc/blocks_block_tree.xml b/gr-blocks/grc/blocks_block_tree.xml
index 644773f686..cb9ad639c6 100644
--- a/gr-blocks/grc/blocks_block_tree.xml
+++ b/gr-blocks/grc/blocks_block_tree.xml
@@ -94,6 +94,7 @@
<block>blocks_add_const_vxx</block>
<block>blocks_divide_xx</block>
<block>blocks_multiply_xx</block>
+ <block>blocks_multiply_const_xx</block>
<block>blocks_multiply_const_vxx</block>
<block>blocks_multiply_conjugate_cc</block>
<block>blocks_multiply_matrix_xx</block>
@@ -121,9 +122,6 @@
</cat>
<cat>
<name>Message Tools</name>
- <block>blocks_message_source</block>
- <block>blocks_message_sink</block>
- <block>blocks_message_burst_source</block>
<block>blocks_message_strobe</block>
<block>blocks_message_strobe_random</block>
<block>blocks_message_debug</block>
diff --git a/gr-blocks/grc/blocks_message_burst_source.xml b/gr-blocks/grc/blocks_message_burst_source.xml
deleted file mode 100644
index 208955e557..0000000000
--- a/gr-blocks/grc/blocks_message_burst_source.xml
+++ /dev/null
@@ -1,58 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Message Burst Source (the sink port is a message)
-###################################################
- -->
-<block>
- <name>Message Burst Source</name>
- <key>blocks_message_burst_source</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.message_burst_source($type.size*$vlen, $(id)_msgq_in)</make>
- <param>
- <name>Output 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>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
- <check>$vlen &gt; 0</check>
- <sink>
- <name>in</name>
- <type>msg</type>
- </sink>
- <source>
- <name>out</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_message_sink.xml b/gr-blocks/grc/blocks_message_sink.xml
deleted file mode 100644
index c1f21f6521..0000000000
--- a/gr-blocks/grc/blocks_message_sink.xml
+++ /dev/null
@@ -1,72 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Message Sink (the source port is a message)
-###################################################
- -->
-<block>
- <name>Message Sink</name>
- <key>blocks_message_sink</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.message_sink($type.size*$vlen, $(id)_msgq_out, $dont_block)</make>
- <param>
- <name>Input 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>Don't Block</name>
- <key>dont_block</key>
- <value>False</value>
- <type>enum</type>
- <option>
- <name>Don't Block</name>
- <key>True</key>
- </option>
- <option>
- <name>Block</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>
- <source>
- <name>out</name>
- <type>msg</type>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_message_source.xml b/gr-blocks/grc/blocks_multiply_const_xx.xml
index 12c6569606..db8b5211e6 100644
--- a/gr-blocks/grc/blocks_message_source.xml
+++ b/gr-blocks/grc/blocks_multiply_const_xx.xml
@@ -1,45 +1,48 @@
<?xml version="1.0"?>
<!--
###################################################
-##Message Source (the sink port is a message)
+##Fast Multiply Const Block:
+## all types, 1 output, 1 input & const
###################################################
-->
<block>
- <name>Message Source</name>
- <key>blocks_message_source</key>
+ <name>Fast Multiply Const</name>
+ <key>blocks_multiply_const_xx</key>
<import>from gnuradio import blocks</import>
- <make>blocks.message_source($type.size*$vlen, $(id)_msgq_in)</make>
+ <make>blocks.multiply_const_$(type.fcn)($const)</make>
+ <callback>set_k($const)</callback>
<param>
- <name>Output Type</name>
+ <name>IO Type</name>
<key>type</key>
<type>enum</type>
<option>
<name>Complex</name>
<key>complex</key>
- <opt>size:gr.sizeof_gr_complex</opt>
+ <opt>fcn:cc</opt>
</option>
<option>
<name>Float</name>
<key>float</key>
- <opt>size:gr.sizeof_float</opt>
+ <opt>fcn:ff</opt>
</option>
<option>
<name>Int</name>
<key>int</key>
- <opt>size:gr.sizeof_int</opt>
+ <opt>fcn:ii</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>
+ <opt>fcn:ss</opt>
</option>
</param>
<param>
+ <name>Constant</name>
+ <key>const</key>
+ <value>0</value>
+ <type>$type</type>
+ </param>
+ <param>
<name>Vec Length</name>
<key>vlen</key>
<value>1</value>
@@ -48,7 +51,8 @@
<check>$vlen &gt; 0</check>
<sink>
<name>in</name>
- <type>msg</type>
+ <type>$type</type>
+ <vlen>$vlen</vlen>
</sink>
<source>
<name>out</name>
diff --git a/gr-blocks/grc/blocks_pdu_filter.xml b/gr-blocks/grc/blocks_pdu_filter.xml
index 1fb7209500..0e848963de 100644
--- a/gr-blocks/grc/blocks_pdu_filter.xml
+++ b/gr-blocks/grc/blocks_pdu_filter.xml
@@ -10,6 +10,9 @@
<import>from gnuradio import blocks</import>
<import>import pmt</import>
<make>blocks.pdu_filter($k, $v, $invert)</make>
+ <callback>set_key($k)</callback>
+ <callback>set_val($v)</callback>
+ <callback>set_inversion($invert)</callback>
<param>
<name>Key</name>
<key>k</key>
@@ -26,7 +29,7 @@
<name>Invert Filter</name>
<key>invert</key>
<value>False</value>
- <type>enum</type>
+ <type>bool</type>
<option>
<name>No</name>
<key>False</key>
diff --git a/gr-blocks/grc/blocks_pdu_remove.xml b/gr-blocks/grc/blocks_pdu_remove.xml
index ad99445e1d..c71da32fce 100644
--- a/gr-blocks/grc/blocks_pdu_remove.xml
+++ b/gr-blocks/grc/blocks_pdu_remove.xml
@@ -10,6 +10,7 @@
<import>from gnuradio import blocks</import>
<import>import pmt</import>
<make>blocks.pdu_remove($k)</make>
+ <callback>set_key($k)</callback>
<param>
<name>Key</name>
<key>k</key>
diff --git a/gr-blocks/grc/blocks_pdu_set.xml b/gr-blocks/grc/blocks_pdu_set.xml
index 1e7157fa8a..b7a9030622 100644
--- a/gr-blocks/grc/blocks_pdu_set.xml
+++ b/gr-blocks/grc/blocks_pdu_set.xml
@@ -10,6 +10,8 @@
<import>from gnuradio import blocks</import>
<import>import pmt</import>
<make>blocks.pdu_set($k, $v)</make>
+ <callback>set_key($k)</callback>
+ <callback>set_val($v)</callback>
<param>
<name>Key</name>
<key>k</key>
diff --git a/gr-blocks/include/gnuradio/blocks/CMakeLists.txt b/gr-blocks/include/gnuradio/blocks/CMakeLists.txt
index 5a748acc19..d566b3da67 100644
--- a/gr-blocks/include/gnuradio/blocks/CMakeLists.txt
+++ b/gr-blocks/include/gnuradio/blocks/CMakeLists.txt
@@ -120,11 +120,8 @@ install(FILES
keep_one_in_n.h
lfsr_32k_source_s.h
message_debug.h
- message_sink.h
- message_source.h
message_strobe.h
message_strobe_random.h
- message_burst_source.h
multiply_cc.h
multiply_ff.h
multiply_conjugate_cc.h
diff --git a/gr-blocks/include/gnuradio/blocks/message_burst_source.h b/gr-blocks/include/gnuradio/blocks/message_burst_source.h
deleted file mode 100644
index b5c068dcd4..0000000000
--- a/gr-blocks/include/gnuradio/blocks/message_burst_source.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/* -*- c++ -*- */
-/*
- * Copyright 2012-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_GR_MESSAGE_BURST_SOURCE_H
-#define INCLUDED_GR_MESSAGE_BURST_SOURCE_H
-
-#include <gnuradio/blocks/api.h>
-#include <gnuradio/sync_block.h>
-#include <gnuradio/msg_queue.h>
-
-namespace gr {
- namespace blocks {
-
- /*!
- * \brief Turn received messages into a stream and tag them for UHD to send.
- * \ingroup message_tools_blk
- */
- class BLOCKS_API message_burst_source : virtual public sync_block
- {
- public:
- // gr::blocks::message_source::sptr
- typedef boost::shared_ptr<message_burst_source> sptr;
-
- static sptr make(size_t itemsize, int msgq_limit);
- static sptr make(size_t itemsize, gr::msg_queue::sptr msgq);
-
- virtual gr::msg_queue::sptr msgq() const = 0;
- };
-
- } /* namespace blocks */
-} /* namespace gr */
-
-#endif /* INCLUDED_GR_MESSAGE_BURST_SOURCE_H */
diff --git a/gr-blocks/include/gnuradio/blocks/message_sink.h b/gr-blocks/include/gnuradio/blocks/message_sink.h
deleted file mode 100644
index 541ad6eaa1..0000000000
--- a/gr-blocks/include/gnuradio/blocks/message_sink.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/* -*- c++ -*- */
-/*
- * Copyright 2005,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_GR_MESSAGE_SINK_H
-#define INCLUDED_GR_MESSAGE_SINK_H
-
-#include <gnuradio/blocks/api.h>
-#include <gnuradio/sync_block.h>
-#include <gnuradio/msg_queue.h>
-
-namespace gr {
- namespace blocks {
-
- /*!
- * \brief Gather received items into messages and insert into msgq
- * \ingroup message_tools_blk
- */
- class BLOCKS_API message_sink : virtual public sync_block
- {
- public:
- // gr::blocks::message_sink::sptr
- typedef boost::shared_ptr<message_sink> sptr;
-
- static sptr make(size_t itemsize, gr::msg_queue::sptr msgq, bool dont_block);
- static sptr make(size_t itemsize, gr::msg_queue::sptr msgq, bool dont_block,
- const std::string& lengthtagname);
-
- };
-
- } /* namespace blocks */
-} /* namespace gr */
-
-#endif /* INCLUDED_GR_MESSAGE_SINK_H */
diff --git a/gr-blocks/include/gnuradio/blocks/message_source.h b/gr-blocks/include/gnuradio/blocks/message_source.h
deleted file mode 100644
index d85c07cf2c..0000000000
--- a/gr-blocks/include/gnuradio/blocks/message_source.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/* -*- c++ -*- */
-/*
- * Copyright 2005,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_GR_MESSAGE_SOURCE_H
-#define INCLUDED_GR_MESSAGE_SOURCE_H
-
-#include <gnuradio/blocks/api.h>
-#include <gnuradio/sync_block.h>
-#include <gnuradio/msg_queue.h>
-
-namespace gr {
- namespace blocks {
-
- /*!
- * \brief Turn received messages into a stream
- * \ingroup message_tools_blk
- */
- class BLOCKS_API message_source : virtual public sync_block
- {
- public:
- // gr::blocks::message_source::sptr
- typedef boost::shared_ptr<message_source> sptr;
-
- static sptr make(size_t itemsize, int msgq_limit=0);
- static sptr make(size_t itemsize, gr::msg_queue::sptr msgq);
- static sptr make(size_t itemsize, gr::msg_queue::sptr msgq,
- const std::string& lengthtagname);
-
- virtual gr::msg_queue::sptr msgq() const = 0;
- };
-
- } /* namespace blocks */
-} /* namespace gr */
-
-#endif /* INCLUDED_GR_MESSAGE_SOURCE_H */
diff --git a/gr-blocks/include/gnuradio/blocks/pdu_filter.h b/gr-blocks/include/gnuradio/blocks/pdu_filter.h
index 1483731042..25dd185934 100644
--- a/gr-blocks/include/gnuradio/blocks/pdu_filter.h
+++ b/gr-blocks/include/gnuradio/blocks/pdu_filter.h
@@ -44,6 +44,9 @@ namespace gr {
* \brief Construct a PDU filter
*/
static sptr make(pmt::pmt_t k, pmt::pmt_t v, bool invert = false);
+ virtual void set_key(pmt::pmt_t key) = 0;
+ virtual void set_val(pmt::pmt_t val) = 0;
+ virtual void set_inversion(bool invert) = 0;
};
} /* namespace blocks */
diff --git a/gr-blocks/include/gnuradio/blocks/pdu_remove.h b/gr-blocks/include/gnuradio/blocks/pdu_remove.h
index 9b8a087e95..f2ab35f7cf 100644
--- a/gr-blocks/include/gnuradio/blocks/pdu_remove.h
+++ b/gr-blocks/include/gnuradio/blocks/pdu_remove.h
@@ -44,6 +44,7 @@ namespace gr {
* \brief Construct a PDU meta remove block
*/
static sptr make(pmt::pmt_t k);
+ virtual void set_key(pmt::pmt_t key) = 0;
};
} /* namespace blocks */
diff --git a/gr-blocks/include/gnuradio/blocks/pdu_set.h b/gr-blocks/include/gnuradio/blocks/pdu_set.h
index cfafc44bdd..ba96492b61 100644
--- a/gr-blocks/include/gnuradio/blocks/pdu_set.h
+++ b/gr-blocks/include/gnuradio/blocks/pdu_set.h
@@ -44,6 +44,8 @@ namespace gr {
* \brief Construct a PDU meta set block
*/
static sptr make(pmt::pmt_t k, pmt::pmt_t v);
+ virtual void set_key(pmt::pmt_t key) = 0;
+ virtual void set_val(pmt::pmt_t val) = 0;
};
} /* namespace blocks */
diff --git a/gr-blocks/lib/CMakeLists.txt b/gr-blocks/lib/CMakeLists.txt
index da6bc9bf89..1f3b0ee041 100644
--- a/gr-blocks/lib/CMakeLists.txt
+++ b/gr-blocks/lib/CMakeLists.txt
@@ -140,11 +140,8 @@ list(APPEND gr_blocks_sources
keep_one_in_n_impl.cc
lfsr_32k_source_s_impl.cc
message_debug_impl.cc
- message_sink_impl.cc
- message_source_impl.cc
message_strobe_impl.cc
message_strobe_random_impl.cc
- message_burst_source_impl.cc
multiply_cc_impl.cc
multiply_ff_impl.cc
multiply_conjugate_cc_impl.cc
diff --git a/gr-blocks/lib/message_burst_source_impl.cc b/gr-blocks/lib/message_burst_source_impl.cc
deleted file mode 100644
index 0ce0a9284f..0000000000
--- a/gr-blocks/lib/message_burst_source_impl.cc
+++ /dev/null
@@ -1,149 +0,0 @@
-/* -*- c++ -*- */
-/*
- * Copyright 2012-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.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "message_burst_source_impl.h"
-#include <gnuradio/io_signature.h>
-#include <cstdio>
-#include <errno.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <stdexcept>
-#include <string.h>
-#include <gnuradio/tags.h>
-
-namespace gr {
- namespace blocks {
-
- message_burst_source::sptr
- message_burst_source::make(size_t itemsize, int msgq_limit)
- {
- return gnuradio::get_initial_sptr
- (new message_burst_source_impl(itemsize, msgq_limit));
- }
-
- message_burst_source::sptr
- message_burst_source::make(size_t itemsize, msg_queue::sptr msgq)
- {
- return gnuradio::get_initial_sptr
- (new message_burst_source_impl(itemsize, msgq));
- }
-
- message_burst_source_impl::message_burst_source_impl(size_t itemsize, int msgq_limit)
- : sync_block("message_burst_source",
- io_signature::make(0, 0, 0),
- io_signature::make(1, 1, itemsize)),
- d_itemsize(itemsize), d_msgq(msg_queue::make(msgq_limit)),
- d_msg_offset(0), d_eof(false)
- {
- std::stringstream id;
- id << name() << unique_id();
- d_me = pmt::string_to_symbol(id.str());
- }
-
- message_burst_source_impl::message_burst_source_impl(size_t itemsize, msg_queue::sptr msgq)
- : sync_block("message_burst_source",
- io_signature::make(0, 0, 0),
- io_signature::make(1, 1, itemsize)),
- d_itemsize(itemsize), d_msgq(msgq),
- d_msg_offset(0), d_eof(false)
- {
- std::stringstream id;
- id << name() << unique_id();
- d_me = pmt::string_to_symbol(id.str());
- }
-
- message_burst_source_impl::~message_burst_source_impl()
- {
- }
-
- int
- message_burst_source_impl::work(int noutput_items,
- gr_vector_const_void_star &input_items,
- gr_vector_void_star &output_items)
- {
- char *out = (char*)output_items[0];
- int nn = 0;
-
- uint64_t abs_sample_count = nitems_written(0);
-
- while(nn < noutput_items) {
- if(d_msg) {
- //
- // Consume whatever we can from the current message
- //
-
- int mm = std::min(noutput_items - nn,
- (int)((d_msg->length() - d_msg_offset) / d_itemsize));
- memcpy(out, &(d_msg->msg()[d_msg_offset]), mm * d_itemsize);
-
- nn += mm;
- out += mm * d_itemsize;
- d_msg_offset += mm * d_itemsize;
- assert(d_msg_offset <= d_msg->length());
-
- if(d_msg_offset == d_msg->length()) {
- if(d_msg->type() == 1) // type == 1 sets EOF
- d_eof = true;
- d_msg.reset();
- //tag end of burst
- add_item_tag(0, //stream ID
- abs_sample_count+nn-1, //sample number
- pmt::string_to_symbol("tx_eob"),
- pmt::from_bool(1),
- d_me); //block src id
- }
- }
- else {
- //
- // No current message
- //
- if(d_msgq->empty_p() && nn > 0) { // no more messages in the queue, return what we've got
- break;
- }
-
- if(d_eof)
- return -1;
-
- d_msg = d_msgq->delete_head(); // block, waiting for a message
- d_msg_offset = 0;
- //tag start of burst
- add_item_tag(0, //stream ID
- abs_sample_count+nn, //sample number
- pmt::string_to_symbol("tx_sob"),
- pmt::from_bool(1),
- d_me); //block src id
-
- if((d_msg->length() % d_itemsize) != 0)
- throw std::runtime_error("msg length is not a multiple of d_itemsize");
- }
- }
-
- return nn;
- }
-
- } /* namespace blocks */
-} /* namespace gr */
diff --git a/gr-blocks/lib/message_burst_source_impl.h b/gr-blocks/lib/message_burst_source_impl.h
deleted file mode 100644
index a389a23942..0000000000
--- a/gr-blocks/lib/message_burst_source_impl.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/* -*- c++ -*- */
-/*
- * Copyright 2012-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_GR_MESSAGE_BURST_SOURCE_IMPL_H
-#define INCLUDED_GR_MESSAGE_BURST_SOURCE_IMPL_H
-
-#include <gnuradio/blocks/message_burst_source.h>
-#include <gnuradio/message.h>
-
-namespace gr {
- namespace blocks {
-
- class message_burst_source_impl : public message_burst_source
- {
- private:
- size_t d_itemsize;
- msg_queue::sptr d_msgq;
- message::sptr d_msg;
- unsigned d_msg_offset;
- bool d_eof;
-
- pmt::pmt_t d_me;
-
- public:
- message_burst_source_impl(size_t itemsize, int msgq_limit);
- message_burst_source_impl(size_t itemsize, msg_queue::sptr msgq);
- ~message_burst_source_impl();
-
- msg_queue::sptr msgq() const { return d_msgq; }
-
- int work(int noutput_items,
- gr_vector_const_void_star &input_items,
- gr_vector_void_star &output_items);
- };
-
- } /* namespace blocks */
-} /* namespace gr */
-
-#endif /* INCLUDED_GR_MESSAGE_BURST_SOURCE_IMPL_H */
diff --git a/gr-blocks/lib/message_sink_impl.cc b/gr-blocks/lib/message_sink_impl.cc
deleted file mode 100644
index 3dc4102c48..0000000000
--- a/gr-blocks/lib/message_sink_impl.cc
+++ /dev/null
@@ -1,132 +0,0 @@
-/* -*- c++ -*- */
-/*
- * Copyright 2005,2010,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.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "message_sink_impl.h"
-#include <gnuradio/io_signature.h>
-#include <cstdio>
-#include <errno.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <stdexcept>
-#include <string.h>
-
-namespace gr {
- namespace blocks {
-
- message_sink::sptr
- message_sink::make(size_t itemsize, msg_queue::sptr msgq, bool dont_block)
- {
- return gnuradio::get_initial_sptr
- (new message_sink_impl(itemsize, msgq, dont_block));
- }
-
- message_sink::sptr
- message_sink::make(size_t itemsize, msg_queue::sptr msgq, bool dont_block,
- const std::string& lengthtagname)
- {
- return gnuradio::get_initial_sptr
- (new message_sink_impl(itemsize, msgq, dont_block, lengthtagname));
- }
-
- message_sink_impl::message_sink_impl(size_t itemsize, msg_queue::sptr msgq, bool dont_block)
- : sync_block("message_sink",
- io_signature::make(1, 1, itemsize),
- io_signature::make(0, 0, 0)),
- d_itemsize(itemsize), d_msgq(msgq), d_dont_block(dont_block),
- d_tags(false), d_items_read(0)
- {
- }
-
- message_sink_impl::message_sink_impl(size_t itemsize, msg_queue::sptr msgq, bool dont_block,
- const std::string& lengthtagname)
- : sync_block("message_sink",
- io_signature::make(1, 1, itemsize),
- io_signature::make(0, 0, 0)),
- d_itemsize(itemsize), d_msgq(msgq), d_dont_block(dont_block),
- d_tags(true), d_lengthtagname(lengthtagname), d_items_read(0)
- {
- }
-
- message_sink_impl::~message_sink_impl()
- {
- }
-
- int
- message_sink_impl::work(int noutput_items,
- gr_vector_const_void_star &input_items,
- gr_vector_void_star &output_items)
- {
- const char *in = (const char *) input_items[0];
-
- if (d_tags) {
- long packet_length = 0;
- std::vector<tag_t> tags;
- this->get_tags_in_range(tags, 0, d_items_read, d_items_read+1);
- //const size_t ninput_items = noutput_items; //assumption for sync block, this can change
- for (unsigned int i = 0; i < tags.size(); i++) {
- if (pmt::symbol_to_string(tags[i].key) == d_lengthtagname) {
- packet_length = pmt::to_long(tags[i].value);
- }
- }
- assert(packet_length != 0);
-
- // FIXME run this multiple times if input_items >= N * packet_length
- if (noutput_items >= packet_length ) {
- // If the message queue is full we drop the packet.
- if (!d_msgq->full_p()) {
- message::sptr msg = message::make(0, // msg type
- d_itemsize, // arg1 for other end
- packet_length, // arg2 for other end (redundant)
- packet_length * d_itemsize); // len of msg
- memcpy(msg->msg(), in, packet_length * d_itemsize);
- d_msgq->handle(msg); // send it
- }
- d_items_read += packet_length;
- return packet_length;
- } else {
- return 0;
- }
- } else {
- // If the queue if full we drop all the data we got.
- if (!d_msgq->full_p()) {
- // build a message to hold whatever we've got
- message::sptr msg = message::make(0, // msg type
- d_itemsize, // arg1 for other end
- noutput_items, // arg2 for other end (redundant)
- noutput_items * d_itemsize); // len of msg
- memcpy(msg->msg(), in, noutput_items * d_itemsize);
-
- d_msgq->handle(msg); // send it
- }
-
- return noutput_items;
- }
- }
-
- } /* namespace blocks */
-} /* namespace gr */
-
diff --git a/gr-blocks/lib/message_sink_impl.h b/gr-blocks/lib/message_sink_impl.h
deleted file mode 100644
index e0ae3d00c0..0000000000
--- a/gr-blocks/lib/message_sink_impl.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/* -*- c++ -*- */
-/*
- * Copyright 2005,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_GR_MESSAGE_SINK_IMPL_H
-#define INCLUDED_GR_MESSAGE_SINK_IMPL_H
-
-#include <gnuradio/blocks/message_sink.h>
-
-namespace gr {
- namespace blocks {
-
- class message_sink_impl : public message_sink
- {
- private:
- size_t d_itemsize;
- msg_queue::sptr d_msgq;
- bool d_dont_block;
- bool d_tags;
- std::string d_lengthtagname;
- uint64_t d_items_read;
-
- public:
- message_sink_impl(size_t itemsize, msg_queue::sptr msgq, bool dont_block);
- message_sink_impl(size_t itemsize, msg_queue::sptr msgq, bool dont_block,
- const std::string& lengthtagname);
-
- ~message_sink_impl();
-
- int work(int noutput_items,
- gr_vector_const_void_star &input_items,
- gr_vector_void_star &output_items);
- };
-
- } /* namespace blocks */
-} /* namespace gr */
-
-#endif /* INCLUDED_GR_MESSAGE_SINK_IMPL_H */
diff --git a/gr-blocks/lib/message_source_impl.cc b/gr-blocks/lib/message_source_impl.cc
deleted file mode 100644
index b4e9ba6ed7..0000000000
--- a/gr-blocks/lib/message_source_impl.cc
+++ /dev/null
@@ -1,151 +0,0 @@
-/* -*- c++ -*- */
-/*
- * Copyright 2005,2010,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.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "message_source_impl.h"
-#include <gnuradio/io_signature.h>
-#include <cstdio>
-#include <errno.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <stdexcept>
-#include <string.h>
-
-namespace gr {
- namespace blocks {
-
- message_source::sptr
- message_source::make(size_t itemsize, int msgq_limit)
- {
- return gnuradio::get_initial_sptr
- (new message_source_impl(itemsize, msgq_limit));
- }
-
- message_source::sptr
- message_source::make(size_t itemsize, msg_queue::sptr msgq)
- {
- return gnuradio::get_initial_sptr
- (new message_source_impl(itemsize, msgq));
- }
-
- message_source::sptr
- message_source::make(size_t itemsize, msg_queue::sptr msgq,
- const std::string& lengthtagname)
- {
- return gnuradio::get_initial_sptr
- (new message_source_impl(itemsize, msgq, lengthtagname));
- }
-
- message_source_impl::message_source_impl(size_t itemsize, int msgq_limit)
- : sync_block("message_source",
- io_signature::make(0, 0, 0),
- io_signature::make(1, 1, itemsize)),
- d_itemsize(itemsize), d_msgq(msg_queue::make(msgq_limit)),
- d_msg_offset(0), d_eof(false), d_tags(false)
- {
- }
-
- message_source_impl::message_source_impl(size_t itemsize, msg_queue::sptr msgq)
- : sync_block("message_source",
- io_signature::make(0, 0, 0),
- io_signature::make(1, 1, itemsize)),
- d_itemsize(itemsize), d_msgq(msgq),
- d_msg_offset(0), d_eof(false), d_tags(false)
- {
- }
-
- message_source_impl::message_source_impl(size_t itemsize, msg_queue::sptr msgq,
- const std::string& lengthtagname)
- : sync_block("message_source",
- io_signature::make(0, 0, 0),
- io_signature::make(1, 1, itemsize)),
- d_itemsize(itemsize), d_msgq(msgq), d_msg_offset(0), d_eof(false),
- d_tags(true), d_lengthtagname(lengthtagname)
- {
- }
-
- message_source_impl::~message_source_impl()
- {
- }
-
- int
- message_source_impl::work(int noutput_items,
- gr_vector_const_void_star &input_items,
- gr_vector_void_star &output_items)
- {
- char *out = (char*)output_items[0];
- int nn = 0;
-
- while(nn < noutput_items) {
- if (d_msg){
- //
- // Consume whatever we can from the current message
- //
- int mm = std::min(noutput_items - nn, (int)((d_msg->length() - d_msg_offset) / d_itemsize));
- memcpy (out, &(d_msg->msg()[d_msg_offset]), mm * d_itemsize);
-
- if (d_tags && (d_msg_offset == 0)) {
- const uint64_t offset = this->nitems_written(0) + nn;
- pmt::pmt_t key = pmt::string_to_symbol(d_lengthtagname);
- pmt::pmt_t value = pmt::from_long(d_msg->length());
- this->add_item_tag(0, offset, key, value);
- }
- nn += mm;
- out += mm * d_itemsize;
- d_msg_offset += mm * d_itemsize;
- assert(d_msg_offset <= d_msg->length());
-
- if (d_msg_offset == d_msg->length()){
- if (d_msg->type() == 1) // type == 1 sets EOF
- d_eof = true;
- d_msg.reset();
- }
- }
- else {
- //
- // No current message
- //
- if (d_msgq->empty_p() && nn > 0){ // no more messages in the queue, return what we've got
- break;
- }
-
- if (d_eof)
- return -1;
-
- d_msg = d_msgq->delete_head(); // block, waiting for a message
- d_msg_offset = 0;
-
- if ((d_msg->length() % d_itemsize) != 0)
- throw std::runtime_error("msg length is not a multiple of d_itemsize");
- }
-
- }
-
- return nn;
- }
-
- } /* namespace blocks */
-} /* namespace gr */
diff --git a/gr-blocks/lib/message_source_impl.h b/gr-blocks/lib/message_source_impl.h
deleted file mode 100644
index bbc8f728d5..0000000000
--- a/gr-blocks/lib/message_source_impl.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/* -*- c++ -*- */
-/*
- * Copyright 2005,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_GR_MESSAGE_SOURCE_IMPL_H
-#define INCLUDED_GR_MESSAGE_SOURCE_IMPL_H
-
-#include <gnuradio/blocks/message_source.h>
-#include <gnuradio/message.h>
-
-namespace gr {
- namespace blocks {
-
- class message_source_impl : public message_source
- {
- private:
- size_t d_itemsize;
- msg_queue::sptr d_msgq;
- message::sptr d_msg;
- unsigned d_msg_offset;
- bool d_eof;
- bool d_tags;
- // FIXME: Is this adequate tagname length.
- std::string d_lengthtagname;
-
- public:
- message_source_impl(size_t itemsize, int msgq_limit);
- message_source_impl(size_t itemsize, msg_queue::sptr msgq);
- message_source_impl(size_t itemsize, msg_queue::sptr msgq,
- const std::string& lengthtagname);
-
- ~message_source_impl();
-
- msg_queue::sptr msgq() const { return d_msgq; }
-
- int work(int noutput_items,
- gr_vector_const_void_star &input_items,
- gr_vector_void_star &output_items);
- };
-
- } /* namespace blocks */
-} /* namespace gr */
-
-#endif /* INCLUDED_GR_MESSAGE_SOURCE_IMPL_H */
diff --git a/gr-blocks/lib/pdu_filter_impl.h b/gr-blocks/lib/pdu_filter_impl.h
index 66440ee421..e54b50427c 100644
--- a/gr-blocks/lib/pdu_filter_impl.h
+++ b/gr-blocks/lib/pdu_filter_impl.h
@@ -38,6 +38,9 @@ namespace gr {
public:
pdu_filter_impl(pmt::pmt_t k, pmt::pmt_t v, bool invert);
void handle_msg(pmt::pmt_t msg);
+ void set_key(pmt::pmt_t key) { d_k = key; };
+ void set_val(pmt::pmt_t val) { d_v = val; };
+ void set_inversion(bool invert) { d_invert = invert; };
};
} /* namespace blocks */
diff --git a/gr-blocks/lib/pdu_remove_impl.h b/gr-blocks/lib/pdu_remove_impl.h
index 4492e4b6d9..6f1a7f1b90 100644
--- a/gr-blocks/lib/pdu_remove_impl.h
+++ b/gr-blocks/lib/pdu_remove_impl.h
@@ -36,6 +36,7 @@ namespace gr {
public:
pdu_remove_impl(pmt::pmt_t k);
void handle_msg(pmt::pmt_t msg);
+ void set_key(pmt::pmt_t key) { d_k = key; };
};
} /* namespace blocks */
diff --git a/gr-blocks/lib/pdu_set_impl.h b/gr-blocks/lib/pdu_set_impl.h
index b27315ef4d..3529195aaf 100644
--- a/gr-blocks/lib/pdu_set_impl.h
+++ b/gr-blocks/lib/pdu_set_impl.h
@@ -37,6 +37,8 @@ namespace gr {
public:
pdu_set_impl(pmt::pmt_t k, pmt::pmt_t v);
void handle_msg(pmt::pmt_t msg);
+ void set_key(pmt::pmt_t key) { d_k = key; };
+ void set_val(pmt::pmt_t val) { d_v = val; };
};
} /* namespace blocks */
diff --git a/gr-blocks/lib/tcp_server_sink_impl.cc b/gr-blocks/lib/tcp_server_sink_impl.cc
index 329e798ca8..44f0765cb2 100644
--- a/gr-blocks/lib/tcp_server_sink_impl.cc
+++ b/gr-blocks/lib/tcp_server_sink_impl.cc
@@ -58,10 +58,10 @@ namespace gr {
d_buf(new uint8_t[BUF_SIZE]),
d_writing(0)
{
- std::string s_port = (boost::format("%d") % port).str();
- std::string s_host = host.empty() ? std::string("localhost") : host;
+ std::string s__port = (boost::format("%d") % port).str();
+ std::string s__host = host.empty() ? std::string("localhost") : host;
boost::asio::ip::tcp::resolver resolver(d_io_service);
- boost::asio::ip::tcp::resolver::query query(s_host, s_port,
+ boost::asio::ip::tcp::resolver::query query(s__host, s__port,
boost::asio::ip::resolver_query_base::passive);
d_endpoint = *resolver.resolve(query);
diff --git a/gr-blocks/python/blocks/qa_message.py b/gr-blocks/python/blocks/qa_message.py
index 1d677007b4..1d0380d44c 100755
--- a/gr-blocks/python/blocks/qa_message.py
+++ b/gr-blocks/python/blocks/qa_message.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
#
-# Copyright 2004,2010,2013 Free Software Foundation, Inc.
+# Copyright 2004,2010,2013,2016 Free Software Foundation, Inc.
#
# This file is part of GNU Radio
#
@@ -100,35 +100,6 @@ class test_message(gr_unittest.TestCase):
tb.run()
self.assertEquals(input_data, dst.data())
- def test_301(self):
- # Use itemsize, limit constructor
- src = blocks.message_source(gr.sizeof_char)
- dst = blocks.vector_sink_b()
- tb = gr.top_block()
- tb.connect(src, dst)
- src.msgq().insert_tail(gr.message_from_string('01234'))
- src.msgq().insert_tail(gr.message_from_string('5'))
- src.msgq().insert_tail(gr.message_from_string(''))
- src.msgq().insert_tail(gr.message_from_string('6789'))
- src.msgq().insert_tail(gr.message(1)) # send EOF
- tb.run()
- self.assertEquals(tuple(map(ord, '0123456789')), dst.data())
-
- def test_302(self):
- # Use itemsize, msgq constructor
- msgq = gr.msg_queue()
- src = blocks.message_source(gr.sizeof_char, msgq)
- dst = blocks.vector_sink_b()
- tb = gr.top_block()
- tb.connect(src, dst)
- src.msgq().insert_tail(gr.message_from_string('01234'))
- src.msgq().insert_tail(gr.message_from_string('5'))
- src.msgq().insert_tail(gr.message_from_string(''))
- src.msgq().insert_tail(gr.message_from_string('6789'))
- src.msgq().insert_tail(gr.message(1)) # send EOF
- tb.run()
- self.assertEquals(tuple(map(ord, '0123456789')), dst.data())
-
def test_debug_401(self):
msg = pmt.intern("TESTING")
src = blocks.message_strobe(msg, 500)
diff --git a/gr-blocks/python/blocks/qa_message_tags.py b/gr-blocks/python/blocks/qa_message_tags.py
deleted file mode 100644
index 0d4f77bf9f..0000000000
--- a/gr-blocks/python/blocks/qa_message_tags.py
+++ /dev/null
@@ -1,27 +0,0 @@
-import time
-
-from gnuradio import gr, gr_unittest, blocks
-
-class test_message_tags (gr_unittest.TestCase):
-
- def test_1 (self):
- data = ('hello', 'you', 'there')
- tx_msgq = gr.msg_queue()
- rx_msgq = gr.msg_queue()
- for d in data:
- tx_msgq.insert_tail(gr.message_from_string(d))
- tx_msgq.insert_tail(gr.message(1)) # send EOF
- tb = gr.top_block()
- src = blocks.message_source(gr.sizeof_char, tx_msgq, "packet_length")
- snk = blocks.message_sink(gr.sizeof_char, rx_msgq, False, "packet_length")
- tb.connect(src, snk)
- tb.start()
- time.sleep(1)
- tb.stop()
- for d in data:
- msg = rx_msgq.delete_head()
- contents = msg.to_string()
- self.assertEqual(d, contents)
-
-if __name__ == '__main__':
- gr_unittest.run(test_message_tags, "test_message_tags.xml")
diff --git a/gr-blocks/python/grc_gnuradio/README b/gr-blocks/python/grc_gnuradio/README
index 897eed65ca..e27b01af54 100644
--- a/gr-blocks/python/grc_gnuradio/README
+++ b/gr-blocks/python/grc_gnuradio/README
@@ -6,6 +6,3 @@ These will be phased-out as new functionaility is merged into gnuradio.
The blk2s module wraps many blocks in blks2 and gives them streaming outputs.
Will be phased-out by new message passing implementations.
Other blks2 blocks will hopefully make their way into blks2impl.
-
-The wxgui module contains a top_block + wxgui frame.
-Will be phased-out by gui.py in wxgui and a new top block template.
diff --git a/gr-blocks/swig/blocks_swig0.i b/gr-blocks/swig/blocks_swig0.i
index 37b8ef6b0b..23efa7432f 100644
--- a/gr-blocks/swig/blocks_swig0.i
+++ b/gr-blocks/swig/blocks_swig0.i
@@ -43,11 +43,8 @@
#include "gnuradio/blocks/file_meta_source.h"
#include "gnuradio/blocks/head.h"
#include "gnuradio/blocks/message_debug.h"
-#include "gnuradio/blocks/message_sink.h"
-#include "gnuradio/blocks/message_source.h"
#include "gnuradio/blocks/message_strobe.h"
#include "gnuradio/blocks/message_strobe_random.h"
-#include "gnuradio/blocks/message_burst_source.h"
#include "gnuradio/blocks/nop.h"
#include "gnuradio/blocks/null_sink.h"
#include "gnuradio/blocks/null_source.h"
@@ -69,11 +66,8 @@
%include "gnuradio/blocks/file_meta_source.h"
%include "gnuradio/blocks/head.h"
%include "gnuradio/blocks/message_debug.h"
-%include "gnuradio/blocks/message_sink.h"
-%include "gnuradio/blocks/message_source.h"
%include "gnuradio/blocks/message_strobe.h"
%include "gnuradio/blocks/message_strobe_random.h"
-%include "gnuradio/blocks/message_burst_source.h"
%include "gnuradio/blocks/nop.h"
%include "gnuradio/blocks/null_sink.h"
%include "gnuradio/blocks/null_source.h"
@@ -92,11 +86,8 @@ GR_SWIG_BLOCK_MAGIC2(blocks, file_meta_sink);
GR_SWIG_BLOCK_MAGIC2(blocks, file_meta_source);
GR_SWIG_BLOCK_MAGIC2(blocks, head);
GR_SWIG_BLOCK_MAGIC2(blocks, message_debug);
-GR_SWIG_BLOCK_MAGIC2(blocks, message_sink);
-GR_SWIG_BLOCK_MAGIC2(blocks, message_source);
GR_SWIG_BLOCK_MAGIC2(blocks, message_strobe);
GR_SWIG_BLOCK_MAGIC2(blocks, message_strobe_random);
-GR_SWIG_BLOCK_MAGIC2(blocks, message_burst_source);
GR_SWIG_BLOCK_MAGIC2(blocks, nop);
GR_SWIG_BLOCK_MAGIC2(blocks, null_sink);
GR_SWIG_BLOCK_MAGIC2(blocks, null_source);
diff --git a/gr-digital/examples/CMakeLists.txt b/gr-digital/examples/CMakeLists.txt
index 7f388fceda..76568b5043 100644
--- a/gr-digital/examples/CMakeLists.txt
+++ b/gr-digital/examples/CMakeLists.txt
@@ -83,10 +83,7 @@ install(
demod/ber_simulation.grc
demod/dpsk_loopback.grc
demod/gfsk_loopback.grc
- demod/test_corr_and_sync.grc
demod/test_corr_est.grc
- demod/uhd_corr_and_sync_tx.grc
- demod/uhd_corr_and_sync_rx.grc
DESTINATION ${GR_PKG_DIGITAL_EXAMPLES_DIR}/demod
)
diff --git a/gr-digital/examples/demod/test_corr_and_sync.grc b/gr-digital/examples/demod/test_corr_and_sync.grc
deleted file mode 100644
index 91e09dd203..0000000000
--- a/gr-digital/examples/demod/test_corr_and_sync.grc
+++ /dev/null
@@ -1,3332 +0,0 @@
-<?xml version='1.0' encoding='ASCII'?>
-<flow_graph>
- <timestamp>Fri Jul 11 16:54:10 2014</timestamp>
- <block>
- <key>options</key>
- <param>
- <key>id</key>
- <value>test_corr_and_sync</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>2000,2000</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>100000</value>
- </param>
- <param>
- <key>alias</key>
- <value></value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(11, 72)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>variable</key>
- <param>
- <key>id</key>
- <value>eb</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>value</key>
- <value>0.35</value>
- </param>
- <param>
- <key>alias</key>
- <value></value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(346, 72)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>variable</key>
- <param>
- <key>id</key>
- <value>matched_filter</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>value</key>
- <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>(429, 72)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>variable</key>
- <param>
- <key>id</key>
- <value>preamble</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </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>
- </param>
- <param>
- <key>alias</key>
- <value></value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(279, 8)</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>4</value>
- </param>
- <param>
- <key>alias</key>
- <value></value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(278, 72)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>variable</key>
- <param>
- <key>id</key>
- <value>bb_filter</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>value</key>
- <value>firdes.root_raised_cosine(sps, sps, 1, eb, 101)</value>
- </param>
- <param>
- <key>alias</key>
- <value></value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(429, 8)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>variable</key>
- <param>
- <key>id</key>
- <value>gap</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>value</key>
- <value>20000</value>
- </param>
- <param>
- <key>alias</key>
- <value></value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(202, 72)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>variable</key>
- <param>
- <key>id</key>
- <value>payload_size</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>value</key>
- <value>992</value>
- </param>
- <param>
- <key>alias</key>
- <value></value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(101, 73)</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>alias</key>
- <value></value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(1074, 9)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>variable</key>
- <param>
- <key>id</key>
- <value>rrc_taps</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>value</key>
- <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>(1075, 73)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>blocks_complex_to_float</key>
- <param>
- <key>id</key>
- <value>blocks_complex_to_float_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</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>(1235, 194)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>blocks_complex_to_mag</key>
- <param>
- <key>id</key>
- <value>blocks_complex_to_mag_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</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>(1235, 149)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>digital_correlate_and_sync_cc</key>
- <param>
- <key>id</key>
- <value>digital_correlate_and_sync_cc_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>symbols</key>
- <value>preamble</value>
- </param>
- <param>
- <key>filter</key>
- <value>matched_filter</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>(972, 174)</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>freq_offset</value>
- </param>
- <param>
- <key>epsilon</key>
- <value>time_offset</value>
- </param>
- <param>
- <key>taps</key>
- <value>1.0</value>
- </param>
- <param>
- <key>seed</key>
- <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>(772, 158)</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>complex</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>(586, 190)</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_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>type</key>
- <value>byte</value>
- </param>
- <param>
- <key>vector</key>
- <value>map(lambda x: (-x+1)/2, preamble)</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>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>(15, 165)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>digital_constellation_modulator</key>
- <param>
- <key>id</key>
- <value>digital_constellation_modulator_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>constellation</key>
- <value>constel</value>
- </param>
- <param>
- <key>differential</key>
- <value>False</value>
- </param>
- <param>
- <key>samples_per_symbol</key>
- <value>sps</value>
- </param>
- <param>
- <key>excess_bw</key>
- <value>eb</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>(312, 166)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>blocks_stream_mux</key>
- <param>
- <key>id</key>
- <value>blocks_stream_mux_0_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>type</key>
- <value>complex</value>
- </param>
- <param>
- <key>lengths</key>
- <value>(len(preamble)+8*payload_size)*sps, gap</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>(568, 288)</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_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>num_outputs</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>minoutbuf</key>
- <value>0</value>
- </param>
- <param>
- <key>maxoutbuf</key>
- <value>0</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(402, 322)</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 scipy</value>
- </param>
- <param>
- <key>alias</key>
- <value></value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(181, 16)</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 offset</value>
- </param>
- <param>
- <key>value</key>
- <value>0</value>
- </param>
- <param>
- <key>start</key>
- <value>-2*scipy.pi</value>
- </param>
- <param>
- <key>stop</key>
- <value>2*scipy.pi</value>
- </param>
- <param>
- <key>step</key>
- <value>0.1</value>
- </param>
- <param>
- <key>widget</key>
- <value>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,1,1,1</value>
- </param>
- <param>
- <key>alias</key>
- <value></value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(692, 7)</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>-0.001</value>
- </param>
- <param>
- <key>stop</key>
- <value>0.001</value>
- </param>
- <param>
- <key>step</key>
- <value>0.00002</value>
- </param>
- <param>
- <key>widget</key>
- <value>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,0,1,1</value>
- </param>
- <param>
- <key>alias</key>
- <value></value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(808, 7)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>variable_qtgui_range</key>
- <param>
- <key>id</key>
- <value>time_offset</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>label</key>
- <value>Timing Offset</value>
- </param>
- <param>
- <key>value</key>
- <value>1</value>
- </param>
- <param>
- <key>start</key>
- <value>0.995</value>
- </param>
- <param>
- <key>stop</key>
- <value>1.005</value>
- </param>
- <param>
- <key>step</key>
- <value>0.00001</value>
- </param>
- <param>
- <key>widget</key>
- <value>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,1,1,1</value>
- </param>
- <param>
- <key>alias</key>
- <value></value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(950, 8)</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</value>
- </param>
- <param>
- <key>start</key>
- <value>0</value>
- </param>
- <param>
- <key>stop</key>
- <value>1</value>
- </param>
- <param>
- <key>step</key>
- <value>0.005</value>
- </param>
- <param>
- <key>widget</key>
- <value>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,0,1,1</value>
- </param>
- <param>
- <key>alias</key>
- <value></value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(584, 7)</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>rrc_taps</value>
- </param>
- <param>
- <key>filter_size</key>
- <value>nfilts</value>
- </param>
- <param>
- <key>init_phase</key>
- <value>0</value>
- </param>
- <param>
- <key>max_dev</key>
- <value>0.5</value>
- </param>
- <param>
- <key>osps</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>(790, 289)</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>byte</value>
- </param>
- <param>
- <key>min</key>
- <value>0</value>
- </param>
- <param>
- <key>max</key>
- <value>256</value>
- </param>
- <param>
- <key>num_samps</key>
- <value>100000</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>(30, 324)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>blocks_pack_k_bits_bb</key>
- <param>
- <key>id</key>
- <value>blocks_pack_k_bits_bb_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>k</key>
- <value>8</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>(55, 274)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>blocks_stream_mux</key>
- <param>
- <key>id</key>
- <value>blocks_stream_mux_0_0_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>type</key>
- <value>byte</value>
- </param>
- <param>
- <key>lengths</key>
- <value>len(preamble)/8,payload_size</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>(247, 318)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>variable_constellation</key>
- <param>
- <key>id</key>
- <value>constel</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>sym_map</key>
- <value>[0,1]</value>
- </param>
- <param>
- <key>const_points</key>
- <value>[1,- 1]</value>
- </param>
- <param>
- <key>rot_sym</key>
- <value>2</value>
- </param>
- <param>
- <key>dims</key>
- <value>1</value>
- </param>
- <param>
- <key>precision</key>
- <value>8</value>
- </param>
- <param>
- <key>soft_dec_lut</key>
- <value>None</value>
- </param>
- <param>
- <key>alias</key>
- <value></value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(1237, 27)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>blocks_sub_xx</key>
- <param>
- <key>id</key>
- <value>blocks_sub_xx_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>False</value>
- </param>
- <param>
- <key>type</key>
- <value>float</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>(1125, 617)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>variable_qtgui_range</key>
- <param>
- <key>id</key>
- <value>delay</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>False</value>
- </param>
- <param>
- <key>label</key>
- <value>delay</value>
- </param>
- <param>
- <key>value</key>
- <value>90</value>
- </param>
- <param>
- <key>start</key>
- <value>0</value>
- </param>
- <param>
- <key>stop</key>
- <value>200</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>5,0,1,2</value>
- </param>
- <param>
- <key>alias</key>
- <value></value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(875, 571)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</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>(752, 517)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>blocks_unpack_k_bits_bb</key>
- <param>
- <key>id</key>
- <value>blocks_unpack_k_bits_bb_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>False</value>
- </param>
- <param>
- <key>k</key>
- <value>8</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>(576, 517)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>blocks_stream_mux</key>
- <param>
- <key>id</key>
- <value>blocks_stream_mux_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>False</value>
- </param>
- <param>
- <key>type</key>
- <value>byte</value>
- </param>
- <param>
- <key>lengths</key>
- <value>(len(preamble)/8+payload_size), gap/sps/8</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>(390, 504)</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>False</value>
- </param>
- <param>
- <key>type</key>
- <value>byte</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>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>(210, 538)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>blocks_delay</key>
- <param>
- <key>id</key>
- <value>blocks_delay_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>False</value>
- </param>
- <param>
- <key>type</key>
- <value>float</value>
- </param>
- <param>
- <key>delay</key>
- <value>int(delay)</value>
- </param>
- <param>
- <key>num_ports</key>
- <value>1</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>(923, 518)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>blocks_char_to_float</key>
- <param>
- <key>id</key>
- <value>blocks_char_to_float_0_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>(1112, 482)</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_1</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>False</value>
- </param>
- <param>
- <key>type</key>
- <value>float</value>
- </param>
- <param>
- <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>20000</value>
- </param>
- <param>
- <key>srate</key>
- <value>samp_rate</value>
- </param>
- <param>
- <key>grid</key>
- <value>False</value>
- </param>
- <param>
- <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>nconnections</key>
- <value>3</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>2,0,1,2</value>
- </param>
- <param>
- <key>tr_mode</key>
- <value>qtgui.TRIG_MODE_TAG</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.010</value>
- </param>
- <param>
- <key>tr_chan</key>
- <value>0</value>
- </param>
- <param>
- <key>tr_tag</key>
- <value>time_est</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>(1345, 531)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>digital_constellation_decoder_cb</key>
- <param>
- <key>id</key>
- <value>digital_constellation_decoder_cb_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>False</value>
- </param>
- <param>
- <key>constellation</key>
- <value>constel</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>(1111, 433)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>180</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></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>
- <param>
- <key>srate</key>
- <value>samp_rate</value>
- </param>
- <param>
- <key>grid</key>
- <value>False</value>
- </param>
- <param>
- <key>autoscale</key>
- <value>False</value>
- </param>
- <param>
- <key>ymin</key>
- <value>-200</value>
- </param>
- <param>
- <key>ymax</key>
- <value>400</value>
- </param>
- <param>
- <key>nconnections</key>
- <value>3</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>1,0,1,2</value>
- </param>
- <param>
- <key>tr_mode</key>
- <value>qtgui.TRIG_MODE_NORM</value>
- </param>
- <param>
- <key>tr_slope</key>
- <value>qtgui.TRIG_SLOPE_POS</value>
- </param>
- <param>
- <key>tr_level</key>
- <value>200</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>|corr|^2</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>Re{corr}</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>Im{corr}</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>(1433, 160)</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>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>
- <value>True</value>
- </param>
- <param>
- <key>type</key>
- <value>complex</value>
- </param>
- <param>
- <key>name</key>
- <value></value>
- </param>
- <param>
- <key>size</key>
- <value>1000</value>
- </param>
- <param>
- <key>grid</key>
- <value>False</value>
- </param>
- <param>
- <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>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>0,1,1,1</value>
- </param>
- <param>
- <key>tr_mode</key>
- <value>qtgui.TRIG_MODE_TAG</value>
- </param>
- <param>
- <key>tr_slope</key>
- <value>qtgui.TRIG_SLOPE_POS</value>
- </param>
- <param>
- <key>tr_level</key>
- <value>0</value>
- </param>
- <param>
- <key>tr_chan</key>
- <value>0</value>
- </param>
- <param>
- <key>tr_tag</key>
- <value>time_est</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>label3</key>
- <value></value>
- </param>
- <param>
- <key>width3</key>
- <value>1</value>
- </param>
- <param>
- <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>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>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>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>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>"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>(1399, 283)</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>complex</value>
- </param>
- <param>
- <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>50000</value>
- </param>
- <param>
- <key>srate</key>
- <value>samp_rate</value>
- </param>
- <param>
- <key>grid</key>
- <value>False</value>
- </param>
- <param>
- <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>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>0,0,1,1</value>
- </param>
- <param>
- <key>tr_mode</key>
- <value>qtgui.TRIG_MODE_TAG</value>
- </param>
- <param>
- <key>tr_slope</key>
- <value>qtgui.TRIG_SLOPE_POS</value>
- </param>
- <param>
- <key>tr_level</key>
- <value>1</value>
- </param>
- <param>
- <key>tr_delay</key>
- <value>0.1</value>
- </param>
- <param>
- <key>tr_chan</key>
- <value>0</value>
- </param>
- <param>
- <key>tr_tag</key>
- <value>time_est</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>0</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(1398, 370)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <connection>
- <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_costas_loop_cc_0</source_block_id>
- <sink_block_id>digital_constellation_decoder_cb_0</sink_block_id>
- <source_key>0</source_key>
- <sink_key>0</sink_key>
- </connection>
- <connection>
- <source_block_id>blocks_complex_to_float_0</source_block_id>
- <sink_block_id>qtgui_time_sink_x_1</sink_block_id>
- <source_key>0</source_key>
- <sink_key>1</sink_key>
- </connection>
- <connection>
- <source_block_id>blocks_complex_to_mag_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>
- <connection>
- <source_block_id>digital_correlate_and_sync_cc_0</source_block_id>
- <sink_block_id>digital_pfb_clock_sync_xxx_0</sink_block_id>
- <source_key>0</source_key>
- <sink_key>0</sink_key>
- </connection>
- <connection>
- <source_block_id>blocks_null_source_0_0</source_block_id>
- <sink_block_id>blocks_stream_mux_0_0</sink_block_id>
- <source_key>0</source_key>
- <sink_key>1</sink_key>
- </connection>
- <connection>
- <source_block_id>blocks_vector_source_x_0_0</source_block_id>
- <sink_block_id>blocks_pack_k_bits_bb_0</sink_block_id>
- <source_key>0</source_key>
- <sink_key>0</sink_key>
- </connection>
- <connection>
- <source_block_id>blocks_stream_mux_0_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_complex_to_float_0</source_block_id>
- <sink_block_id>qtgui_time_sink_x_1</sink_block_id>
- <source_key>1</source_key>
- <sink_key>2</sink_key>
- </connection>
- <connection>
- <source_block_id>channels_channel_model_0</source_block_id>
- <sink_block_id>digital_correlate_and_sync_cc_0</sink_block_id>
- <source_key>0</source_key>
- <sink_key>0</sink_key>
- </connection>
- <connection>
- <source_block_id>blocks_stream_mux_0_0_0</source_block_id>
- <sink_block_id>digital_constellation_modulator_0</sink_block_id>
- <source_key>0</source_key>
- <sink_key>0</sink_key>
- </connection>
- <connection>
- <source_block_id>digital_constellation_modulator_0</source_block_id>
- <sink_block_id>blocks_stream_mux_0_0</sink_block_id>
- <source_key>0</source_key>
- <sink_key>0</sink_key>
- </connection>
- <connection>
- <source_block_id>digital_correlate_and_sync_cc_0</source_block_id>
- <sink_block_id>blocks_complex_to_mag_0</sink_block_id>
- <source_key>1</source_key>
- <sink_key>0</sink_key>
- </connection>
- <connection>
- <source_block_id>digital_correlate_and_sync_cc_0</source_block_id>
- <sink_block_id>blocks_complex_to_float_0</sink_block_id>
- <source_key>1</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_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>
- <connection>
- <source_block_id>blocks_pack_k_bits_bb_0</source_block_id>
- <sink_block_id>blocks_stream_mux_0_0_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>blocks_stream_mux_0_0_0</sink_block_id>
- <source_key>0</source_key>
- <sink_key>1</sink_key>
- </connection>
- <connection>
- <source_block_id>blocks_stream_mux_0_0_0</source_block_id>
- <sink_block_id>blocks_stream_mux_0</sink_block_id>
- <source_key>0</source_key>
- <sink_key>0</sink_key>
- </connection>
- <connection>
- <source_block_id>blocks_delay_0</source_block_id>
- <sink_block_id>qtgui_time_sink_x_0_1</sink_block_id>
- <source_key>0</source_key>
- <sink_key>1</sink_key>
- </connection>
- <connection>
- <source_block_id>blocks_char_to_float_0_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_delay_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_sub_xx_0</source_block_id>
- <sink_block_id>qtgui_time_sink_x_0_1</sink_block_id>
- <source_key>0</source_key>
- <sink_key>2</sink_key>
- </connection>
- <connection>
- <source_block_id>blocks_char_to_float_0_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>
- <connection>
- <source_block_id>blocks_stream_mux_0</source_block_id>
- <sink_block_id>blocks_unpack_k_bits_bb_0</sink_block_id>
- <source_key>0</source_key>
- <sink_key>0</sink_key>
- </connection>
- <connection>
- <source_block_id>blocks_unpack_k_bits_bb_0</source_block_id>
- <sink_block_id>blocks_char_to_float_0</sink_block_id>
- <source_key>0</source_key>
- <sink_key>0</sink_key>
- </connection>
- <connection>
- <source_block_id>blocks_null_source_0</source_block_id>
- <sink_block_id>blocks_stream_mux_0</sink_block_id>
- <source_key>0</source_key>
- <sink_key>1</sink_key>
- </connection>
- <connection>
- <source_block_id>blocks_char_to_float_0</source_block_id>
- <sink_block_id>blocks_delay_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>blocks_char_to_float_0_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>0</sink_key>
- </connection>
-</flow_graph>
diff --git a/gr-digital/examples/demod/uhd_corr_and_sync_rx.grc b/gr-digital/examples/demod/uhd_corr_and_sync_rx.grc
deleted file mode 100644
index fd3eaa62f1..0000000000
--- a/gr-digital/examples/demod/uhd_corr_and_sync_rx.grc
+++ /dev/null
@@ -1,1677 +0,0 @@
-<?xml version='1.0' encoding='ASCII'?>
-<flow_graph>
- <timestamp>Thu Nov 7 12:17:40 2013</timestamp>
- <block>
- <key>variable</key>
- <param>
- <key>id</key>
- <value>addr</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>value</key>
- <value>"addr=192.168.10.2"</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(481, 10)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>variable</key>
- <param>
- <key>id</key>
- <value>rrc_taps</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>value</key>
- <value>firdes.root_raised_cosine(nfilts, nfilts, 1.0/float(sps), eb, 5*sps*nfilts)</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(412, 74)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>variable</key>
- <param>
- <key>id</key>
- <value>preamble</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </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>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(260, 11)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>variable</key>
- <param>
- <key>id</key>
- <value>matched_filter</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>value</key>
- <value>firdes.root_raised_cosine(nfilts, nfilts, 1, eb, int(11*sps*nfilts))</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(254, 74)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>variable</key>
- <param>
- <key>id</key>
- <value>eb</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>value</key>
- <value>0.35</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(171, 74)</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>4</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(177, 10)</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>(411, 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>250000</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(11, 72)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>digital_correlate_and_sync_cc</key>
- <param>
- <key>id</key>
- <value>digital_correlate_and_sync_cc_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>symbols</key>
- <value>preamble</value>
- </param>
- <param>
- <key>filter</key>
- <value>matched_filter</value>
- </param>
- <param>
- <key>sps</key>
- <value>sps</value>
- </param>
- <param>
- <key>affinity</key>
- <value></value>
- </param>
- <param>
- <key>minoutbuf</key>
- <value>0</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(733, 179)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>blocks_complex_to_mag</key>
- <param>
- <key>id</key>
- <value>blocks_complex_to_mag_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>vlen</key>
- <value>1</value>
- </param>
- <param>
- <key>affinity</key>
- <value></value>
- </param>
- <param>
- <key>minoutbuf</key>
- <value>0</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(1015, 183)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>blocks_complex_to_float</key>
- <param>
- <key>id</key>
- <value>blocks_complex_to_float_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>vlen</key>
- <value>1</value>
- </param>
- <param>
- <key>affinity</key>
- <value></value>
- </param>
- <param>
- <key>minoutbuf</key>
- <value>0</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(1015, 228)</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>1*3.14/50.0</value>
- </param>
- <param>
- <key>order</key>
- <value>2</value>
- </param>
- <param>
- <key>affinity</key>
- <value></value>
- </param>
- <param>
- <key>minoutbuf</key>
- <value>0</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(641, 378)</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_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>20000</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>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>affinity</key>
- <value></value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(946, 328)</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>rrc_taps</value>
- </param>
- <param>
- <key>filter_size</key>
- <value>nfilts</value>
- </param>
- <param>
- <key>init_phase</key>
- <value>0</value>
- </param>
- <param>
- <key>max_dev</key>
- <value>0.5</value>
- </param>
- <param>
- <key>osps</key>
- <value>1</value>
- </param>
- <param>
- <key>affinity</key>
- <value></value>
- </param>
- <param>
- <key>minoutbuf</key>
- <value>0</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(297, 358)</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></value>
- </param>
- <param>
- <key>size</key>
- <value>40000</value>
- </param>
- <param>
- <key>srate</key>
- <value>samp_rate</value>
- </param>
- <param>
- <key>ymin</key>
- <value>-200</value>
- </param>
- <param>
- <key>ymax</key>
- <value>400</value>
- </param>
- <param>
- <key>nconnections</key>
- <value>3</value>
- </param>
- <param>
- <key>update_time</key>
- <value>0.10</value>
- </param>
- <param>
- <key>tr_mode</key>
- <value>qtgui.TRIG_MODE_NORM</value>
- </param>
- <param>
- <key>tr_slope</key>
- <value>qtgui.TRIG_SLOPE_POS</value>
- </param>
- <param>
- <key>tr_level</key>
- <value>200</value>
- </param>
- <param>
- <key>tr_delay</key>
- <value>0.010</value>
- </param>
- <param>
- <key>tr_chan</key>
- <value>0</value>
- </param>
- <param>
- <key>tr_tag</key>
- <value>""</value>
- </param>
- <param>
- <key>entags</key>
- <value>True</value>
- </param>
- <param>
- <key>gui_hint</key>
- <value>1,0,1,2</value>
- </param>
- <param>
- <key>affinity</key>
- <value></value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(1213, 194)</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>complex</value>
- </param>
- <param>
- <key>name</key>
- <value></value>
- </param>
- <param>
- <key>size</key>
- <value>25000</value>
- </param>
- <param>
- <key>srate</key>
- <value>samp_rate</value>
- </param>
- <param>
- <key>ymin</key>
- <value>-2</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>tr_mode</key>
- <value>qtgui.TRIG_MODE_TAG</value>
- </param>
- <param>
- <key>tr_slope</key>
- <value>qtgui.TRIG_SLOPE_POS</value>
- </param>
- <param>
- <key>tr_level</key>
- <value>1</value>
- </param>
- <param>
- <key>tr_delay</key>
- <value>0.010</value>
- </param>
- <param>
- <key>tr_chan</key>
- <value>0</value>
- </param>
- <param>
- <key>tr_tag</key>
- <value>time_est</value>
- </param>
- <param>
- <key>entags</key>
- <value>True</value>
- </param>
- <param>
- <key>gui_hint</key>
- <value>0,0,1,1</value>
- </param>
- <param>
- <key>affinity</key>
- <value>0</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(946, 396)</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>addr</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>freq</value>
- </param>
- <param>
- <key>gain0</key>
- <value>gain</value>
- </param>
- <param>
- <key>ant0</key>
- <value>TX/RX</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>affinity</key>
- <value></value>
- </param>
- <param>
- <key>minoutbuf</key>
- <value>0</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(23, 163)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>digital_fll_band_edge_cc</key>
- <param>
- <key>id</key>
- <value>digital_fll_band_edge_cc_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>type</key>
- <value>cc</value>
- </param>
- <param>
- <key>samps_per_sym</key>
- <value>sps</value>
- </param>
- <param>
- <key>rolloff</key>
- <value>eb</value>
- </param>
- <param>
- <key>filter_size</key>
- <value>45</value>
- </param>
- <param>
- <key>w</key>
- <value>2*3.14/100.0</value>
- </param>
- <param>
- <key>affinity</key>
- <value></value>
- </param>
- <param>
- <key>minoutbuf</key>
- <value>0</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(463, 148)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>blocks_multiply_const_vxx</key>
- <param>
- <key>id</key>
- <value>blocks_multiply_const_vxx_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>type</key>
- <value>complex</value>
- </param>
- <param>
- <key>const</key>
- <value>digital_gain</value>
- </param>
- <param>
- <key>vlen</key>
- <value>1</value>
- </param>
- <param>
- <key>affinity</key>
- <value></value>
- </param>
- <param>
- <key>minoutbuf</key>
- <value>0</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(278, 195)</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>Rx Gain</value>
- </param>
- <param>
- <key>value</key>
- <value>12.5</value>
- </param>
- <param>
- <key>start</key>
- <value>0</value>
- </param>
- <param>
- <key>stop</key>
- <value>31.5</value>
- </param>
- <param>
- <key>step</key>
- <value>0.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>2,0,1,1</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(633, 11)</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 Frequency</value>
- </param>
- <param>
- <key>value</key>
- <value>450e6</value>
- </param>
- <param>
- <key>start</key>
- <value>400e6</value>
- </param>
- <param>
- <key>stop</key>
- <value>500e6</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>3,0,1,2</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(882, 14)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>variable_qtgui_range</key>
- <param>
- <key>id</key>
- <value>digital_gain</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>label</key>
- <value>Digital Gain</value>
- </param>
- <param>
- <key>value</key>
- <value>45</value>
- </param>
- <param>
- <key>start</key>
- <value>0</value>
- </param>
- <param>
- <key>stop</key>
- <value>200</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>2,1,1,1</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(761, 13)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>options</key>
- <param>
- <key>id</key>
- <value>uhd_corr_and_sync_rx</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>2000,2000</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>
- <connection>
- <source_block_id>uhd_usrp_source_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_correlate_and_sync_cc_0</source_block_id>
- <sink_block_id>blocks_complex_to_float_0</sink_block_id>
- <source_key>1</source_key>
- <sink_key>0</sink_key>
- </connection>
- <connection>
- <source_block_id>digital_correlate_and_sync_cc_0</source_block_id>
- <sink_block_id>blocks_complex_to_mag_0</sink_block_id>
- <source_key>1</source_key>
- <sink_key>0</sink_key>
- </connection>
- <connection>
- <source_block_id>blocks_multiply_const_vxx_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>digital_correlate_and_sync_cc_0</source_block_id>
- <sink_block_id>digital_pfb_clock_sync_xxx_0</sink_block_id>
- <source_key>0</source_key>
- <sink_key>0</sink_key>
- </connection>
- <connection>
- <source_block_id>digital_fll_band_edge_cc_0</source_block_id>
- <sink_block_id>digital_correlate_and_sync_cc_0</sink_block_id>
- <source_key>0</source_key>
- <sink_key>0</sink_key>
- </connection>
- <connection>
- <source_block_id>blocks_complex_to_mag_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>
- <connection>
- <source_block_id>blocks_complex_to_float_0</source_block_id>
- <sink_block_id>qtgui_time_sink_x_1</sink_block_id>
- <source_key>0</source_key>
- <sink_key>1</sink_key>
- </connection>
- <connection>
- <source_block_id>blocks_complex_to_float_0</source_block_id>
- <sink_block_id>qtgui_time_sink_x_1</sink_block_id>
- <source_key>1</source_key>
- <sink_key>2</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>
- <connection>
- <source_block_id>digital_costas_loop_cc_0</source_block_id>
- <sink_block_id>qtgui_const_sink_x_0_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_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/uhd_corr_and_sync_tx.grc b/gr-digital/examples/demod/uhd_corr_and_sync_tx.grc
deleted file mode 100644
index c312a40983..0000000000
--- a/gr-digital/examples/demod/uhd_corr_and_sync_tx.grc
+++ /dev/null
@@ -1,1619 +0,0 @@
-<?xml version='1.0' encoding='ASCII'?>
-<flow_graph>
- <timestamp>Thu Nov 7 12:23:18 2013</timestamp>
- <block>
- <key>blocks_vector_source_x</key>
- <param>
- <key>id</key>
- <value>blocks_vector_source_x_0_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>type</key>
- <value>byte</value>
- </param>
- <param>
- <key>vector</key>
- <value>map(lambda x: (-x+1)/2, preamble)</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>affinity</key>
- <value></value>
- </param>
- <param>
- <key>minoutbuf</key>
- <value>0</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(15, 165)</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>250000</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(11, 75)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>variable</key>
- <param>
- <key>id</key>
- <value>gap</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>value</key>
- <value>20000</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(104, 74)</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>4</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(181, 75)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>variable</key>
- <param>
- <key>id</key>
- <value>eb</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>value</key>
- <value>0.35</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(249, 75)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>variable</key>
- <param>
- <key>id</key>
- <value>addr</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>value</key>
- <value>"addr=192.168.10.2"</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(335, 76)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>variable</key>
- <param>
- <key>id</key>
- <value>preamble</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </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>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(279, 8)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>variable</key>
- <param>
- <key>id</key>
- <value>payload_size</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>value</key>
- <value>992</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(175, 9)</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>byte</value>
- </param>
- <param>
- <key>min</key>
- <value>0</value>
- </param>
- <param>
- <key>max</key>
- <value>256</value>
- </param>
- <param>
- <key>num_samps</key>
- <value>100000</value>
- </param>
- <param>
- <key>repeat</key>
- <value>True</value>
- </param>
- <param>
- <key>affinity</key>
- <value></value>
- </param>
- <param>
- <key>minoutbuf</key>
- <value>0</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(30, 324)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>blocks_pack_k_bits_bb</key>
- <param>
- <key>id</key>
- <value>blocks_pack_k_bits_bb_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>k</key>
- <value>8</value>
- </param>
- <param>
- <key>affinity</key>
- <value></value>
- </param>
- <param>
- <key>minoutbuf</key>
- <value>0</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(55, 274)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>blocks_stream_mux</key>
- <param>
- <key>id</key>
- <value>blocks_stream_mux_0_0_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>type</key>
- <value>byte</value>
- </param>
- <param>
- <key>lengths</key>
- <value>len(preamble)/8,payload_size</value>
- </param>
- <param>
- <key>num_inputs</key>
- <value>2</value>
- </param>
- <param>
- <key>vlen</key>
- <value>1</value>
- </param>
- <param>
- <key>affinity</key>
- <value></value>
- </param>
- <param>
- <key>minoutbuf</key>
- <value>0</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(252, 278)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>digital_constellation_modulator</key>
- <param>
- <key>id</key>
- <value>digital_constellation_modulator_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>constellation</key>
- <value>constel</value>
- </param>
- <param>
- <key>differential</key>
- <value>False</value>
- </param>
- <param>
- <key>samples_per_symbol</key>
- <value>sps</value>
- </param>
- <param>
- <key>excess_bw</key>
- <value>eb</value>
- </param>
- <param>
- <key>verbose</key>
- <value>False</value>
- </param>
- <param>
- <key>log</key>
- <value>False</value>
- </param>
- <param>
- <key>affinity</key>
- <value></value>
- </param>
- <param>
- <key>minoutbuf</key>
- <value>0</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(289, 155)</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_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>affinity</key>
- <value></value>
- </param>
- <param>
- <key>minoutbuf</key>
- <value>0</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(260, 362)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>blocks_stream_mux</key>
- <param>
- <key>id</key>
- <value>blocks_stream_mux_0_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>type</key>
- <value>complex</value>
- </param>
- <param>
- <key>lengths</key>
- <value>(len(preamble)+8*payload_size)*sps, gap</value>
- </param>
- <param>
- <key>num_inputs</key>
- <value>2</value>
- </param>
- <param>
- <key>vlen</key>
- <value>1</value>
- </param>
- <param>
- <key>affinity</key>
- <value></value>
- </param>
- <param>
- <key>minoutbuf</key>
- <value>0</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(539, 281)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>blocks_multiply_const_vxx</key>
- <param>
- <key>id</key>
- <value>blocks_multiply_const_vxx_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>type</key>
- <value>complex</value>
- </param>
- <param>
- <key>const</key>
- <value>digital_gain</value>
- </param>
- <param>
- <key>vlen</key>
- <value>1</value>
- </param>
- <param>
- <key>affinity</key>
- <value></value>
- </param>
- <param>
- <key>minoutbuf</key>
- <value>0</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(727, 294)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>uhd_usrp_sink</key>
- <param>
- <key>id</key>
- <value>uhd_usrp_sink_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>addr</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>freq+fine_freq</value>
- </param>
- <param>
- <key>gain0</key>
- <value>gain</value>
- </param>
- <param>
- <key>ant0</key>
- <value>TX/RX</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>affinity</key>
- <value></value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(911, 262)</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>0</value>
- </param>
- <param>
- <key>bw</key>
- <value>samp_rate</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>0,0,1,2</value>
- </param>
- <param>
- <key>affinity</key>
- <value></value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(912, 375)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>variable_constellation</key>
- <param>
- <key>id</key>
- <value>constel</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>value</key>
- <value>"ok"</value>
- </param>
- <param>
- <key>sym_map</key>
- <value>[0,1]</value>
- </param>
- <param>
- <key>const_points</key>
- <value>[1,- 1]</value>
- </param>
- <param>
- <key>rot_sym</key>
- <value>2</value>
- </param>
- <param>
- <key>dims</key>
- <value>1</value>
- </param>
- <param>
- <key>precision</key>
- <value>8</value>
- </param>
- <param>
- <key>soft_dec_lut</key>
- <value>None</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(485, 30)</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>Tx Gain</value>
- </param>
- <param>
- <key>value</key>
- <value>12.5</value>
- </param>
- <param>
- <key>start</key>
- <value>0</value>
- </param>
- <param>
- <key>stop</key>
- <value>31.5</value>
- </param>
- <param>
- <key>step</key>
- <value>0.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>2,0,1,1</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(651, 15)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>variable_qtgui_range</key>
- <param>
- <key>id</key>
- <value>digital_gain</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>label</key>
- <value>Digital Gain</value>
- </param>
- <param>
- <key>value</key>
- <value>45</value>
- </param>
- <param>
- <key>start</key>
- <value>0</value>
- </param>
- <param>
- <key>stop</key>
- <value>200</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>2,1,1,1</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(778, 16)</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>Tx Frequency</value>
- </param>
- <param>
- <key>value</key>
- <value>450e6</value>
- </param>
- <param>
- <key>start</key>
- <value>400e6</value>
- </param>
- <param>
- <key>stop</key>
- <value>500e6</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>3,0,1,1</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(899, 16)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>variable_qtgui_range</key>
- <param>
- <key>id</key>
- <value>fine_freq</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>label</key>
- <value>Fine Frequency</value>
- </param>
- <param>
- <key>value</key>
- <value>0</value>
- </param>
- <param>
- <key>start</key>
- <value>-10e3</value>
- </param>
- <param>
- <key>stop</key>
- <value>10e3</value>
- </param>
- <param>
- <key>step</key>
- <value>10</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>3,1,1,1</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(1031, 17)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>options</key>
- <param>
- <key>id</key>
- <value>test_corr_and_sync_tx</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>2000,2000</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>
- <connection>
- <source_block_id>blocks_vector_source_x_0_0</source_block_id>
- <sink_block_id>blocks_pack_k_bits_bb_0</sink_block_id>
- <source_key>0</source_key>
- <sink_key>0</sink_key>
- </connection>
- <connection>
- <source_block_id>blocks_stream_mux_0_0_0</source_block_id>
- <sink_block_id>digital_constellation_modulator_0</sink_block_id>
- <source_key>0</source_key>
- <sink_key>0</sink_key>
- </connection>
- <connection>
- <source_block_id>digital_constellation_modulator_0</source_block_id>
- <sink_block_id>blocks_stream_mux_0_0</sink_block_id>
- <source_key>0</source_key>
- <sink_key>0</sink_key>
- </connection>
- <connection>
- <source_block_id>blocks_pack_k_bits_bb_0</source_block_id>
- <sink_block_id>blocks_stream_mux_0_0_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>blocks_stream_mux_0_0_0</sink_block_id>
- <source_key>0</source_key>
- <sink_key>1</sink_key>
- </connection>
- <connection>
- <source_block_id>blocks_null_source_0_0</source_block_id>
- <sink_block_id>blocks_stream_mux_0_0</sink_block_id>
- <source_key>0</source_key>
- <sink_key>1</sink_key>
- </connection>
- <connection>
- <source_block_id>blocks_stream_mux_0_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>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>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-digital/grc/digital_block_tree.xml b/gr-digital/grc/digital_block_tree.xml
index 5e6e742868..9443525f03 100644
--- a/gr-digital/grc/digital_block_tree.xml
+++ b/gr-digital/grc/digital_block_tree.xml
@@ -126,7 +126,6 @@
<block>digital_pfb_clock_sync_xxx</block>
<block>digital_pn_correlator_cc</block>
<block>digital_corr_est_cc</block>
- <block>digital_correlate_and_sync_cc</block>
</cat>
<cat>
<name>Waveform Generators</name>
diff --git a/gr-digital/grc/digital_correlate_and_sync_cc.xml b/gr-digital/grc/digital_correlate_and_sync_cc.xml
deleted file mode 100644
index e684965c5d..0000000000
--- a/gr-digital/grc/digital_correlate_and_sync_cc.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0"?>
-<block>
- <name>Correlate and Sync</name>
- <key>digital_correlate_and_sync_cc</key>
- <import>from gnuradio import digital</import>
- <make>digital.correlate_and_sync_cc($symbols, $filter, $sps)</make>
- <param>
- <name>Symbols</name>
- <key>symbols</key>
- <value>[1,1,-1,-1,1,1,-1,-1,1,1,-1,-1,1,-1,1,-1]</value>
- <type>complex_vector</type>
- </param>
- <param>
- <name>Filter</name>
- <key>filter</key>
- <type>complex_vector</type>
- </param>
- <param>
- <name>Samples per Symbol</name>
- <key>sps</key>
- <value>4</value>
- <type>int</type>
- </param>
- <sink>
- <name>in</name>
- <type>complex</type>
- </sink>
- <source>
- <name>out</name>
- <type>complex</type>
- </source>
- <source>
- <name>corr</name>
- <type>complex</type>
- </source>
-</block>
diff --git a/gr-digital/include/gnuradio/digital/CMakeLists.txt b/gr-digital/include/gnuradio/digital/CMakeLists.txt
index 4756d281f4..64da41f71a 100644
--- a/gr-digital/include/gnuradio/digital/CMakeLists.txt
+++ b/gr-digital/include/gnuradio/digital/CMakeLists.txt
@@ -48,7 +48,6 @@ install(FILES
correlate_access_code_tag_bb.h
correlate_access_code_bb_ts.h
correlate_access_code_ff_ts.h
- correlate_and_sync_cc.h
costas_loop_cc.h
cpmmod_bc.h
crc32.h
diff --git a/gr-digital/include/gnuradio/digital/correlate_and_sync_cc.h b/gr-digital/include/gnuradio/digital/correlate_and_sync_cc.h
deleted file mode 100644
index 704b86662a..0000000000
--- a/gr-digital/include/gnuradio/digital/correlate_and_sync_cc.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/* -*- c++ -*- */
-/*
- * Copyright 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_DIGITAL_CORRELATE_AND_SYNC_CC_H
-#define INCLUDED_DIGITAL_CORRELATE_AND_SYNC_CC_H
-
-#include <gnuradio/digital/api.h>
-#include <gnuradio/sync_block.h>
-
-namespace gr {
- namespace digital {
-
- /*!
- * \brief Correlate to a preamble and send time/phase sync info
- * \ingroup synchronizers_blk
- *
- * \details
- * Input:
- * \li Stream of complex samples.
- *
- * Output:
- * \li Output stream that just passes the input complex samples
- * \li tag 'phase_est': estimate of phase offset
- * \li tag 'timing_est': estimate of symbol timing offset
- * \li tag 'corr_est': the correlation value of the estimates
- *
- * This block is designed to search for a preamble by correlation
- * and uses the results of the correlation to get a time and phase
- * offset estimate. These estimates are passed downstream as
- * stream tags for use by follow-on synchronization blocks.
- *
- * The preamble is provided as a set of symbols along with a
- * baseband matched filter which we use to create the filtered and
- * upsampled symbol that we will receive over-the-air.
- *
- * The phase_est tag is used to adjust the phase estimation of any
- * downstream synchronization blocks and is currently used by the
- * gr::digital::costas_loop_cc block.
- *
- * The time_est tag is used to adjust the sampling timing
- * estimation of any downstream synchronization blocks and is
- * currently used by the gr::digital::pfb_clock_sync_ccf block.
- */
- class DIGITAL_API correlate_and_sync_cc : virtual public sync_block
- {
- public:
- typedef boost::shared_ptr<correlate_and_sync_cc> sptr;
-
- /*!
- * Make a block that correlates against the \p symbols vector
- * and outputs a phase and symbol timing estimate.
- *
- * \param symbols Set of symbols to correlate against (e.g., a
- * preamble).
- * \param filter Baseband matched filter (e.g., RRC)
- * \param sps Samples per symbol
- * \param nfilts Number of filters in the internal PFB
- */
- static sptr make(const std::vector<gr_complex> &symbols,
- const std::vector<float> &filter,
- unsigned int sps, unsigned int nfilts=32);
-
- virtual std::vector<gr_complex> symbols() const = 0;
- virtual void set_symbols(const std::vector<gr_complex> &symbols) = 0;
- };
-
- } // namespace digital
-} // namespace gr
-
-#endif /* INCLUDED_DIGITAL_CORRELATE_AND_SYNC_CC_H */
diff --git a/gr-digital/include/gnuradio/digital/glfsr.h b/gr-digital/include/gnuradio/digital/glfsr.h
index 445904969e..449eeaa618 100644
--- a/gr-digital/include/gnuradio/digital/glfsr.h
+++ b/gr-digital/include/gnuradio/digital/glfsr.h
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2007,2012 Free Software Foundation, Inc.
+ * Copyright 2007,2012,2016 Free Software Foundation, Inc.
*
* This file is part of GNU Radio
*
@@ -24,6 +24,7 @@
#define INCLUDED_DIGITAL_GLFSR_H
#include <gnuradio/digital/api.h>
+#include <boost/cstdint.hpp>
namespace gr {
namespace digital {
@@ -38,25 +39,18 @@ namespace gr {
class DIGITAL_API glfsr
{
private:
- int d_shift_register;
- int d_mask;
+ uint32_t d_shift_register;
+ uint32_t d_mask;
public:
- glfsr(int mask, int seed) { d_shift_register = seed; d_mask = mask; }
+ glfsr(uint32_t mask, uint32_t seed) { d_shift_register = seed; d_mask = mask; }
~glfsr();
- static int glfsr_mask(int degree);
+ static uint32_t glfsr_mask(unsigned int degree);
- unsigned char next_bit()
- {
- unsigned char bit = d_shift_register & 1;
- d_shift_register >>= 1;
- if(bit)
- d_shift_register ^= d_mask;
- return bit;
- }
+ uint8_t next_bit();
- int mask() const { return d_mask; }
+ uint32_t mask() const { return d_mask; }
};
} /* namespace digital */
diff --git a/gr-digital/include/gnuradio/digital/glfsr_source_b.h b/gr-digital/include/gnuradio/digital/glfsr_source_b.h
index 3491d73315..46ea38ebb5 100644
--- a/gr-digital/include/gnuradio/digital/glfsr_source_b.h
+++ b/gr-digital/include/gnuradio/digital/glfsr_source_b.h
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2007,2012 Free Software Foundation, Inc.
+ * Copyright 2007,2012,2016 Free Software Foundation, Inc.
*
* This file is part of GNU Radio
*
@@ -50,11 +50,11 @@ namespace gr {
* register to feed back.
* \param seed Initial setting for values in shift register.
*/
- static sptr make(int degree, bool repeat=true,
- int mask=0, int seed=1);
+ static sptr make(unsigned int degree, bool repeat=true,
+ uint32_t mask=0x0, uint32_t seed=0x1);
- virtual unsigned int period() const = 0;
- virtual int mask() const = 0;
+ virtual uint32_t period() const = 0;
+ virtual uint32_t mask() const = 0;
};
} /* namespace digital */
diff --git a/gr-digital/include/gnuradio/digital/glfsr_source_f.h b/gr-digital/include/gnuradio/digital/glfsr_source_f.h
index 24c0713792..b86f83cd93 100644
--- a/gr-digital/include/gnuradio/digital/glfsr_source_f.h
+++ b/gr-digital/include/gnuradio/digital/glfsr_source_f.h
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2007,2012 Free Software Foundation, Inc.
+ * Copyright 2007,2012,2016 Free Software Foundation, Inc.
*
* This file is part of GNU Radio
*
@@ -50,11 +50,11 @@ namespace gr {
* register to feed back.
* \param seed Initial setting for values in shift register.
*/
- static sptr make(int degree, bool repeat=true,
- int mask=0, int seed=1);
+ static sptr make(unsigned int degree, bool repeat=true,
+ uint32_t mask=0, uint32_t seed=1);
- virtual unsigned int period() const = 0;
- virtual int mask() const = 0;
+ virtual uint32_t period() const = 0;
+ virtual uint32_t mask() const = 0;
};
} /* namespace digital */
diff --git a/gr-digital/lib/CMakeLists.txt b/gr-digital/lib/CMakeLists.txt
index 05160be9a5..b07bcc9d87 100644
--- a/gr-digital/lib/CMakeLists.txt
+++ b/gr-digital/lib/CMakeLists.txt
@@ -66,7 +66,6 @@ list(APPEND digital_sources
correlate_access_code_tag_bb_impl.cc
correlate_access_code_bb_ts_impl.cc
correlate_access_code_ff_ts_impl.cc
- correlate_and_sync_cc_impl.cc
costas_loop_cc_impl.cc
cpmmod_bc_impl.cc
crc32.cc
diff --git a/gr-digital/lib/clock_recovery_mm_cc_impl.cc b/gr-digital/lib/clock_recovery_mm_cc_impl.cc
index f51fba4803..c6a1a66c22 100644
--- a/gr-digital/lib/clock_recovery_mm_cc_impl.cc
+++ b/gr-digital/lib/clock_recovery_mm_cc_impl.cc
@@ -67,6 +67,7 @@ namespace gr {
set_omega(omega); // also sets min and max omega
set_relative_rate(1.0 / omega);
set_history(3); // ensure 2 extra input samples are available
+ enable_update_rate(true); // fixes tag propagation through variable rate block
}
clock_recovery_mm_cc_impl::~clock_recovery_mm_cc_impl()
diff --git a/gr-digital/lib/clock_recovery_mm_ff_impl.cc b/gr-digital/lib/clock_recovery_mm_ff_impl.cc
index 17377a22bb..57578bca28 100644
--- a/gr-digital/lib/clock_recovery_mm_ff_impl.cc
+++ b/gr-digital/lib/clock_recovery_mm_ff_impl.cc
@@ -60,6 +60,7 @@ namespace gr {
set_omega(omega); // also sets min and max omega
set_relative_rate (1.0 / omega);
+ enable_update_rate(true); // fixes tag propagation through variable rate block
}
clock_recovery_mm_ff_impl::~clock_recovery_mm_ff_impl()
diff --git a/gr-digital/lib/correlate_and_sync_cc_impl.cc b/gr-digital/lib/correlate_and_sync_cc_impl.cc
deleted file mode 100644
index b8c8e8669d..0000000000
--- a/gr-digital/lib/correlate_and_sync_cc_impl.cc
+++ /dev/null
@@ -1,172 +0,0 @@
-/* -*- c++ -*- */
-/*
- * Copyright 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.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <gnuradio/io_signature.h>
-#include <gnuradio/math.h>
-#include "correlate_and_sync_cc_impl.h"
-#include <volk/volk.h>
-#include <boost/format.hpp>
-#include <boost/math/special_functions/round.hpp>
-#include <gnuradio/filter/pfb_arb_resampler.h>
-#include <gnuradio/filter/firdes.h>
-
-namespace gr {
- namespace digital {
-
- correlate_and_sync_cc::sptr
- correlate_and_sync_cc::make(const std::vector<gr_complex> &symbols,
- const std::vector<float> &filter,
- unsigned int sps, unsigned int nfilts)
- {
- return gnuradio::get_initial_sptr
- (new correlate_and_sync_cc_impl(symbols, filter, sps, nfilts));
- }
-
- correlate_and_sync_cc_impl::correlate_and_sync_cc_impl(const std::vector<gr_complex> &symbols,
- const std::vector<float> &filter,
- unsigned int sps, unsigned int nfilts)
- : sync_block("correlate_and_sync_cc",
- io_signature::make(1, 1, sizeof(gr_complex)),
- io_signature::make(2, 2, sizeof(gr_complex)))
- {
- d_last_index = 0;
- d_sps = sps;
-
- // We want to add padding to the beginning of the symbols so we
- // can do the convolution of the symbols with the pulse shape.
- std::vector<gr_complex> padding((1+filter.size()/nfilts)/2, 0);
- std::vector<gr_complex> padded_symbols = symbols;
- padded_symbols.insert(padded_symbols.begin(), padding.begin(), padding.end());
-
- d_symbols.resize(d_sps*symbols.size(), 0);
- filter::kernel::pfb_arb_resampler_ccf resamp(d_sps, filter, nfilts);
- int nread;
- resamp.filter(&d_symbols[0], &padded_symbols[0], symbols.size(), nread);
- std::reverse(d_symbols.begin(), d_symbols.end());
-
- float corr = 0;
- for(size_t i=0; i < d_symbols.size(); i++)
- corr += abs(d_symbols[i]*conj(d_symbols[i]));
- d_thresh = 0.9*corr*corr;
-
- d_center_first_symbol = (padding.size() + 0.5) * d_sps;
-
- d_filter = new kernel::fft_filter_ccc(1, d_symbols);
-
- set_history(d_filter->ntaps());
-
- const int alignment_multiple =
- volk_get_alignment() / sizeof(gr_complex);
- set_alignment(std::max(1,alignment_multiple));
- }
-
- correlate_and_sync_cc_impl::~correlate_and_sync_cc_impl()
- {
- delete d_filter;
- }
-
- std::vector<gr_complex>
- correlate_and_sync_cc_impl::symbols() const
- {
- return d_symbols;
- }
-
- void
- correlate_and_sync_cc_impl::set_symbols(const std::vector<gr_complex> &symbols)
- {
- gr::thread::scoped_lock lock(d_setlock);
- d_symbols = symbols;
- d_filter->set_taps(symbols);
- set_history(d_filter->ntaps());
- }
-
- int
- correlate_and_sync_cc_impl::work(int noutput_items,
- gr_vector_const_void_star &input_items,
- gr_vector_void_star &output_items)
- {
- gr::thread::scoped_lock lock(d_setlock);
-
- const gr_complex *in = (gr_complex *)input_items[0];
- gr_complex *out = (gr_complex*)output_items[0];
- gr_complex *corr = (gr_complex*)output_items[1];
-
- memcpy(out, in, sizeof(gr_complex)*noutput_items);
-
- // Calculate the correlation with the known symbol
- d_filter->filter(noutput_items, in, corr);
-
- // Find the magnitude squared of the correlation
- std::vector<float> corr_mag(noutput_items+1);
- volk_32fc_magnitude_squared_32f(&corr_mag[0], corr, noutput_items);
-
- // Avoid buffer overflow from nested while, putting a stopper at the end
- corr_mag[noutput_items]=0;
- int i = d_sps;
- while(i < (noutput_items-1)) {
- if((corr_mag[i] - corr_mag[i-d_sps]) > d_thresh) {
- while(corr_mag[i] < corr_mag[i+1])
- i++;
-
- double nom = 0, den = 0;
- for(int s = 0; s < 3; s++) {
- nom += (s+1)*corr_mag[i+s-1];
- den += corr_mag[i+s-1];
- }
- double center = nom / den;
- center = (center - 2.0);
-
- // Adjust the results of the fft filter by moving back the
- // length of the filter offset by the number of sps.
- int index = i - d_symbols.size() + d_sps + 1;
-
- // Calculate the phase offset of the incoming signal; always
- // adjust it based on the proper rotation of the expected
- // known word; rotate by pi is the real part is < 0 since
- // the atan doesn't understand the ambiguity.
- float phase = fast_atan2f(corr[index].imag(), corr[index].real());
- if(corr[index].real() < 0.0)
- phase += M_PI;
-
- add_item_tag(0, nitems_written(0) + index, pmt::intern("phase_est"),
- pmt::from_double(phase), pmt::intern(alias()));
- add_item_tag(0, nitems_written(0) + index, pmt::intern("time_est"),
- pmt::from_double(center), pmt::intern(alias()));
- add_item_tag(0, nitems_written(0) + index, pmt::intern("corr_est"),
- pmt::from_double(corr_mag[index]), pmt::intern(alias()));
-
- i += d_sps;
- }
- else
- i++;
- }
-
- return noutput_items;
- }
-
- } /* namespace digital */
-} /* namespace gr */
-
diff --git a/gr-digital/lib/correlate_and_sync_cc_impl.h b/gr-digital/lib/correlate_and_sync_cc_impl.h
deleted file mode 100644
index d95ec517f8..0000000000
--- a/gr-digital/lib/correlate_and_sync_cc_impl.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/* -*- c++ -*- */
-/*
- * Copyright 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_DIGITAL_CORRELATE_AND_SYNC_CC_IMPL_H
-#define INCLUDED_DIGITAL_CORRELATE_AND_SYNC_CC_IMPL_H
-
-#include <gnuradio/digital/correlate_and_sync_cc.h>
-#include <gnuradio/filter/fft_filter.h>
-
-using namespace gr::filter;
-
-namespace gr {
- namespace digital {
-
- class correlate_and_sync_cc_impl : public correlate_and_sync_cc
- {
- private:
- std::vector<gr_complex> d_symbols;
- unsigned int d_sps;
- float d_center_first_symbol;
- float d_thresh;
- kernel::fft_filter_ccc *d_filter;
-
- int d_last_index;
-
- public:
- correlate_and_sync_cc_impl(const std::vector<gr_complex> &symbols,
- const std::vector<float> &filter,
- unsigned int sps, unsigned int nfilts=32);
- ~correlate_and_sync_cc_impl();
-
- std::vector<gr_complex> symbols() const;
- void set_symbols(const std::vector<gr_complex> &symbols);
-
- int work(int noutput_items,
- gr_vector_const_void_star &input_items,
- gr_vector_void_star &output_items);
- };
-
- } // namespace digital
-} // namespace gr
-
-#endif /* INCLUDED_DIGITAL_CORRELATE_AND_SYNC_CC_IMPL_H */
diff --git a/gr-digital/lib/glfsr.cc b/gr-digital/lib/glfsr.cc
index fa6c765570..5593bf8615 100644
--- a/gr-digital/lib/glfsr.cc
+++ b/gr-digital/lib/glfsr.cc
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2007,2012 Free Software Foundation, Inc.
+ * Copyright 2007,2012,2016 Free Software Foundation, Inc.
*
* This file is part of GNU Radio
*
@@ -26,7 +26,7 @@
namespace gr {
namespace digital {
- static int s_polynomial_masks[] = {
+ static uint32_t s_polynomial_masks[] = {
0x00000000,
0x00000001, // x^1 + 1
0x00000003, // x^2 + x^1 + 1
@@ -59,19 +59,28 @@ namespace gr {
0x10000002, // x^29 + x^2 + 1
0x20000029, // x^30 + x^4 + x^1 + 1
0x40000004, // x^31 + x^3 + 1
- (int) 0x80000057 // x^32 + x^7 + x^5 + x^3 + x^2 + x^1 + 1
+ 0x80000057 // x^32 + x^7 + x^5 + x^3 + x^2 + x^1 + 1
};
glfsr::~glfsr()
{
}
- int glfsr::glfsr_mask(int degree)
+ uint32_t glfsr::glfsr_mask(unsigned int degree)
{
if(degree < 1 || degree > 32)
- throw std::runtime_error("glfsr::glfsr_mask(): degree must be between 1 and 32 inclusive");
+ throw std::runtime_error("glfsr::glfsr_mask(): degree must be between 1 and 32 inclusive");
return s_polynomial_masks[degree];
}
+ uint8_t glfsr::next_bit()
+ {
+ unsigned char bit = d_shift_register & 0x1;
+ d_shift_register >>= 1;
+ if(bit)
+ d_shift_register ^= d_mask;
+ return bit;
+ }
+
} /* namespace digital */
} /* namespace gr */
diff --git a/gr-digital/lib/glfsr_source_b_impl.cc b/gr-digital/lib/glfsr_source_b_impl.cc
index 260bd45c24..6b1a14900f 100644
--- a/gr-digital/lib/glfsr_source_b_impl.cc
+++ b/gr-digital/lib/glfsr_source_b_impl.cc
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2007,2010,2012 Free Software Foundation, Inc.
+ * Copyright 2007,2010,2012,2016 Free Software Foundation, Inc.
*
* This file is part of GNU Radio
*
@@ -32,25 +32,25 @@ namespace gr {
namespace digital {
glfsr_source_b::sptr
- glfsr_source_b::make(int degree, bool repeat, int mask, int seed)
+ glfsr_source_b::make(unsigned int degree, bool repeat, uint32_t mask, uint32_t seed)
{
return gnuradio::get_initial_sptr
- (new glfsr_source_b_impl(degree, repeat, mask, seed));
+ (new glfsr_source_b_impl(degree, repeat, mask, seed));
}
- glfsr_source_b_impl::glfsr_source_b_impl(int degree, bool repeat,
- int mask, int seed)
+ glfsr_source_b_impl::glfsr_source_b_impl(unsigned int degree, bool repeat,
+ uint32_t mask, uint32_t seed)
: sync_block("glfsr_source_b",
- io_signature::make(0, 0, 0),
- io_signature::make(1, 1, sizeof(unsigned char))),
- d_repeat(repeat), d_index(0)
+ io_signature::make(0, 0, 0),
+ io_signature::make(1, 1, sizeof(unsigned char))),
+ d_repeat(repeat), d_index(0),
+ d_length( ( ((uint32_t)1) << degree) - 1)
{
if(degree < 1 || degree > 32)
- throw std::runtime_error("glfsr_source_b_impl: degree must be between 1 and 32 inclusive");
- d_length = (unsigned int)((1ULL << degree)-1);
+ throw std::runtime_error("glfsr_source_b_impl: degree must be between 1 and 32 inclusive");
if(mask == 0)
- mask = glfsr::glfsr_mask(degree);
+ mask = glfsr::glfsr_mask(degree);
d_glfsr = new glfsr(mask, seed);
}
@@ -59,7 +59,7 @@ namespace gr {
delete d_glfsr;
}
- int
+ uint32_t
glfsr_source_b_impl::mask() const
{
return d_glfsr->mask();
@@ -67,19 +67,19 @@ namespace gr {
int
glfsr_source_b_impl::work(int noutput_items,
- gr_vector_const_void_star &input_items,
- gr_vector_void_star &output_items)
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items)
{
char *out = (char*)output_items[0];
if((d_index > d_length) && d_repeat == false)
- return -1; /* once through the sequence */
+ return WORK_DONE; /* once through the sequence */
int i;
for(i = 0; i < noutput_items; i++) {
- out[i] = d_glfsr->next_bit();
- d_index++;
- if(d_index > d_length && d_repeat == false)
- break;
+ out[i] = d_glfsr->next_bit();
+ d_index++;
+ if(d_index > d_length && d_repeat == false)
+ break;
}
return i;
diff --git a/gr-digital/lib/glfsr_source_b_impl.h b/gr-digital/lib/glfsr_source_b_impl.h
index a063eb7c0a..ff2b0586c2 100644
--- a/gr-digital/lib/glfsr_source_b_impl.h
+++ b/gr-digital/lib/glfsr_source_b_impl.h
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2007,2012 Free Software Foundation, Inc.
+ * Copyright 2007,2012,2016 Free Software Foundation, Inc.
*
* This file is part of GNU Radio
*
@@ -35,20 +35,20 @@ namespace gr {
glfsr *d_glfsr;
bool d_repeat;
- unsigned int d_index;
- unsigned int d_length;
+ uint32_t d_index;
+ uint32_t d_length;
public:
- glfsr_source_b_impl(int degree, bool repeat=true,
- int mask=0, int seed=1);
+ glfsr_source_b_impl(unsigned int degree, bool repeat=true,
+ uint32_t mask=0, uint32_t seed=0x1);
~glfsr_source_b_impl();
int work(int noutput_items,
gr_vector_const_void_star &input_items,
gr_vector_void_star &output_items);
- unsigned int period() const { return d_length; }
- int mask() const;
+ uint32_t period() const { return d_length; }
+ uint32_t mask() const;
};
} /* namespace digital */
diff --git a/gr-digital/lib/glfsr_source_f_impl.cc b/gr-digital/lib/glfsr_source_f_impl.cc
index cb637df4ea..0dc24cb51a 100644
--- a/gr-digital/lib/glfsr_source_f_impl.cc
+++ b/gr-digital/lib/glfsr_source_f_impl.cc
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2007,2010,2012 Free Software Foundation, Inc.
+ * Copyright 2007,2010,2012,2016 Free Software Foundation, Inc.
*
* This file is part of GNU Radio
*
@@ -33,25 +33,25 @@ namespace gr {
namespace digital {
glfsr_source_f::sptr
- glfsr_source_f::make(int degree, bool repeat, int mask, int seed)
+ glfsr_source_f::make(unsigned int degree, bool repeat, uint32_t mask, uint32_t seed)
{
return gnuradio::get_initial_sptr
- (new glfsr_source_f_impl(degree, repeat, mask, seed));
+ (new glfsr_source_f_impl(degree, repeat, mask, seed));
}
- glfsr_source_f_impl::glfsr_source_f_impl(int degree, bool repeat,
- int mask, int seed)
+ glfsr_source_f_impl::glfsr_source_f_impl(unsigned int degree, bool repeat,
+ uint32_t mask, uint32_t seed)
: sync_block("glfsr_source_f",
- io_signature::make(0, 0, 0),
- io_signature::make(1, 1, sizeof(float))),
- d_repeat(repeat), d_index(0)
+ io_signature::make(0, 0, 0),
+ io_signature::make(1, 1, sizeof(float))),
+ d_repeat(repeat), d_index(0),
+ d_length( ( ((uint32_t)1) << degree) - 1)
{
if(degree < 1 || degree > 32)
- throw std::runtime_error("glfsr_source_f_impl: degree must be between 1 and 32 inclusive");
- d_length = (unsigned int)((1ULL << degree)-1);
+ throw std::runtime_error("glfsr_source_f_impl: degree must be between 1 and 32 inclusive");
if(mask == 0)
- mask = glfsr::glfsr_mask(degree);
+ mask = glfsr::glfsr_mask(degree);
d_glfsr = new glfsr(mask, seed);
}
@@ -60,7 +60,7 @@ namespace gr {
delete d_glfsr;
}
- int
+ uint32_t
glfsr_source_f_impl::mask() const
{
return d_glfsr->mask();
@@ -68,19 +68,19 @@ namespace gr {
int
glfsr_source_f_impl::work(int noutput_items,
- gr_vector_const_void_star &input_items,
- gr_vector_void_star &output_items)
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items)
{
float *out = (float *) output_items[0];
if((d_index > d_length) && d_repeat == false)
- return -1; /* once through the sequence */
+ return WORK_DONE; /* once through the sequence */
int i;
for(i = 0; i < noutput_items; i++) {
- out[i] = (float)d_glfsr->next_bit()*2.0-1.0;
- d_index++;
- if(d_index > d_length && d_repeat == false)
- break;
+ out[i] = (float)d_glfsr->next_bit()*2.0-1.0;
+ d_index++;
+ if(d_index > d_length && d_repeat == false)
+ break;
}
return i;
diff --git a/gr-digital/lib/glfsr_source_f_impl.h b/gr-digital/lib/glfsr_source_f_impl.h
index 194e2ff3b9..b6ea966336 100644
--- a/gr-digital/lib/glfsr_source_f_impl.h
+++ b/gr-digital/lib/glfsr_source_f_impl.h
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2007,2012 Free Software Foundation, Inc.
+ * Copyright 2007,2012,2016 Free Software Foundation, Inc.
*
* This file is part of GNU Radio
*
@@ -35,20 +35,20 @@ namespace gr {
glfsr *d_glfsr;
bool d_repeat;
- unsigned int d_index;
- unsigned int d_length;
+ uint32_t d_index;
+ uint32_t d_length;
public:
- glfsr_source_f_impl(int degree, bool repeat=true,
- int mask=0, int seed=1);
+ glfsr_source_f_impl(unsigned int degree, bool repeat=true,
+ uint32_t mask=0, uint32_t seed=0x1);
~glfsr_source_f_impl();
int work(int noutput_items,
- gr_vector_const_void_star &input_items,
- gr_vector_void_star &output_items);
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items);
- unsigned int period() const { return d_length; }
- int mask() const;
+ uint32_t period() const { return d_length; }
+ uint32_t mask() const;
};
} /* namespace digital */
diff --git a/gr-digital/lib/modulate_vector.cc b/gr-digital/lib/modulate_vector.cc
index 281e3435c5..c6ba0f61aa 100644
--- a/gr-digital/lib/modulate_vector.cc
+++ b/gr-digital/lib/modulate_vector.cc
@@ -23,8 +23,8 @@
/*
* Generate a modulated transmit vector corresponding to a particular
* data sequence, resampling rate, and shaping filter. The output is
-* suitable for use as a candidate filter for the correlate_and_sync
-* block, or just for prototyping.
+* suitable for use as a candidate filter for the corr_est block, or
+* just for prototyping.
*
* It accepts a sptr to a modulator block as an argument; given
* suitable data vectors and arguments you should be able to use any of
diff --git a/gr-digital/lib/pfb_clock_sync_fff_impl.cc b/gr-digital/lib/pfb_clock_sync_fff_impl.cc
index 09c72495a0..30ef526ad0 100644
--- a/gr-digital/lib/pfb_clock_sync_fff_impl.cc
+++ b/gr-digital/lib/pfb_clock_sync_fff_impl.cc
@@ -66,7 +66,7 @@ namespace gr {
d_osps(osps), d_error(0), d_out_idx(0)
{
if(taps.size() == 0)
- throw std::runtime_error("pfb_clock_sync_ccf: please specify a filter.\n");
+ throw std::runtime_error("pfb_clock_sync_fff: please specify a filter.\n");
// Let scheduler adjust our relative_rate.
enable_update_rate(true);
diff --git a/gr-digital/python/digital/qa_correlate_and_sync.py b/gr-digital/python/digital/qa_correlate_and_sync.py
deleted file mode 100644
index 3297368617..0000000000
--- a/gr-digital/python/digital/qa_correlate_and_sync.py
+++ /dev/null
@@ -1,104 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 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.
-#
-import math
-
-import pmt
-from gnuradio import gr, gr_unittest, digital, blocks, filter
-
-def make_parabolic_pulse_shape(sps, N=1, scale=1):
- # Make L taps on each side.
- L = int(float(N)/2 * sps)
- n_taps = 2 * L + 1
- taps = []
- for tap_i in xrange(n_taps):
- x = float(tap_i - L)/sps/N
- if abs(x) > 1:
- taps.append(0)
- else:
- taps.append(1-x*x)
- return [tap*scale for tap in taps]
-
-class test_correlate_and_sync(gr_unittest.TestCase):
-
- def test_001(self):
- # We're using a really simple preamble so that the correlation
- # is straight forward.
- preamble = [0, 0, 0, 1, 0, 0, 0]
- # Our pulse shape has this width (in units of symbols).
- pulse_width = 1.5
- # The number of filters to use for resampling.
- n_filters = 12
- sps = 3
- data = [0]*10 + preamble + [0]*40
- src = blocks.vector_source_c(data)
-
- # We want to generate taps with a sampling rate of sps=n_filters for resampling
- # purposes.
- pulse_shape = make_parabolic_pulse_shape(sps=n_filters, N=0.5, scale=35)
-
- # Create our resampling filter to generate the data for the correlator.
- shape = filter.pfb_arb_resampler_ccf(sps, pulse_shape, n_filters)
- # Generate the correlator block itself.
- correlator = digital.correlate_and_sync_cc(preamble, pulse_shape, sps, n_filters)
-
- # Connect it all up and go.
- snk = blocks.vector_sink_c()
- null = blocks.null_sink(gr.sizeof_gr_complex)
- tb = gr.top_block()
- tb.connect(src, shape, correlator, snk)
- tb.connect((correlator, 1), null)
- tb.run()
-
- # Look at the tags. Retrieve the timing offset.
- data = snk.data()
- offset = None
- timing_error = None
- for tag in snk.tags():
- key = pmt.symbol_to_string(tag.key)
- if key == "time_est":
- offset = tag.offset
- timing_error = pmt.to_double(tag.value)
- if offset is None:
- raise ValueError("No tags found.")
- # Detect where the middle of the preamble is.
- # Assume we have only one peak and that it is symmetric.
- sum_id = 0
- sum_d = 0
- for i, d in enumerate(data):
- sum_id += i*abs(d)
- sum_d += abs(d)
- data_i = sum_id/sum_d
- if offset is not None:
- diff = data_i-offset
- remainder = -(diff%sps)
- if remainder < -sps/2.0:
- remainder += sps
- tol = 0.2
- difference = timing_error - remainder
- difference = difference % sps
- if abs(difference) >= tol:
- print("Tag gives timing estimate of {0}. QA calculates it as {1}. Tolerance is {2}".format(timing_error, remainder, tol))
- self.assertTrue(abs(difference) < tol)
-
-
-if __name__ == '__main__':
- gr_unittest.run(test_correlate_and_sync, "test_correlate_and_sync.xml")
diff --git a/gr-digital/swig/digital_swig.i b/gr-digital/swig/digital_swig.i
index 8a38d65b82..6039554623 100644
--- a/gr-digital/swig/digital_swig.i
+++ b/gr-digital/swig/digital_swig.i
@@ -37,6 +37,7 @@
%include <gnuradio/blocks/control_loop.h>
%{
+#include "gnuradio/digital/glfsr.h"
#include "gnuradio/digital/additive_scrambler_bb.h"
#include "gnuradio/digital/binary_slicer_fb.h"
#include "gnuradio/digital/burst_shaper_cc.h"
@@ -59,7 +60,6 @@
#include "gnuradio/digital/correlate_access_code_tag_bb.h"
#include "gnuradio/digital/correlate_access_code_bb_ts.h"
#include "gnuradio/digital/correlate_access_code_ff_ts.h"
-#include "gnuradio/digital/correlate_and_sync_cc.h"
#include "gnuradio/digital/costas_loop_cc.h"
#include "gnuradio/digital/cpmmod_bc.h"
#include "gnuradio/digital/crc32.h"
@@ -126,6 +126,7 @@
#include "gnuradio/digital/header_payload_demux.h"
%}
+%include "gnuradio/digital/glfsr.h"
%include "gnuradio/digital/additive_scrambler_bb.h"
%include "gnuradio/digital/binary_slicer_fb.h"
%include "gnuradio/digital/burst_shaper_cc.h"
@@ -148,7 +149,6 @@
%include "gnuradio/digital/correlate_access_code_tag_bb.h"
%include "gnuradio/digital/correlate_access_code_bb_ts.h"
%include "gnuradio/digital/correlate_access_code_ff_ts.h"
-%include "gnuradio/digital/correlate_and_sync_cc.h"
%include "gnuradio/digital/costas_loop_cc.h"
%include "gnuradio/digital/cpmmod_bc.h"
%include "gnuradio/digital/crc32.h"
@@ -232,7 +232,6 @@ GR_SWIG_BLOCK_MAGIC2(digital, correlate_access_code_bb);
GR_SWIG_BLOCK_MAGIC2(digital, correlate_access_code_tag_bb);
GR_SWIG_BLOCK_MAGIC2(digital, correlate_access_code_bb_ts);
GR_SWIG_BLOCK_MAGIC2(digital, correlate_access_code_ff_ts);
-GR_SWIG_BLOCK_MAGIC2(digital, correlate_and_sync_cc);
GR_SWIG_BLOCK_MAGIC2(digital, costas_loop_cc);
GR_SWIG_BLOCK_MAGIC2(digital, crc32_bb);
GR_SWIG_BLOCK_MAGIC2(digital, crc32_async_bb);
diff --git a/gr-dtv/examples/README.dvbs b/gr-dtv/examples/README.dvbs
index d9097c4876..b9bab2999a 100644
--- a/gr-dtv/examples/README.dvbs
+++ b/gr-dtv/examples/README.dvbs
@@ -1,11 +1,3 @@
-Puncturing values for DVB-S code rates:
-
-1/2 code rate = Puncture Size = 2, Puncture Pattern = 0b11
-2/3 code rate = Puncture Size = 4, Puncture Pattern = 0b1101
-3/4 code rate = Puncture Size = 6, Puncture Pattern = 0b110110
-5/6 code rate = Puncture Size = 10, Puncture Pattern = 0b1101100110
-7/8 code rate = Puncture Size = 14, Puncture Pattern = 0b11010101100110
-
A test Transport Stream for the example flow graph
(8 Msyms/s and 7/8 code rate) is available here:
diff --git a/gr-dtv/examples/catv_tx_64qam.grc b/gr-dtv/examples/catv_tx_64qam.grc
index 964ef8470f..0a59580479 100644
--- a/gr-dtv/examples/catv_tx_64qam.grc
+++ b/gr-dtv/examples/catv_tx_64qam.grc
@@ -1,5 +1,5 @@
<?xml version='1.0' encoding='utf-8'?>
-<?grc format='1' created='3.7.10'?>
+<?grc format='1' created='3.7.11'?>
<flow_graph>
<timestamp>Thu Feb 20 21:02:41 2014</timestamp>
<block>
@@ -30,7 +30,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(8, 11)</value>
+ <value>(8, 12)</value>
</param>
<param>
<key>_rotation</key>
@@ -38,7 +38,7 @@
</param>
<param>
<key>generate_options</key>
- <value>wx_gui</value>
+ <value>qt_gui</value>
</param>
<param>
<key>hier_block_src_path</key>
@@ -93,7 +93,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(8, 299)</value>
+ <value>(8, 268)</value>
</param>
<param>
<key>_rotation</key>
@@ -120,7 +120,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(8, 371)</value>
+ <value>(8, 332)</value>
</param>
<param>
<key>_rotation</key>
@@ -147,7 +147,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(8, 443)</value>
+ <value>(8, 396)</value>
</param>
<param>
<key>_rotation</key>
@@ -174,7 +174,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(8, 155)</value>
+ <value>(8, 140)</value>
</param>
<param>
<key>_rotation</key>
@@ -186,7 +186,7 @@
</param>
<param>
<key>value</key>
- <value>429000000</value>
+ <value>429e6</value>
</param>
</block>
<block>
@@ -201,7 +201,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(8, 227)</value>
+ <value>(8, 204)</value>
</param>
<param>
<key>_rotation</key>
@@ -228,7 +228,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(8, 83)</value>
+ <value>(8, 76)</value>
</param>
<param>
<key>_rotation</key>
@@ -244,93 +244,156 @@
</param>
</block>
<block>
- <key>variable_slider</key>
+ <key>variable_qtgui_range</key>
<param>
<key>comment</key>
<value></value>
</param>
<param>
- <key>converver</key>
- <value>int_converter</value>
- </param>
- <param>
<key>value</key>
- <value>-8</value>
+ <value>50</value>
</param>
<param>
<key>_enabled</key>
- <value>1</value>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(312, 11)</value>
+ <value>(544, 16)</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value></value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
<param>
- <key>grid_pos</key>
+ <key>id</key>
+ <value>tx_gain</value>
+ </param>
+ <param>
+ <key>label</key>
<value></value>
</param>
<param>
+ <key>min_len</key>
+ <value>200</value>
+ </param>
+ <param>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
+ </param>
+ <param>
+ <key>start</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>step</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>stop</key>
+ <value>89</value>
+ </param>
+ <param>
+ <key>rangeType</key>
+ <value>float</value>
+ </param>
+ <param>
+ <key>widget</key>
+ <value>counter_slider</value>
+ </param>
+ </block>
+ <block>
+ <key>variable_qtgui_range</key>
+ <param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>-8</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(296, 16)</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ <param>
<key>id</key>
<value>vga1_gain</value>
</param>
<param>
<key>label</key>
- <value>VGA1 Gain</value>
+ <value></value>
</param>
<param>
- <key>max</key>
- <value>-4</value>
+ <key>min_len</key>
+ <value>200</value>
</param>
<param>
- <key>min</key>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
+ </param>
+ <param>
+ <key>start</key>
<value>-35</value>
</param>
<param>
- <key>notebook</key>
- <value></value>
+ <key>step</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>stop</key>
+ <value>-4</value>
</param>
<param>
- <key>num_steps</key>
- <value>31</value>
+ <key>rangeType</key>
+ <value>int</value>
</param>
<param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
+ <key>widget</key>
+ <value>counter_slider</value>
</param>
</block>
<block>
- <key>variable_slider</key>
+ <key>variable_qtgui_range</key>
<param>
<key>comment</key>
<value></value>
</param>
<param>
- <key>converver</key>
- <value>int_converter</value>
- </param>
- <param>
<key>value</key>
<value>10</value>
</param>
<param>
<key>_enabled</key>
- <value>1</value>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(448, 11)</value>
+ <value>(416, 16)</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>gui_hint</key>
+ <value></value>
</param>
<param>
- <key>grid_pos</key>
- <value></value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
<key>id</key>
@@ -338,27 +401,35 @@
</param>
<param>
<key>label</key>
- <value>VGA2 Gain</value>
+ <value></value>
</param>
<param>
- <key>max</key>
- <value>25</value>
+ <key>min_len</key>
+ <value>200</value>
</param>
<param>
- <key>min</key>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
+ </param>
+ <param>
+ <key>start</key>
<value>0</value>
</param>
<param>
- <key>notebook</key>
- <value></value>
+ <key>step</key>
+ <value>1</value>
</param>
<param>
- <key>num_steps</key>
+ <key>stop</key>
<value>25</value>
</param>
<param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
+ <key>rangeType</key>
+ <value>int</value>
+ </param>
+ <param>
+ <key>widget</key>
+ <value>counter_slider</value>
</param>
</block>
<block>
@@ -385,7 +456,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(128, 163)</value>
+ <value>(144, 148)</value>
</param>
<param>
<key>_rotation</key>
@@ -444,7 +515,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(624, 163)</value>
+ <value>(640, 148)</value>
</param>
<param>
<key>_rotation</key>
@@ -491,7 +562,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(536, 251)</value>
+ <value>(536, 244)</value>
</param>
<param>
<key>_rotation</key>
@@ -546,7 +617,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(584, 347)</value>
+ <value>(624, 340)</value>
</param>
<param>
<key>_rotation</key>
@@ -585,7 +656,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(424, 353)</value>
+ <value>(440, 344)</value>
</param>
<param>
<key>_rotation</key>
@@ -624,7 +695,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(848, 177)</value>
+ <value>(880, 160)</value>
</param>
<param>
<key>_rotation</key>
@@ -663,7 +734,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(360, 177)</value>
+ <value>(376, 160)</value>
</param>
<param>
<key>_rotation</key>
@@ -702,7 +773,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(800, 353)</value>
+ <value>(176, 504)</value>
</param>
<param>
<key>_rotation</key>
@@ -732,8 +803,16 @@
<value></value>
</param>
<param>
- <key>rate</key>
- <value>C_OTHER</value>
+ <key>rate1</key>
+ <value>C1_4</value>
+ </param>
+ <param>
+ <key>rate2</key>
+ <value>C1_5_MEDIUM</value>
+ </param>
+ <param>
+ <key>rate3</key>
+ <value>C1_4</value>
</param>
<param>
<key>comment</key>
@@ -757,7 +836,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(400, 499)</value>
+ <value>(376, 492)</value>
</param>
<param>
<key>_rotation</key>
@@ -804,7 +883,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(168, 339)</value>
+ <value>(176, 332)</value>
</param>
<param>
<key>_rotation</key>
@@ -851,7 +930,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(712, 507)</value>
+ <value>(664, 484)</value>
</param>
<param>
<key>_rotation</key>
@@ -1802,11 +1881,11 @@
</param>
<param>
<key>_enabled</key>
- <value>True</value>
+ <value>1</value>
</param>
<param>
<key>_coordinate</key>
- <value>(1056, 467)</value>
+ <value>(1072, 452)</value>
</param>
<param>
<key>_rotation</key>
@@ -1902,107 +1981,1126 @@
</param>
</block>
<block>
- <key>wxgui_fftsink2</key>
+ <key>qtgui_freq_sink_x</key>
<param>
- <key>avg_alpha</key>
- <value>0.1333</value>
+ <key>autoscale</key>
+ <value>False</value>
</param>
<param>
<key>average</key>
+ <value>0.2</value>
+ </param>
+ <param>
+ <key>axislabels</key>
<value>True</value>
</param>
<param>
- <key>baseband_freq</key>
- <value>center_freq</value>
+ <key>bw</key>
+ <value>samp_rate</value>
</param>
<param>
<key>alias</key>
<value></value>
</param>
<param>
+ <key>fc</key>
+ <value>center_freq</value>
+ </param>
+ <param>
<key>comment</key>
<value></value>
</param>
<param>
+ <key>ctrlpanel</key>
+ <value>False</value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
<param>
<key>_enabled</key>
- <value>1</value>
+ <value>True</value>
</param>
<param>
- <key>fft_size</key>
+ <key>fftsize</key>
<value>1024</value>
</param>
<param>
- <key>freqvar</key>
- <value>None</value>
+ <key>_coordinate</key>
+ <value>(880, 284)</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(1056, 203)</value>
+ <key>gui_hint</key>
+ <value></value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
<param>
- <key>grid_pos</key>
- <value></value>
+ <key>grid</key>
+ <value>True</value>
</param>
<param>
<key>id</key>
- <value>wxgui_fftsink2_0_0</value>
+ <value>qtgui_freq_sink_x_0</value>
+ </param>
+ <param>
+ <key>legend</key>
+ <value>True</value>
</param>
<param>
- <key>notebook</key>
+ <key>alpha1</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>color1</key>
+ <value>"blue"</value>
+ </param>
+ <param>
+ <key>label1</key>
<value></value>
</param>
<param>
- <key>peak_hold</key>
- <value>False</value>
+ <key>width1</key>
+ <value>1</value>
</param>
<param>
- <key>ref_level</key>
- <value>-10</value>
+ <key>alpha10</key>
+ <value>1.0</value>
</param>
<param>
- <key>ref_scale</key>
- <value>2.0</value>
+ <key>color10</key>
+ <value>"dark blue"</value>
</param>
<param>
- <key>fft_rate</key>
- <value>15</value>
+ <key>label10</key>
+ <value></value>
</param>
<param>
- <key>samp_rate</key>
- <value>samp_rate</value>
+ <key>width10</key>
+ <value>1</value>
</param>
<param>
- <key>title</key>
- <value>FFT Plot</value>
+ <key>alpha2</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>color2</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>label2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width2</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alpha3</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>color3</key>
+ <value>"green"</value>
+ </param>
+ <param>
+ <key>label3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width3</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alpha4</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>color4</key>
+ <value>"black"</value>
+ </param>
+ <param>
+ <key>label4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width4</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alpha5</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>color5</key>
+ <value>"cyan"</value>
+ </param>
+ <param>
+ <key>label5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width5</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alpha6</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>color6</key>
+ <value>"magenta"</value>
+ </param>
+ <param>
+ <key>label6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width6</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alpha7</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>color7</key>
+ <value>"yellow"</value>
+ </param>
+ <param>
+ <key>label7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width7</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alpha8</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>color8</key>
+ <value>"dark red"</value>
+ </param>
+ <param>
+ <key>label8</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alpha9</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>color9</key>
+ <value>"dark green"</value>
+ </param>
+ <param>
+ <key>label9</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>name</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>nconnections</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>showports</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>freqhalf</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>tr_chan</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>tr_level</key>
+ <value>0.0</value>
+ </param>
+ <param>
+ <key>tr_mode</key>
+ <value>qtgui.TRIG_MODE_FREE</value>
+ </param>
+ <param>
+ <key>tr_tag</key>
+ <value>""</value>
</param>
<param>
<key>type</key>
<value>complex</value>
</param>
<param>
- <key>win_size</key>
- <value>640,480</value>
+ <key>update_time</key>
+ <value>0.10</value>
</param>
<param>
- <key>win</key>
- <value>None</value>
+ <key>wintype</key>
+ <value>firdes.WIN_BLACKMAN_hARRIS</value>
</param>
<param>
- <key>y_divs</key>
- <value>10</value>
+ <key>label</key>
+ <value>Relative Gain</value>
</param>
<param>
- <key>y_per_div</key>
+ <key>ymax</key>
<value>10</value>
</param>
+ <param>
+ <key>ymin</key>
+ <value>-140</value>
+ </param>
+ <param>
+ <key>units</key>
+ <value>dB</value>
+ </param>
+ </block>
+ <block>
+ <key>uhd_usrp_sink</key>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>ant0</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw0</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq0</key>
+ <value>center_freq</value>
+ </param>
+ <param>
+ <key>norm_gain0</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain0</key>
+ <value>tx_gain</value>
+ </param>
+ <param>
+ <key>ant10</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw10</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq10</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>norm_gain10</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain10</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant11</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw11</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq11</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>norm_gain11</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain11</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant12</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw12</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq12</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>norm_gain12</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain12</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant13</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw13</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq13</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>norm_gain13</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain13</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant14</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw14</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq14</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>norm_gain14</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain14</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant15</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw15</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq15</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>norm_gain15</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain15</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant16</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw16</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq16</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>norm_gain16</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain16</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant17</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw17</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq17</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>norm_gain17</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain17</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant18</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw18</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq18</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>norm_gain18</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain18</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant19</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw19</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq19</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>norm_gain19</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain19</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant1</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw1</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq1</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>norm_gain1</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain1</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant20</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw20</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq20</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>norm_gain20</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain20</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant21</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw21</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq21</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>norm_gain21</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain21</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant22</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw22</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq22</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>norm_gain22</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain22</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant23</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw23</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq23</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>norm_gain23</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain23</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant24</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw24</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq24</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>norm_gain24</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain24</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant25</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw25</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq25</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>norm_gain25</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain25</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant26</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw26</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq26</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>norm_gain26</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain26</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant27</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw27</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq27</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>norm_gain27</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain27</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant28</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw28</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq28</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>norm_gain28</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain28</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant29</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw29</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq29</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>norm_gain29</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain29</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw2</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq2</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>norm_gain2</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain2</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant30</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw30</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq30</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>norm_gain30</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain30</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant31</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw31</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq31</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>norm_gain31</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain31</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw3</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq3</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>norm_gain3</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain3</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw4</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq4</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>norm_gain4</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain4</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw5</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq5</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>norm_gain5</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain5</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw6</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq6</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>norm_gain6</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain6</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw7</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq7</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>norm_gain7</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain7</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant8</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw8</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq8</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>norm_gain8</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain8</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant9</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw9</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq9</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>norm_gain9</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain9</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>clock_rate</key>
+ <value>0.0</value>
+ </param>
+ <param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>dev_addr</key>
+ <value>"send_frame_size=65536,num_send_frames=128,master_clock_rate=" + str(samp_rate*4)</value>
+ </param>
+ <param>
+ <key>dev_args</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(1072, 336)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>uhd_usrp_sink_0</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>fc32</value>
+ </param>
+ <param>
+ <key>clock_source0</key>
+ <value></value>
+ </param>
+ <param>
+ <key>sd_spec0</key>
+ <value></value>
+ </param>
+ <param>
+ <key>time_source0</key>
+ <value></value>
+ </param>
+ <param>
+ <key>clock_source1</key>
+ <value></value>
+ </param>
+ <param>
+ <key>sd_spec1</key>
+ <value></value>
+ </param>
+ <param>
+ <key>time_source1</key>
+ <value></value>
+ </param>
+ <param>
+ <key>clock_source2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>sd_spec2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>time_source2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>clock_source3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>sd_spec3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>time_source3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>clock_source4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>sd_spec4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>time_source4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>clock_source5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>sd_spec5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>time_source5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>clock_source6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>sd_spec6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>time_source6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>clock_source7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>sd_spec7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>time_source7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>nchan</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>num_mboards</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>samp_rate</key>
+ <value>samp_rate</value>
+ </param>
+ <param>
+ <key>hide_cmd_port</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>hide_lo_controls</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>stream_args</key>
+ <value></value>
+ </param>
+ <param>
+ <key>stream_chans</key>
+ <value>[]</value>
+ </param>
+ <param>
+ <key>sync</key>
+ <value></value>
+ </param>
+ <param>
+ <key>len_tag_name</key>
+ <value></value>
+ </param>
+ <param>
+ <key>otw</key>
+ <value></value>
+ </param>
</block>
<connection>
<source_block_id>blocks_file_source_0</source_block_id>
@@ -2072,7 +3170,13 @@
</connection>
<connection>
<source_block_id>fft_filter_xxx_0</source_block_id>
- <sink_block_id>wxgui_fftsink2_0_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>fft_filter_xxx_0</source_block_id>
+ <sink_block_id>uhd_usrp_sink_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
diff --git a/gr-dtv/examples/dvbs2_tx.grc b/gr-dtv/examples/dvbs2_tx.grc
index 99c797d066..a26981a0dc 100644
--- a/gr-dtv/examples/dvbs2_tx.grc
+++ b/gr-dtv/examples/dvbs2_tx.grc
@@ -1,5 +1,5 @@
<?xml version='1.0' encoding='utf-8'?>
-<?grc format='1' created='3.7.10'?>
+<?grc format='1' created='3.7.11'?>
<flow_graph>
<timestamp>Wed Sep 3 03:03:39 2014</timestamp>
<block>
@@ -38,7 +38,7 @@
</param>
<param>
<key>generate_options</key>
- <value>wx_gui</value>
+ <value>qt_gui</value>
</param>
<param>
<key>hier_block_src_path</key>
@@ -101,7 +101,7 @@
</param>
<param>
<key>id</key>
- <value>frequency</value>
+ <value>center_freq</value>
</param>
<param>
<key>value</key>
@@ -217,6 +217,195 @@
</param>
</block>
<block>
+ <key>variable_qtgui_range</key>
+ <param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>50</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(240, 480)</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>tx_gain</value>
+ </param>
+ <param>
+ <key>label</key>
+ <value></value>
+ </param>
+ <param>
+ <key>min_len</key>
+ <value>200</value>
+ </param>
+ <param>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
+ </param>
+ <param>
+ <key>start</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>step</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>stop</key>
+ <value>89</value>
+ </param>
+ <param>
+ <key>rangeType</key>
+ <value>float</value>
+ </param>
+ <param>
+ <key>widget</key>
+ <value>counter_slider</value>
+ </param>
+ </block>
+ <block>
+ <key>variable_qtgui_range</key>
+ <param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>-8</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(8, 480)</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>vga1_gain</value>
+ </param>
+ <param>
+ <key>label</key>
+ <value></value>
+ </param>
+ <param>
+ <key>min_len</key>
+ <value>200</value>
+ </param>
+ <param>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
+ </param>
+ <param>
+ <key>start</key>
+ <value>-35</value>
+ </param>
+ <param>
+ <key>step</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>stop</key>
+ <value>-4</value>
+ </param>
+ <param>
+ <key>rangeType</key>
+ <value>int</value>
+ </param>
+ <param>
+ <key>widget</key>
+ <value>counter_slider</value>
+ </param>
+ </block>
+ <block>
+ <key>variable_qtgui_range</key>
+ <param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(120, 480)</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>vga2_gain</value>
+ </param>
+ <param>
+ <key>label</key>
+ <value></value>
+ </param>
+ <param>
+ <key>min_len</key>
+ <value>200</value>
+ </param>
+ <param>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
+ </param>
+ <param>
+ <key>start</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>step</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>stop</key>
+ <value>25</value>
+ </param>
+ <param>
+ <key>rangeType</key>
+ <value>int</value>
+ </param>
+ <param>
+ <key>widget</key>
+ <value>counter_slider</value>
+ </param>
+ </block>
+ <block>
<key>blocks_file_sink</key>
<param>
<key>append</key>
@@ -244,7 +433,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(776, 548)</value>
+ <value>(776, 508)</value>
</param>
<param>
<key>_rotation</key>
@@ -670,7 +859,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(184, 220)</value>
+ <value>(184, 172)</value>
</param>
<param>
<key>_rotation</key>
@@ -733,7 +922,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(448, 216)</value>
+ <value>(448, 168)</value>
</param>
<param>
<key>_rotation</key>
@@ -792,7 +981,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(184, 432)</value>
+ <value>(184, 320)</value>
</param>
<param>
<key>_rotation</key>
@@ -843,7 +1032,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(464, 444)</value>
+ <value>(464, 332)</value>
</param>
<param>
<key>_rotation</key>
@@ -890,7 +1079,7 @@
</param>
<param>
<key>bb_gain0</key>
- <value>-10</value>
+ <value>vga1_gain</value>
</param>
<param>
<key>bw0</key>
@@ -902,7 +1091,7 @@
</param>
<param>
<key>freq0</key>
- <value>frequency</value>
+ <value>center_freq</value>
</param>
<param>
<key>if_gain0</key>
@@ -910,7 +1099,7 @@
</param>
<param>
<key>gain0</key>
- <value>15</value>
+ <value>vga2_gain</value>
</param>
<param>
<key>ant10</key>
@@ -1794,7 +1983,7 @@
</param>
<param>
<key>_enabled</key>
- <value>0</value>
+ <value>1</value>
</param>
<param>
<key>_coordinate</key>
@@ -1894,6 +2083,305 @@
</param>
</block>
<block>
+ <key>qtgui_freq_sink_x</key>
+ <param>
+ <key>autoscale</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>average</key>
+ <value>0.2</value>
+ </param>
+ <param>
+ <key>axislabels</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>bw</key>
+ <value>samp_rate</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>fc</key>
+ <value>center_freq</value>
+ </param>
+ <param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>ctrlpanel</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>fftsize</key>
+ <value>1024</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(776, 204)</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>grid</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>qtgui_freq_sink_x_0</value>
+ </param>
+ <param>
+ <key>legend</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>alpha1</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>color1</key>
+ <value>"blue"</value>
+ </param>
+ <param>
+ <key>label1</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width1</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alpha10</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>color10</key>
+ <value>"dark blue"</value>
+ </param>
+ <param>
+ <key>label10</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alpha2</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>color2</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>label2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width2</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alpha3</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>color3</key>
+ <value>"green"</value>
+ </param>
+ <param>
+ <key>label3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width3</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alpha4</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>color4</key>
+ <value>"black"</value>
+ </param>
+ <param>
+ <key>label4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width4</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alpha5</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>color5</key>
+ <value>"cyan"</value>
+ </param>
+ <param>
+ <key>label5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width5</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alpha6</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>color6</key>
+ <value>"magenta"</value>
+ </param>
+ <param>
+ <key>label6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width6</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alpha7</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>color7</key>
+ <value>"yellow"</value>
+ </param>
+ <param>
+ <key>label7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width7</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alpha8</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>color8</key>
+ <value>"dark red"</value>
+ </param>
+ <param>
+ <key>label8</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alpha9</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>color9</key>
+ <value>"dark green"</value>
+ </param>
+ <param>
+ <key>label9</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>name</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>nconnections</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>showports</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>freqhalf</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>tr_chan</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>tr_level</key>
+ <value>0.0</value>
+ </param>
+ <param>
+ <key>tr_mode</key>
+ <value>qtgui.TRIG_MODE_FREE</value>
+ </param>
+ <param>
+ <key>tr_tag</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>complex</value>
+ </param>
+ <param>
+ <key>update_time</key>
+ <value>0.10</value>
+ </param>
+ <param>
+ <key>wintype</key>
+ <value>firdes.WIN_BLACKMAN_hARRIS</value>
+ </param>
+ <param>
+ <key>label</key>
+ <value>Relative Gain</value>
+ </param>
+ <param>
+ <key>ymax</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>ymin</key>
+ <value>-140</value>
+ </param>
+ <param>
+ <key>units</key>
+ <value>dB</value>
+ </param>
+ </block>
+ <block>
<key>uhd_usrp_sink</key>
<param>
<key>alias</key>
@@ -1909,7 +2397,7 @@
</param>
<param>
<key>center_freq0</key>
- <value>uhd.tune_request(frequency, ((symbol_rate * (1 + rolloff)) / 2 ) + 1e5)</value>
+ <value>uhd.tune_request(center_freq, ((symbol_rate * (1 + rolloff)) / 2 ) + 1e5)</value>
</param>
<param>
<key>norm_gain0</key>
@@ -1917,7 +2405,7 @@
</param>
<param>
<key>gain0</key>
- <value>60</value>
+ <value>tx_gain</value>
</param>
<param>
<key>ant10</key>
@@ -2553,7 +3041,7 @@
</param>
<param>
<key>dev_addr</key>
- <value>"send_frame_size=65536,num_send_frames=256,master_clock_rate=" + str(samp_rate*2)</value>
+ <value>"send_frame_size=65536,num_send_frames=256,master_clock_rate=" + str(samp_rate*4)</value>
</param>
<param>
<key>dev_args</key>
@@ -2561,11 +3049,11 @@
</param>
<param>
<key>_enabled</key>
- <value>1</value>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(1048, 416)</value>
+ <value>(1048, 408)</value>
</param>
<param>
<key>_rotation</key>
@@ -2716,109 +3204,6 @@
<value></value>
</param>
</block>
- <block>
- <key>wxgui_fftsink2</key>
- <param>
- <key>avg_alpha</key>
- <value>0.13333</value>
- </param>
- <param>
- <key>average</key>
- <value>True</value>
- </param>
- <param>
- <key>baseband_freq</key>
- <value>frequency</value>
- </param>
- <param>
- <key>alias</key>
- <value></value>
- </param>
- <param>
- <key>comment</key>
- <value></value>
- </param>
- <param>
- <key>affinity</key>
- <value></value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>fft_size</key>
- <value>1024</value>
- </param>
- <param>
- <key>freqvar</key>
- <value>None</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(776, 196)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- <param>
- <key>grid_pos</key>
- <value></value>
- </param>
- <param>
- <key>id</key>
- <value>wxgui_fftsink2_0</value>
- </param>
- <param>
- <key>notebook</key>
- <value></value>
- </param>
- <param>
- <key>peak_hold</key>
- <value>False</value>
- </param>
- <param>
- <key>ref_level</key>
- <value>-20</value>
- </param>
- <param>
- <key>ref_scale</key>
- <value>2.0</value>
- </param>
- <param>
- <key>fft_rate</key>
- <value>15</value>
- </param>
- <param>
- <key>samp_rate</key>
- <value>samp_rate</value>
- </param>
- <param>
- <key>title</key>
- <value>FFT Plot</value>
- </param>
- <param>
- <key>type</key>
- <value>complex</value>
- </param>
- <param>
- <key>win_size</key>
- <value>800,600</value>
- </param>
- <param>
- <key>win</key>
- <value>None</value>
- </param>
- <param>
- <key>y_divs</key>
- <value>10</value>
- </param>
- <param>
- <key>y_per_div</key>
- <value>10</value>
- </param>
- </block>
<connection>
<source_block_id>blocks_file_source_0</source_block_id>
<sink_block_id>dtv_dvb_bbheader_bb_0</sink_block_id>
@@ -2881,13 +3266,13 @@
</connection>
<connection>
<source_block_id>fft_filter_xxx_0</source_block_id>
- <sink_block_id>uhd_usrp_sink_0_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>fft_filter_xxx_0</source_block_id>
- <sink_block_id>wxgui_fftsink2_0</sink_block_id>
+ <sink_block_id>uhd_usrp_sink_0_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
diff --git a/gr-dtv/examples/dvbs_tx.grc b/gr-dtv/examples/dvbs_tx.grc
index c9dd98a0b9..b5e94b55ed 100644
--- a/gr-dtv/examples/dvbs_tx.grc
+++ b/gr-dtv/examples/dvbs_tx.grc
@@ -1,5 +1,5 @@
<?xml version='1.0' encoding='utf-8'?>
-<?grc format='1' created='3.7.10'?>
+<?grc format='1' created='3.7.11'?>
<flow_graph>
<timestamp>Wed Jun 18 01:23:58 2014</timestamp>
<block>
@@ -30,7 +30,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(8, 11)</value>
+ <value>(8, 12)</value>
</param>
<param>
<key>_rotation</key>
@@ -38,7 +38,7 @@
</param>
<param>
<key>generate_options</key>
- <value>wx_gui</value>
+ <value>qt_gui</value>
</param>
<param>
<key>hier_block_src_path</key>
@@ -93,7 +93,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(8, 203)</value>
+ <value>(8, 204)</value>
</param>
<param>
<key>_rotation</key>
@@ -101,7 +101,7 @@
</param>
<param>
<key>id</key>
- <value>frequency</value>
+ <value>center_freq</value>
</param>
<param>
<key>value</key>
@@ -120,7 +120,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(8, 267)</value>
+ <value>(8, 268)</value>
</param>
<param>
<key>_rotation</key>
@@ -147,7 +147,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(8, 75)</value>
+ <value>(8, 76)</value>
</param>
<param>
<key>_rotation</key>
@@ -174,7 +174,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(8, 139)</value>
+ <value>(8, 140)</value>
</param>
<param>
<key>_rotation</key>
@@ -190,34 +190,89 @@
</param>
</block>
<block>
- <key>blocks_file_sink</key>
+ <key>variable_qtgui_range</key>
<param>
- <key>append</key>
- <value>False</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>value</key>
+ <value>50</value>
</param>
<param>
- <key>comment</key>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(240, 480)</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
<value></value>
</param>
<param>
- <key>affinity</key>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>tx_gain</value>
+ </param>
+ <param>
+ <key>label</key>
<value></value>
</param>
<param>
- <key>_enabled</key>
+ <key>min_len</key>
+ <value>200</value>
+ </param>
+ <param>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
+ </param>
+ <param>
+ <key>start</key>
<value>0</value>
</param>
<param>
- <key>file</key>
- <value>adv.bin</value>
+ <key>step</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>stop</key>
+ <value>89</value>
+ </param>
+ <param>
+ <key>rangeType</key>
+ <value>float</value>
+ </param>
+ <param>
+ <key>widget</key>
+ <value>counter_slider</value>
+ </param>
+ </block>
+ <block>
+ <key>variable_qtgui_range</key>
+ <param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>-8</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(848, 507)</value>
+ <value>(8, 480)</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value></value>
</param>
<param>
<key>_rotation</key>
@@ -225,46 +280,62 @@
</param>
<param>
<key>id</key>
- <value>blocks_file_sink_0</value>
+ <value>vga1_gain</value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
+ <key>label</key>
+ <value></value>
</param>
<param>
- <key>unbuffered</key>
- <value>False</value>
+ <key>min_len</key>
+ <value>200</value>
</param>
<param>
- <key>vlen</key>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
+ </param>
+ <param>
+ <key>start</key>
+ <value>-35</value>
+ </param>
+ <param>
+ <key>step</key>
<value>1</value>
</param>
- </block>
- <block>
- <key>blocks_file_source</key>
<param>
- <key>alias</key>
- <value></value>
+ <key>stop</key>
+ <value>-4</value>
+ </param>
+ <param>
+ <key>rangeType</key>
+ <value>int</value>
</param>
<param>
+ <key>widget</key>
+ <value>counter_slider</value>
+ </param>
+ </block>
+ <block>
+ <key>variable_qtgui_range</key>
+ <param>
<key>comment</key>
<value></value>
</param>
<param>
- <key>affinity</key>
- <value></value>
+ <key>value</key>
+ <value>10</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>file</key>
- <value>/run/shm/advdvbs78.ts</value>
+ <key>_coordinate</key>
+ <value>(120, 480)</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(184, 59)</value>
+ <key>gui_hint</key>
+ <value></value>
</param>
<param>
<key>_rotation</key>
@@ -272,31 +343,47 @@
</param>
<param>
<key>id</key>
- <value>blocks_file_source_0</value>
+ <value>vga2_gain</value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>label</key>
+ <value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>min_len</key>
+ <value>200</value>
</param>
<param>
- <key>type</key>
- <value>byte</value>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
</param>
<param>
- <key>repeat</key>
- <value>True</value>
+ <key>start</key>
+ <value>0</value>
</param>
<param>
- <key>vlen</key>
+ <key>step</key>
<value>1</value>
</param>
+ <param>
+ <key>stop</key>
+ <value>25</value>
+ </param>
+ <param>
+ <key>rangeType</key>
+ <value>int</value>
+ </param>
+ <param>
+ <key>widget</key>
+ <value>counter_slider</value>
+ </param>
</block>
<block>
- <key>blocks_pack_k_bits_bb</key>
+ <key>blocks_file_sink</key>
+ <param>
+ <key>append</key>
+ <value>False</value>
+ </param>
<param>
<key>alias</key>
<value></value>
@@ -311,11 +398,15 @@
</param>
<param>
<key>_enabled</key>
- <value>1</value>
+ <value>0</value>
+ </param>
+ <param>
+ <key>file</key>
+ <value>adv.cfile</value>
</param>
<param>
<key>_coordinate</key>
- <value>(176, 451)</value>
+ <value>(864, 484)</value>
</param>
<param>
<key>_rotation</key>
@@ -323,27 +414,23 @@
</param>
<param>
<key>id</key>
- <value>blocks_pack_k_bits_bb_0</value>
+ <value>blocks_file_sink_0</value>
</param>
<param>
- <key>k</key>
- <value>2</value>
+ <key>type</key>
+ <value>complex</value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>unbuffered</key>
+ <value>False</value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>vlen</key>
+ <value>1</value>
</param>
</block>
<block>
- <key>blocks_packed_to_unpacked_xx</key>
- <param>
- <key>bits_per_chunk</key>
- <value>1</value>
- </param>
+ <key>blocks_file_source</key>
<param>
<key>alias</key>
<value></value>
@@ -358,15 +445,15 @@
</param>
<param>
<key>_enabled</key>
- <value>1</value>
+ <value>True</value>
</param>
<param>
- <key>endianness</key>
- <value>gr.GR_MSB_FIRST</value>
+ <key>file</key>
+ <value>/run/shm/advdvbs78.ts</value>
</param>
<param>
<key>_coordinate</key>
- <value>(1080, 59)</value>
+ <value>(208, 52)</value>
</param>
<param>
<key>_rotation</key>
@@ -374,7 +461,7 @@
</param>
<param>
<key>id</key>
- <value>blocks_packed_to_unpacked_xx_0</value>
+ <value>blocks_file_source_0</value>
</param>
<param>
<key>maxoutbuf</key>
@@ -385,16 +472,20 @@
<value>0</value>
</param>
<param>
- <key>num_ports</key>
- <value>1</value>
- </param>
- <param>
<key>type</key>
<value>byte</value>
</param>
+ <param>
+ <key>repeat</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>vlen</key>
+ <value>1</value>
+ </param>
</block>
<block>
- <key>blocks_unpack_k_bits_bb</key>
+ <key>blocks_vector_to_stream</key>
<param>
<key>alias</key>
<value></value>
@@ -409,11 +500,11 @@
</param>
<param>
<key>_enabled</key>
- <value>1</value>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(408, 235)</value>
+ <value>(568, 228)</value>
</param>
<param>
<key>_rotation</key>
@@ -421,11 +512,11 @@
</param>
<param>
<key>id</key>
- <value>blocks_unpack_k_bits_bb_0</value>
+ <value>blocks_vector_to_stream_0</value>
</param>
<param>
- <key>k</key>
- <value>2</value>
+ <key>type</key>
+ <value>byte</value>
</param>
<param>
<key>maxoutbuf</key>
@@ -435,6 +526,14 @@
<key>minoutbuf</key>
<value>0</value>
</param>
+ <param>
+ <key>num_items</key>
+ <value>1512</value>
+ </param>
+ <param>
+ <key>vlen</key>
+ <value>1</value>
+ </param>
</block>
<block>
<key>dtv_dvbs2_modulator_bc</key>
@@ -447,8 +546,16 @@
<value></value>
</param>
<param>
- <key>rate</key>
- <value>C_OTHER</value>
+ <key>rate1</key>
+ <value>C1_4</value>
+ </param>
+ <param>
+ <key>rate2</key>
+ <value>C1_5_MEDIUM</value>
+ </param>
+ <param>
+ <key>rate3</key>
+ <value>C1_4</value>
</param>
<param>
<key>comment</key>
@@ -472,7 +579,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(352, 427)</value>
+ <value>(248, 376)</value>
</param>
<param>
<key>_rotation</key>
@@ -519,7 +626,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(832, 51)</value>
+ <value>(952, 44)</value>
</param>
<param>
<key>_rotation</key>
@@ -566,7 +673,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(408, 73)</value>
+ <value>(456, 64)</value>
</param>
<param>
<key>_rotation</key>
@@ -586,46 +693,50 @@
</param>
</block>
<block>
- <key>dtv_dvbt_reed_solomon_enc</key>
+ <key>dtv_dvbt_inner_coder</key>
<param>
<key>alias</key>
<value></value>
</param>
<param>
- <key>blocks</key>
- <value>8</value>
+ <key>code_rate</key>
+ <value>C7_8</value>
</param>
<param>
<key>comment</key>
<value></value>
</param>
<param>
+ <key>constellation</key>
+ <value>qpsk</value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
<param>
<key>_enabled</key>
- <value>1</value>
- </param>
- <param>
- <key>gfpoly</key>
- <value>0x11d</value>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(600, 19)</value>
+ <value>(248, 208)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
<param>
+ <key>hierarchy</key>
+ <value>nh</value>
+ </param>
+ <param>
<key>id</key>
- <value>dtv_dvbt_reed_solomon_enc_0</value>
+ <value>dtv_dvbt_inner_coder_0</value>
</param>
<param>
- <key>k</key>
- <value>239</value>
+ <key>ninput</key>
+ <value>1</value>
</param>
<param>
<key>maxoutbuf</key>
@@ -636,33 +747,21 @@
<value>0</value>
</param>
<param>
- <key>n</key>
- <value>255</value>
- </param>
- <param>
- <key>s</key>
- <value>51</value>
- </param>
- <param>
- <key>m</key>
- <value>8</value>
- </param>
- <param>
- <key>p</key>
- <value>2</value>
- </param>
- <param>
- <key>t</key>
- <value>8</value>
+ <key>noutput</key>
+ <value>1512</value>
</param>
</block>
<block>
- <key>fec_puncture_xx</key>
+ <key>dtv_dvbt_reed_solomon_enc</key>
<param>
<key>alias</key>
<value></value>
</param>
<param>
+ <key>blocks</key>
+ <value>8</value>
+ </param>
+ <param>
<key>comment</key>
<value></value>
</param>
@@ -671,16 +770,16 @@
<value></value>
</param>
<param>
- <key>delay</key>
- <value>0</value>
- </param>
- <param>
<key>_enabled</key>
<value>1</value>
</param>
<param>
+ <key>gfpoly</key>
+ <value>0x11d</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(600, 219)</value>
+ <value>(680, 16)</value>
</param>
<param>
<key>_rotation</key>
@@ -688,7 +787,11 @@
</param>
<param>
<key>id</key>
- <value>fec_puncture_xx_0</value>
+ <value>dtv_dvbt_reed_solomon_enc_0</value>
+ </param>
+ <param>
+ <key>k</key>
+ <value>239</value>
</param>
<param>
<key>maxoutbuf</key>
@@ -699,16 +802,24 @@
<value>0</value>
</param>
<param>
- <key>puncpat</key>
- <value>0b11010101100110</value>
+ <key>n</key>
+ <value>255</value>
</param>
<param>
- <key>puncsize</key>
- <value>14</value>
+ <key>s</key>
+ <value>51</value>
</param>
<param>
- <key>type</key>
- <value>byte</value>
+ <key>m</key>
+ <value>8</value>
+ </param>
+ <param>
+ <key>p</key>
+ <value>2</value>
+ </param>
+ <param>
+ <key>t</key>
+ <value>8</value>
</param>
</block>
<block>
@@ -731,11 +842,11 @@
</param>
<param>
<key>_enabled</key>
- <value>True</value>
+ <value>1</value>
</param>
<param>
<key>_coordinate</key>
- <value>(584, 435)</value>
+ <value>(496, 380)</value>
</param>
<param>
<key>_rotation</key>
@@ -782,7 +893,7 @@
</param>
<param>
<key>bb_gain0</key>
- <value>-10</value>
+ <value>vga1_gain</value>
</param>
<param>
<key>bw0</key>
@@ -794,7 +905,7 @@
</param>
<param>
<key>freq0</key>
- <value>frequency</value>
+ <value>center_freq</value>
</param>
<param>
<key>if_gain0</key>
@@ -802,7 +913,7 @@
</param>
<param>
<key>gain0</key>
- <value>15</value>
+ <value>vga2_gain</value>
</param>
<param>
<key>ant10</key>
@@ -1686,11 +1797,11 @@
</param>
<param>
<key>_enabled</key>
- <value>0</value>
+ <value>1</value>
</param>
<param>
<key>_coordinate</key>
- <value>(1064, 211)</value>
+ <value>(1056, 228)</value>
</param>
<param>
<key>_rotation</key>
@@ -1786,50 +1897,234 @@
</param>
</block>
<block>
- <key>trellis_encoder_xx</key>
+ <key>qtgui_freq_sink_x</key>
<param>
- <key>alias</key>
- <value></value>
+ <key>autoscale</key>
+ <value>False</value>
</param>
<param>
- <key>blocklength</key>
- <value>0</value>
+ <key>average</key>
+ <value>0.2</value>
</param>
<param>
- <key>blockwise</key>
- <value>False</value>
+ <key>axislabels</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>bw</key>
+ <value>samp_rate</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>fc</key>
+ <value>center_freq</value>
</param>
<param>
<key>comment</key>
<value></value>
</param>
<param>
+ <key>ctrlpanel</key>
+ <value>False</value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
<param>
<key>_enabled</key>
- <value>1</value>
+ <value>True</value>
</param>
<param>
- <key>fsm_args</key>
- <value>1, 2, (0171, 0133)</value>
+ <key>fftsize</key>
+ <value>1024</value>
</param>
<param>
<key>_coordinate</key>
- <value>(176, 227)</value>
+ <value>(864, 188)</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value></value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
<param>
+ <key>grid</key>
+ <value>True</value>
+ </param>
+ <param>
<key>id</key>
- <value>trellis_encoder_xx_0</value>
+ <value>qtgui_freq_sink_x_0</value>
</param>
<param>
- <key>init_state</key>
- <value>0</value>
+ <key>legend</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>alpha1</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>color1</key>
+ <value>"blue"</value>
+ </param>
+ <param>
+ <key>label1</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width1</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alpha10</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>color10</key>
+ <value>"dark blue"</value>
+ </param>
+ <param>
+ <key>label10</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alpha2</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>color2</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>label2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width2</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alpha3</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>color3</key>
+ <value>"green"</value>
+ </param>
+ <param>
+ <key>label3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width3</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alpha4</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>color4</key>
+ <value>"black"</value>
+ </param>
+ <param>
+ <key>label4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width4</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alpha5</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>color5</key>
+ <value>"cyan"</value>
+ </param>
+ <param>
+ <key>label5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width5</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alpha6</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>color6</key>
+ <value>"magenta"</value>
+ </param>
+ <param>
+ <key>label6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width6</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alpha7</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>color7</key>
+ <value>"yellow"</value>
+ </param>
+ <param>
+ <key>label7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width7</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alpha8</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>color8</key>
+ <value>"dark red"</value>
+ </param>
+ <param>
+ <key>label8</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alpha9</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>color9</key>
+ <value>"dark green"</value>
+ </param>
+ <param>
+ <key>label9</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width9</key>
+ <value>1</value>
</param>
<param>
<key>maxoutbuf</key>
@@ -1840,8 +2135,64 @@
<value>0</value>
</param>
<param>
+ <key>name</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>nconnections</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>showports</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>freqhalf</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>tr_chan</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>tr_level</key>
+ <value>0.0</value>
+ </param>
+ <param>
+ <key>tr_mode</key>
+ <value>qtgui.TRIG_MODE_FREE</value>
+ </param>
+ <param>
+ <key>tr_tag</key>
+ <value>""</value>
+ </param>
+ <param>
<key>type</key>
- <value>bb</value>
+ <value>complex</value>
+ </param>
+ <param>
+ <key>update_time</key>
+ <value>0.10</value>
+ </param>
+ <param>
+ <key>wintype</key>
+ <value>firdes.WIN_BLACKMAN_hARRIS</value>
+ </param>
+ <param>
+ <key>label</key>
+ <value>Relative Gain</value>
+ </param>
+ <param>
+ <key>ymax</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>ymin</key>
+ <value>-140</value>
+ </param>
+ <param>
+ <key>units</key>
+ <value>dB</value>
</param>
</block>
<block>
@@ -1860,7 +2211,7 @@
</param>
<param>
<key>center_freq0</key>
- <value>uhd.tune_request(frequency, ((symbol_rate * 1.35) / 2 ) + 1e5)</value>
+ <value>uhd.tune_request(center_freq, ((symbol_rate * 1.35) / 2 ) + 1e5)</value>
</param>
<param>
<key>norm_gain0</key>
@@ -1868,7 +2219,7 @@
</param>
<param>
<key>gain0</key>
- <value>60</value>
+ <value>tx_gain</value>
</param>
<param>
<key>ant10</key>
@@ -2512,11 +2863,11 @@
</param>
<param>
<key>_enabled</key>
- <value>1</value>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(1064, 403)</value>
+ <value>(1064, 392)</value>
</param>
<param>
<key>_rotation</key>
@@ -2643,6 +2994,10 @@
<value>False</value>
</param>
<param>
+ <key>hide_lo_controls</key>
+ <value>True</value>
+ </param>
+ <param>
<key>stream_args</key>
<value></value>
</param>
@@ -2663,109 +3018,6 @@
<value></value>
</param>
</block>
- <block>
- <key>wxgui_fftsink2</key>
- <param>
- <key>avg_alpha</key>
- <value>0.13333</value>
- </param>
- <param>
- <key>average</key>
- <value>True</value>
- </param>
- <param>
- <key>baseband_freq</key>
- <value>frequency</value>
- </param>
- <param>
- <key>alias</key>
- <value></value>
- </param>
- <param>
- <key>comment</key>
- <value></value>
- </param>
- <param>
- <key>affinity</key>
- <value></value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>fft_size</key>
- <value>1024</value>
- </param>
- <param>
- <key>freqvar</key>
- <value>None</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(848, 195)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- <param>
- <key>grid_pos</key>
- <value></value>
- </param>
- <param>
- <key>id</key>
- <value>wxgui_fftsink2_0</value>
- </param>
- <param>
- <key>notebook</key>
- <value></value>
- </param>
- <param>
- <key>peak_hold</key>
- <value>False</value>
- </param>
- <param>
- <key>ref_level</key>
- <value>0</value>
- </param>
- <param>
- <key>ref_scale</key>
- <value>2.0</value>
- </param>
- <param>
- <key>fft_rate</key>
- <value>15</value>
- </param>
- <param>
- <key>samp_rate</key>
- <value>samp_rate</value>
- </param>
- <param>
- <key>title</key>
- <value>FFT Plot</value>
- </param>
- <param>
- <key>type</key>
- <value>complex</value>
- </param>
- <param>
- <key>win_size</key>
- <value></value>
- </param>
- <param>
- <key>win</key>
- <value>None</value>
- </param>
- <param>
- <key>y_divs</key>
- <value>10</value>
- </param>
- <param>
- <key>y_per_div</key>
- <value>10</value>
- </param>
- </block>
<connection>
<source_block_id>blocks_file_source_0</source_block_id>
<sink_block_id>dtv_dvbt_energy_dispersal_0</sink_block_id>
@@ -2773,24 +3025,12 @@
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>blocks_pack_k_bits_bb_0</source_block_id>
+ <source_block_id>blocks_vector_to_stream_0</source_block_id>
<sink_block_id>dtv_dvbs2_modulator_bc_0</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>trellis_encoder_xx_0</sink_block_id>
- <source_key>0</source_key>
- <sink_key>0</sink_key>
- </connection>
- <connection>
- <source_block_id>blocks_unpack_k_bits_bb_0</source_block_id>
- <sink_block_id>fec_puncture_xx_0</sink_block_id>
- <source_key>0</source_key>
- <sink_key>0</sink_key>
- </connection>
- <connection>
<source_block_id>dtv_dvbs2_modulator_bc_0</source_block_id>
<sink_block_id>fft_filter_xxx_0</sink_block_id>
<source_key>0</source_key>
@@ -2798,7 +3038,7 @@
</connection>
<connection>
<source_block_id>dtv_dvbt_convolutional_interleaver_0</source_block_id>
- <sink_block_id>blocks_packed_to_unpacked_xx_0</sink_block_id>
+ <sink_block_id>dtv_dvbt_inner_coder_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
@@ -2809,14 +3049,14 @@
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>dtv_dvbt_reed_solomon_enc_0</source_block_id>
- <sink_block_id>dtv_dvbt_convolutional_interleaver_0</sink_block_id>
+ <source_block_id>dtv_dvbt_inner_coder_0</source_block_id>
+ <sink_block_id>blocks_vector_to_stream_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>fec_puncture_xx_0</source_block_id>
- <sink_block_id>blocks_pack_k_bits_bb_0</sink_block_id>
+ <source_block_id>dtv_dvbt_reed_solomon_enc_0</source_block_id>
+ <sink_block_id>dtv_dvbt_convolutional_interleaver_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
@@ -2834,19 +3074,13 @@
</connection>
<connection>
<source_block_id>fft_filter_xxx_0</source_block_id>
- <sink_block_id>uhd_usrp_sink_0_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>fft_filter_xxx_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>trellis_encoder_xx_0</source_block_id>
- <sink_block_id>blocks_unpack_k_bits_bb_0</sink_block_id>
+ <sink_block_id>uhd_usrp_sink_0_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
diff --git a/gr-dtv/examples/dvbt_rx_8k.grc b/gr-dtv/examples/dvbt_rx_8k.grc
index b1a88a6d3a..7db1aac0a5 100644
--- a/gr-dtv/examples/dvbt_rx_8k.grc
+++ b/gr-dtv/examples/dvbt_rx_8k.grc
@@ -1,5 +1,5 @@
<?xml version='1.0' encoding='utf-8'?>
-<?grc format='1' created='3.7.9'?>
+<?grc format='1' created='3.7.11'?>
<flow_graph>
<timestamp>Thu Feb 13 17:44:54 2014</timestamp>
<block>
@@ -9,10 +9,6 @@
<value></value>
</param>
<param>
- <key>alias</key>
- <value></value>
- </param>
- <param>
<key>window_size</key>
<value>1280, 1024</value>
</param>
@@ -45,6 +41,10 @@
<value>qt_gui</value>
</param>
<param>
+ <key>hier_block_src_path</key>
+ <value>.:</value>
+ </param>
+ <param>
<key>id</key>
<value>dvbt_rx_demo_8k</value>
</param>
@@ -53,10 +53,18 @@
<value>0</value>
</param>
<param>
+ <key>qt_qss_theme</key>
+ <value></value>
+ </param>
+ <param>
<key>realtime_scheduling</key>
<value></value>
</param>
<param>
+ <key>run_command</key>
+ <value>{python} -u {filename}</value>
+ </param>
+ <param>
<key>run_options</key>
<value>prompt</value>
</param>
@@ -85,6 +93,33 @@
</param>
<param>
<key>_coordinate</key>
+ <value>(176, 12)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>center_freq</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>429e6</value>
+ </param>
+ </block>
+ <block>
+ <key>variable</key>
+ <param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
<value>(8, 75)</value>
</param>
<param>
@@ -128,7 +163,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(1072, 499)</value>
+ <value>(1080, 484)</value>
</param>
<param>
<key>_rotation</key>
@@ -175,7 +210,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(112, 75)</value>
+ <value>(128, 76)</value>
</param>
<param>
<key>_rotation</key>
@@ -281,7 +316,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(968, 275)</value>
+ <value>(968, 284)</value>
</param>
<param>
<key>_rotation</key>
@@ -383,7 +418,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(112, 371)</value>
+ <value>(144, 372)</value>
</param>
<param>
<key>_rotation</key>
@@ -438,7 +473,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(360, 363)</value>
+ <value>(376, 364)</value>
</param>
<param>
<key>_rotation</key>
@@ -493,7 +528,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(360, 499)</value>
+ <value>(360, 484)</value>
</param>
<param>
<key>_rotation</key>
@@ -540,7 +575,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(920, 347)</value>
+ <value>(928, 352)</value>
</param>
<param>
<key>_rotation</key>
@@ -607,7 +642,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(880, 19)</value>
+ <value>(896, 12)</value>
</param>
<param>
<key>_rotation</key>
@@ -670,7 +705,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(864, 515)</value>
+ <value>(872, 500)</value>
</param>
<param>
<key>_rotation</key>
@@ -717,7 +752,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(368, 59)</value>
+ <value>(368, 48)</value>
</param>
<param>
<key>_rotation</key>
@@ -776,7 +811,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(632, 467)</value>
+ <value>(632, 456)</value>
</param>
<param>
<key>_rotation</key>
@@ -843,7 +878,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(632, 363)</value>
+ <value>(640, 364)</value>
</param>
<param>
<key>_rotation</key>
@@ -898,7 +933,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(80, 491)</value>
+ <value>(80, 480)</value>
</param>
<param>
<key>_rotation</key>
@@ -953,7 +988,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(624, 51)</value>
+ <value>(640, 40)</value>
</param>
<param>
<key>_rotation</key>
@@ -995,6 +1030,10 @@
<value>True</value>
</param>
<param>
+ <key>axislabels</key>
+ <value>True</value>
+ </param>
+ <param>
<key>alias</key>
<value></value>
</param>
@@ -1012,7 +1051,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(680, 267)</value>
+ <value>(688, 276)</value>
</param>
<param>
<key>gui_hint</key>
@@ -1338,6 +1377,10 @@
<value>True</value>
</param>
<param>
+ <key>axislabels</key>
+ <value>True</value>
+ </param>
+ <param>
<key>alias</key>
<value></value>
</param>
@@ -1682,7 +1725,11 @@
</param>
<param>
<key>average</key>
- <value>1.0</value>
+ <value>0.2</value>
+ </param>
+ <param>
+ <key>axislabels</key>
+ <value>True</value>
</param>
<param>
<key>bw</key>
@@ -1694,7 +1741,7 @@
</param>
<param>
<key>fc</key>
- <value>429000000</value>
+ <value>center_freq</value>
</param>
<param>
<key>comment</key>
@@ -1730,7 +1777,7 @@
</param>
<param>
<key>grid</key>
- <value>False</value>
+ <value>True</value>
</param>
<param>
<key>id</key>
@@ -1953,6 +2000,10 @@
<value>firdes.WIN_BLACKMAN_hARRIS</value>
</param>
<param>
+ <key>label</key>
+ <value>Relative Gain</value>
+ </param>
+ <param>
<key>ymax</key>
<value>-10</value>
</param>
@@ -1960,6 +2011,10 @@
<key>ymin</key>
<value>-170</value>
</param>
+ <param>
+ <key>units</key>
+ <value>dB</value>
+ </param>
</block>
<block>
<key>uhd_usrp_source</key>
@@ -1977,7 +2032,15 @@
</param>
<param>
<key>center_freq0</key>
- <value>429000000</value>
+ <value>center_freq</value>
+ </param>
+ <param>
+ <key>dc_offs_enb0</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>iq_imbal_enb0</key>
+ <value>""</value>
</param>
<param>
<key>norm_gain0</key>
@@ -1988,6 +2051,14 @@
<value>30</value>
</param>
<param>
+ <key>lo_export0</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>lo_source0</key>
+ <value>internal</value>
+ </param>
+ <param>
<key>ant10</key>
<value></value>
</param>
@@ -2000,6 +2071,14 @@
<value>0</value>
</param>
<param>
+ <key>dc_offs_enb10</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>iq_imbal_enb10</key>
+ <value>""</value>
+ </param>
+ <param>
<key>norm_gain10</key>
<value>False</value>
</param>
@@ -2008,6 +2087,14 @@
<value>0</value>
</param>
<param>
+ <key>lo_export10</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>lo_source10</key>
+ <value>internal</value>
+ </param>
+ <param>
<key>ant11</key>
<value></value>
</param>
@@ -2020,6 +2107,14 @@
<value>0</value>
</param>
<param>
+ <key>dc_offs_enb11</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>iq_imbal_enb11</key>
+ <value>""</value>
+ </param>
+ <param>
<key>norm_gain11</key>
<value>False</value>
</param>
@@ -2028,6 +2123,14 @@
<value>0</value>
</param>
<param>
+ <key>lo_export11</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>lo_source11</key>
+ <value>internal</value>
+ </param>
+ <param>
<key>ant12</key>
<value></value>
</param>
@@ -2040,6 +2143,14 @@
<value>0</value>
</param>
<param>
+ <key>dc_offs_enb12</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>iq_imbal_enb12</key>
+ <value>""</value>
+ </param>
+ <param>
<key>norm_gain12</key>
<value>False</value>
</param>
@@ -2048,6 +2159,14 @@
<value>0</value>
</param>
<param>
+ <key>lo_export12</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>lo_source12</key>
+ <value>internal</value>
+ </param>
+ <param>
<key>ant13</key>
<value></value>
</param>
@@ -2060,6 +2179,14 @@
<value>0</value>
</param>
<param>
+ <key>dc_offs_enb13</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>iq_imbal_enb13</key>
+ <value>""</value>
+ </param>
+ <param>
<key>norm_gain13</key>
<value>False</value>
</param>
@@ -2068,6 +2195,14 @@
<value>0</value>
</param>
<param>
+ <key>lo_export13</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>lo_source13</key>
+ <value>internal</value>
+ </param>
+ <param>
<key>ant14</key>
<value></value>
</param>
@@ -2080,6 +2215,14 @@
<value>0</value>
</param>
<param>
+ <key>dc_offs_enb14</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>iq_imbal_enb14</key>
+ <value>""</value>
+ </param>
+ <param>
<key>norm_gain14</key>
<value>False</value>
</param>
@@ -2088,6 +2231,14 @@
<value>0</value>
</param>
<param>
+ <key>lo_export14</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>lo_source14</key>
+ <value>internal</value>
+ </param>
+ <param>
<key>ant15</key>
<value></value>
</param>
@@ -2100,6 +2251,14 @@
<value>0</value>
</param>
<param>
+ <key>dc_offs_enb15</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>iq_imbal_enb15</key>
+ <value>""</value>
+ </param>
+ <param>
<key>norm_gain15</key>
<value>False</value>
</param>
@@ -2108,6 +2267,14 @@
<value>0</value>
</param>
<param>
+ <key>lo_export15</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>lo_source15</key>
+ <value>internal</value>
+ </param>
+ <param>
<key>ant16</key>
<value></value>
</param>
@@ -2120,6 +2287,14 @@
<value>0</value>
</param>
<param>
+ <key>dc_offs_enb16</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>iq_imbal_enb16</key>
+ <value>""</value>
+ </param>
+ <param>
<key>norm_gain16</key>
<value>False</value>
</param>
@@ -2128,6 +2303,14 @@
<value>0</value>
</param>
<param>
+ <key>lo_export16</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>lo_source16</key>
+ <value>internal</value>
+ </param>
+ <param>
<key>ant17</key>
<value></value>
</param>
@@ -2140,6 +2323,14 @@
<value>0</value>
</param>
<param>
+ <key>dc_offs_enb17</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>iq_imbal_enb17</key>
+ <value>""</value>
+ </param>
+ <param>
<key>norm_gain17</key>
<value>False</value>
</param>
@@ -2148,6 +2339,14 @@
<value>0</value>
</param>
<param>
+ <key>lo_export17</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>lo_source17</key>
+ <value>internal</value>
+ </param>
+ <param>
<key>ant18</key>
<value></value>
</param>
@@ -2160,6 +2359,14 @@
<value>0</value>
</param>
<param>
+ <key>dc_offs_enb18</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>iq_imbal_enb18</key>
+ <value>""</value>
+ </param>
+ <param>
<key>norm_gain18</key>
<value>False</value>
</param>
@@ -2168,6 +2375,14 @@
<value>0</value>
</param>
<param>
+ <key>lo_export18</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>lo_source18</key>
+ <value>internal</value>
+ </param>
+ <param>
<key>ant19</key>
<value></value>
</param>
@@ -2180,6 +2395,14 @@
<value>0</value>
</param>
<param>
+ <key>dc_offs_enb19</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>iq_imbal_enb19</key>
+ <value>""</value>
+ </param>
+ <param>
<key>norm_gain19</key>
<value>False</value>
</param>
@@ -2188,6 +2411,14 @@
<value>0</value>
</param>
<param>
+ <key>lo_export19</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>lo_source19</key>
+ <value>internal</value>
+ </param>
+ <param>
<key>ant1</key>
<value></value>
</param>
@@ -2200,6 +2431,14 @@
<value>0</value>
</param>
<param>
+ <key>dc_offs_enb1</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>iq_imbal_enb1</key>
+ <value>""</value>
+ </param>
+ <param>
<key>norm_gain1</key>
<value>False</value>
</param>
@@ -2208,6 +2447,14 @@
<value>0</value>
</param>
<param>
+ <key>lo_export1</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>lo_source1</key>
+ <value>internal</value>
+ </param>
+ <param>
<key>ant20</key>
<value></value>
</param>
@@ -2220,6 +2467,14 @@
<value>0</value>
</param>
<param>
+ <key>dc_offs_enb20</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>iq_imbal_enb20</key>
+ <value>""</value>
+ </param>
+ <param>
<key>norm_gain20</key>
<value>False</value>
</param>
@@ -2228,6 +2483,14 @@
<value>0</value>
</param>
<param>
+ <key>lo_export20</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>lo_source20</key>
+ <value>internal</value>
+ </param>
+ <param>
<key>ant21</key>
<value></value>
</param>
@@ -2240,6 +2503,14 @@
<value>0</value>
</param>
<param>
+ <key>dc_offs_enb21</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>iq_imbal_enb21</key>
+ <value>""</value>
+ </param>
+ <param>
<key>norm_gain21</key>
<value>False</value>
</param>
@@ -2248,6 +2519,14 @@
<value>0</value>
</param>
<param>
+ <key>lo_export21</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>lo_source21</key>
+ <value>internal</value>
+ </param>
+ <param>
<key>ant22</key>
<value></value>
</param>
@@ -2260,6 +2539,14 @@
<value>0</value>
</param>
<param>
+ <key>dc_offs_enb22</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>iq_imbal_enb22</key>
+ <value>""</value>
+ </param>
+ <param>
<key>norm_gain22</key>
<value>False</value>
</param>
@@ -2268,6 +2555,14 @@
<value>0</value>
</param>
<param>
+ <key>lo_export22</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>lo_source22</key>
+ <value>internal</value>
+ </param>
+ <param>
<key>ant23</key>
<value></value>
</param>
@@ -2280,6 +2575,14 @@
<value>0</value>
</param>
<param>
+ <key>dc_offs_enb23</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>iq_imbal_enb23</key>
+ <value>""</value>
+ </param>
+ <param>
<key>norm_gain23</key>
<value>False</value>
</param>
@@ -2288,6 +2591,14 @@
<value>0</value>
</param>
<param>
+ <key>lo_export23</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>lo_source23</key>
+ <value>internal</value>
+ </param>
+ <param>
<key>ant24</key>
<value></value>
</param>
@@ -2300,6 +2611,14 @@
<value>0</value>
</param>
<param>
+ <key>dc_offs_enb24</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>iq_imbal_enb24</key>
+ <value>""</value>
+ </param>
+ <param>
<key>norm_gain24</key>
<value>False</value>
</param>
@@ -2308,6 +2627,14 @@
<value>0</value>
</param>
<param>
+ <key>lo_export24</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>lo_source24</key>
+ <value>internal</value>
+ </param>
+ <param>
<key>ant25</key>
<value></value>
</param>
@@ -2320,6 +2647,14 @@
<value>0</value>
</param>
<param>
+ <key>dc_offs_enb25</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>iq_imbal_enb25</key>
+ <value>""</value>
+ </param>
+ <param>
<key>norm_gain25</key>
<value>False</value>
</param>
@@ -2328,6 +2663,14 @@
<value>0</value>
</param>
<param>
+ <key>lo_export25</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>lo_source25</key>
+ <value>internal</value>
+ </param>
+ <param>
<key>ant26</key>
<value></value>
</param>
@@ -2340,6 +2683,14 @@
<value>0</value>
</param>
<param>
+ <key>dc_offs_enb26</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>iq_imbal_enb26</key>
+ <value>""</value>
+ </param>
+ <param>
<key>norm_gain26</key>
<value>False</value>
</param>
@@ -2348,6 +2699,14 @@
<value>0</value>
</param>
<param>
+ <key>lo_export26</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>lo_source26</key>
+ <value>internal</value>
+ </param>
+ <param>
<key>ant27</key>
<value></value>
</param>
@@ -2360,6 +2719,14 @@
<value>0</value>
</param>
<param>
+ <key>dc_offs_enb27</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>iq_imbal_enb27</key>
+ <value>""</value>
+ </param>
+ <param>
<key>norm_gain27</key>
<value>False</value>
</param>
@@ -2368,6 +2735,14 @@
<value>0</value>
</param>
<param>
+ <key>lo_export27</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>lo_source27</key>
+ <value>internal</value>
+ </param>
+ <param>
<key>ant28</key>
<value></value>
</param>
@@ -2380,6 +2755,14 @@
<value>0</value>
</param>
<param>
+ <key>dc_offs_enb28</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>iq_imbal_enb28</key>
+ <value>""</value>
+ </param>
+ <param>
<key>norm_gain28</key>
<value>False</value>
</param>
@@ -2388,6 +2771,14 @@
<value>0</value>
</param>
<param>
+ <key>lo_export28</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>lo_source28</key>
+ <value>internal</value>
+ </param>
+ <param>
<key>ant29</key>
<value></value>
</param>
@@ -2400,6 +2791,14 @@
<value>0</value>
</param>
<param>
+ <key>dc_offs_enb29</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>iq_imbal_enb29</key>
+ <value>""</value>
+ </param>
+ <param>
<key>norm_gain29</key>
<value>False</value>
</param>
@@ -2408,6 +2807,14 @@
<value>0</value>
</param>
<param>
+ <key>lo_export29</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>lo_source29</key>
+ <value>internal</value>
+ </param>
+ <param>
<key>ant2</key>
<value></value>
</param>
@@ -2420,6 +2827,14 @@
<value>0</value>
</param>
<param>
+ <key>dc_offs_enb2</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>iq_imbal_enb2</key>
+ <value>""</value>
+ </param>
+ <param>
<key>norm_gain2</key>
<value>False</value>
</param>
@@ -2428,6 +2843,14 @@
<value>0</value>
</param>
<param>
+ <key>lo_export2</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>lo_source2</key>
+ <value>internal</value>
+ </param>
+ <param>
<key>ant30</key>
<value></value>
</param>
@@ -2440,6 +2863,14 @@
<value>0</value>
</param>
<param>
+ <key>dc_offs_enb30</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>iq_imbal_enb30</key>
+ <value>""</value>
+ </param>
+ <param>
<key>norm_gain30</key>
<value>False</value>
</param>
@@ -2448,6 +2879,14 @@
<value>0</value>
</param>
<param>
+ <key>lo_export30</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>lo_source30</key>
+ <value>internal</value>
+ </param>
+ <param>
<key>ant31</key>
<value></value>
</param>
@@ -2460,6 +2899,14 @@
<value>0</value>
</param>
<param>
+ <key>dc_offs_enb31</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>iq_imbal_enb31</key>
+ <value>""</value>
+ </param>
+ <param>
<key>norm_gain31</key>
<value>False</value>
</param>
@@ -2468,6 +2915,14 @@
<value>0</value>
</param>
<param>
+ <key>lo_export31</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>lo_source31</key>
+ <value>internal</value>
+ </param>
+ <param>
<key>ant3</key>
<value></value>
</param>
@@ -2480,6 +2935,14 @@
<value>0</value>
</param>
<param>
+ <key>dc_offs_enb3</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>iq_imbal_enb3</key>
+ <value>""</value>
+ </param>
+ <param>
<key>norm_gain3</key>
<value>False</value>
</param>
@@ -2488,6 +2951,14 @@
<value>0</value>
</param>
<param>
+ <key>lo_export3</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>lo_source3</key>
+ <value>internal</value>
+ </param>
+ <param>
<key>ant4</key>
<value></value>
</param>
@@ -2500,6 +2971,14 @@
<value>0</value>
</param>
<param>
+ <key>dc_offs_enb4</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>iq_imbal_enb4</key>
+ <value>""</value>
+ </param>
+ <param>
<key>norm_gain4</key>
<value>False</value>
</param>
@@ -2508,6 +2987,14 @@
<value>0</value>
</param>
<param>
+ <key>lo_export4</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>lo_source4</key>
+ <value>internal</value>
+ </param>
+ <param>
<key>ant5</key>
<value></value>
</param>
@@ -2520,6 +3007,14 @@
<value>0</value>
</param>
<param>
+ <key>dc_offs_enb5</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>iq_imbal_enb5</key>
+ <value>""</value>
+ </param>
+ <param>
<key>norm_gain5</key>
<value>False</value>
</param>
@@ -2528,6 +3023,14 @@
<value>0</value>
</param>
<param>
+ <key>lo_export5</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>lo_source5</key>
+ <value>internal</value>
+ </param>
+ <param>
<key>ant6</key>
<value></value>
</param>
@@ -2540,6 +3043,14 @@
<value>0</value>
</param>
<param>
+ <key>dc_offs_enb6</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>iq_imbal_enb6</key>
+ <value>""</value>
+ </param>
+ <param>
<key>norm_gain6</key>
<value>False</value>
</param>
@@ -2548,6 +3059,14 @@
<value>0</value>
</param>
<param>
+ <key>lo_export6</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>lo_source6</key>
+ <value>internal</value>
+ </param>
+ <param>
<key>ant7</key>
<value></value>
</param>
@@ -2560,6 +3079,14 @@
<value>0</value>
</param>
<param>
+ <key>dc_offs_enb7</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>iq_imbal_enb7</key>
+ <value>""</value>
+ </param>
+ <param>
<key>norm_gain7</key>
<value>False</value>
</param>
@@ -2568,6 +3095,14 @@
<value>0</value>
</param>
<param>
+ <key>lo_export7</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>lo_source7</key>
+ <value>internal</value>
+ </param>
+ <param>
<key>ant8</key>
<value></value>
</param>
@@ -2580,6 +3115,14 @@
<value>0</value>
</param>
<param>
+ <key>dc_offs_enb8</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>iq_imbal_enb8</key>
+ <value>""</value>
+ </param>
+ <param>
<key>norm_gain8</key>
<value>False</value>
</param>
@@ -2588,6 +3131,14 @@
<value>0</value>
</param>
<param>
+ <key>lo_export8</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>lo_source8</key>
+ <value>internal</value>
+ </param>
+ <param>
<key>ant9</key>
<value></value>
</param>
@@ -2600,6 +3151,14 @@
<value>0</value>
</param>
<param>
+ <key>dc_offs_enb9</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>iq_imbal_enb9</key>
+ <value>""</value>
+ </param>
+ <param>
<key>norm_gain9</key>
<value>False</value>
</param>
@@ -2608,6 +3167,14 @@
<value>0</value>
</param>
<param>
+ <key>lo_export9</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>lo_source9</key>
+ <value>internal</value>
+ </param>
+ <param>
<key>clock_rate</key>
<value>0.0</value>
</param>
@@ -2633,7 +3200,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(48, 243)</value>
+ <value>(32, 240)</value>
</param>
<param>
<key>_rotation</key>
@@ -2764,6 +3331,14 @@
<value>samp_rate</value>
</param>
<param>
+ <key>hide_cmd_port</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>hide_lo_controls</key>
+ <value>True</value>
+ </param>
+ <param>
<key>stream_args</key>
<value></value>
</param>
diff --git a/gr-dtv/examples/dvbt_tx_2k.grc b/gr-dtv/examples/dvbt_tx_2k.grc
index 3db36aedcf..b061fefadd 100644
--- a/gr-dtv/examples/dvbt_tx_2k.grc
+++ b/gr-dtv/examples/dvbt_tx_2k.grc
@@ -1,1019 +1,2020 @@
-<?xml version='1.0' encoding='ASCII'?>
-<?grc format='1' created='3.7.8'?>
+<?xml version='1.0' encoding='utf-8'?>
+<?grc format='1' created='3.7.11'?>
<flow_graph>
<timestamp>Thu Jan 16 23:00:58 2014</timestamp>
<block>
- <key>dtv_dvbt_bit_inner_interleaver</key>
+ <key>options</key>
<param>
- <key>id</key>
- <value>dtv_dvbt_bit_inner_interleaver_0</value>
+ <key>author</key>
+ <value></value>
+ </param>
+ <param>
+ <key>window_size</key>
+ <value>1280, 1024</value>
+ </param>
+ <param>
+ <key>category</key>
+ <value>Custom</value>
+ </param>
+ <param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>description</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>constellation</key>
- <value>64qam</value>
+ <key>_coordinate</key>
+ <value>(8, 12)</value>
</param>
<param>
- <key>hierarchy</key>
- <value>nh</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>transmission_mode</key>
- <value>T2k</value>
+ <key>generate_options</key>
+ <value>qt_gui</value>
</param>
<param>
- <key>alias</key>
+ <key>hier_block_src_path</key>
+ <value>.:</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>dvbt_tx_demo</value>
+ </param>
+ <param>
+ <key>max_nouts</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>qt_qss_theme</key>
<value></value>
</param>
<param>
- <key>affinity</key>
+ <key>realtime_scheduling</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>run_command</key>
+ <value>{python} -u {filename}</value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>run_options</key>
+ <value>prompt</value>
+ </param>
+ <param>
+ <key>run</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>thread_safe_setters</key>
+ <value></value>
+ </param>
+ <param>
+ <key>title</key>
+ <value></value>
</param>
+ </block>
+ <block>
+ <key>variable</key>
<param>
<key>comment</key>
<value></value>
</param>
<param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(984, 243)</value>
+ <value>(176, 12)</value>
</param>
<param>
<key>_rotation</key>
- <value>180</value>
+ <value>0</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>center_freq</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>429e6</value>
</param>
</block>
<block>
<key>variable</key>
<param>
- <key>id</key>
- <value>samp_rate</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
+ <key>_coordinate</key>
+ <value>(8, 76)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>samp_rate</value>
+ </param>
+ <param>
<key>value</key>
<value>(8000000.0 * 8) / 7</value>
</param>
+ </block>
+ <block>
+ <key>variable_qtgui_range</key>
<param>
- <key>alias</key>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>50</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(240, 496)</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>tx_gain</value>
+ </param>
+ <param>
+ <key>label</key>
<value></value>
</param>
<param>
+ <key>min_len</key>
+ <value>200</value>
+ </param>
+ <param>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
+ </param>
+ <param>
+ <key>start</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>step</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>stop</key>
+ <value>89</value>
+ </param>
+ <param>
+ <key>rangeType</key>
+ <value>float</value>
+ </param>
+ <param>
+ <key>widget</key>
+ <value>counter_slider</value>
+ </param>
+ </block>
+ <block>
+ <key>variable_qtgui_range</key>
+ <param>
<key>comment</key>
<value></value>
</param>
<param>
+ <key>value</key>
+ <value>-8</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(8, 83)</value>
+ <value>(8, 496)</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value></value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
+ <param>
+ <key>id</key>
+ <value>vga1_gain</value>
+ </param>
+ <param>
+ <key>label</key>
+ <value></value>
+ </param>
+ <param>
+ <key>min_len</key>
+ <value>200</value>
+ </param>
+ <param>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
+ </param>
+ <param>
+ <key>start</key>
+ <value>-35</value>
+ </param>
+ <param>
+ <key>step</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>stop</key>
+ <value>-4</value>
+ </param>
+ <param>
+ <key>rangeType</key>
+ <value>int</value>
+ </param>
+ <param>
+ <key>widget</key>
+ <value>counter_slider</value>
+ </param>
</block>
<block>
- <key>dtv_dvbt_symbol_inner_interleaver</key>
+ <key>variable_qtgui_range</key>
<param>
- <key>id</key>
- <value>dtv_dvbt_symbol_inner_interleaver_0</value>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>10</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>transmission_mode</key>
- <value>T2k</value>
+ <key>_coordinate</key>
+ <value>(120, 496)</value>
</param>
<param>
- <key>direction</key>
- <value>Interleave</value>
+ <key>gui_hint</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>vga2_gain</value>
+ </param>
+ <param>
+ <key>label</key>
+ <value></value>
</param>
<param>
+ <key>min_len</key>
+ <value>200</value>
+ </param>
+ <param>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
+ </param>
+ <param>
+ <key>start</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>step</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>stop</key>
+ <value>25</value>
+ </param>
+ <param>
+ <key>rangeType</key>
+ <value>int</value>
+ </param>
+ <param>
+ <key>widget</key>
+ <value>counter_slider</value>
+ </param>
+ </block>
+ <block>
+ <key>blocks_file_source</key>
+ <param>
<key>alias</key>
<value></value>
</param>
<param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>file</key>
+ <value>/run/shm/adv8dvbt23qam64.ts</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(120, 76)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
<value>0</value>
</param>
<param>
+ <key>id</key>
+ <value>blocks_file_source_0</value>
+ </param>
+ <param>
<key>maxoutbuf</key>
<value>0</value>
</param>
<param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>byte</value>
+ </param>
+ <param>
+ <key>repeat</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>vlen</key>
+ <value>1</value>
+ </param>
+ </block>
+ <block>
+ <key>blocks_multiply_const_xx</key>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>comment</key>
<value></value>
</param>
<param>
+ <key>const</key>
+ <value>0.0022097087</value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(664, 243)</value>
+ <value>(696, 420)</value>
</param>
<param>
<key>_rotation</key>
- <value>180</value>
+ <value>0</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>blocks_multiply_const_xx_0</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>complex</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>vlen</key>
+ <value>1</value>
</param>
</block>
<block>
- <key>qtgui_const_sink_x</key>
+ <key>blocks_vector_to_stream</key>
<param>
- <key>id</key>
- <value>qtgui_const_sink_x_0</value>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
+ <key>_coordinate</key>
+ <value>(120, 332)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>blocks_vector_to_stream_0</value>
+ </param>
+ <param>
<key>type</key>
<value>complex</value>
</param>
<param>
- <key>name</key>
- <value>""</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>size</key>
- <value>1024</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>grid</key>
- <value>False</value>
+ <key>num_items</key>
+ <value>2048</value>
</param>
<param>
- <key>autoscale</key>
- <value>False</value>
+ <key>vlen</key>
+ <value>1</value>
</param>
+ </block>
+ <block>
+ <key>digital_ofdm_cyclic_prefixer</key>
<param>
- <key>ymin</key>
- <value>-2</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>ymax</key>
- <value>2</value>
+ <key>cp_len</key>
+ <value>64</value>
</param>
<param>
- <key>xmin</key>
- <value>-2</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
- <key>xmax</key>
- <value>2</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>nconnections</key>
- <value>1</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>update_time</key>
- <value>0.10</value>
+ <key>input_size</key>
+ <value>2048</value>
</param>
<param>
- <key>gui_hint</key>
- <value></value>
+ <key>_coordinate</key>
+ <value>(392, 400)</value>
</param>
<param>
- <key>tr_mode</key>
- <value>qtgui.TRIG_MODE_FREE</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>tr_slope</key>
- <value>qtgui.TRIG_SLOPE_POS</value>
+ <key>id</key>
+ <value>digital_ofdm_cyclic_prefixer_0</value>
</param>
<param>
- <key>tr_level</key>
- <value>0.0</value>
+ <key>tagname</key>
+ <value></value>
</param>
<param>
- <key>tr_chan</key>
+ <key>maxoutbuf</key>
<value>0</value>
</param>
<param>
- <key>tr_tag</key>
- <value>""</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>legend</key>
- <value>True</value>
+ <key>rolloff</key>
+ <value>0</value>
</param>
+ </block>
+ <block>
+ <key>dtv_dvbt_bit_inner_interleaver</key>
<param>
- <key>label1</key>
+ <key>alias</key>
<value></value>
</param>
<param>
- <key>width1</key>
- <value>1</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
- <key>color1</key>
- <value>"blue"</value>
+ <key>constellation</key>
+ <value>64qam</value>
</param>
<param>
- <key>style1</key>
- <value>0</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>marker1</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>alpha1</key>
- <value>1.0</value>
+ <key>_coordinate</key>
+ <value>(984, 204)</value>
</param>
<param>
- <key>label2</key>
- <value></value>
+ <key>_rotation</key>
+ <value>180</value>
</param>
<param>
- <key>width2</key>
- <value>1</value>
+ <key>hierarchy</key>
+ <value>nh</value>
</param>
<param>
- <key>color2</key>
- <value>"red"</value>
+ <key>id</key>
+ <value>dtv_dvbt_bit_inner_interleaver_0</value>
</param>
<param>
- <key>style2</key>
+ <key>maxoutbuf</key>
<value>0</value>
</param>
<param>
- <key>marker2</key>
+ <key>minoutbuf</key>
<value>0</value>
</param>
<param>
- <key>alpha2</key>
- <value>1.0</value>
+ <key>transmission_mode</key>
+ <value>T2k</value>
</param>
+ </block>
+ <block>
+ <key>dtv_dvbt_convolutional_interleaver</key>
<param>
- <key>label3</key>
+ <key>alias</key>
<value></value>
</param>
<param>
- <key>width3</key>
- <value>1</value>
+ <key>blocks</key>
+ <value>136</value>
</param>
<param>
- <key>color3</key>
- <value>"red"</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
- <key>style3</key>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>M</key>
+ <value>17</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(776, 52)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
<value>0</value>
</param>
<param>
- <key>marker3</key>
+ <key>id</key>
+ <value>dtv_dvbt_convolutional_interleaver_0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
<value>0</value>
</param>
<param>
- <key>alpha3</key>
- <value>1.0</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>label4</key>
+ <key>I</key>
+ <value>12</value>
+ </param>
+ </block>
+ <block>
+ <key>dtv_dvbt_energy_dispersal</key>
+ <param>
+ <key>alias</key>
<value></value>
</param>
<param>
- <key>width4</key>
+ <key>nsize</key>
<value>1</value>
</param>
<param>
- <key>color4</key>
- <value>"red"</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
- <key>style4</key>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(352, 72)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
<value>0</value>
</param>
<param>
- <key>marker4</key>
+ <key>id</key>
+ <value>dtv_dvbt_energy_dispersal_0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
<value>0</value>
</param>
<param>
- <key>alpha4</key>
- <value>1.0</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
+ </block>
+ <block>
+ <key>dtv_dvbt_inner_coder</key>
<param>
- <key>label5</key>
+ <key>alias</key>
<value></value>
</param>
<param>
- <key>width5</key>
- <value>1</value>
+ <key>code_rate</key>
+ <value>C2_3</value>
</param>
<param>
- <key>color5</key>
- <value>"red"</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
- <key>style5</key>
- <value>0</value>
+ <key>constellation</key>
+ <value>64qam</value>
</param>
<param>
- <key>marker5</key>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(1032, 48)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
<value>0</value>
</param>
<param>
- <key>alpha5</key>
- <value>1.0</value>
+ <key>hierarchy</key>
+ <value>nh</value>
</param>
<param>
- <key>label6</key>
- <value></value>
+ <key>id</key>
+ <value>dtv_dvbt_inner_coder_0</value>
</param>
<param>
- <key>width6</key>
+ <key>ninput</key>
<value>1</value>
</param>
<param>
- <key>color6</key>
- <value>"red"</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>style6</key>
+ <key>minoutbuf</key>
<value>0</value>
</param>
<param>
- <key>marker6</key>
- <value>0</value>
+ <key>noutput</key>
+ <value>1512</value>
</param>
+ </block>
+ <block>
+ <key>dtv_dvbt_map</key>
<param>
- <key>alpha6</key>
- <value>1.0</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>label7</key>
+ <key>comment</key>
<value></value>
</param>
<param>
- <key>width7</key>
+ <key>constellation</key>
+ <value>64qam</value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(368, 192)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>180</value>
+ </param>
+ <param>
+ <key>gain</key>
<value>1</value>
</param>
<param>
- <key>color7</key>
- <value>"red"</value>
+ <key>hierarchy</key>
+ <value>nh</value>
</param>
<param>
- <key>style7</key>
+ <key>id</key>
+ <value>dtv_dvbt_map_0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
<value>0</value>
</param>
<param>
- <key>marker7</key>
+ <key>minoutbuf</key>
<value>0</value>
</param>
<param>
- <key>alpha7</key>
- <value>1.0</value>
+ <key>transmission_mode</key>
+ <value>T2k</value>
</param>
+ </block>
+ <block>
+ <key>dtv_dvbt_reed_solomon_enc</key>
<param>
- <key>label8</key>
+ <key>alias</key>
<value></value>
</param>
<param>
- <key>width8</key>
- <value>1</value>
+ <key>blocks</key>
+ <value>8</value>
</param>
<param>
- <key>color8</key>
- <value>"red"</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
- <key>style8</key>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>gfpoly</key>
+ <value>0x11d</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(544, 24)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
<value>0</value>
</param>
<param>
- <key>marker8</key>
+ <key>id</key>
+ <value>dtv_dvbt_reed_solomon_enc_0</value>
+ </param>
+ <param>
+ <key>k</key>
+ <value>239</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
<value>0</value>
</param>
<param>
- <key>alpha8</key>
- <value>1.0</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>label9</key>
- <value></value>
+ <key>n</key>
+ <value>255</value>
</param>
<param>
- <key>width9</key>
- <value>1</value>
+ <key>s</key>
+ <value>51</value>
</param>
<param>
- <key>color9</key>
- <value>"red"</value>
+ <key>m</key>
+ <value>8</value>
</param>
<param>
- <key>style9</key>
- <value>0</value>
+ <key>p</key>
+ <value>2</value>
</param>
<param>
- <key>marker9</key>
+ <key>t</key>
+ <value>8</value>
+ </param>
+ </block>
+ <block>
+ <key>dtv_dvbt_reference_signals</key>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>cell_id</key>
<value>0</value>
</param>
<param>
- <key>alpha9</key>
- <value>1.0</value>
+ <key>code_rate_hp</key>
+ <value>C2_3</value>
</param>
<param>
- <key>label10</key>
+ <key>code_rate_lp</key>
+ <value>C2_3</value>
+ </param>
+ <param>
+ <key>comment</key>
<value></value>
</param>
<param>
- <key>width10</key>
- <value>1</value>
+ <key>constellation</key>
+ <value>64qam</value>
</param>
<param>
- <key>color10</key>
- <value>"red"</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>style10</key>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(48, 156)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>180</value>
+ </param>
+ <param>
+ <key>guard_interval</key>
+ <value>GI_1_32</value>
+ </param>
+ <param>
+ <key>hierarchy</key>
+ <value>nh</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>dtv_dvbt_reference_signals_0</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>complex</value>
+ </param>
+ <param>
+ <key>include_cell_id</key>
+ <value>call_id_yes</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
<value>0</value>
</param>
<param>
- <key>marker10</key>
+ <key>minoutbuf</key>
<value>0</value>
</param>
<param>
- <key>alpha10</key>
- <value>1.0</value>
+ <key>transmission_mode</key>
+ <value>T2k</value>
</param>
+ </block>
+ <block>
+ <key>dtv_dvbt_symbol_inner_interleaver</key>
<param>
<key>alias</key>
<value></value>
</param>
<param>
- <key>affinity</key>
+ <key>comment</key>
<value></value>
</param>
<param>
- <key>comment</key>
+ <key>affinity</key>
<value></value>
</param>
<param>
+ <key>direction</key>
+ <value>Interleave</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(360, 555)</value>
+ <value>(672, 204)</value>
</param>
<param>
<key>_rotation</key>
+ <value>180</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>dtv_dvbt_symbol_inner_interleaver_0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
<value>0</value>
</param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>transmission_mode</key>
+ <value>T2k</value>
+ </param>
</block>
<block>
- <key>blocks_vector_to_stream</key>
+ <key>fft_vxx</key>
<param>
- <key>id</key>
- <value>blocks_vector_to_stream_0</value>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
+ <key>fft_size</key>
+ <value>2048</value>
+ </param>
+ <param>
+ <key>forward</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(88, 392)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>fft_vxx_0</value>
+ </param>
+ <param>
<key>type</key>
<value>complex</value>
</param>
<param>
- <key>num_items</key>
- <value>2048</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>vlen</key>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>nthreads</key>
<value>1</value>
</param>
<param>
+ <key>shift</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>window</key>
+ <value>window.rectangular(2048)</value>
+ </param>
+ </block>
+ <block>
+ <key>osmosdr_sink</key>
+ <param>
<key>alias</key>
<value></value>
</param>
<param>
- <key>affinity</key>
+ <key>ant0</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
+ <key>bb_gain0</key>
+ <value>vga1_gain</value>
+ </param>
+ <param>
+ <key>bw0</key>
+ <value>8750000</value>
+ </param>
+ <param>
+ <key>corr0</key>
<value>0</value>
</param>
<param>
- <key>maxoutbuf</key>
+ <key>freq0</key>
+ <value>center_freq</value>
+ </param>
+ <param>
+ <key>if_gain0</key>
<value>0</value>
</param>
<param>
- <key>comment</key>
+ <key>gain0</key>
+ <value>vga2_gain</value>
+ </param>
+ <param>
+ <key>ant10</key>
<value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(120, 563)</value>
+ <key>bb_gain10</key>
+ <value>20</value>
</param>
<param>
- <key>_rotation</key>
+ <key>bw10</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>dtv_dvbt_energy_dispersal</key>
<param>
- <key>id</key>
- <value>dtv_dvbt_energy_dispersal_0</value>
+ <key>corr10</key>
+ <value>0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>freq10</key>
+ <value>100e6</value>
</param>
<param>
- <key>nsize</key>
- <value>1</value>
+ <key>if_gain10</key>
+ <value>20</value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>gain10</key>
+ <value>10</value>
</param>
<param>
- <key>affinity</key>
+ <key>ant11</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
+ <key>bb_gain11</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>bw11</key>
<value>0</value>
</param>
<param>
- <key>maxoutbuf</key>
+ <key>corr11</key>
<value>0</value>
</param>
<param>
- <key>comment</key>
+ <key>freq11</key>
+ <value>100e6</value>
+ </param>
+ <param>
+ <key>if_gain11</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain11</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>ant12</key>
<value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(328, 96)</value>
+ <key>bb_gain12</key>
+ <value>20</value>
</param>
<param>
- <key>_rotation</key>
+ <key>bw12</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>dtv_dvbt_reed_solomon_enc</key>
<param>
- <key>id</key>
- <value>dtv_dvbt_reed_solomon_enc_0</value>
+ <key>corr12</key>
+ <value>0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>freq12</key>
+ <value>100e6</value>
</param>
<param>
- <key>p</key>
- <value>2</value>
+ <key>if_gain12</key>
+ <value>20</value>
</param>
<param>
- <key>m</key>
- <value>8</value>
+ <key>gain12</key>
+ <value>10</value>
</param>
<param>
- <key>gfpoly</key>
- <value>0x11d</value>
+ <key>ant13</key>
+ <value></value>
</param>
<param>
- <key>n</key>
- <value>255</value>
+ <key>bb_gain13</key>
+ <value>20</value>
</param>
<param>
- <key>k</key>
- <value>239</value>
+ <key>bw13</key>
+ <value>0</value>
</param>
<param>
- <key>t</key>
- <value>8</value>
+ <key>corr13</key>
+ <value>0</value>
</param>
<param>
- <key>s</key>
- <value>51</value>
+ <key>freq13</key>
+ <value>100e6</value>
</param>
<param>
- <key>blocks</key>
- <value>8</value>
+ <key>if_gain13</key>
+ <value>20</value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>gain13</key>
+ <value>10</value>
</param>
<param>
- <key>affinity</key>
+ <key>ant14</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
+ <key>bb_gain14</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>bw14</key>
<value>0</value>
</param>
<param>
- <key>maxoutbuf</key>
+ <key>corr14</key>
<value>0</value>
</param>
<param>
- <key>comment</key>
+ <key>freq14</key>
+ <value>100e6</value>
+ </param>
+ <param>
+ <key>if_gain14</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain14</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>ant15</key>
<value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(512, 43)</value>
+ <key>bb_gain15</key>
+ <value>20</value>
</param>
<param>
- <key>_rotation</key>
+ <key>bw15</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>dtv_dvbt_convolutional_interleaver</key>
<param>
- <key>id</key>
- <value>dtv_dvbt_convolutional_interleaver_0</value>
+ <key>corr15</key>
+ <value>0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>freq15</key>
+ <value>100e6</value>
</param>
<param>
- <key>blocks</key>
- <value>136</value>
+ <key>if_gain15</key>
+ <value>20</value>
</param>
<param>
- <key>I</key>
- <value>12</value>
+ <key>gain15</key>
+ <value>10</value>
</param>
<param>
- <key>M</key>
- <value>17</value>
+ <key>ant16</key>
+ <value></value>
</param>
<param>
- <key>alias</key>
+ <key>bb_gain16</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>bw16</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>corr16</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>freq16</key>
+ <value>100e6</value>
+ </param>
+ <param>
+ <key>if_gain16</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain16</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>ant17</key>
<value></value>
</param>
<param>
- <key>affinity</key>
+ <key>bb_gain17</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>bw17</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>corr17</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>freq17</key>
+ <value>100e6</value>
+ </param>
+ <param>
+ <key>if_gain17</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain17</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>ant18</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
+ <key>bb_gain18</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>bw18</key>
<value>0</value>
</param>
<param>
- <key>maxoutbuf</key>
+ <key>corr18</key>
<value>0</value>
</param>
<param>
- <key>comment</key>
+ <key>freq18</key>
+ <value>100e6</value>
+ </param>
+ <param>
+ <key>if_gain18</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain18</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>ant19</key>
<value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(736, 75)</value>
+ <key>bb_gain19</key>
+ <value>20</value>
</param>
<param>
- <key>_rotation</key>
+ <key>bw19</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>dtv_dvbt_inner_coder</key>
<param>
- <key>id</key>
- <value>dtv_dvbt_inner_coder_0</value>
+ <key>corr19</key>
+ <value>0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>freq19</key>
+ <value>100e6</value>
</param>
<param>
- <key>ninput</key>
- <value>1</value>
+ <key>if_gain19</key>
+ <value>20</value>
</param>
<param>
- <key>noutput</key>
- <value>1512</value>
+ <key>gain19</key>
+ <value>10</value>
</param>
<param>
- <key>constellation</key>
- <value>64qam</value>
+ <key>ant1</key>
+ <value></value>
</param>
<param>
- <key>hierarchy</key>
- <value>nh</value>
+ <key>bb_gain1</key>
+ <value>20</value>
</param>
<param>
- <key>code_rate</key>
- <value>C2_3</value>
+ <key>bw1</key>
+ <value>0</value>
</param>
<param>
- <key>alias</key>
+ <key>corr1</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>freq1</key>
+ <value>100e6</value>
+ </param>
+ <param>
+ <key>if_gain1</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain1</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>ant20</key>
<value></value>
</param>
<param>
- <key>affinity</key>
+ <key>bb_gain20</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>bw20</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>corr20</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>freq20</key>
+ <value>100e6</value>
+ </param>
+ <param>
+ <key>if_gain20</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain20</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>ant21</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
+ <key>bb_gain21</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>bw21</key>
<value>0</value>
</param>
<param>
- <key>maxoutbuf</key>
+ <key>corr21</key>
<value>0</value>
</param>
<param>
- <key>comment</key>
+ <key>freq21</key>
+ <value>100e6</value>
+ </param>
+ <param>
+ <key>if_gain21</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain21</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>ant22</key>
<value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(1000, 67)</value>
+ <key>bb_gain22</key>
+ <value>20</value>
</param>
<param>
- <key>_rotation</key>
+ <key>bw22</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>dtv_dvbt_map</key>
<param>
- <key>id</key>
- <value>dtv_dvbt_map_0</value>
+ <key>corr22</key>
+ <value>0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>freq22</key>
+ <value>100e6</value>
</param>
<param>
- <key>constellation</key>
- <value>64qam</value>
+ <key>if_gain22</key>
+ <value>20</value>
</param>
<param>
- <key>hierarchy</key>
- <value>nh</value>
+ <key>gain22</key>
+ <value>10</value>
</param>
<param>
- <key>transmission_mode</key>
- <value>T2k</value>
+ <key>ant23</key>
+ <value></value>
</param>
<param>
- <key>gain</key>
- <value>1</value>
+ <key>bb_gain23</key>
+ <value>20</value>
</param>
<param>
- <key>alias</key>
+ <key>bw23</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>corr23</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>freq23</key>
+ <value>100e6</value>
+ </param>
+ <param>
+ <key>if_gain23</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain23</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>ant24</key>
<value></value>
</param>
<param>
- <key>affinity</key>
+ <key>bb_gain24</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>bw24</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>corr24</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>freq24</key>
+ <value>100e6</value>
+ </param>
+ <param>
+ <key>if_gain24</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain24</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>ant25</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
+ <key>bb_gain25</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>bw25</key>
<value>0</value>
</param>
<param>
- <key>maxoutbuf</key>
+ <key>corr25</key>
<value>0</value>
</param>
<param>
- <key>comment</key>
+ <key>freq25</key>
+ <value>100e6</value>
+ </param>
+ <param>
+ <key>if_gain25</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain25</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>ant26</key>
<value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(344, 227)</value>
+ <key>bb_gain26</key>
+ <value>20</value>
</param>
<param>
- <key>_rotation</key>
- <value>180</value>
+ <key>bw26</key>
+ <value>0</value>
</param>
- </block>
- <block>
- <key>fft_vxx</key>
<param>
- <key>id</key>
- <value>fft_vxx_0</value>
+ <key>corr26</key>
+ <value>0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>freq26</key>
+ <value>100e6</value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
+ <key>if_gain26</key>
+ <value>20</value>
</param>
<param>
- <key>fft_size</key>
- <value>2048</value>
+ <key>gain26</key>
+ <value>10</value>
</param>
<param>
- <key>forward</key>
- <value>False</value>
+ <key>ant27</key>
+ <value></value>
</param>
<param>
- <key>window</key>
- <value>window.rectangular(2048)</value>
+ <key>bb_gain27</key>
+ <value>20</value>
</param>
<param>
- <key>shift</key>
- <value>True</value>
+ <key>bw27</key>
+ <value>0</value>
</param>
<param>
- <key>nthreads</key>
- <value>1</value>
+ <key>corr27</key>
+ <value>0</value>
</param>
<param>
- <key>alias</key>
+ <key>freq27</key>
+ <value>100e6</value>
+ </param>
+ <param>
+ <key>if_gain27</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain27</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>ant28</key>
<value></value>
</param>
<param>
- <key>affinity</key>
+ <key>bb_gain28</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>bw28</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>corr28</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>freq28</key>
+ <value>100e6</value>
+ </param>
+ <param>
+ <key>if_gain28</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain28</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>ant29</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
+ <key>bb_gain29</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>bw29</key>
<value>0</value>
</param>
<param>
- <key>maxoutbuf</key>
+ <key>corr29</key>
<value>0</value>
</param>
<param>
- <key>comment</key>
+ <key>freq29</key>
+ <value>100e6</value>
+ </param>
+ <param>
+ <key>if_gain29</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain29</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>ant2</key>
<value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(64, 403)</value>
+ <key>bb_gain2</key>
+ <value>20</value>
</param>
<param>
- <key>_rotation</key>
+ <key>bw2</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>blocks_file_source</key>
<param>
- <key>id</key>
- <value>blocks_file_source_0</value>
+ <key>corr2</key>
+ <value>0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>freq2</key>
+ <value>100e6</value>
</param>
<param>
- <key>file</key>
- <value>/run/shm/advtest.ts</value>
+ <key>if_gain2</key>
+ <value>20</value>
</param>
<param>
- <key>type</key>
- <value>byte</value>
+ <key>gain2</key>
+ <value>10</value>
</param>
<param>
- <key>repeat</key>
- <value>True</value>
+ <key>ant30</key>
+ <value></value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>bb_gain30</key>
+ <value>20</value>
</param>
<param>
- <key>alias</key>
+ <key>bw30</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>corr30</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>freq30</key>
+ <value>100e6</value>
+ </param>
+ <param>
+ <key>if_gain30</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain30</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>ant31</key>
<value></value>
</param>
<param>
- <key>affinity</key>
+ <key>bb_gain31</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>bw31</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>corr31</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>freq31</key>
+ <value>100e6</value>
+ </param>
+ <param>
+ <key>if_gain31</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain31</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>ant3</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
+ <key>bb_gain3</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>bw3</key>
<value>0</value>
</param>
<param>
- <key>maxoutbuf</key>
+ <key>corr3</key>
<value>0</value>
</param>
<param>
- <key>comment</key>
+ <key>freq3</key>
+ <value>100e6</value>
+ </param>
+ <param>
+ <key>if_gain3</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain3</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>ant4</key>
<value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(112, 83)</value>
+ <key>bb_gain4</key>
+ <value>20</value>
</param>
<param>
- <key>_rotation</key>
+ <key>bw4</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>uhd_usrp_sink</key>
<param>
- <key>id</key>
- <value>uhd_usrp_sink_0</value>
+ <key>corr4</key>
+ <value>0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>freq4</key>
+ <value>100e6</value>
</param>
<param>
- <key>type</key>
- <value>fc32</value>
+ <key>if_gain4</key>
+ <value>20</value>
</param>
<param>
- <key>otw</key>
+ <key>gain4</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>ant5</key>
<value></value>
</param>
<param>
- <key>stream_args</key>
+ <key>bb_gain5</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>bw5</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>corr5</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>freq5</key>
+ <value>100e6</value>
+ </param>
+ <param>
+ <key>if_gain5</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain5</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>ant6</key>
<value></value>
</param>
<param>
- <key>stream_chans</key>
- <value>[]</value>
+ <key>bb_gain6</key>
+ <value>20</value>
</param>
<param>
- <key>dev_addr</key>
- <value>"send_frame_size=65536,num_send_frames=128,master_clock_rate=" + str(samp_rate*4)</value>
+ <key>bw6</key>
+ <value>0</value>
</param>
<param>
- <key>dev_args</key>
- <value>""</value>
+ <key>corr6</key>
+ <value>0</value>
</param>
<param>
- <key>sync</key>
+ <key>freq6</key>
+ <value>100e6</value>
+ </param>
+ <param>
+ <key>if_gain6</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain6</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>ant7</key>
<value></value>
</param>
<param>
- <key>clock_rate</key>
- <value>0.0</value>
+ <key>bb_gain7</key>
+ <value>20</value>
</param>
<param>
- <key>num_mboards</key>
- <value>1</value>
+ <key>bw7</key>
+ <value>0</value>
</param>
<param>
- <key>clock_source0</key>
+ <key>corr7</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>freq7</key>
+ <value>100e6</value>
+ </param>
+ <param>
+ <key>if_gain7</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain7</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>ant8</key>
<value></value>
</param>
<param>
- <key>time_source0</key>
+ <key>bb_gain8</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>bw8</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>corr8</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>freq8</key>
+ <value>100e6</value>
+ </param>
+ <param>
+ <key>if_gain8</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain8</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>ant9</key>
<value></value>
</param>
<param>
- <key>sd_spec0</key>
+ <key>bb_gain9</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>bw9</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>corr9</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>freq9</key>
+ <value>100e6</value>
+ </param>
+ <param>
+ <key>if_gain9</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain9</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>comment</key>
<value></value>
</param>
<param>
- <key>clock_source1</key>
+ <key>affinity</key>
<value></value>
</param>
<param>
- <key>time_source1</key>
+ <key>args</key>
+ <value>bladerf=0,buffers=128,buflen=32768</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(984, 284)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>osmosdr_sink_0</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>fc32</value>
+ </param>
+ <param>
+ <key>clock_source0</key>
<value></value>
</param>
<param>
- <key>sd_spec1</key>
+ <key>time_source0</key>
<value></value>
</param>
<param>
- <key>clock_source2</key>
+ <key>clock_source1</key>
<value></value>
</param>
<param>
- <key>time_source2</key>
+ <key>time_source1</key>
<value></value>
</param>
<param>
- <key>sd_spec2</key>
+ <key>clock_source2</key>
<value></value>
</param>
<param>
- <key>clock_source3</key>
+ <key>time_source2</key>
<value></value>
</param>
<param>
- <key>time_source3</key>
+ <key>clock_source3</key>
<value></value>
</param>
<param>
- <key>sd_spec3</key>
+ <key>time_source3</key>
<value></value>
</param>
<param>
@@ -1025,266 +2026,420 @@
<value></value>
</param>
<param>
- <key>sd_spec4</key>
+ <key>clock_source5</key>
<value></value>
</param>
<param>
- <key>clock_source5</key>
+ <key>time_source5</key>
<value></value>
</param>
<param>
- <key>time_source5</key>
+ <key>clock_source6</key>
<value></value>
</param>
<param>
- <key>sd_spec5</key>
+ <key>time_source6</key>
<value></value>
</param>
<param>
- <key>clock_source6</key>
+ <key>clock_source7</key>
<value></value>
</param>
<param>
- <key>time_source6</key>
+ <key>time_source7</key>
<value></value>
</param>
<param>
- <key>sd_spec6</key>
+ <key>nchan</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>num_mboards</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>sample_rate</key>
+ <value>samp_rate</value>
+ </param>
+ <param>
+ <key>sync</key>
<value></value>
</param>
+ </block>
+ <block>
+ <key>qtgui_const_sink_x</key>
<param>
- <key>clock_source7</key>
+ <key>autoscale</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>axislabels</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>alias</key>
<value></value>
</param>
<param>
- <key>time_source7</key>
+ <key>comment</key>
<value></value>
</param>
<param>
- <key>sd_spec7</key>
+ <key>affinity</key>
<value></value>
</param>
<param>
- <key>nchan</key>
- <value>1</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>samp_rate</key>
- <value>samp_rate</value>
+ <key>_coordinate</key>
+ <value>(360, 324)</value>
</param>
<param>
- <key>center_freq0</key>
- <value>429000000</value>
+ <key>gui_hint</key>
+ <value></value>
</param>
<param>
- <key>gain0</key>
- <value>50</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>norm_gain0</key>
+ <key>grid</key>
<value>False</value>
</param>
<param>
- <key>ant0</key>
+ <key>id</key>
+ <value>qtgui_const_sink_x_0</value>
+ </param>
+ <param>
+ <key>legend</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>alpha1</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>color1</key>
+ <value>"blue"</value>
+ </param>
+ <param>
+ <key>label1</key>
<value></value>
</param>
<param>
- <key>bw0</key>
+ <key>marker1</key>
<value>0</value>
</param>
<param>
- <key>center_freq1</key>
+ <key>style1</key>
<value>0</value>
</param>
<param>
- <key>gain1</key>
- <value>0</value>
+ <key>width1</key>
+ <value>1</value>
</param>
<param>
- <key>norm_gain1</key>
- <value>False</value>
+ <key>alpha10</key>
+ <value>1.0</value>
</param>
<param>
- <key>ant1</key>
+ <key>color10</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>label10</key>
<value></value>
</param>
<param>
- <key>bw1</key>
+ <key>marker10</key>
<value>0</value>
</param>
<param>
- <key>center_freq2</key>
+ <key>style10</key>
<value>0</value>
</param>
<param>
- <key>gain2</key>
- <value>0</value>
+ <key>width10</key>
+ <value>1</value>
</param>
<param>
- <key>norm_gain2</key>
- <value>False</value>
+ <key>alpha2</key>
+ <value>1.0</value>
</param>
<param>
- <key>ant2</key>
+ <key>color2</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>label2</key>
<value></value>
</param>
<param>
- <key>bw2</key>
+ <key>marker2</key>
<value>0</value>
</param>
<param>
- <key>center_freq3</key>
+ <key>style2</key>
<value>0</value>
</param>
<param>
- <key>gain3</key>
- <value>0</value>
+ <key>width2</key>
+ <value>1</value>
</param>
<param>
- <key>norm_gain3</key>
- <value>False</value>
+ <key>alpha3</key>
+ <value>1.0</value>
</param>
<param>
- <key>ant3</key>
+ <key>color3</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>label3</key>
<value></value>
</param>
<param>
- <key>bw3</key>
+ <key>marker3</key>
<value>0</value>
</param>
<param>
- <key>center_freq4</key>
+ <key>style3</key>
<value>0</value>
</param>
<param>
- <key>gain4</key>
- <value>0</value>
+ <key>width3</key>
+ <value>1</value>
</param>
<param>
- <key>norm_gain4</key>
- <value>False</value>
+ <key>alpha4</key>
+ <value>1.0</value>
</param>
<param>
- <key>ant4</key>
+ <key>color4</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>label4</key>
<value></value>
</param>
<param>
- <key>bw4</key>
+ <key>marker4</key>
<value>0</value>
</param>
<param>
- <key>center_freq5</key>
+ <key>style4</key>
<value>0</value>
</param>
<param>
- <key>gain5</key>
- <value>0</value>
+ <key>width4</key>
+ <value>1</value>
</param>
<param>
- <key>norm_gain5</key>
- <value>False</value>
+ <key>alpha5</key>
+ <value>1.0</value>
</param>
<param>
- <key>ant5</key>
+ <key>color5</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>label5</key>
<value></value>
</param>
<param>
- <key>bw5</key>
+ <key>marker5</key>
<value>0</value>
</param>
<param>
- <key>center_freq6</key>
+ <key>style5</key>
<value>0</value>
</param>
<param>
- <key>gain6</key>
- <value>0</value>
+ <key>width5</key>
+ <value>1</value>
</param>
<param>
- <key>norm_gain6</key>
- <value>False</value>
+ <key>alpha6</key>
+ <value>1.0</value>
</param>
<param>
- <key>ant6</key>
+ <key>color6</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>label6</key>
<value></value>
</param>
<param>
- <key>bw6</key>
+ <key>marker6</key>
<value>0</value>
</param>
<param>
- <key>center_freq7</key>
+ <key>style6</key>
<value>0</value>
</param>
<param>
- <key>gain7</key>
- <value>0</value>
+ <key>width6</key>
+ <value>1</value>
</param>
<param>
- <key>norm_gain7</key>
- <value>False</value>
+ <key>alpha7</key>
+ <value>1.0</value>
</param>
<param>
- <key>ant7</key>
+ <key>color7</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>label7</key>
<value></value>
</param>
<param>
- <key>bw7</key>
+ <key>marker7</key>
<value>0</value>
</param>
<param>
- <key>center_freq8</key>
+ <key>style7</key>
<value>0</value>
</param>
<param>
- <key>gain8</key>
- <value>0</value>
+ <key>width7</key>
+ <value>1</value>
</param>
<param>
- <key>norm_gain8</key>
- <value>False</value>
+ <key>alpha8</key>
+ <value>1.0</value>
</param>
<param>
- <key>ant8</key>
+ <key>color8</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>label8</key>
<value></value>
</param>
<param>
- <key>bw8</key>
+ <key>marker8</key>
<value>0</value>
</param>
<param>
- <key>center_freq9</key>
+ <key>style8</key>
<value>0</value>
</param>
<param>
- <key>gain9</key>
- <value>0</value>
+ <key>width8</key>
+ <value>1</value>
</param>
<param>
- <key>norm_gain9</key>
- <value>False</value>
+ <key>alpha9</key>
+ <value>1.0</value>
</param>
<param>
- <key>ant9</key>
+ <key>color9</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>label9</key>
<value></value>
</param>
<param>
- <key>bw9</key>
+ <key>marker9</key>
<value>0</value>
</param>
<param>
- <key>center_freq10</key>
+ <key>style9</key>
<value>0</value>
</param>
<param>
- <key>gain10</key>
+ <key>width9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>name</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>nconnections</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>size</key>
+ <value>1024</value>
+ </param>
+ <param>
+ <key>tr_chan</key>
<value>0</value>
</param>
<param>
- <key>norm_gain10</key>
+ <key>tr_level</key>
+ <value>0.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_tag</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>complex</value>
+ </param>
+ <param>
+ <key>update_time</key>
+ <value>0.10</value>
+ </param>
+ <param>
+ <key>xmax</key>
+ <value>2</value>
+ </param>
+ <param>
+ <key>xmin</key>
+ <value>-2</value>
+ </param>
+ <param>
+ <key>ymax</key>
+ <value>2</value>
+ </param>
+ <param>
+ <key>ymin</key>
+ <value>-2</value>
+ </param>
+ </block>
+ <block>
+ <key>uhd_usrp_sink</key>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>ant0</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw0</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq0</key>
+ <value>center_freq</value>
+ </param>
+ <param>
+ <key>norm_gain0</key>
<value>False</value>
</param>
<param>
+ <key>gain0</key>
+ <value>tx_gain</value>
+ </param>
+ <param>
<key>ant10</key>
<value></value>
</param>
@@ -1293,16 +2448,16 @@
<value>0</value>
</param>
<param>
- <key>center_freq11</key>
+ <key>center_freq10</key>
<value>0</value>
</param>
<param>
- <key>gain11</key>
- <value>0</value>
+ <key>norm_gain10</key>
+ <value>False</value>
</param>
<param>
- <key>norm_gain11</key>
- <value>False</value>
+ <key>gain10</key>
+ <value>0</value>
</param>
<param>
<key>ant11</key>
@@ -1313,16 +2468,16 @@
<value>0</value>
</param>
<param>
- <key>center_freq12</key>
+ <key>center_freq11</key>
<value>0</value>
</param>
<param>
- <key>gain12</key>
- <value>0</value>
+ <key>norm_gain11</key>
+ <value>False</value>
</param>
<param>
- <key>norm_gain12</key>
- <value>False</value>
+ <key>gain11</key>
+ <value>0</value>
</param>
<param>
<key>ant12</key>
@@ -1333,16 +2488,16 @@
<value>0</value>
</param>
<param>
- <key>center_freq13</key>
+ <key>center_freq12</key>
<value>0</value>
</param>
<param>
- <key>gain13</key>
- <value>0</value>
+ <key>norm_gain12</key>
+ <value>False</value>
</param>
<param>
- <key>norm_gain13</key>
- <value>False</value>
+ <key>gain12</key>
+ <value>0</value>
</param>
<param>
<key>ant13</key>
@@ -1353,16 +2508,16 @@
<value>0</value>
</param>
<param>
- <key>center_freq14</key>
+ <key>center_freq13</key>
<value>0</value>
</param>
<param>
- <key>gain14</key>
- <value>0</value>
+ <key>norm_gain13</key>
+ <value>False</value>
</param>
<param>
- <key>norm_gain14</key>
- <value>False</value>
+ <key>gain13</key>
+ <value>0</value>
</param>
<param>
<key>ant14</key>
@@ -1373,16 +2528,16 @@
<value>0</value>
</param>
<param>
- <key>center_freq15</key>
+ <key>center_freq14</key>
<value>0</value>
</param>
<param>
- <key>gain15</key>
- <value>0</value>
+ <key>norm_gain14</key>
+ <value>False</value>
</param>
<param>
- <key>norm_gain15</key>
- <value>False</value>
+ <key>gain14</key>
+ <value>0</value>
</param>
<param>
<key>ant15</key>
@@ -1393,16 +2548,16 @@
<value>0</value>
</param>
<param>
- <key>center_freq16</key>
+ <key>center_freq15</key>
<value>0</value>
</param>
<param>
- <key>gain16</key>
- <value>0</value>
+ <key>norm_gain15</key>
+ <value>False</value>
</param>
<param>
- <key>norm_gain16</key>
- <value>False</value>
+ <key>gain15</key>
+ <value>0</value>
</param>
<param>
<key>ant16</key>
@@ -1413,16 +2568,16 @@
<value>0</value>
</param>
<param>
- <key>center_freq17</key>
+ <key>center_freq16</key>
<value>0</value>
</param>
<param>
- <key>gain17</key>
- <value>0</value>
+ <key>norm_gain16</key>
+ <value>False</value>
</param>
<param>
- <key>norm_gain17</key>
- <value>False</value>
+ <key>gain16</key>
+ <value>0</value>
</param>
<param>
<key>ant17</key>
@@ -1433,16 +2588,16 @@
<value>0</value>
</param>
<param>
- <key>center_freq18</key>
+ <key>center_freq17</key>
<value>0</value>
</param>
<param>
- <key>gain18</key>
- <value>0</value>
+ <key>norm_gain17</key>
+ <value>False</value>
</param>
<param>
- <key>norm_gain18</key>
- <value>False</value>
+ <key>gain17</key>
+ <value>0</value>
</param>
<param>
<key>ant18</key>
@@ -1453,16 +2608,16 @@
<value>0</value>
</param>
<param>
- <key>center_freq19</key>
+ <key>center_freq18</key>
<value>0</value>
</param>
<param>
- <key>gain19</key>
- <value>0</value>
+ <key>norm_gain18</key>
+ <value>False</value>
</param>
<param>
- <key>norm_gain19</key>
- <value>False</value>
+ <key>gain18</key>
+ <value>0</value>
</param>
<param>
<key>ant19</key>
@@ -1473,18 +2628,38 @@
<value>0</value>
</param>
<param>
- <key>center_freq20</key>
+ <key>center_freq19</key>
<value>0</value>
</param>
<param>
- <key>gain20</key>
+ <key>norm_gain19</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain19</key>
<value>0</value>
</param>
<param>
- <key>norm_gain20</key>
+ <key>ant1</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw1</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq1</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>norm_gain1</key>
<value>False</value>
</param>
<param>
+ <key>gain1</key>
+ <value>0</value>
+ </param>
+ <param>
<key>ant20</key>
<value></value>
</param>
@@ -1493,16 +2668,16 @@
<value>0</value>
</param>
<param>
- <key>center_freq21</key>
+ <key>center_freq20</key>
<value>0</value>
</param>
<param>
- <key>gain21</key>
- <value>0</value>
+ <key>norm_gain20</key>
+ <value>False</value>
</param>
<param>
- <key>norm_gain21</key>
- <value>False</value>
+ <key>gain20</key>
+ <value>0</value>
</param>
<param>
<key>ant21</key>
@@ -1513,16 +2688,16 @@
<value>0</value>
</param>
<param>
- <key>center_freq22</key>
+ <key>center_freq21</key>
<value>0</value>
</param>
<param>
- <key>gain22</key>
- <value>0</value>
+ <key>norm_gain21</key>
+ <value>False</value>
</param>
<param>
- <key>norm_gain22</key>
- <value>False</value>
+ <key>gain21</key>
+ <value>0</value>
</param>
<param>
<key>ant22</key>
@@ -1533,16 +2708,16 @@
<value>0</value>
</param>
<param>
- <key>center_freq23</key>
+ <key>center_freq22</key>
<value>0</value>
</param>
<param>
- <key>gain23</key>
- <value>0</value>
+ <key>norm_gain22</key>
+ <value>False</value>
</param>
<param>
- <key>norm_gain23</key>
- <value>False</value>
+ <key>gain22</key>
+ <value>0</value>
</param>
<param>
<key>ant23</key>
@@ -1553,16 +2728,16 @@
<value>0</value>
</param>
<param>
- <key>center_freq24</key>
+ <key>center_freq23</key>
<value>0</value>
</param>
<param>
- <key>gain24</key>
- <value>0</value>
+ <key>norm_gain23</key>
+ <value>False</value>
</param>
<param>
- <key>norm_gain24</key>
- <value>False</value>
+ <key>gain23</key>
+ <value>0</value>
</param>
<param>
<key>ant24</key>
@@ -1573,16 +2748,16 @@
<value>0</value>
</param>
<param>
- <key>center_freq25</key>
+ <key>center_freq24</key>
<value>0</value>
</param>
<param>
- <key>gain25</key>
- <value>0</value>
+ <key>norm_gain24</key>
+ <value>False</value>
</param>
<param>
- <key>norm_gain25</key>
- <value>False</value>
+ <key>gain24</key>
+ <value>0</value>
</param>
<param>
<key>ant25</key>
@@ -1593,16 +2768,16 @@
<value>0</value>
</param>
<param>
- <key>center_freq26</key>
+ <key>center_freq25</key>
<value>0</value>
</param>
<param>
- <key>gain26</key>
- <value>0</value>
+ <key>norm_gain25</key>
+ <value>False</value>
</param>
<param>
- <key>norm_gain26</key>
- <value>False</value>
+ <key>gain25</key>
+ <value>0</value>
</param>
<param>
<key>ant26</key>
@@ -1613,16 +2788,16 @@
<value>0</value>
</param>
<param>
- <key>center_freq27</key>
+ <key>center_freq26</key>
<value>0</value>
</param>
<param>
- <key>gain27</key>
- <value>0</value>
+ <key>norm_gain26</key>
+ <value>False</value>
</param>
<param>
- <key>norm_gain27</key>
- <value>False</value>
+ <key>gain26</key>
+ <value>0</value>
</param>
<param>
<key>ant27</key>
@@ -1633,16 +2808,16 @@
<value>0</value>
</param>
<param>
- <key>center_freq28</key>
+ <key>center_freq27</key>
<value>0</value>
</param>
<param>
- <key>gain28</key>
- <value>0</value>
+ <key>norm_gain27</key>
+ <value>False</value>
</param>
<param>
- <key>norm_gain28</key>
- <value>False</value>
+ <key>gain27</key>
+ <value>0</value>
</param>
<param>
<key>ant28</key>
@@ -1653,16 +2828,16 @@
<value>0</value>
</param>
<param>
- <key>center_freq29</key>
+ <key>center_freq28</key>
<value>0</value>
</param>
<param>
- <key>gain29</key>
- <value>0</value>
+ <key>norm_gain28</key>
+ <value>False</value>
</param>
<param>
- <key>norm_gain29</key>
- <value>False</value>
+ <key>gain28</key>
+ <value>0</value>
</param>
<param>
<key>ant29</key>
@@ -1673,18 +2848,38 @@
<value>0</value>
</param>
<param>
- <key>center_freq30</key>
+ <key>center_freq29</key>
<value>0</value>
</param>
<param>
- <key>gain30</key>
+ <key>norm_gain29</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain29</key>
<value>0</value>
</param>
<param>
- <key>norm_gain30</key>
+ <key>ant2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw2</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq2</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>norm_gain2</key>
<value>False</value>
</param>
<param>
+ <key>gain2</key>
+ <value>0</value>
+ </param>
+ <param>
<key>ant30</key>
<value></value>
</param>
@@ -1693,16 +2888,16 @@
<value>0</value>
</param>
<param>
- <key>center_freq31</key>
+ <key>center_freq30</key>
<value>0</value>
</param>
<param>
- <key>gain31</key>
- <value>0</value>
+ <key>norm_gain30</key>
+ <value>False</value>
</param>
<param>
- <key>norm_gain31</key>
- <value>False</value>
+ <key>gain30</key>
+ <value>0</value>
</param>
<param>
<key>ant31</key>
@@ -1713,333 +2908,385 @@
<value>0</value>
</param>
<param>
- <key>len_tag_name</key>
- <value></value>
+ <key>center_freq31</key>
+ <value>0</value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>norm_gain31</key>
+ <value>False</value>
</param>
<param>
- <key>affinity</key>
- <value></value>
+ <key>gain31</key>
+ <value>0</value>
</param>
<param>
- <key>comment</key>
+ <key>ant3</key>
<value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(984, 387)</value>
+ <key>bw3</key>
+ <value>0</value>
</param>
<param>
- <key>_rotation</key>
+ <key>center_freq3</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>digital_ofdm_cyclic_prefixer</key>
<param>
- <key>id</key>
- <value>digital_ofdm_cyclic_prefixer_0</value>
+ <key>norm_gain3</key>
+ <value>False</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>gain3</key>
+ <value>0</value>
</param>
<param>
- <key>input_size</key>
- <value>2048</value>
+ <key>ant4</key>
+ <value></value>
</param>
<param>
- <key>cp_len</key>
- <value>64</value>
+ <key>bw4</key>
+ <value>0</value>
</param>
<param>
- <key>rolloff</key>
+ <key>center_freq4</key>
<value>0</value>
</param>
<param>
- <key>tagname</key>
- <value></value>
+ <key>norm_gain4</key>
+ <value>False</value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>gain4</key>
+ <value>0</value>
</param>
<param>
- <key>affinity</key>
+ <key>ant5</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
+ <key>bw5</key>
<value>0</value>
</param>
<param>
- <key>maxoutbuf</key>
+ <key>center_freq5</key>
<value>0</value>
</param>
<param>
- <key>comment</key>
+ <key>norm_gain5</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain5</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant6</key>
<value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(392, 419)</value>
+ <key>bw6</key>
+ <value>0</value>
</param>
<param>
- <key>_rotation</key>
+ <key>center_freq6</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>norm_gain6</key>
+ <value>False</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>gain6</key>
+ <value>0</value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
+ <key>ant7</key>
+ <value></value>
</param>
<param>
- <key>const</key>
- <value>0.0022097087</value>
+ <key>bw7</key>
+ <value>0</value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>center_freq7</key>
+ <value>0</value>
</param>
<param>
- <key>alias</key>
+ <key>norm_gain7</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain7</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant8</key>
<value></value>
</param>
<param>
- <key>affinity</key>
+ <key>bw8</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq8</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>norm_gain8</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain8</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant9</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
+ <key>bw9</key>
<value>0</value>
</param>
<param>
- <key>maxoutbuf</key>
+ <key>center_freq9</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>norm_gain9</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain9</key>
<value>0</value>
</param>
<param>
+ <key>clock_rate</key>
+ <value>0.0</value>
+ </param>
+ <param>
<key>comment</key>
<value></value>
</param>
<param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>dev_addr</key>
+ <value>"send_frame_size=65536,num_send_frames=128,master_clock_rate=" + str(samp_rate*4)</value>
+ </param>
+ <param>
+ <key>dev_args</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(664, 435)</value>
+ <value>(992, 448)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>options</key>
<param>
<key>id</key>
- <value>dvbt_tx_demo</value>
+ <value>uhd_usrp_sink_0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>type</key>
+ <value>fc32</value>
</param>
<param>
- <key>title</key>
+ <key>clock_source0</key>
<value></value>
</param>
<param>
- <key>author</key>
+ <key>sd_spec0</key>
<value></value>
</param>
<param>
- <key>description</key>
+ <key>time_source0</key>
<value></value>
</param>
<param>
- <key>window_size</key>
- <value>1280, 1024</value>
+ <key>clock_source1</key>
+ <value></value>
</param>
<param>
- <key>generate_options</key>
- <value>qt_gui</value>
+ <key>sd_spec1</key>
+ <value></value>
</param>
<param>
- <key>category</key>
- <value>Custom</value>
+ <key>time_source1</key>
+ <value></value>
</param>
<param>
- <key>run_options</key>
- <value>prompt</value>
+ <key>clock_source2</key>
+ <value></value>
</param>
<param>
- <key>run</key>
- <value>True</value>
+ <key>sd_spec2</key>
+ <value></value>
</param>
<param>
- <key>max_nouts</key>
- <value>0</value>
+ <key>time_source2</key>
+ <value></value>
</param>
<param>
- <key>realtime_scheduling</key>
+ <key>clock_source3</key>
<value></value>
</param>
<param>
- <key>thread_safe_setters</key>
+ <key>sd_spec3</key>
<value></value>
</param>
<param>
- <key>alias</key>
+ <key>time_source3</key>
<value></value>
</param>
<param>
- <key>comment</key>
+ <key>clock_source4</key>
<value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(8, 11)</value>
+ <key>sd_spec4</key>
+ <value></value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>time_source4</key>
+ <value></value>
</param>
- </block>
- <block>
- <key>dtv_dvbt_reference_signals</key>
<param>
- <key>id</key>
- <value>dtv_dvbt_reference_signals_0</value>
+ <key>clock_source5</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>sd_spec5</key>
+ <value></value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
+ <key>time_source5</key>
+ <value></value>
</param>
<param>
- <key>constellation</key>
- <value>64qam</value>
+ <key>clock_source6</key>
+ <value></value>
</param>
<param>
- <key>hierarchy</key>
- <value>nh</value>
+ <key>sd_spec6</key>
+ <value></value>
</param>
<param>
- <key>code_rate_hp</key>
- <value>C2_3</value>
+ <key>time_source6</key>
+ <value></value>
</param>
<param>
- <key>code_rate_lp</key>
- <value>C2_3</value>
+ <key>clock_source7</key>
+ <value></value>
</param>
<param>
- <key>guard_interval</key>
- <value>GI_1_32</value>
+ <key>sd_spec7</key>
+ <value></value>
</param>
<param>
- <key>transmission_mode</key>
- <value>T2k</value>
+ <key>time_source7</key>
+ <value></value>
</param>
<param>
- <key>include_cell_id</key>
- <value>cell_ide_no</value>
+ <key>nchan</key>
+ <value>1</value>
</param>
<param>
- <key>cell_id</key>
- <value>0</value>
+ <key>num_mboards</key>
+ <value>1</value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>samp_rate</key>
+ <value>samp_rate</value>
</param>
<param>
- <key>affinity</key>
- <value></value>
+ <key>hide_cmd_port</key>
+ <value>False</value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>hide_lo_controls</key>
+ <value>True</value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>stream_args</key>
+ <value></value>
</param>
<param>
- <key>comment</key>
+ <key>stream_chans</key>
+ <value>[]</value>
+ </param>
+ <param>
+ <key>sync</key>
<value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(40, 187)</value>
+ <key>len_tag_name</key>
+ <value></value>
</param>
<param>
- <key>_rotation</key>
- <value>180</value>
+ <key>otw</key>
+ <value></value>
</param>
</block>
<connection>
- <source_block_id>digital_ofdm_cyclic_prefixer_0</source_block_id>
- <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
+ <source_block_id>blocks_file_source_0</source_block_id>
+ <sink_block_id>dtv_dvbt_energy_dispersal_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>fft_vxx_0</source_block_id>
- <sink_block_id>digital_ofdm_cyclic_prefixer_0</sink_block_id>
+ <source_block_id>blocks_multiply_const_xx_0</source_block_id>
+ <sink_block_id>osmosdr_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>
+ <source_block_id>blocks_multiply_const_xx_0</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>blocks_file_source_0</source_block_id>
- <sink_block_id>dtv_dvbt_energy_dispersal_0</sink_block_id>
+ <source_block_id>blocks_vector_to_stream_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>dtv_dvbt_energy_dispersal_0</source_block_id>
- <sink_block_id>dtv_dvbt_reed_solomon_enc_0</sink_block_id>
+ <source_block_id>digital_ofdm_cyclic_prefixer_0</source_block_id>
+ <sink_block_id>blocks_multiply_const_xx_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>dtv_dvbt_convolutional_interleaver_0</source_block_id>
- <sink_block_id>dtv_dvbt_inner_coder_0</sink_block_id>
+ <source_block_id>dtv_dvbt_bit_inner_interleaver_0</source_block_id>
+ <sink_block_id>dtv_dvbt_symbol_inner_interleaver_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>dtv_dvbt_inner_coder_0</source_block_id>
- <sink_block_id>dtv_dvbt_bit_inner_interleaver_0</sink_block_id>
+ <source_block_id>dtv_dvbt_convolutional_interleaver_0</source_block_id>
+ <sink_block_id>dtv_dvbt_inner_coder_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>dtv_dvbt_bit_inner_interleaver_0</source_block_id>
- <sink_block_id>dtv_dvbt_symbol_inner_interleaver_0</sink_block_id>
+ <source_block_id>dtv_dvbt_energy_dispersal_0</source_block_id>
+ <sink_block_id>dtv_dvbt_reed_solomon_enc_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>dtv_dvbt_symbol_inner_interleaver_0</source_block_id>
- <sink_block_id>dtv_dvbt_map_0</sink_block_id>
+ <source_block_id>dtv_dvbt_inner_coder_0</source_block_id>
+ <sink_block_id>dtv_dvbt_bit_inner_interleaver_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
@@ -2050,8 +3297,8 @@
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>dtv_dvbt_reference_signals_0</source_block_id>
- <sink_block_id>fft_vxx_0</sink_block_id>
+ <source_block_id>dtv_dvbt_reed_solomon_enc_0</source_block_id>
+ <sink_block_id>dtv_dvbt_convolutional_interleaver_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
@@ -2062,14 +3309,20 @@
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>blocks_vector_to_stream_0</source_block_id>
- <sink_block_id>qtgui_const_sink_x_0</sink_block_id>
+ <source_block_id>dtv_dvbt_reference_signals_0</source_block_id>
+ <sink_block_id>fft_vxx_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>dtv_dvbt_reed_solomon_enc_0</source_block_id>
- <sink_block_id>dtv_dvbt_convolutional_interleaver_0</sink_block_id>
+ <source_block_id>dtv_dvbt_symbol_inner_interleaver_0</source_block_id>
+ <sink_block_id>dtv_dvbt_map_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>fft_vxx_0</source_block_id>
+ <sink_block_id>digital_ofdm_cyclic_prefixer_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
diff --git a/gr-dtv/examples/dvbt_tx_8k.grc b/gr-dtv/examples/dvbt_tx_8k.grc
index 4cad688e29..f674035bcd 100644
--- a/gr-dtv/examples/dvbt_tx_8k.grc
+++ b/gr-dtv/examples/dvbt_tx_8k.grc
@@ -1,2045 +1,3292 @@
-<?xml version='1.0' encoding='ASCII'?>
-<?grc format='1' created='3.7.8'?>
+<?xml version='1.0' encoding='utf-8'?>
+<?grc format='1' created='3.7.11'?>
<flow_graph>
<timestamp>Thu Jan 16 23:00:58 2014</timestamp>
<block>
- <key>qtgui_const_sink_x</key>
+ <key>options</key>
<param>
- <key>id</key>
- <value>qtgui_const_sink_x_0</value>
+ <key>author</key>
+ <value></value>
+ </param>
+ <param>
+ <key>window_size</key>
+ <value>1280, 1024</value>
+ </param>
+ <param>
+ <key>category</key>
+ <value>Custom</value>
+ </param>
+ <param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>description</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
+ <key>_coordinate</key>
+ <value>(8, 12)</value>
</param>
<param>
- <key>name</key>
- <value>""</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>size</key>
- <value>1024</value>
+ <key>generate_options</key>
+ <value>qt_gui</value>
</param>
<param>
- <key>grid</key>
- <value>False</value>
+ <key>hier_block_src_path</key>
+ <value>.:</value>
</param>
<param>
- <key>autoscale</key>
- <value>False</value>
+ <key>id</key>
+ <value>dvbt_tx_demo</value>
</param>
<param>
- <key>ymin</key>
- <value>-2</value>
+ <key>max_nouts</key>
+ <value>0</value>
</param>
<param>
- <key>ymax</key>
- <value>2</value>
+ <key>qt_qss_theme</key>
+ <value></value>
</param>
<param>
- <key>xmin</key>
- <value>-2</value>
+ <key>realtime_scheduling</key>
+ <value></value>
</param>
<param>
- <key>xmax</key>
- <value>2</value>
+ <key>run_command</key>
+ <value>{python} -u {filename}</value>
</param>
<param>
- <key>nconnections</key>
- <value>1</value>
+ <key>run_options</key>
+ <value>prompt</value>
</param>
<param>
- <key>update_time</key>
- <value>0.10</value>
+ <key>run</key>
+ <value>True</value>
</param>
<param>
- <key>gui_hint</key>
+ <key>thread_safe_setters</key>
<value></value>
</param>
<param>
- <key>tr_mode</key>
- <value>qtgui.TRIG_MODE_FREE</value>
+ <key>title</key>
+ <value></value>
</param>
+ </block>
+ <block>
+ <key>variable</key>
<param>
- <key>tr_slope</key>
- <value>qtgui.TRIG_SLOPE_POS</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
- <key>tr_level</key>
- <value>0.0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>tr_chan</key>
+ <key>_coordinate</key>
+ <value>(176, 12)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
<value>0</value>
</param>
<param>
- <key>tr_tag</key>
- <value>""</value>
+ <key>id</key>
+ <value>center_freq</value>
</param>
<param>
- <key>legend</key>
- <value>True</value>
+ <key>value</key>
+ <value>429e6</value>
</param>
+ </block>
+ <block>
+ <key>variable</key>
<param>
- <key>label1</key>
+ <key>comment</key>
<value></value>
</param>
<param>
- <key>width1</key>
- <value>1</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>color1</key>
- <value>"blue"</value>
+ <key>_coordinate</key>
+ <value>(8, 76)</value>
</param>
<param>
- <key>style1</key>
+ <key>_rotation</key>
<value>0</value>
</param>
<param>
- <key>marker1</key>
- <value>0</value>
+ <key>id</key>
+ <value>samp_rate</value>
</param>
<param>
- <key>alpha1</key>
- <value>1.0</value>
+ <key>value</key>
+ <value>(8000000.0 * 8) / 7</value>
</param>
+ </block>
+ <block>
+ <key>variable_qtgui_range</key>
<param>
- <key>label2</key>
+ <key>comment</key>
<value></value>
</param>
<param>
- <key>width2</key>
- <value>1</value>
+ <key>value</key>
+ <value>50</value>
</param>
<param>
- <key>color2</key>
- <value>"red"</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>style2</key>
- <value>0</value>
+ <key>_coordinate</key>
+ <value>(240, 496)</value>
</param>
<param>
- <key>marker2</key>
+ <key>gui_hint</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_rotation</key>
<value>0</value>
</param>
<param>
- <key>alpha2</key>
- <value>1.0</value>
+ <key>id</key>
+ <value>tx_gain</value>
</param>
<param>
- <key>label3</key>
+ <key>label</key>
<value></value>
</param>
<param>
- <key>width3</key>
- <value>1</value>
+ <key>min_len</key>
+ <value>200</value>
</param>
<param>
- <key>color3</key>
- <value>"red"</value>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
</param>
<param>
- <key>style3</key>
+ <key>start</key>
<value>0</value>
</param>
<param>
- <key>marker3</key>
- <value>0</value>
+ <key>step</key>
+ <value>1</value>
</param>
<param>
- <key>alpha3</key>
- <value>1.0</value>
+ <key>stop</key>
+ <value>89</value>
</param>
<param>
- <key>label4</key>
+ <key>rangeType</key>
+ <value>float</value>
+ </param>
+ <param>
+ <key>widget</key>
+ <value>counter_slider</value>
+ </param>
+ </block>
+ <block>
+ <key>variable_qtgui_range</key>
+ <param>
+ <key>comment</key>
<value></value>
</param>
<param>
- <key>width4</key>
- <value>1</value>
+ <key>value</key>
+ <value>-8</value>
</param>
<param>
- <key>color4</key>
- <value>"red"</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>style4</key>
- <value>0</value>
+ <key>_coordinate</key>
+ <value>(8, 496)</value>
</param>
<param>
- <key>marker4</key>
+ <key>gui_hint</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_rotation</key>
<value>0</value>
</param>
<param>
- <key>alpha4</key>
- <value>1.0</value>
+ <key>id</key>
+ <value>vga1_gain</value>
</param>
<param>
- <key>label5</key>
+ <key>label</key>
<value></value>
</param>
<param>
- <key>width5</key>
- <value>1</value>
+ <key>min_len</key>
+ <value>200</value>
</param>
<param>
- <key>color5</key>
- <value>"red"</value>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
</param>
<param>
- <key>style5</key>
- <value>0</value>
+ <key>start</key>
+ <value>-35</value>
</param>
<param>
- <key>marker5</key>
- <value>0</value>
+ <key>step</key>
+ <value>1</value>
</param>
<param>
- <key>alpha5</key>
- <value>1.0</value>
+ <key>stop</key>
+ <value>-4</value>
</param>
<param>
- <key>label6</key>
+ <key>rangeType</key>
+ <value>int</value>
+ </param>
+ <param>
+ <key>widget</key>
+ <value>counter_slider</value>
+ </param>
+ </block>
+ <block>
+ <key>variable_qtgui_range</key>
+ <param>
+ <key>comment</key>
<value></value>
</param>
<param>
- <key>width6</key>
- <value>1</value>
+ <key>value</key>
+ <value>10</value>
</param>
<param>
- <key>color6</key>
- <value>"red"</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>style6</key>
- <value>0</value>
+ <key>_coordinate</key>
+ <value>(120, 496)</value>
</param>
<param>
- <key>marker6</key>
+ <key>gui_hint</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_rotation</key>
<value>0</value>
</param>
<param>
- <key>alpha6</key>
- <value>1.0</value>
+ <key>id</key>
+ <value>vga2_gain</value>
</param>
<param>
- <key>label7</key>
+ <key>label</key>
<value></value>
</param>
<param>
- <key>width7</key>
- <value>1</value>
+ <key>min_len</key>
+ <value>200</value>
</param>
<param>
- <key>color7</key>
- <value>"red"</value>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
</param>
<param>
- <key>style7</key>
+ <key>start</key>
<value>0</value>
</param>
<param>
- <key>marker7</key>
- <value>0</value>
+ <key>step</key>
+ <value>1</value>
</param>
<param>
- <key>alpha7</key>
- <value>1.0</value>
+ <key>stop</key>
+ <value>25</value>
</param>
<param>
- <key>label8</key>
+ <key>rangeType</key>
+ <value>int</value>
+ </param>
+ <param>
+ <key>widget</key>
+ <value>counter_slider</value>
+ </param>
+ </block>
+ <block>
+ <key>blocks_file_source</key>
+ <param>
+ <key>alias</key>
<value></value>
</param>
<param>
- <key>width8</key>
- <value>1</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
- <key>color8</key>
- <value>"red"</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>style8</key>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>file</key>
+ <value>/run/shm/adv8dvbt23qam64.ts</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(120, 76)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
<value>0</value>
</param>
<param>
- <key>marker8</key>
+ <key>id</key>
+ <value>blocks_file_source_0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
<value>0</value>
</param>
<param>
- <key>alpha8</key>
- <value>1.0</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>label9</key>
- <value></value>
+ <key>type</key>
+ <value>byte</value>
</param>
<param>
- <key>width9</key>
+ <key>repeat</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>vlen</key>
<value>1</value>
</param>
+ </block>
+ <block>
+ <key>blocks_multiply_const_xx</key>
<param>
- <key>color9</key>
- <value>"red"</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>style9</key>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>const</key>
+ <value>0.0022097087</value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(696, 420)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
<value>0</value>
</param>
<param>
- <key>marker9</key>
+ <key>id</key>
+ <value>blocks_multiply_const_xx_0</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>complex</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
<value>0</value>
</param>
<param>
- <key>alpha9</key>
- <value>1.0</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>label10</key>
+ <key>vlen</key>
+ <value>1</value>
+ </param>
+ </block>
+ <block>
+ <key>blocks_vector_to_stream</key>
+ <param>
+ <key>alias</key>
<value></value>
</param>
<param>
- <key>width10</key>
- <value>1</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
- <key>color10</key>
- <value>"red"</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>style10</key>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(120, 332)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
<value>0</value>
</param>
<param>
- <key>marker10</key>
+ <key>id</key>
+ <value>blocks_vector_to_stream_0</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>complex</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
<value>0</value>
</param>
<param>
- <key>alpha10</key>
- <value>1.0</value>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>num_items</key>
+ <value>8192</value>
+ </param>
+ <param>
+ <key>vlen</key>
+ <value>1</value>
</param>
+ </block>
+ <block>
+ <key>digital_ofdm_cyclic_prefixer</key>
<param>
<key>alias</key>
<value></value>
</param>
<param>
- <key>affinity</key>
- <value></value>
+ <key>cp_len</key>
+ <value>256</value>
</param>
<param>
<key>comment</key>
<value></value>
</param>
<param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>input_size</key>
+ <value>8192</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(360, 555)</value>
+ <value>(392, 400)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
+ <param>
+ <key>id</key>
+ <value>digital_ofdm_cyclic_prefixer_0</value>
+ </param>
+ <param>
+ <key>tagname</key>
+ <value></value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>rolloff</key>
+ <value>0</value>
+ </param>
</block>
<block>
- <key>variable</key>
+ <key>dtv_dvbt_bit_inner_interleaver</key>
<param>
- <key>id</key>
- <value>samp_rate</value>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>constellation</key>
+ <value>64qam</value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>(8000000.0 * 8) / 7</value>
+ <key>_coordinate</key>
+ <value>(984, 204)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>180</value>
+ </param>
+ <param>
+ <key>hierarchy</key>
+ <value>nh</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>dtv_dvbt_bit_inner_interleaver_0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>transmission_mode</key>
+ <value>T8k</value>
+ </param>
+ </block>
+ <block>
+ <key>dtv_dvbt_convolutional_interleaver</key>
+ <param>
<key>alias</key>
<value></value>
</param>
<param>
+ <key>blocks</key>
+ <value>136</value>
+ </param>
+ <param>
<key>comment</key>
<value></value>
</param>
<param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>M</key>
+ <value>17</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(8, 83)</value>
+ <value>(776, 52)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
+ <param>
+ <key>id</key>
+ <value>dtv_dvbt_convolutional_interleaver_0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>I</key>
+ <value>12</value>
+ </param>
</block>
<block>
<key>dtv_dvbt_energy_dispersal</key>
<param>
- <key>id</key>
- <value>dtv_dvbt_energy_dispersal_0</value>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>nsize</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>nsize</key>
- <value>1</value>
+ <key>_coordinate</key>
+ <value>(352, 72)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>dtv_dvbt_energy_dispersal_0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
+ </block>
+ <block>
+ <key>dtv_dvbt_inner_coder</key>
<param>
<key>alias</key>
<value></value>
</param>
<param>
+ <key>code_rate</key>
+ <value>C2_3</value>
+ </param>
+ <param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>constellation</key>
+ <value>64qam</value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(1032, 48)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
<value>0</value>
</param>
<param>
+ <key>hierarchy</key>
+ <value>nh</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>dtv_dvbt_inner_coder_0</value>
+ </param>
+ <param>
+ <key>ninput</key>
+ <value>1</value>
+ </param>
+ <param>
<key>maxoutbuf</key>
<value>0</value>
</param>
<param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>noutput</key>
+ <value>6048</value>
+ </param>
+ </block>
+ <block>
+ <key>dtv_dvbt_map</key>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>comment</key>
<value></value>
</param>
<param>
+ <key>constellation</key>
+ <value>64qam</value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(328, 96)</value>
+ <value>(368, 192)</value>
</param>
<param>
<key>_rotation</key>
+ <value>180</value>
+ </param>
+ <param>
+ <key>gain</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>hierarchy</key>
+ <value>nh</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>dtv_dvbt_map_0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
<value>0</value>
</param>
+ <param>
+ <key>transmission_mode</key>
+ <value>T8k</value>
+ </param>
</block>
<block>
<key>dtv_dvbt_reed_solomon_enc</key>
<param>
- <key>id</key>
- <value>dtv_dvbt_reed_solomon_enc_0</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>blocks</key>
+ <value>8</value>
</param>
<param>
- <key>p</key>
- <value>2</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
- <key>m</key>
- <value>8</value>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>gfpoly</key>
<value>0x11d</value>
</param>
<param>
- <key>n</key>
- <value>255</value>
+ <key>_coordinate</key>
+ <value>(544, 24)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>dtv_dvbt_reed_solomon_enc_0</value>
</param>
<param>
<key>k</key>
<value>239</value>
</param>
<param>
- <key>t</key>
- <value>8</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>n</key>
+ <value>255</value>
</param>
<param>
<key>s</key>
<value>51</value>
</param>
<param>
- <key>blocks</key>
+ <key>m</key>
<value>8</value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>p</key>
+ <value>2</value>
</param>
<param>
- <key>affinity</key>
+ <key>t</key>
+ <value>8</value>
+ </param>
+ </block>
+ <block>
+ <key>dtv_dvbt_reference_signals</key>
+ <param>
+ <key>alias</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
+ <key>cell_id</key>
<value>0</value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>code_rate_hp</key>
+ <value>C2_3</value>
+ </param>
+ <param>
+ <key>code_rate_lp</key>
+ <value>C2_3</value>
</param>
<param>
<key>comment</key>
<value></value>
</param>
<param>
+ <key>constellation</key>
+ <value>64qam</value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(512, 43)</value>
+ <value>(48, 156)</value>
</param>
<param>
<key>_rotation</key>
- <value>0</value>
+ <value>180</value>
+ </param>
+ <param>
+ <key>guard_interval</key>
+ <value>GI_1_32</value>
+ </param>
+ <param>
+ <key>hierarchy</key>
+ <value>nh</value>
</param>
- </block>
- <block>
- <key>dtv_dvbt_convolutional_interleaver</key>
<param>
<key>id</key>
- <value>dtv_dvbt_convolutional_interleaver_0</value>
+ <value>dtv_dvbt_reference_signals_0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>type</key>
+ <value>complex</value>
</param>
<param>
- <key>blocks</key>
- <value>136</value>
+ <key>include_cell_id</key>
+ <value>call_id_yes</value>
</param>
<param>
- <key>I</key>
- <value>12</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>M</key>
- <value>17</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
+ <key>transmission_mode</key>
+ <value>T8k</value>
+ </param>
+ </block>
+ <block>
+ <key>dtv_dvbt_symbol_inner_interleaver</key>
+ <param>
<key>alias</key>
<value></value>
</param>
<param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>direction</key>
+ <value>Interleave</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(672, 204)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>180</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>dtv_dvbt_symbol_inner_interleaver_0</value>
</param>
<param>
<key>maxoutbuf</key>
<value>0</value>
</param>
<param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>transmission_mode</key>
+ <value>T8k</value>
+ </param>
+ </block>
+ <block>
+ <key>fft_vxx</key>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
<key>comment</key>
<value></value>
</param>
<param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>fft_size</key>
+ <value>8192</value>
+ </param>
+ <param>
+ <key>forward</key>
+ <value>False</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(736, 75)</value>
+ <value>(88, 392)</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>
+ <value>fft_vxx_0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>type</key>
+ <value>complex</value>
</param>
<param>
- <key>file</key>
- <value>/run/shm/advtest.ts</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>type</key>
- <value>byte</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>repeat</key>
+ <key>nthreads</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>shift</key>
<value>True</value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>window</key>
+ <value>window.rectangular(8192)</value>
</param>
+ </block>
+ <block>
+ <key>osmosdr_sink</key>
<param>
<key>alias</key>
<value></value>
</param>
<param>
- <key>affinity</key>
+ <key>ant0</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
+ <key>bb_gain0</key>
+ <value>vga1_gain</value>
+ </param>
+ <param>
+ <key>bw0</key>
+ <value>8750000</value>
+ </param>
+ <param>
+ <key>corr0</key>
<value>0</value>
</param>
<param>
- <key>maxoutbuf</key>
+ <key>freq0</key>
+ <value>center_freq</value>
+ </param>
+ <param>
+ <key>if_gain0</key>
<value>0</value>
</param>
<param>
- <key>comment</key>
+ <key>gain0</key>
+ <value>vga2_gain</value>
+ </param>
+ <param>
+ <key>ant10</key>
<value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(112, 83)</value>
+ <key>bb_gain10</key>
+ <value>20</value>
</param>
<param>
- <key>_rotation</key>
+ <key>bw10</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>uhd_usrp_sink</key>
<param>
- <key>id</key>
- <value>uhd_usrp_sink_0</value>
+ <key>corr10</key>
+ <value>0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>freq10</key>
+ <value>100e6</value>
</param>
<param>
- <key>type</key>
- <value>fc32</value>
+ <key>if_gain10</key>
+ <value>20</value>
</param>
<param>
- <key>otw</key>
- <value></value>
+ <key>gain10</key>
+ <value>10</value>
</param>
<param>
- <key>stream_args</key>
+ <key>ant11</key>
<value></value>
</param>
<param>
- <key>stream_chans</key>
- <value>[]</value>
+ <key>bb_gain11</key>
+ <value>20</value>
</param>
<param>
- <key>dev_addr</key>
- <value>"send_frame_size=65536,num_send_frames=128,master_clock_rate=" + str(samp_rate*4)</value>
+ <key>bw11</key>
+ <value>0</value>
</param>
<param>
- <key>dev_args</key>
- <value>""</value>
+ <key>corr11</key>
+ <value>0</value>
</param>
<param>
- <key>sync</key>
- <value></value>
+ <key>freq11</key>
+ <value>100e6</value>
</param>
<param>
- <key>clock_rate</key>
- <value>0.0</value>
+ <key>if_gain11</key>
+ <value>20</value>
</param>
<param>
- <key>num_mboards</key>
- <value>1</value>
+ <key>gain11</key>
+ <value>10</value>
</param>
<param>
- <key>clock_source0</key>
+ <key>ant12</key>
<value></value>
</param>
<param>
- <key>time_source0</key>
- <value></value>
+ <key>bb_gain12</key>
+ <value>20</value>
</param>
<param>
- <key>sd_spec0</key>
- <value></value>
+ <key>bw12</key>
+ <value>0</value>
</param>
<param>
- <key>clock_source1</key>
- <value></value>
+ <key>corr12</key>
+ <value>0</value>
</param>
<param>
- <key>time_source1</key>
- <value></value>
+ <key>freq12</key>
+ <value>100e6</value>
</param>
<param>
- <key>sd_spec1</key>
- <value></value>
+ <key>if_gain12</key>
+ <value>20</value>
</param>
<param>
- <key>clock_source2</key>
- <value></value>
+ <key>gain12</key>
+ <value>10</value>
</param>
<param>
- <key>time_source2</key>
+ <key>ant13</key>
<value></value>
</param>
<param>
- <key>sd_spec2</key>
- <value></value>
+ <key>bb_gain13</key>
+ <value>20</value>
</param>
<param>
- <key>clock_source3</key>
- <value></value>
+ <key>bw13</key>
+ <value>0</value>
</param>
<param>
- <key>time_source3</key>
- <value></value>
+ <key>corr13</key>
+ <value>0</value>
</param>
<param>
- <key>sd_spec3</key>
+ <key>freq13</key>
+ <value>100e6</value>
+ </param>
+ <param>
+ <key>if_gain13</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain13</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>ant14</key>
<value></value>
</param>
<param>
- <key>clock_source4</key>
+ <key>bb_gain14</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>bw14</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>corr14</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>freq14</key>
+ <value>100e6</value>
+ </param>
+ <param>
+ <key>if_gain14</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain14</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>ant15</key>
<value></value>
</param>
<param>
- <key>time_source4</key>
+ <key>bb_gain15</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>bw15</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>corr15</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>freq15</key>
+ <value>100e6</value>
+ </param>
+ <param>
+ <key>if_gain15</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain15</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>ant16</key>
<value></value>
</param>
<param>
- <key>sd_spec4</key>
+ <key>bb_gain16</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>bw16</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>corr16</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>freq16</key>
+ <value>100e6</value>
+ </param>
+ <param>
+ <key>if_gain16</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain16</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>ant17</key>
<value></value>
</param>
<param>
- <key>clock_source5</key>
+ <key>bb_gain17</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>bw17</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>corr17</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>freq17</key>
+ <value>100e6</value>
+ </param>
+ <param>
+ <key>if_gain17</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain17</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>ant18</key>
<value></value>
</param>
<param>
- <key>time_source5</key>
+ <key>bb_gain18</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>bw18</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>corr18</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>freq18</key>
+ <value>100e6</value>
+ </param>
+ <param>
+ <key>if_gain18</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain18</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>ant19</key>
<value></value>
</param>
<param>
- <key>sd_spec5</key>
+ <key>bb_gain19</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>bw19</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>corr19</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>freq19</key>
+ <value>100e6</value>
+ </param>
+ <param>
+ <key>if_gain19</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain19</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>ant1</key>
<value></value>
</param>
<param>
- <key>clock_source6</key>
+ <key>bb_gain1</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>bw1</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>corr1</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>freq1</key>
+ <value>100e6</value>
+ </param>
+ <param>
+ <key>if_gain1</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain1</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>ant20</key>
<value></value>
</param>
<param>
- <key>time_source6</key>
+ <key>bb_gain20</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>bw20</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>corr20</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>freq20</key>
+ <value>100e6</value>
+ </param>
+ <param>
+ <key>if_gain20</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain20</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>ant21</key>
<value></value>
</param>
<param>
- <key>sd_spec6</key>
+ <key>bb_gain21</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>bw21</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>corr21</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>freq21</key>
+ <value>100e6</value>
+ </param>
+ <param>
+ <key>if_gain21</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain21</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>ant22</key>
<value></value>
</param>
<param>
- <key>clock_source7</key>
+ <key>bb_gain22</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>bw22</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>corr22</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>freq22</key>
+ <value>100e6</value>
+ </param>
+ <param>
+ <key>if_gain22</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain22</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>ant23</key>
<value></value>
</param>
<param>
- <key>time_source7</key>
+ <key>bb_gain23</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>bw23</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>corr23</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>freq23</key>
+ <value>100e6</value>
+ </param>
+ <param>
+ <key>if_gain23</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain23</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>ant24</key>
<value></value>
</param>
<param>
- <key>sd_spec7</key>
+ <key>bb_gain24</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>bw24</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>corr24</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>freq24</key>
+ <value>100e6</value>
+ </param>
+ <param>
+ <key>if_gain24</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain24</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>ant25</key>
<value></value>
</param>
<param>
- <key>nchan</key>
- <value>1</value>
+ <key>bb_gain25</key>
+ <value>20</value>
</param>
<param>
- <key>samp_rate</key>
- <value>samp_rate</value>
+ <key>bw25</key>
+ <value>0</value>
</param>
<param>
- <key>center_freq0</key>
- <value>429000000</value>
+ <key>corr25</key>
+ <value>0</value>
</param>
<param>
- <key>gain0</key>
- <value>50</value>
+ <key>freq25</key>
+ <value>100e6</value>
</param>
<param>
- <key>norm_gain0</key>
- <value>False</value>
+ <key>if_gain25</key>
+ <value>20</value>
</param>
<param>
- <key>ant0</key>
+ <key>gain25</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>ant26</key>
<value></value>
</param>
<param>
- <key>bw0</key>
+ <key>bb_gain26</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>bw26</key>
<value>0</value>
</param>
<param>
- <key>center_freq1</key>
+ <key>corr26</key>
<value>0</value>
</param>
<param>
- <key>gain1</key>
+ <key>freq26</key>
+ <value>100e6</value>
+ </param>
+ <param>
+ <key>if_gain26</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain26</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>ant27</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bb_gain27</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>bw27</key>
<value>0</value>
</param>
<param>
- <key>norm_gain1</key>
- <value>False</value>
+ <key>corr27</key>
+ <value>0</value>
</param>
<param>
- <key>ant1</key>
+ <key>freq27</key>
+ <value>100e6</value>
+ </param>
+ <param>
+ <key>if_gain27</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain27</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>ant28</key>
<value></value>
</param>
<param>
- <key>bw1</key>
+ <key>bb_gain28</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>bw28</key>
<value>0</value>
</param>
<param>
- <key>center_freq2</key>
+ <key>corr28</key>
<value>0</value>
</param>
<param>
- <key>gain2</key>
+ <key>freq28</key>
+ <value>100e6</value>
+ </param>
+ <param>
+ <key>if_gain28</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain28</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>ant29</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bb_gain29</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>bw29</key>
<value>0</value>
</param>
<param>
- <key>norm_gain2</key>
- <value>False</value>
+ <key>corr29</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>freq29</key>
+ <value>100e6</value>
+ </param>
+ <param>
+ <key>if_gain29</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain29</key>
+ <value>10</value>
</param>
<param>
<key>ant2</key>
<value></value>
</param>
<param>
+ <key>bb_gain2</key>
+ <value>20</value>
+ </param>
+ <param>
<key>bw2</key>
<value>0</value>
</param>
<param>
- <key>center_freq3</key>
+ <key>corr2</key>
<value>0</value>
</param>
<param>
- <key>gain3</key>
+ <key>freq2</key>
+ <value>100e6</value>
+ </param>
+ <param>
+ <key>if_gain2</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain2</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>ant30</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bb_gain30</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>bw30</key>
<value>0</value>
</param>
<param>
- <key>norm_gain3</key>
- <value>False</value>
+ <key>corr30</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>freq30</key>
+ <value>100e6</value>
+ </param>
+ <param>
+ <key>if_gain30</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain30</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>ant31</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bb_gain31</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>bw31</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>corr31</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>freq31</key>
+ <value>100e6</value>
+ </param>
+ <param>
+ <key>if_gain31</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain31</key>
+ <value>10</value>
</param>
<param>
<key>ant3</key>
<value></value>
</param>
<param>
+ <key>bb_gain3</key>
+ <value>20</value>
+ </param>
+ <param>
<key>bw3</key>
<value>0</value>
</param>
<param>
- <key>center_freq4</key>
+ <key>corr3</key>
<value>0</value>
</param>
<param>
- <key>gain4</key>
- <value>0</value>
+ <key>freq3</key>
+ <value>100e6</value>
</param>
<param>
- <key>norm_gain4</key>
- <value>False</value>
+ <key>if_gain3</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain3</key>
+ <value>10</value>
</param>
<param>
<key>ant4</key>
<value></value>
</param>
<param>
+ <key>bb_gain4</key>
+ <value>20</value>
+ </param>
+ <param>
<key>bw4</key>
<value>0</value>
</param>
<param>
- <key>center_freq5</key>
+ <key>corr4</key>
<value>0</value>
</param>
<param>
- <key>gain5</key>
- <value>0</value>
+ <key>freq4</key>
+ <value>100e6</value>
</param>
<param>
- <key>norm_gain5</key>
- <value>False</value>
+ <key>if_gain4</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain4</key>
+ <value>10</value>
</param>
<param>
<key>ant5</key>
<value></value>
</param>
<param>
+ <key>bb_gain5</key>
+ <value>20</value>
+ </param>
+ <param>
<key>bw5</key>
<value>0</value>
</param>
<param>
- <key>center_freq6</key>
+ <key>corr5</key>
<value>0</value>
</param>
<param>
- <key>gain6</key>
- <value>0</value>
+ <key>freq5</key>
+ <value>100e6</value>
</param>
<param>
- <key>norm_gain6</key>
- <value>False</value>
+ <key>if_gain5</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain5</key>
+ <value>10</value>
</param>
<param>
<key>ant6</key>
<value></value>
</param>
<param>
+ <key>bb_gain6</key>
+ <value>20</value>
+ </param>
+ <param>
<key>bw6</key>
<value>0</value>
</param>
<param>
- <key>center_freq7</key>
+ <key>corr6</key>
<value>0</value>
</param>
<param>
- <key>gain7</key>
- <value>0</value>
+ <key>freq6</key>
+ <value>100e6</value>
</param>
<param>
- <key>norm_gain7</key>
- <value>False</value>
+ <key>if_gain6</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain6</key>
+ <value>10</value>
</param>
<param>
<key>ant7</key>
<value></value>
</param>
<param>
+ <key>bb_gain7</key>
+ <value>20</value>
+ </param>
+ <param>
<key>bw7</key>
<value>0</value>
</param>
<param>
- <key>center_freq8</key>
+ <key>corr7</key>
<value>0</value>
</param>
<param>
- <key>gain8</key>
- <value>0</value>
+ <key>freq7</key>
+ <value>100e6</value>
</param>
<param>
- <key>norm_gain8</key>
- <value>False</value>
+ <key>if_gain7</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain7</key>
+ <value>10</value>
</param>
<param>
<key>ant8</key>
<value></value>
</param>
<param>
+ <key>bb_gain8</key>
+ <value>20</value>
+ </param>
+ <param>
<key>bw8</key>
<value>0</value>
</param>
<param>
- <key>center_freq9</key>
+ <key>corr8</key>
<value>0</value>
</param>
<param>
- <key>gain9</key>
- <value>0</value>
+ <key>freq8</key>
+ <value>100e6</value>
</param>
<param>
- <key>norm_gain9</key>
- <value>False</value>
+ <key>if_gain8</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain8</key>
+ <value>10</value>
</param>
<param>
<key>ant9</key>
<value></value>
</param>
<param>
+ <key>bb_gain9</key>
+ <value>20</value>
+ </param>
+ <param>
<key>bw9</key>
<value>0</value>
</param>
<param>
- <key>center_freq10</key>
+ <key>corr9</key>
<value>0</value>
</param>
<param>
- <key>gain10</key>
- <value>0</value>
+ <key>freq9</key>
+ <value>100e6</value>
</param>
<param>
- <key>norm_gain10</key>
- <value>False</value>
+ <key>if_gain9</key>
+ <value>20</value>
</param>
<param>
- <key>ant10</key>
+ <key>gain9</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>comment</key>
<value></value>
</param>
<param>
- <key>bw10</key>
- <value>0</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>center_freq11</key>
- <value>0</value>
+ <key>args</key>
+ <value>bladerf=0,buffers=128,buflen=32768</value>
</param>
<param>
- <key>gain11</key>
+ <key>_enabled</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(984, 284)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
<value>0</value>
</param>
<param>
- <key>norm_gain11</key>
- <value>False</value>
+ <key>id</key>
+ <value>osmosdr_sink_0</value>
</param>
<param>
- <key>ant11</key>
+ <key>type</key>
+ <value>fc32</value>
+ </param>
+ <param>
+ <key>clock_source0</key>
<value></value>
</param>
<param>
- <key>bw11</key>
- <value>0</value>
+ <key>time_source0</key>
+ <value></value>
</param>
<param>
- <key>center_freq12</key>
- <value>0</value>
+ <key>clock_source1</key>
+ <value></value>
</param>
<param>
- <key>gain12</key>
- <value>0</value>
+ <key>time_source1</key>
+ <value></value>
</param>
<param>
- <key>norm_gain12</key>
- <value>False</value>
+ <key>clock_source2</key>
+ <value></value>
</param>
<param>
- <key>ant12</key>
+ <key>time_source2</key>
<value></value>
</param>
<param>
- <key>bw12</key>
- <value>0</value>
+ <key>clock_source3</key>
+ <value></value>
</param>
<param>
- <key>center_freq13</key>
- <value>0</value>
+ <key>time_source3</key>
+ <value></value>
</param>
<param>
- <key>gain13</key>
- <value>0</value>
+ <key>clock_source4</key>
+ <value></value>
</param>
<param>
- <key>norm_gain13</key>
- <value>False</value>
+ <key>time_source4</key>
+ <value></value>
</param>
<param>
- <key>ant13</key>
+ <key>clock_source5</key>
<value></value>
</param>
<param>
- <key>bw13</key>
- <value>0</value>
+ <key>time_source5</key>
+ <value></value>
</param>
<param>
- <key>center_freq14</key>
- <value>0</value>
+ <key>clock_source6</key>
+ <value></value>
</param>
<param>
- <key>gain14</key>
- <value>0</value>
+ <key>time_source6</key>
+ <value></value>
</param>
<param>
- <key>norm_gain14</key>
- <value>False</value>
+ <key>clock_source7</key>
+ <value></value>
</param>
<param>
- <key>ant14</key>
+ <key>time_source7</key>
<value></value>
</param>
<param>
- <key>bw14</key>
- <value>0</value>
+ <key>nchan</key>
+ <value>1</value>
</param>
<param>
- <key>center_freq15</key>
- <value>0</value>
+ <key>num_mboards</key>
+ <value>1</value>
</param>
<param>
- <key>gain15</key>
- <value>0</value>
+ <key>sample_rate</key>
+ <value>samp_rate</value>
</param>
<param>
- <key>norm_gain15</key>
+ <key>sync</key>
+ <value></value>
+ </param>
+ </block>
+ <block>
+ <key>qtgui_const_sink_x</key>
+ <param>
+ <key>autoscale</key>
<value>False</value>
</param>
<param>
- <key>ant15</key>
+ <key>axislabels</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>alias</key>
<value></value>
</param>
<param>
- <key>bw15</key>
- <value>0</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
- <key>center_freq16</key>
- <value>0</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>gain16</key>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(360, 324)</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_rotation</key>
<value>0</value>
</param>
<param>
- <key>norm_gain16</key>
+ <key>grid</key>
<value>False</value>
</param>
<param>
- <key>ant16</key>
+ <key>id</key>
+ <value>qtgui_const_sink_x_0</value>
+ </param>
+ <param>
+ <key>legend</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>alpha1</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>color1</key>
+ <value>"blue"</value>
+ </param>
+ <param>
+ <key>label1</key>
<value></value>
</param>
<param>
- <key>bw16</key>
+ <key>marker1</key>
<value>0</value>
</param>
<param>
- <key>center_freq17</key>
+ <key>style1</key>
<value>0</value>
</param>
<param>
- <key>gain17</key>
- <value>0</value>
+ <key>width1</key>
+ <value>1</value>
</param>
<param>
- <key>norm_gain17</key>
- <value>False</value>
+ <key>alpha10</key>
+ <value>1.0</value>
</param>
<param>
- <key>ant17</key>
+ <key>color10</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>label10</key>
<value></value>
</param>
<param>
- <key>bw17</key>
+ <key>marker10</key>
<value>0</value>
</param>
<param>
- <key>center_freq18</key>
+ <key>style10</key>
<value>0</value>
</param>
<param>
- <key>gain18</key>
- <value>0</value>
+ <key>width10</key>
+ <value>1</value>
</param>
<param>
- <key>norm_gain18</key>
- <value>False</value>
+ <key>alpha2</key>
+ <value>1.0</value>
</param>
<param>
- <key>ant18</key>
+ <key>color2</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>label2</key>
<value></value>
</param>
<param>
- <key>bw18</key>
+ <key>marker2</key>
<value>0</value>
</param>
<param>
- <key>center_freq19</key>
+ <key>style2</key>
<value>0</value>
</param>
<param>
- <key>gain19</key>
- <value>0</value>
+ <key>width2</key>
+ <value>1</value>
</param>
<param>
- <key>norm_gain19</key>
- <value>False</value>
+ <key>alpha3</key>
+ <value>1.0</value>
</param>
<param>
- <key>ant19</key>
+ <key>color3</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>label3</key>
<value></value>
</param>
<param>
- <key>bw19</key>
+ <key>marker3</key>
<value>0</value>
</param>
<param>
- <key>center_freq20</key>
+ <key>style3</key>
<value>0</value>
</param>
<param>
- <key>gain20</key>
- <value>0</value>
+ <key>width3</key>
+ <value>1</value>
</param>
<param>
- <key>norm_gain20</key>
- <value>False</value>
+ <key>alpha4</key>
+ <value>1.0</value>
</param>
<param>
- <key>ant20</key>
+ <key>color4</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>label4</key>
<value></value>
</param>
<param>
- <key>bw20</key>
+ <key>marker4</key>
<value>0</value>
</param>
<param>
- <key>center_freq21</key>
+ <key>style4</key>
<value>0</value>
</param>
<param>
- <key>gain21</key>
- <value>0</value>
+ <key>width4</key>
+ <value>1</value>
</param>
<param>
- <key>norm_gain21</key>
- <value>False</value>
+ <key>alpha5</key>
+ <value>1.0</value>
</param>
<param>
- <key>ant21</key>
+ <key>color5</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>label5</key>
<value></value>
</param>
<param>
- <key>bw21</key>
+ <key>marker5</key>
<value>0</value>
</param>
<param>
- <key>center_freq22</key>
+ <key>style5</key>
<value>0</value>
</param>
<param>
- <key>gain22</key>
- <value>0</value>
+ <key>width5</key>
+ <value>1</value>
</param>
<param>
- <key>norm_gain22</key>
- <value>False</value>
+ <key>alpha6</key>
+ <value>1.0</value>
</param>
<param>
- <key>ant22</key>
+ <key>color6</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>label6</key>
<value></value>
</param>
<param>
- <key>bw22</key>
+ <key>marker6</key>
<value>0</value>
</param>
<param>
- <key>center_freq23</key>
+ <key>style6</key>
<value>0</value>
</param>
<param>
- <key>gain23</key>
- <value>0</value>
+ <key>width6</key>
+ <value>1</value>
</param>
<param>
- <key>norm_gain23</key>
- <value>False</value>
+ <key>alpha7</key>
+ <value>1.0</value>
</param>
<param>
- <key>ant23</key>
+ <key>color7</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>label7</key>
<value></value>
</param>
<param>
- <key>bw23</key>
+ <key>marker7</key>
<value>0</value>
</param>
<param>
- <key>center_freq24</key>
+ <key>style7</key>
<value>0</value>
</param>
<param>
- <key>gain24</key>
- <value>0</value>
+ <key>width7</key>
+ <value>1</value>
</param>
<param>
- <key>norm_gain24</key>
- <value>False</value>
+ <key>alpha8</key>
+ <value>1.0</value>
</param>
<param>
- <key>ant24</key>
+ <key>color8</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>label8</key>
<value></value>
</param>
<param>
- <key>bw24</key>
+ <key>marker8</key>
<value>0</value>
</param>
<param>
- <key>center_freq25</key>
+ <key>style8</key>
<value>0</value>
</param>
<param>
- <key>gain25</key>
- <value>0</value>
+ <key>width8</key>
+ <value>1</value>
</param>
<param>
- <key>norm_gain25</key>
- <value>False</value>
+ <key>alpha9</key>
+ <value>1.0</value>
</param>
<param>
- <key>ant25</key>
+ <key>color9</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>label9</key>
<value></value>
</param>
<param>
- <key>bw25</key>
+ <key>marker9</key>
<value>0</value>
</param>
<param>
- <key>center_freq26</key>
+ <key>style9</key>
<value>0</value>
</param>
<param>
- <key>gain26</key>
+ <key>width9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>name</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>nconnections</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>size</key>
+ <value>1024</value>
+ </param>
+ <param>
+ <key>tr_chan</key>
<value>0</value>
</param>
<param>
- <key>norm_gain26</key>
- <value>False</value>
+ <key>tr_level</key>
+ <value>0.0</value>
</param>
<param>
- <key>ant26</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_tag</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>complex</value>
+ </param>
+ <param>
+ <key>update_time</key>
+ <value>0.10</value>
+ </param>
+ <param>
+ <key>xmax</key>
+ <value>2</value>
+ </param>
+ <param>
+ <key>xmin</key>
+ <value>-2</value>
+ </param>
+ <param>
+ <key>ymax</key>
+ <value>2</value>
+ </param>
+ <param>
+ <key>ymin</key>
+ <value>-2</value>
+ </param>
+ </block>
+ <block>
+ <key>uhd_usrp_sink</key>
+ <param>
+ <key>alias</key>
<value></value>
</param>
<param>
- <key>bw26</key>
- <value>0</value>
+ <key>ant0</key>
+ <value></value>
</param>
<param>
- <key>center_freq27</key>
+ <key>bw0</key>
<value>0</value>
</param>
<param>
- <key>gain27</key>
- <value>0</value>
+ <key>center_freq0</key>
+ <value>center_freq</value>
</param>
<param>
- <key>norm_gain27</key>
+ <key>norm_gain0</key>
<value>False</value>
</param>
<param>
- <key>ant27</key>
- <value></value>
+ <key>gain0</key>
+ <value>tx_gain</value>
</param>
<param>
- <key>bw27</key>
- <value>0</value>
+ <key>ant10</key>
+ <value></value>
</param>
<param>
- <key>center_freq28</key>
+ <key>bw10</key>
<value>0</value>
</param>
<param>
- <key>gain28</key>
+ <key>center_freq10</key>
<value>0</value>
</param>
<param>
- <key>norm_gain28</key>
+ <key>norm_gain10</key>
<value>False</value>
</param>
<param>
- <key>ant28</key>
- <value></value>
+ <key>gain10</key>
+ <value>0</value>
</param>
<param>
- <key>bw28</key>
- <value>0</value>
+ <key>ant11</key>
+ <value></value>
</param>
<param>
- <key>center_freq29</key>
+ <key>bw11</key>
<value>0</value>
</param>
<param>
- <key>gain29</key>
+ <key>center_freq11</key>
<value>0</value>
</param>
<param>
- <key>norm_gain29</key>
+ <key>norm_gain11</key>
<value>False</value>
</param>
<param>
- <key>ant29</key>
- <value></value>
+ <key>gain11</key>
+ <value>0</value>
</param>
<param>
- <key>bw29</key>
- <value>0</value>
+ <key>ant12</key>
+ <value></value>
</param>
<param>
- <key>center_freq30</key>
+ <key>bw12</key>
<value>0</value>
</param>
<param>
- <key>gain30</key>
+ <key>center_freq12</key>
<value>0</value>
</param>
<param>
- <key>norm_gain30</key>
+ <key>norm_gain12</key>
<value>False</value>
</param>
<param>
- <key>ant30</key>
- <value></value>
+ <key>gain12</key>
+ <value>0</value>
</param>
<param>
- <key>bw30</key>
- <value>0</value>
+ <key>ant13</key>
+ <value></value>
</param>
<param>
- <key>center_freq31</key>
+ <key>bw13</key>
<value>0</value>
</param>
<param>
- <key>gain31</key>
+ <key>center_freq13</key>
<value>0</value>
</param>
<param>
- <key>norm_gain31</key>
+ <key>norm_gain13</key>
<value>False</value>
</param>
<param>
- <key>ant31</key>
+ <key>gain13</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant14</key>
<value></value>
</param>
<param>
- <key>bw31</key>
+ <key>bw14</key>
<value>0</value>
</param>
<param>
- <key>len_tag_name</key>
- <value></value>
+ <key>center_freq14</key>
+ <value>0</value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>norm_gain14</key>
+ <value>False</value>
</param>
<param>
- <key>affinity</key>
- <value></value>
+ <key>gain14</key>
+ <value>0</value>
</param>
<param>
- <key>comment</key>
+ <key>ant15</key>
<value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(984, 387)</value>
+ <key>bw15</key>
+ <value>0</value>
</param>
<param>
- <key>_rotation</key>
+ <key>center_freq15</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>norm_gain15</key>
+ <value>False</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>gain15</key>
+ <value>0</value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
+ <key>ant16</key>
+ <value></value>
</param>
<param>
- <key>const</key>
- <value>0.0022097087</value>
+ <key>bw16</key>
+ <value>0</value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>center_freq16</key>
+ <value>0</value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>norm_gain16</key>
+ <value>False</value>
</param>
<param>
- <key>affinity</key>
+ <key>gain16</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant17</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
+ <key>bw17</key>
<value>0</value>
</param>
<param>
- <key>maxoutbuf</key>
+ <key>center_freq17</key>
<value>0</value>
</param>
<param>
- <key>comment</key>
+ <key>norm_gain17</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain17</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant18</key>
<value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(664, 435)</value>
+ <key>bw18</key>
+ <value>0</value>
</param>
<param>
- <key>_rotation</key>
+ <key>center_freq18</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>options</key>
<param>
- <key>id</key>
- <value>dvbt_tx_demo</value>
+ <key>norm_gain18</key>
+ <value>False</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>gain18</key>
+ <value>0</value>
</param>
<param>
- <key>title</key>
+ <key>ant19</key>
<value></value>
</param>
<param>
- <key>author</key>
- <value></value>
+ <key>bw19</key>
+ <value>0</value>
</param>
<param>
- <key>description</key>
- <value></value>
+ <key>center_freq19</key>
+ <value>0</value>
</param>
<param>
- <key>window_size</key>
- <value>1280, 1024</value>
+ <key>norm_gain19</key>
+ <value>False</value>
</param>
<param>
- <key>generate_options</key>
- <value>qt_gui</value>
+ <key>gain19</key>
+ <value>0</value>
</param>
<param>
- <key>category</key>
- <value>Custom</value>
+ <key>ant1</key>
+ <value></value>
</param>
<param>
- <key>run_options</key>
- <value>prompt</value>
+ <key>bw1</key>
+ <value>0</value>
</param>
<param>
- <key>run</key>
- <value>True</value>
+ <key>center_freq1</key>
+ <value>0</value>
</param>
<param>
- <key>max_nouts</key>
+ <key>norm_gain1</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain1</key>
<value>0</value>
</param>
<param>
- <key>realtime_scheduling</key>
+ <key>ant20</key>
<value></value>
</param>
<param>
- <key>thread_safe_setters</key>
- <value></value>
+ <key>bw20</key>
+ <value>0</value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>center_freq20</key>
+ <value>0</value>
</param>
<param>
- <key>comment</key>
+ <key>norm_gain20</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain20</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant21</key>
<value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(8, 11)</value>
+ <key>bw21</key>
+ <value>0</value>
</param>
<param>
- <key>_rotation</key>
+ <key>center_freq21</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>dtv_dvbt_bit_inner_interleaver</key>
<param>
- <key>id</key>
- <value>dtv_dvbt_bit_inner_interleaver_0</value>
+ <key>norm_gain21</key>
+ <value>False</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>gain21</key>
+ <value>0</value>
</param>
<param>
- <key>constellation</key>
- <value>64qam</value>
+ <key>ant22</key>
+ <value></value>
</param>
<param>
- <key>hierarchy</key>
- <value>nh</value>
+ <key>bw22</key>
+ <value>0</value>
</param>
<param>
- <key>transmission_mode</key>
- <value>T8k</value>
+ <key>center_freq22</key>
+ <value>0</value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>norm_gain22</key>
+ <value>False</value>
</param>
<param>
- <key>affinity</key>
+ <key>gain22</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant23</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
+ <key>bw23</key>
<value>0</value>
</param>
<param>
- <key>maxoutbuf</key>
+ <key>center_freq23</key>
<value>0</value>
</param>
<param>
- <key>comment</key>
- <value></value>
+ <key>norm_gain23</key>
+ <value>False</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(984, 243)</value>
+ <key>gain23</key>
+ <value>0</value>
</param>
<param>
- <key>_rotation</key>
- <value>180</value>
+ <key>ant24</key>
+ <value></value>
</param>
- </block>
- <block>
- <key>dtv_dvbt_symbol_inner_interleaver</key>
<param>
- <key>id</key>
- <value>dtv_dvbt_symbol_inner_interleaver_0</value>
+ <key>bw24</key>
+ <value>0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>center_freq24</key>
+ <value>0</value>
</param>
<param>
- <key>transmission_mode</key>
- <value>T8k</value>
+ <key>norm_gain24</key>
+ <value>False</value>
</param>
<param>
- <key>direction</key>
- <value>Interleave</value>
+ <key>gain24</key>
+ <value>0</value>
</param>
<param>
- <key>alias</key>
+ <key>ant25</key>
<value></value>
</param>
<param>
- <key>affinity</key>
- <value></value>
+ <key>bw25</key>
+ <value>0</value>
</param>
<param>
- <key>minoutbuf</key>
+ <key>center_freq25</key>
<value>0</value>
</param>
<param>
- <key>maxoutbuf</key>
+ <key>norm_gain25</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain25</key>
<value>0</value>
</param>
<param>
- <key>comment</key>
+ <key>ant26</key>
<value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(664, 243)</value>
+ <key>bw26</key>
+ <value>0</value>
</param>
<param>
- <key>_rotation</key>
- <value>180</value>
+ <key>center_freq26</key>
+ <value>0</value>
</param>
- </block>
- <block>
- <key>dtv_dvbt_map</key>
<param>
- <key>id</key>
- <value>dtv_dvbt_map_0</value>
+ <key>norm_gain26</key>
+ <value>False</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>gain26</key>
+ <value>0</value>
</param>
<param>
- <key>constellation</key>
- <value>64qam</value>
+ <key>ant27</key>
+ <value></value>
</param>
<param>
- <key>hierarchy</key>
- <value>nh</value>
+ <key>bw27</key>
+ <value>0</value>
</param>
<param>
- <key>transmission_mode</key>
- <value>T8k</value>
+ <key>center_freq27</key>
+ <value>0</value>
</param>
<param>
- <key>gain</key>
- <value>1</value>
+ <key>norm_gain27</key>
+ <value>False</value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>gain27</key>
+ <value>0</value>
</param>
<param>
- <key>affinity</key>
+ <key>ant28</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
+ <key>bw28</key>
<value>0</value>
</param>
<param>
- <key>maxoutbuf</key>
+ <key>center_freq28</key>
<value>0</value>
</param>
<param>
- <key>comment</key>
+ <key>norm_gain28</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain28</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant29</key>
<value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(344, 227)</value>
+ <key>bw29</key>
+ <value>0</value>
</param>
<param>
- <key>_rotation</key>
- <value>180</value>
+ <key>center_freq29</key>
+ <value>0</value>
</param>
- </block>
- <block>
- <key>dtv_dvbt_reference_signals</key>
<param>
- <key>id</key>
- <value>dtv_dvbt_reference_signals_0</value>
+ <key>norm_gain29</key>
+ <value>False</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>gain29</key>
+ <value>0</value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
+ <key>ant2</key>
+ <value></value>
</param>
<param>
- <key>constellation</key>
- <value>64qam</value>
+ <key>bw2</key>
+ <value>0</value>
</param>
<param>
- <key>hierarchy</key>
- <value>nh</value>
+ <key>center_freq2</key>
+ <value>0</value>
</param>
<param>
- <key>code_rate_hp</key>
- <value>C2_3</value>
+ <key>norm_gain2</key>
+ <value>False</value>
</param>
<param>
- <key>code_rate_lp</key>
- <value>C2_3</value>
+ <key>gain2</key>
+ <value>0</value>
</param>
<param>
- <key>guard_interval</key>
- <value>GI_1_32</value>
+ <key>ant30</key>
+ <value></value>
</param>
<param>
- <key>transmission_mode</key>
- <value>T8k</value>
+ <key>bw30</key>
+ <value>0</value>
</param>
<param>
- <key>include_cell_id</key>
- <value>cell_ide_no</value>
+ <key>center_freq30</key>
+ <value>0</value>
</param>
<param>
- <key>cell_id</key>
+ <key>norm_gain30</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain30</key>
<value>0</value>
</param>
<param>
- <key>alias</key>
+ <key>ant31</key>
<value></value>
</param>
<param>
- <key>affinity</key>
- <value></value>
+ <key>bw31</key>
+ <value>0</value>
</param>
<param>
- <key>minoutbuf</key>
+ <key>center_freq31</key>
<value>0</value>
</param>
<param>
- <key>maxoutbuf</key>
+ <key>norm_gain31</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain31</key>
<value>0</value>
</param>
<param>
- <key>comment</key>
+ <key>ant3</key>
<value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(40, 187)</value>
+ <key>bw3</key>
+ <value>0</value>
</param>
<param>
- <key>_rotation</key>
- <value>180</value>
+ <key>center_freq3</key>
+ <value>0</value>
</param>
- </block>
- <block>
- <key>fft_vxx</key>
<param>
- <key>id</key>
- <value>fft_vxx_0</value>
+ <key>norm_gain3</key>
+ <value>False</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>gain3</key>
+ <value>0</value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
+ <key>ant4</key>
+ <value></value>
</param>
<param>
- <key>fft_size</key>
- <value>8192</value>
+ <key>bw4</key>
+ <value>0</value>
</param>
<param>
- <key>forward</key>
+ <key>center_freq4</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>norm_gain4</key>
<value>False</value>
</param>
<param>
- <key>window</key>
- <value>window.rectangular(8192)</value>
+ <key>gain4</key>
+ <value>0</value>
</param>
<param>
- <key>shift</key>
- <value>True</value>
+ <key>ant5</key>
+ <value></value>
</param>
<param>
- <key>nthreads</key>
- <value>1</value>
+ <key>bw5</key>
+ <value>0</value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>center_freq5</key>
+ <value>0</value>
</param>
<param>
- <key>affinity</key>
+ <key>norm_gain5</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain5</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant6</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
+ <key>bw6</key>
<value>0</value>
</param>
<param>
- <key>maxoutbuf</key>
+ <key>center_freq6</key>
<value>0</value>
</param>
<param>
- <key>comment</key>
+ <key>norm_gain6</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain6</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant7</key>
<value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(64, 403)</value>
+ <key>bw7</key>
+ <value>0</value>
</param>
<param>
- <key>_rotation</key>
+ <key>center_freq7</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>blocks_vector_to_stream</key>
<param>
- <key>id</key>
- <value>blocks_vector_to_stream_0</value>
+ <key>norm_gain7</key>
+ <value>False</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>gain7</key>
+ <value>0</value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
+ <key>ant8</key>
+ <value></value>
</param>
<param>
- <key>num_items</key>
- <value>8192</value>
+ <key>bw8</key>
+ <value>0</value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>center_freq8</key>
+ <value>0</value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>norm_gain8</key>
+ <value>False</value>
</param>
<param>
- <key>affinity</key>
+ <key>gain8</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant9</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
+ <key>bw9</key>
<value>0</value>
</param>
<param>
- <key>maxoutbuf</key>
+ <key>center_freq9</key>
<value>0</value>
</param>
<param>
+ <key>norm_gain9</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain9</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>clock_rate</key>
+ <value>0.0</value>
+ </param>
+ <param>
<key>comment</key>
<value></value>
</param>
<param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>dev_addr</key>
+ <value>"send_frame_size=65536,num_send_frames=128,master_clock_rate=" + str(samp_rate*4)</value>
+ </param>
+ <param>
+ <key>dev_args</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(120, 563)</value>
+ <value>(992, 448)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>digital_ofdm_cyclic_prefixer</key>
<param>
<key>id</key>
- <value>digital_ofdm_cyclic_prefixer_0</value>
+ <value>uhd_usrp_sink_0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>type</key>
+ <value>fc32</value>
</param>
<param>
- <key>input_size</key>
- <value>8192</value>
+ <key>clock_source0</key>
+ <value></value>
</param>
<param>
- <key>cp_len</key>
- <value>256</value>
+ <key>sd_spec0</key>
+ <value></value>
</param>
<param>
- <key>rolloff</key>
- <value>0</value>
+ <key>time_source0</key>
+ <value></value>
</param>
<param>
- <key>tagname</key>
+ <key>clock_source1</key>
<value></value>
</param>
<param>
- <key>alias</key>
+ <key>sd_spec1</key>
<value></value>
</param>
<param>
- <key>affinity</key>
+ <key>time_source1</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>clock_source2</key>
+ <value></value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>sd_spec2</key>
+ <value></value>
</param>
<param>
- <key>comment</key>
+ <key>time_source2</key>
<value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(392, 419)</value>
+ <key>clock_source3</key>
+ <value></value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>sd_spec3</key>
+ <value></value>
</param>
- </block>
- <block>
- <key>dtv_dvbt_inner_coder</key>
<param>
- <key>id</key>
- <value>dtv_dvbt_inner_coder_0</value>
+ <key>time_source3</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>clock_source4</key>
+ <value></value>
</param>
<param>
- <key>ninput</key>
- <value>1</value>
+ <key>sd_spec4</key>
+ <value></value>
</param>
<param>
- <key>noutput</key>
- <value>6048</value>
+ <key>time_source4</key>
+ <value></value>
</param>
<param>
- <key>constellation</key>
- <value>64qam</value>
+ <key>clock_source5</key>
+ <value></value>
</param>
<param>
- <key>hierarchy</key>
- <value>nh</value>
+ <key>sd_spec5</key>
+ <value></value>
</param>
<param>
- <key>code_rate</key>
- <value>C2_3</value>
+ <key>time_source5</key>
+ <value></value>
</param>
<param>
- <key>alias</key>
+ <key>clock_source6</key>
<value></value>
</param>
<param>
- <key>affinity</key>
+ <key>sd_spec6</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>time_source6</key>
+ <value></value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>clock_source7</key>
+ <value></value>
</param>
<param>
- <key>comment</key>
+ <key>sd_spec7</key>
<value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(1000, 67)</value>
+ <key>time_source7</key>
+ <value></value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>nchan</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>num_mboards</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>samp_rate</key>
+ <value>samp_rate</value>
+ </param>
+ <param>
+ <key>hide_cmd_port</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>hide_lo_controls</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>stream_args</key>
+ <value></value>
+ </param>
+ <param>
+ <key>stream_chans</key>
+ <value>[]</value>
+ </param>
+ <param>
+ <key>sync</key>
+ <value></value>
+ </param>
+ <param>
+ <key>len_tag_name</key>
+ <value></value>
+ </param>
+ <param>
+ <key>otw</key>
+ <value></value>
</param>
</block>
<connection>
- <source_block_id>digital_ofdm_cyclic_prefixer_0</source_block_id>
- <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
+ <source_block_id>blocks_file_source_0</source_block_id>
+ <sink_block_id>dtv_dvbt_energy_dispersal_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>fft_vxx_0</source_block_id>
- <sink_block_id>digital_ofdm_cyclic_prefixer_0</sink_block_id>
+ <source_block_id>blocks_multiply_const_xx_0</source_block_id>
+ <sink_block_id>osmosdr_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>
+ <source_block_id>blocks_multiply_const_xx_0</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>blocks_file_source_0</source_block_id>
- <sink_block_id>dtv_dvbt_energy_dispersal_0</sink_block_id>
+ <source_block_id>blocks_vector_to_stream_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>dtv_dvbt_energy_dispersal_0</source_block_id>
- <sink_block_id>dtv_dvbt_reed_solomon_enc_0</sink_block_id>
+ <source_block_id>digital_ofdm_cyclic_prefixer_0</source_block_id>
+ <sink_block_id>blocks_multiply_const_xx_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>dtv_dvbt_convolutional_interleaver_0</source_block_id>
- <sink_block_id>dtv_dvbt_inner_coder_0</sink_block_id>
+ <source_block_id>dtv_dvbt_bit_inner_interleaver_0</source_block_id>
+ <sink_block_id>dtv_dvbt_symbol_inner_interleaver_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>dtv_dvbt_inner_coder_0</source_block_id>
- <sink_block_id>dtv_dvbt_bit_inner_interleaver_0</sink_block_id>
+ <source_block_id>dtv_dvbt_convolutional_interleaver_0</source_block_id>
+ <sink_block_id>dtv_dvbt_inner_coder_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>dtv_dvbt_bit_inner_interleaver_0</source_block_id>
- <sink_block_id>dtv_dvbt_symbol_inner_interleaver_0</sink_block_id>
+ <source_block_id>dtv_dvbt_energy_dispersal_0</source_block_id>
+ <sink_block_id>dtv_dvbt_reed_solomon_enc_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>dtv_dvbt_symbol_inner_interleaver_0</source_block_id>
- <sink_block_id>dtv_dvbt_map_0</sink_block_id>
+ <source_block_id>dtv_dvbt_inner_coder_0</source_block_id>
+ <sink_block_id>dtv_dvbt_bit_inner_interleaver_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
@@ -2050,8 +3297,8 @@
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>dtv_dvbt_reference_signals_0</source_block_id>
- <sink_block_id>fft_vxx_0</sink_block_id>
+ <source_block_id>dtv_dvbt_reed_solomon_enc_0</source_block_id>
+ <sink_block_id>dtv_dvbt_convolutional_interleaver_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
@@ -2062,14 +3309,20 @@
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>blocks_vector_to_stream_0</source_block_id>
- <sink_block_id>qtgui_const_sink_x_0</sink_block_id>
+ <source_block_id>dtv_dvbt_reference_signals_0</source_block_id>
+ <sink_block_id>fft_vxx_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>dtv_dvbt_reed_solomon_enc_0</source_block_id>
- <sink_block_id>dtv_dvbt_convolutional_interleaver_0</sink_block_id>
+ <source_block_id>dtv_dvbt_symbol_inner_interleaver_0</source_block_id>
+ <sink_block_id>dtv_dvbt_map_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>fft_vxx_0</source_block_id>
+ <sink_block_id>digital_ofdm_cyclic_prefixer_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
diff --git a/gr-dtv/examples/uhd_atsc_tx.grc b/gr-dtv/examples/uhd_atsc_tx.grc
index 24b451e474..7fe55eb19a 100644
--- a/gr-dtv/examples/uhd_atsc_tx.grc
+++ b/gr-dtv/examples/uhd_atsc_tx.grc
@@ -371,7 +371,7 @@
</param>
<param>
<key>file</key>
- <value>advatsc.ts</value>
+ <value>/run/shm/advatsc.ts</value>
</param>
<param>
<key>_coordinate</key>
@@ -1858,7 +1858,7 @@
</param>
<param>
<key>_enabled</key>
- <value>0</value>
+ <value>1</value>
</param>
<param>
<key>_coordinate</key>
@@ -2280,7 +2280,7 @@
</param>
<param>
<key>gain0</key>
- <value>50</value>
+ <value>tx_gain</value>
</param>
<param>
<key>ant10</key>
@@ -2924,7 +2924,7 @@
</param>
<param>
<key>_enabled</key>
- <value>1</value>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
diff --git a/gr-dtv/examples/vv003-cr23.grc b/gr-dtv/examples/vv003-cr23.grc
index ec2e572c8b..4e3df5a968 100644
--- a/gr-dtv/examples/vv003-cr23.grc
+++ b/gr-dtv/examples/vv003-cr23.grc
@@ -1,367 +1,361 @@
-<?xml version='1.0' encoding='ASCII'?>
-<?grc format='1' created='3.7.7'?>
+<?xml version='1.0' encoding='utf-8'?>
+<?grc format='1' created='3.7.11'?>
<flow_graph>
<timestamp>Sun Dec 28 23:36:42 2014</timestamp>
<block>
- <key>dtv_dvbt2_framemapper_cc</key>
+ <key>options</key>
<param>
- <key>id</key>
- <value>dtv_dvbt2_framemapper_cc_0</value>
+ <key>author</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>window_size</key>
+ <value>1280, 1024</value>
</param>
<param>
- <key>framesize</key>
- <value>FECFRAME_NORMAL</value>
+ <key>category</key>
+ <value>Custom</value>
</param>
<param>
- <key>rate</key>
- <value>C2_3</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
- <key>constellation</key>
- <value>MOD_256QAM</value>
+ <key>description</key>
+ <value></value>
</param>
<param>
- <key>rotation</key>
- <value>ROTATION_ON</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>fecblocks</key>
- <value>202</value>
+ <key>_coordinate</key>
+ <value>(8, 11)</value>
</param>
<param>
- <key>tiblocks</key>
- <value>3</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>carriermode</key>
- <value>CARRIERS_EXTENDED</value>
+ <key>generate_options</key>
+ <value>qt_gui</value>
</param>
<param>
- <key>fftsize1</key>
- <value>FFTSIZE_32K_T2GI</value>
+ <key>hier_block_src_path</key>
+ <value>.:</value>
</param>
<param>
- <key>fftsize2</key>
- <value>FFTSIZE_2K</value>
+ <key>id</key>
+ <value>vv003_cr23</value>
</param>
<param>
- <key>guardinterval</key>
- <value>GI_1_128</value>
+ <key>max_nouts</key>
+ <value>0</value>
</param>
<param>
- <key>l1constellation</key>
- <value>L1_MOD_64QAM</value>
+ <key>qt_qss_theme</key>
+ <value></value>
</param>
<param>
- <key>pilotpattern</key>
- <value>PILOT_PP7</value>
+ <key>realtime_scheduling</key>
+ <value></value>
</param>
<param>
- <key>t2frames</key>
- <value>2</value>
+ <key>run_command</key>
+ <value>{python} -u {filename}</value>
</param>
<param>
- <key>numdatasyms</key>
- <value>59</value>
+ <key>run_options</key>
+ <value>prompt</value>
</param>
<param>
- <key>paprmode1</key>
- <value>PAPR_OFF</value>
+ <key>run</key>
+ <value>True</value>
</param>
<param>
- <key>paprmode2</key>
- <value>PAPR_OFF</value>
+ <key>thread_safe_setters</key>
+ <value></value>
</param>
<param>
- <key>version</key>
- <value>VERSION_111</value>
+ <key>title</key>
+ <value></value>
</param>
+ </block>
+ <block>
+ <key>variable</key>
<param>
- <key>preamble1</key>
- <value>PREAMBLE_T2_SISO</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
- <key>preamble2</key>
- <value>PREAMBLE_T2_SISO</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>inputmode</key>
- <value>FECFRAME_NORMAL</value>
+ <key>_coordinate</key>
+ <value>(176, 12)</value>
</param>
<param>
- <key>reservedbiasbits</key>
- <value>RESERVED_OFF</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>l1scrambled</key>
- <value>L1_SCRAMBLED_OFF</value>
+ <key>id</key>
+ <value>center_freq</value>
</param>
<param>
- <key>inband</key>
- <value>INBAND_OFF</value>
+ <key>value</key>
+ <value>429e6</value>
</param>
+ </block>
+ <block>
+ <key>variable</key>
<param>
- <key>alias</key>
+ <key>comment</key>
<value></value>
</param>
<param>
- <key>affinity</key>
- <value></value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>_coordinate</key>
+ <value>(8, 75)</value>
</param>
<param>
- <key>maxoutbuf</key>
+ <key>_rotation</key>
<value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(734, 154)</value>
+ <key>id</key>
+ <value>samp_rate</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>value</key>
+ <value>(8000000.0 * 8) / 7</value>
</param>
</block>
<block>
- <key>variable</key>
+ <key>blocks_file_sink</key>
<param>
- <key>id</key>
- <value>samp_rate</value>
+ <key>append</key>
+ <value>False</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>value</key>
- <value>(8000000.0 * 8) / 7</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
- <key>alias</key>
+ <key>affinity</key>
<value></value>
</param>
<param>
+ <key>_enabled</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>file</key>
+ <value>vv.cfile</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(8, 75)</value>
+ <value>(848, 420)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>dtv_dvbt2_freqinterleaver_cc</key>
<param>
<key>id</key>
- <value>dtv_dvbt2_freqinterleaver_cc_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
+ <value>blocks_file_sink_0</value>
</param>
<param>
- <key>carriermode</key>
- <value>CARRIERS_EXTENDED</value>
+ <key>type</key>
+ <value>complex</value>
</param>
<param>
- <key>fftsize</key>
- <value>FFTSIZE_32K_T2GI</value>
+ <key>unbuffered</key>
+ <value>False</value>
</param>
<param>
- <key>pilotpattern</key>
- <value>PILOT_PP7</value>
+ <key>vlen</key>
+ <value>1</value>
</param>
+ </block>
+ <block>
+ <key>blocks_file_source</key>
<param>
- <key>guardinterval</key>
- <value>GI_1_128</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>numdatasyms</key>
- <value>59</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
- <key>paprmode1</key>
- <value>PAPR_OFF</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>paprmode2</key>
- <value>PAPR_OFF</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>version</key>
- <value>VERSION_111</value>
+ <key>file</key>
+ <value>/run/shm/adv32k256qam.ts</value>
</param>
<param>
- <key>preamble1</key>
- <value>PREAMBLE_T2_SISO</value>
+ <key>_coordinate</key>
+ <value>(120, 75)</value>
</param>
<param>
- <key>preamble2</key>
- <value>PREAMBLE_T2_SISO</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>id</key>
+ <value>blocks_file_source_0</value>
</param>
<param>
- <key>affinity</key>
- <value></value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>minoutbuf</key>
<value>0</value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>type</key>
+ <value>byte</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(1013, 218)</value>
+ <key>repeat</key>
+ <value>True</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>vlen</key>
+ <value>1</value>
</param>
</block>
<block>
- <key>options</key>
+ <key>blocks_multiply_const_xx</key>
<param>
- <key>id</key>
- <value>vv003_cr23</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
- <key>title</key>
- <value></value>
+ <key>const</key>
+ <value>0.2</value>
</param>
<param>
- <key>author</key>
+ <key>affinity</key>
<value></value>
</param>
<param>
- <key>description</key>
- <value></value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>window_size</key>
- <value>1280, 1024</value>
+ <key>_coordinate</key>
+ <value>(848, 540)</value>
</param>
<param>
- <key>generate_options</key>
- <value>wx_gui</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>category</key>
- <value>Custom</value>
+ <key>id</key>
+ <value>blocks_multiply_const_xx_0</value>
</param>
<param>
- <key>run_options</key>
- <value>prompt</value>
+ <key>type</key>
+ <value>complex</value>
</param>
<param>
- <key>run</key>
- <value>True</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>max_nouts</key>
+ <key>minoutbuf</key>
<value>0</value>
</param>
<param>
- <key>realtime_scheduling</key>
- <value></value>
+ <key>vlen</key>
+ <value>1</value>
</param>
+ </block>
+ <block>
+ <key>digital_ofdm_cyclic_prefixer</key>
<param>
<key>alias</key>
<value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(8, 11)</value>
+ <key>cp_len</key>
+ <value>32768/128</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>comment</key>
+ <value></value>
</param>
- </block>
- <block>
- <key>blocks_file_source</key>
<param>
- <key>id</key>
- <value>blocks_file_source_0</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>file</key>
- <value>/run/shm/adv32k256qam.ts</value>
- </param>
- <param>
- <key>type</key>
- <value>byte</value>
+ <key>input_size</key>
+ <value>32768</value>
</param>
<param>
- <key>repeat</key>
- <value>True</value>
+ <key>_coordinate</key>
+ <value>(344, 464)</value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>id</key>
+ <value>digital_ofdm_cyclic_prefixer_0</value>
</param>
<param>
- <key>affinity</key>
+ <key>tagname</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>(120, 75)</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>_rotation</key>
+ <key>rolloff</key>
<value>0</value>
</param>
</block>
<block>
<key>dtv_dvb_bbheader_bb</key>
<param>
- <key>id</key>
- <value>dtv_dvb_bbheader_bb_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>standard</key>
- <value>STANDARD_DVBT2</value>
+ <key>mode</key>
+ <value>INPUTMODE_NORMAL</value>
</param>
<param>
- <key>framesize</key>
- <value>FECFRAME_NORMAL</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>rate1</key>
@@ -377,70 +371,78 @@
</param>
<param>
<key>rate4</key>
+ <value>C1_5_MEDIUM</value>
+ </param>
+ <param>
+ <key>rate5</key>
<value>C1_4</value>
</param>
<param>
- <key>rolloff</key>
- <value>RO_0_35</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
- <key>mode</key>
- <value>FECFRAME_SHORT</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>inband</key>
- <value>INBAND_OFF</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>fecblocks</key>
<value>168</value>
</param>
<param>
- <key>tsrate</key>
- <value>4000000</value>
+ <key>framesize1</key>
+ <value>FECFRAME_NORMAL</value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>framesize2</key>
+ <value>FECFRAME_NORMAL</value>
</param>
<param>
- <key>affinity</key>
- <value></value>
+ <key>_coordinate</key>
+ <value>(360, 24)</value>
</param>
<param>
- <key>minoutbuf</key>
+ <key>_rotation</key>
<value>0</value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>id</key>
+ <value>dtv_dvb_bbheader_bb_0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(352, 19)</value>
+ <key>inband</key>
+ <value>INBAND_OFF</value>
</param>
<param>
- <key>_rotation</key>
+ <key>maxoutbuf</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>dtv_dvb_bbscrambler_bb</key>
<param>
- <key>id</key>
- <value>dtv_dvb_bbscrambler_bb_0</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>rolloff</key>
+ <value>RO_0_35</value>
</param>
<param>
<key>standard</key>
<value>STANDARD_DVBT2</value>
</param>
<param>
- <key>framesize</key>
- <value>FECFRAME_NORMAL</value>
+ <key>tsrate</key>
+ <value>4000000</value>
+ </param>
+ </block>
+ <block>
+ <key>dtv_dvb_bbscrambler_bb</key>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>rate1</key>
@@ -456,10 +458,14 @@
</param>
<param>
<key>rate4</key>
+ <value>C1_5_MEDIUM</value>
+ </param>
+ <param>
+ <key>rate5</key>
<value>C1_4</value>
</param>
<param>
- <key>alias</key>
+ <key>comment</key>
<value></value>
</param>
<param>
@@ -467,39 +473,47 @@
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>framesize1</key>
+ <value>FECFRAME_NORMAL</value>
+ </param>
+ <param>
+ <key>framesize2</key>
+ <value>FECFRAME_NORMAL</value>
</param>
<param>
<key>_coordinate</key>
- <value>(656, 35)</value>
+ <value>(632, 36)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>dtv_dvb_bch_bb</key>
<param>
<key>id</key>
- <value>dtv_dvb_bch_bb_0</value>
+ <value>dtv_dvb_bbscrambler_bb_0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>standard</key>
<value>STANDARD_DVBT2</value>
</param>
+ </block>
+ <block>
+ <key>dtv_dvb_bch_bb</key>
<param>
- <key>framesize</key>
- <value>FECFRAME_NORMAL</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>rate1</key>
@@ -515,10 +529,14 @@
</param>
<param>
<key>rate4</key>
+ <value>C1_5_MEDIUM</value>
+ </param>
+ <param>
+ <key>rate5</key>
<value>C1_4</value>
</param>
<param>
- <key>alias</key>
+ <key>comment</key>
<value></value>
</param>
<param>
@@ -526,39 +544,47 @@
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>framesize1</key>
+ <value>FECFRAME_NORMAL</value>
+ </param>
+ <param>
+ <key>framesize2</key>
+ <value>FECFRAME_NORMAL</value>
</param>
<param>
<key>_coordinate</key>
- <value>(856, 35)</value>
+ <value>(856, 36)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>dtv_dvb_ldpc_bb</key>
<param>
<key>id</key>
- <value>dtv_dvb_ldpc_bb_0</value>
+ <value>dtv_dvb_bch_bb_0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>standard</key>
<value>STANDARD_DVBT2</value>
</param>
+ </block>
+ <block>
+ <key>dtv_dvb_ldpc_bb</key>
<param>
- <key>framesize</key>
- <value>FECFRAME_NORMAL</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>rate1</key>
@@ -574,180 +600,260 @@
</param>
<param>
<key>rate4</key>
+ <value>C1_5_MEDIUM</value>
+ </param>
+ <param>
+ <key>rate5</key>
<value>C1_4</value>
</param>
<param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
<key>constellation</key>
<value>MOD_OTHER</value>
</param>
<param>
- <key>alias</key>
+ <key>affinity</key>
<value></value>
</param>
<param>
- <key>affinity</key>
- <value></value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>framesize1</key>
+ <value>FECFRAME_NORMAL</value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>framesize2</key>
+ <value>FECFRAME_NORMAL</value>
</param>
<param>
<key>_coordinate</key>
- <value>(1064, 35)</value>
+ <value>(1072, 36)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
+ <param>
+ <key>id</key>
+ <value>dtv_dvb_ldpc_bb_0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>standard</key>
+ <value>STANDARD_DVBT2</value>
+ </param>
</block>
<block>
- <key>dtv_dvbt2_pilotgenerator_cc</key>
+ <key>dtv_dvbt2_cellinterleaver_cc</key>
<param>
- <key>id</key>
- <value>dtv_dvbt2_pilotgenerator_cc_0</value>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>constellation</key>
+ <value>MOD_256QAM</value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>carriermode</key>
- <value>CARRIERS_EXTENDED</value>
+ <key>fecblocks</key>
+ <value>202</value>
</param>
<param>
- <key>fftsize</key>
- <value>FFTSIZE_32K_T2GI</value>
+ <key>framesize</key>
+ <value>FECFRAME_NORMAL</value>
</param>
<param>
- <key>pilotpattern</key>
- <value>PILOT_PP7</value>
+ <key>_coordinate</key>
+ <value>(504, 224)</value>
</param>
<param>
- <key>guardinterval</key>
- <value>GI_1_128</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>numdatasyms</key>
- <value>59</value>
+ <key>id</key>
+ <value>dtv_dvbt2_cellinterleaver_cc_0</value>
</param>
<param>
- <key>paprmode1</key>
- <value>PAPR_OFF</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>paprmode2</key>
- <value>PAPR_OFF</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>version</key>
- <value>VERSION_111</value>
+ <key>tiblocks</key>
+ <value>3</value>
</param>
+ </block>
+ <block>
+ <key>dtv_dvbt2_framemapper_cc</key>
<param>
- <key>preamble1</key>
- <value>PREAMBLE_T2_SISO</value>
+ <key>inputmode</key>
+ <value>FECFRAME_NORMAL</value>
</param>
<param>
- <key>preamble2</key>
- <value>PREAMBLE_T2_SISO</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>misogroup</key>
- <value>MISO_TX1</value>
+ <key>rate</key>
+ <value>C2_3</value>
</param>
<param>
- <key>equalization</key>
- <value>EQUALIZATION_ON</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
- <key>bandwidth</key>
- <value>BANDWIDTH_8_0_MHZ</value>
+ <key>rotation</key>
+ <value>ROTATION_ON</value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>constellation</key>
+ <value>MOD_256QAM</value>
</param>
<param>
<key>affinity</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>carriermode</key>
+ <value>CARRIERS_EXTENDED</value>
+ </param>
+ <param>
+ <key>fecblocks</key>
+ <value>202</value>
+ </param>
+ <param>
+ <key>framesize</key>
+ <value>FECFRAME_NORMAL</value>
+ </param>
+ <param>
+ <key>fftsize1</key>
+ <value>FFTSIZE_32K_T2GI</value>
+ </param>
+ <param>
+ <key>fftsize2</key>
+ <value>FFTSIZE_2K</value>
</param>
<param>
<key>_coordinate</key>
- <value>(64, 459)</value>
+ <value>(736, 140)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>digital_ofdm_cyclic_prefixer</key>
+ <param>
+ <key>guardinterval</key>
+ <value>GI_1_128</value>
+ </param>
<param>
<key>id</key>
- <value>digital_ofdm_cyclic_prefixer_0</value>
+ <value>dtv_dvbt2_framemapper_cc_0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>inband</key>
+ <value>INBAND_OFF</value>
</param>
<param>
- <key>input_size</key>
- <value>32768</value>
+ <key>l1constellation</key>
+ <value>L1_MOD_64QAM</value>
</param>
<param>
- <key>cp_len</key>
- <value>32768/128</value>
+ <key>l1scrambled</key>
+ <value>L1_SCRAMBLED_OFF</value>
</param>
<param>
- <key>rolloff</key>
+ <key>maxoutbuf</key>
<value>0</value>
</param>
<param>
- <key>tagname</key>
- <value></value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>numdatasyms</key>
+ <value>59</value>
</param>
<param>
- <key>affinity</key>
- <value></value>
+ <key>paprmode1</key>
+ <value>PAPR_OFF</value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>paprmode2</key>
+ <value>PAPR_OFF</value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>pilotpattern</key>
+ <value>PILOT_PP7</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(344, 515)</value>
+ <key>preamble1</key>
+ <value>PREAMBLE_T2_SISO</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>preamble2</key>
+ <value>PREAMBLE_T2_SISO</value>
+ </param>
+ <param>
+ <key>reservedbiasbits</key>
+ <value>RESERVED_OFF</value>
+ </param>
+ <param>
+ <key>version</key>
+ <value>VERSION_111</value>
+ </param>
+ <param>
+ <key>t2frames</key>
+ <value>2</value>
+ </param>
+ <param>
+ <key>tiblocks</key>
+ <value>3</value>
</param>
</block>
<block>
- <key>dtv_dvbt2_p1insertion_cc</key>
+ <key>dtv_dvbt2_freqinterleaver_cc</key>
<param>
- <key>id</key>
- <value>dtv_dvbt2_p1insertion_cc_0</value>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
@@ -758,24 +864,48 @@
<value>CARRIERS_EXTENDED</value>
</param>
<param>
- <key>fftsize1</key>
+ <key>fftsize</key>
<value>FFTSIZE_32K_T2GI</value>
</param>
<param>
- <key>fftsize2</key>
- <value>FFTSIZE_2K</value>
+ <key>_coordinate</key>
+ <value>(1016, 196)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
<key>guardinterval</key>
<value>GI_1_128</value>
</param>
<param>
+ <key>id</key>
+ <value>dtv_dvbt2_freqinterleaver_cc_0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>numdatasyms</key>
<value>59</value>
</param>
<param>
- <key>version</key>
- <value>VERSION_111</value>
+ <key>paprmode1</key>
+ <value>PAPR_OFF</value>
+ </param>
+ <param>
+ <key>paprmode2</key>
+ <value>PAPR_OFF</value>
+ </param>
+ <param>
+ <key>pilotpattern</key>
+ <value>PILOT_PP7</value>
</param>
<param>
<key>preamble1</key>
@@ -786,1167 +916,1186 @@
<value>PREAMBLE_T2_SISO</value>
</param>
<param>
- <key>showlevels</key>
- <value>SHOWLEVELS_OFF</value>
+ <key>version</key>
+ <value>VERSION_111</value>
</param>
+ </block>
+ <block>
+ <key>dtv_dvbt2_interleaver_bb</key>
<param>
- <key>vclip</key>
- <value>3.3</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>alias</key>
+ <key>rate</key>
+ <value>C2_3</value>
+ </param>
+ <param>
+ <key>comment</key>
<value></value>
</param>
<param>
+ <key>constellation</key>
+ <value>MOD_256QAM</value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>framesize</key>
+ <value>FECFRAME_NORMAL</value>
</param>
<param>
<key>_coordinate</key>
- <value>(560, 483)</value>
+ <value>(48, 228)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>blocks_multiply_const_vxx</key>
<param>
<key>id</key>
- <value>blocks_multiply_const_vxx_0</value>
+ <value>dtv_dvbt2_interleaver_bb_0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
+ </block>
+ <block>
+ <key>dtv_dvbt2_modulator_bc</key>
<param>
- <key>const</key>
- <value>0.2</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>rotation</key>
+ <value>ROTATION_ON</value>
+ </param>
+ <param>
+ <key>constellation</key>
+ <value>MOD_256QAM</value>
</param>
<param>
<key>affinity</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>framesize</key>
+ <value>FECFRAME_NORMAL</value>
</param>
<param>
<key>_coordinate</key>
- <value>(864, 571)</value>
+ <value>(272, 228)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>osmosdr_sink</key>
<param>
<key>id</key>
- <value>osmosdr_sink_0</value>
+ <value>dtv_dvbt2_modulator_bc_0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>type</key>
- <value>fc32</value>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>dtv_dvbt2_p1insertion_cc</key>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>args</key>
- <value>bladerf=0,buffers=128,buflen=32768</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
- <key>sync</key>
+ <key>affinity</key>
<value></value>
</param>
<param>
- <key>num_mboards</key>
- <value>1</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>clock_source0</key>
- <value></value>
+ <key>carriermode</key>
+ <value>CARRIERS_EXTENDED</value>
</param>
<param>
- <key>time_source0</key>
- <value></value>
+ <key>fftsize1</key>
+ <value>FFTSIZE_32K_T2GI</value>
</param>
<param>
- <key>clock_source1</key>
- <value></value>
+ <key>fftsize2</key>
+ <value>FFTSIZE_2K</value>
</param>
<param>
- <key>time_source1</key>
- <value></value>
+ <key>_coordinate</key>
+ <value>(560, 440)</value>
</param>
<param>
- <key>clock_source2</key>
- <value></value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>time_source2</key>
- <value></value>
+ <key>guardinterval</key>
+ <value>GI_1_128</value>
</param>
<param>
- <key>clock_source3</key>
- <value></value>
+ <key>id</key>
+ <value>dtv_dvbt2_p1insertion_cc_0</value>
</param>
<param>
- <key>time_source3</key>
- <value></value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>clock_source4</key>
- <value></value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>time_source4</key>
- <value></value>
+ <key>numdatasyms</key>
+ <value>59</value>
</param>
<param>
- <key>clock_source5</key>
- <value></value>
+ <key>preamble1</key>
+ <value>PREAMBLE_T2_SISO</value>
</param>
<param>
- <key>time_source5</key>
- <value></value>
+ <key>preamble2</key>
+ <value>PREAMBLE_T2_SISO</value>
</param>
<param>
- <key>clock_source6</key>
- <value></value>
+ <key>showlevels</key>
+ <value>SHOWLEVELS_OFF</value>
</param>
<param>
- <key>time_source6</key>
- <value></value>
+ <key>version</key>
+ <value>VERSION_111</value>
</param>
<param>
- <key>clock_source7</key>
+ <key>vclip</key>
+ <value>3.3</value>
+ </param>
+ </block>
+ <block>
+ <key>dtv_dvbt2_pilotgenerator_cc</key>
+ <param>
+ <key>bandwidth</key>
+ <value>BANDWIDTH_8_0_MHZ</value>
+ </param>
+ <param>
+ <key>alias</key>
<value></value>
</param>
<param>
- <key>time_source7</key>
+ <key>comment</key>
<value></value>
</param>
<param>
- <key>nchan</key>
- <value>1</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>sample_rate</key>
- <value>samp_rate</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>freq0</key>
- <value>429e6</value>
+ <key>carriermode</key>
+ <value>CARRIERS_EXTENDED</value>
</param>
<param>
- <key>corr0</key>
- <value>0</value>
+ <key>fftsize</key>
+ <value>FFTSIZE_32K_T2GI</value>
</param>
<param>
- <key>gain0</key>
- <value>18</value>
+ <key>_coordinate</key>
+ <value>(56, 420)</value>
</param>
<param>
- <key>if_gain0</key>
+ <key>_rotation</key>
<value>0</value>
</param>
<param>
- <key>bb_gain0</key>
- <value>-8</value>
+ <key>guardinterval</key>
+ <value>GI_1_128</value>
</param>
<param>
- <key>ant0</key>
- <value></value>
+ <key>id</key>
+ <value>dtv_dvbt2_pilotgenerator_cc_0</value>
</param>
<param>
- <key>bw0</key>
- <value>8750000</value>
+ <key>misogroup</key>
+ <value>MISO_TX1</value>
</param>
<param>
- <key>freq1</key>
- <value>100e6</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>corr1</key>
+ <key>minoutbuf</key>
<value>0</value>
</param>
<param>
- <key>gain1</key>
- <value>10</value>
+ <key>numdatasyms</key>
+ <value>59</value>
</param>
<param>
- <key>if_gain1</key>
- <value>20</value>
+ <key>paprmode1</key>
+ <value>PAPR_OFF</value>
</param>
<param>
- <key>bb_gain1</key>
- <value>20</value>
+ <key>paprmode2</key>
+ <value>PAPR_OFF</value>
</param>
<param>
- <key>ant1</key>
- <value></value>
+ <key>pilotpattern</key>
+ <value>PILOT_PP7</value>
</param>
<param>
- <key>bw1</key>
- <value>0</value>
+ <key>preamble1</key>
+ <value>PREAMBLE_T2_SISO</value>
</param>
<param>
- <key>freq2</key>
- <value>100e6</value>
+ <key>preamble2</key>
+ <value>PREAMBLE_T2_SISO</value>
</param>
<param>
- <key>corr2</key>
- <value>0</value>
+ <key>equalization</key>
+ <value>EQUALIZATION_ON</value>
</param>
<param>
- <key>gain2</key>
- <value>10</value>
+ <key>version</key>
+ <value>VERSION_111</value>
</param>
+ </block>
+ <block>
+ <key>osmosdr_sink</key>
<param>
- <key>if_gain2</key>
- <value>20</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>bb_gain2</key>
- <value>20</value>
+ <key>ant0</key>
+ <value></value>
</param>
<param>
- <key>ant2</key>
- <value></value>
+ <key>bb_gain0</key>
+ <value>-8</value>
</param>
<param>
- <key>bw2</key>
+ <key>bw0</key>
+ <value>8750000</value>
+ </param>
+ <param>
+ <key>corr0</key>
<value>0</value>
</param>
<param>
- <key>freq3</key>
- <value>100e6</value>
+ <key>freq0</key>
+ <value>center_freq</value>
</param>
<param>
- <key>corr3</key>
+ <key>if_gain0</key>
<value>0</value>
</param>
<param>
- <key>gain3</key>
+ <key>gain0</key>
<value>10</value>
</param>
<param>
- <key>if_gain3</key>
- <value>20</value>
+ <key>ant10</key>
+ <value></value>
</param>
<param>
- <key>bb_gain3</key>
+ <key>bb_gain10</key>
<value>20</value>
</param>
<param>
- <key>ant3</key>
- <value></value>
+ <key>bw10</key>
+ <value>0</value>
</param>
<param>
- <key>bw3</key>
+ <key>corr10</key>
<value>0</value>
</param>
<param>
- <key>freq4</key>
+ <key>freq10</key>
<value>100e6</value>
</param>
<param>
- <key>corr4</key>
- <value>0</value>
+ <key>if_gain10</key>
+ <value>20</value>
</param>
<param>
- <key>gain4</key>
+ <key>gain10</key>
<value>10</value>
</param>
<param>
- <key>if_gain4</key>
- <value>20</value>
+ <key>ant11</key>
+ <value></value>
</param>
<param>
- <key>bb_gain4</key>
+ <key>bb_gain11</key>
<value>20</value>
</param>
<param>
- <key>ant4</key>
- <value></value>
+ <key>bw11</key>
+ <value>0</value>
</param>
<param>
- <key>bw4</key>
+ <key>corr11</key>
<value>0</value>
</param>
<param>
- <key>freq5</key>
+ <key>freq11</key>
<value>100e6</value>
</param>
<param>
- <key>corr5</key>
- <value>0</value>
+ <key>if_gain11</key>
+ <value>20</value>
</param>
<param>
- <key>gain5</key>
+ <key>gain11</key>
<value>10</value>
</param>
<param>
- <key>if_gain5</key>
- <value>20</value>
+ <key>ant12</key>
+ <value></value>
</param>
<param>
- <key>bb_gain5</key>
+ <key>bb_gain12</key>
<value>20</value>
</param>
<param>
- <key>ant5</key>
- <value></value>
+ <key>bw12</key>
+ <value>0</value>
</param>
<param>
- <key>bw5</key>
+ <key>corr12</key>
<value>0</value>
</param>
<param>
- <key>freq6</key>
+ <key>freq12</key>
<value>100e6</value>
</param>
<param>
- <key>corr6</key>
- <value>0</value>
+ <key>if_gain12</key>
+ <value>20</value>
</param>
<param>
- <key>gain6</key>
+ <key>gain12</key>
<value>10</value>
</param>
<param>
- <key>if_gain6</key>
- <value>20</value>
+ <key>ant13</key>
+ <value></value>
</param>
<param>
- <key>bb_gain6</key>
+ <key>bb_gain13</key>
<value>20</value>
</param>
<param>
- <key>ant6</key>
- <value></value>
+ <key>bw13</key>
+ <value>0</value>
</param>
<param>
- <key>bw6</key>
+ <key>corr13</key>
<value>0</value>
</param>
<param>
- <key>freq7</key>
+ <key>freq13</key>
<value>100e6</value>
</param>
<param>
- <key>corr7</key>
- <value>0</value>
+ <key>if_gain13</key>
+ <value>20</value>
</param>
<param>
- <key>gain7</key>
+ <key>gain13</key>
<value>10</value>
</param>
<param>
- <key>if_gain7</key>
- <value>20</value>
+ <key>ant14</key>
+ <value></value>
</param>
<param>
- <key>bb_gain7</key>
+ <key>bb_gain14</key>
<value>20</value>
</param>
<param>
- <key>ant7</key>
- <value></value>
+ <key>bw14</key>
+ <value>0</value>
</param>
<param>
- <key>bw7</key>
+ <key>corr14</key>
<value>0</value>
</param>
<param>
- <key>freq8</key>
+ <key>freq14</key>
<value>100e6</value>
</param>
<param>
- <key>corr8</key>
- <value>0</value>
+ <key>if_gain14</key>
+ <value>20</value>
</param>
<param>
- <key>gain8</key>
+ <key>gain14</key>
<value>10</value>
</param>
<param>
- <key>if_gain8</key>
- <value>20</value>
+ <key>ant15</key>
+ <value></value>
</param>
<param>
- <key>bb_gain8</key>
+ <key>bb_gain15</key>
<value>20</value>
</param>
<param>
- <key>ant8</key>
- <value></value>
+ <key>bw15</key>
+ <value>0</value>
</param>
<param>
- <key>bw8</key>
+ <key>corr15</key>
<value>0</value>
</param>
<param>
- <key>freq9</key>
+ <key>freq15</key>
<value>100e6</value>
</param>
<param>
- <key>corr9</key>
- <value>0</value>
+ <key>if_gain15</key>
+ <value>20</value>
</param>
<param>
- <key>gain9</key>
+ <key>gain15</key>
<value>10</value>
</param>
<param>
- <key>if_gain9</key>
- <value>20</value>
+ <key>ant16</key>
+ <value></value>
</param>
<param>
- <key>bb_gain9</key>
+ <key>bb_gain16</key>
<value>20</value>
</param>
<param>
- <key>ant9</key>
- <value></value>
+ <key>bw16</key>
+ <value>0</value>
</param>
<param>
- <key>bw9</key>
+ <key>corr16</key>
<value>0</value>
</param>
<param>
- <key>freq10</key>
+ <key>freq16</key>
<value>100e6</value>
</param>
<param>
- <key>corr10</key>
- <value>0</value>
+ <key>if_gain16</key>
+ <value>20</value>
</param>
<param>
- <key>gain10</key>
+ <key>gain16</key>
<value>10</value>
</param>
<param>
- <key>if_gain10</key>
- <value>20</value>
+ <key>ant17</key>
+ <value></value>
</param>
<param>
- <key>bb_gain10</key>
+ <key>bb_gain17</key>
<value>20</value>
</param>
<param>
- <key>ant10</key>
- <value></value>
+ <key>bw17</key>
+ <value>0</value>
</param>
<param>
- <key>bw10</key>
+ <key>corr17</key>
<value>0</value>
</param>
<param>
- <key>freq11</key>
+ <key>freq17</key>
<value>100e6</value>
</param>
<param>
- <key>corr11</key>
- <value>0</value>
+ <key>if_gain17</key>
+ <value>20</value>
</param>
<param>
- <key>gain11</key>
+ <key>gain17</key>
<value>10</value>
</param>
<param>
- <key>if_gain11</key>
- <value>20</value>
+ <key>ant18</key>
+ <value></value>
</param>
<param>
- <key>bb_gain11</key>
+ <key>bb_gain18</key>
<value>20</value>
</param>
<param>
- <key>ant11</key>
- <value></value>
+ <key>bw18</key>
+ <value>0</value>
</param>
<param>
- <key>bw11</key>
+ <key>corr18</key>
<value>0</value>
</param>
<param>
- <key>freq12</key>
+ <key>freq18</key>
<value>100e6</value>
</param>
<param>
- <key>corr12</key>
- <value>0</value>
+ <key>if_gain18</key>
+ <value>20</value>
</param>
<param>
- <key>gain12</key>
+ <key>gain18</key>
<value>10</value>
</param>
<param>
- <key>if_gain12</key>
- <value>20</value>
+ <key>ant19</key>
+ <value></value>
</param>
<param>
- <key>bb_gain12</key>
+ <key>bb_gain19</key>
<value>20</value>
</param>
<param>
- <key>ant12</key>
- <value></value>
+ <key>bw19</key>
+ <value>0</value>
</param>
<param>
- <key>bw12</key>
+ <key>corr19</key>
<value>0</value>
</param>
<param>
- <key>freq13</key>
+ <key>freq19</key>
<value>100e6</value>
</param>
<param>
- <key>corr13</key>
- <value>0</value>
+ <key>if_gain19</key>
+ <value>20</value>
</param>
<param>
- <key>gain13</key>
+ <key>gain19</key>
<value>10</value>
</param>
<param>
- <key>if_gain13</key>
- <value>20</value>
+ <key>ant1</key>
+ <value></value>
</param>
<param>
- <key>bb_gain13</key>
+ <key>bb_gain1</key>
<value>20</value>
</param>
<param>
- <key>ant13</key>
- <value></value>
+ <key>bw1</key>
+ <value>0</value>
</param>
<param>
- <key>bw13</key>
+ <key>corr1</key>
<value>0</value>
</param>
<param>
- <key>freq14</key>
+ <key>freq1</key>
<value>100e6</value>
</param>
<param>
- <key>corr14</key>
- <value>0</value>
+ <key>if_gain1</key>
+ <value>20</value>
</param>
<param>
- <key>gain14</key>
+ <key>gain1</key>
<value>10</value>
</param>
<param>
- <key>if_gain14</key>
- <value>20</value>
+ <key>ant20</key>
+ <value></value>
</param>
<param>
- <key>bb_gain14</key>
+ <key>bb_gain20</key>
<value>20</value>
</param>
<param>
- <key>ant14</key>
- <value></value>
+ <key>bw20</key>
+ <value>0</value>
</param>
<param>
- <key>bw14</key>
+ <key>corr20</key>
<value>0</value>
</param>
<param>
- <key>freq15</key>
+ <key>freq20</key>
<value>100e6</value>
</param>
<param>
- <key>corr15</key>
- <value>0</value>
+ <key>if_gain20</key>
+ <value>20</value>
</param>
<param>
- <key>gain15</key>
+ <key>gain20</key>
<value>10</value>
</param>
<param>
- <key>if_gain15</key>
- <value>20</value>
+ <key>ant21</key>
+ <value></value>
</param>
<param>
- <key>bb_gain15</key>
+ <key>bb_gain21</key>
<value>20</value>
</param>
<param>
- <key>ant15</key>
- <value></value>
+ <key>bw21</key>
+ <value>0</value>
</param>
<param>
- <key>bw15</key>
+ <key>corr21</key>
<value>0</value>
</param>
<param>
- <key>freq16</key>
+ <key>freq21</key>
<value>100e6</value>
</param>
<param>
- <key>corr16</key>
- <value>0</value>
+ <key>if_gain21</key>
+ <value>20</value>
</param>
<param>
- <key>gain16</key>
+ <key>gain21</key>
<value>10</value>
</param>
<param>
- <key>if_gain16</key>
- <value>20</value>
+ <key>ant22</key>
+ <value></value>
</param>
<param>
- <key>bb_gain16</key>
+ <key>bb_gain22</key>
<value>20</value>
</param>
<param>
- <key>ant16</key>
- <value></value>
+ <key>bw22</key>
+ <value>0</value>
</param>
<param>
- <key>bw16</key>
+ <key>corr22</key>
<value>0</value>
</param>
<param>
- <key>freq17</key>
+ <key>freq22</key>
<value>100e6</value>
</param>
<param>
- <key>corr17</key>
- <value>0</value>
+ <key>if_gain22</key>
+ <value>20</value>
</param>
<param>
- <key>gain17</key>
+ <key>gain22</key>
<value>10</value>
</param>
<param>
- <key>if_gain17</key>
- <value>20</value>
+ <key>ant23</key>
+ <value></value>
</param>
<param>
- <key>bb_gain17</key>
+ <key>bb_gain23</key>
<value>20</value>
</param>
<param>
- <key>ant17</key>
- <value></value>
+ <key>bw23</key>
+ <value>0</value>
</param>
<param>
- <key>bw17</key>
+ <key>corr23</key>
<value>0</value>
</param>
<param>
- <key>freq18</key>
+ <key>freq23</key>
<value>100e6</value>
</param>
<param>
- <key>corr18</key>
- <value>0</value>
+ <key>if_gain23</key>
+ <value>20</value>
</param>
<param>
- <key>gain18</key>
+ <key>gain23</key>
<value>10</value>
</param>
<param>
- <key>if_gain18</key>
- <value>20</value>
+ <key>ant24</key>
+ <value></value>
</param>
<param>
- <key>bb_gain18</key>
+ <key>bb_gain24</key>
<value>20</value>
</param>
<param>
- <key>ant18</key>
- <value></value>
+ <key>bw24</key>
+ <value>0</value>
</param>
<param>
- <key>bw18</key>
+ <key>corr24</key>
<value>0</value>
</param>
<param>
- <key>freq19</key>
+ <key>freq24</key>
<value>100e6</value>
</param>
<param>
- <key>corr19</key>
- <value>0</value>
+ <key>if_gain24</key>
+ <value>20</value>
</param>
<param>
- <key>gain19</key>
+ <key>gain24</key>
<value>10</value>
</param>
<param>
- <key>if_gain19</key>
- <value>20</value>
+ <key>ant25</key>
+ <value></value>
</param>
<param>
- <key>bb_gain19</key>
+ <key>bb_gain25</key>
<value>20</value>
</param>
<param>
- <key>ant19</key>
- <value></value>
+ <key>bw25</key>
+ <value>0</value>
</param>
<param>
- <key>bw19</key>
+ <key>corr25</key>
<value>0</value>
</param>
<param>
- <key>freq20</key>
+ <key>freq25</key>
<value>100e6</value>
</param>
<param>
- <key>corr20</key>
- <value>0</value>
+ <key>if_gain25</key>
+ <value>20</value>
</param>
<param>
- <key>gain20</key>
+ <key>gain25</key>
<value>10</value>
</param>
<param>
- <key>if_gain20</key>
- <value>20</value>
+ <key>ant26</key>
+ <value></value>
</param>
<param>
- <key>bb_gain20</key>
+ <key>bb_gain26</key>
<value>20</value>
</param>
<param>
- <key>ant20</key>
- <value></value>
+ <key>bw26</key>
+ <value>0</value>
</param>
<param>
- <key>bw20</key>
+ <key>corr26</key>
<value>0</value>
</param>
<param>
- <key>freq21</key>
+ <key>freq26</key>
<value>100e6</value>
</param>
<param>
- <key>corr21</key>
- <value>0</value>
+ <key>if_gain26</key>
+ <value>20</value>
</param>
<param>
- <key>gain21</key>
+ <key>gain26</key>
<value>10</value>
</param>
<param>
- <key>if_gain21</key>
- <value>20</value>
+ <key>ant27</key>
+ <value></value>
</param>
<param>
- <key>bb_gain21</key>
+ <key>bb_gain27</key>
<value>20</value>
</param>
<param>
- <key>ant21</key>
- <value></value>
+ <key>bw27</key>
+ <value>0</value>
</param>
<param>
- <key>bw21</key>
+ <key>corr27</key>
<value>0</value>
</param>
<param>
- <key>freq22</key>
+ <key>freq27</key>
<value>100e6</value>
</param>
<param>
- <key>corr22</key>
- <value>0</value>
+ <key>if_gain27</key>
+ <value>20</value>
</param>
<param>
- <key>gain22</key>
+ <key>gain27</key>
<value>10</value>
</param>
<param>
- <key>if_gain22</key>
- <value>20</value>
+ <key>ant28</key>
+ <value></value>
</param>
<param>
- <key>bb_gain22</key>
+ <key>bb_gain28</key>
<value>20</value>
</param>
<param>
- <key>ant22</key>
- <value></value>
+ <key>bw28</key>
+ <value>0</value>
</param>
<param>
- <key>bw22</key>
+ <key>corr28</key>
<value>0</value>
</param>
<param>
- <key>freq23</key>
+ <key>freq28</key>
<value>100e6</value>
</param>
<param>
- <key>corr23</key>
- <value>0</value>
+ <key>if_gain28</key>
+ <value>20</value>
</param>
<param>
- <key>gain23</key>
+ <key>gain28</key>
<value>10</value>
</param>
<param>
- <key>if_gain23</key>
- <value>20</value>
+ <key>ant29</key>
+ <value></value>
</param>
<param>
- <key>bb_gain23</key>
+ <key>bb_gain29</key>
<value>20</value>
</param>
<param>
- <key>ant23</key>
- <value></value>
+ <key>bw29</key>
+ <value>0</value>
</param>
<param>
- <key>bw23</key>
+ <key>corr29</key>
<value>0</value>
</param>
<param>
- <key>freq24</key>
+ <key>freq29</key>
<value>100e6</value>
</param>
<param>
- <key>corr24</key>
- <value>0</value>
+ <key>if_gain29</key>
+ <value>20</value>
</param>
<param>
- <key>gain24</key>
+ <key>gain29</key>
<value>10</value>
</param>
<param>
- <key>if_gain24</key>
- <value>20</value>
+ <key>ant2</key>
+ <value></value>
</param>
<param>
- <key>bb_gain24</key>
+ <key>bb_gain2</key>
<value>20</value>
</param>
<param>
- <key>ant24</key>
- <value></value>
+ <key>bw2</key>
+ <value>0</value>
</param>
<param>
- <key>bw24</key>
+ <key>corr2</key>
<value>0</value>
</param>
<param>
- <key>freq25</key>
+ <key>freq2</key>
<value>100e6</value>
</param>
<param>
- <key>corr25</key>
- <value>0</value>
+ <key>if_gain2</key>
+ <value>20</value>
</param>
<param>
- <key>gain25</key>
+ <key>gain2</key>
<value>10</value>
</param>
<param>
- <key>if_gain25</key>
- <value>20</value>
+ <key>ant30</key>
+ <value></value>
</param>
<param>
- <key>bb_gain25</key>
+ <key>bb_gain30</key>
<value>20</value>
</param>
<param>
- <key>ant25</key>
- <value></value>
+ <key>bw30</key>
+ <value>0</value>
</param>
<param>
- <key>bw25</key>
+ <key>corr30</key>
<value>0</value>
</param>
<param>
- <key>freq26</key>
+ <key>freq30</key>
<value>100e6</value>
</param>
<param>
- <key>corr26</key>
- <value>0</value>
+ <key>if_gain30</key>
+ <value>20</value>
</param>
<param>
- <key>gain26</key>
+ <key>gain30</key>
<value>10</value>
</param>
<param>
- <key>if_gain26</key>
- <value>20</value>
+ <key>ant31</key>
+ <value></value>
</param>
<param>
- <key>bb_gain26</key>
+ <key>bb_gain31</key>
<value>20</value>
</param>
<param>
- <key>ant26</key>
- <value></value>
+ <key>bw31</key>
+ <value>0</value>
</param>
<param>
- <key>bw26</key>
+ <key>corr31</key>
<value>0</value>
</param>
<param>
- <key>freq27</key>
+ <key>freq31</key>
<value>100e6</value>
</param>
<param>
- <key>corr27</key>
- <value>0</value>
+ <key>if_gain31</key>
+ <value>20</value>
</param>
<param>
- <key>gain27</key>
+ <key>gain31</key>
<value>10</value>
</param>
<param>
- <key>if_gain27</key>
- <value>20</value>
+ <key>ant3</key>
+ <value></value>
</param>
<param>
- <key>bb_gain27</key>
+ <key>bb_gain3</key>
<value>20</value>
</param>
<param>
- <key>ant27</key>
- <value></value>
+ <key>bw3</key>
+ <value>0</value>
</param>
<param>
- <key>bw27</key>
+ <key>corr3</key>
<value>0</value>
</param>
<param>
- <key>freq28</key>
+ <key>freq3</key>
<value>100e6</value>
</param>
<param>
- <key>corr28</key>
- <value>0</value>
+ <key>if_gain3</key>
+ <value>20</value>
</param>
<param>
- <key>gain28</key>
+ <key>gain3</key>
<value>10</value>
</param>
<param>
- <key>if_gain28</key>
- <value>20</value>
+ <key>ant4</key>
+ <value></value>
</param>
<param>
- <key>bb_gain28</key>
+ <key>bb_gain4</key>
<value>20</value>
</param>
<param>
- <key>ant28</key>
- <value></value>
+ <key>bw4</key>
+ <value>0</value>
</param>
<param>
- <key>bw28</key>
+ <key>corr4</key>
<value>0</value>
</param>
<param>
- <key>freq29</key>
+ <key>freq4</key>
<value>100e6</value>
</param>
<param>
- <key>corr29</key>
- <value>0</value>
+ <key>if_gain4</key>
+ <value>20</value>
</param>
<param>
- <key>gain29</key>
+ <key>gain4</key>
<value>10</value>
</param>
<param>
- <key>if_gain29</key>
- <value>20</value>
+ <key>ant5</key>
+ <value></value>
</param>
<param>
- <key>bb_gain29</key>
+ <key>bb_gain5</key>
<value>20</value>
</param>
<param>
- <key>ant29</key>
- <value></value>
+ <key>bw5</key>
+ <value>0</value>
</param>
<param>
- <key>bw29</key>
+ <key>corr5</key>
<value>0</value>
</param>
<param>
- <key>freq30</key>
+ <key>freq5</key>
<value>100e6</value>
</param>
<param>
- <key>corr30</key>
- <value>0</value>
+ <key>if_gain5</key>
+ <value>20</value>
</param>
<param>
- <key>gain30</key>
+ <key>gain5</key>
<value>10</value>
</param>
<param>
- <key>if_gain30</key>
- <value>20</value>
+ <key>ant6</key>
+ <value></value>
</param>
<param>
- <key>bb_gain30</key>
+ <key>bb_gain6</key>
<value>20</value>
</param>
<param>
- <key>ant30</key>
- <value></value>
+ <key>bw6</key>
+ <value>0</value>
</param>
<param>
- <key>bw30</key>
+ <key>corr6</key>
<value>0</value>
</param>
<param>
- <key>freq31</key>
+ <key>freq6</key>
<value>100e6</value>
</param>
<param>
- <key>corr31</key>
- <value>0</value>
+ <key>if_gain6</key>
+ <value>20</value>
</param>
<param>
- <key>gain31</key>
+ <key>gain6</key>
<value>10</value>
</param>
<param>
- <key>if_gain31</key>
- <value>20</value>
+ <key>ant7</key>
+ <value></value>
</param>
<param>
- <key>bb_gain31</key>
+ <key>bb_gain7</key>
<value>20</value>
</param>
<param>
- <key>ant31</key>
- <value></value>
- </param>
- <param>
- <key>bw31</key>
+ <key>bw7</key>
<value>0</value>
</param>
<param>
- <key>alias</key>
- <value></value>
- </param>
- <param>
- <key>affinity</key>
- <value></value>
+ <key>corr7</key>
+ <value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(1048, 483)</value>
+ <key>freq7</key>
+ <value>100e6</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>if_gain7</key>
+ <value>20</value>
</param>
- </block>
- <block>
- <key>blocks_file_sink</key>
<param>
- <key>id</key>
- <value>blocks_file_sink_0</value>
+ <key>gain7</key>
+ <value>10</value>
</param>
<param>
- <key>_enabled</key>
- <value>False</value>
+ <key>ant8</key>
+ <value></value>
</param>
<param>
- <key>file</key>
- <value>vv.cfile</value>
+ <key>bb_gain8</key>
+ <value>20</value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
+ <key>bw8</key>
+ <value>0</value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>corr8</key>
+ <value>0</value>
</param>
<param>
- <key>unbuffered</key>
- <value>False</value>
+ <key>freq8</key>
+ <value>100e6</value>
</param>
<param>
- <key>append</key>
- <value>False</value>
+ <key>if_gain8</key>
+ <value>20</value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>gain8</key>
+ <value>10</value>
</param>
<param>
- <key>affinity</key>
+ <key>ant9</key>
<value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(864, 475)</value>
+ <key>bb_gain9</key>
+ <value>20</value>
</param>
<param>
- <key>_rotation</key>
+ <key>bw9</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>dtv_dvbt2_interleaver_bb</key>
- <param>
- <key>id</key>
- <value>dtv_dvbt2_interleaver_bb_0</value>
- </param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>corr9</key>
+ <value>0</value>
</param>
<param>
- <key>framesize</key>
- <value>FECFRAME_NORMAL</value>
+ <key>freq9</key>
+ <value>100e6</value>
</param>
<param>
- <key>rate</key>
- <value>C2_3</value>
+ <key>if_gain9</key>
+ <value>20</value>
</param>
<param>
- <key>constellation</key>
- <value>MOD_256QAM</value>
+ <key>gain9</key>
+ <value>10</value>
</param>
<param>
- <key>alias</key>
+ <key>comment</key>
<value></value>
</param>
<param>
@@ -1954,165 +2103,155 @@
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>args</key>
+ <value>bladerf=0,buffers=128,buflen=32768</value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(48, 219)</value>
+ <value>(1056, 428)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>dtv_dvbt2_modulator_bc</key>
<param>
<key>id</key>
- <value>dtv_dvbt2_modulator_bc_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
+ <value>osmosdr_sink_0</value>
</param>
<param>
- <key>framesize</key>
- <value>FECFRAME_NORMAL</value>
+ <key>type</key>
+ <value>fc32</value>
</param>
<param>
- <key>constellation</key>
- <value>MOD_256QAM</value>
+ <key>clock_source0</key>
+ <value></value>
</param>
<param>
- <key>rotation</key>
- <value>ROTATION_ON</value>
+ <key>time_source0</key>
+ <value></value>
</param>
<param>
- <key>alias</key>
+ <key>clock_source1</key>
<value></value>
</param>
<param>
- <key>affinity</key>
+ <key>time_source1</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>clock_source2</key>
+ <value></value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>time_source2</key>
+ <value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(264, 219)</value>
+ <key>clock_source3</key>
+ <value></value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>time_source3</key>
+ <value></value>
</param>
- </block>
- <block>
- <key>dtv_dvbt2_cellinterleaver_cc</key>
<param>
- <key>id</key>
- <value>dtv_dvbt2_cellinterleaver_cc_0</value>
+ <key>clock_source4</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>time_source4</key>
+ <value></value>
</param>
<param>
- <key>framesize</key>
- <value>FECFRAME_NORMAL</value>
+ <key>clock_source5</key>
+ <value></value>
</param>
<param>
- <key>constellation</key>
- <value>MOD_256QAM</value>
+ <key>time_source5</key>
+ <value></value>
</param>
<param>
- <key>fecblocks</key>
- <value>202</value>
+ <key>clock_source6</key>
+ <value></value>
</param>
<param>
- <key>tiblocks</key>
- <value>3</value>
+ <key>time_source6</key>
+ <value></value>
</param>
<param>
- <key>alias</key>
+ <key>clock_source7</key>
<value></value>
</param>
<param>
- <key>affinity</key>
+ <key>time_source7</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>nchan</key>
+ <value>1</value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>num_mboards</key>
+ <value>1</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(504, 211)</value>
+ <key>sample_rate</key>
+ <value>samp_rate</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>sync</key>
+ <value></value>
</param>
</block>
<connection>
- <source_block_id>dtv_dvb_bch_bb_0</source_block_id>
- <sink_block_id>dtv_dvb_ldpc_bb_0</sink_block_id>
+ <source_block_id>blocks_file_source_0</source_block_id>
+ <sink_block_id>dtv_dvb_bbheader_bb_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>dtv_dvb_bbscrambler_bb_0</source_block_id>
- <sink_block_id>dtv_dvb_bch_bb_0</sink_block_id>
+ <source_block_id>blocks_multiply_const_xx_0</source_block_id>
+ <sink_block_id>osmosdr_sink_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>dtv_dvb_ldpc_bb_0</source_block_id>
- <sink_block_id>dtv_dvbt2_interleaver_bb_0</sink_block_id>
+ <source_block_id>digital_ofdm_cyclic_prefixer_0</source_block_id>
+ <sink_block_id>dtv_dvbt2_p1insertion_cc_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>dtv_dvbt2_interleaver_bb_0</source_block_id>
- <sink_block_id>dtv_dvbt2_modulator_bc_0</sink_block_id>
+ <source_block_id>dtv_dvb_bbheader_bb_0</source_block_id>
+ <sink_block_id>dtv_dvb_bbscrambler_bb_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>dtv_dvbt2_modulator_bc_0</source_block_id>
- <sink_block_id>dtv_dvbt2_cellinterleaver_cc_0</sink_block_id>
+ <source_block_id>dtv_dvb_bbscrambler_bb_0</source_block_id>
+ <sink_block_id>dtv_dvb_bch_bb_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>dtv_dvbt2_cellinterleaver_cc_0</source_block_id>
- <sink_block_id>dtv_dvbt2_framemapper_cc_0</sink_block_id>
+ <source_block_id>dtv_dvb_bch_bb_0</source_block_id>
+ <sink_block_id>dtv_dvb_ldpc_bb_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>dtv_dvb_bbheader_bb_0</source_block_id>
- <sink_block_id>dtv_dvb_bbscrambler_bb_0</sink_block_id>
+ <source_block_id>dtv_dvb_ldpc_bb_0</source_block_id>
+ <sink_block_id>dtv_dvbt2_interleaver_bb_0</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>dtv_dvb_bbheader_bb_0</sink_block_id>
+ <source_block_id>dtv_dvbt2_cellinterleaver_cc_0</source_block_id>
+ <sink_block_id>dtv_dvbt2_framemapper_cc_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
@@ -2129,32 +2268,32 @@
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>digital_ofdm_cyclic_prefixer_0</source_block_id>
- <sink_block_id>dtv_dvbt2_p1insertion_cc_0</sink_block_id>
+ <source_block_id>dtv_dvbt2_interleaver_bb_0</source_block_id>
+ <sink_block_id>dtv_dvbt2_modulator_bc_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>dtv_dvbt2_pilotgenerator_cc_0</source_block_id>
- <sink_block_id>digital_ofdm_cyclic_prefixer_0</sink_block_id>
+ <source_block_id>dtv_dvbt2_modulator_bc_0</source_block_id>
+ <sink_block_id>dtv_dvbt2_cellinterleaver_cc_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>dtv_dvbt2_p1insertion_cc_0</source_block_id>
- <sink_block_id>blocks_multiply_const_vxx_0</sink_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>blocks_multiply_const_vxx_0</source_block_id>
- <sink_block_id>osmosdr_sink_0</sink_block_id>
+ <source_block_id>dtv_dvbt2_p1insertion_cc_0</source_block_id>
+ <sink_block_id>blocks_multiply_const_xx_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>dtv_dvbt2_p1insertion_cc_0</source_block_id>
- <sink_block_id>blocks_file_sink_0</sink_block_id>
+ <source_block_id>dtv_dvbt2_pilotgenerator_cc_0</source_block_id>
+ <sink_block_id>digital_ofdm_cyclic_prefixer_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
diff --git a/gr-dtv/examples/vv009-4kfft.grc b/gr-dtv/examples/vv009-4kfft.grc
index d50222980f..cd8b24701f 100644
--- a/gr-dtv/examples/vv009-4kfft.grc
+++ b/gr-dtv/examples/vv009-4kfft.grc
@@ -1,23 +1,23 @@
-<?xml version='1.0' encoding='ASCII'?>
-<?grc format='1' created='3.7.7'?>
+<?xml version='1.0' encoding='utf-8'?>
+<?grc format='1' created='3.7.11'?>
<flow_graph>
<timestamp>Mon Dec 29 00:00:54 2014</timestamp>
<block>
<key>options</key>
<param>
- <key>id</key>
- <value>vv009_4kfft</value>
+ <key>author</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>window_size</key>
+ <value>1280, 1024</value>
</param>
<param>
- <key>title</key>
- <value></value>
+ <key>category</key>
+ <value>Custom</value>
</param>
<param>
- <key>author</key>
+ <key>comment</key>
<value></value>
</param>
<param>
@@ -25,16 +25,44 @@
<value></value>
</param>
<param>
- <key>window_size</key>
- <value>1280, 1024</value>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(8, 11)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
<key>generate_options</key>
- <value>wx_gui</value>
+ <value>qt_gui</value>
</param>
<param>
- <key>category</key>
- <value>Custom</value>
+ <key>hier_block_src_path</key>
+ <value>.:</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>vv009_4kfft</value>
+ </param>
+ <param>
+ <key>max_nouts</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>qt_qss_theme</key>
+ <value></value>
+ </param>
+ <param>
+ <key>realtime_scheduling</key>
+ <value></value>
+ </param>
+ <param>
+ <key>run_command</key>
+ <value>{python} -u {filename}</value>
</param>
<param>
<key>run_options</key>
@@ -45,58 +73,132 @@
<value>True</value>
</param>
<param>
- <key>max_nouts</key>
- <value>0</value>
+ <key>thread_safe_setters</key>
+ <value></value>
</param>
<param>
- <key>realtime_scheduling</key>
+ <key>title</key>
<value></value>
</param>
+ </block>
+ <block>
+ <key>variable</key>
<param>
- <key>alias</key>
+ <key>comment</key>
<value></value>
</param>
<param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(8, 11)</value>
+ <value>(176, 12)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
+ <param>
+ <key>id</key>
+ <value>center_freq</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>429e6</value>
+ </param>
</block>
<block>
<key>variable</key>
<param>
- <key>id</key>
- <value>samp_rate</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
+ <key>_coordinate</key>
+ <value>(8, 75)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>samp_rate</value>
+ </param>
+ <param>
<key>value</key>
<value>(8000000.0 * 8) / 7</value>
</param>
+ </block>
+ <block>
+ <key>blocks_file_sink</key>
+ <param>
+ <key>append</key>
+ <value>False</value>
+ </param>
<param>
<key>alias</key>
<value></value>
</param>
<param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>file</key>
+ <value>vv.cfile</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(8, 75)</value>
+ <value>(832, 420)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
+ <param>
+ <key>id</key>
+ <value>blocks_file_sink_0</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>complex</value>
+ </param>
+ <param>
+ <key>unbuffered</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>vlen</key>
+ <value>1</value>
+ </param>
</block>
<block>
<key>blocks_file_source</key>
<param>
- <key>id</key>
- <value>blocks_file_source_0</value>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
@@ -107,6 +209,26 @@
<value>/run/shm/adv4k64qam.ts</value>
</param>
<param>
+ <key>_coordinate</key>
+ <value>(120, 75)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>blocks_file_source_0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>type</key>
<value>byte</value>
</param>
@@ -118,71 +240,70 @@
<key>vlen</key>
<value>1</value>
</param>
+ </block>
+ <block>
+ <key>blocks_multiply_const_xx</key>
<param>
<key>alias</key>
<value></value>
</param>
<param>
- <key>affinity</key>
+ <key>comment</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>const</key>
+ <value>0.2</value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(120, 75)</value>
+ <value>(832, 540)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>dtv_dvb_ldpc_bb</key>
<param>
<key>id</key>
- <value>dtv_dvb_ldpc_bb_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>standard</key>
- <value>STANDARD_DVBT2</value>
+ <value>blocks_multiply_const_xx_0</value>
</param>
<param>
- <key>framesize</key>
- <value>FECFRAME_NORMAL</value>
+ <key>type</key>
+ <value>complex</value>
</param>
<param>
- <key>rate1</key>
- <value>C2_3</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>rate2</key>
- <value>C1_3</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>rate3</key>
- <value>C1_4</value>
+ <key>vlen</key>
+ <value>1</value>
</param>
+ </block>
+ <block>
+ <key>digital_ofdm_cyclic_prefixer</key>
<param>
- <key>rate4</key>
- <value>C1_4</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>constellation</key>
- <value>MOD_OTHER</value>
+ <key>cp_len</key>
+ <value>4096/32</value>
</param>
<param>
- <key>alias</key>
+ <key>comment</key>
<value></value>
</param>
<param>
@@ -190,39 +311,51 @@
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>input_size</key>
+ <value>4096</value>
</param>
<param>
<key>_coordinate</key>
- <value>(1056, 35)</value>
+ <value>(336, 464)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>dtv_dvb_bch_bb</key>
<param>
<key>id</key>
- <value>dtv_dvb_bch_bb_0</value>
+ <value>digital_ofdm_cyclic_prefixer_0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>tagname</key>
+ <value></value>
</param>
<param>
- <key>standard</key>
- <value>STANDARD_DVBT2</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>framesize</key>
- <value>FECFRAME_NORMAL</value>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>rolloff</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>dtv_dvb_bbheader_bb</key>
+ <param>
+ <key>mode</key>
+ <value>INPUTMODE_NORMAL</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>rate1</key>
@@ -238,10 +371,14 @@
</param>
<param>
<key>rate4</key>
+ <value>C1_5_MEDIUM</value>
+ </param>
+ <param>
+ <key>rate5</key>
<value>C1_4</value>
</param>
<param>
- <key>alias</key>
+ <key>comment</key>
<value></value>
</param>
<param>
@@ -249,39 +386,63 @@
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>fecblocks</key>
+ <value>168</value>
+ </param>
+ <param>
+ <key>framesize1</key>
+ <value>FECFRAME_NORMAL</value>
+ </param>
+ <param>
+ <key>framesize2</key>
+ <value>FECFRAME_NORMAL</value>
</param>
<param>
<key>_coordinate</key>
- <value>(840, 35)</value>
+ <value>(360, 24)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>dtv_dvb_bbscrambler_bb</key>
<param>
<key>id</key>
- <value>dtv_dvb_bbscrambler_bb_0</value>
+ <value>dtv_dvb_bbheader_bb_0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>inband</key>
+ <value>INBAND_OFF</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>rolloff</key>
+ <value>RO_0_35</value>
</param>
<param>
<key>standard</key>
<value>STANDARD_DVBT2</value>
</param>
<param>
- <key>framesize</key>
- <value>FECFRAME_NORMAL</value>
+ <key>tsrate</key>
+ <value>4000000</value>
+ </param>
+ </block>
+ <block>
+ <key>dtv_dvb_bbscrambler_bb</key>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>rate1</key>
@@ -297,10 +458,14 @@
</param>
<param>
<key>rate4</key>
+ <value>C1_5_MEDIUM</value>
+ </param>
+ <param>
+ <key>rate5</key>
<value>C1_4</value>
</param>
<param>
- <key>alias</key>
+ <key>comment</key>
<value></value>
</param>
<param>
@@ -308,39 +473,47 @@
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>framesize1</key>
+ <value>FECFRAME_NORMAL</value>
+ </param>
+ <param>
+ <key>framesize2</key>
+ <value>FECFRAME_NORMAL</value>
</param>
<param>
<key>_coordinate</key>
- <value>(624, 35)</value>
+ <value>(632, 36)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>dtv_dvb_bbheader_bb</key>
<param>
<key>id</key>
- <value>dtv_dvb_bbheader_bb_0</value>
+ <value>dtv_dvb_bbscrambler_bb_0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>standard</key>
<value>STANDARD_DVBT2</value>
</param>
+ </block>
+ <block>
+ <key>dtv_dvb_bch_bb</key>
<param>
- <key>framesize</key>
- <value>FECFRAME_NORMAL</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>rate1</key>
@@ -356,196 +529,216 @@
</param>
<param>
<key>rate4</key>
- <value>C1_4</value>
+ <value>C1_5_MEDIUM</value>
</param>
<param>
- <key>rolloff</key>
- <value>RO_0_35</value>
+ <key>rate5</key>
+ <value>C1_4</value>
</param>
<param>
- <key>mode</key>
- <value>FECFRAME_NORMAL</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
- <key>inband</key>
- <value>INBAND_OFF</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>fecblocks</key>
- <value>168</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>tsrate</key>
- <value>4000000</value>
+ <key>framesize1</key>
+ <value>FECFRAME_NORMAL</value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>framesize2</key>
+ <value>FECFRAME_NORMAL</value>
</param>
<param>
- <key>affinity</key>
- <value></value>
+ <key>_coordinate</key>
+ <value>(856, 36)</value>
</param>
<param>
- <key>minoutbuf</key>
+ <key>_rotation</key>
<value>0</value>
</param>
<param>
+ <key>id</key>
+ <value>dtv_dvb_bch_bb_0</value>
+ </param>
+ <param>
<key>maxoutbuf</key>
<value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(360, 19)</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>standard</key>
+ <value>STANDARD_DVBT2</value>
</param>
</block>
<block>
- <key>dtv_dvbt2_pilotgenerator_cc</key>
+ <key>dtv_dvb_ldpc_bb</key>
<param>
- <key>id</key>
- <value>dtv_dvbt2_pilotgenerator_cc_0</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>rate1</key>
+ <value>C2_3</value>
</param>
<param>
- <key>carriermode</key>
- <value>CARRIERS_NORMAL</value>
+ <key>rate2</key>
+ <value>C1_3</value>
</param>
<param>
- <key>fftsize</key>
- <value>FFTSIZE_4K</value>
+ <key>rate3</key>
+ <value>C1_4</value>
</param>
<param>
- <key>pilotpattern</key>
- <value>PILOT_PP7</value>
+ <key>rate4</key>
+ <value>C1_5_MEDIUM</value>
</param>
<param>
- <key>guardinterval</key>
- <value>GI_1_32</value>
+ <key>rate5</key>
+ <value>C1_4</value>
</param>
<param>
- <key>numdatasyms</key>
- <value>100</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
- <key>paprmode1</key>
- <value>PAPR_OFF</value>
+ <key>constellation</key>
+ <value>MOD_OTHER</value>
</param>
<param>
- <key>paprmode2</key>
- <value>PAPR_OFF</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>version</key>
- <value>VERSION_111</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>preamble1</key>
- <value>PREAMBLE_T2_SISO</value>
+ <key>framesize1</key>
+ <value>FECFRAME_NORMAL</value>
</param>
<param>
- <key>preamble2</key>
- <value>PREAMBLE_T2_SISO</value>
+ <key>framesize2</key>
+ <value>FECFRAME_NORMAL</value>
</param>
<param>
- <key>misogroup</key>
- <value>MISO_TX1</value>
+ <key>_coordinate</key>
+ <value>(1072, 36)</value>
</param>
<param>
- <key>equalization</key>
- <value>EQUALIZATION_ON</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>bandwidth</key>
- <value>BANDWIDTH_8_0_MHZ</value>
+ <key>id</key>
+ <value>dtv_dvb_ldpc_bb_0</value>
</param>
<param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>standard</key>
+ <value>STANDARD_DVBT2</value>
+ </param>
+ </block>
+ <block>
+ <key>dtv_dvbt2_cellinterleaver_cc</key>
+ <param>
<key>alias</key>
<value></value>
</param>
<param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>constellation</key>
+ <value>MOD_64QAM</value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>fecblocks</key>
+ <value>31</value>
+ </param>
+ <param>
+ <key>framesize</key>
+ <value>FECFRAME_NORMAL</value>
</param>
<param>
<key>_coordinate</key>
- <value>(56, 451)</value>
+ <value>(504, 224)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>digital_ofdm_cyclic_prefixer</key>
<param>
<key>id</key>
- <value>digital_ofdm_cyclic_prefixer_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>input_size</key>
- <value>4096</value>
+ <value>dtv_dvbt2_cellinterleaver_cc_0</value>
</param>
<param>
- <key>cp_len</key>
- <value>4096/32</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>rolloff</key>
+ <key>minoutbuf</key>
<value>0</value>
</param>
<param>
- <key>tagname</key>
- <value></value>
+ <key>tiblocks</key>
+ <value>3</value>
</param>
+ </block>
+ <block>
+ <key>dtv_dvbt2_framemapper_cc</key>
<param>
- <key>alias</key>
- <value></value>
+ <key>inputmode</key>
+ <value>FECFRAME_NORMAL</value>
</param>
<param>
- <key>affinity</key>
+ <key>alias</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>rate</key>
+ <value>C2_3</value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(328, 507)</value>
+ <key>rotation</key>
+ <value>ROTATION_ON</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>constellation</key>
+ <value>MOD_64QAM</value>
</param>
- </block>
- <block>
- <key>dtv_dvbt2_p1insertion_cc</key>
<param>
- <key>id</key>
- <value>dtv_dvbt2_p1insertion_cc_0</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
@@ -556,489 +749,497 @@
<value>CARRIERS_NORMAL</value>
</param>
<param>
- <key>fftsize1</key>
- <value>FFTSIZE_4K</value>
- </param>
- <param>
- <key>fftsize2</key>
- <value>FFTSIZE_2K</value>
+ <key>fecblocks</key>
+ <value>31</value>
</param>
<param>
- <key>guardinterval</key>
- <value>GI_1_32</value>
+ <key>framesize</key>
+ <value>FECFRAME_NORMAL</value>
</param>
<param>
- <key>numdatasyms</key>
- <value>100</value>
+ <key>fftsize1</key>
+ <value>FFTSIZE_4K</value>
</param>
<param>
- <key>version</key>
- <value>VERSION_111</value>
+ <key>fftsize2</key>
+ <value>FFTSIZE_2K</value>
</param>
<param>
- <key>preamble1</key>
- <value>PREAMBLE_T2_SISO</value>
+ <key>_coordinate</key>
+ <value>(744, 140)</value>
</param>
<param>
- <key>preamble2</key>
- <value>PREAMBLE_T2_SISO</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>showlevels</key>
- <value>SHOWLEVELS_OFF</value>
+ <key>guardinterval</key>
+ <value>GI_1_32</value>
</param>
<param>
- <key>vclip</key>
- <value>3.3</value>
+ <key>id</key>
+ <value>dtv_dvbt2_framemapper_cc_0</value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>inband</key>
+ <value>INBAND_OFF</value>
</param>
<param>
- <key>affinity</key>
- <value></value>
+ <key>l1constellation</key>
+ <value>L1_MOD_16QAM</value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>l1scrambled</key>
+ <value>L1_SCRAMBLED_OFF</value>
</param>
<param>
<key>maxoutbuf</key>
<value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(552, 475)</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>numdatasyms</key>
+ <value>100</value>
</param>
- </block>
- <block>
- <key>blocks_multiply_const_vxx</key>
<param>
- <key>id</key>
- <value>blocks_multiply_const_vxx_0</value>
+ <key>paprmode1</key>
+ <value>PAPR_OFF</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>paprmode2</key>
+ <value>PAPR_OFF</value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
+ <key>pilotpattern</key>
+ <value>PILOT_PP7</value>
</param>
<param>
- <key>const</key>
- <value>0.2</value>
+ <key>preamble1</key>
+ <value>PREAMBLE_T2_SISO</value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>preamble2</key>
+ <value>PREAMBLE_T2_SISO</value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>reservedbiasbits</key>
+ <value>RESERVED_OFF</value>
</param>
<param>
- <key>affinity</key>
- <value></value>
+ <key>version</key>
+ <value>VERSION_111</value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>t2frames</key>
+ <value>2</value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>tiblocks</key>
+ <value>3</value>
</param>
+ </block>
+ <block>
+ <key>dtv_dvbt2_freqinterleaver_cc</key>
<param>
- <key>_coordinate</key>
- <value>(832, 563)</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>comment</key>
+ <value></value>
</param>
- </block>
- <block>
- <key>osmosdr_sink</key>
<param>
- <key>id</key>
- <value>osmosdr_sink_0</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>fc32</value>
+ <key>carriermode</key>
+ <value>CARRIERS_NORMAL</value>
</param>
<param>
- <key>args</key>
- <value>bladerf=0,buffers=128,buflen=32768</value>
+ <key>fftsize</key>
+ <value>FFTSIZE_4K</value>
</param>
<param>
- <key>sync</key>
- <value></value>
+ <key>_coordinate</key>
+ <value>(1024, 196)</value>
</param>
<param>
- <key>num_mboards</key>
- <value>1</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>clock_source0</key>
- <value></value>
+ <key>guardinterval</key>
+ <value>GI_1_32</value>
</param>
<param>
- <key>time_source0</key>
- <value></value>
+ <key>id</key>
+ <value>dtv_dvbt2_freqinterleaver_cc_0</value>
</param>
<param>
- <key>clock_source1</key>
- <value></value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>time_source1</key>
- <value></value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>clock_source2</key>
- <value></value>
+ <key>numdatasyms</key>
+ <value>100</value>
</param>
<param>
- <key>time_source2</key>
- <value></value>
+ <key>paprmode1</key>
+ <value>PAPR_OFF</value>
</param>
<param>
- <key>clock_source3</key>
- <value></value>
+ <key>paprmode2</key>
+ <value>PAPR_OFF</value>
</param>
<param>
- <key>time_source3</key>
- <value></value>
+ <key>pilotpattern</key>
+ <value>PILOT_PP7</value>
</param>
<param>
- <key>clock_source4</key>
- <value></value>
+ <key>preamble1</key>
+ <value>PREAMBLE_T2_SISO</value>
</param>
<param>
- <key>time_source4</key>
- <value></value>
+ <key>preamble2</key>
+ <value>PREAMBLE_T2_SISO</value>
</param>
<param>
- <key>clock_source5</key>
- <value></value>
+ <key>version</key>
+ <value>VERSION_111</value>
</param>
+ </block>
+ <block>
+ <key>dtv_dvbt2_interleaver_bb</key>
<param>
- <key>time_source5</key>
+ <key>alias</key>
<value></value>
</param>
<param>
- <key>clock_source6</key>
- <value></value>
+ <key>rate</key>
+ <value>C2_3</value>
</param>
<param>
- <key>time_source6</key>
+ <key>comment</key>
<value></value>
</param>
<param>
- <key>clock_source7</key>
- <value></value>
+ <key>constellation</key>
+ <value>MOD_64QAM</value>
</param>
<param>
- <key>time_source7</key>
+ <key>affinity</key>
<value></value>
</param>
<param>
- <key>nchan</key>
- <value>1</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>sample_rate</key>
- <value>samp_rate</value>
+ <key>framesize</key>
+ <value>FECFRAME_NORMAL</value>
</param>
<param>
- <key>freq0</key>
- <value>429e6</value>
+ <key>_coordinate</key>
+ <value>(48, 228)</value>
</param>
<param>
- <key>corr0</key>
+ <key>_rotation</key>
<value>0</value>
</param>
<param>
- <key>gain0</key>
- <value>18</value>
+ <key>id</key>
+ <value>dtv_dvbt2_interleaver_bb_0</value>
</param>
<param>
- <key>if_gain0</key>
+ <key>maxoutbuf</key>
<value>0</value>
</param>
<param>
- <key>bb_gain0</key>
- <value>-8</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
+ </block>
+ <block>
+ <key>dtv_dvbt2_modulator_bc</key>
<param>
- <key>ant0</key>
+ <key>alias</key>
<value></value>
</param>
<param>
- <key>bw0</key>
- <value>8750000</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
- <key>freq1</key>
- <value>100e6</value>
+ <key>rotation</key>
+ <value>ROTATION_ON</value>
</param>
<param>
- <key>corr1</key>
- <value>0</value>
+ <key>constellation</key>
+ <value>MOD_64QAM</value>
</param>
<param>
- <key>gain1</key>
- <value>10</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>if_gain1</key>
- <value>20</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>bb_gain1</key>
- <value>20</value>
+ <key>framesize</key>
+ <value>FECFRAME_NORMAL</value>
</param>
<param>
- <key>ant1</key>
- <value></value>
+ <key>_coordinate</key>
+ <value>(272, 228)</value>
</param>
<param>
- <key>bw1</key>
+ <key>_rotation</key>
<value>0</value>
</param>
<param>
- <key>freq2</key>
- <value>100e6</value>
+ <key>id</key>
+ <value>dtv_dvbt2_modulator_bc_0</value>
</param>
<param>
- <key>corr2</key>
+ <key>maxoutbuf</key>
<value>0</value>
</param>
<param>
- <key>gain2</key>
- <value>10</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
+ </block>
+ <block>
+ <key>dtv_dvbt2_p1insertion_cc</key>
<param>
- <key>if_gain2</key>
- <value>20</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>bb_gain2</key>
- <value>20</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
- <key>ant2</key>
+ <key>affinity</key>
<value></value>
</param>
<param>
- <key>bw2</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>freq3</key>
- <value>100e6</value>
+ <key>carriermode</key>
+ <value>CARRIERS_NORMAL</value>
</param>
<param>
- <key>corr3</key>
- <value>0</value>
+ <key>fftsize1</key>
+ <value>FFTSIZE_4K</value>
</param>
<param>
- <key>gain3</key>
- <value>10</value>
+ <key>fftsize2</key>
+ <value>FFTSIZE_2K</value>
</param>
<param>
- <key>if_gain3</key>
- <value>20</value>
+ <key>_coordinate</key>
+ <value>(560, 440)</value>
</param>
<param>
- <key>bb_gain3</key>
- <value>20</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>ant3</key>
- <value></value>
+ <key>guardinterval</key>
+ <value>GI_1_32</value>
</param>
<param>
- <key>bw3</key>
- <value>0</value>
+ <key>id</key>
+ <value>dtv_dvbt2_p1insertion_cc_0</value>
</param>
<param>
- <key>freq4</key>
- <value>100e6</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>corr4</key>
+ <key>minoutbuf</key>
<value>0</value>
</param>
<param>
- <key>gain4</key>
- <value>10</value>
+ <key>numdatasyms</key>
+ <value>100</value>
</param>
<param>
- <key>if_gain4</key>
- <value>20</value>
+ <key>preamble1</key>
+ <value>PREAMBLE_T2_SISO</value>
</param>
<param>
- <key>bb_gain4</key>
- <value>20</value>
+ <key>preamble2</key>
+ <value>PREAMBLE_T2_SISO</value>
</param>
<param>
- <key>ant4</key>
- <value></value>
+ <key>showlevels</key>
+ <value>SHOWLEVELS_OFF</value>
</param>
<param>
- <key>bw4</key>
- <value>0</value>
+ <key>version</key>
+ <value>VERSION_111</value>
</param>
<param>
- <key>freq5</key>
- <value>100e6</value>
+ <key>vclip</key>
+ <value>3.3</value>
</param>
+ </block>
+ <block>
+ <key>dtv_dvbt2_pilotgenerator_cc</key>
<param>
- <key>corr5</key>
- <value>0</value>
+ <key>bandwidth</key>
+ <value>BANDWIDTH_8_0_MHZ</value>
</param>
<param>
- <key>gain5</key>
- <value>10</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>if_gain5</key>
- <value>20</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
- <key>bb_gain5</key>
- <value>20</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>ant5</key>
- <value></value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>bw5</key>
- <value>0</value>
+ <key>carriermode</key>
+ <value>CARRIERS_NORMAL</value>
</param>
<param>
- <key>freq6</key>
- <value>100e6</value>
+ <key>fftsize</key>
+ <value>FFTSIZE_4K</value>
</param>
<param>
- <key>corr6</key>
- <value>0</value>
+ <key>_coordinate</key>
+ <value>(56, 420)</value>
</param>
<param>
- <key>gain6</key>
- <value>10</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>if_gain6</key>
- <value>20</value>
+ <key>guardinterval</key>
+ <value>GI_1_32</value>
</param>
<param>
- <key>bb_gain6</key>
- <value>20</value>
+ <key>id</key>
+ <value>dtv_dvbt2_pilotgenerator_cc_0</value>
</param>
<param>
- <key>ant6</key>
- <value></value>
+ <key>misogroup</key>
+ <value>MISO_TX1</value>
</param>
<param>
- <key>bw6</key>
+ <key>maxoutbuf</key>
<value>0</value>
</param>
<param>
- <key>freq7</key>
- <value>100e6</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>corr7</key>
- <value>0</value>
+ <key>numdatasyms</key>
+ <value>100</value>
</param>
<param>
- <key>gain7</key>
- <value>10</value>
+ <key>paprmode1</key>
+ <value>PAPR_OFF</value>
</param>
<param>
- <key>if_gain7</key>
- <value>20</value>
+ <key>paprmode2</key>
+ <value>PAPR_OFF</value>
</param>
<param>
- <key>bb_gain7</key>
- <value>20</value>
+ <key>pilotpattern</key>
+ <value>PILOT_PP7</value>
</param>
<param>
- <key>ant7</key>
- <value></value>
+ <key>preamble1</key>
+ <value>PREAMBLE_T2_SISO</value>
</param>
<param>
- <key>bw7</key>
- <value>0</value>
+ <key>preamble2</key>
+ <value>PREAMBLE_T2_SISO</value>
</param>
<param>
- <key>freq8</key>
- <value>100e6</value>
+ <key>equalization</key>
+ <value>EQUALIZATION_ON</value>
</param>
<param>
- <key>corr8</key>
- <value>0</value>
+ <key>version</key>
+ <value>VERSION_111</value>
</param>
+ </block>
+ <block>
+ <key>osmosdr_sink</key>
<param>
- <key>gain8</key>
- <value>10</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>if_gain8</key>
- <value>20</value>
+ <key>ant0</key>
+ <value></value>
</param>
<param>
- <key>bb_gain8</key>
- <value>20</value>
+ <key>bb_gain0</key>
+ <value>-8</value>
</param>
<param>
- <key>ant8</key>
- <value></value>
+ <key>bw0</key>
+ <value>8750000</value>
</param>
<param>
- <key>bw8</key>
+ <key>corr0</key>
<value>0</value>
</param>
<param>
- <key>freq9</key>
- <value>100e6</value>
+ <key>freq0</key>
+ <value>center_freq</value>
</param>
<param>
- <key>corr9</key>
+ <key>if_gain0</key>
<value>0</value>
</param>
<param>
- <key>gain9</key>
+ <key>gain0</key>
<value>10</value>
</param>
<param>
- <key>if_gain9</key>
- <value>20</value>
+ <key>ant10</key>
+ <value></value>
</param>
<param>
- <key>bb_gain9</key>
+ <key>bb_gain10</key>
<value>20</value>
</param>
<param>
- <key>ant9</key>
- <value></value>
+ <key>bw10</key>
+ <value>0</value>
</param>
<param>
- <key>bw9</key>
+ <key>corr10</key>
<value>0</value>
</param>
<param>
@@ -1046,27 +1247,27 @@
<value>100e6</value>
</param>
<param>
- <key>corr10</key>
- <value>0</value>
+ <key>if_gain10</key>
+ <value>20</value>
</param>
<param>
<key>gain10</key>
<value>10</value>
</param>
<param>
- <key>if_gain10</key>
- <value>20</value>
+ <key>ant11</key>
+ <value></value>
</param>
<param>
- <key>bb_gain10</key>
+ <key>bb_gain11</key>
<value>20</value>
</param>
<param>
- <key>ant10</key>
- <value></value>
+ <key>bw11</key>
+ <value>0</value>
</param>
<param>
- <key>bw10</key>
+ <key>corr11</key>
<value>0</value>
</param>
<param>
@@ -1074,27 +1275,27 @@
<value>100e6</value>
</param>
<param>
- <key>corr11</key>
- <value>0</value>
+ <key>if_gain11</key>
+ <value>20</value>
</param>
<param>
<key>gain11</key>
<value>10</value>
</param>
<param>
- <key>if_gain11</key>
- <value>20</value>
+ <key>ant12</key>
+ <value></value>
</param>
<param>
- <key>bb_gain11</key>
+ <key>bb_gain12</key>
<value>20</value>
</param>
<param>
- <key>ant11</key>
- <value></value>
+ <key>bw12</key>
+ <value>0</value>
</param>
<param>
- <key>bw11</key>
+ <key>corr12</key>
<value>0</value>
</param>
<param>
@@ -1102,27 +1303,27 @@
<value>100e6</value>
</param>
<param>
- <key>corr12</key>
- <value>0</value>
+ <key>if_gain12</key>
+ <value>20</value>
</param>
<param>
<key>gain12</key>
<value>10</value>
</param>
<param>
- <key>if_gain12</key>
- <value>20</value>
+ <key>ant13</key>
+ <value></value>
</param>
<param>
- <key>bb_gain12</key>
+ <key>bb_gain13</key>
<value>20</value>
</param>
<param>
- <key>ant12</key>
- <value></value>
+ <key>bw13</key>
+ <value>0</value>
</param>
<param>
- <key>bw12</key>
+ <key>corr13</key>
<value>0</value>
</param>
<param>
@@ -1130,27 +1331,27 @@
<value>100e6</value>
</param>
<param>
- <key>corr13</key>
- <value>0</value>
+ <key>if_gain13</key>
+ <value>20</value>
</param>
<param>
<key>gain13</key>
<value>10</value>
</param>
<param>
- <key>if_gain13</key>
- <value>20</value>
+ <key>ant14</key>
+ <value></value>
</param>
<param>
- <key>bb_gain13</key>
+ <key>bb_gain14</key>
<value>20</value>
</param>
<param>
- <key>ant13</key>
- <value></value>
+ <key>bw14</key>
+ <value>0</value>
</param>
<param>
- <key>bw13</key>
+ <key>corr14</key>
<value>0</value>
</param>
<param>
@@ -1158,27 +1359,27 @@
<value>100e6</value>
</param>
<param>
- <key>corr14</key>
- <value>0</value>
+ <key>if_gain14</key>
+ <value>20</value>
</param>
<param>
<key>gain14</key>
<value>10</value>
</param>
<param>
- <key>if_gain14</key>
- <value>20</value>
+ <key>ant15</key>
+ <value></value>
</param>
<param>
- <key>bb_gain14</key>
+ <key>bb_gain15</key>
<value>20</value>
</param>
<param>
- <key>ant14</key>
- <value></value>
+ <key>bw15</key>
+ <value>0</value>
</param>
<param>
- <key>bw14</key>
+ <key>corr15</key>
<value>0</value>
</param>
<param>
@@ -1186,27 +1387,27 @@
<value>100e6</value>
</param>
<param>
- <key>corr15</key>
- <value>0</value>
+ <key>if_gain15</key>
+ <value>20</value>
</param>
<param>
<key>gain15</key>
<value>10</value>
</param>
<param>
- <key>if_gain15</key>
- <value>20</value>
+ <key>ant16</key>
+ <value></value>
</param>
<param>
- <key>bb_gain15</key>
+ <key>bb_gain16</key>
<value>20</value>
</param>
<param>
- <key>ant15</key>
- <value></value>
+ <key>bw16</key>
+ <value>0</value>
</param>
<param>
- <key>bw15</key>
+ <key>corr16</key>
<value>0</value>
</param>
<param>
@@ -1214,27 +1415,27 @@
<value>100e6</value>
</param>
<param>
- <key>corr16</key>
- <value>0</value>
+ <key>if_gain16</key>
+ <value>20</value>
</param>
<param>
<key>gain16</key>
<value>10</value>
</param>
<param>
- <key>if_gain16</key>
- <value>20</value>
+ <key>ant17</key>
+ <value></value>
</param>
<param>
- <key>bb_gain16</key>
+ <key>bb_gain17</key>
<value>20</value>
</param>
<param>
- <key>ant16</key>
- <value></value>
+ <key>bw17</key>
+ <value>0</value>
</param>
<param>
- <key>bw16</key>
+ <key>corr17</key>
<value>0</value>
</param>
<param>
@@ -1242,27 +1443,27 @@
<value>100e6</value>
</param>
<param>
- <key>corr17</key>
- <value>0</value>
+ <key>if_gain17</key>
+ <value>20</value>
</param>
<param>
<key>gain17</key>
<value>10</value>
</param>
<param>
- <key>if_gain17</key>
- <value>20</value>
+ <key>ant18</key>
+ <value></value>
</param>
<param>
- <key>bb_gain17</key>
+ <key>bb_gain18</key>
<value>20</value>
</param>
<param>
- <key>ant17</key>
- <value></value>
+ <key>bw18</key>
+ <value>0</value>
</param>
<param>
- <key>bw17</key>
+ <key>corr18</key>
<value>0</value>
</param>
<param>
@@ -1270,27 +1471,27 @@
<value>100e6</value>
</param>
<param>
- <key>corr18</key>
- <value>0</value>
+ <key>if_gain18</key>
+ <value>20</value>
</param>
<param>
<key>gain18</key>
<value>10</value>
</param>
<param>
- <key>if_gain18</key>
- <value>20</value>
+ <key>ant19</key>
+ <value></value>
</param>
<param>
- <key>bb_gain18</key>
+ <key>bb_gain19</key>
<value>20</value>
</param>
<param>
- <key>ant18</key>
- <value></value>
+ <key>bw19</key>
+ <value>0</value>
</param>
<param>
- <key>bw18</key>
+ <key>corr19</key>
<value>0</value>
</param>
<param>
@@ -1298,27 +1499,55 @@
<value>100e6</value>
</param>
<param>
- <key>corr19</key>
- <value>0</value>
+ <key>if_gain19</key>
+ <value>20</value>
</param>
<param>
<key>gain19</key>
<value>10</value>
</param>
<param>
- <key>if_gain19</key>
+ <key>ant1</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bb_gain1</key>
<value>20</value>
</param>
<param>
- <key>bb_gain19</key>
+ <key>bw1</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>corr1</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>freq1</key>
+ <value>100e6</value>
+ </param>
+ <param>
+ <key>if_gain1</key>
<value>20</value>
</param>
<param>
- <key>ant19</key>
+ <key>gain1</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>ant20</key>
<value></value>
</param>
<param>
- <key>bw19</key>
+ <key>bb_gain20</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>bw20</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>corr20</key>
<value>0</value>
</param>
<param>
@@ -1326,27 +1555,27 @@
<value>100e6</value>
</param>
<param>
- <key>corr20</key>
- <value>0</value>
+ <key>if_gain20</key>
+ <value>20</value>
</param>
<param>
<key>gain20</key>
<value>10</value>
</param>
<param>
- <key>if_gain20</key>
- <value>20</value>
+ <key>ant21</key>
+ <value></value>
</param>
<param>
- <key>bb_gain20</key>
+ <key>bb_gain21</key>
<value>20</value>
</param>
<param>
- <key>ant20</key>
- <value></value>
+ <key>bw21</key>
+ <value>0</value>
</param>
<param>
- <key>bw20</key>
+ <key>corr21</key>
<value>0</value>
</param>
<param>
@@ -1354,27 +1583,27 @@
<value>100e6</value>
</param>
<param>
- <key>corr21</key>
- <value>0</value>
+ <key>if_gain21</key>
+ <value>20</value>
</param>
<param>
<key>gain21</key>
<value>10</value>
</param>
<param>
- <key>if_gain21</key>
- <value>20</value>
+ <key>ant22</key>
+ <value></value>
</param>
<param>
- <key>bb_gain21</key>
+ <key>bb_gain22</key>
<value>20</value>
</param>
<param>
- <key>ant21</key>
- <value></value>
+ <key>bw22</key>
+ <value>0</value>
</param>
<param>
- <key>bw21</key>
+ <key>corr22</key>
<value>0</value>
</param>
<param>
@@ -1382,27 +1611,27 @@
<value>100e6</value>
</param>
<param>
- <key>corr22</key>
- <value>0</value>
+ <key>if_gain22</key>
+ <value>20</value>
</param>
<param>
<key>gain22</key>
<value>10</value>
</param>
<param>
- <key>if_gain22</key>
- <value>20</value>
+ <key>ant23</key>
+ <value></value>
</param>
<param>
- <key>bb_gain22</key>
+ <key>bb_gain23</key>
<value>20</value>
</param>
<param>
- <key>ant22</key>
- <value></value>
+ <key>bw23</key>
+ <value>0</value>
</param>
<param>
- <key>bw22</key>
+ <key>corr23</key>
<value>0</value>
</param>
<param>
@@ -1410,27 +1639,27 @@
<value>100e6</value>
</param>
<param>
- <key>corr23</key>
- <value>0</value>
+ <key>if_gain23</key>
+ <value>20</value>
</param>
<param>
<key>gain23</key>
<value>10</value>
</param>
<param>
- <key>if_gain23</key>
- <value>20</value>
+ <key>ant24</key>
+ <value></value>
</param>
<param>
- <key>bb_gain23</key>
+ <key>bb_gain24</key>
<value>20</value>
</param>
<param>
- <key>ant23</key>
- <value></value>
+ <key>bw24</key>
+ <value>0</value>
</param>
<param>
- <key>bw23</key>
+ <key>corr24</key>
<value>0</value>
</param>
<param>
@@ -1438,27 +1667,27 @@
<value>100e6</value>
</param>
<param>
- <key>corr24</key>
- <value>0</value>
+ <key>if_gain24</key>
+ <value>20</value>
</param>
<param>
<key>gain24</key>
<value>10</value>
</param>
<param>
- <key>if_gain24</key>
- <value>20</value>
+ <key>ant25</key>
+ <value></value>
</param>
<param>
- <key>bb_gain24</key>
+ <key>bb_gain25</key>
<value>20</value>
</param>
<param>
- <key>ant24</key>
- <value></value>
+ <key>bw25</key>
+ <value>0</value>
</param>
<param>
- <key>bw24</key>
+ <key>corr25</key>
<value>0</value>
</param>
<param>
@@ -1466,27 +1695,27 @@
<value>100e6</value>
</param>
<param>
- <key>corr25</key>
- <value>0</value>
+ <key>if_gain25</key>
+ <value>20</value>
</param>
<param>
<key>gain25</key>
<value>10</value>
</param>
<param>
- <key>if_gain25</key>
- <value>20</value>
+ <key>ant26</key>
+ <value></value>
</param>
<param>
- <key>bb_gain25</key>
+ <key>bb_gain26</key>
<value>20</value>
</param>
<param>
- <key>ant25</key>
- <value></value>
+ <key>bw26</key>
+ <value>0</value>
</param>
<param>
- <key>bw25</key>
+ <key>corr26</key>
<value>0</value>
</param>
<param>
@@ -1494,27 +1723,27 @@
<value>100e6</value>
</param>
<param>
- <key>corr26</key>
- <value>0</value>
+ <key>if_gain26</key>
+ <value>20</value>
</param>
<param>
<key>gain26</key>
<value>10</value>
</param>
<param>
- <key>if_gain26</key>
- <value>20</value>
+ <key>ant27</key>
+ <value></value>
</param>
<param>
- <key>bb_gain26</key>
+ <key>bb_gain27</key>
<value>20</value>
</param>
<param>
- <key>ant26</key>
- <value></value>
+ <key>bw27</key>
+ <value>0</value>
</param>
<param>
- <key>bw26</key>
+ <key>corr27</key>
<value>0</value>
</param>
<param>
@@ -1522,27 +1751,27 @@
<value>100e6</value>
</param>
<param>
- <key>corr27</key>
- <value>0</value>
+ <key>if_gain27</key>
+ <value>20</value>
</param>
<param>
<key>gain27</key>
<value>10</value>
</param>
<param>
- <key>if_gain27</key>
- <value>20</value>
+ <key>ant28</key>
+ <value></value>
</param>
<param>
- <key>bb_gain27</key>
+ <key>bb_gain28</key>
<value>20</value>
</param>
<param>
- <key>ant27</key>
- <value></value>
+ <key>bw28</key>
+ <value>0</value>
</param>
<param>
- <key>bw27</key>
+ <key>corr28</key>
<value>0</value>
</param>
<param>
@@ -1550,27 +1779,27 @@
<value>100e6</value>
</param>
<param>
- <key>corr28</key>
- <value>0</value>
+ <key>if_gain28</key>
+ <value>20</value>
</param>
<param>
<key>gain28</key>
<value>10</value>
</param>
<param>
- <key>if_gain28</key>
- <value>20</value>
+ <key>ant29</key>
+ <value></value>
</param>
<param>
- <key>bb_gain28</key>
+ <key>bb_gain29</key>
<value>20</value>
</param>
<param>
- <key>ant28</key>
- <value></value>
+ <key>bw29</key>
+ <value>0</value>
</param>
<param>
- <key>bw28</key>
+ <key>corr29</key>
<value>0</value>
</param>
<param>
@@ -1578,375 +1807,295 @@
<value>100e6</value>
</param>
<param>
- <key>corr29</key>
- <value>0</value>
+ <key>if_gain29</key>
+ <value>20</value>
</param>
<param>
<key>gain29</key>
<value>10</value>
</param>
<param>
- <key>if_gain29</key>
- <value>20</value>
+ <key>ant2</key>
+ <value></value>
</param>
<param>
- <key>bb_gain29</key>
+ <key>bb_gain2</key>
<value>20</value>
</param>
<param>
- <key>ant29</key>
- <value></value>
+ <key>bw2</key>
+ <value>0</value>
</param>
<param>
- <key>bw29</key>
+ <key>corr2</key>
<value>0</value>
</param>
<param>
- <key>freq30</key>
+ <key>freq2</key>
<value>100e6</value>
</param>
<param>
- <key>corr30</key>
- <value>0</value>
+ <key>if_gain2</key>
+ <value>20</value>
</param>
<param>
- <key>gain30</key>
+ <key>gain2</key>
<value>10</value>
</param>
<param>
- <key>if_gain30</key>
- <value>20</value>
+ <key>ant30</key>
+ <value></value>
</param>
<param>
<key>bb_gain30</key>
<value>20</value>
</param>
<param>
- <key>ant30</key>
- <value></value>
+ <key>bw30</key>
+ <value>0</value>
</param>
<param>
- <key>bw30</key>
+ <key>corr30</key>
<value>0</value>
</param>
<param>
- <key>freq31</key>
+ <key>freq30</key>
<value>100e6</value>
</param>
<param>
- <key>corr31</key>
- <value>0</value>
+ <key>if_gain30</key>
+ <value>20</value>
</param>
<param>
- <key>gain31</key>
+ <key>gain30</key>
<value>10</value>
</param>
<param>
- <key>if_gain31</key>
- <value>20</value>
+ <key>ant31</key>
+ <value></value>
</param>
<param>
<key>bb_gain31</key>
<value>20</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>_coordinate</key>
- <value>(1024, 467)</value>
- </param>
- <param>
- <key>_rotation</key>
+ <key>corr31</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>dtv_dvbt2_framemapper_cc</key>
<param>
- <key>id</key>
- <value>dtv_dvbt2_framemapper_cc_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>framesize</key>
- <value>FECFRAME_NORMAL</value>
+ <key>freq31</key>
+ <value>100e6</value>
</param>
<param>
- <key>rate</key>
- <value>C2_3</value>
+ <key>if_gain31</key>
+ <value>20</value>
</param>
<param>
- <key>constellation</key>
- <value>MOD_64QAM</value>
+ <key>gain31</key>
+ <value>10</value>
</param>
<param>
- <key>rotation</key>
- <value>ROTATION_ON</value>
+ <key>ant3</key>
+ <value></value>
</param>
<param>
- <key>fecblocks</key>
- <value>31</value>
+ <key>bb_gain3</key>
+ <value>20</value>
</param>
<param>
- <key>tiblocks</key>
- <value>3</value>
+ <key>bw3</key>
+ <value>0</value>
</param>
<param>
- <key>carriermode</key>
- <value>CARRIERS_NORMAL</value>
+ <key>corr3</key>
+ <value>0</value>
</param>
<param>
- <key>fftsize1</key>
- <value>FFTSIZE_4K</value>
+ <key>freq3</key>
+ <value>100e6</value>
</param>
<param>
- <key>fftsize2</key>
- <value>FFTSIZE_2K</value>
+ <key>if_gain3</key>
+ <value>20</value>
</param>
<param>
- <key>guardinterval</key>
- <value>GI_1_32</value>
+ <key>gain3</key>
+ <value>10</value>
</param>
<param>
- <key>l1constellation</key>
- <value>L1_MOD_16QAM</value>
+ <key>ant4</key>
+ <value></value>
</param>
<param>
- <key>pilotpattern</key>
- <value>PILOT_PP7</value>
+ <key>bb_gain4</key>
+ <value>20</value>
</param>
<param>
- <key>t2frames</key>
- <value>2</value>
+ <key>bw4</key>
+ <value>0</value>
</param>
<param>
- <key>numdatasyms</key>
- <value>100</value>
+ <key>corr4</key>
+ <value>0</value>
</param>
<param>
- <key>paprmode1</key>
- <value>PAPR_OFF</value>
+ <key>freq4</key>
+ <value>100e6</value>
</param>
<param>
- <key>paprmode2</key>
- <value>PAPR_OFF</value>
+ <key>if_gain4</key>
+ <value>20</value>
</param>
<param>
- <key>version</key>
- <value>VERSION_111</value>
+ <key>gain4</key>
+ <value>10</value>
</param>
<param>
- <key>preamble1</key>
- <value>PREAMBLE_T2_SISO</value>
+ <key>ant5</key>
+ <value></value>
</param>
<param>
- <key>preamble2</key>
- <value>PREAMBLE_T2_SISO</value>
+ <key>bb_gain5</key>
+ <value>20</value>
</param>
<param>
- <key>inputmode</key>
- <value>FECFRAME_NORMAL</value>
+ <key>bw5</key>
+ <value>0</value>
</param>
<param>
- <key>reservedbiasbits</key>
- <value>RESERVED_OFF</value>
+ <key>corr5</key>
+ <value>0</value>
</param>
<param>
- <key>l1scrambled</key>
- <value>L1_SCRAMBLED_OFF</value>
+ <key>freq5</key>
+ <value>100e6</value>
</param>
<param>
- <key>inband</key>
- <value>INBAND_OFF</value>
+ <key>if_gain5</key>
+ <value>20</value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>gain5</key>
+ <value>10</value>
</param>
<param>
- <key>affinity</key>
+ <key>ant6</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>bb_gain6</key>
+ <value>20</value>
</param>
<param>
- <key>maxoutbuf</key>
+ <key>bw6</key>
<value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(712, 147)</value>
- </param>
- <param>
- <key>_rotation</key>
+ <key>corr6</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>dtv_dvbt2_freqinterleaver_cc</key>
<param>
- <key>id</key>
- <value>dtv_dvbt2_freqinterleaver_cc_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>carriermode</key>
- <value>CARRIERS_NORMAL</value>
- </param>
- <param>
- <key>fftsize</key>
- <value>FFTSIZE_4K</value>
+ <key>freq6</key>
+ <value>100e6</value>
</param>
<param>
- <key>pilotpattern</key>
- <value>PILOT_PP7</value>
+ <key>if_gain6</key>
+ <value>20</value>
</param>
<param>
- <key>guardinterval</key>
- <value>GI_1_32</value>
+ <key>gain6</key>
+ <value>10</value>
</param>
<param>
- <key>numdatasyms</key>
- <value>100</value>
+ <key>ant7</key>
+ <value></value>
</param>
<param>
- <key>paprmode1</key>
- <value>PAPR_OFF</value>
+ <key>bb_gain7</key>
+ <value>20</value>
</param>
<param>
- <key>paprmode2</key>
- <value>PAPR_OFF</value>
+ <key>bw7</key>
+ <value>0</value>
</param>
<param>
- <key>version</key>
- <value>VERSION_111</value>
+ <key>corr7</key>
+ <value>0</value>
</param>
<param>
- <key>preamble1</key>
- <value>PREAMBLE_T2_SISO</value>
+ <key>freq7</key>
+ <value>100e6</value>
</param>
<param>
- <key>preamble2</key>
- <value>PREAMBLE_T2_SISO</value>
+ <key>if_gain7</key>
+ <value>20</value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>gain7</key>
+ <value>10</value>
</param>
<param>
- <key>affinity</key>
+ <key>ant8</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>bb_gain8</key>
+ <value>20</value>
</param>
<param>
- <key>maxoutbuf</key>
+ <key>bw8</key>
<value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(992, 211)</value>
- </param>
- <param>
- <key>_rotation</key>
+ <key>corr8</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>dtv_dvbt2_interleaver_bb</key>
- <param>
- <key>id</key>
- <value>dtv_dvbt2_interleaver_bb_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>framesize</key>
- <value>FECFRAME_NORMAL</value>
- </param>
<param>
- <key>rate</key>
- <value>C2_3</value>
+ <key>freq8</key>
+ <value>100e6</value>
</param>
<param>
- <key>constellation</key>
- <value>MOD_64QAM</value>
+ <key>if_gain8</key>
+ <value>20</value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>gain8</key>
+ <value>10</value>
</param>
<param>
- <key>affinity</key>
+ <key>ant9</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>bb_gain9</key>
+ <value>20</value>
</param>
<param>
- <key>maxoutbuf</key>
+ <key>bw9</key>
<value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(48, 203)</value>
- </param>
- <param>
- <key>_rotation</key>
+ <key>corr9</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>dtv_dvbt2_modulator_bc</key>
<param>
- <key>id</key>
- <value>dtv_dvbt2_modulator_bc_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>framesize</key>
- <value>FECFRAME_NORMAL</value>
+ <key>freq9</key>
+ <value>100e6</value>
</param>
<param>
- <key>constellation</key>
- <value>MOD_64QAM</value>
+ <key>if_gain9</key>
+ <value>20</value>
</param>
<param>
- <key>rotation</key>
- <value>ROTATION_ON</value>
+ <key>gain9</key>
+ <value>10</value>
</param>
<param>
- <key>alias</key>
+ <key>comment</key>
<value></value>
</param>
<param>
@@ -1954,165 +2103,155 @@
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>args</key>
+ <value>bladerf=0,buffers=128,buflen=32768</value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(264, 203)</value>
+ <value>(1048, 428)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>dtv_dvbt2_cellinterleaver_cc</key>
<param>
<key>id</key>
- <value>dtv_dvbt2_cellinterleaver_cc_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
+ <value>osmosdr_sink_0</value>
</param>
<param>
- <key>framesize</key>
- <value>FECFRAME_NORMAL</value>
+ <key>type</key>
+ <value>fc32</value>
</param>
<param>
- <key>constellation</key>
- <value>MOD_64QAM</value>
+ <key>clock_source0</key>
+ <value></value>
</param>
<param>
- <key>fecblocks</key>
- <value>31</value>
+ <key>time_source0</key>
+ <value></value>
</param>
<param>
- <key>tiblocks</key>
- <value>3</value>
+ <key>clock_source1</key>
+ <value></value>
</param>
<param>
- <key>alias</key>
+ <key>time_source1</key>
<value></value>
</param>
<param>
- <key>affinity</key>
+ <key>clock_source2</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>time_source2</key>
+ <value></value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>clock_source3</key>
+ <value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(488, 195)</value>
+ <key>time_source3</key>
+ <value></value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>clock_source4</key>
+ <value></value>
</param>
- </block>
- <block>
- <key>blocks_file_sink</key>
<param>
- <key>id</key>
- <value>blocks_file_sink_0</value>
+ <key>time_source4</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
- <value>False</value>
+ <key>clock_source5</key>
+ <value></value>
</param>
<param>
- <key>file</key>
- <value>vv.cfile</value>
+ <key>time_source5</key>
+ <value></value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
+ <key>clock_source6</key>
+ <value></value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>time_source6</key>
+ <value></value>
</param>
<param>
- <key>unbuffered</key>
- <value>False</value>
+ <key>clock_source7</key>
+ <value></value>
</param>
<param>
- <key>append</key>
- <value>False</value>
+ <key>time_source7</key>
+ <value></value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>nchan</key>
+ <value>1</value>
</param>
<param>
- <key>affinity</key>
- <value></value>
+ <key>num_mboards</key>
+ <value>1</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(832, 459)</value>
+ <key>sample_rate</key>
+ <value>samp_rate</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>sync</key>
+ <value></value>
</param>
</block>
<connection>
- <source_block_id>dtv_dvb_bch_bb_0</source_block_id>
- <sink_block_id>dtv_dvb_ldpc_bb_0</sink_block_id>
+ <source_block_id>blocks_file_source_0</source_block_id>
+ <sink_block_id>dtv_dvb_bbheader_bb_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>dtv_dvb_bbscrambler_bb_0</source_block_id>
- <sink_block_id>dtv_dvb_bch_bb_0</sink_block_id>
+ <source_block_id>blocks_multiply_const_xx_0</source_block_id>
+ <sink_block_id>osmosdr_sink_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>dtv_dvb_ldpc_bb_0</source_block_id>
- <sink_block_id>dtv_dvbt2_interleaver_bb_0</sink_block_id>
+ <source_block_id>digital_ofdm_cyclic_prefixer_0</source_block_id>
+ <sink_block_id>dtv_dvbt2_p1insertion_cc_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>dtv_dvbt2_interleaver_bb_0</source_block_id>
- <sink_block_id>dtv_dvbt2_modulator_bc_0</sink_block_id>
+ <source_block_id>dtv_dvb_bbheader_bb_0</source_block_id>
+ <sink_block_id>dtv_dvb_bbscrambler_bb_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>dtv_dvbt2_modulator_bc_0</source_block_id>
- <sink_block_id>dtv_dvbt2_cellinterleaver_cc_0</sink_block_id>
+ <source_block_id>dtv_dvb_bbscrambler_bb_0</source_block_id>
+ <sink_block_id>dtv_dvb_bch_bb_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>dtv_dvbt2_cellinterleaver_cc_0</source_block_id>
- <sink_block_id>dtv_dvbt2_framemapper_cc_0</sink_block_id>
+ <source_block_id>dtv_dvb_bch_bb_0</source_block_id>
+ <sink_block_id>dtv_dvb_ldpc_bb_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>dtv_dvb_bbheader_bb_0</source_block_id>
- <sink_block_id>dtv_dvb_bbscrambler_bb_0</sink_block_id>
+ <source_block_id>dtv_dvb_ldpc_bb_0</source_block_id>
+ <sink_block_id>dtv_dvbt2_interleaver_bb_0</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>dtv_dvb_bbheader_bb_0</sink_block_id>
+ <source_block_id>dtv_dvbt2_cellinterleaver_cc_0</source_block_id>
+ <sink_block_id>dtv_dvbt2_framemapper_cc_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
@@ -2129,32 +2268,32 @@
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>digital_ofdm_cyclic_prefixer_0</source_block_id>
- <sink_block_id>dtv_dvbt2_p1insertion_cc_0</sink_block_id>
+ <source_block_id>dtv_dvbt2_interleaver_bb_0</source_block_id>
+ <sink_block_id>dtv_dvbt2_modulator_bc_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>dtv_dvbt2_pilotgenerator_cc_0</source_block_id>
- <sink_block_id>digital_ofdm_cyclic_prefixer_0</sink_block_id>
+ <source_block_id>dtv_dvbt2_modulator_bc_0</source_block_id>
+ <sink_block_id>dtv_dvbt2_cellinterleaver_cc_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>dtv_dvbt2_p1insertion_cc_0</source_block_id>
- <sink_block_id>blocks_multiply_const_vxx_0</sink_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>blocks_multiply_const_vxx_0</source_block_id>
- <sink_block_id>osmosdr_sink_0</sink_block_id>
+ <source_block_id>dtv_dvbt2_p1insertion_cc_0</source_block_id>
+ <sink_block_id>blocks_multiply_const_xx_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>dtv_dvbt2_p1insertion_cc_0</source_block_id>
- <sink_block_id>blocks_file_sink_0</sink_block_id>
+ <source_block_id>dtv_dvbt2_pilotgenerator_cc_0</source_block_id>
+ <sink_block_id>digital_ofdm_cyclic_prefixer_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
diff --git a/gr-dtv/examples/vv018-miso.grc b/gr-dtv/examples/vv018-miso.grc
index 2eb011bf3f..f3434a5dc9 100644
--- a/gr-dtv/examples/vv018-miso.grc
+++ b/gr-dtv/examples/vv018-miso.grc
@@ -1,23 +1,23 @@
-<?xml version='1.0' encoding='ASCII'?>
-<?grc format='1' created='3.7.7'?>
+<?xml version='1.0' encoding='utf-8'?>
+<?grc format='1' created='3.7.11'?>
<flow_graph>
<timestamp>Mon Dec 29 01:02:46 2014</timestamp>
<block>
<key>options</key>
<param>
- <key>id</key>
- <value>vv018_miso</value>
+ <key>author</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>window_size</key>
+ <value>1280, 1024</value>
</param>
<param>
- <key>title</key>
- <value></value>
+ <key>category</key>
+ <value>Custom</value>
</param>
<param>
- <key>author</key>
+ <key>comment</key>
<value></value>
</param>
<param>
@@ -25,188 +25,179 @@
<value></value>
</param>
<param>
- <key>window_size</key>
- <value>1280, 1024</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>generate_options</key>
- <value>wx_gui</value>
+ <key>_coordinate</key>
+ <value>(8, 11)</value>
</param>
<param>
- <key>category</key>
- <value>Custom</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>run_options</key>
- <value>prompt</value>
+ <key>generate_options</key>
+ <value>qt_gui</value>
</param>
<param>
- <key>run</key>
- <value>True</value>
+ <key>hier_block_src_path</key>
+ <value>.:</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>vv018_miso</value>
</param>
<param>
<key>max_nouts</key>
<value>0</value>
</param>
<param>
- <key>realtime_scheduling</key>
+ <key>qt_qss_theme</key>
<value></value>
</param>
<param>
- <key>alias</key>
+ <key>realtime_scheduling</key>
<value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(8, 11)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
+ <key>run_command</key>
+ <value>{python} -u {filename}</value>
</param>
- </block>
- <block>
- <key>variable</key>
<param>
- <key>id</key>
- <value>samp_rate</value>
+ <key>run_options</key>
+ <value>prompt</value>
</param>
<param>
- <key>_enabled</key>
+ <key>run</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>(8000000.0) * 8 / 7</value>
- </param>
- <param>
- <key>alias</key>
+ <key>thread_safe_setters</key>
<value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(8, 75)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
+ <key>title</key>
+ <value></value>
</param>
</block>
<block>
- <key>dtv_dvb_bbheader_bb</key>
+ <key>variable</key>
<param>
- <key>id</key>
- <value>dtv_dvb_bbheader_bb_0</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>standard</key>
- <value>STANDARD_DVBT2</value>
+ <key>_coordinate</key>
+ <value>(176, 12)</value>
</param>
<param>
- <key>framesize</key>
- <value>FECFRAME_NORMAL</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>rate1</key>
- <value>C5_6</value>
+ <key>id</key>
+ <value>center_freq</value>
</param>
<param>
- <key>rate2</key>
- <value>C1_3</value>
+ <key>value</key>
+ <value>429e6</value>
</param>
+ </block>
+ <block>
+ <key>variable</key>
<param>
- <key>rate3</key>
- <value>C1_4</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
- <key>rate4</key>
- <value>C1_4</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>rolloff</key>
- <value>RO_0_35</value>
+ <key>_coordinate</key>
+ <value>(8, 75)</value>
</param>
<param>
- <key>mode</key>
- <value>FECFRAME_SHORT</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>inband</key>
- <value>INBAND_OFF</value>
+ <key>id</key>
+ <value>samp_rate</value>
</param>
<param>
- <key>fecblocks</key>
- <value>168</value>
+ <key>value</key>
+ <value>(8000000.0) * 8 / 7</value>
</param>
+ </block>
+ <block>
+ <key>blocks_file_sink</key>
<param>
- <key>tsrate</key>
- <value>4000000</value>
+ <key>append</key>
+ <value>False</value>
</param>
<param>
<key>alias</key>
<value></value>
</param>
<param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>False</value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>file</key>
+ <value>vvtx1.cfile</value>
</param>
<param>
<key>_coordinate</key>
- <value>(336, 11)</value>
+ <value>(616, 348)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>dtv_dvb_bbscrambler_bb</key>
<param>
<key>id</key>
- <value>dtv_dvb_bbscrambler_bb_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>standard</key>
- <value>STANDARD_DVBT2</value>
+ <value>blocks_file_sink_0</value>
</param>
<param>
- <key>framesize</key>
- <value>FECFRAME_NORMAL</value>
+ <key>type</key>
+ <value>complex</value>
</param>
<param>
- <key>rate1</key>
- <value>C5_6</value>
+ <key>unbuffered</key>
+ <value>False</value>
</param>
<param>
- <key>rate2</key>
- <value>C1_3</value>
+ <key>vlen</key>
+ <value>1</value>
</param>
+ </block>
+ <block>
+ <key>blocks_file_sink</key>
<param>
- <key>rate3</key>
- <value>C1_4</value>
+ <key>append</key>
+ <value>False</value>
</param>
<param>
- <key>rate4</key>
- <value>C1_4</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>alias</key>
+ <key>comment</key>
<value></value>
</param>
<param>
@@ -214,58 +205,46 @@
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>False</value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>file</key>
+ <value>vvtx2.cfile</value>
</param>
<param>
<key>_coordinate</key>
- <value>(632, 27)</value>
+ <value>(616, 548)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>dtv_dvb_bch_bb</key>
<param>
<key>id</key>
- <value>dtv_dvb_bch_bb_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>standard</key>
- <value>STANDARD_DVBT2</value>
- </param>
- <param>
- <key>framesize</key>
- <value>FECFRAME_NORMAL</value>
+ <value>blocks_file_sink_0_0</value>
</param>
<param>
- <key>rate1</key>
- <value>C5_6</value>
+ <key>type</key>
+ <value>complex</value>
</param>
<param>
- <key>rate2</key>
- <value>C1_3</value>
+ <key>unbuffered</key>
+ <value>False</value>
</param>
<param>
- <key>rate3</key>
- <value>C1_4</value>
+ <key>vlen</key>
+ <value>1</value>
</param>
+ </block>
+ <block>
+ <key>blocks_file_source</key>
<param>
- <key>rate4</key>
- <value>C1_4</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>alias</key>
+ <key>comment</key>
<value></value>
</param>
<param>
@@ -273,156 +252,156 @@
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>file</key>
+ <value>/run/shm/adv32kmiso.ts</value>
</param>
<param>
<key>_coordinate</key>
- <value>(848, 27)</value>
+ <value>(112, 75)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>dtv_dvb_ldpc_bb</key>
<param>
<key>id</key>
- <value>dtv_dvb_ldpc_bb_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
+ <value>blocks_file_source_0</value>
</param>
<param>
- <key>standard</key>
- <value>STANDARD_DVBT2</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>framesize</key>
- <value>FECFRAME_NORMAL</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>rate1</key>
- <value>C5_6</value>
+ <key>type</key>
+ <value>byte</value>
</param>
<param>
- <key>rate2</key>
- <value>C1_3</value>
+ <key>repeat</key>
+ <value>True</value>
</param>
<param>
- <key>rate3</key>
- <value>C1_4</value>
+ <key>vlen</key>
+ <value>1</value>
</param>
+ </block>
+ <block>
+ <key>blocks_multiply_const_xx</key>
<param>
- <key>rate4</key>
- <value>C1_4</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>constellation</key>
- <value>MOD_OTHER</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>const</key>
+ <value>0.2</value>
</param>
<param>
<key>affinity</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
- </param>
- <param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(1056, 27)</value>
+ <value>(616, 452)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>dtv_dvbt2_interleaver_bb</key>
<param>
<key>id</key>
- <value>dtv_dvbt2_interleaver_bb_0</value>
+ <value>blocks_multiply_const_xx_0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>type</key>
+ <value>complex</value>
</param>
<param>
- <key>framesize</key>
- <value>FECFRAME_NORMAL</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>rate</key>
- <value>C5_6</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>constellation</key>
- <value>MOD_256QAM</value>
+ <key>vlen</key>
+ <value>1</value>
</param>
+ </block>
+ <block>
+ <key>blocks_null_sink</key>
<param>
<key>alias</key>
<value></value>
</param>
<param>
- <key>affinity</key>
+ <key>bus_conns</key>
+ <value>[[0,],]</value>
+ </param>
+ <param>
+ <key>comment</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(1056, 115)</value>
+ <value>(816, 416)</value>
</param>
<param>
<key>_rotation</key>
- <value>180</value>
+ <value>0</value>
</param>
- </block>
- <block>
- <key>dtv_dvbt2_modulator_bc</key>
<param>
<key>id</key>
- <value>dtv_dvbt2_modulator_bc_0</value>
+ <value>blocks_null_sink_0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>type</key>
+ <value>complex</value>
</param>
<param>
- <key>framesize</key>
- <value>FECFRAME_NORMAL</value>
+ <key>num_inputs</key>
+ <value>1</value>
</param>
<param>
- <key>constellation</key>
- <value>MOD_256QAM</value>
+ <key>vlen</key>
+ <value>1</value>
</param>
+ </block>
+ <block>
+ <key>digital_ofdm_cyclic_prefixer</key>
<param>
- <key>rotation</key>
- <value>ROTATION_ON</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>alias</key>
+ <key>cp_len</key>
+ <value>32768/16</value>
+ </param>
+ <param>
+ <key>comment</key>
<value></value>
</param>
<param>
@@ -430,50 +409,54 @@
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>input_size</key>
+ <value>32768</value>
</param>
<param>
<key>_coordinate</key>
- <value>(808, 115)</value>
+ <value>(56, 528)</value>
</param>
<param>
<key>_rotation</key>
- <value>180</value>
+ <value>0</value>
</param>
- </block>
- <block>
- <key>dtv_dvbt2_cellinterleaver_cc</key>
<param>
<key>id</key>
- <value>dtv_dvbt2_cellinterleaver_cc_0</value>
+ <value>digital_ofdm_cyclic_prefixer_0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>tagname</key>
+ <value></value>
</param>
<param>
- <key>framesize</key>
- <value>FECFRAME_NORMAL</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>constellation</key>
- <value>MOD_256QAM</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>fecblocks</key>
- <value>61</value>
+ <key>rolloff</key>
+ <value>0</value>
</param>
+ </block>
+ <block>
+ <key>digital_ofdm_cyclic_prefixer</key>
<param>
- <key>tiblocks</key>
- <value>1</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>alias</key>
+ <key>cp_len</key>
+ <value>32768/16</value>
+ </param>
+ <param>
+ <key>comment</key>
<value></value>
</param>
<param>
@@ -481,177 +464,161 @@
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>input_size</key>
+ <value>32768</value>
</param>
<param>
<key>_coordinate</key>
- <value>(576, 107)</value>
+ <value>(56, 408)</value>
</param>
<param>
<key>_rotation</key>
- <value>180</value>
+ <value>0</value>
</param>
- </block>
- <block>
- <key>dtv_dvbt2_framemapper_cc</key>
<param>
<key>id</key>
- <value>dtv_dvbt2_framemapper_cc_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>framesize</key>
- <value>FECFRAME_NORMAL</value>
- </param>
- <param>
- <key>rate</key>
- <value>C5_6</value>
+ <value>digital_ofdm_cyclic_prefixer_0_0</value>
</param>
<param>
- <key>constellation</key>
- <value>MOD_256QAM</value>
+ <key>tagname</key>
+ <value></value>
</param>
<param>
- <key>rotation</key>
- <value>ROTATION_ON</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>fecblocks</key>
- <value>61</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>tiblocks</key>
- <value>1</value>
+ <key>rolloff</key>
+ <value>0</value>
</param>
+ </block>
+ <block>
+ <key>dtv_dvb_bbheader_bb</key>
<param>
- <key>carriermode</key>
- <value>CARRIERS_EXTENDED</value>
+ <key>mode</key>
+ <value>INPUTMODE_NORMAL</value>
</param>
<param>
- <key>fftsize1</key>
- <value>FFTSIZE_32K</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>fftsize2</key>
- <value>FFTSIZE_2K</value>
+ <key>rate1</key>
+ <value>C5_6</value>
</param>
<param>
- <key>guardinterval</key>
- <value>GI_1_16</value>
+ <key>rate2</key>
+ <value>C1_3</value>
</param>
<param>
- <key>l1constellation</key>
- <value>L1_MOD_64QAM</value>
+ <key>rate3</key>
+ <value>C1_4</value>
</param>
<param>
- <key>pilotpattern</key>
- <value>PILOT_PP2</value>
+ <key>rate4</key>
+ <value>C1_5_MEDIUM</value>
</param>
<param>
- <key>t2frames</key>
- <value>2</value>
+ <key>rate5</key>
+ <value>C1_4</value>
</param>
<param>
- <key>numdatasyms</key>
- <value>19</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
- <key>paprmode1</key>
- <value>PAPR_OFF</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>paprmode2</key>
- <value>PAPR_OFF</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>version</key>
- <value>VERSION_111</value>
+ <key>fecblocks</key>
+ <value>168</value>
</param>
<param>
- <key>preamble1</key>
- <value>PREAMBLE_T2_MISO</value>
+ <key>framesize1</key>
+ <value>FECFRAME_NORMAL</value>
</param>
<param>
- <key>preamble2</key>
- <value>PREAMBLE_T2_SISO</value>
+ <key>framesize2</key>
+ <value>FECFRAME_NORMAL</value>
</param>
<param>
- <key>inputmode</key>
- <value>FECFRAME_NORMAL</value>
+ <key>_coordinate</key>
+ <value>(336, 8)</value>
</param>
<param>
- <key>reservedbiasbits</key>
- <value>RESERVED_OFF</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>l1scrambled</key>
- <value>L1_SCRAMBLED_OFF</value>
+ <key>id</key>
+ <value>dtv_dvb_bbheader_bb_0</value>
</param>
<param>
<key>inband</key>
<value>INBAND_OFF</value>
</param>
<param>
- <key>alias</key>
- <value></value>
- </param>
- <param>
- <key>affinity</key>
- <value></value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>minoutbuf</key>
<value>0</value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>rolloff</key>
+ <value>RO_0_35</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(48, 155)</value>
+ <key>standard</key>
+ <value>STANDARD_DVBT2</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>tsrate</key>
+ <value>4000000</value>
</param>
</block>
<block>
- <key>digital_ofdm_cyclic_prefixer</key>
+ <key>dtv_dvb_bbscrambler_bb</key>
<param>
- <key>id</key>
- <value>digital_ofdm_cyclic_prefixer_0_0</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>rate1</key>
+ <value>C5_6</value>
</param>
<param>
- <key>input_size</key>
- <value>32768</value>
+ <key>rate2</key>
+ <value>C1_3</value>
</param>
<param>
- <key>cp_len</key>
- <value>32768/16</value>
+ <key>rate3</key>
+ <value>C1_4</value>
</param>
<param>
- <key>rolloff</key>
- <value>0</value>
+ <key>rate4</key>
+ <value>C1_5_MEDIUM</value>
</param>
<param>
- <key>tagname</key>
- <value></value>
+ <key>rate5</key>
+ <value>C1_4</value>
</param>
<param>
- <key>alias</key>
+ <key>comment</key>
<value></value>
</param>
<param>
@@ -659,74 +626,70 @@
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>framesize1</key>
+ <value>FECFRAME_NORMAL</value>
+ </param>
+ <param>
+ <key>framesize2</key>
+ <value>FECFRAME_NORMAL</value>
</param>
<param>
<key>_coordinate</key>
- <value>(56, 451)</value>
+ <value>(608, 20)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>dtv_dvbt2_freqinterleaver_cc</key>
<param>
<key>id</key>
- <value>dtv_dvbt2_freqinterleaver_cc_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>carriermode</key>
- <value>CARRIERS_EXTENDED</value>
+ <value>dtv_dvb_bbscrambler_bb_0</value>
</param>
<param>
- <key>fftsize</key>
- <value>FFTSIZE_32K</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>pilotpattern</key>
- <value>PILOT_PP2</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>guardinterval</key>
- <value>GI_1_16</value>
+ <key>standard</key>
+ <value>STANDARD_DVBT2</value>
</param>
+ </block>
+ <block>
+ <key>dtv_dvb_bch_bb</key>
<param>
- <key>numdatasyms</key>
- <value>19</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>paprmode1</key>
- <value>PAPR_OFF</value>
+ <key>rate1</key>
+ <value>C5_6</value>
</param>
<param>
- <key>paprmode2</key>
- <value>PAPR_OFF</value>
+ <key>rate2</key>
+ <value>C1_3</value>
</param>
<param>
- <key>version</key>
- <value>VERSION_111</value>
+ <key>rate3</key>
+ <value>C1_4</value>
</param>
<param>
- <key>preamble1</key>
- <value>PREAMBLE_T2_MISO</value>
+ <key>rate4</key>
+ <value>C1_5_MEDIUM</value>
</param>
<param>
- <key>preamble2</key>
- <value>PREAMBLE_T2_SISO</value>
+ <key>rate5</key>
+ <value>C1_4</value>
</param>
<param>
- <key>alias</key>
+ <key>comment</key>
<value></value>
</param>
<param>
@@ -734,267 +697,261 @@
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>framesize1</key>
+ <value>FECFRAME_NORMAL</value>
+ </param>
+ <param>
+ <key>framesize2</key>
+ <value>FECFRAME_NORMAL</value>
</param>
<param>
<key>_coordinate</key>
- <value>(328, 195)</value>
+ <value>(824, 20)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>dtv_dvbt2_p1insertion_cc</key>
<param>
<key>id</key>
- <value>dtv_dvbt2_p1insertion_cc_0</value>
+ <value>dtv_dvb_bch_bb_0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>carriermode</key>
- <value>CARRIERS_EXTENDED</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>fftsize1</key>
- <value>FFTSIZE_32K</value>
+ <key>standard</key>
+ <value>STANDARD_DVBT2</value>
</param>
+ </block>
+ <block>
+ <key>dtv_dvb_ldpc_bb</key>
<param>
- <key>fftsize2</key>
- <value>FFTSIZE_2K</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>guardinterval</key>
- <value>GI_1_16</value>
+ <key>rate1</key>
+ <value>C5_6</value>
</param>
<param>
- <key>numdatasyms</key>
- <value>19</value>
+ <key>rate2</key>
+ <value>C1_3</value>
</param>
<param>
- <key>version</key>
- <value>VERSION_111</value>
+ <key>rate3</key>
+ <value>C1_4</value>
</param>
<param>
- <key>preamble1</key>
- <value>PREAMBLE_T2_MISO</value>
+ <key>rate4</key>
+ <value>C1_5_MEDIUM</value>
</param>
<param>
- <key>preamble2</key>
- <value>PREAMBLE_T2_SISO</value>
+ <key>rate5</key>
+ <value>C1_4</value>
</param>
<param>
- <key>showlevels</key>
- <value>SHOWLEVELS_OFF</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
- <key>vclip</key>
- <value>3.3</value>
+ <key>constellation</key>
+ <value>MOD_OTHER</value>
</param>
<param>
- <key>alias</key>
+ <key>affinity</key>
<value></value>
</param>
<param>
- <key>affinity</key>
- <value></value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>framesize1</key>
+ <value>FECFRAME_NORMAL</value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>framesize2</key>
+ <value>FECFRAME_NORMAL</value>
</param>
<param>
<key>_coordinate</key>
- <value>(312, 523)</value>
+ <value>(1056, 20)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>digital_ofdm_cyclic_prefixer</key>
<param>
<key>id</key>
- <value>digital_ofdm_cyclic_prefixer_0</value>
+ <value>dtv_dvb_ldpc_bb_0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>input_size</key>
- <value>32768</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>cp_len</key>
- <value>32768/16</value>
+ <key>standard</key>
+ <value>STANDARD_DVBT2</value>
</param>
+ </block>
+ <block>
+ <key>dtv_dvbt2_cellinterleaver_cc</key>
<param>
- <key>rolloff</key>
- <value>0</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>tagname</key>
+ <key>comment</key>
<value></value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>constellation</key>
+ <value>MOD_256QAM</value>
</param>
<param>
<key>affinity</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>fecblocks</key>
+ <value>61</value>
+ </param>
+ <param>
+ <key>framesize</key>
+ <value>FECFRAME_NORMAL</value>
</param>
<param>
<key>_coordinate</key>
- <value>(56, 579)</value>
+ <value>(576, 104)</value>
</param>
<param>
<key>_rotation</key>
- <value>0</value>
+ <value>180</value>
</param>
- </block>
- <block>
- <key>blocks_file_sink</key>
<param>
<key>id</key>
- <value>blocks_file_sink_0_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>False</value>
+ <value>dtv_dvbt2_cellinterleaver_cc_0</value>
</param>
<param>
- <key>file</key>
- <value>vvtx2.cfile</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>vlen</key>
+ <key>tiblocks</key>
<value>1</value>
</param>
+ </block>
+ <block>
+ <key>dtv_dvbt2_framemapper_cc</key>
<param>
- <key>unbuffered</key>
- <value>False</value>
- </param>
- <param>
- <key>append</key>
- <value>False</value>
+ <key>inputmode</key>
+ <value>FECFRAME_NORMAL</value>
</param>
<param>
<key>alias</key>
<value></value>
</param>
<param>
- <key>affinity</key>
+ <key>rate</key>
+ <value>C5_6</value>
+ </param>
+ <param>
+ <key>comment</key>
<value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(616, 579)</value>
+ <key>rotation</key>
+ <value>ROTATION_ON</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>constellation</key>
+ <value>MOD_256QAM</value>
</param>
- </block>
- <block>
- <key>blocks_multiply_const_vxx</key>
<param>
- <key>id</key>
- <value>blocks_multiply_const_vxx_0</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
- </param>
- <param>
- <key>const</key>
- <value>0.2</value>
- </param>
- <param>
- <key>vlen</key>
- <value>1</value>
+ <key>carriermode</key>
+ <value>CARRIERS_EXTENDED</value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>fecblocks</key>
+ <value>61</value>
</param>
<param>
- <key>affinity</key>
- <value></value>
+ <key>framesize</key>
+ <value>FECFRAME_NORMAL</value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>fftsize1</key>
+ <value>FFTSIZE_32K</value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>fftsize2</key>
+ <value>FFTSIZE_2K</value>
</param>
<param>
<key>_coordinate</key>
- <value>(616, 499)</value>
+ <value>(48, 148)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>dtv_dvbt2_pilotgenerator_cc</key>
+ <param>
+ <key>guardinterval</key>
+ <value>GI_1_16</value>
+ </param>
<param>
<key>id</key>
- <value>dtv_dvbt2_pilotgenerator_cc_0</value>
+ <value>dtv_dvbt2_framemapper_cc_0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>inband</key>
+ <value>INBAND_OFF</value>
</param>
<param>
- <key>carriermode</key>
- <value>CARRIERS_EXTENDED</value>
+ <key>l1constellation</key>
+ <value>L1_MOD_64QAM</value>
</param>
<param>
- <key>fftsize</key>
- <value>FFTSIZE_32K</value>
+ <key>l1scrambled</key>
+ <value>L1_SCRAMBLED_OFF</value>
</param>
<param>
- <key>pilotpattern</key>
- <value>PILOT_PP2</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>guardinterval</key>
- <value>GI_1_16</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>numdatasyms</key>
@@ -1009,8 +966,8 @@
<value>PAPR_OFF</value>
</param>
<param>
- <key>version</key>
- <value>VERSION_111</value>
+ <key>pilotpattern</key>
+ <value>PILOT_PP2</value>
</param>
<param>
<key>preamble1</key>
@@ -1021,47 +978,35 @@
<value>PREAMBLE_T2_SISO</value>
</param>
<param>
- <key>misogroup</key>
- <value>MISO_TX2</value>
+ <key>reservedbiasbits</key>
+ <value>RESERVED_OFF</value>
</param>
<param>
- <key>equalization</key>
- <value>EQUALIZATION_ON</value>
+ <key>version</key>
+ <value>VERSION_111</value>
</param>
<param>
- <key>bandwidth</key>
- <value>BANDWIDTH_8_0_MHZ</value>
+ <key>t2frames</key>
+ <value>2</value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>tiblocks</key>
+ <value>1</value>
</param>
+ </block>
+ <block>
+ <key>dtv_dvbt2_freqinterleaver_cc</key>
<param>
- <key>affinity</key>
+ <key>alias</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>(1016, 411)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
+ <key>comment</key>
+ <value></value>
</param>
- </block>
- <block>
- <key>dtv_dvbt2_pilotgenerator_cc</key>
<param>
- <key>id</key>
- <value>dtv_dvbt2_pilotgenerator_cc_1</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
@@ -1076,14 +1021,30 @@
<value>FFTSIZE_32K</value>
</param>
<param>
- <key>pilotpattern</key>
- <value>PILOT_PP2</value>
+ <key>_coordinate</key>
+ <value>(344, 204)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
<key>guardinterval</key>
<value>GI_1_16</value>
</param>
<param>
+ <key>id</key>
+ <value>dtv_dvbt2_freqinterleaver_cc_0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>numdatasyms</key>
<value>19</value>
</param>
@@ -1096,8 +1057,8 @@
<value>PAPR_OFF</value>
</param>
<param>
- <key>version</key>
- <value>VERSION_111</value>
+ <key>pilotpattern</key>
+ <value>PILOT_PP2</value>
</param>
<param>
<key>preamble1</key>
@@ -1108,47 +1069,74 @@
<value>PREAMBLE_T2_SISO</value>
</param>
<param>
- <key>misogroup</key>
- <value>MISO_TX1</value>
+ <key>version</key>
+ <value>VERSION_111</value>
</param>
+ </block>
+ <block>
+ <key>dtv_dvbt2_interleaver_bb</key>
<param>
- <key>equalization</key>
- <value>EQUALIZATION_ON</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>bandwidth</key>
- <value>BANDWIDTH_8_0_MHZ</value>
+ <key>rate</key>
+ <value>C5_6</value>
</param>
<param>
- <key>alias</key>
+ <key>comment</key>
<value></value>
</param>
<param>
+ <key>constellation</key>
+ <value>MOD_256QAM</value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>framesize</key>
+ <value>FECFRAME_NORMAL</value>
</param>
<param>
<key>_coordinate</key>
- <value>(1016, 203)</value>
+ <value>(1056, 108)</value>
</param>
<param>
<key>_rotation</key>
+ <value>180</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>dtv_dvbt2_interleaver_bb_0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
<value>0</value>
</param>
</block>
<block>
<key>dtv_dvbt2_miso_cc</key>
<param>
- <key>id</key>
- <value>dtv_dvbt2_miso_cc_0</value>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
@@ -1163,14 +1151,30 @@
<value>FFTSIZE_32K</value>
</param>
<param>
- <key>pilotpattern</key>
- <value>PILOT_PP2</value>
+ <key>_coordinate</key>
+ <value>(640, 208)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
<key>guardinterval</key>
<value>GI_1_16</value>
</param>
<param>
+ <key>id</key>
+ <value>dtv_dvbt2_miso_cc_0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>numdatasyms</key>
<value>19</value>
</param>
@@ -1183,39 +1187,78 @@
<value>PAPR_OFF</value>
</param>
<param>
+ <key>pilotpattern</key>
+ <value>PILOT_PP2</value>
+ </param>
+ <param>
<key>version</key>
<value>VERSION_111</value>
</param>
+ </block>
+ <block>
+ <key>dtv_dvbt2_modulator_bc</key>
<param>
<key>alias</key>
<value></value>
</param>
<param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>rotation</key>
+ <value>ROTATION_ON</value>
+ </param>
+ <param>
+ <key>constellation</key>
+ <value>MOD_256QAM</value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>framesize</key>
+ <value>FECFRAME_NORMAL</value>
</param>
<param>
<key>_coordinate</key>
- <value>(640, 203)</value>
+ <value>(808, 108)</value>
</param>
<param>
<key>_rotation</key>
+ <value>180</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>dtv_dvbt2_modulator_bc_0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
<value>0</value>
</param>
</block>
<block>
<key>dtv_dvbt2_p1insertion_cc</key>
<param>
- <key>id</key>
- <value>dtv_dvbt2_p1insertion_cc_0_0</value>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
@@ -1234,16 +1277,32 @@
<value>FFTSIZE_2K</value>
</param>
<param>
+ <key>_coordinate</key>
+ <value>(312, 504)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ <param>
<key>guardinterval</key>
<value>GI_1_16</value>
</param>
<param>
- <key>numdatasyms</key>
- <value>19</value>
+ <key>id</key>
+ <value>dtv_dvbt2_p1insertion_cc_0</value>
</param>
<param>
- <key>version</key>
- <value>VERSION_111</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>numdatasyms</key>
+ <value>19</value>
</param>
<param>
<key>preamble1</key>
@@ -1258,1077 +1317,1179 @@
<value>SHOWLEVELS_OFF</value>
</param>
<param>
+ <key>version</key>
+ <value>VERSION_111</value>
+ </param>
+ <param>
<key>vclip</key>
<value>3.3</value>
</param>
+ </block>
+ <block>
+ <key>dtv_dvbt2_p1insertion_cc</key>
<param>
<key>alias</key>
<value></value>
</param>
<param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>carriermode</key>
+ <value>CARRIERS_EXTENDED</value>
+ </param>
+ <param>
+ <key>fftsize1</key>
+ <value>FFTSIZE_32K</value>
+ </param>
+ <param>
+ <key>fftsize2</key>
+ <value>FFTSIZE_2K</value>
</param>
<param>
<key>_coordinate</key>
- <value>(312, 379)</value>
+ <value>(312, 368)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>blocks_file_sink</key>
+ <param>
+ <key>guardinterval</key>
+ <value>GI_1_16</value>
+ </param>
<param>
<key>id</key>
- <value>blocks_file_sink_0</value>
+ <value>dtv_dvbt2_p1insertion_cc_0_0</value>
</param>
<param>
- <key>_enabled</key>
- <value>False</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>file</key>
- <value>vvtx1.cfile</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
+ <key>numdatasyms</key>
+ <value>19</value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>preamble1</key>
+ <value>PREAMBLE_T2_MISO</value>
</param>
<param>
- <key>unbuffered</key>
- <value>False</value>
+ <key>preamble2</key>
+ <value>PREAMBLE_T2_SISO</value>
</param>
<param>
- <key>append</key>
- <value>False</value>
+ <key>showlevels</key>
+ <value>SHOWLEVELS_OFF</value>
+ </param>
+ <param>
+ <key>version</key>
+ <value>VERSION_111</value>
+ </param>
+ <param>
+ <key>vclip</key>
+ <value>3.3</value>
+ </param>
+ </block>
+ <block>
+ <key>dtv_dvbt2_pilotgenerator_cc</key>
+ <param>
+ <key>bandwidth</key>
+ <value>BANDWIDTH_8_0_MHZ</value>
</param>
<param>
<key>alias</key>
<value></value>
</param>
<param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
<param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>carriermode</key>
+ <value>CARRIERS_EXTENDED</value>
+ </param>
+ <param>
+ <key>fftsize</key>
+ <value>FFTSIZE_32K</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(616, 411)</value>
+ <value>(1016, 380)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>osmosdr_sink</key>
+ <param>
+ <key>guardinterval</key>
+ <value>GI_1_16</value>
+ </param>
<param>
<key>id</key>
- <value>osmosdr_sink_0</value>
+ <value>dtv_dvbt2_pilotgenerator_cc_0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>misogroup</key>
+ <value>MISO_TX2</value>
</param>
<param>
- <key>type</key>
- <value>fc32</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>args</key>
- <value>bladerf=0,buffers=128,buflen=32768</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>sync</key>
- <value></value>
+ <key>numdatasyms</key>
+ <value>19</value>
</param>
<param>
- <key>num_mboards</key>
- <value>1</value>
+ <key>paprmode1</key>
+ <value>PAPR_OFF</value>
</param>
<param>
- <key>clock_source0</key>
- <value></value>
+ <key>paprmode2</key>
+ <value>PAPR_OFF</value>
</param>
<param>
- <key>time_source0</key>
- <value></value>
+ <key>pilotpattern</key>
+ <value>PILOT_PP2</value>
</param>
<param>
- <key>clock_source1</key>
- <value></value>
+ <key>preamble1</key>
+ <value>PREAMBLE_T2_MISO</value>
</param>
<param>
- <key>time_source1</key>
- <value></value>
+ <key>preamble2</key>
+ <value>PREAMBLE_T2_SISO</value>
</param>
<param>
- <key>clock_source2</key>
- <value></value>
+ <key>equalization</key>
+ <value>EQUALIZATION_ON</value>
</param>
<param>
- <key>time_source2</key>
- <value></value>
+ <key>version</key>
+ <value>VERSION_111</value>
</param>
+ </block>
+ <block>
+ <key>dtv_dvbt2_pilotgenerator_cc</key>
<param>
- <key>clock_source3</key>
- <value></value>
+ <key>bandwidth</key>
+ <value>BANDWIDTH_8_0_MHZ</value>
</param>
<param>
- <key>time_source3</key>
+ <key>alias</key>
<value></value>
</param>
<param>
- <key>clock_source4</key>
+ <key>comment</key>
<value></value>
</param>
<param>
- <key>time_source4</key>
+ <key>affinity</key>
<value></value>
</param>
<param>
- <key>clock_source5</key>
- <value></value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>time_source5</key>
- <value></value>
+ <key>carriermode</key>
+ <value>CARRIERS_EXTENDED</value>
</param>
<param>
- <key>clock_source6</key>
- <value></value>
+ <key>fftsize</key>
+ <value>FFTSIZE_32K</value>
</param>
<param>
- <key>time_source6</key>
- <value></value>
+ <key>_coordinate</key>
+ <value>(1016, 188)</value>
</param>
<param>
- <key>clock_source7</key>
- <value></value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>time_source7</key>
- <value></value>
+ <key>guardinterval</key>
+ <value>GI_1_16</value>
</param>
<param>
- <key>nchan</key>
- <value>1</value>
+ <key>id</key>
+ <value>dtv_dvbt2_pilotgenerator_cc_1</value>
</param>
<param>
- <key>sample_rate</key>
- <value>samp_rate</value>
+ <key>misogroup</key>
+ <value>MISO_TX1</value>
</param>
<param>
- <key>freq0</key>
- <value>429e6</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>corr0</key>
+ <key>minoutbuf</key>
<value>0</value>
</param>
<param>
- <key>gain0</key>
- <value>18</value>
+ <key>numdatasyms</key>
+ <value>19</value>
</param>
<param>
- <key>if_gain0</key>
- <value>0</value>
+ <key>paprmode1</key>
+ <value>PAPR_OFF</value>
</param>
<param>
- <key>bb_gain0</key>
- <value>-8</value>
+ <key>paprmode2</key>
+ <value>PAPR_OFF</value>
+ </param>
+ <param>
+ <key>pilotpattern</key>
+ <value>PILOT_PP2</value>
+ </param>
+ <param>
+ <key>preamble1</key>
+ <value>PREAMBLE_T2_MISO</value>
+ </param>
+ <param>
+ <key>preamble2</key>
+ <value>PREAMBLE_T2_SISO</value>
+ </param>
+ <param>
+ <key>equalization</key>
+ <value>EQUALIZATION_ON</value>
+ </param>
+ <param>
+ <key>version</key>
+ <value>VERSION_111</value>
+ </param>
+ </block>
+ <block>
+ <key>osmosdr_sink</key>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>ant0</key>
<value></value>
</param>
<param>
+ <key>bb_gain0</key>
+ <value>-8</value>
+ </param>
+ <param>
<key>bw0</key>
<value>8750000</value>
</param>
<param>
- <key>freq1</key>
- <value>100e6</value>
+ <key>corr0</key>
+ <value>0</value>
</param>
<param>
- <key>corr1</key>
+ <key>freq0</key>
+ <value>center_freq</value>
+ </param>
+ <param>
+ <key>if_gain0</key>
<value>0</value>
</param>
<param>
- <key>gain1</key>
+ <key>gain0</key>
<value>10</value>
</param>
<param>
- <key>if_gain1</key>
- <value>20</value>
+ <key>ant10</key>
+ <value></value>
</param>
<param>
- <key>bb_gain1</key>
+ <key>bb_gain10</key>
<value>20</value>
</param>
<param>
- <key>ant1</key>
- <value></value>
+ <key>bw10</key>
+ <value>0</value>
</param>
<param>
- <key>bw1</key>
+ <key>corr10</key>
<value>0</value>
</param>
<param>
- <key>freq2</key>
+ <key>freq10</key>
<value>100e6</value>
</param>
<param>
- <key>corr2</key>
- <value>0</value>
+ <key>if_gain10</key>
+ <value>20</value>
</param>
<param>
- <key>gain2</key>
+ <key>gain10</key>
<value>10</value>
</param>
<param>
- <key>if_gain2</key>
- <value>20</value>
+ <key>ant11</key>
+ <value></value>
</param>
<param>
- <key>bb_gain2</key>
+ <key>bb_gain11</key>
<value>20</value>
</param>
<param>
- <key>ant2</key>
- <value></value>
+ <key>bw11</key>
+ <value>0</value>
</param>
<param>
- <key>bw2</key>
+ <key>corr11</key>
<value>0</value>
</param>
<param>
- <key>freq3</key>
+ <key>freq11</key>
<value>100e6</value>
</param>
<param>
- <key>corr3</key>
- <value>0</value>
+ <key>if_gain11</key>
+ <value>20</value>
</param>
<param>
- <key>gain3</key>
+ <key>gain11</key>
<value>10</value>
</param>
<param>
- <key>if_gain3</key>
- <value>20</value>
+ <key>ant12</key>
+ <value></value>
</param>
<param>
- <key>bb_gain3</key>
+ <key>bb_gain12</key>
<value>20</value>
</param>
<param>
- <key>ant3</key>
- <value></value>
+ <key>bw12</key>
+ <value>0</value>
</param>
<param>
- <key>bw3</key>
+ <key>corr12</key>
<value>0</value>
</param>
<param>
- <key>freq4</key>
+ <key>freq12</key>
<value>100e6</value>
</param>
<param>
- <key>corr4</key>
- <value>0</value>
+ <key>if_gain12</key>
+ <value>20</value>
</param>
<param>
- <key>gain4</key>
+ <key>gain12</key>
<value>10</value>
</param>
<param>
- <key>if_gain4</key>
- <value>20</value>
+ <key>ant13</key>
+ <value></value>
</param>
<param>
- <key>bb_gain4</key>
+ <key>bb_gain13</key>
<value>20</value>
</param>
<param>
- <key>ant4</key>
- <value></value>
+ <key>bw13</key>
+ <value>0</value>
</param>
<param>
- <key>bw4</key>
+ <key>corr13</key>
<value>0</value>
</param>
<param>
- <key>freq5</key>
+ <key>freq13</key>
<value>100e6</value>
</param>
<param>
- <key>corr5</key>
- <value>0</value>
+ <key>if_gain13</key>
+ <value>20</value>
</param>
<param>
- <key>gain5</key>
+ <key>gain13</key>
<value>10</value>
</param>
<param>
- <key>if_gain5</key>
- <value>20</value>
+ <key>ant14</key>
+ <value></value>
</param>
<param>
- <key>bb_gain5</key>
+ <key>bb_gain14</key>
<value>20</value>
</param>
<param>
- <key>ant5</key>
- <value></value>
+ <key>bw14</key>
+ <value>0</value>
</param>
<param>
- <key>bw5</key>
+ <key>corr14</key>
<value>0</value>
</param>
<param>
- <key>freq6</key>
+ <key>freq14</key>
<value>100e6</value>
</param>
<param>
- <key>corr6</key>
- <value>0</value>
+ <key>if_gain14</key>
+ <value>20</value>
</param>
<param>
- <key>gain6</key>
+ <key>gain14</key>
<value>10</value>
</param>
<param>
- <key>if_gain6</key>
- <value>20</value>
+ <key>ant15</key>
+ <value></value>
</param>
<param>
- <key>bb_gain6</key>
+ <key>bb_gain15</key>
<value>20</value>
</param>
<param>
- <key>ant6</key>
- <value></value>
+ <key>bw15</key>
+ <value>0</value>
</param>
<param>
- <key>bw6</key>
+ <key>corr15</key>
<value>0</value>
</param>
<param>
- <key>freq7</key>
+ <key>freq15</key>
<value>100e6</value>
</param>
<param>
- <key>corr7</key>
- <value>0</value>
+ <key>if_gain15</key>
+ <value>20</value>
</param>
<param>
- <key>gain7</key>
+ <key>gain15</key>
<value>10</value>
</param>
<param>
- <key>if_gain7</key>
- <value>20</value>
+ <key>ant16</key>
+ <value></value>
</param>
<param>
- <key>bb_gain7</key>
+ <key>bb_gain16</key>
<value>20</value>
</param>
<param>
- <key>ant7</key>
- <value></value>
+ <key>bw16</key>
+ <value>0</value>
</param>
<param>
- <key>bw7</key>
+ <key>corr16</key>
<value>0</value>
</param>
<param>
- <key>freq8</key>
+ <key>freq16</key>
<value>100e6</value>
</param>
<param>
- <key>corr8</key>
- <value>0</value>
+ <key>if_gain16</key>
+ <value>20</value>
</param>
<param>
- <key>gain8</key>
+ <key>gain16</key>
<value>10</value>
</param>
<param>
- <key>if_gain8</key>
- <value>20</value>
+ <key>ant17</key>
+ <value></value>
</param>
<param>
- <key>bb_gain8</key>
+ <key>bb_gain17</key>
<value>20</value>
</param>
<param>
- <key>ant8</key>
- <value></value>
+ <key>bw17</key>
+ <value>0</value>
</param>
<param>
- <key>bw8</key>
+ <key>corr17</key>
<value>0</value>
</param>
<param>
- <key>freq9</key>
+ <key>freq17</key>
<value>100e6</value>
</param>
<param>
- <key>corr9</key>
- <value>0</value>
+ <key>if_gain17</key>
+ <value>20</value>
</param>
<param>
- <key>gain9</key>
+ <key>gain17</key>
<value>10</value>
</param>
<param>
- <key>if_gain9</key>
- <value>20</value>
+ <key>ant18</key>
+ <value></value>
</param>
<param>
- <key>bb_gain9</key>
+ <key>bb_gain18</key>
<value>20</value>
</param>
<param>
- <key>ant9</key>
- <value></value>
+ <key>bw18</key>
+ <value>0</value>
</param>
<param>
- <key>bw9</key>
+ <key>corr18</key>
<value>0</value>
</param>
<param>
- <key>freq10</key>
+ <key>freq18</key>
<value>100e6</value>
</param>
<param>
- <key>corr10</key>
- <value>0</value>
+ <key>if_gain18</key>
+ <value>20</value>
</param>
<param>
- <key>gain10</key>
+ <key>gain18</key>
<value>10</value>
</param>
<param>
- <key>if_gain10</key>
- <value>20</value>
+ <key>ant19</key>
+ <value></value>
</param>
<param>
- <key>bb_gain10</key>
+ <key>bb_gain19</key>
<value>20</value>
</param>
<param>
- <key>ant10</key>
- <value></value>
+ <key>bw19</key>
+ <value>0</value>
</param>
<param>
- <key>bw10</key>
+ <key>corr19</key>
<value>0</value>
</param>
<param>
- <key>freq11</key>
+ <key>freq19</key>
<value>100e6</value>
</param>
<param>
- <key>corr11</key>
- <value>0</value>
+ <key>if_gain19</key>
+ <value>20</value>
</param>
<param>
- <key>gain11</key>
+ <key>gain19</key>
<value>10</value>
</param>
<param>
- <key>if_gain11</key>
- <value>20</value>
+ <key>ant1</key>
+ <value></value>
</param>
<param>
- <key>bb_gain11</key>
+ <key>bb_gain1</key>
<value>20</value>
</param>
<param>
- <key>ant11</key>
- <value></value>
+ <key>bw1</key>
+ <value>0</value>
</param>
<param>
- <key>bw11</key>
+ <key>corr1</key>
<value>0</value>
</param>
<param>
- <key>freq12</key>
+ <key>freq1</key>
<value>100e6</value>
</param>
<param>
- <key>corr12</key>
- <value>0</value>
+ <key>if_gain1</key>
+ <value>20</value>
</param>
<param>
- <key>gain12</key>
+ <key>gain1</key>
<value>10</value>
</param>
<param>
- <key>if_gain12</key>
- <value>20</value>
+ <key>ant20</key>
+ <value></value>
</param>
<param>
- <key>bb_gain12</key>
+ <key>bb_gain20</key>
<value>20</value>
</param>
<param>
- <key>ant12</key>
- <value></value>
+ <key>bw20</key>
+ <value>0</value>
</param>
<param>
- <key>bw12</key>
+ <key>corr20</key>
<value>0</value>
</param>
<param>
- <key>freq13</key>
+ <key>freq20</key>
<value>100e6</value>
</param>
<param>
- <key>corr13</key>
- <value>0</value>
+ <key>if_gain20</key>
+ <value>20</value>
</param>
<param>
- <key>gain13</key>
+ <key>gain20</key>
<value>10</value>
</param>
<param>
- <key>if_gain13</key>
- <value>20</value>
+ <key>ant21</key>
+ <value></value>
</param>
<param>
- <key>bb_gain13</key>
+ <key>bb_gain21</key>
<value>20</value>
</param>
<param>
- <key>ant13</key>
- <value></value>
+ <key>bw21</key>
+ <value>0</value>
</param>
<param>
- <key>bw13</key>
+ <key>corr21</key>
<value>0</value>
</param>
<param>
- <key>freq14</key>
+ <key>freq21</key>
<value>100e6</value>
</param>
<param>
- <key>corr14</key>
- <value>0</value>
+ <key>if_gain21</key>
+ <value>20</value>
</param>
<param>
- <key>gain14</key>
+ <key>gain21</key>
<value>10</value>
</param>
<param>
- <key>if_gain14</key>
- <value>20</value>
+ <key>ant22</key>
+ <value></value>
</param>
<param>
- <key>bb_gain14</key>
+ <key>bb_gain22</key>
<value>20</value>
</param>
<param>
- <key>ant14</key>
- <value></value>
+ <key>bw22</key>
+ <value>0</value>
</param>
<param>
- <key>bw14</key>
+ <key>corr22</key>
<value>0</value>
</param>
<param>
- <key>freq15</key>
+ <key>freq22</key>
<value>100e6</value>
</param>
<param>
- <key>corr15</key>
- <value>0</value>
+ <key>if_gain22</key>
+ <value>20</value>
</param>
<param>
- <key>gain15</key>
+ <key>gain22</key>
<value>10</value>
</param>
<param>
- <key>if_gain15</key>
- <value>20</value>
+ <key>ant23</key>
+ <value></value>
</param>
<param>
- <key>bb_gain15</key>
+ <key>bb_gain23</key>
<value>20</value>
</param>
<param>
- <key>ant15</key>
- <value></value>
+ <key>bw23</key>
+ <value>0</value>
</param>
<param>
- <key>bw15</key>
+ <key>corr23</key>
<value>0</value>
</param>
<param>
- <key>freq16</key>
+ <key>freq23</key>
<value>100e6</value>
</param>
<param>
- <key>corr16</key>
- <value>0</value>
+ <key>if_gain23</key>
+ <value>20</value>
</param>
<param>
- <key>gain16</key>
+ <key>gain23</key>
<value>10</value>
</param>
<param>
- <key>if_gain16</key>
- <value>20</value>
+ <key>ant24</key>
+ <value></value>
</param>
<param>
- <key>bb_gain16</key>
+ <key>bb_gain24</key>
<value>20</value>
</param>
<param>
- <key>ant16</key>
- <value></value>
+ <key>bw24</key>
+ <value>0</value>
</param>
<param>
- <key>bw16</key>
+ <key>corr24</key>
<value>0</value>
</param>
<param>
- <key>freq17</key>
+ <key>freq24</key>
<value>100e6</value>
</param>
<param>
- <key>corr17</key>
- <value>0</value>
+ <key>if_gain24</key>
+ <value>20</value>
</param>
<param>
- <key>gain17</key>
+ <key>gain24</key>
<value>10</value>
</param>
<param>
- <key>if_gain17</key>
- <value>20</value>
+ <key>ant25</key>
+ <value></value>
</param>
<param>
- <key>bb_gain17</key>
+ <key>bb_gain25</key>
<value>20</value>
</param>
<param>
- <key>ant17</key>
- <value></value>
+ <key>bw25</key>
+ <value>0</value>
</param>
<param>
- <key>bw17</key>
+ <key>corr25</key>
<value>0</value>
</param>
<param>
- <key>freq18</key>
+ <key>freq25</key>
<value>100e6</value>
</param>
<param>
- <key>corr18</key>
- <value>0</value>
+ <key>if_gain25</key>
+ <value>20</value>
</param>
<param>
- <key>gain18</key>
+ <key>gain25</key>
<value>10</value>
</param>
<param>
- <key>if_gain18</key>
- <value>20</value>
+ <key>ant26</key>
+ <value></value>
</param>
<param>
- <key>bb_gain18</key>
+ <key>bb_gain26</key>
<value>20</value>
</param>
<param>
- <key>ant18</key>
- <value></value>
+ <key>bw26</key>
+ <value>0</value>
</param>
<param>
- <key>bw18</key>
+ <key>corr26</key>
<value>0</value>
</param>
<param>
- <key>freq19</key>
+ <key>freq26</key>
<value>100e6</value>
</param>
<param>
- <key>corr19</key>
- <value>0</value>
+ <key>if_gain26</key>
+ <value>20</value>
</param>
<param>
- <key>gain19</key>
+ <key>gain26</key>
<value>10</value>
</param>
<param>
- <key>if_gain19</key>
- <value>20</value>
+ <key>ant27</key>
+ <value></value>
</param>
<param>
- <key>bb_gain19</key>
+ <key>bb_gain27</key>
<value>20</value>
</param>
<param>
- <key>ant19</key>
- <value></value>
+ <key>bw27</key>
+ <value>0</value>
</param>
<param>
- <key>bw19</key>
+ <key>corr27</key>
<value>0</value>
</param>
<param>
- <key>freq20</key>
+ <key>freq27</key>
<value>100e6</value>
</param>
<param>
- <key>corr20</key>
- <value>0</value>
+ <key>if_gain27</key>
+ <value>20</value>
</param>
<param>
- <key>gain20</key>
+ <key>gain27</key>
<value>10</value>
</param>
<param>
- <key>if_gain20</key>
- <value>20</value>
+ <key>ant28</key>
+ <value></value>
</param>
<param>
- <key>bb_gain20</key>
+ <key>bb_gain28</key>
<value>20</value>
</param>
<param>
- <key>ant20</key>
- <value></value>
+ <key>bw28</key>
+ <value>0</value>
</param>
<param>
- <key>bw20</key>
+ <key>corr28</key>
<value>0</value>
</param>
<param>
- <key>freq21</key>
+ <key>freq28</key>
<value>100e6</value>
</param>
<param>
- <key>corr21</key>
- <value>0</value>
+ <key>if_gain28</key>
+ <value>20</value>
</param>
<param>
- <key>gain21</key>
+ <key>gain28</key>
<value>10</value>
</param>
<param>
- <key>if_gain21</key>
- <value>20</value>
+ <key>ant29</key>
+ <value></value>
</param>
<param>
- <key>bb_gain21</key>
+ <key>bb_gain29</key>
<value>20</value>
</param>
<param>
- <key>ant21</key>
- <value></value>
+ <key>bw29</key>
+ <value>0</value>
</param>
<param>
- <key>bw21</key>
+ <key>corr29</key>
<value>0</value>
</param>
<param>
- <key>freq22</key>
+ <key>freq29</key>
<value>100e6</value>
</param>
<param>
- <key>corr22</key>
- <value>0</value>
+ <key>if_gain29</key>
+ <value>20</value>
</param>
<param>
- <key>gain22</key>
+ <key>gain29</key>
<value>10</value>
</param>
<param>
- <key>if_gain22</key>
- <value>20</value>
+ <key>ant2</key>
+ <value></value>
</param>
<param>
- <key>bb_gain22</key>
+ <key>bb_gain2</key>
<value>20</value>
</param>
<param>
- <key>ant22</key>
- <value></value>
+ <key>bw2</key>
+ <value>0</value>
</param>
<param>
- <key>bw22</key>
+ <key>corr2</key>
<value>0</value>
</param>
<param>
- <key>freq23</key>
+ <key>freq2</key>
<value>100e6</value>
</param>
<param>
- <key>corr23</key>
- <value>0</value>
+ <key>if_gain2</key>
+ <value>20</value>
</param>
<param>
- <key>gain23</key>
+ <key>gain2</key>
<value>10</value>
</param>
<param>
- <key>if_gain23</key>
- <value>20</value>
+ <key>ant30</key>
+ <value></value>
</param>
<param>
- <key>bb_gain23</key>
+ <key>bb_gain30</key>
<value>20</value>
</param>
<param>
- <key>ant23</key>
- <value></value>
+ <key>bw30</key>
+ <value>0</value>
</param>
<param>
- <key>bw23</key>
+ <key>corr30</key>
<value>0</value>
</param>
<param>
- <key>freq24</key>
+ <key>freq30</key>
<value>100e6</value>
</param>
<param>
- <key>corr24</key>
- <value>0</value>
+ <key>if_gain30</key>
+ <value>20</value>
</param>
<param>
- <key>gain24</key>
+ <key>gain30</key>
<value>10</value>
</param>
<param>
- <key>if_gain24</key>
- <value>20</value>
+ <key>ant31</key>
+ <value></value>
</param>
<param>
- <key>bb_gain24</key>
+ <key>bb_gain31</key>
<value>20</value>
</param>
<param>
- <key>ant24</key>
- <value></value>
+ <key>bw31</key>
+ <value>0</value>
</param>
<param>
- <key>bw24</key>
+ <key>corr31</key>
<value>0</value>
</param>
<param>
- <key>freq25</key>
+ <key>freq31</key>
<value>100e6</value>
</param>
<param>
- <key>corr25</key>
- <value>0</value>
+ <key>if_gain31</key>
+ <value>20</value>
</param>
<param>
- <key>gain25</key>
+ <key>gain31</key>
<value>10</value>
</param>
<param>
- <key>if_gain25</key>
- <value>20</value>
+ <key>ant3</key>
+ <value></value>
</param>
<param>
- <key>bb_gain25</key>
+ <key>bb_gain3</key>
<value>20</value>
</param>
<param>
- <key>ant25</key>
- <value></value>
+ <key>bw3</key>
+ <value>0</value>
</param>
<param>
- <key>bw25</key>
+ <key>corr3</key>
<value>0</value>
</param>
<param>
- <key>freq26</key>
+ <key>freq3</key>
<value>100e6</value>
</param>
<param>
- <key>corr26</key>
- <value>0</value>
+ <key>if_gain3</key>
+ <value>20</value>
</param>
<param>
- <key>gain26</key>
+ <key>gain3</key>
<value>10</value>
</param>
<param>
- <key>if_gain26</key>
- <value>20</value>
+ <key>ant4</key>
+ <value></value>
</param>
<param>
- <key>bb_gain26</key>
+ <key>bb_gain4</key>
<value>20</value>
</param>
<param>
- <key>ant26</key>
- <value></value>
+ <key>bw4</key>
+ <value>0</value>
</param>
<param>
- <key>bw26</key>
+ <key>corr4</key>
<value>0</value>
</param>
<param>
- <key>freq27</key>
+ <key>freq4</key>
<value>100e6</value>
</param>
<param>
- <key>corr27</key>
- <value>0</value>
+ <key>if_gain4</key>
+ <value>20</value>
</param>
<param>
- <key>gain27</key>
+ <key>gain4</key>
<value>10</value>
</param>
<param>
- <key>if_gain27</key>
- <value>20</value>
+ <key>ant5</key>
+ <value></value>
</param>
<param>
- <key>bb_gain27</key>
+ <key>bb_gain5</key>
<value>20</value>
</param>
<param>
- <key>ant27</key>
- <value></value>
+ <key>bw5</key>
+ <value>0</value>
</param>
<param>
- <key>bw27</key>
+ <key>corr5</key>
<value>0</value>
</param>
<param>
- <key>freq28</key>
+ <key>freq5</key>
<value>100e6</value>
</param>
<param>
- <key>corr28</key>
- <value>0</value>
+ <key>if_gain5</key>
+ <value>20</value>
</param>
<param>
- <key>gain28</key>
+ <key>gain5</key>
<value>10</value>
</param>
<param>
- <key>if_gain28</key>
- <value>20</value>
+ <key>ant6</key>
+ <value></value>
</param>
<param>
- <key>bb_gain28</key>
+ <key>bb_gain6</key>
<value>20</value>
</param>
<param>
- <key>ant28</key>
- <value></value>
+ <key>bw6</key>
+ <value>0</value>
</param>
<param>
- <key>bw28</key>
+ <key>corr6</key>
<value>0</value>
</param>
<param>
- <key>freq29</key>
+ <key>freq6</key>
<value>100e6</value>
</param>
<param>
- <key>corr29</key>
- <value>0</value>
+ <key>if_gain6</key>
+ <value>20</value>
</param>
<param>
- <key>gain29</key>
+ <key>gain6</key>
<value>10</value>
</param>
<param>
- <key>if_gain29</key>
- <value>20</value>
+ <key>ant7</key>
+ <value></value>
</param>
<param>
- <key>bb_gain29</key>
+ <key>bb_gain7</key>
<value>20</value>
</param>
<param>
- <key>ant29</key>
- <value></value>
+ <key>bw7</key>
+ <value>0</value>
</param>
<param>
- <key>bw29</key>
+ <key>corr7</key>
<value>0</value>
</param>
<param>
- <key>freq30</key>
+ <key>freq7</key>
<value>100e6</value>
</param>
<param>
- <key>corr30</key>
- <value>0</value>
+ <key>if_gain7</key>
+ <value>20</value>
</param>
<param>
- <key>gain30</key>
+ <key>gain7</key>
<value>10</value>
</param>
<param>
- <key>if_gain30</key>
- <value>20</value>
+ <key>ant8</key>
+ <value></value>
</param>
<param>
- <key>bb_gain30</key>
+ <key>bb_gain8</key>
<value>20</value>
</param>
<param>
- <key>ant30</key>
- <value></value>
+ <key>bw8</key>
+ <value>0</value>
</param>
<param>
- <key>bw30</key>
+ <key>corr8</key>
<value>0</value>
</param>
<param>
- <key>freq31</key>
+ <key>freq8</key>
<value>100e6</value>
</param>
<param>
- <key>corr31</key>
- <value>0</value>
+ <key>if_gain8</key>
+ <value>20</value>
</param>
<param>
- <key>gain31</key>
+ <key>gain8</key>
<value>10</value>
</param>
<param>
- <key>if_gain31</key>
- <value>20</value>
+ <key>ant9</key>
+ <value></value>
</param>
<param>
- <key>bb_gain31</key>
+ <key>bb_gain9</key>
<value>20</value>
</param>
<param>
- <key>ant31</key>
- <value></value>
+ <key>bw9</key>
+ <value>0</value>
</param>
<param>
- <key>bw31</key>
+ <key>corr9</key>
<value>0</value>
</param>
<param>
- <key>alias</key>
+ <key>freq9</key>
+ <value>100e6</value>
+ </param>
+ <param>
+ <key>if_gain9</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain9</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>comment</key>
<value></value>
</param>
<param>
@@ -2336,141 +2497,131 @@
<value></value>
</param>
<param>
+ <key>args</key>
+ <value>bladerf=0,buffers=128,buflen=32768</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(792, 443)</value>
+ <value>(816, 484)</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>
+ <value>osmosdr_sink_0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>type</key>
+ <value>fc32</value>
</param>
<param>
- <key>file</key>
- <value>/run/shm/adv32kmiso.ts</value>
+ <key>clock_source0</key>
+ <value></value>
</param>
<param>
- <key>type</key>
- <value>byte</value>
+ <key>time_source0</key>
+ <value></value>
</param>
<param>
- <key>repeat</key>
- <value>True</value>
+ <key>clock_source1</key>
+ <value></value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>time_source1</key>
+ <value></value>
</param>
<param>
- <key>alias</key>
+ <key>clock_source2</key>
<value></value>
</param>
<param>
- <key>affinity</key>
+ <key>time_source2</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>clock_source3</key>
+ <value></value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>time_source3</key>
+ <value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(112, 75)</value>
+ <key>clock_source4</key>
+ <value></value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>time_source4</key>
+ <value></value>
</param>
- </block>
- <block>
- <key>blocks_null_sink</key>
<param>
- <key>id</key>
- <value>blocks_null_sink_0</value>
+ <key>clock_source5</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>time_source5</key>
+ <value></value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
+ <key>clock_source6</key>
+ <value></value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>time_source6</key>
+ <value></value>
</param>
<param>
- <key>num_inputs</key>
- <value>1</value>
+ <key>clock_source7</key>
+ <value></value>
</param>
<param>
- <key>bus_conns</key>
- <value>[[0,],]</value>
+ <key>time_source7</key>
+ <value></value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>nchan</key>
+ <value>1</value>
</param>
<param>
- <key>affinity</key>
- <value></value>
+ <key>num_mboards</key>
+ <value>1</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(616, 352)</value>
+ <key>sample_rate</key>
+ <value>samp_rate</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>sync</key>
+ <value></value>
</param>
</block>
<connection>
- <source_block_id>dtv_dvb_bch_bb_0</source_block_id>
- <sink_block_id>dtv_dvb_ldpc_bb_0</sink_block_id>
- <source_key>0</source_key>
- <sink_key>0</sink_key>
- </connection>
- <connection>
- <source_block_id>dtv_dvb_bbscrambler_bb_0</source_block_id>
- <sink_block_id>dtv_dvb_bch_bb_0</sink_block_id>
- <source_key>0</source_key>
- <sink_key>0</sink_key>
- </connection>
- <connection>
- <source_block_id>dtv_dvb_ldpc_bb_0</source_block_id>
- <sink_block_id>dtv_dvbt2_interleaver_bb_0</sink_block_id>
+ <source_block_id>blocks_file_source_0</source_block_id>
+ <sink_block_id>dtv_dvb_bbheader_bb_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>dtv_dvbt2_interleaver_bb_0</source_block_id>
- <sink_block_id>dtv_dvbt2_modulator_bc_0</sink_block_id>
+ <source_block_id>blocks_multiply_const_xx_0</source_block_id>
+ <sink_block_id>osmosdr_sink_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>dtv_dvbt2_modulator_bc_0</source_block_id>
- <sink_block_id>dtv_dvbt2_cellinterleaver_cc_0</sink_block_id>
+ <source_block_id>digital_ofdm_cyclic_prefixer_0</source_block_id>
+ <sink_block_id>dtv_dvbt2_p1insertion_cc_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>dtv_dvbt2_cellinterleaver_cc_0</source_block_id>
- <sink_block_id>dtv_dvbt2_framemapper_cc_0</sink_block_id>
+ <source_block_id>digital_ofdm_cyclic_prefixer_0_0</source_block_id>
+ <sink_block_id>dtv_dvbt2_p1insertion_cc_0_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
@@ -2481,50 +2632,44 @@
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>blocks_file_source_0</source_block_id>
- <sink_block_id>dtv_dvb_bbheader_bb_0</sink_block_id>
- <source_key>0</source_key>
- <sink_key>0</sink_key>
- </connection>
- <connection>
- <source_block_id>dtv_dvbt2_framemapper_cc_0</source_block_id>
- <sink_block_id>dtv_dvbt2_freqinterleaver_cc_0</sink_block_id>
+ <source_block_id>dtv_dvb_bbscrambler_bb_0</source_block_id>
+ <sink_block_id>dtv_dvb_bch_bb_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>digital_ofdm_cyclic_prefixer_0</source_block_id>
- <sink_block_id>dtv_dvbt2_p1insertion_cc_0</sink_block_id>
+ <source_block_id>dtv_dvb_bch_bb_0</source_block_id>
+ <sink_block_id>dtv_dvb_ldpc_bb_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>dtv_dvbt2_pilotgenerator_cc_1</source_block_id>
- <sink_block_id>digital_ofdm_cyclic_prefixer_0_0</sink_block_id>
+ <source_block_id>dtv_dvb_ldpc_bb_0</source_block_id>
+ <sink_block_id>dtv_dvbt2_interleaver_bb_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>digital_ofdm_cyclic_prefixer_0_0</source_block_id>
- <sink_block_id>dtv_dvbt2_p1insertion_cc_0_0</sink_block_id>
+ <source_block_id>dtv_dvbt2_cellinterleaver_cc_0</source_block_id>
+ <sink_block_id>dtv_dvbt2_framemapper_cc_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>dtv_dvbt2_p1insertion_cc_0_0</source_block_id>
- <sink_block_id>blocks_file_sink_0</sink_block_id>
+ <source_block_id>dtv_dvbt2_framemapper_cc_0</source_block_id>
+ <sink_block_id>dtv_dvbt2_freqinterleaver_cc_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>osmosdr_sink_0</sink_block_id>
+ <source_block_id>dtv_dvbt2_freqinterleaver_cc_0</source_block_id>
+ <sink_block_id>dtv_dvbt2_miso_cc_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>dtv_dvbt2_freqinterleaver_cc_0</source_block_id>
- <sink_block_id>dtv_dvbt2_miso_cc_0</sink_block_id>
+ <source_block_id>dtv_dvbt2_interleaver_bb_0</source_block_id>
+ <sink_block_id>dtv_dvbt2_modulator_bc_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
@@ -2541,8 +2686,8 @@
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>dtv_dvbt2_p1insertion_cc_0_0</source_block_id>
- <sink_block_id>blocks_null_sink_0</sink_block_id>
+ <source_block_id>dtv_dvbt2_modulator_bc_0</source_block_id>
+ <sink_block_id>dtv_dvbt2_cellinterleaver_cc_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
@@ -2554,7 +2699,19 @@
</connection>
<connection>
<source_block_id>dtv_dvbt2_p1insertion_cc_0</source_block_id>
- <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
+ <sink_block_id>blocks_multiply_const_xx_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>dtv_dvbt2_p1insertion_cc_0_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_dvbt2_p1insertion_cc_0_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>
@@ -2564,4 +2721,10 @@
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
+ <connection>
+ <source_block_id>dtv_dvbt2_pilotgenerator_cc_1</source_block_id>
+ <sink_block_id>digital_ofdm_cyclic_prefixer_0_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
</flow_graph>
diff --git a/gr-dtv/grc/dtv_dvb_bbscrambler_bb.xml b/gr-dtv/grc/dtv_dvb_bbscrambler_bb.xml
index 1dbf39611e..2fba572d39 100644
--- a/gr-dtv/grc/dtv_dvb_bbscrambler_bb.xml
+++ b/gr-dtv/grc/dtv_dvb_bbscrambler_bb.xml
@@ -16,17 +16,17 @@ $framesize2.val, #slurp
#end if
#if str($standard) == 'STANDARD_DVBT2'
#if str($framesize1) == 'FECFRAME_NORMAL'
-$rate1.val, #slurp
+$rate1.val#slurp
#else
-$rate2.val, #slurp
+$rate2.val#slurp
#end if
#else
#if str($framesize2) == 'FECFRAME_NORMAL'
-$rate3.val, #slurp
+$rate3.val#slurp
#else if str($framesize2) == 'FECFRAME_MEDIUM'
-$rate4.val, #slurp
+$rate4.val#slurp
#else
-$rate5.val, #slurp
+$rate5.val#slurp
#end if
#end if
)</make>
diff --git a/gr-dtv/grc/dtv_dvb_bch_bb.xml b/gr-dtv/grc/dtv_dvb_bch_bb.xml
index 12ac8c6cbb..01b446b7ca 100644
--- a/gr-dtv/grc/dtv_dvb_bch_bb.xml
+++ b/gr-dtv/grc/dtv_dvb_bch_bb.xml
@@ -16,17 +16,17 @@ $framesize2.val, #slurp
#end if
#if str($standard) == 'STANDARD_DVBT2'
#if str($framesize1) == 'FECFRAME_NORMAL'
-$rate1.val, #slurp
+$rate1.val#slurp
#else
-$rate2.val, #slurp
+$rate2.val#slurp
#end if
#else
#if str($framesize2) == 'FECFRAME_NORMAL'
-$rate3.val, #slurp
+$rate3.val#slurp
#else if str($framesize2) == 'FECFRAME_MEDIUM'
-$rate4.val, #slurp
+$rate4.val#slurp
#else
-$rate5.val, #slurp
+$rate5.val#slurp
#end if
#end if
)</make>
diff --git a/gr-dtv/grc/dtv_dvbt2_freqinterleaver_cc.xml b/gr-dtv/grc/dtv_dvbt2_freqinterleaver_cc.xml
index 3bbcd840cf..bd7ba2bbfa 100644
--- a/gr-dtv/grc/dtv_dvbt2_freqinterleaver_cc.xml
+++ b/gr-dtv/grc/dtv_dvbt2_freqinterleaver_cc.xml
@@ -16,9 +16,9 @@ $paprmode2.val, #slurp
#end if
$version.val, #slurp
#if str($version) == 'VERSION_111'
-$preamble1.val, #slurp
+$preamble1.val#slurp
#else
-$preamble2.val, #slurp
+$preamble2.val#slurp
#end if
)</make>
<param>
diff --git a/gr-dtv/lib/CMakeLists.txt b/gr-dtv/lib/CMakeLists.txt
index 7ffcc435de..f051e0bdf2 100644
--- a/gr-dtv/lib/CMakeLists.txt
+++ b/gr-dtv/lib/CMakeLists.txt
@@ -77,7 +77,6 @@ list(APPEND dtv_sources
dvbs2/dvbs2_modulator_bc_impl.cc
dvbs2/dvbs2_physical_cc_impl.cc
dvbt/dvbt_energy_dispersal_impl.cc
- dvbt/dvbt_reed_solomon.cc
dvbt/dvbt_reed_solomon_enc_impl.cc
dvbt/dvbt_convolutional_interleaver_impl.cc
dvbt/dvbt_configure.cc
diff --git a/gr-dtv/lib/atsc/atsc_interleaver_impl.cc b/gr-dtv/lib/atsc/atsc_interleaver_impl.cc
index e628fbf30d..cfc9e2996c 100644
--- a/gr-dtv/lib/atsc/atsc_interleaver_impl.cc
+++ b/gr-dtv/lib/atsc/atsc_interleaver_impl.cc
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2015 Free Software Foundation, Inc.
+ * Copyright 2015,2016 Free Software Foundation, Inc.
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -24,7 +24,6 @@
#include "atsc_interleaver_impl.h"
#include "gnuradio/dtv/atsc_consts.h"
-#include <stdio.h>
namespace gr {
namespace dtv {
@@ -45,14 +44,15 @@ namespace gr {
J = 4;
registers = (unsigned char *) malloc(sizeof(unsigned char) * I * ((I - 1) * J));
if (registers == NULL) {
- fprintf(stderr, "Out of memory.\n");
- exit(1);
+ GR_LOG_FATAL(d_logger, "ATSC Interleaver, cannot allocate memory for registers.");
+ throw std::bad_alloc();
}
pointers = (int *) malloc(sizeof(int) * I);
if (pointers == NULL) {
- fprintf(stderr, "Out of memory.\n");
- exit(1);
+ free(registers);
+ GR_LOG_FATAL(d_logger, "ATSC Interleaver, cannot allocate memory for pointers");
+ throw std::bad_alloc();
}
memset(registers, 0, sizeof(unsigned char) * I * ((I - 1) * J));
diff --git a/gr-dtv/lib/dvb/dvb_bbheader_bb_impl.cc b/gr-dtv/lib/dvb/dvb_bbheader_bb_impl.cc
index 6961c2265c..d14b46a0e1 100644
--- a/gr-dtv/lib/dvb/dvb_bbheader_bb_impl.cc
+++ b/gr-dtv/lib/dvb/dvb_bbheader_bb_impl.cc
@@ -24,7 +24,6 @@
#include <gnuradio/io_signature.h>
#include "dvb_bbheader_bb_impl.h"
-#include <stdio.h>
namespace gr {
namespace dtv {
@@ -504,7 +503,7 @@ namespace gr {
for (int j = 0; j < (int)((kbch - 80 - padding) / 8); j++) {
if (count == 0) {
if (*in != 0x47) {
- printf("Transport Stream sync error!\n");
+ GR_LOG_WARN(d_logger, "Transport Stream sync error!");
}
j--;
in++;
@@ -527,7 +526,7 @@ namespace gr {
for (int j = 0; j < (int)((kbch - 80 - padding) / 8); j++) {
if (count == 0) {
if (*in != 0x47) {
- printf("Transport Stream sync error!\n");
+ GR_LOG_WARN(d_logger, "Transport Stream sync error!");
}
in++;
b = crc;
@@ -560,7 +559,7 @@ namespace gr {
if (nibble == TRUE) {
if (count == 0) {
if (*in != 0x47) {
- printf("Transport Stream sync error!\n");
+ GR_LOG_WARN(d_logger, "Transport Stream sync error!");
}
in++;
b = crc;
diff --git a/gr-dtv/lib/dvbs2/dvbs2_physical_cc_impl.cc b/gr-dtv/lib/dvbs2/dvbs2_physical_cc_impl.cc
index 4f38581e5b..688ad7a40c 100644
--- a/gr-dtv/lib/dvbs2/dvbs2_physical_cc_impl.cc
+++ b/gr-dtv/lib/dvbs2/dvbs2_physical_cc_impl.cc
@@ -24,7 +24,6 @@
#include <gnuradio/io_signature.h>
#include "dvbs2_physical_cc_impl.h"
-#include <stdio.h>
namespace gr {
namespace dtv {
@@ -54,7 +53,7 @@ namespace gr {
type = 0;
if (rate == C2_9_VLSNR) {
frame_size = (FRAME_SIZE_NORMAL - NORMAL_PUNCTURING) + (EXTRA_PILOT_SYMBOLS_SET1 * 2);
- type = 1; /* force pilots on for VL-SNR */
+ pilots = PILOTS_ON; /* force pilots on for VL-SNR */
}
}
@@ -63,16 +62,16 @@ namespace gr {
type = 2;
if (rate == C1_5_VLSNR_SF2 || rate == C11_45_VLSNR_SF2) {
frame_size = ((FRAME_SIZE_SHORT - SHORT_PUNCTURING_SET1) * 2) + EXTRA_PILOT_SYMBOLS_SET1;
- type = 1; /* force pilots on for VL-SNR */
+ pilots = PILOTS_ON; /* force pilots on for VL-SNR */
}
if (rate == C1_5_VLSNR || rate == C4_15_VLSNR || rate == C1_3_VLSNR) {
frame_size = (FRAME_SIZE_SHORT - SHORT_PUNCTURING_SET2) + EXTRA_PILOT_SYMBOLS_SET2;
- type = 1; /* force pilots on for VL-SNR */
+ pilots = PILOTS_ON; /* force pilots on for VL-SNR */
}
}
else {
frame_size = FRAME_SIZE_MEDIUM - MEDIUM_PUNCTURING + EXTRA_PILOT_SYMBOLS_SET1;
- type = 1; /* force pilots on for VL-SNR */
+ pilots = PILOTS_ON; /* force pilots on for VL-SNR */
}
pilot_mode = pilots;
@@ -80,8 +79,8 @@ namespace gr {
type |= 1;
}
if (goldcode < 0 || goldcode > 262141) {
- fprintf(stderr, "Gold Code must be between 0 and 262141 inclusive.\n");
- fprintf(stderr, "Gold Code set to 0.\n");
+ GR_LOG_WARN(d_logger, "Gold Code must be between 0 and 262141 inclusive.");
+ GR_LOG_WARN(d_logger, "Gold Code set to 0.");
goldcode = 0;
}
gold_code = goldcode;
@@ -808,8 +807,7 @@ namespace gr {
int consumed = 0;
int produced = 0;
int slot_count, n;
- int group;
- int symbols = 0;
+ int group, symbols;
gr_complex tempin, tempout;
if (vlsnr_set == VLSNR_OFF) {
@@ -873,6 +871,7 @@ namespace gr {
n = 0;
slot_count = 10;
group = 0;
+ symbols = 0;
for (int plh = 0; plh < 90; plh++) {
out[produced++] = m_pl[plh];
out[produced++] = m_zero;
@@ -1079,6 +1078,7 @@ namespace gr {
n = 0;
slot_count = 10;
group = 0;
+ symbols = 0;
for (int plh = 0; plh < 90; plh++) {
out[produced++] = m_pl[plh];
out[produced++] = m_zero;
diff --git a/gr-dtv/lib/dvbt/dvbt_bit_inner_deinterleaver_impl.cc b/gr-dtv/lib/dvbt/dvbt_bit_inner_deinterleaver_impl.cc
index c10a77c98a..4c67f62a60 100644
--- a/gr-dtv/lib/dvbt/dvbt_bit_inner_deinterleaver_impl.cc
+++ b/gr-dtv/lib/dvbt/dvbt_bit_inner_deinterleaver_impl.cc
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2015 Free Software Foundation, Inc.
+ * Copyright 2015,2016 Free Software Foundation, Inc.
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -24,7 +24,6 @@
#include <gnuradio/io_signature.h>
#include "dvbt_bit_inner_deinterleaver_impl.h"
-#include <stdio.h>
#define MAX_MODULATION_ORDER 6
#define INTERLEAVER_BLOCK_SIZE 126
@@ -34,37 +33,6 @@ namespace gr {
const int dvbt_bit_inner_deinterleaver_impl::d_bsize = INTERLEAVER_BLOCK_SIZE;
- int
- dvbt_bit_inner_deinterleaver_impl::H(int e, int w)
- {
- int rez = 0;
-
- switch (e) {
- case 0:
- rez = w;
- break;
- case 1:
- rez = (w + 63) % d_bsize;
- break;
- case 2:
- rez = (w + 105) % d_bsize;
- break;
- case 3:
- rez = (w + 42) % d_bsize;
- break;
- case 4:
- rez = (w + 21) % d_bsize;
- break;
- case 5:
- rez = (w + 84) % d_bsize;
- break;
- default:
- break;
- }
-
- return rez;
- }
-
dvbt_bit_inner_deinterleaver::sptr
dvbt_bit_inner_deinterleaver::make(int nsize, \
dvb_constellation_t constellation, dvbt_hierarchy_t hierarchy, dvbt_transmission_mode_t transmission)
@@ -88,10 +56,10 @@ namespace gr {
d_v = config.d_m;
d_hierarchy = config.d_hierarchy;
- d_perm = (unsigned char *)new unsigned char[d_v * d_bsize];
+ d_perm = (unsigned char *)new (std::nothrow) unsigned char[d_v * d_bsize];
if (d_perm == NULL) {
- std::cout << "Cannot allocate memory for d_perm" << std::endl;
- exit(1);
+ GR_LOG_FATAL(d_logger, "Bit Inner Deinterleaver, cannot allocate memory for d_perm.");
+ throw std::bad_alloc();
}
//Init permutation table (used for b[e][do])
@@ -105,8 +73,8 @@ namespace gr {
}
if (d_nsize % d_bsize) {
- std::cout << "Error: Input size must be multiple of block size: " \
- << "nsize: " << d_nsize << "bsize: " << d_bsize << std::endl;
+ GR_LOG_ERROR(d_logger, boost::format("Input size must be multiple of block size: nsize: %1% bsize: %2%") \
+ % d_nsize % d_bsize);
}
}
@@ -145,7 +113,7 @@ namespace gr {
int c = in[(bcount * d_bsize) + w];
for (int e = 0; e < d_v; e++) {
- d_b[e][H(e, w)] = (c >> (d_v - e - 1)) & 1;
+ d_b[e][d_lookup_H[w][e]] = (c >> (d_v - e - 1)) & 1;
}
}
@@ -189,6 +157,136 @@ namespace gr {
return noutput_items;
}
+ const int dvbt_bit_inner_deinterleaver_impl::d_lookup_H[INTERLEAVER_BLOCK_SIZE][MAX_MODULATION_ORDER] =
+ {
+ {0, 63, 105, 42, 21, 84},
+ {1, 64, 106, 43, 22, 85},
+ {2, 65, 107, 44, 23, 86},
+ {3, 66, 108, 45, 24, 87},
+ {4, 67, 109, 46, 25, 88},
+ {5, 68, 110, 47, 26, 89},
+ {6, 69, 111, 48, 27, 90},
+ {7, 70, 112, 49, 28, 91},
+ {8, 71, 113, 50, 29, 92},
+ {9, 72, 114, 51, 30, 93},
+ {10, 73, 115, 52, 31, 94},
+ {11, 74, 116, 53, 32, 95},
+ {12, 75, 117, 54, 33, 96},
+ {13, 76, 118, 55, 34, 97},
+ {14, 77, 119, 56, 35, 98},
+ {15, 78, 120, 57, 36, 99},
+ {16, 79, 121, 58, 37, 100},
+ {17, 80, 122, 59, 38, 101},
+ {18, 81, 123, 60, 39, 102},
+ {19, 82, 124, 61, 40, 103},
+ {20, 83, 125, 62, 41, 104},
+ {21, 84, 0, 63, 42, 105},
+ {22, 85, 1, 64, 43, 106},
+ {23, 86, 2, 65, 44, 107},
+ {24, 87, 3, 66, 45, 108},
+ {25, 88, 4, 67, 46, 109},
+ {26, 89, 5, 68, 47, 110},
+ {27, 90, 6, 69, 48, 111},
+ {28, 91, 7, 70, 49, 112},
+ {29, 92, 8, 71, 50, 113},
+ {30, 93, 9, 72, 51, 114},
+ {31, 94, 10, 73, 52, 115},
+ {32, 95, 11, 74, 53, 116},
+ {33, 96, 12, 75, 54, 117},
+ {34, 97, 13, 76, 55, 118},
+ {35, 98, 14, 77, 56, 119},
+ {36, 99, 15, 78, 57, 120},
+ {37, 100, 16, 79, 58, 121},
+ {38, 101, 17, 80, 59, 122},
+ {39, 102, 18, 81, 60, 123},
+ {40, 103, 19, 82, 61, 124},
+ {41, 104, 20, 83, 62, 125},
+ {42, 105, 21, 84, 63, 0},
+ {43, 106, 22, 85, 64, 1},
+ {44, 107, 23, 86, 65, 2},
+ {45, 108, 24, 87, 66, 3},
+ {46, 109, 25, 88, 67, 4},
+ {47, 110, 26, 89, 68, 5},
+ {48, 111, 27, 90, 69, 6},
+ {49, 112, 28, 91, 70, 7},
+ {50, 113, 29, 92, 71, 8},
+ {51, 114, 30, 93, 72, 9},
+ {52, 115, 31, 94, 73, 10},
+ {53, 116, 32, 95, 74, 11},
+ {54, 117, 33, 96, 75, 12},
+ {55, 118, 34, 97, 76, 13},
+ {56, 119, 35, 98, 77, 14},
+ {57, 120, 36, 99, 78, 15},
+ {58, 121, 37, 100, 79, 16},
+ {59, 122, 38, 101, 80, 17},
+ {60, 123, 39, 102, 81, 18},
+ {61, 124, 40, 103, 82, 19},
+ {62, 125, 41, 104, 83, 20},
+ {63, 0, 42, 105, 84, 21},
+ {64, 1, 43, 106, 85, 22},
+ {65, 2, 44, 107, 86, 23},
+ {66, 3, 45, 108, 87, 24},
+ {67, 4, 46, 109, 88, 25},
+ {68, 5, 47, 110, 89, 26},
+ {69, 6, 48, 111, 90, 27},
+ {70, 7, 49, 112, 91, 28},
+ {71, 8, 50, 113, 92, 29},
+ {72, 9, 51, 114, 93, 30},
+ {73, 10, 52, 115, 94, 31},
+ {74, 11, 53, 116, 95, 32},
+ {75, 12, 54, 117, 96, 33},
+ {76, 13, 55, 118, 97, 34},
+ {77, 14, 56, 119, 98, 35},
+ {78, 15, 57, 120, 99, 36},
+ {79, 16, 58, 121, 100, 37},
+ {80, 17, 59, 122, 101, 38},
+ {81, 18, 60, 123, 102, 39},
+ {82, 19, 61, 124, 103, 40},
+ {83, 20, 62, 125, 104, 41},
+ {84, 21, 63, 0, 105, 42},
+ {85, 22, 64, 1, 106, 43},
+ {86, 23, 65, 2, 107, 44},
+ {87, 24, 66, 3, 108, 45},
+ {88, 25, 67, 4, 109, 46},
+ {89, 26, 68, 5, 110, 47},
+ {90, 27, 69, 6, 111, 48},
+ {91, 28, 70, 7, 112, 49},
+ {92, 29, 71, 8, 113, 50},
+ {93, 30, 72, 9, 114, 51},
+ {94, 31, 73, 10, 115, 52},
+ {95, 32, 74, 11, 116, 53},
+ {96, 33, 75, 12, 117, 54},
+ {97, 34, 76, 13, 118, 55},
+ {98, 35, 77, 14, 119, 56},
+ {99, 36, 78, 15, 120, 57},
+ {100, 37, 79, 16, 121, 58},
+ {101, 38, 80, 17, 122, 59},
+ {102, 39, 81, 18, 123, 60},
+ {103, 40, 82, 19, 124, 61},
+ {104, 41, 83, 20, 125, 62},
+ {105, 42, 84, 21, 0, 63},
+ {106, 43, 85, 22, 1, 64},
+ {107, 44, 86, 23, 2, 65},
+ {108, 45, 87, 24, 3, 66},
+ {109, 46, 88, 25, 4, 67},
+ {110, 47, 89, 26, 5, 68},
+ {111, 48, 90, 27, 6, 69},
+ {112, 49, 91, 28, 7, 70},
+ {113, 50, 92, 29, 8, 71},
+ {114, 51, 93, 30, 9, 72},
+ {115, 52, 94, 31, 10, 73},
+ {116, 53, 95, 32, 11, 74},
+ {117, 54, 96, 33, 12, 75},
+ {118, 55, 97, 34, 13, 76},
+ {119, 56, 98, 35, 14, 77},
+ {120, 57, 99, 36, 15, 78},
+ {121, 58, 100, 37, 16, 79},
+ {122, 59, 101, 38, 17, 80},
+ {123, 60, 102, 39, 18, 81},
+ {124, 61, 103, 40, 19, 82},
+ {125, 62, 104, 41, 20, 83}
+ };
+
} /* namespace dtv */
} /* namespace gr */
diff --git a/gr-dtv/lib/dvbt/dvbt_bit_inner_deinterleaver_impl.h b/gr-dtv/lib/dvbt/dvbt_bit_inner_deinterleaver_impl.h
index 9f3811301d..9d33f6124b 100644
--- a/gr-dtv/lib/dvbt/dvbt_bit_inner_deinterleaver_impl.h
+++ b/gr-dtv/lib/dvbt/dvbt_bit_inner_deinterleaver_impl.h
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2015 Free Software Foundation, Inc.
+ * Copyright 2015,2016 Free Software Foundation, Inc.
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -32,6 +32,8 @@ namespace gr {
private:
const dvbt_configure config;
+ static const int d_lookup_H[126][6];
+
int d_nsize;
dvbt_hierarchy_t d_hierarchy;
@@ -43,9 +45,6 @@ namespace gr {
// Table to keep interleaved indices
unsigned char * d_perm;
- // Permutation function
- int H(int e, int w);
-
public:
dvbt_bit_inner_deinterleaver_impl(int nsize, dvb_constellation_t constellation, dvbt_hierarchy_t hierarchy, dvbt_transmission_mode_t transmission);
~dvbt_bit_inner_deinterleaver_impl();
diff --git a/gr-dtv/lib/dvbt/dvbt_bit_inner_interleaver_impl.cc b/gr-dtv/lib/dvbt/dvbt_bit_inner_interleaver_impl.cc
index 43146f02c5..07ba588f3e 100644
--- a/gr-dtv/lib/dvbt/dvbt_bit_inner_interleaver_impl.cc
+++ b/gr-dtv/lib/dvbt/dvbt_bit_inner_interleaver_impl.cc
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2015 Free Software Foundation, Inc.
+ * Copyright 2015,2016 Free Software Foundation, Inc.
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -24,7 +24,6 @@
#include <gnuradio/io_signature.h>
#include "dvbt_bit_inner_interleaver_impl.h"
-#include <stdio.h>
#define MAX_MODULATION_ORDER 6
#define INTERLEAVER_BLOCK_SIZE 126
@@ -34,36 +33,6 @@ namespace gr {
const int dvbt_bit_inner_interleaver_impl::d_bsize = INTERLEAVER_BLOCK_SIZE;
- int
- dvbt_bit_inner_interleaver_impl::H(int e, int w)
- {
- int rez = 0;
-
- switch (e) {
- case 0:
- rez = w;
- break;
- case 1:
- rez = (w + 63) % d_bsize;
- break;
- case 2:
- rez = (w + 105) % d_bsize;
- break;
- case 3:
- rez = (w + 42) % d_bsize;
- break;
- case 4:
- rez = (w + 21) % d_bsize;
- break;
- case 5:
- rez = (w + 84) % d_bsize;
- break;
- default:
- break;
- }
-
- return rez;
- }
dvbt_bit_inner_interleaver::sptr
dvbt_bit_inner_interleaver::make(int nsize, \
@@ -88,10 +57,10 @@ namespace gr {
d_v = config.d_m;
d_hierarchy = config.d_hierarchy;
- d_perm = (unsigned char *)new unsigned char[d_v * d_bsize];
+ d_perm = (unsigned char *)new (std::nothrow) unsigned char[d_v * d_bsize];
if (d_perm == NULL) {
- std::cout << "Cannot allocate memory for d_perm" << std::endl;
- exit(1);
+ GR_LOG_FATAL(d_logger, "Bit Inner Interleaver, cannot allocate memory for d_perm.");
+ throw std::bad_alloc();
}
//Init permutation table (used for b[e][do])
@@ -105,8 +74,8 @@ namespace gr {
}
if (d_nsize % d_bsize) {
- std::cout << "Error: Input size must be multiple of block size: " \
- << "nsize: " << d_nsize << "bsize: " << d_bsize << std::endl;
+ GR_LOG_ERROR(d_logger, boost::format("Input size must be multiple of block size: nsize: %1% bsize: %2%") \
+ % d_nsize % d_bsize);
}
}
@@ -175,7 +144,7 @@ namespace gr {
int val = 0;
for (int e = 0; e < d_v; e++) {
- val = (val << 1) | d_b[e][H(e, w)];
+ val = (val << 1) | d_b[e][d_lookup_H[w][e]];
}
out[(bcount * d_bsize) + w] = val;
@@ -190,6 +159,136 @@ namespace gr {
return noutput_items;
}
+ const int dvbt_bit_inner_interleaver_impl::d_lookup_H[INTERLEAVER_BLOCK_SIZE][MAX_MODULATION_ORDER] =
+ {
+ {0, 63, 105, 42, 21, 84},
+ {1, 64, 106, 43, 22, 85},
+ {2, 65, 107, 44, 23, 86},
+ {3, 66, 108, 45, 24, 87},
+ {4, 67, 109, 46, 25, 88},
+ {5, 68, 110, 47, 26, 89},
+ {6, 69, 111, 48, 27, 90},
+ {7, 70, 112, 49, 28, 91},
+ {8, 71, 113, 50, 29, 92},
+ {9, 72, 114, 51, 30, 93},
+ {10, 73, 115, 52, 31, 94},
+ {11, 74, 116, 53, 32, 95},
+ {12, 75, 117, 54, 33, 96},
+ {13, 76, 118, 55, 34, 97},
+ {14, 77, 119, 56, 35, 98},
+ {15, 78, 120, 57, 36, 99},
+ {16, 79, 121, 58, 37, 100},
+ {17, 80, 122, 59, 38, 101},
+ {18, 81, 123, 60, 39, 102},
+ {19, 82, 124, 61, 40, 103},
+ {20, 83, 125, 62, 41, 104},
+ {21, 84, 0, 63, 42, 105},
+ {22, 85, 1, 64, 43, 106},
+ {23, 86, 2, 65, 44, 107},
+ {24, 87, 3, 66, 45, 108},
+ {25, 88, 4, 67, 46, 109},
+ {26, 89, 5, 68, 47, 110},
+ {27, 90, 6, 69, 48, 111},
+ {28, 91, 7, 70, 49, 112},
+ {29, 92, 8, 71, 50, 113},
+ {30, 93, 9, 72, 51, 114},
+ {31, 94, 10, 73, 52, 115},
+ {32, 95, 11, 74, 53, 116},
+ {33, 96, 12, 75, 54, 117},
+ {34, 97, 13, 76, 55, 118},
+ {35, 98, 14, 77, 56, 119},
+ {36, 99, 15, 78, 57, 120},
+ {37, 100, 16, 79, 58, 121},
+ {38, 101, 17, 80, 59, 122},
+ {39, 102, 18, 81, 60, 123},
+ {40, 103, 19, 82, 61, 124},
+ {41, 104, 20, 83, 62, 125},
+ {42, 105, 21, 84, 63, 0},
+ {43, 106, 22, 85, 64, 1},
+ {44, 107, 23, 86, 65, 2},
+ {45, 108, 24, 87, 66, 3},
+ {46, 109, 25, 88, 67, 4},
+ {47, 110, 26, 89, 68, 5},
+ {48, 111, 27, 90, 69, 6},
+ {49, 112, 28, 91, 70, 7},
+ {50, 113, 29, 92, 71, 8},
+ {51, 114, 30, 93, 72, 9},
+ {52, 115, 31, 94, 73, 10},
+ {53, 116, 32, 95, 74, 11},
+ {54, 117, 33, 96, 75, 12},
+ {55, 118, 34, 97, 76, 13},
+ {56, 119, 35, 98, 77, 14},
+ {57, 120, 36, 99, 78, 15},
+ {58, 121, 37, 100, 79, 16},
+ {59, 122, 38, 101, 80, 17},
+ {60, 123, 39, 102, 81, 18},
+ {61, 124, 40, 103, 82, 19},
+ {62, 125, 41, 104, 83, 20},
+ {63, 0, 42, 105, 84, 21},
+ {64, 1, 43, 106, 85, 22},
+ {65, 2, 44, 107, 86, 23},
+ {66, 3, 45, 108, 87, 24},
+ {67, 4, 46, 109, 88, 25},
+ {68, 5, 47, 110, 89, 26},
+ {69, 6, 48, 111, 90, 27},
+ {70, 7, 49, 112, 91, 28},
+ {71, 8, 50, 113, 92, 29},
+ {72, 9, 51, 114, 93, 30},
+ {73, 10, 52, 115, 94, 31},
+ {74, 11, 53, 116, 95, 32},
+ {75, 12, 54, 117, 96, 33},
+ {76, 13, 55, 118, 97, 34},
+ {77, 14, 56, 119, 98, 35},
+ {78, 15, 57, 120, 99, 36},
+ {79, 16, 58, 121, 100, 37},
+ {80, 17, 59, 122, 101, 38},
+ {81, 18, 60, 123, 102, 39},
+ {82, 19, 61, 124, 103, 40},
+ {83, 20, 62, 125, 104, 41},
+ {84, 21, 63, 0, 105, 42},
+ {85, 22, 64, 1, 106, 43},
+ {86, 23, 65, 2, 107, 44},
+ {87, 24, 66, 3, 108, 45},
+ {88, 25, 67, 4, 109, 46},
+ {89, 26, 68, 5, 110, 47},
+ {90, 27, 69, 6, 111, 48},
+ {91, 28, 70, 7, 112, 49},
+ {92, 29, 71, 8, 113, 50},
+ {93, 30, 72, 9, 114, 51},
+ {94, 31, 73, 10, 115, 52},
+ {95, 32, 74, 11, 116, 53},
+ {96, 33, 75, 12, 117, 54},
+ {97, 34, 76, 13, 118, 55},
+ {98, 35, 77, 14, 119, 56},
+ {99, 36, 78, 15, 120, 57},
+ {100, 37, 79, 16, 121, 58},
+ {101, 38, 80, 17, 122, 59},
+ {102, 39, 81, 18, 123, 60},
+ {103, 40, 82, 19, 124, 61},
+ {104, 41, 83, 20, 125, 62},
+ {105, 42, 84, 21, 0, 63},
+ {106, 43, 85, 22, 1, 64},
+ {107, 44, 86, 23, 2, 65},
+ {108, 45, 87, 24, 3, 66},
+ {109, 46, 88, 25, 4, 67},
+ {110, 47, 89, 26, 5, 68},
+ {111, 48, 90, 27, 6, 69},
+ {112, 49, 91, 28, 7, 70},
+ {113, 50, 92, 29, 8, 71},
+ {114, 51, 93, 30, 9, 72},
+ {115, 52, 94, 31, 10, 73},
+ {116, 53, 95, 32, 11, 74},
+ {117, 54, 96, 33, 12, 75},
+ {118, 55, 97, 34, 13, 76},
+ {119, 56, 98, 35, 14, 77},
+ {120, 57, 99, 36, 15, 78},
+ {121, 58, 100, 37, 16, 79},
+ {122, 59, 101, 38, 17, 80},
+ {123, 60, 102, 39, 18, 81},
+ {124, 61, 103, 40, 19, 82},
+ {125, 62, 104, 41, 20, 83}
+ };
+
} /* namespace dtv */
} /* namespace gr */
diff --git a/gr-dtv/lib/dvbt/dvbt_bit_inner_interleaver_impl.h b/gr-dtv/lib/dvbt/dvbt_bit_inner_interleaver_impl.h
index c5fcbe2d82..5fc5e109f8 100644
--- a/gr-dtv/lib/dvbt/dvbt_bit_inner_interleaver_impl.h
+++ b/gr-dtv/lib/dvbt/dvbt_bit_inner_interleaver_impl.h
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2015 Free Software Foundation, Inc.
+ * Copyright 2015,2016 Free Software Foundation, Inc.
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -32,6 +32,8 @@ namespace gr {
private:
const dvbt_configure config;
+ static const int d_lookup_H[126][6];
+
int d_nsize;
dvbt_hierarchy_t d_hierarchy;
@@ -43,9 +45,6 @@ namespace gr {
// Table to keep interleaved indices
unsigned char * d_perm;
- // Permutation function
- int H(int e, int w);
-
public:
dvbt_bit_inner_interleaver_impl(int nsize, dvb_constellation_t constellation, dvbt_hierarchy_t hierarchy, dvbt_transmission_mode_t transmission);
~dvbt_bit_inner_interleaver_impl();
diff --git a/gr-dtv/lib/dvbt/dvbt_configure.cc b/gr-dtv/lib/dvbt/dvbt_configure.cc
index acf9862e74..33f5cc838b 100644
--- a/gr-dtv/lib/dvbt/dvbt_configure.cc
+++ b/gr-dtv/lib/dvbt/dvbt_configure.cc
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2015 Free Software Foundation, Inc.
+ * Copyright 2015,2016 Free Software Foundation, Inc.
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -25,7 +25,6 @@
#include <gnuradio/io_signature.h>
#include "dvbt_configure.h"
#include <iostream>
-#include <stdio.h>
namespace gr {
namespace dtv {
diff --git a/gr-dtv/lib/dvbt/dvbt_demap_impl.cc b/gr-dtv/lib/dvbt/dvbt_demap_impl.cc
index 4bdec1dc96..65d659226c 100644
--- a/gr-dtv/lib/dvbt/dvbt_demap_impl.cc
+++ b/gr-dtv/lib/dvbt/dvbt_demap_impl.cc
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2015 Free Software Foundation, Inc.
+ * Copyright 2015,2016 Free Software Foundation, Inc.
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -25,7 +25,6 @@
#include <gnuradio/io_signature.h>
#include "dvbt_demap_impl.h"
#include <volk/volk.h>
-#include <stdio.h>
namespace gr {
namespace dtv {
@@ -62,15 +61,15 @@ namespace gr {
d_constellation_points = (gr_complex*) volk_malloc(sizeof(gr_complex) * d_constellation_size, volk_get_alignment());
if (d_constellation_points == NULL) {
- std::cout << "cannot allocate memory for d_constellation_points" << std::endl;
- exit(1);
+ GR_LOG_FATAL(d_logger, "DVB-T Demap, cannot allocate memory for d_constellation_points.");
+ throw std::bad_alloc();
}
d_sq_dist = (float*) volk_malloc(sizeof(float) * d_constellation_size, volk_get_alignment());
if (d_sq_dist == NULL) {
- std::cout << "cannot allocate memory for d_sq_dist" << std::endl;
+ GR_LOG_FATAL(d_logger, "DVB-T Demap, cannot allocate memory for d_sq_dist.");
volk_free(d_constellation_points);
- exit(1);
+ throw std::bad_alloc();
}
make_constellation_points(d_constellation_size, d_step, d_alpha);
diff --git a/gr-dtv/lib/dvbt/dvbt_energy_dispersal_impl.cc b/gr-dtv/lib/dvbt/dvbt_energy_dispersal_impl.cc
index 03dd0ffec5..ff8042f2c8 100644
--- a/gr-dtv/lib/dvbt/dvbt_energy_dispersal_impl.cc
+++ b/gr-dtv/lib/dvbt/dvbt_energy_dispersal_impl.cc
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2015 Free Software Foundation, Inc.
+ * Copyright 2015,2016 Free Software Foundation, Inc.
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -24,7 +24,6 @@
#include <gnuradio/io_signature.h>
#include "dvbt_energy_dispersal_impl.h"
-#include <stdio.h>
namespace gr {
namespace dtv {
@@ -121,7 +120,7 @@ namespace gr {
for (int j = 0; j < d_npacks; j++) {
if (in[index + count] != d_SYNC) {
- printf("error: Malformed MPEG-TS!\n");
+ GR_LOG_WARN(d_logger, "Malformed MPEG-TS!");
}
out[count++] = sync;
diff --git a/gr-dtv/lib/dvbt/dvbt_inner_coder_impl.cc b/gr-dtv/lib/dvbt/dvbt_inner_coder_impl.cc
index 54d25e49ea..0787464aa2 100644
--- a/gr-dtv/lib/dvbt/dvbt_inner_coder_impl.cc
+++ b/gr-dtv/lib/dvbt/dvbt_inner_coder_impl.cc
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2015 Free Software Foundation, Inc.
+ * Copyright 2015,2016 Free Software Foundation, Inc.
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -24,27 +24,21 @@
#include <gnuradio/io_signature.h>
#include "dvbt_inner_coder_impl.h"
-#include <stdio.h>
#include <assert.h>
namespace gr {
namespace dtv {
- void
+ inline void
dvbt_inner_coder_impl::generate_codeword(unsigned char in, int &x, int &y)
{
//insert input bit
d_reg |= ((in & 0x1) << 7);
- d_reg = d_reg >> 1;
+ d_reg = d_reg >> 1;
- // TODO - do this with polynoms and bitcnt
- //generate output G1=171(OCT)
- x = ((d_reg >> 6) ^ (d_reg >> 5) ^ (d_reg >> 4) ^ \
- (d_reg >> 3) ^ d_reg) & 0x1;
- //generate output G2=133(OCT)
- y = ((d_reg >> 6) ^ (d_reg >> 4) ^ (d_reg >> 3) ^ \
- (d_reg >> 1) ^ d_reg) & 0x1;
+ x = d_lookup_171[d_reg];
+ y = d_lookup_133[d_reg];
}
//TODO - do this based on puncturing matrix
@@ -55,7 +49,7 @@ namespace gr {
* 00000c0c1c2
*/
- void
+ inline void
dvbt_inner_coder_impl::generate_punctured_code(dvb_code_rate_t coderate, unsigned char * in, unsigned char * out)
{
int x, y;
@@ -175,17 +169,17 @@ namespace gr {
d_out_bs = 4 * d_n;
// allocate bit buffers
- d_in_buff = new unsigned char[8 * d_in_bs];
+ d_in_buff = new (std::nothrow) unsigned char[8 * d_in_bs];
if (d_in_buff == NULL) {
- std::cout << "Cannot allocate memory for d_in_buff" << std::endl;
- exit(1);
+ GR_LOG_FATAL(d_logger, "Inner Coder, cannot allocate memory for d_in_buff.");
+ throw std::bad_alloc();
}
- d_out_buff = new unsigned char[8 * d_in_bs * d_n / d_k];
+ d_out_buff = new (std::nothrow) unsigned char[8 * d_in_bs * d_n / d_k];
if (d_out_buff == NULL) {
- std::cout << "Cannot allocate memory for d_out_buff" << std::endl;
+ GR_LOG_FATAL(d_logger, "Inner Coder, cannot allocate memory for d_out_buff.");
delete [] d_in_buff;
- exit(1);
+ throw std::bad_alloc();
}
}
@@ -251,6 +245,26 @@ namespace gr {
return noutput_items;
}
+ const int dvbt_inner_coder_impl::d_lookup_171[128] =
+ {0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0,
+ 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1,
+ 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1,
+ 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0,
+ 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1,
+ 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0,
+ 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0,
+ 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1};
+
+ const int dvbt_inner_coder_impl::d_lookup_133[128] =
+ {0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1,
+ 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0,
+ 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1,
+ 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0,
+ 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0,
+ 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1,
+ 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0,
+ 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1};
+
} /* namespace dtv */
} /* namespace gr */
diff --git a/gr-dtv/lib/dvbt/dvbt_inner_coder_impl.h b/gr-dtv/lib/dvbt/dvbt_inner_coder_impl.h
index 7a46a2222c..d472b1f60c 100644
--- a/gr-dtv/lib/dvbt/dvbt_inner_coder_impl.h
+++ b/gr-dtv/lib/dvbt/dvbt_inner_coder_impl.h
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2015 Free Software Foundation, Inc.
+ * Copyright 2015,2016 Free Software Foundation, Inc.
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -32,6 +32,9 @@ namespace gr {
private:
const dvbt_configure config;
+ static const int d_lookup_171[128];
+ static const int d_lookup_133[128];
+
int d_ninput;
int d_noutput;
@@ -57,8 +60,8 @@ namespace gr {
// bit output buffer
unsigned char * d_out_buff;
- void generate_codeword(unsigned char in, int &x, int &y);
- void generate_punctured_code(dvb_code_rate_t coderate, unsigned char * in, unsigned char * out);
+ inline void generate_codeword(unsigned char in, int &x, int &y);
+ inline void generate_punctured_code(dvb_code_rate_t coderate, unsigned char * in, unsigned char * out);
public:
dvbt_inner_coder_impl(int ninput, int noutput, dvb_constellation_t constellation, dvbt_hierarchy_t hierarchy, dvb_code_rate_t coderate);
diff --git a/gr-dtv/lib/dvbt/dvbt_map_impl.cc b/gr-dtv/lib/dvbt/dvbt_map_impl.cc
index 05f6e7f69b..b2c21da525 100644
--- a/gr-dtv/lib/dvbt/dvbt_map_impl.cc
+++ b/gr-dtv/lib/dvbt/dvbt_map_impl.cc
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2015 Free Software Foundation, Inc.
+ * Copyright 2015,2016 Free Software Foundation, Inc.
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -25,7 +25,6 @@
#include <gnuradio/io_signature.h>
#include <complex>
#include "dvbt_map_impl.h"
-#include <stdio.h>
#include <math.h>
namespace gr {
@@ -59,10 +58,10 @@ namespace gr {
d_alpha = config.d_alpha;
d_gain = gain * config.d_norm;
- d_constellation_points = new gr_complex[d_constellation_size];
+ d_constellation_points = new (std::nothrow) gr_complex[d_constellation_size];
if (d_constellation_points == NULL) {
- std::cout << "Cannot allocate memory for d_constellation_points" << std::endl;
- exit(1);
+ GR_LOG_FATAL(d_logger, "DVB-T Map, cannot allocate memory for d_constellation_points.");
+ throw std::bad_alloc();
}
make_constellation_points(d_constellation_size, d_step, d_alpha);
diff --git a/gr-dtv/lib/dvbt/dvbt_ofdm_sym_acquisition_impl.cc b/gr-dtv/lib/dvbt/dvbt_ofdm_sym_acquisition_impl.cc
index ee8dce0f15..135d622eef 100644
--- a/gr-dtv/lib/dvbt/dvbt_ofdm_sym_acquisition_impl.cc
+++ b/gr-dtv/lib/dvbt/dvbt_ofdm_sym_acquisition_impl.cc
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2015 Free Software Foundation, Inc.
+ * Copyright 2015,2016 Free Software Foundation, Inc.
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -27,7 +27,6 @@
#include <complex>
#include <gnuradio/math.h>
#include <gnuradio/expj.h>
-#include <stdio.h>
#include <volk/volk.h>
namespace gr {
@@ -247,53 +246,53 @@ namespace gr {
d_gamma = (gr_complex*) volk_malloc(sizeof(gr_complex) * d_fft_length, volk_get_alignment());
if (d_gamma == NULL) {
- std::cout << "cannot allocate memory for d_gamma" << std::endl;
- exit(1);
+ GR_LOG_FATAL(d_logger, "OFDM Symbol Acquisition, cannot allocate memory for d_gamma.");
+ throw std::bad_alloc();
}
d_lambda = (float*) volk_malloc(sizeof(float) * d_fft_length, volk_get_alignment());
if (d_lambda == NULL) {
- std::cout << "cannot allocate memory for d_lambda" << std::endl;
+ GR_LOG_FATAL(d_logger, "OFDM Symbol Acquisition, cannot allocate memory for d_lambda.");
volk_free(d_gamma);
- exit(1);
+ throw std::bad_alloc();
}
d_derot = (gr_complex*) volk_malloc(sizeof(gr_complex) * (d_fft_length + d_cp_length), volk_get_alignment());
if (d_derot == NULL) {
- std::cout << "cannot allocate memory for d_derot" << std::endl;
+ GR_LOG_FATAL(d_logger, "OFDM Symbol Acquisition, cannot allocate memory for d_derot.");
volk_free(d_lambda);
volk_free(d_gamma);
- exit(1);
+ throw std::bad_alloc();
}
d_conj = (gr_complex*) volk_malloc(sizeof(gr_complex) * (2 * d_fft_length + d_cp_length), volk_get_alignment());
if (d_conj == NULL) {
- std::cout << "cannot allocate memory for d_conj" << std::endl;
+ GR_LOG_FATAL(d_logger, "OFDM Symbol Acquisition, cannot allocate memory for d_conj.");
volk_free(d_derot);
volk_free(d_lambda);
volk_free(d_gamma);
- exit(1);
+ throw std::bad_alloc();
}
d_norm = (float*) volk_malloc(sizeof(float) * (2 * d_fft_length + d_cp_length), volk_get_alignment());
if (d_norm == NULL) {
- std::cout << "cannot allocate memory for d_norm" << std::endl;
+ GR_LOG_FATAL(d_logger, "OFDM Symbol Acquisition, cannot allocate memory for d_norm.");
volk_free(d_conj);
volk_free(d_derot);
volk_free(d_lambda);
volk_free(d_gamma);
- exit(1);
+ throw std::bad_alloc();
}
d_corr = (gr_complex*) volk_malloc(sizeof(gr_complex) * (2 * d_fft_length + d_cp_length), volk_get_alignment());
if (d_corr == NULL) {
- std::cout << "cannot allocate memory for d_corr" << std::endl;
+ GR_LOG_FATAL(d_logger, "OFDM Symbol Acquisition, cannot allocate memory for d_corr.");
volk_free(d_norm);
volk_free(d_conj);
volk_free(d_derot);
volk_free(d_lambda);
volk_free(d_gamma);
- exit(1);
+ throw std::bad_alloc();
}
peak_detect_init(0.3, 0.9);
diff --git a/gr-dtv/lib/dvbt/dvbt_reed_solomon.cc b/gr-dtv/lib/dvbt/dvbt_reed_solomon.cc
deleted file mode 100644
index 7d67a0a81a..0000000000
--- a/gr-dtv/lib/dvbt/dvbt_reed_solomon.cc
+++ /dev/null
@@ -1,475 +0,0 @@
-/* -*- c++ -*- */
-/*
- * Copyright 2015 Free Software Foundation, Inc.
- *
- * This 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.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this software; see the file COPYING. If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <gnuradio/io_signature.h>
-#include "dvbt_reed_solomon.h"
-#include <iostream>
-#include <stdio.h>
-#include <string.h>
-#include <fstream>
-
-using namespace std;
-
-#define min(a,b) ((a) < (b)) ? (a) : (b)
-
-namespace gr {
- namespace dtv {
-
- void
- dvbt_reed_solomon::gf_init(int p, int m, int gfpoly)
- {
- d_p = p; d_m = m;
-
- //maximum number of elements in the GF(p^m)
- int q = powl(p, m);
-
- d_gf_exp = new unsigned char[q];
- if (d_gf_exp == NULL) {
- std::cout << "Cannot allocate memory for d_gf_exp" << std::endl;
- return;
- }
-
- d_gf_log = new unsigned char[q];
- if (d_gf_log == NULL) {
- std::cout << "Cannot allocate memory for d_gf_log" << std::endl;
- delete [] d_gf_exp;
- return;
- }
-
- int reg_rs = 1;
-
- d_gf_exp[q - 1] = 0;
- d_gf_log[0] = q - 1;
-
- for (int i = 0; i < (q - 1); i++) {
- d_gf_exp[i] = reg_rs;
- d_gf_log[reg_rs] = i;
-
- //This is equvalent with raise to power
- reg_rs = reg_rs << 1;
-
- if (reg_rs & (1 << m)) {
- reg_rs = reg_rs ^ gfpoly;
- }
-
- reg_rs = reg_rs & ((1 << m) - 1);
- }
- }
-
- void
- dvbt_reed_solomon::gf_uninit()
- {
- delete [] d_gf_log;
- delete [] d_gf_exp;
- }
-
- int
- dvbt_reed_solomon::gf_exp(int a)
- {
- return d_gf_exp[a % d_n];
- }
-
- int
- dvbt_reed_solomon::gf_log(int a)
- {
- return d_gf_log[a % d_n];
- }
-
-
- int
- dvbt_reed_solomon::gf_add(int a, int b)
- {
- return (a ^ b);
- }
-
- int
- dvbt_reed_solomon::gf_mul(int a, int b)
- {
- if (a == 0 || b == 0) {
- return 0;
- }
- else {
- return gf_exp(d_gf_log[a] + d_gf_log[b]);
- }
- }
-
- int
- dvbt_reed_solomon::gf_div(int a, int b)
- {
- if (a == 0 || b == 0) {
- return (0);
- }
-
- return (gf_exp(d_n + d_gf_log[a] - d_gf_log[b]));
- }
-
- int
- dvbt_reed_solomon::gf_pow(int a, int power)
- {
- if (a == 0) {
- return (0);
- }
-
- return gf_exp(d_n + d_gf_log[a] + power);
- }
-
- int
- dvbt_reed_solomon::gf_lpow(int power)
- {
- return d_l[power % d_n];
- }
-
- void
- dvbt_reed_solomon::rs_init(int lambda, int n, int k, int t)
- {
- d_n = n; d_k = k; d_t = t;
- // 2t = n - k, dmin = 2t + 1 = n -k + 1
-
- d_l = new unsigned char[d_n + 1];
- if (d_l == NULL) {
- std::cout << "Cannot allocate memory for d_l" << std::endl;
- exit(1);
- }
-
- d_g = new unsigned char[2 * d_t + 1];
- if (d_g == NULL) {
- std::cout << "Cannot allocate memory for d_g" << std::endl;
- delete [] d_l;
- exit(1);
- }
-
- //Generate roots of lambda
- d_l[0] = 1;
-
- for (int i = 1; i <= d_n; i++) {
- d_l[i] = gf_mul(d_l[i - 1], lambda);
- }
-
- //Init Generator polynomial buffer
- for (int i = 0; i <= (2*t); i++) {
- d_g[i] = 0;
- }
-
- //Start with x+lambda^0
- d_g[0] = 1;
-
- //Create generator polynomial
- for (int i = 1; i <= (2 * t); i++) {
- for (int j = i; j > 0; j--) {
- if (d_g[j] != 0) {
- d_g[j] = gf_add(d_g[j - 1], gf_mul(d_g[j], d_l[i - 1]));
- }
- else {
- d_g[j] = d_g[j - 1];
- }
- }
-
- d_g[0] = gf_mul(d_g[0], d_l[i - 1]);
- }
-
- // Init syndrome array
- d_syn = new unsigned char[2 * d_t + 1];
- if (d_syn == NULL) {
- std::cout << "Cannot allocate memory for d_syn" << std::endl;
- delete [] d_g;
- delete [] d_l;
- exit(1);
- }
- }
-
- void
- dvbt_reed_solomon::rs_uninit()
- {
- if (d_syn) {
- delete [] d_syn;
- }
- if (d_g) {
- delete [] d_g;
- }
- if (d_l) {
- delete [] d_l;
- }
- }
-
- int
- dvbt_reed_solomon::rs_encode(unsigned char *data_in, unsigned char *parity)
- {
- memset(parity, 0, 2 * d_t);
-
- for (int i = 0; i < d_k; i++) {
- int feedback = gf_add(data_in[i], parity[0]);
-
- if (feedback != 0) {
- for (int j = 1; j < (2 * d_t); j++) {
- if (d_g[2 * d_t - j] != 0) {
- parity[j] = gf_add(parity[j], gf_mul(feedback, d_g[2 * d_t - j]));
- }
- }
- }
-
- //Shift the register
- memmove(&parity[0], &parity[1], (2 * d_t) - 1);
-
- if (feedback != 0) {
- parity[2 * d_t - 1] = gf_mul(feedback, d_g[0]);
- }
- else {
- parity[2 * d_t - 1] = 0;
- }
- }
-
- return (0);
- }
-
- int
- dvbt_reed_solomon::rs_decode(unsigned char *data, unsigned char *eras, const int no_eras)
- {
- __GR_VLA(unsigned char, sigma, 2 * d_t + 1);
- __GR_VLA(unsigned char, b, 2 * d_t + 1);
- __GR_VLA(unsigned char, T, 2 * d_t + 1);
- __GR_VLA(unsigned char, reg, 2 * d_t + 1);
- __GR_VLA(unsigned char, root, 2 * d_t + 1);
- __GR_VLA(unsigned char, loc, 2 * d_t + 1);
- __GR_VLA(unsigned char, omega, 2 * d_t);
-
- // Compute erasure locator polynomial
- memset(sigma, 0, 2 * d_t + 1);
- sigma[0] = 1;
-
- if (no_eras > 0) {
- // In this case we know the locations of errors
- // Init sigma to be the erasure locator polynomial
- sigma[1] = gf_exp(d_n-1-eras[0]);
-
- for (int i = 1; i < no_eras; i++) {
- int u = d_n-1-eras[i];
-
- for (int j = i+1; j > 0; j--) {
- sigma[j] = gf_add(sigma[j], gf_pow(sigma[j - 1], u));
- }
- }
- }
-
- // Calculate syndrome
-
- for (int j = 0; j < 2 * d_t; j++) {
- d_syn[j] = data[0];
- }
-
- for (int j = 1; j < d_n; j++) {
- for (int i = 0; i < 2 * d_t; i++) {
- d_syn[i] = gf_add(data[j], gf_pow(d_syn[i], i));
- }
- }
-
- int syn_error = 0;
-
- // Verify all syndromes
- for (int i = 0; i < 2 * d_t; i++) {
- syn_error |= d_syn[i];
- }
-
- if (!syn_error) {
- // The syndrome is a codeword
- // Return data unmodified
- return (0);
- }
-
- // Use Modified (errors+erasures) BMA. Algorithm of Berlekamp-Massey
- // S(i)=r(lambda^i)=e(lambda^i)
-
- int r = no_eras;
- int el = no_eras;
-
- memcpy(b, sigma, 2 * d_t + 1);
-
- while (++r <= 2 * d_t) {
- int d_discr = 0;
-
- for (int i = 0; i < r; i++) {
- d_discr = gf_add(d_discr, gf_mul(sigma[i], d_syn[r - i - 1]));
- }
-
- if (d_discr == 0) {
- // b(x) = x * b(x)
- memmove(&b[1], b, 2 * d_t);
- b[0] = 0;
- }
- else {
- T[0] = sigma[0];
-
- // T(x) = sigma(x) + d*x*b(x)
- for (int i = 0; i < 2 * d_t; i++) {
- T[i + 1] = gf_add(sigma[i + 1], gf_mul(d_discr, b[i]));
- }
-
- if (2 * el <= r + no_eras - 1) {
- el = r + no_eras - el;
-
- // b(i) = sigma(i) / discr
- for (int i = 0; i <= 2 * d_t; i++) {
- b[i] = gf_div(sigma[i], d_discr);
- }
- }
- else {
- // b(x) = x*b(x)
- memmove(&b[1], b, 2 * d_t);
- b[0] = 0;
- }
- memcpy(sigma, T, 2 * d_t + 1);
- }
- }
-
- // Compute degree(sigma)
- int deg_sigma = 0;
-
- for (int i = 0; i < 2 * d_t + 1; i++) {
- if (sigma[i] != 0) {
- deg_sigma = i;
- }
- }
-
- // Find the roots of sigma(x) by Chien search
- // Test sum(1)=1+sigma(1)*(lambda^1)+...+sigma(nu)*lambda(^nu)
- // Test sum(2)=1+sigma(1)*(lambda^2)+...+sigma(nu)*lambda(^nu*2)
- // ...
- // Test sum(l)=1+sigma(1)*(lambda^l)+...+sigma(nu)*lambda(^nu*l)
- // in order to see if lambda^(-1) is a root
- // where nu is degree(sigma)
-
- int no_roots = 0;
-
- memcpy(&reg[1], &sigma[1], 2 * d_t);
-
- for (int i = 1; i <= d_n; i++) {
- int q = 1;
-
- for (int j = deg_sigma; j > 0; j--) {
- reg[j] = gf_pow(reg[j], j);
- q = gf_add(q, reg[j]);
- }
-
- if (q != 0) {
- continue;
- }
-
- // We are here when we found roots of the sigma(x)
- // Keep roots in index form
- root[no_roots] = i;
- loc[no_roots] = i - 1;
-
- if (++no_roots == deg_sigma) {
- break;
- }
- }
-
- if (no_roots != deg_sigma) {
- // Uncorrectable error detected
- if (eras) {
- for (int i = 0; i < no_roots; i++)
- eras[i] = loc[i];
- }
-
- return (-1);
- }
-
- // Compute erros+erasures evaluator polynomial
- // omega(x)=sigma(x)S(x) mod (x ^ 2 * t)
- int deg_omega = 0;
-
- for (int i = 0; i < 2 * d_t; i++) {
- int tmp = 0;
- int j = (deg_sigma < i) ? deg_sigma : i;
-
- for(;j >= 0; j--) {
- tmp = gf_add(tmp, gf_mul(d_syn[i - j], sigma[j]));
- }
-
- if(tmp != 0) {
- deg_omega = i;
- }
-
- omega[i] = tmp;
- }
- omega[2 * d_t] = 0;
-
- // Compute error values using Forney formula (poly form)
- // e(j(l))) = (lambda(j(l)) ^ 2) * omega(lambda ^ (-j(l))) / sigma_pr(lambda ^ (-j(l)))
- // where sigma_pr is the formal derivative of sigma
-
- for (int j = no_roots - 1; j >= 0; j--) {
- int num1 = 0;
-
- // roots[] are in index form
- for (int i = deg_omega; i >= 0; i--) {
- num1 = gf_add(num1, gf_pow(omega[i], i * root[j]));
- }
-
- // root[] is in index form
- int num2 = gf_exp(root[j] * (-1) + d_n);
-
- int den = 0;
-
- // sigma[i+1] for i even is the formal derivative lambda_pr of sigma[i]
- int deg_max = min(deg_sigma, 2 * d_t - 1);
-
- for (int i = 1; i <= deg_max; i += 2) {
- if (sigma[i] != 0)
- den = gf_add(den, gf_exp(d_gf_log[sigma[i]] + (i - 1) * root[j]));
- }
-
- if (den == 0) {
- if (eras) {
- for (int i = 0; i < no_roots; i++) {
- eras[i] = loc[i];
- }
- }
- return (-1);
- }
-
- int err = gf_div(gf_mul(num1, num2), den);
-
- data[loc[j]] = gf_add(data[loc[j]], err);
- }
-
- return(no_roots);
- }
-
-
- dvbt_reed_solomon::dvbt_reed_solomon(int p, int m, int gfpoly, int n, int k, int t, int s, int blocks):
- d_p(p), d_m(m), d_gfpoly(gfpoly), d_n(n), d_k(k), d_t(t), d_s(s), d_blocks(blocks)
- {
- gf_init(d_p, d_m, d_gfpoly);
- rs_init(d_p, d_n, d_k, d_t);
- }
-
- dvbt_reed_solomon::~dvbt_reed_solomon()
- {
- rs_uninit();
- gf_uninit();
- }
-
- } /* namespace dtv */
-} /* namespace gr */
-
diff --git a/gr-dtv/lib/dvbt/dvbt_reed_solomon.h b/gr-dtv/lib/dvbt/dvbt_reed_solomon.h
deleted file mode 100644
index b9286d0ffd..0000000000
--- a/gr-dtv/lib/dvbt/dvbt_reed_solomon.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/* -*- c++ -*- */
-/*
- * Copyright 2015 Free Software Foundation, Inc.
- *
- * This 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.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this software; see the file COPYING. If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef INCLUDED_DTV_DVBT_REED_SOLOMON_H
-#define INCLUDED_DTV_DVBT_REED_SOLOMON_H
-
-namespace gr {
- namespace dtv {
-
- class dvbt_reed_solomon
- {
- private:
- int d_p;
- int d_m;
- int d_gfpoly;
- int d_n;
- int d_k;
- int d_t;
- int d_s;
- int d_blocks;
- unsigned char *d_gf_exp;
- unsigned char *d_gf_log;
- unsigned char *d_l;
- unsigned char *d_g;
-
- unsigned char *d_syn;
-
- int gf_add(int a, int b);
- int gf_mul(int a, int b);
- int gf_div(int a, int b);
- int gf_exp(int a);
- int gf_log(int a);
- int gf_pow(int a, int power);
- int gf_lpow(int power);
-
- void gf_init(int p, int m, int gfpoly);
- void gf_uninit();
- void rs_init(int lambda, int n, int k, int t);
- void rs_uninit();
-
- public:
- int rs_encode(unsigned char *data, unsigned char *parity);
- int rs_decode(unsigned char *data, unsigned char *eras, const int no_eras);
-
- dvbt_reed_solomon(int p, int m, int gfpoly, int n, int k, int t, int s, int blocks);
- ~dvbt_reed_solomon();
- };
-
- } // namespace dtv
-} // namespace gr
-
-#endif /* INCLUDED_DTV_DVBT_REED_SOLOMON_H */
-
diff --git a/gr-dtv/lib/dvbt/dvbt_reed_solomon_dec_impl.cc b/gr-dtv/lib/dvbt/dvbt_reed_solomon_dec_impl.cc
index 4a5530cfbe..fd6fedcf8d 100644
--- a/gr-dtv/lib/dvbt/dvbt_reed_solomon_dec_impl.cc
+++ b/gr-dtv/lib/dvbt/dvbt_reed_solomon_dec_impl.cc
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2015 Free Software Foundation, Inc.
+ * Copyright 2015,2016 Free Software Foundation, Inc.
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -24,11 +24,15 @@
#include <gnuradio/io_signature.h>
#include "dvbt_reed_solomon_dec_impl.h"
-#include <stdio.h>
namespace gr {
namespace dtv {
+ static const int rs_init_symsize = 8;
+ static const int rs_init_fcr = 0; // first consecutive root
+ static const int rs_init_prim = 1; // primitive is 1 (alpha)
+ static const int N = (1 << rs_init_symsize) - 1; // 255
+
dvbt_reed_solomon_dec::sptr
dvbt_reed_solomon_dec::make(int p, int m, int gfpoly, int n, int k, int t, int s, int blocks)
{
@@ -43,15 +47,16 @@ namespace gr {
: block("dvbt_reed_solomon_dec",
io_signature::make(1, 1, sizeof(unsigned char) * blocks * (n - s)),
io_signature::make(1, 1, sizeof(unsigned char) * blocks * (k - s))),
- d_p(p), d_m(m), d_gfpoly(gfpoly), d_n(n), d_k(k), d_t(t), d_s(s), d_blocks(blocks),
- d_rs(p, m, gfpoly, n, k, t, s, blocks)
+ d_n(n), d_k(k), d_s(s), d_blocks(blocks)
{
- d_in = new unsigned char[d_n];
- if (d_in == NULL) {
- std::cout << "Cannot allocate memory for d_in" << std::endl;
- exit(1);
+ d_rs = init_rs_char(rs_init_symsize, gfpoly, rs_init_fcr, rs_init_prim, (n - k));
+ if (d_rs == NULL) {
+ GR_LOG_FATAL(d_logger, "Reed-Solomon Decoder, cannot allocate memory for d_rs.");
+ throw std::bad_alloc();
}
- memset(&d_in[0], 0, d_n);
+ d_nerrors_corrected_count = 0;
+ d_bad_packet_count = 0;
+ d_total_packets = 0;
}
/*
@@ -59,7 +64,7 @@ namespace gr {
*/
dvbt_reed_solomon_dec_impl::~dvbt_reed_solomon_dec_impl()
{
- delete [] d_in;
+ free_rs_char(d_rs);
}
void
@@ -69,6 +74,25 @@ namespace gr {
}
int
+ dvbt_reed_solomon_dec_impl::decode (unsigned char &out, const unsigned char &in)
+ {
+ unsigned char tmp[N];
+ int ncorrections;
+
+ // add missing prefix zero padding to message
+ memset(tmp, 0, d_s);
+ memcpy(&tmp[d_s], &in, (d_n - d_s));
+
+ // correct message...
+ ncorrections = decode_rs_char(d_rs, tmp, 0, 0);
+
+ // copy corrected message to output, skipping prefix zero padding
+ memcpy (&out, &tmp[d_s], (d_k - d_s));
+
+ return ncorrections;
+ }
+
+ int
dvbt_reed_solomon_dec_impl::general_work (int noutput_items,
gr_vector_int &ninput_items,
gr_vector_const_void_star &input_items,
@@ -76,21 +100,23 @@ namespace gr {
{
const unsigned char *in = (const unsigned char *) input_items[0];
unsigned char *out = (unsigned char *) output_items[0];
-
- // We receive only nonzero data
- int in_bsize = d_n - d_s;
- int out_bsize = d_k - d_s;
+ int j = 0;
+ int k = 0;
for (int i = 0; i < (d_blocks * noutput_items); i++) {
- //TODO - zero copy?
- // Set first d_s symbols to zero
- memset(&d_in[0], 0, d_s);
- // Then copy actual data
- memcpy(&d_in[d_s], &in[i * in_bsize], in_bsize);
-
- d_rs.rs_decode(d_in, NULL, 0);
-
- memcpy(&out[i * out_bsize], &d_in[d_s], out_bsize);
+ int nerrors_corrected = decode(out[k], in[j]);
+
+ if (nerrors_corrected == -1) {
+ d_bad_packet_count++;
+ d_nerrors_corrected_count += ((d_n - d_s) - (d_k - d_s)) / 2; // lower bound estimate; most this RS can fix
+ }
+ else {
+ d_nerrors_corrected_count += nerrors_corrected;
+ }
+
+ d_total_packets++;
+ j += (d_n - d_s);
+ k += (d_k - d_s);
}
// Tell runtime system how many input items we consumed on
diff --git a/gr-dtv/lib/dvbt/dvbt_reed_solomon_dec_impl.h b/gr-dtv/lib/dvbt/dvbt_reed_solomon_dec_impl.h
index 951aa4b2a1..2d9b24809d 100644
--- a/gr-dtv/lib/dvbt/dvbt_reed_solomon_dec_impl.h
+++ b/gr-dtv/lib/dvbt/dvbt_reed_solomon_dec_impl.h
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2015 Free Software Foundation, Inc.
+ * Copyright 2015,2016 Free Software Foundation, Inc.
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -22,7 +22,10 @@
#define INCLUDED_DTV_DVBT_REED_SOLOMON_DEC_IMPL_H
#include <gnuradio/dtv/dvbt_reed_solomon_dec.h>
-#include "dvbt_reed_solomon.h"
+
+extern "C" {
+#include <gnuradio/fec/rs.h>
+}
namespace gr {
namespace dtv {
@@ -30,18 +33,18 @@ namespace gr {
class dvbt_reed_solomon_dec_impl : public dvbt_reed_solomon_dec
{
private:
- int d_p;
- int d_m;
- int d_gfpoly;
int d_n;
int d_k;
- int d_t;
int d_s;
int d_blocks;
- unsigned char * d_in;
+ int d_nerrors_corrected_count;
+ int d_bad_packet_count;
+ int d_total_packets;
+ int d_total_bits;
- dvbt_reed_solomon d_rs;
+ void *d_rs; /* Reed-Solomon characteristics structure */
+ int decode(unsigned char &out, const unsigned char &in);
public:
dvbt_reed_solomon_dec_impl(int p, int m, int gfpoly, int n, int k, int t, int s, int blocks);
diff --git a/gr-dtv/lib/dvbt/dvbt_reed_solomon_enc_impl.cc b/gr-dtv/lib/dvbt/dvbt_reed_solomon_enc_impl.cc
index 561ea08ded..663301d614 100644
--- a/gr-dtv/lib/dvbt/dvbt_reed_solomon_enc_impl.cc
+++ b/gr-dtv/lib/dvbt/dvbt_reed_solomon_enc_impl.cc
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2015 Free Software Foundation, Inc.
+ * Copyright 2015,2016 Free Software Foundation, Inc.
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -24,11 +24,16 @@
#include <gnuradio/io_signature.h>
#include "dvbt_reed_solomon_enc_impl.h"
-#include <stdio.h>
+
+#define MPEG_TS_PKT_LENGTH 188
namespace gr {
namespace dtv {
+ static const int rs_init_symsize = 8;
+ static const int rs_init_fcr = 0; // first consecutive root
+ static const int rs_init_prim = 1; // primitive is 1 (alpha)
+
dvbt_reed_solomon_enc::sptr
dvbt_reed_solomon_enc::make(int p, int m, int gfpoly, int n, int k, int t, int s, int blocks)
{
@@ -43,15 +48,19 @@ namespace gr {
: block("dvbt_reed_solomon",
io_signature::make(1, 1, sizeof(unsigned char) * blocks * (k - s)),
io_signature::make(1, 1, sizeof(unsigned char) * blocks * (n - s))),
- d_p(p), d_m(m), d_gfpoly(gfpoly), d_n(n), d_k(k), d_t(t), d_s(s), d_blocks(blocks),
- d_rs(p, m, gfpoly, n, k, t, s, blocks)
+ d_n(n), d_k(k), d_s(s), d_blocks(blocks)
{
- d_in = new unsigned char[d_n];
- if (d_in == NULL) {
- std::cout << "Cannot allocate memory for d_in" << std::endl;
- return;
+ d_rs = init_rs_char(rs_init_symsize, gfpoly, rs_init_fcr, rs_init_prim, (n - k));
+ if (d_rs == NULL) {
+ GR_LOG_FATAL(d_logger, "Reed-Solomon Encoder, cannot allocate memory for d_rs.");
+ throw std::bad_alloc();
+ }
+ d_data = (unsigned char *) malloc(sizeof(unsigned char) * (d_s + MPEG_TS_PKT_LENGTH));
+ if (d_data == NULL) {
+ GR_LOG_FATAL(d_logger, "Reed-Solomon Encoder, cannot allocate memory for d_data.");
+ free_rs_char(d_rs);
+ throw std::bad_alloc();
}
- memset(&d_in[0], 0, d_n);
}
/*
@@ -59,7 +68,8 @@ namespace gr {
*/
dvbt_reed_solomon_enc_impl::~dvbt_reed_solomon_enc_impl()
{
- delete [] d_in;
+ free(d_data);
+ free_rs_char(d_rs);
}
void
@@ -68,6 +78,18 @@ namespace gr {
ninput_items_required[0] = noutput_items;
}
+ void
+ dvbt_reed_solomon_enc_impl::encode(const unsigned char *in, unsigned char *out)
+ {
+ // Shortened Reed-Solomon: prepend zero bytes to message (discarded after encoding)
+ std::memset(d_data, 0, d_s);
+ std::memcpy(&d_data[d_s], in, MPEG_TS_PKT_LENGTH);
+
+ // Copy input message to output then append Reed-Solomon bits
+ std::memcpy(out, in, MPEG_TS_PKT_LENGTH);
+ encode_rs_char(d_rs, d_data, &out[MPEG_TS_PKT_LENGTH]);
+ }
+
int
dvbt_reed_solomon_enc_impl::general_work (int noutput_items,
gr_vector_int &ninput_items,
@@ -76,18 +98,13 @@ namespace gr {
{
const unsigned char *in = (const unsigned char *) input_items[0];
unsigned char *out = (unsigned char *) output_items[0];
+ int j = 0;
+ int k = 0;
- int in_bsize = d_k - d_s;
- int out_bsize = d_n - d_s;
-
- // We get a superblock of d_blocks blocks
- for (int i = 0; i < (d_blocks * noutput_items); i++) {
- //TODO - zero copy between in/out ?
- memcpy(&d_in[d_s], &in[i * in_bsize], in_bsize);
-
- d_rs.rs_encode(&d_in[0], &d_in[d_k]);
-
- memcpy(&out[i * out_bsize], &d_in[d_s], out_bsize);
+ for (int i = 0; i < noutput_items * d_blocks; i++) {
+ encode(in + j, out + k);
+ j += (d_k - d_s);
+ k += (d_n - d_s);
}
// Tell runtime system how many input items we consumed on
diff --git a/gr-dtv/lib/dvbt/dvbt_reed_solomon_enc_impl.h b/gr-dtv/lib/dvbt/dvbt_reed_solomon_enc_impl.h
index 669ee2761a..47dea875f4 100644
--- a/gr-dtv/lib/dvbt/dvbt_reed_solomon_enc_impl.h
+++ b/gr-dtv/lib/dvbt/dvbt_reed_solomon_enc_impl.h
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2015 Free Software Foundation, Inc.
+ * Copyright 2015,2016 Free Software Foundation, Inc.
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -22,7 +22,10 @@
#define INCLUDED_DTV_DVBT_REED_SOLOMON_ENC_IMPL_H
#include <gnuradio/dtv/dvbt_reed_solomon_enc.h>
-#include "dvbt_reed_solomon.h"
+
+extern "C" {
+#include <gnuradio/fec/rs.h>
+}
namespace gr {
namespace dtv {
@@ -30,18 +33,15 @@ namespace gr {
class dvbt_reed_solomon_enc_impl : public dvbt_reed_solomon_enc
{
private:
- int d_p;
- int d_m;
- int d_gfpoly;
int d_n;
int d_k;
- int d_t;
int d_s;
int d_blocks;
- unsigned char * d_in;
+ unsigned char *d_data;
- dvbt_reed_solomon d_rs;
+ void *d_rs; /* Reed-Solomon characteristics structure */
+ void encode(const unsigned char *in, unsigned char *out);
public:
dvbt_reed_solomon_enc_impl(int p, int m, int gfpoly, int n, int k, int t, int s, int blocks);
diff --git a/gr-dtv/lib/dvbt/dvbt_reference_signals_impl.cc b/gr-dtv/lib/dvbt/dvbt_reference_signals_impl.cc
index b3c7046ae2..aa581aeda8 100644
--- a/gr-dtv/lib/dvbt/dvbt_reference_signals_impl.cc
+++ b/gr-dtv/lib/dvbt/dvbt_reference_signals_impl.cc
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2015 Free Software Foundation, Inc.
+ * Copyright 2015,2016 Free Software Foundation, Inc.
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -25,7 +25,6 @@
#include <gnuradio/io_signature.h>
#include "dvbt_reference_signals_impl.h"
#include <complex>
-#include <stdio.h>
#include <gnuradio/expj.h>
#include <gnuradio/math.h>
@@ -173,37 +172,37 @@ namespace gr {
//allocate PRBS buffer
d_wk = new char[d_Kmax - d_Kmin + 1];
if (d_wk == NULL) {
- std::cout << "Cannot allocate memory for d_wk" << std::endl;
- exit(1);
+ std::cerr << "Reference Signals, cannot allocate memory for d_wk." << std::endl;
+ throw std::bad_alloc();
}
// Generate wk sequence
generate_prbs();
// allocate buffer for scattered pilots
- d_spilot_carriers_val = new gr_complex[d_Kmax - d_Kmin + 1];
+ d_spilot_carriers_val = new (std::nothrow) gr_complex[d_Kmax - d_Kmin + 1];
if (d_spilot_carriers_val == NULL) {
- std::cout << "Cannot allocate memory for d_spilot_carriers_val" << std::endl;
+ std::cerr << "Reference Signals, cannot allocate memory for d_spilot_carriers_val." << std::endl;
delete [] d_wk;
- exit(1);
+ throw std::bad_alloc();
}
// allocate buffer for channel gains (for each useful carrier)
- d_channel_gain = new gr_complex[d_Kmax - d_Kmin + 1];
+ d_channel_gain = new (std::nothrow) gr_complex[d_Kmax - d_Kmin + 1];
if (d_channel_gain == NULL) {
- std::cout << "Cannot allocate memory for d_channel_gain" << std::endl;
+ std::cerr << "Reference Signals, cannot allocate memory for d_channel_gain." << std::endl;
delete [] d_spilot_carriers_val;
delete [] d_wk;
- exit(1);
+ throw std::bad_alloc();
}
// Allocate buffer for continual pilots phase diffs
- d_known_phase_diff = new float[d_cpilot_carriers_size - 1];
+ d_known_phase_diff = new (std::nothrow) float[d_cpilot_carriers_size - 1];
if (d_known_phase_diff == NULL) {
- std::cout << "Cannot allocate memory for d_known_phase_diff" << std::endl;
+ std::cerr << "Reference Signals, cannot allocate memory for d_known_phase_diff." << std::endl;
delete [] d_channel_gain;
delete [] d_spilot_carriers_val;
delete [] d_wk;
- exit(1);
+ throw std::bad_alloc();
}
// Obtain phase diff for all continual pilots
@@ -212,45 +211,45 @@ namespace gr {
norm(get_cpilot_value(d_cpilot_carriers[i + 1]) - get_cpilot_value(d_cpilot_carriers[i]));
}
- d_cpilot_phase_diff = new float[d_cpilot_carriers_size - 1];
+ d_cpilot_phase_diff = new (std::nothrow) float[d_cpilot_carriers_size - 1];
if (d_cpilot_phase_diff == NULL) {
- std::cout << "Cannot allocate memory for d_cpilot_phase_diff" << std::endl;
+ std::cerr << "Reference Signals, cannot allocate memory for d_cpilot_phase_diff." << std::endl;
delete [] d_known_phase_diff;
delete [] d_channel_gain;
delete [] d_spilot_carriers_val;
delete [] d_wk;
- exit(1);
+ throw std::bad_alloc();
}
// Allocate buffer for derotated input symbol
- d_derot_in = new gr_complex[d_fft_length];
+ d_derot_in = new (std::nothrow) gr_complex[d_fft_length];
if (d_derot_in == NULL) {
- std::cout << "Cannot allocate memory for d_derot_in" << std::endl;
+ std::cerr << "Reference Signals, cannot allocate memory for d_derot_in." << std::endl;
delete [] d_cpilot_phase_diff;
delete [] d_known_phase_diff;
delete [] d_channel_gain;
delete [] d_spilot_carriers_val;
delete [] d_wk;
- exit(1);
+ throw std::bad_alloc();
}
// allocate buffer for first tps symbol constellation
- d_tps_carriers_val = new gr_complex[d_tps_carriers_size];
+ d_tps_carriers_val = new (std::nothrow) gr_complex[d_tps_carriers_size];
if (d_tps_carriers_val == NULL) {
- std::cout << "Cannot allocate memory for d_tps_carriers_val" << std::endl;
+ std::cerr << "Reference Signals, cannot allocate memory for d_tps_carriers_val." << std::endl;
delete [] d_derot_in;
delete [] d_cpilot_phase_diff;
delete [] d_known_phase_diff;
delete [] d_channel_gain;
delete [] d_spilot_carriers_val;
delete [] d_wk;
- exit(1);
+ throw std::bad_alloc();
}
// allocate tps data buffer
- d_tps_data = new unsigned char[d_symbols_per_frame];
+ d_tps_data = new (std::nothrow) unsigned char[d_symbols_per_frame];
if (d_tps_data == NULL) {
- std::cout << "Cannot allocate memory for d_tps_data" << std::endl;
+ std::cerr << "Reference Signals, cannot allocate memory for d_tps_data." << std::endl;
delete [] d_tps_carriers_val;
delete [] d_derot_in;
delete [] d_cpilot_phase_diff;
@@ -258,12 +257,12 @@ namespace gr {
delete [] d_channel_gain;
delete [] d_spilot_carriers_val;
delete [] d_wk;
- exit(1);
+ throw std::bad_alloc();
}
- d_prev_tps_symbol = new gr_complex[d_tps_carriers_size];
+ d_prev_tps_symbol = new (std::nothrow) gr_complex[d_tps_carriers_size];
if (d_prev_tps_symbol == NULL) {
- std::cout << "Cannot allocate memory for d_prev_tps_symbol" << std::endl;
+ std::cerr << "Reference Signals, cannot allocate memory for d_prev_tps_symbol." << std::endl;
delete [] d_tps_data;
delete [] d_tps_carriers_val;
delete [] d_derot_in;
@@ -272,13 +271,13 @@ namespace gr {
delete [] d_channel_gain;
delete [] d_spilot_carriers_val;
delete [] d_wk;
- exit(1);
+ throw std::bad_alloc();
}
memset(d_prev_tps_symbol, 0, d_tps_carriers_size * sizeof(gr_complex));
- d_tps_symbol = new gr_complex[d_tps_carriers_size];
+ d_tps_symbol = new (std::nothrow) gr_complex[d_tps_carriers_size];
if (d_tps_symbol == NULL) {
- std::cout << "Cannot allocate memory for d_tps_symbol" << std::endl;
+ std::cerr << "Reference Signals, cannot allocate memory for d_tps_symbol." << std::endl;
delete [] d_prev_tps_symbol;
delete [] d_tps_data;
delete [] d_tps_carriers_val;
@@ -288,7 +287,7 @@ namespace gr {
delete [] d_channel_gain;
delete [] d_spilot_carriers_val;
delete [] d_wk;
- exit(1);
+ throw std::bad_alloc();
}
memset(d_tps_symbol, 0, d_tps_carriers_size * sizeof(gr_complex));
@@ -304,9 +303,9 @@ namespace gr {
}
// Allocate buffer for channel estimation carriers
- d_chanestim_carriers = new int[d_Kmax - d_Kmin + 1];
+ d_chanestim_carriers = new (std::nothrow) int[d_Kmax - d_Kmin + 1];
if (d_chanestim_carriers == NULL) {
- std::cout << "Cannot allocate memory for d_chanestim_carriers" << std::endl;
+ std::cerr << "Reference Signals, cannot allocate memory for d_chanestim_carriers." << std::endl;
delete [] d_tps_symbol;
delete [] d_prev_tps_symbol;
delete [] d_tps_data;
@@ -317,13 +316,13 @@ namespace gr {
delete [] d_channel_gain;
delete [] d_spilot_carriers_val;
delete [] d_wk;
- exit(1);
+ throw std::bad_alloc();
}
// Allocate buffer for payload carriers
- d_payload_carriers = new int[d_Kmax - d_Kmin + 1];
+ d_payload_carriers = new (std::nothrow) int[d_Kmax - d_Kmin + 1];
if (d_payload_carriers == NULL) {
- std::cout << "Cannot allocate memory for d_payload_carriers" << std::endl;
+ std::cerr << "Reference Signals, cannot allocate memory for d_payload_carriers." << std::endl;
delete [] d_chanestim_carriers;
delete [] d_tps_symbol;
delete [] d_prev_tps_symbol;
@@ -335,7 +334,7 @@ namespace gr {
delete [] d_channel_gain;
delete [] d_spilot_carriers_val;
delete [] d_wk;
- exit(1);
+ throw std::bad_alloc();
}
// Reset the pilot generator
diff --git a/gr-dtv/lib/dvbt/dvbt_symbol_inner_interleaver_impl.cc b/gr-dtv/lib/dvbt/dvbt_symbol_inner_interleaver_impl.cc
index 8bdfbf9776..1edd15a109 100644
--- a/gr-dtv/lib/dvbt/dvbt_symbol_inner_interleaver_impl.cc
+++ b/gr-dtv/lib/dvbt/dvbt_symbol_inner_interleaver_impl.cc
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2015 Free Software Foundation, Inc.
+ * Copyright 2015,2016 Free Software Foundation, Inc.
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -24,7 +24,6 @@
#include <gnuradio/io_signature.h>
#include "dvbt_symbol_inner_interleaver_impl.h"
-#include <stdio.h>
namespace gr {
namespace dtv {
@@ -125,10 +124,10 @@ namespace gr {
assert(d_payload_length == d_nsize);
// Allocate memory for h vector
- d_h = new int[d_fft_length];
+ d_h = new (std::nothrow) int[d_fft_length];
if (d_h == NULL) {
- std::cout << "Cannot allocate memory for d_h" << std::endl;
- exit(1);
+ GR_LOG_FATAL(d_logger, "Symbol Inner Interleaver, cannot allocate memory for d_h.");
+ throw std::bad_alloc();
}
// Setup bit permutation vectors
diff --git a/gr-dtv/lib/dvbt/dvbt_viterbi_decoder_impl.cc b/gr-dtv/lib/dvbt/dvbt_viterbi_decoder_impl.cc
index 05554c55fa..97b014f9ae 100644
--- a/gr-dtv/lib/dvbt/dvbt_viterbi_decoder_impl.cc
+++ b/gr-dtv/lib/dvbt/dvbt_viterbi_decoder_impl.cc
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2015 Free Software Foundation, Inc.
+ * Copyright 2015,2016 Free Software Foundation, Inc.
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -24,7 +24,6 @@
#include <gnuradio/io_signature.h>
#include "dvbt_viterbi_decoder_impl.h"
-#include <stdio.h>
namespace gr {
namespace dtv {
@@ -578,8 +577,6 @@ namespace gr {
*
* out/in rate is therefore km/8n in bytes
*/
- assert((d_k * d_m) % (8 * d_n) == 0);
- set_relative_rate((d_k * d_m) / (8 * d_n));
assert ((d_bsize * d_n) % d_m == 0);
set_output_multiple (d_bsize * d_k / 8);
@@ -597,10 +594,10 @@ namespace gr {
d_nout = d_nbits / 2 / 8;
// Allocate the buffer for the bits
- d_inbits = new unsigned char [d_nbits];
+ d_inbits = new (std::nothrow) unsigned char [d_nbits];
if (d_inbits == NULL) {
- std::cout << "Cannot allocate memory for d_inbits" << std::endl;
- exit(1);
+ GR_LOG_FATAL(d_logger, "Viterbi Decoder, cannot allocate memory for d_inbits.");
+ throw std::bad_alloc();
}
mettab[0][0] = 1;
diff --git a/gr-dtv/lib/dvbt2/dvbt2_cellinterleaver_cc_impl.cc b/gr-dtv/lib/dvbt2/dvbt2_cellinterleaver_cc_impl.cc
index feaf3e29f4..ad401feed3 100644
--- a/gr-dtv/lib/dvbt2/dvbt2_cellinterleaver_cc_impl.cc
+++ b/gr-dtv/lib/dvbt2/dvbt2_cellinterleaver_cc_impl.cc
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2015 Free Software Foundation, Inc.
+ * Copyright 2015,2016 Free Software Foundation, Inc.
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -24,7 +24,6 @@
#include <gnuradio/io_signature.h>
#include "dvbt2_cellinterleaver_cc_impl.h"
-#include <stdio.h>
namespace gr {
namespace dtv {
@@ -175,14 +174,14 @@ namespace gr {
}
time_interleave = (gr_complex *) malloc(sizeof(gr_complex) * cell_size * fecblocks);
if (time_interleave == NULL) {
- fprintf(stderr, "Cell interleaver 1st malloc, Out of memory.\n");
- exit(1);
+ GR_LOG_FATAL(d_logger, "Cell/Time Interleaver, cannot allocate memory for time_interleave.");
+ throw std::bad_alloc();
}
cols = (gr_complex **) malloc(sizeof(gr_complex *) * FECBlocksPerBigTIBlock * 5);
if (cols == NULL) {
free(time_interleave);
- fprintf(stderr, "Cell interleaver 2nd malloc, Out of memory.\n");
- exit(1);
+ GR_LOG_FATAL(d_logger, "Cell/Time Interleaver, cannot allocate memory for cols.");
+ throw std::bad_alloc();
}
ti_blocks = tiblocks;
fec_blocks = fecblocks;
diff --git a/gr-dtv/lib/dvbt2/dvbt2_framemapper_cc_impl.cc b/gr-dtv/lib/dvbt2/dvbt2_framemapper_cc_impl.cc
index 5e47faca10..1755fc82ca 100644
--- a/gr-dtv/lib/dvbt2/dvbt2_framemapper_cc_impl.cc
+++ b/gr-dtv/lib/dvbt2/dvbt2_framemapper_cc_impl.cc
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2015 Free Software Foundation, Inc.
+ * Copyright 2015,2016 Free Software Foundation, Inc.
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -24,7 +24,6 @@
#include <gnuradio/io_signature.h>
#include "dvbt2_framemapper_cc_impl.h"
-#include <stdio.h>
namespace gr {
namespace dtv {
@@ -910,33 +909,33 @@ namespace gr {
set_output_multiple((N_P2 * C_P2) + (numdatasyms * C_DATA));
mapped_items = (N_P2 * C_P2) + (numdatasyms * C_DATA);
if (mapped_items < (stream_items + 1840 + (N_post / eta_mod) + (N_FC - C_FC))) {
- fprintf(stderr, "Too many FEC blocks in T2 frame.\n");
+ GR_LOG_WARN(d_logger, "Frame Mapper, too many FEC blocks in T2 frame.");
mapped_items = stream_items + 1840 + (N_post / eta_mod) + (N_FC - C_FC); /* avoid segfault */
}
zigzag_interleave = (gr_complex *) malloc(sizeof(gr_complex) * mapped_items);
if (zigzag_interleave == NULL) {
- fprintf(stderr, "Frame mapper 1st malloc, Out of memory.\n");
- exit(1);
+ GR_LOG_FATAL(d_logger, "Frame Mapper, cannot allocate memory for zigzag_interleave.");
+ throw std::bad_alloc();
}
}
else {
set_output_multiple((N_P2 * C_P2) + ((numdatasyms - 1) * C_DATA) + N_FC);
mapped_items = (N_P2 * C_P2) + ((numdatasyms - 1) * C_DATA) + N_FC;
if (mapped_items < (stream_items + 1840 + (N_post / eta_mod) + (N_FC - C_FC))) {
- fprintf(stderr, "Too many FEC blocks in T2 frame.\n");
+ GR_LOG_WARN(d_logger, "Frame Mapper, too many FEC blocks in T2 frame.");
mapped_items = stream_items + 1840 + (N_post / eta_mod) + (N_FC - C_FC); /* avoid segfault */
}
zigzag_interleave = (gr_complex *) malloc(sizeof(gr_complex) * mapped_items);
if (zigzag_interleave == NULL) {
- fprintf(stderr, "Frame mapper 1st malloc, Out of memory.\n");
- exit(1);
+ GR_LOG_FATAL(d_logger, "Frame Mapper, cannot allocate memory for zigzag_interleave.");
+ throw std::bad_alloc();
}
}
dummy_randomize = (gr_complex *) malloc(sizeof(gr_complex) * mapped_items - stream_items - 1840 - (N_post / eta_mod) - (N_FC - C_FC));
if (dummy_randomize == NULL) {
free(zigzag_interleave);
- fprintf(stderr, "Frame mapper 2nd malloc, Out of memory.\n");
- exit(1);
+ GR_LOG_FATAL(d_logger, "Frame Mapper, cannot allocate memory for dummy_randomize.");
+ throw std::bad_alloc();
}
init_dummy_randomizer();
init_l1_randomizer();
diff --git a/gr-dtv/lib/dvbt2/dvbt2_interleaver_bb_impl.cc b/gr-dtv/lib/dvbt2/dvbt2_interleaver_bb_impl.cc
index 82b7c94d5f..9ebfb143ed 100644
--- a/gr-dtv/lib/dvbt2/dvbt2_interleaver_bb_impl.cc
+++ b/gr-dtv/lib/dvbt2/dvbt2_interleaver_bb_impl.cc
@@ -249,7 +249,10 @@ namespace gr {
offset = twist[col];
for (int row = 0; row < rows; row++) {
tempv[offset + (rows * col)] = tempu[index++];
- offset = (offset + 1) % rows;
+ offset++;
+ if (offset == rows) {
+ offset = 0;
+ }
}
}
index = 0;
@@ -327,7 +330,10 @@ namespace gr {
offset = twist[col];
for (int row = 0; row < rows; row++) {
tempv[offset + (rows * col)] = tempu[index++];
- offset = (offset + 1) % rows;
+ offset++;
+ if (offset == rows) {
+ offset = 0;
+ }
}
}
index = 0;
@@ -406,7 +412,10 @@ namespace gr {
offset = twist256n[col];
for (int row = 0; row < rows; row++) {
tempv[offset + (rows * col)] = tempu[index++];
- offset = (offset + 1) % rows;
+ offset++;
+ if (offset == rows) {
+ offset = 0;
+ }
}
}
index = 0;
@@ -479,7 +488,10 @@ namespace gr {
offset = twist256s[col];
for (int row = 0; row < rows; row++) {
tempv[offset + (rows * col)] = tempu[index++];
- offset = (offset + 1) % rows;
+ offset++;
+ if (offset == rows) {
+ offset = 0;
+ }
}
}
index = 0;
diff --git a/gr-dtv/lib/dvbt2/dvbt2_paprtr_cc_impl.cc b/gr-dtv/lib/dvbt2/dvbt2_paprtr_cc_impl.cc
index fc091bd70d..cec39a7041 100644
--- a/gr-dtv/lib/dvbt2/dvbt2_paprtr_cc_impl.cc
+++ b/gr-dtv/lib/dvbt2/dvbt2_paprtr_cc_impl.cc
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2015 Free Software Foundation, Inc.
+ * Copyright 2015,2016 Free Software Foundation, Inc.
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -25,7 +25,6 @@
#include <gnuradio/io_signature.h>
#include "dvbt2_paprtr_cc_impl.h"
#include <volk/volk.h>
-#include <stdio.h>
namespace gr {
namespace dtv {
@@ -518,61 +517,65 @@ namespace gr {
left_nulls = ((vlength - C_PS) / 2) + 1;
right_nulls = (vlength - C_PS) / 2;
papr_fft_size = vlength;
- papr_fft = new fft::fft_complex(papr_fft_size, false, 1);
+ papr_fft = new (std::nothrow) fft::fft_complex(papr_fft_size, false, 1);
+ if (papr_fft == NULL) {
+ GR_LOG_FATAL(d_logger, "Tone Reservation PAPR, cannot allocate memory for papr_fft.");
+ throw std::bad_alloc();
+ }
ones_freq = (gr_complex*) volk_malloc(sizeof(gr_complex) * papr_fft_size, volk_get_alignment());
if (ones_freq == NULL) {
- fprintf(stderr, "Tone reservation PAPR 1st volk_malloc, Out of memory.\n");
+ GR_LOG_FATAL(d_logger, "Tone Reservation PAPR, cannot allocate memory for ones_freq.");
delete papr_fft;
- exit(1);
+ throw std::bad_alloc();
}
ones_time = (gr_complex*) volk_malloc(sizeof(gr_complex) * papr_fft_size, volk_get_alignment());
if (ones_time == NULL) {
- fprintf(stderr, "Tone reservation PAPR 2nd volk_malloc, Out of memory.\n");
+ GR_LOG_FATAL(d_logger, "Tone Reservation PAPR, cannot allocate memory for ones_time.");
volk_free(ones_freq);
delete papr_fft;
- exit(1);
+ throw std::bad_alloc();
}
c = (gr_complex*) volk_malloc(sizeof(gr_complex) * papr_fft_size, volk_get_alignment());
if (c == NULL) {
- fprintf(stderr, "Tone reservation PAPR 3rd volk_malloc, Out of memory.\n");
+ GR_LOG_FATAL(d_logger, "Tone Reservation PAPR, cannot allocate memory for c.");
volk_free(ones_time);
volk_free(ones_freq);
delete papr_fft;
- exit(1);
+ throw std::bad_alloc();
}
ctemp = (gr_complex*) volk_malloc(sizeof(gr_complex) * papr_fft_size, volk_get_alignment());
if (ctemp == NULL) {
- fprintf(stderr, "Tone reservation PAPR 4th volk_malloc, Out of memory.\n");
+ GR_LOG_FATAL(d_logger, "Tone Reservation PAPR, cannot allocate memory for ctemp.");
volk_free(c);
volk_free(ones_time);
volk_free(ones_freq);
delete papr_fft;
- exit(1);
+ throw std::bad_alloc();
}
magnitude = (float*) volk_malloc(sizeof(float) * papr_fft_size, volk_get_alignment());
if (magnitude == NULL) {
- fprintf(stderr, "Tone reservation PAPR 5th volk_malloc, Out of memory.\n");
+ GR_LOG_FATAL(d_logger, "Tone Reservation PAPR, cannot allocate memory for magnitude.");
volk_free(ctemp);
volk_free(c);
volk_free(ones_time);
volk_free(ones_freq);
delete papr_fft;
- exit(1);
+ throw std::bad_alloc();
}
r = (gr_complex*) volk_malloc(sizeof(gr_complex) * N_TR, volk_get_alignment());
if (r == NULL) {
- fprintf(stderr, "Tone reservation PAPR 6th volk_malloc, Out of memory.\n");
+ GR_LOG_FATAL(d_logger, "Tone Reservation PAPR, cannot allocate memory for r.");
volk_free(magnitude);
volk_free(ctemp);
volk_free(c);
volk_free(ones_time);
volk_free(ones_freq);
delete papr_fft;
- exit(1);
+ throw std::bad_alloc();
}
rNew = (gr_complex*) volk_malloc(sizeof(gr_complex) * N_TR, volk_get_alignment());
if (rNew == NULL) {
- fprintf(stderr, "Tone reservation PAPR 7th volk_malloc, Out of memory.\n");
+ GR_LOG_FATAL(d_logger, "Tone Reservation PAPR, cannot allocate memory for rNew.");
volk_free(r);
volk_free(magnitude);
volk_free(ctemp);
@@ -580,11 +583,11 @@ namespace gr {
volk_free(ones_time);
volk_free(ones_freq);
delete papr_fft;
- exit(1);
+ throw std::bad_alloc();
}
v = (gr_complex*) volk_malloc(sizeof(gr_complex) * N_TR, volk_get_alignment());
if (v == NULL) {
- fprintf(stderr, "Tone reservation PAPR 8th volk_malloc, Out of memory.\n");
+ GR_LOG_FATAL(d_logger, "Tone Reservation PAPR, cannot allocate memory for v.");
volk_free(rNew);
volk_free(r);
volk_free(magnitude);
@@ -593,7 +596,7 @@ namespace gr {
volk_free(ones_time);
volk_free(ones_freq);
delete papr_fft;
- exit(1);
+ throw std::bad_alloc();
}
num_symbols = numdatasyms + N_P2;
set_output_multiple(num_symbols);
diff --git a/gr-dtv/lib/dvbt2/dvbt2_pilotgenerator_cc_impl.cc b/gr-dtv/lib/dvbt2/dvbt2_pilotgenerator_cc_impl.cc
index 26c83492b9..2bb19f5189 100644
--- a/gr-dtv/lib/dvbt2/dvbt2_pilotgenerator_cc_impl.cc
+++ b/gr-dtv/lib/dvbt2/dvbt2_pilotgenerator_cc_impl.cc
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2015 Free Software Foundation, Inc.
+ * Copyright 2015,2016 Free Software Foundation, Inc.
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -1131,7 +1131,11 @@ namespace gr {
}
equalization_enable = equalization;
ofdm_fft_size = vlength;
- ofdm_fft = new fft::fft_complex(ofdm_fft_size, false, 1);
+ ofdm_fft = new (std::nothrow) fft::fft_complex(ofdm_fft_size, false, 1);
+ if (ofdm_fft == NULL) {
+ GR_LOG_FATAL(d_logger, "Pilot Generator and IFFT, cannot allocate memory for ofdm_fft.");
+ throw std::bad_alloc();
+ }
num_symbols = numdatasyms + N_P2;
set_output_multiple(num_symbols);
}
diff --git a/gr-fec/include/gnuradio/fec/polar_decoder_common.h b/gr-fec/include/gnuradio/fec/polar_decoder_common.h
index a39ee4f232..13b25ea19b 100644
--- a/gr-fec/include/gnuradio/fec/polar_decoder_common.h
+++ b/gr-fec/include/gnuradio/fec/polar_decoder_common.h
@@ -68,7 +68,7 @@ namespace gr {
bool set_frame_size(unsigned int frame_size){return false;};
private:
- static BOOST_CONSTEXPR_OR_CONST float D_LLR_FACTOR = -2.19722458f;
+ static BOOST_CONSTEXPR_OR_CONST float D_LLR_FACTOR;
unsigned int d_frozen_bit_counter;
protected:
diff --git a/gr-fec/lib/polar_decoder_common.cc b/gr-fec/lib/polar_decoder_common.cc
index 8fc2e37fb7..1d4a21a191 100644
--- a/gr-fec/lib/polar_decoder_common.cc
+++ b/gr-fec/lib/polar_decoder_common.cc
@@ -34,6 +34,8 @@ namespace gr {
namespace fec {
namespace code {
+ const float polar_decoder_common::D_LLR_FACTOR = -2.19722458f;
+
polar_decoder_common::polar_decoder_common(int block_size, int num_info_bits,
std::vector<int> frozen_bit_positions,
std::vector<char> frozen_bit_values) :
diff --git a/gr-qtgui/CMakeLists.txt b/gr-qtgui/CMakeLists.txt
index 80bb8b3bdb..e467567b1c 100644
--- a/gr-qtgui/CMakeLists.txt
+++ b/gr-qtgui/CMakeLists.txt
@@ -22,14 +22,27 @@
########################################################################
include(GrBoost)
-find_package(Qt4 4.2.0 COMPONENTS QtCore QtGui)
-
-find_package(Qwt)
-
find_package(PythonLibs 2)
include(GrPython)
-GR_PYTHON_CHECK_MODULE("PyQt4" PyQt4 True PYQT4_FOUND)
+
+set(DESIRED_QT_VERSION 5 CACHE STRING "The Qt version to use (4 or 5)")
+set_property(CACHE DESIRED_QT_VERSION PROPERTY STRINGS 4 5)
+
+if (DESIRED_QT_VERSION MATCHES 4)
+ find_package(Qt4 COMPONENTS QtCore QtGui)
+ set(QT_FOUND ${Qt4_FOUND})
+ include(GrSetupQt4)
+else()
+ find_package(Qt5Widgets)
+ set(QT_FOUND ${Qt5Widgets_FOUND})
+ set(QT_LIBRARIES ${Qt5Widgets_LIBRARIES})
+ set(QT_INCLUDE_DIRS ${Qt5Widgets_INCLUDE_DIRS})
+endif()
+
+GR_PYTHON_CHECK_MODULE("PyQt${DESIRED_QT_VERSION}" PyQt${DESIRED_QT_VERSION} True PYQT${DESIRED_QT_VERSION}_FOUND)
+
+find_package(Qwt)
########################################################################
# Register component
@@ -37,13 +50,13 @@ GR_PYTHON_CHECK_MODULE("PyQt4" PyQt4 True PYQT4_FOUND)
include(GrComponent)
if(NOT CMAKE_CROSSCOMPILING)
set(qt_gui_python_deps
- PYQT4_FOUND
+ PYQT${DESIRED_QT_VERSION}_FOUND
)
endif(NOT CMAKE_CROSSCOMPILING)
GR_REGISTER_COMPONENT("gr-qtgui" ENABLE_GR_QTGUI
Boost_FOUND
- QT4_FOUND
+ QT_FOUND
QWT_FOUND
ENABLE_VOLK
ENABLE_GNURADIO_RUNTIME
@@ -66,9 +79,6 @@ SET(GR_PKG_QTGUI_EXAMPLES_DIR ${GR_PKG_DATA_DIR}/examples/qt-gui)
########################################################################
if(ENABLE_GR_QTGUI)
-# populate the environment with QT variables
-include(GrSetupQt4)
-
########################################################################
# Add subdirectories
########################################################################
diff --git a/gr-qtgui/examples/c++/CMakeLists.txt b/gr-qtgui/examples/c++/CMakeLists.txt
index f7c61bc316..fb0b19a6d9 100644
--- a/gr-qtgui/examples/c++/CMakeLists.txt
+++ b/gr-qtgui/examples/c++/CMakeLists.txt
@@ -36,9 +36,15 @@ list(APPEND QTGUI_LIBRARIES
gnuradio-fft
gnuradio-runtime
${QWT_LIBRARY_DIRS}
+ ${QT_LIBRARIES}
)
-QT4_WRAP_CPP(qtgui_moc_sources display_qt.h)
+if (${DESIRED_QT_VERSION} MATCHES 4)
+ QT4_WRAP_CPP(qtgui_moc_sources display_qt.h)
+else()
+ QT5_WRAP_CPP(qtgui_moc_sources display_qt.h)
+endif()
+
add_executable(display_qt display_qt.cc ${qtgui_moc_sources})
target_link_libraries(display_qt ${QTGUI_LIBRARIES})
diff --git a/gr-qtgui/examples/pyqt_const_c.py b/gr-qtgui/examples/pyqt_const_c.py
index 3a43bf9a92..0bb6c20d59 100755
--- a/gr-qtgui/examples/pyqt_const_c.py
+++ b/gr-qtgui/examples/pyqt_const_c.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
#
-# Copyright 2011,2012 Free Software Foundation, Inc.
+# Copyright 2011,2012,2015 Free Software Foundation, Inc.
#
# This file is part of GNU Radio
#
@@ -26,10 +26,10 @@ import sys
try:
from gnuradio import qtgui
- from PyQt4 import QtGui, QtCore
+ from PyQt5 import QtWidgets, Qt
import sip
except ImportError:
- sys.stderr.write("Error: Program requires PyQt4 and gr-qtgui.\n")
+ sys.stderr.write("Error: Program requires PyQt5 and gr-qtgui.\n")
sys.exit(1)
try:
@@ -44,71 +44,65 @@ except ImportError:
sys.stderr.write("Error: Program requires gr-channels.\n")
sys.exit(1)
-class dialog_box(QtGui.QWidget):
+class dialog_box(QtWidgets.QWidget):
def __init__(self, display, control):
- QtGui.QWidget.__init__(self, None)
+ QtWidgets.QWidget.__init__(self, None)
self.setWindowTitle('PyQt Test GUI')
- self.boxlayout = QtGui.QBoxLayout(QtGui.QBoxLayout.LeftToRight, self)
+ self.boxlayout = QtWidgets.QBoxLayout(QtWidgets.QBoxLayout.LeftToRight, self)
self.boxlayout.addWidget(display, 1)
self.boxlayout.addWidget(control)
self.resize(800, 500)
-class control_box(QtGui.QWidget):
+class control_box(QtWidgets.QWidget):
def __init__(self, parent=None):
- QtGui.QWidget.__init__(self, parent)
+ QtWidgets.QWidget.__init__(self, parent)
self.setWindowTitle('Control Panel')
self.setToolTip('Control the signals')
- QtGui.QToolTip.setFont(QtGui.QFont('OldEnglish', 10))
+ QtWidgets.QToolTip.setFont(Qt.QFont('OldEnglish', 10))
- self.layout = QtGui.QFormLayout(self)
+ self.layout = QtWidgets.QFormLayout(self)
# Control the first signal
- self.freq1Edit = QtGui.QLineEdit(self)
+ self.freq1Edit = QtWidgets.QLineEdit(self)
self.freq1Edit.setMinimumWidth(100)
self.layout.addRow("Signal 1 Frequency:", self.freq1Edit)
- self.connect(self.freq1Edit, QtCore.SIGNAL("editingFinished()"),
- self.freq1EditText)
+ self.freq1Edit.editingFinished.connect(self.freq1EditText)
- self.amp1Edit = QtGui.QLineEdit(self)
+ self.amp1Edit = QtWidgets.QLineEdit(self)
self.amp1Edit.setMinimumWidth(100)
self.layout.addRow("Signal 1 Amplitude:", self.amp1Edit)
- self.connect(self.amp1Edit, QtCore.SIGNAL("editingFinished()"),
- self.amp1EditText)
+ self.amp1Edit.editingFinished.connect(self.amp1EditText)
# Control the second signal
- self.freq2Edit = QtGui.QLineEdit(self)
+ self.freq2Edit = QtWidgets.QLineEdit(self)
self.freq2Edit.setMinimumWidth(100)
self.layout.addRow("Signal 2 Frequency:", self.freq2Edit)
- self.connect(self.freq2Edit, QtCore.SIGNAL("editingFinished()"),
- self.freq2EditText)
+ self.freq2Edit.editingFinished.connect(self.freq2EditText)
- self.amp2Edit = QtGui.QLineEdit(self)
+ self.amp2Edit = QtWidgets.QLineEdit(self)
self.amp2Edit.setMinimumWidth(100)
self.layout.addRow("Signal 2 Amplitude:", self.amp2Edit)
- self.connect(self.amp2Edit, QtCore.SIGNAL("editingFinished()"),
- self.amp2EditText)
+ self.amp2Edit.editingFinished.connect(self.amp2EditText)
- self.quit = QtGui.QPushButton('Close', self)
+ self.quit = QtWidgets.QPushButton('Close', self)
self.quit.setMinimumWidth(100)
+ self.quit.clicked.connect(QtWidgets.qApp.quit)
self.layout.addWidget(self.quit)
- self.connect(self.quit, QtCore.SIGNAL('clicked()'),
- QtGui.qApp, QtCore.SLOT('quit()'))
-
def attach_signal1(self, signal):
self.signal1 = signal
- self.freq1Edit.setText(QtCore.QString("%1").arg(self.signal1.frequency()))
- self.amp1Edit.setText(QtCore.QString("%1").arg(self.signal1.amplitude()))
+ self.freq1Edit.setText("{0}".format(self.signal1.frequency()))
+ self.amp1Edit.setText("{0}".format(self.signal1.amplitude()))
def attach_signal2(self, signal):
self.signal2 = signal
- self.freq2Edit.setText(QtCore.QString("%1").arg(self.signal2.frequency()))
- self.amp2Edit.setText(QtCore.QString("%1").arg(self.signal2.amplitude()))
+ self.freq2Edit.setText("{0}".format(self.signal2.frequency()))
+ self.amp2Edit.setText("{0}".format(self.signal2.amplitude()))
def freq1EditText(self):
try:
@@ -150,7 +144,7 @@ class my_top_block(gr.top_block):
npts = 2048
- self.qapp = QtGui.QApplication(sys.argv)
+ self.qapp = QtWidgets.QApplication(sys.argv)
src1 = analog.sig_source_c(Rs, analog.GR_SIN_WAVE, f1, 0.5, 0)
src2 = analog.sig_source_c(Rs, analog.GR_SIN_WAVE, f2, 0.5, 0)
@@ -158,6 +152,7 @@ class my_top_block(gr.top_block):
channel = channels.channel_model(0.001)
thr = blocks.throttle(gr.sizeof_gr_complex, 100*npts)
self.snk1 = qtgui.const_sink_c(npts, "Constellation Example", 1)
+ self.snk1.disable_legend()
self.connect(src1, (src,0))
self.connect(src2, (src,1))
@@ -171,8 +166,8 @@ class my_top_block(gr.top_block):
pyQt = self.snk1.pyqwidget()
# Wrap the pointer as a PyQt SIP object
- # This can now be manipulated as a PyQt4.QtGui.QWidget
- pyWin = sip.wrapinstance(pyQt, QtGui.QWidget)
+ # This can now be manipulated as a PyQt5.QtWidgets.QWidget
+ pyWin = sip.wrapinstance(pyQt, QtWidgets.QWidget)
self.main_box = dialog_box(pyWin, self.ctrl_win)
self.main_box.show()
@@ -182,4 +177,3 @@ if __name__ == "__main__":
tb.start()
tb.qapp.exec_()
tb.stop()
-
diff --git a/gr-qtgui/examples/pyqt_example_c.py b/gr-qtgui/examples/pyqt_example_c.py
index 1bf61d949d..89ca7b2820 100755
--- a/gr-qtgui/examples/pyqt_example_c.py
+++ b/gr-qtgui/examples/pyqt_example_c.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
#
-# Copyright 2011,2012 Free Software Foundation, Inc.
+# Copyright 2011,2012,2015 Free Software Foundation, Inc.
#
# This file is part of GNU Radio
#
@@ -26,10 +26,10 @@ import sys
try:
from gnuradio import qtgui
- from PyQt4 import QtGui, QtCore
+ from PyQt5 import QtWidgets, Qt
import sip
except ImportError:
- sys.stderr.write("Error: Program requires PyQt4 and gr-qtgui.\n")
+ sys.stderr.write("Error: Program requires PyQt5 and gr-qtgui.\n")
sys.exit(1)
try:
@@ -44,71 +44,66 @@ except ImportError:
sys.stderr.write("Error: Program requires gr-channels.\n")
sys.exit(1)
-class dialog_box(QtGui.QWidget):
+class dialog_box(QtWidgets.QWidget):
def __init__(self, display, control):
- QtGui.QWidget.__init__(self, None)
+ QtWidgets.QWidget.__init__(self, None)
self.setWindowTitle('PyQt Test GUI')
- self.boxlayout = QtGui.QBoxLayout(QtGui.QBoxLayout.LeftToRight, self)
+ self.boxlayout = QtWidgets.QBoxLayout(QtWidgets.QBoxLayout.LeftToRight, self)
self.boxlayout.addWidget(display, 1)
self.boxlayout.addWidget(control)
self.resize(800, 500)
-class control_box(QtGui.QWidget):
+class control_box(QtWidgets.QWidget):
def __init__(self, parent=None):
- QtGui.QWidget.__init__(self, parent)
+ QtWidgets.QWidget.__init__(self, parent)
self.setWindowTitle('Control Panel')
self.setToolTip('Control the signals')
- QtGui.QToolTip.setFont(QtGui.QFont('OldEnglish', 10))
+ QtWidgets.QToolTip.setFont(Qt.QFont('OldEnglish', 10))
- self.layout = QtGui.QFormLayout(self)
+ self.layout = QtWidgets.QFormLayout(self)
# Control the first signal
- self.freq1Edit = QtGui.QLineEdit(self)
+ self.freq1Edit = QtWidgets.QLineEdit(self)
self.freq1Edit.setMinimumWidth(100)
self.layout.addRow("Signal 1 Frequency:", self.freq1Edit)
- self.connect(self.freq1Edit, QtCore.SIGNAL("editingFinished()"),
- self.freq1EditText)
+ self.freq1Edit.editingFinished.connect(self.freq1EditText)
- self.amp1Edit = QtGui.QLineEdit(self)
+ self.amp1Edit = QtWidgets.QLineEdit(self)
self.amp1Edit.setMinimumWidth(100)
self.layout.addRow("Signal 1 Amplitude:", self.amp1Edit)
- self.connect(self.amp1Edit, QtCore.SIGNAL("editingFinished()"),
- self.amp1EditText)
+ self.amp1Edit.editingFinished.connect(self.amp1EditText)
# Control the second signal
- self.freq2Edit = QtGui.QLineEdit(self)
+ self.freq2Edit = QtWidgets.QLineEdit(self)
self.freq2Edit.setMinimumWidth(100)
self.layout.addRow("Signal 2 Frequency:", self.freq2Edit)
- self.connect(self.freq2Edit, QtCore.SIGNAL("editingFinished()"),
- self.freq2EditText)
+ self.freq2Edit.editingFinished.connect(self.freq2EditText)
- self.amp2Edit = QtGui.QLineEdit(self)
+ self.amp2Edit = QtWidgets.QLineEdit(self)
self.amp2Edit.setMinimumWidth(100)
self.layout.addRow("Signal 2 Amplitude:", self.amp2Edit)
- self.connect(self.amp2Edit, QtCore.SIGNAL("editingFinished()"),
- self.amp2EditText)
+ self.amp2Edit.editingFinished.connect(self.amp2EditText)
- self.quit = QtGui.QPushButton('Close', self)
+ self.quit = QtWidgets.QPushButton('Close', self)
self.quit.setMinimumWidth(100)
self.layout.addWidget(self.quit)
- self.connect(self.quit, QtCore.SIGNAL('clicked()'),
- QtGui.qApp, QtCore.SLOT('quit()'))
+ self.quit.clicked.connect(QtWidgets.qApp.quit)
def attach_signal1(self, signal):
self.signal1 = signal
- self.freq1Edit.setText(QtCore.QString("%1").arg(self.signal1.frequency()))
- self.amp1Edit.setText(QtCore.QString("%1").arg(self.signal1.amplitude()))
+ self.freq1Edit.setText(("{0}").format(self.signal1.frequency()))
+ self.amp1Edit.setText(("{0}").format(self.signal1.amplitude()))
def attach_signal2(self, signal):
self.signal2 = signal
- self.freq2Edit.setText(QtCore.QString("%1").arg(self.signal2.frequency()))
- self.amp2Edit.setText(QtCore.QString("%1").arg(self.signal2.amplitude()))
+ self.freq2Edit.setText(("{0}").format(self.signal2.frequency()))
+ self.amp2Edit.setText(("{0}").format(self.signal2.amplitude()))
def freq1EditText(self):
try:
@@ -150,7 +145,7 @@ class my_top_block(gr.top_block):
fftsize = 2048
- self.qapp = QtGui.QApplication(sys.argv)
+ self.qapp = QtWidgets.QApplication(sys.argv)
ss = open(gr.prefix() + '/share/gnuradio/themes/dark.qss')
sstext = ss.read()
ss.close()
@@ -178,8 +173,8 @@ class my_top_block(gr.top_block):
pyQt = self.snk1.pyqwidget()
# Wrap the pointer as a PyQt SIP object
- # This can now be manipulated as a PyQt4.QtGui.QWidget
- pyWin = sip.wrapinstance(pyQt, QtGui.QWidget)
+ # This can now be manipulated as a PyQt5.QtWidgets.QWidget
+ pyWin = sip.wrapinstance(pyQt, QtWidgets.QWidget)
self.main_box = dialog_box(pyWin, self.ctrl_win)
diff --git a/gr-qtgui/examples/pyqt_example_f.py b/gr-qtgui/examples/pyqt_example_f.py
index 5bd582d1e1..77a7478aa2 100755
--- a/gr-qtgui/examples/pyqt_example_f.py
+++ b/gr-qtgui/examples/pyqt_example_f.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
#
-# Copyright 2011,2012 Free Software Foundation, Inc.
+# Copyright 2011,2012,2015 Free Software Foundation, Inc.
#
# This file is part of GNU Radio
#
@@ -26,10 +26,10 @@ import sys
try:
from gnuradio import qtgui
- from PyQt4 import QtGui, QtCore
+ from PyQt5 import QtWidgets, Qt
import sip
except ImportError:
- sys.stderr.write("Error: Program requires PyQt4 and gr-qtgui.\n")
+ sys.stderr.write("Error: Program requires PyQt5 and gr-qtgui.\n")
sys.exit(1)
try:
@@ -38,71 +38,66 @@ except ImportError:
sys.stderr.write("Error: Program requires gr-analog.\n")
sys.exit(1)
-class dialog_box(QtGui.QWidget):
+class dialog_box(QtWidgets.QWidget):
def __init__(self, display, control):
- QtGui.QWidget.__init__(self, None)
+ QtWidgets.QWidget.__init__(self, None)
self.setWindowTitle('PyQt Test GUI')
- self.boxlayout = QtGui.QBoxLayout(QtGui.QBoxLayout.LeftToRight, self)
+ self.boxlayout = QtWidgets.QBoxLayout(QtWidgets.QBoxLayout.LeftToRight, self)
self.boxlayout.addWidget(display, 1)
self.boxlayout.addWidget(control)
self.resize(800, 500)
-class control_box(QtGui.QWidget):
+class control_box(QtWidgets.QWidget):
def __init__(self, parent=None):
- QtGui.QWidget.__init__(self, parent)
+ QtWidgets.QWidget.__init__(self, parent)
self.setWindowTitle('Control Panel')
self.setToolTip('Control the signals')
- QtGui.QToolTip.setFont(QtGui.QFont('OldEnglish', 10))
+ QtWidgets.QToolTip.setFont(Qt.QFont('OldEnglish', 10))
- self.layout = QtGui.QFormLayout(self)
+ self.layout = QtWidgets.QFormLayout(self)
# Control the first signal
- self.freq1Edit = QtGui.QLineEdit(self)
+ self.freq1Edit = QtWidgets.QLineEdit(self)
self.freq1Edit.setMinimumWidth(100)
self.layout.addRow("Signal 1 Frequency:", self.freq1Edit)
- self.connect(self.freq1Edit, QtCore.SIGNAL("editingFinished()"),
- self.freq1EditText)
+ self.freq1Edit.editingFinished.connect(self.freq1EditText)
- self.amp1Edit = QtGui.QLineEdit(self)
+ self.amp1Edit = QtWidgets.QLineEdit(self)
self.amp1Edit.setMinimumWidth(100)
self.layout.addRow("Signal 1 Amplitude:", self.amp1Edit)
- self.connect(self.amp1Edit, QtCore.SIGNAL("editingFinished()"),
- self.amp1EditText)
+ self.amp1Edit.editingFinished.connect(self.amp1EditText)
# Control the second signal
- self.freq2Edit = QtGui.QLineEdit(self)
+ self.freq2Edit = QtWidgets.QLineEdit(self)
self.freq2Edit.setMinimumWidth(100)
self.layout.addRow("Signal 2 Frequency:", self.freq2Edit)
- self.connect(self.freq2Edit, QtCore.SIGNAL("editingFinished()"),
- self.freq2EditText)
+ self.freq2Edit.editingFinished.connect(self.freq2EditText)
- self.amp2Edit = QtGui.QLineEdit(self)
+ self.amp2Edit = QtWidgets.QLineEdit(self)
self.amp2Edit.setMinimumWidth(100)
self.layout.addRow("Signal 2 Amplitude:", self.amp2Edit)
- self.connect(self.amp2Edit, QtCore.SIGNAL("editingFinished()"),
- self.amp2EditText)
+ self.amp2Edit.editingFinished.connect(self.amp2EditText)
- self.quit = QtGui.QPushButton('Close', self)
+ self.quit = QtWidgets.QPushButton('Close', self)
self.quit.setMinimumWidth(100)
self.layout.addWidget(self.quit)
- self.connect(self.quit, QtCore.SIGNAL('clicked()'),
- QtGui.qApp, QtCore.SLOT('quit()'))
+ self.quit.clicked.connect(QtWidgets.qApp.quit)
def attach_signal1(self, signal):
self.signal1 = signal
- self.freq1Edit.setText(QtCore.QString("%1").arg(self.signal1.frequency()))
- self.amp1Edit.setText(QtCore.QString("%1").arg(self.signal1.amplitude()))
+ self.freq1Edit.setText(("{0}").format(self.signal1.frequency()))
+ self.amp1Edit.setText(("{0}").format(self.signal1.amplitude()))
def attach_signal2(self, signal):
self.signal2 = signal
- self.freq2Edit.setText(QtCore.QString("%1").arg(self.signal2.frequency()))
- self.amp2Edit.setText(QtCore.QString("%1").arg(self.signal2.amplitude()))
+ self.freq2Edit.setText(("{0}").format(self.signal2.frequency()))
+ self.amp2Edit.setText(("{0}").format(self.signal2.amplitude()))
def freq1EditText(self):
try:
@@ -144,7 +139,7 @@ class my_top_block(gr.top_block):
fftsize = 2048
- self.qapp = QtGui.QApplication(sys.argv)
+ self.qapp = QtWidgets.QApplication(sys.argv)
src1 = analog.sig_source_f(Rs, analog.GR_SIN_WAVE, f1, 0.1, 0)
src2 = analog.sig_source_f(Rs, analog.GR_SIN_WAVE, f2, 0.1, 0)
@@ -171,8 +166,8 @@ class my_top_block(gr.top_block):
pyQt = self.snk1.pyqwidget()
# Wrap the pointer as a PyQt SIP object
- # This can now be manipulated as a PyQt4.QtGui.QWidget
- pyWin = sip.wrapinstance(pyQt, QtGui.QWidget)
+ # This can now be manipulated as a PyQt5.QtWidgets.QWidget
+ pyWin = sip.wrapinstance(pyQt, QtWidgets.QWidget)
self.main_box = dialog_box(pyWin, self.ctrl_win)
diff --git a/gr-qtgui/examples/pyqt_freq_c.py b/gr-qtgui/examples/pyqt_freq_c.py
index c53feb93d4..954a078df8 100755
--- a/gr-qtgui/examples/pyqt_freq_c.py
+++ b/gr-qtgui/examples/pyqt_freq_c.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
#
-# Copyright 2012 Free Software Foundation, Inc.
+# Copyright 2012,2015 Free Software Foundation, Inc.
#
# This file is part of GNU Radio
#
@@ -26,10 +26,10 @@ import sys
try:
from gnuradio import qtgui
- from PyQt4 import QtGui, QtCore
+ from PyQt5 import QtWidgets, Qt
import sip
except ImportError:
- sys.stderr.write("Error: Program requires PyQt4 and gr-qtgui.\n")
+ sys.stderr.write("Error: Program requires PyQt5 and gr-qtgui.\n")
sys.exit(1)
try:
@@ -44,71 +44,66 @@ except ImportError:
sys.stderr.write("Error: Program requires gr-channels.\n")
sys.exit(1)
-class dialog_box(QtGui.QWidget):
+class dialog_box(QtWidgets.QWidget):
def __init__(self, display, control):
- QtGui.QWidget.__init__(self, None)
+ QtWidgets.QWidget.__init__(self, None)
self.setWindowTitle('PyQt Test GUI')
- self.boxlayout = QtGui.QBoxLayout(QtGui.QBoxLayout.LeftToRight, self)
+ self.boxlayout = QtWidgets.QBoxLayout(QtWidgets.QBoxLayout.LeftToRight, self)
self.boxlayout.addWidget(display, 1)
self.boxlayout.addWidget(control)
self.resize(800, 500)
-class control_box(QtGui.QWidget):
+class control_box(QtWidgets.QWidget):
def __init__(self, parent=None):
- QtGui.QWidget.__init__(self, parent)
+ QtWidgets.QWidget.__init__(self, parent)
self.setWindowTitle('Control Panel')
self.setToolTip('Control the signals')
- QtGui.QToolTip.setFont(QtGui.QFont('OldEnglish', 10))
+ QtWidgets.QToolTip.setFont(Qt.QFont('OldEnglish', 10))
- self.layout = QtGui.QFormLayout(self)
+ self.layout = QtWidgets.QFormLayout(self)
# Control the first signal
- self.freq1Edit = QtGui.QLineEdit(self)
+ self.freq1Edit = QtWidgets.QLineEdit(self)
self.freq1Edit.setMinimumWidth(100)
self.layout.addRow("Signal 1 Frequency:", self.freq1Edit)
- self.connect(self.freq1Edit, QtCore.SIGNAL("editingFinished()"),
- self.freq1EditText)
+ self.freq1Edit.editingFinished.connect(self.freq1EditText)
- self.amp1Edit = QtGui.QLineEdit(self)
+ self.amp1Edit = QtWidgets.QLineEdit(self)
self.amp1Edit.setMinimumWidth(100)
self.layout.addRow("Signal 1 Amplitude:", self.amp1Edit)
- self.connect(self.amp1Edit, QtCore.SIGNAL("editingFinished()"),
- self.amp1EditText)
+ self.amp1Edit.editingFinished.connect(self.amp1EditText)
# Control the second signal
- self.freq2Edit = QtGui.QLineEdit(self)
+ self.freq2Edit = QtWidgets.QLineEdit(self)
self.freq2Edit.setMinimumWidth(100)
self.layout.addRow("Signal 2 Frequency:", self.freq2Edit)
- self.connect(self.freq2Edit, QtCore.SIGNAL("editingFinished()"),
- self.freq2EditText)
+ self.freq2Edit.editingFinished.connect(self.freq2EditText)
- self.amp2Edit = QtGui.QLineEdit(self)
+ self.amp2Edit = QtWidgets.QLineEdit(self)
self.amp2Edit.setMinimumWidth(100)
self.layout.addRow("Signal 2 Amplitude:", self.amp2Edit)
- self.connect(self.amp2Edit, QtCore.SIGNAL("editingFinished()"),
- self.amp2EditText)
+ self.amp2Edit.editingFinished.connect(self.amp2EditText)
- self.quit = QtGui.QPushButton('Close', self)
+ self.quit = QtWidgets.QPushButton('Close', self)
self.quit.setMinimumWidth(100)
self.layout.addWidget(self.quit)
- self.connect(self.quit, QtCore.SIGNAL('clicked()'),
- QtGui.qApp, QtCore.SLOT('quit()'))
+ self.quit.clicked.connect(QtWidgets.qApp.quit)
def attach_signal1(self, signal):
self.signal1 = signal
- self.freq1Edit.setText(QtCore.QString("%1").arg(self.signal1.frequency()))
- self.amp1Edit.setText(QtCore.QString("%1").arg(self.signal1.amplitude()))
+ self.freq1Edit.setText(("{0}").format(self.signal1.frequency()))
+ self.amp1Edit.setText(("{0}").format(self.signal1.amplitude()))
def attach_signal2(self, signal):
self.signal2 = signal
- self.freq2Edit.setText(QtCore.QString("%1").arg(self.signal2.frequency()))
- self.amp2Edit.setText(QtCore.QString("%1").arg(self.signal2.amplitude()))
+ self.freq2Edit.setText(("{0}").format(self.signal2.frequency()))
+ self.amp2Edit.setText(("{0}").format(self.signal2.amplitude()))
def freq1EditText(self):
try:
@@ -150,7 +145,7 @@ class my_top_block(gr.top_block):
npts = 2048
- self.qapp = QtGui.QApplication(sys.argv)
+ self.qapp = QtWidgets.QApplication(sys.argv)
ss = open(gr.prefix() + '/share/gnuradio/themes/dark.qss')
sstext = ss.read()
ss.close()
@@ -179,8 +174,8 @@ class my_top_block(gr.top_block):
pyQt = self.snk1.pyqwidget()
# Wrap the pointer as a PyQt SIP object
- # This can now be manipulated as a PyQt4.QtGui.QWidget
- pyWin = sip.wrapinstance(pyQt, QtGui.QWidget)
+ # This can now be manipulated as a PyQt5.QtWidgets.QWidget
+ pyWin = sip.wrapinstance(pyQt, QtWidgets.QWidget)
#pyWin.show()
self.main_box = dialog_box(pyWin, self.ctrl_win)
diff --git a/gr-qtgui/examples/pyqt_freq_f.py b/gr-qtgui/examples/pyqt_freq_f.py
index 668b54d249..d7d389b736 100755
--- a/gr-qtgui/examples/pyqt_freq_f.py
+++ b/gr-qtgui/examples/pyqt_freq_f.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
#
-# Copyright 2012 Free Software Foundation, Inc.
+# Copyright 2012,2015 Free Software Foundation, Inc.
#
# This file is part of GNU Radio
#
@@ -26,10 +26,10 @@ import sys
try:
from gnuradio import qtgui
- from PyQt4 import QtGui, QtCore
+ from PyQt5 import QtWidgets, Qt
import sip
except ImportError:
- sys.stderr.write("Error: Program requires PyQt4 and gr-qtgui.\n")
+ sys.stderr.write("Error: Program requires PyQt5 and gr-qtgui.\n")
sys.exit(1)
try:
@@ -39,71 +39,66 @@ except ImportError:
sys.exit(1)
-class dialog_box(QtGui.QWidget):
+class dialog_box(QtWidgets.QWidget):
def __init__(self, display, control):
- QtGui.QWidget.__init__(self, None)
+ QtWidgets.QWidget.__init__(self, None)
self.setWindowTitle('PyQt Test GUI')
- self.boxlayout = QtGui.QBoxLayout(QtGui.QBoxLayout.LeftToRight, self)
+ self.boxlayout = QtWidgets.QBoxLayout(QtWidgets.QBoxLayout.LeftToRight, self)
self.boxlayout.addWidget(display, 1)
self.boxlayout.addWidget(control)
self.resize(800, 500)
-class control_box(QtGui.QWidget):
+class control_box(QtWidgets.QWidget):
def __init__(self, parent=None):
- QtGui.QWidget.__init__(self, parent)
+ QtWidgets.QWidget.__init__(self, parent)
self.setWindowTitle('Control Panel')
self.setToolTip('Control the signals')
- QtGui.QToolTip.setFont(QtGui.QFont('OldEnglish', 10))
+ QtWidgets.QToolTip.setFont(Qt.QFont('OldEnglish', 10))
- self.layout = QtGui.QFormLayout(self)
+ self.layout = QtWidgets.QFormLayout(self)
# Control the first signal
- self.freq1Edit = QtGui.QLineEdit(self)
+ self.freq1Edit = QtWidgets.QLineEdit(self)
self.freq1Edit.setMinimumWidth(100)
self.layout.addRow("Signal 1 Frequency:", self.freq1Edit)
- self.connect(self.freq1Edit, QtCore.SIGNAL("editingFinished()"),
- self.freq1EditText)
+ self.freq1Edit.editingFinished.connect(self.freq1EditText)
- self.amp1Edit = QtGui.QLineEdit(self)
+ self.amp1Edit = QtWidgets.QLineEdit(self)
self.amp1Edit.setMinimumWidth(100)
self.layout.addRow("Signal 1 Amplitude:", self.amp1Edit)
- self.connect(self.amp1Edit, QtCore.SIGNAL("editingFinished()"),
- self.amp1EditText)
+ self.amp1Edit.editingFinished.connect(self.amp1EditText)
# Control the second signal
- self.freq2Edit = QtGui.QLineEdit(self)
+ self.freq2Edit = QtWidgets.QLineEdit(self)
self.freq2Edit.setMinimumWidth(100)
self.layout.addRow("Signal 2 Frequency:", self.freq2Edit)
- self.connect(self.freq2Edit, QtCore.SIGNAL("editingFinished()"),
- self.freq2EditText)
+ self.freq2Edit.editingFinished.connect(self.freq2EditText)
- self.amp2Edit = QtGui.QLineEdit(self)
+ self.amp2Edit = QtWidgets.QLineEdit(self)
self.amp2Edit.setMinimumWidth(100)
self.layout.addRow("Signal 2 Amplitude:", self.amp2Edit)
- self.connect(self.amp2Edit, QtCore.SIGNAL("editingFinished()"),
- self.amp2EditText)
+ self.amp2Edit.editingFinished.connect(self.amp2EditText)
- self.quit = QtGui.QPushButton('Close', self)
+ self.quit = QtWidgets.QPushButton('Close', self)
self.quit.setMinimumWidth(100)
self.layout.addWidget(self.quit)
- self.connect(self.quit, QtCore.SIGNAL('clicked()'),
- QtGui.qApp, QtCore.SLOT('quit()'))
+ self.quit.clicked.connect(QtWidgets.qApp.quit)
def attach_signal1(self, signal):
self.signal1 = signal
- self.freq1Edit.setText(QtCore.QString("%1").arg(self.signal1.frequency()))
- self.amp1Edit.setText(QtCore.QString("%1").arg(self.signal1.amplitude()))
+ self.freq1Edit.setText(("{0}").format(self.signal1.frequency()))
+ self.amp1Edit.setText(("{0}").format(self.signal1.amplitude()))
def attach_signal2(self, signal):
self.signal2 = signal
- self.freq2Edit.setText(QtCore.QString("%1").arg(self.signal2.frequency()))
- self.amp2Edit.setText(QtCore.QString("%1").arg(self.signal2.amplitude()))
+ self.freq2Edit.setText(("{0}").format(self.signal2.frequency()))
+ self.amp2Edit.setText(("{0}").format(self.signal2.amplitude()))
def freq1EditText(self):
try:
@@ -145,7 +140,7 @@ class my_top_block(gr.top_block):
npts = 2048
- self.qapp = QtGui.QApplication(sys.argv)
+ self.qapp = QtWidgets.QApplication(sys.argv)
src1 = analog.sig_source_f(Rs, analog.GR_SIN_WAVE, f1, 0.1, 0)
src2 = analog.sig_source_f(Rs, analog.GR_SIN_WAVE, f2, 0.1, 0)
@@ -169,8 +164,8 @@ class my_top_block(gr.top_block):
pyQt = self.snk1.pyqwidget()
# Wrap the pointer as a PyQt SIP object
- # This can now be manipulated as a PyQt4.QtGui.QWidget
- pyWin = sip.wrapinstance(pyQt, QtGui.QWidget)
+ # This can now be manipulated as a PyQt5.QtWidgets.QWidget
+ pyWin = sip.wrapinstance(pyQt, QtWidgets.QWidget)
#pyWin.show()
self.main_box = dialog_box(pyWin, self.ctrl_win)
@@ -181,4 +176,3 @@ if __name__ == "__main__":
tb.start()
tb.qapp.exec_()
tb.stop()
-
diff --git a/gr-qtgui/examples/pyqt_histogram_f.py b/gr-qtgui/examples/pyqt_histogram_f.py
index a960275f41..81f7b9d40b 100755
--- a/gr-qtgui/examples/pyqt_histogram_f.py
+++ b/gr-qtgui/examples/pyqt_histogram_f.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
#
-# Copyright 2013 Free Software Foundation, Inc.
+# Copyright 2013,2015 Free Software Foundation, Inc.
#
# This file is part of GNU Radio
#
@@ -26,10 +26,10 @@ import sys
try:
from gnuradio import qtgui
- from PyQt4 import QtGui, QtCore
+ from PyQt5 import QtWidgets, Qt
import sip
except ImportError:
- sys.stderr.write("Error: Program requires PyQt4 and gr-qtgui.\n")
+ sys.stderr.write("Error: Program requires PyQt5 and gr-qtgui.\n")
sys.exit(1)
try:
@@ -38,87 +38,80 @@ except ImportError:
sys.stderr.write("Error: Program requires gr-analog.\n")
sys.exit(1)
-class dialog_box(QtGui.QWidget):
+class dialog_box(QtWidgets.QWidget):
def __init__(self, display, control):
- QtGui.QWidget.__init__(self, None)
+ QtWidgets.QWidget.__init__(self, None)
self.setWindowTitle('PyQt Test GUI')
- self.boxlayout = QtGui.QBoxLayout(QtGui.QBoxLayout.LeftToRight, self)
+ self.boxlayout = QtWidgets.QBoxLayout(QtWidgets.QBoxLayout.LeftToRight, self)
self.boxlayout.addWidget(display, 1)
self.boxlayout.addWidget(control)
self.resize(800, 500)
-class control_box(QtGui.QWidget):
+class control_box(QtWidgets.QWidget):
def __init__(self, snk, parent=None):
- QtGui.QWidget.__init__(self, parent)
+ QtWidgets.QWidget.__init__(self, parent)
self.setWindowTitle('Control Panel')
self.snk = snk
self.setToolTip('Control the signals')
- QtGui.QToolTip.setFont(QtGui.QFont('OldEnglish', 10))
+ QtWidgets.QToolTip.setFont(Qt.QFont('OldEnglish', 10))
- self.layout = QtGui.QFormLayout(self)
+ self.layout = QtWidgets.QFormLayout(self)
# Control the first signal
- self.freq1Edit = QtGui.QLineEdit(self)
+ self.freq1Edit = QtWidgets.QLineEdit(self)
self.freq1Edit.setMinimumWidth(100)
self.layout.addRow("Sine Frequency:", self.freq1Edit)
- self.connect(self.freq1Edit, QtCore.SIGNAL("editingFinished()"),
- self.freq1EditText)
+ self.freq1Edit.editingFinished.connect(self.freq1EditText)
- self.amp1Edit = QtGui.QLineEdit(self)
+ self.amp1Edit = QtWidgets.QLineEdit(self)
self.amp1Edit.setMinimumWidth(100)
self.layout.addRow("Sine Amplitude:", self.amp1Edit)
- self.connect(self.amp1Edit, QtCore.SIGNAL("editingFinished()"),
- self.amp1EditText)
+ self.amp1Edit.editingFinished.connect(self.amp1EditText)
# Control the second signal
- self.amp2Edit = QtGui.QLineEdit(self)
+ self.amp2Edit = QtWidgets.QLineEdit(self)
self.amp2Edit.setMinimumWidth(100)
self.layout.addRow("Noise Amplitude:", self.amp2Edit)
- self.connect(self.amp2Edit, QtCore.SIGNAL("editingFinished()"),
- self.amp2EditText)
+ self.amp2Edit.editingFinished.connect(self.amp2EditText)
# Control the histogram
- self.hist_npts = QtGui.QLineEdit(self)
+ self.hist_npts = QtWidgets.QLineEdit(self)
self.hist_npts.setMinimumWidth(100)
- self.hist_npts.setValidator(QtGui.QIntValidator(0, 8191))
+ self.hist_npts.setValidator(Qt.QIntValidator(0, 8191))
self.hist_npts.setText("{0}".format(self.snk.nsamps()))
self.layout.addRow("Number of Points:", self.hist_npts)
- self.connect(self.hist_npts, QtCore.SIGNAL("editingFinished()"),
- self.set_nsamps)
+ self.hist_npts.editingFinished.connect(self.set_nsamps)
- self.hist_bins = QtGui.QLineEdit(self)
+ self.hist_bins = QtWidgets.QLineEdit(self)
self.hist_bins.setMinimumWidth(100)
- self.hist_bins.setValidator(QtGui.QIntValidator(0, 1000))
+ self.hist_bins.setValidator(Qt.QIntValidator(0, 1000))
self.hist_bins.setText("{0}".format(self.snk.bins()))
self.layout.addRow("Number of Bins:", self.hist_bins)
- self.connect(self.hist_bins, QtCore.SIGNAL("editingFinished()"),
- self.set_bins)
+ self.hist_bins.editingFinished.connect(self.set_bins)
- self.hist_auto = QtGui.QPushButton("scale", self)
+ self.hist_auto = QtWidgets.QPushButton("scale", self)
self.layout.addRow("Autoscale X:", self.hist_auto)
- self.connect(self.hist_auto, QtCore.SIGNAL("pressed()"),
- self.autoscalex)
+ self.hist_auto.pressed.connect(self.autoscalex)
- self.quit = QtGui.QPushButton('Close', self)
+ self.quit = QtWidgets.QPushButton('Close', self)
self.quit.setMinimumWidth(100)
self.layout.addWidget(self.quit)
- self.connect(self.quit, QtCore.SIGNAL('clicked()'),
- QtGui.qApp, QtCore.SLOT('quit()'))
+ self.quit.clicked.connect(QtWidgets.qApp.quit)
def attach_signal1(self, signal):
self.signal1 = signal
- self.freq1Edit.setText(QtCore.QString("%1").arg(self.signal1.frequency()))
- self.amp1Edit.setText(QtCore.QString("%1").arg(self.signal1.amplitude()))
+ self.freq1Edit.setText(("{0}").format(self.signal1.frequency()))
+ self.amp1Edit.setText(("{0}").format(self.signal1.amplitude()))
def attach_signal2(self, signal):
self.signal2 = signal
- self.amp2Edit.setText(QtCore.QString("%1").arg(self.signal2.amplitude()))
+ self.amp2Edit.setText(("{0}").format(self.signal2.amplitude()))
def freq1EditText(self):
try:
@@ -164,7 +157,7 @@ class my_top_block(gr.top_block):
npts = 2048
- self.qapp = QtGui.QApplication(sys.argv)
+ self.qapp = QtWidgets.QApplication(sys.argv)
src1 = analog.sig_source_f(Rs, analog.GR_SIN_WAVE, f1, 0, 0)
src2 = analog.noise_source_f(analog.GR_GAUSSIAN, 1)
@@ -172,6 +165,7 @@ class my_top_block(gr.top_block):
thr = blocks.throttle(gr.sizeof_float, 100*npts)
self.snk1 = qtgui.histogram_sink_f(npts, 200, -5, 5,
"Histogram")
+ self.snk1.disable_legend()
self.connect(src1, (src,0))
self.connect(src2, (src,1))
@@ -185,8 +179,8 @@ class my_top_block(gr.top_block):
pyQt = self.snk1.pyqwidget()
# Wrap the pointer as a PyQt SIP object
- # This can now be manipulated as a PyQt4.QtGui.QWidget
- pyWin = sip.wrapinstance(pyQt, QtGui.QWidget)
+ # This can now be manipulated as a PyQt5.QtWidgets.QWidget
+ pyWin = sip.wrapinstance(pyQt, QtWidgets.QWidget)
#pyWin.show()
self.main_box = dialog_box(pyWin, self.ctrl_win)
@@ -197,4 +191,3 @@ if __name__ == "__main__":
tb.start()
tb.qapp.exec_()
tb.stop()
-
diff --git a/gr-qtgui/examples/pyqt_time_c.py b/gr-qtgui/examples/pyqt_time_c.py
index 0162bb6ffc..b595c8ff85 100755
--- a/gr-qtgui/examples/pyqt_time_c.py
+++ b/gr-qtgui/examples/pyqt_time_c.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
#
-# Copyright 2011,2012 Free Software Foundation, Inc.
+# Copyright 2011,2012,2015 Free Software Foundation, Inc.
#
# This file is part of GNU Radio
#
@@ -26,10 +26,10 @@ import sys
try:
from gnuradio import qtgui
- from PyQt4 import QtGui, QtCore
+ from PyQt5 import QtWidgets, Qt
import sip
except ImportError:
- sys.stderr.write("Error: Program requires PyQt4 and gr-qtgui.\n")
+ sys.stderr.write("Error: Program requires PyQt5 and gr-qtgui.\n")
sys.exit(1)
try:
@@ -44,71 +44,66 @@ except ImportError:
sys.stderr.write("Error: Program requires gr-channels.\n")
sys.exit(1)
-class dialog_box(QtGui.QWidget):
+class dialog_box(QtWidgets.QWidget):
def __init__(self, display, control):
- QtGui.QWidget.__init__(self, None)
+ QtWidgets.QWidget.__init__(self, None)
self.setWindowTitle('PyQt Test GUI')
- self.boxlayout = QtGui.QBoxLayout(QtGui.QBoxLayout.LeftToRight, self)
+ self.boxlayout = QtWidgets.QBoxLayout(QtWidgets.QBoxLayout.LeftToRight, self)
self.boxlayout.addWidget(display, 1)
self.boxlayout.addWidget(control)
self.resize(800, 500)
-class control_box(QtGui.QWidget):
+class control_box(QtWidgets.QWidget):
def __init__(self, parent=None):
- QtGui.QWidget.__init__(self, parent)
+ QtWidgets.QWidget.__init__(self, parent)
self.setWindowTitle('Control Panel')
self.setToolTip('Control the signals')
- QtGui.QToolTip.setFont(QtGui.QFont('OldEnglish', 10))
+ QtWidgets.QToolTip.setFont(Qt.QFont('OldEnglish', 10))
- self.layout = QtGui.QFormLayout(self)
+ self.layout = QtWidgets.QFormLayout(self)
# Control the first signal
- self.freq1Edit = QtGui.QLineEdit(self)
+ self.freq1Edit = QtWidgets.QLineEdit(self)
self.freq1Edit.setMinimumWidth(100)
self.layout.addRow("Signal 1 Frequency:", self.freq1Edit)
- self.connect(self.freq1Edit, QtCore.SIGNAL("editingFinished()"),
- self.freq1EditText)
+ self.freq1Edit.editingFinished.connect(self.freq1EditText)
- self.amp1Edit = QtGui.QLineEdit(self)
+ self.amp1Edit = QtWidgets.QLineEdit(self)
self.amp1Edit.setMinimumWidth(100)
self.layout.addRow("Signal 1 Amplitude:", self.amp1Edit)
- self.connect(self.amp1Edit, QtCore.SIGNAL("editingFinished()"),
- self.amp1EditText)
+ self.amp1Edit.editingFinished.connect(self.amp1EditText)
# Control the second signal
- self.freq2Edit = QtGui.QLineEdit(self)
+ self.freq2Edit = QtWidgets.QLineEdit(self)
self.freq2Edit.setMinimumWidth(100)
self.layout.addRow("Signal 2 Frequency:", self.freq2Edit)
- self.connect(self.freq2Edit, QtCore.SIGNAL("editingFinished()"),
- self.freq2EditText)
+ self.freq2Edit.editingFinished.connect(self.freq2EditText)
- self.amp2Edit = QtGui.QLineEdit(self)
+ self.amp2Edit = QtWidgets.QLineEdit(self)
self.amp2Edit.setMinimumWidth(100)
self.layout.addRow("Signal 2 Amplitude:", self.amp2Edit)
- self.connect(self.amp2Edit, QtCore.SIGNAL("editingFinished()"),
- self.amp2EditText)
+ self.amp2Edit.editingFinished.connect(self.amp2EditText)
- self.quit = QtGui.QPushButton('Close', self)
+ self.quit = QtWidgets.QPushButton('Close', self)
self.quit.setMinimumWidth(100)
self.layout.addWidget(self.quit)
- self.connect(self.quit, QtCore.SIGNAL('clicked()'),
- QtGui.qApp, QtCore.SLOT('quit()'))
+ self.quit.clicked.connect(QtWidgets.qApp.quit)
def attach_signal1(self, signal):
self.signal1 = signal
- self.freq1Edit.setText(QtCore.QString("%1").arg(self.signal1.frequency()))
- self.amp1Edit.setText(QtCore.QString("%1").arg(self.signal1.amplitude()))
+ self.freq1Edit.setText(("{0}").format(self.signal1.frequency()))
+ self.amp1Edit.setText(("{0}").format(self.signal1.amplitude()))
def attach_signal2(self, signal):
self.signal2 = signal
- self.freq2Edit.setText(QtCore.QString("%1").arg(self.signal2.frequency()))
- self.amp2Edit.setText(QtCore.QString("%1").arg(self.signal2.amplitude()))
+ self.freq2Edit.setText(("{0}").format(self.signal2.frequency()))
+ self.amp2Edit.setText(("{0}").format(self.signal2.amplitude()))
def freq1EditText(self):
try:
@@ -150,7 +145,7 @@ class my_top_block(gr.top_block):
npts = 2048
- self.qapp = QtGui.QApplication(sys.argv)
+ self.qapp = QtWidgets.QApplication(sys.argv)
ss = open(gr.prefix() + '/share/gnuradio/themes/dark.qss')
sstext = ss.read()
ss.close()
@@ -178,13 +173,14 @@ class my_top_block(gr.top_block):
pyQt = self.snk1.pyqwidget()
# Wrap the pointer as a PyQt SIP object
- # This can now be manipulated as a PyQt4.QtGui.QWidget
- pyWin = sip.wrapinstance(pyQt, QtGui.QWidget)
+ # This can now be manipulated as a PyQt5.QtWidgets.QWidget
+ pyWin = sip.wrapinstance(pyQt, QtWidgets.QWidget)
# Example of using signal/slot to set the title of a curve
- pyWin.connect(pyWin, QtCore.SIGNAL("setLineLabel(int, QString)"),
- pyWin, QtCore.SLOT("setLineLabel(int, QString)"))
- pyWin.emit(QtCore.SIGNAL("setLineLabel(int, QString)"), 0, "Re{sum}")
+ # FIXME: update for Qt5
+ #pyWin.setLineLabel.connect(pyWin.setLineLabel)
+ #pyWin.emit(QtCore.SIGNAL("setLineLabel(int, QString)"), 0, "Re{sum}")
+ self.snk1.set_line_label(0, "Re{Sum}")
self.snk1.set_line_label(1, "Im{Sum}")
#self.snk1.set_line_label(2, "Re{src1}")
#self.snk1.set_line_label(3, "Im{src1}")
diff --git a/gr-qtgui/examples/pyqt_time_f.py b/gr-qtgui/examples/pyqt_time_f.py
index b733a5a809..3689ebff54 100755
--- a/gr-qtgui/examples/pyqt_time_f.py
+++ b/gr-qtgui/examples/pyqt_time_f.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
#
-# Copyright 2011,2012 Free Software Foundation, Inc.
+# Copyright 2011,2012,2015 Free Software Foundation, Inc.
#
# This file is part of GNU Radio
#
@@ -26,10 +26,10 @@ import sys
try:
from gnuradio import qtgui
- from PyQt4 import QtGui, QtCore
+ from PyQt5 import QtWidgets, Qt
import sip
except ImportError:
- sys.stderr.write("Error: Program requires PyQt4 and gr-qtgui.\n")
+ sys.stderr.write("Error: Program requires PyQt5 and gr-qtgui.\n")
sys.exit(1)
try:
@@ -38,71 +38,66 @@ except ImportError:
sys.stderr.write("Error: Program requires gr-analog.\n")
sys.exit(1)
-class dialog_box(QtGui.QWidget):
+class dialog_box(QtWidgets.QWidget):
def __init__(self, display, control):
- QtGui.QWidget.__init__(self, None)
+ QtWidgets.QWidget.__init__(self, None)
self.setWindowTitle('PyQt Test GUI')
- self.boxlayout = QtGui.QBoxLayout(QtGui.QBoxLayout.LeftToRight, self)
+ self.boxlayout = QtWidgets.QBoxLayout(QtWidgets.QBoxLayout.LeftToRight, self)
self.boxlayout.addWidget(display, 1)
self.boxlayout.addWidget(control)
self.resize(800, 500)
-class control_box(QtGui.QWidget):
+class control_box(QtWidgets.QWidget):
def __init__(self, parent=None):
- QtGui.QWidget.__init__(self, parent)
+ QtWidgets.QWidget.__init__(self, parent)
self.setWindowTitle('Control Panel')
self.setToolTip('Control the signals')
- QtGui.QToolTip.setFont(QtGui.QFont('OldEnglish', 10))
+ QtWidgets.QToolTip.setFont(Qt.QFont('OldEnglish', 10))
- self.layout = QtGui.QFormLayout(self)
+ self.layout = QtWidgets.QFormLayout(self)
# Control the first signal
- self.freq1Edit = QtGui.QLineEdit(self)
+ self.freq1Edit = QtWidgets.QLineEdit(self)
self.freq1Edit.setMinimumWidth(100)
self.layout.addRow("Signal 1 Frequency:", self.freq1Edit)
- self.connect(self.freq1Edit, QtCore.SIGNAL("editingFinished()"),
- self.freq1EditText)
+ self.freq1Edit.editingFinished.connect(self.freq1EditText)
- self.amp1Edit = QtGui.QLineEdit(self)
+ self.amp1Edit = QtWidgets.QLineEdit(self)
self.amp1Edit.setMinimumWidth(100)
self.layout.addRow("Signal 1 Amplitude:", self.amp1Edit)
- self.connect(self.amp1Edit, QtCore.SIGNAL("editingFinished()"),
- self.amp1EditText)
+ self.amp1Edit.editingFinished.connect(self.amp1EditText)
# Control the second signal
- self.freq2Edit = QtGui.QLineEdit(self)
+ self.freq2Edit = QtWidgets.QLineEdit(self)
self.freq2Edit.setMinimumWidth(100)
self.layout.addRow("Signal 2 Frequency:", self.freq2Edit)
- self.connect(self.freq2Edit, QtCore.SIGNAL("editingFinished()"),
- self.freq2EditText)
+ self.freq2Edit.editingFinished.connect(self.freq2EditText)
- self.amp2Edit = QtGui.QLineEdit(self)
+ self.amp2Edit = QtWidgets.QLineEdit(self)
self.amp2Edit.setMinimumWidth(100)
self.layout.addRow("Signal 2 Amplitude:", self.amp2Edit)
- self.connect(self.amp2Edit, QtCore.SIGNAL("editingFinished()"),
- self.amp2EditText)
+ self.amp2Edit.editingFinished.connect(self.amp2EditText)
- self.quit = QtGui.QPushButton('Close', self)
+ self.quit = QtWidgets.QPushButton('Close', self)
self.quit.setMinimumWidth(100)
self.layout.addWidget(self.quit)
- self.connect(self.quit, QtCore.SIGNAL('clicked()'),
- QtGui.qApp, QtCore.SLOT('quit()'))
+ self.quit.clicked.connect(QtWidgets.qApp.quit)
def attach_signal1(self, signal):
self.signal1 = signal
- self.freq1Edit.setText(QtCore.QString("%1").arg(self.signal1.frequency()))
- self.amp1Edit.setText(QtCore.QString("%1").arg(self.signal1.amplitude()))
+ self.freq1Edit.setText(("{0}").format(self.signal1.frequency()))
+ self.amp1Edit.setText(("{0}").format(self.signal1.amplitude()))
def attach_signal2(self, signal):
self.signal2 = signal
- self.freq2Edit.setText(QtCore.QString("%1").arg(self.signal2.frequency()))
- self.amp2Edit.setText(QtCore.QString("%1").arg(self.signal2.amplitude()))
+ self.freq2Edit.setText(("{0}").format(self.signal2.frequency()))
+ self.amp2Edit.setText(("{0}").format(self.signal2.amplitude()))
def freq1EditText(self):
try:
@@ -144,7 +139,7 @@ class my_top_block(gr.top_block):
npts = 2048
- self.qapp = QtGui.QApplication(sys.argv)
+ self.qapp = QtWidgets.QApplication(sys.argv)
src1 = analog.sig_source_f(Rs, analog.GR_SIN_WAVE, f1, 0.1, 0)
src2 = analog.sig_source_f(Rs, analog.GR_SIN_WAVE, f2, 0.1, 0)
@@ -171,13 +166,14 @@ class my_top_block(gr.top_block):
pyQt = self.snk1.pyqwidget()
# Wrap the pointer as a PyQt SIP object
- # This can now be manipulated as a PyQt4.QtGui.QWidget
- pyWin = sip.wrapinstance(pyQt, QtGui.QWidget)
+ # This can now be manipulated as a PyQt5.QtWidgets.QWidget
+ pyWin = sip.wrapinstance(pyQt, QtWidgets.QWidget)
# Example of using signal/slot to set the title of a curve
- pyWin.connect(pyWin, QtCore.SIGNAL("setLineLabel(int, QString)"),
- pyWin, QtCore.SLOT("setLineLabel(int, QString)"))
- pyWin.emit(QtCore.SIGNAL("setLineLabel(int, QString)"), 0, "sum")
+ # FIXME: update for Qt5
+ #pyWin.setLineLabel.connect(pyWin.setLineLabel)
+ #pyWin.emit(QtCore.SIGNAL("setLineLabel(int, QString)"), 0, "Re{sum}")
+ self.snk1.set_line_label(0, "Re{sum}")
self.snk1.set_line_label(1, "src1")
self.snk1.set_line_label(2, "src2")
@@ -193,4 +189,3 @@ if __name__ == "__main__":
tb.start()
tb.qapp.exec_()
tb.stop()
-
diff --git a/gr-qtgui/examples/pyqt_time_raster_b.py b/gr-qtgui/examples/pyqt_time_raster_b.py
index 4cad9de601..7a94400283 100755
--- a/gr-qtgui/examples/pyqt_time_raster_b.py
+++ b/gr-qtgui/examples/pyqt_time_raster_b.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
#
-# Copyright 2012,2013 Free Software Foundation, Inc.
+# Copyright 2012,2013,2015 Free Software Foundation, Inc.
#
# This file is part of GNU Radio
#
@@ -27,18 +27,18 @@ import sys
try:
from gnuradio import qtgui
- from PyQt4 import QtGui, QtCore
+ from PyQt5 import QtWidgets, Qt
import sip
except ImportError:
- print "Error: Program requires PyQt4 and gr-qtgui."
+ print "Error: Program requires PyQt5 and gr-qtgui."
sys.exit(1)
-class dialog_box(QtGui.QWidget):
+class dialog_box(QtWidgets.QWidget):
def __init__(self, display):
- QtGui.QWidget.__init__(self, None)
+ QtWidgets.QWidget.__init__(self, None)
self.setWindowTitle('PyQt Test GUI')
- self.boxlayout = QtGui.QBoxLayout(QtGui.QBoxLayout.LeftToRight, self)
+ self.boxlayout = QtWidgets.QBoxLayout(QtWidgets.QBoxLayout.LeftToRight, self)
self.boxlayout.addWidget(display, 1)
self.resize(800, 500)
@@ -47,7 +47,7 @@ class my_top_block(gr.top_block):
def __init__(self):
gr.top_block.__init__(self)
- self.qapp = QtGui.QApplication(sys.argv)
+ self.qapp = QtWidgets.QApplication(sys.argv)
data0 = 10*[0,] + 40*[1,0] + 10*[0,]
data0 += 10*[0,] + 40*[0,1] + 10*[0,]
@@ -73,8 +73,8 @@ class my_top_block(gr.top_block):
pyQt = self.snk1.pyqwidget()
# Wrap the pointer as a PyQt SIP object
- # This can now be manipulated as a PyQt4.QtGui.QWidget
- pyWin = sip.wrapinstance(pyQt, QtGui.QWidget)
+ # This can now be manipulated as a PyQt5.QtWidgets.QWidget
+ pyWin = sip.wrapinstance(pyQt, QtWidgets.QWidget)
self.main_box = dialog_box(pyWin)
self.main_box.show()
@@ -84,4 +84,3 @@ if __name__ == "__main__":
tb.start()
tb.qapp.exec_()
tb.stop()
-
diff --git a/gr-qtgui/examples/pyqt_time_raster_f.py b/gr-qtgui/examples/pyqt_time_raster_f.py
index c5261520db..0f9de94bcb 100755
--- a/gr-qtgui/examples/pyqt_time_raster_f.py
+++ b/gr-qtgui/examples/pyqt_time_raster_f.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
#
-# Copyright 2012,2013 Free Software Foundation, Inc.
+# Copyright 2012,2013,2015 Free Software Foundation, Inc.
#
# This file is part of GNU Radio
#
@@ -26,18 +26,18 @@ import sys
try:
from gnuradio import qtgui
- from PyQt4 import QtGui, QtCore
+ from PyQt5 import QtWidgets, Qt
import sip
except ImportError:
- print "Error: Program requires PyQt4 and gr-qtgui."
+ print "Error: Program requires PyQt5 and gr-qtgui."
sys.exit(1)
-class dialog_box(QtGui.QWidget):
+class dialog_box(QtWidgets.QWidget):
def __init__(self, display):
- QtGui.QWidget.__init__(self, None)
+ QtWidgets.QWidget.__init__(self, None)
self.setWindowTitle('PyQt Test GUI')
- self.boxlayout = QtGui.QBoxLayout(QtGui.QBoxLayout.LeftToRight, self)
+ self.boxlayout = QtWidgets.QBoxLayout(QtWidgets.QBoxLayout.LeftToRight, self)
self.boxlayout.addWidget(display, 1)
self.resize(800, 500)
@@ -46,7 +46,7 @@ class my_top_block(gr.top_block):
def __init__(self):
gr.top_block.__init__(self)
- self.qapp = QtGui.QApplication(sys.argv)
+ self.qapp = QtWidgets.QApplication(sys.argv)
data0 = 10*[0,] + 40*[1,0] + 10*[0,]
data0 += 10*[0,] + 40*[0,1] + 10*[0,]
@@ -72,8 +72,8 @@ class my_top_block(gr.top_block):
pyQt = self.snk1.pyqwidget()
# Wrap the pointer as a PyQt SIP object
- # This can now be manipulated as a PyQt4.QtGui.QWidget
- pyWin = sip.wrapinstance(pyQt, QtGui.QWidget)
+ # This can now be manipulated as a PyQt5.QtWidgets.QWidget
+ pyWin = sip.wrapinstance(pyQt, QtWidgets.QWidget)
self.main_box = dialog_box(pyWin)
self.main_box.show()
@@ -83,4 +83,3 @@ if __name__ == "__main__":
tb.start()
tb.qapp.exec_()
tb.stop()
-
diff --git a/gr-qtgui/examples/pyqt_waterfall_c.py b/gr-qtgui/examples/pyqt_waterfall_c.py
index 8ec62fc1e2..3f7119f97f 100755
--- a/gr-qtgui/examples/pyqt_waterfall_c.py
+++ b/gr-qtgui/examples/pyqt_waterfall_c.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
#
-# Copyright 2012 Free Software Foundation, Inc.
+# Copyright 2012,2015 Free Software Foundation, Inc.
#
# This file is part of GNU Radio
#
@@ -26,7 +26,7 @@ import sys
try:
from gnuradio import qtgui
- from PyQt4 import QtGui, QtCore
+ from PyQt5 import QtWidgets, Qt
import sip
except ImportError:
sys.stderr.write("Error: Program requires PyQt4 and gr-qtgui.\n")
@@ -44,71 +44,66 @@ except ImportError:
sys.stderr.write("Error: Program requires gr-channels.\n")
sys.exit(1)
-class dialog_box(QtGui.QWidget):
+class dialog_box(QtWidgets.QWidget):
def __init__(self, display, control):
- QtGui.QWidget.__init__(self, None)
+ QtWidgets.QWidget.__init__(self, None)
self.setWindowTitle('PyQt Test GUI')
- self.boxlayout = QtGui.QBoxLayout(QtGui.QBoxLayout.LeftToRight, self)
+ self.boxlayout = QtWidgets.QBoxLayout(QtWidgets.QBoxLayout.LeftToRight, self)
self.boxlayout.addWidget(display, 1)
self.boxlayout.addWidget(control)
self.resize(800, 500)
-class control_box(QtGui.QWidget):
+class control_box(QtWidgets.QWidget):
def __init__(self, parent=None):
- QtGui.QWidget.__init__(self, parent)
+ QtWidgets.QWidget.__init__(self, parent)
self.setWindowTitle('Control Panel')
self.setToolTip('Control the signals')
- QtGui.QToolTip.setFont(QtGui.QFont('OldEnglish', 10))
+ QtWidgets.QToolTip.setFont(Qt.QFont('OldEnglish', 10))
- self.layout = QtGui.QFormLayout(self)
+ self.layout = QtWidgets.QFormLayout(self)
# Control the first signal
- self.freq1Edit = QtGui.QLineEdit(self)
+ self.freq1Edit = QtWidgets.QLineEdit(self)
self.freq1Edit.setMinimumWidth(100)
self.layout.addRow("Signal 1 Frequency:", self.freq1Edit)
- self.connect(self.freq1Edit, QtCore.SIGNAL("editingFinished()"),
- self.freq1EditText)
+ self.freq1Edit.editingFinished.connect(self.freq1EditText)
- self.amp1Edit = QtGui.QLineEdit(self)
+ self.amp1Edit = QtWidgets.QLineEdit(self)
self.amp1Edit.setMinimumWidth(100)
self.layout.addRow("Signal 1 Amplitude:", self.amp1Edit)
- self.connect(self.amp1Edit, QtCore.SIGNAL("editingFinished()"),
- self.amp1EditText)
+ self.amp1Edit.editingFinished.connect(self.amp1EditText)
# Control the second signal
- self.freq2Edit = QtGui.QLineEdit(self)
+ self.freq2Edit = QtWidgets.QLineEdit(self)
self.freq2Edit.setMinimumWidth(100)
self.layout.addRow("Signal 2 Frequency:", self.freq2Edit)
- self.connect(self.freq2Edit, QtCore.SIGNAL("editingFinished()"),
- self.freq2EditText)
+ self.freq2Edit.editingFinished.connect(self.freq2EditText)
- self.amp2Edit = QtGui.QLineEdit(self)
+ self.amp2Edit = QtWidgets.QLineEdit(self)
self.amp2Edit.setMinimumWidth(100)
self.layout.addRow("Signal 2 Amplitude:", self.amp2Edit)
- self.connect(self.amp2Edit, QtCore.SIGNAL("editingFinished()"),
- self.amp2EditText)
+ self.amp2Edit.editingFinished.connect(self.amp2EditText)
- self.quit = QtGui.QPushButton('Close', self)
+ self.quit = QtWidgets.QPushButton('Close', self)
self.quit.setMinimumWidth(100)
self.layout.addWidget(self.quit)
- self.connect(self.quit, QtCore.SIGNAL('clicked()'),
- QtGui.qApp, QtCore.SLOT('quit()'))
+ self.quit.clicked.connect(QtWidgets.qApp.quit)
def attach_signal1(self, signal):
self.signal1 = signal
- self.freq1Edit.setText(QtCore.QString("%1").arg(self.signal1.frequency()))
- self.amp1Edit.setText(QtCore.QString("%1").arg(self.signal1.amplitude()))
+ self.freq1Edit.setText(("{0}").format(self.signal1.frequency()))
+ self.amp1Edit.setText(("{0}").format(self.signal1.amplitude()))
def attach_signal2(self, signal):
self.signal2 = signal
- self.freq2Edit.setText(QtCore.QString("%1").arg(self.signal2.frequency()))
- self.amp2Edit.setText(QtCore.QString("%1").arg(self.signal2.amplitude()))
+ self.freq2Edit.setText(("{0}").format(self.signal2.frequency()))
+ self.amp2Edit.setText(("{0}").format(self.signal2.amplitude()))
def freq1EditText(self):
try:
@@ -152,7 +147,7 @@ class my_top_block(gr.top_block):
taps = filter.firdes.complex_band_pass_2(1, Rs, 1500, 2500, 100, 60)
- self.qapp = QtGui.QApplication(sys.argv)
+ self.qapp = QtWidgets.QApplication(sys.argv)
ss = open(gr.prefix() + '/share/gnuradio/themes/dark.qss')
sstext = ss.read()
ss.close()
@@ -167,6 +162,8 @@ class my_top_block(gr.top_block):
self.snk1 = qtgui.waterfall_sink_c(npts, filter.firdes.WIN_BLACKMAN_hARRIS,
0, Rs,
"Complex Waterfall Example", 2)
+ self.snk1.set_color_map(0, qtgui.INTENSITY_COLOR_MAP_TYPE_COOL)
+ self.snk1.set_color_map(1, qtgui.INTENSITY_COLOR_MAP_TYPE_COOL)
self.connect(src1, (src,0))
self.connect(src2, (src,1))
@@ -181,8 +178,8 @@ class my_top_block(gr.top_block):
pyQt = self.snk1.pyqwidget()
# Wrap the pointer as a PyQt SIP object
- # This can now be manipulated as a PyQt4.QtGui.QWidget
- pyWin = sip.wrapinstance(pyQt, QtGui.QWidget)
+ # This can now be manipulated as a PyQt5.QtWidgets.QWidget
+ pyWin = sip.wrapinstance(pyQt, QtWidgets.QWidget)
#pyWin.show()
self.main_box = dialog_box(pyWin, self.ctrl_win)
diff --git a/gr-qtgui/examples/pyqt_waterfall_f.py b/gr-qtgui/examples/pyqt_waterfall_f.py
index f9680c28cf..71c72afad6 100755
--- a/gr-qtgui/examples/pyqt_waterfall_f.py
+++ b/gr-qtgui/examples/pyqt_waterfall_f.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
#
-# Copyright 2012 Free Software Foundation, Inc.
+# Copyright 2012,2015 Free Software Foundation, Inc.
#
# This file is part of GNU Radio
#
@@ -26,10 +26,10 @@ import sys
try:
from gnuradio import qtgui
- from PyQt4 import QtGui, QtCore
+ from PyQt5 import QtWidgets, Qt
import sip
except ImportError:
- sys.stderr.write("Error: Program requires PyQt4 and gr-qtgui.\n")
+ sys.stderr.write("Error: Program requires PyQt5 and gr-qtgui.\n")
sys.exit(1)
try:
@@ -38,71 +38,66 @@ except ImportError:
sys.stderr.write("Error: Program requires gr-analog.\n")
sys.exit(1)
-class dialog_box(QtGui.QWidget):
+class dialog_box(QtWidgets.QWidget):
def __init__(self, display, control):
- QtGui.QWidget.__init__(self, None)
+ QtWidgets.QWidget.__init__(self, None)
self.setWindowTitle('PyQt Test GUI')
- self.boxlayout = QtGui.QBoxLayout(QtGui.QBoxLayout.LeftToRight, self)
+ self.boxlayout = QtWidgets.QBoxLayout(QtWidgets.QBoxLayout.LeftToRight, self)
self.boxlayout.addWidget(display, 1)
self.boxlayout.addWidget(control)
self.resize(800, 500)
-class control_box(QtGui.QWidget):
+class control_box(QtWidgets.QWidget):
def __init__(self, parent=None):
- QtGui.QWidget.__init__(self, parent)
+ QtWidgets.QWidget.__init__(self, parent)
self.setWindowTitle('Control Panel')
self.setToolTip('Control the signals')
- QtGui.QToolTip.setFont(QtGui.QFont('OldEnglish', 10))
+ QtWidgets.QToolTip.setFont(Qt.QFont('OldEnglish', 10))
- self.layout = QtGui.QFormLayout(self)
+ self.layout = QtWidgets.QFormLayout(self)
# Control the first signal
- self.freq1Edit = QtGui.QLineEdit(self)
+ self.freq1Edit = QtWidgets.QLineEdit(self)
self.freq1Edit.setMinimumWidth(100)
self.layout.addRow("Signal 1 Frequency:", self.freq1Edit)
- self.connect(self.freq1Edit, QtCore.SIGNAL("editingFinished()"),
- self.freq1EditText)
+ self.freq1Edit.editingFinished.connect(self.freq1EditText)
- self.amp1Edit = QtGui.QLineEdit(self)
+ self.amp1Edit = QtWidgets.QLineEdit(self)
self.amp1Edit.setMinimumWidth(100)
self.layout.addRow("Signal 1 Amplitude:", self.amp1Edit)
- self.connect(self.amp1Edit, QtCore.SIGNAL("editingFinished()"),
- self.amp1EditText)
+ self.amp1Edit.editingFinished.connect(self.amp1EditText)
# Control the second signal
- self.freq2Edit = QtGui.QLineEdit(self)
+ self.freq2Edit = QtWidgets.QLineEdit(self)
self.freq2Edit.setMinimumWidth(100)
self.layout.addRow("Signal 2 Frequency:", self.freq2Edit)
- self.connect(self.freq2Edit, QtCore.SIGNAL("editingFinished()"),
- self.freq2EditText)
+ self.freq2Edit.editingFinished.connect(self.freq2EditText)
- self.amp2Edit = QtGui.QLineEdit(self)
+ self.amp2Edit = QtWidgets.QLineEdit(self)
self.amp2Edit.setMinimumWidth(100)
self.layout.addRow("Signal 2 Amplitude:", self.amp2Edit)
- self.connect(self.amp2Edit, QtCore.SIGNAL("editingFinished()"),
- self.amp2EditText)
+ self.amp2Edit.editingFinished.connect(self.amp2EditText)
- self.quit = QtGui.QPushButton('Close', self)
+ self.quit = QtWidgets.QPushButton('Close', self)
self.quit.setMinimumWidth(100)
self.layout.addWidget(self.quit)
- self.connect(self.quit, QtCore.SIGNAL('clicked()'),
- QtGui.qApp, QtCore.SLOT('quit()'))
+ self.quit.clicked.connect(QtWidgets.qApp.quit)
def attach_signal1(self, signal):
self.signal1 = signal
- self.freq1Edit.setText(QtCore.QString("%1").arg(self.signal1.frequency()))
- self.amp1Edit.setText(QtCore.QString("%1").arg(self.signal1.amplitude()))
+ self.freq1Edit.setText(("{0}").format(self.signal1.frequency()))
+ self.amp1Edit.setText(("{0}").format(self.signal1.amplitude()))
def attach_signal2(self, signal):
self.signal2 = signal
- self.freq2Edit.setText(QtCore.QString("%1").arg(self.signal2.frequency()))
- self.amp2Edit.setText(QtCore.QString("%1").arg(self.signal2.amplitude()))
+ self.freq2Edit.setText(("{0}").format(self.signal2.frequency()))
+ self.amp2Edit.setText(("{0}").format(self.signal2.amplitude()))
def freq1EditText(self):
try:
@@ -144,7 +139,7 @@ class my_top_block(gr.top_block):
npts = 2048
- self.qapp = QtGui.QApplication(sys.argv)
+ self.qapp = QtWidgets.QApplication(sys.argv)
src1 = analog.sig_source_f(Rs, analog.GR_SIN_WAVE, f1, 0.1, 0)
src2 = analog.sig_source_f(Rs, analog.GR_SIN_WAVE, f2, 0.1, 0)
@@ -153,6 +148,8 @@ class my_top_block(gr.top_block):
self.snk1 = qtgui.waterfall_sink_f(npts, filter.firdes.WIN_BLACKMAN_hARRIS,
0, Rs,
"Real Waterfall Example", 2)
+ self.snk1.set_color_map(0, qtgui.INTENSITY_COLOR_MAP_TYPE_COOL)
+ self.snk1.set_color_map(1, qtgui.INTENSITY_COLOR_MAP_TYPE_COOL)
self.connect(src1, (src,0))
self.connect(src2, (src,1))
@@ -167,8 +164,8 @@ class my_top_block(gr.top_block):
pyQt = self.snk1.pyqwidget()
# Wrap the pointer as a PyQt SIP object
- # This can now be manipulated as a PyQt4.QtGui.QWidget
- pyWin = sip.wrapinstance(pyQt, QtGui.QWidget)
+ # This can now be manipulated as a PyQt5.QtWidgets.QWidget
+ pyWin = sip.wrapinstance(pyQt, QtWidgets.QWidget)
#pyWin.show()
self.main_box = dialog_box(pyWin, self.ctrl_win)
@@ -179,4 +176,3 @@ if __name__ == "__main__":
tb.start()
tb.qapp.exec_()
tb.stop()
-
diff --git a/gr-qtgui/examples/qtgui_tags_viewing.grc b/gr-qtgui/examples/qtgui_tags_viewing.grc
index 4c6454537a..635b1e43fa 100644
--- a/gr-qtgui/examples/qtgui_tags_viewing.grc
+++ b/gr-qtgui/examples/qtgui_tags_viewing.grc
@@ -1,22 +1,23 @@
-<?xml version='1.0' encoding='ASCII'?>
+<?xml version='1.0' encoding='utf-8'?>
+<?grc format='1' created='3.8.git'?>
<flow_graph>
<timestamp>Wed Nov 6 11:52:40 2013</timestamp>
<block>
<key>options</key>
<param>
- <key>id</key>
- <value>qtgui_tags_viewing</value>
+ <key>author</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>window_size</key>
+ <value>1280, 1024</value>
</param>
<param>
- <key>title</key>
- <value></value>
+ <key>category</key>
+ <value>Custom</value>
</param>
<param>
- <key>author</key>
+ <key>comment</key>
<value></value>
</param>
<param>
@@ -24,16 +25,40 @@
<value></value>
</param>
<param>
- <key>window_size</key>
- <value>1280, 1024</value>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(10, 10)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
<key>generate_options</key>
<value>qt_gui</value>
</param>
<param>
- <key>category</key>
- <value>Custom</value>
+ <key>id</key>
+ <value>qtgui_tags_viewing</value>
+ </param>
+ <param>
+ <key>max_nouts</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>qt_qss_theme</key>
+ <value></value>
+ </param>
+ <param>
+ <key>realtime_scheduling</key>
+ <value></value>
+ </param>
+ <param>
+ <key>run_command</key>
+ <value>{python} -u {filename}</value>
</param>
<param>
<key>run_options</key>
@@ -44,147 +69,349 @@
<value>True</value>
</param>
<param>
- <key>max_nouts</key>
- <value>0</value>
+ <key>thread_safe_setters</key>
+ <value></value>
</param>
<param>
- <key>realtime_scheduling</key>
+ <key>title</key>
+ <value></value>
+ </param>
+ </block>
+ <block>
+ <key>variable_qtgui_range</key>
+ <param>
+ <key>comment</key>
<value></value>
</param>
<param>
+ <key>value</key>
+ <value>300</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(10, 10)</value>
+ <value>(814, 390)</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value></value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
+ <param>
+ <key>id</key>
+ <value>delay</value>
+ </param>
+ <param>
+ <key>label</key>
+ <value>Delay</value>
+ </param>
+ <param>
+ <key>min_len</key>
+ <value>200</value>
+ </param>
+ <param>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
+ </param>
+ <param>
+ <key>start</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>step</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>stop</key>
+ <value>1000</value>
+ </param>
+ <param>
+ <key>rangeType</key>
+ <value>float</value>
+ </param>
+ <param>
+ <key>widget</key>
+ <value>counter_slider</value>
+ </param>
</block>
<block>
- <key>variable</key>
+ <key>variable_qtgui_range</key>
<param>
- <key>id</key>
- <value>samp_rate</value>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>30</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>32000</value>
+ <key>_coordinate</key>
+ <value>(936, 392)</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(172, 10)</value>
+ <key>gui_hint</key>
+ <value></value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
+ <param>
+ <key>id</key>
+ <value>ntaps</value>
+ </param>
+ <param>
+ <key>label</key>
+ <value>Num Taps</value>
+ </param>
+ <param>
+ <key>min_len</key>
+ <value>200</value>
+ </param>
+ <param>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
+ </param>
+ <param>
+ <key>start</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>step</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>stop</key>
+ <value>100</value>
+ </param>
+ <param>
+ <key>rangeType</key>
+ <value>float</value>
+ </param>
+ <param>
+ <key>widget</key>
+ <value>counter_slider</value>
+ </param>
</block>
<block>
- <key>import</key>
+ <key>variable</key>
<param>
- <key>id</key>
- <value>import_1</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>import</key>
- <value>from gnuradio.digital.utils import tagged_streams</value>
- </param>
- <param>
<key>_coordinate</key>
- <value>(99, 72)</value>
+ <value>(172, 10)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
+ <param>
+ <key>id</key>
+ <value>samp_rate</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>32000</value>
+ </param>
</block>
<block>
- <key>import</key>
+ <key>analog_fastnoise_source_x</key>
<param>
- <key>id</key>
- <value>import_0</value>
+ <key>amp</key>
+ <value>0.004</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>import</key>
- <value>import scipy</value>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(9, 71)</value>
+ <value>(350, 39)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
+ <param>
+ <key>id</key>
+ <value>analog_fastnoise_source_x_0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>noise_type</key>
+ <value>analog.GR_GAUSSIAN</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>complex</value>
+ </param>
+ <param>
+ <key>seed</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>samples</key>
+ <value>8192</value>
+ </param>
</block>
<block>
- <key>import</key>
+ <key>blocks_add_xx</key>
<param>
- <key>id</key>
- <value>import_2</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
- <key>import</key>
- <value>import time</value>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(253, 71)</value>
+ <value>(482, 193)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
+ <param>
+ <key>id</key>
+ <value>blocks_add_xx_0</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>complex</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>num_inputs</key>
+ <value>2</value>
+ </param>
+ <param>
+ <key>vlen</key>
+ <value>1</value>
+ </param>
</block>
<block>
- <key>blocks_delay</key>
+ <key>blocks_add_xx</key>
<param>
- <key>id</key>
- <value>blocks_delay_0</value>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
+ <key>_coordinate</key>
+ <value>(707, 176)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>blocks_add_xx_1</value>
+ </param>
+ <param>
<key>type</key>
<value>complex</value>
</param>
<param>
- <key>delay</key>
- <value>1000</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>num_ports</key>
- <value>1</value>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>num_inputs</key>
+ <value>2</value>
</param>
<param>
<key>vlen</key>
<value>1</value>
</param>
+ </block>
+ <block>
+ <key>blocks_delay</key>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>comment</key>
+ <value></value>
+ </param>
<param>
<key>affinity</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>delay</key>
+ <value>1000</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
@@ -194,40 +421,103 @@
<key>_rotation</key>
<value>0</value>
</param>
+ <param>
+ <key>id</key>
+ <value>blocks_delay_0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>num_ports</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>complex</value>
+ </param>
+ <param>
+ <key>vlen</key>
+ <value>1</value>
+ </param>
</block>
<block>
- <key>blocks_tags_strobe</key>
+ <key>blocks_delay</key>
<param>
- <key>id</key>
- <value>blocks_tags_strobe_0</value>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>delay</key>
+ <value>int(delay)</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
+ <key>_coordinate</key>
+ <value>(890, 44)</value>
</param>
<param>
- <key>value</key>
- <value>pmt.intern("TEST")</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>nsamps</key>
- <value>10000</value>
+ <key>id</key>
+ <value>blocks_delay_0_0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>num_ports</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>complex</value>
</param>
<param>
<key>vlen</key>
<value>1</value>
</param>
+ </block>
+ <block>
+ <key>blocks_tags_strobe</key>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>comment</key>
+ <value></value>
+ </param>
<param>
<key>affinity</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
@@ -237,426 +527,836 @@
<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>
+ <value>blocks_tags_strobe_0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>key</key>
+ <value>pmt.intern("strobe")</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>nsamps</key>
+ <value>10000</value>
</param>
<param>
<key>type</key>
<value>complex</value>
</param>
<param>
- <key>noise_type</key>
- <value>analog.GR_GAUSSIAN</value>
+ <key>value</key>
+ <value>pmt.intern("TEST")</value>
</param>
<param>
- <key>amp</key>
- <value>0.004</value>
+ <key>vlen</key>
+ <value>1</value>
</param>
+ </block>
+ <block>
+ <key>blocks_throttle</key>
<param>
- <key>seed</key>
- <value>0</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>samples</key>
- <value>8192</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>affinity</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(350, 39)</value>
+ <value>(266, 149)</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>
+ <value>blocks_throttle_0</value>
</param>
<param>
- <key>_enabled</key>
+ <key>ignoretag</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>vector</key>
- <value>[0.85+0.5j, 0.85, 0.85, 0.85+0.5j] + (10000-4)*[0,]</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>tags</key>
- <value>tagged_streams.make_lengthtags((1024,), (0,), "testing tags 0")</value>
+ <key>samples_per_second</key>
+ <value>50e3</value>
</param>
<param>
- <key>repeat</key>
- <value>True</value>
+ <key>type</key>
+ <value>complex</value>
</param>
<param>
<key>vlen</key>
<value>1</value>
</param>
+ </block>
+ <block>
+ <key>blocks_throttle</key>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>comment</key>
+ <value></value>
+ </param>
<param>
<key>affinity</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>False</value>
</param>
<param>
<key>_coordinate</key>
- <value>(13, 132)</value>
+ <value>(267, 414)</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_0</value>
+ <value>blocks_throttle_0_0</value>
</param>
<param>
- <key>_enabled</key>
+ <key>ignoretag</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>num_inputs</key>
- <value>2</value>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>samples_per_second</key>
+ <value>samp_rate</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>float</value>
</param>
<param>
<key>vlen</key>
<value>1</value>
</param>
+ </block>
+ <block>
+ <key>blocks_vector_source_x</key>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>comment</key>
+ <value></value>
+ </param>
<param>
<key>affinity</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(482, 193)</value>
+ <value>(13, 132)</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>
+ <value>blocks_vector_source_x_0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>type</key>
<value>complex</value>
</param>
<param>
- <key>num_inputs</key>
- <value>2</value>
+ <key>repeat</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>tags</key>
+ <value>tagged_streams.make_lengthtags((1024,), (0,), "testing tags 0")</value>
</param>
<param>
<key>vlen</key>
<value>1</value>
</param>
<param>
+ <key>vector</key>
+ <value>[0.85+0.5j, 0.85, 0.85, 0.85+0.5j] + (10000-4)*[0,]</value>
+ </param>
+ </block>
+ <block>
+ <key>blocks_vector_source_x</key>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(707, 176)</value>
+ <value>(15, 315)</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>
+ <value>blocks_vector_source_x_0_0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>type</key>
<value>complex</value>
</param>
<param>
- <key>samples_per_second</key>
- <value>50e3</value>
+ <key>repeat</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>tags</key>
+ <value>tagged_streams.make_lengthtags((128,), (1500,), "second stream")</value>
</param>
<param>
<key>vlen</key>
<value>1</value>
</param>
<param>
+ <key>vector</key>
+ <value>1500*[0,] + [0.25+0j,] + (10000-1500-1)*[0,]</value>
+ </param>
+ </block>
+ <block>
+ <key>blocks_vector_source_x</key>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>False</value>
</param>
<param>
<key>_coordinate</key>
- <value>(266, 149)</value>
+ <value>(15, 489)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>variable_qtgui_range</key>
<param>
<key>id</key>
- <value>ntaps</value>
+ <value>blocks_vector_source_x_0_0_0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>label</key>
- <value>Num Taps</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>value</key>
- <value>30</value>
+ <key>type</key>
+ <value>float</value>
</param>
<param>
- <key>start</key>
- <value>1</value>
+ <key>repeat</key>
+ <value>True</value>
</param>
<param>
- <key>stop</key>
- <value>100</value>
+ <key>tags</key>
+ <value>tagged_streams.make_lengthtags((128,), (110,), "second stream")</value>
</param>
<param>
- <key>step</key>
+ <key>vlen</key>
<value>1</value>
</param>
<param>
- <key>widget</key>
- <value>counter_slider</value>
+ <key>vector</key>
+ <value>10*[0,] + [0.5,] + (100-10-1)*[0,]</value>
</param>
+ </block>
+ <block>
+ <key>blocks_vector_source_x</key>
<param>
- <key>orient</key>
- <value>Qt.Horizontal</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>min_len</key>
- <value>200</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
- <key>gui_hint</key>
+ <key>affinity</key>
<value></value>
</param>
<param>
+ <key>_enabled</key>
+ <value>False</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(936, 392)</value>
+ <value>(15, 398)</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_1_0</value>
+ <value>blocks_vector_source_x_0_1</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>type</key>
- <value>complex</value>
+ <value>float</value>
</param>
<param>
- <key>name</key>
- <value></value>
+ <key>repeat</key>
+ <value>True</value>
</param>
<param>
- <key>size</key>
- <value>5100</value>
+ <key>tags</key>
+ <value>tagged_streams.make_lengthtags((1024,), (0,), "testing tags")</value>
</param>
<param>
- <key>srate</key>
- <value>samp_rate</value>
+ <key>vlen</key>
+ <value>1</value>
</param>
<param>
- <key>ymin</key>
- <value>-0.1</value>
+ <key>vector</key>
+ <value>[-0.85,] + (100-1)*[0,]</value>
</param>
+ </block>
+ <block>
+ <key>fir_filter_xxx</key>
<param>
- <key>ymax</key>
- <value>1.5</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>nconnections</key>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>decim</key>
<value>1</value>
</param>
<param>
- <key>update_time</key>
- <value>0.001</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>tr_mode</key>
- <value>qtgui.TRIG_MODE_TAG</value>
+ <key>_coordinate</key>
+ <value>(660, 76)</value>
</param>
<param>
- <key>tr_slope</key>
- <value>qtgui.TRIG_SLOPE_POS</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>tr_level</key>
- <value>.5</value>
+ <key>id</key>
+ <value>fir_filter_xxx_0</value>
</param>
<param>
- <key>tr_delay</key>
- <value>0.06</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>tr_chan</key>
+ <key>minoutbuf</key>
<value>0</value>
</param>
<param>
- <key>tr_tag</key>
- <value>strobe</value>
+ <key>samp_delay</key>
+ <value>int(ntaps)</value>
</param>
<param>
- <key>entags</key>
- <value>True</value>
+ <key>taps</key>
+ <value>int(ntaps)*[1,]+[1,]</value>
</param>
<param>
- <key>gui_hint</key>
- <value>1,1,1,1</value>
+ <key>type</key>
+ <value>ccc</value>
</param>
+ </block>
+ <block>
+ <key>import</key>
<param>
- <key>affinity</key>
+ <key>alias</key>
<value></value>
</param>
<param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(857, 173)</value>
+ <value>(9, 71)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
+ <param>
+ <key>id</key>
+ <value>import_0</value>
+ </param>
+ <param>
+ <key>import</key>
+ <value>import scipy</value>
+ </param>
</block>
<block>
- <key>blocks_vector_source_x</key>
+ <key>import</key>
<param>
- <key>id</key>
- <value>blocks_vector_source_x_0_0</value>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
+ <key>_coordinate</key>
+ <value>(99, 72)</value>
</param>
<param>
- <key>vector</key>
- <value>1500*[0,] + [0.25+0j,] + (10000-1500-1)*[0,]</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>tags</key>
- <value>tagged_streams.make_lengthtags((128,), (1500,), "second stream")</value>
+ <key>id</key>
+ <value>import_1</value>
</param>
<param>
- <key>repeat</key>
- <value>True</value>
+ <key>import</key>
+ <value>from gnuradio.digital.utils import tagged_streams</value>
</param>
+ </block>
+ <block>
+ <key>import</key>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>affinity</key>
+ <key>comment</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(15, 315)</value>
+ <value>(253, 71)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
+ <param>
+ <key>id</key>
+ <value>import_2</value>
+ </param>
+ <param>
+ <key>import</key>
+ <value>import time</value>
+ </param>
</block>
<block>
<key>qtgui_time_sink_x</key>
<param>
+ <key>autoscale</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>ctrlpanel</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>entags</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(860, 298)</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>grid</key>
+ <value>False</value>
+ </param>
+ <param>
<key>id</key>
<value>qtgui_time_sink_x_0</value>
</param>
<param>
- <key>_enabled</key>
+ <key>legend</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
+ <key>alpha1</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>color1</key>
+ <value>"blue"</value>
+ </param>
+ <param>
+ <key>label1</key>
+ <value></value>
+ </param>
+ <param>
+ <key>marker1</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>style1</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>width1</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alpha10</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>color10</key>
+ <value>"blue"</value>
+ </param>
+ <param>
+ <key>label10</key>
+ <value></value>
+ </param>
+ <param>
+ <key>marker10</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>style10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>width10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alpha2</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>color2</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>label2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>marker2</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>style2</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>width2</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alpha3</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>color3</key>
+ <value>"green"</value>
+ </param>
+ <param>
+ <key>label3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>marker3</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>style3</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>width3</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alpha4</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>color4</key>
+ <value>"black"</value>
+ </param>
+ <param>
+ <key>label4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>marker4</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>style4</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>width4</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alpha5</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>color5</key>
+ <value>"cyan"</value>
+ </param>
+ <param>
+ <key>label5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>marker5</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>style5</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>width5</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alpha6</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>color6</key>
+ <value>"magenta"</value>
+ </param>
+ <param>
+ <key>label6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>marker6</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>style6</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>width6</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alpha7</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>color7</key>
+ <value>"yellow"</value>
+ </param>
+ <param>
+ <key>label7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>marker7</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>style7</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>width7</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alpha8</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>color8</key>
+ <value>"dark red"</value>
+ </param>
+ <param>
+ <key>label8</key>
+ <value></value>
+ </param>
+ <param>
+ <key>marker8</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>style8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>width8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alpha9</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>color9</key>
+ <value>"dark green"</value>
+ </param>
+ <param>
+ <key>label9</key>
+ <value></value>
+ </param>
+ <param>
+ <key>marker9</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>style9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>width9</key>
+ <value>1</value>
</param>
<param>
<key>name</key>
<value></value>
</param>
<param>
+ <key>nconnections</key>
+ <value>2</value>
+ </param>
+ <param>
<key>size</key>
<value>18000</value>
</param>
@@ -665,20 +1365,16 @@
<value>samp_rate</value>
</param>
<param>
- <key>ymin</key>
- <value>-0.1</value>
- </param>
- <param>
- <key>ymax</key>
- <value>1.5</value>
+ <key>tr_chan</key>
+ <value>0</value>
</param>
<param>
- <key>nconnections</key>
- <value>2</value>
+ <key>tr_delay</key>
+ <value>0</value>
</param>
<param>
- <key>update_time</key>
- <value>0.10</value>
+ <key>tr_level</key>
+ <value>0.1</value>
</param>
<param>
<key>tr_mode</key>
@@ -689,509 +1385,1112 @@
<value>qtgui.TRIG_SLOPE_POS</value>
</param>
<param>
- <key>tr_level</key>
- <value>0.1</value>
+ <key>tr_tag</key>
+ <value>""</value>
</param>
<param>
- <key>tr_delay</key>
- <value>0</value>
+ <key>type</key>
+ <value>complex</value>
</param>
<param>
- <key>tr_chan</key>
- <value>0</value>
+ <key>update_time</key>
+ <value>0.10</value>
</param>
<param>
- <key>tr_tag</key>
+ <key>ylabel</key>
+ <value>Amplitude</value>
+ </param>
+ <param>
+ <key>yunit</key>
<value>""</value>
</param>
<param>
- <key>entags</key>
- <value>True</value>
+ <key>ymax</key>
+ <value>1.5</value>
</param>
<param>
- <key>gui_hint</key>
+ <key>ymin</key>
+ <value>-0.1</value>
+ </param>
+ </block>
+ <block>
+ <key>qtgui_time_sink_x</key>
+ <param>
+ <key>autoscale</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>comment</key>
<value></value>
</param>
<param>
+ <key>ctrlpanel</key>
+ <value>False</value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
<param>
+ <key>entags</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>False</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(860, 298)</value>
+ <value>(475, 444)</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value></value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>fir_filter_xxx</key>
+ <param>
+ <key>grid</key>
+ <value>False</value>
+ </param>
<param>
<key>id</key>
- <value>fir_filter_xxx_0</value>
+ <value>qtgui_time_sink_x_0_0</value>
</param>
<param>
- <key>_enabled</key>
+ <key>legend</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>ccc</value>
+ <key>alpha1</key>
+ <value>1.0</value>
</param>
<param>
- <key>decim</key>
+ <key>color1</key>
+ <value>"blue"</value>
+ </param>
+ <param>
+ <key>label1</key>
+ <value></value>
+ </param>
+ <param>
+ <key>marker1</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>style1</key>
<value>1</value>
</param>
<param>
- <key>taps</key>
- <value>int(ntaps)*[1,]+[1,]</value>
+ <key>width1</key>
+ <value>1</value>
</param>
<param>
- <key>samp_delay</key>
- <value>int(ntaps)</value>
+ <key>alpha10</key>
+ <value>1.0</value>
</param>
<param>
- <key>affinity</key>
+ <key>color10</key>
+ <value>"blue"</value>
+ </param>
+ <param>
+ <key>label10</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>marker10</key>
+ <value>-1</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(660, 76)</value>
+ <key>style10</key>
+ <value>1</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>width10</key>
+ <value>1</value>
</param>
- </block>
- <block>
- <key>qtgui_time_sink_x</key>
<param>
- <key>id</key>
- <value>qtgui_time_sink_x_0_1</value>
+ <key>alpha2</key>
+ <value>1.0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>color2</key>
+ <value>"red"</value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
+ <key>label2</key>
+ <value></value>
</param>
<param>
- <key>name</key>
+ <key>marker2</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>style2</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>width2</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alpha3</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>color3</key>
+ <value>"green"</value>
+ </param>
+ <param>
+ <key>label3</key>
<value></value>
</param>
<param>
- <key>size</key>
- <value>1000</value>
+ <key>marker3</key>
+ <value>-1</value>
</param>
<param>
- <key>srate</key>
- <value>samp_rate</value>
+ <key>style3</key>
+ <value>1</value>
</param>
<param>
- <key>ymin</key>
- <value>-0.1</value>
+ <key>width3</key>
+ <value>1</value>
</param>
<param>
- <key>ymax</key>
- <value>4.5</value>
+ <key>alpha4</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>color4</key>
+ <value>"black"</value>
+ </param>
+ <param>
+ <key>label4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>marker4</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>style4</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>width4</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alpha5</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>color5</key>
+ <value>"cyan"</value>
+ </param>
+ <param>
+ <key>label5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>marker5</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>style5</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>width5</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alpha6</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>color6</key>
+ <value>"magenta"</value>
+ </param>
+ <param>
+ <key>label6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>marker6</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>style6</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>width6</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alpha7</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>color7</key>
+ <value>"yellow"</value>
+ </param>
+ <param>
+ <key>label7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>marker7</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>style7</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>width7</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alpha8</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>color8</key>
+ <value>"dark red"</value>
+ </param>
+ <param>
+ <key>label8</key>
+ <value></value>
+ </param>
+ <param>
+ <key>marker8</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>style8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>width8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alpha9</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>color9</key>
+ <value>"dark green"</value>
+ </param>
+ <param>
+ <key>label9</key>
+ <value></value>
+ </param>
+ <param>
+ <key>marker9</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>style9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>width9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>name</key>
+ <value></value>
</param>
<param>
<key>nconnections</key>
<value>2</value>
</param>
<param>
- <key>update_time</key>
- <value>0.10</value>
+ <key>size</key>
+ <value>1024</value>
+ </param>
+ <param>
+ <key>srate</key>
+ <value>samp_rate</value>
+ </param>
+ <param>
+ <key>tr_chan</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>tr_delay</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>tr_level</key>
+ <value>0.0</value>
</param>
<param>
<key>tr_mode</key>
- <value>qtgui.TRIG_MODE_NORM</value>
+ <value>qtgui.TRIG_MODE_TAG</value>
</param>
<param>
<key>tr_slope</key>
<value>qtgui.TRIG_SLOPE_POS</value>
</param>
<param>
- <key>tr_level</key>
- <value>.1</value>
+ <key>tr_tag</key>
+ <value>second stream</value>
</param>
<param>
- <key>tr_delay</key>
- <value>0.015</value>
+ <key>type</key>
+ <value>float</value>
</param>
<param>
- <key>tr_chan</key>
- <value>0</value>
+ <key>update_time</key>
+ <value>0.10</value>
</param>
<param>
- <key>tr_tag</key>
+ <key>ylabel</key>
+ <value>Amplitude</value>
+ </param>
+ <param>
+ <key>yunit</key>
<value>""</value>
</param>
<param>
- <key>entags</key>
- <value>True</value>
+ <key>ymax</key>
+ <value>1</value>
</param>
<param>
- <key>gui_hint</key>
- <value>1,0,1,1</value>
+ <key>ymin</key>
+ <value>-1</value>
+ </param>
+ </block>
+ <block>
+ <key>qtgui_time_sink_x</key>
+ <param>
+ <key>autoscale</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>ctrlpanel</key>
+ <value>False</value>
</param>
<param>
<key>affinity</key>
<value></value>
</param>
<param>
+ <key>entags</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(1072, 77)</value>
</param>
<param>
+ <key>gui_hint</key>
+ <value>1,0,1,1</value>
+ </param>
+ <param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>qtgui_time_sink_x</key>
+ <param>
+ <key>grid</key>
+ <value>False</value>
+ </param>
<param>
<key>id</key>
- <value>qtgui_time_sink_x_0_0</value>
+ <value>qtgui_time_sink_x_0_1</value>
</param>
<param>
- <key>_enabled</key>
- <value>False</value>
+ <key>legend</key>
+ <value>True</value>
</param>
<param>
- <key>type</key>
- <value>float</value>
+ <key>alpha1</key>
+ <value>1.0</value>
</param>
<param>
- <key>name</key>
+ <key>color1</key>
+ <value>"blue"</value>
+ </param>
+ <param>
+ <key>label1</key>
<value></value>
</param>
<param>
- <key>size</key>
- <value>1024</value>
+ <key>marker1</key>
+ <value>-1</value>
</param>
<param>
- <key>srate</key>
- <value>samp_rate</value>
+ <key>style1</key>
+ <value>1</value>
</param>
<param>
- <key>ymin</key>
+ <key>width1</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alpha10</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>color10</key>
+ <value>"blue"</value>
+ </param>
+ <param>
+ <key>label10</key>
+ <value></value>
+ </param>
+ <param>
+ <key>marker10</key>
<value>-1</value>
</param>
<param>
- <key>ymax</key>
+ <key>style10</key>
<value>1</value>
</param>
<param>
- <key>nconnections</key>
- <value>2</value>
+ <key>width10</key>
+ <value>1</value>
</param>
<param>
- <key>update_time</key>
- <value>0.10</value>
+ <key>alpha2</key>
+ <value>1.0</value>
</param>
<param>
- <key>tr_mode</key>
- <value>qtgui.TRIG_MODE_TAG</value>
+ <key>color2</key>
+ <value>"red"</value>
</param>
<param>
- <key>tr_slope</key>
- <value>qtgui.TRIG_SLOPE_POS</value>
+ <key>label2</key>
+ <value></value>
</param>
<param>
- <key>tr_level</key>
- <value>0.0</value>
+ <key>marker2</key>
+ <value>-1</value>
</param>
<param>
- <key>tr_delay</key>
- <value>0</value>
+ <key>style2</key>
+ <value>1</value>
</param>
<param>
- <key>tr_chan</key>
+ <key>width2</key>
<value>1</value>
</param>
<param>
- <key>tr_tag</key>
- <value>second stream</value>
+ <key>alpha3</key>
+ <value>1.0</value>
</param>
<param>
- <key>entags</key>
- <value>True</value>
+ <key>color3</key>
+ <value>"green"</value>
</param>
<param>
- <key>gui_hint</key>
+ <key>label3</key>
<value></value>
</param>
<param>
- <key>affinity</key>
+ <key>marker3</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>style3</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>width3</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alpha4</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>color4</key>
+ <value>"black"</value>
+ </param>
+ <param>
+ <key>label4</key>
<value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(475, 444)</value>
+ <key>marker4</key>
+ <value>-1</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>style4</key>
+ <value>1</value>
</param>
- </block>
- <block>
- <key>blocks_vector_source_x</key>
<param>
- <key>id</key>
- <value>blocks_vector_source_x_0_0_0</value>
+ <key>width4</key>
+ <value>1</value>
</param>
<param>
- <key>_enabled</key>
- <value>False</value>
+ <key>alpha5</key>
+ <value>1.0</value>
</param>
<param>
- <key>type</key>
- <value>float</value>
+ <key>color5</key>
+ <value>"cyan"</value>
</param>
<param>
- <key>vector</key>
- <value>10*[0,] + [0.5,] + (100-10-1)*[0,]</value>
+ <key>label5</key>
+ <value></value>
</param>
<param>
- <key>tags</key>
- <value>tagged_streams.make_lengthtags((128,), (110,), "second stream")</value>
+ <key>marker5</key>
+ <value>-1</value>
</param>
<param>
- <key>repeat</key>
- <value>True</value>
+ <key>style5</key>
+ <value>1</value>
</param>
<param>
- <key>vlen</key>
+ <key>width5</key>
<value>1</value>
</param>
<param>
- <key>affinity</key>
+ <key>alpha6</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>color6</key>
+ <value>"magenta"</value>
+ </param>
+ <param>
+ <key>label6</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>marker6</key>
+ <value>-1</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(15, 489)</value>
+ <key>style6</key>
+ <value>1</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>width6</key>
+ <value>1</value>
</param>
- </block>
- <block>
- <key>blocks_vector_source_x</key>
<param>
- <key>id</key>
- <value>blocks_vector_source_x_0_1</value>
+ <key>alpha7</key>
+ <value>1.0</value>
</param>
<param>
- <key>_enabled</key>
- <value>False</value>
+ <key>color7</key>
+ <value>"yellow"</value>
</param>
<param>
- <key>type</key>
- <value>float</value>
+ <key>label7</key>
+ <value></value>
</param>
<param>
- <key>vector</key>
- <value>[-0.85,] + (100-1)*[0,]</value>
+ <key>marker7</key>
+ <value>-1</value>
</param>
<param>
- <key>tags</key>
- <value>tagged_streams.make_lengthtags((1024,), (0,), "testing tags")</value>
+ <key>style7</key>
+ <value>1</value>
</param>
<param>
- <key>repeat</key>
- <value>True</value>
+ <key>width7</key>
+ <value>1</value>
</param>
<param>
- <key>vlen</key>
+ <key>alpha8</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>color8</key>
+ <value>"dark red"</value>
+ </param>
+ <param>
+ <key>label8</key>
+ <value></value>
+ </param>
+ <param>
+ <key>marker8</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>style8</key>
<value>1</value>
</param>
<param>
- <key>affinity</key>
+ <key>width8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alpha9</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>color9</key>
+ <value>"dark green"</value>
+ </param>
+ <param>
+ <key>label9</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>marker9</key>
+ <value>-1</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(15, 398)</value>
+ <key>style9</key>
+ <value>1</value>
</param>
<param>
- <key>_rotation</key>
+ <key>width9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>name</key>
+ <value></value>
+ </param>
+ <param>
+ <key>nconnections</key>
+ <value>2</value>
+ </param>
+ <param>
+ <key>size</key>
+ <value>1000</value>
+ </param>
+ <param>
+ <key>srate</key>
+ <value>samp_rate</value>
+ </param>
+ <param>
+ <key>tr_chan</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>blocks_throttle</key>
<param>
- <key>id</key>
- <value>blocks_throttle_0_0</value>
+ <key>tr_delay</key>
+ <value>0.015</value>
</param>
<param>
- <key>_enabled</key>
- <value>False</value>
+ <key>tr_level</key>
+ <value>.1</value>
+ </param>
+ <param>
+ <key>tr_mode</key>
+ <value>qtgui.TRIG_MODE_NORM</value>
+ </param>
+ <param>
+ <key>tr_slope</key>
+ <value>qtgui.TRIG_SLOPE_POS</value>
+ </param>
+ <param>
+ <key>tr_tag</key>
+ <value>""</value>
</param>
<param>
<key>type</key>
- <value>float</value>
+ <value>complex</value>
</param>
<param>
- <key>samples_per_second</key>
- <value>samp_rate</value>
+ <key>update_time</key>
+ <value>0.10</value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>ylabel</key>
+ <value>Amplitude</value>
+ </param>
+ <param>
+ <key>yunit</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>ymax</key>
+ <value>4.5</value>
+ </param>
+ <param>
+ <key>ymin</key>
+ <value>-0.1</value>
+ </param>
+ </block>
+ <block>
+ <key>qtgui_time_sink_x</key>
+ <param>
+ <key>autoscale</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>ctrlpanel</key>
+ <value>False</value>
</param>
<param>
<key>affinity</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>entags</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(267, 414)</value>
+ <value>(857, 173)</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value>1,1,1,1</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>blocks_delay</key>
+ <param>
+ <key>grid</key>
+ <value>False</value>
+ </param>
<param>
<key>id</key>
- <value>blocks_delay_0_0</value>
+ <value>qtgui_time_sink_x_0_1_0</value>
</param>
<param>
- <key>_enabled</key>
+ <key>legend</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
+ <key>alpha1</key>
+ <value>1.0</value>
</param>
<param>
- <key>delay</key>
- <value>int(delay)</value>
+ <key>color1</key>
+ <value>"blue"</value>
</param>
<param>
- <key>num_ports</key>
+ <key>label1</key>
+ <value></value>
+ </param>
+ <param>
+ <key>marker1</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>style1</key>
<value>1</value>
</param>
<param>
- <key>vlen</key>
+ <key>width1</key>
<value>1</value>
</param>
<param>
- <key>affinity</key>
+ <key>alpha10</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>color10</key>
+ <value>"blue"</value>
+ </param>
+ <param>
+ <key>label10</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>marker10</key>
+ <value>-1</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(890, 44)</value>
+ <key>style10</key>
+ <value>1</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>width10</key>
+ <value>1</value>
</param>
- </block>
- <block>
- <key>variable_qtgui_range</key>
<param>
- <key>id</key>
- <value>delay</value>
+ <key>alpha2</key>
+ <value>1.0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>color2</key>
+ <value>"red"</value>
</param>
<param>
- <key>label</key>
- <value>Delay</value>
+ <key>label2</key>
+ <value></value>
</param>
<param>
- <key>value</key>
- <value>300</value>
+ <key>marker2</key>
+ <value>-1</value>
</param>
<param>
- <key>start</key>
- <value>0</value>
+ <key>style2</key>
+ <value>1</value>
</param>
<param>
- <key>stop</key>
- <value>1000</value>
+ <key>width2</key>
+ <value>1</value>
</param>
<param>
- <key>step</key>
+ <key>alpha3</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>color3</key>
+ <value>"green"</value>
+ </param>
+ <param>
+ <key>label3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>marker3</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>style3</key>
<value>1</value>
</param>
<param>
- <key>widget</key>
- <value>counter_slider</value>
+ <key>width3</key>
+ <value>1</value>
</param>
<param>
- <key>orient</key>
- <value>Qt.Horizontal</value>
+ <key>alpha4</key>
+ <value>1.0</value>
</param>
<param>
- <key>min_len</key>
- <value>200</value>
+ <key>color4</key>
+ <value>"black"</value>
</param>
<param>
- <key>gui_hint</key>
+ <key>label4</key>
<value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(814, 390)</value>
+ <key>marker4</key>
+ <value>-1</value>
</param>
<param>
- <key>_rotation</key>
+ <key>style4</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>width4</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alpha5</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>color5</key>
+ <value>"cyan"</value>
+ </param>
+ <param>
+ <key>label5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>marker5</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>style5</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>width5</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alpha6</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>color6</key>
+ <value>"magenta"</value>
+ </param>
+ <param>
+ <key>label6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>marker6</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>style6</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>width6</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alpha7</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>color7</key>
+ <value>"yellow"</value>
+ </param>
+ <param>
+ <key>label7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>marker7</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>style7</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>width7</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alpha8</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>color8</key>
+ <value>"dark red"</value>
+ </param>
+ <param>
+ <key>label8</key>
+ <value></value>
+ </param>
+ <param>
+ <key>marker8</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>style8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>width8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alpha9</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>color9</key>
+ <value>"dark green"</value>
+ </param>
+ <param>
+ <key>label9</key>
+ <value></value>
+ </param>
+ <param>
+ <key>marker9</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>style9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>width9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>name</key>
+ <value></value>
+ </param>
+ <param>
+ <key>nconnections</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>size</key>
+ <value>5100</value>
+ </param>
+ <param>
+ <key>srate</key>
+ <value>samp_rate</value>
+ </param>
+ <param>
+ <key>tr_chan</key>
<value>0</value>
</param>
+ <param>
+ <key>tr_delay</key>
+ <value>0.06</value>
+ </param>
+ <param>
+ <key>tr_level</key>
+ <value>.5</value>
+ </param>
+ <param>
+ <key>tr_mode</key>
+ <value>qtgui.TRIG_MODE_TAG</value>
+ </param>
+ <param>
+ <key>tr_slope</key>
+ <value>qtgui.TRIG_SLOPE_POS</value>
+ </param>
+ <param>
+ <key>tr_tag</key>
+ <value>strobe</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>complex</value>
+ </param>
+ <param>
+ <key>update_time</key>
+ <value>0.001</value>
+ </param>
+ <param>
+ <key>ylabel</key>
+ <value>Amplitude</value>
+ </param>
+ <param>
+ <key>yunit</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>ymax</key>
+ <value>1.5</value>
+ </param>
+ <param>
+ <key>ymin</key>
+ <value>-0.1</value>
+ </param>
</block>
<connection>
- <source_block_id>blocks_vector_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>blocks_throttle_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_delay_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>analog_fastnoise_source_x_0</source_block_id>
<sink_block_id>blocks_add_xx_1</sink_block_id>
<source_key>0</source_key>
@@ -1210,28 +2509,28 @@
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>fir_filter_xxx_0</source_block_id>
- <sink_block_id>blocks_delay_0_0</sink_block_id>
+ <source_block_id>blocks_add_xx_1</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_delay_0_0</source_block_id>
- <sink_block_id>qtgui_time_sink_x_0_1</sink_block_id>
+ <source_block_id>blocks_add_xx_1</source_block_id>
+ <sink_block_id>qtgui_time_sink_x_0_1_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>fir_filter_xxx_0</source_block_id>
- <sink_block_id>qtgui_time_sink_x_0_1</sink_block_id>
+ <source_block_id>blocks_delay_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_vector_source_x_0_0</source_block_id>
- <sink_block_id>qtgui_time_sink_x_0</sink_block_id>
+ <source_block_id>blocks_delay_0_0</source_block_id>
+ <sink_block_id>qtgui_time_sink_x_0_1</sink_block_id>
<source_key>0</source_key>
- <sink_key>1</sink_key>
+ <sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>blocks_tags_strobe_0</source_block_id>
@@ -1240,28 +2539,34 @@
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>blocks_add_xx_1</source_block_id>
- <sink_block_id>qtgui_time_sink_x_0_1_0</sink_block_id>
+ <source_block_id>blocks_throttle_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_add_xx_1</source_block_id>
- <sink_block_id>qtgui_time_sink_x_0</sink_block_id>
+ <source_block_id>blocks_throttle_0_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>
<connection>
- <source_block_id>blocks_vector_source_x_0_0_0</source_block_id>
- <sink_block_id>qtgui_time_sink_x_0_0</sink_block_id>
+ <source_block_id>blocks_vector_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>blocks_vector_source_x_0_0</source_block_id>
+ <sink_block_id>qtgui_time_sink_x_0</sink_block_id>
<source_key>0</source_key>
<sink_key>1</sink_key>
</connection>
<connection>
- <source_block_id>blocks_throttle_0_0</source_block_id>
+ <source_block_id>blocks_vector_source_x_0_0_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>
+ <sink_key>1</sink_key>
</connection>
<connection>
<source_block_id>blocks_vector_source_x_0_1</source_block_id>
@@ -1269,4 +2574,16 @@
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
+ <connection>
+ <source_block_id>fir_filter_xxx_0</source_block_id>
+ <sink_block_id>blocks_delay_0_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>fir_filter_xxx_0</source_block_id>
+ <sink_block_id>qtgui_time_sink_x_0_1</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>1</sink_key>
+ </connection>
</flow_graph>
diff --git a/gr-qtgui/grc/CMakeLists.txt b/gr-qtgui/grc/CMakeLists.txt
index 7da5fbc352..74e6958639 100644
--- a/gr-qtgui/grc/CMakeLists.txt
+++ b/gr-qtgui/grc/CMakeLists.txt
@@ -19,4 +19,29 @@
########################################################################
file(GLOB xml_files "*.xml")
-install(FILES ${xml_files} DESTINATION ${GRC_BLOCKS_DIR})
+
+macro(REPLACE_IN_FILE _xml_block match replace)
+ set(xml_block_src "${CMAKE_CURRENT_SOURCE_DIR}/${_xml_block}")
+ set(xml_block "${CMAKE_CURRENT_BINARY_DIR}/${_xml_block}")
+
+ list(REMOVE_ITEM xml_files "${xml_block_src}")
+ file(READ "${xml_block_src}" xml_block_src_text)
+ string(REPLACE "${match}" "${replace}"
+ xml_block_text "${xml_block_src_text}")
+ file(WRITE "${xml_block}" "${xml_block_text}")
+
+ list(APPEND generated_xml_files "${xml_block}")
+endmacro()
+
+
+if(DESIRED_QT_VERSION EQUAL 4)
+ foreach(xml_block_src ${xml_files})
+ get_filename_component(xml_block "${xml_block_src}" NAME)
+ REPLACE_IN_FILE("${xml_block}" "PyQt5" "PyQt4")
+ endforeach()
+endif()
+
+install(
+ FILES ${xml_files} ${generated_xml_files}
+ DESTINATION "${GRC_BLOCKS_DIR}"
+)
diff --git a/gr-qtgui/grc/qtgui_ber_sink_b.xml b/gr-qtgui/grc/qtgui_ber_sink_b.xml
index da3fc6ebf8..05a36dfbc0 100644
--- a/gr-qtgui/grc/qtgui_ber_sink_b.xml
+++ b/gr-qtgui/grc/qtgui_ber_sink_b.xml
@@ -7,7 +7,7 @@
<block>
<name>QT GUI Bercurve Sink</name>
<key>qtgui_bercurve_sink</key>
- <import>from PyQt4 import Qt</import>
+ <import>from PyQt5import Qt</import>
<import>from gnuradio import qtgui</import>
<import>import sip</import>
<import>import numpy</import>
diff --git a/gr-qtgui/grc/qtgui_check_box.xml b/gr-qtgui/grc/qtgui_check_box.xml
index 67c8848a22..ccee59dd92 100644
--- a/gr-qtgui/grc/qtgui_check_box.xml
+++ b/gr-qtgui/grc/qtgui_check_box.xml
@@ -8,7 +8,7 @@
<block>
<name>QT GUI Check Box</name>
<key>variable_qtgui_check_box</key>
- <import>from PyQt4 import Qt</import>
+ <import>from PyQt5 import Qt</import>
<var_make>self.$(id) = $(id) = $value</var_make>
<make>#set $win = '_%s_check_box'%$id
#if not $label()
diff --git a/gr-qtgui/grc/qtgui_chooser.xml b/gr-qtgui/grc/qtgui_chooser.xml
index f018354dd4..f79bb8ccb3 100644
--- a/gr-qtgui/grc/qtgui_chooser.xml
+++ b/gr-qtgui/grc/qtgui_chooser.xml
@@ -8,8 +8,8 @@
<block>
<name>QT GUI Chooser</name>
<key>variable_qtgui_chooser</key>
- <import>from PyQt4 import Qt</import>
- <import>from PyQt4.QtCore import QObject, pyqtSlot</import>
+ <import>from PyQt5 import Qt</import>
+ <import>from PyQt5.QtCore import QObject, pyqtSlot</import>
<var_make>self.$(id) = $(id) = $value</var_make>
<make>#slurp
#set $all_options = [$option0, $option1, $option2, $option3, $option4][:int($num_opts())]
diff --git a/gr-qtgui/grc/qtgui_const_sink_x.xml b/gr-qtgui/grc/qtgui_const_sink_x.xml
index 755f12f964..10f82cce82 100644
--- a/gr-qtgui/grc/qtgui_const_sink_x.xml
+++ b/gr-qtgui/grc/qtgui_const_sink_x.xml
@@ -7,7 +7,7 @@
<block>
<name>QT GUI Constellation Sink</name>
<key>qtgui_const_sink_x</key>
- <import>from PyQt4 import Qt</import>
+ <import>from PyQt5 import Qt</import>
<import>from gnuradio import qtgui</import>
<import>import sip</import>
<make>#set $win = 'self._%s_win'%$id
diff --git a/gr-qtgui/grc/qtgui_edit_box_msg.xml b/gr-qtgui/grc/qtgui_edit_box_msg.xml
index c7c758a612..d77a4b3e1b 100644
--- a/gr-qtgui/grc/qtgui_edit_box_msg.xml
+++ b/gr-qtgui/grc/qtgui_edit_box_msg.xml
@@ -7,7 +7,7 @@
<block>
<name>QT GUI Message Edit Box</name>
<key>qtgui_edit_box_msg</key>
- <import>from PyQt4 import Qt</import>
+ <import>from PyQt5 import Qt</import>
<import>from gnuradio import qtgui</import>
<import>import sip</import>
<make>#set $win = 'self._%s_win'%$id
diff --git a/gr-qtgui/grc/qtgui_entry.xml b/gr-qtgui/grc/qtgui_entry.xml
index cce2edb4b2..fc0f4089d1 100644
--- a/gr-qtgui/grc/qtgui_entry.xml
+++ b/gr-qtgui/grc/qtgui_entry.xml
@@ -8,7 +8,7 @@
<block>
<name>QT GUI Entry</name>
<key>variable_qtgui_entry</key>
- <import>from PyQt4 import Qt</import>
+ <import>from PyQt5 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
diff --git a/gr-qtgui/grc/qtgui_freq_sink_x.xml b/gr-qtgui/grc/qtgui_freq_sink_x.xml
index 009a184327..ed39db7781 100644
--- a/gr-qtgui/grc/qtgui_freq_sink_x.xml
+++ b/gr-qtgui/grc/qtgui_freq_sink_x.xml
@@ -7,7 +7,7 @@
<block>
<name>QT GUI Frequency Sink</name>
<key>qtgui_freq_sink_x</key>
- <import>from PyQt4 import Qt</import>
+ <import>from PyQt5 import Qt</import>
<import>from gnuradio import qtgui</import>
<import>from gnuradio.filter import firdes</import>
<import>import sip</import>
diff --git a/gr-qtgui/grc/qtgui_histogram_sink_x.xml b/gr-qtgui/grc/qtgui_histogram_sink_x.xml
index a789d2e4fa..9e3dcb104f 100644
--- a/gr-qtgui/grc/qtgui_histogram_sink_x.xml
+++ b/gr-qtgui/grc/qtgui_histogram_sink_x.xml
@@ -7,7 +7,7 @@
<block>
<name>QT GUI Histogram Sink</name>
<key>qtgui_histogram_sink_x</key>
- <import>from PyQt4 import Qt</import>
+ <import>from PyQt5 import Qt</import>
<import>from gnuradio import qtgui</import>
<import>import sip</import>
<make>#set $win = 'self._%s_win'%$id
diff --git a/gr-qtgui/grc/qtgui_label.xml b/gr-qtgui/grc/qtgui_label.xml
index 0d844a1ab4..18d4e3a0db 100644
--- a/gr-qtgui/grc/qtgui_label.xml
+++ b/gr-qtgui/grc/qtgui_label.xml
@@ -9,7 +9,7 @@
<block>
<name>QT GUI Label</name>
<key>variable_qtgui_label</key>
- <import>from PyQt4 import Qt</import>
+ <import>from PyQt5 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
diff --git a/gr-qtgui/grc/qtgui_number_sink.xml b/gr-qtgui/grc/qtgui_number_sink.xml
index d10b7325c0..06837493c3 100644
--- a/gr-qtgui/grc/qtgui_number_sink.xml
+++ b/gr-qtgui/grc/qtgui_number_sink.xml
@@ -7,7 +7,7 @@
<block>
<name>QT GUI Number Sink</name>
<key>qtgui_number_sink</key>
- <import>from PyQt4 import Qt</import>
+ <import>from PyQt5 import Qt</import>
<import>from gnuradio import qtgui</import>
<import>import sip</import>
<make>#set $win = 'self._%s_win'%$id
diff --git a/gr-qtgui/grc/qtgui_push_button.xml b/gr-qtgui/grc/qtgui_push_button.xml
index a535bb6473..49c2e9d6f0 100644
--- a/gr-qtgui/grc/qtgui_push_button.xml
+++ b/gr-qtgui/grc/qtgui_push_button.xml
@@ -8,7 +8,7 @@
<block>
<name>QT GUI Push Button</name>
<key>variable_qtgui_push_button</key>
- <import>from PyQt4 import Qt</import>
+ <import>from PyQt5 import Qt</import>
<var_make>self.$(id) = $(id) = $value</var_make>
<make>#set $win = '_%s_push_button'%$id
#if not $label()
diff --git a/gr-qtgui/grc/qtgui_sink_x.xml b/gr-qtgui/grc/qtgui_sink_x.xml
index 7488ea59d8..a9bc469cd2 100644
--- a/gr-qtgui/grc/qtgui_sink_x.xml
+++ b/gr-qtgui/grc/qtgui_sink_x.xml
@@ -7,7 +7,7 @@
<block>
<name>QT GUI Sink</name>
<key>qtgui_sink_x</key>
- <import>from PyQt4 import Qt</import>
+ <import>from PyQt5 import Qt</import>
<import>from gnuradio import qtgui</import>
<import>from gnuradio.filter import firdes</import>
<import>import sip</import>
diff --git a/gr-qtgui/grc/qtgui_tab_widget.xml b/gr-qtgui/grc/qtgui_tab_widget.xml
index 1bbadc8e51..805542cc8b 100644
--- a/gr-qtgui/grc/qtgui_tab_widget.xml
+++ b/gr-qtgui/grc/qtgui_tab_widget.xml
@@ -7,7 +7,7 @@
<block>
<name>QT GUI Tab Widget</name>
<key>qtgui_tab_widget</key>
- <import>from PyQt4 import Qt</import>
+ <import>from PyQt5 import Qt</import>
<make>#set $win = 'self.%s'%$id
Qt.QTabWidget()
#set $all_labels = [$label0, $label1, $label2, $label3, $label4,
diff --git a/gr-qtgui/grc/qtgui_time_raster_x.xml b/gr-qtgui/grc/qtgui_time_raster_x.xml
index 0359dc3b71..d458f67eb9 100644
--- a/gr-qtgui/grc/qtgui_time_raster_x.xml
+++ b/gr-qtgui/grc/qtgui_time_raster_x.xml
@@ -7,7 +7,7 @@
<block>
<name>QT GUI Time Raster Sink</name>
<key>qtgui_time_raster_sink_x</key>
- <import>from PyQt4 import Qt</import>
+ <import>from PyQt5 import Qt</import>
<import>from gnuradio import qtgui</import>
<import>import sip</import>
<make>#set $win = 'self._%s_win'%$id
diff --git a/gr-qtgui/grc/qtgui_time_sink_x.xml b/gr-qtgui/grc/qtgui_time_sink_x.xml
index c0584b6d34..f78c3e2958 100644
--- a/gr-qtgui/grc/qtgui_time_sink_x.xml
+++ b/gr-qtgui/grc/qtgui_time_sink_x.xml
@@ -7,7 +7,7 @@
<block>
<name>QT GUI Time Sink</name>
<key>qtgui_time_sink_x</key>
- <import>from PyQt4 import Qt</import>
+ <import>from PyQt5 import Qt</import>
<import>from gnuradio import qtgui</import>
<import>from gnuradio.filter import firdes</import>
<import>import sip</import>
diff --git a/gr-qtgui/grc/qtgui_vector_sink_f.xml b/gr-qtgui/grc/qtgui_vector_sink_f.xml
index 9f40d57729..0f456323bf 100644
--- a/gr-qtgui/grc/qtgui_vector_sink_f.xml
+++ b/gr-qtgui/grc/qtgui_vector_sink_f.xml
@@ -7,7 +7,7 @@
<block>
<name>QT GUI Vector Sink</name>
<key>qtgui_vector_sink_f</key>
- <import>from PyQt4 import Qt</import>
+ <import>from PyQt5 import Qt</import>
<import>from gnuradio import qtgui</import>
<import>import sip</import>
<make>#set $win = 'self._%s_win'%$id
diff --git a/gr-qtgui/grc/qtgui_waterfall_sink_x.xml b/gr-qtgui/grc/qtgui_waterfall_sink_x.xml
index cdecd5cce1..a684492246 100644
--- a/gr-qtgui/grc/qtgui_waterfall_sink_x.xml
+++ b/gr-qtgui/grc/qtgui_waterfall_sink_x.xml
@@ -7,7 +7,7 @@
<block>
<name>QT GUI Waterfall Sink</name>
<key>qtgui_waterfall_sink_x</key>
- <import>from PyQt4 import Qt</import>
+ <import>from PyQt5 import Qt</import>
<import>from gnuradio import qtgui</import>
<import>from gnuradio.filter import firdes</import>
<import>import sip</import>
diff --git a/gr-qtgui/include/QtWidgets/QRegExpValidator b/gr-qtgui/include/QtWidgets/QRegExpValidator
new file mode 100644
index 0000000000..17f6ce8333
--- /dev/null
+++ b/gr-qtgui/include/QtWidgets/QRegExpValidator
@@ -0,0 +1,9 @@
+/*
+ * The Qt5 version of the 'uic' compiler generates incorrect code right now.
+ * The bug has been reported (https://bugreports.qt.io/browse/QTBUG-48492) and
+ * is pending review.
+ *
+ * This file will make sure that the build of gr-qtgui will succeed with the
+ * broken version of 'uic'.
+ */
+#include <QtGui/QRegExpValidator>
diff --git a/gr-qtgui/include/gnuradio/qtgui/form_menus.h b/gr-qtgui/include/gnuradio/qtgui/form_menus.h
index cb9b775e8b..1fa7413117 100644
--- a/gr-qtgui/include/gnuradio/qtgui/form_menus.h
+++ b/gr-qtgui/include/gnuradio/qtgui/form_menus.h
@@ -28,6 +28,11 @@
#include <QtGui/QtGui>
#include <QtGui/QIntValidator>
#include <QtGui/QDoubleValidator>
+
+#if QT_VERSION >= 0x050000
+#include <QtWidgets/QtWidgets>
+#endif
+
#include <qwt_symbol.h>
#include <gnuradio/filter/firdes.h>
#include <gnuradio/qtgui/qtgui_types.h>
diff --git a/gr-qtgui/lib/CMakeLists.txt b/gr-qtgui/lib/CMakeLists.txt
index aafb61699d..e9740a8cf0 100644
--- a/gr-qtgui/lib/CMakeLists.txt
+++ b/gr-qtgui/lib/CMakeLists.txt
@@ -45,8 +45,14 @@ set(qtgui_moc_hdrs
${qtgui_mod_includedir}/VectorDisplayPlot.h
edit_box_msg_impl.h
)
-QT4_WRAP_CPP(qtgui_moc_sources ${qtgui_moc_hdrs})
-QT4_WRAP_UI(qtgui_ui_hdrs spectrumdisplayform.ui)
+
+if (${DESIRED_QT_VERSION} MATCHES 4)
+ QT4_WRAP_CPP(qtgui_moc_sources ${qtgui_moc_hdrs})
+ QT4_WRAP_UI(qtgui_ui_hdrs spectrumdisplayform.ui)
+else()
+ QT5_WRAP_CPP(qtgui_moc_sources ${qtgui_moc_hdrs})
+ QT5_WRAP_UI(qtgui_ui_hdrs spectrumdisplayform.ui)
+endif()
#FIXME the sources expect <foo>.ui.h, but the macros generate ui_foo.h
#avoid changing the sources by generating the header with the include
diff --git a/gr-qtgui/lib/SpectrumGUIClass.cc b/gr-qtgui/lib/SpectrumGUIClass.cc
index cf7c728251..fe1973fc75 100644
--- a/gr-qtgui/lib/SpectrumGUIClass.cc
+++ b/gr-qtgui/lib/SpectrumGUIClass.cc
@@ -26,7 +26,6 @@
#include <gnuradio/qtgui/SpectrumGUIClass.h>
//Added by qt3to4:
#include <QEvent>
-#include <QCustomEvent>
#include <volk/volk.h>
const long SpectrumGUIClass::MAX_FFT_SIZE = 32768;
diff --git a/gr-qtgui/lib/const_sink_c_impl.cc b/gr-qtgui/lib/const_sink_c_impl.cc
index eaaf5f570a..7aa99a1c68 100644
--- a/gr-qtgui/lib/const_sink_c_impl.cc
+++ b/gr-qtgui/lib/const_sink_c_impl.cc
@@ -128,7 +128,7 @@ namespace gr {
d_qApplication = qApp;
}
else {
-#if QT_VERSION >= 0x040500
+#if QT_VERSION >= 0x040500 && QT_VERSION < 0x050000
std::string style = prefs::singleton()->get_string("qtgui", "style", "raster");
QApplication::setGraphicsSystem(QString(style.c_str()));
#endif
diff --git a/gr-qtgui/lib/edit_box_msg_impl.cc b/gr-qtgui/lib/edit_box_msg_impl.cc
index e0c5f64b3d..e0b5f256b6 100644
--- a/gr-qtgui/lib/edit_box_msg_impl.cc
+++ b/gr-qtgui/lib/edit_box_msg_impl.cc
@@ -65,10 +65,6 @@ namespace gr {
d_qApplication = qApp;
}
else {
-#if QT_VERSION >= 0x040500
- std::string style = prefs::singleton()->get_string("qtgui", "style", "raster");
- QApplication::setGraphicsSystem(QString(style.c_str()));
-#endif
d_qApplication = new QApplication(d_argc, &d_argv);
}
diff --git a/gr-qtgui/lib/freq_sink_c_impl.cc b/gr-qtgui/lib/freq_sink_c_impl.cc
index 517786d58d..544c8b3c47 100644
--- a/gr-qtgui/lib/freq_sink_c_impl.cc
+++ b/gr-qtgui/lib/freq_sink_c_impl.cc
@@ -154,7 +154,7 @@ namespace gr {
d_qApplication = qApp;
}
else {
-#if QT_VERSION >= 0x040500
+#if QT_VERSION >= 0x040500 && QT_VERSION < 0x050000
std::string style = prefs::singleton()->get_string("qtgui", "style", "raster");
QApplication::setGraphicsSystem(QString(style.c_str()));
#endif
diff --git a/gr-qtgui/lib/freq_sink_f_impl.cc b/gr-qtgui/lib/freq_sink_f_impl.cc
index 90624e78eb..816b37415e 100644
--- a/gr-qtgui/lib/freq_sink_f_impl.cc
+++ b/gr-qtgui/lib/freq_sink_f_impl.cc
@@ -153,7 +153,7 @@ namespace gr {
d_qApplication = qApp;
}
else {
-#if QT_VERSION >= 0x040500
+#if QT_VERSION >= 0x040500 && QT_VERSION < 0x050000
std::string style = prefs::singleton()->get_string("qtgui", "style", "raster");
QApplication::setGraphicsSystem(QString(style.c_str()));
#endif
diff --git a/gr-qtgui/lib/histogram_sink_f_impl.cc b/gr-qtgui/lib/histogram_sink_f_impl.cc
index 4a1267c129..376f50a4a4 100644
--- a/gr-qtgui/lib/histogram_sink_f_impl.cc
+++ b/gr-qtgui/lib/histogram_sink_f_impl.cc
@@ -115,7 +115,7 @@ namespace gr {
d_qApplication = qApp;
}
else {
-#if QT_VERSION >= 0x040500
+#if QT_VERSION >= 0x040500 && QT_VERSION < 0x050000
std::string style = prefs::singleton()->get_string("qtgui", "style", "raster");
QApplication::setGraphicsSystem(QString(style.c_str()));
#endif
diff --git a/gr-qtgui/lib/sink_c_impl.cc b/gr-qtgui/lib/sink_c_impl.cc
index c1ee694213..14ddde8e20 100644
--- a/gr-qtgui/lib/sink_c_impl.cc
+++ b/gr-qtgui/lib/sink_c_impl.cc
@@ -130,7 +130,7 @@ namespace gr {
d_qApplication = qApp;
}
else {
-#if QT_VERSION >= 0x040500
+#if QT_VERSION >= 0x040500 && QT_VERSION < 0x050000
std::string style = prefs::singleton()->get_string("qtgui", "style", "raster");
QApplication::setGraphicsSystem(QString(style.c_str()));
#endif
diff --git a/gr-qtgui/lib/sink_f_impl.cc b/gr-qtgui/lib/sink_f_impl.cc
index d9bc526dbf..e60e98a59b 100644
--- a/gr-qtgui/lib/sink_f_impl.cc
+++ b/gr-qtgui/lib/sink_f_impl.cc
@@ -130,7 +130,7 @@ namespace gr {
d_qApplication = qApp;
}
else {
-#if QT_VERSION >= 0x040500
+#if QT_VERSION >= 0x040500 && QT_VERSION < 0x050000
std::string style = prefs::singleton()->get_string("qtgui", "style", "raster");
QApplication::setGraphicsSystem(QString(style.c_str()));
#endif
diff --git a/gr-qtgui/lib/time_raster_sink_b_impl.cc b/gr-qtgui/lib/time_raster_sink_b_impl.cc
index c0990a9890..7b252a4d1c 100644
--- a/gr-qtgui/lib/time_raster_sink_b_impl.cc
+++ b/gr-qtgui/lib/time_raster_sink_b_impl.cc
@@ -130,7 +130,7 @@ namespace gr {
d_qApplication = qApp;
}
else {
-#if QT_VERSION >= 0x040500
+#if QT_VERSION >= 0x040500 && QT_VERSION < 0x050000
std::string style = prefs::singleton()->get_string("qtgui", "style", "raster");
QApplication::setGraphicsSystem(QString(style.c_str()));
#endif
diff --git a/gr-qtgui/lib/time_raster_sink_f_impl.cc b/gr-qtgui/lib/time_raster_sink_f_impl.cc
index 2fb3e7db68..0e4cb1d345 100644
--- a/gr-qtgui/lib/time_raster_sink_f_impl.cc
+++ b/gr-qtgui/lib/time_raster_sink_f_impl.cc
@@ -128,7 +128,7 @@ namespace gr {
d_qApplication = qApp;
}
else {
-#if QT_VERSION >= 0x040500
+#if QT_VERSION >= 0x040500 && QT_VERSION < 0x050000
std::string style = prefs::singleton()->get_string("qtgui", "style", "raster");
QApplication::setGraphicsSystem(QString(style.c_str()));
#endif
diff --git a/gr-qtgui/lib/time_sink_c_impl.cc b/gr-qtgui/lib/time_sink_c_impl.cc
index 209f03340f..b59e4c9461 100644
--- a/gr-qtgui/lib/time_sink_c_impl.cc
+++ b/gr-qtgui/lib/time_sink_c_impl.cc
@@ -129,7 +129,7 @@ namespace gr {
d_qApplication = qApp;
}
else {
-#if QT_VERSION >= 0x040500
+#if QT_VERSION >= 0x040500 && QT_VERSION < 0x050000
std::string style = prefs::singleton()->get_string("qtgui", "style", "raster");
QApplication::setGraphicsSystem(QString(style.c_str()));
#endif
diff --git a/gr-qtgui/lib/time_sink_f_impl.cc b/gr-qtgui/lib/time_sink_f_impl.cc
index 50a86d7dff..28bbb44ee9 100644
--- a/gr-qtgui/lib/time_sink_f_impl.cc
+++ b/gr-qtgui/lib/time_sink_f_impl.cc
@@ -126,7 +126,7 @@ namespace gr {
d_qApplication = qApp;
}
else {
-#if QT_VERSION >= 0x040500
+#if QT_VERSION >= 0x040500 && QT_VERSION < 0x050000
std::string style = prefs::singleton()->get_string("qtgui", "style", "raster");
QApplication::setGraphicsSystem(QString(style.c_str()));
#endif
diff --git a/gr-qtgui/lib/vector_sink_f_impl.cc b/gr-qtgui/lib/vector_sink_f_impl.cc
index ba139b97f4..bafd1b73aa 100644
--- a/gr-qtgui/lib/vector_sink_f_impl.cc
+++ b/gr-qtgui/lib/vector_sink_f_impl.cc
@@ -139,7 +139,7 @@ namespace gr {
d_qApplication = qApp;
}
else {
-#if QT_VERSION >= 0x040500
+#if QT_VERSION >= 0x040500 && QT_VERSION < 0x050000
std::string style = prefs::singleton()->get_string("qtgui", "style", "raster");
QApplication::setGraphicsSystem(QString(style.c_str()));
#endif
diff --git a/gr-qtgui/lib/waterfall_sink_c_impl.cc b/gr-qtgui/lib/waterfall_sink_c_impl.cc
index 7395aaf2a9..d3ca347c36 100644
--- a/gr-qtgui/lib/waterfall_sink_c_impl.cc
+++ b/gr-qtgui/lib/waterfall_sink_c_impl.cc
@@ -154,7 +154,7 @@ namespace gr {
d_qApplication = qApp;
}
else {
-#if QT_VERSION >= 0x040500
+#if QT_VERSION >= 0x040500 && QT_VERSION < 0x050000
std::string style = prefs::singleton()->get_string("qtgui", "style", "raster");
QApplication::setGraphicsSystem(QString(style.c_str()));
#endif
diff --git a/gr-qtgui/lib/waterfall_sink_f_impl.cc b/gr-qtgui/lib/waterfall_sink_f_impl.cc
index b6f50de31d..4b062de14d 100644
--- a/gr-qtgui/lib/waterfall_sink_f_impl.cc
+++ b/gr-qtgui/lib/waterfall_sink_f_impl.cc
@@ -154,7 +154,7 @@ namespace gr {
d_qApplication = qApp;
}
else {
-#if QT_VERSION >= 0x040500
+#if QT_VERSION >= 0x040500 && QT_VERSION < 0x050000
std::string style = prefs::singleton()->get_string("qtgui", "style", "raster");
QApplication::setGraphicsSystem(QString(style.c_str()));
#endif
diff --git a/gr-qtgui/python/qtgui/CMakeLists.txt b/gr-qtgui/python/qtgui/CMakeLists.txt
index 212c98ebb4..23e75e6583 100644
--- a/gr-qtgui/python/qtgui/CMakeLists.txt
+++ b/gr-qtgui/python/qtgui/CMakeLists.txt
@@ -20,9 +20,17 @@
########################################################################
include(GrPython)
+if (DESIRED_QT_VERSION MATCHES 4)
+ set(PY_QT_IMPORT "from PyQt4 import Qt, QtCore, QtGui as QtWidgets")
+else()
+ set(PY_QT_IMPORT "from PyQt5 import Qt, QtCore, QtWidgets")
+endif()
+
+configure_file(range.py.cmakein "${CMAKE_CURRENT_BINARY_DIR}/range.py" @ONLY)
+
GR_PYTHON_INSTALL(
FILES __init__.py
- range.py
+ "${CMAKE_CURRENT_BINARY_DIR}/range.py"
DESTINATION ${GR_PYTHON_DIR}/gnuradio/qtgui
)
diff --git a/gr-qtgui/python/qtgui/range.py b/gr-qtgui/python/qtgui/range.py.cmakein
index 3eafc9002e..45aa762ae3 100755
--- a/gr-qtgui/python/qtgui/range.py
+++ b/gr-qtgui/python/qtgui/range.py.cmakein
@@ -21,8 +21,7 @@
# Boston, MA 02110-1301, USA.
#
-from PyQt4 import Qt, QtCore, QtGui
-
+@PY_QT_IMPORT@
class Range(object):
def __init__(self, minv, maxv, step, default, min_length):
@@ -63,10 +62,10 @@ class Range(object):
return (val*self.step+self.min)
-class RangeWidget(QtGui.QWidget):
+class RangeWidget(QtWidgets.QWidget):
def __init__(self, ranges, slot, label, style, rangeType=float):
""" Creates the QT Range widget """
- QtGui.QWidget.__init__(self)
+ QtWidgets.QWidget.__init__(self)
self.range = ranges
self.style = style
@@ -97,10 +96,10 @@ class RangeWidget(QtGui.QWidget):
layout.addWidget(self.d_widget)
self.setLayout(layout)
- class Dial(QtGui.QDial):
+ class Dial(QtWidgets.QDial):
""" Creates the range using a dial """
def __init__(self, parent, ranges, slot, rangeType=float):
- QtGui.QDial.__init__(self, parent)
+ QtWidgets.QDial.__init__(self, parent)
self.rangeType = rangeType
@@ -123,10 +122,10 @@ class RangeWidget(QtGui.QWidget):
val = self.range.map_range(value)
self.notifyChanged(self.rangeType(val))
- class Slider(QtGui.QSlider):
+ class Slider(QtWidgets.QSlider):
""" Creates the range using a slider """
def __init__(self, parent, ranges, slot, rangeType=float):
- QtGui.QSlider.__init__(self, QtCore.Qt.Horizontal, parent)
+ QtWidgets.QSlider.__init__(self, QtCore.Qt.Horizontal, parent)
self.rangeType = rangeType
@@ -165,18 +164,18 @@ class RangeWidget(QtGui.QWidget):
event.accept()
# Use repaint rather than calling the super mousePressEvent.
# Calling super causes issue where slider jumps to wrong value.
- QtGui.QSlider.repaint(self)
+ QtWidgets.QSlider.repaint(self)
def mouseMoveEvent(self, event):
new = self.minimum() + ((self.maximum()-self.minimum()) * event.x()) / self.width()
self.setValue(new)
event.accept()
- QtGui.QSlider.repaint(self)
+ QtWidgets.QSlider.repaint(self)
- class Counter(QtGui.QDoubleSpinBox):
+ class Counter(QtWidgets.QDoubleSpinBox):
""" Creates the range using a counter """
def __init__(self, parent, ranges, slot, rangeType=float):
- QtGui.QDoubleSpinBox.__init__(self, parent)
+ QtWidgets.QDoubleSpinBox.__init__(self, parent)
self.rangeType = rangeType
@@ -195,10 +194,10 @@ class RangeWidget(QtGui.QWidget):
""" Handle the valueChanged signal by converting to the right type """
self.notifyChanged(self.rangeType(value))
- class CounterSlider(QtGui.QWidget):
+ class CounterSlider(QtWidgets.QWidget):
""" Creates the range using a counter and slider """
def __init__(self, parent, ranges, slot, rangeType=float):
- QtGui.QWidget.__init__(self, parent)
+ QtWidgets.QWidget.__init__(self, parent)
self.rangeType = rangeType
diff --git a/gr-qtgui/themes/dark.qss b/gr-qtgui/themes/dark.qss
index 5b236fa3aa..575f475ca8 100644
--- a/gr-qtgui/themes/dark.qss
+++ b/gr-qtgui/themes/dark.qss
@@ -15,7 +15,6 @@ DisplayPlot {
qproperty-line_color1: green;
qproperty-line_color2: green;
qproperty-line_color3: green;
- qproperty-line_style1: SolidLine;
qproperty-line_style2: DashLine;
qproperty-line_style3: DotLine;
qproperty-axes_label_font_size: 18;
diff --git a/gr-trellis/examples/grc/.gitignore b/gr-trellis/examples/grc/.gitignore
new file mode 100644
index 0000000000..f104652b68
--- /dev/null
+++ b/gr-trellis/examples/grc/.gitignore
@@ -0,0 +1 @@
+*.py
diff --git a/gr-trellis/examples/grc/interference_cancellation.grc b/gr-trellis/examples/grc/interference_cancellation.grc
index 1dbcf69b86..479dd64dc9 100644
--- a/gr-trellis/examples/grc/interference_cancellation.grc
+++ b/gr-trellis/examples/grc/interference_cancellation.grc
@@ -1,896 +1,1762 @@
-<?xml version='1.0' encoding='ASCII'?>
+<?xml version='1.0' encoding='utf-8'?>
+<?grc format='1' created='3.7.11'?>
<flow_graph>
<timestamp>Fri Sep 26 18:21:00 2014</timestamp>
<block>
<key>options</key>
<param>
- <key>id</key>
- <value>int_cancellation</value>
+ <key>author</key>
+ <value>AA</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>window_size</key>
+ <value>2048, 2048</value>
</param>
<param>
- <key>title</key>
- <value>Superposition Coding</value>
+ <key>category</key>
+ <value>Custom</value>
</param>
<param>
- <key>author</key>
- <value>AA</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>description</key>
<value>gnuradio flow graph</value>
</param>
<param>
- <key>window_size</key>
- <value>2048, 2048</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>generate_options</key>
- <value>wx_gui</value>
+ <key>_coordinate</key>
+ <value>(0, 4)</value>
</param>
<param>
- <key>category</key>
- <value>Custom</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>run_options</key>
- <value>prompt</value>
+ <key>generate_options</key>
+ <value>qt_gui</value>
</param>
<param>
- <key>run</key>
- <value>True</value>
+ <key>hier_block_src_path</key>
+ <value>.:</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>int_cancellation</value>
</param>
<param>
<key>max_nouts</key>
<value>0</value>
</param>
<param>
+ <key>qt_qss_theme</key>
+ <value></value>
+ </param>
+ <param>
<key>realtime_scheduling</key>
<value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(10, 10)</value>
+ <key>run_command</key>
+ <value>{python} -u {filename}</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>run_options</key>
+ <value>prompt</value>
+ </param>
+ <param>
+ <key>run</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>thread_safe_setters</key>
+ <value></value>
+ </param>
+ <param>
+ <key>title</key>
+ <value>Superposition Coding</value>
</param>
</block>
<block>
<key>variable</key>
<param>
- <key>id</key>
- <value>prefix</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>"@FSM_FILE_INSTALL_DIR@"</value>
- </param>
- <param>
<key>_coordinate</key>
- <value>(871, 14)</value>
+ <value>(544, 4)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>variable</key>
<param>
<key>id</key>
<value>R</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>value</key>
+ <value>100e3</value>
+ </param>
+ </block>
+ <block>
+ <key>variable_qtgui_range</key>
+ <param>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>value</key>
- <value>100e3</value>
+ <value>.1</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>1</value>
</param>
<param>
<key>_coordinate</key>
- <value>(748, 12)</value>
+ <value>(176, 4)</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value></value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
+ <param>
+ <key>id</key>
+ <value>alpha</value>
+ </param>
+ <param>
+ <key>label</key>
+ <value>P1/P</value>
+ </param>
+ <param>
+ <key>min_len</key>
+ <value>200</value>
+ </param>
+ <param>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
+ </param>
+ <param>
+ <key>start</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>step</key>
+ <value>.01</value>
+ </param>
+ <param>
+ <key>stop</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>rangeType</key>
+ <value>float</value>
+ </param>
+ <param>
+ <key>widget</key>
+ <value>counter_slider</value>
+ </param>
</block>
<block>
<key>variable</key>
<param>
- <key>id</key>
- <value>noisevar</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>10**(-snr_db/10)</value>
- </param>
- <param>
<key>_coordinate</key>
- <value>(637, 13)</value>
+ <value>(456, 68)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
+ <param>
+ <key>id</key>
+ <value>block</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>1000</value>
+ </param>
</block>
<block>
<key>variable</key>
<param>
- <key>id</key>
- <value>fsm1</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
+ <key>_coordinate</key>
+ <value>(632, 4)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>fsm1</value>
+ </param>
+ <param>
<key>value</key>
<value>"awgn1o2_16.fsm"</value>
</param>
+ </block>
+ <block>
+ <key>variable</key>
+ <param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
<param>
<key>_coordinate</key>
- <value>(849, 87)</value>
+ <value>(632, 68)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
+ <param>
+ <key>id</key>
+ <value>fsm2</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>"awgn1o2_4.fsm"</value>
+ </param>
</block>
<block>
<key>variable</key>
<param>
- <key>id</key>
- <value>fsm2</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
+ <key>_coordinate</key>
+ <value>(456, 4)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>noisevar</value>
+ </param>
+ <param>
<key>value</key>
- <value>"awgn1o2_4.fsm"</value>
+ <value>10**(-snr_db/10)</value>
+ </param>
+ </block>
+ <block>
+ <key>variable</key>
+ <param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>1</value>
</param>
<param>
<key>_coordinate</key>
- <value>(849, 153)</value>
+ <value>(816, 4)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
+ <param>
+ <key>id</key>
+ <value>prefix</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>"@FSM_FILE_INSTALL_DIR@"</value>
+ </param>
</block>
<block>
- <key>variable</key>
+ <key>variable_qtgui_range</key>
<param>
- <key>id</key>
- <value>block</value>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>10</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>1000</value>
+ <key>_coordinate</key>
+ <value>(312, 4)</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(752, 85)</value>
+ <key>gui_hint</key>
+ <value></value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
+ <param>
+ <key>id</key>
+ <value>snr_db</value>
+ </param>
+ <param>
+ <key>label</key>
+ <value>P/sigma^2 (dB)</value>
+ </param>
+ <param>
+ <key>min_len</key>
+ <value>200</value>
+ </param>
+ <param>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
+ </param>
+ <param>
+ <key>start</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>step</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>stop</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>rangeType</key>
+ <value>float</value>
+ </param>
+ <param>
+ <key>widget</key>
+ <value>counter_slider</value>
+ </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_0_1</value>
+ <key>amp</key>
+ <value>noisevar</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>in_type</key>
- <value>byte</value>
+ <key>_coordinate</key>
+ <value>(808, 356)</value>
</param>
<param>
- <key>out_type</key>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>analog_noise_source_x_0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>noise_type</key>
+ <value>analog.GR_GAUSSIAN</value>
+ </param>
+ <param>
+ <key>type</key>
<value>complex</value>
</param>
<param>
- <key>symbol_table</key>
- <value>1,1j,-1j,-1</value>
+ <key>seed</key>
+ <value>-42</value>
</param>
+ </block>
+ <block>
+ <key>analog_random_source_x</key>
<param>
- <key>dimension</key>
- <value>1</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>num_ports</key>
- <value>1</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>affinity</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(408, 1719)</value>
+ <value>(0, 148)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>virtual_source</key>
<param>
<key>id</key>
- <value>virtual_source_0_0</value>
+ <value>analog_random_source_x_0</value>
</param>
<param>
- <key>_enabled</key>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>max</key>
+ <value>2</value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>min</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>num_samps</key>
+ <value>block</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>byte</value>
+ </param>
+ <param>
+ <key>repeat</key>
<value>True</value>
</param>
+ </block>
+ <block>
+ <key>analog_random_source_x</key>
<param>
- <key>stream_id</key>
- <value>user1</value>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(356, 1844)</value>
+ <value>(0, 284)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>virtual_source</key>
<param>
<key>id</key>
- <value>virtual_source_0_2_0</value>
+ <value>analog_random_source_x_1</value>
</param>
<param>
- <key>_enabled</key>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>max</key>
+ <value>2</value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>min</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>num_samps</key>
+ <value>block</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>byte</value>
+ </param>
+ <param>
+ <key>repeat</key>
<value>True</value>
</param>
+ </block>
+ <block>
+ <key>blks2_error_rate</key>
<param>
- <key>stream_id</key>
- <value>user2_est</value>
+ <key>bits_per_symbol</key>
+ <value>2</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(10, 1649)</value>
+ <value>(568, 476)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
+ <param>
+ <key>id</key>
+ <value>blks2_error_rate_0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>'BER'</value>
+ </param>
+ <param>
+ <key>win_size</key>
+ <value>block*100</value>
+ </param>
</block>
<block>
- <key>blocks_sub_xx</key>
+ <key>blks2_error_rate</key>
<param>
- <key>id</key>
- <value>blocks_sub_xx_2_0</value>
+ <key>bits_per_symbol</key>
+ <value>2</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
+ <key>_coordinate</key>
+ <value>(584, 668)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>blks2_error_rate_0_0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>type</key>
- <value>complex</value>
+ <value>'BER'</value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>win_size</key>
+ <value>block*100</value>
</param>
+ </block>
+ <block>
+ <key>blks2_error_rate</key>
<param>
- <key>num_inputs</key>
+ <key>bits_per_symbol</key>
<value>2</value>
</param>
<param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(963, 1695)</value>
+ <value>(416, 1052)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
+ <param>
+ <key>id</key>
+ <value>blks2_error_rate_0_0_0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>'BER'</value>
+ </param>
+ <param>
+ <key>win_size</key>
+ <value>block*100</value>
+ </param>
</block>
<block>
- <key>virtual_source</key>
+ <key>blks2_error_rate</key>
<param>
- <key>id</key>
- <value>virtual_source_0_1_2</value>
+ <key>bits_per_symbol</key>
+ <value>2</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>stream_id</key>
- <value>observation</value>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(705, 1660)</value>
+ <value>(424, 1348)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
+ <param>
+ <key>id</key>
+ <value>blks2_error_rate_0_0_0_0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>'BER'</value>
+ </param>
+ <param>
+ <key>win_size</key>
+ <value>block*100</value>
+ </param>
</block>
<block>
- <key>blocks_multiply_const_vxx</key>
+ <key>blocks_add_xx</key>
<param>
- <key>id</key>
- <value>blocks_multiply_const_vxx_2_0</value>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
+ <key>_coordinate</key>
+ <value>(1040, 280)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>blocks_add_xx_0</value>
+ </param>
+ <param>
<key>type</key>
<value>complex</value>
</param>
<param>
- <key>const</key>
- <value>(1-alpha)**0.5</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>num_inputs</key>
+ <value>3</value>
</param>
<param>
<key>vlen</key>
<value>1</value>
</param>
+ </block>
+ <block>
+ <key>blocks_multiply_const_vxx</key>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>const</key>
+ <value>alpha**0.5</value>
+ </param>
<param>
<key>affinity</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(721, 1727)</value>
+ <value>(816, 172)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
+ <param>
+ <key>id</key>
+ <value>blocks_multiply_const_vxx_0</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>complex</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>vlen</key>
+ <value>1</value>
+ </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_0_0_0</value>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>const</key>
+ <value>(1-alpha)**0.5</value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>in_type</key>
- <value>byte</value>
+ <key>_coordinate</key>
+ <value>(816, 308)</value>
</param>
<param>
- <key>out_type</key>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>blocks_multiply_const_vxx_1</value>
+ </param>
+ <param>
+ <key>type</key>
<value>complex</value>
</param>
<param>
- <key>symbol_table</key>
- <value>1,1j,-1j,-1</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>dimension</key>
- <value>1</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>num_ports</key>
+ <key>vlen</key>
<value>1</value>
</param>
+ </block>
+ <block>
+ <key>blocks_multiply_const_vxx</key>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>const</key>
+ <value>alpha**0.5</value>
+ </param>
<param>
<key>affinity</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(416, 1251)</value>
+ <value>(632, 908)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>virtual_source</key>
<param>
<key>id</key>
- <value>virtual_source_0_4</value>
+ <value>blocks_multiply_const_vxx_2</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>type</key>
+ <value>complex</value>
</param>
<param>
- <key>stream_id</key>
- <value>user2</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(359, 1373)</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>vlen</key>
+ <value>1</value>
</param>
</block>
<block>
- <key>virtual_source</key>
+ <key>blocks_multiply_const_vxx</key>
<param>
- <key>id</key>
- <value>virtual_source_0_2</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
- <key>stream_id</key>
- <value>user1_est</value>
+ <key>const</key>
+ <value>(1-alpha)**0.5</value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(33, 1187)</value>
+ <value>(672, 1220)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
+ <param>
+ <key>id</key>
+ <value>blocks_multiply_const_vxx_2_0</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>complex</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>vlen</key>
+ <value>1</value>
+ </param>
</block>
<block>
<key>blocks_sub_xx</key>
<param>
- <key>id</key>
- <value>blocks_sub_xx_2</value>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
+ <key>_coordinate</key>
+ <value>(896, 880)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>blocks_sub_xx_2</value>
+ </param>
+ <param>
<key>type</key>
<value>complex</value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>num_inputs</key>
<value>2</value>
</param>
<param>
+ <key>vlen</key>
+ <value>1</value>
+ </param>
+ </block>
+ <block>
+ <key>blocks_sub_xx</key>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(942, 1229)</value>
+ <value>(872, 1192)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
+ <param>
+ <key>id</key>
+ <value>blocks_sub_xx_2_0</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>complex</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>num_inputs</key>
+ <value>2</value>
+ </param>
+ <param>
+ <key>vlen</key>
+ <value>1</value>
+ </param>
</block>
<block>
- <key>virtual_source</key>
+ <key>blocks_throttle</key>
<param>
- <key>id</key>
- <value>virtual_source_0_1_1</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
- <key>stream_id</key>
- <value>observation</value>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(698, 1198)</value>
+ <value>(424, 172)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>blocks_multiply_const_vxx</key>
<param>
<key>id</key>
- <value>blocks_multiply_const_vxx_2</value>
+ <value>blocks_throttle_0</value>
</param>
<param>
- <key>_enabled</key>
+ <key>ignoretag</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>const</key>
- <value>alpha**0.5</value>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>samples_per_second</key>
+ <value>R</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>byte</value>
</param>
<param>
<key>vlen</key>
<value>1</value>
</param>
+ </block>
+ <block>
+ <key>digital_chunks_to_symbols_xx</key>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>comment</key>
+ <value></value>
+ </param>
<param>
<key>affinity</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>dimension</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(708, 1259)</value>
+ <value>(608, 164)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>virtual_source</key>
<param>
<key>id</key>
- <value>virtual_source_0_3</value>
+ <value>digital_chunks_to_symbols_xx_0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>in_type</key>
+ <value>byte</value>
</param>
<param>
- <key>stream_id</key>
- <value>user2</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(342, 928)</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>num_ports</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>out_type</key>
+ <value>complex</value>
+ </param>
+ <param>
+ <key>symbol_table</key>
+ <value>1,1j,-1j,-1</value>
</param>
</block>
<block>
- <key>virtual_sink</key>
+ <key>digital_chunks_to_symbols_xx</key>
<param>
- <key>id</key>
- <value>virtual_sink_0_2_0</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
- <key>stream_id</key>
- <value>user2_est</value>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>dimension</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(341, 1025)</value>
+ <value>(608, 300)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>virtual_source</key>
<param>
<key>id</key>
- <value>virtual_source_0_1_0</value>
+ <value>digital_chunks_to_symbols_xx_0_0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>in_type</key>
+ <value>byte</value>
</param>
<param>
- <key>stream_id</key>
- <value>observation</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(11, 873)</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>num_ports</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>out_type</key>
+ <value>complex</value>
+ </param>
+ <param>
+ <key>symbol_table</key>
+ <value>1,1j,-1j,-1</value>
</param>
</block>
<block>
- <key>virtual_source</key>
+ <key>digital_chunks_to_symbols_xx</key>
<param>
- <key>id</key>
- <value>virtual_source_0</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
- <key>stream_id</key>
- <value>user1</value>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>dimension</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(348, 566)</value>
+ <value>(416, 900)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
+ <param>
+ <key>id</key>
+ <value>digital_chunks_to_symbols_xx_0_0_0</value>
+ </param>
+ <param>
+ <key>in_type</key>
+ <value>byte</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>num_ports</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>out_type</key>
+ <value>complex</value>
+ </param>
+ <param>
+ <key>symbol_table</key>
+ <value>1,1j,-1j,-1</value>
+ </param>
</block>
<block>
- <key>virtual_sink</key>
+ <key>digital_chunks_to_symbols_xx</key>
<param>
- <key>id</key>
- <value>virtual_sink_0_2</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
- <key>stream_id</key>
- <value>user1_est</value>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>dimension</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(355, 687)</value>
+ <value>(432, 1212)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
+ <param>
+ <key>id</key>
+ <value>digital_chunks_to_symbols_xx_0_0_1</value>
+ </param>
+ <param>
+ <key>in_type</key>
+ <value>byte</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>num_ports</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>out_type</key>
+ <value>complex</value>
+ </param>
+ <param>
+ <key>symbol_table</key>
+ <value>1,1j,-1j,-1</value>
+ </param>
</block>
<block>
- <key>virtual_source</key>
+ <key>qtgui_const_sink_x</key>
<param>
- <key>id</key>
- <value>virtual_source_0_1</value>
+ <key>autoscale</key>
+ <value>False</value>
</param>
<param>
- <key>_enabled</key>
+ <key>axislabels</key>
<value>True</value>
</param>
<param>
- <key>stream_id</key>
- <value>observation</value>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(13, 530)</value>
+ <value>(1144, 300)</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value></value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>wxgui_numbersink2</key>
+ <param>
+ <key>grid</key>
+ <value>False</value>
+ </param>
<param>
<key>id</key>
- <value>wxgui_numbersink2_0</value>
+ <value>qtgui_const_sink_x_0</value>
</param>
<param>
- <key>_enabled</key>
+ <key>legend</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>float</value>
+ <key>alpha1</key>
+ <value>1.0</value>
</param>
<param>
- <key>title</key>
- <value>BER 1 (raw)</value>
+ <key>color1</key>
+ <value>"blue"</value>
</param>
<param>
- <key>units</key>
- <value>BER</value>
+ <key>label1</key>
+ <value></value>
</param>
<param>
- <key>samp_rate</key>
- <value>R</value>
+ <key>marker1</key>
+ <value>0</value>
</param>
<param>
- <key>min_value</key>
- <value>0</value>
+ <key>style1</key>
+ <value>1</value>
</param>
<param>
- <key>max_value</key>
+ <key>width1</key>
<value>1</value>
</param>
<param>
- <key>factor</key>
+ <key>alpha10</key>
<value>1.0</value>
</param>
<param>
- <key>decimal_places</key>
- <value>6</value>
+ <key>color10</key>
+ <value>"red"</value>
</param>
<param>
- <key>ref_level</key>
+ <key>label10</key>
+ <value></value>
+ </param>
+ <param>
+ <key>marker10</key>
<value>0</value>
</param>
<param>
- <key>number_rate</key>
- <value>15</value>
+ <key>style10</key>
+ <value>0</value>
</param>
<param>
- <key>peak_hold</key>
- <value>False</value>
+ <key>width10</key>
+ <value>1</value>
</param>
<param>
- <key>average</key>
- <value>False</value>
+ <key>alpha2</key>
+ <value>1.0</value>
</param>
<param>
- <key>avg_alpha</key>
- <value>0.001</value>
+ <key>color2</key>
+ <value>"red"</value>
</param>
<param>
- <key>show_gauge</key>
- <value>True</value>
+ <key>label2</key>
+ <value></value>
</param>
<param>
- <key>win_size</key>
+ <key>marker2</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>style2</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>width2</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alpha3</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>color3</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>label3</key>
<value></value>
</param>
<param>
- <key>grid_pos</key>
- <value>0,0,1,1</value>
+ <key>marker3</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>style3</key>
+ <value>0</value>
</param>
<param>
- <key>notebook</key>
+ <key>width3</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alpha4</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>color4</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>label4</key>
<value></value>
</param>
<param>
- <key>affinity</key>
+ <key>marker4</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>style4</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>width4</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alpha5</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>color5</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>label5</key>
<value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(944, 556)</value>
+ <key>marker5</key>
+ <value>0</value>
</param>
<param>
- <key>_rotation</key>
+ <key>style5</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>wxgui_numbersink2</key>
<param>
- <key>id</key>
- <value>wxgui_numbersink2_2</value>
+ <key>width5</key>
+ <value>1</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>alpha6</key>
+ <value>1.0</value>
</param>
<param>
- <key>type</key>
- <value>float</value>
+ <key>color6</key>
+ <value>"red"</value>
</param>
<param>
- <key>title</key>
- <value>BER 2 (raw)</value>
+ <key>label6</key>
+ <value></value>
</param>
<param>
- <key>units</key>
- <value>BER</value>
+ <key>marker6</key>
+ <value>0</value>
</param>
<param>
- <key>samp_rate</key>
- <value>R</value>
+ <key>style6</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>width6</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alpha7</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>color7</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>label7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>marker7</key>
+ <value>0</value>
</param>
<param>
- <key>min_value</key>
+ <key>style7</key>
<value>0</value>
</param>
<param>
- <key>max_value</key>
+ <key>width7</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alpha8</key>
<value>1.0</value>
</param>
<param>
- <key>factor</key>
+ <key>color8</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>label8</key>
+ <value></value>
+ </param>
+ <param>
+ <key>marker8</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>style8</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>width8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alpha9</key>
<value>1.0</value>
</param>
<param>
- <key>decimal_places</key>
- <value>6</value>
+ <key>color9</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>label9</key>
+ <value></value>
</param>
<param>
- <key>ref_level</key>
+ <key>marker9</key>
<value>0</value>
</param>
<param>
- <key>number_rate</key>
- <value>15</value>
+ <key>style9</key>
+ <value>0</value>
</param>
<param>
- <key>peak_hold</key>
- <value>False</value>
+ <key>width9</key>
+ <value>1</value>
</param>
<param>
- <key>average</key>
- <value>False</value>
+ <key>name</key>
+ <value>""</value>
</param>
<param>
- <key>avg_alpha</key>
- <value>0.001</value>
+ <key>nconnections</key>
+ <value>1</value>
</param>
<param>
- <key>show_gauge</key>
- <value>True</value>
+ <key>size</key>
+ <value>1024</value>
</param>
<param>
- <key>win_size</key>
- <value></value>
+ <key>tr_chan</key>
+ <value>0</value>
</param>
<param>
- <key>grid_pos</key>
- <value>0,1,1,1</value>
+ <key>tr_level</key>
+ <value>0.0</value>
</param>
<param>
- <key>notebook</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_tag</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>complex</value>
+ </param>
+ <param>
+ <key>update_time</key>
+ <value>0.10</value>
+ </param>
+ <param>
+ <key>xmax</key>
+ <value>2</value>
+ </param>
+ <param>
+ <key>xmin</key>
+ <value>-2</value>
+ </param>
+ <param>
+ <key>ymax</key>
+ <value>2</value>
+ </param>
+ <param>
+ <key>ymin</key>
+ <value>-2</value>
+ </param>
+ </block>
+ <block>
+ <key>qtgui_number_sink</key>
+ <param>
+ <key>autoscale</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>avg</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>comment</key>
<value></value>
</param>
<param>
@@ -898,1605 +1764,2015 @@
<value></value>
</param>
<param>
+ <key>_enabled</key>
+ <value>1</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(944, 886)</value>
+ <value>(784, 468)</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value>0,0,1,1</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>wxgui_numbersink2</key>
<param>
- <key>id</key>
- <value>wxgui_numbersink2_3</value>
+ <key>graph_type</key>
+ <value>qtgui.NUM_GRAPH_HORIZ</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>id</key>
+ <value>qtgui_number_sink_0</value>
</param>
<param>
<key>type</key>
<value>float</value>
</param>
<param>
- <key>title</key>
- <value>BER 2 (after cancelling user 1)</value>
+ <key>color1</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>units</key>
+ <key>factor1</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>label1</key>
<value>BER</value>
</param>
<param>
- <key>samp_rate</key>
- <value>R</value>
+ <key>unit1</key>
+ <value></value>
</param>
<param>
- <key>min_value</key>
- <value>0</value>
+ <key>color10</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>max_value</key>
- <value>1.0</value>
+ <key>factor10</key>
+ <value>1</value>
</param>
<param>
- <key>factor</key>
- <value>1.0</value>
+ <key>label10</key>
+ <value></value>
</param>
<param>
- <key>decimal_places</key>
- <value>6</value>
+ <key>unit10</key>
+ <value></value>
</param>
<param>
- <key>ref_level</key>
- <value>0</value>
+ <key>color2</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>number_rate</key>
- <value>15</value>
+ <key>factor2</key>
+ <value>1</value>
</param>
<param>
- <key>peak_hold</key>
- <value>False</value>
+ <key>label2</key>
+ <value></value>
</param>
<param>
- <key>average</key>
- <value>False</value>
+ <key>unit2</key>
+ <value></value>
</param>
<param>
- <key>avg_alpha</key>
- <value>0.001</value>
+ <key>color3</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>show_gauge</key>
- <value>True</value>
+ <key>factor3</key>
+ <value>1</value>
</param>
<param>
- <key>win_size</key>
+ <key>label3</key>
<value></value>
</param>
<param>
- <key>grid_pos</key>
- <value>1,1,1,1</value>
+ <key>unit3</key>
+ <value></value>
</param>
<param>
- <key>notebook</key>
- <value></value>
+ <key>color4</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>affinity</key>
+ <key>factor4</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>label4</key>
<value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(945, 1351)</value>
+ <key>unit4</key>
+ <value></value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>color5</key>
+ <value>("black", "black")</value>
</param>
- </block>
- <block>
- <key>blocks_multiply_const_vxx</key>
<param>
- <key>id</key>
- <value>blocks_multiply_const_vxx_1</value>
+ <key>factor5</key>
+ <value>1</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>label5</key>
+ <value></value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
+ <key>unit5</key>
+ <value></value>
</param>
<param>
- <key>const</key>
- <value>(1-alpha)**0.5</value>
+ <key>color6</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>vlen</key>
+ <key>factor6</key>
<value>1</value>
</param>
<param>
- <key>affinity</key>
+ <key>label6</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>unit6</key>
+ <value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(943, 402)</value>
+ <key>color7</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>factor7</key>
+ <value>1</value>
</param>
- </block>
- <block>
- <key>blocks_multiply_const_vxx</key>
<param>
- <key>id</key>
- <value>blocks_multiply_const_vxx_0</value>
+ <key>label7</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>unit7</key>
+ <value></value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
+ <key>color8</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>const</key>
- <value>alpha**0.5</value>
+ <key>factor8</key>
+ <value>1</value>
</param>
<param>
- <key>vlen</key>
+ <key>label8</key>
+ <value></value>
+ </param>
+ <param>
+ <key>unit8</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color9</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor9</key>
<value>1</value>
</param>
<param>
- <key>affinity</key>
+ <key>label9</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>unit9</key>
+ <value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(947, 301)</value>
+ <key>max</key>
+ <value>1</value>
</param>
<param>
- <key>_rotation</key>
+ <key>min</key>
<value>0</value>
</param>
+ <param>
+ <key>name</key>
+ <value>"BER1 (Raw)"</value>
+ </param>
+ <param>
+ <key>nconnections</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>update_time</key>
+ <value>0.10</value>
+ </param>
</block>
<block>
- <key>virtual_sink</key>
+ <key>qtgui_number_sink</key>
<param>
- <key>id</key>
- <value>virtual_sink_0_0</value>
+ <key>autoscale</key>
+ <value>False</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>avg</key>
+ <value>0</value>
</param>
<param>
- <key>stream_id</key>
- <value>user2</value>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>1</value>
</param>
<param>
<key>_coordinate</key>
- <value>(208, 340)</value>
+ <value>(792, 660)</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value>0,1,1,1</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_1</value>
+ <key>graph_type</key>
+ <value>qtgui.NUM_GRAPH_HORIZ</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>id</key>
+ <value>qtgui_number_sink_0_0</value>
</param>
<param>
<key>type</key>
- <value>byte</value>
+ <value>float</value>
</param>
<param>
- <key>min</key>
- <value>0</value>
+ <key>color1</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>max</key>
- <value>2</value>
+ <key>factor1</key>
+ <value>1</value>
</param>
<param>
- <key>num_samps</key>
- <value>block</value>
+ <key>label1</key>
+ <value>BER</value>
</param>
<param>
- <key>repeat</key>
- <value>True</value>
+ <key>unit1</key>
+ <value></value>
</param>
<param>
- <key>affinity</key>
+ <key>color10</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>label10</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>unit10</key>
+ <value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(22, 374)</value>
+ <key>color2</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>factor2</key>
+ <value>1</value>
</param>
- </block>
- <block>
- <key>digital_chunks_to_symbols_xx</key>
<param>
- <key>id</key>
- <value>digital_chunks_to_symbols_xx_0</value>
+ <key>label2</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>unit2</key>
+ <value></value>
</param>
<param>
- <key>in_type</key>
- <value>byte</value>
+ <key>color3</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>out_type</key>
- <value>complex</value>
+ <key>factor3</key>
+ <value>1</value>
</param>
<param>
- <key>symbol_table</key>
- <value>1,1j,-1j,-1</value>
+ <key>label3</key>
+ <value></value>
</param>
<param>
- <key>dimension</key>
+ <key>unit3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color4</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor4</key>
<value>1</value>
</param>
<param>
- <key>num_ports</key>
+ <key>label4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>unit4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color5</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor5</key>
<value>1</value>
</param>
<param>
- <key>affinity</key>
+ <key>label5</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>unit5</key>
+ <value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(700, 294)</value>
+ <key>color6</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>factor6</key>
+ <value>1</value>
</param>
- </block>
- <block>
- <key>blocks_throttle</key>
<param>
- <key>id</key>
- <value>blocks_throttle_0</value>
+ <key>label6</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>unit6</key>
+ <value></value>
</param>
<param>
- <key>type</key>
- <value>byte</value>
+ <key>color7</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>samples_per_second</key>
- <value>R</value>
+ <key>factor7</key>
+ <value>1</value>
</param>
<param>
- <key>vlen</key>
+ <key>label7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>unit7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color8</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor8</key>
<value>1</value>
</param>
<param>
- <key>affinity</key>
+ <key>label8</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>unit8</key>
+ <value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(576, 226)</value>
+ <key>color9</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>factor9</key>
+ <value>1</value>
</param>
- </block>
- <block>
- <key>analog_random_source_x</key>
<param>
- <key>id</key>
- <value>analog_random_source_x_0</value>
+ <key>label9</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>unit9</key>
+ <value></value>
</param>
<param>
- <key>type</key>
- <value>byte</value>
+ <key>max</key>
+ <value>1</value>
</param>
<param>
<key>min</key>
<value>0</value>
</param>
<param>
- <key>max</key>
- <value>2</value>
+ <key>name</key>
+ <value>"BER 2 (Raw)"</value>
</param>
<param>
- <key>num_samps</key>
- <value>block</value>
+ <key>nconnections</key>
+ <value>1</value>
</param>
<param>
- <key>repeat</key>
- <value>True</value>
+ <key>update_time</key>
+ <value>0.10</value>
+ </param>
+ </block>
+ <block>
+ <key>qtgui_number_sink</key>
+ <param>
+ <key>autoscale</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>avg</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>affinity</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>1</value>
</param>
<param>
<key>_coordinate</key>
- <value>(18, 253)</value>
+ <value>(600, 1044)</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value>1,1,1,1</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>virtual_sink</key>
+ <param>
+ <key>graph_type</key>
+ <value>qtgui.NUM_GRAPH_HORIZ</value>
+ </param>
<param>
<key>id</key>
- <value>virtual_sink_0</value>
+ <value>qtgui_number_sink_0_0_0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>type</key>
+ <value>float</value>
</param>
<param>
- <key>stream_id</key>
- <value>user1</value>
+ <key>color1</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(208, 229)</value>
+ <key>factor1</key>
+ <value>1</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>label1</key>
+ <value>BER</value>
</param>
- </block>
- <block>
- <key>digital_chunks_to_symbols_xx</key>
<param>
- <key>id</key>
- <value>digital_chunks_to_symbols_xx_0_0</value>
+ <key>unit1</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>color10</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>in_type</key>
- <value>byte</value>
+ <key>factor10</key>
+ <value>1</value>
</param>
<param>
- <key>out_type</key>
- <value>complex</value>
+ <key>label10</key>
+ <value></value>
</param>
<param>
- <key>symbol_table</key>
- <value>1,1j,-1j,-1</value>
+ <key>unit10</key>
+ <value></value>
</param>
<param>
- <key>dimension</key>
+ <key>color2</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor2</key>
<value>1</value>
</param>
<param>
- <key>num_ports</key>
+ <key>label2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>unit2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color3</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor3</key>
<value>1</value>
</param>
<param>
- <key>affinity</key>
+ <key>label3</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>unit3</key>
+ <value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(700, 394)</value>
+ <key>color4</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>factor4</key>
+ <value>1</value>
</param>
- </block>
- <block>
- <key>blocks_add_xx</key>
<param>
- <key>id</key>
- <value>blocks_add_xx_1</value>
+ <key>label4</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>unit4</key>
+ <value></value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
+ <key>color5</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>num_inputs</key>
- <value>2</value>
+ <key>factor5</key>
+ <value>1</value>
</param>
<param>
- <key>vlen</key>
+ <key>label5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>unit5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color6</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor6</key>
<value>1</value>
</param>
<param>
- <key>affinity</key>
+ <key>label6</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>unit6</key>
+ <value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(1400, 341)</value>
+ <key>color7</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>factor7</key>
+ <value>1</value>
</param>
- </block>
- <block>
- <key>blocks_add_xx</key>
<param>
- <key>id</key>
- <value>blocks_add_xx_0</value>
+ <key>label7</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>unit7</key>
+ <value></value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
+ <key>color8</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>num_inputs</key>
- <value>2</value>
+ <key>factor8</key>
+ <value>1</value>
</param>
<param>
- <key>vlen</key>
+ <key>label8</key>
+ <value></value>
+ </param>
+ <param>
+ <key>unit8</key>
+ <value></value>
+ </param>
+ <param>
+ <key>color9</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor9</key>
<value>1</value>
</param>
<param>
- <key>affinity</key>
+ <key>label9</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>unit9</key>
+ <value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(1224, 324)</value>
+ <key>max</key>
+ <value>1</value>
</param>
<param>
- <key>_rotation</key>
+ <key>min</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>name</key>
+ <value>"BER 2 (after cancelling user 1)"</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>nconnections</key>
+ <value>1</value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
+ <key>update_time</key>
+ <value>0.10</value>
</param>
+ </block>
+ <block>
+ <key>qtgui_number_sink</key>
<param>
- <key>noise_type</key>
- <value>analog.GR_GAUSSIAN</value>
+ <key>autoscale</key>
+ <value>False</value>
</param>
<param>
- <key>amp</key>
- <value>noisevar</value>
+ <key>avg</key>
+ <value>0</value>
</param>
<param>
- <key>seed</key>
- <value>-42</value>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>affinity</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>1</value>
</param>
<param>
<key>_coordinate</key>
- <value>(1178, 400)</value>
+ <value>(632, 1340)</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value>1,0,1,1</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>virtual_sink</key>
+ <param>
+ <key>graph_type</key>
+ <value>qtgui.NUM_GRAPH_HORIZ</value>
+ </param>
<param>
<key>id</key>
- <value>virtual_sink_0_1</value>
+ <value>qtgui_number_sink_0_0_0_0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>type</key>
+ <value>float</value>
</param>
<param>
- <key>stream_id</key>
- <value>observation</value>
+ <key>color1</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(1407, 453)</value>
+ <key>factor1</key>
+ <value>1</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>label1</key>
+ <value>BER</value>
</param>
- </block>
- <block>
- <key>wxgui_scopesink2</key>
<param>
- <key>id</key>
- <value>wxgui_scopesink2_0</value>
+ <key>unit1</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>color10</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
+ <key>factor10</key>
+ <value>1</value>
</param>
<param>
- <key>title</key>
- <value>Scope Plot</value>
+ <key>label10</key>
+ <value></value>
</param>
<param>
- <key>samp_rate</key>
- <value>R</value>
+ <key>unit10</key>
+ <value></value>
</param>
<param>
- <key>v_scale</key>
- <value>0</value>
+ <key>color2</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>v_offset</key>
- <value>0</value>
+ <key>factor2</key>
+ <value>1</value>
</param>
<param>
- <key>t_scale</key>
- <value>0</value>
+ <key>label2</key>
+ <value></value>
</param>
<param>
- <key>ac_couple</key>
- <value>False</value>
+ <key>unit2</key>
+ <value></value>
</param>
<param>
- <key>xy_mode</key>
- <value>True</value>
+ <key>color3</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>num_inputs</key>
+ <key>factor3</key>
<value>1</value>
</param>
<param>
- <key>win_size</key>
+ <key>label3</key>
<value></value>
</param>
<param>
- <key>grid_pos</key>
+ <key>unit3</key>
<value></value>
</param>
<param>
- <key>notebook</key>
+ <key>color4</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor4</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>label4</key>
<value></value>
</param>
<param>
- <key>trig_mode</key>
- <value>wxgui.TRIG_MODE_AUTO</value>
+ <key>unit4</key>
+ <value></value>
</param>
<param>
- <key>y_axis_label</key>
- <value>Counts</value>
+ <key>color5</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>affinity</key>
+ <key>factor5</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>label5</key>
<value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(1383, 208)</value>
+ <key>unit5</key>
+ <value></value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>color6</key>
+ <value>("black", "black")</value>
</param>
- </block>
- <block>
- <key>trellis_viterbi_combined_xx</key>
<param>
- <key>id</key>
- <value>trellis_viterbi_combined_xx_1</value>
+ <key>factor6</key>
+ <value>1</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>label6</key>
+ <value></value>
</param>
<param>
- <key>type</key>
- <value>c</value>
+ <key>unit6</key>
+ <value></value>
</param>
<param>
- <key>out_type</key>
- <value>b</value>
+ <key>color7</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>fsm_args</key>
- <value>prefix+fsm1</value>
+ <key>factor7</key>
+ <value>1</value>
</param>
<param>
- <key>block_size</key>
- <value>block</value>
+ <key>label7</key>
+ <value></value>
</param>
<param>
- <key>init_state</key>
- <value>-1</value>
+ <key>unit7</key>
+ <value></value>
</param>
<param>
- <key>final_state</key>
- <value>-1</value>
+ <key>color8</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>dim</key>
+ <key>factor8</key>
<value>1</value>
</param>
<param>
- <key>table</key>
- <value>alpha**0.5*1,alpha**0.5*1j,alpha**0.5*(-1j),alpha**0.5*(-1)</value>
+ <key>label8</key>
+ <value></value>
</param>
<param>
- <key>metric_type</key>
- <value>digital.TRELLIS_EUCLIDEAN</value>
+ <key>unit8</key>
+ <value></value>
</param>
<param>
- <key>affinity</key>
+ <key>color9</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>label9</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>unit9</key>
+ <value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(75, 583)</value>
+ <key>max</key>
+ <value>1</value>
</param>
<param>
- <key>_rotation</key>
+ <key>min</key>
<value>0</value>
</param>
+ <param>
+ <key>name</key>
+ <value>BER 1 (after cancelling user 2)</value>
+ </param>
+ <param>
+ <key>nconnections</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>update_time</key>
+ <value>0.10</value>
+ </param>
</block>
<block>
- <key>trellis_viterbi_combined_xx</key>
+ <key>trellis_encoder_xx</key>
<param>
- <key>id</key>
- <value>trellis_viterbi_combined_xx_0_0</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>blocklength</key>
+ <value>0</value>
</param>
<param>
- <key>type</key>
- <value>c</value>
+ <key>blockwise</key>
+ <value>False</value>
</param>
<param>
- <key>out_type</key>
- <value>b</value>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>fsm_args</key>
<value>prefix+fsm1</value>
</param>
<param>
- <key>block_size</key>
- <value>block</value>
+ <key>_coordinate</key>
+ <value>(192, 164)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>trellis_encoder_xx_0</value>
</param>
<param>
<key>init_state</key>
- <value>-1</value>
+ <value>0</value>
</param>
<param>
- <key>final_state</key>
- <value>-1</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>dim</key>
- <value>1</value>
+ <key>minoutbuf</key>
+ <value>0</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>type</key>
+ <value>bb</value>
+ </param>
+ </block>
+ <block>
+ <key>trellis_encoder_xx</key>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>metric_type</key>
- <value>digital.TRELLIS_EUCLIDEAN</value>
+ <key>blocklength</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>blockwise</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>affinity</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>fsm_args</key>
+ <value>prefix+fsm2</value>
</param>
<param>
<key>_coordinate</key>
- <value>(63, 1848)</value>
+ <value>(192, 300)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>trellis_encoder_xx</key>
<param>
<key>id</key>
- <value>trellis_encoder_xx_0</value>
+ <value>trellis_encoder_xx_1</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>init_state</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>type</key>
<value>bb</value>
</param>
+ </block>
+ <block>
+ <key>trellis_encoder_xx</key>
<param>
- <key>fsm_args</key>
- <value>prefix+fsm1</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>init_state</key>
+ <key>blocklength</key>
<value>0</value>
</param>
<param>
+ <key>blockwise</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>fsm_args</key>
+ <value>prefix+fsm1</value>
</param>
<param>
<key>_coordinate</key>
- <value>(337, 270)</value>
+ <value>(192, 900)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>trellis_encoder_xx</key>
<param>
<key>id</key>
<value>trellis_encoder_xx_2</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>init_state</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>type</key>
<value>bb</value>
</param>
+ </block>
+ <block>
+ <key>trellis_encoder_xx</key>
<param>
- <key>fsm_args</key>
- <value>prefix+fsm1</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>init_state</key>
+ <key>blocklength</key>
<value>0</value>
</param>
<param>
+ <key>blockwise</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>fsm_args</key>
+ <value>prefix+fsm2</value>
</param>
<param>
<key>_coordinate</key>
- <value>(87, 1251)</value>
+ <value>(184, 1212)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>trellis_encoder_xx</key>
<param>
<key>id</key>
- <value>trellis_encoder_xx_1</value>
+ <value>trellis_encoder_xx_2_0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>init_state</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>type</key>
<value>bb</value>
</param>
+ </block>
+ <block>
+ <key>trellis_viterbi_combined_xx</key>
<param>
- <key>fsm_args</key>
- <value>prefix+fsm2</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>init_state</key>
- <value>0</value>
+ <key>block_size</key>
+ <value>block</value>
+ </param>
+ <param>
+ <key>comment</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>
</param>
<param>
<key>affinity</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>dim</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>fsm_args</key>
+ <value>prefix+fsm2</value>
+ </param>
+ <param>
+ <key>final_state</key>
+ <value>-1</value>
</param>
<param>
<key>_coordinate</key>
- <value>(376, 381)</value>
+ <value>(40, 1036)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>trellis_viterbi_combined_xx</key>
<param>
<key>id</key>
- <value>trellis_viterbi_combined_xx_2</value>
+ <value>trellis_viterbi_combined_xx_0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>init_state</key>
+ <value>-1</value>
</param>
<param>
<key>type</key>
<value>c</value>
</param>
<param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>metric_type</key>
+ <value>digital.TRELLIS_EUCLIDEAN</value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>out_type</key>
<value>b</value>
</param>
+ </block>
+ <block>
+ <key>trellis_viterbi_combined_xx</key>
<param>
- <key>fsm_args</key>
- <value>prefix+fsm2</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>block_size</key>
<value>block</value>
</param>
<param>
- <key>init_state</key>
- <value>-1</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
- <key>final_state</key>
- <value>-1</value>
+ <key>table</key>
+ <value>alpha**0.5*1,alpha**0.5*1j,alpha**0.5*(-1j),alpha**0.5*(-1)</value>
</param>
<param>
- <key>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>dim</key>
+ <value>1</value>
</param>
<param>
- <key>metric_type</key>
- <value>digital.TRELLIS_EUCLIDEAN</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>affinity</key>
- <value></value>
+ <key>fsm_args</key>
+ <value>prefix+fsm1</value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>final_state</key>
+ <value>-1</value>
</param>
<param>
<key>_coordinate</key>
- <value>(85, 931)</value>
+ <value>(40, 1332)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>trellis_viterbi_combined_xx</key>
<param>
<key>id</key>
- <value>trellis_viterbi_combined_xx_0</value>
+ <value>trellis_viterbi_combined_xx_0_0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>init_state</key>
+ <value>-1</value>
</param>
<param>
<key>type</key>
<value>c</value>
</param>
<param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>metric_type</key>
+ <value>digital.TRELLIS_EUCLIDEAN</value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
<key>out_type</key>
<value>b</value>
</param>
+ </block>
+ <block>
+ <key>trellis_viterbi_combined_xx</key>
<param>
- <key>fsm_args</key>
- <value>prefix+fsm2</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>block_size</key>
<value>block</value>
</param>
<param>
- <key>init_state</key>
- <value>-1</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
- <key>final_state</key>
- <value>-1</value>
+ <key>table</key>
+ <value>alpha**0.5*1,alpha**0.5*1j,alpha**0.5*(-1j),alpha**0.5*(-1)</value>
</param>
<param>
- <key>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>dim</key>
+ <value>1</value>
</param>
<param>
- <key>metric_type</key>
- <value>digital.TRELLIS_EUCLIDEAN</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>affinity</key>
- <value></value>
+ <key>fsm_args</key>
+ <value>prefix+fsm1</value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>final_state</key>
+ <value>-1</value>
</param>
<param>
<key>_coordinate</key>
- <value>(81, 1362)</value>
+ <value>(208, 460)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>trellis_encoder_xx</key>
<param>
<key>id</key>
- <value>trellis_encoder_xx_2_0</value>
+ <value>trellis_viterbi_combined_xx_1</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>init_state</key>
+ <value>-1</value>
</param>
<param>
<key>type</key>
- <value>bb</value>
- </param>
- <param>
- <key>fsm_args</key>
- <value>prefix+fsm2</value>
+ <value>c</value>
</param>
<param>
- <key>init_state</key>
+ <key>maxoutbuf</key>
<value>0</value>
</param>
<param>
- <key>affinity</key>
- <value></value>
+ <key>metric_type</key>
+ <value>digital.TRELLIS_EUCLIDEAN</value>
</param>
<param>
<key>minoutbuf</key>
<value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(91, 1719)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
+ <key>out_type</key>
+ <value>b</value>
</param>
</block>
<block>
- <key>wxgui_numbersink2</key>
+ <key>trellis_viterbi_combined_xx</key>
<param>
- <key>id</key>
- <value>wxgui_numbersink2_3_0</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>block_size</key>
+ <value>block</value>
</param>
<param>
- <key>type</key>
- <value>float</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
- <key>title</key>
- <value>BER 1 (after cancelling user 2)</value>
+ <key>table</key>
+ <value>(1-alpha)**0.5*1,(1-alpha)**0.5*1j,(1-alpha)**0.5*(-1j),(1-alpha)**0.5*(-1)</value>
</param>
<param>
- <key>units</key>
- <value>BER</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>samp_rate</key>
- <value>R</value>
+ <key>dim</key>
+ <value>1</value>
</param>
<param>
- <key>min_value</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>max_value</key>
- <value>1.0</value>
+ <key>fsm_args</key>
+ <value>prefix+fsm2</value>
</param>
<param>
- <key>factor</key>
- <value>1.0</value>
+ <key>final_state</key>
+ <value>-1</value>
</param>
<param>
- <key>decimal_places</key>
- <value>6</value>
+ <key>_coordinate</key>
+ <value>(216, 652)</value>
</param>
<param>
- <key>ref_level</key>
+ <key>_rotation</key>
<value>0</value>
</param>
<param>
- <key>number_rate</key>
- <value>15</value>
+ <key>id</key>
+ <value>trellis_viterbi_combined_xx_2</value>
</param>
<param>
- <key>peak_hold</key>
- <value>False</value>
+ <key>init_state</key>
+ <value>-1</value>
</param>
<param>
- <key>average</key>
- <value>False</value>
+ <key>type</key>
+ <value>c</value>
</param>
<param>
- <key>avg_alpha</key>
- <value>0.001</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>show_gauge</key>
- <value>True</value>
+ <key>metric_type</key>
+ <value>digital.TRELLIS_EUCLIDEAN</value>
</param>
<param>
- <key>win_size</key>
- <value></value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>grid_pos</key>
- <value>1,0,1,1</value>
+ <key>out_type</key>
+ <value>b</value>
</param>
+ </block>
+ <block>
+ <key>virtual_sink</key>
<param>
- <key>notebook</key>
+ <key>comment</key>
<value></value>
</param>
<param>
- <key>affinity</key>
- <value></value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(929, 1816)</value>
+ <value>(192, 228)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
+ <param>
+ <key>id</key>
+ <value>virtual_sink_0</value>
+ </param>
+ <param>
+ <key>stream_id</key>
+ <value>user1</value>
+ </param>
</block>
<block>
- <key>variable_slider</key>
+ <key>virtual_sink</key>
<param>
- <key>id</key>
- <value>alpha</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>label</key>
- <value>P1/P</value>
+ <key>_coordinate</key>
+ <value>(192, 364)</value>
</param>
<param>
- <key>value</key>
- <value>0.1</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>min</key>
- <value>0</value>
+ <key>id</key>
+ <value>virtual_sink_0_0</value>
</param>
<param>
- <key>max</key>
- <value>1.0</value>
+ <key>stream_id</key>
+ <value>user2</value>
</param>
+ </block>
+ <block>
+ <key>virtual_sink</key>
<param>
- <key>num_steps</key>
- <value>100</value>
+ <key>comment</key>
+ <value></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>_coordinate</key>
+ <value>(1144, 380)</value>
</param>
<param>
- <key>grid_pos</key>
- <value></value>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>virtual_sink_0_1</value>
</param>
<param>
- <key>notebook</key>
+ <key>stream_id</key>
+ <value>observation</value>
+ </param>
+ </block>
+ <block>
+ <key>virtual_sink</key>
+ <param>
+ <key>comment</key>
<value></value>
</param>
<param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(243, 11)</value>
+ <value>(448, 572)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
+ <param>
+ <key>id</key>
+ <value>virtual_sink_0_2</value>
+ </param>
+ <param>
+ <key>stream_id</key>
+ <value>user1_est</value>
+ </param>
</block>
<block>
- <key>variable_slider</key>
+ <key>virtual_sink</key>
<param>
- <key>id</key>
- <value>snr_db</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>label</key>
- <value>P/sigma^2 (dB)</value>
+ <key>_coordinate</key>
+ <value>(456, 764)</value>
</param>
<param>
- <key>value</key>
- <value>10</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>min</key>
- <value>0</value>
+ <key>id</key>
+ <value>virtual_sink_0_2_0</value>
</param>
<param>
- <key>max</key>
- <value>20</value>
+ <key>stream_id</key>
+ <value>user2_est</value>
+ </param>
+ </block>
+ <block>
+ <key>virtual_source</key>
+ <param>
+ <key>comment</key>
+ <value></value>
</param>
<param>
- <key>num_steps</key>
- <value>100</value>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(408, 476)</value>
</param>
<param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>id</key>
+ <value>virtual_source_0</value>
</param>
<param>
- <key>grid_pos</key>
- <value></value>
+ <key>stream_id</key>
+ <value>user1</value>
</param>
+ </block>
+ <block>
+ <key>virtual_source</key>
<param>
- <key>notebook</key>
+ <key>comment</key>
<value></value>
</param>
<param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(447, 14)</value>
+ <value>(240, 1348)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
+ <param>
+ <key>id</key>
+ <value>virtual_source_0_0</value>
+ </param>
+ <param>
+ <key>stream_id</key>
+ <value>user1</value>
+ </param>
</block>
<block>
- <key>blks2_error_rate</key>
+ <key>virtual_source</key>
<param>
- <key>id</key>
- <value>blks2_error_rate_0</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>'BER'</value>
+ <key>_coordinate</key>
+ <value>(0, 508)</value>
</param>
<param>
- <key>win_size</key>
- <value>block*100</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>bits_per_symbol</key>
- <value>2</value>
+ <key>id</key>
+ <value>virtual_source_0_1</value>
</param>
<param>
- <key>affinity</key>
+ <key>stream_id</key>
+ <value>observation</value>
+ </param>
+ </block>
+ <block>
+ <key>virtual_source</key>
+ <param>
+ <key>comment</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(724, 613)</value>
+ <value>(0, 700)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
+ <param>
+ <key>id</key>
+ <value>virtual_source_0_1_0</value>
+ </param>
+ <param>
+ <key>stream_id</key>
+ <value>observation</value>
+ </param>
</block>
<block>
- <key>blks2_error_rate</key>
+ <key>virtual_source</key>
<param>
- <key>id</key>
- <value>blks2_error_rate_0_0</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>'BER'</value>
+ <key>_coordinate</key>
+ <value>(696, 852)</value>
</param>
<param>
- <key>win_size</key>
- <value>block*100</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>bits_per_symbol</key>
- <value>2</value>
+ <key>id</key>
+ <value>virtual_source_0_1_1</value>
</param>
<param>
- <key>affinity</key>
+ <key>stream_id</key>
+ <value>observation</value>
+ </param>
+ </block>
+ <block>
+ <key>virtual_source</key>
+ <param>
+ <key>comment</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(719, 943)</value>
+ <value>(656, 1172)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
+ <param>
+ <key>id</key>
+ <value>virtual_source_0_1_2</value>
+ </param>
+ <param>
+ <key>stream_id</key>
+ <value>observation</value>
+ </param>
</block>
<block>
- <key>blks2_error_rate</key>
+ <key>virtual_source</key>
<param>
- <key>id</key>
- <value>blks2_error_rate_0_0_0</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>'BER'</value>
+ <key>_coordinate</key>
+ <value>(0, 908)</value>
</param>
<param>
- <key>win_size</key>
- <value>block*100</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>bits_per_symbol</key>
- <value>2</value>
+ <key>id</key>
+ <value>virtual_source_0_2</value>
</param>
<param>
- <key>affinity</key>
+ <key>stream_id</key>
+ <value>user1_est</value>
+ </param>
+ </block>
+ <block>
+ <key>virtual_source</key>
+ <param>
+ <key>comment</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(725, 1399)</value>
+ <value>(0, 1220)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
+ <param>
+ <key>id</key>
+ <value>virtual_source_0_2_0</value>
+ </param>
+ <param>
+ <key>stream_id</key>
+ <value>user2_est</value>
+ </param>
</block>
<block>
- <key>blks2_error_rate</key>
+ <key>virtual_source</key>
<param>
- <key>id</key>
- <value>blks2_error_rate_0_0_0_0</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>'BER'</value>
+ <key>_coordinate</key>
+ <value>(408, 668)</value>
</param>
<param>
- <key>win_size</key>
- <value>block*100</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>bits_per_symbol</key>
- <value>2</value>
+ <key>id</key>
+ <value>virtual_source_0_3</value>
</param>
<param>
- <key>affinity</key>
+ <key>stream_id</key>
+ <value>user2</value>
+ </param>
+ </block>
+ <block>
+ <key>virtual_source</key>
+ <param>
+ <key>comment</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(724, 1880)</value>
+ <value>(232, 1052)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
+ <param>
+ <key>id</key>
+ <value>virtual_source_0_4</value>
+ </param>
+ <param>
+ <key>stream_id</key>
+ <value>user2</value>
+ </param>
</block>
<connection>
- <source_block_id>blocks_add_xx_1</source_block_id>
- <sink_block_id>wxgui_scopesink2_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>2</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>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>blocks_add_xx_1</source_block_id>
- <sink_block_id>virtual_sink_0_1</sink_block_id>
+ <source_block_id>analog_random_source_x_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>trellis_viterbi_combined_xx_0_0</source_block_id>
- <sink_block_id>blks2_error_rate_0_0_0_0</sink_block_id>
+ <source_block_id>analog_random_source_x_1</source_block_id>
+ <sink_block_id>trellis_encoder_xx_1</sink_block_id>
<source_key>0</source_key>
- <sink_key>1</sink_key>
+ <sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>virtual_source_0_0</source_block_id>
- <sink_block_id>blks2_error_rate_0_0_0_0</sink_block_id>
+ <source_block_id>analog_random_source_x_1</source_block_id>
+ <sink_block_id>virtual_sink_0_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>blks2_error_rate_0_0_0_0</source_block_id>
- <sink_block_id>wxgui_numbersink2_3_0</sink_block_id>
+ <source_block_id>blks2_error_rate_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>virtual_source_0_2_0</source_block_id>
- <sink_block_id>trellis_encoder_xx_2_0</sink_block_id>
+ <source_block_id>blks2_error_rate_0_0</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>
<connection>
- <source_block_id>virtual_source_0_1_2</source_block_id>
- <sink_block_id>blocks_sub_xx_2_0</sink_block_id>
+ <source_block_id>blks2_error_rate_0_0_0</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>digital_chunks_to_symbols_xx_0_0_1</source_block_id>
- <sink_block_id>blocks_multiply_const_vxx_2_0</sink_block_id>
+ <source_block_id>blks2_error_rate_0_0_0_0</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>trellis_encoder_xx_2_0</source_block_id>
- <sink_block_id>digital_chunks_to_symbols_xx_0_0_1</sink_block_id>
+ <source_block_id>blocks_add_xx_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>blocks_multiply_const_vxx_2_0</source_block_id>
- <sink_block_id>blocks_sub_xx_2_0</sink_block_id>
+ <source_block_id>blocks_add_xx_0</source_block_id>
+ <sink_block_id>virtual_sink_0_1</sink_block_id>
<source_key>0</source_key>
- <sink_key>1</sink_key>
+ <sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>blocks_sub_xx_2_0</source_block_id>
- <sink_block_id>trellis_viterbi_combined_xx_0_0</sink_block_id>
+ <source_block_id>blocks_multiply_const_vxx_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>trellis_viterbi_combined_xx_0</source_block_id>
- <sink_block_id>blks2_error_rate_0_0_0</sink_block_id>
+ <source_block_id>blocks_multiply_const_vxx_1</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>virtual_source_0_4</source_block_id>
- <sink_block_id>blks2_error_rate_0_0_0</sink_block_id>
+ <source_block_id>blocks_multiply_const_vxx_2</source_block_id>
+ <sink_block_id>blocks_sub_xx_2</sink_block_id>
<source_key>0</source_key>
- <sink_key>0</sink_key>
+ <sink_key>1</sink_key>
</connection>
<connection>
- <source_block_id>blks2_error_rate_0_0_0</source_block_id>
- <sink_block_id>wxgui_numbersink2_3</sink_block_id>
+ <source_block_id>blocks_multiply_const_vxx_2_0</source_block_id>
+ <sink_block_id>blocks_sub_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>virtual_source_0_2</source_block_id>
- <sink_block_id>trellis_encoder_xx_2</sink_block_id>
+ <source_block_id>blocks_sub_xx_2</source_block_id>
+ <sink_block_id>trellis_viterbi_combined_xx_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>virtual_source_0_1_1</source_block_id>
- <sink_block_id>blocks_sub_xx_2</sink_block_id>
+ <source_block_id>blocks_sub_xx_2_0</source_block_id>
+ <sink_block_id>trellis_viterbi_combined_xx_0_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_0_0</source_block_id>
- <sink_block_id>blocks_multiply_const_vxx_2</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>trellis_encoder_xx_2</source_block_id>
- <sink_block_id>digital_chunks_to_symbols_xx_0_0_0</sink_block_id>
+ <source_block_id>digital_chunks_to_symbols_xx_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_2</source_block_id>
- <sink_block_id>blocks_sub_xx_2</sink_block_id>
+ <source_block_id>digital_chunks_to_symbols_xx_0_0</source_block_id>
+ <sink_block_id>blocks_multiply_const_vxx_1</sink_block_id>
<source_key>0</source_key>
- <sink_key>1</sink_key>
+ <sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>blocks_sub_xx_2</source_block_id>
- <sink_block_id>trellis_viterbi_combined_xx_0</sink_block_id>
+ <source_block_id>digital_chunks_to_symbols_xx_0_0_0</source_block_id>
+ <sink_block_id>blocks_multiply_const_vxx_2</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>blks2_error_rate_0_0</source_block_id>
- <sink_block_id>wxgui_numbersink2_2</sink_block_id>
+ <source_block_id>digital_chunks_to_symbols_xx_0_0_1</source_block_id>
+ <sink_block_id>blocks_multiply_const_vxx_2_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>virtual_source_0_3</source_block_id>
- <sink_block_id>blks2_error_rate_0_0</sink_block_id>
+ <source_block_id>trellis_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_viterbi_combined_xx_2</source_block_id>
- <sink_block_id>blks2_error_rate_0_0</sink_block_id>
+ <source_block_id>trellis_encoder_xx_1</source_block_id>
+ <sink_block_id>digital_chunks_to_symbols_xx_0_0</sink_block_id>
<source_key>0</source_key>
- <sink_key>1</sink_key>
+ <sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>trellis_viterbi_combined_xx_2</source_block_id>
- <sink_block_id>virtual_sink_0_2_0</sink_block_id>
+ <source_block_id>trellis_encoder_xx_2</source_block_id>
+ <sink_block_id>digital_chunks_to_symbols_xx_0_0_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>virtual_source_0_1_0</source_block_id>
- <sink_block_id>trellis_viterbi_combined_xx_2</sink_block_id>
+ <source_block_id>trellis_encoder_xx_2_0</source_block_id>
+ <sink_block_id>digital_chunks_to_symbols_xx_0_0_1</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>blks2_error_rate_0</source_block_id>
- <sink_block_id>wxgui_numbersink2_0</sink_block_id>
+ <source_block_id>trellis_viterbi_combined_xx_0</source_block_id>
+ <sink_block_id>blks2_error_rate_0_0_0</sink_block_id>
<source_key>0</source_key>
- <sink_key>0</sink_key>
+ <sink_key>1</sink_key>
</connection>
<connection>
- <source_block_id>virtual_source_0</source_block_id>
- <sink_block_id>blks2_error_rate_0</sink_block_id>
+ <source_block_id>trellis_viterbi_combined_xx_0_0</source_block_id>
+ <sink_block_id>blks2_error_rate_0_0_0_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_viterbi_combined_xx_1</source_block_id>
@@ -2511,86 +3787,74 @@
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>virtual_source_0_1</source_block_id>
- <sink_block_id>trellis_viterbi_combined_xx_1</sink_block_id>
+ <source_block_id>trellis_viterbi_combined_xx_2</source_block_id>
+ <sink_block_id>blks2_error_rate_0_0</sink_block_id>
<source_key>0</source_key>
- <sink_key>0</sink_key>
+ <sink_key>1</sink_key>
</connection>
<connection>
- <source_block_id>analog_random_source_x_1</source_block_id>
- <sink_block_id>virtual_sink_0_0</sink_block_id>
+ <source_block_id>trellis_viterbi_combined_xx_2</source_block_id>
+ <sink_block_id>virtual_sink_0_2_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>virtual_sink_0</sink_block_id>
+ <source_block_id>virtual_source_0</source_block_id>
+ <sink_block_id>blks2_error_rate_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>trellis_encoder_xx_1</source_block_id>
- <sink_block_id>digital_chunks_to_symbols_xx_0_0</sink_block_id>
+ <source_block_id>virtual_source_0_0</source_block_id>
+ <sink_block_id>blks2_error_rate_0_0_0_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_0</source_block_id>
- <sink_block_id>blocks_multiply_const_vxx_1</sink_block_id>
+ <source_block_id>virtual_source_0_1</source_block_id>
+ <sink_block_id>trellis_viterbi_combined_xx_1</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_multiply_const_vxx_0</sink_block_id>
+ <source_block_id>virtual_source_0_1_0</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_throttle_0</source_block_id>
- <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
+ <source_block_id>virtual_source_0_1_1</source_block_id>
+ <sink_block_id>blocks_sub_xx_2</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_block_id>virtual_source_0_1_2</source_block_id>
+ <sink_block_id>blocks_sub_xx_2_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_encoder_xx_0</sink_block_id>
+ <source_block_id>virtual_source_0_2</source_block_id>
+ <sink_block_id>trellis_encoder_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>trellis_encoder_xx_1</sink_block_id>
+ <source_block_id>virtual_source_0_2_0</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>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_multiply_const_vxx_1</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_add_xx_0</source_block_id>
- <sink_block_id>blocks_add_xx_1</sink_block_id>
+ <source_block_id>virtual_source_0_3</source_block_id>
+ <sink_block_id>blks2_error_rate_0_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_add_xx_0</sink_block_id>
+ <source_block_id>virtual_source_0_4</source_block_id>
+ <sink_block_id>blks2_error_rate_0_0_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
diff --git a/gr-trellis/examples/grc/pccc.grc b/gr-trellis/examples/grc/pccc.grc
index e10c70a614..d61d02f120 100644
--- a/gr-trellis/examples/grc/pccc.grc
+++ b/gr-trellis/examples/grc/pccc.grc
@@ -1,547 +1,626 @@
-<?xml version='1.0' encoding='ASCII'?>
-<?grc format='1' created='3.7.6'?>
+<?xml version='1.0' encoding='utf-8'?>
+<?grc format='1' created='3.7.11'?>
<flow_graph>
<timestamp>Fri Sep 26 12:26:16 2014</timestamp>
<block>
<key>options</key>
<param>
- <key>id</key>
- <value>pccc</value>
+ <key>author</key>
+ <value>AA</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>window_size</key>
+ <value>2048, 2048</value>
</param>
<param>
- <key>title</key>
- <value>Parallel Concatenated Convolutional Code</value>
+ <key>category</key>
+ <value>Custom</value>
</param>
<param>
- <key>author</key>
- <value>AA</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>description</key>
<value>gnuradio flow graph</value>
</param>
<param>
- <key>window_size</key>
- <value>2048, 2048</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>generate_options</key>
- <value>wx_gui</value>
+ <key>_coordinate</key>
+ <value>(0, 4)</value>
</param>
<param>
- <key>category</key>
- <value>Custom</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>run_options</key>
- <value>prompt</value>
+ <key>generate_options</key>
+ <value>qt_gui</value>
</param>
<param>
- <key>run</key>
- <value>True</value>
+ <key>hier_block_src_path</key>
+ <value>.:</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>pccc</value>
</param>
<param>
<key>max_nouts</key>
<value>0</value>
</param>
<param>
- <key>realtime_scheduling</key>
+ <key>qt_qss_theme</key>
<value></value>
</param>
<param>
- <key>alias</key>
+ <key>realtime_scheduling</key>
<value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(10, 10)</value>
+ <key>run_command</key>
+ <value>{python} -u {filename}</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>run_options</key>
+ <value>prompt</value>
+ </param>
+ <param>
+ <key>run</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>thread_safe_setters</key>
+ <value></value>
+ </param>
+ <param>
+ <key>title</key>
+ <value>Parallel Concatenated Convolutional Code</value>
</param>
</block>
<block>
<key>variable</key>
<param>
- <key>id</key>
- <value>prefix</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>"@FSM_FILE_INSTALL_DIR@"</value>
+ <key>_coordinate</key>
+ <value>(728, 4)</value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(320, 21)</value>
+ <key>id</key>
+ <value>Es</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>value</key>
+ <value>sum(numpy.square(constellation))/(len(constellation)/(1.0*dim))</value>
</param>
</block>
<block>
- <key>variable</key>
+ <key>variable_qtgui_range</key>
<param>
- <key>id</key>
- <value>R</value>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>2</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>100e3</value>
+ <key>_coordinate</key>
+ <value>(864, 140)</value>
</param>
<param>
- <key>alias</key>
+ <key>gui_hint</key>
<value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(200, 101)</value>
- </param>
- <param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>variable</key>
<param>
<key>id</key>
- <value>block</value>
+ <value>EsN0_dB</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>label</key>
+ <value>Es/N0 (dB)</value>
</param>
<param>
- <key>value</key>
- <value>1000</value>
+ <key>min_len</key>
+ <value>200</value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(200, 37)</value>
+ <key>start</key>
+ <value>-10</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>step</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>stop</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>rangeType</key>
+ <value>float</value>
+ </param>
+ <param>
+ <key>widget</key>
+ <value>counter_slider</value>
</param>
</block>
<block>
<key>variable</key>
<param>
- <key>id</key>
- <value>dim</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>mod[0]</value>
+ <key>_coordinate</key>
+ <value>(184, 68)</value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(688, 317)</value>
+ <key>id</key>
+ <value>R</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>value</key>
+ <value>100e3</value>
</param>
</block>
<block>
<key>variable</key>
<param>
- <key>id</key>
- <value>constellation</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>mod[1]</value>
+ <key>_coordinate</key>
+ <value>(184, 4)</value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(528, 317)</value>
+ <key>id</key>
+ <value>block</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>value</key>
+ <value>1000</value>
</param>
</block>
<block>
<key>variable</key>
<param>
- <key>id</key>
- <value>dim</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
- <value>False</value>
+ <value>True</value>
</param>
<param>
- <key>value</key>
- <value>2</value>
+ <key>_coordinate</key>
+ <value>(488, 132)</value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(688, 189)</value>
+ <key>id</key>
+ <value>constellation</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>value</key>
+ <value>mod[1]</value>
</param>
</block>
<block>
<key>variable</key>
<param>
- <key>id</key>
- <value>constellation</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>False</value>
</param>
<param>
- <key>value</key>
- <value>-3,-3,-1,-3,1,-3,3,-3, -3,-1,-1,-1,1,-1,3,-1, -3,1,-1,1,1,1,3,1, -3,3,-1,3,1,3,3,3 </value>
+ <key>_coordinate</key>
+ <value>(488, 4)</value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(528, 189)</value>
+ <key>id</key>
+ <value>constellation</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>value</key>
+ <value>-3,-3,-1,-3,1,-3,3,-3, -3,-1,-1,-1,1,-1,3,-1, -3,1,-1,1,1,1,3,1, -3,3,-1,3,1,3,3,3 </value>
</param>
</block>
<block>
<key>variable</key>
<param>
- <key>id</key>
- <value>Es</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>sum(numpy.square(constellation))/(len(constellation)/(1.0*dim))</value>
+ <key>_coordinate</key>
+ <value>(648, 132)</value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(776, 141)</value>
+ <key>id</key>
+ <value>dim</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>value</key>
+ <value>mod[0]</value>
</param>
</block>
<block>
<key>variable</key>
<param>
- <key>id</key>
- <value>noisevar</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
- <value>True</value>
+ <value>False</value>
</param>
<param>
- <key>value</key>
- <value>10**(-EsN0_dB/10.0) * Es /2.0</value>
+ <key>_coordinate</key>
+ <value>(648, 4)</value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(1032, 149)</value>
+ <key>id</key>
+ <value>dim</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>value</key>
+ <value>2</value>
</param>
</block>
<block>
<key>variable</key>
<param>
- <key>id</key>
- <value>interleaver</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>trellis.interleaver(block,666)</value>
- </param>
- <param>
- <key>alias</key>
- <value></value>
- </param>
- <param>
<key>_coordinate</key>
- <value>(320, 213)</value>
+ <value>(288, 68)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>variable</key>
<param>
<key>id</key>
<value>fsm1</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
<key>value</key>
<value>trellis.fsm(prefix+"awgn1o2_4rsc.fsm")</value>
</param>
+ </block>
+ <block>
+ <key>variable</key>
<param>
- <key>alias</key>
+ <key>comment</key>
<value></value>
</param>
<param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(320, 85)</value>
+ <value>(288, 132)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>variable</key>
<param>
<key>id</key>
<value>fsm2</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
<key>value</key>
<value>trellis.fsm(prefix+"awgn1o1_4rsc.fsm")</value>
</param>
+ </block>
+ <block>
+ <key>variable</key>
<param>
- <key>alias</key>
+ <key>comment</key>
<value></value>
</param>
<param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(320, 149)</value>
+ <value>(288, 196)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
+ <param>
+ <key>id</key>
+ <value>interleaver</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>trellis.interleaver(block,666)</value>
+ </param>
</block>
<block>
<key>variable</key>
<param>
- <key>id</key>
- <value>mod</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
+ <key>_coordinate</key>
+ <value>(480, 68)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>mod</value>
+ </param>
+ <param>
<key>value</key>
<value>fu.psk2x3</value>
</param>
+ </block>
+ <block>
+ <key>variable</key>
<param>
- <key>alias</key>
+ <key>comment</key>
<value></value>
</param>
<param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(576, 253)</value>
+ <value>(648, 68)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>virtual_source</key>
<param>
<key>id</key>
- <value>virtual_source_0_0</value>
+ <value>noisevar</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>value</key>
+ <value>10**(-EsN0_dB/10.0) * Es /2.0</value>
</param>
+ </block>
+ <block>
+ <key>variable</key>
<param>
- <key>stream_id</key>
- <value>info</value>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>1</value>
</param>
<param>
<key>_coordinate</key>
- <value>(104, 1220)</value>
+ <value>(288, 4)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
+ <param>
+ <key>id</key>
+ <value>prefix</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>"@FSM_FILE_INSTALL_DIR@"</value>
+ </param>
</block>
<block>
- <key>virtual_source</key>
+ <key>analog_noise_source_x</key>
<param>
- <key>id</key>
- <value>virtual_source_0_0_0</value>
+ <key>amp</key>
+ <value>noisevar**0.5</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>stream_id</key>
- <value>estimate</value>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(88, 1292)</value>
+ <value>(648, 412)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>wxgui_numbersink2</key>
<param>
<key>id</key>
- <value>wxgui_numbersink2_3_0_0</value>
+ <value>analog_noise_source_x_0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>noise_type</key>
+ <value>analog.GR_GAUSSIAN</value>
</param>
<param>
<key>type</key>
<value>float</value>
</param>
<param>
- <key>title</key>
- <value>BER</value>
+ <key>seed</key>
+ <value>-42</value>
</param>
+ </block>
+ <block>
+ <key>analog_random_source_x</key>
<param>
- <key>units</key>
- <value>BER</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>samp_rate</key>
- <value>R</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
- <key>min_value</key>
- <value>0</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>max_value</key>
- <value>1.0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>factor</key>
- <value>1.0</value>
+ <key>_coordinate</key>
+ <value>(0, 316)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>decimal_places</key>
- <value>6</value>
+ <key>id</key>
+ <value>analog_random_source_x_0_0</value>
</param>
<param>
- <key>ref_level</key>
+ <key>maxoutbuf</key>
<value>0</value>
</param>
<param>
- <key>number_rate</key>
- <value>15</value>
+ <key>max</key>
+ <value>2</value>
</param>
<param>
- <key>peak_hold</key>
- <value>False</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>average</key>
- <value>False</value>
+ <key>min</key>
+ <value>0</value>
</param>
<param>
- <key>avg_alpha</key>
- <value>0.001</value>
+ <key>num_samps</key>
+ <value>block</value>
</param>
<param>
- <key>show_gauge</key>
- <value>False</value>
+ <key>type</key>
+ <value>byte</value>
</param>
<param>
- <key>win_size</key>
- <value></value>
+ <key>repeat</key>
+ <value>True</value>
</param>
+ </block>
+ <block>
+ <key>blks2_error_rate</key>
<param>
- <key>grid_pos</key>
- <value></value>
+ <key>bits_per_symbol</key>
+ <value>1</value>
</param>
<param>
- <key>notebook</key>
+ <key>alias</key>
<value></value>
</param>
<param>
- <key>alias</key>
+ <key>comment</key>
<value></value>
</param>
<param>
@@ -549,23 +628,28 @@
<value></value>
</param>
<param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(680, 1205)</value>
+ <value>(256, 704)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>blks2_error_rate</key>
<param>
<key>id</key>
<value>blks2_error_rate_0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>type</key>
@@ -575,132 +659,121 @@
<key>win_size</key>
<value>block*100</value>
</param>
- <param>
- <key>bits_per_symbol</key>
- <value>1</value>
- </param>
+ </block>
+ <block>
+ <key>blocks_add_xx</key>
<param>
<key>alias</key>
<value></value>
</param>
<param>
- <key>affinity</key>
+ <key>comment</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(304, 1256)</value>
+ <value>(864, 344)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>virtual_sink</key>
<param>
<key>id</key>
- <value>virtual_sink_0_1</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>stream_id</key>
- <value>estimate</value>
+ <value>blocks_add_xx_1</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(768, 940)</value>
+ <key>type</key>
+ <value>float</value>
</param>
<param>
- <key>_rotation</key>
+ <key>maxoutbuf</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>virtual_source</key>
<param>
- <key>id</key>
- <value>virtual_source_0</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>num_inputs</key>
+ <value>2</value>
</param>
<param>
- <key>stream_id</key>
- <value>observation</value>
+ <key>vlen</key>
+ <value>1</value>
</param>
+ </block>
+ <block>
+ <key>blocks_throttle</key>
<param>
- <key>_coordinate</key>
- <value>(104, 940)</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>comment</key>
+ <value></value>
</param>
- </block>
- <block>
- <key>virtual_sink</key>
<param>
- <key>id</key>
- <value>virtual_sink_0_0</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>stream_id</key>
- <value>info</value>
- </param>
- <param>
<key>_coordinate</key>
- <value>(224, 412)</value>
+ <value>(200, 340)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>blocks_throttle</key>
<param>
<key>id</key>
<value>blocks_throttle_0_0</value>
</param>
<param>
- <key>_enabled</key>
+ <key>ignoretag</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>byte</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>samples_per_second</key>
<value>R</value>
</param>
<param>
+ <key>type</key>
+ <value>byte</value>
+ </param>
+ <param>
<key>vlen</key>
<value>1</value>
</param>
+ </block>
+ <block>
+ <key>digital_chunks_to_symbols_xx</key>
<param>
- <key>ignoretag</key>
- <value>True</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>alias</key>
+ <key>comment</key>
<value></value>
</param>
<param>
@@ -708,524 +781,667 @@
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>dimension</key>
+ <value>dim</value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(208, 492)</value>
+ <value>(624, 332)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
+ <param>
+ <key>id</key>
+ <value>digital_chunks_to_symbols_xx_0</value>
+ </param>
+ <param>
+ <key>in_type</key>
+ <value>byte</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>num_ports</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>out_type</key>
+ <value>float</value>
+ </param>
+ <param>
+ <key>symbol_table</key>
+ <value>constellation</value>
+ </param>
</block>
<block>
- <key>analog_noise_source_x</key>
+ <key>import</key>
<param>
- <key>id</key>
- <value>analog_noise_source_x_0</value>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>float</value>
+ <key>_coordinate</key>
+ <value>(0, 124)</value>
</param>
<param>
- <key>noise_type</key>
- <value>analog.GR_GAUSSIAN</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>amp</key>
- <value>noisevar**0.5</value>
+ <key>id</key>
+ <value>import_0_0</value>
</param>
<param>
- <key>seed</key>
- <value>-42</value>
+ <key>import</key>
+ <value>import gnuradio.trellis.fsm_utils as fu</value>
+ </param>
+ </block>
+ <block>
+ <key>qtgui_number_sink</key>
+ <param>
+ <key>autoscale</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>avg</key>
+ <value>0</value>
</param>
<param>
<key>alias</key>
<value></value>
</param>
<param>
- <key>affinity</key>
+ <key>comment</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>1</value>
</param>
<param>
<key>_coordinate</key>
- <value>(656, 646)</value>
+ <value>(608, 692)</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value></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>graph_type</key>
+ <value>qtgui.NUM_GRAPH_HORIZ</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>id</key>
+ <value>qtgui_number_sink_0</value>
</param>
<param>
<key>type</key>
<value>float</value>
</param>
<param>
- <key>num_inputs</key>
- <value>2</value>
+ <key>color1</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>vlen</key>
+ <key>factor1</key>
<value>1</value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>label1</key>
+ <value>BER</value>
</param>
<param>
- <key>affinity</key>
+ <key>unit1</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>color10</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>factor10</key>
+ <value>1</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(880, 552)</value>
+ <key>label10</key>
+ <value></value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>unit10</key>
+ <value></value>
</param>
- </block>
- <block>
- <key>virtual_sink</key>
<param>
- <key>id</key>
- <value>virtual_sink_0</value>
+ <key>color2</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>factor2</key>
+ <value>1</value>
</param>
<param>
- <key>stream_id</key>
- <value>observation</value>
+ <key>label2</key>
+ <value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(896, 676)</value>
+ <key>unit2</key>
+ <value></value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>color3</key>
+ <value>("black", "black")</value>
</param>
- </block>
- <block>
- <key>import</key>
<param>
- <key>id</key>
- <value>import_0_0</value>
+ <key>factor3</key>
+ <value>1</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>label3</key>
+ <value></value>
</param>
<param>
- <key>import</key>
- <value>import gnuradio.trellis.fsm_utils as fu</value>
+ <key>unit3</key>
+ <value></value>
</param>
<param>
- <key>alias</key>
+ <key>color4</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor4</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>label4</key>
<value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(48, 132)</value>
+ <key>unit4</key>
+ <value></value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>color5</key>
+ <value>("black", "black")</value>
</param>
- </block>
- <block>
- <key>trellis_pccc_encoder_xx</key>
<param>
- <key>id</key>
- <value>trellis_pccc_encoder_xx_0</value>
+ <key>factor5</key>
+ <value>1</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>label5</key>
+ <value></value>
</param>
<param>
- <key>type</key>
- <value>bb</value>
+ <key>unit5</key>
+ <value></value>
</param>
<param>
- <key>o_fsm_args</key>
- <value>fsm1</value>
+ <key>color6</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>o_init_state</key>
- <value>0</value>
+ <key>factor6</key>
+ <value>1</value>
</param>
<param>
- <key>i_fsm_args</key>
- <value>fsm2</value>
+ <key>label6</key>
+ <value></value>
</param>
<param>
- <key>i_init_state</key>
- <value>0</value>
+ <key>unit6</key>
+ <value></value>
</param>
<param>
- <key>interleaver_args</key>
- <value>interleaver</value>
+ <key>color7</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>bl</key>
- <value>block</value>
+ <key>factor7</key>
+ <value>1</value>
</param>
<param>
- <key>alias</key>
+ <key>label7</key>
<value></value>
</param>
<param>
- <key>affinity</key>
+ <key>unit7</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>color8</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>factor8</key>
+ <value>1</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(400, 457)</value>
+ <key>label8</key>
+ <value></value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>unit8</key>
+ <value></value>
</param>
- </block>
- <block>
- <key>digital_chunks_to_symbols_xx</key>
<param>
- <key>id</key>
- <value>digital_chunks_to_symbols_xx_0</value>
+ <key>color9</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>factor9</key>
+ <value>1</value>
</param>
<param>
- <key>in_type</key>
- <value>byte</value>
+ <key>label9</key>
+ <value></value>
</param>
<param>
- <key>out_type</key>
- <value>float</value>
+ <key>unit9</key>
+ <value></value>
</param>
<param>
- <key>symbol_table</key>
- <value>constellation</value>
+ <key>max</key>
+ <value>1</value>
</param>
<param>
- <key>dimension</key>
- <value>dim</value>
+ <key>min</key>
+ <value>0</value>
</param>
<param>
- <key>num_ports</key>
+ <key>name</key>
+ <value>"BER"</value>
+ </param>
+ <param>
+ <key>nconnections</key>
<value>1</value>
</param>
<param>
+ <key>update_time</key>
+ <value>0.10</value>
+ </param>
+ </block>
+ <block>
+ <key>trellis_pccc_decoder_combined_xx</key>
+ <param>
<key>alias</key>
<value></value>
</param>
<param>
+ <key>block_size</key>
+ <value>block</value>
+ </param>
+ <param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>table</key>
+ <value>constellation</value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>dim</key>
+ <value>dim</value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>o_fsm_args</key>
+ <value>fsm1</value>
+ </param>
+ <param>
+ <key>i_fsm_args</key>
+ <value>fsm2</value>
+ </param>
+ <param>
+ <key>o_final_state</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>i_final_state</key>
+ <value>-1</value>
</param>
<param>
<key>_coordinate</key>
- <value>(632, 485)</value>
+ <value>(312, 448)</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_0</value>
+ <value>trellis_pccc_decoder_combined_xx_0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>o_init_state</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>i_init_state</key>
+ <value>0</value>
</param>
<param>
<key>type</key>
- <value>byte</value>
+ <value>f</value>
</param>
<param>
- <key>min</key>
+ <key>interleaver</key>
+ <value>interleaver</value>
+ </param>
+ <param>
+ <key>iterations</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
<value>0</value>
</param>
<param>
- <key>max</key>
- <value>2</value>
+ <key>metric_type</key>
+ <value>digital.TRELLIS_EUCLIDEAN</value>
</param>
<param>
- <key>num_samps</key>
- <value>block</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>repeat</key>
- <value>True</value>
+ <key>out_type</key>
+ <value>b</value>
+ </param>
+ <param>
+ <key>siso_type</key>
+ <value>trellis.TRELLIS_MIN_SUM</value>
+ </param>
+ <param>
+ <key>scaling</key>
+ <value>0.5/noisevar</value>
</param>
+ </block>
+ <block>
+ <key>trellis_pccc_encoder_xx</key>
<param>
<key>alias</key>
<value></value>
</param>
<param>
+ <key>bl</key>
+ <value>block</value>
+ </param>
+ <param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>o_fsm_args</key>
+ <value>fsm1</value>
+ </param>
+ <param>
+ <key>i_fsm_args</key>
+ <value>fsm2</value>
</param>
<param>
<key>_coordinate</key>
- <value>(8, 471)</value>
+ <value>(392, 300)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>variable_slider</key>
<param>
<key>id</key>
- <value>EsN0_dB</value>
+ <value>trellis_pccc_encoder_xx_0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>o_init_state</key>
+ <value>0</value>
</param>
<param>
- <key>label</key>
- <value>EsN0 (dB)</value>
+ <key>i_init_state</key>
+ <value>0</value>
</param>
<param>
- <key>value</key>
- <value>2</value>
+ <key>interleaver_args</key>
+ <value>interleaver</value>
</param>
<param>
- <key>min</key>
- <value>-10</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>max</key>
- <value>20</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>num_steps</key>
- <value>1000</value>
+ <key>type</key>
+ <value>bb</value>
</param>
+ </block>
+ <block>
+ <key>virtual_sink</key>
<param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
+ <key>comment</key>
+ <value></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>_coordinate</key>
+ <value>(968, 356)</value>
</param>
<param>
- <key>notebook</key>
- <value></value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>alias</key>
+ <key>id</key>
+ <value>virtual_sink_0</value>
+ </param>
+ <param>
+ <key>stream_id</key>
+ <value>observation</value>
+ </param>
+ </block>
+ <block>
+ <key>virtual_sink</key>
+ <param>
+ <key>comment</key>
<value></value>
</param>
<param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(896, 129)</value>
+ <value>(200, 404)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
+ <param>
+ <key>id</key>
+ <value>virtual_sink_0_0</value>
+ </param>
+ <param>
+ <key>stream_id</key>
+ <value>info</value>
+ </param>
</block>
<block>
- <key>trellis_pccc_decoder_combined_xx</key>
+ <key>virtual_sink</key>
<param>
- <key>id</key>
- <value>trellis_pccc_decoder_combined_xx_0</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>f</value>
+ <key>_coordinate</key>
+ <value>(680, 548)</value>
</param>
<param>
- <key>out_type</key>
- <value>b</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>o_fsm_args</key>
- <value>fsm1</value>
+ <key>id</key>
+ <value>virtual_sink_0_1</value>
</param>
<param>
- <key>o_init_state</key>
- <value>0</value>
+ <key>stream_id</key>
+ <value>estimate</value>
</param>
+ </block>
+ <block>
+ <key>virtual_source</key>
<param>
- <key>o_final_state</key>
- <value>-1</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
- <key>i_fsm_args</key>
- <value>fsm2</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>i_init_state</key>
- <value>0</value>
+ <key>_coordinate</key>
+ <value>(16, 548)</value>
</param>
<param>
- <key>i_final_state</key>
- <value>-1</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>interleaver</key>
- <value>interleaver</value>
+ <key>id</key>
+ <value>virtual_source_0</value>
</param>
<param>
- <key>block_size</key>
- <value>block</value>
+ <key>stream_id</key>
+ <value>observation</value>
</param>
+ </block>
+ <block>
+ <key>virtual_source</key>
<param>
- <key>iterations</key>
- <value>10</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
- <key>dim</key>
- <value>dim</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>table</key>
- <value>constellation</value>
+ <key>_coordinate</key>
+ <value>(56, 676)</value>
</param>
<param>
- <key>metric_type</key>
- <value>digital.TRELLIS_EUCLIDEAN</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>siso_type</key>
- <value>trellis.TRELLIS_MIN_SUM</value>
+ <key>id</key>
+ <value>virtual_source_0_0</value>
</param>
<param>
- <key>scaling</key>
- <value>0.5/noisevar</value>
+ <key>stream_id</key>
+ <value>info</value>
</param>
+ </block>
+ <block>
+ <key>virtual_source</key>
<param>
- <key>alias</key>
+ <key>comment</key>
<value></value>
</param>
<param>
- <key>affinity</key>
- <value></value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>_coordinate</key>
+ <value>(56, 732)</value>
</param>
<param>
- <key>maxoutbuf</key>
+ <key>_rotation</key>
<value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(400, 849)</value>
+ <key>id</key>
+ <value>virtual_source_0_0_0</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>stream_id</key>
+ <value>estimate</value>
</param>
</block>
<connection>
- <source_block_id>digital_chunks_to_symbols_xx_0</source_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>blks2_error_rate_0</source_block_id>
- <sink_block_id>wxgui_numbersink2_3_0_0</sink_block_id>
+ <source_block_id>analog_random_source_x_0_0</source_block_id>
+ <sink_block_id>blocks_throttle_0_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>virtual_source_0_0</source_block_id>
- <sink_block_id>blks2_error_rate_0</sink_block_id>
+ <source_block_id>analog_random_source_x_0_0</source_block_id>
+ <sink_block_id>virtual_sink_0_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>virtual_source_0_0_0</source_block_id>
- <sink_block_id>blks2_error_rate_0</sink_block_id>
+ <source_block_id>blks2_error_rate_0</source_block_id>
+ <sink_block_id>qtgui_number_sink_0</sink_block_id>
<source_key>0</source_key>
- <sink_key>1</sink_key>
+ <sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>blocks_add_xx_1</source_block_id>
@@ -1234,44 +1450,44 @@
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>trellis_pccc_decoder_combined_xx_0</source_block_id>
- <sink_block_id>virtual_sink_0_1</sink_block_id>
+ <source_block_id>blocks_throttle_0_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>virtual_source_0</source_block_id>
- <sink_block_id>trellis_pccc_decoder_combined_xx_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>trellis_pccc_encoder_xx_0</source_block_id>
- <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
+ <source_block_id>trellis_pccc_decoder_combined_xx_0</source_block_id>
+ <sink_block_id>virtual_sink_0_1</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>blocks_throttle_0_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>digital_chunks_to_symbols_xx_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>analog_random_source_x_0_0</source_block_id>
- <sink_block_id>blocks_throttle_0_0</sink_block_id>
+ <source_block_id>virtual_source_0</source_block_id>
+ <sink_block_id>trellis_pccc_decoder_combined_xx_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>analog_random_source_x_0_0</source_block_id>
- <sink_block_id>virtual_sink_0_0</sink_block_id>
+ <source_block_id>virtual_source_0_0</source_block_id>
+ <sink_block_id>blks2_error_rate_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>virtual_source_0_0_0</source_block_id>
+ <sink_block_id>blks2_error_rate_0</sink_block_id>
<source_key>0</source_key>
<sink_key>1</sink_key>
</connection>
diff --git a/gr-trellis/examples/grc/sccc.grc b/gr-trellis/examples/grc/sccc.grc
index f31f3ce86d..ea53711a42 100644
--- a/gr-trellis/examples/grc/sccc.grc
+++ b/gr-trellis/examples/grc/sccc.grc
@@ -1,433 +1,533 @@
-<?xml version='1.0' encoding='ASCII'?>
-<?grc format='1' created='3.7.6'?>
+<?xml version='1.0' encoding='utf-8'?>
+<?grc format='1' created='3.7.11'?>
<flow_graph>
<timestamp>Wed Oct 1 11:04:18 2014</timestamp>
<block>
<key>options</key>
<param>
- <key>id</key>
- <value>sccc</value>
+ <key>author</key>
+ <value>AA</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>window_size</key>
+ <value>2048, 2048</value>
</param>
<param>
- <key>title</key>
- <value>Serially Concatenated Convolutional Code</value>
+ <key>category</key>
+ <value>Custom</value>
</param>
<param>
- <key>author</key>
- <value>AA</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>description</key>
<value>gnuradio flow graph</value>
</param>
<param>
- <key>window_size</key>
- <value>2048, 2048</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>generate_options</key>
- <value>wx_gui</value>
+ <key>_coordinate</key>
+ <value>(0, 4)</value>
</param>
<param>
- <key>category</key>
- <value>Custom</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>run_options</key>
- <value>prompt</value>
+ <key>generate_options</key>
+ <value>qt_gui</value>
</param>
<param>
- <key>run</key>
- <value>True</value>
+ <key>hier_block_src_path</key>
+ <value>.:</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>sccc</value>
</param>
<param>
<key>max_nouts</key>
<value>0</value>
</param>
<param>
- <key>realtime_scheduling</key>
+ <key>qt_qss_theme</key>
<value></value>
</param>
<param>
- <key>alias</key>
+ <key>realtime_scheduling</key>
<value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(10, 10)</value>
+ <key>run_command</key>
+ <value>{python} -u {filename}</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>run_options</key>
+ <value>prompt</value>
+ </param>
+ <param>
+ <key>run</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>thread_safe_setters</key>
+ <value></value>
+ </param>
+ <param>
+ <key>title</key>
+ <value>Serially Concatenated Convolutional Code</value>
</param>
</block>
<block>
<key>variable</key>
<param>
- <key>id</key>
- <value>prefix</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>"@FSM_FILE_INSTALL_DIR@"</value>
+ <key>_coordinate</key>
+ <value>(560, 132)</value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(344, 13)</value>
+ <key>id</key>
+ <value>Es</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>value</key>
+ <value>sum(numpy.square(constellation))/(len(constellation)/(1.0*dim))</value>
</param>
</block>
<block>
- <key>variable</key>
+ <key>variable_qtgui_range</key>
<param>
- <key>id</key>
- <value>mod</value>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>2</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>fu.psk2x3</value>
+ <key>_coordinate</key>
+ <value>(640, 76)</value>
</param>
<param>
- <key>alias</key>
+ <key>gui_hint</key>
<value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(632, 101)</value>
- </param>
- <param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>variable</key>
<param>
<key>id</key>
- <value>interleaver</value>
+ <value>EsN0_dB</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>label</key>
+ <value>Es/N0 (dB)</value>
</param>
<param>
- <key>value</key>
- <value>trellis.interleaver(block,666)</value>
+ <key>min_len</key>
+ <value>200</value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(344, 205)</value>
+ <key>start</key>
+ <value>-10</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>step</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>stop</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>rangeType</key>
+ <value>float</value>
+ </param>
+ <param>
+ <key>widget</key>
+ <value>counter_slider</value>
</param>
</block>
<block>
<key>variable</key>
<param>
- <key>id</key>
- <value>Es</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>sum(numpy.square(constellation))/(len(constellation)/(1.0*dim))</value>
+ <key>_coordinate</key>
+ <value>(176, 68)</value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(800, 133)</value>
+ <key>id</key>
+ <value>R</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>value</key>
+ <value>100e3</value>
</param>
</block>
<block>
<key>variable</key>
<param>
- <key>id</key>
- <value>noisevar</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>10**(-EsN0_dB/10.0) * Es /2.0</value>
- </param>
- <param>
- <key>alias</key>
- <value></value>
- </param>
- <param>
<key>_coordinate</key>
- <value>(1056, 141)</value>
+ <value>(176, 4)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>variable</key>
<param>
<key>id</key>
<value>block</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
<key>value</key>
<value>1000</value>
</param>
+ </block>
+ <block>
+ <key>variable</key>
<param>
- <key>alias</key>
+ <key>comment</key>
<value></value>
</param>
<param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(224, 29)</value>
+ <value>(488, 68)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
+ <param>
+ <key>id</key>
+ <value>constellation</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>mod[1]</value>
+ </param>
</block>
<block>
<key>variable</key>
<param>
- <key>id</key>
- <value>fsm_o</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>trellis.fsm(prefix+"awgn1o2_4.fsm")</value>
+ <key>_coordinate</key>
+ <value>(488, 132)</value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(344, 77)</value>
+ <key>id</key>
+ <value>dim</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>value</key>
+ <value>mod[0]</value>
</param>
</block>
<block>
<key>variable</key>
<param>
- <key>id</key>
- <value>fsm_i</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
+ <key>_coordinate</key>
+ <value>(272, 132)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>fsm_i</value>
+ </param>
+ <param>
<key>value</key>
<value>trellis.fsm(prefix+"/awgn2o3_4.fsm")</value>
</param>
+ </block>
+ <block>
+ <key>variable</key>
<param>
- <key>alias</key>
+ <key>comment</key>
<value></value>
</param>
<param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(344, 141)</value>
+ <value>(272, 68)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
+ <param>
+ <key>id</key>
+ <value>fsm_o</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>trellis.fsm(prefix+"awgn1o2_4.fsm")</value>
+ </param>
</block>
<block>
<key>variable</key>
<param>
- <key>id</key>
- <value>constellation</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>mod[1]</value>
+ <key>_coordinate</key>
+ <value>(272, 196)</value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(568, 173)</value>
+ <key>id</key>
+ <value>interleaver</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>value</key>
+ <value>trellis.interleaver(block,666)</value>
</param>
</block>
<block>
<key>variable</key>
<param>
- <key>id</key>
- <value>dim</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>mod[0]</value>
+ <key>_coordinate</key>
+ <value>(488, 4)</value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(720, 173)</value>
+ <key>id</key>
+ <value>mod</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>value</key>
+ <value>fu.psk2x3</value>
</param>
</block>
<block>
<key>variable</key>
<param>
- <key>id</key>
- <value>R</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
+ <key>_coordinate</key>
+ <value>(640, 4)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>noisevar</value>
+ </param>
+ <param>
<key>value</key>
- <value>100e3</value>
+ <value>10**(-EsN0_dB/10.0) * Es /2.0</value>
</param>
+ </block>
+ <block>
+ <key>variable</key>
<param>
- <key>alias</key>
+ <key>comment</key>
<value></value>
</param>
<param>
+ <key>_enabled</key>
+ <value>1</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(224, 93)</value>
+ <value>(272, 4)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>import</key>
<param>
<key>id</key>
- <value>import_0</value>
+ <value>prefix</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>value</key>
+ <value>"@FSM_FILE_INSTALL_DIR@"</value>
</param>
+ </block>
+ <block>
+ <key>analog_noise_source_x</key>
<param>
- <key>import</key>
- <value>import numpy</value>
+ <key>amp</key>
+ <value>noisevar**0.5</value>
</param>
<param>
<key>alias</key>
<value></value>
</param>
<param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(32, 148)</value>
+ <value>(680, 380)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>virtual_sink</key>
<param>
<key>id</key>
- <value>virtual_sink_0_0</value>
+ <value>analog_noise_source_x_0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>stream_id</key>
- <value>info</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(192, 332)</value>
+ <key>noise_type</key>
+ <value>analog.GR_GAUSSIAN</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>type</key>
+ <value>float</value>
+ </param>
+ <param>
+ <key>seed</key>
+ <value>-42</value>
</param>
</block>
<block>
<key>analog_random_source_x</key>
<param>
- <key>id</key>
- <value>analog_random_source_x_0</value>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>byte</value>
+ <key>_coordinate</key>
+ <value>(8, 292)</value>
</param>
<param>
- <key>min</key>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>analog_random_source_x_0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
<value>0</value>
</param>
<param>
@@ -435,598 +535,650 @@
<value>2</value>
</param>
<param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>min</key>
+ <value>0</value>
+ </param>
+ <param>
<key>num_samps</key>
<value>1007</value>
</param>
<param>
+ <key>type</key>
+ <value>byte</value>
+ </param>
+ <param>
<key>repeat</key>
<value>True</value>
</param>
+ </block>
+ <block>
+ <key>blks2_error_rate</key>
+ <param>
+ <key>bits_per_symbol</key>
+ <value>1</value>
+ </param>
<param>
<key>alias</key>
<value></value>
</param>
<param>
- <key>affinity</key>
+ <key>comment</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(5, 384)</value>
+ <value>(608, 536)</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>
+ <value>blks2_error_rate_0</value>
</param>
<param>
- <key>type</key>
- <value>byte</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>samples_per_second</key>
- <value>R</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>type</key>
+ <value>'SER'</value>
</param>
<param>
- <key>ignoretag</key>
- <value>True</value>
+ <key>win_size</key>
+ <value>block*100</value>
</param>
+ </block>
+ <block>
+ <key>blocks_add_xx</key>
<param>
<key>alias</key>
<value></value>
</param>
<param>
- <key>affinity</key>
+ <key>comment</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(232, 404)</value>
+ <value>(920, 320)</value>
</param>
<param>
<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>_enabled</key>
- <value>True</value>
+ <value>blocks_add_xx_1</value>
</param>
<param>
- <key>in_type</key>
- <value>byte</value>
+ <key>type</key>
+ <value>float</value>
</param>
<param>
- <key>out_type</key>
- <value>float</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>symbol_table</key>
- <value>constellation</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>dimension</key>
- <value>dim</value>
+ <key>num_inputs</key>
+ <value>2</value>
</param>
<param>
- <key>num_ports</key>
+ <key>vlen</key>
<value>1</value>
</param>
+ </block>
+ <block>
+ <key>blocks_throttle</key>
<param>
<key>alias</key>
<value></value>
</param>
<param>
- <key>affinity</key>
+ <key>comment</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(672, 397)</value>
+ <value>(224, 316)</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>
+ <value>blocks_throttle_0</value>
</param>
<param>
- <key>_enabled</key>
+ <key>ignoretag</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>float</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>num_inputs</key>
- <value>2</value>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>samples_per_second</key>
+ <value>R</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>byte</value>
</param>
<param>
<key>vlen</key>
<value>1</value>
</param>
+ </block>
+ <block>
+ <key>digital_chunks_to_symbols_xx</key>
<param>
<key>alias</key>
<value></value>
</param>
<param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>dimension</key>
+ <value>dim</value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(960, 472)</value>
+ <value>(648, 308)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>blks2_error_rate</key>
<param>
<key>id</key>
- <value>blks2_error_rate_0</value>
+ <value>digital_chunks_to_symbols_xx_0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>in_type</key>
+ <value>byte</value>
</param>
<param>
- <key>type</key>
- <value>'SER'</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>win_size</key>
- <value>block*100</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>bits_per_symbol</key>
+ <key>num_ports</key>
<value>1</value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>out_type</key>
+ <value>float</value>
</param>
<param>
- <key>affinity</key>
+ <key>symbol_table</key>
+ <value>constellation</value>
+ </param>
+ </block>
+ <block>
+ <key>import</key>
+ <param>
+ <key>alias</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(312, 1168)</value>
+ <value>(0, 116)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
+ <param>
+ <key>id</key>
+ <value>import_0</value>
+ </param>
+ <param>
+ <key>import</key>
+ <value>import numpy</value>
+ </param>
</block>
<block>
- <key>virtual_source</key>
+ <key>import</key>
<param>
- <key>id</key>
- <value>virtual_source_0_0_0</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
- <key>stream_id</key>
- <value>estimate</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(96, 1204)</value>
+ <value>(0, 164)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
+ <param>
+ <key>id</key>
+ <value>import_0_0</value>
+ </param>
+ <param>
+ <key>import</key>
+ <value>import gnuradio.trellis.fsm_utils as fu</value>
+ </param>
</block>
<block>
- <key>virtual_source</key>
+ <key>qtgui_number_sink</key>
<param>
- <key>id</key>
- <value>virtual_source_0_0</value>
+ <key>autoscale</key>
+ <value>False</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>avg</key>
+ <value>0</value>
</param>
<param>
- <key>stream_id</key>
- <value>info</value>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>1</value>
</param>
<param>
<key>_coordinate</key>
- <value>(112, 1132)</value>
+ <value>(824, 524)</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value></value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>wxgui_numbersink2</key>
<param>
- <key>id</key>
- <value>wxgui_numbersink2_3_0_0</value>
+ <key>graph_type</key>
+ <value>qtgui.NUM_GRAPH_HORIZ</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>id</key>
+ <value>qtgui_number_sink_0</value>
</param>
<param>
<key>type</key>
<value>float</value>
</param>
<param>
- <key>title</key>
- <value>BER</value>
+ <key>color1</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor1</key>
+ <value>1</value>
</param>
<param>
- <key>units</key>
+ <key>label1</key>
<value>BER</value>
</param>
<param>
- <key>samp_rate</key>
- <value>R</value>
+ <key>unit1</key>
+ <value></value>
</param>
<param>
- <key>min_value</key>
- <value>0</value>
+ <key>color10</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>max_value</key>
- <value>1.0</value>
+ <key>factor10</key>
+ <value>1</value>
</param>
<param>
- <key>factor</key>
- <value>1.0</value>
+ <key>label10</key>
+ <value></value>
</param>
<param>
- <key>decimal_places</key>
- <value>6</value>
+ <key>unit10</key>
+ <value></value>
</param>
<param>
- <key>ref_level</key>
- <value>0</value>
+ <key>color2</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>number_rate</key>
- <value>15</value>
+ <key>factor2</key>
+ <value>1</value>
</param>
<param>
- <key>peak_hold</key>
- <value>False</value>
+ <key>label2</key>
+ <value></value>
</param>
<param>
- <key>average</key>
- <value>False</value>
+ <key>unit2</key>
+ <value></value>
</param>
<param>
- <key>avg_alpha</key>
- <value>0.001</value>
+ <key>color3</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>show_gauge</key>
- <value>False</value>
+ <key>factor3</key>
+ <value>1</value>
</param>
<param>
- <key>win_size</key>
+ <key>label3</key>
<value></value>
</param>
<param>
- <key>grid_pos</key>
+ <key>unit3</key>
<value></value>
</param>
<param>
- <key>notebook</key>
- <value></value>
+ <key>color4</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>alias</key>
+ <key>factor4</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>label4</key>
<value></value>
</param>
<param>
- <key>affinity</key>
+ <key>unit4</key>
<value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(688, 1117)</value>
+ <key>color5</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>factor5</key>
+ <value>1</value>
</param>
- </block>
- <block>
- <key>virtual_source</key>
<param>
- <key>id</key>
- <value>virtual_source_0</value>
+ <key>label5</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>unit5</key>
+ <value></value>
</param>
<param>
- <key>stream_id</key>
- <value>observation</value>
+ <key>color6</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(88, 836)</value>
+ <key>factor6</key>
+ <value>1</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>label6</key>
+ <value></value>
</param>
- </block>
- <block>
- <key>virtual_sink</key>
<param>
- <key>id</key>
- <value>virtual_sink_0_1</value>
+ <key>unit6</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>color7</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>stream_id</key>
- <value>estimate</value>
+ <key>factor7</key>
+ <value>1</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(744, 836)</value>
+ <key>label7</key>
+ <value></value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>unit7</key>
+ <value></value>
</param>
- </block>
- <block>
- <key>analog_noise_source_x</key>
<param>
- <key>id</key>
- <value>analog_noise_source_x_0</value>
+ <key>color8</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>factor8</key>
+ <value>1</value>
</param>
<param>
- <key>type</key>
- <value>float</value>
+ <key>label8</key>
+ <value></value>
</param>
<param>
- <key>noise_type</key>
- <value>analog.GR_GAUSSIAN</value>
+ <key>unit8</key>
+ <value></value>
</param>
<param>
- <key>amp</key>
- <value>noisevar**0.5</value>
+ <key>color9</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>seed</key>
- <value>-42</value>
+ <key>factor9</key>
+ <value>1</value>
</param>
<param>
- <key>alias</key>
+ <key>label9</key>
<value></value>
</param>
<param>
- <key>affinity</key>
+ <key>unit9</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>max</key>
+ <value>1</value>
</param>
<param>
- <key>maxoutbuf</key>
+ <key>min</key>
<value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(608, 510)</value>
+ <key>name</key>
+ <value>"BER"</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>nconnections</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>update_time</key>
+ <value>0.10</value>
</param>
</block>
<block>
- <key>virtual_sink</key>
+ <key>trellis_sccc_decoder_combined_xx</key>
<param>
- <key>id</key>
- <value>virtual_sink_0</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>block_size</key>
+ <value>block</value>
</param>
<param>
- <key>stream_id</key>
- <value>observation</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(1064, 484)</value>
+ <key>table</key>
+ <value>constellation</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>affinity</key>
+ <value></value>
</param>
- </block>
- <block>
- <key>variable_slider</key>
<param>
- <key>id</key>
- <value>EsN0_dB</value>
+ <key>dim</key>
+ <value>dim</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>label</key>
- <value>EsN0 (dB)</value>
- </param>
- <param>
- <key>value</key>
- <value>2</value>
- </param>
- <param>
- <key>min</key>
- <value>-10</value>
+ <key>_coordinate</key>
+ <value>(248, 464)</value>
</param>
<param>
- <key>max</key>
- <value>10</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>num_steps</key>
- <value>1000</value>
+ <key>id</key>
+ <value>trellis_sccc_decoder_combined_xx_0</value>
</param>
<param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
+ <key>i_fsm_args</key>
+ <value>fsm_i</value>
</param>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>i_final_state</key>
+ <value>-1</value>
</param>
<param>
- <key>grid_pos</key>
- <value></value>
+ <key>i_init_state</key>
+ <value>0</value>
</param>
<param>
- <key>notebook</key>
- <value></value>
+ <key>type</key>
+ <value>f</value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>interleaver</key>
+ <value>interleaver</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(920, 113)</value>
+ <key>iterations</key>
+ <value>5</value>
</param>
<param>
- <key>_rotation</key>
+ <key>maxoutbuf</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>trellis_sccc_encoder_xx</key>
<param>
- <key>id</key>
- <value>trellis_sccc_encoder_xx_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
+ <key>metric_type</key>
+ <value>digital.TRELLIS_EUCLIDEAN</value>
</param>
<param>
- <key>type</key>
- <value>bb</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>o_fsm_args</key>
<value>fsm_o</value>
</param>
<param>
+ <key>o_final_state</key>
+ <value>-1</value>
+ </param>
+ <param>
<key>o_init_state</key>
<value>0</value>
</param>
<param>
- <key>i_fsm_args</key>
- <value>fsm_i</value>
+ <key>out_type</key>
+ <value>b</value>
</param>
<param>
- <key>i_init_state</key>
- <value>0</value>
+ <key>siso_type</key>
+ <value>trellis.TRELLIS_MIN_SUM</value>
</param>
<param>
- <key>interleaver_args</key>
- <value>interleaver</value>
+ <key>scaling</key>
+ <value>1.0/noisevar</value>
+ </param>
+ </block>
+ <block>
+ <key>trellis_sccc_encoder_xx</key>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>bl</key>
<value>block</value>
</param>
<param>
- <key>alias</key>
+ <key>comment</key>
<value></value>
</param>
<param>
@@ -1034,146 +1186,160 @@
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
- </param>
- <param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(416, 369)</value>
+ <value>(416, 276)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>import</key>
<param>
<key>id</key>
- <value>import_0_0</value>
+ <value>trellis_sccc_encoder_xx_0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>i_fsm_args</key>
+ <value>fsm_i</value>
</param>
<param>
- <key>import</key>
- <value>import gnuradio.trellis.fsm_utils as fu</value>
+ <key>i_init_state</key>
+ <value>0</value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>interleaver_args</key>
+ <value>interleaver</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(40, 204)</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>_rotation</key>
+ <key>minoutbuf</key>
<value>0</value>
</param>
+ <param>
+ <key>o_fsm_args</key>
+ <value>fsm_o</value>
+ </param>
+ <param>
+ <key>o_init_state</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>bb</value>
+ </param>
</block>
<block>
- <key>trellis_sccc_decoder_combined_xx</key>
+ <key>virtual_sink</key>
<param>
- <key>id</key>
- <value>trellis_sccc_decoder_combined_xx_0</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>f</value>
+ <key>_coordinate</key>
+ <value>(1024, 332)</value>
</param>
<param>
- <key>out_type</key>
- <value>b</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>o_fsm_args</key>
- <value>fsm_o</value>
+ <key>id</key>
+ <value>virtual_sink_0</value>
</param>
<param>
- <key>o_init_state</key>
- <value>0</value>
+ <key>stream_id</key>
+ <value>observation</value>
</param>
+ </block>
+ <block>
+ <key>virtual_sink</key>
<param>
- <key>o_final_state</key>
- <value>-1</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
- <key>i_fsm_args</key>
- <value>fsm_i</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>i_init_state</key>
- <value>0</value>
+ <key>_coordinate</key>
+ <value>(232, 412)</value>
</param>
<param>
- <key>i_final_state</key>
- <value>-1</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>interleaver</key>
- <value>interleaver</value>
+ <key>id</key>
+ <value>virtual_sink_0_0</value>
</param>
<param>
- <key>block_size</key>
- <value>block</value>
+ <key>stream_id</key>
+ <value>info</value>
</param>
+ </block>
+ <block>
+ <key>virtual_source</key>
<param>
- <key>iterations</key>
- <value>5</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
- <key>dim</key>
- <value>dim</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>table</key>
- <value>constellation</value>
+ <key>_coordinate</key>
+ <value>(0, 564)</value>
</param>
<param>
- <key>metric_type</key>
- <value>digital.TRELLIS_EUCLIDEAN</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>siso_type</key>
- <value>trellis.TRELLIS_MIN_SUM</value>
+ <key>id</key>
+ <value>virtual_source_0</value>
</param>
<param>
- <key>scaling</key>
- <value>1.0/noisevar</value>
+ <key>stream_id</key>
+ <value>observation</value>
</param>
+ </block>
+ <block>
+ <key>virtual_source</key>
<param>
- <key>alias</key>
+ <key>comment</key>
<value></value>
</param>
<param>
- <key>affinity</key>
- <value></value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>_coordinate</key>
+ <value>(336, 412)</value>
</param>
<param>
- <key>maxoutbuf</key>
+ <key>_rotation</key>
<value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(400, 745)</value>
+ <key>id</key>
+ <value>virtual_source_0_0</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>stream_id</key>
+ <value>info</value>
</param>
</block>
<connection>
@@ -1183,8 +1349,8 @@
<sink_key>1</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>analog_random_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>
@@ -1195,56 +1361,50 @@
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>analog_random_source_x_0</source_block_id>
- <sink_block_id>blocks_throttle_0</sink_block_id>
+ <source_block_id>blks2_error_rate_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_throttle_0</source_block_id>
- <sink_block_id>trellis_sccc_encoder_xx_0</sink_block_id>
+ <source_block_id>blocks_add_xx_1</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>trellis_sccc_encoder_xx_0</source_block_id>
- <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
+ <source_block_id>blocks_throttle_0</source_block_id>
+ <sink_block_id>trellis_sccc_encoder_xx_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>blocks_add_xx_1</source_block_id>
- <sink_block_id>virtual_sink_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>virtual_source_0_0_0</source_block_id>
+ <source_block_id>trellis_sccc_decoder_combined_xx_0</source_block_id>
<sink_block_id>blks2_error_rate_0</sink_block_id>
<source_key>0</source_key>
<sink_key>1</sink_key>
</connection>
<connection>
- <source_block_id>virtual_source_0_0</source_block_id>
- <sink_block_id>blks2_error_rate_0</sink_block_id>
- <source_key>0</source_key>
- <sink_key>0</sink_key>
- </connection>
- <connection>
- <source_block_id>blks2_error_rate_0</source_block_id>
- <sink_block_id>wxgui_numbersink2_3_0_0</sink_block_id>
+ <source_block_id>trellis_sccc_encoder_xx_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>trellis_sccc_decoder_combined_xx_0</source_block_id>
- <sink_block_id>virtual_sink_0_1</sink_block_id>
+ <source_block_id>virtual_source_0</source_block_id>
+ <sink_block_id>trellis_sccc_decoder_combined_xx_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>virtual_source_0</source_block_id>
- <sink_block_id>trellis_sccc_decoder_combined_xx_0</sink_block_id>
+ <source_block_id>virtual_source_0_0</source_block_id>
+ <sink_block_id>blks2_error_rate_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
diff --git a/gr-trellis/examples/grc/tcm.grc b/gr-trellis/examples/grc/tcm.grc
index 451d940962..9e2b57c8ff 100644
--- a/gr-trellis/examples/grc/tcm.grc
+++ b/gr-trellis/examples/grc/tcm.grc
@@ -1,384 +1,510 @@
-<?xml version='1.0' encoding='ASCII'?>
-<?grc format='1' created='3.7.6'?>
+<?xml version='1.0' encoding='utf-8'?>
+<?grc format='1' created='3.7.11'?>
<flow_graph>
<timestamp>Wed Oct 1 11:04:18 2014</timestamp>
<block>
<key>options</key>
<param>
- <key>id</key>
- <value>tcm</value>
+ <key>author</key>
+ <value>AA</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>window_size</key>
+ <value>2048, 2048</value>
</param>
<param>
- <key>title</key>
- <value>Trellis Coded Modulation</value>
+ <key>category</key>
+ <value>Custom</value>
</param>
<param>
- <key>author</key>
- <value>AA</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>description</key>
<value>gnuradio flow graph</value>
</param>
<param>
- <key>window_size</key>
- <value>2048, 2048</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>generate_options</key>
- <value>wx_gui</value>
+ <key>_coordinate</key>
+ <value>(0, 4)</value>
</param>
<param>
- <key>category</key>
- <value>Custom</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>run_options</key>
- <value>prompt</value>
+ <key>generate_options</key>
+ <value>qt_gui</value>
</param>
<param>
- <key>run</key>
- <value>True</value>
+ <key>hier_block_src_path</key>
+ <value>.:</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>tcm</value>
</param>
<param>
<key>max_nouts</key>
<value>0</value>
</param>
<param>
- <key>realtime_scheduling</key>
+ <key>qt_qss_theme</key>
<value></value>
</param>
<param>
- <key>alias</key>
+ <key>realtime_scheduling</key>
<value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(10, 10)</value>
+ <key>run_command</key>
+ <value>{python} -u {filename}</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>run_options</key>
+ <value>prompt</value>
+ </param>
+ <param>
+ <key>run</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>thread_safe_setters</key>
+ <value></value>
+ </param>
+ <param>
+ <key>title</key>
+ <value>Trellis Coded Modulation</value>
</param>
</block>
<block>
<key>variable</key>
<param>
- <key>id</key>
- <value>prefix</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
+ <key>_coordinate</key>
+ <value>(472, 4)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>Es</value>
+ </param>
+ <param>
<key>value</key>
- <value>"@FSM_FILE_INSTALL_DIR@"</value>
+ <value>sum(numpy.square(numpy.abs(constellation)))/(len(constellation)/(1.0*dim))</value>
</param>
+ </block>
+ <block>
+ <key>variable_qtgui_range</key>
<param>
- <key>alias</key>
+ <key>comment</key>
<value></value>
</param>
<param>
+ <key>value</key>
+ <value>2</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>1</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(320, 13)</value>
+ <value>(552, 4)</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value></value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>variable</key>
<param>
<key>id</key>
- <value>dim</value>
+ <value>EsN0_dB</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>label</key>
+ <value>Es/N0 (dB)</value>
</param>
<param>
- <key>value</key>
- <value>mod[0]</value>
+ <key>min_len</key>
+ <value>200</value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(464, 229)</value>
+ <key>start</key>
+ <value>-10</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>step</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>stop</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>rangeType</key>
+ <value>float</value>
+ </param>
+ <param>
+ <key>widget</key>
+ <value>counter_slider</value>
</param>
</block>
<block>
<key>variable</key>
<param>
- <key>id</key>
- <value>constellation</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>mod[1]</value>
+ <key>_coordinate</key>
+ <value>(176, 68)</value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(312, 229)</value>
+ <key>id</key>
+ <value>R</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>value</key>
+ <value>100e3</value>
</param>
</block>
<block>
<key>variable</key>
<param>
- <key>id</key>
- <value>mod</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>fu.psk4</value>
+ <key>_coordinate</key>
+ <value>(176, 4)</value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(336, 157)</value>
+ <key>id</key>
+ <value>block</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>value</key>
+ <value>500*16</value>
</param>
</block>
<block>
<key>variable</key>
<param>
- <key>id</key>
- <value>fsm</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>"awgn1o2_4.fsm"</value>
+ <key>_coordinate</key>
+ <value>(272, 196)</value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(320, 77)</value>
+ <key>id</key>
+ <value>constellation</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>value</key>
+ <value>mod[1]</value>
</param>
</block>
<block>
<key>variable</key>
<param>
- <key>id</key>
- <value>R</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>100e3</value>
+ <key>_coordinate</key>
+ <value>(472, 68)</value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(216, 109)</value>
+ <key>id</key>
+ <value>dim</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>value</key>
+ <value>mod[0]</value>
</param>
</block>
<block>
<key>variable</key>
<param>
- <key>id</key>
- <value>noisevar</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
+ <key>_coordinate</key>
+ <value>(272, 68)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>fsm</value>
+ </param>
+ <param>
<key>value</key>
- <value>10**(-EsN0_dB/10.0) * Es /2.0</value>
+ <value>"awgn1o2_4.fsm"</value>
</param>
+ </block>
+ <block>
+ <key>variable</key>
<param>
- <key>alias</key>
+ <key>comment</key>
<value></value>
</param>
<param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(728, 157)</value>
+ <value>(272, 132)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
+ <param>
+ <key>id</key>
+ <value>mod</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>fu.psk4</value>
+ </param>
</block>
<block>
<key>variable</key>
<param>
- <key>id</key>
- <value>Es</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
+ <key>_coordinate</key>
+ <value>(432, 132)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>noisevar</value>
+ </param>
+ <param>
<key>value</key>
- <value>sum(numpy.square(numpy.abs(constellation)))/(len(constellation)/(1.0*dim))</value>
+ <value>10**(-EsN0_dB/10.0) * Es /2.0</value>
</param>
+ </block>
+ <block>
+ <key>variable</key>
<param>
- <key>alias</key>
+ <key>comment</key>
<value></value>
</param>
<param>
+ <key>_enabled</key>
+ <value>1</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(528, 157)</value>
+ <value>(272, 4)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>variable</key>
<param>
<key>id</key>
- <value>block</value>
+ <value>prefix</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>value</key>
+ <value>"@FSM_FILE_INSTALL_DIR@"</value>
</param>
+ </block>
+ <block>
+ <key>analog_noise_source_x</key>
<param>
- <key>value</key>
- <value>500*16</value>
+ <key>amp</key>
+ <value>noisevar**0.5</value>
</param>
<param>
<key>alias</key>
<value></value>
</param>
<param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(216, 29)</value>
+ <value>(664, 356)</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>
+ <value>analog_noise_source_x_0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>type</key>
- <value>byte</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>samples_per_second</key>
- <value>R</value>
+ <key>noise_type</key>
+ <value>analog.GR_GAUSSIAN</value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>type</key>
+ <value>float</value>
</param>
<param>
- <key>ignoretag</key>
- <value>True</value>
+ <key>seed</key>
+ <value>-42</value>
</param>
+ </block>
+ <block>
+ <key>analog_random_source_x</key>
<param>
<key>alias</key>
<value></value>
</param>
<param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(0, 276)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
<value>0</value>
</param>
<param>
+ <key>id</key>
+ <value>analog_random_source_x_0</value>
+ </param>
+ <param>
<key>maxoutbuf</key>
<value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(208, 380)</value>
+ <key>max</key>
+ <value>2</value>
</param>
<param>
- <key>_rotation</key>
+ <key>minoutbuf</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>blocks_add_xx</key>
<param>
- <key>id</key>
- <value>blocks_add_xx_1</value>
+ <key>min</key>
+ <value>0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>num_samps</key>
+ <value>1007</value>
</param>
<param>
<key>type</key>
- <value>float</value>
+ <value>byte</value>
</param>
<param>
- <key>num_inputs</key>
- <value>2</value>
+ <key>repeat</key>
+ <value>True</value>
</param>
+ </block>
+ <block>
+ <key>blks2_error_rate</key>
<param>
- <key>vlen</key>
+ <key>bits_per_symbol</key>
<value>1</value>
</param>
<param>
@@ -386,841 +512,893 @@
<value></value>
</param>
<param>
- <key>affinity</key>
+ <key>comment</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(912, 488)</value>
+ <value>(688, 504)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>virtual_sink</key>
<param>
<key>id</key>
- <value>virtual_sink_0_0</value>
+ <value>blks2_error_rate_0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>stream_id</key>
- <value>info</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(224, 316)</value>
+ <key>type</key>
+ <value>'SER'</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>win_size</key>
+ <value>block*100</value>
</param>
</block>
<block>
- <key>virtual_sink</key>
+ <key>blocks_add_xx</key>
<param>
- <key>id</key>
- <value>virtual_sink_0</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
- <key>stream_id</key>
- <value>observation</value>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(832, 620)</value>
+ <value>(888, 304)</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>
+ <value>blocks_add_xx_1</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>type</key>
+ <value>float</value>
</param>
<param>
- <key>stream_id</key>
- <value>observation</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(64, 732)</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>num_inputs</key>
+ <value>2</value>
+ </param>
+ <param>
+ <key>vlen</key>
+ <value>1</value>
</param>
</block>
<block>
- <key>virtual_sink</key>
+ <key>blocks_throttle</key>
<param>
- <key>id</key>
- <value>virtual_sink_0_1</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
- <key>stream_id</key>
- <value>estimate</value>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(800, 732)</value>
+ <value>(208, 300)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>analog_noise_source_x</key>
<param>
<key>id</key>
- <value>analog_noise_source_x_0</value>
+ <value>blocks_throttle_0</value>
</param>
<param>
- <key>_enabled</key>
+ <key>ignoretag</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>float</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>noise_type</key>
- <value>analog.GR_GAUSSIAN</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>amp</key>
- <value>noisevar**0.5</value>
+ <key>samples_per_second</key>
+ <value>R</value>
</param>
<param>
- <key>seed</key>
- <value>-42</value>
+ <key>type</key>
+ <value>byte</value>
</param>
<param>
+ <key>vlen</key>
+ <value>1</value>
+ </param>
+ </block>
+ <block>
+ <key>digital_chunks_to_symbols_xx</key>
+ <param>
<key>alias</key>
<value></value>
</param>
<param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>dimension</key>
+ <value>dim</value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(384, 502)</value>
+ <value>(632, 292)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>variable_slider</key>
<param>
<key>id</key>
- <value>EsN0_dB</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>label</key>
- <value>Es/N0 (dB)</value>
+ <value>digital_chunks_to_symbols_xx_0</value>
</param>
<param>
- <key>value</key>
- <value>4.0</value>
+ <key>in_type</key>
+ <value>byte</value>
</param>
<param>
- <key>min</key>
- <value>-10</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>max</key>
- <value>30</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>num_steps</key>
- <value>1000</value>
+ <key>num_ports</key>
+ <value>1</value>
</param>
<param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
+ <key>out_type</key>
+ <value>float</value>
</param>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>symbol_table</key>
+ <value>constellation</value>
</param>
+ </block>
+ <block>
+ <key>import</key>
<param>
- <key>grid_pos</key>
+ <key>alias</key>
<value></value>
</param>
<param>
- <key>notebook</key>
+ <key>comment</key>
<value></value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(608, 105)</value>
+ <value>(0, 116)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
+ <param>
+ <key>id</key>
+ <value>import_0</value>
+ </param>
+ <param>
+ <key>import</key>
+ <value>import numpy</value>
+ </param>
</block>
<block>
- <key>analog_random_source_x</key>
+ <key>import</key>
<param>
- <key>id</key>
- <value>analog_random_source_x_0</value>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>byte</value>
+ <key>_coordinate</key>
+ <value>(0, 164)</value>
</param>
<param>
- <key>min</key>
+ <key>_rotation</key>
<value>0</value>
</param>
<param>
- <key>max</key>
- <value>2</value>
- </param>
- <param>
- <key>num_samps</key>
- <value>1007</value>
+ <key>id</key>
+ <value>import_0_0</value>
</param>
<param>
- <key>repeat</key>
- <value>True</value>
+ <key>import</key>
+ <value>import gnuradio.trellis.fsm_utils as fu</value>
</param>
+ </block>
+ <block>
+ <key>note</key>
<param>
<key>alias</key>
<value></value>
</param>
<param>
- <key>affinity</key>
+ <key>comment</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
- </param>
- <param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(8, 359)</value>
+ <value>(312, 628)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>wxgui_numbersink2</key>
<param>
<key>id</key>
- <value>wxgui_numbersink2_3_0_0</value>
+ <value>note_0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>note</key>
+ <value>Substititue the metrics/Viterbi block with Viterbi_combo</value>
</param>
+ </block>
+ <block>
+ <key>qtgui_number_sink</key>
<param>
- <key>type</key>
- <value>float</value>
+ <key>autoscale</key>
+ <value>False</value>
</param>
<param>
- <key>title</key>
- <value>BER</value>
+ <key>avg</key>
+ <value>0</value>
</param>
<param>
- <key>units</key>
- <value>BER</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>samp_rate</key>
- <value>R</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
- <key>min_value</key>
- <value>0</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>max_value</key>
- <value>1.0</value>
+ <key>_enabled</key>
+ <value>1</value>
</param>
<param>
- <key>factor</key>
- <value>1.0</value>
+ <key>_coordinate</key>
+ <value>(896, 492)</value>
</param>
<param>
- <key>decimal_places</key>
- <value>6</value>
+ <key>gui_hint</key>
+ <value></value>
</param>
<param>
- <key>ref_level</key>
+ <key>_rotation</key>
<value>0</value>
</param>
<param>
- <key>number_rate</key>
- <value>15</value>
+ <key>graph_type</key>
+ <value>qtgui.NUM_GRAPH_HORIZ</value>
</param>
<param>
- <key>peak_hold</key>
- <value>False</value>
+ <key>id</key>
+ <value>qtgui_number_sink_0</value>
</param>
<param>
- <key>average</key>
- <value>False</value>
+ <key>type</key>
+ <value>float</value>
</param>
<param>
- <key>avg_alpha</key>
- <value>0.001</value>
+ <key>color1</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>show_gauge</key>
- <value>False</value>
+ <key>factor1</key>
+ <value>1</value>
</param>
<param>
- <key>win_size</key>
- <value></value>
+ <key>label1</key>
+ <value>BER</value>
</param>
<param>
- <key>grid_pos</key>
+ <key>unit1</key>
<value></value>
</param>
<param>
- <key>notebook</key>
- <value></value>
+ <key>color10</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>alias</key>
+ <key>factor10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>label10</key>
<value></value>
</param>
<param>
- <key>affinity</key>
+ <key>unit10</key>
<value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(728, 1133)</value>
+ <key>color2</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>factor2</key>
+ <value>1</value>
</param>
- </block>
- <block>
- <key>virtual_source</key>
<param>
- <key>id</key>
- <value>virtual_source_0_0</value>
+ <key>label2</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>unit2</key>
+ <value></value>
</param>
<param>
- <key>stream_id</key>
- <value>info</value>
+ <key>color3</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(80, 1148)</value>
+ <key>factor3</key>
+ <value>1</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>label3</key>
+ <value></value>
</param>
- </block>
- <block>
- <key>virtual_source</key>
<param>
- <key>id</key>
- <value>virtual_source_0_0_0</value>
+ <key>unit3</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>color4</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>stream_id</key>
- <value>estimate</value>
+ <key>factor4</key>
+ <value>1</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(72, 1244)</value>
+ <key>label4</key>
+ <value></value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>unit4</key>
+ <value></value>
</param>
- </block>
- <block>
- <key>blks2_error_rate</key>
<param>
- <key>id</key>
- <value>blks2_error_rate_0</value>
+ <key>color5</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>factor5</key>
+ <value>1</value>
</param>
<param>
- <key>type</key>
- <value>'SER'</value>
+ <key>label5</key>
+ <value></value>
</param>
<param>
- <key>win_size</key>
- <value>block*100</value>
+ <key>unit5</key>
+ <value></value>
</param>
<param>
- <key>bits_per_symbol</key>
+ <key>color6</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor6</key>
<value>1</value>
</param>
<param>
- <key>alias</key>
+ <key>label6</key>
<value></value>
</param>
<param>
- <key>affinity</key>
+ <key>unit6</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>color7</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>factor7</key>
+ <value>1</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(312, 1184)</value>
+ <key>label7</key>
+ <value></value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>unit7</key>
+ <value></value>
</param>
- </block>
- <block>
- <key>note</key>
<param>
- <key>id</key>
- <value>note_0</value>
+ <key>color8</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>factor8</key>
+ <value>1</value>
</param>
<param>
- <key>note</key>
- <value>Substititue the metrics/Viterbi block with Viterbi_combo</value>
+ <key>label8</key>
+ <value></value>
</param>
<param>
- <key>alias</key>
+ <key>unit8</key>
<value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(712, 868)</value>
+ <key>color9</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>factor9</key>
+ <value>1</value>
</param>
- </block>
- <block>
- <key>trellis_metrics_x</key>
<param>
- <key>id</key>
- <value>trellis_metrics_x_0</value>
+ <key>label9</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
- <value>False</value>
+ <key>unit9</key>
+ <value></value>
</param>
<param>
- <key>type</key>
- <value>f</value>
+ <key>max</key>
+ <value>1</value>
</param>
<param>
- <key>card</key>
- <value>trellis.fsm(prefix+fsm).O()</value>
+ <key>min</key>
+ <value>0</value>
</param>
<param>
- <key>dim</key>
- <value>dim</value>
+ <key>name</key>
+ <value>"BER"</value>
</param>
<param>
- <key>table</key>
- <value>constellation</value>
+ <key>nconnections</key>
+ <value>1</value>
</param>
<param>
- <key>metric_type</key>
- <value>digital.TRELLIS_EUCLIDEAN</value>
+ <key>update_time</key>
+ <value>0.10</value>
</param>
+ </block>
+ <block>
+ <key>trellis_encoder_xx</key>
<param>
<key>alias</key>
<value></value>
</param>
<param>
+ <key>blocklength</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>blockwise</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>fsm_args</key>
+ <value>prefix+fsm</value>
</param>
<param>
<key>_coordinate</key>
- <value>(304, 711)</value>
+ <value>(392, 292)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>trellis_viterbi_x</key>
<param>
<key>id</key>
- <value>trellis_viterbi_x_0</value>
+ <value>trellis_encoder_xx_0</value>
</param>
<param>
- <key>_enabled</key>
- <value>False</value>
+ <key>init_state</key>
+ <value>0</value>
</param>
<param>
- <key>type</key>
- <value>b</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>fsm_args</key>
- <value>prefix+fsm</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>block_size</key>
- <value>block</value>
+ <key>type</key>
+ <value>bb</value>
</param>
+ </block>
+ <block>
+ <key>trellis_metrics_x</key>
<param>
- <key>init_state</key>
- <value>-1</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>final_state</key>
- <value>-1</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>table</key>
+ <value>constellation</value>
</param>
<param>
<key>affinity</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>dim</key>
+ <value>dim</value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>False</value>
</param>
<param>
<key>_coordinate</key>
- <value>(544, 711)</value>
+ <value>(200, 684)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>trellis_viterbi_combined_xx</key>
<param>
<key>id</key>
- <value>trellis_viterbi_combined_xx_0</value>
+ <value>trellis_metrics_x_0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>type</key>
- <value>f</value>
+ <key>metric_type</key>
+ <value>digital.TRELLIS_EUCLIDEAN</value>
</param>
<param>
- <key>out_type</key>
- <value>b</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>fsm_args</key>
- <value>prefix+fsm</value>
+ <key>card</key>
+ <value>trellis.fsm(prefix+fsm).O()</value>
</param>
<param>
- <key>block_size</key>
- <value>block</value>
+ <key>type</key>
+ <value>f</value>
</param>
+ </block>
+ <block>
+ <key>trellis_viterbi_combined_xx</key>
<param>
- <key>init_state</key>
- <value>-1</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>final_state</key>
- <value>-1</value>
+ <key>block_size</key>
+ <value>block</value>
</param>
<param>
- <key>dim</key>
- <value>dim</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>table</key>
<value>constellation</value>
</param>
<param>
- <key>metric_type</key>
- <value>digital.TRELLIS_EUCLIDEAN</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>dim</key>
+ <value>dim</value>
</param>
<param>
- <key>affinity</key>
- <value></value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>fsm_args</key>
+ <value>prefix+fsm</value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>final_state</key>
+ <value>-1</value>
</param>
<param>
<key>_coordinate</key>
- <value>(440, 866)</value>
+ <value>(248, 484)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>import</key>
<param>
<key>id</key>
- <value>import_0</value>
+ <value>trellis_viterbi_combined_xx_0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>init_state</key>
+ <value>-1</value>
</param>
<param>
- <key>import</key>
- <value>import numpy</value>
+ <key>type</key>
+ <value>f</value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(16, 140)</value>
+ <key>metric_type</key>
+ <value>digital.TRELLIS_EUCLIDEAN</value>
</param>
<param>
- <key>_rotation</key>
+ <key>minoutbuf</key>
<value>0</value>
</param>
+ <param>
+ <key>out_type</key>
+ <value>b</value>
+ </param>
</block>
<block>
- <key>import</key>
+ <key>trellis_viterbi_x</key>
<param>
- <key>id</key>
- <value>import_0_0</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>block_size</key>
+ <value>block</value>
</param>
<param>
- <key>import</key>
- <value>import gnuradio.trellis.fsm_utils as fu</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
- <key>alias</key>
+ <key>affinity</key>
<value></value>
</param>
<param>
+ <key>_enabled</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>fsm_args</key>
+ <value>prefix+fsm</value>
+ </param>
+ <param>
+ <key>final_state</key>
+ <value>-1</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(24, 196)</value>
+ <value>(440, 684)</value>
</param>
<param>
<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>
+ <value>trellis_viterbi_x_0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>init_state</key>
+ <value>-1</value>
</param>
<param>
- <key>in_type</key>
- <value>byte</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>out_type</key>
- <value>float</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>symbol_table</key>
- <value>constellation</value>
+ <key>type</key>
+ <value>b</value>
</param>
+ </block>
+ <block>
+ <key>virtual_sink</key>
<param>
- <key>dimension</key>
- <value>dim</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
- <key>num_ports</key>
- <value>1</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>_coordinate</key>
+ <value>(992, 316)</value>
</param>
<param>
- <key>affinity</key>
- <value></value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>id</key>
+ <value>virtual_sink_0</value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>stream_id</key>
+ <value>observation</value>
+ </param>
+ </block>
+ <block>
+ <key>virtual_sink</key>
+ <param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(696, 373)</value>
+ <value>(224, 428)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
+ <param>
+ <key>id</key>
+ <value>virtual_sink_0_0</value>
+ </param>
+ <param>
+ <key>stream_id</key>
+ <value>info</value>
+ </param>
</block>
<block>
- <key>trellis_encoder_xx</key>
+ <key>virtual_source</key>
<param>
- <key>id</key>
- <value>trellis_encoder_xx_0</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>bb</value>
- </param>
- <param>
- <key>fsm_args</key>
- <value>prefix+fsm</value>
+ <key>_coordinate</key>
+ <value>(0, 532)</value>
</param>
<param>
- <key>init_state</key>
+ <key>_rotation</key>
<value>0</value>
</param>
<param>
- <key>blockwise</key>
- <value>False</value>
+ <key>id</key>
+ <value>virtual_source_0</value>
</param>
<param>
- <key>blocklength</key>
- <value>0</value>
+ <key>stream_id</key>
+ <value>observation</value>
</param>
+ </block>
+ <block>
+ <key>virtual_source</key>
<param>
- <key>alias</key>
+ <key>comment</key>
<value></value>
</param>
<param>
- <key>affinity</key>
- <value></value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>_coordinate</key>
+ <value>(328, 428)</value>
</param>
<param>
- <key>maxoutbuf</key>
+ <key>_rotation</key>
<value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(424, 373)</value>
+ <key>id</key>
+ <value>virtual_source_0_0</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>stream_id</key>
+ <value>info</value>
</param>
</block>
<connection>
@@ -1230,26 +1408,20 @@
<sink_key>1</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_random_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>blocks_throttle_0</source_block_id>
- <sink_block_id>trellis_encoder_xx_0</sink_block_id>
+ <source_block_id>analog_random_source_x_0</source_block_id>
+ <sink_block_id>virtual_sink_0_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>digital_chunks_to_symbols_xx_0</sink_block_id>
+ <source_block_id>blks2_error_rate_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>
@@ -1260,57 +1432,57 @@
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>virtual_source_0</source_block_id>
- <sink_block_id>trellis_metrics_x_0</sink_block_id>
+ <source_block_id>blocks_throttle_0</source_block_id>
+ <sink_block_id>trellis_encoder_xx_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_viterbi_x_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>analog_random_source_x_0</source_block_id>
- <sink_block_id>virtual_sink_0_0</sink_block_id>
+ <source_block_id>trellis_encoder_xx_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>trellis_viterbi_x_0</source_block_id>
- <sink_block_id>virtual_sink_0_1</sink_block_id>
+ <source_block_id>trellis_metrics_x_0</source_block_id>
+ <sink_block_id>trellis_viterbi_x_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>trellis_viterbi_combined_xx_0</sink_block_id>
+ <source_block_id>trellis_viterbi_combined_xx_0</source_block_id>
+ <sink_block_id>blks2_error_rate_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_viterbi_combined_xx_0</source_block_id>
- <sink_block_id>virtual_sink_0_1</sink_block_id>
+ <source_block_id>trellis_viterbi_x_0</source_block_id>
+ <sink_block_id>blks2_error_rate_0</sink_block_id>
<source_key>0</source_key>
- <sink_key>0</sink_key>
+ <sink_key>1</sink_key>
</connection>
<connection>
- <source_block_id>blks2_error_rate_0</source_block_id>
- <sink_block_id>wxgui_numbersink2_3_0_0</sink_block_id>
+ <source_block_id>virtual_source_0</source_block_id>
+ <sink_block_id>trellis_metrics_x_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>virtual_source_0_0</source_block_id>
- <sink_block_id>blks2_error_rate_0</sink_block_id>
+ <source_block_id>virtual_source_0</source_block_id>
+ <sink_block_id>trellis_viterbi_combined_xx_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>virtual_source_0_0_0</source_block_id>
+ <source_block_id>virtual_source_0_0</source_block_id>
<sink_block_id>blks2_error_rate_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/turbo_equalization.grc b/gr-trellis/examples/grc/turbo_equalization.grc
index c83c59db20..5f9f78317a 100644
--- a/gr-trellis/examples/grc/turbo_equalization.grc
+++ b/gr-trellis/examples/grc/turbo_equalization.grc
@@ -1,675 +1,689 @@
-<?xml version='1.0' encoding='ASCII'?>
-<?grc format='1' created='3.7.6'?>
+<?xml version='1.0' encoding='utf-8'?>
+<?grc format='1' created='3.7.11'?>
<flow_graph>
<timestamp>Wed Oct 1 11:04:18 2014</timestamp>
<block>
<key>options</key>
<param>
- <key>id</key>
- <value>turbo_equalization</value>
+ <key>author</key>
+ <value>AA</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>window_size</key>
+ <value>2048, 3048</value>
</param>
<param>
- <key>title</key>
- <value>Hard/Soft/Turbo Equalization</value>
+ <key>category</key>
+ <value>Custom</value>
</param>
<param>
- <key>author</key>
- <value>AA</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>description</key>
<value>gnuradio flow graph</value>
</param>
<param>
- <key>window_size</key>
- <value>2048, 3048</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>generate_options</key>
- <value>wx_gui</value>
+ <key>_coordinate</key>
+ <value>(0, 4)</value>
</param>
<param>
- <key>category</key>
- <value>Custom</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>run_options</key>
- <value>prompt</value>
+ <key>generate_options</key>
+ <value>qt_gui</value>
</param>
<param>
- <key>run</key>
- <value>True</value>
+ <key>hier_block_src_path</key>
+ <value>.:</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>turbo_equalization</value>
</param>
<param>
<key>max_nouts</key>
<value>0</value>
</param>
<param>
- <key>realtime_scheduling</key>
+ <key>qt_qss_theme</key>
<value></value>
</param>
<param>
- <key>alias</key>
+ <key>realtime_scheduling</key>
<value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(10, 10)</value>
+ <key>run_command</key>
+ <value>{python} -u {filename}</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>run_options</key>
+ <value>prompt</value>
</param>
- </block>
- <block>
- <key>variable</key>
<param>
- <key>id</key>
- <value>fsm_o</value>
+ <key>run</key>
+ <value>True</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>thread_safe_setters</key>
+ <value></value>
</param>
<param>
- <key>value</key>
- <value>trellis.fsm(prefix+"/awgn1o2_4.fsm")</value>
+ <key>title</key>
+ <value>Hard/Soft/Turbo Equalization</value>
</param>
+ </block>
+ <block>
+ <key>variable</key>
<param>
- <key>alias</key>
+ <key>comment</key>
<value></value>
</param>
<param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(344, 21)</value>
+ <value>(376, 132)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>variable</key>
<param>
<key>id</key>
- <value>block_b</value>
+ <value>Es</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>value</key>
+ <value>numpy.mean((numpy.square(numpy.abs(tot_mod[1]))))</value>
+ </param>
+ </block>
+ <block>
+ <key>variable_qtgui_range</key>
+ <param>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>value</key>
- <value>bpsym*1000</value>
+ <value>2</value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>_enabled</key>
+ <value>1</value>
</param>
<param>
<key>_coordinate</key>
- <value>(216, 21)</value>
+ <value>(656, 68)</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value></value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>variable</key>
<param>
<key>id</key>
- <value>interleaver</value>
+ <value>EsN0_dB</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>label</key>
+ <value>Es/N0 (dB)</value>
</param>
<param>
- <key>value</key>
- <value>trellis.interleaver(block_b/bpsym,666)</value>
+ <key>min_len</key>
+ <value>200</value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(528, 117)</value>
+ <key>start</key>
+ <value>-10</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>step</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>stop</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>rangeType</key>
+ <value>float</value>
+ </param>
+ <param>
+ <key>widget</key>
+ <value>counter_slider</value>
</param>
</block>
<block>
<key>variable</key>
<param>
- <key>id</key>
- <value>Es</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>numpy.mean((numpy.square(numpy.abs(tot_mod[1]))))</value>
+ <key>_coordinate</key>
+ <value>(176, 68)</value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(776, 181)</value>
+ <key>id</key>
+ <value>R</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>value</key>
+ <value>100e3</value>
</param>
</block>
<block>
<key>variable</key>
<param>
- <key>id</key>
- <value>noisevar</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>10**(-EsN0_dB/10.0) * Es /2.0</value>
+ <key>_coordinate</key>
+ <value>(176, 4)</value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(1080, 181)</value>
+ <key>id</key>
+ <value>block_b</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>value</key>
+ <value>bpsym*1000</value>
</param>
</block>
<block>
<key>variable</key>
<param>
- <key>id</key>
- <value>bpsym</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>int(round(math.log(fsm_o.I())/math.log(2)))</value>
+ <key>_coordinate</key>
+ <value>(488, 4)</value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(528, 29)</value>
+ <key>id</key>
+ <value>bpsym</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>value</key>
+ <value>int(round(math.log(fsm_o.I())/math.log(2)))</value>
</param>
</block>
<block>
<key>variable</key>
<param>
- <key>id</key>
- <value>channel</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>fu.c_channel</value>
+ <key>_coordinate</key>
+ <value>(176, 196)</value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(320, 205)</value>
+ <key>id</key>
+ <value>channel</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>value</key>
+ <value>fu.c_channel</value>
</param>
</block>
<block>
<key>variable</key>
<param>
- <key>id</key>
- <value>modulation</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>fu.pam4</value>
+ <key>_coordinate</key>
+ <value>(304, 68)</value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(320, 117)</value>
+ <key>id</key>
+ <value>fsm_i</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>value</key>
+ <value>trellis.fsm(len(modulation[1]),len(channel))</value>
</param>
</block>
<block>
<key>variable</key>
<param>
- <key>id</key>
- <value>R</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>100e3</value>
+ <key>_coordinate</key>
+ <value>(328, 4)</value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(216, 109)</value>
+ <key>id</key>
+ <value>fsm_o</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>value</key>
+ <value>trellis.fsm(prefix+"/awgn1o2_4.fsm")</value>
</param>
</block>
<block>
<key>variable</key>
<param>
- <key>id</key>
- <value>tot_mod</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>fu.make_isi_lookup(modulation,channel,False)</value>
+ <key>_coordinate</key>
+ <value>(488, 68)</value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(320, 381)</value>
+ <key>id</key>
+ <value>interleaver</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>value</key>
+ <value>trellis.interleaver(block_b/bpsym,666)</value>
</param>
</block>
<block>
<key>variable</key>
<param>
- <key>id</key>
- <value>prefix</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>"@FSM_FILE_INSTALL_DIR@"</value>
+ <key>_coordinate</key>
+ <value>(176, 132)</value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(768, 21)</value>
+ <key>id</key>
+ <value>modulation</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>value</key>
+ <value>fu.pam4</value>
</param>
</block>
<block>
<key>variable</key>
<param>
- <key>id</key>
- <value>fsm_i</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>trellis.fsm(len(modulation[1]),len(channel))</value>
- </param>
- <param>
- <key>alias</key>
- <value></value>
- </param>
- <param>
<key>_coordinate</key>
- <value>(320, 293)</value>
+ <value>(376, 196)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>import</key>
<param>
<key>id</key>
- <value>import_0_0</value>
+ <value>noisevar</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>value</key>
+ <value>10**(-EsN0_dB/10.0) * Es /2.0</value>
</param>
+ </block>
+ <block>
+ <key>variable</key>
<param>
- <key>import</key>
- <value>import gnuradio.trellis.fsm_utils as fu</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>_enabled</key>
+ <value>1</value>
</param>
<param>
<key>_coordinate</key>
- <value>(24, 252)</value>
+ <value>(728, 4)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>import</key>
<param>
<key>id</key>
- <value>import_0</value>
+ <value>prefix</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>value</key>
+ <value>"@FSM_FILE_INSTALL_DIR@"</value>
</param>
+ </block>
+ <block>
+ <key>variable</key>
<param>
- <key>import</key>
- <value>import numpy</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(16, 140)</value>
+ <value>(488, 132)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>import</key>
<param>
<key>id</key>
- <value>import_0_1</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
+ <value>tot_mod</value>
</param>
<param>
- <key>import</key>
- <value>import math</value>
+ <key>value</key>
+ <value>fu.make_isi_lookup(modulation,channel,False)</value>
</param>
+ </block>
+ <block>
+ <key>analog_const_source_x</key>
<param>
<key>alias</key>
<value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(24, 188)</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
- <key>_rotation</key>
+ <key>const</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>virtual_sink</key>
<param>
- <key>id</key>
- <value>virtual_sink_0</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>stream_id</key>
- <value>observation</value>
- </param>
- <param>
<key>_coordinate</key>
- <value>(608, 1076)</value>
+ <value>(0, 1148)</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>
+ <value>analog_const_source_x_0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>type</key>
- <value>float</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>num_inputs</key>
- <value>2</value>
+ <key>type</key>
+ <value>float</value>
</param>
+ </block>
+ <block>
+ <key>analog_noise_source_x</key>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>amp</key>
+ <value>noisevar**0.5</value>
</param>
<param>
<key>alias</key>
<value></value>
</param>
<param>
- <key>affinity</key>
+ <key>comment</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(688, 944)</value>
+ <value>(520, 540)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>analog_noise_source_x</key>
<param>
<key>id</key>
<value>analog_noise_source_x_0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>type</key>
- <value>float</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>noise_type</key>
<value>analog.GR_GAUSSIAN</value>
</param>
<param>
- <key>amp</key>
- <value>noisevar**0.5</value>
+ <key>type</key>
+ <value>float</value>
</param>
<param>
<key>seed</key>
<value>-42</value>
</param>
+ </block>
+ <block>
+ <key>analog_random_source_x</key>
<param>
<key>alias</key>
<value></value>
</param>
<param>
- <key>affinity</key>
+ <key>comment</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(288, 958)</value>
+ <value>(0, 300)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>fir_filter_xxx</key>
<param>
<key>id</key>
- <value>fir_filter_xxx_0</value>
+ <value>analog_random_source_x_0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>type</key>
- <value>fff</value>
+ <key>max</key>
+ <value>2</value>
</param>
<param>
- <key>decim</key>
- <value>1</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>taps</key>
- <value>fu.c_channel</value>
+ <key>min</key>
+ <value>0</value>
</param>
<param>
- <key>samp_delay</key>
- <value>0</value>
+ <key>num_samps</key>
+ <value>1007</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>byte</value>
+ </param>
+ <param>
+ <key>repeat</key>
+ <value>True</value>
+ </param>
+ </block>
+ <block>
+ <key>blks2_error_rate</key>
+ <param>
+ <key>bits_per_symbol</key>
+ <value>1</value>
</param>
<param>
<key>alias</key>
<value></value>
</param>
<param>
- <key>affinity</key>
+ <key>comment</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(448, 861)</value>
+ <value>(904, 892)</value>
</param>
<param>
<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_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
+ <value>blks2_error_rate_0_0</value>
</param>
<param>
- <key>in_type</key>
- <value>byte</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>out_type</key>
- <value>float</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>symbol_table</key>
- <value>modulation[1]</value>
+ <key>type</key>
+ <value>'BER'</value>
</param>
<param>
- <key>dimension</key>
- <value>modulation[0]</value>
+ <key>win_size</key>
+ <value>block_b*100</value>
</param>
+ </block>
+ <block>
+ <key>blks2_error_rate</key>
<param>
- <key>num_ports</key>
+ <key>bits_per_symbol</key>
<value>1</value>
</param>
<param>
@@ -677,58 +691,58 @@
<value></value>
</param>
<param>
- <key>affinity</key>
+ <key>comment</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(480, 733)</value>
+ <value>(504, 1324)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>trellis_permutation</key>
<param>
<key>id</key>
- <value>trellis_permutation_0</value>
+ <value>blks2_error_rate_0_0_0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>type</key>
- <value>byte</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>interleaver_size</key>
- <value>interleaver.K()</value>
+ <key>type</key>
+ <value>'BER'</value>
</param>
<param>
- <key>table</key>
- <value>interleaver.INTER()</value>
+ <key>win_size</key>
+ <value>block_b*100</value>
</param>
+ </block>
+ <block>
+ <key>blks2_error_rate</key>
<param>
- <key>syms_per_block</key>
+ <key>bits_per_symbol</key>
<value>1</value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>alias</key>
+ <key>comment</key>
<value></value>
</param>
<param>
@@ -736,561 +750,671 @@
<value></value>
</param>
<param>
- <key>minoutbuf</key>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(584, 1548)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
<value>0</value>
</param>
<param>
+ <key>id</key>
+ <value>blks2_error_rate_0_0_0_0</value>
+ </param>
+ <param>
<key>maxoutbuf</key>
<value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(208, 726)</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>type</key>
+ <value>'BER'</value>
+ </param>
+ <param>
+ <key>win_size</key>
+ <value>block_b*100</value>
</param>
</block>
<block>
- <key>virtual_sink</key>
+ <key>blocks_add_xx</key>
<param>
- <key>id</key>
- <value>virtual_sink_0_0_0</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
- <key>stream_id</key>
- <value>info_i</value>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(968, 572)</value>
+ <value>(760, 488)</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>
+ <value>blocks_add_xx_1</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>type</key>
+ <value>float</value>
</param>
<param>
- <key>type</key>
- <value>byte</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>samples_per_second</key>
- <value>R</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>num_inputs</key>
+ <value>2</value>
</param>
<param>
- <key>ignoretag</key>
- <value>True</value>
+ <key>vlen</key>
+ <value>1</value>
</param>
+ </block>
+ <block>
+ <key>blocks_char_to_float</key>
<param>
<key>alias</key>
<value></value>
</param>
<param>
- <key>affinity</key>
+ <key>comment</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(256, 580)</value>
+ <value>(48, 924)</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>byte</value>
+ <value>blocks_char_to_float_0</value>
</param>
<param>
- <key>min</key>
+ <key>maxoutbuf</key>
<value>0</value>
</param>
<param>
- <key>max</key>
- <value>2</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>num_samps</key>
- <value>1007</value>
+ <key>scale</key>
+ <value>1</value>
</param>
<param>
- <key>repeat</key>
- <value>True</value>
+ <key>vlen</key>
+ <value>1</value>
</param>
+ </block>
+ <block>
+ <key>blocks_pack_k_bits_bb</key>
<param>
<key>alias</key>
<value></value>
</param>
<param>
- <key>affinity</key>
+ <key>comment</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(16, 559)</value>
+ <value>(376, 324)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>blocks_pack_k_bits_bb</key>
<param>
<key>id</key>
<value>blocks_pack_k_bits_bb_0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
<key>k</key>
<value>bpsym</value>
</param>
<param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>blocks_throttle</key>
+ <param>
<key>alias</key>
<value></value>
</param>
<param>
- <key>affinity</key>
+ <key>comment</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(440, 580)</value>
+ <value>(200, 324)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>trellis_encoder_xx</key>
<param>
<key>id</key>
- <value>trellis_encoder_xx_0</value>
+ <value>blocks_throttle_0</value>
</param>
<param>
- <key>_enabled</key>
+ <key>ignoretag</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>bb</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>fsm_args</key>
- <value>fsm_o</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>init_state</key>
- <value>0</value>
+ <key>samples_per_second</key>
+ <value>R</value>
</param>
<param>
- <key>blockwise</key>
- <value>False</value>
+ <key>type</key>
+ <value>byte</value>
</param>
<param>
- <key>blocklength</key>
- <value>0</value>
+ <key>vlen</key>
+ <value>1</value>
</param>
+ </block>
+ <block>
+ <key>blocks_unpack_k_bits_bb</key>
<param>
<key>alias</key>
<value></value>
</param>
<param>
- <key>affinity</key>
+ <key>comment</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(672, 573)</value>
+ <value>(416, 924)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>virtual_sink</key>
<param>
<key>id</key>
- <value>virtual_sink_0_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
+ <value>blocks_unpack_k_bits_bb_0</value>
</param>
<param>
- <key>stream_id</key>
- <value>info</value>
+ <key>k</key>
+ <value>bpsym</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(248, 524)</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>_rotation</key>
+ <key>minoutbuf</key>
<value>0</value>
</param>
</block>
<block>
- <key>virtual_sink</key>
+ <key>blocks_unpack_k_bits_bb</key>
<param>
- <key>id</key>
- <value>virtual_sink_0_1</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
- <key>stream_id</key>
- <value>estimate</value>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(864, 1380)</value>
+ <value>(896, 1164)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>blocks_unpack_k_bits_bb</key>
<param>
<key>id</key>
- <value>blocks_unpack_k_bits_bb_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
+ <value>blocks_unpack_k_bits_bb_0_0</value>
</param>
<param>
<key>k</key>
<value>bpsym</value>
</param>
<param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>blocks_unpack_k_bits_bb</key>
+ <param>
<key>alias</key>
<value></value>
</param>
<param>
- <key>affinity</key>
+ <key>comment</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(552, 1380)</value>
+ <value>(440, 1580)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>blocks_char_to_float</key>
<param>
<key>id</key>
- <value>blocks_char_to_float_0</value>
+ <value>blocks_unpack_k_bits_bb_0_0_0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>k</key>
+ <value>bpsym</value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>scale</key>
- <value>1</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
+ </block>
+ <block>
+ <key>digital_chunks_to_symbols_xx</key>
<param>
<key>alias</key>
<value></value>
</param>
<param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>dimension</key>
+ <value>modulation[0]</value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(72, 1380)</value>
+ <value>(264, 476)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>trellis_permutation</key>
<param>
<key>id</key>
- <value>trellis_permutation_0_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
+ <value>digital_chunks_to_symbols_xx_0_0</value>
</param>
<param>
- <key>type</key>
+ <key>in_type</key>
<value>byte</value>
</param>
<param>
- <key>interleaver_size</key>
- <value>interleaver.K()</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>table</key>
- <value>interleaver.DEINTER()</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>syms_per_block</key>
+ <key>num_ports</key>
<value>1</value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>out_type</key>
+ <value>float</value>
</param>
<param>
+ <key>symbol_table</key>
+ <value>modulation[1]</value>
+ </param>
+ </block>
+ <block>
+ <key>fir_filter_xxx</key>
+ <param>
<key>alias</key>
<value></value>
</param>
<param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
+ <key>decim</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(480, 476)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
<value>0</value>
</param>
<param>
+ <key>id</key>
+ <value>fir_filter_xxx_0</value>
+ </param>
+ <param>
<key>maxoutbuf</key>
<value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(568, 1222)</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>_rotation</key>
+ <key>samp_delay</key>
<value>0</value>
</param>
+ <param>
+ <key>taps</key>
+ <value>fu.c_channel</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>fff</value>
+ </param>
</block>
<block>
- <key>trellis_viterbi_combined_xx</key>
+ <key>import</key>
<param>
- <key>id</key>
- <value>trellis_viterbi_combined_xx_0</value>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>f</value>
+ <key>_coordinate</key>
+ <value>(0, 124)</value>
</param>
<param>
- <key>out_type</key>
- <value>b</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>fsm_args</key>
- <value>fsm_i</value>
+ <key>id</key>
+ <value>import_0</value>
</param>
<param>
- <key>block_size</key>
- <value>interleaver.K()</value>
+ <key>import</key>
+ <value>import numpy</value>
</param>
+ </block>
+ <block>
+ <key>import</key>
<param>
- <key>init_state</key>
- <value>-1</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>final_state</key>
- <value>-1</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
- <key>dim</key>
- <value>tot_mod[0]</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>table</key>
- <value>tot_mod[1]</value>
+ <key>_coordinate</key>
+ <value>(0, 220)</value>
</param>
<param>
- <key>metric_type</key>
- <value>digital.TRELLIS_EUCLIDEAN</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>id</key>
+ <value>import_0_0</value>
</param>
<param>
- <key>affinity</key>
+ <key>import</key>
+ <value>import gnuradio.trellis.fsm_utils as fu</value>
+ </param>
+ </block>
+ <block>
+ <key>import</key>
+ <param>
+ <key>alias</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(288, 1194)</value>
+ <value>(0, 172)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
+ <param>
+ <key>id</key>
+ <value>import_0_1</value>
+ </param>
+ <param>
+ <key>import</key>
+ <value>import math</value>
+ </param>
</block>
<block>
- <key>virtual_sink</key>
+ <key>note</key>
<param>
- <key>id</key>
- <value>virtual_sink_0_1_0</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
- <key>stream_id</key>
- <value>estimate_i</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(896, 1228)</value>
+ <value>(680, 820)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
+ <param>
+ <key>id</key>
+ <value>note_0</value>
+ </param>
+ <param>
+ <key>note</key>
+ <value>This is the simplest hard Viterbi equalizer/hard Viterbi decoder</value>
+ </param>
</block>
<block>
- <key>virtual_source</key>
+ <key>note</key>
<param>
- <key>id</key>
- <value>virtual_source_0</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
- <key>stream_id</key>
- <value>observation</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(40, 1236)</value>
+ <value>(464, 1244)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
+ <param>
+ <key>id</key>
+ <value>note_0_0</value>
+ </param>
+ <param>
+ <key>note</key>
+ <value>This is a better soft-equalizer/Viterbi decoder</value>
+ </param>
</block>
<block>
- <key>analog_const_source_x</key>
+ <key>note</key>
<param>
- <key>id</key>
- <value>analog_const_source_x_0</value>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>float</value>
+ <key>_coordinate</key>
+ <value>(432, 1668)</value>
</param>
<param>
- <key>const</key>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>note_0_1</value>
+ </param>
+ <param>
+ <key>note</key>
+ <value>This is the full-fledged turbo equalizer/decoder</value>
+ </param>
+ </block>
+ <block>
+ <key>qtgui_number_sink</key>
+ <param>
+ <key>autoscale</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>avg</key>
<value>0</value>
</param>
<param>
@@ -1298,1264 +1422,1638 @@
<value></value>
</param>
<param>
- <key>affinity</key>
+ <key>comment</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>1</value>
</param>
<param>
<key>_coordinate</key>
- <value>(88, 1788)</value>
+ <value>(1080, 884)</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value></value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>trellis_viterbi_combined_xx</key>
<param>
- <key>id</key>
- <value>trellis_viterbi_combined_xx_1</value>
+ <key>graph_type</key>
+ <value>qtgui.NUM_GRAPH_HORIZ</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>id</key>
+ <value>qtgui_number_sink_0</value>
</param>
<param>
<key>type</key>
- <value>f</value>
+ <value>float</value>
</param>
<param>
- <key>out_type</key>
- <value>b</value>
+ <key>color1</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>fsm_args</key>
- <value>fsm_o</value>
+ <key>factor1</key>
+ <value>1</value>
</param>
<param>
- <key>block_size</key>
- <value>interleaver.K()</value>
+ <key>label1</key>
+ <value>BER</value>
</param>
<param>
- <key>init_state</key>
- <value>-1</value>
+ <key>unit1</key>
+ <value></value>
</param>
<param>
- <key>final_state</key>
- <value>-1</value>
+ <key>color10</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>dim</key>
+ <key>factor10</key>
<value>1</value>
</param>
<param>
- <key>table</key>
- <value>0,1,2,3</value>
+ <key>label10</key>
+ <value></value>
</param>
<param>
- <key>metric_type</key>
- <value>digital.TRELLIS_HARD_SYMBOL</value>
+ <key>unit10</key>
+ <value></value>
</param>
<param>
- <key>alias</key>
+ <key>color2</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor2</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>label2</key>
<value></value>
</param>
<param>
- <key>affinity</key>
+ <key>unit2</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>color3</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>factor3</key>
+ <value>1</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(256, 1338)</value>
+ <key>label3</key>
+ <value></value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>unit3</key>
+ <value></value>
</param>
- </block>
- <block>
- <key>trellis_siso_combined_f</key>
<param>
- <key>id</key>
- <value>trellis_siso_combined_f_0</value>
+ <key>color4</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>factor4</key>
+ <value>1</value>
</param>
<param>
- <key>fsm_args</key>
- <value>fsm_i</value>
+ <key>label4</key>
+ <value></value>
</param>
<param>
- <key>block_size</key>
- <value>interleaver.K()</value>
+ <key>unit4</key>
+ <value></value>
</param>
<param>
- <key>init_state</key>
- <value>-1</value>
+ <key>color5</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>final_state</key>
- <value>-1</value>
+ <key>factor5</key>
+ <value>1</value>
</param>
<param>
- <key>a_post_in</key>
- <value>True</value>
+ <key>label5</key>
+ <value></value>
</param>
<param>
- <key>a_post_out</key>
- <value>False</value>
+ <key>unit5</key>
+ <value></value>
</param>
<param>
- <key>siso_type</key>
- <value>trellis.TRELLIS_MIN_SUM</value>
+ <key>color6</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>dim</key>
- <value>tot_mod[0]</value>
+ <key>factor6</key>
+ <value>1</value>
</param>
<param>
- <key>table</key>
- <value>tot_mod[1]</value>
+ <key>label6</key>
+ <value></value>
</param>
<param>
- <key>metric_type</key>
- <value>trellis.TRELLIS_EUCLIDEAN</value>
+ <key>unit6</key>
+ <value></value>
</param>
<param>
- <key>alias</key>
+ <key>color7</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor7</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>label7</key>
<value></value>
</param>
<param>
- <key>affinity</key>
+ <key>unit7</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>color8</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>factor8</key>
+ <value>1</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(280, 1765)</value>
+ <key>label8</key>
+ <value></value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>unit8</key>
+ <value></value>
</param>
- </block>
- <block>
- <key>trellis_permutation</key>
<param>
- <key>id</key>
- <value>trellis_permutation_0_0_0</value>
+ <key>color9</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>factor9</key>
+ <value>1</value>
</param>
<param>
- <key>type</key>
- <value>float</value>
+ <key>label9</key>
+ <value></value>
</param>
<param>
- <key>interleaver_size</key>
- <value>interleaver.K()</value>
+ <key>unit9</key>
+ <value></value>
</param>
<param>
- <key>table</key>
- <value>interleaver.DEINTER()</value>
+ <key>max</key>
+ <value>1</value>
</param>
<param>
- <key>syms_per_block</key>
- <value>fsm_o.O()</value>
+ <key>min</key>
+ <value>0</value>
</param>
<param>
- <key>vlen</key>
+ <key>name</key>
+ <value>"BER (Hard)"</value>
+ </param>
+ <param>
+ <key>nconnections</key>
<value>1</value>
</param>
<param>
+ <key>update_time</key>
+ <value>0.10</value>
+ </param>
+ </block>
+ <block>
+ <key>qtgui_number_sink</key>
+ <param>
+ <key>autoscale</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>avg</key>
+ <value>0</value>
+ </param>
+ <param>
<key>alias</key>
<value></value>
</param>
<param>
- <key>affinity</key>
+ <key>comment</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>1</value>
</param>
<param>
<key>_coordinate</key>
- <value>(616, 1814)</value>
+ <value>(688, 1316)</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value></value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>trellis_viterbi_x</key>
<param>
- <key>id</key>
- <value>trellis_viterbi_x_0</value>
+ <key>graph_type</key>
+ <value>qtgui.NUM_GRAPH_HORIZ</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>id</key>
+ <value>qtgui_number_sink_0_0</value>
</param>
<param>
<key>type</key>
- <value>b</value>
+ <value>float</value>
</param>
<param>
- <key>fsm_args</key>
- <value>fsm_o</value>
+ <key>color1</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>block_size</key>
- <value>interleaver.K()</value>
+ <key>factor1</key>
+ <value>1</value>
</param>
<param>
- <key>init_state</key>
- <value>0</value>
+ <key>label1</key>
+ <value>BER</value>
</param>
<param>
- <key>final_state</key>
- <value>-1</value>
+ <key>unit1</key>
+ <value></value>
</param>
<param>
- <key>alias</key>
+ <key>color10</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>label10</key>
<value></value>
</param>
<param>
- <key>affinity</key>
+ <key>unit10</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>color2</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>factor2</key>
+ <value>1</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(288, 2023)</value>
+ <key>label2</key>
+ <value></value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>unit2</key>
+ <value></value>
</param>
- </block>
- <block>
- <key>virtual_source</key>
<param>
- <key>id</key>
- <value>virtual_source_0_1</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>stream_id</key>
- <value>observation</value>
+ <key>label3</key>
+ <value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(72, 1860)</value>
+ <key>unit3</key>
+ <value></value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>color4</key>
+ <value>("black", "black")</value>
</param>
- </block>
- <block>
- <key>virtual_source</key>
<param>
- <key>id</key>
- <value>virtual_source_0_1_0</value>
+ <key>factor4</key>
+ <value>1</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>label4</key>
+ <value></value>
</param>
<param>
- <key>stream_id</key>
- <value>observation</value>
+ <key>unit4</key>
+ <value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(88, 2564)</value>
+ <key>color5</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>factor5</key>
+ <value>1</value>
</param>
- </block>
- <block>
- <key>blocks_unpack_k_bits_bb</key>
<param>
- <key>id</key>
- <value>blocks_unpack_k_bits_bb_0_0</value>
+ <key>label5</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>unit5</key>
+ <value></value>
</param>
<param>
- <key>k</key>
- <value>bpsym</value>
+ <key>color6</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>alias</key>
+ <key>factor6</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>label6</key>
<value></value>
</param>
<param>
- <key>affinity</key>
+ <key>unit6</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>color7</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>factor7</key>
+ <value>1</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(584, 2044)</value>
+ <key>label7</key>
+ <value></value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>unit7</key>
+ <value></value>
</param>
- </block>
- <block>
- <key>virtual_sink</key>
<param>
- <key>id</key>
- <value>virtual_sink_0_1_1</value>
+ <key>color8</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>factor8</key>
+ <value>1</value>
</param>
<param>
- <key>stream_id</key>
- <value>estimate1</value>
+ <key>label8</key>
+ <value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(896, 2044)</value>
+ <key>unit8</key>
+ <value></value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>color9</key>
+ <value>("black", "black")</value>
</param>
- </block>
- <block>
- <key>virtual_source</key>
<param>
- <key>id</key>
- <value>virtual_source_0_0_0_0_0</value>
+ <key>factor9</key>
+ <value>1</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>label9</key>
+ <value></value>
</param>
<param>
- <key>stream_id</key>
- <value>estimate1</value>
+ <key>unit9</key>
+ <value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(144, 2284)</value>
+ <key>max</key>
+ <value>1</value>
</param>
<param>
- <key>_rotation</key>
+ <key>min</key>
<value>0</value>
</param>
+ <param>
+ <key>name</key>
+ <value>"BER (Soft)"</value>
+ </param>
+ <param>
+ <key>nconnections</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>update_time</key>
+ <value>0.10</value>
+ </param>
</block>
<block>
- <key>virtual_source</key>
+ <key>qtgui_number_sink</key>
<param>
- <key>id</key>
- <value>virtual_source_0_0_1_0</value>
+ <key>autoscale</key>
+ <value>False</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>avg</key>
+ <value>0</value>
</param>
<param>
- <key>stream_id</key>
- <value>info</value>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>1</value>
</param>
<param>
<key>_coordinate</key>
- <value>(152, 2188)</value>
+ <value>(776, 1540)</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value></value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>virtual_source</key>
+ <param>
+ <key>graph_type</key>
+ <value>qtgui.NUM_GRAPH_HORIZ</value>
+ </param>
<param>
<key>id</key>
- <value>virtual_source_0_0_1_0_0</value>
+ <value>qtgui_number_sink_0_0_0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>type</key>
+ <value>float</value>
</param>
<param>
- <key>stream_id</key>
- <value>info</value>
+ <key>color1</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(176, 2732)</value>
+ <key>factor1</key>
+ <value>1</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>label1</key>
+ <value>BER</value>
</param>
- </block>
- <block>
- <key>virtual_source</key>
<param>
- <key>id</key>
- <value>virtual_source_0_0_0_0_0_0</value>
+ <key>unit1</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>color10</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>stream_id</key>
- <value>estimate2</value>
+ <key>factor10</key>
+ <value>1</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(168, 2828)</value>
+ <key>label10</key>
+ <value></value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>unit10</key>
+ <value></value>
</param>
- </block>
- <block>
- <key>virtual_source</key>
<param>
- <key>id</key>
- <value>virtual_source_0_0_1</value>
+ <key>color2</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>factor2</key>
+ <value>1</value>
</param>
<param>
- <key>stream_id</key>
- <value>info</value>
+ <key>label2</key>
+ <value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(80, 1556)</value>
+ <key>unit2</key>
+ <value></value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>color3</key>
+ <value>("black", "black")</value>
</param>
- </block>
- <block>
- <key>virtual_source</key>
<param>
- <key>id</key>
- <value>virtual_source_0_0_0_0</value>
+ <key>factor3</key>
+ <value>1</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>label3</key>
+ <value></value>
</param>
<param>
- <key>stream_id</key>
- <value>estimate</value>
+ <key>unit3</key>
+ <value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(72, 1652)</value>
+ <key>color4</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>factor4</key>
+ <value>1</value>
</param>
- </block>
- <block>
- <key>wxgui_numbersink2</key>
<param>
- <key>id</key>
- <value>wxgui_numbersink2_3_0_0_0</value>
+ <key>label4</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>unit4</key>
+ <value></value>
</param>
<param>
- <key>type</key>
- <value>float</value>
+ <key>color5</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>title</key>
- <value>BER_hard</value>
+ <key>factor5</key>
+ <value>1</value>
</param>
<param>
- <key>units</key>
- <value>BER</value>
+ <key>label5</key>
+ <value></value>
</param>
<param>
- <key>samp_rate</key>
- <value>R</value>
+ <key>unit5</key>
+ <value></value>
</param>
<param>
- <key>min_value</key>
- <value>0</value>
+ <key>color6</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>max_value</key>
- <value>1.0</value>
+ <key>factor6</key>
+ <value>1</value>
</param>
<param>
- <key>factor</key>
- <value>1.0</value>
+ <key>label6</key>
+ <value></value>
</param>
<param>
- <key>decimal_places</key>
- <value>6</value>
+ <key>unit6</key>
+ <value></value>
</param>
<param>
- <key>ref_level</key>
- <value>0</value>
+ <key>color7</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>number_rate</key>
- <value>15</value>
+ <key>factor7</key>
+ <value>1</value>
</param>
<param>
- <key>peak_hold</key>
- <value>False</value>
+ <key>label7</key>
+ <value></value>
</param>
<param>
- <key>average</key>
- <value>False</value>
+ <key>unit7</key>
+ <value></value>
</param>
<param>
- <key>avg_alpha</key>
- <value>0.001</value>
+ <key>color8</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>show_gauge</key>
- <value>False</value>
+ <key>factor8</key>
+ <value>1</value>
</param>
<param>
- <key>win_size</key>
+ <key>label8</key>
<value></value>
</param>
<param>
- <key>grid_pos</key>
+ <key>unit8</key>
<value></value>
</param>
<param>
- <key>notebook</key>
+ <key>color9</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>label9</key>
<value></value>
</param>
<param>
+ <key>unit9</key>
+ <value></value>
+ </param>
+ <param>
+ <key>max</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>min</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>name</key>
+ <value>"BER (Turbo)"</value>
+ </param>
+ <param>
+ <key>nconnections</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>update_time</key>
+ <value>0.10</value>
+ </param>
+ </block>
+ <block>
+ <key>trellis_encoder_xx</key>
+ <param>
<key>alias</key>
<value></value>
</param>
<param>
+ <key>blocklength</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>blockwise</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
<param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>fsm_args</key>
+ <value>fsm_o</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(504, 1549)</value>
+ <value>(504, 316)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>wxgui_numbersink2</key>
<param>
<key>id</key>
- <value>wxgui_numbersink2_3_0_0_0_0</value>
+ <value>trellis_encoder_xx_0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>init_state</key>
+ <value>0</value>
</param>
<param>
- <key>type</key>
- <value>float</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>title</key>
- <value>BER_soft</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>units</key>
- <value>BER</value>
+ <key>type</key>
+ <value>bb</value>
</param>
+ </block>
+ <block>
+ <key>trellis_permutation</key>
<param>
- <key>samp_rate</key>
- <value>R</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>min_value</key>
- <value>0</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
- <key>max_value</key>
- <value>1.0</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>factor</key>
- <value>1.0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>decimal_places</key>
- <value>6</value>
+ <key>_coordinate</key>
+ <value>(64, 468)</value>
</param>
<param>
- <key>ref_level</key>
+ <key>_rotation</key>
<value>0</value>
</param>
<param>
- <key>number_rate</key>
- <value>15</value>
+ <key>id</key>
+ <value>trellis_permutation_0</value>
</param>
<param>
- <key>peak_hold</key>
- <value>False</value>
+ <key>interleaver_size</key>
+ <value>interleaver.K()</value>
</param>
<param>
- <key>average</key>
- <value>False</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>avg_alpha</key>
- <value>0.001</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>show_gauge</key>
- <value>False</value>
+ <key>syms_per_block</key>
+ <value>1</value>
</param>
<param>
- <key>win_size</key>
- <value></value>
+ <key>table</key>
+ <value>interleaver.INTER()</value>
</param>
<param>
- <key>grid_pos</key>
- <value></value>
+ <key>type</key>
+ <value>byte</value>
</param>
<param>
- <key>notebook</key>
- <value></value>
+ <key>vlen</key>
+ <value>1</value>
</param>
+ </block>
+ <block>
+ <key>trellis_permutation</key>
<param>
<key>alias</key>
<value></value>
</param>
<param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
<param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(576, 2181)</value>
+ <value>(432, 708)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>wxgui_numbersink2</key>
<param>
<key>id</key>
- <value>wxgui_numbersink2_3_0_0_0_0_0</value>
+ <value>trellis_permutation_0_0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>interleaver_size</key>
+ <value>interleaver.K()</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>syms_per_block</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>table</key>
+ <value>interleaver.DEINTER()</value>
</param>
<param>
<key>type</key>
- <value>float</value>
+ <value>byte</value>
</param>
<param>
- <key>title</key>
- <value>BER_turbo</value>
+ <key>vlen</key>
+ <value>1</value>
</param>
+ </block>
+ <block>
+ <key>trellis_permutation</key>
<param>
- <key>units</key>
- <value>BER</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>samp_rate</key>
- <value>R</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
- <key>min_value</key>
- <value>0</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>max_value</key>
- <value>1.0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>factor</key>
- <value>1.0</value>
+ <key>_coordinate</key>
+ <value>(440, 1148)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>decimal_places</key>
- <value>6</value>
+ <key>id</key>
+ <value>trellis_permutation_0_0_0</value>
</param>
<param>
- <key>ref_level</key>
+ <key>interleaver_size</key>
+ <value>interleaver.K()</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
<value>0</value>
</param>
<param>
- <key>number_rate</key>
- <value>15</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>peak_hold</key>
- <value>False</value>
+ <key>syms_per_block</key>
+ <value>fsm_o.O()</value>
</param>
<param>
- <key>average</key>
- <value>False</value>
+ <key>table</key>
+ <value>interleaver.DEINTER()</value>
</param>
<param>
- <key>avg_alpha</key>
- <value>0.001</value>
+ <key>type</key>
+ <value>float</value>
</param>
<param>
- <key>show_gauge</key>
- <value>False</value>
+ <key>vlen</key>
+ <value>1</value>
</param>
+ </block>
+ <block>
+ <key>trellis_sccc_decoder_combined_xx</key>
<param>
- <key>win_size</key>
+ <key>alias</key>
<value></value>
</param>
<param>
- <key>grid_pos</key>
- <value></value>
+ <key>block_size</key>
+ <value>interleaver.K()</value>
</param>
<param>
- <key>notebook</key>
+ <key>comment</key>
<value></value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>table</key>
+ <value>tot_mod[1]</value>
</param>
<param>
<key>affinity</key>
<value></value>
</param>
<param>
+ <key>dim</key>
+ <value>tot_mod[0]</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(600, 2725)</value>
+ <value>(200, 1480)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>trellis_sccc_decoder_combined_xx</key>
<param>
<key>id</key>
<value>trellis_sccc_decoder_combined_xx_0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>i_fsm_args</key>
+ <value>fsm_i</value>
+ </param>
+ <param>
+ <key>i_final_state</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>i_init_state</key>
+ <value>-1</value>
</param>
<param>
<key>type</key>
<value>f</value>
</param>
<param>
- <key>out_type</key>
- <value>b</value>
+ <key>interleaver</key>
+ <value>interleaver</value>
+ </param>
+ <param>
+ <key>iterations</key>
+ <value>5</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>metric_type</key>
+ <value>digital.TRELLIS_EUCLIDEAN</value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>o_fsm_args</key>
<value>fsm_o</value>
</param>
<param>
- <key>o_init_state</key>
+ <key>o_final_state</key>
<value>-1</value>
</param>
<param>
- <key>o_final_state</key>
+ <key>o_init_state</key>
<value>-1</value>
</param>
<param>
- <key>i_fsm_args</key>
- <value>fsm_i</value>
+ <key>out_type</key>
+ <value>b</value>
</param>
<param>
- <key>i_init_state</key>
- <value>-1</value>
+ <key>siso_type</key>
+ <value>trellis.TRELLIS_MIN_SUM</value>
</param>
<param>
- <key>i_final_state</key>
- <value>-1</value>
+ <key>scaling</key>
+ <value>1.0</value>
</param>
+ </block>
+ <block>
+ <key>trellis_siso_combined_f</key>
<param>
- <key>interleaver</key>
- <value>interleaver</value>
+ <key>a_post_in</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>a_post_out</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>block_size</key>
<value>interleaver.K()</value>
</param>
<param>
- <key>iterations</key>
- <value>5</value>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>table</key>
+ <value>tot_mod[1]</value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
<key>dim</key>
<value>tot_mod[0]</value>
</param>
<param>
- <key>table</key>
- <value>tot_mod[1]</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>metric_type</key>
- <value>digital.TRELLIS_EUCLIDEAN</value>
+ <key>fsm_args</key>
+ <value>fsm_i</value>
</param>
<param>
- <key>siso_type</key>
- <value>trellis.TRELLIS_MIN_SUM</value>
+ <key>final_state</key>
+ <value>-1</value>
</param>
<param>
- <key>scaling</key>
- <value>1.0</value>
+ <key>_coordinate</key>
+ <value>(208, 1096)</value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>affinity</key>
- <value></value>
+ <key>id</key>
+ <value>trellis_siso_combined_f_0</value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>init_state</key>
+ <value>-1</value>
</param>
<param>
<key>maxoutbuf</key>
<value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(456, 2481)</value>
+ <key>metric_type</key>
+ <value>trellis.TRELLIS_EUCLIDEAN</value>
</param>
<param>
- <key>_rotation</key>
+ <key>minoutbuf</key>
<value>0</value>
</param>
+ <param>
+ <key>siso_type</key>
+ <value>trellis.TRELLIS_MIN_SUM</value>
+ </param>
</block>
<block>
- <key>blks2_error_rate</key>
+ <key>trellis_viterbi_combined_xx</key>
<param>
- <key>id</key>
- <value>blks2_error_rate_0_0_0_0</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>block_size</key>
+ <value>interleaver.K()</value>
</param>
<param>
- <key>type</key>
- <value>'BER'</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
- <key>win_size</key>
- <value>block_b*100</value>
+ <key>table</key>
+ <value>tot_mod[1]</value>
</param>
<param>
- <key>bits_per_symbol</key>
- <value>1</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>dim</key>
+ <value>tot_mod[0]</value>
</param>
<param>
- <key>affinity</key>
- <value></value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>fsm_args</key>
+ <value>fsm_i</value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>final_state</key>
+ <value>-1</value>
</param>
<param>
<key>_coordinate</key>
- <value>(408, 2766)</value>
+ <value>(200, 676)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>blks2_error_rate</key>
<param>
<key>id</key>
- <value>blks2_error_rate_0_0_0</value>
+ <value>trellis_viterbi_combined_xx_0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>init_state</key>
+ <value>-1</value>
</param>
<param>
<key>type</key>
- <value>'BER'</value>
+ <value>f</value>
</param>
<param>
- <key>win_size</key>
- <value>block_b*100</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>bits_per_symbol</key>
- <value>1</value>
+ <key>metric_type</key>
+ <value>digital.TRELLIS_EUCLIDEAN</value>
</param>
<param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>out_type</key>
+ <value>b</value>
+ </param>
+ </block>
+ <block>
+ <key>trellis_viterbi_combined_xx</key>
+ <param>
<key>alias</key>
<value></value>
</param>
<param>
+ <key>block_size</key>
+ <value>interleaver.K()</value>
+ </param>
+ <param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>table</key>
+ <value>0,1,2,3</value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>dim</key>
+ <value>1</value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>fsm_args</key>
+ <value>fsm_o</value>
+ </param>
+ <param>
+ <key>final_state</key>
+ <value>-1</value>
</param>
<param>
<key>_coordinate</key>
- <value>(384, 2230)</value>
+ <value>(192, 876)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>blks2_error_rate</key>
<param>
<key>id</key>
- <value>blks2_error_rate_0_0</value>
+ <value>trellis_viterbi_combined_xx_1</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>init_state</key>
+ <value>-1</value>
</param>
<param>
<key>type</key>
- <value>'BER'</value>
+ <value>f</value>
</param>
<param>
- <key>win_size</key>
- <value>block_b*100</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>bits_per_symbol</key>
- <value>1</value>
+ <key>metric_type</key>
+ <value>digital.TRELLIS_HARD_SYMBOL</value>
</param>
<param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>out_type</key>
+ <value>b</value>
+ </param>
+ </block>
+ <block>
+ <key>trellis_viterbi_x</key>
+ <param>
<key>alias</key>
<value></value>
</param>
<param>
+ <key>block_size</key>
+ <value>interleaver.K()</value>
+ </param>
+ <param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>fsm_args</key>
+ <value>fsm_o</value>
+ </param>
+ <param>
+ <key>final_state</key>
+ <value>-1</value>
</param>
<param>
<key>_coordinate</key>
- <value>(312, 1598)</value>
+ <value>(664, 1140)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>variable_slider</key>
<param>
<key>id</key>
- <value>EsN0_dB</value>
+ <value>trellis_viterbi_x_0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>init_state</key>
+ <value>0</value>
</param>
<param>
- <key>label</key>
- <value>Es/N0 (dB)</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>value</key>
- <value>13.0</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>min</key>
- <value>-10</value>
+ <key>type</key>
+ <value>b</value>
</param>
+ </block>
+ <block>
+ <key>virtual_sink</key>
<param>
- <key>max</key>
- <value>30</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
- <key>num_steps</key>
- <value>1000</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
+ <key>_coordinate</key>
+ <value>(872, 500)</value>
</param>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>grid_pos</key>
- <value></value>
+ <key>id</key>
+ <value>virtual_sink_0</value>
</param>
<param>
- <key>notebook</key>
- <value></value>
+ <key>stream_id</key>
+ <value>observation</value>
</param>
+ </block>
+ <block>
+ <key>virtual_sink</key>
<param>
- <key>alias</key>
+ <key>comment</key>
<value></value>
</param>
<param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(936, 129)</value>
+ <value>(224, 372)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
+ <param>
+ <key>id</key>
+ <value>virtual_sink_0_0</value>
+ </param>
+ <param>
+ <key>stream_id</key>
+ <value>info</value>
+ </param>
</block>
<block>
- <key>blocks_unpack_k_bits_bb</key>
+ <key>virtual_sink</key>
<param>
- <key>id</key>
- <value>blocks_unpack_k_bits_bb_0_0_0</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>k</key>
- <value>bpsym</value>
+ <key>_coordinate</key>
+ <value>(864, 324)</value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>affinity</key>
- <value></value>
+ <key>id</key>
+ <value>virtual_sink_0_0_0</value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>stream_id</key>
+ <value>info_i</value>
</param>
+ </block>
+ <block>
+ <key>virtual_sink</key>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(720, 2572)</value>
+ <value>(664, 724)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
+ <param>
+ <key>id</key>
+ <value>virtual_sink_0_1_0</value>
+ </param>
+ <param>
+ <key>stream_id</key>
+ <value>estimate_i</value>
+ </param>
</block>
<block>
<key>virtual_sink</key>
<param>
- <key>id</key>
- <value>virtual_sink_0_1_1_0</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
+ <key>_coordinate</key>
+ <value>(1040, 1164)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>virtual_sink_0_1_1</value>
+ </param>
+ <param>
<key>stream_id</key>
- <value>estimate2</value>
+ <value>estimate1</value>
+ </param>
+ </block>
+ <block>
+ <key>virtual_source</key>
+ <param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(920, 2572)</value>
+ <value>(0, 724)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
+ <param>
+ <key>id</key>
+ <value>virtual_source_0</value>
+ </param>
+ <param>
+ <key>stream_id</key>
+ <value>observation</value>
+ </param>
</block>
<block>
- <key>note</key>
+ <key>virtual_source</key>
<param>
- <key>id</key>
- <value>note_0_1</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>note</key>
- <value>This is the full-fledged turbo equalizer/decoder</value>
+ <key>_coordinate</key>
+ <value>(304, 1356)</value>
</param>
<param>
- <key>alias</key>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>virtual_source_0_0_0_0_0</value>
+ </param>
+ <param>
+ <key>stream_id</key>
+ <value>estimate1</value>
+ </param>
+ </block>
+ <block>
+ <key>virtual_source</key>
+ <param>
+ <key>comment</key>
<value></value>
</param>
<param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(1144, 2572)</value>
+ <value>(736, 660)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
+ <param>
+ <key>id</key>
+ <value>virtual_source_0_0_1</value>
+ </param>
+ <param>
+ <key>stream_id</key>
+ <value>info</value>
+ </param>
</block>
<block>
- <key>note</key>
+ <key>virtual_source</key>
<param>
- <key>id</key>
- <value>note_0_0</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>note</key>
- <value>This is a better soft-equalizer/Viterbi decoder</value>
+ <key>_coordinate</key>
+ <value>(344, 1300)</value>
</param>
<param>
- <key>alias</key>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>virtual_source_0_0_1_0</value>
+ </param>
+ <param>
+ <key>stream_id</key>
+ <value>info</value>
+ </param>
+ </block>
+ <block>
+ <key>virtual_source</key>
+ <param>
+ <key>comment</key>
<value></value>
</param>
<param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(1016, 1908)</value>
+ <value>(400, 1484)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
+ <param>
+ <key>id</key>
+ <value>virtual_source_0_0_1_0_0</value>
+ </param>
+ <param>
+ <key>stream_id</key>
+ <value>info</value>
+ </param>
</block>
<block>
- <key>note</key>
+ <key>virtual_source</key>
<param>
- <key>id</key>
- <value>note_0</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>note</key>
- <value>This is the simplest hard Viterbi equalizer/hard Viterbi decoder</value>
+ <key>_coordinate</key>
+ <value>(0, 1204)</value>
</param>
<param>
- <key>alias</key>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>virtual_source_0_1</value>
+ </param>
+ <param>
+ <key>stream_id</key>
+ <value>observation</value>
+ </param>
+ </block>
+ <block>
+ <key>virtual_source</key>
+ <param>
+ <key>comment</key>
<value></value>
</param>
<param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(1096, 1316)</value>
+ <value>(0, 1580)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
+ <param>
+ <key>id</key>
+ <value>virtual_source_0_1_0</value>
+ </param>
+ <param>
+ <key>stream_id</key>
+ <value>observation</value>
+ </param>
</block>
<connection>
- <source_block_id>analog_random_source_x_0</source_block_id>
- <sink_block_id>virtual_sink_0_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>blocks_throttle_0</sink_block_id>
+ <source_block_id>analog_const_source_x_0</source_block_id>
+ <sink_block_id>trellis_siso_combined_f_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
@@ -2566,116 +3064,116 @@
<sink_key>1</sink_key>
</connection>
<connection>
- <source_block_id>blocks_add_xx_1</source_block_id>
- <sink_block_id>virtual_sink_0</sink_block_id>
+ <source_block_id>analog_random_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>digital_chunks_to_symbols_xx_0_0</source_block_id>
- <sink_block_id>fir_filter_xxx_0</sink_block_id>
+ <source_block_id>analog_random_source_x_0</source_block_id>
+ <sink_block_id>virtual_sink_0_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>fir_filter_xxx_0</source_block_id>
- <sink_block_id>blocks_add_xx_1</sink_block_id>
+ <source_block_id>blks2_error_rate_0_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_throttle_0</source_block_id>
- <sink_block_id>blocks_pack_k_bits_bb_0</sink_block_id>
+ <source_block_id>blks2_error_rate_0_0_0</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>
<connection>
- <source_block_id>blocks_pack_k_bits_bb_0</source_block_id>
- <sink_block_id>trellis_encoder_xx_0</sink_block_id>
+ <source_block_id>blks2_error_rate_0_0_0_0</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>trellis_encoder_xx_0</source_block_id>
- <sink_block_id>trellis_permutation_0</sink_block_id>
+ <source_block_id>blocks_add_xx_1</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>trellis_permutation_0</source_block_id>
- <sink_block_id>digital_chunks_to_symbols_xx_0_0</sink_block_id>
+ <source_block_id>blocks_char_to_float_0</source_block_id>
+ <sink_block_id>trellis_viterbi_combined_xx_1</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>virtual_sink_0_0_0</sink_block_id>
+ <source_block_id>blocks_pack_k_bits_bb_0</source_block_id>
+ <sink_block_id>trellis_encoder_xx_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>blocks_char_to_float_0</source_block_id>
- <sink_block_id>trellis_viterbi_combined_xx_1</sink_block_id>
+ <source_block_id>blocks_throttle_0</source_block_id>
+ <sink_block_id>blocks_pack_k_bits_bb_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>trellis_permutation_0_0</source_block_id>
- <sink_block_id>blocks_char_to_float_0</sink_block_id>
+ <source_block_id>blocks_unpack_k_bits_bb_0</source_block_id>
+ <sink_block_id>blks2_error_rate_0_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_permutation_0_0</source_block_id>
- <sink_block_id>virtual_sink_0_1_0</sink_block_id>
+ <source_block_id>blocks_unpack_k_bits_bb_0_0</source_block_id>
+ <sink_block_id>virtual_sink_0_1_1</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>blocks_unpack_k_bits_bb_0</source_block_id>
- <sink_block_id>virtual_sink_0_1</sink_block_id>
+ <source_block_id>blocks_unpack_k_bits_bb_0_0_0</source_block_id>
+ <sink_block_id>blks2_error_rate_0_0_0_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_viterbi_combined_xx_1</source_block_id>
- <sink_block_id>blocks_unpack_k_bits_bb_0</sink_block_id>
+ <source_block_id>digital_chunks_to_symbols_xx_0_0</source_block_id>
+ <sink_block_id>fir_filter_xxx_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>trellis_viterbi_combined_xx_0</source_block_id>
- <sink_block_id>trellis_permutation_0_0</sink_block_id>
+ <source_block_id>fir_filter_xxx_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>virtual_source_0</source_block_id>
- <sink_block_id>trellis_viterbi_combined_xx_0</sink_block_id>
+ <source_block_id>trellis_encoder_xx_0</source_block_id>
+ <sink_block_id>trellis_permutation_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>blocks_unpack_k_bits_bb_0_0</source_block_id>
- <sink_block_id>virtual_sink_0_1_1</sink_block_id>
+ <source_block_id>trellis_encoder_xx_0</source_block_id>
+ <sink_block_id>virtual_sink_0_0_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>virtual_source_0_1</source_block_id>
- <sink_block_id>trellis_siso_combined_f_0</sink_block_id>
+ <source_block_id>trellis_permutation_0</source_block_id>
+ <sink_block_id>digital_chunks_to_symbols_xx_0_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_const_source_x_0</source_block_id>
- <sink_block_id>trellis_siso_combined_f_0</sink_block_id>
+ <source_block_id>trellis_permutation_0_0</source_block_id>
+ <sink_block_id>blocks_char_to_float_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>trellis_siso_combined_f_0</source_block_id>
- <sink_block_id>trellis_permutation_0_0_0</sink_block_id>
+ <source_block_id>trellis_permutation_0_0</source_block_id>
+ <sink_block_id>virtual_sink_0_1_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
@@ -2686,38 +3184,38 @@
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>trellis_viterbi_x_0</source_block_id>
- <sink_block_id>blocks_unpack_k_bits_bb_0_0</sink_block_id>
+ <source_block_id>trellis_sccc_decoder_combined_xx_0</source_block_id>
+ <sink_block_id>blocks_unpack_k_bits_bb_0_0_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>virtual_source_0_1_0</source_block_id>
- <sink_block_id>trellis_sccc_decoder_combined_xx_0</sink_block_id>
+ <source_block_id>trellis_siso_combined_f_0</source_block_id>
+ <sink_block_id>trellis_permutation_0_0_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>blocks_unpack_k_bits_bb_0_0_0</source_block_id>
- <sink_block_id>virtual_sink_0_1_1_0</sink_block_id>
+ <source_block_id>trellis_viterbi_combined_xx_0</source_block_id>
+ <sink_block_id>trellis_permutation_0_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>trellis_sccc_decoder_combined_xx_0</source_block_id>
- <sink_block_id>blocks_unpack_k_bits_bb_0_0_0</sink_block_id>
+ <source_block_id>trellis_viterbi_combined_xx_1</source_block_id>
+ <sink_block_id>blocks_unpack_k_bits_bb_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>blks2_error_rate_0_0_0</source_block_id>
- <sink_block_id>wxgui_numbersink2_3_0_0_0_0</sink_block_id>
+ <source_block_id>trellis_viterbi_x_0</source_block_id>
+ <sink_block_id>blocks_unpack_k_bits_bb_0_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>virtual_source_0_0_1_0</source_block_id>
- <sink_block_id>blks2_error_rate_0_0_0</sink_block_id>
+ <source_block_id>virtual_source_0</source_block_id>
+ <sink_block_id>trellis_viterbi_combined_xx_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
@@ -2728,39 +3226,33 @@
<sink_key>1</sink_key>
</connection>
<connection>
- <source_block_id>blks2_error_rate_0_0_0_0</source_block_id>
- <sink_block_id>wxgui_numbersink2_3_0_0_0_0_0</sink_block_id>
+ <source_block_id>virtual_source_0_0_1</source_block_id>
+ <sink_block_id>blks2_error_rate_0_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>virtual_source_0_0_1_0_0</source_block_id>
- <sink_block_id>blks2_error_rate_0_0_0_0</sink_block_id>
+ <source_block_id>virtual_source_0_0_1_0</source_block_id>
+ <sink_block_id>blks2_error_rate_0_0_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>virtual_source_0_0_0_0_0_0</source_block_id>
+ <source_block_id>virtual_source_0_0_1_0_0</source_block_id>
<sink_block_id>blks2_error_rate_0_0_0_0</sink_block_id>
<source_key>0</source_key>
- <sink_key>1</sink_key>
- </connection>
- <connection>
- <source_block_id>blks2_error_rate_0_0</source_block_id>
- <sink_block_id>wxgui_numbersink2_3_0_0_0</sink_block_id>
- <source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>virtual_source_0_0_1</source_block_id>
- <sink_block_id>blks2_error_rate_0_0</sink_block_id>
+ <source_block_id>virtual_source_0_1</source_block_id>
+ <sink_block_id>trellis_siso_combined_f_0</sink_block_id>
<source_key>0</source_key>
- <sink_key>0</sink_key>
+ <sink_key>1</sink_key>
</connection>
<connection>
- <source_block_id>virtual_source_0_0_0_0</source_block_id>
- <sink_block_id>blks2_error_rate_0_0</sink_block_id>
+ <source_block_id>virtual_source_0_1_0</source_block_id>
+ <sink_block_id>trellis_sccc_decoder_combined_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/viterbi_equalization.grc b/gr-trellis/examples/grc/viterbi_equalization.grc
index 2f69ead429..2f50e6abdf 100644
--- a/gr-trellis/examples/grc/viterbi_equalization.grc
+++ b/gr-trellis/examples/grc/viterbi_equalization.grc
@@ -1,412 +1,508 @@
-<?xml version='1.0' encoding='ASCII'?>
-<?grc format='1' created='3.7.6'?>
+<?xml version='1.0' encoding='utf-8'?>
+<?grc format='1' created='3.7.11'?>
<flow_graph>
<timestamp>Wed Oct 1 11:04:18 2014</timestamp>
<block>
<key>options</key>
<param>
- <key>id</key>
- <value>viterbi_equalization</value>
+ <key>author</key>
+ <value>AA</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>window_size</key>
+ <value>2048, 2048</value>
</param>
<param>
- <key>title</key>
- <value>Viterbi Equalization</value>
+ <key>category</key>
+ <value>Custom</value>
</param>
<param>
- <key>author</key>
- <value>AA</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>description</key>
<value>gnuradio flow graph</value>
</param>
<param>
- <key>window_size</key>
- <value>2048, 2048</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>generate_options</key>
- <value>wx_gui</value>
+ <key>_coordinate</key>
+ <value>(0, 4)</value>
</param>
<param>
- <key>category</key>
- <value>Custom</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>run_options</key>
- <value>prompt</value>
+ <key>generate_options</key>
+ <value>qt_gui</value>
</param>
<param>
- <key>run</key>
- <value>True</value>
+ <key>hier_block_src_path</key>
+ <value>.:</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>viterbi_equalization</value>
</param>
<param>
<key>max_nouts</key>
<value>0</value>
</param>
<param>
- <key>realtime_scheduling</key>
+ <key>qt_qss_theme</key>
<value></value>
</param>
<param>
- <key>alias</key>
+ <key>realtime_scheduling</key>
<value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(10, 10)</value>
+ <key>run_command</key>
+ <value>{python} -u {filename}</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>run_options</key>
+ <value>prompt</value>
+ </param>
+ <param>
+ <key>run</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>thread_safe_setters</key>
+ <value></value>
+ </param>
+ <param>
+ <key>title</key>
+ <value>Viterbi Equalization</value>
</param>
</block>
<block>
<key>variable</key>
<param>
- <key>id</key>
- <value>noisevar</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>10**(-EsN0_dB/10.0) * Es /2.0</value>
+ <key>_coordinate</key>
+ <value>(464, 68)</value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(872, 157)</value>
+ <key>id</key>
+ <value>Es</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>value</key>
+ <value>numpy.mean((numpy.square(numpy.abs(tot_mod[1]))))</value>
</param>
</block>
<block>
- <key>variable</key>
+ <key>variable_qtgui_range</key>
<param>
- <key>id</key>
- <value>bpsym</value>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>2</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>int(round(math.log(fsm.I())/math.log(2)))</value>
+ <key>_coordinate</key>
+ <value>(608, 4)</value>
</param>
<param>
- <key>alias</key>
+ <key>gui_hint</key>
<value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(528, 13)</value>
- </param>
- <param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>variable</key>
<param>
<key>id</key>
- <value>channel</value>
+ <value>EsN0_dB</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>label</key>
+ <value>Es/N0 (dB)</value>
</param>
<param>
- <key>value</key>
- <value>fu.c_channel</value>
+ <key>min_len</key>
+ <value>200</value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(320, 85)</value>
+ <key>start</key>
+ <value>-10</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>step</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>stop</key>
+ <value>30</value>
+ </param>
+ <param>
+ <key>rangeType</key>
+ <value>float</value>
+ </param>
+ <param>
+ <key>widget</key>
+ <value>counter_slider</value>
</param>
</block>
<block>
<key>variable</key>
<param>
- <key>id</key>
- <value>R</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
+ <key>_coordinate</key>
+ <value>(176, 68)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>R</value>
+ </param>
+ <param>
<key>value</key>
<value>100e3</value>
</param>
+ </block>
+ <block>
+ <key>variable</key>
<param>
- <key>alias</key>
+ <key>comment</key>
<value></value>
</param>
<param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(216, 109)</value>
+ <value>(176, 4)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>variable</key>
<param>
<key>id</key>
<value>block</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
<key>value</key>
<value>bpsym*1000</value>
</param>
+ </block>
+ <block>
+ <key>variable</key>
<param>
- <key>alias</key>
+ <key>comment</key>
<value></value>
</param>
<param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(216, 21)</value>
+ <value>(464, 4)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
+ <param>
+ <key>id</key>
+ <value>bpsym</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>int(round(math.log(fsm.I())/math.log(2)))</value>
+ </param>
</block>
<block>
<key>variable</key>
<param>
- <key>id</key>
- <value>fsm</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>trellis.fsm(len(modulation[1]),len(channel))</value>
+ <key>_coordinate</key>
+ <value>(272, 68)</value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(320, 157)</value>
+ <key>id</key>
+ <value>channel</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>value</key>
+ <value>fu.c_channel</value>
</param>
</block>
<block>
<key>variable</key>
<param>
- <key>id</key>
- <value>tot_mod</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>fu.make_isi_lookup(modulation,channel,False)</value>
+ <key>_coordinate</key>
+ <value>(272, 132)</value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(320, 229)</value>
+ <key>id</key>
+ <value>fsm</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>value</key>
+ <value>trellis.fsm(len(modulation[1]),len(channel))</value>
</param>
</block>
<block>
<key>variable</key>
<param>
- <key>id</key>
- <value>modulation</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
+ <key>_coordinate</key>
+ <value>(272, 4)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>modulation</value>
+ </param>
+ <param>
<key>value</key>
<value>fu.pam4</value>
</param>
+ </block>
+ <block>
+ <key>variable</key>
<param>
- <key>alias</key>
+ <key>comment</key>
<value></value>
</param>
<param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(320, 21)</value>
+ <value>(464, 132)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
+ <param>
+ <key>id</key>
+ <value>noisevar</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>10**(-EsN0_dB/10.0) * Es /2.0</value>
+ </param>
</block>
<block>
<key>variable</key>
<param>
- <key>id</key>
- <value>Es</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>numpy.mean((numpy.square(numpy.abs(tot_mod[1]))))</value>
+ <key>_coordinate</key>
+ <value>(272, 196)</value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(568, 157)</value>
+ <key>id</key>
+ <value>tot_mod</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>value</key>
+ <value>fu.make_isi_lookup(modulation,channel,False)</value>
</param>
</block>
<block>
- <key>import</key>
+ <key>analog_noise_source_x</key>
<param>
- <key>id</key>
- <value>import_0_0</value>
+ <key>amp</key>
+ <value>noisevar**0.5</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>import</key>
- <value>import gnuradio.trellis.fsm_utils as fu</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
- <key>alias</key>
+ <key>affinity</key>
<value></value>
</param>
<param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(24, 252)</value>
+ <value>(752, 444)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>import</key>
<param>
<key>id</key>
- <value>import_0</value>
+ <value>analog_noise_source_x_0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>import</key>
- <value>import numpy</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>noise_type</key>
+ <value>analog.GR_GAUSSIAN</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(16, 140)</value>
+ <key>type</key>
+ <value>float</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>seed</key>
+ <value>-42</value>
</param>
</block>
<block>
- <key>import</key>
+ <key>analog_random_source_x</key>
<param>
- <key>id</key>
- <value>import_0_1</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
- <key>import</key>
- <value>import math</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(24, 188)</value>
+ <value>(0, 356)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>blks2_error_rate</key>
<param>
<key>id</key>
- <value>blks2_error_rate_0</value>
+ <value>analog_random_source_x_0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>max</key>
+ <value>2</value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>min</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>num_samps</key>
+ <value>1007</value>
</param>
<param>
<key>type</key>
- <value>'BER'</value>
+ <value>byte</value>
</param>
<param>
- <key>win_size</key>
- <value>block*100</value>
+ <key>repeat</key>
+ <value>True</value>
</param>
+ </block>
+ <block>
+ <key>blks2_error_rate</key>
<param>
<key>bits_per_symbol</key>
<value>1</value>
@@ -416,152 +512,152 @@
<value></value>
</param>
<param>
- <key>affinity</key>
+ <key>comment</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(312, 1766)</value>
+ <value>(816, 708)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>virtual_source</key>
<param>
<key>id</key>
- <value>virtual_source_0_0</value>
+ <value>blks2_error_rate_0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>stream_id</key>
- <value>info</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(80, 1724)</value>
+ <key>type</key>
+ <value>'BER'</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>win_size</key>
+ <value>block*100</value>
</param>
</block>
<block>
- <key>virtual_source</key>
+ <key>blocks_add_xx</key>
<param>
- <key>id</key>
- <value>virtual_source_0_0_0</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
- <key>stream_id</key>
- <value>estimate</value>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(72, 1820)</value>
+ <value>(1048, 384)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>wxgui_numbersink2</key>
<param>
<key>id</key>
- <value>wxgui_numbersink2_3_0_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
+ <value>blocks_add_xx_1</value>
</param>
<param>
<key>type</key>
<value>float</value>
</param>
<param>
- <key>title</key>
- <value>BER</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>units</key>
- <value>BER</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>samp_rate</key>
- <value>R</value>
+ <key>num_inputs</key>
+ <value>2</value>
</param>
<param>
- <key>min_value</key>
- <value>0</value>
+ <key>vlen</key>
+ <value>1</value>
</param>
+ </block>
+ <block>
+ <key>blocks_null_sink</key>
<param>
- <key>max_value</key>
- <value>1.0</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>factor</key>
- <value>1.0</value>
+ <key>bus_conns</key>
+ <value>[[0,],]</value>
</param>
<param>
- <key>decimal_places</key>
- <value>6</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
- <key>ref_level</key>
- <value>0</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>number_rate</key>
- <value>15</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>peak_hold</key>
- <value>False</value>
+ <key>_coordinate</key>
+ <value>(1208, 344)</value>
</param>
<param>
- <key>average</key>
- <value>False</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>avg_alpha</key>
- <value>0.001</value>
+ <key>id</key>
+ <value>blocks_null_sink_1</value>
</param>
<param>
- <key>show_gauge</key>
- <value>False</value>
+ <key>type</key>
+ <value>float</value>
</param>
<param>
- <key>win_size</key>
- <value></value>
+ <key>num_inputs</key>
+ <value>1</value>
</param>
<param>
- <key>grid_pos</key>
- <value></value>
+ <key>vlen</key>
+ <value>1</value>
</param>
+ </block>
+ <block>
+ <key>blocks_pack_k_bits_bb</key>
<param>
- <key>notebook</key>
+ <key>alias</key>
<value></value>
</param>
<param>
- <key>alias</key>
+ <key>comment</key>
<value></value>
</param>
<param>
@@ -569,758 +665,865 @@
<value></value>
</param>
<param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(728, 1709)</value>
+ <value>(384, 380)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>note</key>
<param>
<key>id</key>
- <value>note_0</value>
+ <value>blocks_pack_k_bits_bb_0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>k</key>
+ <value>bpsym</value>
</param>
<param>
- <key>note</key>
- <value>Substititue the metrics/Viterbi block with Viterbi_combo</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
+ </block>
+ <block>
+ <key>blocks_throttle</key>
<param>
- <key>_coordinate</key>
- <value>(704, 1468)</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>comment</key>
+ <value></value>
</param>
- </block>
- <block>
- <key>virtual_source</key>
<param>
- <key>id</key>
- <value>virtual_source_0</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>stream_id</key>
- <value>observation</value>
- </param>
- <param>
<key>_coordinate</key>
- <value>(40, 1236)</value>
+ <value>(208, 380)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>virtual_sink</key>
<param>
<key>id</key>
- <value>virtual_sink_0_0</value>
+ <value>blocks_throttle_0</value>
</param>
<param>
- <key>_enabled</key>
+ <key>ignoretag</key>
<value>True</value>
</param>
<param>
- <key>stream_id</key>
- <value>info</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(232, 524)</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>samples_per_second</key>
+ <value>R</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>byte</value>
+ </param>
+ <param>
+ <key>vlen</key>
+ <value>1</value>
</param>
</block>
<block>
- <key>analog_random_source_x</key>
+ <key>blocks_unpack_k_bits_bb</key>
<param>
- <key>id</key>
- <value>analog_random_source_x_0</value>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>byte</value>
+ <key>_coordinate</key>
+ <value>(672, 740)</value>
</param>
<param>
- <key>min</key>
+ <key>_rotation</key>
<value>0</value>
</param>
<param>
- <key>max</key>
- <value>2</value>
+ <key>id</key>
+ <value>blocks_unpack_k_bits_bb_0</value>
</param>
<param>
- <key>num_samps</key>
- <value>1007</value>
+ <key>k</key>
+ <value>bpsym</value>
</param>
<param>
- <key>repeat</key>
- <value>True</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
+ </block>
+ <block>
+ <key>digital_chunks_to_symbols_xx</key>
<param>
<key>alias</key>
<value></value>
</param>
<param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>dimension</key>
+ <value>tot_mod[0]</value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>False</value>
</param>
<param>
<key>_coordinate</key>
- <value>(16, 559)</value>
+ <value>(760, 244)</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_1</value>
+ <value>digital_chunks_to_symbols_xx_0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>in_type</key>
+ <value>short</value>
</param>
<param>
- <key>type</key>
- <value>float</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>num_inputs</key>
+ <key>num_ports</key>
<value>1</value>
</param>
<param>
- <key>bus_conns</key>
- <value>[[0,],]</value>
+ <key>out_type</key>
+ <value>float</value>
</param>
<param>
+ <key>symbol_table</key>
+ <value>tot_mod[1]</value>
+ </param>
+ </block>
+ <block>
+ <key>digital_chunks_to_symbols_xx</key>
+ <param>
<key>alias</key>
<value></value>
</param>
<param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
<param>
+ <key>dimension</key>
+ <value>modulation[0]</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(800, 1008)</value>
+ <value>(512, 372)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>virtual_sink</key>
<param>
<key>id</key>
- <value>virtual_sink_0</value>
+ <value>digital_chunks_to_symbols_xx_0_0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>in_type</key>
+ <value>byte</value>
</param>
<param>
- <key>stream_id</key>
- <value>observation</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(608, 1076)</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>num_ports</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>out_type</key>
+ <value>float</value>
+ </param>
+ <param>
+ <key>symbol_table</key>
+ <value>modulation[1]</value>
</param>
</block>
<block>
<key>fir_filter_xxx</key>
<param>
- <key>id</key>
- <value>fir_filter_xxx_0</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
- <key>type</key>
- <value>fff</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
<key>decim</key>
<value>1</value>
</param>
<param>
- <key>taps</key>
- <value>fu.c_channel</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>samp_delay</key>
+ <key>_coordinate</key>
+ <value>(712, 372)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
<value>0</value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>id</key>
+ <value>fir_filter_xxx_0</value>
</param>
<param>
- <key>affinity</key>
- <value></value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
<key>minoutbuf</key>
<value>0</value>
</param>
<param>
- <key>maxoutbuf</key>
+ <key>samp_delay</key>
<value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(904, 613)</value>
+ <key>taps</key>
+ <value>fu.c_channel</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>type</key>
+ <value>fff</value>
</param>
</block>
<block>
- <key>blocks_add_xx</key>
+ <key>import</key>
<param>
- <key>id</key>
- <value>blocks_add_xx_1</value>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>float</value>
+ <key>_coordinate</key>
+ <value>(0, 116)</value>
</param>
<param>
- <key>num_inputs</key>
- <value>2</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>id</key>
+ <value>import_0</value>
+ </param>
+ <param>
+ <key>import</key>
+ <value>import numpy</value>
</param>
+ </block>
+ <block>
+ <key>import</key>
<param>
<key>alias</key>
<value></value>
</param>
<param>
- <key>affinity</key>
+ <key>comment</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>maxoutbuf</key>
+ <key>_coordinate</key>
+ <value>(0, 212)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
<value>0</value>
</param>
<param>
+ <key>id</key>
+ <value>import_0_0</value>
+ </param>
+ <param>
+ <key>import</key>
+ <value>import gnuradio.trellis.fsm_utils as fu</value>
+ </param>
+ </block>
+ <block>
+ <key>import</key>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(688, 944)</value>
+ <value>(0, 164)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
+ <param>
+ <key>id</key>
+ <value>import_0_1</value>
+ </param>
+ <param>
+ <key>import</key>
+ <value>import math</value>
+ </param>
</block>
<block>
- <key>digital_chunks_to_symbols_xx</key>
+ <key>note</key>
<param>
- <key>id</key>
- <value>digital_chunks_to_symbols_xx_0</value>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
- <value>False</value>
+ <value>True</value>
</param>
<param>
- <key>in_type</key>
- <value>short</value>
+ <key>_coordinate</key>
+ <value>(752, 612)</value>
</param>
<param>
- <key>out_type</key>
- <value>float</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
<param>
- <key>symbol_table</key>
- <value>tot_mod[1]</value>
+ <key>id</key>
+ <value>note_0</value>
</param>
<param>
- <key>dimension</key>
- <value>tot_mod[0]</value>
+ <key>note</key>
+ <value>Substititue the metrics/Viterbi block with Viterbi_combo</value>
</param>
+ </block>
+ <block>
+ <key>qtgui_number_sink</key>
<param>
- <key>num_ports</key>
- <value>1</value>
+ <key>autoscale</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>avg</key>
+ <value>0</value>
</param>
<param>
<key>alias</key>
<value></value>
</param>
<param>
- <key>affinity</key>
+ <key>comment</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>affinity</key>
+ <value></value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>1</value>
</param>
<param>
<key>_coordinate</key>
- <value>(944, 461)</value>
+ <value>(984, 700)</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value></value>
</param>
<param>
<key>_rotation</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>graph_type</key>
+ <value>qtgui.NUM_GRAPH_HORIZ</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>id</key>
+ <value>qtgui_number_sink_0</value>
</param>
<param>
<key>type</key>
<value>float</value>
</param>
<param>
- <key>noise_type</key>
- <value>analog.GR_GAUSSIAN</value>
+ <key>color1</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>amp</key>
- <value>noisevar**0.5</value>
+ <key>factor1</key>
+ <value>1</value>
</param>
<param>
- <key>seed</key>
- <value>-42</value>
+ <key>label1</key>
+ <value>BER</value>
</param>
<param>
- <key>alias</key>
+ <key>unit1</key>
<value></value>
</param>
<param>
- <key>affinity</key>
+ <key>color10</key>
+ <value>("black", "black")</value>
+ </param>
+ <param>
+ <key>factor10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>label10</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>unit10</key>
+ <value></value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>color2</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(288, 958)</value>
+ <key>factor2</key>
+ <value>1</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>label2</key>
+ <value></value>
</param>
- </block>
- <block>
- <key>trellis_metrics_x</key>
<param>
- <key>id</key>
- <value>trellis_metrics_x_0</value>
+ <key>unit2</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
- <value>False</value>
+ <key>color3</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>type</key>
- <value>f</value>
+ <key>factor3</key>
+ <value>1</value>
</param>
<param>
- <key>card</key>
- <value>fsm.O()</value>
+ <key>label3</key>
+ <value></value>
</param>
<param>
- <key>dim</key>
- <value>tot_mod[0]</value>
+ <key>unit3</key>
+ <value></value>
</param>
<param>
- <key>table</key>
- <value>tot_mod[1]</value>
+ <key>color4</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>metric_type</key>
- <value>digital.TRELLIS_EUCLIDEAN</value>
+ <key>factor4</key>
+ <value>1</value>
</param>
<param>
- <key>alias</key>
+ <key>label4</key>
<value></value>
</param>
<param>
- <key>affinity</key>
+ <key>unit4</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>color5</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>factor5</key>
+ <value>1</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(272, 1271)</value>
+ <key>label5</key>
+ <value></value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>unit5</key>
+ <value></value>
</param>
- </block>
- <block>
- <key>variable_slider</key>
<param>
- <key>id</key>
- <value>EsN0_dB</value>
+ <key>color6</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>factor6</key>
+ <value>1</value>
</param>
<param>
- <key>label</key>
- <value>Es/N0 (dB)</value>
+ <key>label6</key>
+ <value></value>
</param>
<param>
- <key>value</key>
- <value>20.0</value>
+ <key>unit6</key>
+ <value></value>
</param>
<param>
- <key>min</key>
- <value>-10</value>
+ <key>color7</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>max</key>
- <value>30</value>
+ <key>factor7</key>
+ <value>1</value>
</param>
<param>
- <key>num_steps</key>
- <value>1000</value>
+ <key>label7</key>
+ <value></value>
</param>
<param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
+ <key>unit7</key>
+ <value></value>
</param>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>color8</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>grid_pos</key>
- <value></value>
+ <key>factor8</key>
+ <value>1</value>
</param>
<param>
- <key>notebook</key>
+ <key>label8</key>
<value></value>
</param>
<param>
- <key>alias</key>
+ <key>unit8</key>
<value></value>
</param>
<param>
- <key>_coordinate</key>
- <value>(728, 105)</value>
+ <key>color9</key>
+ <value>("black", "black")</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>factor9</key>
+ <value>1</value>
</param>
- </block>
- <block>
- <key>blocks_throttle</key>
<param>
- <key>id</key>
- <value>blocks_throttle_0</value>
+ <key>label9</key>
+ <value></value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>unit9</key>
+ <value></value>
</param>
<param>
- <key>type</key>
- <value>byte</value>
+ <key>max</key>
+ <value>1</value>
</param>
<param>
- <key>samples_per_second</key>
- <value>R</value>
+ <key>min</key>
+ <value>0</value>
</param>
<param>
- <key>vlen</key>
+ <key>name</key>
+ <value>"BER"</value>
+ </param>
+ <param>
+ <key>nconnections</key>
<value>1</value>
</param>
<param>
- <key>ignoretag</key>
- <value>True</value>
+ <key>update_time</key>
+ <value>0.10</value>
</param>
+ </block>
+ <block>
+ <key>trellis_encoder_xx</key>
<param>
<key>alias</key>
<value></value>
</param>
<param>
+ <key>blocklength</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>blockwise</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>False</value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>fsm_args</key>
+ <value>fsm</value>
</param>
<param>
<key>_coordinate</key>
- <value>(240, 580)</value>
+ <value>(520, 244)</value>
</param>
<param>
<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_0</value>
+ <value>trellis_encoder_xx_0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>init_state</key>
+ <value>0</value>
</param>
<param>
- <key>in_type</key>
- <value>byte</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>out_type</key>
- <value>float</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>symbol_table</key>
- <value>modulation[1]</value>
+ <key>type</key>
+ <value>bs</value>
</param>
+ </block>
+ <block>
+ <key>trellis_metrics_x</key>
<param>
- <key>dimension</key>
- <value>modulation[0]</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>num_ports</key>
- <value>1</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>table</key>
+ <value>tot_mod[1]</value>
</param>
<param>
<key>affinity</key>
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>dim</key>
+ <value>tot_mod[0]</value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>False</value>
</param>
<param>
<key>_coordinate</key>
- <value>(672, 613)</value>
+ <value>(208, 548)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>virtual_sink</key>
<param>
<key>id</key>
- <value>virtual_sink_0_1</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
+ <value>trellis_metrics_x_0</value>
</param>
<param>
- <key>stream_id</key>
- <value>estimate</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(944, 1436)</value>
+ <key>metric_type</key>
+ <value>digital.TRELLIS_EUCLIDEAN</value>
</param>
<param>
- <key>_rotation</key>
+ <key>minoutbuf</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>trellis_viterbi_x</key>
<param>
- <key>id</key>
- <value>trellis_viterbi_x_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>False</value>
+ <key>card</key>
+ <value>fsm.O()</value>
</param>
<param>
<key>type</key>
- <value>b</value>
+ <value>f</value>
</param>
+ </block>
+ <block>
+ <key>trellis_viterbi_combined_xx</key>
<param>
- <key>fsm_args</key>
- <value>fsm</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
<key>block_size</key>
<value>block/bpsym</value>
</param>
<param>
- <key>init_state</key>
- <value>-1</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
- <key>final_state</key>
- <value>-1</value>
+ <key>table</key>
+ <value>tot_mod[1]</value>
</param>
<param>
- <key>alias</key>
+ <key>affinity</key>
<value></value>
</param>
<param>
- <key>affinity</key>
- <value></value>
+ <key>dim</key>
+ <value>tot_mod[0]</value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>fsm_args</key>
+ <value>fsm</value>
+ </param>
+ <param>
+ <key>final_state</key>
+ <value>-1</value>
</param>
<param>
<key>_coordinate</key>
- <value>(480, 1271)</value>
+ <value>(352, 692)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>trellis_viterbi_combined_xx</key>
<param>
<key>id</key>
<value>trellis_viterbi_combined_xx_0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>init_state</key>
+ <value>-1</value>
</param>
<param>
<key>type</key>
<value>f</value>
</param>
<param>
- <key>out_type</key>
- <value>b</value>
- </param>
- <param>
- <key>fsm_args</key>
- <value>fsm</value>
- </param>
- <param>
- <key>block_size</key>
- <value>block/bpsym</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>init_state</key>
- <value>-1</value>
+ <key>metric_type</key>
+ <value>digital.TRELLIS_EUCLIDEAN</value>
</param>
<param>
- <key>final_state</key>
- <value>-1</value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>dim</key>
- <value>tot_mod[0]</value>
+ <key>out_type</key>
+ <value>b</value>
</param>
+ </block>
+ <block>
+ <key>trellis_viterbi_x</key>
<param>
- <key>table</key>
- <value>tot_mod[1]</value>
+ <key>alias</key>
+ <value></value>
</param>
<param>
- <key>metric_type</key>
- <value>digital.TRELLIS_EUCLIDEAN</value>
+ <key>block_size</key>
+ <value>block/bpsym</value>
</param>
<param>
- <key>alias</key>
+ <key>comment</key>
<value></value>
</param>
<param>
@@ -1328,210 +1531,217 @@
<value></value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>False</value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>fsm_args</key>
+ <value>fsm</value>
+ </param>
+ <param>
+ <key>final_state</key>
+ <value>-1</value>
</param>
<param>
<key>_coordinate</key>
- <value>(352, 1410)</value>
+ <value>(432, 548)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>blocks_unpack_k_bits_bb</key>
<param>
<key>id</key>
- <value>blocks_unpack_k_bits_bb_0</value>
+ <value>trellis_viterbi_x_0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>init_state</key>
+ <value>-1</value>
</param>
<param>
- <key>k</key>
- <value>bpsym</value>
+ <key>maxoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>minoutbuf</key>
+ <value>0</value>
</param>
<param>
- <key>affinity</key>
- <value></value>
+ <key>type</key>
+ <value>b</value>
</param>
+ </block>
+ <block>
+ <key>virtual_sink</key>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(728, 1364)</value>
+ <value>(1176, 396)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>blocks_pack_k_bits_bb</key>
<param>
<key>id</key>
- <value>blocks_pack_k_bits_bb_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
+ <value>virtual_sink_0</value>
</param>
<param>
- <key>k</key>
- <value>bpsym</value>
+ <key>stream_id</key>
+ <value>observation</value>
</param>
+ </block>
+ <block>
+ <key>virtual_sink</key>
<param>
- <key>alias</key>
+ <key>comment</key>
<value></value>
</param>
<param>
- <key>affinity</key>
- <value></value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>_coordinate</key>
+ <value>(216, 460)</value>
</param>
<param>
- <key>maxoutbuf</key>
+ <key>_rotation</key>
<value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(456, 572)</value>
+ <key>id</key>
+ <value>virtual_sink_0_0</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>stream_id</key>
+ <value>info</value>
</param>
</block>
<block>
- <key>trellis_encoder_xx</key>
+ <key>virtual_source</key>
<param>
- <key>id</key>
- <value>trellis_encoder_xx_0</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
<key>_enabled</key>
- <value>False</value>
- </param>
- <param>
- <key>type</key>
- <value>bs</value>
+ <value>True</value>
</param>
<param>
- <key>fsm_args</key>
- <value>fsm</value>
+ <key>_coordinate</key>
+ <value>(0, 740)</value>
</param>
<param>
- <key>init_state</key>
+ <key>_rotation</key>
<value>0</value>
</param>
<param>
- <key>alias</key>
- <value></value>
+ <key>id</key>
+ <value>virtual_source_0</value>
</param>
<param>
- <key>affinity</key>
- <value></value>
+ <key>stream_id</key>
+ <value>observation</value>
</param>
+ </block>
+ <block>
+ <key>virtual_source</key>
<param>
- <key>minoutbuf</key>
- <value>0</value>
+ <key>comment</key>
+ <value></value>
</param>
<param>
- <key>maxoutbuf</key>
- <value>0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(672, 461)</value>
+ <value>(416, 460)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
+ <param>
+ <key>id</key>
+ <value>virtual_source_0_0</value>
+ </param>
+ <param>
+ <key>stream_id</key>
+ <value>info</value>
+ </param>
</block>
<connection>
- <source_block_id>blks2_error_rate_0</source_block_id>
- <sink_block_id>wxgui_numbersink2_3_0_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>virtual_source_0_0</source_block_id>
- <sink_block_id>blks2_error_rate_0</sink_block_id>
+ <source_block_id>analog_random_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>virtual_source_0_0_0</source_block_id>
- <sink_block_id>blks2_error_rate_0</sink_block_id>
+ <source_block_id>analog_random_source_x_0</source_block_id>
+ <sink_block_id>virtual_sink_0_0</sink_block_id>
<source_key>0</source_key>
- <sink_key>1</sink_key>
+ <sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>virtual_source_0</source_block_id>
- <sink_block_id>trellis_metrics_x_0</sink_block_id>
+ <source_block_id>blks2_error_rate_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>trellis_metrics_x_0</source_block_id>
- <sink_block_id>trellis_viterbi_x_0</sink_block_id>
+ <source_block_id>blocks_add_xx_1</source_block_id>
+ <sink_block_id>blocks_null_sink_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>trellis_viterbi_combined_xx_0</sink_block_id>
+ <source_block_id>blocks_add_xx_1</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>analog_random_source_x_0</source_block_id>
- <sink_block_id>virtual_sink_0_0</sink_block_id>
+ <source_block_id>blocks_pack_k_bits_bb_0</source_block_id>
+ <sink_block_id>digital_chunks_to_symbols_xx_0_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>blocks_throttle_0</sink_block_id>
+ <source_block_id>blocks_pack_k_bits_bb_0</source_block_id>
+ <sink_block_id>trellis_encoder_xx_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_throttle_0</source_block_id>
+ <sink_block_id>blocks_pack_k_bits_bb_0</sink_block_id>
<source_key>0</source_key>
- <sink_key>1</sink_key>
+ <sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>blocks_add_xx_1</source_block_id>
- <sink_block_id>blocks_null_sink_1</sink_block_id>
+ <source_block_id>blocks_unpack_k_bits_bb_0</source_block_id>
+ <sink_block_id>blks2_error_rate_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_1</source_block_id>
- <sink_block_id>virtual_sink_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>
@@ -1548,50 +1758,44 @@
<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>trellis_encoder_xx_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_throttle_0</source_block_id>
- <sink_block_id>blocks_pack_k_bits_bb_0</sink_block_id>
+ <source_block_id>trellis_metrics_x_0</source_block_id>
+ <sink_block_id>trellis_viterbi_x_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>blocks_pack_k_bits_bb_0</source_block_id>
- <sink_block_id>digital_chunks_to_symbols_xx_0_0</sink_block_id>
+ <source_block_id>trellis_viterbi_combined_xx_0</source_block_id>
+ <sink_block_id>blocks_unpack_k_bits_bb_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>blocks_unpack_k_bits_bb_0</source_block_id>
- <sink_block_id>virtual_sink_0_1</sink_block_id>
+ <source_block_id>trellis_viterbi_x_0</source_block_id>
+ <sink_block_id>blocks_unpack_k_bits_bb_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>trellis_viterbi_x_0</source_block_id>
- <sink_block_id>blocks_unpack_k_bits_bb_0</sink_block_id>
+ <source_block_id>virtual_source_0</source_block_id>
+ <sink_block_id>trellis_metrics_x_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>trellis_viterbi_combined_xx_0</source_block_id>
- <sink_block_id>blocks_unpack_k_bits_bb_0</sink_block_id>
+ <source_block_id>virtual_source_0</source_block_id>
+ <sink_block_id>trellis_viterbi_combined_xx_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>blocks_pack_k_bits_bb_0</source_block_id>
- <sink_block_id>trellis_encoder_xx_0</sink_block_id>
+ <source_block_id>virtual_source_0_0</source_block_id>
+ <sink_block_id>blks2_error_rate_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
diff --git a/gr-uhd/CMakeLists.txt b/gr-uhd/CMakeLists.txt
index 6310822cf4..cb4fda82af 100644
--- a/gr-uhd/CMakeLists.txt
+++ b/gr-uhd/CMakeLists.txt
@@ -61,7 +61,6 @@ if(ENABLE_PYTHON)
add_subdirectory(python/uhd)
add_subdirectory(grc)
add_subdirectory(apps)
- add_subdirectory(examples/python)
add_subdirectory(examples/grc)
endif(ENABLE_PYTHON)
diff --git a/gr-uhd/apps/CMakeLists.txt b/gr-uhd/apps/CMakeLists.txt
index ce94a43cff..0d49b4ca9e 100644
--- a/gr-uhd/apps/CMakeLists.txt
+++ b/gr-uhd/apps/CMakeLists.txt
@@ -1,4 +1,4 @@
-# Copyright 2011 Free Software Foundation, Inc.
+# Copyright 2011,2016 Free Software Foundation, Inc.
#
# This file is part of GNU Radio
#
@@ -38,48 +38,3 @@ GR_PYTHON_INSTALL(
uhd_rx_nogui
DESTINATION ${GR_RUNTIME_DIR}
)
-
-########################################################################
-# Install hf radio apps
-########################################################################
-install(
- FILES
- hf_radio/hfir.sci
- hf_radio/radio.xml
- hf_radio/README.TXT
- hf_radio/ssb_taps
- DESTINATION ${GR_PKG_DATA_DIR}/examples/hf_radio
-)
-
-GR_PYTHON_INSTALL(
- PROGRAMS
- hf_radio/input.py
- hf_radio/output.py
- hf_radio/ssbagc.py
- hf_radio/ssbdemod.py
- hf_radio/startup.py
- DESTINATION ${GR_PKG_DATA_DIR}/examples/hf_radio
-)
-
-GR_PYTHON_INSTALL(
- PROGRAMS
- hf_radio/radio.py
- hf_radio/ui.py
- DESTINATION ${GR_PKG_DATA_DIR}/examples/hf_radio
-)
-
-########################################################################
-# Install hf explorer
-########################################################################
-install(
- FILES
- hf_explorer/README
- hf_explorer/hfx_help
- DESTINATION ${GR_PKG_DATA_DIR}/examples/hf_explorer
-)
-
-GR_PYTHON_INSTALL(
- PROGRAMS
- hf_explorer/hfx.py
- DESTINATION ${GR_PKG_DATA_DIR}/examples/hf_explorer
-)
diff --git a/gr-uhd/apps/hf_explorer/README b/gr-uhd/apps/hf_explorer/README
deleted file mode 100644
index 39b6b66cd0..0000000000
--- a/gr-uhd/apps/hf_explorer/README
+++ /dev/null
@@ -1,28 +0,0 @@
-hfx.py is meant to be a full-featured Long Wave / Medium Wave
-and Short Wave (250kHz to 30Mhz) AM and Single Sideband receiver.
-It uses the USRP with a Basic RX board, and will need an
-antenna and some preamps, about 30db gain will work. See the
-'Help' menu or hfx_help for more info.
-
-----------------------------------------------------------
-
-Powermate knob supported but not required, tooltip frequency display,
-single click tuning, AGC, record to disk, play from disk and record
-audio. Ability to tailor the audio passband with two sliders over the
-spectrum display. The sliders almost align with the actual
-frequency. Preset filter settings for LSB (-3000 to 0kHz), USB (0 to
-+3000kHz), CW (-400 to -800Hz) and AM (-5kHz from carrier to +5kHz).
-
-AM now switches in a synchronous PLL detector with the carriers at
-7.5kHz. Everything gets shifted up 7.5kHz in AM, center frequency,
-tooltips, etc. The target AM carrier needs to be closely tuned in, it
-will have a hollow sound until it is locked. The filter in AM is
-preset to 2500/12500 (7.5kHz +/- 5kHz) and is handy for removing
-adjacent channel interference.
-
-There is code for Web based control of frequency and volume - so
-I can tune the radio with a handheld device. Disabled by default - it
-takes a web server, some directories and scripts to use.
-
-
-
diff --git a/gr-uhd/apps/hf_explorer/hfx.py b/gr-uhd/apps/hf_explorer/hfx.py
deleted file mode 100755
index 043ab2ca92..0000000000
--- a/gr-uhd/apps/hf_explorer/hfx.py
+++ /dev/null
@@ -1,755 +0,0 @@
-#!/usr/bin/python
-#!/usr/bin/env python
-# generated by wxGlade 0.4 on Tue Mar 14 10:16:06 2006
-#
-# Copyright 2006,2011 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-#
-#-----------------------------------------------------------------
-#
-# +-->(fft)
-# |
-# (src)->(xlate)--+->(audio filter)--+-->(sel_am)-+--------------+
-# | | |
-# | (pll) |
-# | | |
-# | (pll_carrier_scale) |
-# | | |
-# | (pll_carrier_filter) |
-# | | |
-# | +--(fft2) |
-# | | |
-# | +--(c2f3)--+ |
-# | | | |
-# | (phaser1) (phaser2) |
-# | | | |
-# | +--(f2c)---+ |
-# | | V
-# V +---------->(am_det)
-# (c2f) |
-# | (c2f2)
-# | |
-# +-->(sel_sb)------------>(combine)
-# |
-# V
-# +--------------------------(scale)
-# | |
-# | |
-# | +++
-# V | |
-# (agc)<--(offset)<--(intr)<---(sqr1)
-# |
-# V
-# (dst)
-#
-#----------------------------------------------------------------------
-#
-# 3.0.1 - updated to support uhd correctly, old code for usrp had display negative, removed antenna tuner controls
-#
-
-# Web server control disabled by default. Do not enable
-# until directory structure and scripts are in place.
-WEB_CONTROL = False
-
-import os, wx, sys, math
-import wx.lib.evtmgr as em
-from gnuradio.wxgui import powermate, fftsink2
-from gnuradio import gr, audio, eng_notation
-from gnuradio import analog
-from gnuradio import filter
-from gnuradio import blocks
-from gnuradio.eng_option import eng_option
-from gnuradio import uhd
-from optparse import OptionParser
-
-n2s = eng_notation.num_to_str
-
-ID_BUTTON_1 = wx.NewId() # LSB button
-ID_BUTTON_2 = wx.NewId() # USB
-ID_BUTTON_3 = wx.NewId() # AM
-ID_BUTTON_4 = wx.NewId() # CW
-ID_BUTTON_5 = wx.NewId() # Powermate controls: Upper audio freq cutoff
-ID_BUTTON_6 = wx.NewId() # " Lower audio freq cutoff
-ID_BUTTON_7 = wx.NewId() # " Frequency
-ID_BUTTON_8 = wx.NewId() # " Volume
-ID_BUTTON_9 = wx.NewId() # " Time
-ID_BUTTON_10 = wx.NewId() # Time Seek Forwards
-ID_BUTTON_11 = wx.NewId() # Time Seek Backwards
-ID_TEXT_1 = wx.NewId() # Band Center, USRP ddc Freq
-ID_SPIN_1 = wx.NewId() # Frequency display and control
-ID_SLIDER_1 = wx.NewId() # Upper audio freq cutoff
-ID_SLIDER_2 = wx.NewId() # Lower audio freq cutoff
-ID_SLIDER_3 = wx.NewId() # Frequency
-ID_SLIDER_4 = wx.NewId() # Volume
-ID_SLIDER_5 = wx.NewId() # Programmable Gain Amp, PGA, RF gain
-ID_SLIDER_7 = wx.NewId() # AT control voltage output
-ID_EXIT = wx.NewId() # Menu Exit
-
-
-class MyFrame(wx.Frame):
- def __init__(self, *args, **kwds):
- # begin wxGlade: MyFrame.__init__
- kwds["style"] = wx.DEFAULT_FRAME_STYLE
- wx.Frame.__init__(self, *args, **kwds)
-
- # Menu Bar
- self.frame_1_menubar = wx.MenuBar()
- self.SetMenuBar(self.frame_1_menubar)
- wxglade_tmp_menu = wx.Menu()
- self.Exit = wx.MenuItem(wxglade_tmp_menu, ID_EXIT, "Exit",
- "Exit", wx.ITEM_NORMAL)
- wxglade_tmp_menu.AppendItem(self.Exit)
- self.frame_1_menubar.Append(wxglade_tmp_menu, "File")
- # Menu Bar end
- self.panel_1 = wx.Panel(self, -1)
- self.button_1 = wx.Button(self, ID_BUTTON_1, "LSB")
- self.button_2 = wx.Button(self, ID_BUTTON_2, "USB")
- self.button_3 = wx.Button(self, ID_BUTTON_3, "AM")
- self.button_4 = wx.Button(self, ID_BUTTON_4, "CW")
- self.button_5 = wx.ToggleButton(self, ID_BUTTON_5, "Upper")
- self.slider_fcutoff_hi = wx.Slider(self, ID_SLIDER_1, 0, -15798, 15799,
- style=wx.SL_HORIZONTAL|wx.SL_LABELS)
- self.button_6 = wx.ToggleButton(self, ID_BUTTON_6, "Lower")
- self.slider_fcutoff_lo = wx.Slider(self, ID_SLIDER_2, 0, -15799, 15798,
- style=wx.SL_HORIZONTAL|wx.SL_LABELS)
- self.panel_5 = wx.Panel(self, -1)
- self.label_1 = wx.StaticText(self, -1, " Band\nCenter")
- self.text_ctrl_1 = wx.TextCtrl(self, ID_TEXT_1, "")
- self.panel_6 = wx.Panel(self, -1)
- self.panel_7 = wx.Panel(self, -1)
- self.panel_2 = wx.Panel(self, -1)
- self.button_7 = wx.ToggleButton(self, ID_BUTTON_7, "Freq")
- self.slider_3 = wx.Slider(self, ID_SLIDER_3, 3000, 0, 6000)
- self.spin_ctrl_1 = wx.SpinCtrl(self, ID_SPIN_1, "", min=0, max=100)
- self.button_8 = wx.ToggleButton(self, ID_BUTTON_8, "Vol")
- self.slider_4 = wx.Slider(self, ID_SLIDER_4, 0, 0, 500)
- self.slider_5 = wx.Slider(self, ID_SLIDER_5, 0, 0, 20)
- self.button_9 = wx.ToggleButton(self, ID_BUTTON_9, "Time")
- self.button_11 = wx.Button(self, ID_BUTTON_11, "Rew")
- self.button_10 = wx.Button(self, ID_BUTTON_10, "Fwd")
- self.panel_3 = wx.Panel(self, -1)
- self.label_2 = wx.StaticText(self, -1, "PGA ")
- self.panel_4 = wx.Panel(self, -1)
- self.panel_8 = wx.Panel(self, -1)
- self.panel_9 = wx.Panel(self, -1)
- self.panel_10 = wx.Panel(self, -1)
- self.panel_11 = wx.Panel(self, -1)
- self.panel_12 = wx.Panel(self, -1)
-
- self.__set_properties()
- self.__do_layout()
- # end wxGlade
-
- parser = OptionParser (option_class=eng_option)
- parser.add_option("", "--args", type="string", default="addr=''",
- help="Arguments for UHD device, [default=%default]")
- parser.add_option("", "--spec", type="string", default="A:0",
- help="UHD device subdev spec, [default=%default]")
- parser.add_option ("-c", "--ddc-freq", type="eng_float", default=3.9e6,
- help="set Rx DDC frequency to FREQ", metavar="FREQ")
- parser.add_option ("-s", "--samp-rate", type="eng_float", default=256000,
- help="set sample rate (bandwidth) [default=%default]")
- parser.add_option ("-a", "--audio_file", default="",
- help="audio output file", metavar="FILE")
- parser.add_option ("-r", "--radio_file", default="",
- help="radio output file", metavar="FILE")
- parser.add_option ("-i", "--input_file", default="",
- help="radio input file", metavar="FILE")
- parser.add_option ("-O", "--audio-output", type="string", default="",
- help="audio output device name. E.g., hw:0,0, /dev/dsp, or pulse")
- parser.add_option ("", "--audio-rate", type="int", default=32000,
- help="audio output sample rate [default=%default]")
-
- (options, args) = parser.parse_args ()
-
- self.usrp_center = options.ddc_freq
- self.input_rate = input_rate = options.samp_rate
- self.slider_range = input_rate * 0.9375
- self.f_lo = self.usrp_center - (self.slider_range/2)
- self.f_hi = self.usrp_center + (self.slider_range/2)
- self.af_sample_rate = options.audio_rate
- self.tb = gr.top_block()
-
- # radio variables, initial conditions
- self.frequency = self.usrp_center
- # these map the frequency slider (0-6000) to the actual range
- self.f_slider_offset = self.f_lo
- self.f_slider_scale = 10000/250
- self.spin_ctrl_1.SetRange(self.f_lo,self.f_hi)
- self.text_ctrl_1.SetValue(str(int(self.usrp_center)))
- self.slider_5.SetValue(0)
- self.AM_mode = False
-
- self.slider_3.SetValue((self.frequency-self.f_slider_offset)/self.f_slider_scale)
- self.spin_ctrl_1.SetValue(int(self.frequency))
-
- POWERMATE = True
- try:
- self.pm = powermate.powermate(self)
- except:
- sys.stderr.write("Unable to find PowerMate or Contour Shuttle\n")
- POWERMATE = False
-
- if POWERMATE:
- powermate.EVT_POWERMATE_ROTATE(self, self.on_rotate)
- powermate.EVT_POWERMATE_BUTTON(self, self.on_pmButton)
- self.active_button = 7
-
- # command line options
- if options.audio_file == "": SAVE_AUDIO_TO_FILE = False
- else: SAVE_AUDIO_TO_FILE = True
- if options.radio_file == "": SAVE_RADIO_TO_FILE = False
- else: SAVE_RADIO_TO_FILE = True
- if options.input_file == "": self.PLAY_FROM_USRP = True
- else: self.PLAY_FROM_USRP = False
-
- if self.PLAY_FROM_USRP:
- self.src = uhd.usrp_source(options.args, stream_args=uhd.stream_args('fc32'))
- self.src.set_samp_rate(input_rate)
- self.src.set_subdev_spec(options.spec)
- self.input_rate = input_rate = self.src.get_samp_rate()
-
- self.src.set_center_freq(self.usrp_center, 0)
- self.tune_offset = 0
-
- fir_decim = long(self.input_rate / self.af_sample_rate)
- rrate = self.af_sample_rate / (self.input_rate / float(fir_decim))
-
-
- print "Actual Input Rate: ", self.input_rate
- print "FIR DECIM: ", fir_decim
- print "Remaining resampling: ", rrate
- print "Sampling Rate at Audio Sink: ", (self.input_rate / fir_decim) * rrate
- print "Request Rate at Audio Sink: ", self.af_sample_rate
-
- else:
- self.src = blocks.file_source (gr.sizeof_short,options.input_file)
- self.tune_offset = 2200 # 2200 works for 3.5-4Mhz band
-
- # convert rf data in interleaved short int form to complex
- s2ss = blocks.stream_to_streams(gr.sizeof_short,2)
- s2f1 = blocks.short_to_float()
- s2f2 = blocks.short_to_float()
- src_f2c = blocks.float_to_complex()
- self.tb.connect(self.src,s2ss)
- self.tb.connect((s2ss,0),s2f1)
- self.tb.connect((s2ss,1),s2f2)
- self.tb.connect(s2f1,(src_f2c,0))
- self.tb.connect(s2f2,(src_f2c,1))
-
- fir_decim = long(self.input_rate / self.af_sample_rate)
- rrate = self.af_sample_rate / (self.input_rate / float(fir_decim))
-
- print "FIR DECIM: ", fir_decim
- print "Remaining resampling: ", rrate
- print "Sampling Rate at Audio Sink: ", (self.input_rate / fir_decim) * rrate
- print "Request Rate at Audio Sink: ", self.af_sample_rate
-
- # save radio data to a file
- if SAVE_RADIO_TO_FILE:
- radio_file = blocks.file_sink(gr.sizeof_short, options.radio_file)
- self.tb.connect (self.src, radio_file)
-
- # 2nd DDC
- xlate_taps = filter.firdes.low_pass ( \
- 1.0, input_rate, 16e3, 4e3, filter.firdes.WIN_HAMMING )
- self.xlate = filter.freq_xlating_fir_filter_ccf ( \
- fir_decim, xlate_taps, self.tune_offset, input_rate )
-
- nflts = 32
- audio_coeffs = filter.firdes.complex_band_pass (
- nflts, # gain
- self.input_rate*nflts, # sample rate
- -3000.0, # low cutoff
- 0.0, # high cutoff
- 100.0, # transition
- filter.firdes.WIN_KAISER, 7.0) # window
- self.slider_fcutoff_hi.SetValue(0)
- self.slider_fcutoff_lo.SetValue(-3000)
-
- # Filter and resample based on actual radio's sample rate
- self.audio_filter = filter.pfb.arb_resampler_ccc(rrate, audio_coeffs)
-
- # Main +/- 16Khz spectrum display
- self.fft = fftsink2.fft_sink_c(self.panel_2, fft_size=512,
- sample_rate=self.af_sample_rate,
- average=True, size=(640,240),
- baseband_freq=self.usrp_center)
- c2f = blocks.complex_to_float()
-
-
- # AM branch
- self.sel_am = blocks.multiply_const_cc(0)
- # the following frequencies turn out to be in radians/sample
- # analog.pll_refout_cc(alpha,beta,min_freq,max_freq)
- # suggested alpha = X, beta = .25 * X * X
- pll = analog.pll_refout_cc(.05,(2.*math.pi*7.5e3/self.af_sample_rate),
- (2.*math.pi*6.5e3/self.af_sample_rate))
- self.pll_carrier_scale = blocks.multiply_const_cc(complex(10,0))
- am_det = blocks.multiply_cc()
- # these are for converting +7.5kHz to -7.5kHz
- # for some reason blocks.conjugate_cc() adds noise ??
- c2f2 = blocks.complex_to_float()
- c2f3 = blocks.complex_to_float()
- f2c = blocks.float_to_complex()
- phaser1 = blocks.multiply_const_ff(1)
- phaser2 = blocks.multiply_const_ff(-1)
-
- # filter for pll generated carrier
- pll_carrier_coeffs = filter.firdes.complex_band_pass (
- 2.0, # gain
- self.af_sample_rate, # sample rate
- 7400, # low cutoff
- 7600, # high cutoff
- 100, # transition
- filter.firdes.WIN_HAMMING) # window
-
- self.pll_carrier_filter = filter.fir_filter_ccc (1, pll_carrier_coeffs)
-
- self.sel_sb = blocks.multiply_const_ff(1)
- combine = blocks.add_ff()
-
- #AGC
- sqr1 = blocks.multiply_ff()
- intr = filter.iir_filter_ffd( [.004, 0], [0, .999] )
- offset = blocks.add_const_ff(1)
- agc = blocks.divide_ff()
-
- self.scale = blocks.multiply_const_ff(0.00001)
- dst = audio.sink(long(self.af_sample_rate),
- options.audio_output)
-
-
- if self.PLAY_FROM_USRP:
- self.tb.connect(self.src, self.xlate, self.fft)
- else:
- self.tb.connect(src_f2c, self.xlate, self.fft)
-
- self.tb.connect(self.xlate,self.audio_filter,self.sel_am,(am_det,0))
- self.tb.connect(self.sel_am,pll,self.pll_carrier_scale,
- self.pll_carrier_filter,c2f3)
- self.tb.connect((c2f3,0),phaser1,(f2c,0))
- self.tb.connect((c2f3,1),phaser2,(f2c,1))
- self.tb.connect(f2c,(am_det,1))
- self.tb.connect(am_det,c2f2,(combine,0))
- self.tb.connect(self.audio_filter,c2f,
- self.sel_sb,(combine,1))
-
-
- self.tb.connect(combine,self.scale)
- self.tb.connect(self.scale,(sqr1,0))
- self.tb.connect(self.scale,(sqr1,1))
- self.tb.connect(sqr1, intr, offset, (agc, 1))
- self.tb.connect(self.scale,(agc, 0))
- self.tb.connect(agc, blocks.null_sink(gr.sizeof_float))
- self.tb.connect(c2f3, dst)
-
- if SAVE_AUDIO_TO_FILE:
- f_out = blocks.file_sink(gr.sizeof_short,options.audio_file)
- sc1 = blocks.multiply_const_ff(64000)
- f2s1 = blocks.float_to_short()
- self.tb.connect(agc,sc1,f2s1,f_out)
-
- self.tb.start()
-
- # left click to re-tune
- self.fft.win.plotter.Bind(wx.EVT_LEFT_DOWN, self.Click)
-
- # start a timer to check for web commands
- if WEB_CONTROL:
- self.timer = UpdateTimer(self, 1000) # every 1000 mSec, 1 Sec
-
-
- wx.EVT_BUTTON(self,ID_BUTTON_1,self.set_lsb)
- wx.EVT_BUTTON(self,ID_BUTTON_2,self.set_usb)
- wx.EVT_BUTTON(self,ID_BUTTON_3,self.set_am)
- wx.EVT_BUTTON(self,ID_BUTTON_4,self.set_cw)
- wx.EVT_BUTTON(self,ID_BUTTON_10,self.fwd)
- wx.EVT_BUTTON(self,ID_BUTTON_11,self.rew)
- wx.EVT_TOGGLEBUTTON(self,ID_BUTTON_5,self.on_button)
- wx.EVT_TOGGLEBUTTON(self,ID_BUTTON_6,self.on_button)
- wx.EVT_TOGGLEBUTTON(self,ID_BUTTON_7,self.on_button)
- wx.EVT_TOGGLEBUTTON(self,ID_BUTTON_8,self.on_button)
- wx.EVT_TOGGLEBUTTON(self,ID_BUTTON_9,self.on_button)
- wx.EVT_SLIDER(self,ID_SLIDER_1,self.set_filter)
- wx.EVT_SLIDER(self,ID_SLIDER_2,self.set_filter)
- wx.EVT_SLIDER(self,ID_SLIDER_3,self.slide_tune)
- wx.EVT_SLIDER(self,ID_SLIDER_4,self.set_volume)
- wx.EVT_SLIDER(self,ID_SLIDER_5,self.set_pga)
- wx.EVT_SPINCTRL(self,ID_SPIN_1,self.spin_tune)
-
- wx.EVT_MENU(self, ID_EXIT, self.TimeToQuit)
-
- def __set_properties(self):
- # begin wxGlade: MyFrame.__set_properties
- self.SetTitle("HF Explorer")
- self.slider_fcutoff_hi.SetMinSize((650, 38))
- self.slider_fcutoff_lo.SetMinSize((650, 38))
- self.panel_2.SetMinSize((800, 400))
- self.button_7.SetValue(1)
- self.slider_3.SetMinSize((650, 19))
- self.slider_4.SetMinSize((275, 19))
- self.slider_5.SetMinSize((275, 19))
- # end wxGlade
-
- def __do_layout(self):
- # begin wxGlade: MyFrame.__do_layout
- sizer_1 = wx.BoxSizer(wx.VERTICAL)
- grid_sizer_1 = wx.FlexGridSizer(11, 2, 0, 0)
- sizer_7 = wx.BoxSizer(wx.HORIZONTAL)
- sizer_5 = wx.BoxSizer(wx.HORIZONTAL)
- sizer_4 = wx.BoxSizer(wx.HORIZONTAL)
- sizer_3 = wx.BoxSizer(wx.HORIZONTAL)
- sizer_6 = wx.BoxSizer(wx.VERTICAL)
- sizer_2 = wx.BoxSizer(wx.HORIZONTAL)
- grid_sizer_1.Add(self.panel_1, 1, wx.EXPAND, 0)
- sizer_2.Add(self.button_1, 0, wx.ADJUST_MINSIZE, 0)
- sizer_2.Add(self.button_2, 0, wx.ADJUST_MINSIZE, 0)
- sizer_2.Add(self.button_3, 0, wx.ADJUST_MINSIZE, 0)
- sizer_2.Add(self.button_4, 0, wx.ADJUST_MINSIZE, 0)
- grid_sizer_1.Add(sizer_2, 1, wx.EXPAND, 0)
- grid_sizer_1.Add(self.button_5, 0, wx.ADJUST_MINSIZE, 0)
- grid_sizer_1.Add(self.slider_fcutoff_hi, 0,
- wx.ALIGN_LEFT|wx.ADJUST_MINSIZE, 0)
- grid_sizer_1.Add(self.button_6, 0, wx.ADJUST_MINSIZE, 0)
- grid_sizer_1.Add(self.slider_fcutoff_lo, 0,
- wx.ALIGN_LEFT|wx.ADJUST_MINSIZE, 0)
- sizer_6.Add(self.panel_5, 1, wx.EXPAND, 0)
- sizer_6.Add(self.label_1, 0,
- wx.ALIGN_CENTER_HORIZONTAL|wx.ADJUST_MINSIZE, 0)
- sizer_6.Add(self.text_ctrl_1, 0, wx.ADJUST_MINSIZE, 0)
- sizer_6.Add(self.panel_6, 1, wx.EXPAND, 0)
- sizer_6.Add(self.panel_7, 1, wx.EXPAND, 0)
- grid_sizer_1.Add(sizer_6, 1, wx.EXPAND, 0)
- grid_sizer_1.Add(self.panel_2, 1, wx.EXPAND, 0)
- grid_sizer_1.Add(self.button_7, 0, wx.ADJUST_MINSIZE, 0)
- sizer_3.Add(self.slider_3, 0, wx.ADJUST_MINSIZE, 0)
- sizer_3.Add(self.spin_ctrl_1, 0, wx.ADJUST_MINSIZE, 0)
- grid_sizer_1.Add(sizer_3, 1, wx.EXPAND, 0)
- grid_sizer_1.Add(self.button_8, 0, wx.ADJUST_MINSIZE, 0)
- sizer_4.Add(self.slider_4, 0, wx.ADJUST_MINSIZE, 0)
- sizer_4.Add(self.slider_5, 0, wx.ADJUST_MINSIZE, 0)
- grid_sizer_1.Add(sizer_4, 1, wx.EXPAND, 0)
- grid_sizer_1.Add(self.button_9, 0, wx.ADJUST_MINSIZE, 0)
- sizer_5.Add(self.button_11, 0, wx.ADJUST_MINSIZE, 0)
- sizer_5.Add(self.button_10, 0, wx.ADJUST_MINSIZE, 0)
- sizer_5.Add(self.panel_3, 1, wx.EXPAND, 0)
- sizer_5.Add(self.label_2, 0, wx.ADJUST_MINSIZE, 0)
- sizer_5.Add(self.panel_4, 1, wx.EXPAND, 0)
- grid_sizer_1.Add(sizer_5, 1, wx.EXPAND, 0)
- grid_sizer_1.Add(self.panel_8, 1, wx.EXPAND, 0)
- grid_sizer_1.Add(self.panel_9, 1, wx.EXPAND, 0)
- grid_sizer_1.Add(self.panel_10, 1, wx.EXPAND, 0)
- sizer_7.Add(self.panel_11, 1, wx.EXPAND, 0)
- sizer_7.Add(self.panel_12, 1, wx.EXPAND, 0)
- grid_sizer_1.Add(sizer_7, 1, wx.EXPAND, 0)
- sizer_1.Add(grid_sizer_1, 1, wx.EXPAND, 0)
- self.SetAutoLayout(True)
- self.SetSizer(sizer_1)
- sizer_1.Fit(self)
- sizer_1.SetSizeHints(self)
- self.Layout()
- # end wxGlade
-
- # Menu exit
- def TimeToQuit(self, event):
- self.tb.stop()
- self.Close(True)
-
- # Powermate being turned
- def on_rotate(self, event):
- if self.active_button == 5:
- self.slider_fcutoff_hi.SetValue(self.slider_fcutoff_hi.GetValue()+event.delta)
- if self.slider_fcutoff_lo.GetValue() > (self.slider_fcutoff_hi.GetValue() - 200) :
- self.slider_fcutoff_lo.SetValue(self.slider_fcutoff_hi.GetValue() - 200)
- self.filter()
- if self.active_button == 6:
- self.slider_fcutoff_lo.SetValue(self.slider_fcutoff_lo.GetValue()+event.delta)
- if self.slider_fcutoff_hi.GetValue() < (self.slider_fcutoff_lo.GetValue() + 200) :
- self.slider_fcutoff_hi.SetValue(self.slider_fcutoff_lo.GetValue() + 200)
- self.filter()
- if self.active_button == 7:
- new = max(0, min(6000, self.slider_3.GetValue() + event.delta))
- self.slider_3.SetValue(new)
- self.frequency = (self.f_slider_scale * new) + self.f_slider_offset
- self.spin_ctrl_1.SetValue(self.frequency)
- if self.AM_mode == False:
- self.xlate.set_center_freq( (self.frequency - self.tune_offset) - self.usrp_center)
- self.fft.set_baseband_freq( self.frequency - self.tune_offset )
- else:
- self.xlate.set_center_freq( (self.frequency - self.tune_offset - 7.5e3) - self.usrp_center)
- self.fft.set_baseband_freq( self.frequency - self.tune_offset - 7.5e3 )
- if self.active_button == 8:
- new = max(0, min(500, self.slider_4.GetValue() + event.delta))
- self.slider_4.SetValue(new)
- self.scale.set_k(math.pow(10.,((self.slider_4.GetValue()-500.)/100.)))
- if self.active_button == 9:
- if self.PLAY_FROM_USRP == False:
- if event.delta == -1:
- self.src.seek(-1000000,gr.SEEK_CUR)
- elif event.delta == 1:
- self.src.seek(1000000,gr.SEEK_CUR)
-
-
- # Powermate pressed to switch controlled function
- def on_pmButton(self, event):
- if event.value == 0:
- if self.active_button == 5:
- self.active_button = 6
- self.button_5.SetValue(False)
- self.button_6.SetValue(True)
- elif self.active_button == 6:
- self.active_button = 7
- self.button_6.SetValue(False)
- self.button_7.SetValue(True)
- elif self.active_button == 7:
- self.active_button = 8
- self.button_7.SetValue(False)
- self.button_8.SetValue(True)
- elif self.active_button == 8:
- self.active_button = 9
- self.button_8.SetValue(False)
- self.button_9.SetValue(True)
- elif self.active_button == 9:
- self.active_button = 5
- self.button_9.SetValue(False)
- self.button_5.SetValue(True)
-
- # Clicking one PM control button turns the rest off
- def on_button(self, event):
- id = event.GetId()
- if id == ID_BUTTON_5:
- self.active_button = 5
- self.button_6.SetValue(False)
- self.button_7.SetValue(False)
- self.button_8.SetValue(False)
- self.button_9.SetValue(False)
- if id == ID_BUTTON_6:
- self.active_button = 6
- self.button_5.SetValue(False)
- self.button_7.SetValue(False)
- self.button_8.SetValue(False)
- self.button_9.SetValue(False)
- if id == ID_BUTTON_7:
- self.active_button = 7
- self.button_5.SetValue(False)
- self.button_6.SetValue(False)
- self.button_8.SetValue(False)
- self.button_9.SetValue(False)
- if id == ID_BUTTON_8:
- self.active_button = 8
- self.button_5.SetValue(False)
- self.button_6.SetValue(False)
- self.button_7.SetValue(False)
- self.button_9.SetValue(False)
- if id == ID_BUTTON_9:
- self.active_button = 9
- self.button_5.SetValue(False)
- self.button_6.SetValue(False)
- self.button_7.SetValue(False)
- self.button_8.SetValue(False)
-
- # Make sure filter settings are legal
- def set_filter(self, event):
- slider = event.GetId()
- slider1 = self.slider_fcutoff_hi.GetValue()
- slider2 = self.slider_fcutoff_lo.GetValue()
- if slider == ID_SLIDER_1:
- if slider2 > (self.slider_fcutoff_hi.GetValue() - 200) :
- self.slider_fcutoff_lo.SetValue(slider1 - 200)
- elif slider == ID_SLIDER_2:
- if slider1 < (self.slider_fcutoff_lo.GetValue() + 200) :
- self.slider_fcutoff_hi.SetValue(slider2 + 200)
- self.filter()
-
- # Calculate taps and apply
- def filter(self):
- nflts = 32
- audio_coeffs = filter.firdes.complex_band_pass (
- nflts, # gain
- self.input_rate*nflts, # sample rate
- self.slider_fcutoff_lo.GetValue(), # low cutoff
- self.slider_fcutoff_hi.GetValue(), # high cutoff
- 100.0, # transition
- filter.firdes.WIN_KAISER, 7.0) # window
- self.audio_filter.set_taps(audio_coeffs)
-
- def set_lsb(self, event):
- self.AM_mode = False
- self.xlate.set_center_freq( (self.frequency - self.tune_offset) - self.usrp_center)
- self.fft.set_baseband_freq( self.frequency - self.tune_offset )
- self.sel_sb.set_k(1)
- self.sel_am.set_k(0)
- self.slider_fcutoff_hi.SetValue(0)
- self.slider_fcutoff_lo.SetValue(-3000)
- self.filter()
-
- def set_usb(self, event):
- self.AM_mode = False
- self.xlate.set_center_freq( (self.frequency - self.tune_offset) - self.usrp_center)
- self.fft.set_baseband_freq( self.frequency - self.tune_offset )
- self.sel_sb.set_k(1)
- self.sel_am.set_k(0)
- self.slider_fcutoff_hi.SetValue(3000)
- self.slider_fcutoff_lo.SetValue(0)
- self.filter()
-
- def set_am(self, event):
- self.AM_mode = True
- self.xlate.set_center_freq( (self.frequency - self.tune_offset - 7.5e3) - self.usrp_center)
- self.fft.set_baseband_freq( self.frequency - self.tune_offset - 7.5e3 )
- self.sel_sb.set_k(0)
- self.sel_am.set_k(1)
- self.slider_fcutoff_hi.SetValue(12500)
- self.slider_fcutoff_lo.SetValue(2500)
- self.filter()
-
- def set_cw(self, event):
- self.AM_mode = False
- self.xlate.set_center_freq( (self.frequency - self.tune_offset) - self.usrp_center)
- self.fft.set_baseband_freq( self.frequency - self.tune_offset )
- self.AM_mode = False
- self.sel_sb.set_k(1)
- self.sel_am.set_k(0)
- self.slider_fcutoff_hi.SetValue(-400)
- self.slider_fcutoff_lo.SetValue(-800)
- self.filter()
-
- def set_volume(self, event):
- self.scale.set_k(math.pow(10.,((self.slider_4.GetValue()-500.)/100.)))
-
- def set_pga(self,event):
- if self.PLAY_FROM_USRP:
- self.src.set_gain(self.slider_5.GetValue())
-
- def slide_tune(self, event):
- self.frequency = (self.f_slider_scale * self.slider_3.GetValue()) + self.f_slider_offset
- if self.AM_mode == False:
- self.xlate.set_center_freq( (self.frequency - self.tune_offset) - self.usrp_center)
- self.fft.set_baseband_freq( self.frequency - self.tune_offset )
- else:
- self.xlate.set_center_freq( (self.frequency - self.tune_offset - 7.5e3) - self.usrp_center)
- self.fft.set_baseband_freq( self.frequency - self.tune_offset - 7.5e3 )
- self.spin_ctrl_1.SetValue(self.frequency)
-
- def spin_tune(self, event):
- self.frequency = self.spin_ctrl_1.GetValue()
- if self.AM_mode == False:
- self.xlate.set_center_freq( (self.frequency - self.tune_offset) - self.usrp_center)
- self.fft.set_baseband_freq( self.frequency - self.tune_offset )
- else:
- self.xlate.set_center_freq( (self.frequency - self.tune_offset - 7.5e3) - self.usrp_center)
- self.fft.set_baseband_freq( self.frequency - self.tune_offset - 7.5e3 )
- self.slider_3.SetValue(int((self.frequency-self.f_slider_offset)/self.f_slider_scale))
-
- # Seek forwards in file
- def fwd(self, event):
- if self.PLAY_FROM_USRP == False:
- self.src.seek(10000000,gr.SEEK_CUR)
-
- # Seek backwards in file
- def rew(self, event):
- if self.PLAY_FROM_USRP == False:
- self.src.seek(-10000000,gr.SEEK_CUR)
-
- # Mouse clicked on fft display - change frequency
- def Click(self,event):
- fRel = ( event.GetX() - 340. ) / 18.125
- if self.AM_mode == False:
- self.frequency = self.frequency + (fRel*1e3)
- else:
- self.frequency = self.frequency + (fRel*1e3) - 7.5e3
- self.spin_ctrl_1.SetValue(int(self.frequency))
- self.slider_3.SetValue(int((self.frequency-self.f_slider_offset)/self.f_slider_scale))
- if self.AM_mode == False:
- self.xlate.set_center_freq ( ( self.frequency - self.tune_offset ) - self.usrp_center)
- self.fft.set_baseband_freq( self.frequency - self.tune_offset )
- else:
- self.xlate.set_center_freq( (self.frequency - self.tune_offset - 7.5e3) - self.usrp_center)
- self.fft.set_baseband_freq( self.frequency - self.tune_offset - 7.5e3 )
-
-
- # Timer events - check for web commands
- def OnUpdate(self):
- cmds = os.listdir("/var/www/cgi-bin/commands/")
- if cmds!=[]:
- if cmds[0]=='chfreq':
- fd=open("/var/www/cgi-bin/commands/chfreq","r")
- new=fd.readline()
- fd.close()
- if new!='':
- os.unlink("/var/www/cgi-bin/commands/chfreq")
- if ( int(new) >= self.f_lo ) & ( int(new) <= self.f_hi ):
- self.frequency = int(new)
- self.slider_3.SetValue(( self.frequency - self.f_slider_offset) / self.f_slider_scale )
- self.spin_ctrl_1.SetValue(self.frequency)
- if self.AM_mode:
- self.xlate.set_center_freq ( ( self.frequency - self.tune_offset - 7.5e3 ) - self.usrp_center)
- self.fft.set_baseband_freq( self.frequency - self.tune_offset )
- else:
- self.xlate.set_center_freq ( ( self.frequency - self.tune_offset ) - self.usrp_center)
- self.fft.set_baseband_freq( self.frequency - self.tune_offset - 7.5e3 )
-
- if cmds[0]=='chvolume':
- fd=open("/var/www/cgi-bin/commands/chvolume","r")
- new=fd.readline()
- fd.close()
- if new!='':
- os.unlink("/var/www/cgi-bin/commands/chvolume")
- if ( int(new) >= 0 ) & ( int(new) <= 500 ):
- self.volume = int(new)
- self.slider_4.SetValue(self.volume)
- self.scale.set_k(math.pow(10.,((self.slider_4.GetValue()-500.)/100.)))
-
- else: # no new web commands, update state
- fh = open("/var/www/cgi-bin/state/freq","w")
- fh.write(str(int(self.frequency))+'\n')
- fh.close()
- fh = open("/var/www/cgi-bin/state/volume","w")
- fh.write(str(self.slider_4.GetValue())+'\n')
- fh.close()
-
-
-# end of class MyFrame
-
-# wx.Timer to check for web updates
-class UpdateTimer(wx.Timer):
- def __init__(self, target, dur=1000):
- wx.Timer.__init__(self)
- self.target = target
- self.Start(dur)
-
- def Notify(self):
- """Called every timer interval"""
- if self.target:
- self.target.OnUpdate()
-
-
-class MyApp(wx.App):
- def OnInit(self):
- frame = MyFrame(None, -1, "HF Explorer")
- frame.Show(True)
- self.SetTopWindow(frame)
- return True
-
-
-if __name__ == "__main__":
- app = MyApp(0)
- app.MainLoop()
-
diff --git a/gr-uhd/apps/hf_explorer/hfx_help b/gr-uhd/apps/hf_explorer/hfx_help
deleted file mode 100644
index c8fa28dbd1..0000000000
--- a/gr-uhd/apps/hf_explorer/hfx_help
+++ /dev/null
@@ -1,180 +0,0 @@
-
- HF Explorer Help
-
- -----------------------------------------------------------------------
-
- Command Line Switches:
-
- -c DDC center frequency, set band.
- -c 7.2e6 or -c 7.2M for 40 meter ham band.
- Default is 3.9e6 80 meter ham band.
- Example:
-
- hfx.py -c 9500k
-
- starts up in the 31 meter band.
-
- -a Audio output file. Output file for 32kHz two channel
- signed word audio. Two channels are used for
- independent sideband. This file can be converted
- to a wav file with sox. Example:
-
- sox -c 2 -r 3200 file.sw file.wav
-
- sox needs the .sw extension to indicate file type.
- If not specified no audio file is created.
-
- -r Radio output file. File to write RF data to for later
- demodulation. Records the entire band to disk, width
- determined by sample rate/decimation. Be sure to
- note the decimation and center freq for later use!
- Example:
-
- hfx.py -c 900e3 -d 80 -r rf_data_AM-c900e3-d80
-
- writes a pre-demod rf file centered on 900kHz with a
- bandwidth of 800kHz (That's 80 AM stations!). The
- center and decimation could be put in the filename for
- proper use later.
- If not specified no rf data file is created.
- At default 250 decimation disk usage is about
- 8Gb / hour.
-
- -i Radio input file. Use to play back a previously
- recorded rf data file. Example:
-
- hfx.py -c 900e3 -d 80 -i rf_data_AM-c900e3-d80
-
- plays back the previously recorded band, no
- usrp hardware needed. Tune about the 800kHz wide band.
- When playing a recorded file, time controls
- fast-forward and rewind are available.
-
- -d Decimation. Sets sample rate and bandwidth.
- This is the factor that the usrp sample rate, 64e6,
- is divided by. Default is 250 for 256kHz bandwidth
- which is enough to record a ham band without
- eating up disk space too fast. The 64e6 sample
- rate limits the upper practical frequency to 32MHz.
- The Basic RX transformer limits the lower frequency
- to about 200kHz.
-
-
- Powermate Knob:
-
- A Powermate knob is recommended but not necessary. If a knob
- is used, it is in one of 3 or 4 modes controlling frequency,
- volume, filter and (if playing a recorded file) time.
- Pushing the knob switches mode and the buttons on the HFX panel
- change to show which mode is in effect. Then just turn the knob
- to set frequency, volume, filter or go fast forward or rewind.
-
-
- Bandswitch:
-
- Across the top are a set of predefined bands and buttons
- to rapidly switch to the center of that band. To change a band,
- type the frequency in Hz into the box under "Center Frequency",
- then press "Set" on the left, then the button you want to
- program. From then on (untill the program is exited) pushing
- that button takes you to that band. To make a band button
- permenant edit the hfx.py script with whatever frequency you
- want assigned to what button.
-
-
- Frequency:
-
- There are 6 ways to set the frequency.
- 1) Move the slider with the mouse
- 2) Use the Spin Control up/down arrows (very fine 1Hz control)
- 3) Type the frequency in Hz into the Spin Control
- 4) Turn the Powermate knob
- 5) Web control.
- 6) Clicking on the FFT display to set demod center. This is very
- convenient for tuning +-15kHz when you see a signal on the
- display. If in Lower Sideband, clicking just to the right of
- a signal will tune to it immediately. Clicking several times
- on the far right right or left of the display will rapidly
- tune up or down the band.
-
-
- Volume:
-
- Move the volume slider with the mouse, or push the Powermate knob
- untill the volume button is active, or click on the volume button,
- then turn the knob. Volume can also be set by web control if web
- control is setup and enabled.
-
-
- Filter:
-
- Similar to volume, switches in any of 30 audio filters from 600
- to 3600Hz in Sideband or up to 5kHz in AM.
-
-
- Mode:
-
- Demodulation modes are chosen by clicking on the buttons for
- Lower Sideband, Upper Sideband, or AM.
-
-
- PGA:
-
- PGA slider sets the rf gain in the Analog-to-Digital converter
- before digitizing. 0 to 20db gain easily shows up on the FFT
- display.
-
-
- Time:
-
- When playing back a recorded RF data file, you can enjoy the
- freedom of rewinding or fast-forwarding. Replay a weak signal
- or skip through annoying AM commercials.
-
-
- Antennas and Preamps:
-
- The USRP Basic RX board is not sensitive enough for anything but
- the strongest signals. In my experience about 40 db of small
- signal gain is required to make the HFX as sensitive as other
- receivers. Some working amplifiers are the Ramsey PR-2 with 20db
- gain, fairly low noise and more bandwidth than we can use here.
- Also the amp modules from Advanced Receiver Research are nice.
- I use an ARR 7-7.4MHz GaAsFET 29db amp with .5db noise at the
- apex of a 40 meter dipole with excellent results. Another
- amp I like is a Minicircuits ZHL-32A 29db amp but they are
- expensive and hard to find. Also it may help to use some filters
- to keep strong local signals from the ADC, or limit rf input
- to the band of interest, etc.
- Resonant outdoor antennas, like a dipole, in a low-noise (away
- from consumer electronics) environment are nice. Long random wires
- with a tuner work. I like a small indoor tuned loop made from 10ft
- of 1/4" copper tube, a 365pf tuning cap and a pickup loop connected
- to rg-58.
-
-
- Web Control:
-
- To control your radio remotely, ensure you have a web server
- (Apache, etc) working and a compatible directory structure in
- place. Directories /var/www/cgi-bin/commands and
- /var/www/cgi-bin/state must already exist. You will need a
- home page with forms and a set of scripts to put commands in
- and put the current state on the home page. email me for further
- help. Setting WEB_CONTROL to True in hfx.py turns on the timers
- that check for commands and update the state.
-
-
- IF Output:
-
- There is a provision for outputting un-demodulated complex
- through the audio out in stereo for use with Digital Radio
- Mondial (DRM) or using a seperate demodulation program like
- SDRadio (by I2PHD).
- Set IF_OUTPUT to True in weaver_isb_am1_usrp4.py.
-
-
- --Good luck and happy LW/MW/SW Exploring.
- Chuck
- chuckek@musicriver.homeunix.com
-
diff --git a/gr-uhd/apps/hf_radio/README.TXT b/gr-uhd/apps/hf_radio/README.TXT
deleted file mode 100644
index c5c57f8479..0000000000
--- a/gr-uhd/apps/hf_radio/README.TXT
+++ /dev/null
@@ -1,60 +0,0 @@
-# 2008-02-07
-#
-# These files have not yet been update to use the new top_block/hier_block2
-# interfaces. Until someone does that, this files will no longer run.
-#
-
-
-The files in this directory implement a fairly simple HF radio that works
-with the basic rx daughter board on the USRP.
-
-Many thanks to the Gnu Radio folks for a great new way to waste large blocks
-of time in infinitely tweaking a huge number of free parameters.
-
-Start the receiver by running the radio.py in this directory. Or from the
-Python prompt type "from radio import *" and you'll get the prompt back
-with the receiver running. You can then poke around to see what's going on.
-
-There are two spectrum displays. One is the output of the USRP and displays
-about 300KHz of bandwidth centered at the current tuning freq. The other
-displays the output spectrum of the demodulator.
-
-The demodulator does AM demod using the complex modulus block from gr. It
-does SSB demod using the frequency translating fir filter as a complex
-hilbert transformer. The taps for this filter were generated using a program
-called Scilab and the Scilab program in the file hfir.sci. More details in
-the associated files.
-
-Tune the receiver using the spin buttons under the big frequency display.
-
-The agc block is a roll your own. The standard agc in the newer CVS updates
-seems to work but doesn't seem to have adjustable time constants or provide
-access to internal signal nodes which are used for the RSSI.
-
-The AGC authority (a sort of gain parameter) and the reference level used
-in the power to dB computagion can be adjusted using the spin buttons.
-
-The audio bandwidth can be similarly adjusted from about 50Hz to 10KHz.
-
-The GUI layout was produced using wxGlade. The file radio.xml is the GUI
-specification. It will produce a file called ui.py which is subclassed
-by classes defined in radio.py. The ui.py is purely generated by wxGlade
-all app specific code for the GUI is in radio.py.
-
-Most of the actual signal processing code is built up in the other included
-files using the hierarchical block facilities. This organization should
-make it easier to tweak to your heart's content.
-
-Known bugs weakness and other
-
-wxPython and wxGlade seem to conspire to insure that the layout can never
-be exactly what you have in mind.
-
-Some of the controls don't behave as one might like. wx spin controls
-and spin boxes only support integers so it is rather a nuisance to make
-units come out nice. In the process of development I came up with a reasonable
-kluge so there is a mixture of approaches.
-
-Enjoy.
-
-M. Revnell 2006-Jan-06
diff --git a/gr-uhd/apps/hf_radio/hfir.sci b/gr-uhd/apps/hf_radio/hfir.sci
deleted file mode 100644
index 64f5385d73..0000000000
--- a/gr-uhd/apps/hf_radio/hfir.sci
+++ /dev/null
@@ -1,59 +0,0 @@
-// designs a complex tap fir filter akin to the hilbert transformer.
-//
-// The hilbert transformer is classified as a linear phase fir
-// with allpass magnitude response and 90 degree phase response for
-// positive frequencies and -90 degrees phase for negative frequencies.
-// Or, if you prefer, normalized frequencies between .5 and 1 since
-// negative frequencies don't really have much meaning outside the complex
-// domain.
-//
-// Normally one would use the hilbert transformer in one leg of a complex
-// processing block and a compensating delay in the other.
-//
-// This one differs in the following respects:
-// It is low pass with a cutoff of .078125
-// The filter is a lowpass kaiser windowed filter with parameter 3
-// The phase response is 45 degrees for positive frequencies and -45
-// for negative frequencies.
-// The coefficent set is used in one path and the same coefficients
-// are used time reversed in the other. This results in the net effect
-// of +/- 90 degrees as in the usual hilbert application.
-//
-// The coefficient set can be used in the gnuradio frequency translating
-// fir filter for ssb demodulation.
-//
-// This isn't as computationally efficient as using the hilbert transformer
-// and compensating delay but fascinating none the less.
-//
-// This program is for the scilab language a very powerful free math
-// package similar to Matlab with infinitely better price/performace.
-//
-// compute the prototype lowpass fir
-// length is 255 (odd) for the same symmetry reasons as the hilbert transformer
-
-len = 1023;
-l2 = floor(len/2);
-md = l2 + 1;
-l3 = md + 1;
-
-h = wfir( 'lp', len, [10.0/256 0], 'kr', [3 0] );
-
-H = fft(h);
-
-H(1:l2)=H(1:l2)*exp(%i*%pi/4);
-H(md)=0+%i*0;
-H(l3:len)=H(l3:len)*exp(-%i*%pi/4);
-
-j=real(ifft(H));
-k(1:len)=j(len:-1:1);
-x=j+%i.*k;
-X=fft(x);
-plot(abs(X))
-
-f = file('open','taps')
-for i=(1:len)
- fprintf( f, '%f%+fj', j(i), k(i) )
-end
-
-file('close',f)
-
diff --git a/gr-uhd/apps/hf_radio/input.py b/gr-uhd/apps/hf_radio/input.py
deleted file mode 100644
index 49df347e8b..0000000000
--- a/gr-uhd/apps/hf_radio/input.py
+++ /dev/null
@@ -1,78 +0,0 @@
-# Copyright 2011 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-#
-
-# Basic USRP setup and control.
-# It's only ever been tried with a basic rx daughter card.
-#
-# Imagine that the gnuradio boilerplate is here.
-#
-# M. Revnell 2005-Dec
-
-from gnuradio import gr
-from gnuradio import uhd
-
-class uhd_input(gr.hier_block2):
- def __init__( self, address, samp_rate):
- gr.hier_block2.__init__(self, "uhd_input",
- gr.io_signature(0,0,0),
- gr.io_signature(1,1,gr.sizeof_gr_complex))
-
- self.src = uhd.usrp_source(device_addr=address,
- io_type=uhd.io_type.COMPLEX_FLOAT32,
- num_channels=1)
-
- self.src.set_samp_rate(samp_rate)
- self.usrp_rate = self.src.get_samp_rate()
-
- self.connect(self.src, self)
-
- def set_freq(self, target_freq):
- """
- Set the center frequency.
-
- Args:
- target_freq: frequency in Hz
- """
- r = self.src.set_center_freq(target_freq, 0)
-
- if r:
- self.freq = target_freq
- return True
- else:
- return False
-
- def get_freq(self):
- return self.src.get_center_freq(0)
-
- def set_gain(self, gain):
- self.gain = gain
- self.src.set_gain(gain, 0)
-
- @staticmethod
- def add_options(parser):
- parser.add_option("-a", "--address", type="string",
- default="addr=192.168.10.2",
- help="Address of UHD device, [default=%default]")
- parser.add_option("-A", "--antenna", type="string", default=None,
- help="select Rx Antenna where appropriate")
- parser.add_option("-f", "--freq", type="eng_float", default=None,
- help="set frequency to FREQ", metavar="FREQ")
- parser.add_option("-g", "--gain", type="eng_float", default=None,
- help="set gain in dB (default is midpoint)")
diff --git a/gr-uhd/apps/hf_radio/output.py b/gr-uhd/apps/hf_radio/output.py
deleted file mode 100644
index 3e80c8d315..0000000000
--- a/gr-uhd/apps/hf_radio/output.py
+++ /dev/null
@@ -1,43 +0,0 @@
-# Copyright 2011 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-#
-
-
-# Audio output with a volume control.
-#
-# M. Revnell 2005-Dec
-
-from gnuradio import gr, gru
-from gnuradio import blocks
-from gnuradio import audio
-
-class output( gr.hier_block2 ):
- def __init__( self, rate, device ):
- gr.hier_block2.__init__(self, "output",
- gr.io_signature(1,1,gr.sizeof_float),
- gr.io_signature(0,0,0))
-
- self.vol = blocks.multiply_const_ff( 0.1 )
- self.out = audio.sink( int(rate), device )
-
- self.connect( self, self.vol, self.out )
-
- def set( self, val ):
- self.vol.set_k( val )
-
diff --git a/gr-uhd/apps/hf_radio/radio.py b/gr-uhd/apps/hf_radio/radio.py
deleted file mode 100755
index 970ec01a38..0000000000
--- a/gr-uhd/apps/hf_radio/radio.py
+++ /dev/null
@@ -1,320 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2011 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-#
-
-# GUI interactions and high level connections handled here.
-#
-# Interacts with classes defined by wxGlade in ui.py.
-#
-# M. Revnell 2006-Jan
-
-from threading import *
-import wx
-import wx.lib.evtmgr as em
-import time
-
-from gnuradio import gr, gru, eng_notation
-from gnuradio import audio
-from gnuradio import blocks
-from gnuradio import uhd
-from gnuradio import blks2
-from gnuradio.wxgui import fftsink2
-from gnuradio.wxgui import waterfallsink2
-from gnuradio.wxgui import scopesink2
-
-from input import *
-from output import *
-from ssbdemod import *
-from ssbagc import *
-from ui import *
-from math import log10
-
-class radio_top_block( gr.top_block ):
- def __init__( self ):
- gr.top_block.__init__(self, "radio_top_block")
-
- self.address = "addr=192.168.11.2"
- self.samp_rate = 256e3
- self.freq = -2.5e6
- self.gain = 0
- self.src = uhd_input( self.address,
- self.samp_rate)
- self.src.set_freq(self.freq)
- self.src.set_gain(self.gain)
-
- self.fe_rate = self.src.usrp_rate
- self.filter_decim = 1
- self.audio_decim = 16
- self.demod_rate = self.fe_rate / self.filter_decim
- self.audio_rate = self.demod_rate / self.audio_decim
- self.audio_dev = "pulse"
-
- self.demod = ssb_demod( self.demod_rate, self.audio_rate )
- self.agc = agc()
- self.out = output( self.audio_rate, self.audio_dev )
-
- self.connect( self.src, self.demod, self.agc, self.out )
-
- def tune( self, freq ):
- fe_target = -freq
- self.src.set_freq( fe_target )
- demod_cf = fe_target - self.src.get_freq()
- self.demod.tune( demod_cf )
-
-class radio_frame( ui_frame ):
- def __init__( self, block, *args, **kwds ):
- ui_frame.__init__( self, *args, **kwds )
- self.block = block
- self.freq_disp.SetRange(0, 30e6)
- f = self.block.src.freq
- self.freq_disp.SetValue( -f )
- self.volume.SetRange( 0, 20 )
- self.pga.SetRange( 0, 20 )
- self.rssi_range = 1
- self.rssi.SetRange( self.rssi_range )
- self.agc_max.SetValue( str( self.rssi_range ) )
- self.spin_e0.SetValue( 50 )
- self.spin_e1.SetValue( 50 )
- self.spin_e2.SetValue( 50 )
- self.spin_e3.SetValue( 50 )
- self.spin_e4.SetValue( 50 )
- self.spin_e5.SetValue( 50 )
- self.spin_e6.SetValue( 50 )
- bw = 3.3e3
- self.bandwidth.SetValue( str( bw ) )
- self.block.demod.set_bw( bw )
- self.bw_spin.SetValue( 5 )
- agc_gain = self.block.agc.gain.k()
- self.agc_gain_s.SetValue( 5 )
- self.agc_gain.SetValue( str( agc_gain ) )
- agc_ref = self.block.agc.offs.k()
- self.agc_ref.SetValue( str( agc_ref ) )
- self.agc_ref_s.SetValue( 5 )
-
- self.fespectrum = fftsink2.fft_sink_c(
- self.fe_panel,
- fft_size=512,
- sample_rate = block.fe_rate,
- ref_scale = 1.0,
- ref_level = 20.0,
- y_divs = 12,
- avg_alpha = 0.1)
-
- self.ifspectrum = fftsink2.fft_sink_c(
- self.if_panel,
- fft_size=512,
- sample_rate = block.audio_rate,
- ref_scale = 1.0,
- ref_level = 20.0,
- y_divs = 12,
- avg_alpha = 0.1)
-
- self.fespectrum.win.Bind( wx.EVT_MOTION, self.fe_mouse)
- self.fespectrum.win.Bind( wx.EVT_LEFT_DOWN, self.fe_click)
-
- block.connect( block.src.src, self.fespectrum )
- block.connect( block.demod.xlate, self.ifspectrum )
-
- def agc_ref_up( self, event ):
- self.agc_ref_s.SetValue( 5 )
- r = float( self.agc_ref.GetValue() )
- r = r + 5
- self.agc_ref.SetValue( str( r ) )
- self.block.agc.offs.set_k( r )
-
- def agc_ref_down( self, event ):
- self.agc_ref_s.SetValue( 5 )
- r = float( self.agc_ref.GetValue() )
- r = r - 5
- self.agc_ref.SetValue( str( r ) )
- self.block.agc.offs.set_k( r )
-
- def agc_gain_up( self, event ):
- self.agc_gain_s.SetValue( 5 )
- g = float(self.agc_gain.GetValue())
- g = g + 10
- self.agc_gain.SetValue( str( g ) )
- self.block.agc.gain.set_k( g )
-
- def agc_gain_down( self, event ):
- self.agc_gain_s.SetValue( 5 )
- g = float(self.agc_gain.GetValue())
- g = g - 10
- self.agc_gain.SetValue( str( g ) )
- self.block.agc.gain.set_k( g )
-
- def fe_mouse( self, event ):
- f = int(self.freq_disp.GetValue())
- f = f+((event.GetX()-346.)*(400./610.))*1000
- self.fespectrum.win.SetToolTip(
- wx.ToolTip( eng_notation.num_to_str(f)))
-
- def fe_click( self, event ):
- f = int(self.freq_disp.GetValue())
- f = f+((event.GetX()-346.)*(400./610.))*1000
- self.tune( f )
-
- def setrssi( self, level ):
- if level < 0:
- level = 0
- if level > self.rssi_range:
- self.rssi_range = level
- self.rssi.SetRange( level )
- self.agc_max.SetValue( str( level ))
- self.rssi.SetValue( level )
- self.agc_level.SetValue( str( level ))
-
- def tune_evt( self, event ):
- f = self.freq_disp.GetValue()
- self.tune( f )
-
- def tune( self, frequency ):
- self.freq_disp.SetValue( frequency )
- self.block.tune( frequency )
-
- def up_e0( self, event ):
- self.spin_e0.SetValue( 50 )
- self.tune( self.freq_disp.GetValue() + 1e0 )
-
- def down_e0( self, event ):
- self.spin_e0.SetValue( 50 )
- self.tune( self.freq_disp.GetValue() - 1e0 )
-
- def up_e1( self, event ):
- self.spin_e1.SetValue( 50 )
- self.tune( self.freq_disp.GetValue() + 1e1 )
-
- def down_e1( self, event ):
- self.spin_e1.SetValue( 50 )
- self.tune( self.freq_disp.GetValue() - 1e1 )
-
- def up_e2( self, event ):
- self.spin_e2.SetValue( 50 )
- self.tune( self.freq_disp.GetValue() + 1e2 )
-
- def down_e2( self, event ):
- self.spin_e2.SetValue( 50 )
- self.tune( self.freq_disp.GetValue() - 1e2 )
-
- def up_e3( self, event ):
- self.spin_e3.SetValue( 50 )
- self.tune( self.freq_disp.GetValue() + 1e3 )
-
- def down_e3( self, event ):
- self.spin_e3.SetValue( 50 )
- self.tune( self.freq_disp.GetValue() - 1e3 )
-
- def up_e4( self, event ):
- self.spin_e4.SetValue( 50 )
- self.tune( self.freq_disp.GetValue() + 1e4 )
-
- def down_e4( self, event ):
- self.spin_e4.SetValue( 50 )
- self.tune( self.freq_disp.GetValue() - 1e4 )
-
- def up_e5( self, event ):
- self.spin_e5.SetValue( 50 )
- self.tune( self.freq_disp.GetValue() + 1e5 )
-
- def down_e5( self, event ):
- self.spin_e5.SetValue( 50 )
- self.tune( self.freq_disp.GetValue() - 1e5 )
-
- def up_e6( self, event ):
- self.spin_e6.SetValue( 50 )
- self.tune( self.freq_disp.GetValue() + 1e6 )
-
- def down_e6( self, event ):
- self.spin_e6.SetValue( 50 )
- self.tune( self.freq_disp.GetValue() - 1e6 )
-
- def event_pga( self, event ):
- self.block.src.set_gain(self.pga.GetValue())
-
- def event_vol( self, event ):
- self.block.out.set( self.volume.GetValue()/20.0 )
-
- def set_usb( self, event ):
- self.block.demod.upper_sb()
-
- def set_lsb( self, event ):
- self.block.demod.lower_sb()
-
- def set_am( self, event ):
- self.block.demod.set_am()
-
- def bw_up( self, event ):
- self.bw_spin.SetValue( 5 )
- bw = float(self.bandwidth.GetValue())
- bw = bw + 20.0
- if bw > 10e3:
- bw = 10e3
- self.bandwidth.SetValue( str( bw ) )
- self.block.demod.set_bw( bw )
-
- def bw_down( self, event ):
- self.bw_spin.SetValue( 5 )
- bw = float(self.bandwidth.GetValue())
- bw = bw - 20.0
- if bw < 50:
- bw = 50
- self.bandwidth.SetValue( str( bw ) )
- self.block.demod.set_bw( bw )
-
-
-class radio( wx.App ):
- def OnInit( self ):
- self.block = radio_top_block()
- self.frame = radio_frame( self.block, None, -1, "HF Receiver" )
- self.frame.Show( True )
- self.SetTopWindow( self.frame )
- self.block.start()
- return True
-
-def rssi_function():
- global radio_obj
- global sig_probe
-
- go = True
- while go:
- try:
- level = sig_probe.level()
- wx.CallAfter( radio_obj.frame.setrssi, level )
- time.sleep( .1 )
- except:
- go = False
-
-def main():
- global radio_obj, sig_probe
-
- radio_obj = radio( 0 )
- sig_probe = blocks.probe_signal_f()
- radio_obj.block.connect(radio_obj.block.agc.offs, sig_probe)
-
- thread2 = Thread( target = rssi_function )
- thread2.start()
-
- radio_obj.MainLoop()
-
-
-if __name__ == "__main__":
- main()
-
diff --git a/gr-uhd/apps/hf_radio/radio.xml b/gr-uhd/apps/hf_radio/radio.xml
deleted file mode 100644
index 81daa19b0d..0000000000
--- a/gr-uhd/apps/hf_radio/radio.xml
+++ /dev/null
@@ -1,441 +0,0 @@
-<?xml version="1.0"?>
-<!-- generated by wxGlade 0.4 on Fri Jan 6 09:51:36 2006 -->
-
-<application path="/root/radio/ui.py" name="" class="" option="0" language="python" top_window="" encoding="UTF-8" use_gettext="0" overwrite="0" use_new_namespace="1" for_version="2.6">
- <object class="ui_frame" name="frame_1" base="EditFrame">
- <style>wxDEFAULT_FRAME_STYLE</style>
- <title>frame_1</title>
- <object class="wxStaticBoxSizer" name="sizer_1" base="EditStaticBoxSizer">
- <orient>wxVERTICAL</orient>
- <label>sizer_1</label>
- <object class="sizeritem">
- <flag>wxEXPAND</flag>
- <border>0</border>
- <option>1</option>
- <object class="wxBoxSizer" name="sizer_2" base="EditBoxSizer">
- <orient>wxHORIZONTAL</orient>
- <object class="sizeritem">
- <flag>wxEXPAND</flag>
- <border>0</border>
- <option>1</option>
- <object class="wxBoxSizer" name="sizer_3" base="EditBoxSizer">
- <orient>wxVERTICAL</orient>
- <object class="sizeritem">
- <flag>wxEXPAND|wxADJUST_MINSIZE</flag>
- <border>0</border>
- <option>1</option>
- <object class="wxSpinCtrl" name="freq_disp" base="EditSpinCtrl">
- <font>
- <size>32</size>
- <family>default</family>
- <style>normal</style>
- <weight>normal</weight>
- <underlined>0</underlined>
- <face></face>
- </font>
- <events>
- <handler event="EVT_SPINCTRL">tune_evt</handler>
- </events>
- </object>
- </object>
- <object class="sizeritem">
- <flag>wxEXPAND</flag>
- <border>0</border>
- <option>1</option>
- <object class="wxGridSizer" name="grid_sizer_1" base="EditGridSizer">
- <hgap>0</hgap>
- <rows>2</rows>
- <cols>3</cols>
- <vgap>0</vgap>
- <object class="sizeritem">
- <flag>wxEXPAND</flag>
- <border>0</border>
- <option>1</option>
- <object class="wxGridSizer" name="grid_sizer_2" base="EditGridSizer">
- <hgap>0</hgap>
- <rows>1</rows>
- <cols>7</cols>
- <vgap>0</vgap>
- <object class="sizeritem">
- <flag>wxADJUST_MINSIZE</flag>
- <border>0</border>
- <option>0</option>
- <object class="wxSpinButton" name="spin_e6" base="EditSpinButton">
- <events>
- <handler event="EVT_SPIN_UP">up_e6</handler>
- <handler event="EVT_SPIN_DOWN">down_e6</handler>
- </events>
- </object>
- </object>
- <object class="sizeritem">
- <flag>wxADJUST_MINSIZE</flag>
- <border>0</border>
- <option>0</option>
- <object class="wxSpinButton" name="spin_e5" base="EditSpinButton">
- <events>
- <handler event="EVT_SPIN_UP">up_e5</handler>
- <handler event="EVT_SPIN_DOWN">down_e5</handler>
- </events>
- </object>
- </object>
- <object class="sizeritem">
- <flag>wxADJUST_MINSIZE</flag>
- <border>0</border>
- <option>0</option>
- <object class="wxSpinButton" name="spin_e4" base="EditSpinButton">
- <events>
- <handler event="EVT_SPIN_UP">up_e4</handler>
- <handler event="EVT_SPIN_DOWN">down_e4</handler>
- </events>
- </object>
- </object>
- <object class="sizeritem">
- <flag>wxADJUST_MINSIZE</flag>
- <border>0</border>
- <option>0</option>
- <object class="wxSpinButton" name="spin_e3" base="EditSpinButton">
- <events>
- <handler event="EVT_SPIN_UP">up_e3</handler>
- <handler event="EVT_SPIN_DOWN">down_e3</handler>
- </events>
- </object>
- </object>
- <object class="sizeritem">
- <flag>wxADJUST_MINSIZE</flag>
- <border>0</border>
- <option>0</option>
- <object class="wxSpinButton" name="spin_e2" base="EditSpinButton">
- <events>
- <handler event="EVT_SPIN_UP">up_e2</handler>
- <handler event="EVT_SPIN_DOWN">down_e2</handler>
- </events>
- </object>
- </object>
- <object class="sizeritem">
- <flag>wxADJUST_MINSIZE</flag>
- <border>0</border>
- <option>0</option>
- <object class="wxSpinButton" name="spin_e1" base="EditSpinButton">
- <events>
- <handler event="EVT_SPIN_UP">up_e1</handler>
- <handler event="EVT_SPIN_DOWN">down_e1</handler>
- </events>
- </object>
- </object>
- <object class="sizeritem">
- <flag>wxADJUST_MINSIZE</flag>
- <border>0</border>
- <option>0</option>
- <object class="wxSpinButton" name="spin_e0" base="EditSpinButton">
- <events>
- <handler event="EVT_SPIN_UP">up_e0</handler>
- <handler event="EVT_SPIN_DOWN">down_e0</handler>
- </events>
- </object>
- </object>
- </object>
- </object>
- <object class="sizeritem">
- <flag>wxEXPAND</flag>
- <border>0</border>
- <option>1</option>
- <object class="wxPanel" name="panel_1" base="EditPanel">
- <style>wxTAB_TRAVERSAL</style>
- </object>
- </object>
- <object class="sizeritem">
- <flag>wxEXPAND</flag>
- <border>0</border>
- <option>1</option>
- <object class="wxPanel" name="panel_2" base="EditPanel">
- <style>wxTAB_TRAVERSAL</style>
- </object>
- </object>
- <object class="sizeritem">
- <flag>wxADJUST_MINSIZE</flag>
- <border>0</border>
- <option>0</option>
- <object class="wxButton" name="button_lsb" base="EditButton">
- <label>LSB</label>
- <events>
- <handler event="EVT_BUTTON">set_lsb</handler>
- </events>
- </object>
- </object>
- <object class="sizeritem">
- <flag>wxADJUST_MINSIZE</flag>
- <border>0</border>
- <option>0</option>
- <object class="wxButton" name="button_usb" base="EditButton">
- <label>USB</label>
- <events>
- <handler event="EVT_BUTTON">set_usb</handler>
- </events>
- </object>
- </object>
- <object class="sizeritem">
- <flag>wxADJUST_MINSIZE</flag>
- <border>0</border>
- <option>0</option>
- <object class="wxButton" name="button_am" base="EditButton">
- <label>AM</label>
- <events>
- <handler event="EVT_BUTTON">set_am</handler>
- </events>
- </object>
- </object>
- </object>
- </object>
- </object>
- </object>
- <object class="sizeritem">
- <flag>wxEXPAND</flag>
- <border>0</border>
- <option>1</option>
- <object class="wxBoxSizer" name="sizer_4" base="EditBoxSizer">
- <orient>wxVERTICAL</orient>
- <object class="sizeritem">
- <flag>wxEXPAND</flag>
- <border>0</border>
- <option>1</option>
- <object class="wxGridSizer" name="grid_sizer_3" base="EditGridSizer">
- <hgap>0</hgap>
- <rows>2</rows>
- <cols>4</cols>
- <vgap>0</vgap>
- <object class="sizeritem">
- <flag>wxADJUST_MINSIZE</flag>
- <border>0</border>
- <option>0</option>
- <object class="wxStaticText" name="label_1" base="EditStaticText">
- <attribute>1</attribute>
- <label>VOLUME</label>
- </object>
- </object>
- <object class="sizeritem">
- <flag>wxADJUST_MINSIZE</flag>
- <border>0</border>
- <option>0</option>
- <object class="wxStaticText" name="label_2" base="EditStaticText">
- <attribute>1</attribute>
- <label>PGA</label>
- </object>
- </object>
- <object class="sizeritem">
- <flag>wxADJUST_MINSIZE</flag>
- <border>0</border>
- <option>0</option>
- <object class="wxTextCtrl" name="agc_level" base="EditTextCtrl">
- </object>
- </object>
- <object class="sizeritem">
- <flag>wxADJUST_MINSIZE</flag>
- <border>0</border>
- <option>0</option>
- <object class="wxStaticText" name="label_6" base="EditStaticText">
- <attribute>1</attribute>
- </object>
- </object>
- <object class="sizeritem">
- <flag>wxADJUST_MINSIZE</flag>
- <border>0</border>
- <option>0</option>
- <object class="wxSpinCtrl" name="volume" base="EditSpinCtrl">
- <events>
- <handler event="EVT_SPINCTRL">event_vol</handler>
- </events>
- </object>
- </object>
- <object class="sizeritem">
- <flag>wxADJUST_MINSIZE</flag>
- <border>0</border>
- <option>0</option>
- <object class="wxSpinCtrl" name="pga" base="EditSpinCtrl">
- <events>
- <handler event="EVT_SPINCTRL">event_pga</handler>
- </events>
- </object>
- </object>
- <object class="sizeritem">
- <flag>wxADJUST_MINSIZE</flag>
- <border>0</border>
- <option>0</option>
- <object class="wxTextCtrl" name="agc_max" base="EditTextCtrl">
- </object>
- </object>
- <object class="sizeritem">
- <flag>wxADJUST_MINSIZE</flag>
- <border>0</border>
- <option>0</option>
- <object class="wxStaticText" name="label_7" base="EditStaticText">
- <attribute>1</attribute>
- </object>
- </object>
- </object>
- </object>
- <object class="sizeritem">
- <flag>wxEXPAND</flag>
- <border>0</border>
- <option>1</option>
- <object class="wxGridSizer" name="grid_sizer_4" base="EditGridSizer">
- <hgap>0</hgap>
- <rows>2</rows>
- <cols>4</cols>
- <vgap>0</vgap>
- <object class="sizeritem">
- <flag>wxADJUST_MINSIZE</flag>
- <border>0</border>
- <option>0</option>
- <object class="wxStaticText" name="label_4" base="EditStaticText">
- <attribute>1</attribute>
- <label>AGC AUTHORITY</label>
- </object>
- </object>
- <object class="sizeritem">
- <flag>wxADJUST_MINSIZE</flag>
- <border>0</border>
- <option>0</option>
- <object class="wxStaticText" name="label_5" base="EditStaticText">
- <attribute>1</attribute>
- <label>AGC REF LVL</label>
- </object>
- </object>
- <object class="sizeritem">
- <flag>wxADJUST_MINSIZE</flag>
- <border>0</border>
- <option>0</option>
- <object class="wxStaticText" name="label_3" base="EditStaticText">
- <attribute>1</attribute>
- <label>BANDWIDTH</label>
- </object>
- </object>
- <object class="sizeritem">
- <flag>wxADJUST_MINSIZE</flag>
- <border>0</border>
- <option>0</option>
- <object class="wxStaticText" name="label_8" base="EditStaticText">
- <attribute>1</attribute>
- </object>
- </object>
- <object class="sizeritem">
- <flag>wxEXPAND</flag>
- <border>0</border>
- <option>1</option>
- <object class="wxBoxSizer" name="sizer_6" base="EditBoxSizer">
- <orient>wxHORIZONTAL</orient>
- <object class="sizeritem">
- <flag>wxADJUST_MINSIZE</flag>
- <border>0</border>
- <option>0</option>
- <object class="wxTextCtrl" name="agc_gain" base="EditTextCtrl">
- </object>
- </object>
- <object class="sizeritem">
- <flag>wxADJUST_MINSIZE</flag>
- <border>0</border>
- <option>0</option>
- <object class="wxSpinButton" name="agc_gain_s" base="EditSpinButton">
- <events>
- <handler event="EVT_SPIN_UP">agc_gain_up</handler>
- <handler event="EVT_SPIN_DOWN">agc_gain_down</handler>
- </events>
- </object>
- </object>
- </object>
- </object>
- <object class="sizeritem">
- <flag>wxEXPAND</flag>
- <border>0</border>
- <option>1</option>
- <object class="wxBoxSizer" name="sizer_7" base="EditBoxSizer">
- <orient>wxHORIZONTAL</orient>
- <object class="sizeritem">
- <flag>wxADJUST_MINSIZE</flag>
- <border>0</border>
- <option>0</option>
- <object class="wxTextCtrl" name="agc_ref" base="EditTextCtrl">
- </object>
- </object>
- <object class="sizeritem">
- <flag>wxADJUST_MINSIZE</flag>
- <border>0</border>
- <option>0</option>
- <object class="wxSpinButton" name="agc_ref_s" base="EditSpinButton">
- <events>
- <handler event="EVT_SPIN_UP">agc_ref_up</handler>
- <handler event="EVT_SPIN_DOWN">agc_ref_down</handler>
- </events>
- </object>
- </object>
- </object>
- </object>
- <object class="sizeritem">
- <flag>wxEXPAND</flag>
- <border>0</border>
- <option>1</option>
- <object class="wxBoxSizer" name="sizer_5" base="EditBoxSizer">
- <orient>wxHORIZONTAL</orient>
- <object class="sizeritem">
- <flag>wxADJUST_MINSIZE</flag>
- <border>0</border>
- <option>0</option>
- <object class="wxTextCtrl" name="bandwidth" base="EditTextCtrl">
- </object>
- </object>
- <object class="sizeritem">
- <flag>wxADJUST_MINSIZE</flag>
- <border>0</border>
- <option>0</option>
- <object class="wxSpinButton" name="bw_spin" base="EditSpinButton">
- <events>
- <handler event="EVT_SPIN_UP">bw_up</handler>
- <handler event="EVT_SPIN_DOWN">bw_down</handler>
- </events>
- </object>
- </object>
- </object>
- </object>
- <object class="sizeritem">
- <flag>wxADJUST_MINSIZE</flag>
- <border>0</border>
- <option>0</option>
- <object class="wxStaticText" name="label_9" base="EditStaticText">
- <attribute>1</attribute>
- </object>
- </object>
- </object>
- </object>
- <object class="sizeritem">
- <flag>wxEXPAND|wxADJUST_MINSIZE</flag>
- <border>0</border>
- <option>1</option>
- <object class="wxGauge" name="rssi" base="EditGauge">
- <foreground>#ff0000</foreground>
- <style>wxGA_HORIZONTAL|wxGA_SMOOTH</style>
- <range>10</range>
- <size>315, 10</size>
- </object>
- </object>
- </object>
- </object>
- </object>
- </object>
- <object class="sizeritem">
- <flag>wxEXPAND</flag>
- <border>0</border>
- <option>1</option>
- <object class="wxPanel" name="fe_panel" base="EditPanel">
- <style>wxTAB_TRAVERSAL</style>
- </object>
- </object>
- <object class="sizeritem">
- <flag>wxEXPAND</flag>
- <border>0</border>
- <option>1</option>
- <object class="wxPanel" name="if_panel" base="EditPanel">
- <style>wxTAB_TRAVERSAL</style>
- </object>
- </object>
- </object>
- </object>
-</application>
diff --git a/gr-uhd/apps/hf_radio/ssb_taps b/gr-uhd/apps/hf_radio/ssb_taps
deleted file mode 100644
index 0ef3bbf267..0000000000
--- a/gr-uhd/apps/hf_radio/ssb_taps
+++ /dev/null
@@ -1,1023 +0,0 @@
--0.000035-0.000009j
--0.000066-0.000020j
--0.000080-0.000044j
--0.000084-0.000071j
--0.000077-0.000100j
--0.000063-0.000127j
--0.000041-0.000150j
--0.000013-0.000167j
-0.000020-0.000177j
-0.000054-0.000180j
-0.000089-0.000174j
-0.000121-0.000161j
-0.000150-0.000140j
-0.000173-0.000113j
-0.000188-0.000081j
-0.000196-0.000046j
-0.000194-0.000011j
-0.000184+0.000022j
-0.000165+0.000052j
-0.000139+0.000077j
-0.000107+0.000093j
-0.000071+0.000102j
-0.000034+0.000101j
--0.000002+0.000090j
--0.000036+0.000070j
--0.000064+0.000042j
--0.000086+0.000006j
--0.000098-0.000034j
--0.000101-0.000077j
--0.000093-0.000120j
--0.000076-0.000161j
--0.000049-0.000197j
--0.000014-0.000227j
-0.000026-0.000248j
-0.000071-0.000259j
-0.000117-0.000259j
-0.000162-0.000249j
-0.000203-0.000228j
-0.000237-0.000199j
-0.000263-0.000162j
-0.000279-0.000120j
-0.000284-0.000075j
-0.000278-0.000031j
-0.000260+0.000010j
-0.000232+0.000045j
-0.000196+0.000073j
-0.000153+0.000090j
-0.000106+0.000095j
-0.000059+0.000089j
-0.000014+0.000071j
--0.000027+0.000041j
--0.000059+0.000002j
--0.000082-0.000046j
--0.000093-0.000098j
--0.000091-0.000152j
--0.000077-0.000206j
--0.000050-0.000255j
--0.000012-0.000298j
-0.000034-0.000330j
-0.000088-0.000351j
-0.000145-0.000359j
-0.000202-0.000354j
-0.000256-0.000335j
-0.000304-0.000304j
-0.000343-0.000262j
-0.000370-0.000213j
-0.000384-0.000158j
-0.000384-0.000102j
-0.000369-0.000048j
-0.000341+0.000002j
-0.000302+0.000042j
-0.000252+0.000072j
-0.000196+0.000088j
-0.000137+0.000089j
-0.000078+0.000075j
-0.000024+0.000047j
--0.000023+0.000005j
--0.000059-0.000048j
--0.000082-0.000109j
--0.000090-0.000175j
--0.000081-0.000242j
--0.000058-0.000306j
--0.000019-0.000364j
-0.000032-0.000411j
-0.000093-0.000445j
-0.000161-0.000465j
-0.000232-0.000467j
-0.000301-0.000453j
-0.000365-0.000423j
-0.000419-0.000379j
-0.000461-0.000323j
-0.000487-0.000259j
-0.000497-0.000190j
-0.000489-0.000121j
-0.000464-0.000056j
-0.000423+0.000001j
-0.000369+0.000046j
-0.000304+0.000076j
-0.000233+0.000089j
-0.000160+0.000083j
-0.000089+0.000060j
-0.000025+0.000018j
--0.000027-0.000038j
--0.000065-0.000107j
--0.000086-0.000185j
--0.000088-0.000266j
--0.000071-0.000347j
--0.000035-0.000422j
-0.000019-0.000487j
-0.000086-0.000538j
-0.000164-0.000573j
-0.000248-0.000588j
-0.000334-0.000582j
-0.000415-0.000557j
-0.000488-0.000513j
-0.000548-0.000452j
-0.000592-0.000379j
-0.000616-0.000297j
-0.000619-0.000213j
-0.000600-0.000130j
-0.000561-0.000054j
-0.000504+0.000010j
-0.000432+0.000058j
-0.000350+0.000086j
-0.000261+0.000093j
-0.000173+0.000078j
-0.000090+0.000040j
-0.000017-0.000017j
--0.000040-0.000092j
--0.000078-0.000180j
--0.000095-0.000275j
--0.000088-0.000374j
--0.000058-0.000469j
--0.000006-0.000555j
-0.000065-0.000627j
-0.000152-0.000681j
-0.000250-0.000712j
-0.000352-0.000720j
-0.000454-0.000703j
-0.000548-0.000663j
-0.000630-0.000601j
-0.000694-0.000521j
-0.000737-0.000428j
-0.000755-0.000327j
-0.000748-0.000225j
-0.000715-0.000128j
-0.000659-0.000042j
-0.000582+0.000028j
-0.000490+0.000077j
-0.000387+0.000101j
-0.000280+0.000099j
-0.000175+0.000070j
-0.000080+0.000015j
--0.000001-0.000063j
--0.000061-0.000159j
--0.000097-0.000268j
--0.000106-0.000385j
--0.000087-0.000501j
--0.000040-0.000611j
-0.000032-0.000708j
-0.000125-0.000786j
-0.000235-0.000839j
-0.000354-0.000866j
-0.000477-0.000863j
-0.000595-0.000831j
-0.000702-0.000772j
-0.000792-0.000688j
-0.000859-0.000585j
-0.000898-0.000469j
-0.000907-0.000347j
-0.000886-0.000227j
-0.000835-0.000115j
-0.000757-0.000019j
-0.000657+0.000055j
-0.000540+0.000102j
-0.000415+0.000119j
-0.000287+0.000103j
-0.000165+0.000056j
-0.000058-0.000020j
--0.000029-0.000122j
--0.000090-0.000243j
--0.000121-0.000378j
--0.000118-0.000517j
--0.000082-0.000653j
--0.000014-0.000778j
-0.000082-0.000885j
-0.000201-0.000966j
-0.000337-0.001017j
-0.000481-0.001034j
-0.000626-0.001016j
-0.000762-0.000965j
-0.000882-0.000882j
-0.000978-0.000772j
-0.001044-0.000643j
-0.001076-0.000501j
-0.001072-0.000355j
-0.001032-0.000215j
-0.000958-0.000089j
-0.000854+0.000016j
-0.000726+0.000091j
-0.000582+0.000133j
-0.000431+0.000138j
-0.000281+0.000105j
-0.000143+0.000035j
-0.000024-0.000068j
--0.000068-0.000199j
--0.000126-0.000350j
--0.000147-0.000513j
--0.000128-0.000677j
--0.000070-0.000834j
-0.000024-0.000974j
-0.000150-0.001089j
-0.000300-0.001171j
-0.000465-0.001216j
-0.000637-0.001219j
-0.000805-0.001182j
-0.000960-0.001105j
-0.001091-0.000993j
-0.001191-0.000853j
-0.001253-0.000692j
-0.001274-0.000521j
-0.001252-0.000350j
-0.001188-0.000189j
-0.001085-0.000049j
-0.000950+0.000062j
-0.000790+0.000136j
-0.000614+0.000168j
-0.000435+0.000156j
-0.000261+0.000099j
-0.000105+0.000000j
--0.000024-0.000136j
--0.000117-0.000301j
--0.000169-0.000486j
--0.000175-0.000680j
--0.000134-0.000872j
--0.000048-0.001051j
-0.000079-0.001206j
-0.000240-0.001326j
-0.000426-0.001406j
-0.000626-0.001439j
-0.000829-0.001424j
-0.001022-0.001361j
-0.001195-0.001252j
-0.001336-0.001106j
-0.001437-0.000929j
-0.001491-0.000733j
-0.001496-0.000529j
-0.001449-0.000330j
-0.001354-0.000148j
-0.001217+0.000005j
-0.001044+0.000120j
-0.000846+0.000188j
-0.000635+0.000206j
-0.000424+0.000170j
-0.000226+0.000083j
-0.000053-0.000053j
--0.000084-0.000228j
--0.000176-0.000434j
--0.000216-0.000659j
--0.000201-0.000889j
--0.000131-0.001111j
--0.000009-0.001312j
-0.000158-0.001480j
-0.000362-0.001604j
-0.000590-0.001677j
-0.000829-0.001694j
-0.001066-0.001653j
-0.001286-0.001556j
-0.001477-0.001408j
-0.001626-0.001219j
-0.001724-0.001000j
-0.001765-0.000762j
-0.001746-0.000522j
-0.001668-0.000293j
-0.001534-0.000090j
-0.001353+0.000075j
-0.001135+0.000190j
-0.000893+0.000247j
-0.000642+0.000243j
-0.000396+0.000176j
-0.000172+0.000049j
--0.000017-0.000131j
--0.000159-0.000355j
--0.000244-0.000609j
--0.000266-0.000880j
--0.000222-0.001151j
--0.000114-0.001406j
-0.000053-0.001630j
-0.000270-0.001810j
-0.000524-0.001934j
-0.000802-0.001994j
-0.001087-0.001987j
-0.001362-0.001911j
-0.001611-0.001772j
-0.001819-0.001576j
-0.001973-0.001336j
-0.002063-0.001065j
-0.002084-0.000779j
-0.002033-0.000497j
-0.001914-0.000236j
-0.001732-0.000011j
-0.001498+0.000162j
-0.001225+0.000272j
-0.000931+0.000312j
-0.000633+0.000277j
-0.000349+0.000168j
-0.000097-0.000009j
--0.000107-0.000246j
--0.000250-0.000528j
--0.000322-0.000841j
--0.000316-0.001166j
--0.000233-0.001484j
--0.000076-0.001775j
-0.000148-0.002024j
-0.000426-0.002213j
-0.000743-0.002332j
-0.001080-0.002373j
-0.001418-0.002332j
-0.001736-0.002211j
-0.002017-0.002017j
-0.002241-0.001760j
-0.002397-0.001457j
-0.002473-0.001124j
-0.002464-0.000783j
-0.002371-0.000453j
-0.002198-0.000156j
-0.001954+0.000091j
-0.001654+0.000269j
-0.001316+0.000369j
-0.000959+0.000381j
-0.000606+0.000303j
-0.000279+0.000139j
--0.000003-0.000103j
--0.000220-0.000411j
--0.000359-0.000768j
--0.000408-0.001152j
--0.000365-0.001542j
--0.000229-0.001915j
--0.000006-0.002248j
-0.000292-0.002522j
-0.000648-0.002719j
-0.001042-0.002826j
-0.001452-0.002837j
-0.001853-0.002750j
-0.002223-0.002569j
-0.002537-0.002304j
-0.002778-0.001971j
-0.002930-0.001588j
-0.002984-0.001179j
-0.002933-0.000770j
-0.002782-0.000384j
-0.002538-0.000046j
-0.002215+0.000222j
-0.001831+0.000402j
-0.001410+0.000481j
-0.000976+0.000452j
-0.000557+0.000316j
-0.000179+0.000077j
--0.000134-0.000252j
--0.000362-0.000654j
--0.000490-0.001105j
--0.000506-0.001580j
--0.000407-0.002052j
--0.000197-0.002492j
-0.000113-0.002875j
-0.000508-0.003176j
-0.000966-0.003377j
-0.001460-0.003464j
-0.001963-0.003432j
-0.002444-0.003281j
-0.002876-0.003019j
-0.003231-0.002659j
-0.003488-0.002224j
-0.003631-0.001739j
-0.003649-0.001233j
-0.003540-0.000737j
-0.003309-0.000282j
-0.002969+0.000103j
-0.002539+0.000393j
-0.002044+0.000568j
-0.001515+0.000614j
-0.000982+0.000525j
-0.000480+0.000304j
-0.000039-0.000039j
--0.000311-0.000487j
--0.000547-0.001016j
--0.000652-0.001595j
--0.000615-0.002193j
--0.000436-0.002773j
--0.000122-0.003301j
-0.000311-0.003746j
-0.000842-0.004081j
-0.001440-0.004282j
-0.002071-0.004338j
-0.002700-0.004243j
-0.003289-0.004000j
-0.003803-0.003622j
-0.004210-0.003132j
-0.004485-0.002556j
-0.004610-0.001930j
-0.004574-0.001291j
-0.004379-0.000679j
-0.004034-0.000133j
-0.003558+0.000313j
-0.002977+0.000627j
-0.002327+0.000787j
-0.001647+0.000779j
-0.000977+0.000598j
-0.000360+0.000250j
--0.000163-0.000249j
--0.000559-0.000872j
--0.000799-0.001587j
--0.000864-0.002354j
--0.000744-0.003129j
--0.000442-0.003866j
-0.000031-0.004522j
-0.000651-0.005057j
-0.001385-0.005437j
-0.002193-0.005637j
-0.003030-0.005643j
-0.003848-0.005451j
-0.004597-0.005069j
-0.005234-0.004519j
-0.005718-0.003830j
-0.006019-0.003044j
-0.006114-0.002206j
-0.005997-0.001368j
-0.005669-0.000583j
-0.005147+0.000099j
-0.004460+0.000631j
-0.003647+0.000975j
-0.002757+0.001105j
-0.001842+0.001003j
-0.000961+0.000668j
-0.000168+0.000111j
--0.000482-0.000643j
--0.000944-0.001555j
--0.001183-0.002578j
--0.001176-0.003656j
--0.000912-0.004727j
--0.000397-0.005728j
-0.000346-0.006601j
-0.001284-0.007292j
-0.002368-0.007755j
-0.003540-0.007959j
-0.004735-0.007886j
-0.005885-0.007535j
-0.006922-0.006922j
-0.007782-0.006078j
-0.008412-0.005050j
-0.008769-0.003898j
-0.008825-0.002691j
-0.008572-0.001504j
-0.008016-0.000412j
-0.007185+0.000510j
-0.006123+0.001196j
-0.004891+0.001591j
-0.003560+0.001657j
-0.002212+0.001372j
-0.000933+0.000734j
--0.000192-0.000236j
--0.001083-0.001500j
--0.001672-0.002998j
--0.001905-0.004655j
--0.001747-0.006384j
--0.001182-0.008090j
--0.000222-0.009676j
-0.001101-0.011045j
-0.002732-0.012114j
-0.004593-0.012810j
-0.006591-0.013081j
-0.008621-0.012896j
-0.010571-0.012253j
-0.012328-0.011175j
-0.013785-0.009712j
-0.014847-0.007941j
-0.015438-0.005962j
-0.015507-0.003893j
-0.015029-0.001863j
-0.014011-0.000011j
-0.012494+0.001529j
-0.010549+0.002630j
-0.008277+0.003179j
-0.005809+0.003090j
-0.003294+0.002304j
-0.000896+0.000795j
--0.001212-0.001423j
--0.002859-0.004299j
--0.003886-0.007744j
--0.004151-0.011630j
--0.003539-0.015799j
--0.001969-0.020066j
-0.000601-0.024225j
-0.004168-0.028064j
-0.008684-0.031367j
-0.014056-0.033927j
-0.020145-0.035558j
-0.026775-0.036101j
-0.033735-0.035433j
-0.040789-0.033475j
-0.047684-0.030197j
-0.054164-0.025619j
-0.059974-0.019815j
-0.064878-0.012907j
-0.068665-0.005067j
-0.071159+0.003494j
-0.072228+0.012531j
-0.071791+0.021776j
-0.069818+0.030947j
-0.066339+0.039761j
-0.061435+0.047944j
-0.055243+0.055243j
-0.047944+0.061435j
-0.039761+0.066339j
-0.030947+0.069818j
-0.021776+0.071791j
-0.012531+0.072228j
-0.003494+0.071159j
--0.005067+0.068665j
--0.012907+0.064878j
--0.019815+0.059974j
--0.025619+0.054164j
--0.030197+0.047684j
--0.033475+0.040789j
--0.035433+0.033735j
--0.036101+0.026775j
--0.035558+0.020145j
--0.033927+0.014056j
--0.031367+0.008684j
--0.028064+0.004168j
--0.024225+0.000601j
--0.020066-0.001969j
--0.015799-0.003539j
--0.011630-0.004151j
--0.007744-0.003886j
--0.004299-0.002859j
--0.001423-0.001212j
-0.000795+0.000896j
-0.002304+0.003294j
-0.003090+0.005809j
-0.003179+0.008277j
-0.002630+0.010549j
-0.001529+0.012494j
--0.000011+0.014011j
--0.001863+0.015029j
--0.003893+0.015507j
--0.005962+0.015438j
--0.007941+0.014847j
--0.009712+0.013785j
--0.011175+0.012328j
--0.012253+0.010571j
--0.012896+0.008621j
--0.013081+0.006591j
--0.012810+0.004593j
--0.012114+0.002732j
--0.011045+0.001101j
--0.009676-0.000222j
--0.008090-0.001182j
--0.006384-0.001747j
--0.004655-0.001905j
--0.002998-0.001672j
--0.001500-0.001083j
--0.000236-0.000192j
-0.000734+0.000933j
-0.001372+0.002212j
-0.001657+0.003560j
-0.001591+0.004891j
-0.001196+0.006123j
-0.000510+0.007185j
--0.000412+0.008016j
--0.001504+0.008572j
--0.002691+0.008825j
--0.003898+0.008769j
--0.005050+0.008412j
--0.006078+0.007782j
--0.006922+0.006922j
--0.007535+0.005885j
--0.007886+0.004735j
--0.007959+0.003540j
--0.007755+0.002368j
--0.007292+0.001284j
--0.006601+0.000346j
--0.005728-0.000397j
--0.004727-0.000912j
--0.003656-0.001176j
--0.002578-0.001183j
--0.001555-0.000944j
--0.000643-0.000482j
-0.000111+0.000168j
-0.000668+0.000961j
-0.001003+0.001842j
-0.001105+0.002757j
-0.000975+0.003647j
-0.000631+0.004460j
-0.000099+0.005147j
--0.000583+0.005669j
--0.001368+0.005997j
--0.002206+0.006114j
--0.003044+0.006019j
--0.003830+0.005718j
--0.004519+0.005234j
--0.005069+0.004597j
--0.005451+0.003848j
--0.005643+0.003030j
--0.005637+0.002193j
--0.005437+0.001385j
--0.005057+0.000651j
--0.004522+0.000031j
--0.003866-0.000442j
--0.003129-0.000744j
--0.002354-0.000864j
--0.001587-0.000799j
--0.000872-0.000559j
--0.000249-0.000163j
-0.000250+0.000360j
-0.000598+0.000977j
-0.000779+0.001647j
-0.000787+0.002327j
-0.000627+0.002977j
-0.000313+0.003558j
--0.000133+0.004034j
--0.000679+0.004379j
--0.001291+0.004574j
--0.001930+0.004610j
--0.002556+0.004485j
--0.003132+0.004210j
--0.003622+0.003803j
--0.004000+0.003289j
--0.004243+0.002700j
--0.004338+0.002071j
--0.004282+0.001440j
--0.004081+0.000842j
--0.003746+0.000311j
--0.003301-0.000122j
--0.002773-0.000436j
--0.002193-0.000615j
--0.001595-0.000652j
--0.001016-0.000547j
--0.000487-0.000311j
--0.000039+0.000039j
-0.000304+0.000480j
-0.000525+0.000982j
-0.000614+0.001515j
-0.000568+0.002044j
-0.000393+0.002539j
-0.000103+0.002969j
--0.000282+0.003309j
--0.000737+0.003540j
--0.001233+0.003649j
--0.001739+0.003631j
--0.002224+0.003488j
--0.002659+0.003231j
--0.003019+0.002876j
--0.003281+0.002444j
--0.003432+0.001963j
--0.003464+0.001460j
--0.003377+0.000966j
--0.003176+0.000508j
--0.002875+0.000113j
--0.002492-0.000197j
--0.002052-0.000407j
--0.001580-0.000506j
--0.001105-0.000490j
--0.000654-0.000362j
--0.000252-0.000134j
-0.000077+0.000179j
-0.000316+0.000557j
-0.000452+0.000976j
-0.000481+0.001410j
-0.000402+0.001831j
-0.000222+0.002215j
--0.000046+0.002538j
--0.000384+0.002782j
--0.000770+0.002933j
--0.001179+0.002984j
--0.001588+0.002930j
--0.001971+0.002778j
--0.002304+0.002537j
--0.002569+0.002223j
--0.002750+0.001853j
--0.002837+0.001452j
--0.002826+0.001042j
--0.002719+0.000648j
--0.002522+0.000292j
--0.002248-0.000006j
--0.001915-0.000229j
--0.001542-0.000365j
--0.001152-0.000408j
--0.000768-0.000359j
--0.000411-0.000220j
--0.000103-0.000003j
-0.000139+0.000279j
-0.000303+0.000606j
-0.000381+0.000959j
-0.000369+0.001316j
-0.000269+0.001654j
-0.000091+0.001954j
--0.000156+0.002198j
--0.000453+0.002371j
--0.000783+0.002464j
--0.001124+0.002473j
--0.001457+0.002397j
--0.001760+0.002241j
--0.002017+0.002017j
--0.002211+0.001736j
--0.002332+0.001418j
--0.002373+0.001080j
--0.002332+0.000743j
--0.002213+0.000426j
--0.002024+0.000148j
--0.001775-0.000076j
--0.001484-0.000233j
--0.001166-0.000316j
--0.000841-0.000322j
--0.000528-0.000250j
--0.000246-0.000107j
--0.000009+0.000097j
-0.000168+0.000349j
-0.000277+0.000633j
-0.000312+0.000931j
-0.000272+0.001225j
-0.000162+0.001498j
--0.000011+0.001732j
--0.000236+0.001914j
--0.000497+0.002033j
--0.000779+0.002084j
--0.001065+0.002063j
--0.001336+0.001973j
--0.001576+0.001819j
--0.001772+0.001611j
--0.001911+0.001362j
--0.001987+0.001087j
--0.001994+0.000802j
--0.001934+0.000524j
--0.001810+0.000270j
--0.001630+0.000053j
--0.001406-0.000114j
--0.001151-0.000222j
--0.000880-0.000266j
--0.000609-0.000244j
--0.000355-0.000159j
--0.000131-0.000017j
-0.000049+0.000172j
-0.000176+0.000396j
-0.000243+0.000642j
-0.000247+0.000893j
-0.000190+0.001135j
-0.000075+0.001353j
--0.000090+0.001534j
--0.000293+0.001668j
--0.000522+0.001746j
--0.000762+0.001765j
--0.001000+0.001724j
--0.001219+0.001626j
--0.001408+0.001477j
--0.001556+0.001286j
--0.001653+0.001066j
--0.001694+0.000829j
--0.001677+0.000590j
--0.001604+0.000362j
--0.001480+0.000158j
--0.001312-0.000009j
--0.001111-0.000131j
--0.000889-0.000201j
--0.000659-0.000216j
--0.000434-0.000176j
--0.000228-0.000084j
--0.000053+0.000053j
-0.000083+0.000226j
-0.000170+0.000424j
-0.000206+0.000635j
-0.000188+0.000846j
-0.000120+0.001044j
-0.000005+0.001217j
--0.000148+0.001354j
--0.000330+0.001449j
--0.000529+0.001496j
--0.000733+0.001491j
--0.000929+0.001437j
--0.001106+0.001336j
--0.001252+0.001195j
--0.001361+0.001022j
--0.001424+0.000829j
--0.001439+0.000626j
--0.001406+0.000426j
--0.001326+0.000240j
--0.001206+0.000079j
--0.001051-0.000048j
--0.000872-0.000134j
--0.000680-0.000175j
--0.000486-0.000169j
--0.000301-0.000117j
--0.000136-0.000024j
-0.000000+0.000105j
-0.000099+0.000261j
-0.000156+0.000435j
-0.000168+0.000614j
-0.000136+0.000790j
-0.000062+0.000950j
--0.000049+0.001085j
--0.000189+0.001188j
--0.000350+0.001252j
--0.000521+0.001274j
--0.000692+0.001253j
--0.000853+0.001191j
--0.000993+0.001091j
--0.001105+0.000960j
--0.001182+0.000805j
--0.001219+0.000637j
--0.001216+0.000465j
--0.001171+0.000300j
--0.001089+0.000150j
--0.000974+0.000024j
--0.000834-0.000070j
--0.000677-0.000128j
--0.000513-0.000147j
--0.000350-0.000126j
--0.000199-0.000068j
--0.000068+0.000024j
-0.000035+0.000143j
-0.000105+0.000281j
-0.000138+0.000431j
-0.000133+0.000582j
-0.000091+0.000726j
-0.000016+0.000854j
--0.000089+0.000958j
--0.000215+0.001032j
--0.000355+0.001072j
--0.000501+0.001076j
--0.000643+0.001044j
--0.000772+0.000978j
--0.000882+0.000882j
--0.000965+0.000762j
--0.001016+0.000626j
--0.001034+0.000481j
--0.001017+0.000337j
--0.000966+0.000201j
--0.000885+0.000082j
--0.000778-0.000014j
--0.000653-0.000082j
--0.000517-0.000118j
--0.000378-0.000121j
--0.000243-0.000090j
--0.000122-0.000029j
--0.000020+0.000058j
-0.000056+0.000165j
-0.000103+0.000287j
-0.000119+0.000415j
-0.000102+0.000540j
-0.000055+0.000657j
--0.000019+0.000757j
--0.000115+0.000835j
--0.000227+0.000886j
--0.000347+0.000907j
--0.000469+0.000898j
--0.000585+0.000859j
--0.000688+0.000792j
--0.000772+0.000702j
--0.000831+0.000595j
--0.000863+0.000477j
--0.000866+0.000354j
--0.000839+0.000235j
--0.000786+0.000125j
--0.000708+0.000032j
--0.000611-0.000040j
--0.000501-0.000087j
--0.000385-0.000106j
--0.000268-0.000097j
--0.000159-0.000061j
--0.000063-0.000001j
-0.000015+0.000080j
-0.000070+0.000175j
-0.000099+0.000280j
-0.000101+0.000387j
-0.000077+0.000490j
-0.000028+0.000582j
--0.000042+0.000659j
--0.000128+0.000715j
--0.000225+0.000748j
--0.000327+0.000755j
--0.000428+0.000737j
--0.000521+0.000694j
--0.000601+0.000630j
--0.000663+0.000548j
--0.000703+0.000454j
--0.000720+0.000352j
--0.000712+0.000250j
--0.000681+0.000152j
--0.000627+0.000065j
--0.000555-0.000006j
--0.000469-0.000058j
--0.000374-0.000088j
--0.000275-0.000095j
--0.000180-0.000078j
--0.000092-0.000040j
--0.000017+0.000017j
-0.000040+0.000090j
-0.000078+0.000173j
-0.000093+0.000261j
-0.000086+0.000350j
-0.000058+0.000432j
-0.000010+0.000504j
--0.000054+0.000561j
--0.000130+0.000600j
--0.000213+0.000619j
--0.000297+0.000616j
--0.000379+0.000592j
--0.000452+0.000548j
--0.000513+0.000488j
--0.000557+0.000415j
--0.000582+0.000334j
--0.000588+0.000248j
--0.000573+0.000164j
--0.000538+0.000086j
--0.000487+0.000019j
--0.000422-0.000035j
--0.000347-0.000071j
--0.000266-0.000088j
--0.000185-0.000086j
--0.000107-0.000065j
--0.000038-0.000027j
-0.000018+0.000025j
-0.000060+0.000089j
-0.000083+0.000160j
-0.000089+0.000233j
-0.000076+0.000304j
-0.000046+0.000369j
-0.000001+0.000423j
--0.000056+0.000464j
--0.000121+0.000489j
--0.000190+0.000497j
--0.000259+0.000487j
--0.000323+0.000461j
--0.000379+0.000419j
--0.000423+0.000365j
--0.000453+0.000301j
--0.000467+0.000232j
--0.000465+0.000161j
--0.000445+0.000093j
--0.000411+0.000032j
--0.000364-0.000019j
--0.000306-0.000058j
--0.000242-0.000081j
--0.000175-0.000090j
--0.000109-0.000082j
--0.000048-0.000059j
-0.000005-0.000023j
-0.000047+0.000024j
-0.000075+0.000078j
-0.000089+0.000137j
-0.000088+0.000196j
-0.000072+0.000252j
-0.000042+0.000302j
-0.000002+0.000341j
--0.000048+0.000369j
--0.000102+0.000384j
--0.000158+0.000384j
--0.000213+0.000370j
--0.000262+0.000343j
--0.000304+0.000304j
--0.000335+0.000256j
--0.000354+0.000202j
--0.000359+0.000145j
--0.000351+0.000088j
--0.000330+0.000034j
--0.000298-0.000012j
--0.000255-0.000050j
--0.000206-0.000077j
--0.000152-0.000091j
--0.000098-0.000093j
--0.000046-0.000082j
-0.000002-0.000059j
-0.000041-0.000027j
-0.000071+0.000014j
-0.000089+0.000059j
-0.000095+0.000106j
-0.000090+0.000153j
-0.000073+0.000196j
-0.000045+0.000232j
-0.000010+0.000260j
--0.000031+0.000278j
--0.000075+0.000284j
--0.000120+0.000279j
--0.000162+0.000263j
--0.000199+0.000237j
--0.000228+0.000203j
--0.000249+0.000162j
--0.000259+0.000117j
--0.000259+0.000071j
--0.000248+0.000026j
--0.000227-0.000014j
--0.000197-0.000049j
--0.000161-0.000076j
--0.000120-0.000093j
--0.000077-0.000101j
--0.000034-0.000098j
-0.000006-0.000086j
-0.000042-0.000064j
-0.000070-0.000036j
-0.000090-0.000002j
-0.000101+0.000034j
-0.000102+0.000071j
-0.000093+0.000107j
-0.000077+0.000139j
-0.000052+0.000165j
-0.000022+0.000184j
--0.000011+0.000194j
--0.000046+0.000196j
--0.000081+0.000188j
--0.000113+0.000173j
--0.000140+0.000150j
--0.000161+0.000121j
--0.000174+0.000089j
--0.000180+0.000054j
--0.000177+0.000020j
--0.000167-0.000013j
--0.000150-0.000041j
--0.000127-0.000063j
--0.000100-0.000077j
--0.000071-0.000084j
--0.000044-0.000080j
--0.000020-0.000066j
--0.000009-0.000035j
diff --git a/gr-uhd/apps/hf_radio/ssbagc.py b/gr-uhd/apps/hf_radio/ssbagc.py
deleted file mode 100644
index 48cc009101..0000000000
--- a/gr-uhd/apps/hf_radio/ssbagc.py
+++ /dev/null
@@ -1,72 +0,0 @@
-# Copyright 2011 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-
-
-# post detection agc processing
-#
-# This agc strategy is copied more or less verbatim from
-# weaver_isb_am1_usrp3.py by cswiger.
-#
-# Thanks.
-#
-# Then modified in a variety of ways.
-#
-# There doesn't appear to be a way to hook multiple blocks to the
-# input port when building a hier block like this. Thus the
-# split below.
-#
-# Basic operation.
-# Power is estimated by squaring the input.
-# Low pass filter using a 1 pole iir.
-# The time constant can be tweaked by changing the taps.
-# Currently there is no implementation to change this while operating
-# a potentially useful addition.
-# The log block turns this into dB
-# gain adjusts the agc authority.
-#
-# M. Revnell 2006-Jan
-
-from gnuradio import gr
-from gnuradio import blocks
-from gnuradio import filter
-
-class agc( gr.hier_block2 ):
- def __init__( self ):
- gr.hier_block2.__init__(self, "agc",
- gr.io_signature(1,1,gr.sizeof_float),
- gr.io_signature(1,1,gr.sizeof_float))
-
- self.split = blocks.multiply_const_ff( 1 )
- self.sqr = blocks.multiply_ff( )
- self.int0 = filter.iir_filter_ffd( [.004, 0], [0, .999] )
- self.offs = blocks.add_const_ff( -30 )
- self.gain = blocks.multiply_const_ff( 70 )
- self.log = blocks.nlog10_ff( 10, 1 )
- self.agc = blocks.divide_ff( )
-
- self.connect(self, self.split)
- self.connect(self.split, (self.agc, 0))
- self.connect(self.split, (self.sqr, 0))
- self.connect(self.split, (self.sqr, 1))
- self.connect(self.sqr, self.int0)
- self.connect(self.int0, self.log)
- self.connect(self.log, self.offs)
- self.connect(self.offs, self.gain)
- self.connect(self.gain, (self.agc, 1))
- self.connect(self.agc, self)
diff --git a/gr-uhd/apps/hf_radio/ssbdemod.py b/gr-uhd/apps/hf_radio/ssbdemod.py
deleted file mode 100644
index d364f5e0ec..0000000000
--- a/gr-uhd/apps/hf_radio/ssbdemod.py
+++ /dev/null
@@ -1,118 +0,0 @@
-# Copyright 2011 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-#
-
-# This tries to push the hilbert transform for ssb demod back into the
-# freq. xlating filter.
-#
-# The starting point for this was weaver_isb_am1_usrp3.py.
-#
-# The tap coefficients for freq_xlating_fir_filter_ccf were generated
-# externally and are read from a file because I didn't want to learn how
-# to make fir filters with arbitrary phase response using python numeric
-# facilities.
-#
-# They were generated using Scilab which I am already familiar with.
-# M. Revnell Jan 06
-
-from gnuradio import gr
-from gnuradio import blocks
-from gnuradio import filter
-
-class ssb_demod( gr.hier_block2 ):
- def __init__( self, if_rate, af_rate ):
- gr.hier_block2.__init__(self, "ssb_demod",
- gr.io_signature(1,1,gr.sizeof_gr_complex),
- gr.io_signature(1,1,gr.sizeof_float))
-
- self.if_rate = int(if_rate)
- self.af_rate = int(af_rate)
- self.if_decim = int(if_rate / af_rate)
- self.sideband = 1
-
- self.xlate_taps = ([complex(v) for v in file('ssb_taps').readlines()])
-
- self.audio_taps = filter.firdes.low_pass(
- 1.0,
- self.af_rate,
- 3e3,
- 600,
- filter.firdes.WIN_HAMMING )
-
- self.xlate = filter.freq_xlating_fir_filter_ccc(
- self.if_decim,
- self.xlate_taps,
- 0,
- self.if_rate )
-
- self.split = blocks.complex_to_float()
-
- self.lpf = filter.fir_filter_fff(
- 1, self.audio_taps )
-
- self.sum = blocks.add_ff( )
- self.am_sel = blocks.multiply_const_ff( 0 )
- self.sb_sel = blocks.multiply_const_ff( 1 )
- self.mixer = blocks.add_ff()
- self.am_det = blocks.complex_to_mag()
-
- self.connect(self, self.xlate)
- self.connect(self.xlate, self.split)
- self.connect((self.split, 0), (self.sum, 0))
- self.connect((self.split, 1), (self.sum, 1))
- self.connect(self.sum, self.sb_sel)
- self.connect(self.xlate, self.am_det)
- self.connect(self.sb_sel, (self.mixer, 0))
- self.connect(self.am_det, self.am_sel)
- self.connect(self.am_sel, (self.mixer, 1))
- self.connect(self.mixer, self.lpf)
- self.connect(self.lpf, self)
-
- def upper_sb( self ):
- self.xlate.set_taps([v.conjugate() for v in self.xlate_taps])
- self.sb_sel.set_k( 1.0 )
- self.am_sel.set_k( 0.0 )
-
- def lower_sb( self ):
- self.xlate.set_taps(self.xlate_taps)
- self.sb_sel.set_k( 1.0 )
- self.am_sel.set_k( 0.0 )
-
- def set_am( self ):
- taps = filter.firdes.low_pass( 1.0,
- self.if_rate,
- 5e3,
- 2e3,
- filter.firdes.WIN_HAMMING )
- self.xlate.set_taps( taps )
- self.sb_sel.set_k( 0.0 )
- self.am_sel.set_k( 1.0 )
-
- def set_bw( self, bw ):
- self.audio_taps = filter.firdes.low_pass(
- 1.0,
- self.af_rate,
- bw,
- 600,
- filter.firdes.WIN_HAMMING )
- self.lpf.set_taps( self.audio_taps )
-
- def tune( self, freq ):
- self.xlate.set_center_freq( freq )
-
diff --git a/gr-uhd/apps/hf_radio/startup.py b/gr-uhd/apps/hf_radio/startup.py
deleted file mode 100644
index 093369b577..0000000000
--- a/gr-uhd/apps/hf_radio/startup.py
+++ /dev/null
@@ -1 +0,0 @@
-from radio import *
diff --git a/gr-uhd/apps/hf_radio/ui.py b/gr-uhd/apps/hf_radio/ui.py
deleted file mode 100755
index a20ba4faba..0000000000
--- a/gr-uhd/apps/hf_radio/ui.py
+++ /dev/null
@@ -1,316 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2011 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-#
-
-# -*- coding: UTF-8 -*-
-# generated by wxGlade 0.4 on Mon Jan 2 19:02:03 2006
-
-import wx
-
-class ui_frame(wx.Frame):
- def __init__(self, *args, **kwds):
- # begin wxGlade: ui_frame.__init__
- kwds["style"] = wx.DEFAULT_FRAME_STYLE
- wx.Frame.__init__(self, *args, **kwds)
- self.sizer_1_staticbox = wx.StaticBox(self, -1, "sizer_1")
- self.freq_disp = wx.SpinCtrl(self, -1, "", min=0, max=100)
- self.spin_e6 = wx.SpinButton(self, -1 )
- self.spin_e5 = wx.SpinButton(self, -1 )
- self.spin_e4 = wx.SpinButton(self, -1 )
- self.spin_e3 = wx.SpinButton(self, -1 )
- self.spin_e2 = wx.SpinButton(self, -1 )
- self.spin_e1 = wx.SpinButton(self, -1 )
- self.spin_e0 = wx.SpinButton(self, -1 )
- self.panel_1 = wx.Panel(self, -1)
- self.panel_2 = wx.Panel(self, -1)
- self.button_lsb = wx.Button(self, -1, "LSB")
- self.button_usb = wx.Button(self, -1, "USB")
- self.button_am = wx.Button(self, -1, "AM")
- self.label_1 = wx.StaticText(self, -1, "VOLUME")
- self.label_2 = wx.StaticText(self, -1, "PGA")
- self.agc_level = wx.TextCtrl(self, -1, "")
- self.label_6 = wx.StaticText(self, -1, "")
- self.volume = wx.SpinCtrl(self, -1, "", min=0, max=100)
- self.pga = wx.SpinCtrl(self, -1, "", min=0, max=100)
- self.agc_max = wx.TextCtrl(self, -1, "")
- self.label_7 = wx.StaticText(self, -1, "")
- self.label_4 = wx.StaticText(self, -1, "AGC AUTHORITY")
- self.label_5 = wx.StaticText(self, -1, "AGC REF LVL")
- self.label_3 = wx.StaticText(self, -1, "BANDWIDTH")
- self.label_8 = wx.StaticText(self, -1, "")
- self.agc_gain = wx.TextCtrl(self, -1, "")
- self.agc_gain_s = wx.SpinButton(self, -1 )
- self.agc_ref = wx.TextCtrl(self, -1, "")
- self.agc_ref_s = wx.SpinButton(self, -1 )
- self.bandwidth = wx.TextCtrl(self, -1, "")
- self.bw_spin = wx.SpinButton(self, -1 )
- self.label_9 = wx.StaticText(self, -1, "")
- self.rssi = wx.Gauge(self, -1, 10, style=wx.GA_HORIZONTAL|wx.GA_SMOOTH)
- self.fe_panel = wx.Panel(self, -1)
- self.if_panel = wx.Panel(self, -1)
-
- self.__set_properties()
- self.__do_layout()
-
- self.Bind(wx.EVT_SPINCTRL, self.tune_evt, self.freq_disp)
- self.Bind(wx.EVT_SPIN_DOWN, self.down_e6, self.spin_e6)
- self.Bind(wx.EVT_SPIN_UP, self.up_e6, self.spin_e6)
- self.Bind(wx.EVT_SPIN_DOWN, self.down_e5, self.spin_e5)
- self.Bind(wx.EVT_SPIN_UP, self.up_e5, self.spin_e5)
- self.Bind(wx.EVT_SPIN_DOWN, self.down_e4, self.spin_e4)
- self.Bind(wx.EVT_SPIN_UP, self.up_e4, self.spin_e4)
- self.Bind(wx.EVT_SPIN_DOWN, self.down_e3, self.spin_e3)
- self.Bind(wx.EVT_SPIN_UP, self.up_e3, self.spin_e3)
- self.Bind(wx.EVT_SPIN_DOWN, self.down_e2, self.spin_e2)
- self.Bind(wx.EVT_SPIN_UP, self.up_e2, self.spin_e2)
- self.Bind(wx.EVT_SPIN_DOWN, self.down_e1, self.spin_e1)
- self.Bind(wx.EVT_SPIN_UP, self.up_e1, self.spin_e1)
- self.Bind(wx.EVT_SPIN_DOWN, self.down_e0, self.spin_e0)
- self.Bind(wx.EVT_SPIN_UP, self.up_e0, self.spin_e0)
- self.Bind(wx.EVT_BUTTON, self.set_lsb, self.button_lsb)
- self.Bind(wx.EVT_BUTTON, self.set_usb, self.button_usb)
- self.Bind(wx.EVT_BUTTON, self.set_am, self.button_am)
- self.Bind(wx.EVT_SPINCTRL, self.event_vol, self.volume)
- self.Bind(wx.EVT_SPINCTRL, self.event_pga, self.pga)
- self.Bind(wx.EVT_SPIN_DOWN, self.agc_gain_down, self.agc_gain_s)
- self.Bind(wx.EVT_SPIN_UP, self.agc_gain_up, self.agc_gain_s)
- self.Bind(wx.EVT_SPIN_DOWN, self.agc_ref_down, self.agc_ref_s)
- self.Bind(wx.EVT_SPIN_UP, self.agc_ref_up, self.agc_ref_s)
- self.Bind(wx.EVT_SPIN_DOWN, self.bw_down, self.bw_spin)
- self.Bind(wx.EVT_SPIN_UP, self.bw_up, self.bw_spin)
- # end wxGlade
-
- def __set_properties(self):
- # begin wxGlade: ui_frame.__set_properties
- self.SetTitle("frame_1")
- self.freq_disp.SetFont(wx.Font(32, wx.DEFAULT, wx.NORMAL, wx.NORMAL, 0, ""))
- self.rssi.SetMinSize((315, 10))
- self.rssi.SetForegroundColour(wx.Colour(255, 0, 0))
- # end wxGlade
-
- def __do_layout(self):
- # begin wxGlade: ui_frame.__do_layout
- sizer_1 = wx.StaticBoxSizer(self.sizer_1_staticbox, wx.VERTICAL)
- sizer_2 = wx.BoxSizer(wx.HORIZONTAL)
- sizer_4 = wx.BoxSizer(wx.VERTICAL)
- grid_sizer_4 = wx.GridSizer(2, 4, 0, 0)
- sizer_5 = wx.BoxSizer(wx.HORIZONTAL)
- sizer_7 = wx.BoxSizer(wx.HORIZONTAL)
- sizer_6 = wx.BoxSizer(wx.HORIZONTAL)
- grid_sizer_3 = wx.GridSizer(2, 4, 0, 0)
- sizer_3 = wx.BoxSizer(wx.VERTICAL)
- grid_sizer_1 = wx.GridSizer(2, 3, 0, 0)
- grid_sizer_2 = wx.GridSizer(1, 7, 0, 0)
- sizer_3.Add(self.freq_disp, 1, wx.EXPAND|wx.ADJUST_MINSIZE, 0)
- grid_sizer_2.Add(self.spin_e6, 0, wx.ADJUST_MINSIZE, 0)
- grid_sizer_2.Add(self.spin_e5, 0, wx.ADJUST_MINSIZE, 0)
- grid_sizer_2.Add(self.spin_e4, 0, wx.ADJUST_MINSIZE, 0)
- grid_sizer_2.Add(self.spin_e3, 0, wx.ADJUST_MINSIZE, 0)
- grid_sizer_2.Add(self.spin_e2, 0, wx.ADJUST_MINSIZE, 0)
- grid_sizer_2.Add(self.spin_e1, 0, wx.ADJUST_MINSIZE, 0)
- grid_sizer_2.Add(self.spin_e0, 0, wx.ADJUST_MINSIZE, 0)
- grid_sizer_1.Add(grid_sizer_2, 1, wx.EXPAND, 0)
- grid_sizer_1.Add(self.panel_1, 1, wx.EXPAND, 0)
- grid_sizer_1.Add(self.panel_2, 1, wx.EXPAND, 0)
- grid_sizer_1.Add(self.button_lsb, 0, wx.ADJUST_MINSIZE, 0)
- grid_sizer_1.Add(self.button_usb, 0, wx.ADJUST_MINSIZE, 0)
- grid_sizer_1.Add(self.button_am, 0, wx.ADJUST_MINSIZE, 0)
- sizer_3.Add(grid_sizer_1, 1, wx.EXPAND, 0)
- sizer_2.Add(sizer_3, 1, wx.EXPAND, 0)
- grid_sizer_3.Add(self.label_1, 0, wx.ADJUST_MINSIZE, 0)
- grid_sizer_3.Add(self.label_2, 0, wx.ADJUST_MINSIZE, 0)
- grid_sizer_3.Add(self.agc_level, 0, wx.ADJUST_MINSIZE, 0)
- grid_sizer_3.Add(self.label_6, 0, wx.ADJUST_MINSIZE, 0)
- grid_sizer_3.Add(self.volume, 0, wx.ADJUST_MINSIZE, 0)
- grid_sizer_3.Add(self.pga, 0, wx.ADJUST_MINSIZE, 0)
- grid_sizer_3.Add(self.agc_max, 0, wx.ADJUST_MINSIZE, 0)
- grid_sizer_3.Add(self.label_7, 0, wx.ADJUST_MINSIZE, 0)
- sizer_4.Add(grid_sizer_3, 1, wx.EXPAND, 0)
- grid_sizer_4.Add(self.label_4, 0, wx.ADJUST_MINSIZE, 0)
- grid_sizer_4.Add(self.label_5, 0, wx.ADJUST_MINSIZE, 0)
- grid_sizer_4.Add(self.label_3, 0, wx.ADJUST_MINSIZE, 0)
- grid_sizer_4.Add(self.label_8, 0, wx.ADJUST_MINSIZE, 0)
- sizer_6.Add(self.agc_gain, 0, wx.ADJUST_MINSIZE, 0)
- sizer_6.Add(self.agc_gain_s, 0, wx.ADJUST_MINSIZE, 0)
- grid_sizer_4.Add(sizer_6, 1, wx.EXPAND, 0)
- sizer_7.Add(self.agc_ref, 0, wx.ADJUST_MINSIZE, 0)
- sizer_7.Add(self.agc_ref_s, 0, wx.ADJUST_MINSIZE, 0)
- grid_sizer_4.Add(sizer_7, 1, wx.EXPAND, 0)
- sizer_5.Add(self.bandwidth, 0, wx.ADJUST_MINSIZE, 0)
- sizer_5.Add(self.bw_spin, 0, wx.ADJUST_MINSIZE, 0)
- grid_sizer_4.Add(sizer_5, 1, wx.EXPAND, 0)
- grid_sizer_4.Add(self.label_9, 0, wx.ADJUST_MINSIZE, 0)
- sizer_4.Add(grid_sizer_4, 1, wx.EXPAND, 0)
- sizer_4.Add(self.rssi, 1, wx.EXPAND|wx.ADJUST_MINSIZE, 0)
- sizer_2.Add(sizer_4, 1, wx.EXPAND, 0)
- sizer_1.Add(sizer_2, 1, wx.EXPAND, 0)
- sizer_1.Add(self.fe_panel, 1, wx.EXPAND, 0)
- sizer_1.Add(self.if_panel, 1, wx.EXPAND, 0)
- self.SetAutoLayout(True)
- self.SetSizer(sizer_1)
- sizer_1.Fit(self)
- sizer_1.SetSizeHints(self)
- self.Layout()
- # end wxGlade
-
- def down_e6(self, event): # wxGlade: ui_frame.<event_handler>
- print "Event handler `down_e6' not implemented"
- event.Skip()
-
- def up_e6(self, event): # wxGlade: ui_frame.<event_handler>
- print "Event handler `up_e6' not implemented"
- event.Skip()
-
- def down_e5(self, event): # wxGlade: ui_frame.<event_handler>
- print "Event handler `down_e5' not implemented"
- event.Skip()
-
- def up_e5(self, event): # wxGlade: ui_frame.<event_handler>
- print "Event handler `up_e5' not implemented"
- event.Skip()
-
- def down_e4(self, event): # wxGlade: ui_frame.<event_handler>
- print "Event handler `down_e4' not implemented"
- event.Skip()
-
- def up_e4(self, event): # wxGlade: ui_frame.<event_handler>
- print "Event handler `up_e4' not implemented"
- event.Skip()
-
- def down_e3(self, event): # wxGlade: ui_frame.<event_handler>
- print "Event handler `down_e3' not implemented"
- event.Skip()
-
- def up_e3(self, event): # wxGlade: ui_frame.<event_handler>
- print "Event handler `up_e3' not implemented"
- event.Skip()
-
- def down_e2(self, event): # wxGlade: ui_frame.<event_handler>
- print "Event handler `down_e2' not implemented"
- event.Skip()
-
- def up_e2(self, event): # wxGlade: ui_frame.<event_handler>
- print "Event handler `up_e2' not implemented"
- event.Skip()
-
- def down_e1(self, event): # wxGlade: ui_frame.<event_handler>
- print "Event handler `down_e1' not implemented"
- event.Skip()
-
- def up_e1(self, event): # wxGlade: ui_frame.<event_handler>
- print "Event handler `up_e1' not implemented"
- event.Skip()
-
- def down_e0(self, event): # wxGlade: ui_frame.<event_handler>
- print "Event handler `down_e0' not implemented"
- event.Skip()
-
- def up_e0(self, event): # wxGlade: ui_frame.<event_handler>
- print "Event handler `up_e0' not implemented"
- event.Skip()
-
- def event_vol(self, event): # wxGlade: ui_frame.<event_handler>
- print "Event handler `event_vol' not implemented"
- event.Skip()
-
- def event_pga(self, event): # wxGlade: ui_frame.<event_handler>
- print "Event handler `event_pga' not implemented"
- event.Skip()
-
- def set_lsb(self, event): # wxGlade: ui_frame.<event_handler>
- print "Event handler `set_lsb' not implemented"
- event.Skip()
-
- def set_usb(self, event): # wxGlade: ui_frame.<event_handler>
- print "Event handler `set_usb' not implemented"
- event.Skip()
-
- def set_am(self, event): # wxGlade: ui_frame.<event_handler>
- print "Event handler `set_am' not implemented"
- event.Skip()
-
- def set_bw(self, event): # wxGlade: ui_frame.<event_handler>
- print "Event handler `set_bw' not implemented"
- event.Skip()
-
- def tune_evt(self, event): # wxGlade: ui_frame.<event_handler>
- print "Event handler `tune_evt' not implemented"
- event.Skip()
-
- def bw_down(self, event): # wxGlade: ui_frame.<event_handler>
- print "Event handler `bw_down' not implemented"
- event.Skip()
-
- def bw_up(self, event): # wxGlade: ui_frame.<event_handler>
- print "Event handler `bw_up' not implemented"
- event.Skip()
-
- def agc_gain_down(self, event): # wxGlade: ui_frame.<event_handler>
- print "Event handler `agc_gain_down' not implemented"
- event.Skip()
-
- def agc_gain_up(self, event): # wxGlade: ui_frame.<event_handler>
- print "Event handler `agc_gain_up' not implemented"
- event.Skip()
-
- def agc_ref_down(self, event): # wxGlade: ui_frame.<event_handler>
- print "Event handler `agc_ref_down' not implemented"
- event.Skip()
-
- def agc_ref_up(self, event): # wxGlade: ui_frame.<event_handler>
- print "Event handler `agc_ref_up' not implemented"
- event.Skip()
-
-# end of class ui_frame
-
-
-class RadioFrame(wx.Frame):
- def __init__(self, *args, **kwds):
- # content of this block not found: did you rename this class?
- pass
-
- def __set_properties(self):
- # content of this block not found: did you rename this class?
- pass
-
- def __do_layout(self):
- # content of this block not found: did you rename this class?
- pass
-
-# end of class RadioFrame
-
-
-class MyFrame(wx.Frame):
- def __init__(self, *args, **kwds):
- # content of this block not found: did you rename this class?
- pass
-
- def __set_properties(self):
- # content of this block not found: did you rename this class?
- pass
-
- def __do_layout(self):
- # content of this block not found: did you rename this class?
- pass
-
-# end of class MyFrame
-
-
diff --git a/gr-uhd/apps/uhd_fft_wx b/gr-uhd/apps/uhd_fft_wx
deleted file mode 100755
index 0e80de6bd8..0000000000
--- a/gr-uhd/apps/uhd_fft_wx
+++ /dev/null
@@ -1,348 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2012 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-#
-
-from gnuradio import gr, gru
-from gnuradio import uhd
-from gnuradio import eng_notation
-from gnuradio.eng_option import eng_option
-from optparse import OptionParser
-
-import sys
-import numpy
-
-try:
- from gnuradio.wxgui import stdgui2, form, slider
- from gnuradio.wxgui import forms
- from gnuradio.wxgui import fftsink2, waterfallsink2, scopesink2
- import wx
-except ImportError:
- sys.stderr.write("Error importing GNU Radio's wxgui. Please make sure gr-wxgui is installed.\n")
- sys.exit(1)
-
-class app_top_block(stdgui2.std_top_block):
- def __init__(self, frame, panel, vbox, argv):
- stdgui2.std_top_block.__init__(self, frame, panel, vbox, argv)
-
- self.frame = frame
- self.panel = panel
-
- parser = OptionParser(option_class=eng_option)
- parser.add_option("-a", "--args", type="string", default="",
- help="UHD device address args , [default=%default]")
- parser.add_option("", "--spec", type="string", default=None,
- help="Subdevice of UHD device where appropriate")
- parser.add_option("-A", "--antenna", type="string", default=None,
- help="select Rx Antenna where appropriate")
- parser.add_option("-s", "--samp-rate", type="eng_float", default=1e6,
- help="set sample rate (bandwidth) [default=%default]")
- parser.add_option("-f", "--freq", type="eng_float", default=None,
- help="set frequency to FREQ", metavar="FREQ")
- parser.add_option("-g", "--gain", type="eng_float", default=None,
- help="set gain in dB (default is midpoint)")
- parser.add_option("-W", "--waterfall", action="store_true", default=False,
- help="Enable waterfall display")
- parser.add_option("-S", "--oscilloscope", action="store_true", default=False,
- help="Enable oscilloscope display")
- parser.add_option("", "--avg-alpha", type="eng_float", default=1e-1,
- help="Set fftsink averaging factor, default=[%default]")
- parser.add_option ("", "--averaging", action="store_true", default=False,
- help="Enable fftsink averaging, default=[%default]")
- parser.add_option("", "--ref-scale", type="eng_float", default=1.0,
- help="Set dBFS=0dB input value, default=[%default]")
- parser.add_option("", "--fft-size", type="int", default=1024,
- help="Set number of FFT bins [default=%default]")
- parser.add_option("", "--fft-rate", type="int", default=30,
- help="Set FFT update rate, [default=%default]")
- parser.add_option("", "--wire-format", type="string", default="sc16",
- help="Set wire format from USRP [default=%default]")
- parser.add_option("", "--stream-args", type="string", default="",
- help="Set additional stream args [default=%default]")
- parser.add_option("", "--show-async-msg", action="store_true", default=False,
- help="Show asynchronous message notifications from UHD [default=%default]")
- (options, args) = parser.parse_args()
- if len(args) != 0:
- parser.print_help()
- sys.exit(1)
- self.options = options
- self.show_debug_info = True
-
- self.u = uhd.usrp_source(device_addr=options.args,
- stream_args=uhd.stream_args(cpu_format='fc32',
- otw_format=options.wire_format, args=options.stream_args))
-
- # Set the subdevice spec
- if(options.spec):
- self.u.set_subdev_spec(options.spec, 0)
-
- # Set the antenna
- if(options.antenna):
- self.u.set_antenna(options.antenna, 0)
-
- self.u.set_samp_rate(options.samp_rate)
- input_rate = self.u.get_samp_rate()
-
- if options.waterfall:
- self.scope = \
- waterfallsink2.waterfall_sink_c (panel, fft_size=1024,
- sample_rate=input_rate)
- self.frame.SetMinSize((800, 420))
- elif options.oscilloscope:
- self.scope = scopesink2.scope_sink_c(panel, sample_rate=input_rate)
- self.frame.SetMinSize((800, 600))
- else:
- self.scope = fftsink2.fft_sink_c (panel,
- fft_size=options.fft_size,
- sample_rate=input_rate,
- ref_scale=options.ref_scale,
- ref_level=20.0,
- y_divs = 12,
- average=options.averaging,
- avg_alpha=options.avg_alpha,
- fft_rate=options.fft_rate)
- def fftsink_callback(x, y):
- self.set_freq(x)
-
- self.scope.set_callback(fftsink_callback)
- self.frame.SetMinSize((800, 420))
-
- self.connect(self.u, self.scope)
-
- self._build_gui(vbox)
- self._setup_events()
-
-
- # set initial values
-
- if options.gain is None:
- # if no gain was specified, use the mid-point in dB
- g = self.u.get_gain_range()
- options.gain = float(g.start()+g.stop())/2
-
- if options.freq is None:
- # if no freq was specified, use the mid-point
- r = self.u.get_freq_range()
- options.freq = float(r.start()+r.stop())/2
-
- self.set_gain(options.gain)
-
- if self.show_debug_info:
- self.myform['samprate'].set_value(self.u.get_samp_rate())
- self.myform['rffreq'].set_value(0)
- self.myform['dspfreq'].set_value(0)
-
- if not(self.set_freq(options.freq)):
- self._set_status_msg("Failed to set initial frequency")
-
- # Direct asynchronous notifications to callback function
- if self.options.show_async_msg:
- self.async_msgq = gr.msg_queue(0)
- self.async_src = uhd.amsg_source("", self.async_msgq)
- self.async_rcv = gru.msgq_runner(self.async_msgq, self.async_callback)
-
- def async_callback(self, msg):
- md = self.async_src.msg_to_async_metadata_t(msg)
- print "Channel: %i Time: %f Event: %i" % (md.channel, md.time_spec.get_real_secs(), md.event_code)
-
- def _set_status_msg(self, msg):
- self.frame.GetStatusBar().SetStatusText(msg, 0)
-
- def _build_gui(self, vbox):
-
- def _form_set_freq(kv):
- return self.set_freq(kv['freq'])
-
- vbox.Add(self.scope.win, 10, wx.EXPAND)
-
- # add control area at the bottom
- self.myform = myform = form.form()
- hbox = wx.BoxSizer(wx.HORIZONTAL)
- hbox.Add((5,0), 0, 0)
- myform['freq'] = form.float_field(
- parent=self.panel, sizer=hbox, label="Center freq", weight=1,
- callback=myform.check_input_and_call(_form_set_freq,
- self._set_status_msg))
-
- hbox.Add((5,0), 0, 0)
- g = self.u.get_gain_range()
-
- # some configurations don't have gain control
- if g.stop() <= g.start():
- glow = 0.0
- ghigh = 1.0
-
- else:
- glow = g.start()
- ghigh = g.stop()
-
- myform['gain'] = form.slider_field(parent=self.panel,
- sizer=hbox, label="Gain",
- weight=3,
- min=int(glow), max=int(ghigh),
- callback=self.set_gain)
-
- try:
- mboard_id = self.u.get_usrp_info()["mboard_id"]
- mboard_serial = self.u.get_usrp_info()["mboard_serial"]
- if mboard_serial == "":
- mboard_serial = "no serial"
- dboard_subdev_name = self.u.get_usrp_info()["rx_subdev_name"]
- dboard_serial = self.u.get_usrp_info()["rx_serial"]
- if dboard_serial == "":
- dboard_serial = "no serial"
- subdev = self.u.get_subdev_spec()
- antenna = self.u.get_antenna()
-
- if "B200" in mboard_id or "B210" in mboard_id:
- usrp_config_val = "%s (%s), %s (%s, %s)" % (mboard_id, mboard_serial, dboard_subdev_name, subdev, antenna)
- else:
- usrp_config_val = "%s (%s), %s (%s, %s, %s)" % (mboard_id, mboard_serial, dboard_subdev_name, dboard_serial, subdev, antenna)
- except:
- usrp_config_val = "Not implemented in this version."
-
- uhd_box = forms.static_box_sizer(parent=self.panel,
- label="UHD (%s)" % (uhd.get_version_string()),
- orient=wx.HORIZONTAL)
- usrp_config_form = forms.static_text(
- parent=self.panel,
- sizer=uhd_box,
- value=usrp_config_val,
- label="USRP",
- converter=forms.str_converter(),
- )
- vbox.Add(uhd_box, 0, wx.EXPAND)
- vbox.AddSpacer(5)
-
- hbox.Add((5,0), 0, 0)
- vbox.Add(hbox, 0, wx.EXPAND)
-
- self._build_subpanel(vbox)
-
- def _build_subpanel(self, vbox_arg):
- # build a secondary information panel (sometimes hidden)
-
- # FIXME figure out how to have this be a subpanel that is always
- # created, but has its visibility controlled by foo.Show(True/False)
-
- def _form_set_samp_rate(kv):
- return self.set_samp_rate(kv['samprate'])
-
- if not(self.show_debug_info):
- return
-
- panel = self.panel
- vbox = vbox_arg
- myform = self.myform
-
- hbox = wx.BoxSizer(wx.HORIZONTAL)
-
- hbox.Add((5,0), 0)
- myform['samprate'] = form.float_field(
- parent=panel, sizer=hbox, label="Sample Rate",
- callback=myform.check_input_and_call(_form_set_samp_rate,
- self._set_status_msg))
-
- hbox.Add((5,0), 1)
- myform['rffreq'] = form.static_float_field(
- parent=panel, sizer=hbox, label="RF Freq.")
-
- hbox.Add((5,0), 1)
- myform['dspfreq'] = form.static_float_field(
- parent=panel, sizer=hbox, label="DSP Freq.")
-
- vbox.AddSpacer(5)
-
- vbox.Add(hbox, 0, wx.EXPAND)
- vbox.AddSpacer(5)
-
- def set_freq(self, target_freq):
- """
- Set the center frequency we're interested in.
-
- @param target_freq: frequency in Hz
- @rypte: bool
- """
- r = self.u.set_center_freq(target_freq, 0)
-
- if r:
- self.myform['freq'].set_value(self.u.get_center_freq())
- self.myform['rffreq'].set_value(r.actual_rf_freq)
- self.myform['dspfreq'].set_value(r.actual_dsp_freq)
-
- if not self.options.oscilloscope:
- self.scope.set_baseband_freq(target_freq)
- return True
-
- return False
-
- def set_gain(self, gain):
- if self.myform.has_key('gain'):
- self.myform['gain'].set_value(gain) # update displayed value
- self.u.set_gain(gain, 0)
-
- def set_samp_rate(self, samp_rate):
- ok = self.u.set_samp_rate(samp_rate)
- input_rate = self.u.get_samp_rate()
- self.scope.set_sample_rate(input_rate)
- if self.show_debug_info: # update displayed values
- self.myform['samprate'].set_value(self.u.get_samp_rate())
-
- # uhd set_samp_rate never fails; always falls back to closest requested.
- return True
-
- def _setup_events(self):
- if not self.options.waterfall and not self.options.oscilloscope:
- self.scope.win.Bind(wx.EVT_LEFT_DCLICK, self.evt_left_dclick)
-
- def evt_left_dclick(self, event):
- (ux, uy) = self.scope.win.GetXY(event)
- if event.CmdDown():
- # Re-center on maximum power
- points = self.scope.win._points
- if self.scope.win.peak_hold:
- if self.scope.win.peak_vals is not None:
- ind = numpy.argmax(self.scope.win.peak_vals)
- else:
- ind = int(points.shape()[0]/2)
- else:
- ind = numpy.argmax(points[:,1])
-
- (freq, pwr) = points[ind]
- target_freq = freq/self.scope.win._scale_factor
- print ind, freq, pwr
- self.set_freq(target_freq)
- else:
- # Re-center on clicked frequency
- target_freq = ux/self.scope.win._scale_factor
- self.set_freq(target_freq)
-
-
-def main ():
- try:
- app = stdgui2.stdapp(app_top_block, "UHD FFT", nstatus=1)
- app.MainLoop()
-
- except RuntimeError, e:
- print e
- sys.exit(1)
-
-if __name__ == '__main__':
- main ()
diff --git a/gr-uhd/apps/uhd_siggen_gui b/gr-uhd/apps/uhd_siggen_gui
index c5528f3777..9a57aa65ae 100755
--- a/gr-uhd/apps/uhd_siggen_gui
+++ b/gr-uhd/apps/uhd_siggen_gui
@@ -428,7 +428,7 @@ class uhd_siggen_gui(Qt.QWidget):
def set_lo_locked_probe_0(self, lo_locked_probe_0):
Qt.QMetaObject.invokeMethod(
self._lo_locked_probe_0_label, "setText",
- Qt.Q_ARG("QString", str(self.lo_locked_probe_0))
+ Qt.Q_ARG("QString", str(lo_locked_probe_0))
)
diff --git a/gr-uhd/examples/python/CMakeLists.txt b/gr-uhd/examples/python/CMakeLists.txt
deleted file mode 100644
index cf50feb148..0000000000
--- a/gr-uhd/examples/python/CMakeLists.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-# Copyright 2011 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-
-include(GrPython)
-
-GR_PYTHON_INSTALL(
- PROGRAMS
- fm_tx4.py
- fm_tx_2_daughterboards.py
- max_power.py
- usrp_am_mw_rcv.py
- usrp_nbfm_ptt.py
- usrp_nbfm_rcv.py
- usrp_spectrum_sense.py
- usrp_tv_rcv_nogui.py
- usrp_tv_rcv.py
- usrp_wfm_rcv2_nogui.py
- usrp_wfm_rcv_fmdet.py
- usrp_wfm_rcv_nogui.py
- usrp_wfm_rcv_pll.py
- usrp_wfm_rcv.py
- usrp_wfm_rcv_sca.py
- usrp_wxapt_rcv.py
- DESTINATION ${GR_PKG_UHD_EXAMPLES_DIR}
-)
diff --git a/gr-uhd/examples/python/fm_tx4.py b/gr-uhd/examples/python/fm_tx4.py
deleted file mode 100755
index 516033dae1..0000000000
--- a/gr-uhd/examples/python/fm_tx4.py
+++ /dev/null
@@ -1,211 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2005-2007,2011 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-#
-
-"""
-Transmit N simultaneous narrow band FM signals.
-
-They will be centered at the frequency specified on the command line,
-and will spaced at 25kHz steps from there.
-
-The program opens N files with names audio-N.dat where N is in [0,7].
-These files should contain floating point audio samples in the range [-1,1]
-sampled at 32kS/sec. You can create files like this using
-audio_to_file.py
-"""
-
-from gnuradio import gr, eng_notation
-from gnuradio import uhd
-from gnuradio import analog
-from gnuradio import blocks
-from gnuradio.eng_option import eng_option
-from optparse import OptionParser
-import math
-import sys
-
-from gnuradio.wxgui import stdgui2, fftsink2
-import wx
-
-
-########################################################
-# instantiate one transmit chain for each call
-
-class pipeline(gr.hier_block2):
- def __init__(self, filename, lo_freq, audio_rate, if_rate):
-
- gr.hier_block2.__init__(self, "pipeline",
- gr.io_signature(0, 0, 0),
- gr.io_signature(1, 1, gr.sizeof_gr_complex))
-
- try:
- src = blocks.file_source (gr.sizeof_float, filename, True)
- except RuntimeError:
- sys.stderr.write(("\nError: Could not open file '%s'\n\n" % \
- filename))
- sys.exit(1)
-
- print audio_rate, if_rate
- fmtx = analog.nbfm_tx(audio_rate, if_rate, max_dev=5e3,
- tau=75e-6, fh=0.925*if_rate/2.0)
-
- # Local oscillator
- lo = analog.sig_source_c(if_rate, # sample rate
- analog.GR_SIN_WAVE, # waveform type
- lo_freq, # frequency
- 1.0, # amplitude
- 0) # DC Offset
- mixer = blocks.multiply_cc()
-
- self.connect(src, fmtx, (mixer, 0))
- self.connect(lo, (mixer, 1))
- self.connect(mixer, self)
-
-class fm_tx_block(stdgui2.std_top_block):
- def __init__(self, frame, panel, vbox, argv):
- MAX_CHANNELS = 7
- stdgui2.std_top_block.__init__ (self, frame, panel, vbox, argv)
-
- parser = OptionParser (option_class=eng_option)
- parser.add_option("-a", "--args", type="string", default="",
- help="UHD device address args [default=%default]")
- parser.add_option("", "--spec", type="string", default=None,
- help="Subdevice of UHD device where appropriate")
- parser.add_option("-A", "--antenna", type="string", default=None,
- help="select Rx Antenna where appropriate")
- parser.add_option("-s", "--samp-rate", type="eng_float", default=400e3,
- help="set sample rate (bandwidth) [default=%default]")
- parser.add_option("-f", "--freq", type="eng_float", default=None,
- help="set frequency to FREQ", metavar="FREQ")
- parser.add_option("-g", "--gain", type="eng_float", default=None,
- help="set gain in dB (default is midpoint)")
- parser.add_option("-n", "--nchannels", type="int", default=4,
- help="number of Tx channels [1,4]")
- #parser.add_option("","--debug", action="store_true", default=False,
- # help="Launch Tx debugger")
- (options, args) = parser.parse_args ()
-
- if len(args) != 0:
- parser.print_help()
- sys.exit(1)
-
- if options.nchannels < 1 or options.nchannels > MAX_CHANNELS:
- sys.stderr.write ("fm_tx4: nchannels out of range. Must be in [1,%d]\n" % MAX_CHANNELS)
- sys.exit(1)
-
- if options.freq is None:
- sys.stderr.write("fm_tx4: must specify frequency with -f FREQ\n")
- parser.print_help()
- sys.exit(1)
-
- # ----------------------------------------------------------------
- # Set up constants and parameters
-
- self.u = uhd.usrp_sink(device_addr=options.args, stream_args=uhd.stream_args('fc32'))
-
- # Set the subdevice spec
- if(options.spec):
- self.u.set_subdev_spec(options.spec, 0)
-
- # Set the antenna
- if(options.antenna):
- self.u.set_antenna(options.antenna, 0)
-
- self.usrp_rate = options.samp_rate
- self.u.set_samp_rate(self.usrp_rate)
- self.usrp_rate = self.u.get_samp_rate()
-
- self.sw_interp = 10
- self.audio_rate = self.usrp_rate / self.sw_interp # 32 kS/s
-
- if options.gain is None:
- # if no gain was specified, use the mid-point in dB
- g = self.u.get_gain_range()
- options.gain = float(g.start()+g.stop())/2
-
- self.set_gain(options.gain)
- self.set_freq(options.freq)
-
- self.sum = blocks.add_cc ()
-
- # Instantiate N NBFM channels
- step = 25e3
- offset = (0 * step, 1 * step, -1 * step,
- 2 * step, -2 * step, 3 * step, -3 * step)
-
- for i in range (options.nchannels):
- t = pipeline("audio-%d.dat" % (i % 4), offset[i],
- self.audio_rate, self.usrp_rate)
- self.connect(t, (self.sum, i))
-
- self.gain = blocks.multiply_const_cc (1.0 / options.nchannels)
-
- # connect it all
- self.connect (self.sum, self.gain)
- self.connect (self.gain, self.u)
-
- # plot an FFT to verify we are sending what we want
- if 1:
- post_mod = fftsink2.fft_sink_c(panel, title="Post Modulation",
- fft_size=512,
- sample_rate=self.usrp_rate,
- y_per_div=20,
- ref_level=40)
- self.connect (self.gain, post_mod)
- vbox.Add (post_mod.win, 1, wx.EXPAND)
-
-
- #if options.debug:
- # self.debugger = tx_debug_gui.tx_debug_gui(self.subdev)
- # self.debugger.Show(True)
-
-
- def set_freq(self, target_freq):
- """
- Set the center frequency we're interested in.
-
- Args:
- target_freq: frequency in Hz
- @rypte: bool
-
- Tuning is a two step process. First we ask the front-end to
- tune as close to the desired frequency as it can. Then we use
- the result of that operation and our target_frequency to
- determine the value for the digital up converter. Finally, we feed
- any residual_freq to the s/w freq translater.
- """
-
- r = self.u.set_center_freq(target_freq, 0)
- if r:
- print "Frequency =", eng_notation.num_to_str(self.u.get_center_freq())
- return True
-
- return False
-
- def set_gain(self, gain):
- self.u.set_gain(gain, 0)
-
-
-def main ():
- app = stdgui2.stdapp(fm_tx_block, "Multichannel FM Tx", nstatus=1)
- app.MainLoop ()
-
-if __name__ == '__main__':
- main ()
diff --git a/gr-uhd/examples/python/fm_tx_2_daughterboards.py b/gr-uhd/examples/python/fm_tx_2_daughterboards.py
deleted file mode 100755
index b4958b8596..0000000000
--- a/gr-uhd/examples/python/fm_tx_2_daughterboards.py
+++ /dev/null
@@ -1,216 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2005-2007,2011,2012 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-#
-
-"""
-Transmit 2 signals, one out each daughterboard.
-
-Outputs SSB (USB) signals on side A and side B at frequencies
-specified on command line.
-
-Side A is 600 Hz tone.
-Side B is 350 + 440 Hz tones.
-"""
-
-from gnuradio import gr, uhd
-from gnuradio import filter
-from gnuradio import analog
-from gnuradio import blocks
-from gnuradio.eng_notation import num_to_str, str_to_num
-from gnuradio.eng_option import eng_option
-from optparse import OptionParser
-import math
-import sys
-
-
-class example_signal_0(gr.hier_block2):
- """
- Sinusoid at 600 Hz.
- """
- def __init__(self, sample_rate):
- gr.hier_block2.__init__(self, "example_signal_0",
- gr.io_signature(0, 0, 0), # Input signature
- gr.io_signature(1, 1, gr.sizeof_gr_complex)) # Output signature
-
- src = analog.sig_source_c(sample_rate, # sample rate
- analog.GR_SIN_WAVE, # waveform type
- 600, # frequency
- 1.0, # amplitude
- 0) # DC Offset
-
- self.connect(src, self)
-
-
-class example_signal_1(gr.hier_block2):
- """
- North American dial tone (350 + 440 Hz).
- """
- def __init__(self, sample_rate):
- gr.hier_block2.__init__(self, "example_signal_1",
- gr.io_signature(0, 0, 0), # Input signature
- gr.io_signature(1, 1, gr.sizeof_gr_complex)) # Output signature
-
- src0 = analog.sig_source_c(sample_rate, # sample rate
- analog.GR_SIN_WAVE, # waveform type
- 350, # frequency
- 1.0, # amplitude
- 0) # DC Offset
-
- src1 = analog.sig_source_c(sample_rate, # sample rate
- analog.GR_SIN_WAVE, # waveform type
- 440, # frequency
- 1.0, # amplitude
- 0) # DC Offset
- sum = blocks.add_cc()
- self.connect(src0, (sum, 0))
- self.connect(src1, (sum, 1))
- self.connect(sum, self)
-
-class my_top_block(gr.top_block):
-
- def __init__(self):
- gr.top_block.__init__(self)
-
- usage = "%prog: [options] tx-freq0 tx-freq1"
- parser = OptionParser (option_class=eng_option, usage=usage)
- parser.add_option("-a", "--args", type="string", default="",
- help="UHD device address args [default=%default]")
- parser.add_option("", "--spec", type="string", default=None,
- help="Subdevice of UHD device where appropriate")
- parser.add_option("-A", "--antenna", type="string", default=None,
- help="select Rx Antenna where appropriate")
- parser.add_option("-s", "--samp-rate", type="eng_float", default=320e3,
- help="set sample rate [default=%default]")
- parser.add_option("-g", "--gain", type="eng_float", default=None,
- help="set gain in dB (default is midpoint)")
- (options, args) = parser.parse_args ()
-
- if len(args) != 2:
- parser.print_help()
- raise SystemExit
- else:
- freq0 = str_to_num(args[0])
- freq1 = str_to_num(args[1])
-
- # ----------------------------------------------------------------
- # Set up USRP to transmit on both daughterboards
-
- d = uhd.find_devices(uhd.device_addr(options.args))
- uhd_type = d[0].get('type')
-
- stream_args = uhd.stream_args('fc32', channels=range(2))
- self.u = uhd.usrp_sink(device_addr=options.args, stream_args=stream_args)
-
- # Set up USRP system based on type
- if(uhd_type == "usrp"):
- self.u.set_subdev_spec("A:0 B:0")
- tr0 = uhd.tune_request(freq0)
- tr1 = uhd.tune_request(freq1)
-
- else:
- if abs(freq0 - freq1) > 5.5e6:
- sys.stderr.write("\nError: When not using two separate d'boards, frequencies must bewithin 5.5MHz of each other.\n")
- raise SystemExit
-
- self.u.set_subdev_spec("A:0 A:0")
-
- mid_freq = (freq0 + freq1)/2.0
- tr0 = uhd.tune_request(freq0, rf_freq=mid_freq,
- rf_freq_policy=uhd.tune_request.POLICY_MANUAL)
-
- tr1 = uhd.tune_request(freq1, rf_freq=mid_freq,
- rf_freq_policy=uhd.tune_request.POLICY_MANUAL)
-
- # Use the tune requests to tune each channel
- self.set_freq(tr0, 0)
- self.set_freq(tr1, 1)
-
- self.usrp_rate = options.samp_rate
-
- self.u.set_samp_rate(self.usrp_rate)
- dev_rate = self.u.get_samp_rate()
-
- # ----------------------------------------------------------------
- # build two signal sources, interleave them, amplify and
- # connect them to usrp
-
- sig0 = example_signal_0(self.usrp_rate)
- sig1 = example_signal_1(self.usrp_rate)
-
- intl = blocks.interleave(gr.sizeof_gr_complex)
- self.connect(sig0, (intl, 0))
- self.connect(sig1, (intl, 1))
-
- # Correct for any difference in requested and actual rates
- rrate = self.usrp_rate / dev_rate
- resamp = filter.pfb.arb_resampler_ccf(rrate)
-
- # and wire them up
- self.connect(intl, resamp, self.u)
-
- if options.gain is None:
- # if no gain was specified, use the mid-point in dB
- g = self.u.get_gain_range()
- options.gain = float(g.start()+g.stop())/2.0
-
- self.set_gain(options.gain, 0)
- self.set_gain(options.gain, 1)
-
- # Set the subdevice spec
- if(options.spec):
- self.u.set_subdev_spec(options.spec, 0)
-
- # Set the antenna
- if(options.antenna):
- self.u.set_antenna(options.antenna, 0)
- self.u.set_antenna(options.antenna, 1)
-
- def set_freq(self, target_freq, chan):
- """
- Set the center frequency we're interested in.
-
- Args:
- side: 0 = side A, 1 = side B
- target_freq: frequency in Hz
- @rtype: bool
- """
-
- print "Tuning channel %s to %sHz" % \
- (chan, num_to_str(target_freq))
-
- r = self.u.set_center_freq(target_freq, chan)
-
- if r:
- return True
-
- else:
- print " Set Frequency Failed!"
-
- return False
-
- def set_gain(self, gain, chan):
- self.u.set_gain(gain, chan)
-
-if __name__ == '__main__':
- try:
- my_top_block().run()
- except KeyboardInterrupt:
- pass
diff --git a/gr-uhd/examples/python/freq_hopping.py b/gr-uhd/examples/python/freq_hopping.py
deleted file mode 100755
index ce33a92a51..0000000000
--- a/gr-uhd/examples/python/freq_hopping.py
+++ /dev/null
@@ -1,220 +0,0 @@
-#!/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.
-#
-
-"""
-TXs a waveform (either from a file, or a sinusoid) in a frequency-hopping manner.
-"""
-
-import numpy
-import argparse
-import pmt
-from gnuradio import gr
-from gnuradio import blocks
-from gnuradio import uhd
-
-def setup_parser():
- """ Setup the parser for the frequency hopper. """
- parser = argparse.ArgumentParser(
- description="Transmit a signal in a frequency-hopping manner, using tx_freq tags."
- )
- parser.add_argument('-i', '--input-file', type=file, default=None,
- help="File with samples to transmit. If left out, will transmit a sinusoid.")
- parser.add_argument("-a", "--args", default="",
- help="UHD device address args.")
- parser.add_argument("--spec", default="",
- help="UHD subdev spec.")
- parser.add_argument("--antenna", default="",
- help="UHD antenna settings.")
- parser.add_argument("--gain", default=None, type=float,
- help="USRP gain (defaults to mid-point in dB).")
- parser.add_argument("-r", "--rate", type=float, default=1e6,
- help="Sampling rate")
- parser.add_argument("-N", "--samp-per-burst", type=int, default=10000,
- help="Samples per burst")
- parser.add_argument("-t", "--hop-time", type=float, default=1000,
- help="Time between hops in milliseconds. This must be larger than or equal to the burst duration as set by --samp-per-burst")
- parser.add_argument("-f", "--freq", type=float, default=2.45e9,
- help="Base frequency. This is the middle channel frequency at which the USRP will Tx.")
- parser.add_argument("--dsp", action='store_true',
- help="DSP tuning only.")
- parser.add_argument("-d", "--freq-delta", type=float, default=1e6,
- help="Channel spacing.")
- parser.add_argument("-c", "--num-channels", type=int, default=5,
- help="Number of channels.")
- parser.add_argument("-B", "--num-bursts", type=int, default=30,
- help="Number of bursts to transmit before terminating.")
- parser.add_argument("-p", "--post-tuning", action='count',
- help="Tune after transmitting. Default is to tune immediately before transmitting.")
- parser.add_argument("-v", "--verbose", action='count',
- help="Print more information. The morer the printier.")
- return parser
-
-
-class FrequencyHopperSrc(gr.hier_block2):
- """ Provides tags for frequency hopping """
- def __init__(
- self,
- n_bursts, n_channels,
- freq_delta, base_freq, dsp_tuning,
- burst_length, base_time, hop_time,
- post_tuning=False,
- tx_gain=0,
- verbose=False
- ):
- gr.hier_block2.__init__(self,
- "FrequencyHopperSrc",
- gr.io_signature(1, 1, gr.sizeof_gr_complex),
- gr.io_signature(1, 1, gr.sizeof_gr_complex),
- )
- n_samples_total = n_bursts * burst_length
- lowest_frequency = base_freq - numpy.floor(n_channels/2) * freq_delta
- self.hop_sequence = [lowest_frequency + n * freq_delta for n in xrange(n_channels)]
- numpy.random.shuffle(self.hop_sequence)
- # Repeat that:
- self.hop_sequence = [self.hop_sequence[x % n_channels] for x in xrange(n_bursts)]
- if verbose:
- print "Hop Frequencies | Hop Pattern"
- print "=================|================================"
- for f in self.hop_sequence:
- print "{:6.3f} MHz | ".format(f/1e6),
- if n_channels < 50:
- print " " * int((f - base_freq) / freq_delta) + "#"
- else:
- print "\n"
- print "=================|================================"
- # There's no real point in setting the gain via tag for this application,
- # but this is an example to show you how to do it.
- gain_tag = gr.tag_t()
- gain_tag.offset = 0
- gain_tag.key = pmt.string_to_symbol('tx_command')
- gain_tag.value = pmt.to_pmt({'gain': tx_gain})
- tag_list = [gain_tag,]
- for i in xrange(len(self.hop_sequence)):
- tune_tag = gr.tag_t()
- tune_tag.offset = i * burst_length
- if i > 0 and post_tuning and not dsp_tuning: # TODO dsp_tuning should also be able to do post_tuning
- tune_tag.offset -= 1 # Move it to last sample of previous burst
- if dsp_tuning:
- tune_tag.key = pmt.string_to_symbol('tx_command')
- tune_tag.value = pmt.to_pmt({'lo_freq': base_freq, 'dsp_freq': base_freq - self.hop_sequence[i]})
- else:
- tune_tag.key = pmt.string_to_symbol('tx_freq')
- 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
- length_tag.key = pmt.string_to_symbol('packet_len')
- length_tag.value = pmt.from_long(burst_length)
- tag_list.append(length_tag)
- time_tag = gr.tag_t()
- time_tag.offset = i * burst_length
- time_tag.key = pmt.string_to_symbol('tx_time')
- time_tag.value = pmt.make_tuple(
- pmt.from_uint64(int(base_time + i * hop_time)),
- pmt.from_double((base_time + i * hop_time) % 1),
- )
- tag_list.append(time_tag)
- tag_source = blocks.vector_source_c((1.0,) * n_samples_total, repeat=False, tags=tag_list)
- mult = blocks.multiply_cc()
- self.connect(self, mult, self)
- self.connect(tag_source, (mult, 1))
-
-
-class FlowGraph(gr.top_block):
- """ Flow graph that does the frequency hopping. """
- def __init__(self, options):
- gr.top_block.__init__(self)
-
- if options.input_file is not None:
- src = blocks.file_source(gr.sizeof_gr_complex, options.filename, repeat=True)
- else:
- src = blocks.vector_source_c((.5,) * int(1e6) * 2, repeat=True)
- # Setup USRP
- self.u = uhd.usrp_sink(options.args, uhd.stream_args('fc32'), "packet_len")
- if(options.spec):
- self.u.set_subdev_spec(options.spec, 0)
- if(options.antenna):
- self.u.set_antenna(options.antenna, 0)
- self.u.set_samp_rate(options.rate)
- # Gain is set in the hopper block
- if options.gain is None:
- g = self.u.get_gain_range()
- options.gain = float(g.start()+g.stop())/2.0
- print "-- Setting gain to {} dB".format(options.gain)
- r = self.u.set_center_freq(options.freq)
- if not r:
- print '[ERROR] Failed to set base frequency.'
- raise SystemExit, 1
- hopper_block = FrequencyHopperSrc(
- options.num_bursts, options.num_channels,
- options.freq_delta, options.freq, options.dsp,
- options.samp_per_burst, 1.0, options.hop_time / 1000.,
- options.post_tuning,
- options.gain,
- options.verbose,
- )
- self.connect(src, hopper_block, self.u)
-
-def print_hopper_stats(args):
- """ Nothing to do with Grace Hopper """
- print """
-Parameter | Value
-===================+=========================
-Hop Interval | {hop_time} ms
-Burst duration | {hop_duration} ms
-Lowest Frequency | {lowest_freq:6.3f} MHz
-Highest Frequency | {highest_freq:6.3f} MHz
-Frequency spacing | {freq_delta:6.4f} MHz
-Number of channels | {num_channels}
-Sampling rate | {rate} Msps
-Transmit Gain | {gain} dB
-===================+=========================
- """.format(
- hop_time=args.hop_time,
- hop_duration=1000.0/args.rate*args.samp_per_burst,
- gain=args.gain,
- lowest_freq=args.freq/1e6,
- highest_freq=(args.freq + (args.num_channels-1) * args.freq_delta)/1e6,
- freq_delta=args.freq_delta/1e6,
- num_channels=args.num_channels,
- rate=args.rate/1e6,
- )
-
-def main():
- """ Go, go, go! """
- args = setup_parser().parse_args()
- if (1.0 * args.samp_per_burst / args.rate) > args.hop_time * 1e-3:
- print "Burst duration must be smaller than hop time."
- exit(1)
- if args.verbose:
- print_hopper_stats(args)
- top_block = FlowGraph(args)
- print "Starting to hop, skip and jump... press Ctrl+C to exit."
- top_block.u.set_time_now(uhd.time_spec(0.0))
- top_block.run()
-
-if __name__ == '__main__':
- try:
- main()
- except KeyboardInterrupt:
- pass
-
diff --git a/gr-uhd/examples/python/max_power.py b/gr-uhd/examples/python/max_power.py
deleted file mode 100755
index e1504e5ea2..0000000000
--- a/gr-uhd/examples/python/max_power.py
+++ /dev/null
@@ -1,142 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2004,2007,2011,2012 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-#
-
-"""
-Setup USRP for maximum power consumption.
-"""
-
-
-from gnuradio import gr
-from gnuradio import analog
-from gnuradio import blocks
-from gnuradio import uhd
-from gnuradio.eng_option import eng_option
-from optparse import OptionParser
-
-from gnuradio import eng_notation
-
-n2s = eng_notation.num_to_str
-
-# Set this to a huge number; UHD will adjust to the
-# maximum the USRP xxxx device can handle
-MAX_RATE = 1000e6
-
-class build_block(gr.top_block):
- def __init__(self, args, tx_enable, rx_enable):
- gr.top_block.__init__(self)
-
- d = uhd.find_devices(uhd.device_addr(args))
- uhd_type = d[0].get('type')
-
- print "\nFound '%s' at args '%s'" % \
- (uhd_type, args)
-
- # Test the type of USRP; if it's a USRP (v1), it has
- # 2 channels; otherwise, it has 1 channel
- if uhd_type == "usrp":
- tx_nchan = 2
- rx_nchan = 2
- else:
- tx_nchan = 1
- rx_nchan = 1
-
- if tx_enable:
- print "\nTRANSMIT CHAIN"
- stream_args = uhd.stream_args('fc32', channels=range(tx_nchan))
- self.u_tx = uhd.usrp_sink(device_addr=args, stream_args=stream_args)
- self.u_tx.set_samp_rate(MAX_RATE)
-
- self.tx_src0 = analog.sig_source_c(self.u_tx.get_samp_rate(),
- analog.GR_CONST_WAVE,
- 0, 1.0, 0)
-
- # Get dboard gain range and select maximum
- tx_gain_range = self.u_tx.get_gain_range()
- tx_gain = tx_gain_range.stop()
-
- # Get dboard freq range and select midpoint
- tx_freq_range = self.u_tx.get_freq_range()
- tx_freq_mid = (tx_freq_range.start() + tx_freq_range.stop())/2.0
-
- for i in xrange(tx_nchan):
- self.u_tx.set_center_freq (tx_freq_mid + i*1e6, i)
- self.u_tx.set_gain(tx_gain, i)
-
- print "\nTx Sample Rate: %ssps" % (n2s(self.u_tx.get_samp_rate()))
- for i in xrange(tx_nchan):
- print "Tx Channel %d: " % (i)
- print "\tFrequency = %sHz" % \
- (n2s(self.u_tx.get_center_freq(i)))
- print "\tGain = %f dB" % (self.u_tx.get_gain(i))
- print ""
-
- self.connect (self.tx_src0, self.u_tx)
-
- if rx_enable:
- print "\nRECEIVE CHAIN"
- self.u_rx = uhd.usrp_source(device_addr=args,
- io_type=uhd.io_type.COMPLEX_FLOAT32,
- num_channels=rx_nchan)
- self.rx_dst0 = blocks.null_sink(gr.sizeof_gr_complex)
-
- self.u_rx.set_samp_rate(MAX_RATE)
-
- # Get dboard gain range and select maximum
- rx_gain_range = self.u_rx.get_gain_range()
- rx_gain = rx_gain_range.stop()
-
- # Get dboard freq range and select midpoint
- rx_freq_range = self.u_rx.get_freq_range()
- rx_freq_mid = (rx_freq_range.start() + rx_freq_range.stop())/2.0
-
- for i in xrange(tx_nchan):
- self.u_rx.set_center_freq (rx_freq_mid + i*1e6, i)
- self.u_rx.set_gain(rx_gain, i)
-
- print "\nRx Sample Rate: %ssps" % (n2s(self.u_rx.get_samp_rate()))
- for i in xrange(rx_nchan):
- print "Rx Channel %d: " % (i)
- print "\tFrequency = %sHz" % \
- (n2s(self.u_rx.get_center_freq(i)))
- print "\tGain = %f dB" % (self.u_rx.get_gain(i))
- print ""
-
- self.connect (self.u_rx, self.rx_dst0)
-
-def main ():
- parser = OptionParser (option_class=eng_option)
- parser.add_option("-a", "--args", type="string", default="",
- help="UHD device address args [default=%default]")
- parser.add_option("-t", action="store_true", dest="tx_enable",
- default=False, help="enable Tx path")
- parser.add_option("-r", action="store_true", dest="rx_enable",
- default=False, help="enable Rx path")
- (options, args) = parser.parse_args ()
-
- tb = build_block (options.args, options.tx_enable, options.rx_enable)
-
- tb.start ()
- raw_input ('Press Enter to quit: ')
- tb.stop ()
-
-if __name__ == '__main__':
- main ()
diff --git a/gr-uhd/examples/python/usrp_am_mw_rcv.py b/gr-uhd/examples/python/usrp_am_mw_rcv.py
deleted file mode 100755
index eebbd7c041..0000000000
--- a/gr-uhd/examples/python/usrp_am_mw_rcv.py
+++ /dev/null
@@ -1,316 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2005-2007,2011,2012 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-#
-
-from gnuradio import gr, eng_notation
-from gnuradio import blocks
-from gnuradio import filter
-from gnuradio import analog
-from gnuradio import audio
-from gnuradio import uhd
-from gnuradio.eng_option import eng_option
-from gnuradio.wxgui import slider, powermate
-from gnuradio.wxgui import stdgui2, fftsink2, form
-from optparse import OptionParser
-import sys
-import math
-import wx
-
-class wfm_rx_block (stdgui2.std_top_block):
- def __init__(self, frame, panel, vbox, argv):
- stdgui2.std_top_block.__init__ (self, frame, panel, vbox, argv)
-
- parser=OptionParser(option_class=eng_option)
- parser.add_option("-a", "--args", type="string", default="",
- help="UHD device address args [default=%default]")
- parser.add_option("", "--spec", type="string", default=None,
- help="Subdevice of UHD device where appropriate")
- parser.add_option("-A", "--antenna", type="string", default=None,
- help="select Rx Antenna where appropriate")
- parser.add_option("-s", "--samp-rate", type="eng_float", default=1e6,
- help="set sample rate (bandwidth) [default=%default]")
- parser.add_option("-f", "--freq", type="eng_float", default=1008.0e3,
- help="set frequency to FREQ", metavar="FREQ")
- parser.add_option("-I", "--use-if-freq", action="store_true", default=False,
- help="use intermediate freq (compensates DC problems in quadrature boards)" )
- parser.add_option("-g", "--gain", type="eng_float", default=None,
- help="set gain in dB (default is maximum)")
- parser.add_option("-V", "--volume", type="eng_float", default=None,
- help="set volume (default is midpoint)")
- parser.add_option("-O", "--audio-output", type="string", default="default",
- help="pcm device name. E.g., hw:0,0 or surround51 or /dev/dsp")
-
- (options, args) = parser.parse_args()
- if len(args) != 0:
- parser.print_help()
- sys.exit(1)
-
- self.frame = frame
- self.panel = panel
- self.use_IF=options.use_if_freq
- if self.use_IF:
- self.IF_freq=64000.0
- else:
- self.IF_freq=0.0
-
- self.vol = 0
- self.state = "FREQ"
- self.freq = 0
-
- # build graph
- self.u = uhd.usrp_source(device_addr=options.args, stream_args=uhd.stream_args('fc32'))
-
- # Set the subdevice spec
- if(options.spec):
- self.u.set_subdev_spec(options.spec, 0)
-
- # Set the antenna
- if(options.antenna):
- self.u.set_antenna(options.antenna, 0)
-
- usrp_rate = 256e3
- demod_rate = 64e3
- audio_rate = 32e3
- chanfilt_decim = int(usrp_rate // demod_rate)
- audio_decim = int(demod_rate // audio_rate)
-
- self.u.set_samp_rate(usrp_rate)
- dev_rate = self.u.get_samp_rate()
-
- # Resample signal to exactly self.usrp_rate
- # FIXME: make one of the follow-on filters an arb resampler
- rrate = usrp_rate / dev_rate
- self.resamp = filter.pfb.arb_resampler_ccf(rrate)
-
- chan_filt_coeffs = filter.firdes.low_pass_2(1, # gain
- usrp_rate, # sampling rate
- 8e3, # passband cutoff
- 4e3, # transition bw
- 60) # stopband attenuation
-
- if self.use_IF:
- # Turn If to baseband and filter.
- self.chan_filt = filter.freq_xlating_fir_filter_ccf(chanfilt_decim,
- chan_filt_coeffs,
- self.IF_freq,
- usrp_rate)
- else:
- self.chan_filt = filter.fir_filter_ccf(chanfilt_decim, chan_filt_coeffs)
-
- self.agc = analog.agc_cc(0.1, 1, 1, 100000)
- self.am_demod = blocks.complex_to_mag()
- self.volume_control = blocks.multiply_const_ff(self.vol)
-
- audio_filt_coeffs = filter.firdes.low_pass_2(1, # gain
- demod_rate, # sampling rate
- 8e3, # passband cutoff
- 2e3, # transition bw
- 60) # stopband attenuation
- self.audio_filt = filter.fir_filter_fff(audio_decim, audio_filt_coeffs)
-
- # sound card as final sink
- self.audio_sink = audio.sink(int (audio_rate),
- options.audio_output,
- False) # ok_to_block
-
- # now wire it all together
- self.connect (self.u, self.resamp, self.chan_filt, self.agc,
- self.am_demod, self.audio_filt,
- self.volume_control, self.audio_sink)
-
- self._build_gui(vbox, usrp_rate, demod_rate, audio_rate)
-
- if options.gain is None:
- g = self.u.get_gain_range()
- # if no gain was specified, use the mid gain
- options.gain = (g.start() + g.stop())/2.0
-
- if options.volume is None:
- v = self.volume_range()
- options.volume = float(v[0]*3+v[1])/4.0
-
- if abs(options.freq) < 1e3:
- options.freq *= 1e3
-
- # set initial values
-
- self.set_gain(options.gain)
- self.set_vol(options.volume)
- if not(self.set_freq(options.freq)):
- self._set_status_msg("Failed to set initial frequency")
-
- def _set_status_msg(self, msg, which=0):
- self.frame.GetStatusBar().SetStatusText(msg, which)
-
-
- def _build_gui(self, vbox, usrp_rate, demod_rate, audio_rate):
-
- def _form_set_freq(kv):
- return self.set_freq(kv['freq'])
-
-
- if 0:
- self.src_fft = fftsink2.fft_sink_c(self.panel, title="Data from USRP",
- fft_size=512, sample_rate=usrp_rate,
- ref_scale=32768.0, ref_level=0.0, y_divs=12)
- self.connect (self.u, self.src_fft)
- vbox.Add (self.src_fft.win, 4, wx.EXPAND)
-
- if 0:
- self.post_filt_fft = fftsink2.fft_sink_c(self.panel, title="Post Channel filter",
- fft_size=512, sample_rate=demod_rate)
- self.connect (self.chan_filt, self.post_filt_fft)
- vbox.Add (self.post_filt_fft.win, 4, wx.EXPAND)
-
- if 0:
- post_demod_fft = fftsink2.fft_sink_f(self.panel, title="Post Demod",
- fft_size=1024, sample_rate=demod_rate,
- y_per_div=10, ref_level=0)
- self.connect (self.am_demod, post_demod_fft)
- vbox.Add (post_demod_fft.win, 4, wx.EXPAND)
-
- if 1:
- audio_fft = fftsink2.fft_sink_f(self.panel, title="Audio",
- fft_size=512, sample_rate=audio_rate,
- y_per_div=10, ref_level=20)
- self.connect (self.audio_filt, audio_fft)
- vbox.Add (audio_fft.win, 4, wx.EXPAND)
-
-
- # control area form at bottom
- self.myform = myform = form.form()
-
- hbox = wx.BoxSizer(wx.HORIZONTAL)
- hbox.Add((5,0), 0)
- myform['freq'] = form.float_field(
- parent=self.panel, sizer=hbox, label="Freq", weight=1,
- callback=myform.check_input_and_call(_form_set_freq, self._set_status_msg))
-
- hbox.Add((5,0), 0)
- myform['freq_slider'] = \
- form.quantized_slider_field(parent=self.panel, sizer=hbox, weight=3,
- range=(520.0e3, 1611.0e3, 1.0e3),
- callback=self.set_freq)
- hbox.Add((5,0), 0)
- vbox.Add(hbox, 0, wx.EXPAND)
-
- hbox = wx.BoxSizer(wx.HORIZONTAL)
- hbox.Add((5,0), 0)
-
- myform['volume'] = \
- form.quantized_slider_field(parent=self.panel, sizer=hbox, label="Volume",
- weight=3, range=self.volume_range(),
- callback=self.set_vol)
- hbox.Add((5,0), 1)
-
- g = self.u.get_gain_range()
- myform['gain'] = \
- form.quantized_slider_field(parent=self.panel, sizer=hbox, label="Gain",
- weight=3, range=(g.start(), g.stop(), g.step()),
- callback=self.set_gain)
- hbox.Add((5,0), 0)
- vbox.Add(hbox, 0, wx.EXPAND)
-
- try:
- self.knob = powermate.powermate(self.frame)
- self.rot = 0
- powermate.EVT_POWERMATE_ROTATE (self.frame, self.on_rotate)
- powermate.EVT_POWERMATE_BUTTON (self.frame, self.on_button)
- except:
- print "FYI: No Powermate or Contour Knob found"
-
-
- def on_rotate (self, event):
- self.rot += event.delta
- if (self.state == "FREQ"):
- if self.rot >= 3:
- self.set_freq(self.freq + .1e6)
- self.rot -= 3
- elif self.rot <=-3:
- self.set_freq(self.freq - .1e6)
- self.rot += 3
- else:
- step = self.volume_range()[2]
- if self.rot >= 3:
- self.set_vol(self.vol + step)
- self.rot -= 3
- elif self.rot <=-3:
- self.set_vol(self.vol - step)
- self.rot += 3
-
- def on_button (self, event):
- if event.value == 0: # button up
- return
- self.rot = 0
- if self.state == "FREQ":
- self.state = "VOL"
- else:
- self.state = "FREQ"
- self.update_status_bar ()
-
-
- def set_vol (self, vol):
- g = self.volume_range()
- self.vol = max(g[0], min(g[1], vol))
- self.volume_control.set_k(10**(self.vol/10))
- self.myform['volume'].set_value(self.vol)
- self.update_status_bar ()
-
- def set_freq(self, target_freq):
- """
- Set the center frequency we're interested in.
-
- Args:
- target_freq: frequency in Hz
- @rypte: bool
- """
- r = self.u.set_center_freq(target_freq + self.IF_freq, 0)
-
- if r:
- self.freq = target_freq
- self.myform['freq'].set_value(target_freq) # update displayed value
- self.myform['freq_slider'].set_value(target_freq) # update displayed value
- self.update_status_bar()
- self._set_status_msg("OK", 0)
- return True
-
- self._set_status_msg("Failed", 0)
- return False
-
- def set_gain(self, gain):
- self.myform['gain'].set_value(gain) # update displayed value
- self.u.set_gain(gain)
-
- def update_status_bar (self):
- msg = "Volume:%r Setting:%s" % (self.vol, self.state)
- self._set_status_msg(msg, 1)
- try:
- self.src_fft.set_baseband_freq(self.freq)
- except:
- None
-
- def volume_range(self):
- return (-40.0, 0.0, 0.5)
-
-
-if __name__ == '__main__':
- app = stdgui2.stdapp (wfm_rx_block, "USRP Broadcast AM MW RX")
- app.MainLoop ()
diff --git a/gr-uhd/examples/python/usrp_nbfm_ptt.py b/gr-uhd/examples/python/usrp_nbfm_ptt.py
deleted file mode 100755
index 76e1f47c3c..0000000000
--- a/gr-uhd/examples/python/usrp_nbfm_ptt.py
+++ /dev/null
@@ -1,494 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2005,2007,2011 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-#
-
-import math
-import sys
-import wx
-from optparse import OptionParser
-
-from gnuradio import gr, audio, uhd
-from gnuradio import analog
-from gnuradio import blocks
-from gnuradio import filter
-from gnuradio.eng_option import eng_option
-from gnuradio.wxgui import stdgui2, fftsink2, scopesink2, slider, form
-
-from numpy import convolve, array
-
-#import os
-#print "pid =", os.getpid()
-#raw_input('Press Enter to continue: ')
-
-# ////////////////////////////////////////////////////////////////////////
-# Control Stuff
-# ////////////////////////////////////////////////////////////////////////
-
-class ptt_block(stdgui2.std_top_block):
- def __init__(self, frame, panel, vbox, argv):
- stdgui2.std_top_block.__init__ (self, frame, panel, vbox, argv)
-
- self.frame = frame
- self.space_bar_pressed = False
-
- parser = OptionParser (option_class=eng_option)
- parser.add_option("-a", "--args", type="string", default="",
- help="UHD device address args [default=%default]")
- parser.add_option("", "--spec", type="string", default=None,
- help="Subdevice of UHD device where appropriate")
- parser.add_option("-A", "--antenna", type="string", default=None,
- help="select Rx Antenna where appropriate")
- parser.add_option ("-f", "--freq", type="eng_float", default=442.1e6,
- help="set Tx and Rx frequency to FREQ", metavar="FREQ")
- parser.add_option ("-g", "--rx-gain", type="eng_float", default=None,
- help="set rx gain [default=midpoint in dB]")
- parser.add_option ("", "--tx-gain", type="eng_float", default=None,
- help="set tx gain [default=midpoint in dB]")
- parser.add_option("-I", "--audio-input", type="string", default="default",
- help="pcm input device name. E.g., hw:0,0 or /dev/dsp")
- parser.add_option("-O", "--audio-output", type="string", default="default",
- help="pcm output device name. E.g., hw:0,0 or /dev/dsp")
- parser.add_option ("-N", "--no-gui", action="store_true", default=False)
- (options, args) = parser.parse_args ()
-
- if len(args) != 0:
- parser.print_help()
- sys.exit(1)
-
- if options.freq < 1e6:
- options.freq *= 1e6
-
- self.txpath = transmit_path(options.args, options.spec,
- options.antenna, options.tx_gain,
- options.audio_input)
- self.rxpath = receive_path(options.args, options.spec,
- options.antenna, options.rx_gain,
- options.audio_output)
- self.connect(self.txpath)
- self.connect(self.rxpath)
-
- self._build_gui(frame, panel, vbox, argv, options.no_gui)
-
- self.set_transmit(False)
- self.set_freq(options.freq)
- self.set_rx_gain(self.rxpath.gain) # update gui
- self.set_volume(self.rxpath.volume) # update gui
- self.set_squelch(self.rxpath.threshold()) # update gui
-
-
- def set_transmit(self, enabled):
- self.txpath.set_enable(enabled)
- self.rxpath.set_enable(not(enabled))
- if enabled:
- self.frame.SetStatusText ("Transmitter ON", 1)
- else:
- self.frame.SetStatusText ("Receiver ON", 1)
-
-
- def set_rx_gain(self, gain):
- self.myform['rx_gain'].set_value(gain) # update displayed value
- self.rxpath.set_gain(gain)
-
- def set_tx_gain(self, gain):
- self.txpath.set_gain(gain)
-
- def set_squelch(self, threshold):
- self.rxpath.set_squelch(threshold)
- self.myform['squelch'].set_value(self.rxpath.threshold())
-
- def set_volume (self, vol):
- self.rxpath.set_volume(vol)
- self.myform['volume'].set_value(self.rxpath.volume)
- #self.update_status_bar ()
-
- def set_freq(self, freq):
- r1 = self.txpath.set_freq(freq)
- r2 = self.rxpath.set_freq(freq)
- #print "txpath.set_freq =", r1
- #print "rxpath.set_freq =", r2
- if r1 and r2:
- self.myform['freq'].set_value(freq) # update displayed value
- return r1 and r2
-
- def _build_gui(self, frame, panel, vbox, argv, no_gui):
-
- def _form_set_freq(kv):
- return self.set_freq(kv['freq'])
-
- self.panel = panel
-
- # FIXME This REALLY needs to be replaced with a hand-crafted button
- # that sends both button down and button up events
- hbox = wx.BoxSizer(wx.HORIZONTAL)
- hbox.Add((10,0), 1)
- self.status_msg = wx.StaticText(panel, -1, "Press Space Bar to Transmit")
- of = self.status_msg.GetFont()
- self.status_msg.SetFont(wx.Font(15, of.GetFamily(), of.GetStyle(), of.GetWeight()))
- hbox.Add(self.status_msg, 0, wx.ALIGN_CENTER)
- hbox.Add((10,0), 1)
- vbox.Add(hbox, 0, wx.EXPAND | wx.ALIGN_CENTER)
-
- panel.Bind(wx.EVT_KEY_DOWN, self._on_key_down)
- panel.Bind(wx.EVT_KEY_UP, self._on_key_up)
- panel.Bind(wx.EVT_KILL_FOCUS, self._on_kill_focus)
- panel.SetFocus()
-
- if 1 and not(no_gui):
- rx_fft = fftsink2.fft_sink_c(panel, title="Rx Input", fft_size=512,
- sample_rate=self.rxpath.if_rate,
- ref_level=80, y_per_div=20)
- self.connect (self.rxpath.u, rx_fft)
- vbox.Add (rx_fft.win, 1, wx.EXPAND)
-
- if 1 and not(no_gui):
- rx_fft = fftsink2.fft_sink_c(panel, title="Post s/w Resampler",
- fft_size=512, sample_rate=self.rxpath.quad_rate,
- ref_level=80, y_per_div=20)
- self.connect (self.rxpath.resamp, rx_fft)
- vbox.Add (rx_fft.win, 1, wx.EXPAND)
-
- if 0 and not(no_gui):
- foo = scopesink2.scope_sink_f(panel, title="Squelch",
- sample_rate=32000)
- self.connect (self.rxpath.fmrx.div, (foo,0))
- self.connect (self.rxpath.fmrx.gate, (foo,1))
- self.connect (self.rxpath.fmrx.squelch_lpf, (foo,2))
- vbox.Add (foo.win, 1, wx.EXPAND)
-
- if 0 and not(no_gui):
- tx_fft = fftsink2.fft_sink_c(panel, title="Tx Output",
- fft_size=512, sample_rate=self.txpath.usrp_rate)
- self.connect (self.txpath.amp, tx_fft)
- vbox.Add (tx_fft.win, 1, wx.EXPAND)
-
-
- # add control area at the bottom
-
- self.myform = myform = form.form()
-
- # first row
- hbox = wx.BoxSizer(wx.HORIZONTAL)
- hbox.Add((5,0), 0, 0)
- myform['freq'] = form.float_field(
- parent=panel, sizer=hbox, label="Freq", weight=1,
- callback=myform.check_input_and_call(_form_set_freq, self._set_status_msg))
-
- hbox.Add((5,0), 0, 0)
- vbox.Add(hbox, 0, wx.EXPAND)
-
-
- # second row
- hbox = wx.BoxSizer(wx.HORIZONTAL)
- myform['volume'] = \
- form.quantized_slider_field(parent=self.panel, sizer=hbox, label="Volume",
- weight=3, range=self.rxpath.volume_range(),
- callback=self.set_volume)
- hbox.Add((5,0), 0)
- myform['squelch'] = \
- form.quantized_slider_field(parent=self.panel, sizer=hbox, label="Squelch",
- weight=3, range=self.rxpath.squelch_range(),
- callback=self.set_squelch)
-
- g = self.rxpath.u.get_gain_range()
- hbox.Add((5,0), 0)
- myform['rx_gain'] = \
- form.quantized_slider_field(parent=self.panel, sizer=hbox, label="Rx Gain",
- weight=3, range=(g.start(), g.stop(), g.step()),
- callback=self.set_rx_gain)
- hbox.Add((5,0), 0)
- vbox.Add(hbox, 0, wx.EXPAND)
-
-
- self._build_subpanel(vbox)
-
- def _build_subpanel(self, vbox_arg):
- # build a secondary information panel (sometimes hidden)
-
- # FIXME figure out how to have this be a subpanel that is always
- # created, but has its visibility controlled by foo.Show(True/False)
-
- #if not(self.show_debug_info):
- # return
-
- panel = self.panel
- vbox = vbox_arg
- myform = self.myform
-
- #panel = wx.Panel(self.panel, -1)
- #vbox = wx.BoxSizer(wx.VERTICAL)
-
- hbox = wx.BoxSizer(wx.HORIZONTAL)
- hbox.Add((5,0), 0)
- #myform['decim'] = form.static_float_field(
- # parent=panel, sizer=hbox, label="Decim")
-
- #hbox.Add((5,0), 1)
- #myform['fs@usb'] = form.static_float_field(
- # parent=panel, sizer=hbox, label="Fs@USB")
-
- #hbox.Add((5,0), 1)
- #myform['dbname'] = form.static_text_field(
- # parent=panel, sizer=hbox)
-
- hbox.Add((5,0), 0)
- vbox.Add(hbox, 0, wx.EXPAND)
-
-
- def _set_status_msg(self, msg, which=0):
- self.frame.GetStatusBar().SetStatusText(msg, which)
-
- def _on_key_down(self, evt):
- # print "key_down:", evt.m_keyCode
- if evt.m_keyCode == wx.WXK_SPACE and not(self.space_bar_pressed):
- self.space_bar_pressed = True
- self.set_transmit(True)
-
- def _on_key_up(self, evt):
- # print "key_up", evt.m_keyCode
- if evt.m_keyCode == wx.WXK_SPACE:
- self.space_bar_pressed = False
- self.set_transmit(False)
-
- def _on_kill_focus(self, evt):
- # if we lose the keyboard focus, turn off the transmitter
- self.space_bar_pressed = False
- self.set_transmit(False)
-
-
-# ////////////////////////////////////////////////////////////////////////
-# Transmit Path
-# ////////////////////////////////////////////////////////////////////////
-
-class transmit_path(gr.hier_block2):
- def __init__(self, args, spec, antenna, gain, audio_input):
- gr.hier_block2.__init__(self, "transmit_path",
- gr.io_signature(0, 0, 0), # Input signature
- gr.io_signature(0, 0, 0)) # Output signature
-
- self.u = uhd.usrp_sink(device_addr=args, stream_args=uhd.stream_args('fc32'))
-
- # Set the subdevice spec
- if(spec):
- self.u.set_subdev_spec(spec, 0)
-
- # Set the antenna
- if(antenna):
- self.u.set_antenna(antenna, 0)
-
- self.if_rate = 320e3
- self.audio_rate = 32e3
-
- self.u.set_samp_rate(self.if_rate)
- dev_rate = self.u.get_samp_rate()
-
- self.audio_gain = 10
- self.normal_gain = 32000
-
- self.audio = audio.source(int(self.audio_rate), audio_input)
- self.audio_amp = blocks.multiply_const_ff(self.audio_gain)
-
- lpf = filter.firdes.low_pass(1, # gain
- self.audio_rate, # sampling rate
- 3800, # low pass cutoff freq
- 300, # width of trans. band
- filter.firdes.WIN_HANN) # filter type
-
- hpf = filter.firdes.high_pass(1, # gain
- self.audio_rate, # sampling rate
- 325, # low pass cutoff freq
- 50, # width of trans. band
- filter.firdes.WIN_HANN) # filter type
-
- audio_taps = convolve(array(lpf),array(hpf))
- self.audio_filt = filter.fir_filter_fff(1,audio_taps)
-
- self.pl = analog.ctcss_gen_f(self.audio_rate,123.0)
- self.add_pl = blocks.add_ff()
- self.connect(self.pl,(self.add_pl,1))
-
- self.fmtx = analog.nbfm_tx(self.audio_rate, self.if_rate)
- self.amp = blocks.multiply_const_cc (self.normal_gain)
-
- rrate = dev_rate / self.if_rate
- self.resamp = filter.pfb.arb_resampler_ccf(rrate)
-
- self.connect(self.audio, self.audio_amp, self.audio_filt,
- (self.add_pl,0), self.fmtx, self.amp,
- self.resamp, self.u)
-
- if gain is None:
- # if no gain was specified, use the mid-point in dB
- g = self.u.get_gain_range()
- gain = float(g.start() + g.stop())/2.0
-
- self.set_gain(gain)
-
- self.set_enable(False)
-
- def set_freq(self, target_freq):
- """
- Set the center frequency we're interested in.
-
- Args:
- target_freq: frequency in Hz
- @rypte: bool
- """
- r = self.u.set_center_freq(target_freq)
- if r:
- return True
- return False
-
- def set_gain(self, gain):
- self.gain = gain
- self.u.set_gain(gain)
-
- def set_enable(self, enable):
- if enable:
- self.amp.set_k (self.normal_gain)
- else:
- self.amp.set_k (0)
-
-
-
-# ////////////////////////////////////////////////////////////////////////
-# Receive Path
-# ////////////////////////////////////////////////////////////////////////
-
-class receive_path(gr.hier_block2):
- def __init__(self, args, spec, antenna, gain, audio_output):
- gr.hier_block2.__init__(self, "receive_path",
- gr.io_signature(0, 0, 0), # Input signature
- gr.io_signature(0, 0, 0)) # Output signature
-
- self.u = uhd.usrp_source(device_addr=args,
- io_type=uhd.io_type.COMPLEX_FLOAT32,
- num_channels=1)
-
- self.if_rate = 256e3
- self.quad_rate = 64e3
- self.audio_rate = 32e3
-
- self.u.set_samp_rate(self.if_rate)
- dev_rate = self.u.get_samp_rate()
-
- # Create filter to get actual channel we want
- nfilts = 32
- chan_coeffs = filter.firdes.low_pass(nfilts, # gain
- nfilts*dev_rate, # sampling rate
- 13e3, # low pass cutoff freq
- 4e3, # width of trans. band
- filter.firdes.WIN_HANN) # filter type
-
- rrate = self.quad_rate / dev_rate
- self.resamp = filter.pfb.arb_resampler_ccf(rrate, chan_coeffs, nfilts)
-
- # instantiate the guts of the single channel receiver
- self.fmrx = analog.nbfm_rx(self.audio_rate, self.quad_rate)
-
- # standard squelch block
- self.squelch = analog.standard_squelch(self.audio_rate)
-
- # audio gain / mute block
- self._audio_gain = blocks.multiply_const_ff(1.0)
-
- # sound card as final sink
- audio_sink = audio.sink(int(self.audio_rate), audio_output)
-
- # now wire it all together
- self.connect(self.u, self.resamp, self.fmrx, self.squelch,
- self._audio_gain, audio_sink)
-
- if gain is None:
- # if no gain was specified, use the mid-point in dB
- g = self.u.get_gain_range()
- gain = float(g.start() + g.stop())/2.0
-
- self.enabled = True
- self.set_gain(gain)
- v = self.volume_range()
- self.set_volume((v[0]+v[1])/2)
- s = self.squelch_range()
- self.set_squelch((s[0]+s[1])/2)
-
- # Set the subdevice spec
- if(spec):
- self.u.set_subdev_spec(spec, 0)
-
- # Set the antenna
- if(antenna):
- self.u.set_antenna(antenna, 0)
-
- def volume_range(self):
- return (-20.0, 0.0, 0.5)
-
- def set_volume (self, vol):
- g = self.volume_range()
- self.volume = max(g[0], min(g[1], vol))
- self._update_audio_gain()
-
- def set_enable(self, enable):
- self.enabled = enable
- self._update_audio_gain()
-
- def _update_audio_gain(self):
- if self.enabled:
- self._audio_gain.set_k(10**(self.volume/10))
- else:
- self._audio_gain.set_k(0)
-
- def squelch_range(self):
- return self.squelch.squelch_range()
-
- def set_squelch(self, threshold):
- print "SQL =", threshold
- self.squelch.set_threshold(threshold)
-
- def threshold(self):
- return self.squelch.threshold()
-
- def set_freq(self, target_freq):
- """
- Set the center frequency we're interested in.
-
- Args:
- target_freq: frequency in Hz
- @rypte: bool
- """
- r = self.u.set_center_freq(target_freq)
- if r:
- return True
- return False
-
- def set_gain(self, gain):
- self.gain = gain
- self.u.set_gain(gain)
-
-
-# ////////////////////////////////////////////////////////////////////////
-# Main
-# ////////////////////////////////////////////////////////////////////////
-
-def main():
- app = stdgui2.stdapp(ptt_block, "NBFM Push to Talk")
- app.MainLoop()
-
-if __name__ == '__main__':
- main()
diff --git a/gr-uhd/examples/python/usrp_nbfm_rcv.py b/gr-uhd/examples/python/usrp_nbfm_rcv.py
deleted file mode 100755
index e3dc7eac6b..0000000000
--- a/gr-uhd/examples/python/usrp_nbfm_rcv.py
+++ /dev/null
@@ -1,384 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2005,2007,2011,2012 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-#
-
-from gnuradio import gr, audio, uhd
-from gnuradio import blocks
-from gnuradio import filter
-from gnuradio import analog
-from gnuradio.eng_option import eng_option
-from gnuradio.wxgui import slider, powermate
-from gnuradio.wxgui import stdgui2, fftsink2, form
-from optparse import OptionParser
-import sys
-import math
-import wx
-
-#////////////////////////////////////////////////////////////////////////
-# Control Stuff
-#////////////////////////////////////////////////////////////////////////
-
-class my_top_block (stdgui2.std_top_block):
- def __init__(self,frame,panel,vbox,argv):
- stdgui2.std_top_block.__init__ (self,frame,panel,vbox,argv)
-
- parser=OptionParser(option_class=eng_option)
- parser.add_option("-a", "--args", type="string", default="",
- help="UHD device address args [default=%default]")
- parser.add_option("", "--spec", type="string", default=None,
- help="Subdevice of UHD device where appropriate")
- parser.add_option("-A", "--antenna", type="string", default=None,
- help="select Rx Antenna where appropriate")
- parser.add_option("-f", "--freq", type="eng_float", default=146.585e6,
- help="set frequency to FREQ", metavar="FREQ")
- parser.add_option("-g", "--gain", type="eng_float", default=None,
- help="set gain in dB (default is midpoint)")
- parser.add_option("-V", "--volume", type="eng_float", default=None,
- help="set volume (default is midpoint)")
- parser.add_option("-O", "--audio-output", type="string", default="default",
- help="pcm device name. E.g., hw:0,0 or surround51 or /dev/dsp")
- parser.add_option("-N", "--no-gui", action="store_true", default=False)
-
- (options, args) = parser.parse_args()
- if len(args) != 0:
- parser.print_help()
- sys.exit(1)
-
- if options.freq < 1e6:
- options.freq *= 1e6
-
- self.frame = frame
- self.panel = panel
-
- self.state = "FREQ"
- self.freq = 0
- self.freq_step = 25e3
-
- self.rxpath = receive_path(options.args, options.spec, options.antenna,
- options.gain, options.audio_output)
- self.connect(self.rxpath)
-
- self._build_gui(vbox, options.no_gui)
-
- # set initial values
-
- if options.volume is not None:
- self.set_volume(options.volume)
-
- if not(self.set_freq(options.freq)):
- self._set_status_msg("Failed to set initial frequency")
-
- self.set_gain(self.rxpath.gain) # update gui
- self.set_volume(self.rxpath.volume) # update gui
- self.set_squelch(self.rxpath.threshold()) # update gui
-
-
- def _set_status_msg(self, msg, which=0):
- self.frame.GetStatusBar().SetStatusText(msg, which)
-
-
- def _build_gui(self, vbox, no_gui):
-
- def _form_set_freq(kv):
- return self.set_freq(kv['freq'])
-
-
- self.src_fft = None
- if 0 and not(no_gui):
- self.src_fft = fftsink2.fft_sink_c(self.panel,
- title="Data from USRP",
- fft_size=512,
- sample_rate=self.rxpath.if_rate,
- ref_scale=32768.0,
- ref_level=0,
- y_per_div=10,
- y_divs=12)
- self.connect (self.rxpath.u, self.src_fft)
- vbox.Add (self.src_fft.win, 4, wx.EXPAND)
- if 1 and not(no_gui):
- rx_fft = fftsink2.fft_sink_c(self.panel,
- title="Post s/w Resampling",
- fft_size=512,
- sample_rate=self.rxpath.quad_rate,
- ref_level=80,
- y_per_div=20)
- self.connect (self.rxpath.resamp, rx_fft)
- vbox.Add (rx_fft.win, 4, wx.EXPAND)
-
- if 1 and not(no_gui):
- post_deemph_fft = fftsink2.fft_sink_f(self.panel,
- title="Post Deemph",
- fft_size=512,
- sample_rate=self.rxpath.audio_rate,
- y_per_div=10,
- ref_level=-40)
- self.connect (self.rxpath.fmrx.deemph, post_deemph_fft)
- vbox.Add (post_deemph_fft.win, 4, wx.EXPAND)
-
- if 0:
- post_filt_fft = fftsink2.fft_sink_f(self.panel,
- title="Post Filter",
- fft_size=512,
- sample_rate=audio_rate,
- y_per_div=10,
- ref_level=-40)
- self.connect (self.guts.audio_filter, post_filt)
- vbox.Add (fft_win4, 4, wx.EXPAND)
-
- # control area form at bottom
- self.myform = myform = form.form()
-
- hbox = wx.BoxSizer(wx.HORIZONTAL)
- hbox.Add((5,0), 0)
- myform['freq'] = form.float_field(
- parent=self.panel, sizer=hbox, label="Freq", weight=1,
- callback=myform.check_input_and_call(_form_set_freq,
- self._set_status_msg))
-
- #hbox.Add((5,0), 0)
- #myform['freq_slider'] = \
- # form.quantized_slider_field(parent=self.panel, sizer=hbox, weight=3,
- # range=(87.9e6, 108.1e6, 0.1e6),
- # callback=self.set_freq)
-
- hbox.Add((5,0), 0)
- vbox.Add(hbox, 0, wx.EXPAND)
-
- hbox = wx.BoxSizer(wx.HORIZONTAL)
- hbox.Add((5,0), 0)
-
- myform['volume'] = \
- form.quantized_slider_field(parent=self.panel, sizer=hbox, label="Volume",
- weight=3, range=self.volume_range(),
- callback=self.set_volume)
- hbox.Add((5,0), 0)
- myform['squelch'] = \
- form.quantized_slider_field(parent=self.panel, sizer=hbox, label="Squelch",
- weight=3, range=self.rxpath.squelch_range(),
- callback=self.set_squelch)
- g = self.rxpath.u.get_gain_range()
- hbox.Add((5,0), 0)
- myform['gain'] = \
- form.quantized_slider_field(parent=self.panel, sizer=hbox, label="Gain",
- weight=3, range=(g.start(), g.stop(), g.step()),
- callback=self.set_gain)
- hbox.Add((5,0), 0)
- vbox.Add(hbox, 0, wx.EXPAND)
-
- try:
- self.knob = powermate.powermate(self.frame)
- self.rot = 0
- powermate.EVT_POWERMATE_ROTATE (self.frame, self.on_rotate)
- powermate.EVT_POWERMATE_BUTTON (self.frame, self.on_button)
- except:
- print "FYI: No Powermate or Contour Knob found"
-
-
- def on_rotate (self, event):
- self.rot += event.delta
- if (self.state == "FREQ"):
- if self.rot >= 3:
- self.set_freq(self.freq + self.freq_step)
- self.rot -= 3
- elif self.rot <=-3:
- self.set_freq(self.freq - self.freq_step)
- self.rot += 3
- else:
- step = self.volume_range()[2]
- if self.rot >= 3:
- self.set_volume(self.rxpath.volume + step)
- self.rot -= 3
- elif self.rot <=-3:
- self.set_volume(self.rxpath.volume - step)
- self.rot += 3
-
- def on_button (self, event):
- if event.value == 0: # button up
- return
- self.rot = 0
- if self.state == "FREQ":
- self.state = "VOL"
- else:
- self.state = "FREQ"
- self.update_status_bar ()
-
-
- def set_squelch(self, threshold_in_db):
- self.rxpath.set_squelch(threshold_in_db)
- self.myform['squelch'].set_value(self.rxpath.threshold())
-
- def set_volume (self, vol):
- self.rxpath.set_volume(vol)
- self.myform['volume'].set_value(self.rxpath.volume)
- self.update_status_bar ()
-
- def set_freq(self, target_freq):
- r = self.rxpath.set_freq(target_freq)
- if r:
- self.freq = target_freq
- self.myform['freq'].set_value(target_freq) # update displayed value
- #self.myform['freq_slider'].set_value(target_freq) # update displayed value
- self.update_status_bar()
- self._set_status_msg("OK", 0)
- return True
-
- self._set_status_msg("Failed", 0)
- return False
-
- def set_gain(self, gain):
- self.myform['gain'].set_value(gain) # update displayed value
- self.rxpath.set_gain(gain)
-
- def update_status_bar (self):
- msg = "Volume:%r Setting:%s" % (self.rxpath.volume, self.state)
- self._set_status_msg(msg, 1)
- if self.src_fft:
- self.src_fft.set_baseband_freq(self.freq)
-
- def volume_range(self):
- return (-20.0, 0.0, 0.5)
-
-
-#////////////////////////////////////////////////////////////////////////
-# Receive Path
-#////////////////////////////////////////////////////////////////////////
-
-USE_SIMPLE_SQUELCH = False
-
-class receive_path(gr.hier_block2):
- def __init__(self, args, spec, antenna, gain, audio_output):
- gr.hier_block2.__init__(self, "receive_path",
- gr.io_signature(0, 0, 0), # Input signature
- gr.io_signature(0, 0, 0)) # Output signature
-
- self.u = uhd.usrp_source(device_addr=args, stream_args=uhd.stream_args('fc32'))
-
- # Set the subdevice spec
- if(spec):
- self.u.set_subdev_spec(spec, 0)
-
- # Set the antenna
- if(antenna):
- self.u.set_antenna(antenna, 0)
-
- self.if_rate = 256e3
- self.quad_rate = 64e3
- self.audio_rate = 32e3
-
- self.u.set_samp_rate(self.if_rate)
- dev_rate = self.u.get_samp_rate()
-
- # Create filter to get actual channel we want
- nfilts = 32
- chan_coeffs = filter.firdes.low_pass(nfilts, # gain
- nfilts*dev_rate, # sampling rate
- 8e3, # low pass cutoff freq
- 2e3, # width of trans. band
- filter.firdes.WIN_HANN) # filter type
- rrate = self.quad_rate / dev_rate
- self.resamp = filter.pfb.arb_resampler_ccf(rrate, chan_coeffs, nfilts)
-
- if USE_SIMPLE_SQUELCH:
- self.squelch = analog.simple_squelch_cc(20)
- else:
- self.squelch = analog.standard_squelch(self.audio_rate)
-
- # instantiate the guts of the single channel receiver
- self.fmrx = analog.nbfm_rx(self.audio_rate, self.quad_rate)
-
- # audio gain / mute block
- self._audio_gain = blocks.multiply_const_ff(1.0)
-
- # sound card as final sink
- audio_sink = audio.sink (int(self.audio_rate), audio_output)
-
- # now wire it all together
- if USE_SIMPLE_SQUELCH:
- self.connect (self.u, self.resamp, self.squelch, self.fmrx,
- self._audio_gain, audio_sink)
- else:
- self.connect (self.u, self.resamp, self.fmrx, self.squelch,
- self._audio_gain, audio_sink)
-
- if gain is None:
- # if no gain was specified, use the mid-point in dB
- g = self.u.get_gain_range()
- gain = float(g.start()+g.stop())/2
-
- self.set_gain(gain)
-
- v = self.volume_range()
- self.set_volume((v[0]+v[1])/2)
-
- s = self.squelch_range()
- self.set_squelch((s[0]+s[1])/2)
-
- def volume_range(self):
- return (-20.0, 0.0, 0.5)
-
- def set_volume (self, vol):
- g = self.volume_range()
- self.volume = max(g[0], min(g[1], vol))
- self._update_audio_gain()
-
- def _update_audio_gain(self):
- self._audio_gain.set_k(10**(self.volume/10))
-
- def squelch_range(self):
- r = self.squelch.squelch_range()
- #print "squelch_range: ", r
- return r
-
- def set_squelch(self, threshold):
- #print "SQL =", threshold
- self.squelch.set_threshold(threshold)
-
- def threshold(self):
- t = self.squelch.threshold()
- #print "t =", t
- return t
-
- def set_freq(self, target_freq):
- """
- Set the center frequency we're interested in.
-
- Args:
- target_freq: frequency in Hz
- @rypte: bool
- """
-
- r = self.u.set_center_freq(target_freq)
- if r:
- return True
- return False
-
- def set_gain(self, gain):
- self.gain = gain
- self.u.set_gain(gain)
-
-
-# ////////////////////////////////////////////////////////////////////////
-# Main
-# ////////////////////////////////////////////////////////////////////////
-
-if __name__ == '__main__':
- app = stdgui2.stdapp (my_top_block, "USRP NBFM RX")
- app.MainLoop ()
diff --git a/gr-uhd/examples/python/usrp_spectrum_sense.py b/gr-uhd/examples/python/usrp_spectrum_sense.py
deleted file mode 100755
index b1ea6b44d8..0000000000
--- a/gr-uhd/examples/python/usrp_spectrum_sense.py
+++ /dev/null
@@ -1,318 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2005,2007,2011 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-#
-
-from gnuradio import gr, eng_notation
-from gnuradio import blocks
-from gnuradio import audio
-from gnuradio import filter
-from gnuradio import fft
-from gnuradio import uhd
-from gnuradio.eng_option import eng_option
-from optparse import OptionParser
-import sys
-import math
-import struct
-import threading
-from datetime import datetime
-import time
-
-sys.stderr.write("Warning: this may have issues on some machines+Python version combinations to seg fault due to the callback in bin_statitics.\n\n")
-
-class ThreadClass(threading.Thread):
- def run(self):
- return
-
-class tune(gr.feval_dd):
- """
- This class allows C++ code to callback into python.
- """
- def __init__(self, tb):
- gr.feval_dd.__init__(self)
- self.tb = tb
-
- def eval(self, ignore):
- """
- This method is called from blocks.bin_statistics_f when it wants
- to change the center frequency. This method tunes the front
- end to the new center frequency, and returns the new frequency
- as its result.
- """
-
- try:
- # We use this try block so that if something goes wrong
- # from here down, at least we'll have a prayer of knowing
- # what went wrong. Without this, you get a very
- # mysterious:
- #
- # terminate called after throwing an instance of
- # 'Swig::DirectorMethodException' Aborted
- #
- # message on stderr. Not exactly helpful ;)
-
- new_freq = self.tb.set_next_freq()
-
- # wait until msgq is empty before continuing
- while(self.tb.msgq.full_p()):
- #print "msgq full, holding.."
- time.sleep(0.1)
-
- return new_freq
-
- except Exception, e:
- print "tune: Exception: ", e
-
-
-class parse_msg(object):
- def __init__(self, msg):
- self.center_freq = msg.arg1()
- self.vlen = int(msg.arg2())
- assert(msg.length() == self.vlen * gr.sizeof_float)
-
- # FIXME consider using NumPy array
- t = msg.to_string()
- self.raw_data = t
- self.data = struct.unpack('%df' % (self.vlen,), t)
-
-
-class my_top_block(gr.top_block):
-
- def __init__(self):
- gr.top_block.__init__(self)
-
- usage = "usage: %prog [options] min_freq max_freq"
- parser = OptionParser(option_class=eng_option, usage=usage)
- parser.add_option("-a", "--args", type="string", default="",
- help="UHD device device address args [default=%default]")
- parser.add_option("", "--spec", type="string", default=None,
- help="Subdevice of UHD device where appropriate")
- parser.add_option("-A", "--antenna", type="string", default=None,
- help="select Rx Antenna where appropriate")
- parser.add_option("-s", "--samp-rate", type="eng_float", default=1e6,
- help="set sample rate [default=%default]")
- parser.add_option("-g", "--gain", type="eng_float", default=None,
- help="set gain in dB (default is midpoint)")
- parser.add_option("", "--tune-delay", type="eng_float",
- default=0.25, metavar="SECS",
- help="time to delay (in seconds) after changing frequency [default=%default]")
- parser.add_option("", "--dwell-delay", type="eng_float",
- default=0.25, metavar="SECS",
- help="time to dwell (in seconds) at a given frequency [default=%default]")
- parser.add_option("-b", "--channel-bandwidth", type="eng_float",
- default=6.25e3, metavar="Hz",
- help="channel bandwidth of fft bins in Hz [default=%default]")
- parser.add_option("-l", "--lo-offset", type="eng_float",
- default=0, metavar="Hz",
- help="lo_offset in Hz [default=%default]")
- parser.add_option("-q", "--squelch-threshold", type="eng_float",
- default=None, metavar="dB",
- help="squelch threshold in dB [default=%default]")
- parser.add_option("-F", "--fft-size", type="int", default=None,
- help="specify number of FFT bins [default=samp_rate/channel_bw]")
- parser.add_option("", "--real-time", action="store_true", default=False,
- help="Attempt to enable real-time scheduling")
-
- (options, args) = parser.parse_args()
- if len(args) != 2:
- parser.print_help()
- sys.exit(1)
-
- self.channel_bandwidth = options.channel_bandwidth
-
- self.min_freq = eng_notation.str_to_num(args[0])
- self.max_freq = eng_notation.str_to_num(args[1])
-
- if self.min_freq > self.max_freq:
- # swap them
- self.min_freq, self.max_freq = self.max_freq, self.min_freq
-
- if not options.real_time:
- realtime = False
- else:
- # Attempt to enable realtime scheduling
- r = gr.enable_realtime_scheduling()
- if r == gr.RT_OK:
- realtime = True
- else:
- realtime = False
- print "Note: failed to enable realtime scheduling"
-
- # build graph
- self.u = uhd.usrp_source(device_addr=options.args,
- stream_args=uhd.stream_args('fc32'))
-
- # Set the subdevice spec
- if(options.spec):
- self.u.set_subdev_spec(options.spec, 0)
-
- # Set the antenna
- if(options.antenna):
- self.u.set_antenna(options.antenna, 0)
-
- self.u.set_samp_rate(options.samp_rate)
- self.usrp_rate = usrp_rate = self.u.get_samp_rate()
-
- self.lo_offset = options.lo_offset
-
- if options.fft_size is None:
- self.fft_size = int(self.usrp_rate/self.channel_bandwidth)
- else:
- self.fft_size = options.fft_size
-
- self.squelch_threshold = options.squelch_threshold
-
- s2v = blocks.stream_to_vector(gr.sizeof_gr_complex, self.fft_size)
-
- mywindow = filter.window.blackmanharris(self.fft_size)
- ffter = fft.fft_vcc(self.fft_size, True, mywindow, True)
- power = 0
- for tap in mywindow:
- power += tap*tap
-
- c2mag = blocks.complex_to_mag_squared(self.fft_size)
-
- # FIXME the log10 primitive is dog slow
- #log = blocks.nlog10_ff(10, self.fft_size,
- # -20*math.log10(self.fft_size)-10*math.log10(power/self.fft_size))
-
- # Set the freq_step to 75% of the actual data throughput.
- # This allows us to discard the bins on both ends of the spectrum.
-
- self.freq_step = self.nearest_freq((0.75 * self.usrp_rate), self.channel_bandwidth)
- self.min_center_freq = self.min_freq + (self.freq_step/2)
- nsteps = math.ceil((self.max_freq - self.min_freq) / self.freq_step)
- self.max_center_freq = self.min_center_freq + (nsteps * self.freq_step)
-
- self.next_freq = self.min_center_freq
-
- tune_delay = max(0, int(round(options.tune_delay * usrp_rate / self.fft_size))) # in fft_frames
- dwell_delay = max(1, int(round(options.dwell_delay * usrp_rate / self.fft_size))) # in fft_frames
-
- self.msgq = gr.msg_queue(1)
- self._tune_callback = tune(self) # hang on to this to keep it from being GC'd
- stats = blocks.bin_statistics_f(self.fft_size, self.msgq,
- self._tune_callback, tune_delay,
- dwell_delay)
-
- # FIXME leave out the log10 until we speed it up
- #self.connect(self.u, s2v, ffter, c2mag, log, stats)
- self.connect(self.u, s2v, ffter, c2mag, stats)
-
- if options.gain is None:
- # if no gain was specified, use the mid-point in dB
- g = self.u.get_gain_range()
- options.gain = float(g.start()+g.stop())/2.0
-
- self.set_gain(options.gain)
- print "gain =", options.gain
-
- def set_next_freq(self):
- target_freq = self.next_freq
- self.next_freq = self.next_freq + self.freq_step
- if self.next_freq >= self.max_center_freq:
- self.next_freq = self.min_center_freq
-
- if not self.set_freq(target_freq):
- print "Failed to set frequency to", target_freq
- sys.exit(1)
-
- return target_freq
-
-
- def set_freq(self, target_freq):
- """
- Set the center frequency we're interested in.
-
- Args:
- target_freq: frequency in Hz
- @rypte: bool
- """
-
- r = self.u.set_center_freq(uhd.tune_request(target_freq, rf_freq=(target_freq + self.lo_offset),rf_freq_policy=uhd.tune_request.POLICY_MANUAL))
- if r:
- return True
-
- return False
-
- def set_gain(self, gain):
- self.u.set_gain(gain)
-
- def nearest_freq(self, freq, channel_bandwidth):
- freq = round(freq / channel_bandwidth, 0) * channel_bandwidth
- return freq
-
-def main_loop(tb):
-
- def bin_freq(i_bin, center_freq):
- #hz_per_bin = tb.usrp_rate / tb.fft_size
- freq = center_freq - (tb.usrp_rate / 2) + (tb.channel_bandwidth * i_bin)
- #print "freq original:",freq
- #freq = nearest_freq(freq, tb.channel_bandwidth)
- #print "freq rounded:",freq
- return freq
-
- bin_start = int(tb.fft_size * ((1 - 0.75) / 2))
- bin_stop = int(tb.fft_size - bin_start)
-
- timestamp = 0
- centerfreq = 0
- while 1:
-
- # Get the next message sent from the C++ code (blocking call).
- # It contains the center frequency and the mag squared of the fft
- m = parse_msg(tb.msgq.delete_head())
-
- # m.center_freq is the center frequency at the time of capture
- # m.data are the mag_squared of the fft output
- # m.raw_data is a string that contains the binary floats.
- # You could write this as binary to a file.
-
- # Scanning rate
- if timestamp == 0:
- timestamp = time.time()
- centerfreq = m.center_freq
- if m.center_freq < centerfreq:
- sys.stderr.write("scanned %.1fMHz in %.1fs\n" % ((centerfreq - m.center_freq)/1.0e6, time.time() - timestamp))
- timestamp = time.time()
- centerfreq = m.center_freq
-
- for i_bin in range(bin_start, bin_stop):
-
- center_freq = m.center_freq
- freq = bin_freq(i_bin, center_freq)
- #noise_floor_db = -174 + 10*math.log10(tb.channel_bandwidth)
- noise_floor_db = 10*math.log10(min(m.data)/tb.usrp_rate)
- power_db = 10*math.log10(m.data[i_bin]/tb.usrp_rate) - noise_floor_db
-
- if (power_db > tb.squelch_threshold) and (freq >= tb.min_freq) and (freq <= tb.max_freq):
- print datetime.now(), "center_freq", center_freq, "freq", freq, "power_db", power_db, "noise_floor_db", noise_floor_db
-
-if __name__ == '__main__':
- t = ThreadClass()
- t.start()
-
- tb = my_top_block()
- try:
- tb.start()
- main_loop(tb)
-
- except KeyboardInterrupt:
- pass
diff --git a/gr-uhd/examples/python/usrp_tv_rcv.py b/gr-uhd/examples/python/usrp_tv_rcv.py
deleted file mode 100755
index 301840f41d..0000000000
--- a/gr-uhd/examples/python/usrp_tv_rcv.py
+++ /dev/null
@@ -1,446 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2005-2007,2011-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.
-#
-
-"""
-Realtime capture and display of analog Tv stations.
-
-Can also use a file as source or sink
-
-When you use an output file you can show the results frame-by-frame
-using ImageMagick
-
-When you want to use the realtime sdl display window you must first
-install gr-video-sdl.
-
-When you use a file source, instead of the usrp, make sure you
-capture interleaved shorts. (Use usrp_rx_file.py, or use
-usrp_rx_cfile.py --output-shorts if you have a recent enough
-usrp_rx_cfile.py)
-
-There is no synchronisation yet. The sync blocks are in development
-but not yet in cvs.
-"""
-
-from gnuradio import gr
-try:
- from gnuradio import video_sdl
-except:
- print "FYI: gr-video-sdl is not installed"
- print "realtime SDL video output window will not be available"
-from gnuradio import uhd
-from gnuradio import analog
-from gnuradio import blocks
-from gnuradio.eng_option import eng_option
-from gnuradio.wxgui import slider, powermate
-from gnuradio.wxgui import stdgui2, fftsink2, form
-from optparse import OptionParser
-import sys
-import wx
-
-
-class tv_rx_block (stdgui2.std_top_block):
- def __init__(self,frame,panel,vbox,argv):
- stdgui2.std_top_block.__init__ (self,frame,panel,vbox,argv)
-
- usage="%prog: [options] [input_filename]. \n If you don't specify an input filename the usrp will be used as source\n " \
- "Make sure your input capture file containes interleaved shorts not complex floats"
- parser=OptionParser(option_class=eng_option, usage=usage)
- parser.add_option("-a", "--args", type="string", default="",
- help="UHD device address args [default=%default]")
- parser.add_option("", "--spec", type="string", default=None,
- help="Subdevice of UHD device where appropriate")
- parser.add_option("-A", "--antenna", type="string", default=None,
- help="select Rx Antenna where appropriate")
- parser.add_option("-s", "--samp-rate", type="eng_float", default=1e6,
- help="set sample rate")
- parser.add_option("-f", "--freq", type="eng_float", default=519.25e6,
- help="set frequency to FREQ", metavar="FREQ")
- parser.add_option("-g", "--gain", type="eng_float", default=None,
- help="set gain in dB (default is midpoint)")
- parser.add_option("-c", "--contrast", type="eng_float", default=1.0,
- help="set contrast (default is 1.0)")
- parser.add_option("-b", "--brightness", type="eng_float", default=0.0,
- help="set brightness (default is 0)")
- parser.add_option("-p", "--pal", action="store_true", default=False,
- help="PAL video format (this is the default)")
- parser.add_option("-n", "--ntsc", action="store_true", default=False,
- help="NTSC video format")
- parser.add_option("-o", "--out-filename", type="string", default="sdl",
- help="For example out_raw_uchar.gray. If you don't specify an output filename you will get a video_sink_sdl realtime output window. You then need to have gr-video-sdl installed)")
- parser.add_option("-r", "--repeat", action="store_false", default=True,
- help="repeat file in a loop")
- parser.add_option("", "--freq-min", type="eng_float", default=50.25e6,
- help="Set a minimum frequency [default=%default]")
- parser.add_option("", "--freq-max", type="eng_float", default=900.25e6,
- help="Set a maximum frequency [default=%default]")
-
- (options, args) = parser.parse_args()
- if not ((len(args) == 1) or (len(args) == 0)):
- parser.print_help()
- sys.exit(1)
-
- if len(args) == 1:
- filename = args[0]
- else:
- filename = None
-
- self.frame = frame
- self.panel = panel
-
- self.contrast = options.contrast
- self.brightness = options.brightness
- self.state = "FREQ"
- self.freq = 0
-
- self.tv_freq_min = options.freq_min
- self.tv_freq_max = options.freq_max
-
- # build graph
- self.u=None
-
- if not (options.out_filename=="sdl"):
- options.repeat=False
-
- usrp_rate = options.samp_rate
-
- if not ((filename is None) or (filename=="usrp")):
- # file is data source
- self.filesource = blocks.file_source(gr.sizeof_short,filename,options.repeat)
- self.istoc = blocks.interleaved_short_to_complex()
- self.connect(self.filesource,self.istoc)
- self.src=self.istoc
-
- options.gain=0.0
- self.gain=0.0
-
- else: # use a UHD device
- self.u = uhd.usrp_source(device_addr=options.args, stream_args=uhd.stream_args('fc32'))
-
- # Set the subdevice spec
- if(options.spec):
- self.u.set_subdev_spec(options.spec, 0)
-
- # Set the antenna
- if(options.antenna):
- self.u.set_antenna(options.antenna, 0)
-
- self.u.set_samp_rate(usrp_rate)
- dev_rate = self.u.get_samp_rate()
-
- if options.gain is None:
- # if no gain was specified, use the mid-point in dB
- g = self.u.get_gain_range()
- options.gain = float(g.start()+g.stop())/2.0
-
- self.src=self.u
-
- self.gain = options.gain
-
- f2uc = blocks.float_to_uchar()
-
- # sdl window as final sink
- if not (options.pal or options.ntsc):
- options.pal=True #set default to PAL
-
- if options.pal:
- lines_per_frame=625.0
- frames_per_sec=25.0
- show_width=768
-
- elif options.ntsc:
- lines_per_frame=525.0
- frames_per_sec=29.97002997
- show_width=640
-
- width=int(usrp_rate/(lines_per_frame*frames_per_sec))
- height=int(lines_per_frame)
-
- if (options.out_filename=="sdl"):
- #Here comes the tv screen, you have to build and install
- #gr-video-sdl for this (subproject of gnuradio, only in cvs
- #for now)
- try:
- video_sink = video_sdl.sink_uc ( frames_per_sec, width, height, 0,
- show_width, height)
- except:
- print "gr-video-sdl is not installed"
- print "realtime \"sdl\" video output window is not available"
- raise SystemExit, 1
- self.dst=video_sink
- else:
- print "You can use the imagemagick display tool to show the resulting imagesequence"
- print "use the following line to show the demodulated TV-signal:"
- print "display -depth 8 -size " +str(width)+ "x" + str(height) \
- + " gray:" + options.out_filename
- print "(Use the spacebar to advance to next frames)"
- options.repeat=False
- file_sink = blocks.file_sink(gr.sizeof_char, options.out_filename)
- self.dst =file_sink
-
- self.agc = analog.agc_cc(1e-7,1.0,1.0) #1e-7
- self.am_demod = blocks.complex_to_mag ()
- self.set_blacklevel = blocks.add_const_ff(0.0)
- self.invert_and_scale = blocks.multiply_const_ff (0.0) #-self.contrast *128.0*255.0/(200.0)
-
- # now wire it all together
- #sample_rate=options.width*options.height*options.framerate
-
- process_type='do_no_sync'
- if process_type=='do_no_sync':
- self.connect (self.src, self.agc,self.am_demod,
- self.invert_and_scale, self.set_blacklevel,
- f2uc,self.dst)
- elif process_type=='do_tv_sync_adv':
- #defaults: gr.tv_sync_adv (double sampling_freq, unsigned
- #int tv_format,bool output_active_video_only=false, bool
- #do_invert=false, double wanted_black_level=0.0, double
- #wanted_white_level=255.0, double avg_alpha=0.1, double
- #initial_gain=1.0, double initial_offset=0.0,bool
- #debug=false)
-
- #note, this block is not yet in cvs
- self.tv_sync_adv=gr.tv_sync_adv(usrp_rate, 0, False, False,
- 0.0, 255.0, 0.01, 1.0, 0.0, False)
- self.connect (self.src, self.am_demod, self.invert_and_scale,
- self.tv_sync_adv, s2f, f2uc, self.dst)
-
- elif process_type=='do_nullsink':
- #self.connect (self.src, self.am_demod,self.invert_and_scale,f2uc,video_sink)
- c2r=blocks.complex_to_real()
- nullsink=blocks.null_sink(gr.sizeof_float)
- self.connect (self.src, c2r,nullsink) #video_sink)
- elif process_type=='do_tv_sync_corr':
- frame_size=width*height #int(usrp_rate/25.0)
- nframes=10# 32
- search_window=20*nframes
- debug=False
- video_alpha=0.3 #0.1
- corr_alpha=0.3
-
- #Note: this block is not yet in cvs
- tv_corr=gr.tv_correlator_ff(frame_size,nframes, search_window,
- video_alpha, corr_alpha,debug)
- shift = blocks.add_const_ff(-0.7)
-
- self.connect (self.src, self.agc, self.am_demod, tv_corr,
- self.invert_and_scale, self.set_blacklevel,
- f2uc, self.dst)
- else: # process_type=='do_test_image':
- src_vertical_bars = analog.sig_source_f(usrp_rate, analog.GR_SIN_WAVE,
- 10.0 *usrp_rate/320, 255,128)
- self.connect(src_vertical_bars, f2uc, self.dst)
-
- self._build_gui(vbox, usrp_rate, usrp_rate, usrp_rate)
-
-
- frange = self.u.get_freq_range()
- if(frange.start() > self.tv_freq_max or frange.stop() < self.tv_freq_min):
- sys.stderr.write("Radio does not support required frequency range.\n")
- sys.exit(1)
- if(options.freq < self.tv_freq_min or options.freq > self.tv_freq_max):
- sys.stderr.write("Requested frequency is outside of required frequency range.\n")
- sys.exit(1)
-
- # set initial values
- self.set_gain(options.gain)
- self.set_contrast(self.contrast)
- self.set_brightness(options.brightness)
- if not(self.set_freq(options.freq)):
- self._set_status_msg("Failed to set initial frequency")
-
-
- def _set_status_msg(self, msg, which=0):
- self.frame.GetStatusBar().SetStatusText(msg, which)
-
-
- def _build_gui(self, vbox, usrp_rate, demod_rate, audio_rate):
-
- def _form_set_freq(kv):
- return self.set_freq(kv['freq'])
-
-
- if 0:
- self.src_fft = fftsink.fft_sink_c (self, self.panel, title="Data from USRP",
- fft_size=512, sample_rate=usrp_rate)
- self.connect (self.src, self.src_fft)
- vbox.Add (self.src_fft.win, 4, wx.EXPAND)
-
- if 0:
- post_demod_fft = fftsink.fft_sink_f (self, self.panel, title="Post Demod",
- fft_size=512, sample_rate=demod_rate,
- y_per_div=10, ref_level=-40)
- self.connect (self.am_demod, post_demod_fft)
- vbox.Add (post_demod_fft.win, 4, wx.EXPAND)
-
- if 0:
- post_filt_fft = fftsink.fft_sink_f (self, self.panel, title="Post Filter",
- fft_size=512, sample_rate=audio_rate,
- y_per_div=10, ref_level=-40)
- self.connect (self.set_blacklevel, post_filt)
- vbox.Add (fft_win4, 4, wx.EXPAND)
-
-
- # control area form at bottom
- self.myform = myform = form.form()
-
- if not (self.u is None):
- hbox = wx.BoxSizer(wx.HORIZONTAL)
- hbox.Add((5,0), 0)
- myform['freq'] = form.float_field(
- parent=self.panel, sizer=hbox, label="Freq", weight=1,
- callback=myform.check_input_and_call(_form_set_freq, self._set_status_msg))
-
- hbox.Add((5,0), 0)
- myform['freq_slider'] = \
- form.quantized_slider_field(parent=self.panel, sizer=hbox, weight=3,
- range=(self.tv_freq_min, self.tv_freq_max, 0.25e6),
- callback=self.set_freq)
- hbox.Add((5,0), 0)
- vbox.Add(hbox, 0, wx.EXPAND)
-
- hbox = wx.BoxSizer(wx.HORIZONTAL)
- hbox.Add((5,0), 0)
-
- myform['contrast'] = \
- form.quantized_slider_field(parent=self.panel, sizer=hbox, label="Contrast",
- weight=3, range=(-2.0, 2.0, 0.1),
- callback=self.set_contrast)
- hbox.Add((5,0), 1)
-
- myform['brightness'] = \
- form.quantized_slider_field(parent=self.panel, sizer=hbox, label="Brightness",
- weight=3, range=(-255.0, 255.0, 1.0),
- callback=self.set_brightness)
- hbox.Add((5,0), 0)
-
- if not (self.u is None):
- g = self.u.get_gain_range()
- myform['gain'] = \
- form.quantized_slider_field(parent=self.panel, sizer=hbox, label="Gain",
- weight=3, range=(g.start(), g.stop(), g.step()),
- callback=self.set_gain)
- hbox.Add((5,0), 0)
- vbox.Add(hbox, 0, wx.EXPAND)
-
- try:
- self.knob = powermate.powermate(self.frame)
- self.rot = 0
- powermate.EVT_POWERMATE_ROTATE (self.frame, self.on_rotate)
- powermate.EVT_POWERMATE_BUTTON (self.frame, self.on_button)
- except:
- print "FYI: No Powermate or Contour Knob found"
-
-
- def on_rotate (self, event):
- self.rot += event.delta
- if (self.state == "FREQ"):
- if self.rot >= 3:
- self.set_freq(self.freq + .1e6)
- self.rot -= 3
- elif self.rot <=-3:
- self.set_freq(self.freq - .1e6)
- self.rot += 3
- elif (self.state == "CONTRAST"):
- step = 0.1
- if self.rot >= 3:
- self.set_contrast(self.contrast + step)
- self.rot -= 3
- elif self.rot <=-3:
- self.set_contrast(self.contrast - step)
- self.rot += 3
- else:
- step = 1
- if self.rot >= 3:
- self.set_brightness(self.brightness + step)
- self.rot -= 3
- elif self.rot <=-3:
- self.set_brightness(self.brightness - step)
- self.rot += 3
-
- def on_button (self, event):
- if event.value == 0: # button up
- return
- self.rot = 0
- if self.state == "FREQ":
- self.state = "CONTRAST"
- elif self.state == "CONTRAST":
- self.state = "BRIGHTNESS"
- else:
- self.state = "FREQ"
- self.update_status_bar ()
-
-
- def set_contrast (self, contrast):
- self.contrast = contrast
- self.invert_and_scale.set_k(-self.contrast *128.0*255.0/(200.0))
- self.myform['contrast'].set_value(self.contrast)
- self.update_status_bar ()
-
- def set_brightness (self, brightness):
- self.brightness = brightness
- self.set_blacklevel.set_k(self.brightness +255.0)
- self.myform['brightness'].set_value(self.brightness)
- self.update_status_bar ()
-
- def set_freq(self, target_freq):
- """
- Set the center frequency we're interested in.
-
- Args:
- target_freq: frequency in Hz
- @rypte: bool
-
- Tuning is a two step process. First we ask the front-end to
- tune as close to the desired frequency as it can. Then we use
- the result of that operation and our target_frequency to
- determine the value for the digital down converter.
- """
- if not (self.u is None):
- r = self.u.set_center_freq(target_freq)
- if r:
- self.freq = target_freq
- self.myform['freq'].set_value(target_freq) # update displayed value
- self.myform['freq_slider'].set_value(target_freq) # update displayed value
- self.update_status_bar()
- self._set_status_msg("OK", 0)
- return True
-
- self._set_status_msg("Failed", 0)
- return False
-
- def set_gain(self, gain):
- if not (self.u is None):
- self.gain=gain
- self.myform['gain'].set_value(gain) # update displayed value
- self.u.set_gain(gain)
- self.update_status_bar()
-
- def update_status_bar (self):
- msg = "Setting:%s Contrast:%r Brightness:%r Gain: %r" % \
- (self.state, self.contrast,self.brightness,self.gain)
- self._set_status_msg(msg, 1)
- #self.src_fft.set_baseband_freq(self.freq)
-
-
-if __name__ == '__main__':
- app = stdgui2.stdapp (tv_rx_block, "USRP TV RX black-and-white")
- app.MainLoop ()
diff --git a/gr-uhd/examples/python/usrp_tv_rcv_nogui.py b/gr-uhd/examples/python/usrp_tv_rcv_nogui.py
deleted file mode 100755
index 80e2e1c17a..0000000000
--- a/gr-uhd/examples/python/usrp_tv_rcv_nogui.py
+++ /dev/null
@@ -1,215 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2005-2007,2011,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.
-#
-
-"""
-Reads from a file and generates PAL TV pictures in black and white
-which can be displayed using ImageMagick or realtime using
-gr-video-sdl (To capture the input file Use usrp_rx_file.py, or use
-usrp_rx_cfile.py --output-shorts if you have a recent enough
-usrp_rx_cfile.py)
-
-Can also use usrp directly as capture source, but then you need a
-higher decimation factor (64) and thus get a lower horizontal
-resulution. There is no synchronisation yet. The sync blocks are in
-development but not yet in cvs.
-
-"""
-
-from gnuradio import gr, eng_notation
-from gnuradio import analog
-from gnuradio import blocks
-from gnuradio import audio
-from gnuradio import uhd
-from gnuradio.eng_option import eng_option
-from optparse import OptionParser
-import sys
-
-try:
- from gnuradio import video_sdl
-except:
- print "FYI: gr-video-sdl is not installed"
- print "realtime \"sdl\" video output window will not be available"
-
-
-class my_top_block(gr.top_block):
-
- def __init__(self):
- gr.top_block.__init__(self)
-
- usage=("%prog: [options] output_filename.\nSpecial output_filename" + \
- "\"sdl\" will use video_sink_sdl as realtime output window. " + \
- "You then need to have gr-video-sdl installed.\n" +\
- "Make sure your input capture file containes interleaved " + \
- "shorts not complex floats")
- parser = OptionParser(option_class=eng_option, usage=usage)
- parser.add_option("-a", "--args", type="string", default="",
- help="UHD device address args [default=%default]")
- parser.add_option("", "--spec", type="string", default=None,
- help="Subdevice of UHD device where appropriate")
- parser.add_option("-A", "--antenna", type="string", default=None,
- help="select Rx Antenna where appropriate")
- parser.add_option("-s", "--samp-rate", type="eng_float", default=1e6,
- help="set sample rate")
- parser.add_option("-c", "--contrast", type="eng_float", default=1.0,
- help="set contrast (default is 1.0)")
- parser.add_option("-b", "--brightness", type="eng_float", default=0.0,
- help="set brightness (default is 0)")
- parser.add_option("-i", "--in-filename", type="string", default=None,
- help="Use input file as source. samples must be " + \
- "interleaved shorts \n Use usrp_rx_file.py or " + \
- "usrp_rx_cfile.py --output-shorts.\n Special " + \
- "name \"usrp\" results in realtime capturing " + \
- "and processing using usrp.\n" + \
- "You then probably need a decimation factor of 64 or higher.")
- parser.add_option("-f", "--freq", type="eng_float", default=519.25e6,
- help="set frequency to FREQ.\nNote that the frequency of the video carrier is not at the middle of the TV channel", metavar="FREQ")
- parser.add_option("-g", "--gain", type="eng_float", default=None,
- help="set gain in dB (default is midpoint)")
- parser.add_option("-p", "--pal", action="store_true", default=False,
- help="PAL video format (this is the default)")
- parser.add_option("-n", "--ntsc", action="store_true", default=False,
- help="NTSC video format")
- parser.add_option("-r", "--repeat", action="store_false", default=True,
- help="repeat in_file in a loop")
- parser.add_option("-N", "--nframes", type="eng_float", default=None,
- help="number of frames to collect [default=+inf]")
- parser.add_option("", "--freq-min", type="eng_float", default=50.25e6,
- help="Set a minimum frequency [default=%default]")
- parser.add_option("", "--freq-max", type="eng_float", default=900.25e6,
- help="Set a maximum frequency [default=%default]")
- (options, args) = parser.parse_args ()
- if not (len(args) == 1):
- parser.print_help()
- sys.stderr.write('You must specify the output. FILENAME or sdl \n');
- sys.exit(1)
-
- filename = args[0]
-
- self.tv_freq_min = options.freq_min
- self.tv_freq_max = options.freq_max
-
- if options.in_filename is None:
- parser.print_help()
- sys.stderr.write('You must specify the input -i FILENAME or -i usrp\n');
- raise SystemExit, 1
-
- if not (filename=="sdl"):
- options.repeat=False
-
- input_rate = options.samp_rate
- print "video sample rate %s" % (eng_notation.num_to_str(input_rate))
-
- if not (options.in_filename=="usrp"):
- # file is data source, capture with usr_rx_csfile.py
- self.filesource = blocks.file_source(gr.sizeof_short,
- options.in_filename,
- options.repeat)
- self.istoc = blocks.interleaved_short_to_complex()
- self.connect(self.filesource,self.istoc)
- self.src=self.istoc
- else:
- if options.freq is None:
- parser.print_help()
- sys.stderr.write('You must specify the frequency with -f FREQ\n');
- raise SystemExit, 1
-
- # build the graph
- self.u = uhd.usrp_source(device_addr=options.args, stream_args=uhd.stream_args('fc32'))
-
- # Set the subdevice spec
- if(options.spec):
- self.u.set_subdev_spec(options.spec, 0)
-
- # Set the antenna
- if(options.antenna):
- self.u.set_antenna(options.antenna, 0)
-
- self.u.set_samp_rate(input_rate)
- dev_rate = self.u.get_samp_rate()
-
- self.src=self.u
-
- if options.gain is None:
- # if no gain was specified, use the mid-point in dB
- g = self.u.get_gain_range()
- options.gain = float(g.start()+g.stop())/2.0
- self.u.set_gain(options.gain)
-
- r = self.u.set_center_freq(options.freq)
- if not r:
- sys.stderr.write('Failed to set frequency\n')
- raise SystemExit, 1
-
-
- self.agc = analog.agc_cc(1e-7,1.0,1.0) #1e-7
- self.am_demod = blocks.complex_to_mag ()
- self.set_blacklevel = blocks.add_const_ff(options.brightness +255.0)
- self.invert_and_scale = blocks.multiply_const_ff(-options.contrast *128.0*255.0/(200.0))
- self.f2uc = blocks.float_to_uchar()
-
- # sdl window as final sink
- if not (options.pal or options.ntsc):
- options.pal=True #set default to PAL
- if options.pal:
- lines_per_frame=625.0
- frames_per_sec=25.0
- show_width=768
- elif options.ntsc:
- lines_per_frame=525.0
- frames_per_sec=29.97002997
- show_width=640
- width=int(input_rate/(lines_per_frame*frames_per_sec))
- height=int(lines_per_frame)
-
- if filename=="sdl":
- #Here comes the tv screen, you have to build and install
- #gr-video-sdl for this (subproject of gnuradio)
- try:
- video_sink = video_sdl.sink_uc(frames_per_sec, width, height, 0,
- show_width,height)
- except:
- print "gr-video-sdl is not installed"
- print "realtime \"sdl\" video output window is not available"
- raise SystemExit, 1
- self.dst=video_sink
- else:
- print "You can use the imagemagick display tool to show the resulting imagesequence"
- print "use the following line to show the demodulated TV-signal:"
- print "display -depth 8 -size " +str(width)+ "x" + str(height) + " gray:" +filename
- print "(Use the spacebar to advance to next frames)"
- file_sink = blocks.file_sink(gr.sizeof_char, filename)
- self.dst =file_sink
-
- if options.nframes is None:
- self.connect(self.src, self.agc)
- else:
- self.head = blocks.head(gr.sizeof_gr_complex, int(options.nframes*width*height))
- self.connect(self.src, self.head, self.agc)
-
- self.connect (self.agc, self.am_demod, self.invert_and_scale,
- self.set_blacklevel, self.f2uc, self.dst)
-
-if __name__ == '__main__':
- try:
- my_top_block().run()
- except KeyboardInterrupt:
- pass
diff --git a/gr-uhd/examples/python/usrp_wfm_rcv.py b/gr-uhd/examples/python/usrp_wfm_rcv.py
deleted file mode 100755
index c11c18980c..0000000000
--- a/gr-uhd/examples/python/usrp_wfm_rcv.py
+++ /dev/null
@@ -1,290 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2005-2007,2009,2011,2012 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-#
-
-from gnuradio import gr, audio, uhd
-from gnuradio import blocks
-from gnuradio import filter
-from gnuradio import analog
-from gnuradio.eng_option import eng_option
-from gnuradio.wxgui import slider, powermate
-from gnuradio.wxgui import stdgui2, fftsink2, form
-from optparse import OptionParser
-import sys
-import wx
-
-
-class wfm_rx_block (stdgui2.std_top_block):
- def __init__(self,frame,panel,vbox,argv):
- stdgui2.std_top_block.__init__ (self,frame,panel,vbox,argv)
-
- parser=OptionParser(option_class=eng_option)
- parser.add_option("-a", "--args", type="string", default="",
- help="UHD device address args [default=%default]")
- parser.add_option("", "--spec", type="string", default=None,
- help="Subdevice of UHD device where appropriate")
- parser.add_option("-A", "--antenna", type="string", default=None,
- help="select Rx Antenna where appropriate")
- parser.add_option("-f", "--freq", type="eng_float", default=100.1e6,
- help="set frequency to FREQ", metavar="FREQ")
- parser.add_option("-g", "--gain", type="eng_float", default=None,
- help="set gain in dB (default is midpoint)")
- parser.add_option("-V", "--volume", type="eng_float", default=None,
- help="set volume (default is midpoint)")
- parser.add_option("-O", "--audio-output", type="string", default="default",
- help="pcm device name. E.g., hw:0,0 or surround51 or /dev/dsp")
- parser.add_option("", "--freq-min", type="eng_float", default=87.9e6,
- help="Set a minimum frequency [default=%default]")
- parser.add_option("", "--freq-max", type="eng_float", default=108.1e6,
- help="Set a maximum frequency [default=%default]")
-
- (options, args) = parser.parse_args()
- if len(args) != 0:
- parser.print_help()
- sys.exit(1)
-
- self.frame = frame
- self.panel = panel
-
- self.vol = 0
- self.state = "FREQ"
- self.freq = 0
-
- self.fm_freq_min = options.freq_min
- self.fm_freq_max = options.freq_max
-
- # build graph
- self.u = uhd.usrp_source(device_addr=options.args, stream_args=uhd.stream_args('fc32'))
-
- # Set the subdevice spec
- if(options.spec):
- self.u.set_subdev_spec(options.spec, 0)
-
- # Set the antenna
- if(options.antenna):
- self.u.set_antenna(options.antenna, 0)
-
- usrp_rate = 320e3
- demod_rate = 320e3
- audio_rate = 32e3
- audio_decim = int(demod_rate / audio_rate)
-
- self.u.set_samp_rate(usrp_rate)
- dev_rate = self.u.get_samp_rate()
-
- nfilts = 32
- chan_coeffs = filter.optfir.low_pass(nfilts, # gain
- nfilts*usrp_rate, # sampling rate
- 80e3, # passband cutoff
- 115e3, # stopband cutoff
- 0.1, # passband ripple
- 60) # stopband attenuation
- rrate = usrp_rate / dev_rate
- self.chan_filt = filter.pfb.arb_resampler_ccf(rrate, chan_coeffs, nfilts)
-
- self.guts = analog.wfm_rcv(demod_rate, audio_decim)
-
- self.volume_control = blocks.multiply_const_ff(self.vol)
-
- # sound card as final sink
- self.audio_sink = audio.sink(int (audio_rate),
- options.audio_output,
- False) # ok_to_block
-
- # now wire it all together
- self.connect(self.u, self.chan_filt, self.guts,
- self.volume_control, self.audio_sink)
-
- self._build_gui(vbox, usrp_rate, demod_rate, audio_rate)
-
- if options.gain is None:
- # if no gain was specified, use the mid-point in dB
- g = self.u.get_gain_range()
- options.gain = float(g.start()+g.stop())/2
-
- if options.volume is None:
- g = self.volume_range()
- options.volume = float(g[0]+g[1])/2
-
- frange = self.u.get_freq_range()
- if(frange.start() > self.fm_freq_max or frange.stop() < self.fm_freq_min):
- sys.stderr.write("Radio does not support required frequency range.\n")
- sys.exit(1)
- if(options.freq < self.fm_freq_min or options.freq > self.fm_freq_max):
- sys.stderr.write("Requested frequency is outside of required frequency range.\n")
- sys.exit(1)
-
-
- # set initial values
-
- self.set_gain(options.gain)
- self.set_vol(options.volume)
- if not(self.set_freq(options.freq)):
- self._set_status_msg("Failed to set initial frequency")
-
- def _set_status_msg(self, msg, which=0):
- self.frame.GetStatusBar().SetStatusText(msg, which)
-
-
- def _build_gui(self, vbox, usrp_rate, demod_rate, audio_rate):
-
- def _form_set_freq(kv):
- return self.set_freq(kv['freq'])
-
-
- if 1:
- self.src_fft = fftsink2.fft_sink_c(self.panel, title="Data from USRP",
- fft_size=512, sample_rate=usrp_rate,
- ref_scale=32768.0, ref_level=0, y_divs=12)
- self.connect (self.u, self.src_fft)
- vbox.Add (self.src_fft.win, 4, wx.EXPAND)
-
- if 1:
- post_filt_fft = fftsink2.fft_sink_f(self.panel, title="Post Demod",
- fft_size=1024, sample_rate=usrp_rate,
- y_per_div=10, ref_level=0)
- self.connect (self.guts.fm_demod, post_filt_fft)
- vbox.Add (post_filt_fft.win, 4, wx.EXPAND)
-
- if 0:
- post_deemph_fft = fftsink2.fft_sink_f(self.panel, title="Post Deemph",
- fft_size=512, sample_rate=audio_rate,
- y_per_div=10, ref_level=-20)
- self.connect (self.guts.deemph, post_deemph_fft)
- vbox.Add (post_deemph_fft.win, 4, wx.EXPAND)
-
-
- # control area form at bottom
- self.myform = myform = form.form()
-
- hbox = wx.BoxSizer(wx.HORIZONTAL)
- hbox.Add((5,0), 0)
- myform['freq'] = form.float_field(
- parent=self.panel, sizer=hbox, label="Freq", weight=1,
- callback=myform.check_input_and_call(_form_set_freq, self._set_status_msg))
-
- hbox.Add((5,0), 0)
- myform['freq_slider'] = \
- form.quantized_slider_field(parent=self.panel, sizer=hbox, weight=3,
- range=(self.fm_freq_min, self.fm_freq_max, 0.1e6),
- callback=self.set_freq)
- hbox.Add((5,0), 0)
- vbox.Add(hbox, 0, wx.EXPAND)
-
- hbox = wx.BoxSizer(wx.HORIZONTAL)
- hbox.Add((5,0), 0)
-
- myform['volume'] = \
- form.quantized_slider_field(parent=self.panel, sizer=hbox, label="Volume",
- weight=3, range=self.volume_range(),
- callback=self.set_vol)
- hbox.Add((5,0), 1)
-
- g = self.u.get_gain_range()
- myform['gain'] = \
- form.quantized_slider_field(parent=self.panel, sizer=hbox, label="Gain",
- weight=3, range=(g.start(), g.stop(), g.step()),
- callback=self.set_gain)
- hbox.Add((5,0), 0)
- vbox.Add(hbox, 0, wx.EXPAND)
-
- try:
- self.knob = powermate.powermate(self.frame)
- self.rot = 0
- powermate.EVT_POWERMATE_ROTATE (self.frame, self.on_rotate)
- powermate.EVT_POWERMATE_BUTTON (self.frame, self.on_button)
- except:
- print "FYI: No Powermate or Contour Knob found"
-
-
- def on_rotate (self, event):
- self.rot += event.delta
- if (self.state == "FREQ"):
- if self.rot >= 3:
- self.set_freq(self.freq + .1e6)
- self.rot -= 3
- elif self.rot <=-3:
- self.set_freq(self.freq - .1e6)
- self.rot += 3
- else:
- step = self.volume_range()[2]
- if self.rot >= 3:
- self.set_vol(self.vol + step)
- self.rot -= 3
- elif self.rot <=-3:
- self.set_vol(self.vol - step)
- self.rot += 3
-
- def on_button (self, event):
- if event.value == 0: # button up
- return
- self.rot = 0
- if self.state == "FREQ":
- self.state = "VOL"
- else:
- self.state = "FREQ"
- self.update_status_bar ()
-
-
- def set_vol (self, vol):
- g = self.volume_range()
- self.vol = max(g[0], min(g[1], vol))
- self.volume_control.set_k(10**(self.vol/10))
- self.myform['volume'].set_value(self.vol)
- self.update_status_bar ()
-
- def set_freq(self, target_freq):
- """
- Set the center frequency we're interested in.
-
- Args:
- target_freq: frequency in Hz
- @rypte: bool
- """
-
- r = self.u.set_center_freq(target_freq)
- if r:
- self.freq = target_freq
- self.myform['freq'].set_value(target_freq) # update displayed value
- self.myform['freq_slider'].set_value(target_freq) # update displayed value
- self.update_status_bar()
- self._set_status_msg("OK", 0)
- return True
-
- self._set_status_msg("Failed", 0)
- return False
-
- def set_gain(self, gain):
- self.myform['gain'].set_value(gain) # update displayed value
- self.u.set_gain(gain)
-
- def update_status_bar (self):
- msg = "Volume:%r Setting:%s" % (self.vol, self.state)
- self._set_status_msg(msg, 1)
- self.src_fft.set_baseband_freq(self.freq)
-
- def volume_range(self):
- return (-20.0, 0.0, 0.5)
-
-
-if __name__ == '__main__':
- app = stdgui2.stdapp (wfm_rx_block, "USRP WFM RX")
- app.MainLoop ()
diff --git a/gr-uhd/examples/python/usrp_wfm_rcv2_nogui.py b/gr-uhd/examples/python/usrp_wfm_rcv2_nogui.py
deleted file mode 100755
index c5b42cbf08..0000000000
--- a/gr-uhd/examples/python/usrp_wfm_rcv2_nogui.py
+++ /dev/null
@@ -1,157 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2005-2007,2011,2012 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-#
-
-from gnuradio import gr, audio, uhd
-from gnuradio import blocks
-from gnuradio import filter
-from gnuradio import analog
-from gnuradio.eng_option import eng_option
-from optparse import OptionParser
-import sys
-import math
-
-class wfm_rx_block (gr.top_block):
-
- def __init__(self):
- gr.top_block.__init__(self)
-
- parser=OptionParser(option_class=eng_option)
- parser.add_option("-a", "--args", type="string", default="",
- help="UHD device address args [default=%default]")
- parser.add_option("", "--spec", type="string", default="A:0 A:0",
- help="Subdevice of UHD device where appropriate")
- parser.add_option("-A", "--antenna", type="string", default=None,
- help="select Rx Antenna where appropriate")
- parser.add_option("", "--f1", type="eng_float", default=100.7e6,
- help="set 1st station frequency to FREQ", metavar="FREQ")
- parser.add_option("", "--f2", type="eng_float", default=102.5e6,
- help="set 2nd station freq to FREQ", metavar="FREQ")
- parser.add_option("-g", "--gain", type="eng_float", default=None,
- help="set gain in dB (default is midpoint)")
- parser.add_option("-O", "--audio-output", type="string", default="default",
- help="pcm device name. E.g., hw:0,0 or surround51 or /dev/dsp")
- parser.add_option("", "--freq-min", type="eng_float", default=87.9e6,
- help="Set a minimum frequency [default=%default]")
- parser.add_option("", "--freq-max", type="eng_float", default=108.1e6,
- help="Set a maximum frequency [default=%default]")
-
- (options, args) = parser.parse_args()
- if len(args) != 0:
- parser.print_help()
- sys.exit(1)
-
- if abs(options.f1 - options.f2) > 5.5e6:
- print "Sorry, two stations must be within 5.5MHz of each other"
- raise SystemExit
-
- f = (options.f1, options.f2)
-
- self.vol = .1
- self.state = "FREQ"
-
- self.fm_freq_min = options.freq_min
- self.fm_freq_max = options.freq_max
-
- # build graph
- stream_args = uhd.stream_args('fc32', channels=range(2))
- self.u = uhd.usrp_source(device_addr=options.args, stream_args=stream_args)
-
- # Set front end channel mapping
- self.u.set_subdev_spec(options.spec)
-
- usrp_rate = 320e3
- demod_rate = 320e3
- audio_rate = 32e3
- audio_decim = int(demod_rate / audio_rate)
-
- self.u.set_samp_rate(usrp_rate)
- dev_rate = self.u.get_samp_rate()
-
- # Make sure dboard can suppor the required frequencies
- frange = self.u.get_freq_range()
- if(frange.start() > self.fm_freq_max or frange.stop() < self.fm_freq_min):
- sys.stderr.write("Radio does not support required frequency range.\n")
- sys.exit(1)
-
- # sound card as final sink
- self.audio_sink = audio.sink(int(audio_rate), options.audio_output)
-
- # taps for channel filter
- nfilts = 32
- chan_coeffs = filter.optfir.low_pass(nfilts, # gain
- nfilts*usrp_rate, # sampling rate
- 80e3, # passband cutoff
- 115e3, # stopband cutoff
- 0.1, # passband ripple
- 60) # stopband attenuation
- rrate = usrp_rate / dev_rate
-
- # set front end PLL to middle frequency
- mid_freq = (f[0] + f[1]) / 2.0
-
- if options.gain is None:
- # if no gain was specified, use the mid-point in dB
- g = self.u.get_gain_range()
- options.gain = float(g.start()+g.stop())/2.0
-
- for n in range(2):
- chan_filt = filter.pfb.arb_resampler_ccf(rrate, chan_coeffs, nfilts)
- guts = analog.wfm_rcv(demod_rate, audio_decim)
- volume_control = blocks.multiply_const_ff(self.vol)
-
- #self.connect((self.di, n), chan_filt)
- self.connect((self.u, n), chan_filt)
- self.connect(chan_filt, guts, volume_control)
- self.connect(volume_control, (self.audio_sink, n))
-
- # Test the the requested frequencies are in range
- if(f[n] < self.fm_freq_min or f[n] > self.fm_freq_max):
- sys.stderr.write("Requested frequency is outside of required frequency range.\n")
- sys.exit(1)
-
- # Tune each channel by setting the RF freq to mid_freq and the
- # DDC freq to f[n].
- tr = uhd.tune_request(f[n], rf_freq=mid_freq,
- rf_freq_policy=uhd.tune_request.POLICY_MANUAL)
- self.u.set_center_freq(tr, n)
-
- # Set gain for each channel
- self.set_gain(options.gain, n)
-
- # Set the antenna
- if(options.antenna):
- self.u.set_antenna(options.antenna, n)
-
- def set_vol (self, vol):
- self.vol = vol
- self.volume_control.set_k(self.vol)
-
-
- def set_gain(self, gain, n):
- self.u.set_gain(gain, n)
-
-if __name__ == '__main__':
- tb = wfm_rx_block()
- try:
- tb.run()
- except KeyboardInterrupt:
- pass
diff --git a/gr-uhd/examples/python/usrp_wfm_rcv_fmdet.py b/gr-uhd/examples/python/usrp_wfm_rcv_fmdet.py
deleted file mode 100755
index 599f0bc460..0000000000
--- a/gr-uhd/examples/python/usrp_wfm_rcv_fmdet.py
+++ /dev/null
@@ -1,353 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2005-2007,2011,2012 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-#
-
-from gnuradio import gr, audio, uhd
-from gnuradio import blocks
-from gnuradio import filter
-from gnuradio import analog
-from gnuradio.eng_option import eng_option
-from gnuradio.wxgui import slider, powermate
-from gnuradio.wxgui import stdgui2, fftsink2, form, scopesink2
-from optparse import OptionParser
-import sys
-import wx
-
-class wfm_rx_block (stdgui2.std_top_block):
- def __init__(self,frame,panel,vbox,argv):
- stdgui2.std_top_block.__init__ (self,frame,panel,vbox,argv)
-
- parser=OptionParser(option_class=eng_option)
- parser.add_option("-a", "--args", type="string", default="",
- help="UHD device address args [default=%default]")
- parser.add_option("", "--spec", type="string", default=None,
- help="Subdevice of UHD device where appropriate")
- parser.add_option("-A", "--antenna", type="string", default=None,
- help="select Rx Antenna where appropriate")
- parser.add_option("-f", "--freq", type="eng_float", default=100.1e6,
- help="set frequency to FREQ", metavar="FREQ")
- parser.add_option("-g", "--gain", type="eng_float", default=None,
- help="set gain in dB (default is midpoint)")
- parser.add_option("-s", "--squelch", type="eng_float", default=0,
- help="set squelch level (default is 0)")
- parser.add_option("-V", "--volume", type="eng_float", default=None,
- help="set volume (default is midpoint)")
- parser.add_option("-O", "--audio-output", type="string", default="default",
- help="pcm device name. E.g., hw:0,0 or surround51 or /dev/dsp")
- parser.add_option("", "--freq-min", type="eng_float", default=87.9e6,
- help="Set a minimum frequency [default=%default]")
- parser.add_option("", "--freq-max", type="eng_float", default=108.1e6,
- help="Set a maximum frequency [default=%default]")
-
-
- (options, args) = parser.parse_args()
- if len(args) != 0:
- parser.print_help()
- sys.exit(1)
-
- self.frame = frame
- self.panel = panel
-
- self.vol = 0
- self.state = "FREQ"
- self.freq = 0
-
- self.fm_freq_min = options.freq_min
- self.fm_freq_max = options.freq_max
-
- # build graph
- self.u = uhd.usrp_source(device_addr=options.args, stream_args=uhd.stream_args('fc32'))
-
- # Set the subdevice spec
- if(options.spec):
- self.u.set_subdev_spec(options.spec, 0)
-
- # Set the antenna
- if(options.antenna):
- self.u.set_antenna(options.antenna, 0)
-
- usrp_rate = 320e3
- demod_rate = 320e3
- audio_rate = 48e3
- audio_decim = 10
-
- self.u.set_samp_rate(usrp_rate)
- dev_rate = self.u.get_samp_rate()
-
- nfilts = 32
- chan_coeffs = filter.firdes.low_pass_2(10*nfilts, # gain
- nfilts*usrp_rate, # sampling rate
- 90e3, # passband cutoff
- 30e3, # transition bw
- 70) # stopband attenuation
- rrate = usrp_rate / dev_rate
- self.chan_filt = filter.pfb.arb_resampler_ccf(rrate, chan_coeffs, nfilts)
-
- self.guts = analog.wfm_rcv_fmdet (demod_rate, audio_decim)
-
- chan_rate = audio_rate / (demod_rate/audio_decim)
- self.rchan_filt = filter.pfb.arb_resampler_fff(chan_rate)
- self.lchan_filt = filter.pfb.arb_resampler_fff(chan_rate)
-
- # FIXME rework {add,multiply}_const_* to handle multiple streams
- self.volume_control_l = blocks.multiply_const_ff(self.vol)
- self.volume_control_r = blocks.multiply_const_ff(self.vol)
-
- # sound card as final sink
- self.audio_sink = audio.sink(int (audio_rate),
- options.audio_output,
- False) # ok_to_block
-
- # now wire it all together
- self.connect(self.u, self.chan_filt, self.guts)
- self.connect((self.guts, 0), self.lchan_filt,
- self.volume_control_l, (self.audio_sink,0))
- self.connect((self.guts, 1), self.rchan_filt,
- self.volume_control_r, (self.audio_sink,1))
-
- try:
- self.guts.stereo_carrier_pll_recovery.squelch_enable(True)
- except:
- print "FYI: This implementation of the stereo_carrier_pll_recovery has no squelch implementation yet"
-
-
- self._build_gui(vbox, usrp_rate, demod_rate, audio_rate)
-
- if options.gain is None:
- # if no gain was specified, use the mid-point in dB
- g = self.u.get_gain_range()
- options.gain = float(g.start()+g.stop())/2.0
-
- if options.volume is None:
- g = self.volume_range()
- options.volume = float(g[0]+g[1])/2
-
- if abs(options.freq) < 1e6:
- options.freq *= 1e6
-
- frange = self.u.get_freq_range()
- if(frange.start() > self.fm_freq_max or frange.stop() < self.fm_freq_min):
- sys.stderr.write("Radio does not support required frequency range.\n")
- sys.exit(1)
- if(options.freq < self.fm_freq_min or options.freq > self.fm_freq_max):
- sys.stderr.write("Requested frequency is outside of required frequency range.\n")
- sys.exit(1)
-
- # set initial values
- self.set_gain(options.gain)
- self.set_vol(options.volume)
- try:
- self.guts.stereo_carrier_pll_recovery.set_lock_threshold(options.squelch)
- except:
- print "FYI: This implementation of the stereo_carrier_pll_recovery has no squelch implementation yet"
-
- if not(self.set_freq(options.freq)):
- self._set_status_msg("Failed to set initial frequency")
-
- def _set_status_msg(self, msg, which=0):
- self.frame.GetStatusBar().SetStatusText(msg, which)
-
-
- def _build_gui(self, vbox, usrp_rate, demod_rate, audio_rate):
-
- def _form_set_freq(kv):
- return self.set_freq(kv['freq'])
-
-
- if 1:
- self.src_fft = fftsink2.fft_sink_c(self.panel, title="Data from USRP",
- fft_size=512, sample_rate=usrp_rate,
- ref_scale=32768.0, ref_level=0, y_divs=12)
- self.connect (self.u, self.src_fft)
- vbox.Add (self.src_fft.win, 4, wx.EXPAND)
-
- if 1:
- post_fm_demod_fft = fftsink2.fft_sink_f(self.panel, title="Post FM Demod",
- fft_size=512, sample_rate=demod_rate,
- y_per_div=10, ref_level=0)
- self.connect (self.guts.fm_demod, post_fm_demod_fft)
- vbox.Add (post_fm_demod_fft.win, 4, wx.EXPAND)
-
- if 0:
- post_stereo_carrier_generator_fft = fftsink2.fft_sink_c (self.panel, title="Post Stereo_carrier_generator",
- fft_size=512, sample_rate=audio_rate,
- y_per_div=10, ref_level=0)
- self.connect (self.guts.stereo_carrier_generator, post_stereo_carrier_generator_fft)
- vbox.Add (post_stereo_carrier_generator_fft.win, 4, wx.EXPAND)
-
- if 0:
- post_deemphasis_left = fftsink2.fft_sink_f (self.panel, title="Post_Deemphasis_Left",
- fft_size=512, sample_rate=audio_rate,
- y_per_div=10, ref_level=0)
- self.connect (self.guts.deemph_Left, post_deemphasis_left)
- vbox.Add (post_deemphasis_left.win, 4, wx.EXPAND)
-
- if 0:
- post_deemphasis_right = fftsink2.fft_sink_f(self.panel, title="Post_Deemphasis_Right",
- fft_size=512, sample_rate=audio_rate,
- y_per_div=10, ref_level=-20)
- self.connect (self.guts.deemph_Left, post_deemphasis_right)
- vbox.Add (post_deemphasis_right.win, 4, wx.EXPAND)
-
-
- if 0:
- LmR_fft = fftsink2.fft_sink_f(self.panel, title="LmR",
- fft_size=512, sample_rate=audio_rate,
- y_per_div=10, ref_level=-20)
- self.connect (self.guts.LmR_real,LmR_fft)
- vbox.Add (LmR_fft.win, 4, wx.EXPAND)
-
- if 0:
- self.scope = scopesink2.scope_sink_f(self.panel, sample_rate=demod_rate)
- self.connect (self.guts.fm_demod,self.scope)
- vbox.Add (self.scope.win,4,wx.EXPAND)
-
- # control area form at bottom
- self.myform = myform = form.form()
-
- hbox = wx.BoxSizer(wx.HORIZONTAL)
- hbox.Add((5,0), 0)
- myform['freq'] = form.float_field(
- parent=self.panel, sizer=hbox, label="Freq", weight=1,
- callback=myform.check_input_and_call(_form_set_freq, self._set_status_msg))
-
- hbox.Add((5,0), 0)
- myform['freq_slider'] = \
- form.quantized_slider_field(parent=self.panel, sizer=hbox, weight=3,
- range=(self.fm_freq_min, self.fm_freq_max, 0.1e6),
- callback=self.set_freq)
- hbox.Add((5,0), 0)
- vbox.Add(hbox, 0, wx.EXPAND)
-
- hbox = wx.BoxSizer(wx.HORIZONTAL)
- hbox.Add((5,0), 0)
-
- myform['volume'] = \
- form.quantized_slider_field(parent=self.panel, sizer=hbox, label="Volume",
- weight=3, range=self.volume_range(),
- callback=self.set_vol)
- hbox.Add((5,0), 1)
-
- g = self.u.get_gain_range()
- myform['gain'] = \
- form.quantized_slider_field(parent=self.panel, sizer=hbox, label="Gain",
- weight=3, range=(g.start(), g.stop(), g.step()),
- callback=self.set_gain)
- hbox.Add((5,0), 0)
-
- myform['sqlch_thrsh'] = \
- form.quantized_slider_field(parent=self.panel, sizer=hbox, label="Stereo Squelch Threshold",
- weight=3, range=(0.0,1.0,0.01),
- callback=self.set_squelch)
- hbox.Add((5,0), 0)
- vbox.Add(hbox, 0, wx.EXPAND)
-
- try:
- self.knob = powermate.powermate(self.frame)
- self.rot = 0
- powermate.EVT_POWERMATE_ROTATE (self.frame, self.on_rotate)
- powermate.EVT_POWERMATE_BUTTON (self.frame, self.on_button)
- except:
- print "FYI: No Powermate or Contour Knob found"
-
-
- def on_rotate (self, event):
- self.rot += event.delta
- if (self.state == "FREQ"):
- if self.rot >= 3:
- self.set_freq(self.freq + .1e6)
- self.rot -= 3
- elif self.rot <=-3:
- self.set_freq(self.freq - .1e6)
- self.rot += 3
- else:
- step = self.volume_range()[2]
- if self.rot >= 3:
- self.set_vol(self.vol + step)
- self.rot -= 3
- elif self.rot <=-3:
- self.set_vol(self.vol - step)
- self.rot += 3
-
- def on_button (self, event):
- if event.value == 0: # button up
- return
- self.rot = 0
- if self.state == "FREQ":
- self.state = "VOL"
- else:
- self.state = "FREQ"
- self.update_status_bar ()
-
-
- def set_vol (self, vol):
- g = self.volume_range()
- self.vol = max(g[0], min(g[1], vol))
- self.volume_control_l.set_k(10**(self.vol/10))
- self.volume_control_r.set_k(10**(self.vol/10))
- self.myform['volume'].set_value(self.vol)
- self.update_status_bar ()
-
- def set_squelch(self,squelch_threshold):
- try:
- self.guts.stereo_carrier_pll_recovery.set_lock_threshold(squelch_threshold);
- except:
- print "FYI: This implementation of the stereo_carrier_pll_recovery has no squelch implementation yet"
-
-
- def set_freq(self, target_freq):
- """
- Set the center frequency we're interested in.
-
- Args:
- target_freq: frequency in Hz
- @rypte: bool
- """
-
- r = self.u.set_center_freq(target_freq)
-
- if r:
- self.freq = target_freq
- self.myform['freq'].set_value(target_freq) # update displayed value
- self.myform['freq_slider'].set_value(target_freq) # update displayed value
- self.update_status_bar()
- self._set_status_msg("OK", 0)
- return True
-
- self._set_status_msg("Failed", 0)
- return False
-
- def set_gain(self, gain):
- self.myform['gain'].set_value(gain) # update displayed value
- self.u.set_gain(gain)
-
- def update_status_bar (self):
- msg = "Volume:%r Setting:%s" % (self.vol, self.state)
- self._set_status_msg(msg, 1)
- self.src_fft.set_baseband_freq(self.freq)
-
- def volume_range(self):
- return (-20.0, 0.0, 0.5)
-
-
-if __name__ == '__main__':
- app = stdgui2.stdapp (wfm_rx_block, "USRP WFM RX")
- app.MainLoop ()
diff --git a/gr-uhd/examples/python/usrp_wfm_rcv_nogui.py b/gr-uhd/examples/python/usrp_wfm_rcv_nogui.py
deleted file mode 100755
index 134df3b39e..0000000000
--- a/gr-uhd/examples/python/usrp_wfm_rcv_nogui.py
+++ /dev/null
@@ -1,179 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2005-2007,2011,2012 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-#
-
-from gnuradio import gr, audio, uhd
-from gnuradio import blocks
-from gnuradio import filter
-from gnuradio import analog
-from gnuradio import eng_notation
-from gnuradio.eng_option import eng_option
-from optparse import OptionParser
-import sys
-
-class wfm_rx_block (gr.top_block):
-
- def __init__(self):
- gr.top_block.__init__(self)
-
- parser=OptionParser(option_class=eng_option)
- parser.add_option("-a", "--args", type="string", default="",
- help="UHD device address args [default=%default]")
- parser.add_option("", "--spec", type="string", default=None,
- help="Subdevice of UHD device where appropriate")
- parser.add_option("-A", "--antenna", type="string", default=None,
- help="select Rx Antenna where appropriate")
- parser.add_option("-f", "--freq", type="eng_float", default=100.1e6,
- help="set frequency to FREQ", metavar="FREQ")
- parser.add_option("-g", "--gain", type="eng_float", default=None,
- help="set gain in dB (default is midpoint)")
- parser.add_option("-V", "--volume", type="eng_float", default=None,
- help="set volume (default is midpoint)")
- parser.add_option("-O", "--audio-output", type="string", default="default",
- help="pcm device name. E.g., hw:0,0 or surround51 or /dev/dsp")
- parser.add_option("", "--freq-min", type="eng_float", default=87.9e6,
- help="Set a minimum frequency [default=%default]")
- parser.add_option("", "--freq-max", type="eng_float", default=108.1e6,
- help="Set a maximum frequency [default=%default]")
-
- (options, args) = parser.parse_args()
- if len(args) != 0:
- parser.print_help()
- sys.exit(1)
-
- self.state = "FREQ"
- self.freq = 0
-
- self.fm_freq_min = options.freq_min
- self.fm_freq_max = options.freq_max
-
- # build graph
- self.u = uhd.usrp_source(device_addr=options.args, stream_args=uhd.stream_args('fc32'))
-
- # Set the subdevice spec
- if(options.spec):
- self.u.set_subdev_spec(options.spec, 0)
-
- # Set the antenna
- if(options.antenna):
- self.u.set_antenna(options.antenna, 0)
-
- usrp_rate = 320e3
- demod_rate = 320e3
- audio_rate = 32e3
- audio_decim = int(demod_rate / audio_rate)
-
- self.u.set_samp_rate(usrp_rate)
- dev_rate = self.u.get_samp_rate()
-
- nfilts = 32
- chan_coeffs = filter.optfir.low_pass(nfilts, # gain
- nfilts*usrp_rate, # sampling rate
- 80e3, # passband cutoff
- 115e3, # stopband cutoff
- 0.1, # passband ripple
- 60) # stopband attenuation
- rrate = usrp_rate / dev_rate
- self.chan_filt = filter.pfb.arb_resampler_ccf(rrate, chan_coeffs, nfilts)
-
- self.guts = analog.wfm_rcv(demod_rate, audio_decim)
-
- self.volume_control = blocks.multiply_const_ff(1)
-
- # sound card as final sink
- self.audio_sink = audio.sink(int(audio_rate),
- options.audio_output,
- False) # ok_to_block
-
- # now wire it all together
- self.connect(self.u, self.chan_filt, self.guts,
- self.volume_control, self.audio_sink)
-
- if options.gain is None:
- # if no gain was specified, use the mid-point in dB
- g = self.u.get_gain_range()
- options.gain = float(g.start()+g.stop())/2.0
-
- if options.volume is None:
- g = self.volume_range()
- options.volume = float(g[0]+g[1])/2
-
- frange = self.u.get_freq_range()
- if(frange.start() > self.fm_freq_max or frange.stop() < self.fm_freq_min):
- sys.stderr.write("Radio does not support required frequency range.\n")
- sys.exit(1)
- if(options.freq < self.fm_freq_min or options.freq > self.fm_freq_max):
- sys.stderr.write("Requested frequency is outside of required frequency range.\n")
- sys.exit(1)
-
- # set initial values
- self.set_gain(options.gain)
- self.set_vol(options.volume)
- if not(self.set_freq(options.freq)):
- self._set_status_msg("Failed to set initial frequency")
-
- def set_vol (self, vol):
- g = self.volume_range()
- self.vol = max(g[0], min(g[1], vol))
- self.volume_control.set_k(10**(self.vol/10))
- self.update_status_bar ()
-
- def set_freq(self, target_freq):
- """
- Set the center frequency we're interested in.
-
- Args:
- target_freq: frequency in Hz
- @rypte: bool
- """
-
- r = self.u.set_center_freq(target_freq)
-
- if r:
- self.freq = target_freq
- self.update_status_bar()
- self._set_status_msg("OK", 0)
- return True
-
- self._set_status_msg("Failed", 0)
- return False
-
- def set_gain(self, gain):
- self.u.set_gain(gain)
-
- def update_status_bar (self):
- msg = "Freq: %s Volume:%f Setting:%s" % (
- eng_notation.num_to_str(self.freq), self.vol, self.state)
- self._set_status_msg(msg, 1)
-
- def _set_status_msg(self, msg, which=0):
- print msg
-
- def volume_range(self):
- return (-20.0, 0.0, 0.5)
-
-
-if __name__ == '__main__':
- tb = wfm_rx_block()
- try:
- tb.run()
- except KeyboardInterrupt:
- pass
diff --git a/gr-uhd/examples/python/usrp_wfm_rcv_pll.py b/gr-uhd/examples/python/usrp_wfm_rcv_pll.py
deleted file mode 100755
index 4b33cdcbb3..0000000000
--- a/gr-uhd/examples/python/usrp_wfm_rcv_pll.py
+++ /dev/null
@@ -1,350 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2005-2007,2011,2012 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-#
-
-from gnuradio import gr, audio, uhd
-from gnuradio import blocks
-from gnuradio import filter
-from gnuradio import analog
-from gnuradio import eng_notation
-from gnuradio.eng_option import eng_option
-from gnuradio.wxgui import slider, powermate
-from gnuradio.wxgui import stdgui2, fftsink2, form, scopesink2
-from optparse import OptionParser
-import sys
-import wx
-
-class wfm_rx_block (stdgui2.std_top_block):
- def __init__(self,frame,panel,vbox,argv):
- stdgui2.std_top_block.__init__ (self,frame,panel,vbox,argv)
-
- parser=OptionParser(option_class=eng_option)
- parser.add_option("-a", "--args", type="string", default="",
- help="UHD device address args [default=%default]")
- parser.add_option("", "--spec", type="string", default=None,
- help="Subdevice of UHD device where appropriate")
- parser.add_option("-A", "--antenna", type="string", default=None,
- help="select Rx Antenna where appropriate")
- parser.add_option("-f", "--freq", type="eng_float", default=100.1e6,
- help="set frequency to FREQ", metavar="FREQ")
- parser.add_option("-g", "--gain", type="eng_float", default=None,
- help="set gain in dB (default is midpoint)")
- parser.add_option("-s", "--squelch", type="eng_float", default=0,
- help="set squelch level (default is 0)")
- parser.add_option("-V", "--volume", type="eng_float", default=None,
- help="set volume (default is midpoint)")
- parser.add_option("-O", "--audio-output", type="string", default="default",
- help="pcm device name. E.g., hw:0,0 or surround51 or /dev/dsp")
- parser.add_option("", "--freq-min", type="eng_float", default=87.9e6,
- help="Set a minimum frequency [default=%default]")
- parser.add_option("", "--freq-max", type="eng_float", default=108.1e6,
- help="Set a maximum frequency [default=%default]")
-
- (options, args) = parser.parse_args()
- if len(args) != 0:
- parser.print_help()
- sys.exit(1)
-
- self.frame = frame
- self.panel = panel
-
- self.vol = 0
- self.state = "FREQ"
- self.freq = 0
-
- self.fm_freq_min = options.freq_min
- self.fm_freq_max = options.freq_max
-
- # build graph
- self.u = uhd.usrp_source(device_addr=options.args, stream_args=uhd.stream_args('fc32'))
-
- # Set the subdevice spec
- if(options.spec):
- self.u.set_subdev_spec(options.spec, 0)
-
- # Set the antenna
- if(options.antenna):
- self.u.set_antenna(options.antenna, 0)
-
- usrp_rate = 320e3
- demod_rate = 320e3
- audio_rate = 48e3
- audio_decim = 10
-
- self.u.set_samp_rate(usrp_rate)
- dev_rate = self.u.get_samp_rate()
-
- nfilts = 32
- chan_coeffs = filter.firdes.low_pass_2(nfilts, # gain
- nfilts*usrp_rate, # sampling rate
- 90e3, # passband cutoff
- 30e3, # stopband cutoff
- 70) # stopband attenuation
- rrate = usrp_rate / dev_rate
- self.chan_filt = filter.pfb.arb_resampler_ccf(rrate, chan_coeffs, nfilts)
-
-
- self.guts = analog.wfm_rcv_pll(demod_rate, audio_decim)
-
- chan_rate = audio_rate / (demod_rate/audio_decim)
- self.rchan_filt = filter.pfb.arb_resampler_fff(chan_rate)
- self.lchan_filt = filter.pfb.arb_resampler_fff(chan_rate)
-
- # FIXME rework {add,multiply}_const_* to handle multiple streams
- self.volume_control_l = blocks.multiply_const_ff(self.vol)
- self.volume_control_r = blocks.multiply_const_ff(self.vol)
-
- # sound card as final sink
- self.audio_sink = audio.sink (int (audio_rate),
- options.audio_output,
- False) # ok_to_block
-
- # now wire it all together
- self.connect (self.u, self.chan_filt, self.guts)
- self.connect((self.guts, 0), self.lchan_filt,
- self.volume_control_l, (self.audio_sink,0))
- self.connect((self.guts, 1), self.rchan_filt,
- self.volume_control_r, (self.audio_sink,1))
-
- try:
- self.guts.stereo_carrier_pll_recovery.squelch_enable(True)
- except:
- print "FYI: This implementation of the stereo_carrier_pll_recovery has no squelch implementation yet"
-
-
- self._build_gui(vbox, usrp_rate, demod_rate, audio_rate)
-
- if options.gain is None:
- # if no gain was specified, use the mid-point in dB
- g = self.u.get_gain_range()
- options.gain = float(g.start()+g.stop())/2.0
-
- if options.volume is None:
- g = self.volume_range()
- options.volume = float(g[0]+g[1])/2
-
- frange = self.u.get_freq_range()
- if(frange.start() > self.fm_freq_max or frange.stop() < self.fm_freq_min):
- sys.stderr.write("Radio does not support required frequency range.\n")
- sys.exit(1)
- if(options.freq < self.fm_freq_min or options.freq > self.fm_freq_max):
- sys.stderr.write("Requested frequency is outside of required frequency range.\n")
- sys.exit(1)
-
- # set initial values
- self.set_gain(options.gain)
- self.set_vol(options.volume)
- try:
- self.guts.stereo_carrier_pll_recovery.set_lock_threshold(options.squelch)
- except:
- print "FYI: This implementation of the stereo_carrier_pll_recovery has no squelch implementation yet"
-
- if not(self.set_freq(options.freq)):
- self._set_status_msg("Failed to set initial frequency")
-
- def _set_status_msg(self, msg, which=0):
- self.frame.GetStatusBar().SetStatusText(msg, which)
-
-
- def _build_gui(self, vbox, usrp_rate, demod_rate, audio_rate):
-
- def _form_set_freq(kv):
- return self.set_freq(kv['freq'])
-
-
- if 1:
- self.src_fft = fftsink2.fft_sink_c(self.panel, title="Data from USRP",
- fft_size=512, sample_rate=usrp_rate,
- ref_scale=32768.0, ref_level=0, y_divs=12)
- self.connect (self.u, self.src_fft)
- vbox.Add (self.src_fft.win, 4, wx.EXPAND)
-
- if 1:
- post_fm_demod_fft = fftsink2.fft_sink_f(self.panel, title="Post FM Demod",
- fft_size=512, sample_rate=demod_rate,
- y_per_div=10, ref_level=0)
- self.connect (self.guts.fm_demod, post_fm_demod_fft)
- vbox.Add (post_fm_demod_fft.win, 4, wx.EXPAND)
-
- if 0:
- post_stereo_carrier_generator_fft = fftsink2.fft_sink_c (self.panel, title="Post Stereo_carrier_generator",
- fft_size=512, sample_rate=audio_rate,
- y_per_div=10, ref_level=0)
- self.connect (self.guts.stereo_carrier_generator, post_stereo_carrier_generator_fft)
- vbox.Add (post_stereo_carrier_generator_fft.win, 4, wx.EXPAND)
-
- if 0:
- post_deemphasis_left = fftsink2.fft_sink_f (self.panel, title="Post_Deemphasis_Left",
- fft_size=512, sample_rate=audio_rate,
- y_per_div=10, ref_level=0)
- self.connect (self.guts.deemph_Left, post_deemphasis_left)
- vbox.Add (post_deemphasis_left.win, 4, wx.EXPAND)
-
- if 0:
- post_deemphasis_right = fftsink2.fft_sink_f(self.panel, title="Post_Deemphasis_Right",
- fft_size=512, sample_rate=audio_rate,
- y_per_div=10, ref_level=-20)
- self.connect (self.guts.deemph_Left, post_deemphasis_right)
- vbox.Add (post_deemphasis_right.win, 4, wx.EXPAND)
-
-
- if 0:
- LmR_fft = fftsink2.fft_sink_f(self.panel, title="LmR",
- fft_size=512, sample_rate=audio_rate,
- y_per_div=10, ref_level=-20)
- self.connect (self.guts.LmR_real,LmR_fft)
- vbox.Add (LmR_fft.win, 4, wx.EXPAND)
-
- if 0:
- self.scope = scopesink2.scope_sink_f(self.panel, sample_rate=demod_rate)
- self.connect (self.guts.fm_demod,self.scope)
- vbox.Add (self.scope.win,4,wx.EXPAND)
-
- # control area form at bottom
- self.myform = myform = form.form()
-
- hbox = wx.BoxSizer(wx.HORIZONTAL)
- hbox.Add((5,0), 0)
- myform['freq'] = form.float_field(
- parent=self.panel, sizer=hbox, label="Freq", weight=1,
- callback=myform.check_input_and_call(_form_set_freq, self._set_status_msg))
-
- hbox.Add((5,0), 0)
- myform['freq_slider'] = \
- form.quantized_slider_field(parent=self.panel, sizer=hbox, weight=3,
- range=(self.fm_freq_min, self.fm_freq_max, 0.1e6),
- callback=self.set_freq)
- hbox.Add((5,0), 0)
- vbox.Add(hbox, 0, wx.EXPAND)
-
- hbox = wx.BoxSizer(wx.HORIZONTAL)
- hbox.Add((5,0), 0)
-
- myform['volume'] = \
- form.quantized_slider_field(parent=self.panel, sizer=hbox, label="Volume",
- weight=3, range=self.volume_range(),
- callback=self.set_vol)
- hbox.Add((5,0), 1)
-
- g = self.u.get_gain_range()
- myform['gain'] = \
- form.quantized_slider_field(parent=self.panel, sizer=hbox, label="Gain",
- weight=3, range=(g.start(), g.stop(), g.step()),
- callback=self.set_gain)
- hbox.Add((5,0), 0)
-
- myform['sqlch_thrsh'] = \
- form.quantized_slider_field(parent=self.panel, sizer=hbox, label="Stereo Squelch Threshold",
- weight=3, range=(0.0,1.0,0.01),
- callback=self.set_squelch)
- hbox.Add((5,0), 0)
- vbox.Add(hbox, 0, wx.EXPAND)
-
- try:
- self.knob = powermate.powermate(self.frame)
- self.rot = 0
- powermate.EVT_POWERMATE_ROTATE (self.frame, self.on_rotate)
- powermate.EVT_POWERMATE_BUTTON (self.frame, self.on_button)
- except:
- print "FYI: No Powermate or Contour Knob found"
-
-
- def on_rotate (self, event):
- self.rot += event.delta
- if (self.state == "FREQ"):
- if self.rot >= 3:
- self.set_freq(self.freq + .1e6)
- self.rot -= 3
- elif self.rot <=-3:
- self.set_freq(self.freq - .1e6)
- self.rot += 3
- else:
- step = self.volume_range()[2]
- if self.rot >= 3:
- self.set_vol(self.vol + step)
- self.rot -= 3
- elif self.rot <=-3:
- self.set_vol(self.vol - step)
- self.rot += 3
-
- def on_button (self, event):
- if event.value == 0: # button up
- return
- self.rot = 0
- if self.state == "FREQ":
- self.state = "VOL"
- else:
- self.state = "FREQ"
- self.update_status_bar ()
-
-
- def set_vol (self, vol):
- g = self.volume_range()
- self.vol = max(g[0], min(g[1], vol))
- self.volume_control_l.set_k(10**(self.vol/10))
- self.volume_control_r.set_k(10**(self.vol/10))
- self.myform['volume'].set_value(self.vol)
- self.update_status_bar ()
-
- def set_squelch(self,squelch_threshold):
- try:
- self.guts.stereo_carrier_pll_recovery.set_lock_threshold(squelch_threshold);
- except:
- print "FYI: This implementation of the stereo_carrier_pll_recovery has no squelch implementation yet"
-
- def set_freq(self, target_freq):
- """
- Set the center frequency we're interested in.
-
- Args:
- target_freq: frequency in Hz
- @rypte: bool
- """
-
- r = self.u.set_center_freq(target_freq)
-
- if r:
- self.freq = target_freq
- self.myform['freq'].set_value(target_freq) # update displayed value
- self.myform['freq_slider'].set_value(target_freq) # update displayed value
- self.update_status_bar()
- self._set_status_msg("OK", 0)
- return True
-
- self._set_status_msg("Failed", 0)
- return False
-
- def set_gain(self, gain):
- self.myform['gain'].set_value(gain) # update displayed value
- self.u.set_gain(gain)
-
- def update_status_bar (self):
- msg = "Volume:%r Setting:%s" % (self.vol, self.state)
- self._set_status_msg(msg, 1)
- self.src_fft.set_baseband_freq(self.freq)
-
- def volume_range(self):
- return (-20.0, 0.0, 0.5)
-
-
-if __name__ == '__main__':
- app = stdgui2.stdapp (wfm_rx_block, "USRP WFM RX")
- app.MainLoop ()
diff --git a/gr-uhd/examples/python/usrp_wfm_rcv_sca.py b/gr-uhd/examples/python/usrp_wfm_rcv_sca.py
deleted file mode 100755
index 9069a745f9..0000000000
--- a/gr-uhd/examples/python/usrp_wfm_rcv_sca.py
+++ /dev/null
@@ -1,407 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2006,2007,2011,2012 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with this program; if not, write to the Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-
-"""
-Here is a bit of code that will receive SCA analog subcarriers of FM
-Broadcast Stations using the USRP. It is a modified version of
-usrp_wfm_rcv.py.
-
-Common SCA frequencies are 67 kHz and 92 kHz. SCA is used for Reading
-Services for the Blind, Background Music, Foreign Language Services, and
-other services. Remember you may hear static when tuned to a FM station
-because this code only outputs SCA audio.
-
-The USRP gain is critical for good decoding. Adjust for minimum noise.
- I use the Post FM Demod FFT to check for SCA subcarriers and to adjust
-the USRP gain for the lowest noise floor. The stereo pilot at 19 KHz,
-the stereo difference signal around 38 KHz, and RDS at 57 KHz are also
-displayed on the Post FM Demod FFT if present.
-
-The range below 67 kHz is used for SCA only when Stereo is not used.
-
-The SCA recieve range is not as far as the main FM carrier receive range
-so tune in strong local stations first.
-
-I tried to comment the code with the various parameters. There seems to
-be several choices for a couple of them. I coded the common ones I see
-here.
-
-In the local area there are a couple of stations using digital SCA.
-These look similar to narrow DRM signals and I wonder if they are using
-OFDM.
-"""
-
-
-from gnuradio import gr, audio, uhd
-from gnuradio import blocks
-from gnuradio import filter
-from gnuradio import analog
-from gnuradio.eng_option import eng_option
-from gnuradio.wxgui import slider, powermate
-from gnuradio.wxgui import stdgui2, fftsink2, form
-from optparse import OptionParser
-import sys
-import math
-import wx
-
-class wfm_rx_sca_block (stdgui2.std_top_block):
- def __init__(self,frame,panel,vbox,argv):
- stdgui2.std_top_block.__init__ (self,frame,panel,vbox,argv)
-
- parser=OptionParser(option_class=eng_option)
- parser.add_option("-a", "--args", type="string", default="",
- help="UHD device address args [default=%default]")
- parser.add_option("", "--spec", type="string", default=None,
- help="Subdevice of UHD device where appropriate")
- parser.add_option("-A", "--antenna", type="string", default=None,
- help="select Rx Antenna where appropriate")
- parser.add_option("-f", "--freq", type="eng_float", default=100.1e6,
- help="set frequency to FREQ", metavar="FREQ")
- parser.add_option("-g", "--gain", type="eng_float", default=None,
- help="set gain in dB (default is midpoint)")
- parser.add_option("-V", "--volume", type="eng_float", default=None,
- help="set volume (default is midpoint)")
- parser.add_option("-O", "--audio-output", type="string", default="default",
- help="pcm device name. E.g., hw:0,0 or surround51 or /dev/dsp")
- parser.add_option("", "--freq-min", type="eng_float", default=87.9e6,
- help="Set a minimum frequency [default=%default]")
- parser.add_option("", "--freq-max", type="eng_float", default=108.1e6,
- help="Set a maximum frequency [default=%default]")
-
- (options, args) = parser.parse_args()
- if len(args) != 0:
- parser.print_help()
- sys.exit(1)
-
- self.frame = frame
- self.panel = panel
-
- self.vol = 0
- self.state = "FREQ"
- self.freq = 0
-
- self.fm_freq_min = options.freq_min
- self.fm_freq_max = options.freq_max
-
- # build graph
-
- self.u = uhd.usrp_source(device_addr=options.args, stream_args=uhd.stream_args('fc32'))
-
- # Set the subdevice spec
- if(options.spec):
- self.u.set_subdev_spec(options.spec, 0)
-
- # Set the antenna
- if(options.antenna):
- self.u.set_antenna(options.antenna, 0)
-
- usrp_rate = 320e3
- demod_rate = 320e3
- audio_rate = 32e3
- sca_demod_rate = 64e3
- audio_decim = int(demod_rate / audio_rate)
- sca_chanfilt_decim = int(demod_rate / sca_demod_rate)
-
- self.u.set_samp_rate(usrp_rate)
- dev_rate = self.u.get_samp_rate()
-
- nfilts = 32
- chan_coeffs = filter.optfir.low_pass(nfilts, # gain
- nfilts*usrp_rate, # sampling rate
- 100e3, # passband cutoff
- 140e3, # stopband cutoff
- 0.1, # passband ripple
- 60) # stopband attenuation
- rrate = usrp_rate / dev_rate
- self.chan_filt = filter.pfb.arb_resampler_ccf(rrate, chan_coeffs, nfilts)
-
- #Create demodulator block for Main FM Channel
- max_dev = 75e3
- fm_demod_gain = demod_rate/(2*math.pi*max_dev)
- self.fm_demod = analog.quadrature_demod_cf(fm_demod_gain)
-
- # Note - deemphasis is not applied to the Main FM Channel as
- # main audio is not decoded
-
- # SCA Devation is 10% of carrier but some references say 20%
- # if mono with one SCA (6 KHz seems typical)
- max_sca_dev = 6e3
-
- # Create filter to get SCA channel we want
- sca_chan_coeffs = filter.firdes.low_pass(1.0, # gain
- demod_rate, # sampling rate
- max_sca_dev, # cutoff freq
- max_sca_dev/3, # trans. band
- filter.firdes.WIN_HANN) # filter type
-
- self.ddc = filter.freq_xlating_fir_filter_fcf(sca_chanfilt_decim, # decim rate
- sca_chan_coeffs, # taps
- 0, # freq translation amount (Gets set by the UI)
- demod_rate) # input sample rate
-
- #Create demodulator block for SCA Channel
- sca_demod_gain = sca_demod_rate/(2*math.pi*max_sca_dev)
- self.fm_demod_sca = analog.quadrature_demod_cf(sca_demod_gain)
-
-
- # SCA analog audio is bandwidth limited to 5 KHz
- max_sca_audio_freq = 5.0e3
-
- # SCA analog deephasis is 150 uS (75 uS may be used)
- sca_tau = 150e-6
-
- # compute FIR filter taps for SCA audio filter
- audio_coeffs = filter.firdes.low_pass(1.0, # gain
- sca_demod_rate, # sampling rate
- max_sca_audio_freq, # cutoff freq
- max_sca_audio_freq/2.5, # trans. band
- filter.firdes.WIN_HAMMING)
-
- # input: float; output: float
- self.audio_filter = filter.fir_filter_fff(audio_decim, audio_coeffs)
-
- # Create deemphasis block that is applied after SCA demodulation
- self.deemph = analog.fm_deemph(audio_rate, sca_tau)
-
- self.volume_control = blocks.multiply_const_ff(self.vol)
-
- # sound card as final sink
- self.audio_sink = audio.sink(int (audio_rate),
- options.audio_output,
- False) # ok_to_block
-
- # now wire it all together
- self.connect(self.u, self.chan_filt, self.fm_demod,
- self.ddc, self.fm_demod_sca)
- self.connect(self.fm_demod_sca, self.audio_filter,
- self.deemph, self.volume_control,
- self.audio_sink)
-
- self._build_gui(vbox, usrp_rate, demod_rate, sca_demod_rate, audio_rate)
-
- if options.gain is None:
- # if no gain was specified, use the mid-point in dB
- g = self.u.get_gain_range()
- options.gain = float(g.start()+g.stop())/2
-
- if options.volume is None:
- g = self.volume_range()
- options.volume = float(g[0]+g[1])/2
-
- frange = self.u.get_freq_range()
- if(frange.start() > self.fm_freq_max or frange.stop() < self.fm_freq_min):
- sys.stderr.write("Radio does not support required frequency range.\n")
- sys.exit(1)
- if(options.freq < self.fm_freq_min or options.freq > self.fm_freq_max):
- sys.stderr.write("Requested frequency is outside of required frequency range.\n")
- sys.exit(1)
-
- # set initial values
-
- self.set_gain(options.gain)
- self.set_vol(options.volume)
- if not(self.set_freq(options.freq)):
- self._set_status_msg("Failed to set initial frequency")
- self.set_sca_freq(67000) # A common SCA Frequency
-
- def _set_status_msg(self, msg, which=0):
- self.frame.GetStatusBar().SetStatusText(msg, which)
-
-
- def _build_gui(self, vbox, usrp_rate, demod_rate, sca_demod_rate, audio_rate):
-
- def _form_set_freq(kv):
- return self.set_freq(kv['freq'])
-
- def _form_set_sca_freq(kv):
- return self.set_sca_freq(kv['sca_freq'])
-
- if 1:
- self.src_fft = fftsink2.fft_sink_c(self.panel, title="Data from USRP",
- fft_size=512, sample_rate=usrp_rate,
- ref_scale=32768.0, ref_level=0, y_divs=12)
- self.connect (self.u, self.src_fft)
- vbox.Add (self.src_fft.win, 4, wx.EXPAND)
-
- if 1:
- post_demod_fft = fftsink2.fft_sink_f(self.panel, title="Post FM Demod",
- fft_size=2048, sample_rate=demod_rate,
- y_per_div=10, ref_level=0)
- self.connect (self.fm_demod, post_demod_fft)
- vbox.Add (post_demod_fft.win, 4, wx.EXPAND)
-
- if 0:
- post_demod_sca_fft = fftsink2.fft_sink_f(self.panel, title="Post SCA Demod",
- fft_size=1024, sample_rate=sca_demod_rate,
- y_per_div=10, ref_level=0)
- self.connect (self.fm_demod_sca, post_demod_sca_fft)
- vbox.Add (post_demod_sca_fft.win, 4, wx.EXPAND)
-
- if 0:
- post_deemph_fft = fftsink2.fft_sink_f (self.panel, title="Post SCA Deemph",
- fft_size=512, sample_rate=audio_rate,
- y_per_div=10, ref_level=-20)
- self.connect (self.deemph, post_deemph_fft)
- vbox.Add (post_deemph_fft.win, 4, wx.EXPAND)
-
-
- # control area form at bottom
- self.myform = myform = form.form()
-
- hbox = wx.BoxSizer(wx.HORIZONTAL)
- hbox.Add((5,0), 0)
- myform['freq'] = form.float_field(
- parent=self.panel, sizer=hbox, label="Freq", weight=1,
- callback=myform.check_input_and_call(_form_set_freq, self._set_status_msg))
-
- hbox.Add((5,0), 0)
- myform['freq_slider'] = \
- form.quantized_slider_field(parent=self.panel, sizer=hbox, weight=3,
- range=(self.fm_freq_min, self.fm_freq_max, 0.1e6),
- callback=self.set_freq)
- hbox.Add((5,0), 0)
- vbox.Add(hbox, 0, wx.EXPAND)
-
- hbox = wx.BoxSizer(wx.HORIZONTAL)
- hbox.Add((5,0), 0)
- myform['sca_freq'] = form.float_field(
- parent=self.panel, sizer=hbox, label="SCA", weight=1,
- callback=myform.check_input_and_call(_form_set_sca_freq, self._set_status_msg))
-
- hbox.Add((5,0), 0)
- myform['sca_freq_slider'] = \
- form.quantized_slider_field(parent=self.panel, sizer=hbox, weight=3,
- range=(38e3, 100e3, 1.0e3),
- callback=self.set_sca_freq)
- hbox.Add((5,0), 0)
- vbox.Add(hbox, 0, wx.EXPAND)
-
- hbox = wx.BoxSizer(wx.HORIZONTAL)
- hbox.Add((5,0), 0)
-
- myform['volume'] = \
- form.quantized_slider_field(parent=self.panel, sizer=hbox, label="Volume",
- weight=3, range=self.volume_range(),
- callback=self.set_vol)
- hbox.Add((5,0), 1)
-
- g = self.u.get_gain_range()
- myform['gain'] = \
- form.quantized_slider_field(parent=self.panel, sizer=hbox, label="Gain",
- weight=3, range=(g.start(), g.stop(), g.step()),
- callback=self.set_gain)
- hbox.Add((5,0), 0)
- vbox.Add(hbox, 0, wx.EXPAND)
-
- try:
- self.knob = powermate.powermate(self.frame)
- self.rot = 0
- powermate.EVT_POWERMATE_ROTATE (self.frame, self.on_rotate)
- powermate.EVT_POWERMATE_BUTTON (self.frame, self.on_button)
- except:
- print "FYI: No Powermate or Contour Knob found"
-
-
- def on_rotate (self, event):
- self.rot += event.delta
- if (self.state == "FREQ"):
- if self.rot >= 3:
- self.set_freq(self.freq + .1e6)
- self.rot -= 3
- elif self.rot <=-3:
- self.set_freq(self.freq - .1e6)
- self.rot += 3
- else:
- step = self.volume_range()[2]
- if self.rot >= 3:
- self.set_vol(self.vol + step)
- self.rot -= 3
- elif self.rot <=-3:
- self.set_vol(self.vol - step)
- self.rot += 3
-
- def on_button (self, event):
- if event.value == 0: # button up
- return
- self.rot = 0
- if self.state == "FREQ":
- self.state = "VOL"
- else:
- self.state = "FREQ"
- self.update_status_bar ()
-
-
- def set_vol (self, vol):
- g = self.volume_range()
- self.vol = max(g[0], min(g[1], vol))
- self.volume_control.set_k(10**(self.vol/10))
- self.myform['volume'].set_value(self.vol)
- self.update_status_bar ()
-
- def set_freq(self, target_freq):
- """
- Set the center frequency we're interested in.
-
- Args:
- target_freq: frequency in Hz
- @rypte: bool
-
- Tuning is a two step process. First we ask the front-end to
- tune as close to the desired frequency as it can. Then we use
- the result of that operation and our target_frequency to
- determine the value for the digital down converter.
- """
- r = self.u.set_center_freq(target_freq)
- if r:
- self.freq = target_freq
- self.myform['freq'].set_value(target_freq) # update displayed value
- self.myform['freq_slider'].set_value(target_freq) # update displayed value
- self.update_status_bar()
- self._set_status_msg("OK", 0)
- return True
- self._set_status_msg("Failed", 0)
- return False
-
- def set_sca_freq(self, target_sca_freq):
-
- self.ddc.set_center_freq(-target_sca_freq)
- self.myform['sca_freq'].set_value(target_sca_freq) # update displayed value
- self.myform['sca_freq_slider'].set_value(target_sca_freq) # update displayed value
- self.update_status_bar()
- self._set_status_msg("OK", 0)
- return True
-
- def set_gain(self, gain):
- self.myform['gain'].set_value(gain) # update displayed value
- self.u.set_gain(gain)
-
- def update_status_bar (self):
- msg = "Volume:%r Setting:%s" % (self.vol, self.state)
- self._set_status_msg(msg, 1)
- self.src_fft.set_baseband_freq(self.freq)
-
- def volume_range(self):
- return (-20.0, 0.0, 0.5)
-
-
-if __name__ == '__main__':
- app = stdgui2.stdapp (wfm_rx_sca_block, "USRP WFM SCA RX")
- app.MainLoop ()
diff --git a/gr-uhd/examples/python/usrp_wxapt_rcv.py b/gr-uhd/examples/python/usrp_wxapt_rcv.py
deleted file mode 100755
index 305149b682..0000000000
--- a/gr-uhd/examples/python/usrp_wxapt_rcv.py
+++ /dev/null
@@ -1,286 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2005-2007,2011,2012 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-#
-
-from gnuradio import gr, audio, uhd
-from gnuradio import blocks
-from gnuradio import filter
-from gnuradio import analog
-from gnuradio.eng_option import eng_option
-from gnuradio.wxgui import slider, powermate
-from gnuradio.wxgui import stdgui2, fftsink2, form
-from optparse import OptionParser
-import sys
-import wx
-
-
-class wxapt_rx_block (stdgui2.std_top_block):
- def __init__(self,frame,panel,vbox,argv):
- stdgui2.std_top_block.__init__ (self,frame,panel,vbox,argv)
-
- parser=OptionParser(option_class=eng_option)
- parser.add_option("-a", "--args", type="string", default="",
- help="UHD device address args, [default=%default]")
- parser.add_option("", "--spec", type="string", default=None,
- help="Subdevice of UHD device where appropriate")
- parser.add_option("-A", "--antenna", type="string", default=None,
- help="select Rx Antenna where appropriate")
- parser.add_option("-f", "--freq", type="eng_float", default=137.5e6,
- help="set frequency to FREQ", metavar="FREQ")
- parser.add_option("-g", "--gain", type="eng_float", default=None,
- help="set gain in dB (default is midpoint)")
- parser.add_option("-V", "--volume", type="eng_float", default=None,
- help="set volume (default is midpoint)")
- parser.add_option("-O", "--audio-output", type="string", default="default",
- help="pcm device name. E.g., hw:0,0 or surround51 or /dev/dsp")
- parser.add_option("", "--freq-min", type="eng_float", default=137e6,
- help="Set a minimum frequency [default=%default]")
- parser.add_option("", "--freq-max", type="eng_float", default=138e6,
- help="Set a maximum frequency [default=%default]")
-
- (options, args) = parser.parse_args()
- if len(args) != 0:
- parser.print_help()
- sys.exit(1)
-
- self.frame = frame
- self.panel = panel
-
- self.vol = 0
- self.state = "FREQ"
- self.freq = 0
-
- self.freq_min = options.freq_min
- self.freq_max = options.freq_max
-
- # build graph
- self.u = uhd.usrp_source(device_addr=options.args, stream_args=uhd.stream_args('fc32'))
-
- # Set the subdevice spec
- if(options.spec):
- self.u.set_subdev_spec(options.spec, 0)
-
- # Set the antenna
- if(options.antenna):
- self.u.set_antenna(options.antenna, 0)
-
- usrp_rate = 320e3
- demod_rate = 320e3
- audio_rate = 32e3
- audio_decim = int(demod_rate / audio_rate)
-
- self.u.set_samp_rate(usrp_rate)
- dev_rate = self.u.get_samp_rate()
-
- nfilts = 32
- chan_coeffs = filter.firdes.low_pass_2(nfilts, # gain
- nfilts*usrp_rate, # sampling rate
- 40e3, # passband cutoff
- 20e3, # transition bw
- 60) # stopband attenuation
- rrate = usrp_rate / dev_rate
- self.chan_filt = filter.pfb.arb_resampler_ccf(rrate, chan_coeffs, nfilts)
-
- self.guts = analog.wfm_rcv(demod_rate, audio_decim)
-
- self.volume_control = blocks.multiply_const_ff(self.vol)
-
- # sound card as final sink
- self.audio_sink = audio.sink(int (audio_rate), options.audio_output)
-
- # now wire it all together
- self.connect(self.u, self.chan_filt, self.guts,
- self.volume_control, self.audio_sink)
-
- self._build_gui(vbox, usrp_rate, demod_rate, audio_rate)
-
- if options.gain is None:
- # if no gain was specified, use the mid-point in dB
- g = self.u.get_gain_range()
- options.gain = float(g.start()+g.stop())/2.0
-
- if options.volume is None:
- g = self.volume_range()
- options.volume = float(g[0]+g[1])/2
-
- frange = self.u.get_freq_range()
- if(frange.start() > self.freq_max or frange.stop() < self.freq_min):
- sys.stderr.write("Radio does not support required frequency range.\n")
- sys.exit(1)
- if(options.freq < self.freq_min or options.freq > self.freq_max):
- sys.stderr.write("Requested frequency is outside of required frequency range.\n")
- sys.exit(1)
-
- # set initial values
- self.set_gain(options.gain)
- self.set_vol(options.volume)
- if not(self.set_freq(options.freq)):
- self._set_status_msg("Failed to set initial frequency")
-
- def _set_status_msg(self, msg, which=0):
- self.frame.GetStatusBar().SetStatusText(msg, which)
-
-
- def _build_gui(self, vbox, usrp_rate, demod_rate, audio_rate):
-
- def _form_set_freq(kv):
- return self.set_freq(kv['freq'])
-
-
- if 1:
- self.src_fft = fftsink2.fft_sink_c (self.panel, title="Data from USRP",
- fft_size=512, sample_rate=usrp_rate,
- ref_scale=32768.0, ref_level=0, y_divs=12)
- self.connect (self.u, self.src_fft)
- vbox.Add (self.src_fft.win, 4, wx.EXPAND)
-
- if 1:
- post_deemph_fft = fftsink2.fft_sink_f (self.panel, title="Post Deemph",
- fft_size=512, sample_rate=demod_rate,
- y_per_div=10, ref_level=-20)
- self.connect (self.guts.deemph, post_deemph_fft)
- vbox.Add (post_deemph_fft.win, 4, wx.EXPAND)
-
- if 1:
- post_filt_fft = fftsink2.fft_sink_f (self.panel, title="Post Filter",
- fft_size=512, sample_rate=audio_rate,
- y_per_div=10, ref_level=0)
- self.connect (self.guts.audio_filter, post_filt_fft)
- vbox.Add (post_filt_fft.win, 4, wx.EXPAND)
-
-
- # control area form at bottom
- self.myform = myform = form.form()
-
- hbox = wx.BoxSizer(wx.HORIZONTAL)
- hbox.Add((5,0), 0)
- myform['freq'] = form.float_field(
- parent=self.panel, sizer=hbox, label="Freq", weight=1,
- callback=myform.check_input_and_call(_form_set_freq, self._set_status_msg))
-
- hbox.Add((5,0), 0)
- myform['freq_slider'] = \
- form.quantized_slider_field(parent=self.panel, sizer=hbox, weight=3,
- range=(self.freq_min, self.freq_max, 0.0005e6),
- callback=self.set_freq)
- hbox.Add((5,0), 0)
- vbox.Add(hbox, 0, wx.EXPAND)
-
- hbox = wx.BoxSizer(wx.HORIZONTAL)
- hbox.Add((5,0), 0)
-
- myform['volume'] = \
- form.quantized_slider_field(parent=self.panel, sizer=hbox, label="Volume",
- weight=3, range=self.volume_range(),
- callback=self.set_vol)
- hbox.Add((5,0), 1)
-
- g = self.u.get_gain_range()
- myform['gain'] = \
- form.quantized_slider_field(parent=self.panel, sizer=hbox, label="Gain",
- weight=3, range=(g.start(), g.start(), g.step()),
- callback=self.set_gain)
- hbox.Add((5,0), 0)
- vbox.Add(hbox, 0, wx.EXPAND)
-
- try:
- self.knob = powermate.powermate(self.frame)
- self.rot = 0
- powermate.EVT_POWERMATE_ROTATE (self.frame, self.on_rotate)
- powermate.EVT_POWERMATE_BUTTON (self.frame, self.on_button)
- except:
- print "FYI: No Powermate or Contour Knob found"
-
-
- def on_rotate (self, event):
- self.rot += event.delta
- if (self.state == "FREQ"):
- if self.rot >= 3:
- self.set_freq(self.freq + .1e6)
- self.rot -= 3
- elif self.rot <=-3:
- self.set_freq(self.freq - .1e6)
- self.rot += 3
- else:
- step = self.volume_range()[2]
- if self.rot >= 3:
- self.set_vol(self.vol + step)
- self.rot -= 3
- elif self.rot <=-3:
- self.set_vol(self.vol - step)
- self.rot += 3
-
- def on_button (self, event):
- if event.value == 0: # button up
- return
- self.rot = 0
- if self.state == "FREQ":
- self.state = "VOL"
- else:
- self.state = "FREQ"
- self.update_status_bar ()
-
-
- def set_vol (self, vol):
- g = self.volume_range()
- self.vol = max(g[0], min(g[1], vol))
- self.volume_control.set_k(10**(self.vol/10))
- self.myform['volume'].set_value(self.vol)
- self.update_status_bar ()
-
- def set_freq(self, target_freq):
- """
- Set the center frequency we're interested in.
-
- Args:
- target_freq: frequency in Hz
- @rypte: bool
- """
-
- r = self.u.set_center_freq(target_freq)
-
- if r:
- self.freq = target_freq
- self.myform['freq'].set_value(target_freq) # update displayed value
- self.myform['freq_slider'].set_value(target_freq) # update displayed value
- self.update_status_bar()
- self._set_status_msg("OK", 0)
- return True
-
- self._set_status_msg("Failed", 0)
- return False
-
- def set_gain(self, gain):
- self.myform['gain'].set_value(gain) # update displayed value
- self.u.set_gain(gain)
-
- def update_status_bar (self):
- msg = "Volume:%r Setting:%s" % (self.vol, self.state)
- self._set_status_msg(msg, 1)
- self.src_fft.set_baseband_freq(self.freq)
-
- def volume_range(self):
- return (-20.0, 0.0, 0.5)
-
-
-if __name__ == '__main__':
- app = stdgui2.stdapp (wxapt_rx_block, "USRP WXAPT RX")
- app.MainLoop ()
diff --git a/gr-utils/python/modtool/gr-newmod/docs/doxygen/doxyxml/doxyindex.py b/gr-utils/python/modtool/gr-newmod/docs/doxygen/doxyxml/doxyindex.py
index 0132ab86fd..78e8153768 100644
--- a/gr-utils/python/modtool/gr-newmod/docs/doxygen/doxyxml/doxyindex.py
+++ b/gr-utils/python/modtool/gr-newmod/docs/doxygen/doxyxml/doxyindex.py
@@ -43,13 +43,16 @@ class DoxyIndex(Base):
self._root = index.parse(os.path.join(self._xml_path, 'index.xml'))
for mem in self._root.compound:
converted = self.convert_mem(mem)
- # For files we want the contents to be accessible directly
- # from the parent rather than having to go through the file
- # object.
+ # For files and namespaces we want the contents to be
+ # accessible directly from the parent rather than having
+ # to go through the file object.
if self.get_cls(mem) == DoxyFile:
if mem.name.endswith('.h'):
self._members += converted.members()
self._members.append(converted)
+ elif self.get_cls(mem) == DoxyNamespace:
+ self._members += converted.members()
+ self._members.append(converted)
else:
self._members.append(converted)
@@ -80,13 +83,29 @@ class DoxyCompMem(Base):
self._data['brief_description'] = bd
self._data['detailed_description'] = dd
+ def set_parameters(self, data):
+ vs = [ddc.value for ddc in data.detaileddescription.content_]
+ pls = []
+ for v in vs:
+ if hasattr(v, 'parameterlist'):
+ pls += v.parameterlist
+ pis = []
+ for pl in pls:
+ pis += pl.parameteritem
+ dpis = []
+ for pi in pis:
+ dpi = DoxyParameterItem(pi)
+ dpi._parse()
+ dpis.append(dpi)
+ self._data['params'] = dpis
+
+
class DoxyCompound(DoxyCompMem):
pass
class DoxyMember(DoxyCompMem):
pass
-
class DoxyFunction(DoxyMember):
__module__ = "gnuradio.utils.doxyxml"
@@ -98,10 +117,13 @@ class DoxyFunction(DoxyMember):
return
super(DoxyFunction, self)._parse()
self.set_descriptions(self._parse_data)
- self._data['params'] = []
- prms = self._parse_data.param
- for prm in prms:
- self._data['params'].append(DoxyParam(prm))
+ self.set_parameters(self._parse_data)
+ if not self._data['params']:
+ # If the params weren't set by a comment then just grab the names.
+ self._data['params'] = []
+ prms = self._parse_data.param
+ for prm in prms:
+ self._data['params'].append(DoxyParam(prm))
brief_description = property(lambda self: self.data()['brief_description'])
detailed_description = property(lambda self: self.data()['detailed_description'])
@@ -121,9 +143,39 @@ class DoxyParam(DoxyMember):
self.set_descriptions(self._parse_data)
self._data['declname'] = self._parse_data.declname
+ @property
+ def description(self):
+ descriptions = []
+ if self.brief_description:
+ descriptions.append(self.brief_description)
+ if self.detailed_description:
+ descriptions.append(self.detailed_description)
+ return '\n\n'.join(descriptions)
+
brief_description = property(lambda self: self.data()['brief_description'])
detailed_description = property(lambda self: self.data()['detailed_description'])
- declname = property(lambda self: self.data()['declname'])
+ name = property(lambda self: self.data()['declname'])
+
+class DoxyParameterItem(DoxyMember):
+ """A different representation of a parameter in Doxygen."""
+
+ def _parse(self):
+ if self._parsed:
+ return
+ super(DoxyParameterItem, self)._parse()
+ names = []
+ for nl in self._parse_data.parameternamelist:
+ for pn in nl.parametername:
+ names.append(description(pn))
+ # Just take first name
+ self._data['name'] = names[0]
+ # Get description
+ pd = description(self._parse_data.get_parameterdescription())
+ self._data['description'] = pd
+
+ description = property(lambda self: self.data()['description'])
+ name = property(lambda self: self.data()['name'])
+
class DoxyClass(DoxyCompound):
@@ -139,12 +191,14 @@ class DoxyClass(DoxyCompound):
if self._error:
return
self.set_descriptions(self._retrieved_data.compounddef)
+ self.set_parameters(self._retrieved_data.compounddef)
# Sectiondef.kind tells about whether private or public.
# We just ignore this for now.
self.process_memberdefs()
brief_description = property(lambda self: self.data()['brief_description'])
detailed_description = property(lambda self: self.data()['detailed_description'])
+ params = property(lambda self: self.data()['params'])
Base.mem_classes.append(DoxyClass)
@@ -177,6 +231,16 @@ class DoxyNamespace(DoxyCompound):
kind = 'namespace'
+ def _parse(self):
+ if self._parsed:
+ return
+ super(DoxyNamespace, self)._parse()
+ self.retrieve_data()
+ self.set_descriptions(self._retrieved_data.compounddef)
+ if self._error:
+ return
+ self.process_memberdefs()
+
Base.mem_classes.append(DoxyNamespace)
@@ -227,11 +291,11 @@ class DoxyOther(Base):
__module__ = "gnuradio.utils.doxyxml"
- kinds = set(['variable', 'struct', 'union', 'define', 'typedef', 'enum', 'dir', 'page'])
+ kinds = set(['variable', 'struct', 'union', 'define', 'typedef', 'enum',
+ 'dir', 'page', 'signal', 'slot', 'property'])
@classmethod
def can_parse(cls, obj):
return obj.kind in cls.kinds
Base.mem_classes.append(DoxyOther)
-
diff --git a/gr-utils/python/modtool/gr-newmod/docs/doxygen/swig_doc.py b/gr-utils/python/modtool/gr-newmod/docs/doxygen/swig_doc.py
index 4e1ce2e475..d3536db8d0 100644
--- a/gr-utils/python/modtool/gr-newmod/docs/doxygen/swig_doc.py
+++ b/gr-utils/python/modtool/gr-newmod/docs/doxygen/swig_doc.py
@@ -1,5 +1,5 @@
#
-# Copyright 2010,2011 Free Software Foundation, Inc.
+# Copyright 2010-2012 Free Software Foundation, Inc.
#
# This file is part of GNU Radio
#
@@ -27,13 +27,10 @@ python docstrings.
"""
-import sys
-
-try:
- from doxyxml import DoxyIndex, DoxyClass, DoxyFriend, DoxyFunction, DoxyFile, base
-except ImportError:
- from gnuradio.doxyxml import DoxyIndex, DoxyClass, DoxyFriend, DoxyFunction, DoxyFile, base
+import sys, time
+from doxyxml import DoxyIndex, DoxyClass, DoxyFriend, DoxyFunction, DoxyFile
+from doxyxml import DoxyOther, base
def py_name(name):
bits = name.split('_')
@@ -56,7 +53,28 @@ class Block(object):
# Check for a parsing error.
if item.error():
return False
- return item.has_member(make_name(item.name()), DoxyFriend)
+ friendname = make_name(item.name())
+ is_a_block = item.has_member(friendname, DoxyFriend)
+ # But now sometimes the make function isn't a friend so check again.
+ if not is_a_block:
+ is_a_block = di.has_member(friendname, DoxyFunction)
+ return is_a_block
+
+class Block2(object):
+ """
+ Checks if doxyxml produced objects correspond to a new style
+ gnuradio block.
+ """
+
+ @classmethod
+ def includes(cls, item):
+ if not isinstance(item, DoxyClass):
+ return False
+ # Check for a parsing error.
+ if item.error():
+ return False
+ is_a_block2 = item.has_member('make', DoxyFunction) and item.has_member('sptr', DoxyOther)
+ return is_a_block2
def utoascii(text):
@@ -83,9 +101,15 @@ def combine_descriptions(obj):
description.append(dd)
return utoascii('\n\n'.join(description)).strip()
+def format_params(parameteritems):
+ output = ['Args:']
+ template = ' {0} : {1}'
+ for pi in parameteritems:
+ output.append(template.format(pi.name, pi.description))
+ return '\n'.join(output)
entry_templ = '%feature("docstring") {name} "{docstring}"'
-def make_entry(obj, name=None, templ="{description}", description=None):
+def make_entry(obj, name=None, templ="{description}", description=None, params=[]):
"""
Create a docstring entry for a swig interface file.
@@ -102,13 +126,16 @@ def make_entry(obj, name=None, templ="{description}", description=None):
return ''
if description is None:
description = combine_descriptions(obj)
+ if params:
+ description += '\n\n'
+ description += utoascii(format_params(params))
docstring = templ.format(description=description)
if not docstring:
return ''
return entry_templ.format(
name=name,
docstring=docstring,
- )
+ )
def make_func_entry(func, name=None, description=None, params=None):
@@ -121,27 +148,31 @@ def make_func_entry(func, name=None, description=None, params=None):
used as the description instead of extracting it from func.
params - a parameter list that overrides using func.params.
"""
- if params is None:
- params = func.params
- params = [prm.declname for prm in params]
- if params:
- sig = "Params: (%s)" % ", ".join(params)
- else:
- sig = "Params: (NONE)"
- templ = "{description}\n\n" + sig
- return make_entry(func, name=name, templ=utoascii(templ),
- description=description)
-
-
-def make_class_entry(klass, description=None):
+ #if params is None:
+ # params = func.params
+ #params = [prm.declname for prm in params]
+ #if params:
+ # sig = "Params: (%s)" % ", ".join(params)
+ #else:
+ # sig = "Params: (NONE)"
+ #templ = "{description}\n\n" + sig
+ #return make_entry(func, name=name, templ=utoascii(templ),
+ # description=description)
+ return make_entry(func, name=name, description=description, params=params)
+
+
+def make_class_entry(klass, description=None, ignored_methods=[], params=None):
"""
Create a class docstring for a swig interface file.
"""
+ if params is None:
+ params = klass.params
output = []
- output.append(make_entry(klass, description=description))
+ output.append(make_entry(klass, description=description, params=params))
for func in klass.in_category(DoxyFunction):
- name = klass.name() + '::' + func.name()
- output.append(make_func_entry(func, name=name))
+ if func.name() not in ignored_methods:
+ name = klass.name() + '::' + func.name()
+ output.append(make_func_entry(func, name=name))
return "\n\n".join(output)
@@ -175,11 +206,33 @@ def make_block_entry(di, block):
# the make function.
output = []
output.append(make_class_entry(block, description=super_description))
- creator = block.get_member(block.name(), DoxyFunction)
output.append(make_func_entry(make_func, description=super_description,
- params=creator.params))
+ params=block.params))
return "\n\n".join(output)
+def make_block2_entry(di, block):
+ """
+ Create class and function docstrings of a new style gnuradio block for a
+ swig interface file.
+ """
+ descriptions = []
+ # For new style blocks all the relevant documentation should be
+ # associated with the 'make' method.
+ class_description = combine_descriptions(block)
+ make_func = block.get_member('make', DoxyFunction)
+ make_description = combine_descriptions(make_func)
+ description = class_description + "\n\nConstructor Specific Documentation:\n\n" + make_description
+ # Associate the combined description with the class and
+ # the make function.
+ output = []
+ output.append(make_class_entry(
+ block, description=description,
+ ignored_methods=['make'], params=make_func.params))
+ makename = block.name() + '::make'
+ output.append(make_func_entry(
+ make_func, name=makename, description=description,
+ params=make_func.params))
+ return "\n\n".join(output)
def make_swig_interface_file(di, swigdocfilename, custom_output=None):
@@ -196,32 +249,52 @@ def make_swig_interface_file(di, swigdocfilename, custom_output=None):
# Create docstrings for the blocks.
blocks = di.in_category(Block)
+ blocks2 = di.in_category(Block2)
+
make_funcs = set([])
for block in blocks:
try:
make_func = di.get_member(make_name(block.name()), DoxyFunction)
- make_funcs.add(make_func.name())
- output.append(make_block_entry(di, block))
+ # Don't want to risk writing to output twice.
+ if make_func.name() not in make_funcs:
+ make_funcs.add(make_func.name())
+ output.append(make_block_entry(di, block))
+ except block.ParsingError:
+ sys.stderr.write('Parsing error for block {0}\n'.format(block.name()))
+ raise
+
+ for block in blocks2:
+ try:
+ make_func = block.get_member('make', DoxyFunction)
+ make_func_name = block.name() +'::make'
+ # Don't want to risk writing to output twice.
+ if make_func_name not in make_funcs:
+ make_funcs.add(make_func_name)
+ output.append(make_block2_entry(di, block))
except block.ParsingError:
- print('Parsing error for block %s' % block.name())
+ sys.stderr.write('Parsing error for block {0}\n'.format(block.name()))
+ raise
# Create docstrings for functions
# Don't include the make functions since they have already been dealt with.
- funcs = [f for f in di.in_category(DoxyFunction) if f.name() not in make_funcs]
+ funcs = [f for f in di.in_category(DoxyFunction)
+ if f.name() not in make_funcs and not f.name().startswith('std::')]
for f in funcs:
try:
output.append(make_func_entry(f))
except f.ParsingError:
- print('Parsing error for function %s' % f.name())
+ sys.stderr.write('Parsing error for function {0}\n'.format(f.name()))
# Create docstrings for classes
block_names = [block.name() for block in blocks]
- klasses = [k for k in di.in_category(DoxyClass) if k.name() not in block_names]
+ block_names += [block.name() for block in blocks2]
+ klasses = [k for k in di.in_category(DoxyClass)
+ if k.name() not in block_names and not k.name().startswith('std::')]
for k in klasses:
try:
output.append(make_class_entry(k))
except k.ParsingError:
- print('Parsing error for class %s' % k.name())
+ sys.stderr.write('Parsing error for class {0}\n'.format(k.name()))
# Docstrings are not created for anything that is not a function or a class.
# If this excludes anything important please add it here.
diff --git a/gr-wxgui/CMakeLists.txt b/gr-wxgui/CMakeLists.txt
deleted file mode 100644
index d77e36ad4a..0000000000
--- a/gr-wxgui/CMakeLists.txt
+++ /dev/null
@@ -1,91 +0,0 @@
-# Copyright 2011,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.
-
-########################################################################
-# Setup dependencies
-########################################################################
-include(GrBoost)
-include(GrPython)
-
-GR_PYTHON_CHECK_MODULE("wx >= 2.8" wx "wx.version().split()[0] >= '2.8'" WX_FOUND)
-GR_PYTHON_CHECK_MODULE("numpy" numpy True NUMPY_FOUND)
-
-########################################################################
-# Register component
-########################################################################
-include(GrComponent)
-if(NOT CMAKE_CROSSCOMPILING)
- set(wxgui_python_deps
- NUMPY_FOUND
- WX_FOUND
- )
-endif(NOT CMAKE_CROSSCOMPILING)
-
-GR_REGISTER_COMPONENT("gr-wxgui" ENABLE_GR_WXGUI
- ENABLE_GNURADIO_RUNTIME
- ENABLE_GR_FFT
- ENABLE_GR_FILTER
- ENABLE_GR_ANALOG
- ENABLE_PYTHON
- ${wxgui_python_deps}
-)
-
-########################################################################
-# Begin conditional configuration
-########################################################################
-if(ENABLE_GR_WXGUI)
-
-GR_SET_GLOBAL(GR_WXGUI_INCLUDE_DIRS
- ${CMAKE_CURRENT_SOURCE_DIR}/lib
- ${CMAKE_CURRENT_SOURCE_DIR}/include
- ${CMAKE_CURRENT_BINARY_DIR}/lib
- ${CMAKE_CURRENT_BINARY_DIR}/include
-)
-
-########################################################################
-# Create Pkg Config File
-########################################################################
-configure_file(
- ${CMAKE_CURRENT_SOURCE_DIR}/gr-wxgui.pc.in
- ${CMAKE_CURRENT_BINARY_DIR}/gr-wxgui.pc
-@ONLY)
-
-install(
- FILES ${CMAKE_CURRENT_BINARY_DIR}/gr-wxgui.pc
- DESTINATION ${GR_LIBRARY_DIR}/pkgconfig
-)
-
-########################################################################
-# Install the conf file
-########################################################################
-install(
- FILES ${CMAKE_CURRENT_SOURCE_DIR}/gr-wxgui.conf
- DESTINATION ${GR_PREFSDIR}
-)
-
-########################################################################
-# Add subdirectories
-########################################################################
-add_subdirectory(include/gnuradio/wxgui)
-add_subdirectory(lib)
-add_subdirectory(grc)
-add_subdirectory(python/wxgui)
-add_subdirectory(swig)
-
-endif(ENABLE_GR_WXGUI)
diff --git a/gr-wxgui/README b/gr-wxgui/README
deleted file mode 100644
index ebd0d23977..0000000000
--- a/gr-wxgui/README
+++ /dev/null
@@ -1 +0,0 @@
-This requires wxPython 2.5.2.7 or later. See http://www.wxpython.org
diff --git a/gr-wxgui/README.gl b/gr-wxgui/README.gl
deleted file mode 100644
index 1d3eec60be..0000000000
--- a/gr-wxgui/README.gl
+++ /dev/null
@@ -1,29 +0,0 @@
-To use the OpenGL versions of the graphical display sinks, you must ensure
-that you have Python wrappers for OpenGL installed and are using a version
-of wxPython that supports it. Then you must enable this mode by creating or
-editing an entry in the GNU Radio preferences file at:
-
-~/.gnuradio/config.conf
-
-[wxgui]
-style=gl
-fft_rate=30
-waterfall_rate=30
-scope_rate=30
-number_rate=5
-const_rate=5
-const_size=2048
-
->>>The style parameter accepts 'nongl', 'gl', and 'auto', and defaults to 'auto'.
-
-'nongl' forces the use of the non-GL (current) sinks.
-
-'gl' forces the use of the new GL based sinks, and will raise an exception if the
-appropriate GL support does not exist.
-
-'auto' currently equates to 'nongl'; however, in release 3.2, this will change to
-use GL if possible and if not, fallback to the non-GL versions.
-
->>>The *_rate parameter sets the frame rate for various gl sinks.
-
->>>The const_size parameter sets the number of constellation points per frame.
diff --git a/gr-wxgui/gr-wxgui.conf b/gr-wxgui/gr-wxgui.conf
deleted file mode 100644
index da458238fd..0000000000
--- a/gr-wxgui/gr-wxgui.conf
+++ /dev/null
@@ -1,13 +0,0 @@
-# This file contains system wide configuration data for GNU Radio.
-# You may override any setting on a per-user basis by editing
-# ~/.gnuradio/config.conf
-
-[wxgui]
-# 'gl', 'nongl', or 'auto'
-style = auto
-
-# fftsink and waterfallsink
-fft_rate = 15
-
-# scopesink
-frame_decim = 1
diff --git a/gr-wxgui/gr-wxgui.pc.in b/gr-wxgui/gr-wxgui.pc.in
deleted file mode 100644
index ec4d66c9fc..0000000000
--- a/gr-wxgui/gr-wxgui.pc.in
+++ /dev/null
@@ -1,11 +0,0 @@
-prefix=@prefix@
-exec_prefix=@exec_prefix@
-libdir=@libdir@
-includedir=@includedir@
-
-Name: gr-wxgui
-Description: A simple wx gui for GNU Radio applications
-Requires: gnuradio-runtime
-Version: @LIBVER@
-Libs:
-Cflags:
diff --git a/gr-wxgui/grc/CMakeLists.txt b/gr-wxgui/grc/CMakeLists.txt
deleted file mode 100644
index 52c9bbda43..0000000000
--- a/gr-wxgui/grc/CMakeLists.txt
+++ /dev/null
@@ -1,35 +0,0 @@
-# Copyright 2011 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-
-########################################################################
-file(GLOB xml_files "*.xml")
-install(FILES ${xml_files} DESTINATION ${GRC_BLOCKS_DIR})
-
-########################################################################
-#The wxgui module contains a top_block + wxgui frame.
-########################################################################
-include(GrPython)
-
-GR_PYTHON_INSTALL(
- FILES
- __init__.py
- panel.py
- top_block_gui.py
- DESTINATION ${GR_PYTHON_DIR}/grc_gnuradio/wxgui
-)
diff --git a/gr-wxgui/grc/__init__.py b/gr-wxgui/grc/__init__.py
deleted file mode 100644
index 81427253b6..0000000000
--- a/gr-wxgui/grc/__init__.py
+++ /dev/null
@@ -1,22 +0,0 @@
-# Copyright 2008, 2009 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-#
-
-from top_block_gui import top_block_gui
-from panel import Panel
diff --git a/gr-wxgui/grc/notebook.xml b/gr-wxgui/grc/notebook.xml
deleted file mode 100644
index 1e4b0d0679..0000000000
--- a/gr-wxgui/grc/notebook.xml
+++ /dev/null
@@ -1,70 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##WX GUI Notebook
-###################################################
- -->
-<block>
- <name>WX GUI Notebook</name>
- <key>notebook</key>
- <category>[Core]/GUI Widgets/WX</category>
- <import>from grc_gnuradio import wxgui as grc_wxgui</import>
- <make>#set $parent = $notebook() and 'self.%s.GetPage(%s)'%$notebook() or 'self'
-self.$(id) = wx.Notebook($(parent).GetWin(), style=$style)
-#for $label in $labels()
-self.$(id).AddPage(grc_wxgui.Panel(self.$(id)), "$label")
-#end for
-#if not $grid_pos()
-$(parent).Add(self.$(id))
-#else
-$(parent).GridAdd(self.$(id), $(', '.join(map(str, $grid_pos()))))
-#end if</make>
- <param>
- <name>Tab Orientation</name>
- <key>style</key>
- <value>wx.NB_TOP</value>
- <type>enum</type>
- <option>
- <name>Top</name>
- <key>wx.NB_TOP</key>
- </option>
- <option>
- <name>Right</name>
- <key>wx.NB_RIGHT</key>
- </option>
- <option>
- <name>Bottom</name>
- <key>wx.NB_BOTTOM</key>
- </option>
- <option>
- <name>Left</name>
- <key>wx.NB_LEFT</key>
- </option>
- </param>
- <param>
- <name>Labels</name>
- <key>labels</key>
- <value>['tab1', 'tab2', 'tab3']</value>
- <type>raw</type>
- </param>
- <param>
- <name>Grid Position</name>
- <key>grid_pos</key>
- <value></value>
- <type>grid_pos</type>
- </param>
- <param>
- <name>Notebook</name>
- <key>notebook</key>
- <value></value>
- <type>notebook</type>
- </param>
- <check>isinstance($labels, (list, tuple))</check>
- <check>all(map(lambda x: isinstance(x, str), $labels))</check>
- <check>len($labels) &gt; 0</check>
- <doc>
-Use the Grid Position (row, column, row span, column span) to position the graphical element in the window.
-
-Use the Notebook Param (notebook-id, page-index) to place the graphical element inside of a notebook page.
- </doc>
-</block>
diff --git a/gr-wxgui/grc/panel.py b/gr-wxgui/grc/panel.py
deleted file mode 100644
index 8ca426e098..0000000000
--- a/gr-wxgui/grc/panel.py
+++ /dev/null
@@ -1,53 +0,0 @@
-# Copyright 2009 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-#
-
-import wx
-
-class Panel(wx.Panel):
- def __init__(self, parent, orient=wx.VERTICAL):
- wx.Panel.__init__(self, parent)
- self._box = wx.BoxSizer(orient)
- self._grid = wx.GridBagSizer(5, 5)
- self.Add(self._grid)
- self.SetSizer(self._box)
-
- def GetWin(self): return self
-
- def Add(self, win):
- """
- Add a window to the wx vbox.
-
- Args:
- win: the wx window
- """
- self._box.Add(win, 0, wx.EXPAND)
-
- def GridAdd(self, win, row, col, row_span=1, col_span=1):
- """
- Add a window to the wx grid at the given position.
-
- Args:
- win: the wx window
- row: the row specification (integer >= 0)
- col: the column specification (integer >= 0)
- row_span: the row span specification (integer >= 1)
- col_span: the column span specification (integer >= 1)
- """
- self._grid.Add(win, wx.GBPosition(row, col), wx.GBSpan(row_span, col_span), wx.EXPAND)
diff --git a/gr-wxgui/grc/top_block_gui.py b/gr-wxgui/grc/top_block_gui.py
deleted file mode 100644
index 24b462d7ad..0000000000
--- a/gr-wxgui/grc/top_block_gui.py
+++ /dev/null
@@ -1,87 +0,0 @@
-# Copyright 2008, 2009 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-#
-
-import wx
-from gnuradio import gr
-import panel
-
-default_gui_size = (200, 100)
-
-class top_block_gui(gr.top_block):
- """gr top block with wx gui app and grid sizer."""
-
- def __init__(self, title='', size=default_gui_size):
- """
- Initialize the gr top block.
- Create the wx gui elements.
-
- Args:
- title: the main window title
- size: the main window size tuple in pixels
- icon: the file path to an icon or None
- """
- #initialize
- gr.top_block.__init__(self)
- self._size = size
- #create gui elements
- self._app = wx.App()
- self._frame = wx.Frame(None, title=title)
- self._panel = panel.Panel(self._frame)
- self.Add = self._panel.Add
- self.GridAdd = self._panel.GridAdd
- self.GetWin = self._panel.GetWin
- self.Start(False)
-
- def SetIcon(self, *args, **kwargs): self._frame.SetIcon(*args, **kwargs)
-
- def Start(self, start=True, max_nouts=0):
- #set minimal window size
- self._frame.SetSizeHints(*self._size)
- #create callback for quit
- def _quit(event):
- self.stop(); self.wait()
- self._frame.Destroy()
- #setup app
- self._frame.Bind(wx.EVT_CLOSE, _quit)
- self._sizer = wx.BoxSizer(wx.VERTICAL)
- self._sizer.Add(self._panel, 0, wx.EXPAND)
- self._frame.SetSizerAndFit(self._sizer)
- self._frame.SetAutoLayout(True)
- self._frame.Show(True)
- self._app.SetTopWindow(self._frame)
- #start flow graph
- if start:
- if max_nouts != 0:
- self.start(max_nouts)
- else:
- self.start()
-
- def Run(self, start=True, max_nouts=0):
- """
- Setup the wx gui elements.
- Start the gr top block.
- Block with the wx main loop.
- """
- #blocking main loop
- self.Start(start, max_nouts)
- self._app.MainLoop()
-
- def Wait(self):
- self._app.MainLoop()
diff --git a/gr-wxgui/grc/variable_check_box.xml b/gr-wxgui/grc/variable_check_box.xml
deleted file mode 100644
index da8bb8b8d5..0000000000
--- a/gr-wxgui/grc/variable_check_box.xml
+++ /dev/null
@@ -1,85 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Variable Check Box:
-## a gui check box form
-###################################################
- -->
-<block>
- <name>WX GUI Check Box</name>
- <key>variable_check_box</key>
- <category>[Core]/GUI Widgets/WX</category>
- <import>from gnuradio.wxgui import forms</import>
- <var_make>self.$(id) = $(id) = $value</var_make>
- <make>#set $parent = $notebook() and 'self.%s.GetPage(%s)'%$notebook() or 'self'
-#set $win = 'self._%s_check_box'%$id
-$win = forms.check_box(
- parent=$(parent).GetWin(),
- value=self.$id,
- callback=self.set_$(id),
- #if $label()
- label=$label,
- #else
- label='$id',
- #end if
- true=$true,
- false=$false,
-)
-#if not $grid_pos()
-$(parent).Add($win)
-#else
-$(parent).GridAdd($win, $(', '.join(map(str, $grid_pos()))))
-#end if</make>
- <callback>self.set_$(id)($value)</callback>
- <callback>self._$(id)_check_box.set_value($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>Default Value</name>
- <key>value</key>
- <value>True</value>
- <type>raw</type>
- </param>
- <param>
- <name>True</name>
- <key>true</key>
- <value>True</value>
- <type>raw</type>
- </param>
- <param>
- <name>False</name>
- <key>false</key>
- <value>False</value>
- <type>raw</type>
- </param>
- <param>
- <name>Grid Position</name>
- <key>grid_pos</key>
- <value></value>
- <type>grid_pos</type>
- </param>
- <param>
- <name>Notebook</name>
- <key>notebook</key>
- <value></value>
- <type>notebook</type>
- </param>
- <check>$value in ($true, $false)</check>
- <doc>
-This block creates a variable with a check box form. \
-Leave the label blank to use the variable id as the label.
-
-A check box form can switch between two states; \
-the default being True and False. \
-Override True and False to use alternative states.
-
-Use the Grid Position (row, column, row span, column span) to position the graphical element in the window.
-
-Use the Notebook Param (notebook-id, page-index) to place the graphical element inside of a notebook page.
- </doc>
-</block>
diff --git a/gr-wxgui/grc/variable_chooser.xml b/gr-wxgui/grc/variable_chooser.xml
deleted file mode 100644
index 216be01e08..0000000000
--- a/gr-wxgui/grc/variable_chooser.xml
+++ /dev/null
@@ -1,123 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Variable Chooser:
-## a gui form with enumerated choices
-## radio buttons, drop down, or button
-###################################################
- -->
-<block>
- <name>WX GUI Chooser</name>
- <key>variable_chooser</key>
- <category>[Core]/GUI Widgets/WX</category>
- <import>from gnuradio.wxgui import forms</import>
- <var_make>self.$(id) = $(id) = $value</var_make>
- <make>#set $parent = $notebook() and 'self.%s.GetPage(%s)'%$notebook() or 'self'
-#set $win = 'self._%s_chooser'%$id
-$win = forms.$(type)(
- parent=$(parent).GetWin(),
- value=self.$id,
- callback=self.set_$(id),
- #if $label()
- label=$label,
- #else
- label='$id',
- #end if
- choices=$choices,
- labels=$labels,
-#if $type() == 'radio_buttons'
- style=$style,
-#end if
-)
-#if not $grid_pos()
-$(parent).Add($win)
-#else
-$(parent).GridAdd($win, $(', '.join(map(str, $grid_pos()))))
-#end if</make>
- <callback>self.set_$(id)($value)</callback>
- <callback>self._$(id)_chooser.set_value($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>Default Value</name>
- <key>value</key>
- <value>1</value>
- <type>raw</type>
- </param>
- <param>
- <name>Choices</name>
- <key>choices</key>
- <value>[1, 2, 3]</value>
- <type>raw</type>
- </param>
- <param>
- <name>Labels</name>
- <key>labels</key>
- <value>[]</value>
- <type>raw</type>
- </param>
- <param>
- <name>Type</name>
- <key>type</key>
- <value>drop_down</value>
- <type>enum</type>
- <option>
- <name>Drop Down</name>
- <key>drop_down</key>
- </option>
- <option>
- <name>Radio Buttons</name>
- <key>radio_buttons</key>
- </option>
- <option>
- <name>Button</name>
- <key>button</key>
- </option>
- </param>
- <param>
- <name>Style</name>
- <key>style</key>
- <value>wx.RA_HORIZONTAL</value>
- <type>enum</type>
- <hide>#if $type() == 'radio_buttons' then 'part' else 'all'#</hide>
- <option>
- <name>Horizontal</name>
- <key>wx.RA_HORIZONTAL</key>
- </option>
- <option>
- <name>Vertical</name>
- <key>wx.RA_VERTICAL</key>
- </option>
- </param>
- <param>
- <name>Grid Position</name>
- <key>grid_pos</key>
- <value></value>
- <type>grid_pos</type>
- </param>
- <param>
- <name>Notebook</name>
- <key>notebook</key>
- <value></value>
- <type>notebook</type>
- </param>
- <check>$value in $choices</check>
- <check>not $labels or len($labels) == len($choices)</check>
- <doc>
-This block creates a variable with a drop down, radio buttons, or a button. \
-Leave the label blank to use the variable id as the label. \
-The value index is the index of a particular choice, \
-which defines the default choice when the flow graph starts. \
-The choices must be a list of possible values. \
-Leave labels empty to use the choices as the labels.
-
-Use the Grid Position (row, column, row span, column span) to position the graphical element in the window.
-
-Use the Notebook Param (notebook-id, page-index) to place the graphical element inside of a notebook page.
- </doc>
-</block>
diff --git a/gr-wxgui/grc/variable_slider.xml b/gr-wxgui/grc/variable_slider.xml
deleted file mode 100644
index 29f3182d0a..0000000000
--- a/gr-wxgui/grc/variable_slider.xml
+++ /dev/null
@@ -1,139 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Variable Slider:
-## a combined slider and text box form
-###################################################
- -->
-<block>
- <name>WX GUI Slider</name>
- <key>variable_slider</key>
- <category>[Core]/GUI Widgets/WX</category>
- <import>from gnuradio.wxgui import forms</import>
- <var_make>self.$(id) = $(id) = $value</var_make>
- <make>#set $parent = $notebook() and 'self.%s.GetPage(%s)'%$notebook() or 'self'
-#set $win = '_%s_sizer'%$id
-$win = wx.BoxSizer(wx.VERTICAL)
-self._$(id)_text_box = forms.text_box(
- parent=$(parent).GetWin(),
- sizer=$win,
- value=self.$id,
- callback=self.set_$(id),
- #if $label()
- label=$label,
- #else
- label='$id',
- #end if
- converter=forms.$(converver)(),
- proportion=0,
-)
-self._$(id)_slider = forms.slider(
- parent=$(parent).GetWin(),
- sizer=$win,
- value=self.$id,
- callback=self.set_$(id),
- minimum=$min,
- maximum=$max,
- num_steps=$num_steps,
- style=$style,
- cast=$(converver.slider_cast),
- proportion=1,
-)
-#if not $grid_pos()
-$(parent).Add($win)
-#else
-$(parent).GridAdd($win, $(', '.join(map(str, $grid_pos()))))
-#end if</make>
- <callback>self.set_$(id)($value)</callback>
- <callback>self._$(id)_slider.set_value($id)</callback>
- <callback>self._$(id)_text_box.set_value($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>Default Value</name>
- <key>value</key>
- <value>50</value>
- <type>real</type>
- </param>
- <param>
- <name>Minimum</name>
- <key>min</key>
- <value>0</value>
- <type>real</type>
- </param>
- <param>
- <name>Maximum</name>
- <key>max</key>
- <value>100</value>
- <type>real</type>
- </param>
- <param>
- <name>Num Steps</name>
- <key>num_steps</key>
- <value>100</value>
- <type>int</type>
- <hide>part</hide>
- </param>
- <param>
- <name>Style</name>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
- <type>enum</type>
- <hide>part</hide>
- <option>
- <name>Horizontal</name>
- <key>wx.SL_HORIZONTAL</key>
- </option>
- <option>
- <name>Vertical</name>
- <key>wx.SL_VERTICAL</key>
- </option>
- </param>
- <param>
- <name>Converter</name>
- <key>converver</key>
- <value>float_converter</value>
- <type>enum</type>
- <option>
- <name>Float</name>
- <key>float_converter</key>
- <opt>slider_cast:float</opt>
- </option>
- <option>
- <name>Integer</name>
- <key>int_converter</key>
- <opt>slider_cast:int</opt>
- </option>
- </param>
- <param>
- <name>Grid Position</name>
- <key>grid_pos</key>
- <value></value>
- <type>grid_pos</type>
- </param>
- <param>
- <name>Notebook</name>
- <key>notebook</key>
- <value></value>
- <type>notebook</type>
- </param>
- <check>$min &lt;= $value &lt;= $max</check>
- <check>$min &lt; $max</check>
- <check>0 &lt; $num_steps &lt;= 1000</check>
- <doc>
-This block creates a variable with a slider. \
-Leave the label blank to use the variable id as the label. \
-The value must be a real number. \
-The value must be between the minimum and the maximum. \
-The number of steps must be between 0 and 1000.
-
-Use the Grid Position (row, column, row span, column span) to position the graphical element in the window.
-
-Use the Notebook Param (notebook-id, page-index) to place the graphical element inside of a notebook page.
- </doc>
-</block>
diff --git a/gr-wxgui/grc/variable_static_text.xml b/gr-wxgui/grc/variable_static_text.xml
deleted file mode 100644
index e47f5c3731..0000000000
--- a/gr-wxgui/grc/variable_static_text.xml
+++ /dev/null
@@ -1,98 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Variable Static Text:
-## a gui static text form
-###################################################
- -->
-<block>
- <name>WX GUI Static Text</name>
- <key>variable_static_text</key>
- <category>[Core]/GUI Widgets/WX</category>
- <import>from gnuradio.wxgui import forms</import>
- <var_make>self.$(id) = $(id) = $value</var_make>
- <make>#set $parent = $notebook() and 'self.%s.GetPage(%s)'%$notebook() or 'self'
-#set $win = 'self._%s_static_text'%$id
-$win = forms.static_text(
- parent=$(parent).GetWin(),
- value=self.$id,
- callback=self.set_$(id),
- #if $label()
- label=$label,
- #else
- label='$id',
- #end if
- #if $formatter()
- converter=forms.$(converver)(formatter=$formatter),
- #else
- converter=forms.$(converver)(),
- #end if
-)
-#if not $grid_pos()
-$(parent).Add($win)
-#else
-$(parent).GridAdd($win, $(', '.join(map(str, $grid_pos()))))
-#end if</make>
- <callback>self.set_$(id)($value)</callback>
- <callback>self._$(id)_static_text.set_value($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>Default Value</name>
- <key>value</key>
- <value>0</value>
- <type>raw</type>
- </param>
- <param>
- <name>Converter</name>
- <key>converver</key>
- <value>float_converter</value>
- <type>enum</type>
- <option>
- <name>Float</name>
- <key>float_converter</key>
- </option>
- <option>
- <name>Integer</name>
- <key>int_converter</key>
- </option>
- <option>
- <name>String</name>
- <key>str_converter</key>
- </option>
- </param>
- <param>
- <name>Formatter</name>
- <key>formatter</key>
- <value>None</value>
- <type>raw</type>
- <hide>part</hide>
- </param>
- <param>
- <name>Grid Position</name>
- <key>grid_pos</key>
- <value></value>
- <type>grid_pos</type>
- </param>
- <param>
- <name>Notebook</name>
- <key>notebook</key>
- <value></value>
- <type>notebook</type>
- </param>
- <doc>
-This block creates a variable with a static text form. \
-Leave the label blank to use the variable id as the label.
-
-Format should be a function/lambda that converts a value into a string or None for the default formatter.
-
-Use the Grid Position (row, column, row span, column span) to position the graphical element in the window.
-
-Use the Notebook Param (notebook-id, page-index) to place the graphical element inside of a notebook page.
- </doc>
-</block>
diff --git a/gr-wxgui/grc/variable_text_box.xml b/gr-wxgui/grc/variable_text_box.xml
deleted file mode 100644
index 8c8119433a..0000000000
--- a/gr-wxgui/grc/variable_text_box.xml
+++ /dev/null
@@ -1,102 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Variable Text Box:
-## a gui text box form
-###################################################
- -->
-<block>
- <name>WX GUI Text Box</name>
- <key>variable_text_box</key>
- <category>[Core]/GUI Widgets/WX</category>
- <import>from gnuradio.wxgui import forms</import>
- <var_make>self.$(id) = $(id) = $value</var_make>
- <make>#set $parent = $notebook() and 'self.%s.GetPage(%s)'%$notebook() or 'self'
-#set $win = 'self._%s_text_box'%$id
-$win = forms.text_box(
- parent=$(parent).GetWin(),
- value=self.$id,
- callback=self.set_$(id),
- #if $label()
- label=$label,
- #else
- label='$id',
- #end if
- #if $formatter()
- converter=forms.$(converver)(formatter=$formatter),
- #else
- converter=forms.$(converver)(),
- #end if
-)
-#if not $grid_pos()
-$(parent).Add($win)
-#else
-$(parent).GridAdd($win, $(', '.join(map(str, $grid_pos()))))
-#end if</make>
- <callback>self.set_$(id)($value)</callback>
- <callback>self._$(id)_text_box.set_value($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>Default Value</name>
- <key>value</key>
- <value>0</value>
- <type>raw</type>
- </param>
- <param>
- <name>Converter</name>
- <key>converver</key>
- <value>float_converter</value>
- <type>enum</type>
- <option>
- <name>Float</name>
- <key>float_converter</key>
- </option>
- <option>
- <name>Integer</name>
- <key>int_converter</key>
- </option>
- <option>
- <name>String</name>
- <key>str_converter</key>
- </option>
- <option>
- <name>Evaluate</name>
- <key>eval_converter</key>
- </option>
- </param>
- <param>
- <name>Formatter</name>
- <key>formatter</key>
- <value>None</value>
- <type>raw</type>
- <hide>part</hide>
- </param>
- <param>
- <name>Grid Position</name>
- <key>grid_pos</key>
- <value></value>
- <type>grid_pos</type>
- </param>
- <param>
- <name>Notebook</name>
- <key>notebook</key>
- <value></value>
- <type>notebook</type>
- </param>
- <doc>
-This block creates a variable with a text box. \
-Leave the label blank to use the variable id as the label.
-
-Format should be a function/lambda that converts a value into a string or None for the default formatter.
-
-Use the Grid Position (row, column, row span, column span) to position the graphical element in the window.
-
-Use the Notebook Param (notebook-id, page-index) to place the graphical element inside of a notebook page.
- </doc>
-</block>
diff --git a/gr-wxgui/grc/wxgui_constellationsink2.xml b/gr-wxgui/grc/wxgui_constellationsink2.xml
deleted file mode 100644
index 999ebbe2cf..0000000000
--- a/gr-wxgui/grc/wxgui_constellationsink2.xml
+++ /dev/null
@@ -1,141 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Constellation Sink
-###################################################
- -->
-<block>
- <name>WX GUI Constellation Sink</name>
- <key>wxgui_constellationsink2</key>
- <category>[Core]/Instrumentation/WX</category>
- <import>from gnuradio.wxgui import constsink_gl</import>
- <import>from gnuradio import wxgui</import>
- <make>#set $parent = $notebook() and 'self.%s.GetPage(%s)'%$notebook() or 'self'
-constsink_gl.const_sink_c(
- $(parent).GetWin(),
- title=$title,
- sample_rate=$samp_rate,
- frame_rate=$frame_rate,
- const_size=$const_size,
- M=$M,
- theta=$theta,
- loop_bw=$loop_bw,
- fmax=$fmax,
- mu=$mu,
- gain_mu=$gain_mu,
- symbol_rate=$symbol_rate,
- omega_limit=$omega_limit,
-#if $win_size()
- size=$win_size,
-#end if
-)
-#if not $grid_pos()
-$(parent).Add(self.$(id).win)
-#else
-$(parent).GridAdd(self.$(id).win, $(', '.join(map(str, $grid_pos()))))
-#end if</make>
- <callback>set_sample_rate($samp_rate)</callback>
- <param>
- <name>Title</name>
- <key>title</key>
- <value>Constellation Plot</value>
- <type>string</type>
- </param>
- <param>
- <name>Sample Rate</name>
- <key>samp_rate</key>
- <value>samp_rate</value>
- <type>real</type>
- </param>
- <param>
- <name>Frame Rate</name>
- <key>frame_rate</key>
- <value>5</value>
- <type>real</type>
- </param>
- <param>
- <name>Constellation Size</name>
- <key>const_size</key>
- <value>2048</value>
- <type>real</type>
- </param>
- <param>
- <name>M</name>
- <key>M</key>
- <value>4</value>
- <type>int</type>
- </param>
- <param>
- <name>Theta</name>
- <key>theta</key>
- <value>0</value>
- <type>real</type>
- </param>
- <param>
- <name>Loop Bandwidth</name>
- <key>loop_bw</key>
- <value>6.28/100.0</value>
- <type>real</type>
- </param>
- <param>
- <name>Max Freq</name>
- <key>fmax</key>
- <value>0.06</value>
- <type>real</type>
- </param>
- <param>
- <name>Mu</name>
- <key>mu</key>
- <value>0.5</value>
- <type>real</type>
- </param>
- <param>
- <name>Gain Mu</name>
- <key>gain_mu</key>
- <value>0.005</value>
- <type>real</type>
- </param>
- <param>
- <name>Symbol Rate</name>
- <key>symbol_rate</key>
- <value>samp_rate/4.</value>
- <type>real</type>
- </param>
- <param>
- <name>Omega Limit</name>
- <key>omega_limit</key>
- <value>0.005</value>
- <type>real</type>
- </param>
- <param>
- <name>Window Size</name>
- <key>win_size</key>
- <value></value>
- <type>int_vector</type>
- <hide>#if $win_size() then 'none' else 'part'#</hide>
- </param>
- <param>
- <name>Grid Position</name>
- <key>grid_pos</key>
- <value></value>
- <type>grid_pos</type>
- </param>
- <param>
- <name>Notebook</name>
- <key>notebook</key>
- <value></value>
- <type>notebook</type>
- </param>
- <check>not $win_size or len($win_size) == 2</check>
- <sink>
- <name>in</name>
- <type>complex</type>
- </sink>
- <doc>
-Leave the window blank for the default size, otherwise enter a tuple of (width, height) pixels.
-
-Use the Grid Position (row, column, row span, column span) to position the graphical element in the window.
-
-Use the Notebook Param (notebook-id, page-index) to place the graphical element inside of a notebook page.
- </doc>
-</block>
diff --git a/gr-wxgui/grc/wxgui_fftsink2.xml b/gr-wxgui/grc/wxgui_fftsink2.xml
deleted file mode 100644
index 11e9c7255e..0000000000
--- a/gr-wxgui/grc/wxgui_fftsink2.xml
+++ /dev/null
@@ -1,246 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##FFT Sink
-###################################################
- -->
-<block>
- <name>WX GUI FFT Sink</name>
- <key>wxgui_fftsink2</key>
- <category>[Core]/Instrumentation/WX</category>
- <import>from gnuradio.fft import window</import>
- <import>from gnuradio.wxgui import fftsink2</import>
- <import>from gnuradio import wxgui</import>
- <make>#set $parent = $notebook() and 'self.%s.GetPage(%s)'%$notebook() or 'self'
-fftsink2.$(type.fcn)(
- $(parent).GetWin(),
- baseband_freq=$baseband_freq,
- y_per_div=$y_per_div,
- y_divs=$y_divs,
- ref_level=$ref_level,
- ref_scale=$ref_scale,
- sample_rate=$samp_rate,
- fft_size=$fft_size,
- fft_rate=$fft_rate,
- average=$average,
- avg_alpha=#if $avg_alpha() then $avg_alpha else 'None'#,
- title=$title,
- peak_hold=$peak_hold,
-#if $win()
- win=$win,
-#end if
-#if $win_size()
- size=$win_size,
-#end if
-)
-#if not $grid_pos()
-$(parent).Add(self.$(id).win)
-#else
-$(parent).GridAdd(self.$(id).win, $(', '.join(map(str, $grid_pos()))))
-#end if
-#if $freqvar() is not None
-def $(id)_callback(x, y):
- self.set_$(freqvar)(x)
-
-self.$(id).set_callback($(id)_callback)
-#end if</make>
- <callback>set_baseband_freq($baseband_freq)</callback>
- <callback>set_sample_rate($samp_rate)</callback>
- <param>
- <name>Type</name>
- <key>type</key>
- <value>complex</value>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>fcn:fft_sink_c</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>fcn:fft_sink_f</opt>
- </option>
- </param>
- <param>
- <name>Title</name>
- <key>title</key>
- <value>FFT Plot</value>
- <type>string</type>
- </param>
- <param>
- <name>Sample Rate</name>
- <key>samp_rate</key>
- <value>samp_rate</value>
- <type>real</type>
- </param>
- <param>
- <name>Baseband Freq</name>
- <key>baseband_freq</key>
- <value>0</value>
- <type>real</type>
- </param>
- <param>
- <name>Y per Div</name>
- <key>y_per_div</key>
- <value>10</value>
- <type>enum</type>
- <option>
- <name>1 dB</name>
- <key>1</key>
- </option>
- <option>
- <name>2 dB</name>
- <key>2</key>
- </option>
- <option>
- <name>5 dB</name>
- <key>5</key>
- </option>
- <option>
- <name>10 dB</name>
- <key>10</key>
- </option>
- <option>
- <name>20 dB</name>
- <key>20</key>
- </option>
- </param>
- <param>
- <name>Y Divs</name>
- <key>y_divs</key>
- <value>10</value>
- <type>int</type>
- </param>
- <param>
- <name>Ref Level (dB)</name>
- <key>ref_level</key>
- <value>0</value>
- <type>real</type>
- </param>
- <param>
- <name>Ref Scale (p2p)</name>
- <key>ref_scale</key>
- <value>2.0</value>
- <type>real</type>
- </param>
- <param>
- <name>FFT Size</name>
- <key>fft_size</key>
- <value>1024</value>
- <type>int</type>
- </param>
- <param>
- <name>Refresh Rate</name>
- <key>fft_rate</key>
- <value>15</value>
- <type>int</type>
- </param>
- <param>
- <name>Peak Hold</name>
- <key>peak_hold</key>
- <value>False</value>
- <type>enum</type>
- <hide>#if $peak_hold() == 'True' then 'none' else 'part'#</hide>
- <option>
- <name>On</name>
- <key>True</key>
- </option>
- <option>
- <name>Off</name>
- <key>False</key>
- </option>
- </param>
- <param>
- <name>Average</name>
- <key>average</key>
- <value>False</value>
- <type>enum</type>
- <hide>part</hide>
- <option>
- <name>On</name>
- <key>True</key>
- </option>
- <option>
- <name>Off</name>
- <key>False</key>
- </option>
- </param>
- <param>
- <name>Average Alpha</name>
- <key>avg_alpha</key>
- <value>0</value>
- <type>real</type>
- <hide>#if $average() == 'True' then 'none' else 'all'#</hide>
- </param>
- <param>
- <name>Window</name>
- <key>win</key>
- <value>None</value>
- <type>raw</type>
- <hide>#if $win() is None then 'part' else 'none'#</hide>
- <option>
- <name>Automatic</name>
- <key>None</key>
- </option>
- <option>
- <name>Blackman-Harris</name>
- <key>window.blackmanharris</key>
- </option>
- <option>
- <name>Hamming</name>
- <key>window.hamming</key>
- </option>
- <option>
- <name>Hanning</name>
- <key>window.hanning</key>
- </option>
- <option>
- <name>Rectangular</name>
- <key>window.rectangular</key>
- </option>
- <option>
- <name>Flattop</name>
- <key>window.flattop</key>
- </option>
- </param>
- <param>
- <name>Window Size</name>
- <key>win_size</key>
- <value></value>
- <type>int_vector</type>
- <hide>#if $win_size() then 'none' else 'part'#</hide>
- </param>
- <param>
- <name>Grid Position</name>
- <key>grid_pos</key>
- <value></value>
- <type>grid_pos</type>
- </param>
- <param>
- <name>Notebook</name>
- <key>notebook</key>
- <value></value>
- <type>notebook</type>
- </param>
- <param>
- <name>Freq Set Varname</name>
- <key>freqvar</key>
- <value>None</value>
- <type>raw</type>
- </param>
- <check>not $win_size or len($win_size) == 2</check>
- <sink>
- <name>in</name>
- <type>$type</type>
- </sink>
- <doc>
-Set Average Alpha to 0 for automatic setting.
-
-Leave the window blank for the default size, otherwise enter a tuple of (width, height) pixels.
-
-Use the Grid Position (row, column, row span, column span) to position the graphical element in the window.
-
-Use the Notebook Param (notebook-id, page-index) to place the graphical element inside of a notebook page.
- </doc>
-</block>
diff --git a/gr-wxgui/grc/wxgui_histosink2.xml b/gr-wxgui/grc/wxgui_histosink2.xml
deleted file mode 100644
index 63bfc000ae..0000000000
--- a/gr-wxgui/grc/wxgui_histosink2.xml
+++ /dev/null
@@ -1,79 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Histogram Sink
-###################################################
- -->
-<block>
- <name>WX GUI Histo Sink</name>
- <key>wxgui_histosink2</key>
- <category>[Core]/Instrumentation/WX</category>
- <import>from gnuradio.wxgui import histosink_gl</import>
- <import>from gnuradio import wxgui</import>
- <make>#set $parent = $notebook() and 'self.%s.GetPage(%s)'%$notebook() or 'self'
-histosink_gl.histo_sink_f(
- $(parent).GetWin(),
- title=$title,
- num_bins=$num_bins,
- frame_size=$frame_size,
-#if $win_size()
- size=$win_size,
-#end if
-)
-#if not $grid_pos()
-$(parent).Add(self.$(id).win)
-#else
-$(parent).GridAdd(self.$(id).win, $(', '.join(map(str, $grid_pos()))))
-#end if</make>
- <callback>set_num_bins($num_bins)</callback>
- <callback>set_frame_size($frame_size)</callback>
- <param>
- <name>Title</name>
- <key>title</key>
- <value>Histogram Plot</value>
- <type>string</type>
- </param>
- <param>
- <name>Num Bins</name>
- <key>num_bins</key>
- <value>27</value>
- <type>int</type>
- </param>
- <param>
- <name>Frame Size</name>
- <key>frame_size</key>
- <value>1000</value>
- <type>int</type>
- </param>
- <param>
- <name>Window Size</name>
- <key>win_size</key>
- <value></value>
- <type>int_vector</type>
- <hide>#if $win_size() then 'none' else 'part'#</hide>
- </param>
- <param>
- <name>Grid Position</name>
- <key>grid_pos</key>
- <value></value>
- <type>grid_pos</type>
- </param>
- <param>
- <name>Notebook</name>
- <key>notebook</key>
- <value></value>
- <type>notebook</type>
- </param>
- <check>not $win_size or len($win_size) == 2</check>
- <sink>
- <name>in</name>
- <type>float</type>
- </sink>
- <doc>
-Leave the window blank for the default size, otherwise enter a tuple of (width, height) pixels.
-
-Use the Grid Position (row, column, row span, column span) to position the graphical element in the window.
-
-Use the Notebook Param (notebook-id, page-index) to place the graphical element inside of a notebook page.
- </doc>
-</block>
diff --git a/gr-wxgui/grc/wxgui_numbersink2.xml b/gr-wxgui/grc/wxgui_numbersink2.xml
deleted file mode 100644
index 6f4d4a574a..0000000000
--- a/gr-wxgui/grc/wxgui_numbersink2.xml
+++ /dev/null
@@ -1,194 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Number Sink
-###################################################
- -->
-<block>
- <name>WX GUI Number Sink</name>
- <key>wxgui_numbersink2</key>
- <category>[Core]/Instrumentation/WX</category>
- <import>from gnuradio.wxgui import numbersink2</import>
- <import>from gnuradio import wxgui</import>
- <make>#set $parent = $notebook() and 'self.%s.GetPage(%s)'%$notebook() or 'self'
-numbersink2.$(type.fcn)(
- $(parent).GetWin(),
- unit=$units,
- minval=$min_value,
- maxval=$max_value,
- factor=$factor,
- decimal_places=$decimal_places,
- ref_level=$ref_level,
- sample_rate=$samp_rate,
- number_rate=$number_rate,
- average=$average,
- avg_alpha=#if $avg_alpha() then $avg_alpha else 'None'#,
- label=$title,
- peak_hold=$peak_hold,
- show_gauge=$show_gauge,
-#if $win_size()
- size=$win_size,
-#end if
-)
-#if not $grid_pos()
-$(parent).Add(self.$(id).win)
-#else
-$(parent).GridAdd(self.$(id).win, $(', '.join(map(str, $grid_pos()))))
-#end if</make>
- <param>
- <name>Type</name>
- <key>type</key>
- <value>complex</value>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>fcn:number_sink_c</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>fcn:number_sink_f</opt>
- </option>
- </param>
- <param>
- <name>Title</name>
- <key>title</key>
- <value>Number Plot</value>
- <type>string</type>
- </param>
- <param>
- <name>Units</name>
- <key>units</key>
- <value>Units</value>
- <type>string</type>
- </param>
- <param>
- <name>Sample Rate</name>
- <key>samp_rate</key>
- <value>samp_rate</value>
- <type>real</type>
- </param>
- <param>
- <name>Min Value</name>
- <key>min_value</key>
- <value>-100</value>
- <type>real</type>
- </param>
- <param>
- <name>Max Value</name>
- <key>max_value</key>
- <value>100</value>
- <type>real</type>
- </param>
- <param>
- <name>Factor</name>
- <key>factor</key>
- <value>1.0</value>
- <type>real</type>
- </param>
- <param>
- <name>Decimal Places</name>
- <key>decimal_places</key>
- <value>10</value>
- <type>int</type>
- </param>
- <param>
- <name>Reference Level</name>
- <key>ref_level</key>
- <value>0</value>
- <type>real</type>
- </param>
- <param>
- <name>Number Rate</name>
- <key>number_rate</key>
- <value>15</value>
- <type>int</type>
- </param>
- <param>
- <name>Peak Hold</name>
- <key>peak_hold</key>
- <value>False</value>
- <type>enum</type>
- <hide>#if $peak_hold() == 'True' then 'none' else 'part'#</hide>
- <option>
- <name>On</name>
- <key>True</key>
- </option>
- <option>
- <name>Off</name>
- <key>False</key>
- </option>
- </param>
- <param>
- <name>Average</name>
- <key>average</key>
- <value>False</value>
- <type>enum</type>
- <hide>part</hide>
- <option>
- <name>On</name>
- <key>True</key>
- </option>
- <option>
- <name>Off</name>
- <key>False</key>
- </option>
- </param>
- <param>
- <name>Average Alpha</name>
- <key>avg_alpha</key>
- <value>0</value>
- <type>real</type>
- <hide>#if $average() == 'True' then 'none' else 'all'#</hide>
- </param>
- <param>
- <name>Show Gauge</name>
- <key>show_gauge</key>
- <value>True</value>
- <type>enum</type>
- <option>
- <name>Show</name>
- <key>True</key>
- </option>
- <option>
- <name>Hide</name>
- <key>False</key>
- </option>
- </param>
- <param>
- <name>Window Size</name>
- <key>win_size</key>
- <value></value>
- <type>int_vector</type>
- <hide>#if $win_size() then 'none' else 'part'#</hide>
- </param>
- <param>
- <name>Grid Position</name>
- <key>grid_pos</key>
- <value></value>
- <type>grid_pos</type>
- </param>
- <param>
- <name>Notebook</name>
- <key>notebook</key>
- <value></value>
- <type>notebook</type>
- </param>
- <check>not $win_size or len($win_size) == 2</check>
- <sink>
- <name>in</name>
- <type>$type</type>
- </sink>
- <doc>
-Set Average Alpha to 0 for automatic setting.
-
-Leave the window blank for the default size, otherwise enter a tuple of (width, height) pixels.
-
-Use the Grid Position (row, column, row span, column span) to position the graphical element in the window.
-
-Use the Notebook Param (notebook-id, page-index) to place the graphical element inside of a notebook page.
-
-Incoming numbers are multiplied by the factor, and then added-to by the reference level.
- </doc>
-</block>
diff --git a/gr-wxgui/grc/wxgui_scopesink2.xml b/gr-wxgui/grc/wxgui_scopesink2.xml
deleted file mode 100644
index 7e896897d6..0000000000
--- a/gr-wxgui/grc/wxgui_scopesink2.xml
+++ /dev/null
@@ -1,187 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Scope Sink
-###################################################
- -->
-<block>
- <name>WX GUI Scope Sink</name>
- <key>wxgui_scopesink2</key>
- <category>[Core]/Instrumentation/WX</category>
- <import>from gnuradio.wxgui import scopesink2</import>
- <import>from gnuradio import wxgui</import>
- <make>#set $parent = $notebook() and 'self.%s.GetPage(%s)'%$notebook() or 'self'
-scopesink2.$(type.fcn)(
- $(parent).GetWin(),
- title=$title,
- sample_rate=$samp_rate,
- v_scale=$v_scale,
- v_offset=$v_offset,
- t_scale=$t_scale,
- ac_couple=$ac_couple,
- xy_mode=$xy_mode,
- num_inputs=$num_inputs,
- trig_mode=$trig_mode,
- y_axis_label=$y_axis_label,
-#if $win_size()
- size=$win_size,
-#end if
-)
-#if not $grid_pos()
-$(parent).Add(self.$(id).win)
-#else
-$(parent).GridAdd(self.$(id).win, $(', '.join(map(str, $grid_pos()))))
-#end if</make>
- <callback>set_sample_rate($samp_rate)</callback>
- <param>
- <name>Type</name>
- <key>type</key>
- <value>complex</value>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>fcn:scope_sink_c</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>fcn:scope_sink_f</opt>
- </option>
- </param>
- <param>
- <name>Title</name>
- <key>title</key>
- <value>Scope Plot</value>
- <type>string</type>
- </param>
- <param>
- <name>Sample Rate</name>
- <key>samp_rate</key>
- <value>samp_rate</value>
- <type>real</type>
- </param>
- <param>
- <name>V Scale</name>
- <key>v_scale</key>
- <value>0</value>
- <type>real</type>
- <hide>#if $v_scale() then 'none' else 'part'#</hide>
- </param>
- <param>
- <name>V Offset</name>
- <key>v_offset</key>
- <value>0</value>
- <type>real</type>
- <hide>#if $v_offset() then 'none' else 'part'#</hide>
- </param>
- <param>
- <name>T Scale</name>
- <key>t_scale</key>
- <value>0</value>
- <type>real</type>
- <hide>#if $t_scale() then 'none' else 'part'#</hide>
- </param>
- <param>
- <name>AC Couple</name>
- <key>ac_couple</key>
- <value>False</value>
- <type>bool</type>
- <hide>#if $ac_couple() then 'none' else 'part'#</hide>
- <option>
- <name>Off</name>
- <key>False</key>
- </option>
- <option>
- <name>On</name>
- <key>True</key>
- </option>
- </param>
- <param>
- <name>XY Mode</name>
- <key>xy_mode</key>
- <value>False</value>
- <type>enum</type>
- <hide>#if $xy_mode() == 'True' then 'none' else 'part'#</hide>
- <option>
- <name>Off</name>
- <key>False</key>
- </option>
- <option>
- <name>On</name>
- <key>True</key>
- </option>
- </param>
- <param>
- <name>Num Inputs</name>
- <key>num_inputs</key>
- <value>1</value>
- <type>int</type>
- </param>
- <param>
- <name>Window Size</name>
- <key>win_size</key>
- <value></value>
- <type>int_vector</type>
- <hide>#if $win_size() then 'none' else 'part'#</hide>
- </param>
- <param>
- <name>Grid Position</name>
- <key>grid_pos</key>
- <value></value>
- <type>grid_pos</type>
- </param>
- <param>
- <name>Notebook</name>
- <key>notebook</key>
- <value></value>
- <type>notebook</type>
- </param>
- <param>
- <name>Trigger Mode</name>
- <key>trig_mode</key>
- <type>enum</type>
- <option>
- <name>Auto</name>
- <key>wxgui.TRIG_MODE_AUTO</key>
- </option>
- <option>
- <name>Normal</name>
- <key>wxgui.TRIG_MODE_NORM</key>
- </option>
- <option>
- <name>Freerun</name>
- <key>wxgui.TRIG_MODE_FREE</key>
- </option>
- <option>
- <name>Stripchart</name>
- <key>wxgui.TRIG_MODE_STRIPCHART</key>
- </option>
- </param>
- <param>
- <name>Y Axis Label</name>
- <key>y_axis_label</key>
- <value>Counts</value>
- <type>string</type>
- </param>
- <check>not $win_size or len($win_size) == 2</check>
- <check>not $xy_mode or '$type' == 'complex' or $num_inputs != 1</check>
- <sink>
- <name>in</name>
- <type>$type</type>
- <nports>$num_inputs</nports>
- </sink>
- <doc>
-Set the V Scale to 0 for the scope to auto-scale.
-
-Set the T Scale to 0 for automatic setting.
-
-XY Mode allows the scope to initialize as an XY plotter.
-
-Leave the window blank for the default size, otherwise enter a tuple of (width, height) pixels.
-
-Use the Grid Position (row, column, row span, column span) to position the graphical element in the window.
-
-Use the Notebook Param (notebook-id, page-index) to place the graphical element inside of a notebook page.
- </doc>
-</block>
diff --git a/gr-wxgui/grc/wxgui_termsink.xml b/gr-wxgui/grc/wxgui_termsink.xml
deleted file mode 100644
index 54fedde081..0000000000
--- a/gr-wxgui/grc/wxgui_termsink.xml
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Terminal window
-###################################################
- -->
-<block>
- <name>WX GUI Terminal Sink</name>
- <key>wxgui_termsink</key>
- <category>[Core]/Instrumentation/WX</category>
-
- <import>from gnuradio.wxgui import termsink</import>
- <import>from gnuradio import wxgui</import>
-
- <make>#set $parent = $notebook() and 'self.%s.GetPage(%s)'%$notebook() or 'self'
-termsink.termsink(
- parent=$(parent).GetWin(),
-#if $win_size()
- size=$win_size,
-#end if
- msgq=$(id)_msgq_in,
-)
-#if not $grid_pos()
-$(parent).Add(self.$(id))
-#else
-$(parent).GridAdd(self.$(id), $(', '.join(map(str, $grid_pos()))))
-#end if</make>
-
- <param>
- <name>Window Size</name>
- <key>win_size</key>
- <value></value>
- <type>int_vector</type>
- <hide>#if $win_size() then 'none' else 'part'#</hide>
- </param>
- <param>
- <name>Grid Position</name>
- <key>grid_pos</key>
- <value></value>
- <type>grid_pos</type>
- </param>
-
- <param>
- <name>Notebook</name>
- <key>notebook</key>
- <value></value>
- <type>notebook</type>
- </param>
-
- <check>not $win_size or len($win_size) == 2</check>
-
- <sink>
- <name>in</name>
- <type>msg</type>
- </sink>
-
-</block>
diff --git a/gr-wxgui/grc/wxgui_waterfallsink2.xml b/gr-wxgui/grc/wxgui_waterfallsink2.xml
deleted file mode 100644
index 5b56f98ebe..0000000000
--- a/gr-wxgui/grc/wxgui_waterfallsink2.xml
+++ /dev/null
@@ -1,203 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Waterfall Sink
-###################################################
- -->
-<block>
- <name>WX GUI Waterfall Sink</name>
- <key>wxgui_waterfallsink2</key>
- <category>[Core]/Instrumentation/WX</category>
- <import>from gnuradio.fft import window</import>
- <import>from gnuradio.wxgui import waterfallsink2</import>
- <import>from gnuradio import wxgui</import>
- <make>#set $parent = $notebook() and 'self.%s.GetPage(%s)'%$notebook() or 'self'
-waterfallsink2.$(type.fcn)(
- $(parent).GetWin(),
- baseband_freq=$baseband_freq,
- dynamic_range=$dynamic_range,
- ref_level=$ref_level,
- ref_scale=$ref_scale,
- sample_rate=$samp_rate,
- fft_size=$fft_size,
- fft_rate=$fft_rate,
- average=$average,
- avg_alpha=#if $avg_alpha() then $avg_alpha else 'None'#,
- title=$title,
-#if $win()
- win=$win,
-#end if
-#if $win_size()
- size=$win_size,
-#end if
-)
-#if not $grid_pos()
-$(parent).Add(self.$(id).win)
-#else
-$(parent).GridAdd(self.$(id).win, $(', '.join(map(str, $grid_pos()))))
-#end if
-#if $freqvar() is not None
-def $(id)_callback(x, y):
- self.set_$(freqvar)(x)
-
-self.$(id).set_callback($(id)_callback)
-#end if</make>
- <callback>set_baseband_freq($baseband_freq)</callback>
- <callback>set_sample_rate($samp_rate)</callback>
- <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>Title</name>
- <key>title</key>
- <value>Waterfall Plot</value>
- <type>string</type>
- </param>
- <param>
- <name>Sample Rate</name>
- <key>samp_rate</key>
- <value>samp_rate</value>
- <type>real</type>
- </param>
- <param>
- <name>Baseband Freq</name>
- <key>baseband_freq</key>
- <value>0</value>
- <type>real</type>
- </param>
- <param>
- <name>Dynamic Range</name>
- <key>dynamic_range</key>
- <value>100</value>
- <type>real</type>
- </param>
- <param>
- <name>Reference Level</name>
- <key>ref_level</key>
- <value>0</value>
- <type>real</type>
- </param>
- <param>
- <name>Ref Scale (p2p)</name>
- <key>ref_scale</key>
- <value>2.0</value>
- <type>real</type>
- </param>
- <param>
- <name>FFT Size</name>
- <key>fft_size</key>
- <value>512</value>
- <type>int</type>
- </param>
- <param>
- <name>FFT Rate</name>
- <key>fft_rate</key>
- <value>15</value>
- <type>int</type>
- </param>
- <param>
- <name>Average</name>
- <key>average</key>
- <value>False</value>
- <type>enum</type>
- <hide>part</hide>
- <option>
- <name>On</name>
- <key>True</key>
- </option>
- <option>
- <name>Off</name>
- <key>False</key>
- </option>
- </param>
- <param>
- <name>Average Alpha</name>
- <key>avg_alpha</key>
- <value>0</value>
- <type>real</type>
- <hide>#if $average() == 'True' then 'none' else 'all'#</hide>
- </param>
- <param>
- <name>Window</name>
- <key>win</key>
- <value>None</value>
- <type>raw</type>
- <hide>#if $win() is None then 'part' else 'none'#</hide>
- <option>
- <name>Automatic</name>
- <key>None</key>
- </option>
- <option>
- <name>Blackman-Harris</name>
- <key>window.blackmanharris</key>
- </option>
- <option>
- <name>Hamming</name>
- <key>window.hamming</key>
- </option>
- <option>
- <name>Hanning</name>
- <key>window.hanning</key>
- </option>
- <option>
- <name>Rectangular</name>
- <key>window.rectangular</key>
- </option>
- <option>
- <name>Flattop</name>
- <key>window.flattop</key>
- </option>
- </param>
- <param>
- <name>Window Size</name>
- <key>win_size</key>
- <value></value>
- <type>int_vector</type>
- <hide>#if $win_size() then 'none' else 'part'#</hide>
- </param>
- <param>
- <name>Grid Position</name>
- <key>grid_pos</key>
- <value></value>
- <type>grid_pos</type>
- </param>
- <param>
- <name>Notebook</name>
- <key>notebook</key>
- <value></value>
- <type>notebook</type>
- </param>
- <param>
- <name>Freq Set Varname</name>
- <key>freqvar</key>
- <value>None</value>
- <type>raw</type>
- </param>
- <check>not $win_size or len($win_size) == 2</check>
- <sink>
- <name>in</name>
- <type>$type</type>
- </sink>
- <doc>
-Set Average Alpha to 0 for automatic setting.
-
-Leave the window blank for the default size, otherwise enter a tuple of (width, height) pixels.
-
-Use the Grid Position (row, column, row span, column span) to position the graphical element in the window.
-
-Use the Notebook Param (notebook-id, page-index) to place the graphical element inside of a notebook page.
- </doc>
-</block>
diff --git a/gr-wxgui/include/gnuradio/wxgui/CMakeLists.txt b/gr-wxgui/include/gnuradio/wxgui/CMakeLists.txt
deleted file mode 100644
index 468d9b7992..0000000000
--- a/gr-wxgui/include/gnuradio/wxgui/CMakeLists.txt
+++ /dev/null
@@ -1,31 +0,0 @@
-# Copyright 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.
-
-########################################################################
-# Install header files
-########################################################################
-install(FILES
- api.h
- histo_sink_f.h
- oscope_guts.h
- oscope_sink_f.h
- oscope_sink_x.h
- trigger_mode.h
- DESTINATION ${GR_INCLUDE_DIR}/gnuradio/wxgui
-)
diff --git a/gr-wxgui/include/gnuradio/wxgui/api.h b/gr-wxgui/include/gnuradio/wxgui/api.h
deleted file mode 100644
index 6439c8e591..0000000000
--- a/gr-wxgui/include/gnuradio/wxgui/api.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright 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_WXGUI_API_H
-#define INCLUDED_WXGUI_API_H
-
-#include <gnuradio/attributes.h>
-
-#ifdef gnuradio_wxgui_EXPORTS
-# define WXGUI_API __GR_ATTR_EXPORT
-#else
-# define WXGUI_API __GR_ATTR_IMPORT
-#endif
-
-#endif /* INCLUDED_WXGUI_API_H */
diff --git a/gr-wxgui/include/gnuradio/wxgui/histo_sink_f.h b/gr-wxgui/include/gnuradio/wxgui/histo_sink_f.h
deleted file mode 100644
index 30f0bc7c0d..0000000000
--- a/gr-wxgui/include/gnuradio/wxgui/histo_sink_f.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/* -*- c++ -*- */
-/*
- * Copyright 2009,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_GR_HISTO_SINK_F_H
-#define INCLUDED_GR_HISTO_SINK_F_H
-
-#include <gnuradio/wxgui/api.h>
-#include <gnuradio/sync_block.h>
-#include <gnuradio/msg_queue.h>
-
-namespace gr {
- namespace wxgui {
-
- /*!
- * \brief Histogram module.
- * \ingroup sink_blk
- */
- class WXGUI_API histo_sink_f : virtual public sync_block
- {
- public:
- // gr::blocks::histo_sink_f::sptr
- typedef boost::shared_ptr<histo_sink_f> sptr;
-
- static sptr make(msg_queue::sptr msgq);
-
- virtual unsigned int get_frame_size(void) = 0;
- virtual unsigned int get_num_bins(void) = 0;
-
- virtual void set_frame_size(unsigned int frame_size) = 0;
- virtual void set_num_bins(unsigned int num_bins) = 0;
- };
-
- } /* namespace wxgui */
-} /* namespace gr */
-
-#endif /* INCLUDED_GR_HISTO_SINK_F_H */
diff --git a/gr-wxgui/include/gnuradio/wxgui/oscope_guts.h b/gr-wxgui/include/gnuradio/wxgui/oscope_guts.h
deleted file mode 100644
index 2870d219f6..0000000000
--- a/gr-wxgui/include/gnuradio/wxgui/oscope_guts.h
+++ /dev/null
@@ -1,131 +0,0 @@
-/* -*- c++ -*- */
-/*
- * Copyright 2003,2005,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_GR_OSCOPE_GUTS_H
-#define INCLUDED_GR_OSCOPE_GUTS_H
-
-#include <gnuradio/wxgui/api.h>
-#include <gnuradio/wxgui/trigger_mode.h>
-#include <gnuradio/msg_queue.h>
-
-namespace gr {
- namespace wxgui {
-
- /*!
- * \brief guts of oscilloscope trigger and buffer module
- *
- * This module processes sets of samples provided the \p
- * process_sample method. When appropriate given the updateRate,
- * sampleRate and trigger conditions, process_sample will
- * periodically write output records of captured data to
- * output_fd. For each trigger event, nchannels records will be
- * written. Each record consists of get_samples_per_output_record
- * binary floats. The trigger instant occurs at the 1/2 way point
- * in the buffer. Thus, output records consist of 50% pre-trigger
- * data and 50% post-trigger data.
- */
-
- class WXGUI_API oscope_guts
- {
- public:
- static const int MAX_CHANNELS = 8;
-
- private:
- enum scope_state { HOLD_OFF, LOOK_FOR_TRIGGER, POST_TRIGGER };
-
- int d_nchannels; // how many channels
- msg_queue::sptr d_msgq; // message queue we stuff output records into
- trigger_mode d_trigger_mode;
- trigger_slope d_trigger_slope;
- int d_trigger_channel; // which channel to watch for trigger condition
- double d_sample_rate; // input sample rate in Hz
- double d_update_rate; // approx freq to produce an output record (Hz)
- double d_trigger_level;
-
- int d_obi; // output buffer index
- float *d_buffer[MAX_CHANNELS];
-
- scope_state d_state;
- int d_decimator_count;
- int d_decimator_count_init;
- int d_hold_off_count;
- int d_hold_off_count_init;
- int d_pre_trigger_count;
- int d_post_trigger_count;
- int d_post_trigger_count_init;
- float d_trigger_off; //%sample trigger is off
-
- // NOT IMPLEMENTED
- oscope_guts(const oscope_guts &rhs); // no copy constructor
- oscope_guts &operator= (const oscope_guts &rhs); // no assignment operator
-
- void trigger_changed();
- void update_rate_or_decimation_changed();
- bool found_trigger(); // returns true if found
- void write_output_records();
-
- void enter_hold_off(); // called on state entry
- void enter_look_for_trigger();
- void enter_post_trigger();
-
- public:
- // CREATORS
- oscope_guts(double sample_rate, msg_queue::sptr msgq);
- ~oscope_guts();
-
- // MANIPULATORS
-
- /*!
- * \param channel_data points to nchannels float values. These
- * are the values for each channel at this sample time.
- */
- void process_sample(const float *channel_data);
-
- bool set_update_rate(double update_rate);
- bool set_decimation_count(int decimation_count);
- bool set_trigger_channel(int channel);
- bool set_trigger_mode(trigger_mode mode);
- bool set_trigger_slope(trigger_slope slope);
- bool set_trigger_level(double trigger_level);
- bool set_trigger_level_auto(); // set to 50% level
- bool set_sample_rate(double sample_rate);
- bool set_num_channels(int nchannels);
-
- // ACCESSORS
- int num_channels() const;
- double sample_rate() const;
- double update_rate() const;
- int get_decimation_count() const;
- int get_trigger_channel() const;
- trigger_mode get_trigger_mode() const;
- trigger_slope get_trigger_slope() const;
- double get_trigger_level() const;
-
- // # of samples written to each output record.
- int get_samples_per_output_record() const;
- };
-
- } /* namespace wxgui */
-} /* namespace gr */
-
-#endif /* INCLUDED_GR_OSCOPE_GUTS_H */
diff --git a/gr-wxgui/include/gnuradio/wxgui/oscope_sink_f.h b/gr-wxgui/include/gnuradio/wxgui/oscope_sink_f.h
deleted file mode 100644
index 9e86442055..0000000000
--- a/gr-wxgui/include/gnuradio/wxgui/oscope_sink_f.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/* -*- c++ -*- */
-/*
- * Copyright 2003-2005,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_GR_OSCOPE_SINK_F_H
-#define INCLUDED_GR_OSCOPE_SINK_F_H
-
-#include <gnuradio/wxgui/api.h>
-#include <gnuradio/wxgui/oscope_sink_x.h>
-#include <gnuradio/msg_queue.h>
-
-namespace gr {
- namespace wxgui {
-
- /*!
- * \brief Building block for python oscilloscope module.
- * \ingroup sink_blk
- *
- * Accepts multiple float streams.
- */
- class WXGUI_API oscope_sink_f
- : virtual public oscope_sink_x
- {
- public:
- // gr::blocks::oscope_sink_f::sptr
- typedef boost::shared_ptr<oscope_sink_f> sptr;
-
- static sptr make(double sampling_rate, msg_queue::sptr msgq);
- };
-
- } /* namespace wxgui */
-} /* namespace gr */
-
-#endif /* INCLUDED_GR_OSCOPE_SINK_F_H */
-
diff --git a/gr-wxgui/include/gnuradio/wxgui/oscope_sink_x.h b/gr-wxgui/include/gnuradio/wxgui/oscope_sink_x.h
deleted file mode 100644
index b72c1dd370..0000000000
--- a/gr-wxgui/include/gnuradio/wxgui/oscope_sink_x.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/* -*- c++ -*- */
-/*
- * Copyright 2003,2004,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_GR_OSCOPE_SINK_X_H
-#define INCLUDED_GR_OSCOPE_SINK_X_H
-
-#include <gnuradio/wxgui/api.h>
-#include <gnuradio/wxgui/trigger_mode.h>
-#include <gnuradio/wxgui/oscope_guts.h>
-#include <gnuradio/sync_block.h>
-
-namespace gr {
- namespace wxgui {
-
- /*!
- * \brief Abstract class for python oscilloscope module.
- * \ingroup sink_blk
- *
- * Don't instantiate this. Use gr::blocks::oscope_sink_f instead.
- */
- class WXGUI_API oscope_sink_x : public sync_block
- {
- protected:
- double d_sampling_rate;
- oscope_guts *d_guts;
-
- oscope_sink_x() {};
- oscope_sink_x(const std::string name,
- gr::io_signature::sptr input_sig,
- double sampling_rate);
- public:
- virtual ~oscope_sink_x();
-
- //// gr::blocks::oscope_sink_x::sptr
- //typedef boost::shared_ptr<oscope_sink_x> sptr;
- //
- //static sptr make(const std::string name,
- // gnuradio/io_signature.h_sptr input_sig,
- // double sampling_rate);
-
- bool set_update_rate(double update_rate);
- bool set_decimation_count(int decimation_count);
- bool set_trigger_channel(int channel);
- bool set_trigger_mode(trigger_mode mode);
- bool set_trigger_slope(trigger_slope slope);
- bool set_trigger_level(double trigger_level);
- bool set_trigger_level_auto();
- bool set_sample_rate(double sample_rate);
- bool set_num_channels(int nchannels);
-
- // ACCESSORS
- int num_channels() const;
- double sample_rate() const;
- double update_rate() const;
- int get_decimation_count() const;
- int get_trigger_channel() const;
- trigger_mode get_trigger_mode() const;
- trigger_slope get_trigger_slope() const;
- double get_trigger_level() const;
-
- // # of samples written to each output record.
- int get_samples_per_output_record() const;
-
- virtual int work(int noutput_items,
- gr_vector_const_void_star &input_items,
- gr_vector_void_star &output_items) = 0;
- };
-
- } /* namespace wxgui */
-} /* namespace gr */
-
-#endif /* INCLUDED_GR_OSCOPE_SINK_X_H */
diff --git a/gr-wxgui/include/gnuradio/wxgui/trigger_mode.h b/gr-wxgui/include/gnuradio/wxgui/trigger_mode.h
deleted file mode 100644
index 11654ef6c5..0000000000
--- a/gr-wxgui/include/gnuradio/wxgui/trigger_mode.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/* -*- c++ -*- */
-/*
- * Copyright 2003,2004,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_GR_TRIGGER_MODE_H
-#define INCLUDED_GR_TRIGGER_MODE_H
-
-namespace gr {
- namespace wxgui {
-
- enum trigger_mode {
- TRIG_MODE_FREE,
- TRIG_MODE_AUTO,
- TRIG_MODE_NORM,
- TRIG_MODE_STRIPCHART,
- };
-
- enum trigger_slope {
- TRIG_SLOPE_POS,
- TRIG_SLOPE_NEG,
- };
-
- } /* namespace wxgui */
-} /* namespace gr */
-
-#endif /* INCLUDED_GR_TRIGGER_MODE_H */
diff --git a/gr-wxgui/lib/CMakeLists.txt b/gr-wxgui/lib/CMakeLists.txt
deleted file mode 100644
index 2f1f6135f3..0000000000
--- a/gr-wxgui/lib/CMakeLists.txt
+++ /dev/null
@@ -1,98 +0,0 @@
-# Copyright 2012-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.
-
-########################################################################
-# Setup the include and linker paths
-########################################################################
-include_directories(
- ${CMAKE_CURRENT_SOURCE_DIR}
- ${CMAKE_CURRENT_BINARY_DIR}
- ${CMAKE_CURRENT_BINARY_DIR}/../include
- ${GR_WXGUI_INCLUDE_DIRS}
- ${GNURADIO_RUNTIME_INCLUDE_DIRS}
- ${VOLK_INCLUDE_DIRS}
- ${Boost_INCLUDE_DIRS}
-)
-
-link_directories(${Boost_LIBRARY_DIRS})
-
-if(ENABLE_GR_CTRLPORT)
- ADD_DEFINITIONS(-DGR_CTRLPORT)
-endif(ENABLE_GR_CTRLPORT)
-
-########################################################################
-# Setup library
-########################################################################
-list(APPEND gr_wxgui_sources
- histo_sink_f_impl.cc
- oscope_guts.cc
- oscope_sink_x.cc
- oscope_sink_f_impl.cc
-)
-
-#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-wxgui.rc.in
- ${CMAKE_CURRENT_BINARY_DIR}/gnuradio-wxgui.rc
- @ONLY)
-
- list(APPEND gr_wxgui_sources
- ${CMAKE_CURRENT_BINARY_DIR}/gnuradio-wxgui.rc
- )
-ENDIF(MSVC)
-
-list(APPEND wxgui_libs
- gnuradio-runtime
- ${VOLK_LIBRARIES}
- ${Boost_LIBRARIES}
- ${BLOCKS_LIBRARIES}
- ${LOG4CPP_LIBRARIES}
-)
-
-add_library(gnuradio-wxgui SHARED ${gr_wxgui_sources})
-
-target_link_libraries(gnuradio-wxgui ${wxgui_libs})
-GR_LIBRARY_FOO(gnuradio-wxgui)
-
-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
- 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)
- set_target_properties(gnuradio-wxgui_static
- PROPERTIES OUTPUT_NAME gnuradio-wxgui)
- endif(NOT WIN32)
-
- install(TARGETS gnuradio-wxgui_static
- ARCHIVE DESTINATION lib${LIB_SUFFIX} # .lib file
- )
-endif(ENABLE_STATIC_LIBS)
diff --git a/gr-wxgui/lib/gnuradio-wxgui.rc.in b/gr-wxgui/lib/gnuradio-wxgui.rc.in
deleted file mode 100644
index 126db75091..0000000000
--- a/gr-wxgui/lib/gnuradio-wxgui.rc.in
+++ /dev/null
@@ -1,54 +0,0 @@
-/* -*- c++ -*- */
-/*
- * Copyright 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.
- */
-#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-blocks"
- VALUE "FileVersion", "@VERSION@"
- VALUE "InternalName", "gnuradio-blocks.dll"
- VALUE "LegalCopyright", "Licensed under GPLv3 or any later version"
- VALUE "OriginalFilename", "gnuradio-blocks.dll"
- VALUE "ProductName", "gnuradio-blocks"
- VALUE "ProductVersion", "@VERSION@"
- END
- END
- BLOCK "VarFileInfo"
- BEGIN
- VALUE "Translation", 0x409, 1200
- END
- END
diff --git a/gr-wxgui/lib/histo_sink_f_impl.cc b/gr-wxgui/lib/histo_sink_f_impl.cc
deleted file mode 100644
index f10540fa36..0000000000
--- a/gr-wxgui/lib/histo_sink_f_impl.cc
+++ /dev/null
@@ -1,186 +0,0 @@
-/* -*- c++ -*- */
-/*
- * Copyright 2009-2011,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.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "histo_sink_f_impl.h"
-#include <gnuradio/io_signature.h>
-#include <boost/math/special_functions/round.hpp>
-
-namespace gr {
- namespace wxgui {
-
- static float get_clean_num(float num)
- {
- if(num == 0)
- return 0;
- /* extract sign and exponent from num */
- int sign = (num < 0) ? -1 : 1; num = fabs(num);
- float exponent = floor(log10(num));
- /* search for closest number with base 1, 2, 5, 10 */
- float closest_num = 10*pow(10, exponent);
- if(fabs(num - 1*pow(10, exponent)) < fabs(num - closest_num))
- closest_num = 1*pow(10, exponent);
- if(fabs(num - 2*pow(10, exponent)) < fabs(num - closest_num))
- closest_num = 2*pow(10, exponent);
- if(fabs(num - 5*pow(10, exponent)) < fabs(num - closest_num))
- closest_num = 5*pow(10, exponent);
- return sign*closest_num;
- }
-
- histo_sink_f::sptr
- histo_sink_f::make(msg_queue::sptr msgq)
- {
- return gnuradio::get_initial_sptr
- (new histo_sink_f_impl(msgq));
- }
-
- histo_sink_f_impl::histo_sink_f_impl(msg_queue::sptr msgq)
- : sync_block("histo_sink_f",
- io_signature::make(1, 1, sizeof(float)),
- io_signature::make(0, 0, 0)),
- d_msgq(msgq), d_num_bins(11), d_frame_size(1000),
- d_sample_count(0), d_bins(NULL), d_samps(NULL)
- {
- //allocate arrays and clear
- set_num_bins(d_num_bins);
- set_frame_size(d_frame_size);
- }
-
- histo_sink_f_impl::~histo_sink_f_impl(void)
- {
- delete [] d_samps;
- delete [] d_bins;
- }
-
- int
- histo_sink_f_impl::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];
- gr::thread::scoped_lock guard(d_mutex); // hold mutex for duration of this function
- for(unsigned int i = 0; i < (unsigned int)noutput_items; i++) {
- d_samps[d_sample_count] = in[i];
- d_sample_count++;
- /* processed a frame? */
- if(d_sample_count == d_frame_size) {
- send_frame();
- clear();
- }
- }
- return noutput_items;
- }
-
- void
- histo_sink_f_impl::send_frame(void)
- {
- /* output queue full, drop the data */
- if(d_msgq->full_p())
- return;
- /* find the minimum and maximum */
- float minimum = d_samps[0];
- float maximum = d_samps[0];
- for(unsigned int i = 0; i < d_frame_size; i++) {
- if(d_samps[i] < minimum) minimum = d_samps[i];
- if(d_samps[i] > maximum) maximum = d_samps[i];
- }
- minimum = get_clean_num(minimum);
- maximum = get_clean_num(maximum);
- if(minimum == maximum || minimum > maximum)
- return; //useless data or screw up?
- /* load the bins */
- int index;
- float bin_width = (maximum - minimum)/(d_num_bins-1);
- for(unsigned int i = 0; i < d_sample_count; i++) {
- index = boost::math::iround((d_samps[i] - minimum)/bin_width);
- /* ensure the index range in case a small floating point error is involed */
- if(index < 0)
- index = 0;
- if(index >= (int)d_num_bins)
- index = d_num_bins-1;
- d_bins[index]++;
- }
- /* Build a message to hold the output records */
- message::sptr msg = message::make(0, minimum, maximum, d_num_bins*sizeof(float));
- float *out = (float *)msg->msg(); // get pointer to raw message buffer
- /* normalize the bins and put into message */
- for(unsigned int i = 0; i < d_num_bins; i++) {
- out[i] = ((float)d_bins[i])/d_frame_size;
- }
- /* send the message */
- d_msgq->handle(msg);
- }
-
- void
- histo_sink_f_impl::clear(void)
- {
- d_sample_count = 0;
- /* zero the bins */
- for(unsigned int i = 0; i < d_num_bins; i++) {
- d_bins[i] = 0;
- }
- }
-
- /**************************************************
- * Getters
- **************************************************/
- unsigned int
- histo_sink_f_impl::get_frame_size(void)
- {
- return d_frame_size;
- }
-
- unsigned int
- histo_sink_f_impl::get_num_bins(void)
- {
- return d_num_bins;
- }
-
- /**************************************************
- * Setters
- **************************************************/
- void
- histo_sink_f_impl::set_frame_size(unsigned int frame_size)
- {
- gr::thread::scoped_lock guard(d_mutex); // hold mutex for duration of this function
- d_frame_size = frame_size;
- /* allocate a new sample array */
- delete [] d_samps;
- d_samps = new float[d_frame_size];
- clear();
- }
-
- void
- histo_sink_f_impl::set_num_bins(unsigned int num_bins) {
- gr::thread::scoped_lock guard(d_mutex); // hold mutex for duration of this function
- d_num_bins = num_bins;
- /* allocate a new bin array */
- delete [] d_bins;
- d_bins = new unsigned int[d_num_bins];
- clear();
- }
-
- } /* namespace wxgui */
-} /* namespace gr */
diff --git a/gr-wxgui/lib/histo_sink_f_impl.h b/gr-wxgui/lib/histo_sink_f_impl.h
deleted file mode 100644
index 6c16a8a465..0000000000
--- a/gr-wxgui/lib/histo_sink_f_impl.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/* -*- c++ -*- */
-/*
- * Copyright 2009,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_GR_HISTO_SINK_F_IMPL_H
-#define INCLUDED_GR_HISTO_SINK_F_IMPL_H
-
-#include <gnuradio/wxgui/histo_sink_f.h>
-
-namespace gr {
- namespace wxgui {
-
- class histo_sink_f_impl : public histo_sink_f
- {
- private:
- msg_queue::sptr d_msgq;
- unsigned int d_num_bins;
- unsigned int d_frame_size;
- unsigned int d_sample_count;
- unsigned int *d_bins;
- float *d_samps;
- gr::thread::mutex d_mutex;
-
- void send_frame(void);
- void clear(void);
-
- public:
- histo_sink_f_impl(msg_queue::sptr msgq);
- ~histo_sink_f_impl(void);
-
- int work(int noutput_items,
- gr_vector_const_void_star &input_items,
- gr_vector_void_star &output_items);
-
- unsigned int get_frame_size(void);
- unsigned int get_num_bins(void);
-
- void set_frame_size(unsigned int frame_size);
- void set_num_bins(unsigned int num_bins);
- };
-
- } /* namespace wxgui */
-} /* namespace gr */
-
-#endif /* INCLUDED_GR_HISTO_SINK_F_IMPL_H */
diff --git a/gr-wxgui/lib/oscope_guts.cc b/gr-wxgui/lib/oscope_guts.cc
deleted file mode 100644
index 3e826ff386..0000000000
--- a/gr-wxgui/lib/oscope_guts.cc
+++ /dev/null
@@ -1,439 +0,0 @@
-/* -*- c++ -*- */
-/*
- * Copyright 2003,2005,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.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <gnuradio/wxgui/oscope_guts.h>
-#include <stdexcept>
-#include <stdio.h>
-#include <algorithm>
-#include <unistd.h>
-#include <math.h>
-#include <assert.h>
-
-namespace gr {
- namespace wxgui {
-
- /*
- * Bad performance if it's large, and flaky triggering if it's too small
- */
- static const int OUTPUT_RECORD_SIZE = 1024; // Must be power of 2
-
- /*
- * For (slow-updated) STRIPCHART triggering, we make the record
- * size larger, since we potentially want to be able to "see"
- * hours of data. This works as long as the update rates to a
- * STRIPCHART are low, which they generally are--that's rather
- * what a stripchart is all about!
- */
- static const int SCHART_MULT = 8;
-
-
- static inline int
- wrap_bi(int buffer_index, int mx) // wrap buffer index
- {
- return buffer_index & (mx - 1);
- }
-
- static inline int
- incr_bi(int buffer_index, int mx) // increment buffer index
- {
- return wrap_bi(buffer_index + 1, mx);
- }
-
- static inline int
- decr_bi(int buffer_index, int mx) // decrement buffer index
- {
- return wrap_bi(buffer_index - 1, mx);
- }
-
- oscope_guts::oscope_guts(double sample_rate, msg_queue::sptr msgq)
- : d_nchannels(1),
- d_msgq(msgq),
- d_trigger_mode(TRIG_MODE_AUTO),
- d_trigger_slope(TRIG_SLOPE_POS),
- d_trigger_channel(0),
- d_sample_rate(sample_rate),
- d_update_rate(20),
- d_trigger_level(0),
- d_obi(0),
- d_state(HOLD_OFF),
- d_decimator_count(0),
- d_decimator_count_init(1),
- d_hold_off_count(0),
- d_hold_off_count_init(OUTPUT_RECORD_SIZE/2-1),
- d_pre_trigger_count(0),
- d_post_trigger_count(0),
- d_post_trigger_count_init(OUTPUT_RECORD_SIZE/2)
- {
- for(int i = 0; i < MAX_CHANNELS; i++)
- d_buffer[i] = 0;
-
- for(int i = 0; i < MAX_CHANNELS; i++) {
- d_buffer[i] = new float[OUTPUT_RECORD_SIZE*SCHART_MULT];
- for(int j = 0; j < OUTPUT_RECORD_SIZE*SCHART_MULT; j++)
- d_buffer[i][j] = 0.0;
- }
-
- // be sure buffer is full before first write
- enter_hold_off();
- update_rate_or_decimation_changed();
- }
-
- oscope_guts::~oscope_guts()
- {
- for(int i = 0; i < MAX_CHANNELS; i++)
- delete [] d_buffer[i];
- }
-
- // MANIPULATORS
- void
- oscope_guts::process_sample(const float *channel_data)
- {
- d_decimator_count--;
- if(d_decimator_count > 0)
- return;
-
- d_decimator_count = d_decimator_count_init;
-
- if(d_trigger_mode != TRIG_MODE_STRIPCHART) {
- for(int i = 0; i < d_nchannels; i++)
- d_buffer[i][d_obi] = channel_data[i]; // copy data into buffer
-
- switch(d_state) {
- case HOLD_OFF:
- d_hold_off_count--;
- if(d_hold_off_count <= 0)
- enter_look_for_trigger ();
- break;
-
- case LOOK_FOR_TRIGGER:
- if(found_trigger())
- enter_post_trigger();
- break;
-
- case POST_TRIGGER:
- d_post_trigger_count--;
- if(d_post_trigger_count <= 0) {
- write_output_records();
- enter_hold_off();
- }
- break;
-
- default:
- assert(0);
- }
-
- d_obi = incr_bi(d_obi, OUTPUT_RECORD_SIZE);
- }
- else {
- for(int i = 0; i < d_nchannels; i++) {
- for(int j = (OUTPUT_RECORD_SIZE*SCHART_MULT)-1; j > 0; j--) {
- d_buffer[i][j] = d_buffer[i][j-1];
- }
- d_buffer[i][0] = channel_data[i];
- }
- d_trigger_off = 0;
- write_output_records();
- }
- }
-
- /*
- * Functions called on state entry
- */
-
- void
- oscope_guts::enter_hold_off()
- {
- d_state = HOLD_OFF;
- d_hold_off_count = d_hold_off_count_init;
- }
-
- void
- oscope_guts::enter_look_for_trigger()
- {
- d_pre_trigger_count = 0;
- d_state = LOOK_FOR_TRIGGER;
- }
-
- void
- oscope_guts::enter_post_trigger()
- {
- d_state = POST_TRIGGER;
- d_post_trigger_count = d_post_trigger_count_init;
- //ensure that the trigger offset is no more than than half a sample
- if(d_trigger_off > .5)
- d_trigger_off -= 1;
- else
- d_post_trigger_count--;
- }
-
- // ----------------------------------------------------------------
- // returns true if trigger found
-
- bool
- oscope_guts::found_trigger()
- {
- int mx = d_trigger_mode == TRIG_MODE_STRIPCHART ? OUTPUT_RECORD_SIZE*SCHART_MULT :
- OUTPUT_RECORD_SIZE;
-
- float prev_sample = d_buffer[d_trigger_channel][decr_bi(d_obi, mx)];
- float new_sample = d_buffer[d_trigger_channel][d_obi];
-
- switch(d_trigger_mode) {
-
- case TRIG_MODE_AUTO: //too many samples without a trigger
- d_pre_trigger_count++;
- if(d_pre_trigger_count > OUTPUT_RECORD_SIZE/2)
- return true;
-
- case TRIG_MODE_NORM: //look for trigger
- switch(d_trigger_slope) {
-
- case TRIG_SLOPE_POS: //trigger point in pos slope?
- if(new_sample < d_trigger_level || prev_sample >= d_trigger_level)
- return false;
- break;
-
- case TRIG_SLOPE_NEG: //trigger point in neg slope?
- if(new_sample > d_trigger_level || prev_sample <= d_trigger_level)
- return false;
- break;
- }
-
- //calculate the trigger offset in % sample
- d_trigger_off = (d_trigger_level - prev_sample)/(new_sample - prev_sample);
- return true;
-
- case TRIG_MODE_FREE: //free run mode, always trigger
- d_trigger_off = 0;
- return true;
-
- default:
- assert(0);
- return false;
- }
- }
-
- // ----------------------------------------------------------------
- // write output records (duh!)
-
- void
- oscope_guts::write_output_records()
- {
- int mx;
-
- mx = d_trigger_mode == TRIG_MODE_STRIPCHART ?
- OUTPUT_RECORD_SIZE*SCHART_MULT : OUTPUT_RECORD_SIZE;
-
- // if the output queue if full, drop the data like its hot.
- if(d_msgq->full_p())
- return;
- // Build a message to hold the output records
- message::sptr msg =
- message::make(0, // msg type
- d_nchannels, // arg1 for other side
- mx, // arg2 for other side
- ((d_nchannels * mx) + 1) * sizeof(float)); // sizeof payload
-
- float *out = (float *)msg->msg(); // get pointer to raw message buffer
-
- for(int ch = 0; ch < d_nchannels; ch++) {
- // note that d_obi + 1 points at the oldest sample in the buffer
- for(int i = 0; i < mx; i++) {
- out[i] = d_buffer[ch][wrap_bi(d_obi + 1 + i, mx)];
- }
- out += mx;
- }
- //Set the last sample as the trigger offset:
- // The non gl scope sink will not look at this last sample.
- // The gl scope sink will use this last sample as an offset.
- out[0] = d_trigger_off;
- d_msgq->handle(msg); // send the msg
- }
-
- // ----------------------------------------------------------------
-
- bool
- oscope_guts::set_update_rate(double update_rate)
- {
- d_update_rate = std::min(std::max (1./10., update_rate), d_sample_rate);
- update_rate_or_decimation_changed();
- return true;
- }
-
- bool
- oscope_guts::set_decimation_count(int decimator_count)
- {
- decimator_count = std::max(1, decimator_count);
- d_decimator_count_init = decimator_count;
- update_rate_or_decimation_changed();
- return true;
- }
-
- bool
- oscope_guts::set_sample_rate(double sample_rate)
- {
- d_sample_rate = sample_rate;
- return set_update_rate(update_rate());
- }
-
- void
- oscope_guts::update_rate_or_decimation_changed()
- {
- d_hold_off_count_init =
- (int)rint(d_sample_rate / d_update_rate / d_decimator_count_init);
- }
-
- bool
- oscope_guts::set_trigger_channel(int channel)
- {
- if(channel >= 0 && channel < d_nchannels) {
- d_trigger_channel = channel;
- trigger_changed ();
- return true;
- }
-
- return false;
- }
-
- bool
- oscope_guts::set_trigger_mode(trigger_mode mode)
- {
- d_trigger_mode = mode;
- trigger_changed();
- return true;
- }
-
- bool
- oscope_guts::set_trigger_slope(trigger_slope slope)
- {
- d_trigger_slope = slope;
- trigger_changed();
- return true;
- }
-
- bool
- oscope_guts::set_trigger_level(double trigger_level)
- {
- d_trigger_level = trigger_level;
- trigger_changed();
- return true;
- }
-
- bool
- oscope_guts::set_trigger_level_auto()
- {
- // find the level 1/2 way between the min and the max
-
- float min_v = d_buffer[d_trigger_channel][0];
- float max_v = d_buffer[d_trigger_channel][0];
-
- for(int i = 1; i < OUTPUT_RECORD_SIZE; i++) {
- min_v = std::min (min_v, d_buffer[d_trigger_channel][i]);
- max_v = std::max (max_v, d_buffer[d_trigger_channel][i]);
- }
- return set_trigger_level((min_v + max_v) * 0.5);
- }
-
- bool
- oscope_guts::set_num_channels(int nchannels)
- {
- if(nchannels > 0 && nchannels <= MAX_CHANNELS) {
- d_nchannels = nchannels;
- return true;
- }
- return false;
- }
-
- void
- oscope_guts::trigger_changed()
- {
- enter_look_for_trigger();
- }
-
- // ACCESSORS
-
- int
- oscope_guts::num_channels() const
- {
- return d_nchannels;
- }
-
- double
- oscope_guts::sample_rate() const
- {
- return d_sample_rate;
- }
-
- double
- oscope_guts::update_rate() const
- {
- return d_update_rate;
- }
-
- int
- oscope_guts::get_decimation_count() const
- {
- return d_decimator_count_init;
- }
-
- int
- oscope_guts::get_trigger_channel() const
- {
- return d_trigger_channel;
- }
-
- trigger_mode
- oscope_guts::get_trigger_mode() const
- {
- return d_trigger_mode;
- }
-
- trigger_slope
- oscope_guts::get_trigger_slope() const
- {
- return d_trigger_slope;
- }
-
- double
- oscope_guts::get_trigger_level() const
- {
- return d_trigger_level;
- }
-
- int
- oscope_guts::get_samples_per_output_record() const
- {
- int mx;
-
- mx = OUTPUT_RECORD_SIZE;
- if(d_trigger_mode == TRIG_MODE_STRIPCHART) {
- mx = OUTPUT_RECORD_SIZE*SCHART_MULT;
- }
- return mx;
- }
-
- } /* namespace wxgui */
-} /* namespace gr */
diff --git a/gr-wxgui/lib/oscope_sink_f_impl.cc b/gr-wxgui/lib/oscope_sink_f_impl.cc
deleted file mode 100644
index 9993040ffd..0000000000
--- a/gr-wxgui/lib/oscope_sink_f_impl.cc
+++ /dev/null
@@ -1,83 +0,0 @@
-/* -*- c++ -*- */
-/*
- * Copyright 2003-2005,2010,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.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "oscope_sink_f_impl.h"
-#include <gnuradio/wxgui/oscope_sink_x.h>
-#include <gnuradio/wxgui/oscope_guts.h>
-#include <gnuradio/io_signature.h>
-
-namespace gr {
- namespace wxgui {
-
- oscope_sink_f::sptr
- oscope_sink_f::make(double sampling_rate, msg_queue::sptr msgq)
- {
- return gnuradio::get_initial_sptr
- (new oscope_sink_f_impl(sampling_rate, msgq));
- }
-
- oscope_sink_f_impl::oscope_sink_f_impl(double sampling_rate, msg_queue::sptr msgq)
- : oscope_sink_x("oscope_sink_f",
- io_signature::make(1, oscope_guts::MAX_CHANNELS,
- sizeof(float)),
- sampling_rate),
- d_msgq(msgq)
- {
- d_guts = new oscope_guts(d_sampling_rate, d_msgq);
- }
-
- oscope_sink_f_impl::~oscope_sink_f_impl()
- {
- }
-
- bool
- oscope_sink_f_impl::check_topology(int ninputs, int noutputs)
- {
- return d_guts->set_num_channels(ninputs);
- }
-
- int
- oscope_sink_f_impl::work(int noutput_items,
- gr_vector_const_void_star &input_items,
- gr_vector_void_star &output_items)
- {
- int ni = input_items.size();
- float tmp[oscope_guts::MAX_CHANNELS];
-
- for(int i = 0; i < noutput_items; i++) {
-
- // FIXME for now, copy the data. Fix later if reqd
- for(int ch = 0; ch < ni; ch++)
- tmp[ch] = ((const float*)input_items[ch])[i];
-
- d_guts->process_sample(tmp);
- }
-
- return noutput_items;
- }
-
- } /* namespace wxgui */
-} /* namespace gr */
diff --git a/gr-wxgui/lib/oscope_sink_f_impl.h b/gr-wxgui/lib/oscope_sink_f_impl.h
deleted file mode 100644
index 81688f53a5..0000000000
--- a/gr-wxgui/lib/oscope_sink_f_impl.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/* -*- c++ -*- */
-/*
- * Copyright 2003-2005,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_GR_OSCOPE_SINK_F_IMPL_H
-#define INCLUDED_GR_OSCOPE_SINK_F_IMPL_H
-
-#include <gnuradio/wxgui/oscope_sink_f.h>
-
-namespace gr {
- namespace wxgui {
-
- class oscope_sink_f_impl : public oscope_sink_f
- {
- private:
- msg_queue::sptr d_msgq;
-
- public:
- oscope_sink_f_impl(double sampling_rate, msg_queue::sptr msgq);
- ~oscope_sink_f_impl();
-
- bool check_topology(int ninputs, int noutputs);
-
- int work(int noutput_items,
- gr_vector_const_void_star &input_items,
- gr_vector_void_star &output_items);
- };
-
- } /* namespace wxgui */
-} /* namespace gr */
-
-#endif /* INCLUDED_GR_OSCOPE_SINK_F_IMPL_H */
-
diff --git a/gr-wxgui/lib/oscope_sink_x.cc b/gr-wxgui/lib/oscope_sink_x.cc
deleted file mode 100644
index ac865318ec..0000000000
--- a/gr-wxgui/lib/oscope_sink_x.cc
+++ /dev/null
@@ -1,161 +0,0 @@
-/* -*- c++ -*- */
-/*
- * Copyright 2003,2004,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.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <gnuradio/wxgui/oscope_sink_x.h>
-#include <gnuradio/wxgui/oscope_guts.h>
-#include <gnuradio/io_signature.h>
-
-namespace gr {
- namespace wxgui {
-
- oscope_sink_x::oscope_sink_x(const std::string name,
- gr::io_signature::sptr input_sig,
- double sampling_rate)
- : sync_block(name, input_sig,
- io_signature::make(0, 0, 0)),
- d_sampling_rate(sampling_rate), d_guts(0)
- {
- }
-
- oscope_sink_x::~oscope_sink_x()
- {
- delete d_guts;
- }
-
- // ----------------------------------------------------------------
-
- bool
- oscope_sink_x::set_update_rate(double update_rate)
- {
- return d_guts->set_update_rate(update_rate);
- }
-
- bool
- oscope_sink_x::set_decimation_count(int decimation_count)
- {
- return d_guts->set_decimation_count(decimation_count);
- }
-
- bool
- oscope_sink_x::set_trigger_channel(int channel)
- {
- return d_guts->set_trigger_channel(channel);
- }
-
- bool
- oscope_sink_x::set_trigger_mode(trigger_mode mode)
- {
- return d_guts->set_trigger_mode(mode);
- }
-
- bool
- oscope_sink_x::set_trigger_slope(trigger_slope slope)
- {
- return d_guts->set_trigger_slope(slope);
- }
-
- bool
- oscope_sink_x::set_trigger_level(double trigger_level)
- {
- return d_guts->set_trigger_level(trigger_level);
- }
-
- bool
- oscope_sink_x::set_trigger_level_auto()
- {
- return d_guts->set_trigger_level_auto();
- }
-
- bool
- oscope_sink_x::set_sample_rate(double sample_rate)
- {
- return d_guts->set_sample_rate(sample_rate);
- }
-
- bool
- oscope_sink_x::set_num_channels(int nchannels)
- {
- return d_guts->set_num_channels(nchannels);
- }
-
- // ACCESSORS
-
- int
- oscope_sink_x::num_channels() const
- {
- return d_guts->num_channels();
- }
-
- double
- oscope_sink_x::sample_rate() const
- {
- return d_guts->sample_rate();
- }
-
- double
- oscope_sink_x::update_rate() const
- {
- return d_guts->update_rate();
- }
-
- int
- oscope_sink_x::get_decimation_count() const
- {
- return d_guts->get_decimation_count();
- }
-
- int
- oscope_sink_x::get_trigger_channel() const
- {
- return d_guts->get_trigger_channel();
- }
-
- trigger_mode
- oscope_sink_x::get_trigger_mode() const
- {
- return d_guts->get_trigger_mode();
- }
-
- trigger_slope
- oscope_sink_x::get_trigger_slope() const
- {
- return d_guts->get_trigger_slope();
- }
-
- double
- oscope_sink_x::get_trigger_level() const
- {
- return d_guts->get_trigger_level();
- }
-
- int
- oscope_sink_x::get_samples_per_output_record() const
- {
- return d_guts->get_samples_per_output_record();
- }
-
- } /* namespace wxgui */
-} /* namespace gr */
diff --git a/gr-wxgui/python/wxgui/CMakeLists.txt b/gr-wxgui/python/wxgui/CMakeLists.txt
deleted file mode 100644
index a06cba70b7..0000000000
--- a/gr-wxgui/python/wxgui/CMakeLists.txt
+++ /dev/null
@@ -1,85 +0,0 @@
-# Copyright 2011 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-
-########################################################################
-include(GrPython)
-
-########################################################################
-# Install python files into wxgui module
-########################################################################
-GR_PYTHON_INSTALL(
- FILES
- __init__.py
- common.py
- constants.py
- constsink_gl.py
- const_window.py
- form.py
- fftsink2.py
- fftsink_nongl.py
- fftsink_gl.py
- fft_window.py
- gui.py
- histosink_gl.py
- histo_window.py
- numbersink2.py
- number_window.py
- plot.py
- powermate.py
- pubsub.py
- scopesink2.py
- scopesink_nongl.py
- scopesink_gl.py
- scope_window.py
- termsink.py
- waterfallsink2.py
- waterfallsink_nongl.py
- waterfallsink_gl.py
- waterfall_window.py
- slider.py
- stdgui2.py
- DESTINATION ${GR_PYTHON_DIR}/gnuradio/wxgui
-)
-
-########################################################################
-# Install python files into wxgui forms sub-module
-########################################################################
-GR_PYTHON_INSTALL(
- FILES
- forms/__init__.py
- forms/forms.py
- forms/converters.py
- DESTINATION ${GR_PYTHON_DIR}/gnuradio/wxgui/forms
-)
-
-########################################################################
-# Install python files into wxgui plotter sub-module
-########################################################################
-GR_PYTHON_INSTALL(
- FILES
- plotter/__init__.py
- plotter/bar_plotter.py
- plotter/channel_plotter.py
- plotter/common.py
- plotter/gltext.py
- plotter/grid_plotter_base.py
- plotter/plotter_base.py
- plotter/waterfall_plotter.py
- DESTINATION ${GR_PYTHON_DIR}/gnuradio/wxgui/plotter
-)
diff --git a/gr-wxgui/python/wxgui/__init__.py b/gr-wxgui/python/wxgui/__init__.py
deleted file mode 100644
index 1c707434c0..0000000000
--- a/gr-wxgui/python/wxgui/__init__.py
+++ /dev/null
@@ -1,32 +0,0 @@
-#
-# Copyright 2011 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-#
-
-'''
-Provides a GUI interface using the Wx backend.
-'''
-
-try:
- from wxgui_swig import *
-except ImportError:
- import os
- dirname, filename = os.path.split(os.path.abspath(__file__))
- __path__.append(os.path.join(dirname, "..", "..", "swig"))
- from wxgui_swig import *
diff --git a/gr-wxgui/python/wxgui/common.py b/gr-wxgui/python/wxgui/common.py
deleted file mode 100644
index de2648466b..0000000000
--- a/gr-wxgui/python/wxgui/common.py
+++ /dev/null
@@ -1,296 +0,0 @@
-#
-# Copyright 2008, 2009 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-#
-
-##################################################
-# conditional disconnections of wx flow graph
-##################################################
-import wx
-from gnuradio import gr
-from gnuradio import blocks
-
-RUN_ALWAYS = gr.prefs().get_bool('wxgui', 'run_always', False)
-
-
-class wxgui_hb(object):
- """
- The wxgui hier block helper/wrapper class:
- A hier block should inherit from this class to make use of the wxgui connect method.
- To use, call wxgui_connect in place of regular connect; self.win must be defined.
- The implementation will conditionally enable the copy block after the source (self).
- This condition depends on weather or not the window is visible with the parent notebooks.
- This condition will be re-checked on every ui update event.
- """
-
- def wxgui_connect(self, *points):
- """
- Use wxgui connect when the first point is the self source of the hb.
- The win property of this object should be set to the wx window.
- When this method tries to connect self to the next point,
- it will conditionally make this connection based on the visibility state.
- All other points will be connected normally.
- """
- try:
- assert points[0] == self or points[0][0] == self
- copy = blocks.copy(self.input_signature().sizeof_stream_item(0))
- handler = self._handler_factory(copy.set_enabled)
- if not RUN_ALWAYS:
- handler(False) # initially disable the copy block
- else:
- handler(True) # initially enable the copy block
- self._bind_to_visible_event(win=self.win, handler=handler)
- points = list(points)
- points.insert(1, copy) # insert the copy block into the chain
- except (AssertionError, IndexError): pass
- self.connect(*points) # actually connect the blocks
-
- @staticmethod
- def _handler_factory(handler):
- """
- Create a function that will cache the visibility flag,
- and only call the handler when that flag changes.
-
- Args:
- handler: the function to call on a change
-
- Returns:
- a function of 1 argument
- """
- cache = [None]
-
- def callback(visible):
- if cache[0] == visible: return
- cache[0] = visible
- # print visible, handler
- if not RUN_ALWAYS:
- handler(visible)
- else:
- handler(True)
- return callback
-
- @staticmethod
- def _bind_to_visible_event(win, handler):
- """
- Bind a handler to a window when its visibility changes.
- Specifically, call the handler when the window visibility changes.
- This condition is checked on every update ui event.
-
- Args:
- win: the wx window
- handler: a function of 1 param
- """
- # is the window visible in the hierarchy
- def is_wx_window_visible(my_win):
- while True:
- parent = my_win.GetParent()
- if not parent: return True # reached the top of the hierarchy
- # if we are hidden, then finish, otherwise keep traversing up
- if isinstance(parent, wx.Notebook) and parent.GetCurrentPage() != my_win: return False
- my_win = parent
- # call the handler, the arg is shown or not
- def handler_factory(my_win, my_handler):
- def callback(evt):
- my_handler(is_wx_window_visible(my_win))
- evt.Skip() # skip so all bound handlers are called
- return callback
- handler = handler_factory(win, handler)
- # bind the handler to all the parent notebooks
- win.Bind(wx.EVT_UPDATE_UI, handler)
-
-##################################################
-# Helpful Functions
-##################################################
-
-# A macro to apply an index to a key
-index_key = lambda key, i: "%s_%d" % (key, i+1)
-
-
-def _register_access_method(destination, controller, key):
- """
- Helper function for register access methods.
- This helper creates distinct set and get methods for each key
- and adds them to the destination object.
- """
- def set(value): controller[key] = value
- setattr(destination, 'set_'+key, set)
- def get(): return controller[key]
- setattr(destination, 'get_'+key, get)
-
-
-def register_access_methods(destination, controller):
- """
- Register setter and getter functions in the destination object for all keys in the controller.
-
- Args:
- destination: the object to get new setter and getter methods
- controller: the pubsub controller
- """
- for key in controller.keys(): _register_access_method(destination, controller, key)
-
-##################################################
-# Input Watcher Thread
-##################################################
-from gnuradio import gru
-
-
-class input_watcher(gru.msgq_runner):
- """
- Input watcher thread runs forever.
- Read messages from the message queue.
- Forward messages to the message handler.
- """
- def __init__ (self, msgq, controller, msg_key, arg1_key='', arg2_key=''):
- self._controller = controller
- self._msg_key = msg_key
- self._arg1_key = arg1_key
- self._arg2_key = arg2_key
- gru.msgq_runner.__init__(self, msgq, self.handle_msg)
-
- def handle_msg(self, msg):
- if self._arg1_key: self._controller[self._arg1_key] = msg.arg1()
- if self._arg2_key: self._controller[self._arg2_key] = msg.arg2()
- self._controller[self._msg_key] = msg.to_string()
-
-
-##################################################
-# Shared Functions
-##################################################
-import numpy
-import math
-
-
-def get_exp(num):
- """
- Get the exponent of the number in base 10.
-
- Args:
- num: the floating point number
-
- Returns:
- the exponent as an integer
- """
- if num == 0: return 0
- return int(math.floor(math.log10(abs(num))))
-
-
-def get_clean_num(num):
- """
- Get the closest clean number match to num with bases 1, 2, 5.
-
- Args:
- num: the number
-
- Returns:
- the closest number
- """
- if num == 0: return 0
- sign = num > 0 and 1 or -1
- exp = get_exp(num)
- nums = numpy.array((1, 2, 5, 10))*(10**exp)
- return sign*nums[numpy.argmin(numpy.abs(nums - abs(num)))]
-
-
-def get_clean_incr(num):
- """
- Get the next higher clean number with bases 1, 2, 5.
-
- Args:
- num: the number
-
- Returns:
- the next higher number
- """
- num = get_clean_num(num)
- exp = get_exp(num)
- coeff = int(round(num/10**exp))
- return {
- -5: -2,
- -2: -1,
- -1: -.5,
- 1: 2,
- 2: 5,
- 5: 10,
- }[coeff]*(10**exp)
-
-
-def get_clean_decr(num):
- """
- Get the next lower clean number with bases 1, 2, 5.
-
- Args:
- num: the number
-
- Returns:
- the next lower number
- """
- num = get_clean_num(num)
- exp = get_exp(num)
- coeff = int(round(num/10**exp))
- return {
- -5: -10,
- -2: -5,
- -1: -2,
- 1: .5,
- 2: 1,
- 5: 2,
- }[coeff]*(10**exp)
-
-
-def get_min_max(samples):
- """
- Get the minimum and maximum bounds for an array of samples.
-
- Args:
- samples: the array of real values
-
- Returns:
- a tuple of min, max
- """
- factor = 2.0
- mean = numpy.average(samples)
- std = numpy.std(samples)
- fft = numpy.abs(numpy.fft.fft(samples - mean))
- envelope = 2*numpy.max(fft)/len(samples)
- ampl = max(std, envelope) or 0.1
- return mean - factor*ampl, mean + factor*ampl
-
-
-def get_min_max_fft(fft_samps):
- """
- Get the minimum and maximum bounds for an array of fft samples.
-
- Args:
- samples: the array of real values
-
- Returns:
- a tuple of min, max
- """
- # get the peak level (max of the samples)
- peak_level = numpy.max(fft_samps)
- # separate noise samples
- noise_samps = numpy.sort(fft_samps)[:len(fft_samps)/2]
- # get the noise floor
- noise_floor = numpy.average(noise_samps)
- # get the noise deviation
- noise_dev = numpy.std(noise_samps)
- # determine the maximum and minimum levels
- max_level = peak_level
- min_level = noise_floor - abs(2*noise_dev)
- return min_level, max_level
diff --git a/gr-wxgui/python/wxgui/const_window.py b/gr-wxgui/python/wxgui/const_window.py
deleted file mode 100644
index 2c499b54bd..0000000000
--- a/gr-wxgui/python/wxgui/const_window.py
+++ /dev/null
@@ -1,211 +0,0 @@
-#
-# Copyright 2008 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-#
-
-##################################################
-# Imports
-##################################################
-import plotter
-import common
-import wx
-import numpy
-import math
-import pubsub
-from constants import *
-from gnuradio import gr #for gr.prefs
-import forms
-
-##################################################
-# Constants
-##################################################
-SLIDER_STEPS = 200
-LOOP_BW_MIN_EXP, LOOP_BW_MAX_EXP = -6, 0.0
-GAIN_MU_MIN_EXP, GAIN_MU_MAX_EXP = -6, -0.301
-DEFAULT_FRAME_RATE = gr.prefs().get_long('wxgui', 'const_rate', 5)
-DEFAULT_WIN_SIZE = (500, 400)
-DEFAULT_CONST_SIZE = gr.prefs().get_long('wxgui', 'const_size', 2048)
-CONST_PLOT_COLOR_SPEC = (0, 0, 1)
-MARKER_TYPES = (
- ('Dot Small', 1.0),
- ('Dot Medium', 2.0),
- ('Dot Large', 3.0),
- ('Line Link', None),
-)
-DEFAULT_MARKER_TYPE = 2.0
-
-##################################################
-# Constellation window control panel
-##################################################
-class control_panel(wx.Panel):
- """
- A control panel with wx widgits to control the plotter.
- """
- def __init__(self, parent):
- """
- Create a new control panel.
-
- Args:
- parent: the wx parent window
- """
- self.parent = parent
- wx.Panel.__init__(self, parent, style=wx.SUNKEN_BORDER)
- parent[SHOW_CONTROL_PANEL_KEY] = True
- parent.subscribe(SHOW_CONTROL_PANEL_KEY, self.Show)
- control_box = forms.static_box_sizer(
- parent=self, label='Options',
- bold=True, orient=wx.VERTICAL,
- )
- #loop_bw
- control_box.AddStretchSpacer()
- forms.text_box(
- sizer=control_box, parent=self, label='Loop Bandwidth',
- converter=forms.float_converter(),
- ps=parent, key=LOOP_BW_KEY,
- )
- forms.log_slider(
- sizer=control_box, parent=self,
- min_exp=LOOP_BW_MIN_EXP,
- max_exp=LOOP_BW_MAX_EXP,
- num_steps=SLIDER_STEPS,
- ps=parent, key=LOOP_BW_KEY,
- )
- #gain_mu
- control_box.AddStretchSpacer()
- forms.text_box(
- sizer=control_box, parent=self, label='Gain Mu',
- converter=forms.float_converter(),
- ps=parent, key=GAIN_MU_KEY,
- )
- forms.log_slider(
- sizer=control_box, parent=self,
- min_exp=GAIN_MU_MIN_EXP,
- max_exp=GAIN_MU_MAX_EXP,
- num_steps=SLIDER_STEPS,
- ps=parent, key=GAIN_MU_KEY,
- )
- #marker
- control_box.AddStretchSpacer()
- forms.drop_down(
- sizer=control_box, parent=self,
- ps=parent, key=MARKER_KEY, label='Marker',
- choices=map(lambda x: x[1], MARKER_TYPES),
- labels=map(lambda x: x[0], MARKER_TYPES),
- )
- #run/stop
- control_box.AddStretchSpacer()
- forms.toggle_button(
- sizer=control_box, parent=self,
- true_label='Stop', false_label='Run',
- ps=parent, key=RUNNING_KEY,
- )
- #set sizer
- self.SetSizerAndFit(control_box)
-
-##################################################
-# Constellation window with plotter and control panel
-##################################################
-class const_window(wx.Panel, pubsub.pubsub):
- def __init__(
- self,
- parent,
- controller,
- size,
- title,
- msg_key,
- loop_bw_key,
- gain_mu_key,
- gain_omega_key,
- omega_key,
- sample_rate_key,
- ):
- pubsub.pubsub.__init__(self)
- #proxy the keys
- self.proxy(MSG_KEY, controller, msg_key)
- self.proxy(LOOP_BW_KEY, controller, loop_bw_key)
- self.proxy(GAIN_MU_KEY, controller, gain_mu_key)
- self.proxy(GAIN_OMEGA_KEY, controller, gain_omega_key)
- self.proxy(OMEGA_KEY, controller, omega_key)
- self.proxy(SAMPLE_RATE_KEY, controller, sample_rate_key)
- #initialize values
- self[RUNNING_KEY] = True
- self[X_DIVS_KEY] = 8
- self[Y_DIVS_KEY] = 8
- self[MARKER_KEY] = DEFAULT_MARKER_TYPE
- #init panel and plot
- wx.Panel.__init__(self, parent, style=wx.SIMPLE_BORDER)
- self.plotter = plotter.channel_plotter(self)
- self.plotter.SetSize(wx.Size(*size))
- self.plotter.SetSizeHints(*size)
- self.plotter.set_title(title)
- self.plotter.set_x_label('Inphase')
- self.plotter.set_y_label('Quadrature')
- self.plotter.enable_point_label(True)
- self.plotter.enable_grid_lines(True)
- #setup the box with plot and controls
- self.control_panel = control_panel(self)
- main_box = wx.BoxSizer(wx.HORIZONTAL)
- main_box.Add(self.plotter, 1, wx.EXPAND)
- main_box.Add(self.control_panel, 0, wx.EXPAND)
- self.SetSizerAndFit(main_box)
- #alpha and gain mu 2nd orders
- def set_gain_omega(gain_mu): self[GAIN_OMEGA_KEY] = .25*gain_mu**2
- self.subscribe(GAIN_MU_KEY, set_gain_omega)
- #register events
- self.subscribe(MSG_KEY, self.handle_msg)
- self.subscribe(X_DIVS_KEY, self.update_grid)
- self.subscribe(Y_DIVS_KEY, self.update_grid)
- #initial update
- self.update_grid()
-
- def handle_msg(self, msg):
- """
- Plot the samples onto the complex grid.
-
- Args:
- msg: the array of complex samples
- """
- if not self[RUNNING_KEY]: return
- #convert to complex floating point numbers
- samples = numpy.fromstring(msg, numpy.complex64)
- real = numpy.real(samples)
- imag = numpy.imag(samples)
- #plot
- self.plotter.set_waveform(
- channel=0,
- samples=(real, imag),
- color_spec=CONST_PLOT_COLOR_SPEC,
- marker=self[MARKER_KEY],
- )
- #update the plotter
- self.plotter.update()
-
- def update_grid(self):
- #update the x axis
- x_max = 2.0
- self.plotter.set_x_grid(-x_max, x_max, common.get_clean_num(2.0*x_max/self[X_DIVS_KEY]))
- #update the y axis
- y_max = 2.0
- self.plotter.set_y_grid(-y_max, y_max, common.get_clean_num(2.0*y_max/self[Y_DIVS_KEY]))
- #update plotter
- self.plotter.update()
-
-
-
-
diff --git a/gr-wxgui/python/wxgui/constants.py b/gr-wxgui/python/wxgui/constants.py
deleted file mode 100644
index 08cc6a6343..0000000000
--- a/gr-wxgui/python/wxgui/constants.py
+++ /dev/null
@@ -1,76 +0,0 @@
-#
-# Copyright 2008,2010 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-#
-
-##################################################
-# Controller Keys
-##################################################
-AC_COUPLE_KEY = 'ac_couple'
-ALPHA_KEY = 'alpha'
-AUTORANGE_KEY = 'autorange'
-AVERAGE_KEY = 'average'
-AVG_ALPHA_KEY = 'avg_alpha'
-USE_PERSISTENCE_KEY = 'use_persistence'
-PERSIST_ALPHA_KEY = 'persist_alpha'
-BASEBAND_FREQ_KEY = 'baseband_freq'
-BETA_KEY = 'beta'
-COLOR_MODE_KEY = 'color_mode'
-DECIMATION_KEY = 'decimation'
-DYNAMIC_RANGE_KEY = 'dynamic_range'
-FRAME_RATE_KEY = 'frame_rate'
-GAIN_MU_KEY = 'gain_mu'
-GAIN_OMEGA_KEY = 'gain_omega'
-MARKER_KEY = 'marker'
-XY_MARKER_KEY = 'xy_marker'
-MSG_KEY = 'msg'
-NUM_LINES_KEY = 'num_lines'
-OMEGA_KEY = 'omega'
-PEAK_HOLD_KEY = 'peak_hold'
-TRACE_STORE_KEY = 'trace_store'
-TRACE_SHOW_KEY = 'trace_show'
-REF_LEVEL_KEY = 'ref_level'
-RUNNING_KEY = 'running'
-SAMPLE_RATE_KEY = 'sample_rate'
-TRIGGER_CHANNEL_KEY = 'trigger_channel'
-TRIGGER_LEVEL_KEY = 'trigger_level'
-TRIGGER_MODE_KEY = 'trigger_mode'
-TRIGGER_SLOPE_KEY = 'trigger_slope'
-TRIGGER_SHOW_KEY = 'trigger_show'
-XY_MODE_KEY = 'xy_mode'
-X_CHANNEL_KEY = 'x_channel'
-Y_CHANNEL_KEY = 'y_channel'
-T_FRAC_OFF_KEY = 't_frac_off'
-T_DIVS_KEY = 't_divs'
-T_OFF_KEY = 't_off'
-T_PER_DIV_KEY = 't_per_div'
-X_DIVS_KEY = 'x_divs'
-X_OFF_KEY = 'x_off'
-X_PER_DIV_KEY = 'x_per_div'
-Y_DIVS_KEY = 'y_divs'
-Y_OFF_KEY = 'y_off'
-Y_PER_DIV_KEY = 'y_per_div'
-Y_AXIS_LABEL = 'y_axis_label'
-MAXIMUM_KEY = 'maximum'
-MINIMUM_KEY = 'minimum'
-NUM_BINS_KEY = 'num_bins'
-FRAME_SIZE_KEY = 'frame_size'
-CHANNEL_OPTIONS_KEY = 'channel_options'
-SHOW_CONTROL_PANEL_KEY = 'show_control_panel'
-LOOP_BW_KEY = 'loop_bw'
diff --git a/gr-wxgui/python/wxgui/constsink_gl.py b/gr-wxgui/python/wxgui/constsink_gl.py
deleted file mode 100644
index dea76ea753..0000000000
--- a/gr-wxgui/python/wxgui/constsink_gl.py
+++ /dev/null
@@ -1,142 +0,0 @@
-#
-# Copyright 2008 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-#
-
-##################################################
-# Imports
-##################################################
-import const_window
-import common
-from gnuradio import gr
-from gnuradio import blocks
-from gnuradio import analog
-from pubsub import pubsub
-from constants import *
-import sys
-try:
- from gnuradio import digital
-except ImportError:
- sys.stderr.write("Error: could not import gnuradio.digital, please install gr-digitial.\n")
- sys.exit(1)
-
-##################################################
-# Constellation sink block (wrapper for old wxgui)
-##################################################
-class const_sink_c(gr.hier_block2, common.wxgui_hb):
- """
- A constellation block with a gui window.
- """
-
- def __init__(
- self,
- parent,
- title='',
- sample_rate=1,
- size=const_window.DEFAULT_WIN_SIZE,
- frame_rate=const_window.DEFAULT_FRAME_RATE,
- const_size=const_window.DEFAULT_CONST_SIZE,
- #mpsk recv params
- M=4,
- theta=0,
- loop_bw=6.28/100.0,
- fmax=0.06,
- mu=0.5,
- gain_mu=0.005,
- symbol_rate=1,
- omega_limit=0.005,
- ):
- #init
- gr.hier_block2.__init__(
- self,
- "const_sink",
- gr.io_signature(1, 1, gr.sizeof_gr_complex),
- gr.io_signature(0, 0, 0),
- )
- #blocks
- sd = blocks.stream_to_vector_decimator(
- item_size=gr.sizeof_gr_complex,
- sample_rate=sample_rate,
- vec_rate=frame_rate,
- vec_len=const_size,
- )
- fmin = -fmax
- gain_omega = .25*gain_mu**2 #redundant, will be updated
- omega = 1 #set_sample_rate will update this
- # Costas frequency/phase recovery loop
- # Critically damped 2nd order PLL
- self._costas = digital.costas_loop_cc(loop_bw, M)
- # Timing recovery loop
- # Critically damped 2nd order DLL
- self._retime = digital.clock_recovery_mm_cc(omega,
- gain_omega,
- mu, gain_mu,
- omega_limit)
- #sync = gr.mpsk_receiver_cc(
- # M, #psk order
- # theta,
- # alpha,
- # beta,
- # fmin,
- # fmax,
- # mu,
- # gain_mu,
- # omega,
- # gain_omega,
- # omega_limit,
- #)
- agc = analog.feedforward_agc_cc(16, 1)
- msgq = gr.msg_queue(2)
- sink = blocks.message_sink(gr.sizeof_gr_complex*const_size, msgq, True)
- #controller
- def setter(p, k, x): p[k] = x
- self.controller = pubsub()
- self.controller.subscribe(LOOP_BW_KEY, self._costas.set_loop_bandwidth)
- self.controller.publish(LOOP_BW_KEY, self._costas.get_loop_bandwidth)
- self.controller.subscribe(GAIN_MU_KEY, self._retime.set_gain_mu)
- self.controller.publish(GAIN_MU_KEY, self._retime.gain_mu)
- self.controller.subscribe(OMEGA_KEY, self._retime.set_omega)
- self.controller.publish(OMEGA_KEY, self._retime.omega)
- self.controller.subscribe(GAIN_OMEGA_KEY, self._retime.set_gain_omega)
- self.controller.publish(GAIN_OMEGA_KEY, self._retime.gain_omega)
- self.controller.subscribe(SAMPLE_RATE_KEY, sd.set_sample_rate)
- self.controller.subscribe(SAMPLE_RATE_KEY, lambda x: setter(self.controller, OMEGA_KEY, float(x)/symbol_rate))
- self.controller.publish(SAMPLE_RATE_KEY, sd.sample_rate)
- #initial update
- self.controller[SAMPLE_RATE_KEY] = sample_rate
- #start input watcher
- common.input_watcher(msgq, self.controller, MSG_KEY)
- #create window
- self.win = const_window.const_window(
- parent=parent,
- controller=self.controller,
- size=size,
- title=title,
- msg_key=MSG_KEY,
- loop_bw_key=LOOP_BW_KEY,
- gain_mu_key=GAIN_MU_KEY,
- gain_omega_key=GAIN_OMEGA_KEY,
- omega_key=OMEGA_KEY,
- sample_rate_key=SAMPLE_RATE_KEY,
- )
- common.register_access_methods(self, self.win)
- #connect
- self.wxgui_connect(self, self._costas, self._retime, agc, sd, sink)
-
-
diff --git a/gr-wxgui/python/wxgui/fft_window.py b/gr-wxgui/python/wxgui/fft_window.py
deleted file mode 100644
index 024200556e..0000000000
--- a/gr-wxgui/python/wxgui/fft_window.py
+++ /dev/null
@@ -1,412 +0,0 @@
-#
-# Copyright 2008, 2009, 2010 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-#
-
-##################################################
-# Imports
-##################################################
-import plotter
-import common
-import wx
-import numpy
-import math
-import pubsub
-from constants import *
-from gnuradio import gr #for gr.prefs
-import forms
-
-##################################################
-# Constants
-##################################################
-SLIDER_STEPS = 100
-AVG_ALPHA_MIN_EXP, AVG_ALPHA_MAX_EXP = -3, 0
-PERSIST_ALPHA_MIN_EXP, PERSIST_ALPHA_MAX_EXP = -2, 0
-DEFAULT_WIN_SIZE = (600, 300)
-DEFAULT_FRAME_RATE = gr.prefs().get_long('wxgui', 'fft_rate', 30)
-DB_DIV_MIN, DB_DIV_MAX = 1, 20
-FFT_PLOT_COLOR_SPEC = (0.3, 0.3, 1.0)
-PEAK_VALS_COLOR_SPEC = (0.0, 0.8, 0.0)
-EMPTY_TRACE = list()
-TRACES = ('A', 'B')
-TRACES_COLOR_SPEC = {
- 'A': (1.0, 0.0, 0.0),
- 'B': (0.8, 0.0, 0.8),
-}
-
-##################################################
-# FFT window control panel
-##################################################
-class control_panel(wx.Panel):
- """
- A control panel with wx widgits to control the plotter and fft block chain.
- """
-
- def __init__(self, parent):
- """
- Create a new control panel.
-
- Args:
- parent: the wx parent window
- """
- self.parent = parent
- wx.Panel.__init__(self, parent, style=wx.SUNKEN_BORDER)
- parent[SHOW_CONTROL_PANEL_KEY] = True
- parent.subscribe(SHOW_CONTROL_PANEL_KEY, self.Show)
- control_box = wx.BoxSizer(wx.VERTICAL)
- control_box.AddStretchSpacer()
- #checkboxes for average and peak hold
- options_box = forms.static_box_sizer(
- parent=self, sizer=control_box, label='Trace Options',
- bold=True, orient=wx.VERTICAL,
- )
- forms.check_box(
- sizer=options_box, parent=self, label='Peak Hold',
- ps=parent, key=PEAK_HOLD_KEY,
- )
- forms.check_box(
- sizer=options_box, parent=self, label='Average',
- ps=parent, key=AVERAGE_KEY,
- )
- #static text and slider for averaging
- avg_alpha_text = forms.static_text(
- sizer=options_box, parent=self, label='Avg Alpha',
- converter=forms.float_converter(lambda x: '%.4f'%x),
- ps=parent, key=AVG_ALPHA_KEY, width=50,
- )
- avg_alpha_slider = forms.log_slider(
- sizer=options_box, parent=self,
- min_exp=AVG_ALPHA_MIN_EXP,
- max_exp=AVG_ALPHA_MAX_EXP,
- num_steps=SLIDER_STEPS,
- ps=parent, key=AVG_ALPHA_KEY,
- )
- for widget in (avg_alpha_text, avg_alpha_slider):
- parent.subscribe(AVERAGE_KEY, widget.Enable)
- widget.Enable(parent[AVERAGE_KEY])
- parent.subscribe(AVERAGE_KEY, widget.ShowItems)
- #allways show initially, so room is reserved for them
- widget.ShowItems(True) # (parent[AVERAGE_KEY])
-
- parent.subscribe(AVERAGE_KEY, self._update_layout)
-
- forms.check_box(
- sizer=options_box, parent=self, label='Persistence',
- ps=parent, key=USE_PERSISTENCE_KEY,
- )
- #static text and slider for persist alpha
- persist_alpha_text = forms.static_text(
- sizer=options_box, parent=self, label='Persist Alpha',
- converter=forms.float_converter(lambda x: '%.4f'%x),
- ps=parent, key=PERSIST_ALPHA_KEY, width=50,
- )
- persist_alpha_slider = forms.log_slider(
- sizer=options_box, parent=self,
- min_exp=PERSIST_ALPHA_MIN_EXP,
- max_exp=PERSIST_ALPHA_MAX_EXP,
- num_steps=SLIDER_STEPS,
- ps=parent, key=PERSIST_ALPHA_KEY,
- )
- for widget in (persist_alpha_text, persist_alpha_slider):
- parent.subscribe(USE_PERSISTENCE_KEY, widget.Enable)
- widget.Enable(parent[USE_PERSISTENCE_KEY])
- parent.subscribe(USE_PERSISTENCE_KEY, widget.ShowItems)
- #allways show initially, so room is reserved for them
- widget.ShowItems(True) # (parent[USE_PERSISTENCE_KEY])
-
- parent.subscribe(USE_PERSISTENCE_KEY, self._update_layout)
-
- #trace menu
- for trace in TRACES:
- trace_box = wx.BoxSizer(wx.HORIZONTAL)
- options_box.Add(trace_box, 0, wx.EXPAND)
- forms.check_box(
- sizer=trace_box, parent=self,
- ps=parent, key=TRACE_SHOW_KEY+trace,
- label='Trace %s'%trace,
- )
- trace_box.AddSpacer(10)
- forms.single_button(
- sizer=trace_box, parent=self,
- ps=parent, key=TRACE_STORE_KEY+trace,
- label='Store', style=wx.BU_EXACTFIT,
- )
- trace_box.AddSpacer(10)
- #radio buttons for div size
- control_box.AddStretchSpacer()
- y_ctrl_box = forms.static_box_sizer(
- parent=self, sizer=control_box, label='Axis Options',
- bold=True, orient=wx.VERTICAL,
- )
- forms.incr_decr_buttons(
- parent=self, sizer=y_ctrl_box, label='dB/Div',
- on_incr=self._on_incr_db_div, on_decr=self._on_decr_db_div,
- )
- #ref lvl buttons
- forms.incr_decr_buttons(
- parent=self, sizer=y_ctrl_box, label='Ref Level',
- on_incr=self._on_incr_ref_level, on_decr=self._on_decr_ref_level,
- )
- y_ctrl_box.AddSpacer(2)
- #autoscale
- forms.single_button(
- sizer=y_ctrl_box, parent=self, label='Autoscale',
- callback=self.parent.autoscale,
- )
- #run/stop
- control_box.AddStretchSpacer()
- forms.toggle_button(
- sizer=control_box, parent=self,
- true_label='Stop', false_label='Run',
- ps=parent, key=RUNNING_KEY,
- )
- #set sizer
- self.SetSizerAndFit(control_box)
-
- #mouse wheel event
- def on_mouse_wheel(event):
- if event.GetWheelRotation() < 0: self._on_incr_ref_level(event)
- else: self._on_decr_ref_level(event)
- parent.plotter.Bind(wx.EVT_MOUSEWHEEL, on_mouse_wheel)
-
- ##################################################
- # Event handlers
- ##################################################
- def _on_incr_ref_level(self, event):
- self.parent[REF_LEVEL_KEY] = self.parent[REF_LEVEL_KEY] + self.parent[Y_PER_DIV_KEY]
- def _on_decr_ref_level(self, event):
- self.parent[REF_LEVEL_KEY] = self.parent[REF_LEVEL_KEY] - self.parent[Y_PER_DIV_KEY]
- def _on_incr_db_div(self, event):
- self.parent[Y_PER_DIV_KEY] = min(DB_DIV_MAX, common.get_clean_incr(self.parent[Y_PER_DIV_KEY]))
- def _on_decr_db_div(self, event):
- self.parent[Y_PER_DIV_KEY] = max(DB_DIV_MIN, common.get_clean_decr(self.parent[Y_PER_DIV_KEY]))
- ##################################################
- # subscriber handlers
- ##################################################
- def _update_layout(self,key):
- # Just ignore the key value we get
- # we only need to now that the visability or size of something has changed
- self.parent.Layout()
- #self.parent.Fit()
-
-##################################################
-# FFT window with plotter and control panel
-##################################################
-class fft_window(wx.Panel, pubsub.pubsub):
- def __init__(
- self,
- parent,
- controller,
- size,
- title,
- real,
- fft_size,
- baseband_freq,
- sample_rate_key,
- y_per_div,
- y_divs,
- ref_level,
- average_key,
- avg_alpha_key,
- peak_hold,
- msg_key,
- use_persistence,
- persist_alpha,
- ):
-
- pubsub.pubsub.__init__(self)
- #setup
- self.samples = EMPTY_TRACE
- self.real = real
- self.fft_size = fft_size
- self._reset_peak_vals()
- self._traces = dict()
- #proxy the keys
- self.proxy(MSG_KEY, controller, msg_key)
- self.proxy(AVERAGE_KEY, controller, average_key)
- self.proxy(AVG_ALPHA_KEY, controller, avg_alpha_key)
- self.proxy(SAMPLE_RATE_KEY, controller, sample_rate_key)
- #initialize values
- self[PEAK_HOLD_KEY] = peak_hold
- self[Y_PER_DIV_KEY] = y_per_div
- self[Y_DIVS_KEY] = y_divs
- self[X_DIVS_KEY] = 8 #approximate
- self[REF_LEVEL_KEY] = ref_level
- self[BASEBAND_FREQ_KEY] = baseband_freq
- self[RUNNING_KEY] = True
- self[USE_PERSISTENCE_KEY] = use_persistence
- self[PERSIST_ALPHA_KEY] = persist_alpha
- for trace in TRACES:
- #a function that returns a function
- #so the function wont use local trace
- def new_store_trace(my_trace):
- def store_trace(*args):
- self._traces[my_trace] = self.samples
- self.update_grid()
- return store_trace
- def new_toggle_trace(my_trace):
- def toggle_trace(toggle):
- #do an automatic store if toggled on and empty trace
- if toggle and not len(self._traces[my_trace]):
- self._traces[my_trace] = self.samples
- self.update_grid()
- return toggle_trace
- self._traces[trace] = EMPTY_TRACE
- self[TRACE_STORE_KEY+trace] = False
- self[TRACE_SHOW_KEY+trace] = False
- self.subscribe(TRACE_STORE_KEY+trace, new_store_trace(trace))
- self.subscribe(TRACE_SHOW_KEY+trace, new_toggle_trace(trace))
- #init panel and plot
- wx.Panel.__init__(self, parent, style=wx.SIMPLE_BORDER)
- self.plotter = plotter.channel_plotter(self)
- self.plotter.SetSize(wx.Size(*size))
- self.plotter.SetSizeHints(*size)
- self.plotter.set_title(title)
- self.plotter.enable_legend(True)
- self.plotter.enable_point_label(True)
- self.plotter.enable_grid_lines(True)
- self.plotter.set_use_persistence(use_persistence)
- self.plotter.set_persist_alpha(persist_alpha)
- #setup the box with plot and controls
- self.control_panel = control_panel(self)
- main_box = wx.BoxSizer(wx.HORIZONTAL)
- main_box.Add(self.plotter, 1, wx.EXPAND)
- main_box.Add(self.control_panel, 0, wx.EXPAND)
- self.SetSizerAndFit(main_box)
- #register events
- self.subscribe(AVERAGE_KEY, self._reset_peak_vals)
- self.subscribe(MSG_KEY, self.handle_msg)
- self.subscribe(SAMPLE_RATE_KEY, self.update_grid)
- for key in (
- BASEBAND_FREQ_KEY,
- Y_PER_DIV_KEY, X_DIVS_KEY,
- Y_DIVS_KEY, REF_LEVEL_KEY,
- ): self.subscribe(key, self.update_grid)
- self.subscribe(USE_PERSISTENCE_KEY, self.plotter.set_use_persistence)
- self.subscribe(PERSIST_ALPHA_KEY, self.plotter.set_persist_alpha)
- #initial update
- self.update_grid()
-
- def set_callback(self,callb):
- self.plotter.set_callback(callb)
-
- def autoscale(self, *args):
- """
- Autoscale the fft plot to the last frame.
- Set the dynamic range and reference level.
- """
- if not len(self.samples): return
- min_level, max_level = common.get_min_max_fft(self.samples)
- #set the range to a clean number of the dynamic range
- self[Y_PER_DIV_KEY] = common.get_clean_num(1+(max_level - min_level)/self[Y_DIVS_KEY])
- #set the reference level to a multiple of y per div
- self[REF_LEVEL_KEY] = self[Y_PER_DIV_KEY]*round(.5+max_level/self[Y_PER_DIV_KEY])
-
- def _reset_peak_vals(self, *args): self.peak_vals = EMPTY_TRACE
-
- def handle_msg(self, msg):
- """
- Handle the message from the fft sink message queue.
- If complex, reorder the fft samples so the negative bins come first.
- If real, keep take only the positive bins.
- Plot the samples onto the grid as channel 1.
- If peak hold is enabled, plot peak vals as channel 2.
-
- Args:
- msg: the fft array as a character array
- """
- if not self[RUNNING_KEY]: return
- #convert to floating point numbers
- samples = numpy.fromstring(msg, numpy.float32)[:self.fft_size] #only take first frame
- num_samps = len(samples)
- #reorder fft
- if self.real: samples = samples[:(num_samps+2)/2]
- else: samples = numpy.concatenate((samples[(num_samps+1)/2:], samples[:(num_samps+2)/2]))
- self.samples = samples
- #peak hold calculation
- if self[PEAK_HOLD_KEY]:
- if len(self.peak_vals) != len(samples): self.peak_vals = samples
- self.peak_vals = numpy.maximum(samples, self.peak_vals)
- #plot the peak hold
- self.plotter.set_waveform(
- channel='Peak',
- samples=self.peak_vals,
- color_spec=PEAK_VALS_COLOR_SPEC,
- )
- else:
- self._reset_peak_vals()
- self.plotter.clear_waveform(channel='Peak')
- #plot the fft
- self.plotter.set_waveform(
- channel='FFT',
- samples=samples,
- color_spec=FFT_PLOT_COLOR_SPEC,
- )
- #update the plotter
- self.plotter.update()
-
- def update_grid(self, *args):
- """
- Update the plotter grid.
- This update method is dependent on the variables below.
- Determine the x and y axis grid parameters.
- The x axis depends on sample rate, baseband freq, and x divs.
- The y axis depends on y per div, y divs, and ref level.
- """
- for trace in TRACES:
- channel = '%s'%trace.upper()
- if self[TRACE_SHOW_KEY+trace]:
- self.plotter.set_waveform(
- channel=channel,
- samples=self._traces[trace],
- color_spec=TRACES_COLOR_SPEC[trace],
- )
- else: self.plotter.clear_waveform(channel=channel)
- #grid parameters
- sample_rate = self[SAMPLE_RATE_KEY]
- baseband_freq = self[BASEBAND_FREQ_KEY]
- y_per_div = self[Y_PER_DIV_KEY]
- y_divs = self[Y_DIVS_KEY]
- x_divs = self[X_DIVS_KEY]
- ref_level = self[REF_LEVEL_KEY]
- #determine best fitting x_per_div
- if self.real: x_width = sample_rate/2.0
- else: x_width = sample_rate/1.0
- x_per_div = common.get_clean_num(x_width/x_divs)
- #update the x grid
- if self.real:
- self.plotter.set_x_grid(
- baseband_freq,
- baseband_freq + sample_rate/2.0,
- x_per_div, True,
- )
- else:
- self.plotter.set_x_grid(
- baseband_freq - sample_rate/2.0,
- baseband_freq + sample_rate/2.0,
- x_per_div, True,
- )
- #update x units
- self.plotter.set_x_label('Frequency', 'Hz')
- #update y grid
- self.plotter.set_y_grid(ref_level-y_per_div*y_divs, ref_level, y_per_div)
- #update y units
- self.plotter.set_y_label('Power', 'dB')
- #update plotter
- self.plotter.update()
diff --git a/gr-wxgui/python/wxgui/fftsink2.py b/gr-wxgui/python/wxgui/fftsink2.py
deleted file mode 100644
index 3277cd3ffa..0000000000
--- a/gr-wxgui/python/wxgui/fftsink2.py
+++ /dev/null
@@ -1,41 +0,0 @@
-#
-# Copyright 2008,2009 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-#
-
-from gnuradio import gr
-
-p = gr.prefs()
-style = p.get_string('wxgui', 'style', 'auto')
-
-if style == 'auto' or style == 'gl':
- try:
- import wx.glcanvas
- from OpenGL.GL import *
- from fftsink_gl import fft_sink_f, fft_sink_c
- except ImportError:
- if style == 'gl':
- raise RuntimeError("Unable to import OpenGL. Are Python wrappers for OpenGL installed?")
- else:
- # Fall backto non-gl sinks
- from fftsink_nongl import fft_sink_f, fft_sink_c
-elif style == 'nongl':
- from fftsink_nongl import fft_sink_f, fft_sink_c
-else:
- raise RuntimeError("Unknown wxgui style")
diff --git a/gr-wxgui/python/wxgui/fftsink_gl.py b/gr-wxgui/python/wxgui/fftsink_gl.py
deleted file mode 100644
index a0b245c98a..0000000000
--- a/gr-wxgui/python/wxgui/fftsink_gl.py
+++ /dev/null
@@ -1,204 +0,0 @@
-#
-# Copyright 2008-2010,2012 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-#
-
-from __future__ import division
-
-##################################################
-# Imports
-##################################################
-import fft_window
-import common
-from gnuradio import gr, fft
-from gnuradio import analog
-from gnuradio import blocks
-from gnuradio.fft import logpwrfft
-from pubsub import pubsub
-from constants import *
-import math
-
-##################################################
-# FFT sink block (wrapper for old wxgui)
-##################################################
-class _fft_sink_base(gr.hier_block2, common.wxgui_hb):
- """
- An fft block with real/complex inputs and a gui window.
- """
-
- def __init__(
- self,
- parent,
- baseband_freq=0,
- ref_scale=2.0,
- y_per_div=10,
- y_divs=8,
- ref_level=50,
- sample_rate=1,
- fft_size=512,
- fft_rate=fft_window.DEFAULT_FRAME_RATE,
- average=False,
- avg_alpha=None,
- title='',
- size=fft_window.DEFAULT_WIN_SIZE,
- peak_hold=False,
- win=None,
- use_persistence=False,
- persist_alpha=None,
- **kwargs #do not end with a comma
- ):
- #ensure avg alpha
- if avg_alpha is None: avg_alpha = 2.0/fft_rate
- #ensure analog alpha
- if persist_alpha is None:
- actual_fft_rate=float(sample_rate/fft_size)/float(max(1,int(float((sample_rate/fft_size)/fft_rate))))
- #print "requested_fft_rate ",fft_rate
- #print "actual_fft_rate ",actual_fft_rate
- analog_cutoff_freq=0.5 # Hertz
- #calculate alpha from wanted cutoff freq
- persist_alpha = 1.0 - math.exp(-2.0*math.pi*analog_cutoff_freq/actual_fft_rate)
-
- #init
- gr.hier_block2.__init__(
- self,
- "fft_sink",
- gr.io_signature(1, 1, self._item_size),
- gr.io_signature(0, 0, 0),
- )
- #blocks
- fft = self._fft_chain(
- sample_rate=sample_rate,
- fft_size=fft_size,
- frame_rate=fft_rate,
- ref_scale=ref_scale,
- avg_alpha=avg_alpha,
- average=average,
- win=win,
- )
- msgq = gr.msg_queue(2)
- sink = blocks.message_sink(gr.sizeof_float*fft_size, msgq, True)
-
-
- #controller
- self.controller = pubsub()
- self.controller.subscribe(AVERAGE_KEY, fft.set_average)
- self.controller.publish(AVERAGE_KEY, fft.average)
- self.controller.subscribe(AVG_ALPHA_KEY, fft.set_avg_alpha)
- self.controller.publish(AVG_ALPHA_KEY, fft.avg_alpha)
- self.controller.subscribe(SAMPLE_RATE_KEY, fft.set_sample_rate)
- self.controller.publish(SAMPLE_RATE_KEY, fft.sample_rate)
- #start input watcher
- common.input_watcher(msgq, self.controller, MSG_KEY)
- #create window
- self.win = fft_window.fft_window(
- parent=parent,
- controller=self.controller,
- size=size,
- title=title,
- real=self._real,
- fft_size=fft_size,
- baseband_freq=baseband_freq,
- sample_rate_key=SAMPLE_RATE_KEY,
- y_per_div=y_per_div,
- y_divs=y_divs,
- ref_level=ref_level,
- average_key=AVERAGE_KEY,
- avg_alpha_key=AVG_ALPHA_KEY,
- peak_hold=peak_hold,
- msg_key=MSG_KEY,
- use_persistence=use_persistence,
- persist_alpha=persist_alpha,
- )
- common.register_access_methods(self, self.win)
- setattr(self.win, 'set_baseband_freq', getattr(self, 'set_baseband_freq')) #BACKWARDS
- setattr(self.win, 'set_peak_hold', getattr(self, 'set_peak_hold')) #BACKWARDS
- #connect
- self.wxgui_connect(self, fft, sink)
-
- def set_callback(self,callb):
- self.win.set_callback(callb)
-
-class fft_sink_f(_fft_sink_base):
- _fft_chain = logpwrfft.logpwrfft_f
- _item_size = gr.sizeof_float
- _real = True
-
-class fft_sink_c(_fft_sink_base):
- _fft_chain = logpwrfft.logpwrfft_c
- _item_size = gr.sizeof_gr_complex
- _real = False
-
-# ----------------------------------------------------------------
-# Standalone test app
-# ----------------------------------------------------------------
-
-import wx
-from gnuradio.wxgui import stdgui2
-
-class test_app_block (stdgui2.std_top_block):
- def __init__(self, frame, panel, vbox, argv):
- stdgui2.std_top_block.__init__(self, frame, panel, vbox, argv)
-
- fft_size = 256
-
- # build our flow graph
- input_rate = 2048.0e3
-
- #Generate some noise
- noise = analog.noise_source_c(analog.GR_UNIFORM, 1.0/10)
-
- # Generate a complex sinusoid
- #src1 = analog.sig_source_c(input_rate, analog.GR_SIN_WAVE, 2e3, 1)
- src1 = analog.sig_source_c(input_rate, analog.GR_CONST_WAVE, 57.50e3, 1)
-
- # We add these throttle blocks so that this demo doesn't
- # suck down all the CPU available. Normally you wouldn't use these.
- thr1 = blocks.throttle(gr.sizeof_gr_complex, input_rate)
-
- sink1 = fft_sink_c(panel, title="Complex Data", fft_size=fft_size,
- sample_rate=input_rate, baseband_freq=100e3,
- ref_level=0, y_per_div=20, y_divs=10)
- vbox.Add(sink1.win, 1, wx.EXPAND)
-
- combine1 = blocks.add_cc()
- self.connect(src1, (combine1,0))
- self.connect(noise,(combine1,1))
- self.connect(combine1,thr1, sink1)
-
- #src2 = analog.sig_source_f(input_rate, analog.GR_SIN_WAVE, 2e3, 1)
- src2 = analog.sig_source_f (input_rate, analog.GR_CONST_WAVE, 57.50e3, 1)
- thr2 = blocks.throttle(gr.sizeof_float, input_rate)
- sink2 = fft_sink_f(panel, title="Real Data", fft_size=fft_size*2,
- sample_rate=input_rate, baseband_freq=100e3,
- ref_level=0, y_per_div=20, y_divs=10)
- vbox.Add(sink2.win, 1, wx.EXPAND)
-
- combine2 = blocks.add_ff()
- c2f2 = blocks.complex_to_float()
-
- self.connect(src2, (combine2,0))
- self.connect(noise,c2f2,(combine2,1))
- self.connect(combine2, thr2,sink2)
-
-def main ():
- app = stdgui2.stdapp(test_app_block, "FFT Sink Test App")
- app.MainLoop()
-
-if __name__ == '__main__':
- main()
diff --git a/gr-wxgui/python/wxgui/fftsink_nongl.py b/gr-wxgui/python/wxgui/fftsink_nongl.py
deleted file mode 100644
index c63f0fb268..0000000000
--- a/gr-wxgui/python/wxgui/fftsink_nongl.py
+++ /dev/null
@@ -1,656 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2003-2007,2009,2010,2012 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-#
-
-from gnuradio import gr, gru, fft
-import gnuradio.filter as grfilter
-from gnuradio import blocks
-from gnuradio import analog
-from gnuradio.wxgui import stdgui2
-from gnuradio.filter import window
-import wx
-import plot
-import numpy
-import math
-
-DIV_LEVELS = (1, 2, 5, 10, 20)
-
-default_fftsink_size = (640,240)
-default_fft_rate = gr.prefs().get_long('wxgui', 'fft_rate', 15)
-
-class fft_sink_base(object):
- def __init__(self, input_is_real=False, baseband_freq=0, y_per_div=10,
- y_divs=8, ref_level=50,
- sample_rate=1, fft_size=512,
- fft_rate=default_fft_rate,
- average=False, avg_alpha=None, title='',
- peak_hold=False, use_persistence=False, persist_alpha=0.2):
-
- # initialize common attributes
- self.baseband_freq = baseband_freq
- self.y_per_div=y_per_div
- self.y_divs = y_divs
- self.ref_level = ref_level
- self.sample_rate = sample_rate
- self.fft_size = fft_size
- self.fft_rate = fft_rate
- self.average = average
- if avg_alpha is None:
- self.avg_alpha = 2.0 / fft_rate
- else:
- self.avg_alpha = avg_alpha
- self.use_persistence = use_persistence
- self.persist_alpha = persist_alpha
-
- self.title = title
- self.peak_hold = peak_hold
- self.input_is_real = input_is_real
- self.msgq = gr.msg_queue(2) # queue that holds a maximum of 2 messages
-
- def set_y_per_div(self, y_per_div):
- self.y_per_div = y_per_div
-
- def set_ref_level(self, ref_level):
- self.ref_level = ref_level
-
- def set_average(self, average):
- self.average = average
- if average:
- self.avg.set_taps(self.avg_alpha)
- else:
- self.avg.set_taps(1.0)
- self.win.peak_vals = None
-
- def set_peak_hold(self, enable):
- self.peak_hold = enable
- self.win.set_peak_hold(enable)
-
- def set_use_persistence(self, enable):
- self.use_persistence = enable
- self.win.set_use_persistence(enable)
-
- def set_persist_alpha(self, persist_alpha):
- self.persist_alpha = persist_alpha
- self.win.set_persist_alpha(persist_alpha)
-
- def set_avg_alpha(self, avg_alpha):
- self.avg_alpha = avg_alpha
-
- def set_baseband_freq(self, baseband_freq):
- self.baseband_freq = baseband_freq
-
- def set_sample_rate(self, sample_rate):
- self.sample_rate = sample_rate
- self._set_n()
-
- def _set_n(self):
- self.one_in_n.set_n(max(1, int(self.sample_rate/self.fft_size/self.fft_rate)))
-
- def set_callback(self, callb):
- return
-
-class fft_sink_f(gr.hier_block2, fft_sink_base):
- def __init__(self, parent, baseband_freq=0, ref_scale=2.0,
- y_per_div=10, y_divs=8, ref_level=50, sample_rate=1, fft_size=512,
- fft_rate=default_fft_rate, average=False, avg_alpha=None,
- title='', size=default_fftsink_size, peak_hold=False,
- use_persistence=False, persist_alpha=0.2, **kwargs):
-
- gr.hier_block2.__init__(self, "fft_sink_f",
- gr.io_signature(1, 1, gr.sizeof_float),
- gr.io_signature(0,0,0))
-
- fft_sink_base.__init__(self, input_is_real=True, baseband_freq=baseband_freq,
- y_per_div=y_per_div, y_divs=y_divs, ref_level=ref_level,
- sample_rate=sample_rate, fft_size=fft_size,
- fft_rate=fft_rate,
- average=average, avg_alpha=avg_alpha, title=title,
- peak_hold=peak_hold, use_persistence=use_persistence,
- persist_alpha=persist_alpha)
-
- self.s2p = blocks.stream_to_vector(gr.sizeof_float, self.fft_size)
- self.one_in_n = blocks.keep_one_in_n(gr.sizeof_float * self.fft_size,
- max(1, int(self.sample_rate/self.fft_size/self.fft_rate)))
-
- mywindow = window.blackmanharris(self.fft_size)
- self.fft = fft.fft_vfc(self.fft_size, True, mywindow)
- power = 0
- for tap in mywindow:
- power += tap*tap
-
- self.c2magsq = blocks.complex_to_mag_squared(self.fft_size)
- self.avg = grfilter.single_pole_iir_filter_ff(1.0, self.fft_size)
-
- # FIXME We need to add 3dB to all bins but the DC bin
- self.log = blocks.nlog10_ff(10, self.fft_size,
- -20*math.log10(self.fft_size) # Adjust for number of bins
- -10*math.log10(power/self.fft_size) # Adjust for windowing loss
- -20*math.log10(ref_scale/2)) # Adjust for reference scale
-
- self.sink = blocks.message_sink(gr.sizeof_float * self.fft_size, self.msgq, True)
- self.connect(self, self.s2p, self.one_in_n, self.fft, self.c2magsq, self.avg, self.log, self.sink)
-
- self.win = fft_window(self, parent, size=size)
- self.set_average(self.average)
- self.set_peak_hold(self.peak_hold)
- self.set_use_persistence(self.use_persistence)
- self.set_persist_alpha(self.persist_alpha)
-
-class fft_sink_c(gr.hier_block2, fft_sink_base):
- def __init__(self, parent, baseband_freq=0, ref_scale=2.0,
- y_per_div=10, y_divs=8, ref_level=50, sample_rate=1, fft_size=512,
- fft_rate=default_fft_rate, average=False, avg_alpha=None,
- title='', size=default_fftsink_size, peak_hold=False,
- use_persistence=False, persist_alpha=0.2, **kwargs):
-
- gr.hier_block2.__init__(self, "fft_sink_c",
- gr.io_signature(1, 1, gr.sizeof_gr_complex),
- gr.io_signature(0,0,0))
-
- fft_sink_base.__init__(self, input_is_real=False, baseband_freq=baseband_freq,
- y_per_div=y_per_div, y_divs=y_divs, ref_level=ref_level,
- sample_rate=sample_rate, fft_size=fft_size,
- fft_rate=fft_rate,
- average=average, avg_alpha=avg_alpha, title=title,
- peak_hold=peak_hold, use_persistence=use_persistence,
- persist_alpha=persist_alpha)
-
- self.s2p = blocks.stream_to_vector(gr.sizeof_gr_complex, self.fft_size)
- self.one_in_n = blocks.keep_one_in_n(gr.sizeof_gr_complex * self.fft_size,
- max(1, int(self.sample_rate/self.fft_size/self.fft_rate)))
-
- mywindow = window.blackmanharris(self.fft_size)
- self.fft = fft.fft_vcc(self.fft_size, True, mywindow)
- power = 0
- for tap in mywindow:
- power += tap*tap
-
- self.c2magsq = blocks.complex_to_mag_squared(self.fft_size)
- self.avg = grfilter.single_pole_iir_filter_ff(1.0, self.fft_size)
-
- # FIXME We need to add 3dB to all bins but the DC bin
- self.log = blocks.nlog10_ff(10, self.fft_size,
- -20*math.log10(self.fft_size) # Adjust for number of bins
- -10*math.log10(power/self.fft_size) # Adjust for windowing loss
- -20*math.log10(ref_scale/2)) # Adjust for reference scale
-
- self.sink = blocks.message_sink(gr.sizeof_float * self.fft_size, self.msgq, True)
- self.connect(self, self.s2p, self.one_in_n, self.fft, self.c2magsq, self.avg, self.log, self.sink)
-
- self.win = fft_window(self, parent, size=size)
- self.set_average(self.average)
- self.set_use_persistence(self.use_persistence)
- self.set_persist_alpha(self.persist_alpha)
- self.set_peak_hold(self.peak_hold)
-
-
-# ------------------------------------------------------------------------
-
-myDATA_EVENT = wx.NewEventType()
-EVT_DATA_EVENT = wx.PyEventBinder (myDATA_EVENT, 0)
-
-
-class DataEvent(wx.PyEvent):
- def __init__(self, data):
- wx.PyEvent.__init__(self)
- self.SetEventType (myDATA_EVENT)
- self.data = data
-
- def Clone (self):
- self.__class__ (self.GetId())
-
-
-class input_watcher (gru.msgq_runner):
- def __init__ (self, msgq, fft_size, event_receiver, **kwds):
- self.fft_size = fft_size
- self.event_receiver = event_receiver
- gru.msgq_runner.__init__(self, msgq, self.handle_msg)
-
- def handle_msg(self, msg):
- itemsize = int(msg.arg1())
- nitems = int(msg.arg2())
-
- s = msg.to_string() # get the body of the msg as a string
-
- # There may be more than one FFT frame in the message.
- # If so, we take only the last one
- if nitems > 1:
- start = itemsize * (nitems - 1)
- s = s[start:start+itemsize]
-
- complex_data = numpy.fromstring (s, numpy.float32)
- de = DataEvent (complex_data)
- wx.PostEvent (self.event_receiver, de)
- del de
-
-class control_panel(wx.Panel):
-
- class LabelText(wx.StaticText):
- def __init__(self, window, label):
- wx.StaticText.__init__(self, window, -1, label)
- font = self.GetFont()
- font.SetWeight(wx.FONTWEIGHT_BOLD)
- font.SetUnderlined(True)
- self.SetFont(font)
-
- def __init__(self, parent):
- self.parent = parent
- wx.Panel.__init__(self, parent, -1, style=wx.SIMPLE_BORDER)
- control_box = wx.BoxSizer(wx.VERTICAL)
-
- #checkboxes for average and peak hold
- control_box.AddStretchSpacer()
- control_box.Add(self.LabelText(self, 'Options'), 0, wx.ALIGN_CENTER)
- self.average_check_box = wx.CheckBox(parent=self, style=wx.CHK_2STATE, label="Average")
- self.average_check_box.Bind(wx.EVT_CHECKBOX, parent.on_average)
- control_box.Add(self.average_check_box, 0, wx.EXPAND)
- self.use_persistence_check_box = wx.CheckBox(parent=self, style=wx.CHK_2STATE, label="Persistence")
- self.use_persistence_check_box.Bind(wx.EVT_CHECKBOX, parent.on_use_persistence)
- control_box.Add(self.use_persistence_check_box, 0, wx.EXPAND)
- self.peak_hold_check_box = wx.CheckBox(parent=self, style=wx.CHK_2STATE, label="Peak Hold")
- self.peak_hold_check_box.Bind(wx.EVT_CHECKBOX, parent.on_peak_hold)
- control_box.Add(self.peak_hold_check_box, 0, wx.EXPAND)
-
- #radio buttons for div size
- control_box.AddStretchSpacer()
- control_box.Add(self.LabelText(self, 'Set dB/div'), 0, wx.ALIGN_CENTER)
- radio_box = wx.BoxSizer(wx.VERTICAL)
- self.radio_buttons = list()
- for y_per_div in DIV_LEVELS:
- radio_button = wx.RadioButton(self, -1, "%d dB/div"%y_per_div)
- radio_button.Bind(wx.EVT_RADIOBUTTON, self.on_radio_button_change)
- self.radio_buttons.append(radio_button)
- radio_box.Add(radio_button, 0, wx.ALIGN_LEFT)
- control_box.Add(radio_box, 0, wx.EXPAND)
-
- #ref lvl buttons
- control_box.AddStretchSpacer()
- control_box.Add(self.LabelText(self, 'Adj Ref Lvl'), 0, wx.ALIGN_CENTER)
- control_box.AddSpacer(2)
- button_box = wx.BoxSizer(wx.HORIZONTAL)
- self.ref_plus_button = wx.Button(self, -1, '+', style=wx.BU_EXACTFIT)
- self.ref_plus_button.Bind(wx.EVT_BUTTON, parent.on_incr_ref_level)
- button_box.Add(self.ref_plus_button, 0, wx.ALIGN_CENTER)
- self.ref_minus_button = wx.Button(self, -1, ' - ', style=wx.BU_EXACTFIT)
- self.ref_minus_button.Bind(wx.EVT_BUTTON, parent.on_decr_ref_level)
- button_box.Add(self.ref_minus_button, 0, wx.ALIGN_CENTER)
- control_box.Add(button_box, 0, wx.ALIGN_CENTER)
- control_box.AddStretchSpacer()
- #set sizer
- self.SetSizerAndFit(control_box)
- #update
- self.update()
-
- def update(self):
- """
- Read the state of the fft plot settings and update the control panel.
- """
- #update checkboxes
- self.average_check_box.SetValue(self.parent.fftsink.average)
- self.use_persistence_check_box.SetValue(self.parent.fftsink.use_persistence)
- self.peak_hold_check_box.SetValue(self.parent.fftsink.peak_hold)
- #update radio buttons
- try:
- index = list(DIV_LEVELS).index(self.parent.fftsink.y_per_div)
- self.radio_buttons[index].SetValue(True)
- except: pass
-
- def on_radio_button_change(self, evt):
- selected_radio_button = filter(lambda rb: rb.GetValue(), self.radio_buttons)[0]
- index = self.radio_buttons.index(selected_radio_button)
- self.parent.fftsink.set_y_per_div(DIV_LEVELS[index])
-
-class fft_window (wx.Panel):
- def __init__ (self, fftsink, parent, id = -1,
- pos = wx.DefaultPosition, size = wx.DefaultSize,
- style = wx.DEFAULT_FRAME_STYLE, name = ""):
-
- self.fftsink = fftsink
- #init panel and plot
- wx.Panel.__init__(self, parent, -1)
- self.plot = plot.PlotCanvas(self, id, pos, size, style, name)
- #setup the box with plot and controls
- self.control_panel = control_panel(self)
- main_box = wx.BoxSizer (wx.HORIZONTAL)
- main_box.Add (self.plot, 1, wx.EXPAND)
- main_box.Add (self.control_panel, 0, wx.EXPAND)
- self.SetSizerAndFit(main_box)
-
- self.peak_hold = False
- self.peak_vals = None
-
- self.use_persistence=False
- self.persist_alpha=0.2
-
-
- self.plot.SetEnableGrid (True)
- # self.SetEnableZoom (True)
- # self.SetBackgroundColour ('black')
-
- self.build_popup_menu()
- self.set_baseband_freq(self.fftsink.baseband_freq)
-
- EVT_DATA_EVENT (self, self.set_data)
- wx.EVT_CLOSE (self, self.on_close_window)
- self.plot.Bind(wx.EVT_RIGHT_UP, self.on_right_click)
- self.plot.Bind(wx.EVT_MOTION, self.evt_motion)
-
- self.input_watcher = input_watcher(fftsink.msgq, fftsink.fft_size, self)
-
- def set_scale(self, freq):
- x = max(abs(self.fftsink.sample_rate), abs(self.fftsink.baseband_freq))
- if x >= 1e9:
- self._scale_factor = 1e-9
- self._units = "GHz"
- self._format = "%3.6f"
- elif x >= 1e6:
- self._scale_factor = 1e-6
- self._units = "MHz"
- self._format = "%3.3f"
- else:
- self._scale_factor = 1e-3
- self._units = "kHz"
- self._format = "%3.3f"
-
- def set_baseband_freq(self, baseband_freq):
- if self.peak_hold:
- self.peak_vals = None
- self.set_scale(baseband_freq)
- self.fftsink.set_baseband_freq(baseband_freq)
-
- def on_close_window (self, event):
- print "fft_window:on_close_window"
- self.keep_running = False
-
-
- def set_data (self, evt):
- dB = evt.data
- L = len (dB)
-
- if self.peak_hold:
- if self.peak_vals is None:
- self.peak_vals = dB
- else:
- self.peak_vals = numpy.maximum(dB, self.peak_vals)
-
- if self.fftsink.input_is_real: # only plot 1/2 the points
- x_vals = ((numpy.arange (L/2) * (self.fftsink.sample_rate
- * self._scale_factor / L))
- + self.fftsink.baseband_freq * self._scale_factor)
- self._points = numpy.zeros((len(x_vals), 2), numpy.float64)
- self._points[:,0] = x_vals
- self._points[:,1] = dB[0:L/2]
- if self.peak_hold:
- self._peak_points = numpy.zeros((len(x_vals), 2), numpy.float64)
- self._peak_points[:,0] = x_vals
- self._peak_points[:,1] = self.peak_vals[0:L/2]
- else:
- # the "negative freqs" are in the second half of the array
- x_vals = ((numpy.arange (-L/2, L/2)
- * (self.fftsink.sample_rate * self._scale_factor / L))
- + self.fftsink.baseband_freq * self._scale_factor)
- self._points = numpy.zeros((len(x_vals), 2), numpy.float64)
- self._points[:,0] = x_vals
- self._points[:,1] = numpy.concatenate ((dB[L/2:], dB[0:L/2]))
- if self.peak_hold:
- self._peak_points = numpy.zeros((len(x_vals), 2), numpy.float64)
- self._peak_points[:,0] = x_vals
- self._peak_points[:,1] = numpy.concatenate ((self.peak_vals[L/2:], self.peak_vals[0:L/2]))
-
- lines = [plot.PolyLine (self._points, colour='BLUE'),]
- if self.peak_hold:
- lines.append(plot.PolyLine (self._peak_points, colour='GREEN'))
-
- graphics = plot.PlotGraphics (lines,
- title=self.fftsink.title,
- xLabel = self._units, yLabel = "dB")
- x_range = x_vals[0], x_vals[-1]
- ymax = self.fftsink.ref_level
- ymin = self.fftsink.ref_level - self.fftsink.y_per_div * self.fftsink.y_divs
- y_range = ymin, ymax
- self.plot.Draw (graphics, xAxis=x_range, yAxis=y_range, step=self.fftsink.y_per_div)
-
- def set_use_persistence(self, enable):
- self.use_persistence = enable
- self.plot.set_use_persistence( enable)
-
- def set_persist_alpha(self, persist_alpha):
- self.persist_alpha = persist_alpha
- self.plot.set_persist_alpha(persist_alpha)
-
- def set_peak_hold(self, enable):
- self.peak_hold = enable
- self.peak_vals = None
-
- def on_average(self, evt):
- # print "on_average"
- self.fftsink.set_average(evt.IsChecked())
- self.control_panel.update()
-
- def on_use_persistence(self, evt):
- # print "on_analog"
- self.fftsink.set_use_persistence(evt.IsChecked())
- self.control_panel.update()
-
- def on_peak_hold(self, evt):
- # print "on_peak_hold"
- self.fftsink.set_peak_hold(evt.IsChecked())
- self.control_panel.update()
-
- def on_incr_ref_level(self, evt):
- # print "on_incr_ref_level"
- self.fftsink.set_ref_level(self.fftsink.ref_level
- + self.fftsink.y_per_div)
-
- def on_decr_ref_level(self, evt):
- # print "on_decr_ref_level"
- self.fftsink.set_ref_level(self.fftsink.ref_level
- - self.fftsink.y_per_div)
-
- def on_incr_y_per_div(self, evt):
- # print "on_incr_y_per_div"
- self.fftsink.set_y_per_div(next_up(self.fftsink.y_per_div, DIV_LEVELS))
- self.control_panel.update()
-
- def on_decr_y_per_div(self, evt):
- # print "on_decr_y_per_div"
- self.fftsink.set_y_per_div(next_down(self.fftsink.y_per_div, DIV_LEVELS))
- self.control_panel.update()
-
- def on_y_per_div(self, evt):
- # print "on_y_per_div"
- Id = evt.GetId()
- if Id == self.id_y_per_div_1:
- self.fftsink.set_y_per_div(1)
- elif Id == self.id_y_per_div_2:
- self.fftsink.set_y_per_div(2)
- elif Id == self.id_y_per_div_5:
- self.fftsink.set_y_per_div(5)
- elif Id == self.id_y_per_div_10:
- self.fftsink.set_y_per_div(10)
- elif Id == self.id_y_per_div_20:
- self.fftsink.set_y_per_div(20)
- self.control_panel.update()
-
- def on_right_click(self, event):
- menu = self.popup_menu
- for id, pred in self.checkmarks.items():
- item = menu.FindItemById(id)
- item.Check(pred())
- self.plot.PopupMenu(menu, event.GetPosition())
-
- def evt_motion(self, event):
- if not hasattr(self, "_points"):
- return # Got here before first window data update
-
- # Clip to plotted values
- (ux, uy) = self.plot.GetXY(event) # Scaled position
- x_vals = numpy.array(self._points[:,0])
- if ux < x_vals[0] or ux > x_vals[-1]:
- tip = self.GetToolTip()
- if tip:
- tip.Enable(False)
- return
-
- # Get nearest X value (is there a better way)?
- ind = numpy.argmin(numpy.abs(x_vals-ux))
- x_val = x_vals[ind]
- db_val = self._points[ind, 1]
- text = (self._format+" %s dB=%3.3f") % (x_val, self._units, db_val)
-
- # Display the tooltip
- tip = wx.ToolTip(text)
- tip.Enable(True)
- tip.SetDelay(0)
- self.SetToolTip(tip)
-
- def build_popup_menu(self):
- self.id_incr_ref_level = wx.NewId()
- self.id_decr_ref_level = wx.NewId()
- self.id_incr_y_per_div = wx.NewId()
- self.id_decr_y_per_div = wx.NewId()
- self.id_y_per_div_1 = wx.NewId()
- self.id_y_per_div_2 = wx.NewId()
- self.id_y_per_div_5 = wx.NewId()
- self.id_y_per_div_10 = wx.NewId()
- self.id_y_per_div_20 = wx.NewId()
- self.id_average = wx.NewId()
- self.id_use_persistence = wx.NewId()
- self.id_peak_hold = wx.NewId()
-
- self.plot.Bind(wx.EVT_MENU, self.on_average, id=self.id_average)
- self.plot.Bind(wx.EVT_MENU, self.on_use_persistence, id=self.id_use_persistence)
- self.plot.Bind(wx.EVT_MENU, self.on_peak_hold, id=self.id_peak_hold)
- self.plot.Bind(wx.EVT_MENU, self.on_incr_ref_level, id=self.id_incr_ref_level)
- self.plot.Bind(wx.EVT_MENU, self.on_decr_ref_level, id=self.id_decr_ref_level)
- self.plot.Bind(wx.EVT_MENU, self.on_incr_y_per_div, id=self.id_incr_y_per_div)
- self.plot.Bind(wx.EVT_MENU, self.on_decr_y_per_div, id=self.id_decr_y_per_div)
- self.plot.Bind(wx.EVT_MENU, self.on_y_per_div, id=self.id_y_per_div_1)
- self.plot.Bind(wx.EVT_MENU, self.on_y_per_div, id=self.id_y_per_div_2)
- self.plot.Bind(wx.EVT_MENU, self.on_y_per_div, id=self.id_y_per_div_5)
- self.plot.Bind(wx.EVT_MENU, self.on_y_per_div, id=self.id_y_per_div_10)
- self.plot.Bind(wx.EVT_MENU, self.on_y_per_div, id=self.id_y_per_div_20)
-
- # make a menu
- menu = wx.Menu()
- self.popup_menu = menu
- menu.AppendCheckItem(self.id_average, "Average")
- menu.AppendCheckItem(self.id_use_persistence, "Persistence")
- menu.AppendCheckItem(self.id_peak_hold, "Peak Hold")
- menu.Append(self.id_incr_ref_level, "Incr Ref Level")
- menu.Append(self.id_decr_ref_level, "Decr Ref Level")
- # menu.Append(self.id_incr_y_per_div, "Incr dB/div")
- # menu.Append(self.id_decr_y_per_div, "Decr dB/div")
- menu.AppendSeparator()
- # we'd use RadioItems for these, but they're not supported on Mac
- menu.AppendCheckItem(self.id_y_per_div_1, "1 dB/div")
- menu.AppendCheckItem(self.id_y_per_div_2, "2 dB/div")
- menu.AppendCheckItem(self.id_y_per_div_5, "5 dB/div")
- menu.AppendCheckItem(self.id_y_per_div_10, "10 dB/div")
- menu.AppendCheckItem(self.id_y_per_div_20, "20 dB/div")
-
- self.checkmarks = {
- self.id_average : lambda : self.fftsink.average,
- self.id_use_persistence : lambda : self.fftsink.use_persistence,
- self.id_peak_hold : lambda : self.fftsink.peak_hold,
- self.id_y_per_div_1 : lambda : self.fftsink.y_per_div == 1,
- self.id_y_per_div_2 : lambda : self.fftsink.y_per_div == 2,
- self.id_y_per_div_5 : lambda : self.fftsink.y_per_div == 5,
- self.id_y_per_div_10 : lambda : self.fftsink.y_per_div == 10,
- self.id_y_per_div_20 : lambda : self.fftsink.y_per_div == 20,
- }
-
-
-def next_up(v, seq):
- """
- Return the first item in seq that is > v.
- """
- for s in seq:
- if s > v:
- return s
- return v
-
-def next_down(v, seq):
- """
- Return the last item in seq that is < v.
- """
- rseq = list(seq[:])
- rseq.reverse()
-
- for s in rseq:
- if s < v:
- return s
- return v
-
-
-# ----------------------------------------------------------------
-# Standalone test app
-# ----------------------------------------------------------------
-
-class test_app_block (stdgui2.std_top_block):
- def __init__(self, frame, panel, vbox, argv):
- stdgui2.std_top_block.__init__ (self, frame, panel, vbox, argv)
-
- fft_size = 256
-
- # build our flow graph
- input_rate = 100*20.48e3
-
- # Generate a complex sinusoid
- #src1 = gr.sig_source_c (input_rate, gr.GR_SIN_WAVE, 100*2e3, 1)
- src1 = gr.sig_source_c (input_rate, gr.GR_CONST_WAVE, 100*5.75e3, 1)
- noise1 = analog.noise_source_c(analog.GR_UNIFORM, 1.0/10)
- add1 = blocks.add_cc()
-
- # We add these throttle blocks so that this demo doesn't
- # suck down all the CPU available. Normally you wouldn't use these.
- thr1 = blocks.throttle(gr.sizeof_gr_complex, input_rate)
-
- sink1 = fft_sink_c(panel, title="Complex Data", fft_size=fft_size,
- sample_rate=input_rate, baseband_freq=100e3,
- ref_level=0, y_per_div=20, y_divs=10)
- vbox.Add(sink1.win, 1, wx.EXPAND)
-
- self.connect(src1, (add1,0))
- self.connect(noise1, (add1,1))
- self.connect(add1, thr1, sink1)
-
- #src2 = gr.sig_source_f (input_rate, gr.GR_SIN_WAVE, 100*2e3, 1)
- src2 = gr.sig_source_f (input_rate, gr.GR_CONST_WAVE, 100*5.75e3, 1)
- noise2 = analog.noise_source_f(analog.GR_UNIFORM, 1.0/10)
- add2 = blocks.add_ff()
-
- thr2 = gr.throttle(gr.sizeof_float, input_rate)
- sink2 = fft_sink_f (panel, title="Real Data", fft_size=fft_size*2,
- sample_rate=input_rate, baseband_freq=100e3,
- ref_level=0, y_per_div=20, y_divs=10)
- vbox.Add (sink2.win, 1, wx.EXPAND)
-
- self.connect(src2, (add2,0))
- self.connect(noise2, (add2,1))
- self.connect(add2, thr2, sink2)
-
-def main ():
- app = stdgui2.stdapp(test_app_block, "FFT Sink Test App")
- app.MainLoop()
-
-if __name__ == '__main__':
- main ()
diff --git a/gr-wxgui/python/wxgui/form.py b/gr-wxgui/python/wxgui/form.py
deleted file mode 100644
index 0442e49c84..0000000000
--- a/gr-wxgui/python/wxgui/form.py
+++ /dev/null
@@ -1,391 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2005 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-#
-
-import wx
-from gnuradio import eng_notation
-
-# ----------------------------------------------------------------
-# Wrappers for certain widgets
-# ----------------------------------------------------------------
-
-def button_with_callback(parent, label, callback):
- new_id = wx.NewId()
- btn = wx.Button(parent, new_id, label)
- wx.EVT_BUTTON(parent, new_id, lambda evt: callback())
- return btn
-
-
-# ----------------------------------------------------------------
-# Format converters
-# ----------------------------------------------------------------
-
-class abstract_converter(object):
- def value_to_prim(self, v):
- """
- Convert from user specified value to value acceptable to underlying primitive.
- The underlying primitive usually expects strings.
- """
- raise NotImplementedError
- def prim_to_value(self, s):
- """
- Convert from underlying primitive value to user specified value.
- The underlying primitive usually expects strings.
- """
- raise NotImplementedError
- def help(self):
- return "Any string is acceptable"
-
-class identity_converter(abstract_converter):
- def value_to_prim(self,v):
- return v
- def prim_to_value(self, s):
- return s
-
-class int_converter(abstract_converter):
- def value_to_prim(self, v):
- return str(v)
- def prim_to_value(self, s):
- return int(s, 0)
- def help(self):
- return "Enter an integer. Leading 0x indicates hex"
-
-class float_converter(abstract_converter):
- def value_to_prim(self, v):
- return eng_notation.num_to_str(v)
- def prim_to_value(self, s):
- return eng_notation.str_to_num(s)
- def help(self):
- return "Enter a float with optional scale suffix. E.g., 100.1M"
-
-
-# ----------------------------------------------------------------
-# Various types of data entry fields
-# ----------------------------------------------------------------
-
-class field(object):
- """
- A field in a form.
- """
- def __init__(self, converter, value):
- self.converter = converter
- if value is not None:
- self.set_value(value)
-
- def set_value(self, v):
- self._set_prim_value(self.converter.value_to_prim(v))
-
- def get_value(self):
- return self.converter.prim_to_value(self._get_prim_value())
-
- def get_value_with_check(self):
- """
- Returns (value, error_msg), where error_msg is not None if there was problem
- """
- try:
- return (self.get_value(), None)
- except:
- return (None, self._error_msg())
-
- def _set_prim_value(self, v):
- raise NotImplementedError
-
- def _get_prim_value(self):
- raise NotImplementedError
-
- def _pair_with_label(self, widget, parent=None, sizer=None, label=None, weight=1):
- self.label = label
- if label is None:
- sizer.Add (widget, weight, wx.EXPAND)
- return widget
- elif 0:
- hbox = wx.BoxSizer(wx.HORIZONTAL)
- label_widget = wx.StaticText(parent, -1, label + ': ')
- hbox.Add(label_widget, 0, wx.EXPAND)
- hbox.Add(widget, 1, wx.EXPAND)
- sizer.Add(hbox, weight, wx.EXPAND)
- return widget
- else:
- label_widget = wx.StaticText(parent, -1, label + ': ')
- sizer.Add(label_widget, 0, wx.EXPAND)
- sizer.Add(widget, weight, wx.EXPAND)
- return widget
-
- def _error_msg(self):
- prefix = ''
- if self.label:
- prefix = self.label + ': '
- return "%s%s is invalid. %s" % (prefix, self._get_prim_value(),
- self.converter.help())
-
-# static (display-only) text fields
-
-class static_text_field(field):
- def __init__(self, parent=None, sizer=None, label=None, value=None,
- converter=identity_converter(), weight=0):
- self.f = self._pair_with_label(wx.StaticText(parent, -1, ""),
- parent=parent, sizer=sizer, label=label, weight=weight)
- field.__init__(self, converter, value)
-
- def _get_prim_value(self):
- return self.f.GetLabel()
-
- def _set_prim_value(self, v):
- self.f.SetLabel(v)
-
-
-class static_int_field(static_text_field):
- def __init__(self, parent=None, sizer=None, label=None, value=None, weight=0):
- static_text_field.__init__(self, parent, sizer, label, value, int_converter(), weight)
-
-class static_float_field(static_text_field):
- def __init__(self, parent=None, sizer=None, label=None, value=None, weight=0):
- static_text_field.__init__(self, parent, sizer, label, value, float_converter(), weight)
-
-
-# editable text fields
-
-class text_field(field):
- def __init__(self, parent=None, sizer=None, label=None, value=None,
- converter=identity_converter(), callback=None, weight=1):
- style = 0
- if callback:
- style = wx.TE_PROCESS_ENTER
-
- new_id = wx.NewId()
- w = wx.TextCtrl(parent, new_id, "", style=style)
- self.f = self._pair_with_label(w, parent=parent, sizer=sizer, label=label, weight=weight)
- if callback:
- wx.EVT_TEXT_ENTER(w, new_id, lambda evt: callback())
- field.__init__(self, converter, value)
-
- def _get_prim_value(self):
- return self.f.GetValue()
-
- def _set_prim_value(self, v):
- self.f.SetValue(v)
-
-
-class int_field(text_field):
- def __init__(self, parent=None, sizer=None, label=None, value=None,
- callback=None, weight=1):
- text_field.__init__(self, parent, sizer, label, value, int_converter(), callback, weight)
-
-class float_field(text_field):
- def __init__(self, parent=None, sizer=None, label=None, value=None,
- callback=None, weight=1):
- text_field.__init__(self, parent, sizer, label, value, float_converter(), callback, weight)
-
-# other fields
-
-class slider_field(field):
- def __init__(self, parent=None, sizer=None, label=None, value=None,
- converter=identity_converter(), callback=None, min=0, max=100, weight=1):
- new_id = wx.NewId()
- w = wx.Slider(parent, new_id, (max+min)/2, min, max,
- size=wx.Size(250, -1), style=wx.SL_HORIZONTAL | wx.SL_LABELS)
- self.f = self._pair_with_label(w, parent=parent, sizer=sizer, label=label, weight=weight)
- if callback:
- wx.EVT_COMMAND_SCROLL(w, new_id, lambda evt: callback(evt.GetInt()))
- field.__init__(self, converter, value)
-
- def _get_prim_value(self):
- return self.f.GetValue()
-
- def _set_prim_value(self, v):
- self.f.SetValue(int(v))
-
-class quantized_slider_field(field):
- def __init__(self, parent=None, sizer=None, label=None, value=None,
- converter=identity_converter(), callback=None, range=None, weight=1):
- if not isinstance(range, (tuple, list)) or len(range) != 3:
- raise ValueError, range
-
- self.min = range[0]
- self.max = range[1]
- self.step_size = float(range[2])
- nsteps = int((self.max-self.min)/self.step_size)
-
- new_id = wx.NewId()
- w = wx.Slider(parent, new_id, 0, 0, nsteps,
- size=wx.Size(250, -1), style=wx.SL_HORIZONTAL)
- self.f = self._pair_with_label(w, parent=parent, sizer=sizer, label=label, weight=weight)
- if callback:
- wx.EVT_COMMAND_SCROLL(w, new_id,
- lambda evt: callback(self._map_out(evt.GetInt())))
- field.__init__(self, converter, value)
-
- def _get_prim_value(self):
- return self._map_out(self.f.GetValue())
-
- def _set_prim_value(self, v):
- self.f.SetValue(self._map_in(v))
-
- def _map_in(self, x):
- return int((x-self.min) / self.step_size)
-
- def _map_out(self, x):
- return x * self.step_size + self.min
-
-class checkbox_field(field):
- def __init__(self, parent=None, sizer=None, label=None, value=None,
- converter=identity_converter(), callback=None, weight=1):
- new_id = wx.NewId()
- w = wx.CheckBox(parent, new_id, label, style=wx.CHK_2STATE)
- self.f = self._pair_with_label(w, parent=parent, sizer=sizer, label=None, weight=weight)
- if callback:
- wx.EVT_CHECKBOX(w, new_id, lambda evt: callback(evt.GetInt()))
- field.__init__(self, converter, value)
-
- def _get_prim_value(self):
- return self.f.GetValue()
-
- def _set_prim_value(self, v):
- self.f.SetValue(int(v))
-
-
-class radiobox_field(field):
- def __init__(self, parent=None, sizer=None, label=None, value=None,
- converter=identity_converter(), callback=None, weight=1,
- choices=None, major_dimension=1, specify_rows=False):
- new_id = wx.NewId()
-
- if specify_rows:
- style=wx.RA_SPECIFY_ROWS | wx.RA_HORIZONTAL
- else:
- style=wx.RA_SPECIFY_COLS | wx.RA_HORIZONTAL
-
- w = wx.RadioBox(parent, new_id, label=label, style=style, majorDimension=major_dimension,
- choices=choices)
- self.f = self._pair_with_label(w, parent=parent, sizer=sizer, label=None, weight=weight)
- if callback:
- wx.EVT_RADIOBOX(w, new_id, lambda evt: callback(evt.GetString()))
- field.__init__(self, converter, value)
-
- def _get_prim_value(self):
- return self.f.GetStringSelection()
-
- def _set_prim_value(self, v):
- self.f.SetStringSelection(str(v))
-
-# ----------------------------------------------------------------
-# the form class
-# ----------------------------------------------------------------
-
-class form(dict):
- def __init__(self):
- dict.__init__(self)
-
- def check_input_for_errors(self):
- """
- Returns list of error messages if there's trouble,
- else empty list.
- """
- vals = [f.get_value_with_check() for f in self.values()]
- return [t[1] for t in vals if t[1] is not None]
-
- def get_key_vals(self):
- d = {}
- for (key, f) in self.items():
- d[key] = f.get_value()
- return d
-
-
- def _nop(*args): pass
-
- def check_input_and_call(self, callback, status_handler=_nop):
- """
- Return a function that checks the form for errors, and then if it's OK,
- invokes the user specified callback, passing it the form key/value dictionary.
- status_handler is called with a string indicating results.
- """
- def doit_callback(*ignore):
- errors = self.check_input_for_errors()
- if errors:
- status_handler(errors[0])
- #print '\n'.join(tuple(errors))
- else:
- kv = self.get_key_vals()
- if callback(kv):
- status_handler("OK")
- else:
- status_handler("Failed")
-
- return doit_callback
-
-
-
-# ----------------------------------------------------------------
-# Stand-alone example code
-# ----------------------------------------------------------------
-
-import sys
-from gnuradio.wxgui import stdgui2
-
-class demo_app_flow_graph (stdgui2.std_top_block):
- def __init__(self, frame, panel, vbox, argv):
- stdgui2.std_top_block.__init__ (self, frame, panel, vbox, argv)
-
- self.frame = frame
- self.panel = panel
-
- def _print_kv(kv):
- print "kv =", kv
- return True
-
- self.form = form()
-
- self.form['static1'] = \
- static_text_field(parent=panel, sizer=vbox,
- label="Static Text",
- value="The Static Value")
-
- self.form['text1'] = \
- text_field(parent=panel, sizer=vbox,
- label="TextCtrl",
- value="The Editable Value")
-
- self.form['int1'] = \
- int_field(parent=panel, sizer=vbox,
- label="Int Field",
- value=1234)
-
- self.form['float1'] = \
- float_field(parent=panel, sizer=vbox,
- label="Float Field",
- value=3.14159)
-
- self.doit = button_with_callback(
- panel, "Do It!",
- self.form.check_input_and_call(_print_kv, self._set_status_msg))
-
- vbox.Add(self.doit, 0, wx.CENTER)
-
- def _set_status_msg(self, msg):
- self.frame.GetStatusBar().SetStatusText(msg, 0)
-
-
-def main ():
- app = stdgui2.stdapp(demo_app_flow_graph, "wxgui form demo", nstatus=1)
- app.MainLoop ()
-
-if __name__ == '__main__':
- main ()
diff --git a/gr-wxgui/python/wxgui/forms/__init__.py b/gr-wxgui/python/wxgui/forms/__init__.py
deleted file mode 100644
index 058fa2ec28..0000000000
--- a/gr-wxgui/python/wxgui/forms/__init__.py
+++ /dev/null
@@ -1,102 +0,0 @@
-#
-# Copyright 2009 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-#
-
-"""
-The following classes will be available through gnuradio.wxgui.forms:
-"""
-
-########################################################################
-# External Converters
-########################################################################
-from converters import \
- eval_converter, str_converter, \
- float_converter, int_converter
-
-########################################################################
-# External Forms
-########################################################################
-from forms import \
- radio_buttons, drop_down, notebook, \
- button, toggle_button, single_button, \
- check_box, text_box, static_text, \
- slider, log_slider, gauge, \
- make_bold, DataEvent, EVT_DATA
-
-########################################################################
-# Helpful widgets
-########################################################################
-import wx
-
-class static_box_sizer(wx.StaticBoxSizer):
- """
- A box sizer with label and border.
-
- Args:
- parent: the parent widget
- sizer: add this widget to sizer if provided (optional)
- proportion: the proportion when added to the sizer (default=0)
- flag: the flag argument when added to the sizer (default=wx.EXPAND)
- label: title label for this widget (optional)
- bold: true to boldify the label
- orient: the sizer orientation wx.VERTICAL or wx.HORIZONTAL (default=wx.VERTICAL)
- """
- def __init__(self, parent, label='', bold=False, sizer=None, orient=wx.VERTICAL, proportion=0, flag=wx.EXPAND):
- box = wx.StaticBox(parent=parent, label=label)
- if bold: make_bold(box)
- wx.StaticBoxSizer.__init__(self, box=box, orient=orient)
- if sizer: sizer.Add(self, proportion, flag)
-
-class incr_decr_buttons(wx.BoxSizer):
- """
- A horizontal box sizer with a increment and a decrement button.
-
- Args:
- parent: the parent widget
- on_incr: the callback for pressing the + button
- on_decr: the callback for pressing the - button
- label: title label for this widget (optional)
- sizer: add this widget to sizer if provided (optional)
- proportion: the proportion when added to the sizer (default=0)
- flag: the flag argument when added to the sizer (default=wx.EXPAND)
- """
- def __init__(self, parent, on_incr, on_decr, label='', sizer=None, proportion=0, flag=wx.EXPAND):
- wx.BoxSizer.__init__(self, wx.HORIZONTAL)
- buttons_box = wx.BoxSizer(wx.HORIZONTAL)
- self._incr_button = wx.Button(parent, label='+', style=wx.BU_EXACTFIT)
- self._incr_button.Bind(wx.EVT_BUTTON, on_incr)
- buttons_box.Add(self._incr_button, 0, wx.ALIGN_CENTER_VERTICAL)
- self._decr_button = wx.Button(parent, label=' - ', style=wx.BU_EXACTFIT)
- self._decr_button.Bind(wx.EVT_BUTTON, on_decr)
- buttons_box.Add(self._decr_button, 0, wx.ALIGN_CENTER_VERTICAL)
- if label: #add label
- self.Add(wx.StaticText(parent, label='%s: '%label), 1, wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_LEFT)
- self.Add(buttons_box, 0, wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT)
- else: self.Add(buttons_box, 0, wx.ALIGN_CENTER_VERTICAL)
- if sizer: sizer.Add(self, proportion, flag)
-
- def Disable(self, disable=True): self.Enable(not disable)
- def Enable(self, enable=True):
- if enable:
- self._incr_button.Enable()
- self._decr_button.Enable()
- else:
- self._incr_button.Disable()
- self._decr_button.Disable()
diff --git a/gr-wxgui/python/wxgui/forms/converters.py b/gr-wxgui/python/wxgui/forms/converters.py
deleted file mode 100644
index db14d2752c..0000000000
--- a/gr-wxgui/python/wxgui/forms/converters.py
+++ /dev/null
@@ -1,154 +0,0 @@
-#
-# Copyright 2009 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-#
-
-from gnuradio import eng_notation
-import math
-
-class abstract_converter(object):
- def external_to_internal(self, v):
- """
- Convert from user specified value to value acceptable to underlying primitive.
- The underlying primitive usually expects strings.
- """
- raise NotImplementedError
- def internal_to_external(self, s):
- """
- Convert from underlying primitive value to user specified value.
- The underlying primitive usually expects strings.
- """
- raise NotImplementedError
- def help(self):
- return "Any string is acceptable"
-
-class identity_converter(abstract_converter):
- def external_to_internal(self,v):
- return v
- def internal_to_external(self, s):
- return s
-
-########################################################################
-# Commonly used converters
-########################################################################
-class chooser_converter(abstract_converter):
- """
- Convert between a set of possible choices and an index.
- Used in the chooser base and all sub-classes.
- """
- def __init__(self, choices):
- #choices must be a list because tuple does not have .index() in python2.5
- self._choices = list(choices)
- def external_to_internal(self, choice):
- return self._choices.index(choice)
- def internal_to_external(self, index):
- return self._choices[index]
- def help(self):
- return 'Enter a possible value in choices: "%s"'%str(self._choices)
-
-class bool_converter(abstract_converter):
- """
- The internal representation is boolean.
- The external representation is specified.
- Used in the check box form.
- """
- def __init__(self, true, false):
- self._true = true
- self._false = false
- def external_to_internal(self, v):
- if v == self._true: return True
- if v == self._false: return False
- raise Exception, 'Value "%s" is not a possible option.'%v
- def internal_to_external(self, v):
- if v: return self._true
- else: return self._false
- def help(self):
- return "Value must be in (%s, %s)."%(self._true, self._false)
-
-class eval_converter(abstract_converter):
- """
- A catchall converter when int and float are not enough.
- Evaluate the internal representation with python's eval().
- Possible uses, set a complex number, constellation points.
- Used in text box.
- """
- def __init__(self, formatter=lambda x: '%s'%(x)):
- self._formatter = formatter
- def external_to_internal(self, v):
- return self._formatter(v)
- def internal_to_external(self, s):
- return eval(s)
- def help(self):
- return "Value must be evaluatable by python's eval."
-
-class str_converter(abstract_converter):
- def __init__(self, formatter=lambda x: '%s'%(x)):
- self._formatter = formatter
- def external_to_internal(self, v):
- return self._formatter(v)
- def internal_to_external(self, s):
- return str(s)
-
-class int_converter(abstract_converter):
- def __init__(self, formatter=lambda x: '%d'%round(x)):
- self._formatter = formatter
- def external_to_internal(self, v):
- return self._formatter(v)
- def internal_to_external(self, s):
- return int(s, 0)
- def help(self):
- return "Enter an integer. Leading 0x indicates hex"
-
-class float_converter(abstract_converter):
- def __init__(self, formatter=eng_notation.num_to_str):
- self._formatter = formatter
- def external_to_internal(self, v):
- return self._formatter(v)
- def internal_to_external(self, s):
- return eng_notation.str_to_num(s)
- def help(self):
- return "Enter a float with optional scale suffix. E.g., 100.1M"
-
-class slider_converter(abstract_converter):
- """
- Scale values to and from the slider.
- """
- def __init__(self, minimum, maximum, num_steps, cast):
- assert minimum < maximum
- assert num_steps > 0
- self._offset = minimum
- self._scaler = float(maximum - minimum)/num_steps
- self._cast = cast
- def external_to_internal(self, v):
- return (v - self._offset)/self._scaler
- def internal_to_external(self, v):
- return self._cast(v*self._scaler + self._offset)
- def help(self):
- return "Value should be within slider range"
-
-class log_slider_converter(slider_converter):
- def __init__(self, min_exp, max_exp, num_steps, base):
- assert min_exp < max_exp
- assert num_steps > 0
- self._base = base
- slider_converter.__init__(self, minimum=min_exp, maximum=max_exp, num_steps=num_steps, cast=float)
- def external_to_internal(self, v):
- return slider_converter.external_to_internal(self, math.log(v, self._base))
- def internal_to_external(self, v):
- return self._base**slider_converter.internal_to_external(self, v)
diff --git a/gr-wxgui/python/wxgui/forms/forms.py b/gr-wxgui/python/wxgui/forms/forms.py
deleted file mode 100644
index f819f13397..0000000000
--- a/gr-wxgui/python/wxgui/forms/forms.py
+++ /dev/null
@@ -1,675 +0,0 @@
-#
-# Copyright 2009 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-#
-
-"""
-The forms module contains general purpose wx-gui forms for gnuradio apps.
-
-The forms follow a layered model:
- * internal layer
- * deals with the wxgui objects directly
- * implemented in event handler and update methods
- * translation layer
- * translates the between the external and internal layers
- * handles parsing errors between layers
- * external layer
- * provided external access to the user
- * set_value, get_value, and optional callback
- * set and get through optional pubsub and key
-
-Known problems:
- * An empty label in the radio box still consumes space.
- * The static text cannot resize the parent at runtime.
-"""
-
-EXT_KEY = 'external'
-INT_KEY = 'internal'
-
-import wx
-import sys
-from gnuradio.gr.pubsub import pubsub
-import converters
-
-EVT_DATA = wx.PyEventBinder(wx.NewEventType())
-class DataEvent(wx.PyEvent):
- def __init__(self, data):
- wx.PyEvent.__init__(self, wx.NewId(), EVT_DATA.typeId)
- self.data = data
-
-def make_bold(widget):
- font = widget.GetFont()
- font.SetWeight(wx.FONTWEIGHT_BOLD)
- widget.SetFont(font)
-
-########################################################################
-# Base Class Form
-########################################################################
-class _form_base(pubsub, wx.BoxSizer):
- def __init__(self, parent=None, sizer=None, proportion=0, flag=wx.EXPAND, ps=None, key='', value=None, callback=None, converter=converters.identity_converter()):
- pubsub.__init__(self)
- wx.BoxSizer.__init__(self, wx.HORIZONTAL)
- self._parent = parent
- self._key = key
- self._converter = converter
- self._callback = callback
- self._widgets = list()
- #add to the sizer if provided
- if sizer: sizer.Add(self, proportion, flag)
- #proxy the pubsub and key into this form
- if ps is not None:
- assert key
- self.proxy(EXT_KEY, ps, key)
- #no pubsub passed, must set initial value
- else: self.set_value(value)
-
- def __str__(self):
- return "Form: %s -> %s"%(self.__class__, self._key)
-
- def _add_widget(self, widget, label='', flag=0, label_prop=0, widget_prop=1):
- """
- Add the main widget to this object sizer.
- If label is passed, add a label as well.
- Register the widget and the label in the widgets list (for enable/disable).
- Bind the update handler to the widget for data events.
- This ensures that the gui thread handles updating widgets.
- Setup the pusub triggers for external and internal.
-
- Args:
- widget: the main widget
- label: the optional label
- flag: additional flags for widget
- label_prop: the proportion for the label
- widget_prop: the proportion for the widget
- """
- #setup data event
- widget.Bind(EVT_DATA, lambda x: self._update(x.data))
- update = lambda x: wx.PostEvent(widget, DataEvent(x))
- #register widget
- self._widgets.append(widget)
- #create optional label
- if not label: self.Add(widget, widget_prop, wx.ALIGN_CENTER_VERTICAL | flag)
- else:
- label_text = wx.StaticText(self._parent, label='%s: '%label)
- self._widgets.append(label_text)
- self.Add(label_text, label_prop, wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_LEFT)
- self.Add(widget, widget_prop, wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT | flag)
- #initialize without triggering pubsubs
- self._translate_external_to_internal(self[EXT_KEY])
- update(self[INT_KEY])
- #subscribe all the functions
- self.subscribe(INT_KEY, update)
- self.subscribe(INT_KEY, self._translate_internal_to_external)
- self.subscribe(EXT_KEY, self._translate_external_to_internal)
-
- def _translate_external_to_internal(self, external):
- try:
- internal = self._converter.external_to_internal(external)
- #prevent infinite loop between internal and external pubsub keys by only setting if changed
- if self[INT_KEY] != internal: self[INT_KEY] = internal
- except Exception, e:
- self._err_msg(external, e)
- self[INT_KEY] = self[INT_KEY] #reset to last good setting
-
- def _translate_internal_to_external(self, internal):
- try:
- external = self._converter.internal_to_external(internal)
- #prevent infinite loop between internal and external pubsub keys by only setting if changed
- if self[EXT_KEY] != external: self[EXT_KEY] = external
- except Exception, e:
- self._err_msg(internal, e)
- self[EXT_KEY] = self[EXT_KEY] #reset to last good setting
- if self._callback: self._callback(self[EXT_KEY])
-
- def _err_msg(self, value, e):
- print >> sys.stderr, self, 'Error translating value: "%s"\n\t%s\n\t%s'%(value, e, self._converter.help())
-
- #override in subclasses to handle the wxgui object
- def _update(self, value): raise NotImplementedError
- def _handle(self, event): raise NotImplementedError
-
- #provide a set/get interface for this form
- def get_value(self): return self[EXT_KEY]
- def set_value(self, value): self[EXT_KEY] = value
-
- def Disable(self, disable=True): self.Enable(not disable)
- def Enable(self, enable=True):
- if enable:
- for widget in self._widgets: widget.Enable()
- else:
- for widget in self._widgets: widget.Disable()
-
-########################################################################
-# Base Class Chooser Form
-########################################################################
-class _chooser_base(_form_base):
- def __init__(self, choices=[], labels=None, **kwargs):
- _form_base.__init__(self, converter=converters.chooser_converter(choices), **kwargs)
- self._choices = choices
- self._labels = map(str, labels or choices)
-
-########################################################################
-# Base Class Slider Form
-########################################################################
-class _slider_base(_form_base):
- def __init__(self, label='', length=-1, converter=None, num_steps=100, style=wx.SL_HORIZONTAL, **kwargs):
- _form_base.__init__(self, converter=converter, **kwargs)
- if style & wx.SL_HORIZONTAL: slider_size = wx.Size(length, -1)
- elif style & wx.SL_VERTICAL: slider_size = wx.Size(-1, length)
- else: raise NotImplementedError
- self._slider = wx.Slider(self._parent, minValue=0, maxValue=num_steps, size=slider_size, style=style)
- self._slider.Bind(wx.EVT_SCROLL, self._handle)
- self._add_widget(self._slider, label, flag=wx.EXPAND)
-
- def _handle(self, event): self[INT_KEY] = self._slider.GetValue()
- def _update(self, value): self._slider.SetValue(int(round(value)))
-
-########################################################################
-# Static Text Form
-########################################################################
-class static_text(_form_base):
- """
- A text box form.
-
- Args:
- parent: the parent widget
- sizer: add this widget to sizer if provided (optional)
- proportion: the proportion when added to the sizer (default=0)
- flag: the flag argument when added to the sizer (default=wx.EXPAND)
- ps: the pubsub object (optional)
- key: the pubsub key (optional)
- value: the default value (optional)
- label: title label for this widget (optional)
- width: the width of the form in px
- bold: true to bold-ify the text (default=False)
- units: a suffix to add after the text
- converter: forms.str_converter(), int_converter(), float_converter()...
- """
- def __init__(self, label='', width=-1, bold=False, units='', converter=converters.str_converter(), **kwargs):
- self._units = units
- _form_base.__init__(self, converter=converter, **kwargs)
- self._static_text = wx.StaticText(self._parent, size=wx.Size(width, -1))
- if bold: make_bold(self._static_text)
- self._add_widget(self._static_text, label)
-
- def _update(self, label):
- if self._units: label += ' ' + self._units
- self._static_text.SetLabel(label); self._parent.Layout()
-
-########################################################################
-# Text Box Form
-########################################################################
-class text_box(_form_base):
- """
- A text box form.
-
- Args:
- parent: the parent widget
- sizer: add this widget to sizer if provided (optional)
- proportion: the proportion when added to the sizer (default=0)
- flag: the flag argument when added to the sizer (default=wx.EXPAND)
- ps: the pubsub object (optional)
- key: the pubsub key (optional)
- value: the default value (optional)
- label: title label for this widget (optional)
- width: the width of the form in px
- converter: forms.str_converter(), int_converter(), float_converter()...
- """
- def __init__(self, label='', width=-1, converter=converters.eval_converter(), **kwargs):
- _form_base.__init__(self, converter=converter, **kwargs)
- self._text_box = wx.TextCtrl(self._parent, size=wx.Size(width, -1), style=wx.TE_PROCESS_ENTER)
- self._default_bg_colour = self._text_box.GetBackgroundColour()
- self._text_box.Bind(wx.EVT_TEXT_ENTER, self._handle)
- self._text_box.Bind(wx.EVT_TEXT, self._update_color)
- self._add_widget(self._text_box, label)
-
- def _update_color(self, *args):
- if self._text_box.GetValue() == self[INT_KEY]:
- self._text_box.SetBackgroundColour(self._default_bg_colour)
- else: self._text_box.SetBackgroundColour('#EEDDDD')
-
- def _handle(self, event): self[INT_KEY] = self._text_box.GetValue()
- def _update(self, value): self._text_box.SetValue(value); self._update_color()
-
-########################################################################
-# Slider Form
-# Linear Slider
-# Logarithmic Slider
-########################################################################
-class slider(_slider_base):
- """
- A generic linear slider.
-
- Args:
- parent: the parent widget
- sizer: add this widget to sizer if provided (optional)
- proportion: the proportion when added to the sizer (default=0)
- flag: the flag argument when added to the sizer (default=wx.EXPAND)
- ps: the pubsub object (optional)
- key: the pubsub key (optional)
- value: the default value (optional)
- label: title label for this widget (optional)
- length: the length of the slider in px (optional)
- style: wx.SL_HORIZONTAL or wx.SL_VERTICAL (default=horizontal)
- minimum: the minimum value
- maximum: the maximum value
- num_steps: the number of slider steps (or specify step_size)
- step_size: the step between slider jumps (or specify num_steps)
- cast: a cast function, int, or float (default=float)
- """
- def __init__(self, minimum=-100, maximum=100, num_steps=100, step_size=None, cast=float, **kwargs):
- assert step_size or num_steps
- if step_size is not None: num_steps = (maximum - minimum)/step_size
- converter = converters.slider_converter(minimum=minimum, maximum=maximum, num_steps=num_steps, cast=cast)
- _slider_base.__init__(self, converter=converter, num_steps=num_steps, **kwargs)
-
-class log_slider(_slider_base):
- """
- A generic logarithmic slider.
- The sliders min and max values are base**min_exp and base**max_exp.
-
- Args:
- parent: the parent widget
- sizer: add this widget to sizer if provided (optional)
- proportion: the proportion when added to the sizer (default=0)
- flag: the flag argument when added to the sizer (default=wx.EXPAND)
- ps: the pubsub object (optional)
- key: the pubsub key (optional)
- value: the default value (optional)
- label: title label for this widget (optional)
- length: the length of the slider in px (optional)
- style: wx.SL_HORIZONTAL or wx.SL_VERTICAL (default=horizontal)
- min_exp: the minimum exponent
- max_exp: the maximum exponent
- base: the exponent base in base**exp
- num_steps: the number of slider steps (or specify step_size)
- step_size: the exponent step size (or specify num_steps)
- """
- def __init__(self, min_exp=0, max_exp=1, base=10, num_steps=100, step_size=None, **kwargs):
- assert step_size or num_steps
- if step_size is not None: num_steps = (max_exp - min_exp)/step_size
- converter = converters.log_slider_converter(min_exp=min_exp, max_exp=max_exp, num_steps=num_steps, base=base)
- _slider_base.__init__(self, converter=converter, num_steps=num_steps, **kwargs)
-
-########################################################################
-# Gauge Form
-########################################################################
-class gauge(_form_base):
- """
- A gauge bar.
- The gauge displays floating point values between the minimum and maximum.
-
- Args:
- parent: the parent widget
- sizer: add this widget to sizer if provided (optional)
- proportion: the proportion when added to the sizer (default=0)
- flag: the flag argument when added to the sizer (default=wx.EXPAND)
- ps: the pubsub object (optional)
- key: the pubsub key (optional)
- value: the default value (optional)
- label: title label for this widget (optional)
- length: the length of the slider in px (optional)
- style: wx.GA_HORIZONTAL or wx.GA_VERTICAL (default=horizontal)
- minimum: the minimum value
- maximum: the maximum value
- num_steps: the number of slider steps (or specify step_size)
- step_size: the step between slider jumps (or specify num_steps)
- """
- def __init__(self, label='', length=-1, minimum=-100, maximum=100, num_steps=100, step_size=None, style=wx.GA_HORIZONTAL, **kwargs):
- assert step_size or num_steps
- if step_size is not None: num_steps = (maximum - minimum)/step_size
- converter = converters.slider_converter(minimum=minimum, maximum=maximum, num_steps=num_steps, cast=float)
- _form_base.__init__(self, converter=converter, **kwargs)
- if style & wx.SL_HORIZONTAL: gauge_size = wx.Size(length, -1)
- elif style & wx.SL_VERTICAL: gauge_size = wx.Size(-1, length)
- else: raise NotImplementedError
- self._gauge = wx.Gauge(self._parent, range=num_steps, size=gauge_size, style=style)
- self._add_widget(self._gauge, label, flag=wx.EXPAND)
-
- def _update(self, value): self._gauge.SetValue(value)
-
-########################################################################
-# Check Box Form
-########################################################################
-class check_box(_form_base):
- """
- Create a check box form.
-
- Args:
- parent: the parent widget
- sizer: add this widget to sizer if provided (optional)
- proportion: the proportion when added to the sizer (default=0)
- flag: the flag argument when added to the sizer (default=wx.EXPAND)
- ps: the pubsub object (optional)
- key: the pubsub key (optional)
- value: the default value (optional)
- true: the value for form when checked (default=True)
- false: the value for form when unchecked (default=False)
- label: title label for this widget (optional)
- """
- def __init__(self, label='', true=True, false=False, **kwargs):
- _form_base.__init__(self, converter=converters.bool_converter(true=true, false=false), **kwargs)
- self._check_box = wx.CheckBox(self._parent, style=wx.CHK_2STATE, label=label)
- self._check_box.Bind(wx.EVT_CHECKBOX, self._handle)
- self._add_widget(self._check_box)
-
- def _handle(self, event): self[INT_KEY] = self._check_box.IsChecked()
- def _update(self, checked): self._check_box.SetValue(checked)
-
-########################################################################
-# Drop Down Chooser Form
-########################################################################
-class drop_down(_chooser_base):
- """
- Create a drop down menu form.
-
- Args:
- parent: the parent widget
- sizer: add this widget to sizer if provided (optional)
- proportion: the proportion when added to the sizer (default=0)
- flag: the flag argument when added to the sizer (default=wx.EXPAND)
- ps: the pubsub object (optional)
- key: the pubsub key (optional)
- value: the default value (optional)
- choices: list of possible values
- labels: list of labels for each choice (default=choices)
- label: title label for this widget (optional)
- width: the form width in px (optional)
- """
- def __init__(self, label='', width=-1, **kwargs):
- _chooser_base.__init__(self, **kwargs)
- self._drop_down = wx.Choice(self._parent, choices=self._labels, size=wx.Size(width, -1))
- self._drop_down.Bind(wx.EVT_CHOICE, self._handle)
- self._add_widget(self._drop_down, label, widget_prop=0, label_prop=1)
-
- def _handle(self, event): self[INT_KEY] = self._drop_down.GetSelection()
- def _update(self, i): self._drop_down.SetSelection(i)
-
-########################################################################
-# Button Chooser Form
-# Circularly move through the choices with each click.
-# Can be a single-click button with one choice.
-# Can be a 2-state button with two choices.
-########################################################################
-class button(_chooser_base):
- """
- Create a multi-state button.
- parent the parent widget
- sizer add this widget to sizer if provided (optional)
- proportion the proportion when added to the sizer (default=0)
- flag the flag argument when added to the sizer (default=wx.EXPAND)
- ps the pubsub object (optional)
- key the pubsub key (optional)
- value the default value (optional)
- choices list of possible values
- labels list of labels for each choice (default=choices)
- width the width of the button in pixels (optional)
- style style arguments (optional)
- label title label for this widget (optional)
- """
- def __init__(self, label='', style=0, width=-1, **kwargs):
- _chooser_base.__init__(self, **kwargs)
- self._button = wx.Button(self._parent, size=wx.Size(width, -1), style=style)
- self._button.Bind(wx.EVT_BUTTON, self._handle)
- self._add_widget(self._button, label, widget_prop=((not style&wx.BU_EXACTFIT) and 1 or 0))
-
- def _handle(self, event): self[INT_KEY] = (self[INT_KEY] + 1)%len(self._choices) #circularly increment index
- def _update(self, i): self._button.SetLabel(self._labels[i]); self.Layout()
-
-class toggle_button(button):
- """
- Create a dual-state button.
- This button will alternate between True and False when clicked.
-
- Args:
- parent: the parent widget
- sizer: add this widget to sizer if provided (optional)
- proportion: the proportion when added to the sizer (default=0)
- flag: the flag argument when added to the sizer (default=wx.EXPAND)
- ps: the pubsub object (optional)
- key: the pubsub key (optional)
- value: the default value (optional)
- width: the width of the button in pixels (optional)
- style: style arguments (optional)
- true_label: the button's label in the true state
- false_label: the button's label in the false state
- """
- def __init__(self, true_label='On (click to stop)', false_label='Off (click to start)', **kwargs):
- button.__init__(self, choices=[True, False], labels=[true_label, false_label], **kwargs)
-
-class single_button(toggle_button):
- """
- Create a single state button.
- This button will callback() when clicked.
- For use when state holding is not important.
-
- Args:
- parent: the parent widget
- sizer: add this widget to sizer if provided (optional)
- proportion: the proportion when added to the sizer (default=0)
- flag: the flag argument when added to the sizer (default=wx.EXPAND)
- ps: the pubsub object (optional)
- key: the pubsub key (optional)
- value: the default value (optional)
- width: the width of the button in pixels (optional)
- style: style arguments (optional)
- label: the button's label
- """
- def __init__(self, label='click for callback', **kwargs):
- toggle_button.__init__(self, true_label=label, false_label=label, value=True, **kwargs)
-
-########################################################################
-# Radio Buttons Chooser Form
-########################################################################
-class radio_buttons(_chooser_base):
- """
- Create a radio button form.
-
- Args:
- parent: the parent widget
- sizer: add this widget to sizer if provided (optional)
- proportion: the proportion when added to the sizer (default=0)
- flag: the flag argument when added to the sizer (default=wx.EXPAND)
- ps: the pubsub object (optional)
- key: the pubsub key (optional)
- value the default value (optional)
- choices: list of possible values
- labels: list of labels for each choice (default=choices)
- major_dimension: the number of rows/cols (default=auto)
- label: title label for this widget (optional)
- style: useful style args: wx.RA_HORIZONTAL, wx.RA_VERTICAL, wx.NO_BORDER (default=wx.RA_HORIZONTAL)
- """
- def __init__(self, style=wx.RA_HORIZONTAL, label='', major_dimension=0, **kwargs):
- _chooser_base.__init__(self, **kwargs)
- #create radio buttons
- self._radio_buttons = wx.RadioBox(self._parent, choices=self._labels, style=style, label=label, majorDimension=major_dimension)
- self._radio_buttons.Bind(wx.EVT_RADIOBOX, self._handle)
- self._add_widget(self._radio_buttons)
-
- def _handle(self, event): self[INT_KEY] = self._radio_buttons.GetSelection()
- def _update(self, i): self._radio_buttons.SetSelection(i)
-
-########################################################################
-# Notebook Chooser Form
-# The notebook pages/tabs are for selecting between choices.
-# A page must be added to the notebook for each choice.
-########################################################################
-class notebook(_chooser_base):
- def __init__(self, pages, notebook, **kwargs):
- _chooser_base.__init__(self, **kwargs)
- assert len(pages) == len(self._choices)
- self._notebook = notebook
- self._notebook.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGING, self._handle)
- #add pages, setting the label on each tab
- for i, page in enumerate(pages):
- self._notebook.AddPage(page, self._labels[i])
- self._add_widget(self._notebook)
-
- def _handle(self, event): self[INT_KEY] = event.GetSelection()
- # SetSelection triggers a page change event (deprecated, breaks on Windows) and ChangeSelection does not
- def _update(self, i): self._notebook.ChangeSelection(i)
-
-# ----------------------------------------------------------------
-# Stand-alone test application
-# ----------------------------------------------------------------
-
-import wx
-from gnuradio.wxgui import gui
-
-class app_gui (object):
- def __init__(self, frame, panel, vbox, top_block, options, args):
-
- def callback(v): print v
-
- radio_buttons(
- sizer=vbox,
- parent=panel,
- choices=[2, 4, 8, 16],
- labels=['two', 'four', 'eight', 'sixteen'],
- value=4,
- style=wx.RA_HORIZONTAL,
- label='test radio long string',
- callback=callback,
- #major_dimension = 2,
- )
-
- radio_buttons(
- sizer=vbox,
- parent=panel,
- choices=[2, 4, 8, 16],
- labels=['two', 'four', 'eight', 'sixteen'],
- value=4,
- style=wx.RA_VERTICAL,
- label='test radio long string',
- callback=callback,
- #major_dimension = 2,
- )
-
- radio_buttons(
- sizer=vbox,
- parent=panel,
- choices=[2, 4, 8, 16],
- labels=['two', 'four', 'eight', 'sixteen'],
- value=4,
- style=wx.RA_VERTICAL | wx.NO_BORDER,
- callback=callback,
- #major_dimension = 2,
- )
-
- button(
- sizer=vbox,
- parent=panel,
- choices=[2, 4, 8, 16],
- labels=['two', 'four', 'eight', 'sixteen'],
- value=2,
- label='button value',
- callback=callback,
- #width=100,
- )
-
-
- drop_down(
- sizer=vbox,
- parent=panel,
- choices=[2, 4, 8, 16],
- value=2,
- label='Choose One',
- callback=callback,
- )
- check_box(
- sizer=vbox,
- parent=panel,
- value=False,
- label='check me',
- callback=callback,
- )
- text_box(
- sizer=vbox,
- parent=panel,
- value=3,
- label='text box',
- callback=callback,
- width=200,
- )
-
- static_text(
- sizer=vbox,
- parent=panel,
- value='bob',
- label='static text',
- width=-1,
- bold=True,
- )
-
- slider(
- sizer=vbox,
- parent=panel,
- value=12,
- label='slider',
- callback=callback,
- )
-
- log_slider(
- sizer=vbox,
- parent=panel,
- value=12,
- label='slider',
- callback=callback,
- )
-
- slider(
- sizer=vbox,
- parent=panel,
- value=12,
- label='slider',
- callback=callback,
- style=wx.SL_VERTICAL,
- length=30,
- )
-
- toggle_button(
- sizer=vbox,
- parent=panel,
- value=True,
- label='toggle it',
- callback=callback,
- )
-
- single_button(
- sizer=vbox,
- parent=panel,
- label='sig test',
- callback=callback,
- )
-
-if __name__ == "__main__":
- try:
-
- # Create the GUI application
- app = gui.app(
- gui=app_gui, # User interface class
- title="Test Forms", # Top window title
- )
-
- # And run it
- app.MainLoop()
-
- except RuntimeError, e:
- print e
- sys.exit(1)
diff --git a/gr-wxgui/python/wxgui/gui.py b/gr-wxgui/python/wxgui/gui.py
deleted file mode 100644
index ccc773eabf..0000000000
--- a/gr-wxgui/python/wxgui/gui.py
+++ /dev/null
@@ -1,135 +0,0 @@
-#
-# Copyright 2009 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-#
-
-import wx
-from gnuradio import gr
-
-#
-# Top-level display panel with vertical box sizer. User does not create or
-# subclass this class; rather, the user supplies his own class constructor
-# that gets invoked with needed parameters.
-#
-class top_panel(wx.Panel):
- def __init__(self, frame, top_block, gui, options, args):
- wx.Panel.__init__(self, frame, -1)
- vbox = wx.BoxSizer(wx.VERTICAL)
-
- # Create the user's GUI class
- if gui is not None:
- self.gui = gui(frame, # Top-level window frame
- self, # Parent class for user created windows
- vbox, # Sizer for user to add windows to
- top_block, # GUI-unaware flowgraph to manipulate
- options, # Command-line options
- args) # Command-line arguments
-
- else:
- # User hasn't made their own GUI, create our default
- # We don't have a default GUI yet either :)
- p = wx.Panel(self)
- p.SetSize((640,480))
- vbox.Add(p, 1, wx.EXPAND)
-
- self.SetSizer(vbox)
- self.SetAutoLayout(True)
- vbox.Fit(self)
-
- def shutdown(self):
- try:
- self.gui.shutdown()
- except AttributeError:
- pass
-
-#
-# Top-level window frame with menu and status bars.
-#
-class top_frame(wx.Frame):
- def __init__ (self, top_block, gui, options, args,
- title, nstatus, start, realtime):
-
- wx.Frame.__init__(self, None, -1, title)
- self.top_block = top_block
-
- self.CreateStatusBar(nstatus)
- mainmenu = wx.MenuBar()
- self.SetMenuBar(mainmenu)
-
- menu = wx.Menu()
-
- item = menu.Append(200, 'E&xit', 'Exit Application') # FIXME magic ID
- self.Bind(wx.EVT_MENU, self.OnCloseWindow, item)
- mainmenu.Append(menu, "&File")
- self.Bind(wx.EVT_CLOSE, self.OnCloseWindow)
-
- # Create main panel, creates user GUI class with supplied parameters
- self.panel = top_panel(self, top_block, gui, options, args)
-
- vbox = wx.BoxSizer(wx.VERTICAL)
- vbox.Add(self.panel, 1, wx.EXPAND)
- self.SetSizer(vbox)
- self.SetAutoLayout(True)
- vbox.Fit(self)
-
- if realtime:
- if gr.enable_realtime_scheduling() != gr.RT_OK:
- self.SetStatusText("Failed to enable realtime scheduling")
-
- if start and self.top_block is not None:
- self.top_block.start()
-
- def OnCloseWindow(self, event):
- # Give user API a chance to do something
- self.panel.shutdown()
-
- # Stop flowgraph as a convenience
- self.SetStatusText("Ensuring flowgraph has completed before exiting...")
- if self.top_block is not None:
- self.top_block.stop()
- self.top_block.wait()
-
- self.Destroy()
-
-
-#
-# Top-level wxPython application object. User creates or subclasses this
-# in their GUI script.
-#
-class app(wx.App):
- def __init__ (self, top_block=None, gui=None, options=None, args=None,
- title="GNU Radio", nstatus=1, start=False, realtime=False):
- self.top_block = top_block
- self.gui = gui
- self.options = options
- self.args = args
- self.title = title
- self.nstatus = nstatus
- self.start = start
- self.realtime = realtime
-
- wx.App.__init__ (self, redirect=False)
-
- def OnInit(self):
- # Pass user parameters to top window frame
- frame = top_frame(self.top_block, self.gui, self.options, self.args,
- self.title, self.nstatus, self.start, self.realtime)
- frame.Show(True)
- self.SetTopWindow(frame)
- return True
diff --git a/gr-wxgui/python/wxgui/histo_window.py b/gr-wxgui/python/wxgui/histo_window.py
deleted file mode 100644
index 424ee7bbdb..0000000000
--- a/gr-wxgui/python/wxgui/histo_window.py
+++ /dev/null
@@ -1,168 +0,0 @@
-#
-# Copyright 2009 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-#
-
-##################################################
-# Imports
-##################################################
-import plotter
-import common
-import wx
-import numpy
-import math
-import pubsub
-from constants import *
-from gnuradio import gr #for gr.prefs
-import forms
-
-##################################################
-# Constants
-##################################################
-DEFAULT_WIN_SIZE = (600, 300)
-
-##################################################
-# histo window control panel
-##################################################
-class control_panel(wx.Panel):
- """
- A control panel with wx widgits to control the plotter and histo sink.
- """
-
- def __init__(self, parent):
- """
- Create a new control panel.
-
- Args:
- parent: the wx parent window
- """
- self.parent = parent
- wx.Panel.__init__(self, parent, style=wx.SUNKEN_BORDER)
- parent[SHOW_CONTROL_PANEL_KEY] = True
- parent.subscribe(SHOW_CONTROL_PANEL_KEY, self.Show)
- control_box = wx.BoxSizer(wx.VERTICAL)
- SIZE = (100, -1)
- control_box = forms.static_box_sizer(
- parent=self, label='Options',
- bold=True, orient=wx.VERTICAL,
- )
- #num bins
- control_box.AddStretchSpacer()
- forms.text_box(
- sizer=control_box, parent=self, label='Num Bins',
- converter=forms.int_converter(),
- ps=parent, key=NUM_BINS_KEY,
- )
- #frame size
- control_box.AddStretchSpacer()
- forms.text_box(
- sizer=control_box, parent=self, label='Frame Size',
- converter=forms.int_converter(),
- ps=parent, key=FRAME_SIZE_KEY,
- )
- #run/stop
- control_box.AddStretchSpacer()
- forms.toggle_button(
- sizer=control_box, parent=self,
- true_label='Stop', false_label='Run',
- ps=parent, key=RUNNING_KEY,
- )
- #set sizer
- self.SetSizerAndFit(control_box)
-
-##################################################
-# histo window with plotter and control panel
-##################################################
-class histo_window(wx.Panel, pubsub.pubsub):
- def __init__(
- self,
- parent,
- controller,
- size,
- title,
- maximum_key,
- minimum_key,
- num_bins_key,
- frame_size_key,
- msg_key,
- ):
- pubsub.pubsub.__init__(self)
- #setup
- self.samples = list()
- #proxy the keys
- self.proxy(MAXIMUM_KEY, controller, maximum_key)
- self.proxy(MINIMUM_KEY, controller, minimum_key)
- self.proxy(NUM_BINS_KEY, controller, num_bins_key)
- self.proxy(FRAME_SIZE_KEY, controller, frame_size_key)
- self.proxy(MSG_KEY, controller, msg_key)
- #initialize values
- self[RUNNING_KEY] = True
- self[X_DIVS_KEY] = 8
- self[Y_DIVS_KEY] = 4
- #init panel and plot
- wx.Panel.__init__(self, parent, style=wx.SIMPLE_BORDER)
- self.plotter = plotter.bar_plotter(self)
- self.plotter.SetSize(wx.Size(*size))
- self.plotter.SetSizeHints(*size)
- self.plotter.set_title(title)
- self.plotter.enable_point_label(True)
- self.plotter.enable_grid_lines(False)
- #setup the box with plot and controls
- self.control_panel = control_panel(self)
- main_box = wx.BoxSizer(wx.HORIZONTAL)
- main_box.Add(self.plotter, 1, wx.EXPAND)
- main_box.Add(self.control_panel, 0, wx.EXPAND)
- self.SetSizerAndFit(main_box)
- #register events
- self.subscribe(MSG_KEY, self.handle_msg)
- self.subscribe(X_DIVS_KEY, self.update_grid)
- self.subscribe(Y_DIVS_KEY, self.update_grid)
-
- def handle_msg(self, msg):
- """
- Handle the message from the fft sink message queue.
-
- Args:
- msg: the frame as a character array
- """
- if not self[RUNNING_KEY]: return
- #convert to floating point numbers
- self.samples = 100*numpy.fromstring(msg, numpy.float32)[:self[NUM_BINS_KEY]] #only take first frame
- self.plotter.set_bars(
- bars=self.samples,
- bar_width=0.6,
- color_spec=(0, 0, 1),
- )
- self.update_grid()
-
- def update_grid(self):
- if not len(self.samples): return
- #calculate the maximum y value
- y_off = math.ceil(numpy.max(self.samples))
- y_off = min(max(y_off, 1.0), 100.0) #between 1% and 100%
- #update the x grid
- self.plotter.set_x_grid(
- self[MINIMUM_KEY], self[MAXIMUM_KEY],
- common.get_clean_num((self[MAXIMUM_KEY] - self[MINIMUM_KEY])/self[X_DIVS_KEY]),
- )
- self.plotter.set_x_label('Counts')
- #update the y grid
- self.plotter.set_y_grid(0, y_off, y_off/self[Y_DIVS_KEY])
- self.plotter.set_y_label('Frequency', '%')
- self.plotter.update()
diff --git a/gr-wxgui/python/wxgui/histosink_gl.py b/gr-wxgui/python/wxgui/histosink_gl.py
deleted file mode 100644
index 2126d63191..0000000000
--- a/gr-wxgui/python/wxgui/histosink_gl.py
+++ /dev/null
@@ -1,113 +0,0 @@
-#
-# Copyright 2009,2012 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-#
-
-##################################################
-# Imports
-##################################################
-import histo_window
-import common
-from gnuradio import gr
-from gnuradio import analog
-from gnuradio import blocks
-from gnuradio import wxgui
-from pubsub import pubsub
-from constants import *
-
-##################################################
-# histo sink block (wrapper for old wxgui)
-##################################################
-class histo_sink_f(gr.hier_block2, common.wxgui_hb):
- """
- A histogram block and a gui window.
- """
-
- def __init__(
- self,
- parent,
- size=histo_window.DEFAULT_WIN_SIZE,
- title='',
- num_bins=11,
- frame_size=1000,
- ):
- #init
- gr.hier_block2.__init__(
- self,
- "histo_sink",
- gr.io_signature(1, 1, gr.sizeof_float),
- gr.io_signature(0, 0, 0),
- )
- #blocks
- msgq = gr.msg_queue(2)
- histo = wxgui.histo_sink_f(msgq)
- histo.set_num_bins(num_bins)
- histo.set_frame_size(frame_size)
- #controller
- self.controller = pubsub()
- self.controller.subscribe(NUM_BINS_KEY, histo.set_num_bins)
- self.controller.publish(NUM_BINS_KEY, histo.get_num_bins)
- self.controller.subscribe(FRAME_SIZE_KEY, histo.set_frame_size)
- self.controller.publish(FRAME_SIZE_KEY, histo.get_frame_size)
- #start input watcher
- common.input_watcher(msgq, self.controller, MSG_KEY, arg1_key=MINIMUM_KEY, arg2_key=MAXIMUM_KEY)
- #create window
- self.win = histo_window.histo_window(
- parent=parent,
- controller=self.controller,
- size=size,
- title=title,
- maximum_key=MAXIMUM_KEY,
- minimum_key=MINIMUM_KEY,
- num_bins_key=NUM_BINS_KEY,
- frame_size_key=FRAME_SIZE_KEY,
- msg_key=MSG_KEY,
- )
- common.register_access_methods(self, self.win)
- #connect
- self.wxgui_connect(self, histo)
-
-# ----------------------------------------------------------------
-# Standalone test app
-# ----------------------------------------------------------------
-
-import wx
-from gnuradio.wxgui import stdgui2
-
-class test_app_block (stdgui2.std_top_block):
- def __init__(self, frame, panel, vbox, argv):
- stdgui2.std_top_block.__init__ (self, frame, panel, vbox, argv)
-
- # build our flow graph
- input_rate = 20.48e3
-
- src2 = analog.sig_source_f(input_rate, analog.GR_SIN_WAVE, 2e3, 1)
- #src2 = analog.sig_source_f(input_rate, analog.GR_CONST_WAVE, 5.75e3, 1)
- thr2 = blocks.throttle(gr.sizeof_float, input_rate)
- sink2 = histo_sink_f(panel, title="Data", num_bins=31, frame_size=1000)
- vbox.Add(sink2.win, 1, wx.EXPAND)
-
- self.connect(src2, thr2, sink2)
-
-def main ():
- app = stdgui2.stdapp(test_app_block, "Histo Sink Test App")
- app.MainLoop()
-
-if __name__ == '__main__':
- main()
diff --git a/gr-wxgui/python/wxgui/number_window.py b/gr-wxgui/python/wxgui/number_window.py
deleted file mode 100644
index 2e54f8460f..0000000000
--- a/gr-wxgui/python/wxgui/number_window.py
+++ /dev/null
@@ -1,219 +0,0 @@
-#
-# Copyright 2008 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-#
-
-##################################################
-# Imports
-##################################################
-import common
-import numpy
-import wx
-import pubsub
-from constants import *
-from gnuradio import gr #for gr.prefs
-import forms
-
-##################################################
-# Constants
-##################################################
-NEG_INF = float('-inf')
-SLIDER_STEPS = 100
-AVG_ALPHA_MIN_EXP, AVG_ALPHA_MAX_EXP = -3, 0
-DEFAULT_NUMBER_RATE = gr.prefs().get_long('wxgui', 'number_rate', 5)
-DEFAULT_WIN_SIZE = (300, 300)
-DEFAULT_GAUGE_RANGE = 1000
-VALUE_REPR_KEY = 'value_repr'
-VALUE_REAL_KEY = 'value_real'
-VALUE_IMAG_KEY = 'value_imag'
-
-##################################################
-# Number window control panel
-##################################################
-class control_panel(wx.Panel):
- """
- A control panel with wx widgits to control the averaging.
- """
-
- def __init__(self, parent):
- """
- Create a new control panel.
-
- Args:
- parent: the wx parent window
- """
- self.parent = parent
- wx.Panel.__init__(self, parent)
- parent[SHOW_CONTROL_PANEL_KEY] = True
- parent.subscribe(SHOW_CONTROL_PANEL_KEY, self.Show)
- control_box = wx.BoxSizer(wx.VERTICAL)
- #checkboxes for average and peak hold
- control_box.AddStretchSpacer()
- options_box = forms.static_box_sizer(
- parent=self, sizer=control_box, label='Options',
- bold=True, orient=wx.VERTICAL,
- )
- forms.check_box(
- sizer=options_box, parent=self, label='Peak Hold',
- ps=parent, key=PEAK_HOLD_KEY,
- )
- forms.check_box(
- sizer=options_box, parent=self, label='Average',
- ps=parent, key=AVERAGE_KEY,
- )
- #static text and slider for averaging
- avg_alpha_text = forms.static_text(
- sizer=options_box, parent=self, label='Avg Alpha',
- converter=forms.float_converter(lambda x: '%.4f'%x),
- ps=parent, key=AVG_ALPHA_KEY, width=50,
- )
- avg_alpha_slider = forms.log_slider(
- sizer=options_box, parent=self,
- min_exp=AVG_ALPHA_MIN_EXP,
- max_exp=AVG_ALPHA_MAX_EXP,
- num_steps=SLIDER_STEPS,
- ps=parent, key=AVG_ALPHA_KEY,
- )
- for widget in (avg_alpha_text, avg_alpha_slider):
- parent.subscribe(AVERAGE_KEY, widget.Enable)
- widget.Enable(parent[AVERAGE_KEY])
- #run/stop
- control_box.AddStretchSpacer()
- forms.toggle_button(
- sizer=control_box, parent=self,
- true_label='Stop', false_label='Run',
- ps=parent, key=RUNNING_KEY,
- )
- #set sizer
- self.SetSizerAndFit(control_box)
-
-##################################################
-# Numbersink window with label and gauges
-##################################################
-class number_window(wx.Panel, pubsub.pubsub):
- def __init__(
- self,
- parent,
- controller,
- size,
- title,
- units,
- show_gauge,
- real,
- minval,
- maxval,
- decimal_places,
- average_key,
- avg_alpha_key,
- peak_hold,
- msg_key,
- sample_rate_key,
- ):
- pubsub.pubsub.__init__(self)
- wx.Panel.__init__(self, parent, style=wx.SUNKEN_BORDER)
- #setup
- self.peak_val_real = NEG_INF
- self.peak_val_imag = NEG_INF
- self.real = real
- self.units = units
- self.decimal_places = decimal_places
- #proxy the keys
- self.proxy(MSG_KEY, controller, msg_key)
- self.proxy(AVERAGE_KEY, controller, average_key)
- self.proxy(AVG_ALPHA_KEY, controller, avg_alpha_key)
- self.proxy(SAMPLE_RATE_KEY, controller, sample_rate_key)
- #initialize values
- self[PEAK_HOLD_KEY] = peak_hold
- self[RUNNING_KEY] = True
- self[VALUE_REAL_KEY] = minval
- self[VALUE_IMAG_KEY] = minval
- #setup the box with display and controls
- self.control_panel = control_panel(self)
- main_box = wx.BoxSizer(wx.HORIZONTAL)
- sizer = forms.static_box_sizer(
- parent=self, sizer=main_box, label=title,
- bold=True, orient=wx.VERTICAL, proportion=1,
- )
- main_box.Add(self.control_panel, 0, wx.EXPAND)
- sizer.AddStretchSpacer()
- forms.static_text(
- parent=self, sizer=sizer,
- ps=self, key=VALUE_REPR_KEY, width=size[0],
- converter=forms.str_converter(),
- )
- sizer.AddStretchSpacer()
- self.gauge_real = forms.gauge(
- parent=self, sizer=sizer, style=wx.GA_HORIZONTAL,
- ps=self, key=VALUE_REAL_KEY, length=size[0],
- minimum=minval, maximum=maxval, num_steps=DEFAULT_GAUGE_RANGE,
- )
- self.gauge_imag = forms.gauge(
- parent=self, sizer=sizer, style=wx.GA_HORIZONTAL,
- ps=self, key=VALUE_IMAG_KEY, length=size[0],
- minimum=minval, maximum=maxval, num_steps=DEFAULT_GAUGE_RANGE,
- )
- #hide/show gauges
- self.show_gauges(show_gauge)
- self.SetSizerAndFit(main_box)
- #register events
- self.subscribe(MSG_KEY, self.handle_msg)
-
- def show_gauges(self, show_gauge):
- """
- Show or hide the gauges.
- If this is real, never show the imaginary gauge.
-
- Args:
- show_gauge: true to show
- """
- self.gauge_real.ShowItems(show_gauge)
- self.gauge_imag.ShowItems(show_gauge and not self.real)
-
- def handle_msg(self, msg):
- """
- Handle a message from the message queue.
- Convert the string based message into a float or complex.
- If more than one number was read, only take the last number.
- Perform peak hold operations, set the gauges and display.
-
- Args:
- event: event.data is the number sample as a character array
- """
- if not self[RUNNING_KEY]: return
- format_string = "%%.%df"%self.decimal_places
- if self.real:
- sample = numpy.fromstring(msg, numpy.float32)[-1]
- if self[PEAK_HOLD_KEY]: sample = self.peak_val_real = max(self.peak_val_real, sample)
- label_text = "%s %s"%(format_string%sample, self.units)
- self[VALUE_REAL_KEY] = sample
- else:
- sample = numpy.fromstring(msg, numpy.complex64)[-1]
- if self[PEAK_HOLD_KEY]:
- self.peak_val_real = max(self.peak_val_real, sample.real)
- self.peak_val_imag = max(self.peak_val_imag, sample.imag)
- sample = self.peak_val_real + self.peak_val_imag*1j
- label_text = "%s + %sj %s"%(format_string%sample.real, format_string%sample.imag, self.units)
- self[VALUE_REAL_KEY] = sample.real
- self[VALUE_IMAG_KEY] = sample.imag
- #set label text
- self[VALUE_REPR_KEY] = label_text
- #clear peak hold
- if not self[PEAK_HOLD_KEY]:
- self.peak_val_real = NEG_INF
- self.peak_val_imag = NEG_INF
diff --git a/gr-wxgui/python/wxgui/numbersink2.py b/gr-wxgui/python/wxgui/numbersink2.py
deleted file mode 100644
index 62a096e112..0000000000
--- a/gr-wxgui/python/wxgui/numbersink2.py
+++ /dev/null
@@ -1,173 +0,0 @@
-#
-# Copyright 2008,2012 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-#
-
-##################################################
-# Imports
-##################################################
-import number_window
-import common
-from gnuradio import gr, filter
-from gnuradio import analog
-from gnuradio import blocks
-from pubsub import pubsub
-from constants import *
-
-##################################################
-# Number sink block (wrapper for old wxgui)
-##################################################
-class _number_sink_base(gr.hier_block2, common.wxgui_hb):
- """
- An decimator block with a number window display
- """
-
- def __init__(
- self,
- parent,
- unit='units',
- minval=0,
- maxval=1,
- factor=1,
- decimal_places=3,
- ref_level=0,
- sample_rate=1,
- number_rate=number_window.DEFAULT_NUMBER_RATE,
- average=False,
- avg_alpha=None,
- label='Number Plot',
- size=number_window.DEFAULT_WIN_SIZE,
- peak_hold=False,
- show_gauge=True,
- **kwargs #catchall for backwards compatibility
- ):
- #ensure avg alpha
- if avg_alpha is None: avg_alpha = 2.0/number_rate
- #init
- gr.hier_block2.__init__(
- self,
- "number_sink",
- gr.io_signature(1, 1, self._item_size),
- gr.io_signature(0, 0, 0),
- )
- #blocks
- sd = blocks.stream_to_vector_decimator(
- item_size=self._item_size,
- sample_rate=sample_rate,
- vec_rate=number_rate,
- vec_len=1,
- )
- if self._real:
- mult = blocks.multiply_const_ff(factor)
- add = blocks.add_const_ff(ref_level)
- avg = filter.single_pole_iir_filter_ff(1.0)
- else:
- mult = blocks.multiply_const_cc(factor)
- add = blocks.add_const_cc(ref_level)
- avg = filter.single_pole_iir_filter_cc(1.0)
- msgq = gr.msg_queue(2)
- sink = blocks.message_sink(self._item_size, msgq, True)
- #controller
- self.controller = pubsub()
- self.controller.subscribe(SAMPLE_RATE_KEY, sd.set_sample_rate)
- self.controller.publish(SAMPLE_RATE_KEY, sd.sample_rate)
- self.controller[AVERAGE_KEY] = average
- self.controller[AVG_ALPHA_KEY] = avg_alpha
- def update_avg(*args):
- if self.controller[AVERAGE_KEY]: avg.set_taps(self.controller[AVG_ALPHA_KEY])
- else: avg.set_taps(1.0)
- update_avg()
- self.controller.subscribe(AVERAGE_KEY, update_avg)
- self.controller.subscribe(AVG_ALPHA_KEY, update_avg)
- #start input watcher
- common.input_watcher(msgq, self.controller, MSG_KEY)
- #create window
- self.win = number_window.number_window(
- parent=parent,
- controller=self.controller,
- size=size,
- title=label,
- units=unit,
- real=self._real,
- minval=minval,
- maxval=maxval,
- decimal_places=decimal_places,
- show_gauge=show_gauge,
- average_key=AVERAGE_KEY,
- avg_alpha_key=AVG_ALPHA_KEY,
- peak_hold=peak_hold,
- msg_key=MSG_KEY,
- sample_rate_key=SAMPLE_RATE_KEY,
- )
- common.register_access_methods(self, self.controller)
- #backwards compadibility
- self.set_show_gauge = self.win.show_gauges
- #connect
- self.wxgui_connect(self, sd, mult, add, avg, sink)
-
-class number_sink_f(_number_sink_base):
- _item_size = gr.sizeof_float
- _real = True
-
-class number_sink_c(_number_sink_base):
- _item_size = gr.sizeof_gr_complex
- _real = False
-
-# ----------------------------------------------------------------
-# Standalone test app
-# ----------------------------------------------------------------
-
-import wx
-from gnuradio.wxgui import stdgui2
-
-class test_app_flow_graph(stdgui2.std_top_block):
- def __init__(self, frame, panel, vbox, argv):
- stdgui2.std_top_block.__init__(self, frame, panel, vbox, argv)
-
- # build our flow graph
- input_rate = 20.48e3
-
- # Generate a real and complex sinusoids
- src1 = analog.sig_source_f(input_rate, analog.GR_SIN_WAVE, 2.21e3, 1)
- src2 = analog.sig_source_c(input_rate, analog.GR_SIN_WAVE, 2.21e3, 1)
-
- # We add these throttle blocks so that this demo doesn't
- # suck down all the CPU available. Normally you wouldn't use these.
- thr1 = blocks.throttle(gr.sizeof_float, input_rate)
- thr2 = blocks.throttle(gr.sizeof_gr_complex, input_rate)
-
- sink1 = number_sink_f(panel, unit='V',label="Real Data", avg_alpha=0.001,
- sample_rate=input_rate, minval=-1, maxval=1,
- ref_level=0, decimal_places=3)
- vbox.Add(sink1.win, 1, wx.EXPAND)
- sink2 = number_sink_c(panel, unit='V',label="Complex Data", avg_alpha=0.001,
- sample_rate=input_rate, minval=-1, maxval=1,
- ref_level=0, decimal_places=3)
- vbox.Add(sink2.win, 1, wx.EXPAND)
-
- self.connect(src1, thr1, sink1)
- self.connect(src2, thr2, sink2)
-
-def main ():
- app = stdgui2.stdapp(test_app_flow_graph, "Number Sink Test App")
- app.MainLoop()
-
-if __name__ == '__main__':
- main()
-
diff --git a/gr-wxgui/python/wxgui/plot.py b/gr-wxgui/python/wxgui/plot.py
deleted file mode 100644
index 041a2a7a50..0000000000
--- a/gr-wxgui/python/wxgui/plot.py
+++ /dev/null
@@ -1,1834 +0,0 @@
-#-----------------------------------------------------------------------------
-# Name: wx.lib.plot.py
-# Purpose: Line, Bar and Scatter Graphs
-#
-# Author: Gordon Williams
-#
-# Created: 2003/11/03
-# RCS-ID: $Id$
-# Copyright: (c) 2002,2007,2010
-# Licence: Use as you wish.
-#-----------------------------------------------------------------------------
-# 12/15/2003 - Jeff Grimmett (grimmtooth@softhome.net)
-#
-# o 2.5 compatability update.
-# o Renamed to plot.py in the wx.lib directory.
-# o Reworked test frame to work with wx demo framework. This saves a bit
-# of tedious cut and paste, and the test app is excellent.
-#
-# 12/18/2003 - Jeff Grimmett (grimmtooth@softhome.net)
-#
-# o wxScrolledMessageDialog -> ScrolledMessageDialog
-#
-# Oct 6, 2004 Gordon Williams (g_will@cyberus.ca)
-# - Added bar graph demo
-# - Modified line end shape from round to square.
-# - Removed FloatDCWrapper for conversion to ints and ints in arguments
-#
-# Oct 15, 2004 Gordon Williams (g_will@cyberus.ca)
-# - Imported modules given leading underscore to name.
-# - Added Cursor Line Tracking and User Point Labels.
-# - Demo for Cursor Line Tracking and Point Labels.
-# - Size of plot preview frame adjusted to show page better.
-# - Added helper functions PositionUserToScreen and PositionScreenToUser in PlotCanvas.
-# - Added functions GetClosestPoints (all curves) and GetClosestPoint (only closest curve)
-# can be in either user coords or screen coords.
-#
-# May 27, 2007 Johnathan Corgan (jcorgan@corganenterprises.com)
-# - Converted from numarray to numpy
-#
-# Apr 23, 2010 Martin Dudok van Heel (http://www.olifantasia.com/gnuradio/contact_olifantasia.gif)
-# - Added Persistence option (emulate after glow of an analog CRT display using IIR)
-
-"""
-This is a simple light weight plotting module that can be used with
-Boa or easily integrated into your own wxPython application. The
-emphasis is on small size and fast plotting for large data sets. It
-has a reasonable number of features to do line and scatter graphs
-easily as well as simple bar graphs. It is not as sophisticated or
-as powerful as SciPy Plt or Chaco. Both of these are great packages
-but consume huge amounts of computer resources for simple plots.
-They can be found at http://scipy.com
-
-This file contains two parts; first the re-usable library stuff, then,
-after a "if __name__=='__main__'" test, a simple frame and a few default
-plots for examples and testing.
-
-Based on wxPlotCanvas
-Written by K.Hinsen, R. Srinivasan;
-Ported to wxPython Harm van der Heijden, feb 1999
-
-Major Additions Gordon Williams Feb. 2003 (g_will@cyberus.ca)
- -More style options
- -Zooming using mouse 'rubber band'
- -Scroll left, right
- -Grid(graticule)
- -Printing, preview, and page set up (margins)
- -Axis and title labels
- -Cursor xy axis values
- -Doc strings and lots of comments
- -Optimizations for large number of points
- -Legends
-
-Did a lot of work here to speed markers up. Only a factor of 4
-improvement though. Lines are much faster than markers, especially
-filled markers. Stay away from circles and triangles unless you
-only have a few thousand points.
-
-Times for 25,000 points
-Line - 0.078 sec
-Markers
-Square - 0.22 sec
-dot - 0.10
-circle - 0.87
-cross,plus - 0.28
-triangle, triangle_down - 0.90
-
-Thanks to Chris Barker for getting this version working on Linux.
-
-Zooming controls with mouse (when enabled):
- Left mouse drag - Zoom box.
- Left mouse double click - reset zoom.
- Right mouse click - zoom out centred on click location.
-"""
-
-import string as _string
-import time as _time
-import wx
-
-# Needs numpy or numarray
-try:
- import numpy as _numpy
-except:
- try:
- import numarray as _numpy #if numarray is used it is renamed numpy
- except:
- msg= """
- This module requires the numpy or numarray module,
- which could not be imported. It probably is not installed
- (it's not part of the standard Python distribution). See the
- Python site (http://www.python.org) for information on
- downloading source or binaries."""
- raise ImportError, "numpy or numarray not found. \n" + msg
-
-
-
-#
-# Plotting classes...
-#
-class PolyPoints:
- """Base Class for lines and markers
- - All methods are private.
- """
-
- def __init__(self, points, attr):
- self.points = _numpy.array(points)
- self.currentScale= (1,1)
- self.currentShift= (0,0)
- self.scaled = self.points
- self.attributes = {}
- self.attributes.update(self._attributes)
- for name, value in attr.items():
- if name not in self._attributes.keys():
- raise KeyError, "Style attribute incorrect. Should be one of %s" % self._attributes.keys()
- self.attributes[name] = value
-
- def boundingBox(self):
- if len(self.points) == 0:
- # no curves to draw
- # defaults to (-1,-1) and (1,1) but axis can be set in Draw
- minXY= _numpy.array([-1,-1])
- maxXY= _numpy.array([ 1, 1])
- else:
- minXY= _numpy.minimum.reduce(self.points)
- maxXY= _numpy.maximum.reduce(self.points)
- return minXY, maxXY
-
- def scaleAndShift(self, scale=(1,1), shift=(0,0)):
- if len(self.points) == 0:
- # no curves to draw
- return
- if (scale is not self.currentScale) or (shift is not self.currentShift):
- # update point scaling
- self.scaled = scale*self.points+shift
- self.currentScale= scale
- self.currentShift= shift
- # else unchanged use the current scaling
-
- def getLegend(self):
- return self.attributes['legend']
-
- def getClosestPoint(self, pntXY, pointScaled= True):
- """Returns the index of closest point on the curve, pointXY, scaledXY, distance
- x, y in user coords
- if pointScaled == True based on screen coords
- if pointScaled == False based on user coords
- """
- if pointScaled == True:
- #Using screen coords
- p = self.scaled
- pxy = self.currentScale * _numpy.array(pntXY)+ self.currentShift
- else:
- #Using user coords
- p = self.points
- pxy = _numpy.array(pntXY)
- #determine distance for each point
- d= _numpy.sqrt(_numpy.add.reduce((p-pxy)**2,1)) #sqrt(dx^2+dy^2)
- pntIndex = _numpy.argmin(d)
- dist = d[pntIndex]
- return [pntIndex, self.points[pntIndex], self.scaled[pntIndex], dist]
-
-
-class PolyLine(PolyPoints):
- """Class to define line type and style
- - All methods except __init__ are private.
- """
-
- _attributes = {'colour': 'black',
- 'width': 1,
- 'style': wx.SOLID,
- 'legend': ''}
-
- def __init__(self, points, **attr):
- """Creates PolyLine object
- points - sequence (array, tuple or list) of (x,y) points making up line
- **attr - key word attributes
- Defaults:
- 'colour'= 'black', - wx.Pen Colour any wx.NamedColour
- 'width'= 1, - Pen width
- 'style'= wx.SOLID, - wx.Pen style
- 'legend'= '' - Line Legend to display
- """
- PolyPoints.__init__(self, points, attr)
-
- def draw(self, dc, printerScale, coord= None):
- colour = self.attributes['colour']
- width = self.attributes['width'] * printerScale
- style= self.attributes['style']
- pen = wx.Pen(wx.NamedColour(colour), width, style)
- pen.SetCap(wx.CAP_BUTT)
- dc.SetPen(pen)
- if coord == None:
- dc.DrawLines(self.scaled)
- else:
- dc.DrawLines(coord) # draw legend line
-
- def getSymExtent(self, printerScale):
- """Width and Height of Marker"""
- h= self.attributes['width'] * printerScale
- w= 5 * h
- return (w,h)
-
-
-class PolyMarker(PolyPoints):
- """Class to define marker type and style
- - All methods except __init__ are private.
- """
-
- _attributes = {'colour': 'black',
- 'width': 1,
- 'size': 2,
- 'fillcolour': None,
- 'fillstyle': wx.SOLID,
- 'marker': 'circle',
- 'legend': ''}
-
- def __init__(self, points, **attr):
- """Creates PolyMarker object
- points - sequence (array, tuple or list) of (x,y) points
- **attr - key word attributes
- Defaults:
- 'colour'= 'black', - wx.Pen Colour any wx.NamedColour
- 'width'= 1, - Pen width
- 'size'= 2, - Marker size
- 'fillcolour'= same as colour, - wx.Brush Colour any wx.NamedColour
- 'fillstyle'= wx.SOLID, - wx.Brush fill style (use wx.TRANSPARENT for no fill)
- 'marker'= 'circle' - Marker shape
- 'legend'= '' - Marker Legend to display
-
- Marker Shapes:
- - 'circle'
- - 'dot'
- - 'square'
- - 'triangle'
- - 'triangle_down'
- - 'cross'
- - 'plus'
- """
-
- PolyPoints.__init__(self, points, attr)
-
- def draw(self, dc, printerScale, coord= None):
- colour = self.attributes['colour']
- width = self.attributes['width'] * printerScale
- size = self.attributes['size'] * printerScale
- fillcolour = self.attributes['fillcolour']
- fillstyle = self.attributes['fillstyle']
- marker = self.attributes['marker']
-
- dc.SetPen(wx.Pen(wx.NamedColour(colour), width))
- if fillcolour:
- dc.SetBrush(wx.Brush(wx.NamedColour(fillcolour),fillstyle))
- else:
- dc.SetBrush(wx.Brush(wx.NamedColour(colour), fillstyle))
- if coord == None:
- self._drawmarkers(dc, self.scaled, marker, size)
- else:
- self._drawmarkers(dc, coord, marker, size) # draw legend marker
-
- def getSymExtent(self, printerScale):
- """Width and Height of Marker"""
- s= 5*self.attributes['size'] * printerScale
- return (s,s)
-
- def _drawmarkers(self, dc, coords, marker,size=1):
- f = eval('self._' +marker)
- f(dc, coords, size)
-
- def _circle(self, dc, coords, size=1):
- fact= 2.5*size
- wh= 5.0*size
- rect= _numpy.zeros((len(coords),4),_numpy.float)+[0.0,0.0,wh,wh]
- rect[:,0:2]= coords-[fact,fact]
- dc.DrawEllipseList(rect.astype(_numpy.int32))
-
- def _dot(self, dc, coords, size=1):
- dc.DrawPointList(coords)
-
- def _square(self, dc, coords, size=1):
- fact= 2.5*size
- wh= 5.0*size
- rect= _numpy.zeros((len(coords),4),_numpy.float)+[0.0,0.0,wh,wh]
- rect[:,0:2]= coords-[fact,fact]
- dc.DrawRectangleList(rect.astype(_numpy.int32))
-
- def _triangle(self, dc, coords, size=1):
- shape= [(-2.5*size,1.44*size), (2.5*size,1.44*size), (0.0,-2.88*size)]
- poly= _numpy.repeat(coords,3)
- poly.shape= (len(coords),3,2)
- poly += shape
- dc.DrawPolygonList(poly.astype(_numpy.int32))
-
- def _triangle_down(self, dc, coords, size=1):
- shape= [(-2.5*size,-1.44*size), (2.5*size,-1.44*size), (0.0,2.88*size)]
- poly= _numpy.repeat(coords,3)
- poly.shape= (len(coords),3,2)
- poly += shape
- dc.DrawPolygonList(poly.astype(_numpy.int32))
-
- def _cross(self, dc, coords, size=1):
- fact= 2.5*size
- for f in [[-fact,-fact,fact,fact],[-fact,fact,fact,-fact]]:
- lines= _numpy.concatenate((coords,coords),axis=1)+f
- dc.DrawLineList(lines.astype(_numpy.int32))
-
- def _plus(self, dc, coords, size=1):
- fact= 2.5*size
- for f in [[-fact,0,fact,0],[0,-fact,0,fact]]:
- lines= _numpy.concatenate((coords,coords),axis=1)+f
- dc.DrawLineList(lines.astype(_numpy.int32))
-
-class PlotGraphics:
- """Container to hold PolyXXX objects and graph labels
- - All methods except __init__ are private.
- """
-
- def __init__(self, objects, title='', xLabel='', yLabel= ''):
- """Creates PlotGraphics object
- objects - list of PolyXXX objects to make graph
- title - title shown at top of graph
- xLabel - label shown on x-axis
- yLabel - label shown on y-axis
- """
- if type(objects) not in [list,tuple]:
- raise TypeError, "objects argument should be list or tuple"
- self.objects = objects
- self.title= title
- self.xLabel= xLabel
- self.yLabel= yLabel
-
- def boundingBox(self):
- p1, p2 = self.objects[0].boundingBox()
- for o in self.objects[1:]:
- p1o, p2o = o.boundingBox()
- p1 = _numpy.minimum(p1, p1o)
- p2 = _numpy.maximum(p2, p2o)
- return p1, p2
-
- def scaleAndShift(self, scale=(1,1), shift=(0,0)):
- for o in self.objects:
- o.scaleAndShift(scale, shift)
-
- def setPrinterScale(self, scale):
- """Thickens up lines and markers only for printing"""
- self.printerScale= scale
-
- def setXLabel(self, xLabel= ''):
- """Set the X axis label on the graph"""
- self.xLabel= xLabel
-
- def setYLabel(self, yLabel= ''):
- """Set the Y axis label on the graph"""
- self.yLabel= yLabel
-
- def setTitle(self, title= ''):
- """Set the title at the top of graph"""
- self.title= title
-
- def getXLabel(self):
- """Get x axis label string"""
- return self.xLabel
-
- def getYLabel(self):
- """Get y axis label string"""
- return self.yLabel
-
- def getTitle(self, title= ''):
- """Get the title at the top of graph"""
- return self.title
-
- def draw(self, dc):
- for o in self.objects:
- #t=_time.clock() # profile info
- o.draw(dc, self.printerScale)
- #dt= _time.clock()-t
- #print o, "time=", dt
-
- def getSymExtent(self, printerScale):
- """Get max width and height of lines and markers symbols for legend"""
- symExt = self.objects[0].getSymExtent(printerScale)
- for o in self.objects[1:]:
- oSymExt = o.getSymExtent(printerScale)
- symExt = _numpy.maximum(symExt, oSymExt)
- return symExt
-
- def getLegendNames(self):
- """Returns list of legend names"""
- lst = [None]*len(self)
- for i in range(len(self)):
- lst[i]= self.objects[i].getLegend()
- return lst
-
- def __len__(self):
- return len(self.objects)
-
- def __getitem__(self, item):
- return self.objects[item]
-
-
-#-------------------------------------------------------------------------------
-# Main window that you will want to import into your application.
-
-class PlotCanvas(wx.Window):
- """Subclass of a wx.Window to allow simple general plotting
- of data with zoom, labels, and automatic axis scaling."""
-
- def __init__(self, parent, id = -1, pos=wx.DefaultPosition,
- size=wx.DefaultSize, style= wx.DEFAULT_FRAME_STYLE, name= ""):
-
- self.use_persistence=False
- self.alpha=0.3
- self.decimation=10
- self.decim_counter=0
- """Constucts a window, which can be a child of a frame, dialog or
- any other non-control window"""
-
- wx.Window.__init__(self, parent, id, pos, size, style, name)
- self.border = (1,1)
-
- self.SetBackgroundColour("white")
-
- # Create some mouse events for zooming
- self.Bind(wx.EVT_LEFT_DOWN, self.OnMouseLeftDown)
- self.Bind(wx.EVT_LEFT_UP, self.OnMouseLeftUp)
- self.Bind(wx.EVT_MOTION, self.OnMotion)
- self.Bind(wx.EVT_LEFT_DCLICK, self.OnMouseDoubleClick)
- self.Bind(wx.EVT_RIGHT_DOWN, self.OnMouseRightDown)
-
- # set curser as cross-hairs
- self.SetCursor(wx.CROSS_CURSOR)
-
- # Things for printing
- self.print_data = wx.PrintData()
- self.print_data.SetPaperId(wx.PAPER_LETTER)
- self.print_data.SetOrientation(wx.LANDSCAPE)
- self.pageSetupData= wx.PageSetupDialogData()
- self.pageSetupData.SetMarginBottomRight((25,25))
- self.pageSetupData.SetMarginTopLeft((25,25))
- self.pageSetupData.SetPrintData(self.print_data)
- self.printerScale = 1
- self.parent= parent
-
- # Zooming variables
- self._zoomInFactor = 0.5
- self._zoomOutFactor = 2
- self._zoomCorner1= _numpy.array([0.0, 0.0]) # left mouse down corner
- self._zoomCorner2= _numpy.array([0.0, 0.0]) # left mouse up corner
- self._zoomEnabled= False
- self._hasDragged= False
-
- # Drawing Variables
- self.last_draw = None
- self._pointScale= 1
- self._pointShift= 0
- self._xSpec= 'auto'
- self._ySpec= 'auto'
- self._gridEnabled= False
- self._legendEnabled= False
- self._xUseScopeTicks= False
-
- # Fonts
- self._fontCache = {}
- self._fontSizeAxis= 10
- self._fontSizeTitle= 15
- self._fontSizeLegend= 7
-
- # pointLabels
- self._pointLabelEnabled= False
- self.last_PointLabel= None
- self._pointLabelFunc= None
- self.Bind(wx.EVT_LEAVE_WINDOW, self.OnLeave)
-
- self.Bind(wx.EVT_PAINT, self.OnPaint)
- self.Bind(wx.EVT_SIZE, self.OnSize)
- # OnSize called to make sure the buffer is initialized.
- # This might result in OnSize getting called twice on some
- # platforms at initialization, but little harm done.
- self.OnSize(None) # sets the initial size based on client size
- # UNCONDITIONAL, needed to create self._Buffer
-
-
- def set_use_persistence(self, enable):
- self.use_persistence = enable
-
- def set_persist_alpha(self, persist_alpha):
- self.alpha = persist_alpha
-
-
- # SaveFile
- def SaveFile(self, fileName= ''):
- """Saves the file to the type specified in the extension. If no file
- name is specified a dialog box is provided. Returns True if sucessful,
- otherwise False.
-
- .bmp Save a Windows bitmap file.
- .xbm Save an X bitmap file.
- .xpm Save an XPM bitmap file.
- .png Save a Portable Network Graphics file.
- .jpg Save a Joint Photographic Experts Group file.
- """
- if _string.lower(fileName[-3:]) not in ['bmp','xbm','xpm','png','jpg']:
- dlg1 = wx.FileDialog(
- self,
- "Choose a file with extension bmp, gif, xbm, xpm, png, or jpg", ".", "",
- "BMP files (*.bmp)|*.bmp|XBM files (*.xbm)|*.xbm|XPM file (*.xpm)|*.xpm|PNG files (*.png)|*.png|JPG files (*.jpg)|*.jpg",
- wx.SAVE|wx.OVERWRITE_PROMPT
- )
- try:
- while 1:
- if dlg1.ShowModal() == wx.ID_OK:
- fileName = dlg1.GetPath()
- # Check for proper exension
- if _string.lower(fileName[-3:]) not in ['bmp','xbm','xpm','png','jpg']:
- dlg2 = wx.MessageDialog(self, 'File name extension\n'
- 'must be one of\n'
- 'bmp, xbm, xpm, png, or jpg',
- 'File Name Error', wx.OK | wx.ICON_ERROR)
- try:
- dlg2.ShowModal()
- finally:
- dlg2.Destroy()
- else:
- break # now save file
- else: # exit without saving
- return False
- finally:
- dlg1.Destroy()
-
- # File name has required extension
- fType = _string.lower(fileName[-3:])
- if fType == "bmp":
- tp= wx.BITMAP_TYPE_BMP # Save a Windows bitmap file.
- elif fType == "xbm":
- tp= wx.BITMAP_TYPE_XBM # Save an X bitmap file.
- elif fType == "xpm":
- tp= wx.BITMAP_TYPE_XPM # Save an XPM bitmap file.
- elif fType == "jpg":
- tp= wx.BITMAP_TYPE_JPEG # Save a JPG file.
- else:
- tp= wx.BITMAP_TYPE_PNG # Save a PNG file.
- # Save Bitmap
- res= self._Buffer.SaveFile(fileName, tp)
- return res
-
- def PageSetup(self):
- """Brings up the page setup dialog"""
- data = self.pageSetupData
- data.SetPrintData(self.print_data)
- dlg = wx.PageSetupDialog(self.parent, data)
- try:
- if dlg.ShowModal() == wx.ID_OK:
- data = dlg.GetPageSetupData() # returns wx.PageSetupDialogData
- # updates page parameters from dialog
- self.pageSetupData.SetMarginBottomRight(data.GetMarginBottomRight())
- self.pageSetupData.SetMarginTopLeft(data.GetMarginTopLeft())
- self.pageSetupData.SetPrintData(data.GetPrintData())
- self.print_data=data.GetPrintData() # updates print_data
- finally:
- dlg.Destroy()
-
- def Printout(self, paper=None):
- """Print current plot."""
- if paper != None:
- self.print_data.SetPaperId(paper)
- pdd = wx.PrintDialogData()
- pdd.SetPrintData(self.print_data)
- printer = wx.Printer(pdd)
- out = PlotPrintout(self)
- print_ok = printer.Print(self.parent, out)
- if print_ok:
- self.print_data = printer.GetPrintDialogData().GetPrintData()
- out.Destroy()
-
- def PrintPreview(self):
- """Print-preview current plot."""
- printout = PlotPrintout(self)
- printout2 = PlotPrintout(self)
- self.preview = wx.PrintPreview(printout, printout2, self.print_data)
- if not self.preview.Ok():
- wx.MessageDialog(self, "Print Preview failed.\n" \
- "Check that default printer is configured\n", \
- "Print error", wx.OK|wx.CENTRE).ShowModal()
- self.preview.SetZoom(40)
- # search up tree to find frame instance
- frameInst= self
- while not isinstance(frameInst, wx.Frame):
- frameInst= frameInst.GetParent()
- frame = wx.PreviewFrame(self.preview, frameInst, "Preview")
- frame.Initialize()
- frame.SetPosition(self.GetPosition())
- frame.SetSize((600,550))
- frame.Centre(wx.BOTH)
- frame.Show(True)
-
- def SetFontSizeAxis(self, point= 10):
- """Set the tick and axis label font size (default is 10 point)"""
- self._fontSizeAxis= point
-
- def GetFontSizeAxis(self):
- """Get current tick and axis label font size in points"""
- return self._fontSizeAxis
-
- def SetFontSizeTitle(self, point= 15):
- """Set Title font size (default is 15 point)"""
- self._fontSizeTitle= point
-
- def GetFontSizeTitle(self):
- """Get current Title font size in points"""
- return self._fontSizeTitle
-
- def SetFontSizeLegend(self, point= 7):
- """Set Legend font size (default is 7 point)"""
- self._fontSizeLegend= point
-
- def GetFontSizeLegend(self):
- """Get current Legend font size in points"""
- return self._fontSizeLegend
-
- def SetEnableZoom(self, value):
- """Set True to enable zooming."""
- if value not in [True,False]:
- raise TypeError, "Value should be True or False"
- self._zoomEnabled= value
-
- def GetEnableZoom(self):
- """True if zooming enabled."""
- return self._zoomEnabled
-
- def SetEnableGrid(self, value):
- """Set True to enable grid."""
- if value not in [True,False]:
- raise TypeError, "Value should be True or False"
- self._gridEnabled= value
- self.Redraw()
-
- def GetEnableGrid(self):
- """True if grid enabled."""
- return self._gridEnabled
-
- def SetEnableLegend(self, value):
- """Set True to enable legend."""
- if value not in [True,False]:
- raise TypeError, "Value should be True or False"
- self._legendEnabled= value
- self.Redraw()
-
- def GetEnableLegend(self):
- """True if Legend enabled."""
- return self._legendEnabled
-
- def SetEnablePointLabel(self, value):
- """Set True to enable pointLabel."""
- if value not in [True,False]:
- raise TypeError, "Value should be True or False"
- self._pointLabelEnabled= value
- self.Redraw() #will erase existing pointLabel if present
- self.last_PointLabel = None
-
- def GetEnablePointLabel(self):
- """True if pointLabel enabled."""
- return self._pointLabelEnabled
-
- def SetPointLabelFunc(self, func):
- """Sets the function with custom code for pointLabel drawing
- ******** more info needed ***************
- """
- self._pointLabelFunc= func
-
- def GetPointLabelFunc(self):
- """Returns pointLabel Drawing Function"""
- return self._pointLabelFunc
-
- def Reset(self):
- """Unzoom the plot."""
- self.last_PointLabel = None #reset pointLabel
- if self.last_draw is not None:
- self.Draw(self.last_draw[0])
-
- def ScrollRight(self, units):
- """Move view right number of axis units."""
- self.last_PointLabel = None #reset pointLabel
- if self.last_draw is not None:
- graphics, xAxis, yAxis= self.last_draw
- xAxis= (xAxis[0]+units, xAxis[1]+units)
- self.Draw(graphics,xAxis,yAxis)
-
- def ScrollUp(self, units):
- """Move view up number of axis units."""
- self.last_PointLabel = None #reset pointLabel
- if self.last_draw is not None:
- graphics, xAxis, yAxis= self.last_draw
- yAxis= (yAxis[0]+units, yAxis[1]+units)
- self.Draw(graphics,xAxis,yAxis)
-
- def GetXY(self,event):
- """Takes a mouse event and returns the XY user axis values."""
- x,y= self.PositionScreenToUser(event.GetPosition())
- return x,y
-
- def PositionUserToScreen(self, pntXY):
- """Converts User position to Screen Coordinates"""
- userPos= _numpy.array(pntXY)
- x,y= userPos * self._pointScale + self._pointShift
- return x,y
-
- def PositionScreenToUser(self, pntXY):
- """Converts Screen position to User Coordinates"""
- screenPos= _numpy.array(pntXY)
- x,y= (screenPos-self._pointShift)/self._pointScale
- return x,y
-
- def SetXSpec(self, type= 'auto'):
- """xSpec- defines x axis type. Can be 'none', 'min' or 'auto'
- where:
- 'none' - shows no axis or tick mark values
- 'min' - shows min bounding box values
- 'auto' - rounds axis range to sensible values
- """
- self._xSpec= type
-
- def SetYSpec(self, type= 'auto'):
- """ySpec- defines x axis type. Can be 'none', 'min' or 'auto'
- where:
- 'none' - shows no axis or tick mark values
- 'min' - shows min bounding box values
- 'auto' - rounds axis range to sensible values
- """
- self._ySpec= type
-
- def GetXSpec(self):
- """Returns current XSpec for axis"""
- return self._xSpec
-
- def GetYSpec(self):
- """Returns current YSpec for axis"""
- return self._ySpec
-
- def GetXMaxRange(self):
- """Returns (minX, maxX) x-axis range for displayed graph"""
- graphics= self.last_draw[0]
- p1, p2 = graphics.boundingBox() # min, max points of graphics
- xAxis = self._axisInterval(self._xSpec, p1[0], p2[0]) # in user units
- return xAxis
-
- def GetYMaxRange(self):
- """Returns (minY, maxY) y-axis range for displayed graph"""
- graphics= self.last_draw[0]
- p1, p2 = graphics.boundingBox() # min, max points of graphics
- yAxis = self._axisInterval(self._ySpec, p1[1], p2[1])
- return yAxis
-
- def GetXCurrentRange(self):
- """Returns (minX, maxX) x-axis for currently displayed portion of graph"""
- return self.last_draw[1]
-
- def GetYCurrentRange(self):
- """Returns (minY, maxY) y-axis for currently displayed portion of graph"""
- return self.last_draw[2]
-
- def SetXUseScopeTicks(self, v=False):
- """Always 10 divisions, no labels"""
- self._xUseScopeTicks = v
-
- def GetXUseScopeTicks(self):
- return self._xUseScopeTicks
-
- def Draw(self, graphics, xAxis = None, yAxis = None, dc = None, step=None):
- """Draw objects in graphics with specified x and y axis.
- graphics- instance of PlotGraphics with list of PolyXXX objects
- xAxis - tuple with (min, max) axis range to view
- yAxis - same as xAxis
- dc - drawing context - doesn't have to be specified.
- If it's not, the offscreen buffer is used
- """
- # check Axis is either tuple or none
- if type(xAxis) not in [type(None),tuple]:
- raise TypeError, "xAxis should be None or (minX,maxX)"
- if type(yAxis) not in [type(None),tuple]:
- raise TypeError, "yAxis should be None or (minY,maxY)"
-
- # check case for axis = (a,b) where a==b caused by improper zooms
- if xAxis != None:
- if xAxis[0] == xAxis[1]:
- return
- if yAxis != None:
- if yAxis[0] == yAxis[1]:
- return
-
- if dc == None:
- # sets new dc and clears it
- if self.use_persistence:
- dc = wx.MemoryDC()
- dc.SelectObject(self._Buffer)
- dc.Clear()
- else:
- dc = wx.BufferedDC(wx.ClientDC(self), self._Buffer)
- dc.Clear()
-
- dc.BeginDrawing()
- # dc.Clear()
-
-
-
- # set font size for every thing but title and legend
- dc.SetFont(self._getFont(self._fontSizeAxis))
-
- # sizes axis to axis type, create lower left and upper right corners of plot
- if xAxis == None or yAxis == None:
- # One or both axis not specified in Draw
- p1, p2 = graphics.boundingBox() # min, max points of graphics
- if xAxis == None:
- xAxis = self._axisInterval(self._xSpec, p1[0], p2[0]) # in user units
- if yAxis == None:
- yAxis = self._axisInterval(self._ySpec, p1[1], p2[1])
- # Adjust bounding box for axis spec
- p1[0],p1[1] = xAxis[0], yAxis[0] # lower left corner user scale (xmin,ymin)
- p2[0],p2[1] = xAxis[1], yAxis[1] # upper right corner user scale (xmax,ymax)
- else:
- # Both axis specified in Draw
- p1= _numpy.array([xAxis[0], yAxis[0]]) # lower left corner user scale (xmin,ymin)
- p2= _numpy.array([xAxis[1], yAxis[1]]) # upper right corner user scale (xmax,ymax)
-
- self.last_draw = (graphics, xAxis, yAxis) # saves most recient values
-
- if False:
- ptx,pty,rectWidth,rectHeight= self._point2ClientCoord(p1, p2)
- #dc.SetPen(wx.Pen(wx.BLACK))
- dc.SetBrush(wx.Brush( wx.BLACK, wx.SOLID ) ) #wx.SOLID wx.TRANSPARENT ) )
- #dc.SetLogicalFunction(wx.INVERT) #wx.XOR wx.INVERT
- dc.DrawRectangle( ptx,pty, rectWidth,rectHeight)
- #dc.SetBrush(wx.Brush( wx.WHITE, wx.SOLID ) )
- #dc.SetLogicalFunction(wx.COPY)
-
- # Get ticks and textExtents for axis if required
- if self._xSpec is not 'none':
- if self._xUseScopeTicks:
- xticks = self._scope_ticks(xAxis[0], xAxis[1])
- else:
- xticks = self._ticks(xAxis[0], xAxis[1])
- xTextExtent = dc.GetTextExtent(xticks[-1][1])# w h of x axis text last number on axis
- else:
- xticks = None
- xTextExtent= (0,0) # No text for ticks
- if self._ySpec is not 'none':
- yticks = self._ticks(yAxis[0], yAxis[1], step)
- yTextExtentBottom= dc.GetTextExtent(yticks[0][1])
- yTextExtentTop = dc.GetTextExtent(yticks[-1][1])
- yTextExtent= (max(yTextExtentBottom[0],yTextExtentTop[0]),
- max(yTextExtentBottom[1],yTextExtentTop[1]))
- else:
- yticks = None
- yTextExtent= (0,0) # No text for ticks
-
- # TextExtents for Title and Axis Labels
- titleWH, xLabelWH, yLabelWH= self._titleLablesWH(dc, graphics)
-
- # TextExtents for Legend
- legendBoxWH, legendSymExt, legendTextExt = self._legendWH(dc, graphics)
-
- # room around graph area
- rhsW= max(xTextExtent[0], legendBoxWH[0]) # use larger of number width or legend width
- lhsW= yTextExtent[0]+ yLabelWH[1]
- bottomH= max(xTextExtent[1], yTextExtent[1]/2.)+ xLabelWH[1]
- topH= yTextExtent[1]/2. + titleWH[1]
- textSize_scale= _numpy.array([rhsW+lhsW,bottomH+topH]) # make plot area smaller by text size
- textSize_shift= _numpy.array([lhsW, bottomH]) # shift plot area by this amount
-
- # drawing title and labels text
- dc.SetFont(self._getFont(self._fontSizeTitle))
- titlePos= (self.plotbox_origin[0]+ lhsW + (self.plotbox_size[0]-lhsW-rhsW)/2.- titleWH[0]/2.,
- self.plotbox_origin[1]- self.plotbox_size[1])
- dc.DrawText(graphics.getTitle(),titlePos[0],titlePos[1])
- dc.SetFont(self._getFont(self._fontSizeAxis))
- xLabelPos= (self.plotbox_origin[0]+ lhsW + (self.plotbox_size[0]-lhsW-rhsW)/2.- xLabelWH[0]/2.,
- self.plotbox_origin[1]- xLabelWH[1])
- dc.DrawText(graphics.getXLabel(),xLabelPos[0],xLabelPos[1])
- yLabelPos= (self.plotbox_origin[0],
- self.plotbox_origin[1]- bottomH- (self.plotbox_size[1]-bottomH-topH)/2.+ yLabelWH[0]/2.)
- if graphics.getYLabel(): # bug fix for Linux
- dc.DrawRotatedText(graphics.getYLabel(),yLabelPos[0],yLabelPos[1],90)
-
- # drawing legend makers and text
- if self._legendEnabled:
- self._drawLegend(dc,graphics,rhsW,topH,legendBoxWH, legendSymExt, legendTextExt)
-
- # allow for scaling and shifting plotted points
- scale = (self.plotbox_size-textSize_scale) / (p2-p1)* _numpy.array((1,-1))
- shift = -p1*scale + self.plotbox_origin + textSize_shift * _numpy.array((1,-1))
- self._pointScale= scale # make available for mouse events
- self._pointShift= shift
-
- #dc.SetLogicalFunction(wx.INVERT) #wx.XOR wx.INVERT
- self._drawAxes(dc, p1, p2, scale, shift, xticks, yticks)
- #dc.SetLogicalFunction(wx.COPY)
-
- graphics.scaleAndShift(scale, shift)
- graphics.setPrinterScale(self.printerScale) # thicken up lines and markers if printing
-
- # set clipping area so drawing does not occur outside axis box
- ptx,pty,rectWidth,rectHeight= self._point2ClientCoord(p1, p2)
- dc.SetClippingRegion(ptx,pty,rectWidth,rectHeight)
- # Draw the lines and markers
- #start = _time.clock()
-
- graphics.draw(dc)
- # print "entire graphics drawing took: %f second"%(_time.clock() - start)
- # remove the clipping region
- dc.DestroyClippingRegion()
- dc.EndDrawing()
-
-
- if self.use_persistence:
- dc=None
- self._Buffer.CopyToBuffer(self._Bufferarray) #, format=wx.BitmapBufferFormat_RGB, stride=-1)
- ## do the IIR filter
- alpha_int=int(float(self.alpha*256))
- if True:
- _numpy.add(self._Bufferarray,0,self._Buffer3array)
- _numpy.multiply(self._Buffer3array,alpha_int,self._Buffer3array)
- _numpy.multiply(self._Buffer2array,(256-alpha_int),self._Buffer2array)
- _numpy.add(self._Buffer3array,self._Buffer2array,self._Buffer2array)
- _numpy.right_shift(self._Buffer2array,8,self._Buffer2array)
- elif False:
- self._Buffer2array=(self._Bufferarray.astype(_numpy.uint32) *alpha_int + self._Buffer2array*(256-alpha_int)).__rshift__(8)
- elif False:
- self._Buffer2array *=(256-alpha_int)
- self._Buffer2array +=self._Bufferarray.astype(_numpy.uint32)*alpha_int
- self._Buffer2array /=256
-
- ##copy back to image buffer
- self._Buffer2.CopyFromBuffer(self._Buffer2array.astype(_numpy.uint8)) #, format=wx.BitmapBufferFormat_RGB, stride=-1)
-
- #draw to the screen
- #self.decim_counter=self.decim_counter+1
- if True: #self.decim_counter>self.decimation:
- #self.decim_counter=0
- dc2 = wx.ClientDC( self )
- dc2.BeginDrawing()
- dc2.DrawBitmap(self._Buffer2, 0, 0, False)
- #dc2.DrawBitmap(self._Buffer, 0, 0, False)
- dc2.EndDrawing()
-
- def Redraw(self, dc= None):
- """Redraw the existing plot."""
- if self.last_draw is not None:
- graphics, xAxis, yAxis= self.last_draw
- self.Draw(graphics,xAxis,yAxis,dc)
-
- def Clear(self):
- """Erase the window."""
- self.last_PointLabel = None #reset pointLabel
- dc = wx.BufferedDC(wx.ClientDC(self), self._Buffer)
- dc.Clear()
- self.last_draw = None
-
- def Zoom(self, Center, Ratio):
- """ Zoom on the plot
- Centers on the X,Y coords given in Center
- Zooms by the Ratio = (Xratio, Yratio) given
- """
- self.last_PointLabel = None #reset maker
- x,y = Center
- if self.last_draw != None:
- (graphics, xAxis, yAxis) = self.last_draw
- w = (xAxis[1] - xAxis[0]) * Ratio[0]
- h = (yAxis[1] - yAxis[0]) * Ratio[1]
- xAxis = ( x - w/2, x + w/2 )
- yAxis = ( y - h/2, y + h/2 )
- self.Draw(graphics, xAxis, yAxis)
-
- def GetClosestPoints(self, pntXY, pointScaled= True):
- """Returns list with
- [curveNumber, legend, index of closest point, pointXY, scaledXY, distance]
- list for each curve.
- Returns [] if no curves are being plotted.
-
- x, y in user coords
- if pointScaled == True based on screen coords
- if pointScaled == False based on user coords
- """
- if self.last_draw == None:
- #no graph available
- return []
- graphics, xAxis, yAxis= self.last_draw
- l = []
- for curveNum,obj in enumerate(graphics):
- #check there are points in the curve
- if len(obj.points) == 0:
- continue #go to next obj
- #[curveNumber, legend, index of closest point, pointXY, scaledXY, distance]
- cn = [curveNum]+ [obj.getLegend()]+ obj.getClosestPoint( pntXY, pointScaled)
- l.append(cn)
- return l
-
- def GetClosetPoint(self, pntXY, pointScaled= True):
- """Returns list with
- [curveNumber, legend, index of closest point, pointXY, scaledXY, distance]
- list for only the closest curve.
- Returns [] if no curves are being plotted.
-
- x, y in user coords
- if pointScaled == True based on screen coords
- if pointScaled == False based on user coords
- """
- #closest points on screen based on screen scaling (pointScaled= True)
- #list [curveNumber, index, pointXY, scaledXY, distance] for each curve
- closestPts= self.GetClosestPoints(pntXY, pointScaled)
- if closestPts == []:
- return [] #no graph present
- #find one with least distance
- dists = [c[-1] for c in closestPts]
- mdist = min(dists) #Min dist
- i = dists.index(mdist) #index for min dist
- return closestPts[i] #this is the closest point on closest curve
-
- def UpdatePointLabel(self, mDataDict):
- """Updates the pointLabel point on screen with data contained in
- mDataDict.
-
- mDataDict will be passed to your function set by
- SetPointLabelFunc. It can contain anything you
- want to display on the screen at the scaledXY point
- you specify.
-
- This function can be called from parent window with onClick,
- onMotion events etc.
- """
- if self.last_PointLabel != None:
- #compare pointXY
- if mDataDict["pointXY"] != self.last_PointLabel["pointXY"]:
- #closest changed
- self._drawPointLabel(self.last_PointLabel) #erase old
- self._drawPointLabel(mDataDict) #plot new
- else:
- #just plot new with no erase
- self._drawPointLabel(mDataDict) #plot new
- #save for next erase
- self.last_PointLabel = mDataDict
-
- # event handlers **********************************
- def OnMotion(self, event):
- if self._zoomEnabled and event.LeftIsDown():
- if self._hasDragged:
- self._drawRubberBand(self._zoomCorner1, self._zoomCorner2) # remove old
- else:
- self._hasDragged= True
- self._zoomCorner2[0], self._zoomCorner2[1] = self.GetXY(event)
- self._drawRubberBand(self._zoomCorner1, self._zoomCorner2) # add new
-
- def OnMouseLeftDown(self,event):
- self._zoomCorner1[0], self._zoomCorner1[1]= self.GetXY(event)
-
- def OnMouseLeftUp(self, event):
- if self._zoomEnabled:
- if self._hasDragged == True:
- self._drawRubberBand(self._zoomCorner1, self._zoomCorner2) # remove old
- self._zoomCorner2[0], self._zoomCorner2[1]= self.GetXY(event)
- self._hasDragged = False # reset flag
- minX, minY= _numpy.minimum( self._zoomCorner1, self._zoomCorner2)
- maxX, maxY= _numpy.maximum( self._zoomCorner1, self._zoomCorner2)
- self.last_PointLabel = None #reset pointLabel
- if self.last_draw != None:
- self.Draw(self.last_draw[0], xAxis = (minX,maxX), yAxis = (minY,maxY), dc = None)
- #else: # A box has not been drawn, zoom in on a point
- ## this interfered with the double click, so I've disables it.
- # X,Y = self.GetXY(event)
- # self.Zoom( (X,Y), (self._zoomInFactor,self._zoomInFactor) )
-
- def OnMouseDoubleClick(self,event):
- if self._zoomEnabled:
- self.Reset()
-
- def OnMouseRightDown(self,event):
- if self._zoomEnabled:
- X,Y = self.GetXY(event)
- self.Zoom( (X,Y), (self._zoomOutFactor, self._zoomOutFactor) )
-
- def OnPaint(self, event):
- # All that is needed here is to draw the buffer to screen
- if self.last_PointLabel != None:
- self._drawPointLabel(self.last_PointLabel) #erase old
- self.last_PointLabel = None
-
- #paint current buffer to screen
- dc = wx.BufferedPaintDC(self, self._Buffer)
-
- def OnSize(self,event):
- # The Buffer init is done here, to make sure the buffer is always
- # the same size as the Window
- Size = self.GetClientSize()
-
- # Make new offscreen bitmap: this bitmap will always have the
- # current drawing in it, so it can be used to save the image to
- # a file, or whatever.
- self._Buffer = wx.EmptyBitmap(Size[0],Size[1],24)
-
-
- if True: #self.use_persistence:
- #self._Bufferarray = _numpy.zeros((Size[0], Size[1],3), dtype=_numpy.uint8)
- self._Bufferarray = _numpy.zeros((Size[0]* Size[1]*3), dtype=_numpy.uint8)
-
- # Make new second offscreen bitmap: this bitmap will always have the
- # last drawing in it, so it can be used to do display time dependent processing
- # like averaging (IIR) or show differences between updates
- self._Buffer2 = wx.EmptyBitmap(Size[0],Size[1],24)
- # now the extra buffers for the IIR processing
- # note the different datatype uint32
- self._Buffer2array = _numpy.zeros((Size[0]* Size[1]*3), dtype=_numpy.uint32) #dtype=_numpy.float
- self._Buffer3array = _numpy.zeros((Size[0]* Size[1]*3), dtype=_numpy.uint32) #dtype=_numpy.float
- # optional you can set the ufunct buffer size to improve speed
- #_numpy.setbufsize(16*((Size[0]* Size[1]*3)/16 +1))
- self._setSize()
-
- self.last_PointLabel = None #reset pointLabel
-
- if self.last_draw is None:
- self.Clear()
- else:
- graphics, xSpec, ySpec = self.last_draw
- self.Draw(graphics,xSpec,ySpec)
-
- def OnLeave(self, event):
- """Used to erase pointLabel when mouse outside window"""
- if self.last_PointLabel != None:
- self._drawPointLabel(self.last_PointLabel) #erase old
- self.last_PointLabel = None
-
-
- # Private Methods **************************************************
- def _setSize(self, width=None, height=None):
- """DC width and height."""
- if width == None:
- (self.width,self.height) = self.GetClientSize()
- else:
- self.width, self.height= width,height
- self.plotbox_size = 0.97*_numpy.array([self.width, self.height])
- xo = 0.5*(self.width-self.plotbox_size[0])
- yo = self.height-0.5*(self.height-self.plotbox_size[1])
- self.plotbox_origin = _numpy.array([xo, yo])
-
- def _setPrinterScale(self, scale):
- """Used to thicken lines and increase marker size for print out."""
- # line thickness on printer is very thin at 600 dot/in. Markers small
- self.printerScale= scale
-
- def _printDraw(self, printDC):
- """Used for printing."""
- if self.last_draw != None:
- graphics, xSpec, ySpec= self.last_draw
- self.Draw(graphics,xSpec,ySpec,printDC)
-
- def _drawPointLabel(self, mDataDict):
- """Draws and erases pointLabels"""
- width = self._Buffer.GetWidth()
- height = self._Buffer.GetHeight()
- tmp_Buffer = wx.EmptyBitmap(width,height)
- dcs = wx.MemoryDC()
- dcs.SelectObject(tmp_Buffer)
- dcs.Clear()
- dcs.BeginDrawing()
- self._pointLabelFunc(dcs,mDataDict) #custom user pointLabel function
- dcs.EndDrawing()
-
- dc = wx.ClientDC( self )
- #this will erase if called twice
- dc.Blit(0, 0, width, height, dcs, 0, 0, wx.EQUIV) #(NOT src) XOR dst
-
-
- def _drawLegend(self,dc,graphics,rhsW,topH,legendBoxWH, legendSymExt, legendTextExt):
- """Draws legend symbols and text"""
- # top right hand corner of graph box is ref corner
- trhc= self.plotbox_origin+ (self.plotbox_size-[rhsW,topH])*[1,-1]
- legendLHS= .091* legendBoxWH[0] # border space between legend sym and graph box
- lineHeight= max(legendSymExt[1], legendTextExt[1]) * 1.1 #1.1 used as space between lines
- dc.SetFont(self._getFont(self._fontSizeLegend))
- for i in range(len(graphics)):
- o = graphics[i]
- s= i*lineHeight
- if isinstance(o,PolyMarker):
- # draw marker with legend
- pnt= (trhc[0]+legendLHS+legendSymExt[0]/2., trhc[1]+s+lineHeight/2.)
- o.draw(dc, self.printerScale, coord= _numpy.array([pnt]))
- elif isinstance(o,PolyLine):
- # draw line with legend
- pnt1= (trhc[0]+legendLHS, trhc[1]+s+lineHeight/2.)
- pnt2= (trhc[0]+legendLHS+legendSymExt[0], trhc[1]+s+lineHeight/2.)
- o.draw(dc, self.printerScale, coord= _numpy.array([pnt1,pnt2]))
- else:
- raise TypeError, "object is neither PolyMarker or PolyLine instance"
- # draw legend txt
- pnt= (trhc[0]+legendLHS+legendSymExt[0], trhc[1]+s+lineHeight/2.-legendTextExt[1]/2)
- dc.DrawText(o.getLegend(),pnt[0],pnt[1])
- dc.SetFont(self._getFont(self._fontSizeAxis)) # reset
-
- def _titleLablesWH(self, dc, graphics):
- """Draws Title and labels and returns width and height for each"""
- # TextExtents for Title and Axis Labels
- dc.SetFont(self._getFont(self._fontSizeTitle))
- title= graphics.getTitle()
- titleWH= dc.GetTextExtent(title)
- dc.SetFont(self._getFont(self._fontSizeAxis))
- xLabel, yLabel= graphics.getXLabel(),graphics.getYLabel()
- xLabelWH= dc.GetTextExtent(xLabel)
- yLabelWH= dc.GetTextExtent(yLabel)
- return titleWH, xLabelWH, yLabelWH
-
- def _legendWH(self, dc, graphics):
- """Returns the size in screen units for legend box"""
- if self._legendEnabled != True:
- legendBoxWH= symExt= txtExt= (0,0)
- else:
- # find max symbol size
- symExt= graphics.getSymExtent(self.printerScale)
- # find max legend text extent
- dc.SetFont(self._getFont(self._fontSizeLegend))
- txtList= graphics.getLegendNames()
- txtExt= dc.GetTextExtent(txtList[0])
- for txt in graphics.getLegendNames()[1:]:
- txtExt= _numpy.maximum(txtExt,dc.GetTextExtent(txt))
- maxW= symExt[0]+txtExt[0]
- maxH= max(symExt[1],txtExt[1])
- # padding .1 for lhs of legend box and space between lines
- maxW= maxW* 1.1
- maxH= maxH* 1.1 * len(txtList)
- dc.SetFont(self._getFont(self._fontSizeAxis))
- legendBoxWH= (maxW,maxH)
- return (legendBoxWH, symExt, txtExt)
-
- def _drawRubberBand(self, corner1, corner2):
- """Draws/erases rect box from corner1 to corner2"""
- ptx,pty,rectWidth,rectHeight= self._point2ClientCoord(corner1, corner2)
- # draw rectangle
- dc = wx.ClientDC( self )
- dc.BeginDrawing()
- dc.SetPen(wx.Pen(wx.BLACK))
- dc.SetBrush(wx.Brush( wx.WHITE, wx.TRANSPARENT ) )
- dc.SetLogicalFunction(wx.INVERT)
- dc.DrawRectangle( ptx,pty, rectWidth,rectHeight)
- dc.SetLogicalFunction(wx.COPY)
- dc.EndDrawing()
-
- def _getFont(self,size):
- """Take font size, adjusts if printing and returns wx.Font"""
- s = size*self.printerScale
- of = self.GetFont()
- # Linux speed up to get font from cache rather than X font server
- key = (int(s), of.GetFamily (), of.GetStyle (), of.GetWeight ())
- font = self._fontCache.get (key, None)
- if font:
- return font # yeah! cache hit
- else:
- font = wx.Font(int(s), of.GetFamily(), of.GetStyle(), of.GetWeight())
- self._fontCache[key] = font
- return font
-
-
- def _point2ClientCoord(self, corner1, corner2):
- """Converts user point coords to client screen int coords x,y,width,height"""
- c1= _numpy.array(corner1)
- c2= _numpy.array(corner2)
- # convert to screen coords
- pt1= c1*self._pointScale+self._pointShift
- pt2= c2*self._pointScale+self._pointShift
- # make height and width positive
- pul= _numpy.minimum(pt1,pt2) # Upper left corner
- plr= _numpy.maximum(pt1,pt2) # Lower right corner
- rectWidth, rectHeight= plr-pul
- ptx,pty= pul
- return ptx, pty, rectWidth, rectHeight
-
- def _axisInterval(self, spec, lower, upper):
- """Returns sensible axis range for given spec"""
- if spec == 'none' or spec == 'min':
- if lower == upper:
- return lower-0.5, upper+0.5
- else:
- return lower, upper
- elif spec == 'auto':
- range = upper-lower
- # if range == 0.:
- if abs(range) < 1e-36:
- return lower-0.5, upper+0.5
- log = _numpy.log10(range)
- power = _numpy.floor(log)
- fraction = log-power
- if fraction <= 0.05:
- power = power-1
- grid = 10.**power
- lower = lower - lower % grid
- mod = upper % grid
- if mod != 0:
- upper = upper - mod + grid
- return lower, upper
- elif type(spec) == type(()):
- lower, upper = spec
- if lower <= upper:
- return lower, upper
- else:
- return upper, lower
- else:
- raise ValueError, str(spec) + ': illegal axis specification'
-
- def _drawAxes(self, dc, p1, p2, scale, shift, xticks, yticks):
-
- penWidth= self.printerScale # increases thickness for printing only
- dc.SetPen(wx.Pen(wx.NamedColour('BLACK'), penWidth))
-
- # set length of tick marks--long ones make grid
- if self._gridEnabled:
- x,y,width,height= self._point2ClientCoord(p1,p2)
- yTickLength= width/2.0 +1
- xTickLength= height/2.0 +1
- else:
- yTickLength= 3 * self.printerScale # lengthens lines for printing
- xTickLength= 3 * self.printerScale
-
- if self._xSpec is not 'none':
- lower, upper = p1[0],p2[0]
- text = 1
- for y, d in [(p1[1], -xTickLength), (p2[1], xTickLength)]: # miny, maxy and tick lengths
- a1 = scale*_numpy.array([lower, y])+shift
- a2 = scale*_numpy.array([upper, y])+shift
- dc.DrawLine(a1[0],a1[1],a2[0],a2[1]) # draws upper and lower axis line
- for x, label in xticks:
- pt = scale*_numpy.array([x, y])+shift
- dc.DrawLine(pt[0],pt[1],pt[0],pt[1] + d) # draws tick mark d units
- if text:
- dc.DrawText(label,pt[0],pt[1])
- text = 0 # axis values not drawn on top side
-
- if self._ySpec is not 'none':
- lower, upper = p1[1],p2[1]
- text = 1
- h = dc.GetCharHeight()
- for x, d in [(p1[0], -yTickLength), (p2[0], yTickLength)]:
- a1 = scale*_numpy.array([x, lower])+shift
- a2 = scale*_numpy.array([x, upper])+shift
- dc.DrawLine(a1[0],a1[1],a2[0],a2[1])
- for y, label in yticks:
- pt = scale*_numpy.array([x, y])+shift
- dc.DrawLine(pt[0],pt[1],pt[0]-d,pt[1])
- if text:
- dc.DrawText(label,pt[0]-dc.GetTextExtent(label)[0],
- pt[1]-0.5*h)
- text = 0 # axis values not drawn on right side
-
- def _ticks(self, lower, upper, step=None):
- ideal = (upper-lower)/7.
- log = _numpy.log10(ideal)
- power = _numpy.floor(log)
- fraction = log-power
- factor = 1.
- error = fraction
- for f, lf in self._multiples:
- e = _numpy.fabs(fraction-lf)
- if e < error:
- error = e
- factor = f
- grid = factor * 10.**power
- if power > 4 or power < -4:
- format = '%+7.1e'
- elif power >= 0:
- digits = max(1, int(power))
- format = '%' + `digits`+'.0f'
- else:
- digits = -int(power)
- format = '%'+`digits+2`+'.'+`digits`+'f'
- #force grid when step is not None
- if step is not None: grid = step
- ticks = []
- t = -grid*_numpy.floor(-lower/grid)
- while t <= upper:
- if t == -0: t = 0 #remove neg zero condition
- ticks.append( (t, format % (t,)) )
- t = t + grid
- return ticks
-
- def _scope_ticks (self, lower, upper):
- '''Always 10 divisions, no labels'''
- grid = (upper - lower) / 10.0
- ticks = []
- t = lower
- while t <= upper:
- ticks.append( (t, ""))
- t = t + grid
- return ticks
-
- _multiples = [(2., _numpy.log10(2.)), (5., _numpy.log10(5.))]
-
-
-#-------------------------------------------------------------------------------
-# Used to layout the printer page
-
-class PlotPrintout(wx.Printout):
- """Controls how the plot is made in printing and previewing"""
- # Do not change method names in this class,
- # we have to override wx.Printout methods here!
- def __init__(self, graph):
- """graph is instance of plotCanvas to be printed or previewed"""
- wx.Printout.__init__(self)
- self.graph = graph
-
- def HasPage(self, page):
- if page == 1:
- return True
- else:
- return False
-
- def GetPageInfo(self):
- return (1, 1, 1, 1) # disable page numbers
-
- def OnPrintPage(self, page):
- dc = self.GetDC() # allows using floats for certain functions
-## print "PPI Printer",self.GetPPIPrinter()
-## print "PPI Screen", self.GetPPIScreen()
-## print "DC GetSize", dc.GetSize()
-## print "GetPageSizePixels", self.GetPageSizePixels()
- # Note PPIScreen does not give the correct number
- # Calulate everything for printer and then scale for preview
- PPIPrinter= self.GetPPIPrinter() # printer dots/inch (w,h)
- #PPIScreen= self.GetPPIScreen() # screen dots/inch (w,h)
- dcSize= dc.GetSize() # DC size
- pageSize= self.GetPageSizePixels() # page size in terms of pixcels
- clientDcSize= self.graph.GetClientSize()
-
- # find what the margins are (mm)
- margLeftSize,margTopSize= self.graph.pageSetupData.GetMarginTopLeft()
- margRightSize, margBottomSize= self.graph.pageSetupData.GetMarginBottomRight()
-
- # calculate offset and scale for dc
- pixLeft= margLeftSize*PPIPrinter[0]/25.4 # mm*(dots/in)/(mm/in)
- pixRight= margRightSize*PPIPrinter[0]/25.4
- pixTop= margTopSize*PPIPrinter[1]/25.4
- pixBottom= margBottomSize*PPIPrinter[1]/25.4
-
- plotAreaW= pageSize[0]-(pixLeft+pixRight)
- plotAreaH= pageSize[1]-(pixTop+pixBottom)
-
- # ratio offset and scale to screen size if preview
- if self.IsPreview():
- ratioW= float(dcSize[0])/pageSize[0]
- ratioH= float(dcSize[1])/pageSize[1]
- pixLeft *= ratioW
- pixTop *= ratioH
- plotAreaW *= ratioW
- plotAreaH *= ratioH
-
- # rescale plot to page or preview plot area
- self.graph._setSize(plotAreaW,plotAreaH)
-
- # Set offset and scale
- dc.SetDeviceOrigin(pixLeft,pixTop)
-
- # Thicken up pens and increase marker size for printing
- ratioW= float(plotAreaW)/clientDcSize[0]
- ratioH= float(plotAreaH)/clientDcSize[1]
- aveScale= (ratioW+ratioH)/2
- self.graph._setPrinterScale(aveScale) # tickens up pens for printing
-
- self.graph._printDraw(dc)
- # rescale back to original
- self.graph._setSize()
- self.graph._setPrinterScale(1)
- self.graph.Redraw() #to get point label scale and shift correct
-
- return True
-
-
-
-
-#---------------------------------------------------------------------------
-# if running standalone...
-#
-# ...a sample implementation using the above
-#
-
-def _draw1Objects():
- # 100 points sin function, plotted as green circles
- data1 = 2.*_numpy.pi*_numpy.arange(200)/200.
- data1.shape = (100, 2)
- data1[:,1] = _numpy.sin(data1[:,0])
- markers1 = PolyMarker(data1, legend='Green Markers', colour='green', marker='circle',size=1)
-
- # 50 points cos function, plotted as red line
- data1 = 2.*_numpy.pi*_numpy.arange(100)/100.
- data1.shape = (50,2)
- data1[:,1] = _numpy.cos(data1[:,0])
- lines = PolyLine(data1, legend= 'Red Line', colour='red')
-
- # A few more points...
- pi = _numpy.pi
- markers2 = PolyMarker([(0., 0.), (pi/4., 1.), (pi/2, 0.),
- (3.*pi/4., -1)], legend='Cross Legend', colour='blue',
- marker='cross')
-
- return PlotGraphics([markers1, lines, markers2],"Graph Title", "X Axis", "Y Axis")
-
-def _draw2Objects():
- # 100 points sin function, plotted as green dots
- data1 = 2.*_numpy.pi*_numpy.arange(200)/200.
- data1.shape = (100, 2)
- data1[:,1] = _numpy.sin(data1[:,0])
- line1 = PolyLine(data1, legend='Green Line', colour='green', width=6, style=wx.DOT)
-
- # 50 points cos function, plotted as red dot-dash
- data1 = 2.*_numpy.pi*_numpy.arange(100)/100.
- data1.shape = (50,2)
- data1[:,1] = _numpy.cos(data1[:,0])
- line2 = PolyLine(data1, legend='Red Line', colour='red', width=3, style= wx.DOT_DASH)
-
- # A few more points...
- pi = _numpy.pi
- markers1 = PolyMarker([(0., 0.), (pi/4., 1.), (pi/2, 0.),
- (3.*pi/4., -1)], legend='Cross Hatch Square', colour='blue', width= 3, size= 6,
- fillcolour= 'red', fillstyle= wx.CROSSDIAG_HATCH,
- marker='square')
-
- return PlotGraphics([markers1, line1, line2], "Big Markers with Different Line Styles")
-
-def _draw3Objects():
- markerList= ['circle', 'dot', 'square', 'triangle', 'triangle_down',
- 'cross', 'plus', 'circle']
- m=[]
- for i in range(len(markerList)):
- m.append(PolyMarker([(2*i+.5,i+.5)], legend=markerList[i], colour='blue',
- marker=markerList[i]))
- return PlotGraphics(m, "Selection of Markers", "Minimal Axis", "No Axis")
-
-def _draw4Objects():
- # 25,000 point line
- data1 = _numpy.arange(5e5,1e6,10)
- data1.shape = (25000, 2)
- line1 = PolyLine(data1, legend='Wide Line', colour='green', width=5)
-
- # A few more points...
- markers2 = PolyMarker(data1, legend='Square', colour='blue',
- marker='square')
- return PlotGraphics([line1, markers2], "25,000 Points", "Value X", "")
-
-def _draw5Objects():
- # Empty graph with axis defined but no points/lines
- points=[]
- line1 = PolyLine(points, legend='Wide Line', colour='green', width=5)
- return PlotGraphics([line1], "Empty Plot With Just Axes", "Value X", "Value Y")
-
-def _draw6Objects():
- # Bar graph
- points1=[(1,0), (1,10)]
- line1 = PolyLine(points1, colour='green', legend='Feb.', width=10)
- points1g=[(2,0), (2,4)]
- line1g = PolyLine(points1g, colour='red', legend='Mar.', width=10)
- points1b=[(3,0), (3,6)]
- line1b = PolyLine(points1b, colour='blue', legend='Apr.', width=10)
-
- points2=[(4,0), (4,12)]
- line2 = PolyLine(points2, colour='Yellow', legend='May', width=10)
- points2g=[(5,0), (5,8)]
- line2g = PolyLine(points2g, colour='orange', legend='June', width=10)
- points2b=[(6,0), (6,4)]
- line2b = PolyLine(points2b, colour='brown', legend='July', width=10)
-
- return PlotGraphics([line1, line1g, line1b, line2, line2g, line2b],
- "Bar Graph - (Turn on Grid, Legend)", "Months", "Number of Students")
-
-
-class TestFrame(wx.Frame):
- def __init__(self, parent, id, title):
- wx.Frame.__init__(self, parent, id, title,
- wx.DefaultPosition, (600, 400))
-
- # Now Create the menu bar and items
- self.mainmenu = wx.MenuBar()
-
- menu = wx.Menu()
- menu.Append(200, 'Page Setup...', 'Setup the printer page')
- self.Bind(wx.EVT_MENU, self.OnFilePageSetup, id=200)
-
- menu.Append(201, 'Print Preview...', 'Show the current plot on page')
- self.Bind(wx.EVT_MENU, self.OnFilePrintPreview, id=201)
-
- menu.Append(202, 'Print...', 'Print the current plot')
- self.Bind(wx.EVT_MENU, self.OnFilePrint, id=202)
-
- menu.Append(203, 'Save Plot...', 'Save current plot')
- self.Bind(wx.EVT_MENU, self.OnSaveFile, id=203)
-
- menu.Append(205, 'E&xit', 'Enough of this already!')
- self.Bind(wx.EVT_MENU, self.OnFileExit, id=205)
- self.mainmenu.Append(menu, '&File')
-
- menu = wx.Menu()
- menu.Append(206, 'Draw1', 'Draw plots1')
- self.Bind(wx.EVT_MENU,self.OnPlotDraw1, id=206)
- menu.Append(207, 'Draw2', 'Draw plots2')
- self.Bind(wx.EVT_MENU,self.OnPlotDraw2, id=207)
- menu.Append(208, 'Draw3', 'Draw plots3')
- self.Bind(wx.EVT_MENU,self.OnPlotDraw3, id=208)
- menu.Append(209, 'Draw4', 'Draw plots4')
- self.Bind(wx.EVT_MENU,self.OnPlotDraw4, id=209)
- menu.Append(210, 'Draw5', 'Draw plots5')
- self.Bind(wx.EVT_MENU,self.OnPlotDraw5, id=210)
- menu.Append(260, 'Draw6', 'Draw plots6')
- self.Bind(wx.EVT_MENU,self.OnPlotDraw6, id=260)
-
-
- menu.Append(211, '&Redraw', 'Redraw plots')
- self.Bind(wx.EVT_MENU,self.OnPlotRedraw, id=211)
- menu.Append(212, '&Clear', 'Clear canvas')
- self.Bind(wx.EVT_MENU,self.OnPlotClear, id=212)
- menu.Append(213, '&Scale', 'Scale canvas')
- self.Bind(wx.EVT_MENU,self.OnPlotScale, id=213)
- menu.Append(214, 'Enable &Zoom', 'Enable Mouse Zoom', kind=wx.ITEM_CHECK)
- self.Bind(wx.EVT_MENU,self.OnEnableZoom, id=214)
- menu.Append(215, 'Enable &Grid', 'Turn on Grid', kind=wx.ITEM_CHECK)
- self.Bind(wx.EVT_MENU,self.OnEnableGrid, id=215)
- menu.Append(220, 'Enable &Legend', 'Turn on Legend', kind=wx.ITEM_CHECK)
- self.Bind(wx.EVT_MENU,self.OnEnableLegend, id=220)
- menu.Append(222, 'Enable &Point Label', 'Show Closest Point', kind=wx.ITEM_CHECK)
- self.Bind(wx.EVT_MENU,self.OnEnablePointLabel, id=222)
-
- menu.Append(225, 'Scroll Up 1', 'Move View Up 1 Unit')
- self.Bind(wx.EVT_MENU,self.OnScrUp, id=225)
- menu.Append(230, 'Scroll Rt 2', 'Move View Right 2 Units')
- self.Bind(wx.EVT_MENU,self.OnScrRt, id=230)
- menu.Append(235, '&Plot Reset', 'Reset to original plot')
- self.Bind(wx.EVT_MENU,self.OnReset, id=235)
-
- self.mainmenu.Append(menu, '&Plot')
-
- menu = wx.Menu()
- menu.Append(300, '&About', 'About this thing...')
- self.Bind(wx.EVT_MENU, self.OnHelpAbout, id=300)
- self.mainmenu.Append(menu, '&Help')
-
- self.SetMenuBar(self.mainmenu)
-
- # A status bar to tell people what's happening
- self.CreateStatusBar(1)
-
- self.client = PlotCanvas(self)
- #define the function for drawing pointLabels
- self.client.SetPointLabelFunc(self.DrawPointLabel)
- # Create mouse event for showing cursor coords in status bar
- self.client.Bind(wx.EVT_LEFT_DOWN, self.OnMouseLeftDown)
- # Show closest point when enabled
- self.client.Bind(wx.EVT_MOTION, self.OnMotion)
-
- self.Show(True)
-
- def DrawPointLabel(self, dc, mDataDict):
- """This is the fuction that defines how the pointLabels are plotted
- dc - DC that will be passed
- mDataDict - Dictionary of data that you want to use for the pointLabel
-
- As an example I have decided I want a box at the curve point
- with some text information about the curve plotted below.
- Any wxDC method can be used.
- """
- # ----------
- dc.SetPen(wx.Pen(wx.BLACK))
- dc.SetBrush(wx.Brush( wx.BLACK, wx.SOLID ) )
-
- sx, sy = mDataDict["scaledXY"] #scaled x,y of closest point
- dc.DrawRectangle( sx-5,sy-5, 10, 10) #10by10 square centered on point
- px,py = mDataDict["pointXY"]
- cNum = mDataDict["curveNum"]
- pntIn = mDataDict["pIndex"]
- legend = mDataDict["legend"]
- #make a string to display
- s = "Crv# %i, '%s', Pt. (%.2f,%.2f), PtInd %i" %(cNum, legend, px, py, pntIn)
- dc.DrawText(s, sx , sy+1)
- # -----------
-
- def OnMouseLeftDown(self,event):
- s= "Left Mouse Down at Point: (%.4f, %.4f)" % self.client.GetXY(event)
- self.SetStatusText(s)
- event.Skip() #allows plotCanvas OnMouseLeftDown to be called
-
- def OnMotion(self, event):
- #show closest point (when enbled)
- if self.client.GetEnablePointLabel() == True:
- #make up dict with info for the pointLabel
- #I've decided to mark the closest point on the closest curve
- dlst= self.client.GetClosetPoint( self.client.GetXY(event), pointScaled= True)
- if dlst != []: #returns [] if none
- curveNum, legend, pIndex, pointXY, scaledXY, distance = dlst
- #make up dictionary to pass to my user function (see DrawPointLabel)
- mDataDict= {"curveNum":curveNum, "legend":legend, "pIndex":pIndex,\
- "pointXY":pointXY, "scaledXY":scaledXY}
- #pass dict to update the pointLabel
- self.client.UpdatePointLabel(mDataDict)
- event.Skip() #go to next handler
-
- def OnFilePageSetup(self, event):
- self.client.PageSetup()
-
- def OnFilePrintPreview(self, event):
- self.client.PrintPreview()
-
- def OnFilePrint(self, event):
- self.client.Printout()
-
- def OnSaveFile(self, event):
- self.client.SaveFile()
-
- def OnFileExit(self, event):
- self.Close()
-
- def OnPlotDraw1(self, event):
- self.resetDefaults()
- self.client.Draw(_draw1Objects())
-
- def OnPlotDraw2(self, event):
- self.resetDefaults()
- self.client.Draw(_draw2Objects())
-
- def OnPlotDraw3(self, event):
- self.resetDefaults()
- self.client.SetFont(wx.Font(10,wx.SCRIPT,wx.NORMAL,wx.NORMAL))
- self.client.SetFontSizeAxis(20)
- self.client.SetFontSizeLegend(12)
- self.client.SetXSpec('min')
- self.client.SetYSpec('none')
- self.client.Draw(_draw3Objects())
-
- def OnPlotDraw4(self, event):
- self.resetDefaults()
- drawObj= _draw4Objects()
- self.client.Draw(drawObj)
-## # profile
-## start = _time.clock()
-## for x in range(10):
-## self.client.Draw(drawObj)
-## print "10 plots of Draw4 took: %f sec."%(_time.clock() - start)
-## # profile end
-
- def OnPlotDraw5(self, event):
- # Empty plot with just axes
- self.resetDefaults()
- drawObj= _draw5Objects()
- # make the axis X= (0,5), Y=(0,10)
- # (default with None is X= (-1,1), Y= (-1,1))
- self.client.Draw(drawObj, xAxis= (0,5), yAxis= (0,10))
-
- def OnPlotDraw6(self, event):
- #Bar Graph Example
- self.resetDefaults()
- #self.client.SetEnableLegend(True) #turn on Legend
- #self.client.SetEnableGrid(True) #turn on Grid
- self.client.SetXSpec('none') #turns off x-axis scale
- self.client.SetYSpec('auto')
- self.client.Draw(_draw6Objects(), xAxis= (0,7))
-
- def OnPlotRedraw(self,event):
- self.client.Redraw()
-
- def OnPlotClear(self,event):
- self.client.Clear()
-
- def OnPlotScale(self, event):
- if self.client.last_draw != None:
- graphics, xAxis, yAxis= self.client.last_draw
- self.client.Draw(graphics,(1,3.05),(0,1))
-
- def OnEnableZoom(self, event):
- self.client.SetEnableZoom(event.IsChecked())
-
- def OnEnableGrid(self, event):
- self.client.SetEnableGrid(event.IsChecked())
-
- def OnEnableLegend(self, event):
- self.client.SetEnableLegend(event.IsChecked())
-
- def OnEnablePointLabel(self, event):
- self.client.SetEnablePointLabel(event.IsChecked())
-
- def OnScrUp(self, event):
- self.client.ScrollUp(1)
-
- def OnScrRt(self,event):
- self.client.ScrollRight(2)
-
- def OnReset(self,event):
- self.client.Reset()
-
- def OnHelpAbout(self, event):
- from wx.lib.dialogs import ScrolledMessageDialog
- about = ScrolledMessageDialog(self, __doc__, "About...")
- about.ShowModal()
-
- def resetDefaults(self):
- """Just to reset the fonts back to the PlotCanvas defaults"""
- self.client.SetFont(wx.Font(10,wx.SWISS,wx.NORMAL,wx.NORMAL))
- self.client.SetFontSizeAxis(10)
- self.client.SetFontSizeLegend(7)
- self.client.SetXSpec('auto')
- self.client.SetYSpec('auto')
-
-
-def __test():
-
- class MyApp(wx.App):
- def OnInit(self):
- wx.InitAllImageHandlers()
- frame = TestFrame(None, -1, "PlotCanvas")
- #frame.Show(True)
- self.SetTopWindow(frame)
- return True
-
-
- app = MyApp(0)
- app.MainLoop()
-
-if __name__ == '__main__':
- __test()
diff --git a/gr-wxgui/python/wxgui/plotter/__init__.py b/gr-wxgui/python/wxgui/plotter/__init__.py
deleted file mode 100644
index 616492a3e6..0000000000
--- a/gr-wxgui/python/wxgui/plotter/__init__.py
+++ /dev/null
@@ -1,24 +0,0 @@
-#
-# Copyright 2008 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-#
-
-from channel_plotter import channel_plotter
-from waterfall_plotter import waterfall_plotter
-from bar_plotter import bar_plotter
diff --git a/gr-wxgui/python/wxgui/plotter/bar_plotter.py b/gr-wxgui/python/wxgui/plotter/bar_plotter.py
deleted file mode 100644
index 487db66b64..0000000000
--- a/gr-wxgui/python/wxgui/plotter/bar_plotter.py
+++ /dev/null
@@ -1,150 +0,0 @@
-#
-# Copyright 2009 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-#
-
-import wx
-from grid_plotter_base import grid_plotter_base
-from OpenGL import GL
-import common
-import numpy
-
-LEGEND_TEXT_FONT_SIZE = 8
-LEGEND_BOX_PADDING = 3
-MIN_PADDING = 0, 0, 0, 70 #top, right, bottom, left
-#constants for the waveform storage
-SAMPLES_KEY = 'samples'
-COLOR_SPEC_KEY = 'color_spec'
-MARKERY_KEY = 'marker'
-TRIG_OFF_KEY = 'trig_off'
-
-##################################################
-# Bar Plotter for histogram waveforms
-##################################################
-class bar_plotter(grid_plotter_base):
-
- def __init__(self, parent):
- """
- Create a new bar plotter.
- """
- #init
- grid_plotter_base.__init__(self, parent, MIN_PADDING)
- self._bars = list()
- self._bar_width = .5
- self._color_spec = (0, 0, 0)
- #setup bar cache
- self._bar_cache = self.new_gl_cache(self._draw_bars)
- #setup bar plotter
- self.register_init(self._init_bar_plotter)
-
- def _init_bar_plotter(self):
- """
- Run gl initialization tasks.
- """
- GL.glEnableClientState(GL.GL_VERTEX_ARRAY)
-
- def _draw_bars(self):
- """
- Draw the vertical bars.
- """
- bars = self._bars
- num_bars = len(bars)
- if num_bars == 0: return
- #use scissor to prevent drawing outside grid
- GL.glEnable(GL.GL_SCISSOR_TEST)
- GL.glScissor(
- self.padding_left,
- self.padding_bottom+1,
- self.width-self.padding_left-self.padding_right-1,
- self.height-self.padding_top-self.padding_bottom-1,
- )
- #load the points
- points = list()
- width = self._bar_width/2
- for i, bar in enumerate(bars):
- points.extend([
- (i-width, 0),
- (i+width, 0),
- (i+width, bar),
- (i-width, bar),
- ]
- )
- GL.glColor3f(*self._color_spec)
- #matrix transforms
- GL.glPushMatrix()
- GL.glTranslatef(self.padding_left, self.padding_top, 0)
- GL.glScalef(
- (self.width-self.padding_left-self.padding_right),
- (self.height-self.padding_top-self.padding_bottom),
- 1,
- )
- GL.glTranslatef(0, 1, 0)
- GL.glScalef(1.0/(num_bars-1), -1.0/(self.y_max-self.y_min), 1)
- GL.glTranslatef(0, -self.y_min, 0)
- #draw the bars
- GL.glVertexPointerf(points)
- GL.glDrawArrays(GL.GL_QUADS, 0, len(points))
- GL.glPopMatrix()
- GL.glDisable(GL.GL_SCISSOR_TEST)
-
- def _populate_point_label(self, x_val, y_val):
- """
- Get the text the will populate the point label.
- Give X and Y values for the current point.
- Give values for the channel at the X coordinate.
-
- Args:
- x_val: the current x value
- y_val: the current y value
-
- Returns:
- a string with newlines
- """
- if len(self._bars) == 0: return ''
- scalar = float(len(self._bars)-1)/(self.x_max - self.x_min)
- #convert x val to bar #
- bar_index = scalar*(x_val - self.x_min)
- #if abs(bar_index - round(bar_index)) > self._bar_width/2: return ''
- bar_index = int(round(bar_index))
- bar_start = (bar_index - self._bar_width/2)/scalar + self.x_min
- bar_end = (bar_index + self._bar_width/2)/scalar + self.x_min
- bar_value = self._bars[bar_index]
- return '%s to %s\n%s: %s'%(
- common.eng_format(bar_start, self.x_units),
- common.eng_format(bar_end, self.x_units),
- self.y_label, common.eng_format(bar_value, self.y_units),
- )
-
- def set_bars(self, bars, bar_width, color_spec):
- """
- Set the bars.
-
- Args:
- bars: a list of bars
- bar_width: the fractional width of the bar, between 0 and 1
- color_spec: the color tuple
- """
- self.lock()
- self._bars = bars
- self._bar_width = float(bar_width)
- self._color_spec = color_spec
- self._bar_cache.changed(True)
- self.unlock()
-
-
diff --git a/gr-wxgui/python/wxgui/plotter/channel_plotter.py b/gr-wxgui/python/wxgui/plotter/channel_plotter.py
deleted file mode 100644
index db174c7b28..0000000000
--- a/gr-wxgui/python/wxgui/plotter/channel_plotter.py
+++ /dev/null
@@ -1,249 +0,0 @@
-#
-# Copyright 2008, 2009, 2010 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-#
-
-import wx
-from grid_plotter_base import grid_plotter_base
-from OpenGL import GL
-import common
-import numpy
-import gltext
-import math
-
-LEGEND_TEXT_FONT_SIZE = 8
-LEGEND_BOX_PADDING = 3
-MIN_PADDING = 35, 10, 0, 0 #top, right, bottom, left
-#constants for the waveform storage
-SAMPLES_KEY = 'samples'
-COLOR_SPEC_KEY = 'color_spec'
-MARKERY_KEY = 'marker'
-TRIG_OFF_KEY = 'trig_off'
-
-##################################################
-# Channel Plotter for X Y Waveforms
-##################################################
-class channel_plotter(grid_plotter_base):
-
- def __init__(self, parent):
- """
- Create a new channel plotter.
- """
- #init
- grid_plotter_base.__init__(self, parent, MIN_PADDING)
- self.set_use_persistence(False)
- #setup legend cache
- self._legend_cache = self.new_gl_cache(self._draw_legend, 50)
- self.enable_legend(False)
- #setup waveform cache
- self._waveform_cache = self.new_gl_cache(self._draw_waveforms, 50)
- self._channels = dict()
- #init channel plotter
- self.register_init(self._init_channel_plotter)
- self.callback = None
-
- def _init_channel_plotter(self):
- """
- Run gl initialization tasks.
- """
- GL.glEnableClientState(GL.GL_VERTEX_ARRAY)
-
- def enable_legend(self, enable=None):
- """
- Enable/disable the legend.
-
- Args:
- enable: true to enable
-
- Returns:
- the enable state when None
- """
- if enable is None: return self._enable_legend
- self.lock()
- self._enable_legend = enable
- self._legend_cache.changed(True)
- self.unlock()
-
- def _draw_waveforms(self):
- """
- Draw the waveforms for each channel.
- Scale the waveform data to the grid using gl matrix operations.
- """
- #use scissor to prevent drawing outside grid
- GL.glEnable(GL.GL_SCISSOR_TEST)
- GL.glScissor(
- self.padding_left+1,
- self.padding_bottom+1,
- self.width-self.padding_left-self.padding_right-1,
- self.height-self.padding_top-self.padding_bottom-1,
- )
- for channel in reversed(sorted(self._channels.keys())):
- samples = self._channels[channel][SAMPLES_KEY]
- num_samps = len(samples)
- if not num_samps: continue
- #use opengl to scale the waveform
- GL.glPushMatrix()
- GL.glTranslatef(self.padding_left, self.padding_top, 0)
- GL.glScalef(
- (self.width-self.padding_left-self.padding_right),
- (self.height-self.padding_top-self.padding_bottom),
- 1,
- )
- GL.glTranslatef(0, 1, 0)
- if isinstance(samples, tuple):
- x_scale, x_trans = 1.0/(self.x_max-self.x_min), -self.x_min
- points = zip(*samples)
- else:
- x_scale, x_trans = 1.0/(num_samps-1), -self._channels[channel][TRIG_OFF_KEY]
- points = zip(numpy.arange(0, num_samps), samples)
- GL.glScalef(x_scale, -1.0/(self.y_max-self.y_min), 1)
- GL.glTranslatef(x_trans, -self.y_min, 0)
- #draw the points/lines
- GL.glColor3f(*self._channels[channel][COLOR_SPEC_KEY])
- marker = self._channels[channel][MARKERY_KEY]
- if marker is None:
- GL.glVertexPointerf(points)
- GL.glDrawArrays(GL.GL_LINE_STRIP, 0, len(points))
- elif isinstance(marker, (int, float)) and marker > 0:
- GL.glPointSize(marker)
- GL.glVertexPointerf(points)
- GL.glDrawArrays(GL.GL_POINTS, 0, len(points))
- GL.glPopMatrix()
- GL.glDisable(GL.GL_SCISSOR_TEST)
-
- def _populate_point_label(self, x_val, y_val):
- """
- Get the text the will populate the point label.
- Give X and Y values for the current point.
- Give values for the channel at the X coordinate.
-
- Args:
- x_val: the current x value
- y_val: the current y value
-
- Returns:
- a string with newlines
- """
- #create text
- label_str = '%s: %s\n%s: %s'%(
- self.x_label, common.eng_format(x_val, self.x_units),
- self.y_label, common.eng_format(y_val, self.y_units),
- )
- for channel in sorted(self._channels.keys()):
- samples = self._channels[channel][SAMPLES_KEY]
- num_samps = len(samples)
- if not num_samps: continue
- if isinstance(samples, tuple): continue
- #linear interpolation
- x_index = (num_samps-1)*(x_val-self.x_min)/(self.x_max-self.x_min)
- x_index_low = int(math.floor(x_index))
- x_index_high = int(math.ceil(x_index))
- scale = x_index - x_index_low + self._channels[channel][TRIG_OFF_KEY]
- y_value = (samples[x_index_high] - samples[x_index_low])*scale + samples[x_index_low]
- if math.isnan(y_value): continue
- label_str += '\n%s: %s'%(channel, common.eng_format(y_value, self.y_units))
- return label_str
-
- def _call_callback (self, x_val, y_val):
- if self.callback != None:
- self.callback(x_val, y_val)
-
- def set_callback (self, callback):
- self.callback = callback
-
- def _draw_legend(self):
- """
- Draw the legend in the upper right corner.
- For each channel, draw a rectangle out of the channel color,
- and overlay the channel text on top of the rectangle.
- """
- if not self.enable_legend(): return
- x_off = self.width - self.padding_right - LEGEND_BOX_PADDING
- for i, channel in enumerate(reversed(sorted(self._channels.keys()))):
- samples = self._channels[channel][SAMPLES_KEY]
- if not len(samples): continue
- color_spec = self._channels[channel][COLOR_SPEC_KEY]
- txt = gltext.Text(channel, font_size=LEGEND_TEXT_FONT_SIZE)
- w, h = txt.get_size()
- #draw rect + text
- GL.glColor3f(*color_spec)
- self._draw_rect(
- x_off - w - LEGEND_BOX_PADDING,
- self.padding_top/2 - h/2 - LEGEND_BOX_PADDING,
- w+2*LEGEND_BOX_PADDING,
- h+2*LEGEND_BOX_PADDING,
- )
- txt.draw_text(wx.Point(x_off - w, self.padding_top/2 - h/2))
- x_off -= w + 4*LEGEND_BOX_PADDING
-
- def clear_waveform(self, channel):
- """
- Remove a waveform from the list of waveforms.
-
- Args:
- channel: the channel key
- """
- self.lock()
- if channel in self._channels.keys():
- self._channels.pop(channel)
- self._legend_cache.changed(True)
- self._waveform_cache.changed(True)
- self.unlock()
-
- def set_waveform(self, channel, samples=[], color_spec=(0, 0, 0), marker=None, trig_off=0):
- """
- Set the waveform for a given channel.
-
- Args:
- channel: the channel key
- samples: the waveform samples
- color_spec: the 3-tuple for line color
- marker: None for line
- trig_off: fraction of sample for trigger offset
- """
- self.lock()
- if channel not in self._channels.keys(): self._legend_cache.changed(True)
- self._channels[channel] = {
- SAMPLES_KEY: samples,
- COLOR_SPEC_KEY: color_spec,
- MARKERY_KEY: marker,
- TRIG_OFF_KEY: trig_off,
- }
- self._waveform_cache.changed(True)
- self.unlock()
-
-if __name__ == '__main__':
- app = wx.PySimpleApp()
- frame = wx.Frame(None, -1, 'Demo', wx.DefaultPosition)
- vbox = wx.BoxSizer(wx.VERTICAL)
-
- plotter = channel_plotter(frame)
- plotter.set_x_grid(-1, 1, .2)
- plotter.set_y_grid(-1, 1, .4)
- vbox.Add(plotter, 1, wx.EXPAND)
-
- plotter = channel_plotter(frame)
- plotter.set_x_grid(-1, 1, .2)
- plotter.set_y_grid(-1, 1, .4)
- vbox.Add(plotter, 1, wx.EXPAND)
-
- frame.SetSizerAndFit(vbox)
- frame.SetSize(wx.Size(800, 600))
- frame.Show()
- app.MainLoop()
diff --git a/gr-wxgui/python/wxgui/plotter/common.py b/gr-wxgui/python/wxgui/plotter/common.py
deleted file mode 100644
index c296b1fa79..0000000000
--- a/gr-wxgui/python/wxgui/plotter/common.py
+++ /dev/null
@@ -1,149 +0,0 @@
-#
-# Copyright 2009 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-#
-
-import threading
-import time
-import math
-import wx
-
-##################################################
-# Number formatting
-##################################################
-def get_exp(num):
- """
- Get the exponent of the number in base 10.
-
- Args:
- num: the floating point number
-
- Returns:
- the exponent as an integer
- """
- if num == 0: return 0
- return int(math.floor(math.log10(abs(num))))
-
-def get_si_components(num):
- """
- Get the SI units for the number.
- Extract the coeff and exponent of the number.
- The exponent will be a multiple of 3.
-
- Args:
- num: the floating point number
-
- Returns:
- the tuple coeff, exp, prefix
- """
- num = float(num)
- exp = get_exp(num)
- exp -= exp%3
- exp = min(max(exp, -24), 24) #bounds on SI table below
- prefix = {
- 24: 'Y', 21: 'Z',
- 18: 'E', 15: 'P',
- 12: 'T', 9: 'G',
- 6: 'M', 3: 'k',
- 0: '',
- -3: 'm', -6: 'u',
- -9: 'n', -12: 'p',
- -15: 'f', -18: 'a',
- -21: 'z', -24: 'y',
- }[exp]
- coeff = num/10**exp
- return coeff, exp, prefix
-
-def sci_format(num):
- """
- Format a floating point number into scientific notation.
-
- Args:
- num: the number to format
-
- Returns:
- a label string
- """
- coeff, exp, prefix = get_si_components(num)
- if -3 <= exp < 3: return '%g'%num
- return '%.3ge%d'%(coeff, exp)
-
-def eng_format(num, units=''):
- """
- Format a floating point number into engineering notation.
-
- Args:
- num: the number to format
- units: the units to append
-
- Returns:
- a label string
- """
- coeff, exp, prefix = get_si_components(num)
- if -3 <= exp < 3: return '%g'%num
- return '%g%s%s%s'%(coeff, units and ' ' or '', prefix, units)
-
-##################################################
-# Interface with thread safe lock/unlock
-##################################################
-class mutex(object):
- _lock = threading.Lock()
- def lock(self): self._lock.acquire()
- def unlock(self): self._lock.release()
-
-##################################################
-# Periodic update thread for point label
-##################################################
-class point_label_thread(threading.Thread, mutex):
-
- def __init__(self, plotter):
- self._plotter = plotter
- self._coor_queue = list()
- #bind plotter mouse events
- self._plotter.Bind(wx.EVT_MOTION, lambda evt: self.enqueue(evt.GetPosition()))
- self._plotter.Bind(wx.EVT_LEAVE_WINDOW, lambda evt: self.enqueue(None))
- self._plotter.Bind(wx.EVT_RIGHT_DOWN, lambda evt: plotter.enable_point_label(not plotter.enable_point_label()))
- self._plotter.Bind(wx.EVT_LEFT_DOWN, lambda evt: plotter.call_freq_callback(evt.GetPosition()))
- #start the thread
- threading.Thread.__init__(self)
- self.start()
-
- def enqueue(self, coor):
- self.lock()
- self._coor_queue.append(coor)
- self.unlock()
-
- def run(self):
- last_ts = time.time()
- last_coor = coor = None
- try:
- while True:
- time.sleep(1.0/30.0)
- self.lock()
- #get most recent coor change
- if self._coor_queue:
- coor = self._coor_queue[-1]
- self._coor_queue = list()
- self.unlock()
- #update if coor change, or enough time expired
- if last_coor != coor or (time.time() - last_ts) > (1.0/2.0):
- self._plotter.set_point_label_coordinate(coor)
- last_coor = coor
- last_ts = time.time()
- except wx.PyDeadObjectError: pass
diff --git a/gr-wxgui/python/wxgui/plotter/gltext.py b/gr-wxgui/python/wxgui/plotter/gltext.py
deleted file mode 100644
index 55627bceb1..0000000000
--- a/gr-wxgui/python/wxgui/plotter/gltext.py
+++ /dev/null
@@ -1,507 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8
-#
-# Provides some text display functions for wx + ogl
-# Copyright (C) 2007 Christian Brugger, Stefan Hacker
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with this program; if not, write to the Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-import wx
-from OpenGL.GL import *
-
-"""
-Optimize with psyco if possible, this gains us about 50% speed when
-creating our textures in trade for about 4MBytes of additional memory usage for
-psyco. If you don't like loosing the memory you have to turn the lines following
-"enable psyco" into a comment while uncommenting the line after "Disable psyco".
-"""
-#Try to enable psyco
-try:
- import psyco
- psyco_optimized = False
-except ImportError:
- psyco = None
-
-#Disable psyco
-#psyco = None
-
-class TextElement(object):
- """
- A simple class for using system Fonts to display
- text in an OpenGL scene
- """
- def __init__(self,
- text = '',
- font = None,
- foreground = wx.BLACK,
- centered = False):
- """
- text (String) - Text
- font (wx.Font) - Font to draw with (None = System default)
- foreground (wx.Color) - Color of the text
- or (wx.Bitmap)- Bitmap to overlay the text with
- centered (bool) - Center the text
-
- Initializes the TextElement
- """
- # save given variables
- self._text = text
- self._lines = text.split('\n')
- self._font = font
- self._foreground = foreground
- self._centered = centered
-
- # init own variables
- self._owner_cnt = 0 #refcounter
- self._texture = None #OpenGL texture ID
- self._text_size = None #x/y size tuple of the text
- self._texture_size= None #x/y Texture size tuple
-
- # create Texture
- self.createTexture()
-
-
- #---Internal helpers
-
- def _getUpper2Base(self, value):
- """
- Returns the lowest value with the power of
- 2 greater than 'value' (2^n>value)
- """
- base2 = 1
- while base2 < value:
- base2 *= 2
- return base2
-
- #---Functions
-
- def draw_text(self, position = wx.Point(0,0), scale = 1.0, rotation = 0):
- """
- position (wx.Point) - x/y Position to draw in scene
- scale (float) - Scale
- rotation (int) - Rotation in degree
-
- Draws the text to the scene
- """
- #Enable necessary functions
- glColor(1,1,1,1)
- glEnable(GL_TEXTURE_2D)
- glEnable(GL_ALPHA_TEST) #Enable alpha test
- glAlphaFunc(GL_GREATER, 0)
- glEnable(GL_BLEND) #Enable blending
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
- #Bind texture
- glBindTexture(GL_TEXTURE_2D, self._texture)
-
- ow, oh = self._text_size
- w , h = self._texture_size
- #Perform transformations
- glPushMatrix()
- glTranslated(position.x, position.y, 0)
- glRotate(-rotation, 0, 0, 1)
- glScaled(scale, scale, scale)
- if self._centered:
- glTranslate(-w/2, -oh/2, 0)
- #Draw vertices
- glBegin(GL_QUADS)
- glTexCoord2f(0,0); glVertex2f(0,0)
- glTexCoord2f(0,1); glVertex2f(0,h)
- glTexCoord2f(1,1); glVertex2f(w,h)
- glTexCoord2f(1,0); glVertex2f(w,0)
- glEnd()
- glPopMatrix()
-
- #Disable features
- glDisable(GL_BLEND)
- glDisable(GL_ALPHA_TEST)
- glDisable(GL_TEXTURE_2D)
-
- def createTexture(self):
- """
- Creates a texture from the settings saved in TextElement, to be able to use normal
- system fonts conviently a wx.MemoryDC is used to draw on a wx.Bitmap. As wxwidgets
- device contexts don't support alpha at all it is necessary to apply a little hack
- to preserve antialiasing without sticking to a fixed background color:
-
- We draw the bmp in b/w mode so we can use its data as a alpha channel for a solid
- color bitmap which after GL_ALPHA_TEST and GL_BLEND will show a nicely antialiased
- text on any surface.
-
- To access the raw pixel data the bmp gets converted to a wx.Image. Now we just have
- to merge our foreground color with the alpha data we just created and push it all
- into a OpenGL texture and we are DONE *inhalesdelpy*
-
- DRAWBACK of the whole conversion thing is a really long time for creating the
- texture. If you see any optimizations that could save time PLEASE CREATE A PATCH!!!
- """
- # get a memory dc
- dc = wx.MemoryDC()
-
- # Select an empty bitmap into the MemoryDC - otherwise the call to
- # GetMultiLineTextExtent() may fail below
- dc.SelectObject(wx.EmptyBitmap(1,1))
-
- # set our font
- dc.SetFont(self._font)
-
- # Approximate extend to next power of 2 and create our bitmap
- # REMARK: You wouldn't believe how much fucking speed this little
- # sucker gains compared to sizes not of the power of 2. It's like
- # 500ms --> 0.5ms (on my ATI-GPU powered Notebook). On Sams nvidia
- # machine there don't seem to occur any losses...bad drivers?
- ow, oh = dc.GetMultiLineTextExtent(self._text)[:2]
- w, h = self._getUpper2Base(ow), self._getUpper2Base(oh)
-
- self._text_size = wx.Size(ow,oh)
- self._texture_size = wx.Size(w,h)
- bmp = wx.EmptyBitmap(w,h)
-
-
- #Draw in b/w mode to bmp so we can use it as alpha channel
- dc.SelectObject(bmp)
- dc.SetBackground(wx.BLACK_BRUSH)
- dc.Clear()
- dc.SetTextForeground(wx.WHITE)
- x,y = 0,0
- centered = self.centered
- for line in self._lines:
- if not line: line = ' '
- tw, th = dc.GetTextExtent(line)
- if centered:
- x = int(round((w-tw)/2))
- dc.DrawText(line, x, y)
- x = 0
- y += th
- #Release the dc
- dc.SelectObject(wx.NullBitmap)
- del dc
-
- #Generate a correct RGBA data string from our bmp
- """
- NOTE: You could also use wx.AlphaPixelData to access the pixel data
- in 'bmp' directly, but the iterator given by it is much slower than
- first converting to an image and using wx.Image.GetData().
- """
- img = wx.ImageFromBitmap(bmp)
- alpha = img.GetData()
-
- if isinstance(self._foreground, wx.Colour):
- """
- If we have a static color...
- """
- r,g,b = self._foreground.Get()
- color = "%c%c%c" % (chr(r), chr(g), chr(b))
-
- data = ''
- for i in xrange(0, len(alpha)-1, 3):
- data += color + alpha[i]
-
- elif isinstance(self._foreground, wx.Bitmap):
- """
- If we have a bitmap...
- """
- bg_img = wx.ImageFromBitmap(self._foreground)
- bg = bg_img.GetData()
- bg_width = self._foreground.GetWidth()
- bg_height = self._foreground.GetHeight()
-
- data = ''
-
- for y in xrange(0, h):
- for x in xrange(0, w):
- if (y > (bg_height-1)) or (x > (bg_width-1)):
- color = "%c%c%c" % (chr(0),chr(0),chr(0))
- else:
- pos = (x+y*bg_width) * 3
- color = bg[pos:pos+3]
- data += color + alpha[(x+y*w)*3]
-
-
- # now convert it to ogl texture
- self._texture = glGenTextures(1)
- glBindTexture(GL_TEXTURE_2D, self._texture)
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR)
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR)
-
- glPixelStorei(GL_UNPACK_ROW_LENGTH, 0)
- glPixelStorei(GL_UNPACK_ALIGNMENT, 2)
- glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, data)
-
- def deleteTexture(self):
- """
- Deletes the OpenGL texture object
- """
- if self._texture:
- if glIsTexture(self._texture):
- glDeleteTextures(self._texture)
- else:
- self._texture = None
-
- def bind(self):
- """
- Increase refcount
- """
- self._owner_cnt += 1
-
- def release(self):
- """
- Decrease refcount
- """
- self._owner_cnt -= 1
-
- def isBound(self):
- """
- Return refcount
- """
- return self._owner_cnt
-
- def __del__(self):
- """
- Destructor
- """
- self.deleteTexture()
-
- #---Getters/Setters
-
- def getText(self): return self._text
- def getFont(self): return self._font
- def getForeground(self): return self._foreground
- def getCentered(self): return self._centered
- def getTexture(self): return self._texture
- def getTexture_size(self): return self._texture_size
-
- def getOwner_cnt(self): return self._owner_cnt
- def setOwner_cnt(self, value):
- self._owner_cnt = value
-
- #---Properties
-
- text = property(getText, None, None, "Text of the object")
- font = property(getFont, None, None, "Font of the object")
- foreground = property(getForeground, None, None, "Color of the text")
- centered = property(getCentered, None, None, "Is text centered")
- owner_cnt = property(getOwner_cnt, setOwner_cnt, None, "Owner count")
- texture = property(getTexture, None, None, "Used texture")
- texture_size = property(getTexture_size, None, None, "Size of the used texture")
-
-
-class Text(object):
- """
- A simple class for using System Fonts to display text in
- an OpenGL scene. The Text adds a global Cache of already
- created text elements to TextElement's base functionality
- so you can save some memory and increase speed
- """
- _texts = [] #Global cache for TextElements
-
- def __init__(self,
- text = 'Text',
- font = None,
- font_size = 8,
- foreground = wx.BLACK,
- centered = False,
- bold = False):
- """
- text (string) - displayed text
- font (wx.Font) - if None, system default font will be used with font_size
- font_size (int) - font size in points
- foreground (wx.Color) - Color of the text
- or (wx.Bitmap) - Bitmap to overlay the text with
- centered (bool) - should the text drawn centered towards position?
-
- Initializes the text object
- """
- #Init/save variables
- self._aloc_text = None
- self._text = text
- self._font_size = font_size
- self._foreground= foreground
- self._centered = centered
-
- #Check if we are offered a font
- if not font:
- #if not use the system default
- self._font = wx.SystemSettings.GetFont(wx.SYS_DEFAULT_GUI_FONT)
- else:
- #save it
- self._font = font
-
- if bold: self._font.SetWeight(wx.FONTWEIGHT_BOLD)
-
- #Bind us to our texture
- self._initText()
-
- #---Internal helpers
-
- def _initText(self):
- """
- Initializes/Reinitializes the Text object by binding it
- to a TextElement suitable for its current settings
- """
- #Check if we already bound to a texture
- if self._aloc_text:
- #if so release it
- self._aloc_text.release()
- if not self._aloc_text.isBound():
- self._texts.remove(self._aloc_text)
- self._aloc_text = None
-
- #Adjust our font
- self._font.SetPointSize(self._font_size)
-
- #Search for existing element in our global buffer
- for element in self._texts:
- if element.text == self._text and\
- element.font == self._font and\
- element.foreground == self._foreground and\
- element.centered == self._centered:
- # We already exist in global buffer ;-)
- element.bind()
- self._aloc_text = element
- break
-
- if not self._aloc_text:
- # We are not in the global buffer, let's create ourselves
- aloc_text = self._aloc_text = TextElement(self._text,
- self._font,
- self._foreground,
- self._centered)
- aloc_text.bind()
- self._texts.append(aloc_text)
-
- def __del__(self):
- """
- Destructor
- """
- aloc_text = self._aloc_text
- aloc_text.release()
- if not aloc_text.isBound():
- self._texts.remove(aloc_text)
-
- #---Functions
-
- def draw_text(self, position = wx.Point(0,0), scale = 1.0, rotation = 0):
- """
- position (wx.Point) - x/y Position to draw in scene
- scale (float) - Scale
- rotation (int) - Rotation in degree
-
- Draws the text to the scene
- """
-
- self._aloc_text.draw_text(position, scale, rotation)
-
- #---Setter/Getter
-
- def getText(self): return self._text
- def setText(self, value, reinit = True):
- """
- value (bool) - New Text
- reinit (bool) - Create a new texture
-
- Sets a new text
- """
- self._text = value
- if reinit:
- self._initText()
-
- def getFont(self): return self._font
- def setFont(self, value, reinit = True):
- """
- value (bool) - New Font
- reinit (bool) - Create a new texture
-
- Sets a new font
- """
- self._font = value
- if reinit:
- self._initText()
-
- def getFont_size(self): return self._font_size
- def setFont_size(self, value, reinit = True):
- """
- value (bool) - New font size
- reinit (bool) - Create a new texture
-
- Sets a new font size
- """
- self._font_size = value
- if reinit:
- self._initText()
-
- def getForeground(self): return self._foreground
- def setForeground(self, value, reinit = True):
- """
- value (bool) - New centered value
- reinit (bool) - Create a new texture
-
- Sets a new value for 'centered'
- """
- self._foreground = value
- if reinit:
- self._initText()
-
- def getCentered(self): return self._centered
- def setCentered(self, value, reinit = True):
- """
- value (bool) - New centered value
- reinit (bool) - Create a new texture
-
- Sets a new value for 'centered'
- """
- self._centered = value
- if reinit:
- self._initText()
-
- def get_size(self):
- """
- Returns a text size tuple
- """
- return self._aloc_text._text_size
-
- def getTexture_size(self):
- """
- Returns a texture size tuple
- """
- return self._aloc_text.texture_size
-
- def getTextElement(self):
- """
- Returns the text element bound to the Text class
- """
- return self._aloc_text
-
- def getTexture(self):
- """
- Returns the texture of the bound TextElement
- """
- return self._aloc_text.texture
-
-
- #---Properties
-
- text = property(getText, setText, None, "Text of the object")
- font = property(getFont, setFont, None, "Font of the object")
- font_size = property(getFont_size, setFont_size, None, "Font size")
- foreground = property(getForeground, setForeground, None, "Color/Overlay bitmap of the text")
- centered = property(getCentered, setCentered, None, "Display the text centered")
- texture_size = property(getTexture_size, None, None, "Size of the used texture")
- texture = property(getTexture, None, None, "Texture of bound TextElement")
- text_element = property(getTextElement,None , None, "TextElement bound to this class")
-
-#Optimize critical functions
-if psyco and not psyco_optimized:
- psyco.bind(TextElement.createTexture)
- psyco_optimized = True
diff --git a/gr-wxgui/python/wxgui/plotter/grid_plotter_base.py b/gr-wxgui/python/wxgui/plotter/grid_plotter_base.py
deleted file mode 100644
index bc48ad72f5..0000000000
--- a/gr-wxgui/python/wxgui/plotter/grid_plotter_base.py
+++ /dev/null
@@ -1,458 +0,0 @@
-#
-# Copyright 2009 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-#
-
-import wx
-import wx.glcanvas
-from OpenGL import GL
-import common
-from plotter_base import plotter_base
-import gltext
-import math
-
-GRID_LINE_COLOR_SPEC = (.7, .7, .7) #gray
-GRID_BORDER_COLOR_SPEC = (0, 0, 0) #black
-TICK_TEXT_FONT_SIZE = 9
-TITLE_TEXT_FONT_SIZE = 13
-UNITS_TEXT_FONT_SIZE = 9
-AXIS_LABEL_PADDING = 5
-TICK_LABEL_PADDING = 5
-TITLE_LABEL_PADDING = 7
-POINT_LABEL_FONT_SIZE = 8
-POINT_LABEL_COLOR_SPEC = (1, 1, 0.5, 0.75)
-POINT_LABEL_PADDING = 3
-POINT_LABEL_OFFSET = 10
-GRID_LINE_DASH_LEN = 4
-
-##################################################
-# Grid Plotter Base Class
-##################################################
-class grid_plotter_base(plotter_base):
-
- def __init__(self, parent, min_padding=(0, 0, 0, 0)):
- plotter_base.__init__(self, parent)
- #setup grid cache
- self._grid_cache = self.new_gl_cache(self._draw_grid, 25)
- self.enable_grid_lines(True)
- #setup padding
- self.padding_top_min, self.padding_right_min, self.padding_bottom_min, self.padding_left_min = min_padding
- #store title and unit strings
- self.set_title('Title')
- self.set_x_label('X Label')
- self.set_y_label('Y Label')
- #init the grid to some value
- self.set_x_grid(-1, 1, 1)
- self.set_y_grid(-1, 1, 1)
- #setup point label cache
- self._point_label_cache = self.new_gl_cache(self._draw_point_label, 75)
- self.enable_point_label(False)
- self.enable_grid_aspect_ratio(False)
- self.set_point_label_coordinate(None)
- common.point_label_thread(self)
- #init grid plotter
- self.register_init(self._init_grid_plotter)
-
- def _init_grid_plotter(self):
- """
- Run gl initialization tasks.
- """
- GL.glEnableClientState(GL.GL_VERTEX_ARRAY)
-
- def set_point_label_coordinate(self, coor):
- """
- Set the point label coordinate.
-
- Args:
- coor: the coordinate x, y tuple or None
- """
- self.lock()
- self._point_label_coordinate = coor
- self._point_label_cache.changed(True)
- self.update()
- self.unlock()
-
- def call_freq_callback(self, coor):
- try:
- x, y = self._point_label_coordinate
- except:
- return
- if x < self.padding_left or x > self.width-self.padding_right: return
- if y < self.padding_top or y > self.height-self.padding_bottom: return
- #scale to window bounds
- x_win_scalar = float(x - self.padding_left)/(self.width-self.padding_left-self.padding_right)
- y_win_scalar = float((self.height - y) - self.padding_bottom)/(self.height-self.padding_top-self.padding_bottom)
- #scale to grid bounds
- x_val = x_win_scalar*(self.x_max-self.x_min) + self.x_min
- y_val = y_win_scalar*(self.y_max-self.y_min) + self.y_min
- self._call_callback(x_val, y_val)
-
- def enable_grid_aspect_ratio(self, enable=None):
- """
- Enable/disable the grid aspect ratio.
- If enabled, enforce the aspect ratio on the padding:
- horizontal_padding:vertical_padding == width:height
-
- Args:
- enable: true to enable
-
- Returns:
- the enable state when None
- """
- if enable is None: return self._enable_grid_aspect_ratio
- self.lock()
- self._enable_grid_aspect_ratio = enable
- for cache in self._gl_caches: cache.changed(True)
- self.unlock()
-
- def enable_point_label(self, enable=None):
- """
- Enable/disable the point label.
-
- Args:
- enable: true to enable
-
- Returns:
- the enable state when None
- """
- if enable is None: return self._enable_point_label
- self.lock()
- self._enable_point_label = enable
- self._point_label_cache.changed(True)
- self.unlock()
-
- def set_title(self, title):
- """
- Set the title.
-
- Args:
- title the title string
- """
- self.lock()
- self.title = title
- self._grid_cache.changed(True)
- self.unlock()
-
- def set_x_label(self, x_label, x_units=''):
- """
- Set the x label and units.
-
- Args:
- x_label: the x label string
- x_units: the x units string
- """
- self.lock()
- self.x_label = x_label
- self.x_units = x_units
- self._grid_cache.changed(True)
- self.unlock()
-
- def set_y_label(self, y_label, y_units=''):
- """
- Set the y label and units.
-
- Args:
- y_label: the y label string
- y_units: the y units string
- """
- self.lock()
- self.y_label = y_label
- self.y_units = y_units
- self._grid_cache.changed(True)
- self.unlock()
-
- def set_x_grid(self, minimum, maximum, step, scale=False):
- """
- Set the x grid parameters.
-
- Args:
- minimum: the left-most value
- maximum: the right-most value
- step: the grid spacing
- scale: true to scale the x grid
- """
- self.lock()
- self.x_min = float(minimum)
- self.x_max = float(maximum)
- self.x_step = float(step)
- if scale:
- coeff, exp, prefix = common.get_si_components(max(abs(self.x_min), abs(self.x_max)))
- self.x_scalar = 10**(-exp)
- self.x_prefix = prefix
- else:
- self.x_scalar = 1.0
- self.x_prefix = ''
- for cache in self._gl_caches: cache.changed(True)
- self.unlock()
-
- def set_y_grid(self, minimum, maximum, step, scale=False):
- """
- Set the y grid parameters.
-
- Args:
- minimum: the bottom-most value
- maximum: the top-most value
- step: the grid spacing
- scale: true to scale the y grid
- """
- self.lock()
- self.y_min = float(minimum)
- self.y_max = float(maximum)
- self.y_step = float(step)
- if scale:
- coeff, exp, prefix = common.get_si_components(max(abs(self.y_min), abs(self.y_max)))
- self.y_scalar = 10**(-exp)
- self.y_prefix = prefix
- else:
- self.y_scalar = 1.0
- self.y_prefix = ''
- for cache in self._gl_caches: cache.changed(True)
- self.unlock()
-
- def _draw_grid(self):
- """
- Create the x, y, tick, and title labels.
- Resize the padding for the labels.
- Draw the border, grid, title, and labels.
- """
- ##################################################
- # Create GL text labels
- ##################################################
- #create x tick labels
- x_tick_labels = [(tick, self._get_tick_label(tick, self.x_units))
- for tick in self._get_ticks(self.x_min, self.x_max, self.x_step, self.x_scalar)]
- #create x tick labels
- y_tick_labels = [(tick, self._get_tick_label(tick, self.y_units))
- for tick in self._get_ticks(self.y_min, self.y_max, self.y_step, self.y_scalar)]
- #create x label
- x_label_str = self.x_units and "%s (%s%s)"%(self.x_label, self.x_prefix, self.x_units) or self.x_label
- x_label = gltext.Text(x_label_str, bold=True, font_size=UNITS_TEXT_FONT_SIZE, centered=True)
- #create y label
- y_label_str = self.y_units and "%s (%s%s)"%(self.y_label, self.y_prefix, self.y_units) or self.y_label
- y_label = gltext.Text(y_label_str, bold=True, font_size=UNITS_TEXT_FONT_SIZE, centered=True)
- #create title
- title_label = gltext.Text(self.title, bold=True, font_size=TITLE_TEXT_FONT_SIZE, centered=True)
- ##################################################
- # Resize the padding
- ##################################################
- self.padding_top = max(2*TITLE_LABEL_PADDING + title_label.get_size()[1], self.padding_top_min)
- self.padding_right = max(2*TICK_LABEL_PADDING, self.padding_right_min)
- self.padding_bottom = max(2*AXIS_LABEL_PADDING + TICK_LABEL_PADDING + x_label.get_size()[1] + max([label.get_size()[1] for tick, label in x_tick_labels]), self.padding_bottom_min)
- self.padding_left = max(2*AXIS_LABEL_PADDING + TICK_LABEL_PADDING + y_label.get_size()[1] + max([label.get_size()[0] for tick, label in y_tick_labels]), self.padding_left_min)
- #enforce padding aspect ratio if enabled
- if self.enable_grid_aspect_ratio():
- w_over_h_ratio = float(self.width)/float(self.height)
- horizontal_padding = float(self.padding_right + self.padding_left)
- veritical_padding = float(self.padding_top + self.padding_bottom)
- if w_over_h_ratio > horizontal_padding/veritical_padding:
- #increase the horizontal padding
- new_padding = veritical_padding*w_over_h_ratio - horizontal_padding
- #distribute the padding to left and right
- self.padding_left += int(round(new_padding/2))
- self.padding_right += int(round(new_padding/2))
- else:
- #increase the vertical padding
- new_padding = horizontal_padding/w_over_h_ratio - veritical_padding
- #distribute the padding to top and bottom
- self.padding_top += int(round(new_padding/2))
- self.padding_bottom += int(round(new_padding/2))
- ##################################################
- # Draw Grid X
- ##################################################
- for tick, label in x_tick_labels:
- scaled_tick = (self.width-self.padding_left-self.padding_right)*\
- (tick/self.x_scalar-self.x_min)/(self.x_max-self.x_min) + self.padding_left
- self._draw_grid_line(
- (scaled_tick, self.padding_top),
- (scaled_tick, self.height-self.padding_bottom),
- )
- w, h = label.get_size()
- label.draw_text(wx.Point(scaled_tick-w/2, self.height-self.padding_bottom+TICK_LABEL_PADDING))
- ##################################################
- # Draw Grid Y
- ##################################################
- for tick, label in y_tick_labels:
- scaled_tick = (self.height-self.padding_top-self.padding_bottom)*\
- (1 - (tick/self.y_scalar-self.y_min)/(self.y_max-self.y_min)) + self.padding_top
- self._draw_grid_line(
- (self.padding_left, scaled_tick),
- (self.width-self.padding_right, scaled_tick),
- )
- w, h = label.get_size()
- label.draw_text(wx.Point(self.padding_left-w-TICK_LABEL_PADDING, scaled_tick-h/2))
- ##################################################
- # Draw Border
- ##################################################
- GL.glColor3f(*GRID_BORDER_COLOR_SPEC)
- self._draw_rect(
- self.padding_left,
- self.padding_top,
- self.width - self.padding_right - self.padding_left,
- self.height - self.padding_top - self.padding_bottom,
- fill=False,
- )
- ##################################################
- # Draw Labels
- ##################################################
- #draw title label
- title_label.draw_text(wx.Point(self.width/2.0, TITLE_LABEL_PADDING + title_label.get_size()[1]/2))
- #draw x labels
- x_label.draw_text(wx.Point(
- (self.width-self.padding_left-self.padding_right)/2.0 + self.padding_left,
- self.height-(AXIS_LABEL_PADDING + x_label.get_size()[1]/2),
- )
- )
- #draw y labels
- y_label.draw_text(wx.Point(
- AXIS_LABEL_PADDING + y_label.get_size()[1]/2,
- (self.height-self.padding_top-self.padding_bottom)/2.0 + self.padding_top,
- ), rotation=90,
- )
-
- def _get_tick_label(self, tick, unit):
- """
- Format the tick value and create a gl text.
-
- Args:
- tick: the floating point tick value
- unit: the axis unit
-
- Returns:
- the tick label text
- """
- if unit: tick_str = common.sci_format(tick)
- else: tick_str = common.eng_format(tick)
- return gltext.Text(tick_str, font_size=TICK_TEXT_FONT_SIZE)
-
- def _get_ticks(self, min, max, step, scalar):
- """
- Determine the positions for the ticks.
-
- Args:
- min: the lower bound
- max: the upper bound
- step: the grid spacing
- scalar: the grid scaling
-
- Returns:
- a list of tick positions between min and max
- """
- #cast to float
- min = float(min)
- max = float(max)
- step = float(step)
- #check for valid numbers
- try:
- assert step > 0
- assert max > min
- assert max - min > step
- except AssertionError: return [-1, 1]
- #determine the start and stop value
- start = int(math.ceil(min/step))
- stop = int(math.floor(max/step))
- return [i*step*scalar for i in range(start, stop+1)]
-
- def enable_grid_lines(self, enable=None):
- """
- Enable/disable the grid lines.
-
- Args:
- enable: true to enable
-
- Returns:
- the enable state when None
- """
- if enable is None: return self._enable_grid_lines
- self.lock()
- self._enable_grid_lines = enable
- self._grid_cache.changed(True)
- self.unlock()
-
- def _draw_grid_line(self, coor1, coor2):
- """
- Draw a dashed line from coor1 to coor2.
-
- Args:
- corr1: a tuple of x, y
- corr2: a tuple of x, y
- """
- if not self.enable_grid_lines(): return
- length = math.sqrt((coor1[0] - coor2[0])**2 + (coor1[1] - coor2[1])**2)
- num_points = int(length/GRID_LINE_DASH_LEN)
- #calculate points array
- points = [(
- coor1[0] + i*(coor2[0]-coor1[0])/(num_points - 1),
- coor1[1] + i*(coor2[1]-coor1[1])/(num_points - 1)
- ) for i in range(num_points)]
- #set color and draw
- GL.glColor3f(*GRID_LINE_COLOR_SPEC)
- GL.glVertexPointerf(points)
- GL.glDrawArrays(GL.GL_LINES, 0, len(points))
-
- def _draw_rect(self, x, y, width, height, fill=True):
- """
- Draw a rectangle on the x, y plane.
- X and Y are the top-left corner.
-
- Args:
- x: the left position of the rectangle
- y: the top position of the rectangle
- width: the width of the rectangle
- height: the height of the rectangle
- fill: true to color inside of rectangle
- """
- GL.glBegin(fill and GL.GL_QUADS or GL.GL_LINE_LOOP)
- GL.glVertex2f(x, y)
- GL.glVertex2f(x+width, y)
- GL.glVertex2f(x+width, y+height)
- GL.glVertex2f(x, y+height)
- GL.glEnd()
-
- def _draw_point_label(self):
- """
- Draw the point label for the last mouse motion coordinate.
- The mouse coordinate must be an X, Y tuple.
- The label will be drawn at the X, Y coordinate.
- The values of the X, Y coordinate will be scaled to the current X, Y bounds.
- """
- if not self.enable_point_label(): return
- if not self._point_label_coordinate: return
- x, y = self._point_label_coordinate
- if x < self.padding_left or x > self.width-self.padding_right: return
- if y < self.padding_top or y > self.height-self.padding_bottom: return
- #scale to window bounds
- x_win_scalar = float(x - self.padding_left)/(self.width-self.padding_left-self.padding_right)
- y_win_scalar = float((self.height - y) - self.padding_bottom)/(self.height-self.padding_top-self.padding_bottom)
- #scale to grid bounds
- x_val = x_win_scalar*(self.x_max-self.x_min) + self.x_min
- y_val = y_win_scalar*(self.y_max-self.y_min) + self.y_min
- #create text
- label_str = self._populate_point_label(x_val, y_val)
- if not label_str: return
- txt = gltext.Text(label_str, font_size=POINT_LABEL_FONT_SIZE)
- w, h = txt.get_size()
- #enable transparency
- GL.glEnable(GL.GL_BLEND)
- GL.glBlendFunc(GL.GL_SRC_ALPHA, GL.GL_ONE_MINUS_SRC_ALPHA)
- #draw rect + text
- GL.glColor4f(*POINT_LABEL_COLOR_SPEC)
- if x > self.width/2: x -= w+2*POINT_LABEL_PADDING + POINT_LABEL_OFFSET
- else: x += POINT_LABEL_OFFSET
- self._draw_rect(x, y-h-2*POINT_LABEL_PADDING, w+2*POINT_LABEL_PADDING, h+2*POINT_LABEL_PADDING)
- txt.draw_text(wx.Point(x+POINT_LABEL_PADDING, y-h-POINT_LABEL_PADDING))
diff --git a/gr-wxgui/python/wxgui/plotter/plotter_base.py b/gr-wxgui/python/wxgui/plotter/plotter_base.py
deleted file mode 100644
index ca904908ec..0000000000
--- a/gr-wxgui/python/wxgui/plotter/plotter_base.py
+++ /dev/null
@@ -1,220 +0,0 @@
-#
-# Copyright 2008, 2009, 2010 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-#
-
-import wx
-import wx.glcanvas
-from OpenGL import GL
-import common
-
-BACKGROUND_COLOR_SPEC = (1, 0.976, 1, 1) #creamy white
-
-##################################################
-# GL caching interface
-##################################################
-class gl_cache(object):
- """
- Cache a set of gl drawing routines in a compiled list.
- """
-
- def __init__(self, draw):
- """
- Create a new cache.
-
- Args:
- draw: a function to draw gl stuff
- """
- self.changed(True)
- self._draw = draw
-
- def init(self):
- """
- To be called when gl initializes.
- Create a new compiled list.
- """
- self._grid_compiled_list_id = GL.glGenLists(1)
-
- def draw(self):
- """
- Draw the gl stuff using a compiled list.
- If changed, reload the compiled list.
- """
- if self.changed():
- GL.glNewList(self._grid_compiled_list_id, GL.GL_COMPILE)
- self._draw()
- GL.glEndList()
- self.changed(False)
- #draw the grid
- GL.glCallList(self._grid_compiled_list_id)
-
- def changed(self, state=None):
- """
- Set the changed flag if state is not None.
- Otherwise return the changed flag.
- """
- if state is None: return self._changed
- self._changed = state
-
-##################################################
-# OpenGL WX Plotter Canvas
-##################################################
-class plotter_base(wx.glcanvas.GLCanvas, common.mutex):
- """
- Plotter base class for all plot types.
- """
-
- def __init__(self, parent):
- """
- Create a new plotter base.
- Initialize the GLCanvas with double buffering.
- Initialize various plotter flags.
- Bind the paint and size events.
-
- Args:
- parent: the parent widgit
- """
- attribList = (wx.glcanvas.WX_GL_DOUBLEBUFFER, wx.glcanvas.WX_GL_RGBA)
- wx.glcanvas.GLCanvas.__init__(self, parent, wx.ID_ANY, attribList=attribList); # Specifically use the CTOR which does NOT create an implicit GL context
- self._gl_ctx = wx.glcanvas.GLContext(self) # Create the explicit GL context
- self.use_persistence=False
- self.persist_alpha=2.0/15
- self.clear_accum=True
- self._gl_init_flag = False
- self._resized_flag = True
- self._init_fcns = list()
- self._draw_fcns = list()
- self._gl_caches = list()
- self.Bind(wx.EVT_PAINT, self._on_paint)
- self.Bind(wx.EVT_SIZE, self._on_size)
- self.Bind(wx.EVT_ERASE_BACKGROUND, lambda e: None)
-
- def set_use_persistence(self,enable):
- self.use_persistence=enable
- self.clear_accum=True
-
- def set_persist_alpha(self,analog_alpha):
- self.persist_alpha=analog_alpha
-
- def new_gl_cache(self, draw_fcn, draw_pri=50):
- """
- Create a new gl cache.
- Register its draw and init function.
-
- Returns:
- the new cache object
- """
- cache = gl_cache(draw_fcn)
- self.register_init(cache.init)
- self.register_draw(cache.draw, draw_pri)
- self._gl_caches.append(cache)
- return cache
-
- def register_init(self, init_fcn):
- self._init_fcns.append(init_fcn)
-
- def register_draw(self, draw_fcn, draw_pri=50):
- """
- Register a draw function with a layer priority.
- Large pri values are drawn last.
- Small pri values are drawn first.
- """
- for i in range(len(self._draw_fcns)):
- if draw_pri < self._draw_fcns[i][0]:
- self._draw_fcns.insert(i, (draw_pri, draw_fcn))
- return
- self._draw_fcns.append((draw_pri, draw_fcn))
-
- def _on_size(self, event):
- """
- Flag the resize event.
- The paint event will handle the actual resizing.
- """
- self.lock()
- self._resized_flag = True
- self.clear_accum=True
- self.unlock()
-
- def _on_paint(self, event):
- """
- Respond to paint events.
- Initialize GL if this is the first paint event.
- Resize the view port if the width or height changed.
- Redraw the screen, calling the draw functions.
- """
- if not self.IsShownOnScreen(): # Cannot realise a GL context on OS X if window is not yet shown
- return
- # create device context (needed on Windows, noop on X)
- dc = None
- if event.GetEventObject(): # Only create DC if paint triggered by WM message (for OS X)
- dc = wx.PaintDC(self)
- self.lock()
- self.SetCurrent(self._gl_ctx) # Real the explicit GL context
-
- # check if gl was initialized
- if not self._gl_init_flag:
- GL.glClearColor(*BACKGROUND_COLOR_SPEC)
- for fcn in self._init_fcns: fcn()
- self._gl_init_flag = True
-
- # check for a change in window size
- if self._resized_flag:
- self.width, self.height = self.GetSize()
- GL.glMatrixMode(GL.GL_PROJECTION)
- GL.glLoadIdentity()
- GL.glOrtho(0, self.width, self.height, 0, 1, 0)
- GL.glMatrixMode(GL.GL_MODELVIEW)
- GL.glLoadIdentity()
- GL.glViewport(0, 0, self.width, self.height)
- for cache in self._gl_caches: cache.changed(True)
- self._resized_flag = False
-
- # clear buffer if needed
- if self.clear_accum or not self.use_persistence:
- GL.glClear(GL.GL_COLOR_BUFFER_BIT)
- self.clear_accum=False
-
- # apply fading
- if self.use_persistence:
- GL.glEnable(GL.GL_BLEND)
- GL.glBlendFunc(GL.GL_SRC_ALPHA, GL.GL_ONE_MINUS_SRC_ALPHA)
-
- GL.glBegin(GL.GL_QUADS)
- GL.glColor4f(1,1,1,self.persist_alpha)
- GL.glVertex2f(0, self.height)
- GL.glVertex2f(self.width, self.height)
- GL.glVertex2f(self.width, 0)
- GL.glVertex2f(0, 0)
- GL.glEnd()
-
- GL.glDisable(GL.GL_BLEND)
-
- # draw functions
- for fcn in self._draw_fcns: fcn[1]()
-
- # show result
- self.SwapBuffers()
- self.unlock()
-
- def update(self):
- """
- Force a paint event.
- """
- if not self._gl_init_flag: return
- wx.PostEvent(self, wx.PaintEvent())
diff --git a/gr-wxgui/python/wxgui/plotter/waterfall_plotter.py b/gr-wxgui/python/wxgui/plotter/waterfall_plotter.py
deleted file mode 100644
index a5601e25bc..0000000000
--- a/gr-wxgui/python/wxgui/plotter/waterfall_plotter.py
+++ /dev/null
@@ -1,294 +0,0 @@
-#
-# Copyright 2008, 2009, 2010 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-#
-
-import wx
-from grid_plotter_base import grid_plotter_base
-from OpenGL import GL
-import common
-import numpy
-import gltext
-import math
-import struct
-
-LEGEND_LEFT_PAD = 7
-LEGEND_NUM_BLOCKS = 256
-LEGEND_NUM_LABELS = 9
-LEGEND_WIDTH = 8
-LEGEND_FONT_SIZE = 8
-LEGEND_BORDER_COLOR_SPEC = (0, 0, 0) #black
-MIN_PADDING = 0, 60, 0, 0 #top, right, bottom, left
-
-ceil_log2 = lambda x: 2**int(math.ceil(math.log(x)/math.log(2)))
-
-pack_color = lambda x: struct.unpack('I', struct.pack('BBBB', *x))[0]
-unpack_color = lambda x: struct.unpack('BBBB', struct.pack('I', int(x)))
-
-def _get_rbga(red_pts, green_pts, blue_pts, alpha_pts=[(0, 0), (1, 0)]):
- """
- Get an array of 256 rgba values where each index maps to a color.
- The scaling for red, green, blue, alpha are specified in piece-wise functions.
- The piece-wise functions consist of a set of x, y coordinates.
- The x and y values of the coordinates range from 0 to 1.
- The coordinates must be specified so that x increases with the index value.
- Resulting values are calculated along the line formed between 2 coordinates.
-
- Args:
- red_pts, green_pts, blue_pts, alpha_pts: an array of x,y coordinates for each color element
-
- Returns:
- array of rbga values (4 bytes) each
- """
- def _fcn(x, pw):
- for (x1, y1), (x2, y2) in zip(pw, pw[1:]):
- #linear interpolation
- if x <= x2: return float(y1 - y2)/(x1 - x2)*(x - x1) + y1
- raise Exception
- return numpy.array([pack_color(map(
- lambda pw: int(255*_fcn(i/255.0, pw)),
- (red_pts, green_pts, blue_pts, alpha_pts),
- )) for i in range(0, 256)], numpy.uint32)
-
-COLORS = {
- 'rgb1': _get_rbga( #http://www.ks.uiuc.edu/Research/vmd/vmd-1.7.1/ug/img47.gif
- red_pts = [(0, 0), (.5, 0), (1, 1)],
- green_pts = [(0, 0), (.5, 1), (1, 0)],
- blue_pts = [(0, 1), (.5, 0), (1, 0)],
- ),
- 'rgb2': _get_rbga( #http://xtide.ldeo.columbia.edu/~krahmann/coledit/screen.jpg
- red_pts = [(0, 0), (3.0/8, 0), (5.0/8, 1), (7.0/8, 1), (1, .5)],
- green_pts = [(0, 0), (1.0/8, 0), (3.0/8, 1), (5.0/8, 1), (7.0/8, 0), (1, 0)],
- blue_pts = [(0, .5), (1.0/8, 1), (3.0/8, 1), (5.0/8, 0), (1, 0)],
- ),
- 'rgb3': _get_rbga(
- red_pts = [(0, 0), (1.0/3.0, 0), (2.0/3.0, 0), (1, 1)],
- green_pts = [(0, 0), (1.0/3.0, 0), (2.0/3.0, 1), (1, 0)],
- blue_pts = [(0, 0), (1.0/3.0, 1), (2.0/3.0, 0), (1, 0)],
- ),
- 'gray': _get_rbga(
- red_pts = [(0, 0), (1, 1)],
- green_pts = [(0, 0), (1, 1)],
- blue_pts = [(0, 0), (1, 1)],
- ),
-}
-
-##################################################
-# Waterfall Plotter
-##################################################
-class waterfall_plotter(grid_plotter_base):
- def __init__(self, parent):
- """
- Create a new channel plotter.
- """
- #init
- grid_plotter_base.__init__(self, parent, MIN_PADDING)
- #setup legend cache
- self._legend_cache = self.new_gl_cache(self._draw_legend)
- #setup waterfall cache
- self._waterfall_cache = self.new_gl_cache(self._draw_waterfall, 50)
- #setup waterfall plotter
- self.register_init(self._init_waterfall)
- self._resize_texture(False)
- self._minimum = 0
- self._maximum = 0
- self._fft_size = 1
- self._buffer = list()
- self._pointer = 0
- self._counter = 0
- self.set_num_lines(0)
- self.set_color_mode(COLORS.keys()[0])
- self.callback = None
-
- def _init_waterfall(self):
- """
- Run gl initialization tasks.
- """
- self._waterfall_texture = GL.glGenTextures(1)
-
- def _draw_waterfall(self):
- """
- Draw the waterfall from the texture.
- The texture is circularly filled and will wrap around.
- Use matrix modeling to shift and scale the texture onto the coordinate plane.
- """
- #resize texture
- self._resize_texture()
- #setup texture
- GL.glBindTexture(GL.GL_TEXTURE_2D, self._waterfall_texture)
- GL.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MAG_FILTER, GL.GL_LINEAR)
- GL.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MIN_FILTER, GL.GL_LINEAR)
- GL.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_WRAP_T, GL.GL_REPEAT)
- GL.glTexEnvi(GL.GL_TEXTURE_ENV, GL.GL_TEXTURE_ENV_MODE, GL.GL_REPLACE)
- #write the buffer to the texture
- while self._buffer:
- GL.glTexSubImage2D(GL.GL_TEXTURE_2D, 0, 0, self._pointer, self._fft_size, 1, GL.GL_RGBA, GL.GL_UNSIGNED_BYTE, self._buffer.pop(0))
- self._pointer = (self._pointer + 1)%self._num_lines
- #begin drawing
- GL.glEnable(GL.GL_TEXTURE_2D)
- GL.glPushMatrix()
- #matrix scaling
- GL.glTranslatef(self.padding_left, self.padding_top, 0)
- GL.glScalef(
- float(self.width-self.padding_left-self.padding_right),
- float(self.height-self.padding_top-self.padding_bottom),
- 1.0,
- )
- #draw texture with wrapping
- GL.glBegin(GL.GL_QUADS)
- prop_y = float(self._pointer)/(self._num_lines-1)
- prop_x = float(self._fft_size)/ceil_log2(self._fft_size)
- off = 1.0/(self._num_lines-1)
- GL.glTexCoord2f(0, prop_y+1-off)
- GL.glVertex2f(0, 1)
- GL.glTexCoord2f(prop_x, prop_y+1-off)
- GL.glVertex2f(1, 1)
- GL.glTexCoord2f(prop_x, prop_y)
- GL.glVertex2f(1, 0)
- GL.glTexCoord2f(0, prop_y)
- GL.glVertex2f(0, 0)
- GL.glEnd()
- GL.glPopMatrix()
- GL.glDisable(GL.GL_TEXTURE_2D)
-
- def _populate_point_label(self, x_val, y_val):
- """
- Get the text the will populate the point label.
- Give the X value for the current point.
-
- Args:
- x_val: the current x value
- y_val: the current y value
-
- Returns:
- a value string with units
- """
- return '%s: %s'%(self.x_label, common.eng_format(x_val, self.x_units))
-
- def _call_callback(self, x_val, y_val):
- if self.callback != None:
- self.callback(x_val,y_val)
-
- def set_callback(self,callback):
- self.callback = callback
-
- def _draw_legend(self):
- """
- Draw the color scale legend.
- """
- if not self._color_mode: return
- legend_height = self.height-self.padding_top-self.padding_bottom
- #draw each legend block
- block_height = float(legend_height)/LEGEND_NUM_BLOCKS
- x = self.width - self.padding_right + LEGEND_LEFT_PAD
- for i in range(LEGEND_NUM_BLOCKS):
- color = unpack_color(COLORS[self._color_mode][int(255*i/float(LEGEND_NUM_BLOCKS-1))])
- GL.glColor4f(*numpy.array(color)/255.0)
- y = self.height - (i+1)*block_height - self.padding_bottom
- self._draw_rect(x, y, LEGEND_WIDTH, block_height)
- #draw rectangle around color scale border
- GL.glColor3f(*LEGEND_BORDER_COLOR_SPEC)
- self._draw_rect(x, self.padding_top, LEGEND_WIDTH, legend_height, fill=False)
- #draw each legend label
- label_spacing = float(legend_height)/(LEGEND_NUM_LABELS-1)
- x = self.width - (self.padding_right - LEGEND_LEFT_PAD - LEGEND_WIDTH)/2
- for i in range(LEGEND_NUM_LABELS):
- proportion = i/float(LEGEND_NUM_LABELS-1)
- dB = proportion*(self._maximum - self._minimum) + self._minimum
- y = self.height - i*label_spacing - self.padding_bottom
- txt = gltext.Text('%ddB'%int(dB), font_size=LEGEND_FONT_SIZE, centered=True)
- txt.draw_text(wx.Point(x, y))
-
- def _resize_texture(self, flag=None):
- """
- Create the texture to fit the fft_size X num_lines.
-
- Args:
- flag: the set/unset or update flag
- """
- if flag is not None:
- self._resize_texture_flag = flag
- return
- if not self._resize_texture_flag: return
- self._buffer = list()
- self._pointer = 0
- if self._num_lines and self._fft_size:
- GL.glBindTexture(GL.GL_TEXTURE_2D, self._waterfall_texture)
- data = numpy.zeros(self._num_lines*ceil_log2(self._fft_size)*4, numpy.uint8).tostring()
- GL.glTexImage2D(GL.GL_TEXTURE_2D, 0, GL.GL_RGBA, ceil_log2(self._fft_size), self._num_lines, 0, GL.GL_RGBA, GL.GL_UNSIGNED_BYTE, data)
- self._resize_texture_flag = False
-
- def set_color_mode(self, color_mode):
- """
- Set the color mode.
- New samples will be converted to the new color mode.
- Old samples will not be recolorized.
-
- Args:
- color_mode: the new color mode string
- """
- self.lock()
- if color_mode in COLORS.keys():
- self._color_mode = color_mode
- self._legend_cache.changed(True)
- self.update()
- self.unlock()
-
- def set_num_lines(self, num_lines):
- """
- Set number of lines.
- Powers of two only.
-
- Args:
- num_lines: the new number of lines
- """
- self.lock()
- self._num_lines = num_lines
- self._resize_texture(True)
- self.update()
- self.unlock()
-
- def set_samples(self, samples, minimum, maximum):
- """
- Set the samples to the waterfall.
- Convert the samples to color data.
-
- Args:
- samples: the array of floats
- minimum: the minimum value to scale
- maximum: the maximum value to scale
- """
- self.lock()
- #set the min, max values
- if self._minimum != minimum or self._maximum != maximum:
- self._minimum = minimum
- self._maximum = maximum
- self._legend_cache.changed(True)
- if self._fft_size != len(samples):
- self._fft_size = len(samples)
- self._resize_texture(True)
- #normalize the samples to min/max
- samples = (samples - minimum)*float(255/(maximum-minimum))
- samples = numpy.clip(samples, 0, 255) #clip
- samples = numpy.array(samples, numpy.uint8)
- #convert the samples to RGBA data
- data = COLORS[self._color_mode][samples].tostring()
- self._buffer.append(data)
- self._waterfall_cache.changed(True)
- self.unlock()
diff --git a/gr-wxgui/python/wxgui/powermate.py b/gr-wxgui/python/wxgui/powermate.py
deleted file mode 100644
index 7c324c5d95..0000000000
--- a/gr-wxgui/python/wxgui/powermate.py
+++ /dev/null
@@ -1,448 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2005 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-#
-
-"""
-Handler for Griffin PowerMate, Contour ShuttlePro & ShuttleXpress USB knobs
-
-This is Linux and wxPython specific.
-"""
-
-import os
-import sys
-import struct
-import exceptions
-import threading
-import wx
-from gnuradio import gru
-
-imported_ok = True
-
-try:
- import select
- import fcntl
-except ImportError:
- imported_ok = False
-
-
-# First a little bit of background:
-#
-# The Griffin PowerMate has
-# * a single knob which rotates
-# * a single button (pressing the knob)
-#
-# The Contour ShuttleXpress (aka SpaceShuttle) has
-# * "Jog Wheel" -- the knob (rotary encoder) on the inside
-# * "Shuttle Ring" -- the spring loaded rubber covered ring
-# * 5 buttons
-#
-# The Contour ShuttlePro has
-# * "Jog Wheel" -- the knob (rotary encoder) on the inside
-# * "Shuttle Ring" -- the spring loaded rubber covered ring
-# * 13 buttons
-#
-# The Contour ShuttlePro V2 has
-# *"Jog Wheel" -- the knob (rotary encoder) on the inside
-# * "Shuttle Ring" -- the spring loaded rubber covered ring
-# * 15 buttons
-
-# We remap all the buttons on the devices so that they start at zero.
-
-# For the ShuttleXpress the buttons are 0 to 4 (left to right)
-
-# For the ShuttlePro, we number the buttons immediately above
-# the ring 0 to 4 (left to right) so that they match our numbering
-# on the ShuttleXpress. The top row is 5, 6, 7, 8. The first row below
-# the ring is 9, 10, and the bottom row is 11, 12.
-
-# For the ShuttlePro V2, buttons 13 & 14 are to the
-# left and right of the wheel respectively.
-
-# We generate 3 kinds of events:
-#
-# button press/release (button_number, press/release)
-# knob rotation (relative_clicks) # typically -1, +1
-# shuttle position (absolute_position) # -7,-6,...,0,...,6,7
-
-# ----------------------------------------------------------------
-# Our ID's for the devices:
-# Not to be confused with anything related to magic hardware numbers.
-
-ID_POWERMATE = 'powermate'
-ID_SHUTTLE_XPRESS = 'shuttle xpress'
-ID_SHUTTLE_PRO = 'shuttle pro'
-ID_SHUTTLE_PRO_V2 = 'shuttle pro v2'
-
-# ------------------------------------------------------------------------
-# format of messages that we read from /dev/input/event*
-# See /usr/include/linux/input.h for more info
-#
-#struct input_event {
-# struct timeval time; = {long seconds, long microseconds}
-# unsigned short type;
-# unsigned short code;
-# unsigned int value;
-#};
-
-input_event_struct = "@llHHi"
-input_event_size = struct.calcsize(input_event_struct)
-
-# ------------------------------------------------------------------------
-# input_event types
-# ------------------------------------------------------------------------
-
-IET_SYN = 0x00 # aka RESET
-IET_KEY = 0x01 # key or button press/release
-IET_REL = 0x02 # relative movement (knob rotation)
-IET_ABS = 0x03 # absolute position (graphics pad, etc)
-IET_MSC = 0x04
-IET_LED = 0x11
-IET_SND = 0x12
-IET_REP = 0x14
-IET_FF = 0x15
-IET_PWR = 0x16
-IET_FF_STATUS = 0x17
-IET_MAX = 0x1f
-
-# ------------------------------------------------------------------------
-# input_event codes (there are a zillion of them, we only define a few)
-# ------------------------------------------------------------------------
-
-# these are valid for IET_KEY
-
-IEC_BTN_0 = 0x100
-IEC_BTN_1 = 0x101
-IEC_BTN_2 = 0x102
-IEC_BTN_3 = 0x103
-IEC_BTN_4 = 0x104
-IEC_BTN_5 = 0x105
-IEC_BTN_6 = 0x106
-IEC_BTN_7 = 0x107
-IEC_BTN_8 = 0x108
-IEC_BTN_9 = 0x109
-IEC_BTN_10 = 0x10a
-IEC_BTN_11 = 0x10b
-IEC_BTN_12 = 0x10c
-IEC_BTN_13 = 0x10d
-IEC_BTN_14 = 0x10e
-IEC_BTN_15 = 0x10f
-
-# these are valid for IET_REL (Relative axes)
-
-IEC_REL_X = 0x00
-IEC_REL_Y = 0x01
-IEC_REL_Z = 0x02
-IEC_REL_HWHEEL = 0x06
-IEC_REL_DIAL = 0x07 # rotating the knob
-IEC_REL_WHEEL = 0x08 # moving the shuttle ring
-IEC_REL_MISC = 0x09
-IEC_REL_MAX = 0x0f
-
-# ------------------------------------------------------------------------
-
-class powermate(threading.Thread):
- """
- Interface to Griffin PowerMate and Contour Shuttles
- """
- def __init__(self, event_receiver=None, filename=None, **kwargs):
- self.event_receiver = event_receiver
- self.handle = -1
- if not imported_ok:
- raise exceptions.RuntimeError, 'powermate not supported on this platform'
-
- if filename:
- if not self._open_device(filename):
- raise exceptions.RuntimeError, 'Unable to find powermate'
- else:
- ok = False
- for d in range(0, 16):
- if self._open_device("/dev/input/event%d" % d):
- ok = True
- break
- if not ok:
- raise exceptions.RuntimeError, 'Unable to find powermate'
-
- threading.Thread.__init__(self, **kwargs)
- self.setDaemon (1)
- self.keep_running = True
- self.start ()
-
- def __del__(self):
- self.keep_running = False
- if self.handle >= 0:
- os.close(self.handle)
- self.handle = -1
-
- def _open_device(self, filename):
- try:
- self.handle = os.open(filename, os.O_RDWR)
- if self.handle < 0:
- return False
-
- # read event device name
- name = fcntl.ioctl(self.handle, gru.hexint(0x80ff4506), chr(0) * 256)
- name = name.replace(chr(0), '')
-
- # do we see anything we recognize?
- if name == 'Griffin PowerMate' or name == 'Griffin SoundKnob':
- self.id = ID_POWERMATE
- self.mapper = _powermate_remapper()
- elif name == 'CAVS SpaceShuttle A/V' or name == 'Contour Design ShuttleXpress':
- self.id = ID_SHUTTLE_XPRESS
- self.mapper = _contour_remapper()
- elif name == 'Contour Design ShuttlePRO':
- self.id = ID_SHUTTLE_PRO
- self.mapper = _contour_remapper()
- elif name == 'Contour Design ShuttlePRO v2':
- self.id = ID_SHUTTLE_PRO_V2
- self.mapper = _contour_remapper()
- else:
- os.close(self.handle)
- self.handle = -1
- return False
-
- # get exclusive control of the device, using ioctl EVIOCGRAB
- # there may be an issue with this on non x86 platforms and if
- # the _IOW,_IOC,... macros in <asm/ioctl.h> are changed
- fcntl.ioctl(self.handle,gru.hexint(0x40044590), 1)
- return True
- except exceptions.OSError:
- return False
-
-
- def set_event_receiver(self, obj):
- self.event_receiver = obj
-
-
- def set_led_state(self, static_brightness, pulse_speed=0,
- pulse_table=0, pulse_on_sleep=0, pulse_on_wake=0):
- """
- What do these magic values mean...
- """
- if self.id != ID_POWERMATE:
- return False
-
- static_brightness &= 0xff;
- if pulse_speed < 0:
- pulse_speed = 0
- if pulse_speed > 510:
- pulse_speed = 510
- if pulse_table < 0:
- pulse_table = 0
- if pulse_table > 2:
- pulse_table = 2
- pulse_on_sleep = not not pulse_on_sleep # not not = convert to 0/1
- pulse_on_wake = not not pulse_on_wake
- magic = (static_brightness
- | (pulse_speed << 8)
- | (pulse_table << 17)
- | (pulse_on_sleep << 19)
- | (pulse_on_wake << 20))
- data = struct.pack(input_event_struct, 0, 0, 0x04, 0x01, magic)
- os.write(self.handle, data)
- return True
-
- def run (self):
- while (self.keep_running):
- s = os.read (self.handle, input_event_size)
- if not s:
- self.keep_running = False
- break
-
- raw_input_event = struct.unpack(input_event_struct,s)
- sec, usec, type, code, val = self.mapper(raw_input_event)
-
- if self.event_receiver is None:
- continue
-
- if type == IET_SYN: # ignore
- pass
- elif type == IET_MSC: # ignore (seems to be PowerMate reporting led brightness)
- pass
- elif type == IET_REL and code == IEC_REL_DIAL:
- #print "Dial: %d" % (val,)
- wx.PostEvent(self.event_receiver, PMRotateEvent(val))
- elif type == IET_REL and code == IEC_REL_WHEEL:
- #print "Shuttle: %d" % (val,)
- wx.PostEvent(self.event_receiver, PMShuttleEvent(val))
- elif type == IET_KEY:
- #print "Key: Btn%d %d" % (code - IEC_BTN_0, val)
- wx.PostEvent(self.event_receiver,
- PMButtonEvent(code - IEC_BTN_0, val))
- else:
- print "powermate: unrecognized event: type = 0x%x code = 0x%x val = %d" % (type, code, val)
-
-
-class _powermate_remapper(object):
- def __init__(self):
- pass
- def __call__(self, event):
- """
- Notice how nice and simple this is...
- """
- return event
-
-class _contour_remapper(object):
- def __init__(self):
- self.prev = None
- def __call__(self, event):
- """
- ...and how screwed up this is
- """
- sec, usec, type, code, val = event
- if type == IET_REL and code == IEC_REL_WHEEL:
- # === Shuttle ring ===
- # First off, this really ought to be IET_ABS, not IET_REL!
- # They never generate a zero value so you can't
- # tell when the shuttle ring is back in the center.
- # We kludge around this by calling both -1 and 1 zero.
- if val == -1 or val == 1:
- return (sec, usec, type, code, 0)
- return event
-
- if type == IET_REL and code == IEC_REL_DIAL:
- # === Jog knob (rotary encoder) ===
- # Dim wits got it wrong again! This one should return a
- # a relative value, e.g., -1, +1. Instead they return
- # a total that runs modulo 256 (almost!). For some
- # reason they count like this 253, 254, 255, 1, 2, 3
-
- if self.prev is None: # first time call
- self.prev = val
- return (sec, usec, IET_SYN, 0, 0) # will be ignored above
-
- diff = val - self.prev
- if diff == 0: # sometimes it just sends stuff...
- return (sec, usec, IET_SYN, 0, 0) # will be ignored above
-
- if abs(diff) > 100: # crossed into the twilight zone
- if self.prev > val: # we've wrapped going forward
- self.prev = val
- return (sec, usec, type, code, +1)
- else: # we've wrapped going backward
- self.prev = val
- return (sec, usec, type, code, -1)
-
- self.prev = val
- return (sec, usec, type, code, diff)
-
- if type == IET_KEY:
- # remap keys so that all 3 gadgets have buttons 0 to 4 in common
- return (sec, usec, type,
- (IEC_BTN_5, IEC_BTN_6, IEC_BTN_7, IEC_BTN_8,
- IEC_BTN_0, IEC_BTN_1, IEC_BTN_2, IEC_BTN_3, IEC_BTN_4,
- IEC_BTN_9, IEC_BTN_10,
- IEC_BTN_11, IEC_BTN_12,
- IEC_BTN_13, IEC_BTN_14)[code - IEC_BTN_0], val)
-
- return event
-
-# ------------------------------------------------------------------------
-# new wxPython event classes
-# ------------------------------------------------------------------------
-
-grEVT_POWERMATE_BUTTON = wx.NewEventType()
-grEVT_POWERMATE_ROTATE = wx.NewEventType()
-grEVT_POWERMATE_SHUTTLE = wx.NewEventType()
-
-EVT_POWERMATE_BUTTON = wx.PyEventBinder(grEVT_POWERMATE_BUTTON, 0)
-EVT_POWERMATE_ROTATE = wx.PyEventBinder(grEVT_POWERMATE_ROTATE, 0)
-EVT_POWERMATE_SHUTTLE = wx.PyEventBinder(grEVT_POWERMATE_SHUTTLE, 0)
-
-class PMButtonEvent(wx.PyEvent):
- def __init__(self, button, value):
- wx.PyEvent.__init__(self)
- self.SetEventType(grEVT_POWERMATE_BUTTON)
- self.button = button
- self.value = value
-
- def Clone (self):
- self.__class__(self.GetId())
-
-
-class PMRotateEvent(wx.PyEvent):
- def __init__(self, delta):
- wx.PyEvent.__init__(self)
- self.SetEventType (grEVT_POWERMATE_ROTATE)
- self.delta = delta
-
- def Clone (self):
- self.__class__(self.GetId())
-
-
-class PMShuttleEvent(wx.PyEvent):
- def __init__(self, position):
- wx.PyEvent.__init__(self)
- self.SetEventType (grEVT_POWERMATE_SHUTTLE)
- self.position = position
-
- def Clone (self):
- self.__class__(self.GetId())
-
-# ------------------------------------------------------------------------
-# Example usage
-# ------------------------------------------------------------------------
-
-if __name__ == '__main__':
- class Frame(wx.Frame):
- def __init__(self,parent=None,id=-1,title='Title',
- pos=wx.DefaultPosition, size=(400,200)):
- wx.Frame.__init__(self,parent,id,title,pos,size)
- EVT_POWERMATE_BUTTON(self, self.on_button)
- EVT_POWERMATE_ROTATE(self, self.on_rotate)
- EVT_POWERMATE_SHUTTLE(self, self.on_shuttle)
- self.brightness = 128
- self.pulse_speed = 0
-
- try:
- self.pm = powermate(self)
- except:
- sys.stderr.write("Unable to find PowerMate or Contour Shuttle\n")
- sys.exit(1)
-
- self.pm.set_led_state(self.brightness, self.pulse_speed)
-
-
- def on_button(self, evt):
- print "Button %d %s" % (evt.button,
- ("Released", "Pressed")[evt.value])
-
- def on_rotate(self, evt):
- print "Rotated %d" % (evt.delta,)
- if 0:
- new = max(0, min(255, self.brightness + evt.delta))
- if new != self.brightness:
- self.brightness = new
- self.pm.set_led_state(self.brightness, self.pulse_speed)
-
- def on_shuttle(self, evt):
- print "Shuttle %d" % (evt.position,)
-
- class App(wx.App):
- def OnInit(self):
- title='PowerMate Demo'
- self.frame = Frame(parent=None,id=-1,title=title)
- self.frame.Show()
- self.SetTopWindow(self.frame)
- return True
-
- app = App()
- app.MainLoop ()
diff --git a/gr-wxgui/python/wxgui/pubsub.py b/gr-wxgui/python/wxgui/pubsub.py
deleted file mode 100644
index e55d691978..0000000000
--- a/gr-wxgui/python/wxgui/pubsub.py
+++ /dev/null
@@ -1,153 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2008 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-#
-
-"""
-Abstract GNU Radio publisher/subscriber interface
-
-This is a proof of concept implementation, will likely change significantly.
-"""
-
-class pubsub(dict):
- def __init__(self):
- self._publishers = { }
- self._subscribers = { }
- self._proxies = { }
-
- def __missing__(self, key, value=None):
- dict.__setitem__(self, key, value)
- self._publishers[key] = None
- self._subscribers[key] = []
- self._proxies[key] = None
-
- def __setitem__(self, key, val):
- if not self.has_key(key):
- self.__missing__(key, val)
- elif self._proxies[key] is not None:
- (p, pkey) = self._proxies[key]
- p[pkey] = val
- else:
- dict.__setitem__(self, key, val)
- for sub in self._subscribers[key]:
- # Note this means subscribers will get called in the thread
- # context of the 'set' caller.
- sub(val)
-
- def __getitem__(self, key):
- if not self.has_key(key): self.__missing__(key)
- if self._proxies[key] is not None:
- (p, pkey) = self._proxies[key]
- return p[pkey]
- elif self._publishers[key] is not None:
- return self._publishers[key]()
- else:
- return dict.__getitem__(self, key)
-
- def publish(self, key, publisher):
- if not self.has_key(key): self.__missing__(key)
- if self._proxies[key] is not None:
- (p, pkey) = self._proxies[key]
- p.publish(pkey, publisher)
- else:
- self._publishers[key] = publisher
-
- def subscribe(self, key, subscriber):
- if not self.has_key(key): self.__missing__(key)
- if self._proxies[key] is not None:
- (p, pkey) = self._proxies[key]
- p.subscribe(pkey, subscriber)
- else:
- self._subscribers[key].append(subscriber)
-
- def unpublish(self, key):
- if self._proxies[key] is not None:
- (p, pkey) = self._proxies[key]
- p.unpublish(pkey)
- else:
- self._publishers[key] = None
-
- def unsubscribe(self, key, subscriber):
- if self._proxies[key] is not None:
- (p, pkey) = self._proxies[key]
- p.unsubscribe(pkey, subscriber)
- else:
- self._subscribers[key].remove(subscriber)
-
- def proxy(self, key, p, pkey=None):
- if not self.has_key(key): self.__missing__(key)
- if pkey is None: pkey = key
- self._proxies[key] = (p, pkey)
-
- def unproxy(self, key):
- self._proxies[key] = None
-
-# Test code
-if __name__ == "__main__":
- import sys
- o = pubsub()
-
- # Non-existent key gets auto-created with None value
- print "Auto-created key 'foo' value:", o['foo']
-
- # Add some subscribers
- # First is a bare function
- def print_len(x):
- print "len=%i" % (len(x), )
- o.subscribe('foo', print_len)
-
- # The second is a class member function
- class subber(object):
- def __init__(self, param):
- self._param = param
- def printer(self, x):
- print self._param, `x`
- s = subber('param')
- o.subscribe('foo', s.printer)
-
- # The third is a lambda function
- o.subscribe('foo', lambda x: sys.stdout.write('val='+`x`+'\n'))
-
- # Update key 'foo', will notify subscribers
- print "Updating 'foo' with three subscribers:"
- o['foo'] = 'bar';
-
- # Remove first subscriber
- o.unsubscribe('foo', print_len)
-
- # Update now will only trigger second and third subscriber
- print "Updating 'foo' after removing a subscriber:"
- o['foo'] = 'bar2';
-
- # Publish a key as a function, in this case, a lambda function
- o.publish('baz', lambda : 42)
- print "Published value of 'baz':", o['baz']
-
- # Unpublish the key
- o.unpublish('baz')
-
- # This will return None, as there is no publisher
- print "Value of 'baz' with no publisher:", o['baz']
-
- # Set 'baz' key, it gets cached
- o['baz'] = 'bazzz'
-
- # Now will return cached value, since no provider
- print "Cached value of 'baz' after being set:", o['baz']
diff --git a/gr-wxgui/python/wxgui/scope_window.py b/gr-wxgui/python/wxgui/scope_window.py
deleted file mode 100644
index 71e2b8e285..0000000000
--- a/gr-wxgui/python/wxgui/scope_window.py
+++ /dev/null
@@ -1,691 +0,0 @@
-#
-# Copyright 2008,2010 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-#
-
-##################################################
-# Imports
-##################################################
-import plotter
-import common
-import wx
-import numpy
-import time
-import pubsub
-from constants import *
-from gnuradio import gr #for gr.prefs, trigger modes
-from gnuradio import wxgui
-import forms
-
-##################################################
-# Constants
-##################################################
-DEFAULT_FRAME_RATE = gr.prefs().get_long('wxgui', 'scope_rate', 30)
-PERSIST_ALPHA_MIN_EXP, PERSIST_ALPHA_MAX_EXP = -2, 0
-SLIDER_STEPS = 100
-DEFAULT_TRIG_MODE = gr.prefs().get_long('wxgui', 'trig_mode', wxgui.TRIG_MODE_AUTO)
-DEFAULT_WIN_SIZE = (600, 300)
-COUPLING_MODES = (
- ('DC', False),
- ('AC', True),
-)
-TRIGGER_MODES = (
- ('Freerun', wxgui.TRIG_MODE_FREE),
- ('Auto', wxgui.TRIG_MODE_AUTO),
- ('Normal', wxgui.TRIG_MODE_NORM),
- ('Stripchart', wxgui.TRIG_MODE_STRIPCHART),
-)
-TRIGGER_SLOPES = (
- ('Pos +', wxgui.TRIG_SLOPE_POS),
- ('Neg -', wxgui.TRIG_SLOPE_NEG),
-)
-CHANNEL_COLOR_SPECS = (
- (0.3, 0.3, 1.0),
- (0.0, 0.8, 0.0),
- (1.0, 0.0, 0.0),
- (0.8, 0.0, 0.8),
- (0.7, 0.7, 0.0),
- (0.15, 0.90, 0.98),
-
-)
-TRIGGER_COLOR_SPEC = (1.0, 0.4, 0.0)
-AUTORANGE_UPDATE_RATE = 0.5 #sec
-MARKER_TYPES = (
- ('Line Link', None),
- ('Dot Large', 3.0),
- ('Dot Med', 2.0),
- ('Dot Small', 1.0),
- ('None', 0.0),
-)
-DEFAULT_MARKER_TYPE = None
-
-##################################################
-# Scope window control panel
-##################################################
-class control_panel(wx.Panel):
- """
- A control panel with wx widgits to control the plotter and scope block.
- """
- def __init__(self, parent):
- """
- Create a new control panel.
-
- Args:
- parent: the wx parent window
- """
- WIDTH = 90
- self.parent = parent
- wx.Panel.__init__(self, parent, style=wx.SUNKEN_BORDER)
- parent[SHOW_CONTROL_PANEL_KEY] = True
- parent.subscribe(SHOW_CONTROL_PANEL_KEY, self.Show)
- control_box = wx.BoxSizer(wx.VERTICAL)
-
- ##################################################
- # Persistence
- ##################################################
-
- forms.check_box(
- sizer=control_box, parent=self, label='Persistence',
- ps=parent, key=USE_PERSISTENCE_KEY,
- )
- #static text and slider for analog alpha
- persist_alpha_text = forms.static_text(
- sizer=control_box, parent=self, label='Analog Alpha',
- converter=forms.float_converter(lambda x: '%.4f'%x),
- ps=parent, key=PERSIST_ALPHA_KEY, width=50,
- )
- persist_alpha_slider = forms.log_slider(
- sizer=control_box, parent=self,
- min_exp=PERSIST_ALPHA_MIN_EXP,
- max_exp=PERSIST_ALPHA_MAX_EXP,
- num_steps=SLIDER_STEPS,
- ps=parent, key=PERSIST_ALPHA_KEY,
- )
- for widget in (persist_alpha_text, persist_alpha_slider):
- parent.subscribe(USE_PERSISTENCE_KEY, widget.Enable)
- widget.Enable(parent[USE_PERSISTENCE_KEY])
- parent.subscribe(USE_PERSISTENCE_KEY, widget.ShowItems)
- #allways show initially, so room is reserved for them
- widget.ShowItems(True) # (parent[USE_PERSISTENCE_KEY])
-
- parent.subscribe(USE_PERSISTENCE_KEY, self._update_layout)
-
- ##################################################
- # Axes Options
- ##################################################
- control_box.AddStretchSpacer()
- axes_options_box = forms.static_box_sizer(
- parent=self, sizer=control_box, label='Axes Options',
- bold=True, orient=wx.VERTICAL,
- )
- ##################################################
- # Scope Mode Box
- ##################################################
- scope_mode_box = wx.BoxSizer(wx.VERTICAL)
- axes_options_box.Add(scope_mode_box, 0, wx.EXPAND)
- #x axis divs
- forms.incr_decr_buttons(
- parent=self, sizer=scope_mode_box, label='Secs/Div',
- on_incr=self._on_incr_t_divs, on_decr=self._on_decr_t_divs,
- )
- #y axis divs
- y_buttons_scope = forms.incr_decr_buttons(
- parent=self, sizer=scope_mode_box, label='Counts/Div',
- on_incr=self._on_incr_y_divs, on_decr=self._on_decr_y_divs,
- )
- #y axis ref lvl
- y_off_buttons_scope = forms.incr_decr_buttons(
- parent=self, sizer=scope_mode_box, label='Y Offset',
- on_incr=self._on_incr_y_off, on_decr=self._on_decr_y_off,
- )
- #t axis ref lvl
- scope_mode_box.AddSpacer(5)
- forms.slider(
- parent=self, sizer=scope_mode_box,
- ps=parent, key=T_FRAC_OFF_KEY, label='T Offset',
- minimum=0, maximum=1, num_steps=1000,
- )
- scope_mode_box.AddSpacer(5)
- ##################################################
- # XY Mode Box
- ##################################################
- xy_mode_box = wx.BoxSizer(wx.VERTICAL)
- axes_options_box.Add(xy_mode_box, 0, wx.EXPAND)
- #x div controls
- x_buttons = forms.incr_decr_buttons(
- parent=self, sizer=xy_mode_box, label='X/Div',
- on_incr=self._on_incr_x_divs, on_decr=self._on_decr_x_divs,
- )
- #y div controls
- y_buttons = forms.incr_decr_buttons(
- parent=self, sizer=xy_mode_box, label='Y/Div',
- on_incr=self._on_incr_y_divs, on_decr=self._on_decr_y_divs,
- )
- #x offset controls
- x_off_buttons = forms.incr_decr_buttons(
- parent=self, sizer=xy_mode_box, label='X Off',
- on_incr=self._on_incr_x_off, on_decr=self._on_decr_x_off,
- )
- #y offset controls
- y_off_buttons = forms.incr_decr_buttons(
- parent=self, sizer=xy_mode_box, label='Y Off',
- on_incr=self._on_incr_y_off, on_decr=self._on_decr_y_off,
- )
- for widget in (y_buttons_scope, y_off_buttons_scope, x_buttons, y_buttons, x_off_buttons, y_off_buttons):
- parent.subscribe(AUTORANGE_KEY, widget.Disable)
- widget.Disable(parent[AUTORANGE_KEY])
- xy_mode_box.ShowItems(False)
- #autorange check box
- forms.check_box(
- parent=self, sizer=axes_options_box, label='Autorange',
- ps=parent, key=AUTORANGE_KEY,
- )
- ##################################################
- # Channel Options
- ##################################################
- TRIGGER_PAGE_INDEX = parent.num_inputs
- XY_PAGE_INDEX = parent.num_inputs+1
- control_box.AddStretchSpacer()
- chan_options_box = forms.static_box_sizer(
- parent=self, sizer=control_box, label='Channel Options',
- bold=True, orient=wx.VERTICAL,
- )
- options_notebook = wx.Notebook(self)
- options_notebook_args = list()
- CHANNELS = [('Ch %d'%(i+1), i) for i in range(parent.num_inputs)]
- ##################################################
- # Channel Menu Boxes
- ##################################################
- for i in range(parent.num_inputs):
- channel_menu_panel = wx.Panel(options_notebook)
- options_notebook_args.append((channel_menu_panel, i, 'Ch%d'%(i+1)))
- channel_menu_box = wx.BoxSizer(wx.VERTICAL)
- channel_menu_panel.SetSizer(channel_menu_box)
- #ac couple check box
- channel_menu_box.AddStretchSpacer()
- forms.drop_down(
- parent=channel_menu_panel, sizer=channel_menu_box,
- ps=parent, key=common.index_key(AC_COUPLE_KEY, i),
- choices=map(lambda x: x[1], COUPLING_MODES),
- labels=map(lambda x: x[0], COUPLING_MODES),
- label='Coupling', width=WIDTH,
- )
- #marker
- channel_menu_box.AddStretchSpacer()
- forms.drop_down(
- parent=channel_menu_panel, sizer=channel_menu_box,
- ps=parent, key=common.index_key(MARKER_KEY, i),
- choices=map(lambda x: x[1], MARKER_TYPES),
- labels=map(lambda x: x[0], MARKER_TYPES),
- label='Marker', width=WIDTH,
- )
- channel_menu_box.AddStretchSpacer()
- ##################################################
- # Trigger Menu Box
- ##################################################
- trigger_menu_panel = wx.Panel(options_notebook)
- options_notebook_args.append((trigger_menu_panel, TRIGGER_PAGE_INDEX, 'Trig'))
- trigger_menu_box = wx.BoxSizer(wx.VERTICAL)
- trigger_menu_panel.SetSizer(trigger_menu_box)
- #trigger mode
- forms.drop_down(
- parent=trigger_menu_panel, sizer=trigger_menu_box,
- ps=parent, key=TRIGGER_MODE_KEY,
- choices=map(lambda x: x[1], TRIGGER_MODES),
- labels=map(lambda x: x[0], TRIGGER_MODES),
- label='Mode', width=WIDTH,
- )
- #trigger slope
- trigger_slope_chooser = forms.drop_down(
- parent=trigger_menu_panel, sizer=trigger_menu_box,
- ps=parent, key=TRIGGER_SLOPE_KEY,
- choices=map(lambda x: x[1], TRIGGER_SLOPES),
- labels=map(lambda x: x[0], TRIGGER_SLOPES),
- label='Slope', width=WIDTH,
- )
- #trigger channel
- trigger_channel_chooser = forms.drop_down(
- parent=trigger_menu_panel, sizer=trigger_menu_box,
- ps=parent, key=TRIGGER_CHANNEL_KEY,
- choices=map(lambda x: x[1], CHANNELS),
- labels=map(lambda x: x[0], CHANNELS),
- label='Channel', width=WIDTH,
- )
- #trigger level
- hbox = wx.BoxSizer(wx.HORIZONTAL)
- trigger_menu_box.Add(hbox, 0, wx.EXPAND)
- hbox.Add(wx.StaticText(trigger_menu_panel, label='Level:'), 1, wx.ALIGN_CENTER_VERTICAL)
- trigger_level_button = forms.single_button(
- parent=trigger_menu_panel, sizer=hbox, label='50%',
- callback=parent.set_auto_trigger_level, style=wx.BU_EXACTFIT,
- )
- hbox.AddSpacer(WIDTH-60)
- trigger_level_buttons = forms.incr_decr_buttons(
- parent=trigger_menu_panel, sizer=hbox,
- on_incr=self._on_incr_trigger_level, on_decr=self._on_decr_trigger_level,
- )
- def disable_all(trigger_mode):
- for widget in (trigger_slope_chooser, trigger_channel_chooser, trigger_level_buttons, trigger_level_button):
- widget.Disable(trigger_mode == wxgui.TRIG_MODE_FREE)
- parent.subscribe(TRIGGER_MODE_KEY, disable_all)
- disable_all(parent[TRIGGER_MODE_KEY])
- ##################################################
- # XY Menu Box
- ##################################################
- if parent.num_inputs > 1:
- xy_menu_panel = wx.Panel(options_notebook)
- options_notebook_args.append((xy_menu_panel, XY_PAGE_INDEX, 'XY'))
- xy_menu_box = wx.BoxSizer(wx.VERTICAL)
- xy_menu_panel.SetSizer(xy_menu_box)
- #x and y channel choosers
- xy_menu_box.AddStretchSpacer()
- forms.drop_down(
- parent=xy_menu_panel, sizer=xy_menu_box,
- ps=parent, key=X_CHANNEL_KEY,
- choices=map(lambda x: x[1], CHANNELS),
- labels=map(lambda x: x[0], CHANNELS),
- label='Channel X', width=WIDTH,
- )
- xy_menu_box.AddStretchSpacer()
- forms.drop_down(
- parent=xy_menu_panel, sizer=xy_menu_box,
- ps=parent, key=Y_CHANNEL_KEY,
- choices=map(lambda x: x[1], CHANNELS),
- labels=map(lambda x: x[0], CHANNELS),
- label='Channel Y', width=WIDTH,
- )
- #marker
- xy_menu_box.AddStretchSpacer()
- forms.drop_down(
- parent=xy_menu_panel, sizer=xy_menu_box,
- ps=parent, key=XY_MARKER_KEY,
- choices=map(lambda x: x[1], MARKER_TYPES),
- labels=map(lambda x: x[0], MARKER_TYPES),
- label='Marker', width=WIDTH,
- )
- xy_menu_box.AddStretchSpacer()
- ##################################################
- # Setup Options Notebook
- ##################################################
- forms.notebook(
- parent=self, sizer=chan_options_box,
- notebook=options_notebook,
- ps=parent, key=CHANNEL_OPTIONS_KEY,
- pages=map(lambda x: x[0], options_notebook_args),
- choices=map(lambda x: x[1], options_notebook_args),
- labels=map(lambda x: x[2], options_notebook_args),
- )
- #gui handling for channel options changing
- def options_notebook_changed(chan_opt):
- try:
- parent[TRIGGER_SHOW_KEY] = chan_opt == TRIGGER_PAGE_INDEX
- parent[XY_MODE_KEY] = chan_opt == XY_PAGE_INDEX
- except wx.PyDeadObjectError: pass
- parent.subscribe(CHANNEL_OPTIONS_KEY, options_notebook_changed)
- #gui handling for xy mode changing
- def xy_mode_changed(mode):
- #ensure xy tab is selected
- if mode and parent[CHANNEL_OPTIONS_KEY] != XY_PAGE_INDEX:
- parent[CHANNEL_OPTIONS_KEY] = XY_PAGE_INDEX
- #ensure xy tab is not selected
- elif not mode and parent[CHANNEL_OPTIONS_KEY] == XY_PAGE_INDEX:
- parent[CHANNEL_OPTIONS_KEY] = 0
- #show/hide control buttons
- scope_mode_box.ShowItems(not mode)
- xy_mode_box.ShowItems(mode)
- control_box.Layout()
- parent.subscribe(XY_MODE_KEY, xy_mode_changed)
- xy_mode_changed(parent[XY_MODE_KEY])
- ##################################################
- # Run/Stop Button
- ##################################################
- #run/stop
- control_box.AddStretchSpacer()
- forms.toggle_button(
- sizer=control_box, parent=self,
- true_label='Stop', false_label='Run',
- ps=parent, key=RUNNING_KEY,
- )
- #set sizer
- self.SetSizerAndFit(control_box)
- #mouse wheel event
- def on_mouse_wheel(event):
- if not parent[XY_MODE_KEY]:
- if event.GetWheelRotation() < 0: self._on_incr_t_divs(event)
- else: self._on_decr_t_divs(event)
- parent.plotter.Bind(wx.EVT_MOUSEWHEEL, on_mouse_wheel)
-
- ##################################################
- # Event handlers
- ##################################################
- #trigger level
- def _on_incr_trigger_level(self, event):
- self.parent[TRIGGER_LEVEL_KEY] += self.parent[Y_PER_DIV_KEY]/3.
- def _on_decr_trigger_level(self, event):
- self.parent[TRIGGER_LEVEL_KEY] -= self.parent[Y_PER_DIV_KEY]/3.
- #incr/decr divs
- def _on_incr_t_divs(self, event):
- self.parent[T_PER_DIV_KEY] = common.get_clean_incr(self.parent[T_PER_DIV_KEY])
- def _on_decr_t_divs(self, event):
- self.parent[T_PER_DIV_KEY] = common.get_clean_decr(self.parent[T_PER_DIV_KEY])
- def _on_incr_x_divs(self, event):
- self.parent[X_PER_DIV_KEY] = common.get_clean_incr(self.parent[X_PER_DIV_KEY])
- def _on_decr_x_divs(self, event):
- self.parent[X_PER_DIV_KEY] = common.get_clean_decr(self.parent[X_PER_DIV_KEY])
- def _on_incr_y_divs(self, event):
- self.parent[Y_PER_DIV_KEY] = common.get_clean_incr(self.parent[Y_PER_DIV_KEY])
- def _on_decr_y_divs(self, event):
- self.parent[Y_PER_DIV_KEY] = common.get_clean_decr(self.parent[Y_PER_DIV_KEY])
- #incr/decr offset
- def _on_incr_x_off(self, event):
- self.parent[X_OFF_KEY] = self.parent[X_OFF_KEY] + self.parent[X_PER_DIV_KEY]
- def _on_decr_x_off(self, event):
- self.parent[X_OFF_KEY] = self.parent[X_OFF_KEY] - self.parent[X_PER_DIV_KEY]
- def _on_incr_y_off(self, event):
- self.parent[Y_OFF_KEY] = self.parent[Y_OFF_KEY] + self.parent[Y_PER_DIV_KEY]
- def _on_decr_y_off(self, event):
- self.parent[Y_OFF_KEY] = self.parent[Y_OFF_KEY] - self.parent[Y_PER_DIV_KEY]
-
- ##################################################
- # subscriber handlers
- ##################################################
- def _update_layout(self,key):
- # Just ignore the key value we get
- # we only need to now that the visability or size of something has changed
- self.parent.Layout()
- #self.parent.Fit()
-
-##################################################
-# Scope window with plotter and control panel
-##################################################
-class scope_window(wx.Panel, pubsub.pubsub):
- def __init__(
- self,
- parent,
- controller,
- size,
- title,
- frame_rate,
- num_inputs,
- sample_rate_key,
- t_scale,
- v_scale,
- v_offset,
- xy_mode,
- ac_couple_key,
- trigger_level_key,
- trigger_mode_key,
- trigger_slope_key,
- trigger_channel_key,
- decimation_key,
- msg_key,
- use_persistence,
- persist_alpha,
- trig_mode,
- y_axis_label,
- ):
- pubsub.pubsub.__init__(self)
- #check num inputs
- assert num_inputs <= len(CHANNEL_COLOR_SPECS)
- #setup
- self.sampleses = None
- self.num_inputs = num_inputs
- autorange = not v_scale
- self.autorange_ts = 0
- v_scale = v_scale or 1
- self.frame_rate_ts = 0
- #proxy the keys
- self.proxy(MSG_KEY, controller, msg_key)
- self.proxy(SAMPLE_RATE_KEY, controller, sample_rate_key)
- self.proxy(TRIGGER_LEVEL_KEY, controller, trigger_level_key)
- self.proxy(TRIGGER_MODE_KEY, controller, trigger_mode_key)
- self.proxy(TRIGGER_SLOPE_KEY, controller, trigger_slope_key)
- self.proxy(TRIGGER_CHANNEL_KEY, controller, trigger_channel_key)
- self.proxy(DECIMATION_KEY, controller, decimation_key)
- #initialize values
- self[RUNNING_KEY] = True
- self[XY_MARKER_KEY] = 2.0
- self[CHANNEL_OPTIONS_KEY] = 0
- self[XY_MODE_KEY] = xy_mode
- self[X_CHANNEL_KEY] = 0
- self[Y_CHANNEL_KEY] = self.num_inputs-1
- self[AUTORANGE_KEY] = autorange
- self[T_PER_DIV_KEY] = t_scale
- self[X_PER_DIV_KEY] = v_scale
- self[Y_PER_DIV_KEY] = v_scale
- self[T_OFF_KEY] = 0
- self[X_OFF_KEY] = v_offset
- self[Y_OFF_KEY] = v_offset
- self[T_DIVS_KEY] = 8
- self[X_DIVS_KEY] = 8
- self[Y_DIVS_KEY] = 8
- self[Y_AXIS_LABEL] = y_axis_label
- self[FRAME_RATE_KEY] = frame_rate
- self[TRIGGER_LEVEL_KEY] = 0
- self[TRIGGER_CHANNEL_KEY] = 0
- self[TRIGGER_MODE_KEY] = trig_mode
-
- self[TRIGGER_SLOPE_KEY] = wxgui.TRIG_SLOPE_POS
- self[T_FRAC_OFF_KEY] = 0.5
- self[USE_PERSISTENCE_KEY] = use_persistence
- self[PERSIST_ALPHA_KEY] = persist_alpha
-
- if self[TRIGGER_MODE_KEY] == wxgui.TRIG_MODE_STRIPCHART:
- self[T_FRAC_OFF_KEY] = 0.0
-
- for i in range(num_inputs):
- self.proxy(common.index_key(AC_COUPLE_KEY, i), controller, common.index_key(ac_couple_key, i))
- #init panel and plot
- wx.Panel.__init__(self, parent, style=wx.SIMPLE_BORDER)
- self.plotter = plotter.channel_plotter(self)
- self.plotter.SetSize(wx.Size(*size))
- self.plotter.SetSizeHints(*size)
- self.plotter.set_title(title)
- self.plotter.enable_legend(True)
- self.plotter.enable_point_label(True)
- self.plotter.enable_grid_lines(True)
- self.plotter.set_use_persistence(use_persistence)
- self.plotter.set_persist_alpha(persist_alpha)
- #setup the box with plot and controls
- self.control_panel = control_panel(self)
- main_box = wx.BoxSizer(wx.HORIZONTAL)
- main_box.Add(self.plotter, 1, wx.EXPAND)
- main_box.Add(self.control_panel, 0, wx.EXPAND)
- self.SetSizerAndFit(main_box)
- #register events for message
- self.subscribe(MSG_KEY, self.handle_msg)
- #register events for grid
- for key in [common.index_key(MARKER_KEY, i) for i in range(self.num_inputs)] + [
- TRIGGER_LEVEL_KEY, TRIGGER_MODE_KEY,
- T_PER_DIV_KEY, X_PER_DIV_KEY, Y_PER_DIV_KEY,
- T_OFF_KEY, X_OFF_KEY, Y_OFF_KEY,
- T_DIVS_KEY, X_DIVS_KEY, Y_DIVS_KEY,
- XY_MODE_KEY, AUTORANGE_KEY, T_FRAC_OFF_KEY,
- TRIGGER_SHOW_KEY, XY_MARKER_KEY, X_CHANNEL_KEY, Y_CHANNEL_KEY,
- ]: self.subscribe(key, self.update_grid)
- #register events for plotter settings
- self.subscribe(USE_PERSISTENCE_KEY, self.plotter.set_use_persistence)
- self.subscribe(PERSIST_ALPHA_KEY, self.plotter.set_persist_alpha)
- #initial update
- self.update_grid()
-
- def handle_msg(self, msg):
- """
- Handle the message from the scope sink message queue.
- Plot the list of arrays of samples onto the grid.
- Each samples array gets its own channel.
-
- Args:
- msg: the time domain data as a character array
- """
- if not self[RUNNING_KEY]: return
- #check time elapsed
- if time.time() - self.frame_rate_ts < 1.0/self[FRAME_RATE_KEY]: return
- #convert to floating point numbers
- samples = numpy.fromstring(msg, numpy.float32)
- #extract the trigger offset
- self.trigger_offset = samples[-1]
- samples = samples[:-1]
- samps_per_ch = len(samples)/self.num_inputs
- self.sampleses = [samples[samps_per_ch*i:samps_per_ch*(i+1)] for i in range(self.num_inputs)]
- #handle samples
- self.handle_samples()
- self.frame_rate_ts = time.time()
-
- def set_auto_trigger_level(self, *args):
- """
- Use the current trigger channel and samples to calculate the 50% level.
- """
- if not self.sampleses: return
- samples = self.sampleses[self[TRIGGER_CHANNEL_KEY]]
- self[TRIGGER_LEVEL_KEY] = (numpy.max(samples)+numpy.min(samples))/2
-
- def handle_samples(self):
- """
- Handle the cached samples from the scope input.
- Perform ac coupling, triggering, and auto ranging.
- """
- if not self.sampleses: return
- sampleses = self.sampleses
- if self[XY_MODE_KEY]:
- self[DECIMATION_KEY] = 1
- x_samples = sampleses[self[X_CHANNEL_KEY]]
- y_samples = sampleses[self[Y_CHANNEL_KEY]]
- #autorange
- if self[AUTORANGE_KEY] and time.time() - self.autorange_ts > AUTORANGE_UPDATE_RATE:
- x_min, x_max = common.get_min_max(x_samples)
- y_min, y_max = common.get_min_max(y_samples)
- #adjust the x per div
- x_per_div = common.get_clean_num((x_max-x_min)/self[X_DIVS_KEY])
- if x_per_div != self[X_PER_DIV_KEY]: self[X_PER_DIV_KEY] = x_per_div; return
- #adjust the x offset
- x_off = x_per_div*round((x_max+x_min)/2/x_per_div)
- if x_off != self[X_OFF_KEY]: self[X_OFF_KEY] = x_off; return
- #adjust the y per div
- y_per_div = common.get_clean_num((y_max-y_min)/self[Y_DIVS_KEY])
- if y_per_div != self[Y_PER_DIV_KEY]: self[Y_PER_DIV_KEY] = y_per_div; return
- #adjust the y offset
- y_off = y_per_div*round((y_max+y_min)/2/y_per_div)
- if y_off != self[Y_OFF_KEY]: self[Y_OFF_KEY] = y_off; return
- self.autorange_ts = time.time()
- #plot xy channel
- self.plotter.set_waveform(
- channel='XY',
- samples=(x_samples, y_samples),
- color_spec=CHANNEL_COLOR_SPECS[0],
- marker=self[XY_MARKER_KEY],
- )
- #turn off each waveform
- for i, samples in enumerate(sampleses):
- self.plotter.clear_waveform(channel='Ch%d'%(i+1))
- else:
- #autorange
- if self[AUTORANGE_KEY] and time.time() - self.autorange_ts > AUTORANGE_UPDATE_RATE:
- bounds = [common.get_min_max(samples) for samples in sampleses]
- y_min = numpy.min([bound[0] for bound in bounds])
- y_max = numpy.max([bound[1] for bound in bounds])
- #adjust the y per div
- y_per_div = common.get_clean_num((y_max-y_min)/self[Y_DIVS_KEY])
- if y_per_div != self[Y_PER_DIV_KEY]: self[Y_PER_DIV_KEY] = y_per_div; return
- #adjust the y offset
- y_off = y_per_div*round((y_max+y_min)/2/y_per_div)
- if y_off != self[Y_OFF_KEY]: self[Y_OFF_KEY] = y_off; return
- self.autorange_ts = time.time()
- #number of samples to scale to the screen
- actual_rate = self.get_actual_rate()
- time_span = self[T_PER_DIV_KEY]*self[T_DIVS_KEY]
- num_samps = int(round(time_span*actual_rate))
- #handle the time offset
- t_off = self[T_FRAC_OFF_KEY]*(len(sampleses[0])/actual_rate - time_span)
- if t_off != self[T_OFF_KEY]: self[T_OFF_KEY] = t_off; return
- samps_off = int(round(actual_rate*self[T_OFF_KEY]))
- #adjust the decim so that we use about half the samps
- self[DECIMATION_KEY] = int(round(
- time_span*self[SAMPLE_RATE_KEY]/(0.5*len(sampleses[0]))
- )
- )
- #num samps too small, auto increment the time
- if num_samps < 2: self[T_PER_DIV_KEY] = common.get_clean_incr(self[T_PER_DIV_KEY])
- #num samps in bounds, plot each waveform
- elif num_samps <= len(sampleses[0]):
- for i, samples in enumerate(sampleses):
- #plot samples
- self.plotter.set_waveform(
- channel='Ch%d'%(i+1),
- samples=samples[samps_off:num_samps+samps_off],
- color_spec=CHANNEL_COLOR_SPECS[i],
- marker=self[common.index_key(MARKER_KEY, i)],
- trig_off=self.trigger_offset,
- )
- #turn XY channel off
- self.plotter.clear_waveform(channel='XY')
- #keep trigger level within range
- if self[TRIGGER_LEVEL_KEY] > self.get_y_max():
- self[TRIGGER_LEVEL_KEY] = self.get_y_max(); return
- if self[TRIGGER_LEVEL_KEY] < self.get_y_min():
- self[TRIGGER_LEVEL_KEY] = self.get_y_min(); return
- #disable the trigger channel
- if not self[TRIGGER_SHOW_KEY] or self[XY_MODE_KEY] or self[TRIGGER_MODE_KEY] == wxgui.TRIG_MODE_FREE:
- self.plotter.clear_waveform(channel='Trig')
- else: #show trigger channel
- trigger_level = self[TRIGGER_LEVEL_KEY]
- trigger_point = (len(self.sampleses[0])-1)/self.get_actual_rate()/2.0
- self.plotter.set_waveform(
- channel='Trig',
- samples=(
- [self.get_t_min(), trigger_point, trigger_point, trigger_point, trigger_point, self.get_t_max()],
- [trigger_level, trigger_level, self.get_y_max(), self.get_y_min(), trigger_level, trigger_level]
- ),
- color_spec=TRIGGER_COLOR_SPEC,
- )
- #update the plotter
- self.plotter.update()
-
- def get_actual_rate(self): return 1.0*self[SAMPLE_RATE_KEY]/self[DECIMATION_KEY]
- def get_t_min(self): return self[T_OFF_KEY]
- def get_t_max(self): return self[T_PER_DIV_KEY]*self[T_DIVS_KEY] + self[T_OFF_KEY]
- def get_x_min(self): return -1*self[X_PER_DIV_KEY]*self[X_DIVS_KEY]/2.0 + self[X_OFF_KEY]
- def get_x_max(self): return self[X_PER_DIV_KEY]*self[X_DIVS_KEY]/2.0 + self[X_OFF_KEY]
- def get_y_min(self): return -1*self[Y_PER_DIV_KEY]*self[Y_DIVS_KEY]/2.0 + self[Y_OFF_KEY]
- def get_y_max(self): return self[Y_PER_DIV_KEY]*self[Y_DIVS_KEY]/2.0 + self[Y_OFF_KEY]
-
- def update_grid(self, *args):
- """
- Update the grid to reflect the current settings:
- xy divisions, xy offset, xy mode setting
- """
- if self[T_FRAC_OFF_KEY] < 0: self[T_FRAC_OFF_KEY] = 0; return
- if self[T_FRAC_OFF_KEY] > 1: self[T_FRAC_OFF_KEY] = 1; return
- if self[XY_MODE_KEY]:
- #update the x axis
- self.plotter.set_x_label('Ch%d'%(self[X_CHANNEL_KEY]+1))
- self.plotter.set_x_grid(self.get_x_min(), self.get_x_max(), self[X_PER_DIV_KEY])
- #update the y axis
- self.plotter.set_y_label('Ch%d'%(self[Y_CHANNEL_KEY]+1))
- self.plotter.set_y_grid(self.get_y_min(), self.get_y_max(), self[Y_PER_DIV_KEY])
- else:
- #update the t axis
- self.plotter.set_x_label('Time', 's')
- self.plotter.set_x_grid(self.get_t_min(), self.get_t_max(), self[T_PER_DIV_KEY], True)
- #update the y axis
- self.plotter.set_y_label(self[Y_AXIS_LABEL])
- self.plotter.set_y_grid(self.get_y_min(), self.get_y_max(), self[Y_PER_DIV_KEY])
- #redraw current sample
- self.handle_samples()
-
diff --git a/gr-wxgui/python/wxgui/scopesink2.py b/gr-wxgui/python/wxgui/scopesink2.py
deleted file mode 100644
index 99e268895a..0000000000
--- a/gr-wxgui/python/wxgui/scopesink2.py
+++ /dev/null
@@ -1,41 +0,0 @@
-#
-# Copyright 2008,2009 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-#
-
-from gnuradio import gr
-
-p = gr.prefs()
-style = p.get_string('wxgui', 'style', 'auto')
-
-if style == 'auto' or style == 'gl':
- try:
- import wx.glcanvas
- from OpenGL.GL import *
- from scopesink_gl import scope_sink_f, scope_sink_c
- except ImportError:
- if style == 'gl':
- raise RuntimeError("Unable to import OpenGL. Are Python wrappers for OpenGL installed?")
- else:
- # Fall backto non-gl sinks
- from scopesink_nongl import scope_sink_f, scope_sink_c
-elif style == 'nongl':
- from scopesink_nongl import scope_sink_f, scope_sink_c
-else:
- raise RuntimeError("Unknown wxgui style")
diff --git a/gr-wxgui/python/wxgui/scopesink_gl.py b/gr-wxgui/python/wxgui/scopesink_gl.py
deleted file mode 100644
index b2d5670c77..0000000000
--- a/gr-wxgui/python/wxgui/scopesink_gl.py
+++ /dev/null
@@ -1,239 +0,0 @@
-#
-# Copyright 2008,2010,2012 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-#
-
-##################################################
-# Imports
-##################################################
-import scope_window
-import common
-from gnuradio import gr, filter
-from gnuradio import blocks
-from gnuradio import analog
-from gnuradio import wxgui
-from pubsub import pubsub
-from constants import *
-import math
-
-class ac_couple_block(gr.hier_block2):
- """
- AC couple the incoming stream by subtracting out the low pass signal.
- Mute the low pass filter to disable ac coupling.
- """
-
- def __init__(self, controller, ac_couple_key, sample_rate_key):
- gr.hier_block2.__init__(
- self,
- "ac_couple",
- gr.io_signature(1, 1, gr.sizeof_float),
- gr.io_signature(1, 1, gr.sizeof_float),
- )
- #blocks
- lpf = filter.single_pole_iir_filter_ff(0.0)
- sub = blocks.sub_ff()
- mute = blocks.mute_ff()
- #connect
- self.connect(self, sub, self)
- self.connect(self, lpf, mute, (sub, 1))
- #subscribe
- controller.subscribe(ac_couple_key, lambda x: mute.set_mute(not x))
- controller.subscribe(sample_rate_key, lambda x: lpf.set_taps(0.05))
- #initialize
- controller[ac_couple_key] = controller[ac_couple_key]
- controller[sample_rate_key] = controller[sample_rate_key]
-
-##################################################
-# Scope sink block (wrapper for old wxgui)
-##################################################
-class _scope_sink_base(gr.hier_block2, common.wxgui_hb):
- """
- A scope block with a gui window.
- """
-
- def __init__(
- self,
- parent,
- title='',
- sample_rate=1,
- size=scope_window.DEFAULT_WIN_SIZE,
- v_scale=0,
- t_scale=0,
- v_offset=0,
- xy_mode=False,
- ac_couple=False,
- num_inputs=1,
- trig_mode=scope_window.DEFAULT_TRIG_MODE,
- y_axis_label='Counts',
- frame_rate=scope_window.DEFAULT_FRAME_RATE,
- use_persistence=False,
- persist_alpha=None,
- **kwargs #do not end with a comma
- ):
- #ensure analog alpha
- if persist_alpha is None:
- actual_frame_rate=float(frame_rate)
- analog_cutoff_freq=0.5 # Hertz
- #calculate alpha from wanted cutoff freq
- persist_alpha = 1.0 - math.exp(-2.0*math.pi*analog_cutoff_freq/actual_frame_rate)
-
- if not t_scale: t_scale = 10.0/sample_rate
- #init
- gr.hier_block2.__init__(
- self,
- "scope_sink",
- gr.io_signature(num_inputs, num_inputs, self._item_size),
- gr.io_signature(0, 0, 0),
- )
- #scope
- msgq = gr.msg_queue(2)
- scope = wxgui.oscope_sink_f(sample_rate, msgq)
- #controller
- self.controller = pubsub()
- self.controller.subscribe(SAMPLE_RATE_KEY, scope.set_sample_rate)
- self.controller.publish(SAMPLE_RATE_KEY, scope.sample_rate)
- self.controller.subscribe(DECIMATION_KEY, scope.set_decimation_count)
- self.controller.publish(DECIMATION_KEY, scope.get_decimation_count)
- self.controller.subscribe(TRIGGER_LEVEL_KEY, scope.set_trigger_level)
- self.controller.publish(TRIGGER_LEVEL_KEY, scope.get_trigger_level)
- self.controller.subscribe(TRIGGER_MODE_KEY, scope.set_trigger_mode)
- self.controller.publish(TRIGGER_MODE_KEY, scope.get_trigger_mode)
- self.controller.subscribe(TRIGGER_SLOPE_KEY, scope.set_trigger_slope)
- self.controller.publish(TRIGGER_SLOPE_KEY, scope.get_trigger_slope)
- self.controller.subscribe(TRIGGER_CHANNEL_KEY, scope.set_trigger_channel)
- self.controller.publish(TRIGGER_CHANNEL_KEY, scope.get_trigger_channel)
- actual_num_inputs = self._real and num_inputs or num_inputs*2
- #init ac couple
- for i in range(actual_num_inputs):
- self.controller[common.index_key(AC_COUPLE_KEY, i)] = ac_couple
- #start input watcher
- common.input_watcher(msgq, self.controller, MSG_KEY)
- #create window
- self.win = scope_window.scope_window(
- parent=parent,
- controller=self.controller,
- size=size,
- title=title,
- frame_rate=frame_rate,
- num_inputs=actual_num_inputs,
- sample_rate_key=SAMPLE_RATE_KEY,
- t_scale=t_scale,
- v_scale=v_scale,
- v_offset=v_offset,
- xy_mode=xy_mode,
- trig_mode=trig_mode,
- y_axis_label=y_axis_label,
- ac_couple_key=AC_COUPLE_KEY,
- trigger_level_key=TRIGGER_LEVEL_KEY,
- trigger_mode_key=TRIGGER_MODE_KEY,
- trigger_slope_key=TRIGGER_SLOPE_KEY,
- trigger_channel_key=TRIGGER_CHANNEL_KEY,
- decimation_key=DECIMATION_KEY,
- msg_key=MSG_KEY,
- use_persistence=use_persistence,
- persist_alpha=persist_alpha,
- )
- common.register_access_methods(self, self.win)
- #connect
- if self._real:
- for i in range(num_inputs):
- self.wxgui_connect(
- (self, i),
- ac_couple_block(self.controller, common.index_key(AC_COUPLE_KEY, i), SAMPLE_RATE_KEY),
- (scope, i),
- )
- else:
- for i in range(num_inputs):
- c2f = blocks.complex_to_float()
- self.wxgui_connect((self, i), c2f)
- for j in range(2):
- self.connect(
- (c2f, j),
- ac_couple_block(self.controller, common.index_key(AC_COUPLE_KEY, 2*i+j), SAMPLE_RATE_KEY),
- (scope, 2*i+j),
- )
-
-class scope_sink_f(_scope_sink_base):
- _item_size = gr.sizeof_float
- _real = True
-
-class scope_sink_c(_scope_sink_base):
- _item_size = gr.sizeof_gr_complex
- _real = False
-
-# ----------------------------------------------------------------
-# Stand-alone test application
-# ----------------------------------------------------------------
-
-import wx
-from gnuradio.wxgui import stdgui2
-
-class test_top_block (stdgui2.std_top_block):
- def __init__(self, frame, panel, vbox, argv):
- stdgui2.std_top_block.__init__ (self, frame, panel, vbox, argv)
-
- default_input_rate = 1e6
- if len(argv) > 1:
- input_rate = int(argv[1])
- else:
- input_rate = default_input_rate
-
- if len(argv) > 2:
- v_scale = float(argv[2]) # start up at this v_scale value
- else:
- v_scale = None # start up in autorange mode, default
-
- if len(argv) > 3:
- t_scale = float(argv[3]) # start up at this t_scale value
- else:
- t_scale = .00003*default_input_rate/input_rate # old behavior
-
- print "input rate %s v_scale %s t_scale %s" % (input_rate,v_scale,t_scale)
-
-
- # Generate a complex sinusoid
- ampl=1.0e3
- self.src0 = analog.sig_source_c(input_rate, analog.GR_SIN_WAVE,
- 25.1e3*input_rate/default_input_rate, ampl)
- self.noise = analog.sig_source_c(input_rate, analog.GR_SIN_WAVE,
- 11.1*25.1e3*input_rate/default_input_rate,
- ampl/10)
- #self.noise = analog.noise_source_c(analog.GR_GAUSSIAN, ampl/10)
- self.combine = blocks.add_cc()
-
- # We add this throttle block so that this demo doesn't suck down
- # all the CPU available. You normally wouldn't use it...
- self.thr = blocks.throttle(gr.sizeof_gr_complex, input_rate)
-
- scope = scope_sink_c(panel,"Secret Data",sample_rate=input_rate,
- v_scale=v_scale, t_scale=t_scale)
- vbox.Add(scope.win, 1, wx.EXPAND)
-
- # Ultimately this will be
- # self.connect("src0 throttle scope")
- self.connect(self.src0,(self.combine,0))
- self.connect(self.noise,(self.combine,1))
- self.connect(self.combine, self.thr, scope)
-
-def main ():
- app = stdgui2.stdapp(test_top_block, "O'Scope Test App")
- app.MainLoop()
-
-if __name__ == '__main__':
- main()
diff --git a/gr-wxgui/python/wxgui/scopesink_nongl.py b/gr-wxgui/python/wxgui/scopesink_nongl.py
deleted file mode 100644
index 28a473860f..0000000000
--- a/gr-wxgui/python/wxgui/scopesink_nongl.py
+++ /dev/null
@@ -1,654 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2003,2004,2006,2007,2012 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-#
-
-from gnuradio import gr, gru, eng_notation
-from gnuradio import analog
-from gnuradio import blocks
-from gnuradio import wxgui
-from gnuradio.wxgui import stdgui2
-import wx
-import gnuradio.wxgui.plot as plot
-import numpy
-import struct
-
-default_scopesink_size = (640, 240)
-default_v_scale = 1000
-default_frame_decim = gr.prefs().get_long('wxgui', 'frame_decim', 1)
-
-class scope_sink_f(gr.hier_block2):
- def __init__(self, parent, title='', sample_rate=1,
- size=default_scopesink_size, frame_decim=default_frame_decim,
- v_scale=default_v_scale, t_scale=None, num_inputs=1, **kwargs):
-
- gr.hier_block2.__init__(self, "scope_sink_f",
- gr.io_signature(num_inputs, num_inputs, gr.sizeof_float),
- gr.io_signature(0,0,0))
-
- msgq = gr.msg_queue(2) # message queue that holds at most 2 messages
- self.guts = wxgui.oscope_sink_f(sample_rate, msgq)
- for i in range(num_inputs):
- self.connect((self, i), (self.guts, i))
-
- self.win = scope_window(win_info(msgq, sample_rate, frame_decim,
- v_scale, t_scale, self.guts, title), parent)
-
- def set_sample_rate(self, sample_rate):
- self.guts.set_sample_rate(sample_rate)
- self.win.info.set_sample_rate(sample_rate)
-
-class scope_sink_c(gr.hier_block2):
- def __init__(self, parent, title='', sample_rate=1,
- size=default_scopesink_size, frame_decim=default_frame_decim,
- v_scale=default_v_scale, t_scale=None, num_inputs=1, xy_mode=False, **kwargs):
-
- gr.hier_block2.__init__(self, "scope_sink_c",
- gr.io_signature(num_inputs, num_inputs, gr.sizeof_gr_complex),
- gr.io_signature(0,0,0))
-
- msgq = gr.msg_queue(2) # message queue that holds at most 2 messages
- self.guts = wxgui.oscope_sink_f(sample_rate, msgq)
- for i in range(num_inputs):
- c2f = blocks.complex_to_float()
- self.connect((self, i), c2f)
- self.connect((c2f, 0),(self.guts, 2*i+0))
- self.connect((c2f, 1),(self.guts, 2*i+1))
-
- self.win = scope_window(win_info(msgq, sample_rate, frame_decim,
- v_scale, t_scale, self.guts, title), parent)
- self.win.info.xy = xy_mode
-
- def set_sample_rate(self, sample_rate):
- self.guts.set_sample_rate(sample_rate)
- self.win.info.set_sample_rate(sample_rate)
-
-class constellation_sink(scope_sink_c):
- def __init__(self, parent, title='Constellation', sample_rate=1,
- size=default_scopesink_size, frame_decim=default_frame_decim):
- scope_sink_c.__init__(self, parent=parent, title=title, sample_rate=sample_rate,
- size=size, frame_decim=frame_decim)
- self.win.info.xy = True #constellation mode
-
-# ========================================================================
-
-
-time_base_list = [ # time / division
- 1.0e-7, # 100ns / div
- 2.5e-7,
- 5.0e-7,
- 1.0e-6, # 1us / div
- 2.5e-6,
- 5.0e-6,
- 1.0e-5, # 10us / div
- 2.5e-5,
- 5.0e-5,
- 1.0e-4, # 100us / div
- 2.5e-4,
- 5.0e-4,
- 1.0e-3, # 1ms / div
- 2.5e-3,
- 5.0e-3,
- 1.0e-2, # 10ms / div
- 2.5e-2,
- 5.0e-2
- ]
-
-v_scale_list = [ # counts / div, LARGER gains are SMALLER /div, appear EARLIER
- 2.0e-3, # 2m / div, don't call it V/div it's actually counts/div
- 5.0e-3,
- 1.0e-2,
- 2.0e-2,
- 5.0e-2,
- 1.0e-1,
- 2.0e-1,
- 5.0e-1,
- 1.0e+0,
- 2.0e+0,
- 5.0e+0,
- 1.0e+1,
- 2.0e+1,
- 5.0e+1,
- 1.0e+2,
- 2.0e+2,
- 5.0e+2,
- 1.0e+3,
- 2.0e+3,
- 5.0e+3,
- 1.0e+4 # 10000 /div, USRP full scale is -/+ 32767
- ]
-
-
-wxDATA_EVENT = wx.NewEventType()
-
-def EVT_DATA_EVENT(win, func):
- win.Connect(-1, -1, wxDATA_EVENT, func)
-
-class DataEvent(wx.PyEvent):
- def __init__(self, data):
- wx.PyEvent.__init__(self)
- self.SetEventType(wxDATA_EVENT)
- self.data = data
-
- def Clone(self):
- self.__class__(self.GetId())
-
-
-class win_info(object):
- __slots__ = ['msgq', 'sample_rate', 'frame_decim', 'v_scale',
- 'scopesink', 'title',
- 'time_scale_cursor', 'v_scale_cursor', 'marker', 'xy',
- 'autorange', 'running']
-
- def __init__(self, msgq, sample_rate, frame_decim, v_scale, t_scale,
- scopesink, title = "Oscilloscope", xy=False):
- self.msgq = msgq
- self.sample_rate = sample_rate
- self.frame_decim = frame_decim
- self.scopesink = scopesink
- self.title = title;
-
- self.time_scale_cursor = gru.seq_with_cursor(time_base_list, initial_value = t_scale)
- self.v_scale_cursor = gru.seq_with_cursor(v_scale_list, initial_value = v_scale)
-
- self.marker = 'line'
- self.xy = xy
- self.autorange = not v_scale
- self.running = True
-
- def get_time_per_div(self):
- return self.time_scale_cursor.current()
-
- def get_volts_per_div(self):
- return self.v_scale_cursor.current()
-
- def set_sample_rate(self, sample_rate):
- self.sample_rate = sample_rate
-
- def get_sample_rate(self):
- return self.sample_rate
-
- def get_decimation_rate(self):
- return 1.0
-
- def set_marker(self, s):
- self.marker = s
-
- def get_marker(self):
- return self.marker
-
-
-class input_watcher(gru.msgq_runner):
- def __init__(self, msgq, event_receiver, frame_decim, **kwds):
- self.event_receiver = event_receiver
- self.frame_decim = frame_decim
- self.iscan = 0
- gru.msgq_runner.__init__(self, msgq, self.handle_msg)
-
- def handle_msg(self, msg):
- if self.iscan == 0: # only display at frame_decim
- self.iscan = self.frame_decim
-
- nchan = int(msg.arg1()) # number of channels of data in msg
- nsamples = int(msg.arg2()) # number of samples in each channel
-
- s = msg.to_string() # get the body of the msg as a string
-
- bytes_per_chan = nsamples * gr.sizeof_float
-
- records = []
- for ch in range(nchan):
-
- start = ch * bytes_per_chan
- chan_data = s[start:start+bytes_per_chan]
- rec = numpy.fromstring(chan_data, numpy.float32)
- records.append(rec)
-
- # print "nrecords = %d, reclen = %d" % (len (records),nsamples)
-
- de = DataEvent(records)
- wx.PostEvent(self.event_receiver, de)
- records = []
- del de
-
- self.iscan -= 1
-
-
-class scope_window(wx.Panel):
-
- def __init__(self, info, parent, id = -1,
- pos = wx.DefaultPosition, size = wx.DefaultSize, name = ""):
- wx.Panel.__init__(self, parent, -1)
- self.info = info
-
- vbox = wx.BoxSizer(wx.VERTICAL)
-
- self.graph = graph_window(info, self, -1)
-
- vbox.Add(self.graph, 1, wx.EXPAND)
- vbox.Add(self.make_control_box(), 0, wx.EXPAND)
- vbox.Add(self.make_control2_box(), 0, wx.EXPAND)
-
- self.sizer = vbox
- self.SetSizer(self.sizer)
- self.SetAutoLayout(True)
- self.sizer.Fit(self)
- self.set_autorange(self.info.autorange)
-
-
- # second row of control buttons etc. appears BELOW control_box
- def make_control2_box(self):
- ctrlbox = wx.BoxSizer(wx.HORIZONTAL)
-
- self.inc_v_button = wx.Button(self, 1101, " < ", style=wx.BU_EXACTFIT)
- self.inc_v_button.SetToolTipString("Increase vertical range")
- wx.EVT_BUTTON(self, 1101, self.incr_v_scale) # ID matches button ID above
-
- self.dec_v_button = wx.Button(self, 1100, " > ", style=wx.BU_EXACTFIT)
- self.dec_v_button.SetToolTipString("Decrease vertical range")
- wx.EVT_BUTTON(self, 1100, self.decr_v_scale)
-
- self.v_scale_label = wx.StaticText(self, 1002, "None") # vertical /div
- self.update_v_scale_label()
-
- self.autorange_checkbox = wx.CheckBox(self, 1102, "Autorange")
- self.autorange_checkbox.SetToolTipString("Select autorange on/off")
- wx.EVT_CHECKBOX(self, 1102, self.autorange_checkbox_event)
-
- ctrlbox.Add((5,0) ,0) # left margin space
- ctrlbox.Add(self.inc_v_button, 0, wx.EXPAND)
- ctrlbox.Add(self.dec_v_button, 0, wx.EXPAND)
- ctrlbox.Add(self.v_scale_label, 0, wx.ALIGN_CENTER)
- ctrlbox.Add((20,0) ,0) # spacer
- ctrlbox.Add(self.autorange_checkbox, 0, wx.ALIGN_CENTER)
-
- return ctrlbox
-
- def make_control_box(self):
- ctrlbox = wx.BoxSizer(wx.HORIZONTAL)
-
- tb_left = wx.Button(self, 1001, " < ", style=wx.BU_EXACTFIT)
- tb_left.SetToolTipString("Increase time base")
- wx.EVT_BUTTON(self, 1001, self.incr_timebase)
-
-
- tb_right = wx.Button(self, 1000, " > ", style=wx.BU_EXACTFIT)
- tb_right.SetToolTipString("Decrease time base")
- wx.EVT_BUTTON(self, 1000, self.decr_timebase)
-
- self.time_base_label = wx.StaticText(self, 1002, "")
- self.update_timebase_label()
-
- ctrlbox.Add((5,0) ,0)
- # ctrlbox.Add(wx.StaticText(self, -1, "Horiz Scale: "), 0, wx.ALIGN_CENTER)
- ctrlbox.Add(tb_left, 0, wx.EXPAND)
- ctrlbox.Add(tb_right, 0, wx.EXPAND)
- ctrlbox.Add(self.time_base_label, 0, wx.ALIGN_CENTER)
-
- ctrlbox.Add((10,0) ,1) # stretchy space
-
- ctrlbox.Add(wx.StaticText(self, -1, "Trig: "), 0, wx.ALIGN_CENTER)
- self.trig_chan_choice = wx.Choice(self, 1004,
- choices = ['Ch1', 'Ch2', 'Ch3', 'Ch4'])
- self.trig_chan_choice.SetToolTipString("Select channel for trigger")
- wx.EVT_CHOICE(self, 1004, self.trig_chan_choice_event)
- ctrlbox.Add(self.trig_chan_choice, 0, wx.ALIGN_CENTER)
-
- self.trig_mode_choice = wx.Choice(self, 1005,
- choices = ['Free', 'Auto', 'Norm'])
- self.trig_mode_choice.SetSelection(1)
- self.trig_mode_choice.SetToolTipString("Select trigger slope or Auto (untriggered roll)")
- wx.EVT_CHOICE(self, 1005, self.trig_mode_choice_event)
- ctrlbox.Add(self.trig_mode_choice, 0, wx.ALIGN_CENTER)
-
- trig_level50 = wx.Button(self, 1006, "50%")
- trig_level50.SetToolTipString("Set trigger level to 50%")
- wx.EVT_BUTTON(self, 1006, self.set_trig_level50)
- ctrlbox.Add(trig_level50, 0, wx.EXPAND)
-
- run_stop = wx.Button(self, 1007, "Run/Stop")
- run_stop.SetToolTipString("Toggle Run/Stop mode")
- wx.EVT_BUTTON(self, 1007, self.run_stop)
- ctrlbox.Add(run_stop, 0, wx.EXPAND)
-
- ctrlbox.Add((10, 0) ,1) # stretchy space
-
- ctrlbox.Add(wx.StaticText(self, -1, "Fmt: "), 0, wx.ALIGN_CENTER)
- self.marker_choice = wx.Choice(self, 1002, choices = self._marker_choices)
- self.marker_choice.SetToolTipString("Select plotting with lines, pluses or dots")
- wx.EVT_CHOICE(self, 1002, self.marker_choice_event)
- ctrlbox.Add(self.marker_choice, 0, wx.ALIGN_CENTER)
-
- self.xy_choice = wx.Choice(self, 1003, choices = ['X:t', 'X:Y'])
- self.xy_choice.SetToolTipString("Select X vs time or X vs Y display")
- wx.EVT_CHOICE(self, 1003, self.xy_choice_event)
- ctrlbox.Add(self.xy_choice, 0, wx.ALIGN_CENTER)
-
- return ctrlbox
-
- _marker_choices = ['line', 'plus', 'dot']
-
- def update_timebase_label(self):
- time_per_div = self.info.get_time_per_div()
- s = ' ' + eng_notation.num_to_str(time_per_div) + 's/div'
- self.time_base_label.SetLabel(s)
-
- def decr_timebase(self, evt):
- self.info.time_scale_cursor.prev()
- self.update_timebase_label()
-
- def incr_timebase(self, evt):
- self.info.time_scale_cursor.next()
- self.update_timebase_label()
-
- def update_v_scale_label(self):
- volts_per_div = self.info.get_volts_per_div()
- s = ' ' + eng_notation.num_to_str(volts_per_div) + '/div' # Not V/div
- self.v_scale_label.SetLabel(s)
-
- def decr_v_scale(self, evt):
- self.info.v_scale_cursor.prev()
- self.update_v_scale_label()
-
- def incr_v_scale(self, evt):
- self.info.v_scale_cursor.next()
- self.update_v_scale_label()
-
- def marker_choice_event(self, evt):
- s = evt.GetString()
- self.set_marker(s)
-
- def set_autorange(self, on):
- if on:
- self.v_scale_label.SetLabel(" (auto)")
- self.info.autorange = True
- self.autorange_checkbox.SetValue(True)
- self.inc_v_button.Enable(False)
- self.dec_v_button.Enable(False)
- else:
- if self.graph.y_range:
- (l,u) = self.graph.y_range # found by autorange
- self.info.v_scale_cursor.set_index_by_value((u-l)/8.0)
- self.update_v_scale_label()
- self.info.autorange = False
- self.autorange_checkbox.SetValue(False)
- self.inc_v_button.Enable(True)
- self.dec_v_button.Enable(True)
-
- def autorange_checkbox_event(self, evt):
- if evt.Checked():
- self.set_autorange(True)
- else:
- self.set_autorange(False)
-
- def set_marker(self, s):
- self.info.set_marker(s) # set info for drawing routines
- i = self.marker_choice.FindString(s)
- assert i >= 0, "Hmmm, set_marker problem"
- self.marker_choice.SetSelection(i)
-
- def set_format_line(self):
- self.set_marker('line')
-
- def set_format_dot(self):
- self.set_marker('dot')
-
- def set_format_plus(self):
- self.set_marker('plus')
-
- def xy_choice_event(self, evt):
- s = evt.GetString()
- self.info.xy = s == 'X:Y'
-
- def trig_chan_choice_event(self, evt):
- s = evt.GetString()
- ch = int(s[-1]) - 1
- self.info.scopesink.set_trigger_channel(ch)
-
- def trig_mode_choice_event(self, evt):
- sink = self.info.scopesink
- s = evt.GetString()
- if s == 'Norm':
- sink.set_trigger_mode(wxgui.TRIG_MODE_NORM)
- elif s == 'Auto':
- sink.set_trigger_mode(wxgui.TRIG_MODE_AUTO)
- elif s == 'Free':
- sink.set_trigger_mode(wxgui.TRIG_MODE_FREE)
- else:
- assert 0, "Bad trig_mode_choice string"
-
- def set_trig_level50(self, evt):
- self.info.scopesink.set_trigger_level_auto()
-
- def run_stop(self, evt):
- self.info.running = not self.info.running
-
-
-class graph_window(plot.PlotCanvas):
-
- channel_colors = ['BLUE', 'RED',
- 'CYAN', 'MAGENTA', 'GREEN', 'YELLOW']
-
- def __init__(self, info, parent, id = -1,
- pos = wx.DefaultPosition, size = (640, 240),
- style = wx.DEFAULT_FRAME_STYLE, name = ""):
- plot.PlotCanvas.__init__(self, parent, id, pos, size, style, name)
-
- self.SetXUseScopeTicks(True)
- self.SetEnableGrid(True)
- self.SetEnableZoom(True)
- self.SetEnableLegend(True)
- # self.SetBackgroundColour('black')
-
- self.info = info;
- self.y_range = None
- self.x_range = None
- self.avg_y_min = None
- self.avg_y_max = None
- self.avg_x_min = None
- self.avg_x_max = None
-
- EVT_DATA_EVENT(self, self.format_data)
-
- self.input_watcher = input_watcher(info.msgq, self, info.frame_decim)
-
- def channel_color(self, ch):
- return self.channel_colors[ch % len(self.channel_colors)]
-
- def format_data(self, evt):
- if not self.info.running:
- return
-
- if self.info.xy:
- self.format_xy_data(evt)
- return
-
- info = self.info
- records = evt.data
- nchannels = len(records)
- npoints = len(records[0])
-
- objects = []
-
- Ts = 1.0 / (info.get_sample_rate() / info.get_decimation_rate())
- x_vals = Ts * numpy.arange(-npoints/2, npoints/2)
-
- # preliminary clipping based on time axis here, instead of in graphics code
- time_per_window = self.info.get_time_per_div() * 10
- n = int(time_per_window / Ts + 0.5)
- n = n & ~0x1 # make even
- n = max(2, min(n, npoints))
-
- self.SetXUseScopeTicks(True) # use 10 divisions, no labels
-
- for ch in range(nchannels):
- r = records[ch]
-
- # plot middle n points of record
-
- lb = npoints/2 - n/2
- ub = npoints/2 + n/2
- # points = zip(x_vals[lb:ub], r[lb:ub])
- points = numpy.zeros((ub-lb, 2), numpy.float64)
- points[:,0] = x_vals[lb:ub]
- points[:,1] = r[lb:ub]
-
- m = info.get_marker()
- if m == 'line':
- objects.append(plot.PolyLine(points,
- colour=self.channel_color(ch),
- legend=('Ch%d' % (ch+1,))))
- else:
- objects.append(plot.PolyMarker(points,
- marker=m,
- colour=self.channel_color(ch),
- legend=('Ch%d' % (ch+1,))))
-
- graphics = plot.PlotGraphics(objects,
- title=self.info.title,
- xLabel = '', yLabel = '')
-
- time_per_div = info.get_time_per_div()
- x_range = (-5.0 * time_per_div, 5.0 * time_per_div) # ranges are tuples!
- volts_per_div = info.get_volts_per_div()
- if not self.info.autorange:
- self.y_range = (-4.0 * volts_per_div, 4.0 * volts_per_div)
- self.Draw(graphics, xAxis=x_range, yAxis=self.y_range)
- self.update_y_range() # autorange to self.y_range
-
-
- def format_xy_data(self, evt):
- info = self.info
- records = evt.data
- nchannels = len(records)
- npoints = len(records[0])
-
- if nchannels < 2:
- return
-
- objects = []
- # points = zip(records[0], records[1])
- points = numpy.zeros((len(records[0]), 2), numpy.float32)
- points[:,0] = records[0]
- points[:,1] = records[1]
-
- self.SetXUseScopeTicks(False)
-
- m = info.get_marker()
- if m == 'line':
- objects.append(plot.PolyLine(points,
- colour=self.channel_color(0)))
- else:
- objects.append(plot.PolyMarker(points,
- marker=m,
- colour=self.channel_color(0)))
-
- graphics = plot.PlotGraphics(objects,
- title=self.info.title,
- xLabel = 'I', yLabel = 'Q')
-
- self.Draw(graphics, xAxis=self.x_range, yAxis=self.y_range)
- self.update_y_range()
- self.update_x_range()
-
-
- def update_y_range(self):
- alpha = 1.0/25
- graphics = self.last_draw[0]
- p1, p2 = graphics.boundingBox() # min, max points of graphics
-
- if self.avg_y_min: # prevent vertical scale from jumping abruptly --?
- self.avg_y_min = p1[1] * alpha + self.avg_y_min * (1 - alpha)
- self.avg_y_max = p2[1] * alpha + self.avg_y_max * (1 - alpha)
- else: # initial guess
- self.avg_y_min = p1[1] # -500.0 workaround, sometimes p1 is ~ 10^35
- self.avg_y_max = p2[1] # 500.0
-
- self.y_range = self._axisInterval('auto', self.avg_y_min, self.avg_y_max)
- # print "p1 %s p2 %s y_min %s y_max %s y_range %s" \
- # % (p1, p2, self.avg_y_min, self.avg_y_max, self.y_range)
-
-
- def update_x_range(self):
- alpha = 1.0/25
- graphics = self.last_draw[0]
- p1, p2 = graphics.boundingBox() # min, max points of graphics
-
- if self.avg_x_min:
- self.avg_x_min = p1[0] * alpha + self.avg_x_min * (1 - alpha)
- self.avg_x_max = p2[0] * alpha + self.avg_x_max * (1 - alpha)
- else:
- self.avg_x_min = p1[0]
- self.avg_x_max = p2[0]
-
- self.x_range = self._axisInterval('auto', self.avg_x_min, self.avg_x_max)
-
-
-# ----------------------------------------------------------------
-# Stand-alone test application
-# ----------------------------------------------------------------
-
-class test_top_block(stdgui2.std_top_block):
- def __init__(self, frame, panel, vbox, argv):
- stdgui2.std_top_block.__init__(self, frame, panel, vbox, argv)
-
- if len(argv) > 1:
- frame_decim = int(argv[1])
- else:
- frame_decim = 1
-
- if len(argv) > 2:
- v_scale = float(argv[2]) # start up at this v_scale value
- else:
- v_scale = None # start up in autorange mode, default
-
- if len(argv) > 3:
- t_scale = float(argv[3]) # start up at this t_scale value
- else:
- t_scale = None # old behavior
-
- print "frame decim %s v_scale %s t_scale %s" % (frame_decim,v_scale,t_scale)
-
- input_rate = 1e6
-
- # Generate a complex sinusoid
- self.src0 = analog.sig_source_c(input_rate, analog.GR_SIN_WAVE, 25.1e3, 1e3)
-
- # We add this throttle block so that this demo doesn't suck down
- # all the CPU available. You normally wouldn't use it...
- self.thr = blocks.throttle(gr.sizeof_gr_complex, input_rate)
-
- scope = scope_sink_c(panel,"Secret Data",sample_rate=input_rate,
- frame_decim=frame_decim,
- v_scale=v_scale, t_scale=t_scale)
- vbox.Add(scope.win, 1, wx.EXPAND)
-
- # Ultimately this will be
- # self.connect("src0 throttle scope")
- self.connect(self.src0, self.thr, scope)
-
-def main():
- app = stdgui2.stdapp(test_top_block, "O'Scope Test App")
- app.MainLoop()
-
-if __name__ == '__main__':
- main()
-
-# ----------------------------------------------------------------
diff --git a/gr-wxgui/python/wxgui/slider.py b/gr-wxgui/python/wxgui/slider.py
deleted file mode 100644
index 9a8bfff7e7..0000000000
--- a/gr-wxgui/python/wxgui/slider.py
+++ /dev/null
@@ -1,48 +0,0 @@
-#!/usr/bin/env python
-
-import wx
-
-def slider(parent, min, max, callback):
- """
- Return a wx.Slider object.
-
- Args:
- min: minimum slider value (float)
- max: maximum slider value (float)
- callback: function of one arg invoked when slider moves.
- @rtype: wx.Slider
- """
- new_id = wx.NewId()
- s = wx.Slider(parent, new_id, (max+min)/2, min, max, wx.DefaultPosition,
- wx.Size(250,-1), wx.SL_HORIZONTAL | wx.SL_LABELS)
- wx.EVT_COMMAND_SCROLL(parent, new_id,
- lambda evt : callback(evt.GetInt()))
- return s
-
-
-# ----------------------------------------------------------------
-# Demo app
-# ----------------------------------------------------------------
-if __name__ == '__main__':
-
- from gnuradio.wxgui import stdgui2
-
- class demo_graph(stdgui2.std_top_block):
-
- def __init__(self, frame, panel, vbox, argv):
- stdgui2.std_top_block.__init__ (self, frame, panel, vbox, argv)
-
- vbox.Add(slider(panel, 23, 47, self.my_callback1), 1, wx.ALIGN_CENTER)
- vbox.Add(slider(panel, -100, 100, self.my_callback2), 1, wx.ALIGN_CENTER)
-
- def my_callback1(self, val):
- print "cb1 = ", val
-
- def my_callback2(self, val):
- print "cb2 = ", val
-
- def main ():
- app = stdgui2.stdapp (demo_graph, "Slider Demo")
- app.MainLoop ()
-
- main ()
diff --git a/gr-wxgui/python/wxgui/stdgui2.py b/gr-wxgui/python/wxgui/stdgui2.py
deleted file mode 100644
index dbd0307195..0000000000
--- a/gr-wxgui/python/wxgui/stdgui2.py
+++ /dev/null
@@ -1,107 +0,0 @@
-#
-# Copyright 2004 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.
-#
-
-'''A simple wx gui for GNU Radio applications'''
-
-import ctypes
-import wx
-import sys
-from gnuradio import gr
-
-
-class stdapp (wx.App):
- def __init__ (self, top_block_maker, title="GNU Radio", nstatus=2,
- max_noutput_items=None):
- self.top_block_maker = top_block_maker
- self.title = title
- self._nstatus = nstatus
- self._max_noutput_items = max_noutput_items
- # If we're on Linux, also enable multi-threading Xlib access
- if sys.platform.startswith('linux'):
- try:
- x11 = ctypes.cdll.LoadLibrary('libX11.so')
- x11.XInitThreads()
- except:
- print "Warning: failed to XInitThreads()"
- # All our initialization must come before calling wx.App.__init__.
- # OnInit is called from somewhere in the guts of __init__.
- wx.App.__init__ (self, redirect=False)
-
- def OnInit (self):
- frame = stdframe (self.top_block_maker, self.title, self._nstatus)
- frame.Show (True)
- self.SetTopWindow (frame)
-
- if(self._max_noutput_items is not None):
- frame.top_block().start (self._max_noutput_items)
- else:
- frame.top_block().start ()
-
- return True
-
-
-class stdframe (wx.Frame):
- def __init__ (self, top_block_maker, title="GNU Radio", nstatus=2):
- # print "stdframe.__init__"
- wx.Frame.__init__(self, None, -1, title)
-
- self.CreateStatusBar (nstatus)
- mainmenu = wx.MenuBar ()
-
- menu = wx.Menu ()
- item = menu.Append (200, 'E&xit', 'Exit')
- self.Bind (wx.EVT_MENU, self.OnCloseWindow, item)
- mainmenu.Append (menu, "&File")
- self.SetMenuBar (mainmenu)
-
- self.Bind (wx.EVT_CLOSE, self.OnCloseWindow)
- self.panel = stdpanel (self, self, top_block_maker)
- vbox = wx.BoxSizer(wx.VERTICAL)
- vbox.Add(self.panel, 1, wx.EXPAND)
- self.SetSizer(vbox)
- self.SetAutoLayout(True)
- vbox.Fit(self)
-
- def OnCloseWindow (self, event):
- self.top_block().stop()
- self.top_block().wait()
- self.Destroy ()
-
- def top_block (self):
- return self.panel.top_block
-
-class stdpanel (wx.Panel):
- def __init__ (self, parent, frame, top_block_maker):
- # print "stdpanel.__init__"
- wx.Panel.__init__ (self, parent, -1)
- self.frame = frame
-
- vbox = wx.BoxSizer (wx.VERTICAL)
- self.top_block = top_block_maker (frame, self, vbox, sys.argv)
- self.SetSizer (vbox)
- self.SetAutoLayout (True)
- vbox.Fit (self)
-
-class std_top_block (gr.top_block):
- def __init__ (self, parent, panel, vbox, argv):
- # Call the hier_block2 constructor
- # Top blocks have no inputs and outputs
- gr.top_block.__init__(self, "std_top_block")
diff --git a/gr-wxgui/python/wxgui/termsink.py b/gr-wxgui/python/wxgui/termsink.py
deleted file mode 100644
index a0cfd575d6..0000000000
--- a/gr-wxgui/python/wxgui/termsink.py
+++ /dev/null
@@ -1,77 +0,0 @@
-#
-# Copyright 2009 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-#
-
-from gnuradio import gru
-import wx
-
-DEFAULT_WIN_SIZE = (600, 300)
-APPEND_EVENT = wx.NewEventType()
-EVT_APPEND_EVENT = wx.PyEventBinder(APPEND_EVENT, 0)
-
-class AppendEvent(wx.PyEvent):
- def __init__(self, text):
- wx.PyEvent.__init__(self)
- self.SetEventType(APPEND_EVENT)
- self.text = text
-
- def Clone(self):
- self.__class__(self.GetId())
-
-class termsink(wx.Panel):
- def __init__(self,
- parent,
- msgq,
- size=DEFAULT_WIN_SIZE,
- ):
-
- wx.Panel.__init__(self,
- parent,
- size=size,
- style=wx.SIMPLE_BORDER,
- )
-
- self.text_ctrl = wx.TextCtrl(self,
- wx.ID_ANY,
- value="",
- size=size,
- style=wx.TE_MULTILINE|wx.TE_READONLY,
- )
-
- main_sizer = wx.BoxSizer(wx.VERTICAL)
- main_sizer.Add(self.text_ctrl, 1, wx.EXPAND)
- self.SetSizerAndFit(main_sizer)
-
- EVT_APPEND_EVENT(self, self.evt_append)
- self.runner = gru.msgq_runner(msgq, self.handle_msg)
-
- def handle_msg(self, msg):
- # This gets called in the queue runner thread context
- # For now, just add whatever the user sends to the text control
- text = msg.to_string()
-
- # Create a wxPython event and post it to the event queue
- evt = AppendEvent(text)
- wx.PostEvent(self, evt)
- del evt
-
- def evt_append(self, evt):
- # This gets called by the wxPython event queue runner
- self.text_ctrl.AppendText(evt.text)
diff --git a/gr-wxgui/python/wxgui/waterfall_window.py b/gr-wxgui/python/wxgui/waterfall_window.py
deleted file mode 100644
index 272af10ffc..0000000000
--- a/gr-wxgui/python/wxgui/waterfall_window.py
+++ /dev/null
@@ -1,328 +0,0 @@
-#
-# Copyright 2008 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1`301, USA.
-#
-
-##################################################
-# Imports
-##################################################
-import plotter
-import common
-import wx
-import numpy
-import math
-import pubsub
-from constants import *
-from gnuradio import gr #for gr.prefs
-import forms
-
-##################################################
-# Constants
-##################################################
-SLIDER_STEPS = 100
-AVG_ALPHA_MIN_EXP, AVG_ALPHA_MAX_EXP = -3, 0
-DEFAULT_FRAME_RATE = gr.prefs().get_long('wxgui', 'waterfall_rate', 30)
-DEFAULT_COLOR_MODE = gr.prefs().get_string('wxgui', 'waterfall_color', 'rgb1')
-DEFAULT_WIN_SIZE = (600, 300)
-DIV_LEVELS = (1, 2, 5, 10, 20)
-MIN_DYNAMIC_RANGE, MAX_DYNAMIC_RANGE = 10, 200
-DYNAMIC_RANGE_STEP = 10.
-COLOR_MODES = (
- ('RGB1', 'rgb1'),
- ('RGB2', 'rgb2'),
- ('RGB3', 'rgb3'),
- ('Gray', 'gray'),
-)
-
-##################################################
-# Waterfall window control panel
-##################################################
-class control_panel(wx.Panel):
- """
- A control panel with wx widgits to control the plotter and fft block chain.
- """
-
- def __init__(self, parent):
- """
- Create a new control panel.
-
- Args:
- parent: the wx parent window
- """
- self.parent = parent
- wx.Panel.__init__(self, parent, style=wx.SUNKEN_BORDER)
- parent[SHOW_CONTROL_PANEL_KEY] = True
- parent.subscribe(SHOW_CONTROL_PANEL_KEY, self.Show)
- control_box = wx.BoxSizer(wx.VERTICAL)
- control_box.AddStretchSpacer()
- options_box = forms.static_box_sizer(
- parent=self, sizer=control_box, label='Options',
- bold=True, orient=wx.VERTICAL,
- )
- #average
- forms.check_box(
- sizer=options_box, parent=self, label='Average',
- ps=parent, key=AVERAGE_KEY,
- )
- avg_alpha_text = forms.static_text(
- sizer=options_box, parent=self, label='Avg Alpha',
- converter=forms.float_converter(lambda x: '%.4f'%x),
- ps=parent, key=AVG_ALPHA_KEY, width=50,
- )
- avg_alpha_slider = forms.log_slider(
- sizer=options_box, parent=self,
- min_exp=AVG_ALPHA_MIN_EXP,
- max_exp=AVG_ALPHA_MAX_EXP,
- num_steps=SLIDER_STEPS,
- ps=parent, key=AVG_ALPHA_KEY,
- )
- for widget in (avg_alpha_text, avg_alpha_slider):
- parent.subscribe(AVERAGE_KEY, widget.Enable)
- widget.Enable(parent[AVERAGE_KEY])
- #begin axes box
- control_box.AddStretchSpacer()
- axes_box = forms.static_box_sizer(
- parent=self, sizer=control_box, label='Axes Options',
- bold=True, orient=wx.VERTICAL,
- )
- #num lines buttons
- forms.incr_decr_buttons(
- parent=self, sizer=axes_box, label='Time Scale',
- on_incr=self._on_incr_time_scale, on_decr=self._on_decr_time_scale,
- )
- #dyanmic range buttons
- forms.incr_decr_buttons(
- parent=self, sizer=axes_box, label='Dyn Range',
- on_incr=self._on_incr_dynamic_range, on_decr=self._on_decr_dynamic_range,
- )
- #ref lvl buttons
- forms.incr_decr_buttons(
- parent=self, sizer=axes_box, label='Ref Level',
- on_incr=self._on_incr_ref_level, on_decr=self._on_decr_ref_level,
- )
- #color mode
- forms.drop_down(
- parent=self, sizer=axes_box, width=100,
- ps=parent, key=COLOR_MODE_KEY, label='Color',
- choices=map(lambda x: x[1], COLOR_MODES),
- labels=map(lambda x: x[0], COLOR_MODES),
- )
- #autoscale
- forms.single_button(
- parent=self, sizer=axes_box, label='Autoscale',
- callback=self.parent.autoscale,
- )
- #clear
- control_box.AddStretchSpacer()
- forms.single_button(
- parent=self, sizer=control_box, label='Clear',
- callback=self._on_clear_button,
- )
- #run/stop
- forms.toggle_button(
- sizer=control_box, parent=self,
- true_label='Stop', false_label='Run',
- ps=parent, key=RUNNING_KEY,
- )
- #set sizer
- self.SetSizerAndFit(control_box)
-
- ##################################################
- # Event handlers
- ##################################################
- def _on_clear_button(self, event):
- self.parent[NUM_LINES_KEY] = self.parent[NUM_LINES_KEY]
- def _on_incr_dynamic_range(self, event):
- self.parent[DYNAMIC_RANGE_KEY] = min(MAX_DYNAMIC_RANGE, common.get_clean_incr(self.parent[DYNAMIC_RANGE_KEY]))
- def _on_decr_dynamic_range(self, event):
- self.parent[DYNAMIC_RANGE_KEY] = max(MIN_DYNAMIC_RANGE, common.get_clean_decr(self.parent[DYNAMIC_RANGE_KEY]))
- def _on_incr_ref_level(self, event):
- self.parent[REF_LEVEL_KEY] = self.parent[REF_LEVEL_KEY] + self.parent[DYNAMIC_RANGE_KEY]/DYNAMIC_RANGE_STEP
- def _on_decr_ref_level(self, event):
- self.parent[REF_LEVEL_KEY] = self.parent[REF_LEVEL_KEY] - self.parent[DYNAMIC_RANGE_KEY]/DYNAMIC_RANGE_STEP
- def _on_incr_time_scale(self, event):
- old_rate = self.parent[FRAME_RATE_KEY]
- self.parent[FRAME_RATE_KEY] *= 0.75
- if self.parent[FRAME_RATE_KEY] < 1.0:
- self.parent[FRAME_RATE_KEY] = 1.0
-
- if self.parent[FRAME_RATE_KEY] == old_rate:
- self.parent[DECIMATION_KEY] += 1
- def _on_decr_time_scale(self, event):
- old_rate = self.parent[FRAME_RATE_KEY]
- self.parent[FRAME_RATE_KEY] *= 1.25
- if self.parent[FRAME_RATE_KEY] == old_rate:
- self.parent[DECIMATION_KEY] -= 1
-
-##################################################
-# Waterfall window with plotter and control panel
-##################################################
-class waterfall_window(wx.Panel, pubsub.pubsub):
- def __init__(
- self,
- parent,
- controller,
- size,
- title,
- real,
- fft_size,
- num_lines,
- decimation_key,
- baseband_freq,
- sample_rate_key,
- frame_rate_key,
- dynamic_range,
- ref_level,
- average_key,
- avg_alpha_key,
- msg_key,
- ):
- pubsub.pubsub.__init__(self)
- #setup
- self.samples = list()
- self.real = real
- self.fft_size = fft_size
- #proxy the keys
- self.proxy(MSG_KEY, controller, msg_key)
- self.proxy(DECIMATION_KEY, controller, decimation_key)
- self.proxy(FRAME_RATE_KEY, controller, frame_rate_key)
- self.proxy(AVERAGE_KEY, controller, average_key)
- self.proxy(AVG_ALPHA_KEY, controller, avg_alpha_key)
- self.proxy(SAMPLE_RATE_KEY, controller, sample_rate_key)
- #init panel and plot
- wx.Panel.__init__(self, parent, style=wx.SIMPLE_BORDER)
- self.plotter = plotter.waterfall_plotter(self)
- self.plotter.SetSize(wx.Size(*size))
- self.plotter.SetSizeHints(*size)
- self.plotter.set_title(title)
- self.plotter.enable_point_label(True)
- self.plotter.enable_grid_lines(False)
- #plotter listeners
- self.subscribe(COLOR_MODE_KEY, self.plotter.set_color_mode)
- self.subscribe(NUM_LINES_KEY, self.plotter.set_num_lines)
- #initialize values
- self[DYNAMIC_RANGE_KEY] = dynamic_range
- self[NUM_LINES_KEY] = num_lines
- self[Y_DIVS_KEY] = 8
- self[X_DIVS_KEY] = 8 #approximate
- self[REF_LEVEL_KEY] = ref_level
- self[BASEBAND_FREQ_KEY] = baseband_freq
- self[COLOR_MODE_KEY] = COLOR_MODES[0][1]
- self[COLOR_MODE_KEY] = DEFAULT_COLOR_MODE
- self[RUNNING_KEY] = True
- #setup the box with plot and controls
- self.control_panel = control_panel(self)
- main_box = wx.BoxSizer(wx.HORIZONTAL)
- main_box.Add(self.plotter, 1, wx.EXPAND)
- main_box.Add(self.control_panel, 0, wx.EXPAND)
- self.SetSizerAndFit(main_box)
- #register events
- self.subscribe(MSG_KEY, self.handle_msg)
- for key in (
- DECIMATION_KEY, SAMPLE_RATE_KEY, FRAME_RATE_KEY,
- BASEBAND_FREQ_KEY, X_DIVS_KEY, Y_DIVS_KEY, NUM_LINES_KEY,
- ): self.subscribe(key, self.update_grid)
- #initial update
- self.update_grid()
-
- def set_callback(self,callb):
- self.plotter.set_callback(callb)
-
- def autoscale(self, *args):
- """
- Autoscale the waterfall plot to the last frame.
- Set the dynamic range and reference level.
- Does not affect the current data in the waterfall.
- """
- if not len(self.samples): return
- min_level, max_level = common.get_min_max_fft(self.samples)
- #set the range and level
- self[DYNAMIC_RANGE_KEY] = common.get_clean_num(max_level - min_level)
- self[REF_LEVEL_KEY] = DYNAMIC_RANGE_STEP*round(.5+max_level/DYNAMIC_RANGE_STEP)
-
- def handle_msg(self, msg):
- """
- Handle the message from the fft sink message queue.
- If complex, reorder the fft samples so the negative bins come first.
- If real, keep take only the positive bins.
- Send the data to the plotter.
-
- Args:
- msg: the fft array as a character array
- """
- if not self[RUNNING_KEY]: return
- #convert to floating point numbers
- self.samples = samples = numpy.fromstring(msg, numpy.float32)[:self.fft_size] #only take first frame
- num_samps = len(samples)
- #reorder fft
- if self.real: samples = samples[:(num_samps+1)/2]
- else: samples = numpy.concatenate((samples[num_samps/2+1:], samples[:(num_samps+1)/2]))
- #plot the fft
- self.plotter.set_samples(
- samples=samples,
- minimum=self[REF_LEVEL_KEY] - self[DYNAMIC_RANGE_KEY],
- maximum=self[REF_LEVEL_KEY],
- )
- #update the plotter
- self.plotter.update()
-
- def update_grid(self, *args):
- """
- Update the plotter grid.
- This update method is dependent on the variables below.
- Determine the x and y axis grid parameters.
- The x axis depends on sample rate, baseband freq, and x divs.
- The y axis depends on y per div, y divs, and ref level.
- """
- #grid parameters
- sample_rate = self[SAMPLE_RATE_KEY]
- frame_rate = self[FRAME_RATE_KEY]
- if frame_rate < 1.0 :
- frame_rate = 1.0
- baseband_freq = self[BASEBAND_FREQ_KEY]
- num_lines = self[NUM_LINES_KEY]
- y_divs = self[Y_DIVS_KEY]
- x_divs = self[X_DIVS_KEY]
- #determine best fitting x_per_div
- if self.real: x_width = sample_rate/2.0
- else: x_width = sample_rate/1.0
- x_per_div = common.get_clean_num(x_width/x_divs)
- #update the x grid
- if self.real:
- self.plotter.set_x_grid(
- baseband_freq,
- baseband_freq + sample_rate/2.0,
- x_per_div, True,
- )
- else:
- self.plotter.set_x_grid(
- baseband_freq - sample_rate/2.0,
- baseband_freq + sample_rate/2.0,
- x_per_div, True,
- )
- #update x units
- self.plotter.set_x_label('Frequency', 'Hz')
- #update y grid
- duration = float(num_lines)/frame_rate
- y_per_div = common.get_clean_num(duration/y_divs)
- self.plotter.set_y_grid(0, duration, y_per_div, True)
- #update y units
- self.plotter.set_y_label('Time', 's')
- #update plotter
- self.plotter.update()
diff --git a/gr-wxgui/python/wxgui/waterfallsink2.py b/gr-wxgui/python/wxgui/waterfallsink2.py
deleted file mode 100644
index 0b876fc3e2..0000000000
--- a/gr-wxgui/python/wxgui/waterfallsink2.py
+++ /dev/null
@@ -1,41 +0,0 @@
-#
-# Copyright 2008,2009 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-#
-
-from gnuradio import gr
-
-p = gr.prefs()
-style = p.get_string('wxgui', 'style', 'auto')
-
-if style == 'auto' or style == 'gl':
- try:
- import wx.glcanvas
- from OpenGL.GL import *
- from waterfallsink_gl import waterfall_sink_f, waterfall_sink_c
- except ImportError:
- if style == 'gl':
- raise RuntimeError("Unable to import OpenGL. Are Python wrappers for OpenGL installed?")
- else:
- # Fall backto non-gl sinks
- from waterfallsink_nongl import waterfall_sink_f, waterfall_sink_c
-elif style == 'nongl':
- from waterfallsink_nongl import waterfall_sink_f, waterfall_sink_c
-else:
- raise RuntimeError("Unknown wxgui style")
diff --git a/gr-wxgui/python/wxgui/waterfallsink_gl.py b/gr-wxgui/python/wxgui/waterfallsink_gl.py
deleted file mode 100644
index c763d591b2..0000000000
--- a/gr-wxgui/python/wxgui/waterfallsink_gl.py
+++ /dev/null
@@ -1,176 +0,0 @@
-#
-# Copyright 2008,2009,2012 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-#
-
-##################################################
-# Imports
-##################################################
-import waterfall_window
-import common
-from gnuradio import gr, fft
-from gnuradio import analog
-from gnuradio import blocks
-from gnuradio.fft import logpwrfft
-from pubsub import pubsub
-from constants import *
-
-##################################################
-# Waterfall sink block (wrapper for old wxgui)
-##################################################
-class _waterfall_sink_base(gr.hier_block2, common.wxgui_hb):
- """
- An fft block with real/complex inputs and a gui window.
- """
-
- def __init__(
- self,
- parent,
- baseband_freq=0,
- ref_level=50,
- sample_rate=1,
- fft_size=512,
- fft_rate=waterfall_window.DEFAULT_FRAME_RATE,
- average=False,
- avg_alpha=None,
- title='',
- size=waterfall_window.DEFAULT_WIN_SIZE,
- ref_scale=2.0,
- dynamic_range=80,
- num_lines=256,
- win=None,
- **kwargs #do not end with a comma
- ):
- #ensure avg alpha
- if avg_alpha is None: avg_alpha = 2.0/fft_rate
- #init
- gr.hier_block2.__init__(
- self,
- "waterfall_sink",
- gr.io_signature(1, 1, self._item_size),
- gr.io_signature(0, 0, 0),
- )
- #blocks
- fft = self._fft_chain(
- sample_rate=sample_rate,
- fft_size=fft_size,
- frame_rate=fft_rate,
- ref_scale=ref_scale,
- avg_alpha=avg_alpha,
- average=average,
- win=win,
- )
- msgq = gr.msg_queue(2)
- sink = blocks.message_sink(gr.sizeof_float*fft_size, msgq, True)
- #controller
- self.controller = pubsub()
- self.controller.subscribe(AVERAGE_KEY, fft.set_average)
- self.controller.publish(AVERAGE_KEY, fft.average)
- self.controller.subscribe(AVG_ALPHA_KEY, fft.set_avg_alpha)
- self.controller.publish(AVG_ALPHA_KEY, fft.avg_alpha)
- self.controller.subscribe(SAMPLE_RATE_KEY, fft.set_sample_rate)
- self.controller.publish(SAMPLE_RATE_KEY, fft.sample_rate)
- self.controller.subscribe(DECIMATION_KEY, fft.set_decimation)
- self.controller.publish(DECIMATION_KEY, fft.decimation)
- self.controller.subscribe(FRAME_RATE_KEY, fft.set_vec_rate)
- self.controller.publish(FRAME_RATE_KEY, fft.frame_rate)
- #start input watcher
- common.input_watcher(msgq, self.controller, MSG_KEY)
- #create window
- self.win = waterfall_window.waterfall_window(
- parent=parent,
- controller=self.controller,
- size=size,
- title=title,
- real=self._real,
- fft_size=fft_size,
- num_lines=num_lines,
- baseband_freq=baseband_freq,
- decimation_key=DECIMATION_KEY,
- sample_rate_key=SAMPLE_RATE_KEY,
- frame_rate_key=FRAME_RATE_KEY,
- dynamic_range=dynamic_range,
- ref_level=ref_level,
- average_key=AVERAGE_KEY,
- avg_alpha_key=AVG_ALPHA_KEY,
- msg_key=MSG_KEY,
- )
- common.register_access_methods(self, self.win)
- setattr(self.win, 'set_baseband_freq', getattr(self, 'set_baseband_freq')) #BACKWARDS
- #connect
- self.wxgui_connect(self, fft, sink)
-
- def set_callback(self,callb):
- self.win.set_callback(callb)
-
-class waterfall_sink_f(_waterfall_sink_base):
- _fft_chain = logpwrfft.logpwrfft_f
- _item_size = gr.sizeof_float
- _real = True
-
-class waterfall_sink_c(_waterfall_sink_base):
- _fft_chain = logpwrfft.logpwrfft_c
- _item_size = gr.sizeof_gr_complex
- _real = False
-
-# ----------------------------------------------------------------
-# Standalone test app
-# ----------------------------------------------------------------
-
-import wx
-from gnuradio.wxgui import stdgui2
-
-class test_top_block(stdgui2.std_top_block):
- def __init__(self, frame, panel, vbox, argv):
- stdgui2.std_top_block.__init__(self, frame, panel, vbox, argv)
-
- fft_size = 512
-
- # build our flow graph
- input_rate = 20.000e3
-
- # Generate a complex sinusoid
- self.src1 = analog.sig_source_c(input_rate, analog.GR_SIN_WAVE, 5.75e3, 1000)
- #src1 = analog.sig_source_c(input_rate, analog.GR_CONST_WAVE, 5.75e3, 1000)
-
- # We add these throttle blocks so that this demo doesn't
- # suck down all the CPU available. Normally you wouldn't use these.
- self.thr1 = blocks.throttle(gr.sizeof_gr_complex, input_rate)
-
- sink1 = waterfall_sink_c(panel, title="Complex Data", fft_size=fft_size,
- sample_rate=input_rate, baseband_freq=100e3)
- self.connect(self.src1, self.thr1, sink1)
- vbox.Add(sink1.win, 1, wx.EXPAND)
-
- # generate a real sinusoid
- self.src2 = analog.sig_source_f(input_rate, analog.GR_SIN_WAVE, 5.75e3, 1000)
- self.thr2 = blocks.throttle(gr.sizeof_float, input_rate)
- sink2 = waterfall_sink_f(panel, title="Real Data", fft_size=fft_size,
- sample_rate=input_rate, baseband_freq=100e3)
- self.connect(self.src2, self.thr2, sink2)
- vbox.Add(sink2.win, 1, wx.EXPAND)
-
-
-def main ():
- app = stdgui2.stdapp(test_top_block, "Waterfall Sink Test App")
- app.MainLoop()
-
-if __name__ == '__main__':
- main ()
-
diff --git a/gr-wxgui/python/wxgui/waterfallsink_nongl.py b/gr-wxgui/python/wxgui/waterfallsink_nongl.py
deleted file mode 100644
index 5cfcd24413..0000000000
--- a/gr-wxgui/python/wxgui/waterfallsink_nongl.py
+++ /dev/null
@@ -1,434 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2003-2005,2007,2008,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.
-#
-
-from gnuradio import gr, gru, fft, filter
-from gnuradio import blocks
-from gnuradio import analog
-from gnuradio.wxgui import stdgui2
-from gnuradio.filter import window
-import wx
-import gnuradio.wxgui.plot as plot
-import numpy
-import os
-import math
-
-default_fftsink_size = (640,240)
-default_fft_rate = gr.prefs().get_long('wxgui', 'fft_rate', 15)
-
-class waterfall_sink_base(object):
- def __init__(self, input_is_real=False, baseband_freq=0,
- sample_rate=1, fft_size=512,
- fft_rate=default_fft_rate,
- average=False, avg_alpha=None, title=''):
-
- # initialize common attributes
- self.baseband_freq = baseband_freq
- self.sample_rate = sample_rate
- self.fft_size = fft_size
- self.fft_rate = fft_rate
- self.average = average
- if avg_alpha is None:
- self.avg_alpha = 2.0 / fft_rate
- else:
- self.avg_alpha = avg_alpha
- self.title = title
- self.input_is_real = input_is_real
- self.msgq = gr.msg_queue(2) # queue up to 2 messages
-
- def set_average(self, average):
- self.average = average
- if average:
- self.avg.set_taps(self.avg_alpha)
- else:
- self.avg.set_taps(1.0)
-
- def set_avg_alpha(self, avg_alpha):
- self.avg_alpha = avg_alpha
-
- def set_baseband_freq(self, baseband_freq):
- self.baseband_freq = baseband_freq
-
- def set_sample_rate(self, sample_rate):
- self.sample_rate = sample_rate
- self._set_n()
-
- def _set_n(self):
- self.one_in_n.set_n(max(1, int(self.sample_rate/self.fft_size/self.fft_rate)))
-
- def set_callback(self, callb):
- return
-
-class waterfall_sink_f(gr.hier_block2, waterfall_sink_base):
- def __init__(self, parent, baseband_freq=0,
- y_per_div=10, ref_level=50, sample_rate=1, fft_size=512,
- fft_rate=default_fft_rate, average=False, avg_alpha=None,
- title='', size=default_fftsink_size, **kwargs):
-
- gr.hier_block2.__init__(self, "waterfall_sink_f",
- gr.io_signature(1, 1, gr.sizeof_float),
- gr.io_signature(0,0,0))
-
- waterfall_sink_base.__init__(self, input_is_real=True, baseband_freq=baseband_freq,
- sample_rate=sample_rate, fft_size=fft_size,
- fft_rate=fft_rate,
- average=average, avg_alpha=avg_alpha, title=title)
-
- self.s2p = blocks.stream_to_vector(gr.sizeof_float, self.fft_size)
- self.one_in_n = blocks.keep_one_in_n(gr.sizeof_float * self.fft_size,
- max(1, int(self.sample_rate/self.fft_size/self.fft_rate)))
-
- mywindow = window.blackmanharris(self.fft_size)
- self.fft = fft.fft_vfc(self.fft_size, True, mywindow)
- self.c2mag = blocks.complex_to_mag(self.fft_size)
- self.avg = filter.single_pole_iir_filter_ff(1.0, self.fft_size)
- self.log = blocks.nlog10_ff(20, self.fft_size, -20*math.log10(self.fft_size))
- self.sink = blocks.message_sink(gr.sizeof_float * self.fft_size, self.msgq, True)
- self.connect(self, self.s2p, self.one_in_n, self.fft, self.c2mag, self.avg, self.log, self.sink)
-
- self.win = waterfall_window(self, parent, size=size)
- self.set_average(self.average)
-
-
-class waterfall_sink_c(gr.hier_block2, waterfall_sink_base):
- def __init__(self, parent, baseband_freq=0,
- y_per_div=10, ref_level=50, sample_rate=1, fft_size=512,
- fft_rate=default_fft_rate, average=False, avg_alpha=None,
- title='', size=default_fftsink_size, **kwargs):
-
- gr.hier_block2.__init__(self, "waterfall_sink_f",
- gr.io_signature(1, 1, gr.sizeof_gr_complex),
- gr.io_signature(0,0,0))
-
- waterfall_sink_base.__init__(self, input_is_real=False, baseband_freq=baseband_freq,
- sample_rate=sample_rate, fft_size=fft_size,
- fft_rate=fft_rate,
- average=average, avg_alpha=avg_alpha, title=title)
-
- self.s2p = blocks.stream_to_vector(gr.sizeof_gr_complex, self.fft_size)
- self.one_in_n = blocks.keep_one_in_n(gr.sizeof_gr_complex * self.fft_size,
- max(1, int(self.sample_rate/self.fft_size/self.fft_rate)))
-
- mywindow = window.blackmanharris(self.fft_size)
- self.fft = fft.fft_vcc(self.fft_size, True, mywindow)
- self.c2mag = blocks.complex_to_mag(self.fft_size)
- self.avg = filter.single_pole_iir_filter_ff(1.0, self.fft_size)
- self.log = blocks.nlog10_ff(20, self.fft_size, -20*math.log10(self.fft_size))
- self.sink = blocks.message_sink(gr.sizeof_float * self.fft_size, self.msgq, True)
- self.connect(self, self.s2p, self.one_in_n, self.fft, self.c2mag, self.avg, self.log, self.sink)
-
- self.win = waterfall_window(self, parent, size=size)
- self.set_average(self.average)
-
-
-# ------------------------------------------------------------------------
-
-myDATA_EVENT = wx.NewEventType()
-EVT_DATA_EVENT = wx.PyEventBinder (myDATA_EVENT, 0)
-
-
-class DataEvent(wx.PyEvent):
- def __init__(self, data):
- wx.PyEvent.__init__(self)
- self.SetEventType (myDATA_EVENT)
- self.data = data
-
- def Clone (self):
- self.__class__ (self.GetId())
-
-class input_watcher (gru.msgq_runner):
- def __init__ (self, msgq, fft_size, event_receiver, **kwds):
- self.fft_size = fft_size
- self.event_receiver = event_receiver
- gru.msgq_runner.__init__(self, msgq, self.handle_msg)
-
- def handle_msg(self, msg):
- itemsize = int(msg.arg1())
- nitems = int(msg.arg2())
-
- s = msg.to_string() # get the body of the msg as a string
-
- # There may be more than one FFT frame in the message.
- # If so, we take only the last one
- if nitems > 1:
- start = itemsize * (nitems - 1)
- s = s[start:start+itemsize]
-
- complex_data = numpy.fromstring (s, numpy.float32)
- de = DataEvent (complex_data)
- wx.PostEvent (self.event_receiver, de)
- del de
-
-class waterfall_window (wx.Panel):
- def __init__ (self, fftsink, parent, id = -1,
- pos = wx.DefaultPosition, size = wx.DefaultSize,
- style = wx.DEFAULT_FRAME_STYLE, name = ""):
- wx.Panel.__init__(self, parent, id, pos, size, style, name)
- self.set_baseband_freq = fftsink.set_baseband_freq
- self.fftsink = fftsink
- self.bm = wx.EmptyBitmap(self.fftsink.fft_size, 300, -1)
-
- self.scale_factor = 5.0 # FIXME should autoscale, or set this
-
- dc1 = wx.MemoryDC()
- dc1.SelectObject(self.bm)
- dc1.Clear()
-
- self.pens = self.make_pens()
-
- wx.EVT_PAINT( self, self.OnPaint )
- wx.EVT_CLOSE (self, self.on_close_window)
- EVT_DATA_EVENT (self, self.set_data)
-
- self.build_popup_menu()
-
- wx.EVT_CLOSE (self, self.on_close_window)
- self.Bind(wx.EVT_RIGHT_UP, self.on_right_click)
-
- self.input_watcher = input_watcher(fftsink.msgq, fftsink.fft_size, self)
-
-
- def on_close_window (self, event):
- print "waterfall_window: on_close_window"
- self.keep_running = False
-
- def const_list(self,const,len):
- return [const] * len
-
- def make_colormap(self):
- r = []
- r.extend(self.const_list(0,96))
- r.extend(range(0,255,4))
- r.extend(self.const_list(255,64))
- r.extend(range(255,128,-4))
-
- g = []
- g.extend(self.const_list(0,32))
- g.extend(range(0,255,4))
- g.extend(self.const_list(255,64))
- g.extend(range(255,0,-4))
- g.extend(self.const_list(0,32))
-
- b = range(128,255,4)
- b.extend(self.const_list(255,64))
- b.extend(range(255,0,-4))
- b.extend(self.const_list(0,96))
- return (r,g,b)
-
- def make_pens(self):
- (r,g,b) = self.make_colormap()
- pens = []
- for i in range(0,256):
- colour = wx.Colour(r[i], g[i], b[i])
- pens.append( wx.Pen(colour, 2, wx.SOLID))
- return pens
-
- def OnPaint(self, event):
- dc = wx.PaintDC(self)
- self.DoDrawing(dc)
-
- def DoDrawing(self, dc=None):
- if dc is None:
- dc = wx.ClientDC(self)
- dc.DrawBitmap(self.bm, 0, 0, False )
-
-
- def const_list(self,const,len):
- a = [const]
- for i in range(1,len):
- a.append(const)
- return a
-
-
- def set_data (self, evt):
- dB = evt.data
- L = len (dB)
-
- dc1 = wx.MemoryDC()
- dc1.SelectObject(self.bm)
- dc1.Blit(0,1,self.fftsink.fft_size,300,dc1,0,0,wx.COPY,False,-1,-1)
-
- x = max(abs(self.fftsink.sample_rate), abs(self.fftsink.baseband_freq))
- if x >= 1e9:
- sf = 1e-9
- units = "GHz"
- elif x >= 1e6:
- sf = 1e-6
- units = "MHz"
- else:
- sf = 1e-3
- units = "kHz"
-
-
- if self.fftsink.input_is_real: # only plot 1/2 the points
- d_max = L/2
- p_width = 2
- else:
- d_max = L/2
- p_width = 1
-
- scale_factor = self.scale_factor
- if self.fftsink.input_is_real: # real fft
- for x_pos in range(0, d_max):
- value = int(dB[x_pos] * scale_factor)
- value = min(255, max(0, value))
- dc1.SetPen(self.pens[value])
- dc1.DrawRectangle(x_pos*p_width, 0, p_width, 2)
- else: # complex fft
- for x_pos in range(0, d_max): # positive freqs
- value = int(dB[x_pos] * scale_factor)
- value = min(255, max(0, value))
- dc1.SetPen(self.pens[value])
- dc1.DrawRectangle(x_pos*p_width + d_max, 0, p_width, 2)
- for x_pos in range(0 , d_max): # negative freqs
- value = int(dB[x_pos+d_max] * scale_factor)
- value = min(255, max(0, value))
- dc1.SetPen(self.pens[value])
- dc1.DrawRectangle(x_pos*p_width, 0, p_width, 2)
-
- del dc1
- self.DoDrawing (None)
-
- def on_average(self, evt):
- # print "on_average"
- self.fftsink.set_average(evt.IsChecked())
-
- def on_right_click(self, event):
- menu = self.popup_menu
- for id, pred in self.checkmarks.items():
- item = menu.FindItemById(id)
- item.Check(pred())
- self.PopupMenu(menu, event.GetPosition())
-
-
- def build_popup_menu(self):
- self.id_incr_ref_level = wx.NewId()
- self.id_decr_ref_level = wx.NewId()
- self.id_incr_y_per_div = wx.NewId()
- self.id_decr_y_per_div = wx.NewId()
- self.id_y_per_div_1 = wx.NewId()
- self.id_y_per_div_2 = wx.NewId()
- self.id_y_per_div_5 = wx.NewId()
- self.id_y_per_div_10 = wx.NewId()
- self.id_y_per_div_20 = wx.NewId()
- self.id_average = wx.NewId()
-
- self.Bind(wx.EVT_MENU, self.on_average, id=self.id_average)
- #self.Bind(wx.EVT_MENU, self.on_incr_ref_level, id=self.id_incr_ref_level)
- #self.Bind(wx.EVT_MENU, self.on_decr_ref_level, id=self.id_decr_ref_level)
- #self.Bind(wx.EVT_MENU, self.on_incr_y_per_div, id=self.id_incr_y_per_div)
- #self.Bind(wx.EVT_MENU, self.on_decr_y_per_div, id=self.id_decr_y_per_div)
- #self.Bind(wx.EVT_MENU, self.on_y_per_div, id=self.id_y_per_div_1)
- #self.Bind(wx.EVT_MENU, self.on_y_per_div, id=self.id_y_per_div_2)
- #self.Bind(wx.EVT_MENU, self.on_y_per_div, id=self.id_y_per_div_5)
- #self.Bind(wx.EVT_MENU, self.on_y_per_div, id=self.id_y_per_div_10)
- #self.Bind(wx.EVT_MENU, self.on_y_per_div, id=self.id_y_per_div_20)
-
-
- # make a menu
- menu = wx.Menu()
- self.popup_menu = menu
- menu.AppendCheckItem(self.id_average, "Average")
- # menu.Append(self.id_incr_ref_level, "Incr Ref Level")
- # menu.Append(self.id_decr_ref_level, "Decr Ref Level")
- # menu.Append(self.id_incr_y_per_div, "Incr dB/div")
- # menu.Append(self.id_decr_y_per_div, "Decr dB/div")
- # menu.AppendSeparator()
- # we'd use RadioItems for these, but they're not supported on Mac
- #menu.AppendCheckItem(self.id_y_per_div_1, "1 dB/div")
- #menu.AppendCheckItem(self.id_y_per_div_2, "2 dB/div")
- #menu.AppendCheckItem(self.id_y_per_div_5, "5 dB/div")
- #menu.AppendCheckItem(self.id_y_per_div_10, "10 dB/div")
- #menu.AppendCheckItem(self.id_y_per_div_20, "20 dB/div")
-
- self.checkmarks = {
- self.id_average : lambda : self.fftsink.average
- #self.id_y_per_div_1 : lambda : self.fftsink.y_per_div == 1,
- #self.id_y_per_div_2 : lambda : self.fftsink.y_per_div == 2,
- #self.id_y_per_div_5 : lambda : self.fftsink.y_per_div == 5,
- #self.id_y_per_div_10 : lambda : self.fftsink.y_per_div == 10,
- #self.id_y_per_div_20 : lambda : self.fftsink.y_per_div == 20,
- }
-
-
-def next_up(v, seq):
- """
- Return the first item in seq that is > v.
- """
- for s in seq:
- if s > v:
- return s
- return v
-
-def next_down(v, seq):
- """
- Return the last item in seq that is < v.
- """
- rseq = list(seq[:])
- rseq.reverse()
-
- for s in rseq:
- if s < v:
- return s
- return v
-
-
-# ----------------------------------------------------------------
-# Standalone test app
-# ----------------------------------------------------------------
-
-class test_top_block (stdgui2.std_top_block):
- def __init__(self, frame, panel, vbox, argv):
- stdgui2.std_top_block.__init__(self, frame, panel, vbox, argv)
-
- fft_size = 512
-
- # build our flow graph
- input_rate = 20.000e3
-
- # Generate a complex sinusoid
- self.src1 = analog.sig_source_c(input_rate, analog.GR_SIN_WAVE, 5.75e3, 1000)
- #src1 = analog.sig_source_c(input_rate, analog.GR_CONST_WAVE, 5.75e3, 1000)
-
- # We add these throttle blocks so that this demo doesn't
- # suck down all the CPU available. Normally you wouldn't use these.
- self.thr1 = blocks.throttle(gr.sizeof_gr_complex, input_rate)
-
- sink1 = waterfall_sink_c(panel, title="Complex Data", fft_size=fft_size,
- sample_rate=input_rate, baseband_freq=100e3)
- self.connect(self.src1, self.thr1, sink1)
- vbox.Add(sink1.win, 1, wx.EXPAND)
-
- # generate a real sinusoid
- self.src2 = analog.sig_source_f(input_rate, analog.GR_SIN_WAVE, 5.75e3, 1000)
- self.thr2 = blocks.throttle(gr.sizeof_float, input_rate)
- sink2 = waterfall_sink_f(panel, title="Real Data", fft_size=fft_size,
- sample_rate=input_rate, baseband_freq=100e3)
- self.connect(self.src2, self.thr2, sink2)
- vbox.Add(sink2.win, 1, wx.EXPAND)
-
-
-def main ():
- app = stdgui2.stdapp(test_top_block, "Waterfall Sink Test App")
- app.MainLoop()
-
-if __name__ == '__main__':
- main()
diff --git a/gr-wxgui/swig/CMakeLists.txt b/gr-wxgui/swig/CMakeLists.txt
deleted file mode 100644
index 4eb11633a7..0000000000
--- a/gr-wxgui/swig/CMakeLists.txt
+++ /dev/null
@@ -1,55 +0,0 @@
-# Copyright 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.
-
-########################################################################
-# Setup swig generation
-########################################################################
-include(GrPython)
-include(GrSwig)
-
-set(GR_SWIG_INCLUDE_DIRS
- ${CMAKE_CURRENT_BINARY_DIR}/../include
- ${GR_WXGUI_INCLUDE_DIRS}
- ${GNURADIO_RUNTIME_SWIG_INCLUDE_DIRS}
- ${Boost_INCLUDE_DIRS}
-)
-
-if(ENABLE_GR_CTRLPORT)
- list(APPEND GR_SWIG_FLAGS "-DGR_CTRLPORT")
-endif(ENABLE_GR_CTRLPORT)
-
-set(GR_SWIG_DOC_FILE ${CMAKE_CURRENT_BINARY_DIR}/wxgui_swig_doc.i)
-set(GR_SWIG_DOC_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/../include/gnuradio/wxgui)
-set(GR_SWIG_DOCS_TARGET_DEPS runtime_swig_swig_doc)
-set(GR_SWIG_TARGET_DEPS wxgui_generated_includes)
-set(GR_SWIG_LIBRARIES gnuradio-wxgui)
-
-GR_SWIG_MAKE(wxgui_swig wxgui_swig.i)
-
-GR_SWIG_INSTALL(
- TARGETS wxgui_swig
- DESTINATION ${GR_PYTHON_DIR}/gnuradio/wxgui
-)
-
-install(
- FILES
- wxgui_swig.i
- ${CMAKE_CURRENT_BINARY_DIR}/wxgui_swig_doc.i
- DESTINATION ${GR_INCLUDE_DIR}/gnuradio/swig
-)
diff --git a/gr-wxgui/swig/wxgui_swig.i b/gr-wxgui/swig/wxgui_swig.i
deleted file mode 100644
index f370da407a..0000000000
--- a/gr-wxgui/swig/wxgui_swig.i
+++ /dev/null
@@ -1,43 +0,0 @@
-/* -*- c++ -*- */
-/*
- * Copyright 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.
- */
-
-#define WXGUI_API
-
-%include "gnuradio.i"
-
-//load generated python docstrings
-%include "wxgui_swig_doc.i"
-
-%include "gnuradio/wxgui/trigger_mode.h"
-
-%{
-#include "gnuradio/wxgui/oscope_sink_x.h"
-#include "gnuradio/wxgui/histo_sink_f.h"
-#include "gnuradio/wxgui/oscope_sink_f.h"
-%}
-
-%include "gnuradio/wxgui/oscope_sink_x.h"
-%include "gnuradio/wxgui/histo_sink_f.h"
-%include "gnuradio/wxgui/oscope_sink_f.h"
-
-GR_SWIG_BLOCK_MAGIC2(wxgui, histo_sink_f);
-GR_SWIG_BLOCK_MAGIC2(wxgui, oscope_sink_f);
diff --git a/grc/blocks/CMakeLists.txt b/grc/blocks/CMakeLists.txt
index eaa57970a6..d46b1febbe 100644
--- a/grc/blocks/CMakeLists.txt
+++ b/grc/blocks/CMakeLists.txt
@@ -22,6 +22,19 @@ include(GrPython)
file(GLOB xml_files "*.xml")
+macro(REPLACE_IN_FILE _xml_block match replace)
+ set(xml_block_src "${CMAKE_CURRENT_SOURCE_DIR}/${_xml_block}")
+ set(xml_block "${CMAKE_CURRENT_BINARY_DIR}/${_xml_block}")
+
+ list(REMOVE_ITEM xml_files "${xml_block_src}")
+ file(READ "${xml_block_src}" xml_block_src_text)
+ string(REPLACE "${match}" "${replace}"
+ xml_block_text "${xml_block_src_text}")
+ file(WRITE "${xml_block}" "${xml_block_text}")
+
+ list(APPEND generated_xml_files "${xml_block}")
+endmacro()
+
macro(GEN_BLOCK_XML _generator _xml_block)
set(generator ${CMAKE_CURRENT_SOURCE_DIR}/${_generator})
set(xml_block ${CMAKE_CURRENT_BINARY_DIR}/${_xml_block})
@@ -30,9 +43,13 @@ macro(GEN_BLOCK_XML _generator _xml_block)
DEPENDS ${generator} OUTPUT ${xml_block}
COMMAND ${PYTHON_EXECUTABLE} ${generator} ${xml_block}
)
-endmacro(GEN_BLOCK_XML)
+endmacro()
+
+GEN_BLOCK_XML(variable_struct.xml.py variable_struct.xml)
-GEN_BLOCK_XML(variable_struct.xml.py variable_struct.xml)
+if(DESIRED_QT_VERSION EQUAL 4)
+ REPLACE_IN_FILE(options.xml PyQt5 PyQt4)
+endif()
add_custom_target(grc_generated_xml ALL DEPENDS ${generated_xml_files})
diff --git a/grc/blocks/options.xml b/grc/blocks/options.xml
index 55f411884d..252a0b2e2d 100644
--- a/grc/blocks/options.xml
+++ b/grc/blocks/options.xml
@@ -11,12 +11,8 @@
<key>options</key>
<import>from gnuradio import gr</import>
<import>from gnuradio.filter import firdes</import>
- <import>#if $generate_options() == 'wx_gui'
-from grc_gnuradio import wxgui as grc_wxgui
-import wx
-#end if
-#if $generate_options() == 'qt_gui'
-from PyQt4 import Qt
+ <import>#if $generate_options() == 'qt_gui'
+from PyQt5 import Qt
import sys
#end if
#if not $generate_options().startswith('hb')
@@ -65,10 +61,6 @@ else: self.stop(); self.wait()</callback>
<key>qt_gui</key>
</option>
<option>
- <name>WX GUI</name>
- <key>wx_gui</key>
- </option>
- <option>
<name>No GUI</name>
<key>no_gui</key>
</option>
@@ -108,17 +100,7 @@ else: self.stop(); self.wait()</callback>
<key>run</key>
<value>True</value>
<type>bool</type>
- <hide>
-#if $generate_options() in ('qt_gui', 'wx_gui')
- #if $run()
- part
- #else
- none
- #end if
-#else
- all
-#end if
- </hide>
+ <hide>#if $generate_options() == 'qt_gui' then ('part' if $run() else 'none') else 'all'#</hide>
<option>
<name>Autostart</name>
<key>True</key>
@@ -133,26 +115,14 @@ else: self.stop(); self.wait()</callback>
<key>max_nouts</key>
<value>0</value>
<type>int</type>
- <hide>#if $generate_options().startswith('hb')
-all#slurp
-#elif $max_nouts()
-none#slurp
-#else
-part#slurp
-#end if</hide>
+ <hide>#if $generate_options().startswith('hb') then 'all' else ('none' if $max_nouts() else 'part')#</hide>
</param>
<param>
<name>Realtime Scheduling</name>
<key>realtime_scheduling</key>
<value></value>
<type>enum</type>
- <hide>#if $generate_options().startswith('hb')
-all#slurp
-#elif $realtime_scheduling()
-none#slurp
-#else
-part#slurp
-#end if</hide>
+ <hide>#if $generate_options().startswith('hb') then 'all' else ('none' if $realtime_scheduling() else 'part')#</hide>
<option>
<name>Off</name>
<key></key>
@@ -167,17 +137,7 @@ part#slurp
<key>qt_qss_theme</key>
<value></value>
<type>file_open</type>
- <hide>
-#if $generate_options() in ('qt_gui',)
- #if $qt_qss_theme()
- none
- #else
- part
- #end if
-#else
- all
-#end if
-</hide>
+ <hide>#if $generate_options() == 'qt_gui' then ('none' if $qt_qss_theme() else 'part') else 'all'#</hide>
</param>
<param>
<name>Thread-safe setters</name>
@@ -200,11 +160,7 @@ part#slurp
<key>run_command</key>
<value>{python} -u {filename}</value>
<type>string</type>
- <hide>#if $generate_options().startswith('hb')
-all#slurp
-#else
-part#slurp
-#end if</hide>
+ <hide>#if $generate_options().startswith('hb') then 'all' else 'part'</hide>
<tab>Advanced</tab>
</param>
<param>
diff --git a/grc/core/Block.py b/grc/core/Block.py
index e7e4a8215a..9a1d72c2de 100644
--- a/grc/core/Block.py
+++ b/grc/core/Block.py
@@ -31,7 +31,7 @@ from Cheetah.Template import Template
from . import utils
from . Constants import (
- BLOCK_FLAG_NEED_QT_GUI, BLOCK_FLAG_NEED_WX_GUI,
+ BLOCK_FLAG_NEED_QT_GUI,
ADVANCED_PARAM_TAB,
BLOCK_FLAG_THROTTLE, BLOCK_FLAG_DISABLE_BYPASS,
BLOCK_FLAG_DEPRECATED,
@@ -245,7 +245,6 @@ class Block(Element):
self.add_error_message("Can't generate this block in mode: {} ".format(
repr(current_generate_option)))
- check_generate_mode('WX GUI', BLOCK_FLAG_NEED_WX_GUI, ('wx_gui',))
check_generate_mode('QT GUI', BLOCK_FLAG_NEED_QT_GUI, ('qt_gui', 'hb_qt_gui'))
def _validate_var_value(self):
diff --git a/grc/core/Constants.py b/grc/core/Constants.py
index 394150529b..caf301be60 100644
--- a/grc/core/Constants.py
+++ b/grc/core/Constants.py
@@ -52,7 +52,6 @@ DEFAULT_DOMAIN = GR_STREAM_DOMAIN
BLOCK_FLAG_THROTTLE = 'throttle'
BLOCK_FLAG_DISABLE_BYPASS = 'disable_bypass'
BLOCK_FLAG_NEED_QT_GUI = 'need_qt_gui'
-BLOCK_FLAG_NEED_WX_GUI = 'need_wx_gui'
BLOCK_FLAG_DEPRECATED = 'deprecated'
# File creation modes
@@ -67,7 +66,7 @@ PARAM_TYPE_NAMES = (
'hex', 'string', 'bool',
'file_open', 'file_save', '_multiline', '_multiline_python_external',
'id', 'stream_id',
- 'grid_pos', 'notebook', 'gui_hint',
+ 'gui_hint',
'import',
)
diff --git a/grc/core/Param.py b/grc/core/Param.py
index 6d947c3615..31393b1d79 100644
--- a/grc/core/Param.py
+++ b/grc/core/Param.py
@@ -29,7 +29,7 @@ from . import Constants
from .Element import Element, nop_write
# Blacklist certain ids, its not complete, but should help
-ID_BLACKLIST = ['self', 'options', 'gr', 'blks2', 'wxgui', 'wx', 'math', 'forms', 'firdes'] + dir(builtins)
+ID_BLACKLIST = ['self', 'options', 'gr', 'blks2', 'math', 'firdes'] + dir(builtins)
try:
from gnuradio import gr
ID_BLACKLIST.extend(attr for attr in dir(gr.top_block()) if not attr.startswith('_'))
@@ -155,9 +155,6 @@ class Param(Element):
return 'part'
except:
pass
- # Hide empty grid positions
- if self.key in ('grid_pos', 'notebook') and not self.get_value():
- return 'part'
return hide
def validate(self):
@@ -352,65 +349,6 @@ class Param(Element):
return self._ws
return GuiHint(widget_str)
#########################
- # Grid Position Type
- #########################
- elif t == 'grid_pos':
- if not v:
- # Allow for empty grid pos
- return ''
- e = self.parent_flowgraph.evaluate(v)
- if not isinstance(e, (list, tuple)) or len(e) != 4 or not all([isinstance(ei, int) for ei in e]):
- raise Exception('A grid position must be a list of 4 integers.')
- row, col, row_span, col_span = e
- # Check row, col
- if row < 0 or col < 0:
- raise Exception('Row and column must be non-negative.')
- # Check row span, col span
- if row_span <= 0 or col_span <= 0:
- raise Exception('Row and column span must be greater than zero.')
- # Get hostage cell parent
- try:
- my_parent = self.parent.get_param('notebook').evaluate()
- except:
- my_parent = ''
- # Calculate hostage cells
- for r in range(row_span):
- for c in range(col_span):
- self._hostage_cells.append((my_parent, (row+r, col+c)))
- # Avoid collisions
- params = [p for p in self.get_all_params('grid_pos') if p is not self]
- for param in params:
- for parent, cell in param._hostage_cells:
- if (parent, cell) in self._hostage_cells:
- raise Exception('Another graphical element is using parent "{}", cell "{}".'.format(str(parent), str(cell)))
- return e
- #########################
- # Notebook Page Type
- #########################
- elif t == 'notebook':
- if not v:
- # Allow for empty notebook
- return ''
-
- # Get a list of all notebooks
- notebook_blocks = [b for b in self.parent_flowgraph.get_enabled_blocks() if b.key == 'notebook']
- # Check for notebook param syntax
- try:
- notebook_id, page_index = map(str.strip, v.split(','))
- except:
- raise Exception('Bad notebook page format.')
- # Check that the notebook id is valid
- try:
- notebook_block = [b for b in notebook_blocks if b.get_id() == notebook_id][0]
- except:
- raise Exception('Notebook id "{}" is not an existing notebook id.'.format(notebook_id))
-
- # Check that page index exists
- if int(page_index) not in range(len(notebook_block.get_param('labels').evaluate())):
- raise Exception('Page index "{}" is not a valid index number.'.format(page_index))
- return notebook_id, page_index
-
- #########################
# Import Type
#########################
elif t == 'import':
diff --git a/grc/core/generator/Generator.py b/grc/core/generator/Generator.py
index f042b4963c..8b073293ce 100644
--- a/grc/core/generator/Generator.py
+++ b/grc/core/generator/Generator.py
@@ -136,10 +136,6 @@ class TopBlockGenerator(object):
def _get_block_sort_text(block):
code = block.get_make().replace(block.get_id(), ' ')
try:
- code += block.get_param('notebook').get_value() # Older gui markup w/ wxgui
- except:
- pass
- try:
code += block.get_param('gui_hint').get_value() # Newer gui markup w/ qtgui
except:
pass
diff --git a/grc/core/generator/flow_graph.tmpl b/grc/core/generator/flow_graph.tmpl
index fd5546e459..b8913bb087 100644
--- a/grc/core/generator/flow_graph.tmpl
+++ b/grc/core/generator/flow_graph.tmpl
@@ -35,9 +35,13 @@ $DIVIDER
import threading
#end if
+#if $generate_options == 'qt_gui'
+from distutils.version import StrictVersion
+#end if
+
## Call XInitThreads as the _very_ first thing.
## After some Qt import, it's too late
-#if $generate_options in ('wx_gui', 'qt_gui')
+#if $generate_options == 'qt_gui'
if __name__ == '__main__':
import ctypes
import sys
@@ -71,29 +75,11 @@ $imp
##Create Class
## Write the class declaration for a top or hier block.
## The parameter names are the arguments to __init__.
-## Determine the absolute icon path (wx gui only).
## Setup the IO signature (hier block only).
########################################################
#set $class_name = $flow_graph.get_option('id')
#set $param_str = ', '.join(['self'] + ['%s=%s'%(param.get_id(), param.get_make()) for param in $parameters])
-#if $generate_options == 'wx_gui'
- #from gi.repository import Gtk
- #try:
- #set $icon = Gtk.IconTheme().load_icon('gnuradio-grc', 256, 0)
- #except:
- #set $icon = ''
- #end try
-
-
-class $(class_name)(grc_wxgui.top_block_gui):
-
- def __init__($param_str):
- grc_wxgui.top_block_gui.__init__(self, title="$title")
- #if $icon
- _icon_path = "$icon.get_filename()"
- self.SetIcon(wx.Icon(_icon_path, wx.BITMAP_TYPE_ANY))
- #end if
-#elif $generate_options == 'qt_gui'
+#if $generate_options == 'qt_gui'
class $(class_name)(gr.top_block, Qt.QWidget):
@@ -119,7 +105,14 @@ class $(class_name)(gr.top_block, Qt.QWidget):
self.top_layout.addLayout(self.top_grid_layout)
self.settings = Qt.QSettings("GNU Radio", "$class_name")
- self.restoreGeometry(self.settings.value("geometry").toByteArray())
+
+ try:
+ if StrictVersion(Qt.qVersion()) < StrictVersion("5.0.0"):
+ self.restoreGeometry(self.settings.value("geometry").toByteArray())
+ else:
+ self.restoreGeometry(self.settings.value("geometry"))
+ except:
+ pass
#elif $generate_options == 'no_gui'
@@ -359,20 +352,8 @@ def main(top_block_cls=$(class_name), options=None):
print "Error: failed to enable real-time scheduling."
#end if
- #if $generate_options == 'wx_gui'
- tb = top_block_cls($(', '.join($params_eq_list)))
- #if $flow_graph.get_option('max_nouts')
- tb.Run($flow_graph.get_option('run'), $flow_graph.get_option('max_nouts'))
- #else
- tb.Start($flow_graph.get_option('run'))
- #for $m in $monitors
- (tb.$m.get_id()).start()
- #end for
- tb.Wait()
- #end if
- #elif $generate_options == 'qt_gui'
- from distutils.version import StrictVersion
- if StrictVersion(Qt.qVersion()) >= StrictVersion("4.5.0"):
+ #if $generate_options == 'qt_gui'
+ if StrictVersion("4.5.0") <= StrictVersion(Qt.qVersion()) < StrictVersion("5.0.0"):
style = gr.prefs().get_string('qtgui', 'style', 'raster')
Qt.QApplication.setGraphicsSystem(style)
qapp = Qt.QApplication(sys.argv)
@@ -393,7 +374,7 @@ def main(top_block_cls=$(class_name), options=None):
def quitting():
tb.stop()
tb.wait()
- qapp.connect(qapp, Qt.SIGNAL("aboutToQuit()"), quitting)
+ qapp.aboutToQuit.connect(quitting)
#for $m in $monitors
if 'en' in $m.params:
if $m.params['en'].get_value():
diff --git a/grc/gui/Colors.py b/grc/gui/Colors.py
index acc7f22c44..01c461ada5 100644
--- a/grc/gui/Colors.py
+++ b/grc/gui/Colors.py
@@ -96,7 +96,6 @@ SHORT_VECTOR_COLOR_SPEC = _color_parse('#CCCC33')
BYTE_VECTOR_COLOR_SPEC = _color_parse('#CC66CC')
PARAM_ENTRY_COLORS = {
-
# Number types
'complex': COMPLEX_COLOR_SPEC,
'real': FLOAT_COLOR_SPEC,
@@ -115,8 +114,6 @@ PARAM_ENTRY_COLORS = {
'string': BYTE_VECTOR_COLOR_SPEC,
'id': ID_COLOR_SPEC,
'stream_id': ID_COLOR_SPEC,
- 'grid_pos': INT_VECTOR_COLOR_SPEC,
- 'notebook': INT_VECTOR_COLOR_SPEC,
'raw': WILDCARD_COLOR_SPEC,
}
diff --git a/grc/gui/MainWindow.py b/grc/gui/MainWindow.py
index 61144386b4..3d4bf10308 100644
--- a/grc/gui/MainWindow.py
+++ b/grc/gui/MainWindow.py
@@ -179,26 +179,35 @@ class MainWindow(Gtk.Window):
# to be hidden as well.
if panel == self.BLOCKS:
- self.btwin.set_visible(visibility)
+ if visibility:
+ self.btwin.show()
+ else:
+ self.btwin.hide()
elif panel == self.CONSOLE:
- self.console_window.set_visible(visibility)
+ if visibility:
+ self.console_window.show()
+ else:
+ self.console_window.hide()
elif panel == self.VARIABLES:
- self.vars.set_visible(visibility)
+ if visibility:
+ self.vars.show()
+ else:
+ self.vars.hide()
else:
return
if self.variable_panel_sidebar:
# If both the variable editor and block panels are hidden, hide the right container
- if not self.btwin.get_visible() and not self.vars.get_visible():
+ if not (self.btwin.get_property('visible')) and not (self.vars.get_property('visible')):
self.right.hide()
else:
self.right.show()
else:
- if not self.btwin.get_visible():
+ if not (self.btwin.get_property('visible')):
self.right.hide()
else:
self.right.show()
- if not self.vars.get_visible() and not self.console_window.get_visible():
+ if not (self.vars.get_property('visible')) and not (self.console_window.get_property('visible')):
self.left_subpanel.hide()
else:
self.left_subpanel.show()