diff options
author | Johnathan Corgan <johnathan@corganlabs.com> | 2015-04-14 07:52:34 -0700 |
---|---|---|
committer | Johnathan Corgan <johnathan@corganlabs.com> | 2015-04-14 07:52:34 -0700 |
commit | be78ddac890210e480980f95b01ffe617c4dc714 (patch) | |
tree | 9bf545893f257a108b619dcc5f548684a5be4b15 | |
parent | 105096dced87844016ce93a00b971047e7416daa (diff) | |
parent | c3bc71faa7430f4117adf7c2bb832e4bdd1f5c73 (diff) |
Merge branch 'master' into next
26 files changed, 5982 insertions, 81 deletions
diff --git a/docs/doxygen/Doxyfile.in b/docs/doxygen/Doxyfile.in index 9a2ce07958..c5795dfa1f 100644 --- a/docs/doxygen/Doxyfile.in +++ b/docs/doxygen/Doxyfile.in @@ -183,8 +183,12 @@ STRIP_FROM_INC_PATH = @CMAKE_SOURCE_DIR@/gnuradio-runtime/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 \ - @CMAKE_BINARY_DIR@/volk/include + @CMAKE_BINARY_DIR@/volk/include \ + @CMAKE_SOURCE_DIR@/volk/tmpl \ + @CMAKE_BINARY_DIR@/volk/tmpl # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter # (but less readable) file names. This can be useful if your file system @@ -731,9 +735,13 @@ RECURSIVE = YES # Note that relative paths are relative to the directory from which doxygen is # run. -EXCLUDE = @abs_top_builddir@/docs/doxygen/html \ +EXCLUDE = @abs_top_srcdir@/volk \ + @abs_top_builddir@/volk \ + @abs_top_builddir@/cmake/msvc \ + @abs_top_builddir@/docs/doxygen/html \ @abs_top_builddir@/docs/doxygen/xml \ @abs_top_builddir@/docs/doxygen/other/doxypy.py \ + @abs_top_srcdir@/docs/doxygen/other/shared_ptr_docstub.h \ @abs_top_builddir@/dtools \ @abs_top_builddir@/gnuradio-runtime/lib/runtime/gr_error_handler.cc \ @abs_top_builddir@/gnuradio-runtime/swig \ @@ -767,12 +775,24 @@ EXCLUDE = @abs_top_builddir@/docs/doxygen/html \ @abs_top_builddir@/gr-comedi/lib \ @abs_top_srcdir@/gr-digital/lib \ @abs_top_builddir@/gr-digital/lib \ + @abs_top_srcdir@/gr-dtv/lib \ + @abs_top_builddir@/gr-dtv/lib \ + @abs_top_srcdir@/gr-dtv/lib/atsc \ + @abs_top_builddir@/gr-dtv/lib/atsc \ + @abs_top_srcdir@/gr-dtv/lib/dvb \ + @abs_top_builddir@/gr-dtv/lib/dvb \ + @abs_top_srcdir@/gr-dtv/lib/dvbs2 \ + @abs_top_builddir@/gr-dtv/lib/dvbs2 \ + @abs_top_srcdir@/gr-dtv/lib/dvbt2 \ + @abs_top_builddir@/gr-dtv/lib/dvbr2 \ @abs_top_srcdir@/gr-fcd/lib \ @abs_top_builddir@/gr-fcd/lib \ @abs_top_srcdir@/gr-fec/lib \ @abs_top_builddir@/gr-fec/lib \ @abs_top_srcdir@/gr-filter/lib \ @abs_top_builddir@/gr-filter/lib \ + @abs_top_srcdir@/gr-fft/lib \ + @abs_top_builddir@/gr-fft/lib \ @abs_top_srcdir@/gr-noaa/lib \ @abs_top_builddir@/gr-noaa/lib \ @abs_top_srcdir@/gr-pager/lib \ @@ -783,6 +803,8 @@ EXCLUDE = @abs_top_builddir@/docs/doxygen/html \ @abs_top_builddir@/gr-trellis/lib \ @abs_top_srcdir@/gr-uhd/lib \ @abs_top_builddir@/gr-uhd/lib \ + @abs_top_srcdir@/gr-uhd/examples/c++ \ + @abs_top_builddir@/gr-uhd/examples/c++ \ @abs_top_srcdir@/gr-utils/lib \ @abs_top_builddir@/gr-utils/lib \ @abs_top_srcdir@/gr-video-sdl/lib \ @@ -792,7 +814,12 @@ EXCLUDE = @abs_top_builddir@/docs/doxygen/html \ @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_builddir@/gr-wxgui/lib \ + @abs_top_srcdir@/gr-zeromq/lib \ + @abs_top_builddir@/gr-zeromq/lib \ + @abs_top_srcdir@/volk/cmake/msvc \ + @abs_top_builddir@/volk/cmake/msvc \ + @abs_top_srcdir@/volk/kernels/volk/volk_8u_conv_k7_r2puppet_8u.h # The EXCLUDE_SYMLINKS tag can be used to select whether or not files or # directories that are symbolic links (a Unix file system feature) are excluded diff --git a/gnuradio-runtime/include/gnuradio/flowgraph.h b/gnuradio-runtime/include/gnuradio/flowgraph.h index 1c04a5f21d..452a20cbc6 100644 --- a/gnuradio-runtime/include/gnuradio/flowgraph.h +++ b/gnuradio-runtime/include/gnuradio/flowgraph.h @@ -147,7 +147,7 @@ namespace gr { friend GR_RUNTIME_API flowgraph_sptr make_flowgraph(); // Destruct an arbitrary flowgraph - ~flowgraph(); + virtual ~flowgraph(); // Connect two endpoints void connect(const endpoint &src, const endpoint &dst); diff --git a/gnuradio-runtime/lib/flat_flowgraph.h b/gnuradio-runtime/lib/flat_flowgraph.h index fad14279ae..d0b3a3ae64 100644 --- a/gnuradio-runtime/lib/flat_flowgraph.h +++ b/gnuradio-runtime/lib/flat_flowgraph.h @@ -45,7 +45,7 @@ namespace gr { friend GR_RUNTIME_API flat_flowgraph_sptr make_flat_flowgraph(); // Destruct an arbitrary gr::flat_flowgraph - ~flat_flowgraph(); + virtual ~flat_flowgraph(); // Wire list of gr::block together in new flat_flowgraph void setup_connections(); diff --git a/gr-digital/examples/CMakeLists.txt b/gr-digital/examples/CMakeLists.txt index 8faad96708..fa15501936 100644 --- a/gr-digital/examples/CMakeLists.txt +++ b/gr-digital/examples/CMakeLists.txt @@ -82,6 +82,7 @@ install( 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_est.grc b/gr-digital/examples/demod/test_corr_est.grc new file mode 100644 index 0000000000..6237565a4b --- /dev/null +++ b/gr-digital/examples/demod/test_corr_est.grc @@ -0,0 +1,3500 @@ +<?xml version='1.0' encoding='ASCII'?> +<?grc format='1' created='3.7.7'?> +<flow_graph> + <timestamp>Fri Jul 11 16:54:10 2014</timestamp> + <block> + <key>options</key> + <param> + <key>id</key> + <value>test_corr_est</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>thread_safe_setters</key> + <value></value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>comment</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>data</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>value</key> + <value>[0]*4+[random.getrandbits(8) for i in range(payload_size)]</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(16, 251)</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>comment</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(1075, 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>comment</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>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>comment</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>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>comment</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>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>comment</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>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>comment</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>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>comment</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>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>comment</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>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>comment</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>preamble</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>value</key> + <value>[0xac, 0xdd, 0xa4, 0xe2, 0xf2, 0x8c, 0x20, 0xfc]</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>comment</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>rxmod</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>value</key> + <value>digital.generic_mod(constel, False, sps, True, eb, False, False)</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(8, 427)</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>comment</key> + <value></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>comment</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(586, 190)</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>comment</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(402, 322)</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>comment</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>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>comment</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>comment</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>comment</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(790, 289)</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>comment</key> + <value></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>comment</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>comment</key> + <value></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>comment</key> + <value></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>comment</key> + <value></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>comment</key> + <value></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>comment</key> + <value></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>comment</key> + <value></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>ctrlpanel</key> + <value>False</value> + </param> + <param> + <key>legend</key> + <value>True</value> + </param> + <param> + <key>label1</key> + <value></value> + </param> + <param> + <key>width1</key> + <value>1</value> + </param> + <param> + <key>color1</key> + <value>"blue"</value> + </param> + <param> + <key>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>comment</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>comment</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(1111, 433)</value> + </param> + <param> + <key>_rotation</key> + <value>180</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>use_snr</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>comment</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(1091, 303)</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>ctrlpanel</key> + <value>False</value> + </param> + <param> + <key>legend</key> + <value>True</value> + </param> + <param> + <key>label1</key> + <value></value> + </param> + <param> + <key>width1</key> + <value>1</value> + </param> + <param> + <key>color1</key> + <value>"blue"</value> + </param> + <param> + <key>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>comment</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(1398, 370)</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>comment</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(1237, 27)</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>comment</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(808, 7)</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>(len(preamble)+payload_size)*8</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>legend</key> + <value>True</value> + </param> + <param> + <key>label1</key> + <value></value> + </param> + <param> + <key>width1</key> + <value>1</value> + </param> + <param> + <key>color1</key> + <value>"blue"</value> + </param> + <param> + <key>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>comment</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(1399, 283)</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>comment</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(1235, 149)</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>comment</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(1235, 194)</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>comment</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(181, 16)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>import</key> + <param> + <key>id</key> + <value>import_0_0</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>import</key> + <value>import random</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(176, 147)</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>preamble+data</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>comment</key> + <value></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>comment</key> + <value></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)+len(data))*8*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>comment</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(568, 288)</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>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>100</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>ctrlpanel</key> + <value>False</value> + </param> + <param> + <key>legend</key> + <value>True</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>comment</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(1433, 160)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>variable_modulate_vector</key> + <param> + <key>id</key> + <value>modulated_sync_word</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>mod</key> + <value>rxmod</value> + </param> + <param> + <key>data</key> + <value>preamble</value> + </param> + <param> + <key>taps</key> + <value>[1]</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(8, 491)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>digital_corr_est_cc</key> + <param> + <key>id</key> + <value>digital_corr_est_cc_0</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>symbols</key> + <value>modulated_sync_word</value> + </param> + <param> + <key>sps</key> + <value>sps</value> + </param> + <param> + <key>mark_delay</key> + <value>1</value> + </param> + <param> + <key>threshold</key> + <value>0.9</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>comment</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(972, 174)</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_corr_est_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_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_corr_est_cc_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_corr_est_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_corr_est_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_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> + <connection> + <source_block_id>blocks_vector_source_x_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> +</flow_graph> diff --git a/gr-digital/grc/digital_block_tree.xml b/gr-digital/grc/digital_block_tree.xml index f6dcceb6d0..6707a8e4db 100644 --- a/gr-digital/grc/digital_block_tree.xml +++ b/gr-digital/grc/digital_block_tree.xml @@ -1,6 +1,6 @@ <?xml version="1.0"?> <!-- - Copyright 2011-2013 Free Software Foundation, Inc. + Copyright 2011-2015 Free Software Foundation, Inc. This file is part of GNU Radio @@ -63,6 +63,7 @@ <block>digital_constellation_receiver_cb</block> <block>variable_constellation</block> <block>variable_constellation_rect</block> + <block>variable_modulate_vector</block> </cat> <cat> <name>Packet Operators</name> @@ -120,6 +121,7 @@ <block>digital_mpsk_receiver_cc</block> <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> diff --git a/gr-digital/grc/digital_corr_est_cc.xml b/gr-digital/grc/digital_corr_est_cc.xml new file mode 100644 index 0000000000..d687cef67d --- /dev/null +++ b/gr-digital/grc/digital_corr_est_cc.xml @@ -0,0 +1,41 @@ +<?xml version="1.0"?> +<block> + <name>Correlation Estimator</name> + <key>digital_corr_est_cc</key> + <import>from gnuradio import digital</import> + <make>digital.corr_est_cc($symbols, $sps, $mark_delay, $threshold)</make> + <param> + <name>Symbols</name> + <key>symbols</key> + <type>complex_vector</type> + </param> + <param> + <name>Samples per Symbol</name> + <key>sps</key> + <type>float</type> + </param> + <param> + <name>Tag marking delay</name> + <key>mark_delay</key> + <type>int</type> + </param> + <param> + <name>Threshold</name> + <key>threshold</key> + <value>0.9</value> + <type>float</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> + <optional>1</optional> + </source> +</block> diff --git a/gr-digital/grc/digital_modulate_vector.xml b/gr-digital/grc/digital_modulate_vector.xml new file mode 100644 index 0000000000..91614dd3fd --- /dev/null +++ b/gr-digital/grc/digital_modulate_vector.xml @@ -0,0 +1,34 @@ +<?xml version="1.0"?> +<!-- +################################################### +# modulate_vector_bc +################################################### + --> +<block> + <name>Modulate Vector</name> + <key>variable_modulate_vector</key> + <category>Modulators</category> + <import>from gnuradio import digital</import> + <var_make>self.$(id) = $(id) = digital.modulate_vector_bc($mod .to_basic_block(), $data, $taps)</var_make> + <var_value>digital.modulate_vector_bc($mod .to_basic_block(), $data, $taps)</var_value> + <make></make> + + <param> + <name>Modulator</name> + <key>mod</key> + <value></value> + <type>raw</type> + </param> + <param> + <name>Data vector</name> + <key>data</key> + <value></value> + <type>int_vector</type> + </param> + <param> + <name>Filter taps</name> + <key>taps</key> + <value></value> + <type>float_vector</type> + </param> +</block> diff --git a/gr-digital/include/gnuradio/digital/CMakeLists.txt b/gr-digital/include/gnuradio/digital/CMakeLists.txt index c39b12bed2..2993497e93 100644 --- a/gr-digital/include/gnuradio/digital/CMakeLists.txt +++ b/gr-digital/include/gnuradio/digital/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright 2011-2014 Free Software Foundation, Inc. +# Copyright 2011-2015 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -42,6 +42,7 @@ install(FILES constellation_decoder_cb.h constellation_receiver_cb.h constellation_soft_decoder_cf.h + corr_est_cc.h correlate_access_code_bb.h correlate_access_code_tag_bb.h correlate_access_code_bb_ts.h @@ -69,6 +70,7 @@ install(FILES lms_dd_equalizer_cc.h map_bb.h metric_type.h + modulate_vector.h mpsk_receiver_cc.h mpsk_snr_est.h mpsk_snr_est_cc.h diff --git a/gr-digital/include/gnuradio/digital/corr_est_cc.h b/gr-digital/include/gnuradio/digital/corr_est_cc.h new file mode 100644 index 0000000000..0d432ba409 --- /dev/null +++ b/gr-digital/include/gnuradio/digital/corr_est_cc.h @@ -0,0 +1,112 @@ +/* -*- c++ -*- */ +/* + * Copyright 2015 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_CORR_EST_CC_CC_H +#define INCLUDED_DIGITAL_CORR_EST_CC_CC_H + +#include <gnuradio/digital/api.h> +#include <gnuradio/sync_block.h> + +namespace gr { + namespace digital { + + /*! + * \brief Correlate stream with a pre-defined sequence and estimate peak + * \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 'time_est': estimate of symbol timing offset + * \li tag 'corr_est': the correlation value of the estimates + * \li tag 'corr_start': the start sample of the correlation and the value + * + * \li Optional 2nd output stream providing the advanced correlator output + * + * This block is designed to search for a sync word 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 sync word is provided as a set of symbols along with a + * baseband matched filter which we use to create the filtered and + * upsampled symbols that we will receive over-the-air. + * + * The phase_est tag can be used by downstream blocks to adjust + * their phase estimatopm/correction loops, and is currently + * implemented by the gr::digital::costas_loop_cc block. + * + * The time_est tag can be used to adjust the sampling timing + * estimate of any downstream synchronization blocks and is + * currently implemented by the gr::digital::pfb_clock_sync_ccf + * block. + * + * The caller must provide a "time_est" and "phase_est" tag + * marking delay from the start of the correlated signal segment, + * in order to mark the proper point in the sync word for + * downstream synchronization blocks. Generally this block cannot + * know where the actual sync word symbols are located relative to + * "corr_start", given that some modulations have pulses with + * intentional ISI. The user should manually examine the primary + * output and the "corr_start" tag postition to determine the + * required tag delay settings for the particular modulation, + * sync word, and downstream blocks used. + * + * For a discussion of the properties of complex correlations, + * with respect to signal processing, see: + * Marple, Jr., S. L., "Estimating Group Delay and Phase Delay + * via Discrete-Time 'Analytic' Cross-Correlation, _IEEE_Transcations_ + * _on_Signal_Processing_, Volume 47, No. 9, September 1999 + * + */ + class DIGITAL_API corr_est_cc : virtual public sync_block + { + public: + typedef boost::shared_ptr<corr_est_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 + * sync word). + * \param sps Samples per symbol + * \param mark_delay tag marking delay in samples after the + * corr_start tag + * \param threshold Threshold of correlator, relative to a 100% + * correlation (1.0). Default is 0.9. + */ + static sptr make(const std::vector<gr_complex> &symbols, + float sps, unsigned int mark_delay, float threshold=0.9); + + 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_CORR_EST_CC_H */ diff --git a/gr-digital/include/gnuradio/digital/modulate_vector.h b/gr-digital/include/gnuradio/digital/modulate_vector.h new file mode 100644 index 0000000000..6083099a89 --- /dev/null +++ b/gr-digital/include/gnuradio/digital/modulate_vector.h @@ -0,0 +1,70 @@ +/* + * Copyright 2015 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_MODULATE_VECTOR_H +#define INCLUDED_DIGITAL_MODULATE_VECTOR_H + +#include <gnuradio/digital/api.h> +#include <gnuradio/types.h> + +namespace gr { + namespace digital { + + /*! + * \brief Modulate a vector of data and apply a shaping filter. + * + * \p modulator: Pointer to a byte-to-complex modulator block. + * \p data: Vector of bytes to modulate into symbols. + * \p taps: Post-modulation symbol shaping filter taps. + * + * \details + * This function modulates the input vector and applies a + * symbol shaping filter. It is intended for use with the + * corr_est_cc block as the symbol stream to correlate + * against. + * + * Any differential encoding or other data coding must be + * performed on the input vector before this modulation + * operation. + * + * Be aware that the format of the incoming data must match + * the format the modulator block is expecting. GNURadio + * modulator blocks are inconsistent in their data type + * expectations. For instance, cpmmod_bc expects unpacked, + * signed bytes in (-1, 1), while gmsk_mod expects packed, + * unsigned bytes in (0, 1). In other words, the output of + * gmsk_mod given the input vector [0xaa, 0x00] is equivalent + * to the output of cpmmod_bc given the input vector + * [1,255,1,255,1,255,1,255,255,255,255,255,255,255,255,255] + * + * Please check the documentation or source of the modulator + * before using this function. + * + */ + DIGITAL_API std::vector<gr_complex> + modulate_vector_bc(basic_block_sptr modulator, + std::vector<uint8_t> data, + std::vector<float> taps); + + } /* namespace digital */ +} /* namespace gr */ + +#endif /* INCLUDED_DIGITAL_MODULATE_VECTOR_H */ diff --git a/gr-digital/lib/CMakeLists.txt b/gr-digital/lib/CMakeLists.txt index eb1008423b..0c213d7ac8 100644 --- a/gr-digital/lib/CMakeLists.txt +++ b/gr-digital/lib/CMakeLists.txt @@ -60,6 +60,7 @@ list(APPEND digital_sources constellation_decoder_cb_impl.cc constellation_receiver_cb_impl.cc constellation_soft_decoder_cf_impl.cc + corr_est_cc_impl.cc correlate_access_code_bb_impl.cc correlate_access_code_tag_bb_impl.cc correlate_access_code_bb_ts_impl.cc @@ -85,6 +86,7 @@ list(APPEND digital_sources kurtotic_equalizer_cc_impl.cc lms_dd_equalizer_cc_impl.cc map_bb_impl.cc + modulate_vector.cc mpsk_receiver_cc_impl.cc mpsk_snr_est.cc mpsk_snr_est_cc_impl.cc diff --git a/gr-digital/lib/corr_est_cc_impl.cc b/gr-digital/lib/corr_est_cc_impl.cc new file mode 100644 index 0000000000..0d2470b678 --- /dev/null +++ b/gr-digital/lib/corr_est_cc_impl.cc @@ -0,0 +1,282 @@ +/* -*- c++ -*- */ +/* + * Copyright 2015 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 "corr_est_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 { + + corr_est_cc::sptr + corr_est_cc::make(const std::vector<gr_complex> &symbols, + float sps, unsigned int mark_delay, + float threshold) + { + return gnuradio::get_initial_sptr + (new corr_est_cc_impl(symbols, sps, mark_delay, threshold)); + } + + corr_est_cc_impl::corr_est_cc_impl(const std::vector<gr_complex> &symbols, + float sps, unsigned int mark_delay, + float threshold) + : sync_block("corr_est_cc", + io_signature::make(1, 1, sizeof(gr_complex)), + io_signature::make(1, 2, sizeof(gr_complex))), + d_src_id(pmt::intern(alias())) + { + d_sps = sps; + + // Create time-reversed conjugate of symbols + d_symbols = symbols; + for(size_t i=0; i < d_symbols.size(); i++) { + d_symbols[i] = conj(d_symbols[i]); + } + std::reverse(d_symbols.begin(), d_symbols.end()); + + d_mark_delay = mark_delay >= d_symbols.size() ? d_symbols.size() - 1 + : mark_delay; + + // Compute a correlation threshold. + // Compute the value of the discrete autocorrelation of the matched + // filter with offset 0 (aka the autocorrelation peak). + float corr = 0; + for(size_t i = 0; i < d_symbols.size(); i++) + corr += abs(d_symbols[i]*conj(d_symbols[i])); + d_thresh = threshold*corr*corr; + + // Correlation filter + d_filter = new kernel::fft_filter_ccc(1, d_symbols); + + // Per comments in gr-filter/include/gnuradio/filter/fft_filter.h, + // set the block output multiple to the FFT filter kernel's internal, + // assumed "nsamples", to ensure the scheduler always passes a + // proper number of samples. + int nsamples; + nsamples = d_filter->set_taps(d_symbols); + set_output_multiple(nsamples); + + // It looks like the kernel::fft_filter_ccc stashes a tail between + // calls, so that contains our filtering history (I think). The + // fft_filter_ccc block (which calls the kernel::fft_filter_ccc) sets + // the history to 1 (0 history items), so let's follow its lead. + //set_history(1); + + // We'll (ab)use the history for our own purposes of tagging back in time. + // Keep a history of the length of the sync word to delay for tagging. + set_history(d_symbols.size()+1); + + declare_sample_delay(1, 0); + declare_sample_delay(0, d_symbols.size()); + + // Setting the alignment multiple for volk causes problems with the + // expected behavior of setting the output multiple for the FFT filter. + // Don't set the alignment multiple. + //const int alignment_multiple = + // volk_get_alignment() / sizeof(gr_complex); + //set_alignment(std::max(1,alignment_multiple)); + + // In order to easily support the optional second output, + // don't deal with an unbounded max number of output items. + // For the common case of not using the optional second output, + // this ensures we optimally call the volk routines. + const size_t nitems = 24*1024; + set_max_noutput_items(nitems); + d_corr = (gr_complex *) + volk_malloc(sizeof(gr_complex)*nitems, volk_get_alignment()); + d_corr_mag = (float *) + volk_malloc(sizeof(float)*nitems, volk_get_alignment()); + } + + corr_est_cc_impl::~corr_est_cc_impl() + { + delete d_filter; + volk_free(d_corr); + volk_free(d_corr_mag); + } + + std::vector<gr_complex> + corr_est_cc_impl::symbols() const + { + return d_symbols; + } + + void + corr_est_cc_impl::set_symbols(const std::vector<gr_complex> &symbols) + { + gr::thread::scoped_lock lock(d_setlock); + + d_symbols = symbols; + + // Per comments in gr-filter/include/gnuradio/filter/fft_filter.h, + // set the block output multiple to the FFT filter kernel's internal, + // assumed "nsamples", to ensure the scheduler always passes a + // proper number of samples. + int nsamples; + nsamples = d_filter->set_taps(d_symbols); + set_output_multiple(nsamples); + + // It looks like the kernel::fft_filter_ccc stashes a tail between + // calls, so that contains our filtering history (I think). The + // fft_filter_ccc block (which calls the kernel::fft_filter_ccc) sets + // the history to 1 (0 history items), so let's follow its lead. + //set_history(1); + + // We'll (ab)use the history for our own purposes of tagging back in time. + // Keep a history of the length of the sync word to delay for tagging. + set_history(d_symbols.size()+1); + + declare_sample_delay(1, 0); + declare_sample_delay(0, d_symbols.size()); + + d_mark_delay = d_mark_delay >= d_symbols.size() ? d_symbols.size()-1 + : d_mark_delay; + } + + int + corr_est_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; + if (output_items.size() > 1) + corr = (gr_complex *) output_items[1]; + else + corr = d_corr; + + // Our correlation filter length + unsigned int hist_len = history() - 1; + + // Delay the output by our correlation filter length so we can + // tag backwards in time + memcpy(out, &in[0], sizeof(gr_complex)*noutput_items); + + // Calculate the correlation of the non-delayed input with the + // known symbols. + d_filter->filter(noutput_items, &in[hist_len], corr); + + // Find the magnitude squared of the correlation + volk_32fc_magnitude_squared_32f(&d_corr_mag[0], corr, noutput_items); + + int isps = (int)(d_sps + 0.5f); + int i = 0; + while(i < noutput_items) { + // Look for the correlator output to cross the threshold + if (d_corr_mag[i] <= d_thresh) { + i++; + continue; + } + // Go to (just past) the current correlator output peak + while ((i < (noutput_items-1)) && + (d_corr_mag[i] < d_corr_mag[i+1])) + i++; + + // Delaying the primary signal output by the matched filter + // length using history(), means that the the peak output of + // the matched filter aligns with the start of the desired + // sync word in the primary signal output. This corr_start + // tag is not offset to another sample, so that downstream + // data-aided blocks (like adaptive equalizers) know exactly + // where the start of the correlated symbols are. + add_item_tag(0, nitems_written(0) + i, pmt::intern("corr_start"), + pmt::from_double(d_corr_mag[i]), d_src_id); + + // Peak detector using a "center of mass" approach center + // holds the +/- fraction of a sample index from the found + // peak index to the estimated actual peak index. + double center = 0.0; + if (i > 0 and i < (noutput_items - 1)) { + double nom = 0, den = 0; + for(int s = 0; s < 3; s++) { + nom += (s+1)*d_corr_mag[i+s-1]; + den += d_corr_mag[i+s-1]; + } + center = nom / den - 2.0; + } + + // Calculate the phase offset of the incoming signal. + // + // The analytic cross-correlation is: + // + // 2A*e_bb(t-t_d)*exp(-j*2*pi*f*(t-t_d) - j*phi_bb(t-t_d) - j*theta_c) + // + + // The analytic auto-correlation's envelope, e_bb(), has its + // peak at the "group delay" time, t = t_d. The analytic + // cross-correlation's center frequency phase shift, theta_c, + // is determined from the argument of the analytic + // cross-correlation at the "group delay" time, t = t_d. + // + // Taking the argument of the analytic cross-correlation at + // any other time will include the baseband auto-correlation's + // phase term, phi_bb(t-t_d), and a frequency dependent term + // of the cross-correlation, which I don't believe maps simply + // to expected symbol phase differences. + float phase = fast_atan2f(corr[i].imag(), corr[i].real()); + int index = i + d_mark_delay; + + add_item_tag(0, nitems_written(0) + index, pmt::intern("phase_est"), + pmt::from_double(phase), d_src_id); + add_item_tag(0, nitems_written(0) + index, pmt::intern("time_est"), + pmt::from_double(center), d_src_id); + // N.B. the appropriate d_corr_mag[] index is "i", not "index". + add_item_tag(0, nitems_written(0) + index, pmt::intern("corr_est"), + pmt::from_double(d_corr_mag[i]), d_src_id); + + if (output_items.size() > 1) { + // N.B. these debug tags are not offset to avoid walking off out buf + add_item_tag(1, nitems_written(0) + i, pmt::intern("phase_est"), + pmt::from_double(phase), d_src_id); + add_item_tag(1, nitems_written(0) + i, pmt::intern("time_est"), + pmt::from_double(center), d_src_id); + add_item_tag(1, nitems_written(0) + i, pmt::intern("corr_est"), + pmt::from_double(d_corr_mag[i]), d_src_id); + } + + // Skip ahead to the next potential symbol peak + // (for non-offset/interleaved symbols) + i += isps; + } + + //if (output_items.size() > 1) + // add_item_tag(1, nitems_written(0) + noutput_items - 1, + // pmt::intern("ce_eow"), pmt::from_uint64(noutput_items), + // d_src_id); + + return noutput_items; + } + + } /* namespace digital */ +} /* namespace gr */ diff --git a/gr-digital/lib/corr_est_cc_impl.h b/gr-digital/lib/corr_est_cc_impl.h new file mode 100644 index 0000000000..83b5db60e1 --- /dev/null +++ b/gr-digital/lib/corr_est_cc_impl.h @@ -0,0 +1,64 @@ +/* -*- 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_CORR_EST_CC_IMPL_H +#define INCLUDED_DIGITAL_CORR_EST_CC_IMPL_H + +#include <gnuradio/digital/corr_est_cc.h> +#include <gnuradio/filter/fft_filter.h> + +using namespace gr::filter; + +namespace gr { + namespace digital { + + class corr_est_cc_impl : public corr_est_cc + { + private: + pmt::pmt_t d_src_id; + std::vector<gr_complex> d_symbols; + float d_sps; + unsigned int d_mark_delay; + float d_thresh; + kernel::fft_filter_ccc *d_filter; + + gr_complex *d_corr; + float *d_corr_mag; + + public: + corr_est_cc_impl(const std::vector<gr_complex> &symbols, + float sps, unsigned int mark_delay, + float threshold=0.9); + ~corr_est_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_CORR_EST_CC_IMPL_H */ diff --git a/gr-digital/lib/modulate_vector.cc b/gr-digital/lib/modulate_vector.cc new file mode 100644 index 0000000000..281e3435c5 --- /dev/null +++ b/gr-digital/lib/modulate_vector.cc @@ -0,0 +1,70 @@ +/* +* Copyright 2015 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. +* +*/ + +/* +* 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. +* +* 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 +* the GNU Radio modulator blocks as a modulator. Be careful that some +* modulators expect packed words, some expect unpacked words, and some +* have unique expectations, requirements, or limitations. + +* modulator as: gr.block or gr.hier_block +* taps as: list or array +*/ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <gnuradio/blocks/vector_source_b.h> +#include <gnuradio/blocks/vector_sink_c.h> +#include <gnuradio/filter/fir_filter_ccf.h> +#include <gnuradio/top_block.h> +#include <gnuradio/digital/modulate_vector.h> + +namespace gr { + namespace digital { + std::vector<gr_complex> modulate_vector_bc(basic_block_sptr modulator, + std::vector<uint8_t> data, + std::vector<float> taps) + { + blocks::vector_source_b::sptr vector_src = blocks::vector_source_b::make(data); + filter::fir_filter_ccf::sptr filter = filter::fir_filter_ccf::make(1, taps); + blocks::vector_sink_c::sptr vector_sink = blocks::vector_sink_c::make(); + + top_block_sptr tb = make_top_block("modulate_vector"); + + tb->connect(vector_src, 0, modulator, 0); + tb->connect(modulator, 0, filter, 0); + tb->connect(filter, 0, vector_sink, 0); + + tb->run(); + + return vector_sink->data(); + } + } /* namespace digital */ +} /* namespace gr */ diff --git a/gr-digital/swig/digital_swig.i b/gr-digital/swig/digital_swig.i index 43f68a3d6e..675c9b02b5 100644 --- a/gr-digital/swig/digital_swig.i +++ b/gr-digital/swig/digital_swig.i @@ -1,5 +1,5 @@ /* - * Copyright 2011,2012 Free Software Foundation, Inc. + * Copyright 2011-2015 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -52,6 +52,7 @@ #include "gnuradio/digital/constellation_decoder_cb.h" #include "gnuradio/digital/constellation_receiver_cb.h" #include "gnuradio/digital/constellation_soft_decoder_cf.h" +#include "gnuradio/digital/corr_est_cc.h" #include "gnuradio/digital/correlate_access_code_bb.h" #include "gnuradio/digital/correlate_access_code_tag_bb.h" #include "gnuradio/digital/correlate_access_code_bb_ts.h" @@ -78,6 +79,7 @@ #include "gnuradio/digital/lms_dd_equalizer_cc.h" #include "gnuradio/digital/map_bb.h" #include "gnuradio/digital/metric_type.h" +#include "gnuradio/digital/modulate_vector.h" #include "gnuradio/digital/mpsk_receiver_cc.h" #include "gnuradio/digital/mpsk_snr_est.h" #include "gnuradio/digital/mpsk_snr_est_cc.h" @@ -128,6 +130,7 @@ %include "gnuradio/digital/constellation_decoder_cb.h" %include "gnuradio/digital/constellation_receiver_cb.h" %include "gnuradio/digital/constellation_soft_decoder_cf.h" +%include "gnuradio/digital/corr_est_cc.h" %include "gnuradio/digital/correlate_access_code_bb.h" %include "gnuradio/digital/correlate_access_code_tag_bb.h" %include "gnuradio/digital/correlate_access_code_bb_ts.h" @@ -154,6 +157,7 @@ %include "gnuradio/digital/lms_dd_equalizer_cc.h" %include "gnuradio/digital/map_bb.h" %include "gnuradio/digital/metric_type.h" +%include "gnuradio/digital/modulate_vector.h" %include "gnuradio/digital/mpsk_receiver_cc.h" %include "gnuradio/digital/mpsk_snr_est.h" %include "gnuradio/digital/mpsk_snr_est_cc.h" @@ -199,6 +203,7 @@ GR_SWIG_BLOCK_MAGIC2(digital, cma_equalizer_cc); GR_SWIG_BLOCK_MAGIC2(digital, constellation_decoder_cb); GR_SWIG_BLOCK_MAGIC2(digital, constellation_receiver_cb); GR_SWIG_BLOCK_MAGIC2(digital, constellation_soft_decoder_cf); +GR_SWIG_BLOCK_MAGIC2(digital, corr_est_cc); 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); diff --git a/gr-fec/lib/tpc_encoder.cc b/gr-fec/lib/tpc_encoder.cc index 941bd7bdca..849205753e 100755 --- a/gr-fec/lib/tpc_encoder.cc +++ b/gr-fec/lib/tpc_encoder.cc @@ -35,7 +35,7 @@ #include <string.h> // for memcpy namespace gr { -namespace fec { +namespace fec { generic_encoder::sptr tpc_encoder::make(std::vector<int> row_polys, std::vector<int> col_polys, int krow, int kcol, int bval, int qval) { @@ -49,7 +49,7 @@ tpc_encoder::tpc_encoder (std::vector<int> row_polys, std::vector<int> col_polys // first we operate on data chunks of get_input_size() // TODO: should we verify this and throw an error if it doesn't match? YES // hwo do we do that? - + // calculate the input and output sizes inputSize = (d_krow*d_kcol - (d_bval+d_qval)); rowEncoder_K = ceil(log(d_rowpolys[0])/log(2)); // rowEncoder_K is the constraint length of the row encoder polynomial @@ -58,12 +58,13 @@ tpc_encoder::tpc_encoder (std::vector<int> row_polys, std::vector<int> col_polys colEncoder_K = ceil(log(d_colpolys[0])/log(2)); // colEncoder_K is the constraint length of the col encoder polynomial colEncoder_n = d_colpolys.size(); colEncoder_m = colEncoder_K - 1; - + outputSize = ((d_krow+rowEncoder_m)*rowEncoder_n)*((d_kcol+colEncoder_m)*colEncoder_n) - d_bval; - + + fp = NULL; //DEBUG_PRINT("inputSize=%d outputSize=%d\n", inputSize, outputSize); //fp = fopen("c_encoder_output.txt", "w"); - + // resize internal matrices rowNumStates = 1 << (rowEncoder_K-1); // 2^(row_mm) colNumStates = 1 << (colEncoder_K-1); // 2^(col_mm) @@ -71,32 +72,32 @@ tpc_encoder::tpc_encoder (std::vector<int> row_polys, std::vector<int> col_polys rowNextStates.resize(2, std::vector<int>(rowNumStates,0)); colOutputs.resize(2, std::vector<int>(colNumStates,0)); colNextStates.resize(2, std::vector<int>(colNumStates,0));; - + rowTail.resize(rowNumStates, 0); colTail.resize(colNumStates, 0); - + // precalculate the state transition matrix for the row polynomial tpc_common::precomputeStateTransitionMatrix_RSCPoly(rowNumStates, d_rowpolys, rowEncoder_K, rowEncoder_n, rowOutputs, rowNextStates); - + // calculate the tail for the row tpc_common::rsc_tail(rowTail, d_rowpolys, rowNumStates, rowEncoder_m); - + // precalculate the state transition matrix for the column polynomial tpc_common::precomputeStateTransitionMatrix_RSCPoly(colNumStates, d_colpolys, colEncoder_K, colEncoder_n, colOutputs, colNextStates); // calculate the tail for the col tpc_common::rsc_tail(colTail, d_colpolys, colNumStates, colEncoder_m); - + // pre-allocate memory we use for encoding inputSizeWithPad = d_bval+d_qval+inputSize; inputWithPad.resize(inputSizeWithPad, 0); - + numRowsToEncode = inputSizeWithPad/d_krow; // this should be OK w/ integer division -- TODO: check this? rowToEncode.resize(d_krow,0); rowEncoded_block.resize(d_krow+(rowEncoder_m*rowEncoder_n), 0); rowEncodedBits.resize(d_kcol, std::vector<uint8_t>(rowEncoder_m*rowEncoder_n,0) ); - + numColsToEncode = d_krow+(rowEncoder_m*rowEncoder_n); colToEncode.resize(d_kcol,0); colEncoded_block.resize(d_kcol+(colEncoder_m*colEncoder_n), 0); @@ -112,11 +113,11 @@ int tpc_encoder::get_input_size() { } void tpc_encoder::block_conv_encode( std::vector<uint8_t> &output, - std::vector<uint8_t> input, + std::vector<uint8_t> input, std::vector< std::vector<int> > transOutputVec, std::vector< std::vector<int> > transNextStateVec, std::vector<int> tail, - size_t KK, + size_t KK, size_t nn) { size_t outsym, ii, jj; @@ -124,16 +125,16 @@ void tpc_encoder::block_conv_encode( std::vector<uint8_t> &output, size_t LL = input.size(); std::vector<int> binVec(nn,0); - + // encode data bits one bit at a time for (ii=0; ii<LL; ii++) { - + // determine the output symbol outsym = transOutputVec[(int)input[ii]][state]; // determine the next state state = transNextStateVec[(int)input[ii]][state]; - - // Convert symbol to a binary vector + + // Convert symbol to a binary vector tpc_common::itob( binVec, outsym, nn ); // Assign to output : TODO: investigate using memcpy for this? @@ -144,12 +145,12 @@ void tpc_encoder::block_conv_encode( std::vector<uint8_t> &output, // encode tail for (ii=LL;ii<LL+KK-1;ii++) { - + // determine the output symbol outsym = transOutputVec[tail[state]][state]; // determine the next state state = transNextStateVec[tail[state]][state]; - + // Convert symbol to a binary vector tpc_common::itob( binVec, outsym, nn ); @@ -165,49 +166,49 @@ void tpc_encoder::generic_work(void *inBuffer, void *outBuffer) { uint8_t *out = (uint8_t *) outBuffer; size_t ii, jj; // indexing var - + //DEBUG_PRINT_UCHAR_ARRAY(in, inputSize); - + // TODO: probably a better way to do this than memcpy? memcpy(&inputWithPad[d_bval+d_qval], in, sizeof(unsigned char)*inputSize); - + //DEBUG_PRINT("Input with Pad -->\n"); //DEBUG_PRINT_UCHAR_ARRAY(&inputWithPad[0], inputSizeWithPad); //DEBUG_PRINT_F(fp, "Input with Pad -->\n"); //DEBUG_PRINT_UCHAR_ARRAY_F(fp, &inputWithPad[0], inputSizeWithPad); - + // encode the row data for(ii=0; ii<numRowsToEncode; ii++) { // populate rowToEncode memcpy(&rowToEncode[0], &inputWithPad[ii*d_krow], sizeof(unsigned char)*d_krow); - + //DEBUG_PRINT("Encoding row=[%d] -->\n",ii); //DEBUG_PRINT_UCHAR_ARRAY(&rowToEncode[0], d_krow); //DEBUG_PRINT_F(fp, "Encoding row=[%d] -->\n",ii); //DEBUG_PRINT_UCHAR_ARRAY_F(fp, &rowToEncode[0], d_krow); - + // encode it - block_conv_encode( rowEncoded_block, - rowToEncode, - rowOutputs, - rowNextStates, - rowTail, + block_conv_encode( rowEncoded_block, + rowToEncode, + rowOutputs, + rowNextStates, + rowTail, rowEncoder_K, rowEncoder_n); - + //DEBUG_PRINT("Row Encoded Block=[%d] -->\n",ii); //DEBUG_PRINT_FLOAT_ARRAY_AS_UCHAR(&rowEncoded_block[0], tmp); //DEBUG_PRINT_F(fp, "Row Encoded Block=[%d] -->\n",ii); //DEBUG_PRINT_FLOAT_ARRAY_AS_UCHAR_F(fp, &rowEncoded_block[0], tmp); - + // store only the encoded bits, b/c we read out the data in a special way memcpy(&rowEncodedBits[ii][0], &rowEncoded_block[d_krow], sizeof(uint8_t)*(rowEncoder_m*rowEncoder_n)); - + // DEBUG_PRINT("Row Encoded Bits"); // tmp = rowEncoder_m*rowEncoder_n; // DEBUG_PRINT_FLOAT_ARRAY_AS_UCHAR(&rowEncodedBits[ii][0], tmp); } - + // encode the column data size_t numDataColsToEncode = d_krow; size_t numCheckColsToEncode = numColsToEncode-numDataColsToEncode; @@ -216,76 +217,75 @@ void tpc_encoder::generic_work(void *inBuffer, void *outBuffer) { for(jj=0; jj<d_kcol; jj++) { colToEncode[jj] = inputWithPad[jj*d_krow+ii]; } - + //DEBUG_PRINT("Encoding col=[%d] -->\n",ii); //DEBUG_PRINT_UCHAR_ARRAY(&colToEncode[0], d_kcol); //DEBUG_PRINT_F(fp, "Encoding col=[%d] -->\n",ii); //DEBUG_PRINT_UCHAR_ARRAY_F(fp, &colToEncode[0], d_kcol); - + // encode it - block_conv_encode( colEncoded_block, - colToEncode, - colOutputs, - colNextStates, - colTail, + block_conv_encode( colEncoded_block, + colToEncode, + colOutputs, + colNextStates, + colTail, colEncoder_K, colEncoder_n); - + //DEBUG_PRINT("Col Encoded Block=[%d] -->\n",ii); //DEBUG_PRINT_FLOAT_ARRAY_AS_UCHAR(&colEncoded_block[0], tmp); //DEBUG_PRINT_F(fp, "Col Encoded Block=[%d] -->\n",ii); //DEBUG_PRINT_FLOAT_ARRAY_AS_UCHAR_F(fp, &colEncoded_block[0], tmp); - + // store only the encoded bits, b/c we read the data out in a special way memcpy(&colEncodedBits[ii][0], &colEncoded_block[d_kcol], sizeof(uint8_t)*(colEncoder_m*colEncoder_n)); - + // DEBUG_PRINT("Col Encoded Bits"); // tmp = colEncoder_m*colEncoder_n; // DEBUG_PRINT_FLOAT_ARRAY(&colEncodedBits[ii][0], tmp); } - + // encode checks on checks (encode the row-encoded bits) for(ii=0; ii<numCheckColsToEncode; ii++) { // populate colToEncode for(jj=0; jj<d_kcol; jj++) { colToEncode[jj] = rowEncodedBits[jj][ii]; // indexing is wierd b/c of the way we declared the vector :( } - + //DEBUG_PRINT("Encoding col=[%d] -->\n",ii+numDataColsToEncode); //DEBUG_PRINT_UCHAR_ARRAY(&colToEncode[0], d_kcol); //DEBUG_PRINT_F(fp, "Encoding col=[%d] -->\n",ii+numDataColsToEncode); //DEBUG_PRINT_UCHAR_ARRAY_F(fp, &colToEncode[0], d_kcol); - + // encode it - block_conv_encode( colEncoded_block, - colToEncode, - colOutputs, - colNextStates, - colTail, + block_conv_encode( colEncoded_block, + colToEncode, + colOutputs, + colNextStates, + colTail, colEncoder_K, colEncoder_n); - + //DEBUG_PRINT("Col Encoded Block=[%d] -->\n",ii+numDataColsToEncode); //DEBUG_PRINT_FLOAT_ARRAY_AS_UCHAR(&colEncoded_block[0], tmp); - + //DEBUG_PRINT_F(fp, "Col Encoded Block=[%d] -->\n",ii+numDataColsToEncode); //DEBUG_PRINT_FLOAT_ARRAY_AS_UCHAR_F(fp, &colEncoded_block[0], tmp); - - + // store only the encoded bits, b/c we read the data out in a special way memcpy(&colEncodedBits[ii+numDataColsToEncode][0], &colEncoded_block[d_kcol], sizeof(uint8_t)*(colEncoder_m*colEncoder_n)); - + // DEBUG_PRINT("Col Encoded Bits"); // tmp = colEncoder_m*colEncoder_n; // DEBUG_PRINT_FLOAT_ARRAY(&colEncodedBits[ii][0], tmp); } - + unsigned char* inputDataPtr; uint8_t *outputDataPtr = out; - + int curRowInRowEncodedBits = 0; // read out the data along the rows into the "out" array - + // skip B zeros & do the first row inputDataPtr = &inputWithPad[d_bval]; if(d_bval > d_krow){ throw std::runtime_error("bval must be < krow"); } @@ -293,27 +293,27 @@ void tpc_encoder::generic_work(void *inBuffer, void *outBuffer) { for(ii=0; ii<firstRowRemainingBits; ii++) { *outputDataPtr++ = (uint8_t)(*inputDataPtr++); } - + // copy the encoded bits - memcpy(outputDataPtr, &rowEncodedBits[curRowInRowEncodedBits++][0], + memcpy(outputDataPtr, &rowEncodedBits[curRowInRowEncodedBits++][0], sizeof(uint8_t)*(rowEncoder_m*rowEncoder_n)); - + outputDataPtr += (rowEncoder_m*rowEncoder_n); - + // copy out the rest of the data for(ii=1; ii<d_kcol; ii++) { // ii starts at 1, b/c we already did idx=0 // copy systematic bits for(jj=0; jj<d_krow; jj++) { *outputDataPtr++ = (uint8_t)(*inputDataPtr++); } - + // copy the encoded bits - memcpy(outputDataPtr, &rowEncodedBits[curRowInRowEncodedBits++][0], + memcpy(outputDataPtr, &rowEncodedBits[curRowInRowEncodedBits++][0], sizeof(uint8_t)*(rowEncoder_m*rowEncoder_n)); - + outputDataPtr += (rowEncoder_m*rowEncoder_n); } - + // copy the encoded cols for(ii=0; ii<(colEncoder_m*colEncoder_n); ii++) { // copy checks @@ -326,17 +326,17 @@ void tpc_encoder::generic_work(void *inBuffer, void *outBuffer) { *outputDataPtr++ = colEncodedBits[kk++][ii]; } } - + //DEBUG_PRINT("Output\n"); //DEBUG_PRINT_FLOAT_ARRAY_AS_UCHAR(out, outputSize); //DEBUG_PRINT_F(fp, "Output\n"); //DEBUG_PRINT_FLOAT_ARRAY_AS_UCHAR_F(fp, out, outputSize); } - tpc_encoder::~tpc_encoder() { - fclose(fp); + if(fp) + fclose(fp); } } diff --git a/gr-filter/examples/CMakeLists.txt b/gr-filter/examples/CMakeLists.txt index 48b59ef099..a6229f38f4 100644 --- a/gr-filter/examples/CMakeLists.txt +++ b/gr-filter/examples/CMakeLists.txt @@ -42,6 +42,7 @@ GR_PYTHON_INSTALL(PROGRAMS install( FILES + filter_taps.grc resampler_demo.grc DESTINATION ${GR_PKG_FILTER_EXAMPLES_DIR} COMPONENT "filter_python" diff --git a/gr-filter/examples/filter_taps.grc b/gr-filter/examples/filter_taps.grc new file mode 100644 index 0000000000..48d37b228a --- /dev/null +++ b/gr-filter/examples/filter_taps.grc @@ -0,0 +1,1299 @@ +<?xml version='1.0' encoding='ASCII'?> +<?grc format='1' created='3.7.7'?> +<flow_graph> + <timestamp>Wed Apr 8 11:00:48 2015</timestamp> + <block> + <key>options</key> + <param> + <key>id</key> + <value>filter_taps</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>title</key> + <value></value> + </param> + <param> + <key>author</key> + <value></value> + </param> + <param> + <key>description</key> + <value></value> + </param> + <param> + <key>window_size</key> + <value>1280, 1024</value> + </param> + <param> + <key>generate_options</key> + <value>qt_gui</value> + </param> + <param> + <key>category</key> + <value>Custom</value> + </param> + <param> + <key>run_options</key> + <value>prompt</value> + </param> + <param> + <key>run</key> + <value>True</value> + </param> + <param> + <key>max_nouts</key> + <value>0</value> + </param> + <param> + <key>realtime_scheduling</key> + <value></value> + </param> + <param> + <key>thread_safe_setters</key> + <value></value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>comment</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>sym_rate</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>value</key> + <value>samp_rate/sps</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(1080, 171)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>variable</key> + <param> + <key>id</key> + <value>sps</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>value</key> + <value>2</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(1016, 171)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>variable</key> + <param> + <key>id</key> + <value>bp_low</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>value</key> + <value>6000</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(120, 139)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>variable</key> + <param> + <key>id</key> + <value>cutoff_high</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>value</key> + <value>14000</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(8, 211)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>variable</key> + <param> + <key>id</key> + <value>samp_rate</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>value</key> + <value>32000</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(8, 83)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>variable</key> + <param> + <key>id</key> + <value>transition</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>value</key> + <value>1000</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(8, 283)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>variable</key> + <param> + <key>id</key> + <value>cutoff_low</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>value</key> + <value>2000</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(8, 147)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>variable</key> + <param> + <key>id</key> + <value>bp_high</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>value</key> + <value>10000</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(120, 211)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>variable</key> + <param> + <key>id</key> + <value>len_taps</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>value</key> + <value>len(lp_taps)</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(288, 35)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>variable_band_pass_filter_taps</key> + <param> + <key>id</key> + <value>bp_taps</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>type</key> + <value>taps_real</value> + </param> + <param> + <key>gain</key> + <value>1.0</value> + </param> + <param> + <key>samp_rate</key> + <value>samp_rate</value> + </param> + <param> + <key>low_cutoff_freq</key> + <value>bp_low</value> + </param> + <param> + <key>high_cutoff_freq</key> + <value>bp_high</value> + </param> + <param> + <key>width</key> + <value>transition</value> + </param> + <param> + <key>win</key> + <value>firdes.WIN_HAMMING</value> + </param> + <param> + <key>beta</key> + <value>6.76</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(696, 35)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>variable_high_pass_filter_taps</key> + <param> + <key>id</key> + <value>hp_taps</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>gain</key> + <value>1.0</value> + </param> + <param> + <key>samp_rate</key> + <value>samp_rate</value> + </param> + <param> + <key>cutoff_freq</key> + <value>cutoff_low</value> + </param> + <param> + <key>width</key> + <value>transition</value> + </param> + <param> + <key>win</key> + <value>firdes.WIN_HAMMING</value> + </param> + <param> + <key>beta</key> + <value>6.76</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(536, 35)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>variable_low_pass_filter_taps</key> + <param> + <key>id</key> + <value>lp_taps</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>gain</key> + <value>1.0</value> + </param> + <param> + <key>samp_rate</key> + <value>samp_rate</value> + </param> + <param> + <key>cutoff_freq</key> + <value>cutoff_high</value> + </param> + <param> + <key>width</key> + <value>transition</value> + </param> + <param> + <key>win</key> + <value>firdes.WIN_HAMMING</value> + </param> + <param> + <key>beta</key> + <value>6.76</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(376, 35)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>variable_band_reject_filter_taps</key> + <param> + <key>id</key> + <value>br_taps</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>gain</key> + <value>1.0</value> + </param> + <param> + <key>samp_rate</key> + <value>samp_rate</value> + </param> + <param> + <key>low_cutoff_freq</key> + <value>bp_low</value> + </param> + <param> + <key>high_cutoff_freq</key> + <value>bp_high</value> + </param> + <param> + <key>width</key> + <value>transition</value> + </param> + <param> + <key>win</key> + <value>firdes.WIN_HAMMING</value> + </param> + <param> + <key>beta</key> + <value>6.76</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(856, 35)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>fir_filter_xxx</key> + <param> + <key>id</key> + <value>lp_filter</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>type</key> + <value>fff</value> + </param> + <param> + <key>decim</key> + <value>1</value> + </param> + <param> + <key>taps</key> + <value>lp_taps</value> + </param> + <param> + <key>samp_delay</key> + <value>0</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>comment</key> + <value>Low-pass filter</value> + </param> + <param> + <key>_coordinate</key> + <value>(392, 203)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>fir_filter_xxx</key> + <param> + <key>id</key> + <value>hp_filter</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>type</key> + <value>fff</value> + </param> + <param> + <key>decim</key> + <value>1</value> + </param> + <param> + <key>taps</key> + <value>hp_taps</value> + </param> + <param> + <key>samp_delay</key> + <value>0</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>comment</key> + <value>High-pass filter</value> + </param> + <param> + <key>_coordinate</key> + <value>(392, 307)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>fir_filter_xxx</key> + <param> + <key>id</key> + <value>bp_filter</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>type</key> + <value>fff</value> + </param> + <param> + <key>decim</key> + <value>1</value> + </param> + <param> + <key>taps</key> + <value>bp_taps</value> + </param> + <param> + <key>samp_delay</key> + <value>0</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>comment</key> + <value>Band-pass filter</value> + </param> + <param> + <key>_coordinate</key> + <value>(392, 403)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>fir_filter_xxx</key> + <param> + <key>id</key> + <value>br_filter</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>type</key> + <value>fff</value> + </param> + <param> + <key>decim</key> + <value>1</value> + </param> + <param> + <key>taps</key> + <value>br_taps</value> + </param> + <param> + <key>samp_delay</key> + <value>0</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>comment</key> + <value>Band-reject filter</value> + </param> + <param> + <key>_coordinate</key> + <value>(392, 499)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>variable_rrc_filter_taps</key> + <param> + <key>id</key> + <value>rrc_taps</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>gain</key> + <value>1.0</value> + </param> + <param> + <key>samp_rate</key> + <value>samp_rate</value> + </param> + <param> + <key>sym_rate</key> + <value>sym_rate</value> + </param> + <param> + <key>alpha</key> + <value>0.35</value> + </param> + <param> + <key>ntaps</key> + <value>11*sps</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(1016, 35)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>analog_fastnoise_source_x</key> + <param> + <key>id</key> + <value>analog_fastnoise_source_x_0</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>type</key> + <value>float</value> + </param> + <param> + <key>noise_type</key> + <value>analog.GR_GAUSSIAN</value> + </param> + <param> + <key>amp</key> + <value>1</value> + </param> + <param> + <key>seed</key> + <value>0</value> + </param> + <param> + <key>samples</key> + <value>8192</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(176, 387)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>fir_filter_xxx</key> + <param> + <key>id</key> + <value>rrc_filter</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>type</key> + <value>fff</value> + </param> + <param> + <key>decim</key> + <value>1</value> + </param> + <param> + <key>taps</key> + <value>rrc_taps</value> + </param> + <param> + <key>samp_delay</key> + <value>0</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>comment</key> + <value>RRC filter</value> + </param> + <param> + <key>_coordinate</key> + <value>(392, 587)</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>float</value> + </param> + <param> + <key>name</key> + <value>""</value> + </param> + <param> + <key>fftsize</key> + <value>4096</value> + </param> + <param> + <key>freqhalf</key> + <value>False</value> + </param> + <param> + <key>wintype</key> + <value>firdes.WIN_BLACKMAN_hARRIS</value> + </param> + <param> + <key>fc</key> + <value>0</value> + </param> + <param> + <key>bw</key> + <value>samp_rate</value> + </param> + <param> + <key>grid</key> + <value>True</value> + </param> + <param> + <key>autoscale</key> + <value>False</value> + </param> + <param> + <key>average</key> + <value>0.2</value> + </param> + <param> + <key>ymin</key> + <value>-140</value> + </param> + <param> + <key>ymax</key> + <value>10</value> + </param> + <param> + <key>nconnections</key> + <value>5</value> + </param> + <param> + <key>update_time</key> + <value>0.10</value> + </param> + <param> + <key>gui_hint</key> + <value></value> + </param> + <param> + <key>showports</key> + <value>True</value> + </param> + <param> + <key>tr_mode</key> + <value>qtgui.TRIG_MODE_FREE</value> + </param> + <param> + <key>tr_level</key> + <value>0.0</value> + </param> + <param> + <key>tr_chan</key> + <value>0</value> + </param> + <param> + <key>tr_tag</key> + <value>""</value> + </param> + <param> + <key>ctrlpanel</key> + <value>True</value> + </param> + <param> + <key>legend</key> + <value>True</value> + </param> + <param> + <key>label1</key> + <value>Low-pass</value> + </param> + <param> + <key>width1</key> + <value>1</value> + </param> + <param> + <key>color1</key> + <value>"blue"</value> + </param> + <param> + <key>alpha1</key> + <value>0.9</value> + </param> + <param> + <key>label2</key> + <value>High-pass</value> + </param> + <param> + <key>width2</key> + <value>1</value> + </param> + <param> + <key>color2</key> + <value>"red"</value> + </param> + <param> + <key>alpha2</key> + <value>0.9</value> + </param> + <param> + <key>label3</key> + <value>Band-pass</value> + </param> + <param> + <key>width3</key> + <value>1</value> + </param> + <param> + <key>color3</key> + <value>"green"</value> + </param> + <param> + <key>alpha3</key> + <value>0.9</value> + </param> + <param> + <key>label4</key> + <value>Band-reject</value> + </param> + <param> + <key>width4</key> + <value>1</value> + </param> + <param> + <key>color4</key> + <value>"cyan"</value> + </param> + <param> + <key>alpha4</key> + <value>0.9</value> + </param> + <param> + <key>label5</key> + <value>RRC</value> + </param> + <param> + <key>width5</key> + <value>1</value> + </param> + <param> + <key>color5</key> + <value>"magenta"</value> + </param> + <param> + <key>alpha5</key> + <value>0.9</value> + </param> + <param> + <key>label6</key> + <value></value> + </param> + <param> + <key>width6</key> + <value>1</value> + </param> + <param> + <key>color6</key> + <value>"magenta"</value> + </param> + <param> + <key>alpha6</key> + <value>1.0</value> + </param> + <param> + <key>label7</key> + <value></value> + </param> + <param> + <key>width7</key> + <value>1</value> + </param> + <param> + <key>color7</key> + <value>"yellow"</value> + </param> + <param> + <key>alpha7</key> + <value>1.0</value> + </param> + <param> + <key>label8</key> + <value></value> + </param> + <param> + <key>width8</key> + <value>1</value> + </param> + <param> + <key>color8</key> + <value>"dark red"</value> + </param> + <param> + <key>alpha8</key> + <value>1.0</value> + </param> + <param> + <key>label9</key> + <value></value> + </param> + <param> + <key>width9</key> + <value>1</value> + </param> + <param> + <key>color9</key> + <value>"dark green"</value> + </param> + <param> + <key>alpha9</key> + <value>1.0</value> + </param> + <param> + <key>label10</key> + <value></value> + </param> + <param> + <key>width10</key> + <value>1</value> + </param> + <param> + <key>color10</key> + <value>"dark blue"</value> + </param> + <param> + <key>alpha10</key> + <value>1.0</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(728, 416)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <connection> + <source_block_id>bp_filter</source_block_id> + <sink_block_id>qtgui_freq_sink_x_0</sink_block_id> + <source_key>0</source_key> + <sink_key>2</sink_key> + </connection> + <connection> + <source_block_id>analog_fastnoise_source_x_0</source_block_id> + <sink_block_id>bp_filter</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>hp_filter</source_block_id> + <sink_block_id>qtgui_freq_sink_x_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>hp_filter</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>lp_filter</source_block_id> + <sink_block_id>qtgui_freq_sink_x_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>analog_fastnoise_source_x_0</source_block_id> + <sink_block_id>lp_filter</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>analog_fastnoise_source_x_0</source_block_id> + <sink_block_id>br_filter</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>br_filter</source_block_id> + <sink_block_id>qtgui_freq_sink_x_0</sink_block_id> + <source_key>0</source_key> + <sink_key>3</sink_key> + </connection> + <connection> + <source_block_id>rrc_filter</source_block_id> + <sink_block_id>qtgui_freq_sink_x_0</sink_block_id> + <source_key>0</source_key> + <sink_key>4</sink_key> + </connection> + <connection> + <source_block_id>analog_fastnoise_source_x_0</source_block_id> + <sink_block_id>rrc_filter</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> +</flow_graph> diff --git a/gr-filter/grc/CMakeLists.txt b/gr-filter/grc/CMakeLists.txt index 575f6675d6..b3bc2e1828 100644 --- a/gr-filter/grc/CMakeLists.txt +++ b/gr-filter/grc/CMakeLists.txt @@ -45,6 +45,11 @@ install(FILES filter_band_pass_filter.xml filter_band_reject_filter.xml filter_root_raised_cosine_filter.xml + variable_low_pass_filter_taps.xml + variable_high_pass_filter_taps.xml + variable_band_pass_filter_taps.xml + variable_band_reject_filter_taps.xml + variable_rrc_filter_taps.xml DESTINATION ${GRC_BLOCKS_DIR} COMPONENT "filter_python" ) diff --git a/gr-filter/grc/filter_block_tree.xml b/gr-filter/grc/filter_block_tree.xml index fbba9daf09..ea869a75bd 100644 --- a/gr-filter/grc/filter_block_tree.xml +++ b/gr-filter/grc/filter_block_tree.xml @@ -1,7 +1,7 @@ <?xml version="1.0"?> <!-- - Copyright 2012 Free Software Foundation, Inc. + Copyright 2012,2015 Free Software Foundation, Inc. This file is part of GNU Radio @@ -30,6 +30,12 @@ <name></name> <!-- Blank for Root Name --> <cat> <name>Filters</name> + <!-- FIR filter tap generators --> + <block>variable_low_pass_filter_taps</block> + <block>variable_high_pass_filter_taps</block> + <block>variable_band_pass_filter_taps</block> + <block>variable_band_reject_filter_taps</block> + <block>variable_rrc_filter_taps</block> <!-- FIR convenience filters --> <block>low_pass_filter</block> <block>high_pass_filter</block> diff --git a/gr-filter/grc/variable_band_pass_filter_taps.xml b/gr-filter/grc/variable_band_pass_filter_taps.xml new file mode 100644 index 0000000000..6cdfcc0373 --- /dev/null +++ b/gr-filter/grc/variable_band_pass_filter_taps.xml @@ -0,0 +1,97 @@ +<?xml version="1.0"?> +<!-- +####################################################### +# Convenience wrapper for calling firdes.band_pass(...) +# or firdes.complex_bandpass(...) +####################################################### + --> +<block> + <name>Band-pass Filter Taps</name> + <key>variable_band_pass_filter_taps</key> + <import>from gnuradio.filter import firdes</import> + <var_make> +self.$(id) = $(id) = firdes.$(type.fcn)($gain, $samp_rate, $low_cutoff_freq, $high_cutoff_freq, $width, $win, $beta) + </var_make> + <var_value>firdes.$(type.fcn)($gain, $samp_rate, $low_cutoff_freq, $high_cutoff_freq, $width, $win, $beta)</var_value> + <make></make> + + <param> + <name>Tap Type</name> + <key>type</key> + <type>enum</type> + <option> + <name>Real</name> + <key>taps_real</key> + <opt>fcn:band_pass</opt> + </option> + <option> + <name>Complex</name> + <key>taps_complex</key> + <opt>fcn:complex_band_pass</opt> + </option> + </param> + <param> + <name>Gain</name> + <key>gain</key> + <value>1.0</value> + <type>float</type> + </param> + <param> + <name>Sample Rate (Hz)</name> + <key>samp_rate</key> + <value>samp_rate</value> + <type>float</type> + </param> + <param> + <name>Low Cutoff Freq (Hz)</name> + <key>low_cutoff_freq</key> + <type>float</type> + </param> + <param> + <name>High Cutoff Freq (Hz)</name> + <key>high_cutoff_freq</key> + <type>float</type> + </param> + <param> + <name>Transition Width (Hz)</name> + <key>width</key> + <type>float</type> + </param> + <param> + <name>Window</name> + <key>win</key> + <value>firdes.WIN_HAMMING</value> + <type>int</type> + <option> + <name>Hamming</name> + <key>firdes.WIN_HAMMING</key> + </option> + <option> + <name>Hann</name> + <key>firdes.WIN_HANN</key> + </option> + <option> + <name>Blackman</name> + <key>firdes.WIN_BLACKMAN</key> + </option> + <option> + <name>Rectangular</name> + <key>firdes.WIN_RECTANGULAR</key> + </option> + <option> + <name>Kaiser</name> + <key>firdes.WIN_KAISER</key> + </option> + </param> + <param> + <name>Beta</name> + <key>beta</key> + <value>6.76</value> + <type>float</type> + </param> + <doc> + This is a convenience wrapper for calling firdes.band_pass() or firdes.complex_band_pass() + + The beta paramater only applies to the Kaiser window. + </doc> +</block> diff --git a/gr-filter/grc/variable_band_reject_filter_taps.xml b/gr-filter/grc/variable_band_reject_filter_taps.xml new file mode 100644 index 0000000000..fbf25886d3 --- /dev/null +++ b/gr-filter/grc/variable_band_reject_filter_taps.xml @@ -0,0 +1,81 @@ +<?xml version="1.0"?> +<!-- +######################################################### +# Convenience wrapper for calling firdes.band_reject(...) +######################################################### + --> +<block> + <name>Band-reject Filter Taps</name> + <key>variable_band_reject_filter_taps</key> + <import>from gnuradio.filter import firdes</import> + <var_make> +self.$(id) = $(id) = firdes.band_reject($gain, $samp_rate, $low_cutoff_freq, $high_cutoff_freq, $width, $win, $beta) + </var_make> + <var_value>firdes.band_reject($gain, $samp_rate, $low_cutoff_freq, $high_cutoff_freq, $width, $win, $beta)</var_value> + <make></make> + + <param> + <name>Gain</name> + <key>gain</key> + <value>1.0</value> + <type>float</type> + </param> + <param> + <name>Sample Rate (Hz)</name> + <key>samp_rate</key> + <value>samp_rate</value> + <type>float</type> + </param> + <param> + <name>Low Cutoff Freq (Hz)</name> + <key>low_cutoff_freq</key> + <type>float</type> + </param> + <param> + <name>High Cutoff Freq (Hz)</name> + <key>high_cutoff_freq</key> + <type>float</type> + </param> + <param> + <name>Transition Width (Hz)</name> + <key>width</key> + <type>float</type> + </param> + <param> + <name>Window</name> + <key>win</key> + <value>firdes.WIN_HAMMING</value> + <type>int</type> + <option> + <name>Hamming</name> + <key>firdes.WIN_HAMMING</key> + </option> + <option> + <name>Hann</name> + <key>firdes.WIN_HANN</key> + </option> + <option> + <name>Blackman</name> + <key>firdes.WIN_BLACKMAN</key> + </option> + <option> + <name>Rectangular</name> + <key>firdes.WIN_RECTANGULAR</key> + </option> + <option> + <name>Kaiser</name> + <key>firdes.WIN_KAISER</key> + </option> + </param> + <param> + <name>Beta</name> + <key>beta</key> + <value>6.76</value> + <type>float</type> + </param> + <doc> + This is a convenience wrapper for calling firdes.band_reject(). + + The beta paramater only applies to the Kaiser window. + </doc> +</block> diff --git a/gr-filter/grc/variable_high_pass_filter_taps.xml b/gr-filter/grc/variable_high_pass_filter_taps.xml new file mode 100644 index 0000000000..08768d808a --- /dev/null +++ b/gr-filter/grc/variable_high_pass_filter_taps.xml @@ -0,0 +1,75 @@ +<?xml version="1.0"?> +<!-- +###################################################### +## Convenience wrapper around call to fides.high_pass() +###################################################### + --> +<block> + <name>High-pass Filter Taps</name> + <key>variable_high_pass_filter_taps</key> + <import>from gnuradio.filter import firdes</import> + <var_make> +self.$(id) = $(id) = firdes.high_pass($gain, $samp_rate, $cutoff_freq, $width, $win, $beta) + </var_make> + <var_value>firdes.high_pass($gain, $samp_rate, $cutoff_freq, $width, $win, $beta)</var_value> + <make></make> + <param> + <name>Gain</name> + <key>gain</key> + <value>1.0</value> + <type>float</type> + </param> + <param> + <name>Sample Rate (Hz)</name> + <key>samp_rate</key> + <value>samp_rate</value> + <type>float</type> + </param> + <param> + <name>Cutoff Freq (Hz)</name> + <key>cutoff_freq</key> + <type>float</type> + </param> + <param> + <name>Transition Width (Hz)</name> + <key>width</key> + <type>float</type> + </param> + <param> + <name>Window</name> + <key>win</key> + <value>firdes.WIN_HAMMING</value> + <type>int</type> + <option> + <name>Hamming</name> + <key>firdes.WIN_HAMMING</key> + </option> + <option> + <name>Hann</name> + <key>firdes.WIN_HANN</key> + </option> + <option> + <name>Blackman</name> + <key>firdes.WIN_BLACKMAN</key> + </option> + <option> + <name>Rectangular</name> + <key>firdes.WIN_RECTANGULAR</key> + </option> + <option> + <name>Kaiser</name> + <key>firdes.WIN_KAISER</key> + </option> + </param> + <param> + <name>Beta</name> + <key>beta</key> + <value>6.76</value> + <type>float</type> + </param> + <doc> + This variable is a convenience wrapper around a call to firdes.high_pass(...). + + The beta paramater only applies to the Kaiser window. + </doc> +</block> diff --git a/gr-filter/grc/variable_low_pass_filter_taps.xml b/gr-filter/grc/variable_low_pass_filter_taps.xml new file mode 100644 index 0000000000..e3367b1ec5 --- /dev/null +++ b/gr-filter/grc/variable_low_pass_filter_taps.xml @@ -0,0 +1,75 @@ +<?xml version="1.0"?> +<!-- +###################################################### +## Convenience wrapper around call to fides.low_pass() +###################################################### + --> +<block> + <name>Low-pass Filter Taps</name> + <key>variable_low_pass_filter_taps</key> + <import>from gnuradio.filter import firdes</import> + <var_make> +self.$(id) = $(id) = firdes.low_pass($gain, $samp_rate, $cutoff_freq, $width, $win, $beta) + </var_make> + <var_value>firdes.low_pass($gain, $samp_rate, $cutoff_freq, $width, $win, $beta)</var_value> + <make></make> + <param> + <name>Gain</name> + <key>gain</key> + <value>1.0</value> + <type>float</type> + </param> + <param> + <name>Sample Rate (Hz)</name> + <key>samp_rate</key> + <value>samp_rate</value> + <type>float</type> + </param> + <param> + <name>Cutoff Freq (Hz)</name> + <key>cutoff_freq</key> + <type>float</type> + </param> + <param> + <name>Transition Width (Hz)</name> + <key>width</key> + <type>float</type> + </param> + <param> + <name>Window</name> + <key>win</key> + <value>firdes.WIN_HAMMING</value> + <type>int</type> + <option> + <name>Hamming</name> + <key>firdes.WIN_HAMMING</key> + </option> + <option> + <name>Hann</name> + <key>firdes.WIN_HANN</key> + </option> + <option> + <name>Blackman</name> + <key>firdes.WIN_BLACKMAN</key> + </option> + <option> + <name>Rectangular</name> + <key>firdes.WIN_RECTANGULAR</key> + </option> + <option> + <name>Kaiser</name> + <key>firdes.WIN_KAISER</key> + </option> + </param> + <param> + <name>Beta</name> + <key>beta</key> + <value>6.76</value> + <type>float</type> + </param> + <doc> + This variable is a convenience wrapper around a call to firdes.low_pass(...). + + The beta paramater only applies to the Kaiser window. + </doc> +</block> diff --git a/gr-filter/grc/variable_rrc_filter_taps.xml b/gr-filter/grc/variable_rrc_filter_taps.xml new file mode 100644 index 0000000000..2824ba75b2 --- /dev/null +++ b/gr-filter/grc/variable_rrc_filter_taps.xml @@ -0,0 +1,50 @@ +<?xml version="1.0"?> +<!-- +######################################################################## +## Convenience wrapper for calling firdes.root_raised_cosine_filter(...) +######################################################################## + --> +<block> + <name>RRC Filter Taps</name> + <key>variable_rrc_filter_taps</key> + <import>from gnuradio.filter import firdes</import> + <var_make> +self.$(id) = $(id) = firdes.root_raised_cosine($gain, $samp_rate, $sym_rate, $alpha, $ntaps) + </var_make> + <var_value>firdes.root_raised_cosine($gain, $samp_rate, $sym_rate, $alpha, $ntaps)</var_value> + <make></make> + + <param> + <name>Gain</name> + <key>gain</key> + <value>1.0</value> + <type>float</type> + </param> + <param> + <name>Sample Rate (Hz)</name> + <key>samp_rate</key> + <value>samp_rate</value> + <type>float</type> + </param> + <param> + <name>Symbol Rate (Hz)</name> + <key>sym_rate</key> + <value></value> + <type>float</type> + </param> + <param> + <name>Excess BW</name> + <key>alpha</key> + <value>0.35</value> + <type>float</type> + </param> + <param> + <name>Num Taps</name> + <key>ntaps</key> + <value>11*sps</value> + <type>int</type> + </param> + <doc> + This is a convenience wrapper for calling firdes.root_raised_cosine(...). + </doc> +</block> |