summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosh Morman <mormjb@gmail.com>2020-04-28 12:25:46 -0400
committerJosh Morman <mormjb@gmail.com>2020-06-04 10:05:48 -0400
commitb9169c0c773eb3e035bda38a99847d88b566176e (patch)
tree3ad936cdbef21af5cccb71e647a4483797dcbf85
parent9356302ff8894aad11202af42df8cf6096b241c5 (diff)
digital: add python bindings for equalizers+modulate_vector
-rw-r--r--gr-digital/python/digital/bindings/CMakeLists.txt9
-rw-r--r--gr-digital/python/digital/bindings/adaptive_algorithm_cma_python.cc79
-rw-r--r--gr-digital/python/digital/bindings/adaptive_algorithm_lms_python.cc64
-rw-r--r--gr-digital/python/digital/bindings/adaptive_algorithm_nlms_python.cc64
-rw-r--r--gr-digital/python/digital/bindings/adaptive_algorithm_python.cc80
-rw-r--r--gr-digital/python/digital/bindings/decision_feedback_equalizer_python.cc68
-rw-r--r--gr-digital/python/digital/bindings/docstrings/adaptive_algorithm_cma_pydoc_template.h40
-rw-r--r--gr-digital/python/digital/bindings/docstrings/adaptive_algorithm_lms_pydoc_template.h34
-rw-r--r--gr-digital/python/digital/bindings/docstrings/adaptive_algorithm_nlms_pydoc_template.h34
-rw-r--r--gr-digital/python/digital/bindings/docstrings/adaptive_algorithm_pydoc_template.h42
-rw-r--r--gr-digital/python/digital/bindings/docstrings/decision_feedback_equalizer_pydoc_template.h40
-rw-r--r--gr-digital/python/digital/bindings/docstrings/linear_equalizer_pydoc_template.h36
-rw-r--r--gr-digital/python/digital/bindings/docstrings/meas_evm_cc_pydoc_template.h24
-rw-r--r--gr-digital/python/digital/bindings/linear_equalizer_python.cc63
-rw-r--r--gr-digital/python/digital/bindings/meas_evm_cc_python.cc45
-rw-r--r--gr-digital/python/digital/bindings/modulate_vector_python.cc29
-rw-r--r--gr-digital/python/digital/bindings/python_bindings.cc18
-rwxr-xr-xgr-digital/python/digital/qa_decision_feedback_equalizer.py6
-rw-r--r--gr-digital/python/digital/qa_header_payload_demux.py44
-rwxr-xr-xgr-digital/python/digital/qa_linear_equalizer.py6
-rwxr-xr-xgr-digital/python/digital/qa_meas_evm_cc.py20
21 files changed, 804 insertions, 41 deletions
diff --git a/gr-digital/python/digital/bindings/CMakeLists.txt b/gr-digital/python/digital/bindings/CMakeLists.txt
index 1afdaecb66..51c0493c02 100644
--- a/gr-digital/python/digital/bindings/CMakeLists.txt
+++ b/gr-digital/python/digital/bindings/CMakeLists.txt
@@ -5,6 +5,10 @@ include(GrPybind)
########################################################################
list(APPEND digital_python_files
+ adaptive_algorithm_python.cc
+ adaptive_algorithm_cma_python.cc
+ adaptive_algorithm_lms_python.cc
+ adaptive_algorithm_nlms_python.cc
additive_scrambler_bb_python.cc
binary_slicer_fb_python.cc
burst_shaper_python.cc
@@ -27,6 +31,7 @@ list(APPEND digital_python_files
crc32_python.cc
crc32_async_bb_python.cc
crc32_bb_python.cc
+ decision_feedback_equalizer_python.cc
descrambler_bb_python.cc
diff_decoder_bb_python.cc
diff_encoder_bb_python.cc
@@ -48,10 +53,12 @@ list(APPEND digital_python_files
interpolating_resampler_type_python.cc
kurtotic_equalizer_cc_python.cc
lfsr_python.cc
+ linear_equalizer_python.cc
lms_dd_equalizer_cc_python.cc
map_bb_python.cc
+ meas_evm_cc_python.cc
metric_type_python.cc
- # modulate_vector_python.cc
+ modulate_vector_python.cc
mpsk_snr_est_python.cc
mpsk_snr_est_cc_python.cc
msk_timing_recovery_cc_python.cc
diff --git a/gr-digital/python/digital/bindings/adaptive_algorithm_cma_python.cc b/gr-digital/python/digital/bindings/adaptive_algorithm_cma_python.cc
new file mode 100644
index 0000000000..11f0563476
--- /dev/null
+++ b/gr-digital/python/digital/bindings/adaptive_algorithm_cma_python.cc
@@ -0,0 +1,79 @@
+/*
+ * Copyright 2020 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * SPDX-License-Identifier: GPL-3.0-or-later
+ *
+ */
+
+/* This file is automatically generated using bindtool */
+
+#include <pybind11/complex.h>
+#include <pybind11/pybind11.h>
+#include <pybind11/stl.h>
+
+namespace py = pybind11;
+
+#include <gnuradio/digital/adaptive_algorithm_cma.h>
+// pydoc.h is automatically generated in the build directory
+#include <adaptive_algorithm_cma_pydoc.h>
+
+void bind_adaptive_algorithm_cma(py::module& m)
+{
+
+ using adaptive_algorithm_cma = ::gr::digital::adaptive_algorithm_cma;
+
+
+ py::class_<adaptive_algorithm_cma,
+ gr::digital::adaptive_algorithm,
+ std::shared_ptr<adaptive_algorithm_cma>>(
+ m, "adaptive_algorithm_cma", D(adaptive_algorithm_cma))
+
+ .def(py::init(&adaptive_algorithm_cma::make),
+ py::arg("cons"),
+ py::arg("step_size"),
+ py::arg("modulus"),
+ D(adaptive_algorithm_cma, make))
+
+
+ .def("error",
+ &adaptive_algorithm_cma::error,
+ py::arg("out"),
+ D(adaptive_algorithm_cma, error))
+
+
+ .def("error_dd",
+ &adaptive_algorithm_cma::error_dd,
+ py::arg("u_n"),
+ py::arg("decision"),
+ D(adaptive_algorithm_cma, error_dd))
+
+
+ .def("error_tr",
+ &adaptive_algorithm_cma::error_tr,
+ py::arg("u_n"),
+ py::arg("d_n"),
+ D(adaptive_algorithm_cma, error_tr))
+
+
+ .def("update_taps",
+ &adaptive_algorithm_cma::update_taps,
+ py::arg("taps"),
+ py::arg("in"),
+ py::arg("error"),
+ py::arg("decision"),
+ py::arg("num_taps"),
+ D(adaptive_algorithm_cma, update_taps))
+
+
+ .def("update_tap",
+ &adaptive_algorithm_cma::update_tap,
+ py::arg("tap"),
+ py::arg("u_n"),
+ py::arg("err"),
+ py::arg("decision"),
+ D(adaptive_algorithm_cma, update_tap))
+
+ ;
+}
diff --git a/gr-digital/python/digital/bindings/adaptive_algorithm_lms_python.cc b/gr-digital/python/digital/bindings/adaptive_algorithm_lms_python.cc
new file mode 100644
index 0000000000..b4ba3cbf0b
--- /dev/null
+++ b/gr-digital/python/digital/bindings/adaptive_algorithm_lms_python.cc
@@ -0,0 +1,64 @@
+/*
+ * Copyright 2020 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * SPDX-License-Identifier: GPL-3.0-or-later
+ *
+ */
+
+/* This file is automatically generated using bindtool */
+
+#include <pybind11/complex.h>
+#include <pybind11/pybind11.h>
+#include <pybind11/stl.h>
+
+namespace py = pybind11;
+
+#include <gnuradio/digital/adaptive_algorithm_lms.h>
+// pydoc.h is automatically generated in the build directory
+#include <adaptive_algorithm_lms_pydoc.h>
+
+void bind_adaptive_algorithm_lms(py::module& m)
+{
+
+ using adaptive_algorithm_lms = ::gr::digital::adaptive_algorithm_lms;
+
+
+ py::class_<adaptive_algorithm_lms,
+ gr::digital::adaptive_algorithm,
+ std::shared_ptr<adaptive_algorithm_lms>>(
+ m, "adaptive_algorithm_lms", D(adaptive_algorithm_lms))
+
+ .def(py::init(&adaptive_algorithm_lms::make),
+ py::arg("cons"),
+ py::arg("step_size"),
+ D(adaptive_algorithm_lms, make))
+
+
+ .def("update_taps",
+ &adaptive_algorithm_lms::update_taps,
+ py::arg("taps"),
+ py::arg("in"),
+ py::arg("error"),
+ py::arg("decision"),
+ py::arg("num_taps"),
+ D(adaptive_algorithm_lms, update_taps))
+
+
+ .def("update_tap",
+ &adaptive_algorithm_lms::update_tap,
+ py::arg("tap"),
+ py::arg("u_n"),
+ py::arg("err"),
+ py::arg("decision"),
+ D(adaptive_algorithm_lms, update_tap))
+
+
+ .def("initialize_taps",
+ &adaptive_algorithm_lms::initialize_taps,
+ py::arg("taps"),
+ D(adaptive_algorithm_lms, initialize_taps))
+
+ ;
+}
diff --git a/gr-digital/python/digital/bindings/adaptive_algorithm_nlms_python.cc b/gr-digital/python/digital/bindings/adaptive_algorithm_nlms_python.cc
new file mode 100644
index 0000000000..1127b622fc
--- /dev/null
+++ b/gr-digital/python/digital/bindings/adaptive_algorithm_nlms_python.cc
@@ -0,0 +1,64 @@
+/*
+ * Copyright 2020 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * SPDX-License-Identifier: GPL-3.0-or-later
+ *
+ */
+
+/* This file is automatically generated using bindtool */
+
+#include <pybind11/complex.h>
+#include <pybind11/pybind11.h>
+#include <pybind11/stl.h>
+
+namespace py = pybind11;
+
+#include <gnuradio/digital/adaptive_algorithm_nlms.h>
+// pydoc.h is automatically generated in the build directory
+#include <adaptive_algorithm_nlms_pydoc.h>
+
+void bind_adaptive_algorithm_nlms(py::module& m)
+{
+
+ using adaptive_algorithm_nlms = ::gr::digital::adaptive_algorithm_nlms;
+
+
+ py::class_<adaptive_algorithm_nlms,
+ gr::digital::adaptive_algorithm,
+ std::shared_ptr<adaptive_algorithm_nlms>>(
+ m, "adaptive_algorithm_nlms", D(adaptive_algorithm_nlms))
+
+ .def(py::init(&adaptive_algorithm_nlms::make),
+ py::arg("cons"),
+ py::arg("step_size"),
+ D(adaptive_algorithm_nlms, make))
+
+
+ .def("update_tap",
+ &adaptive_algorithm_nlms::update_tap,
+ py::arg("tap"),
+ py::arg("in"),
+ py::arg("error"),
+ py::arg("decision"),
+ D(adaptive_algorithm_nlms, update_tap))
+
+
+ .def("update_taps",
+ &adaptive_algorithm_nlms::update_taps,
+ py::arg("taps"),
+ py::arg("in"),
+ py::arg("error"),
+ py::arg("decision"),
+ py::arg("num_taps"),
+ D(adaptive_algorithm_nlms, update_taps))
+
+
+ .def("initialize_taps",
+ &adaptive_algorithm_nlms::initialize_taps,
+ py::arg("taps"),
+ D(adaptive_algorithm_nlms, initialize_taps))
+
+ ;
+}
diff --git a/gr-digital/python/digital/bindings/adaptive_algorithm_python.cc b/gr-digital/python/digital/bindings/adaptive_algorithm_python.cc
new file mode 100644
index 0000000000..e27279c41f
--- /dev/null
+++ b/gr-digital/python/digital/bindings/adaptive_algorithm_python.cc
@@ -0,0 +1,80 @@
+/*
+ * Copyright 2020 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * SPDX-License-Identifier: GPL-3.0-or-later
+ *
+ */
+
+/* This file is automatically generated using bindtool */
+
+#include <pybind11/complex.h>
+#include <pybind11/pybind11.h>
+#include <pybind11/stl.h>
+
+namespace py = pybind11;
+
+#include <gnuradio/digital/adaptive_algorithm.h>
+// pydoc.h is automatically generated in the build directory
+#include <adaptive_algorithm_pydoc.h>
+
+void bind_adaptive_algorithm(py::module& m)
+{
+
+ using adaptive_algorithm = ::gr::digital::adaptive_algorithm;
+
+
+ py::class_<adaptive_algorithm,
+ std::shared_ptr<adaptive_algorithm>>(
+ m, "adaptive_algorithm", D(adaptive_algorithm))
+
+ .def("base", &adaptive_algorithm::base, D(adaptive_algorithm, base))
+
+
+ .def("initialize_taps",
+ &adaptive_algorithm::initialize_taps,
+ py::arg("taps"),
+ D(adaptive_algorithm, initialize_taps))
+
+
+ .def("error_dd",
+ &adaptive_algorithm::error_dd,
+ py::arg("wu"),
+ py::arg("decision"),
+ D(adaptive_algorithm, error_dd))
+
+
+ .def("error_tr",
+ &adaptive_algorithm::error_tr,
+ py::arg("wu"),
+ py::arg("d_n"),
+ D(adaptive_algorithm, error_tr))
+
+
+ .def("update_tap",
+ &adaptive_algorithm::update_tap,
+ py::arg("tap"),
+ py::arg("in"),
+ py::arg("error"),
+ py::arg("decision"),
+ D(adaptive_algorithm, update_tap))
+
+
+ .def("update_taps",
+ &adaptive_algorithm::update_taps,
+ py::arg("taps"),
+ py::arg("in"),
+ py::arg("error"),
+ py::arg("decision"),
+ py::arg("num_taps"),
+ D(adaptive_algorithm, update_taps))
+
+ ;
+
+ py::enum_<::gr::digital::adaptive_algorithm_t>(m, "adaptive_algorithm_t")
+ .value("LMS", ::gr::digital::adaptive_algorithm_t::LMS) // 0
+ .value("NLMS", ::gr::digital::adaptive_algorithm_t::NLMS) // 1
+ .value("CMA", ::gr::digital::adaptive_algorithm_t::CMA) // 2
+ .export_values();
+}
diff --git a/gr-digital/python/digital/bindings/decision_feedback_equalizer_python.cc b/gr-digital/python/digital/bindings/decision_feedback_equalizer_python.cc
new file mode 100644
index 0000000000..fa2345f8b5
--- /dev/null
+++ b/gr-digital/python/digital/bindings/decision_feedback_equalizer_python.cc
@@ -0,0 +1,68 @@
+/*
+ * Copyright 2020 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * SPDX-License-Identifier: GPL-3.0-or-later
+ *
+ */
+
+/* This file is automatically generated using bindtool */
+
+#include <pybind11/complex.h>
+#include <pybind11/pybind11.h>
+#include <pybind11/stl.h>
+
+namespace py = pybind11;
+
+#include <gnuradio/digital/decision_feedback_equalizer.h>
+// pydoc.h is automatically generated in the build directory
+#include <decision_feedback_equalizer_pydoc.h>
+
+void bind_decision_feedback_equalizer(py::module& m)
+{
+
+ using decision_feedback_equalizer = ::gr::digital::decision_feedback_equalizer;
+
+
+ py::class_<decision_feedback_equalizer,
+ gr::sync_decimator,
+ std::shared_ptr<decision_feedback_equalizer>>(
+ m, "decision_feedback_equalizer", D(decision_feedback_equalizer))
+
+ .def(py::init(&decision_feedback_equalizer::make),
+ py::arg("num_taps_forward"),
+ py::arg("num_taps_feedback"),
+ py::arg("sps"),
+ py::arg("alg"),
+ py::arg("adapt_after_training") = true,
+ py::arg("training_sequence") = std::vector<gr_complex>(),
+ py::arg("training_start_tag") = "",
+ D(decision_feedback_equalizer, make))
+
+
+ .def("set_taps",
+ &decision_feedback_equalizer::set_taps,
+ py::arg("taps"),
+ D(decision_feedback_equalizer, set_taps))
+
+
+ .def("taps",
+ &decision_feedback_equalizer::taps,
+ D(decision_feedback_equalizer, taps))
+
+
+ .def("equalize",
+ &decision_feedback_equalizer::equalize,
+ py::arg("input_samples"),
+ py::arg("output_symbols"),
+ py::arg("num_inputs"),
+ py::arg("max_num_outputs"),
+ py::arg("training_start_samples") = std::vector<unsigned int>(0),
+ py::arg("history_included") = false,
+ py::arg("taps") = nullptr,
+ py::arg("state") = nullptr,
+ D(decision_feedback_equalizer, equalize))
+
+ ;
+}
diff --git a/gr-digital/python/digital/bindings/docstrings/adaptive_algorithm_cma_pydoc_template.h b/gr-digital/python/digital/bindings/docstrings/adaptive_algorithm_cma_pydoc_template.h
new file mode 100644
index 0000000000..fc390e7bbb
--- /dev/null
+++ b/gr-digital/python/digital/bindings/docstrings/adaptive_algorithm_cma_pydoc_template.h
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2020 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * SPDX-License-Identifier: GPL-3.0-or-later
+ *
+ */
+#include "pydoc_macros.h"
+#define D(...) DOC(gr, digital, __VA_ARGS__)
+/*
+ This file contains placeholders for docstrings for the Python bindings.
+ Do not edit! These were automatically extracted during the binding process
+ and will be overwritten during the build process
+ */
+
+
+static const char* __doc_gr_digital_adaptive_algorithm_cma = R"doc()doc";
+
+
+static const char* __doc_gr_digital_adaptive_algorithm_cma_adaptive_algorithm_cma =
+ R"doc()doc";
+
+
+static const char* __doc_gr_digital_adaptive_algorithm_cma_make = R"doc()doc";
+
+
+static const char* __doc_gr_digital_adaptive_algorithm_cma_error = R"doc()doc";
+
+
+static const char* __doc_gr_digital_adaptive_algorithm_cma_error_dd = R"doc()doc";
+
+
+static const char* __doc_gr_digital_adaptive_algorithm_cma_error_tr = R"doc()doc";
+
+
+static const char* __doc_gr_digital_adaptive_algorithm_cma_update_taps = R"doc()doc";
+
+
+static const char* __doc_gr_digital_adaptive_algorithm_cma_update_tap = R"doc()doc";
diff --git a/gr-digital/python/digital/bindings/docstrings/adaptive_algorithm_lms_pydoc_template.h b/gr-digital/python/digital/bindings/docstrings/adaptive_algorithm_lms_pydoc_template.h
new file mode 100644
index 0000000000..68a262aa79
--- /dev/null
+++ b/gr-digital/python/digital/bindings/docstrings/adaptive_algorithm_lms_pydoc_template.h
@@ -0,0 +1,34 @@
+/*
+ * Copyright 2020 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * SPDX-License-Identifier: GPL-3.0-or-later
+ *
+ */
+#include "pydoc_macros.h"
+#define D(...) DOC(gr, digital, __VA_ARGS__)
+/*
+ This file contains placeholders for docstrings for the Python bindings.
+ Do not edit! These were automatically extracted during the binding process
+ and will be overwritten during the build process
+ */
+
+
+static const char* __doc_gr_digital_adaptive_algorithm_lms = R"doc()doc";
+
+
+static const char* __doc_gr_digital_adaptive_algorithm_lms_adaptive_algorithm_lms =
+ R"doc()doc";
+
+
+static const char* __doc_gr_digital_adaptive_algorithm_lms_make = R"doc()doc";
+
+
+static const char* __doc_gr_digital_adaptive_algorithm_lms_update_taps = R"doc()doc";
+
+
+static const char* __doc_gr_digital_adaptive_algorithm_lms_update_tap = R"doc()doc";
+
+
+static const char* __doc_gr_digital_adaptive_algorithm_lms_initialize_taps = R"doc()doc";
diff --git a/gr-digital/python/digital/bindings/docstrings/adaptive_algorithm_nlms_pydoc_template.h b/gr-digital/python/digital/bindings/docstrings/adaptive_algorithm_nlms_pydoc_template.h
new file mode 100644
index 0000000000..301d2032a9
--- /dev/null
+++ b/gr-digital/python/digital/bindings/docstrings/adaptive_algorithm_nlms_pydoc_template.h
@@ -0,0 +1,34 @@
+/*
+ * Copyright 2020 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * SPDX-License-Identifier: GPL-3.0-or-later
+ *
+ */
+#include "pydoc_macros.h"
+#define D(...) DOC(gr, digital, __VA_ARGS__)
+/*
+ This file contains placeholders for docstrings for the Python bindings.
+ Do not edit! These were automatically extracted during the binding process
+ and will be overwritten during the build process
+ */
+
+
+static const char* __doc_gr_digital_adaptive_algorithm_nlms = R"doc()doc";
+
+
+static const char* __doc_gr_digital_adaptive_algorithm_nlms_adaptive_algorithm_nlms =
+ R"doc()doc";
+
+
+static const char* __doc_gr_digital_adaptive_algorithm_nlms_make = R"doc()doc";
+
+
+static const char* __doc_gr_digital_adaptive_algorithm_nlms_update_tap = R"doc()doc";
+
+
+static const char* __doc_gr_digital_adaptive_algorithm_nlms_update_taps = R"doc()doc";
+
+
+static const char* __doc_gr_digital_adaptive_algorithm_nlms_initialize_taps = R"doc()doc";
diff --git a/gr-digital/python/digital/bindings/docstrings/adaptive_algorithm_pydoc_template.h b/gr-digital/python/digital/bindings/docstrings/adaptive_algorithm_pydoc_template.h
new file mode 100644
index 0000000000..02e11cff85
--- /dev/null
+++ b/gr-digital/python/digital/bindings/docstrings/adaptive_algorithm_pydoc_template.h
@@ -0,0 +1,42 @@
+/*
+ * Copyright 2020 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * SPDX-License-Identifier: GPL-3.0-or-later
+ *
+ */
+#include "pydoc_macros.h"
+#define D(...) DOC(gr, digital, __VA_ARGS__)
+/*
+ This file contains placeholders for docstrings for the Python bindings.
+ Do not edit! These were automatically extracted during the binding process
+ and will be overwritten during the build process
+ */
+
+
+static const char* __doc_gr_digital_adaptive_algorithm = R"doc()doc";
+
+
+static const char* __doc_gr_digital_adaptive_algorithm_adaptive_algorithm_0 = R"doc()doc";
+
+
+static const char* __doc_gr_digital_adaptive_algorithm_adaptive_algorithm_1 = R"doc()doc";
+
+
+static const char* __doc_gr_digital_adaptive_algorithm_base = R"doc()doc";
+
+
+static const char* __doc_gr_digital_adaptive_algorithm_initialize_taps = R"doc()doc";
+
+
+static const char* __doc_gr_digital_adaptive_algorithm_error_dd = R"doc()doc";
+
+
+static const char* __doc_gr_digital_adaptive_algorithm_error_tr = R"doc()doc";
+
+
+static const char* __doc_gr_digital_adaptive_algorithm_update_tap = R"doc()doc";
+
+
+static const char* __doc_gr_digital_adaptive_algorithm_update_taps = R"doc()doc";
diff --git a/gr-digital/python/digital/bindings/docstrings/decision_feedback_equalizer_pydoc_template.h b/gr-digital/python/digital/bindings/docstrings/decision_feedback_equalizer_pydoc_template.h
new file mode 100644
index 0000000000..eb95c4a2d0
--- /dev/null
+++ b/gr-digital/python/digital/bindings/docstrings/decision_feedback_equalizer_pydoc_template.h
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2020 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * SPDX-License-Identifier: GPL-3.0-or-later
+ *
+ */
+#include "pydoc_macros.h"
+#define D(...) DOC(gr, digital, __VA_ARGS__)
+/*
+ This file contains placeholders for docstrings for the Python bindings.
+ Do not edit! These were automatically extracted during the binding process
+ and will be overwritten during the build process
+ */
+
+
+static const char* __doc_gr_digital_decision_feedback_equalizer = R"doc()doc";
+
+
+static const char*
+ __doc_gr_digital_decision_feedback_equalizer_decision_feedback_equalizer_0 =
+ R"doc()doc";
+
+
+static const char*
+ __doc_gr_digital_decision_feedback_equalizer_decision_feedback_equalizer_1 =
+ R"doc()doc";
+
+
+static const char* __doc_gr_digital_decision_feedback_equalizer_make = R"doc()doc";
+
+
+static const char* __doc_gr_digital_decision_feedback_equalizer_set_taps = R"doc()doc";
+
+
+static const char* __doc_gr_digital_decision_feedback_equalizer_taps = R"doc()doc";
+
+
+static const char* __doc_gr_digital_decision_feedback_equalizer_equalize = R"doc()doc";
diff --git a/gr-digital/python/digital/bindings/docstrings/linear_equalizer_pydoc_template.h b/gr-digital/python/digital/bindings/docstrings/linear_equalizer_pydoc_template.h
new file mode 100644
index 0000000000..1c796b484e
--- /dev/null
+++ b/gr-digital/python/digital/bindings/docstrings/linear_equalizer_pydoc_template.h
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2020 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * SPDX-License-Identifier: GPL-3.0-or-later
+ *
+ */
+#include "pydoc_macros.h"
+#define D(...) DOC(gr, digital, __VA_ARGS__)
+/*
+ This file contains placeholders for docstrings for the Python bindings.
+ Do not edit! These were automatically extracted during the binding process
+ and will be overwritten during the build process
+ */
+
+
+static const char* __doc_gr_digital_linear_equalizer = R"doc()doc";
+
+
+static const char* __doc_gr_digital_linear_equalizer_linear_equalizer_0 = R"doc()doc";
+
+
+static const char* __doc_gr_digital_linear_equalizer_linear_equalizer_1 = R"doc()doc";
+
+
+static const char* __doc_gr_digital_linear_equalizer_make = R"doc()doc";
+
+
+static const char* __doc_gr_digital_linear_equalizer_set_taps = R"doc()doc";
+
+
+static const char* __doc_gr_digital_linear_equalizer_taps = R"doc()doc";
+
+
+static const char* __doc_gr_digital_linear_equalizer_equalize = R"doc()doc";
diff --git a/gr-digital/python/digital/bindings/docstrings/meas_evm_cc_pydoc_template.h b/gr-digital/python/digital/bindings/docstrings/meas_evm_cc_pydoc_template.h
new file mode 100644
index 0000000000..c348425ad5
--- /dev/null
+++ b/gr-digital/python/digital/bindings/docstrings/meas_evm_cc_pydoc_template.h
@@ -0,0 +1,24 @@
+/*
+ * Copyright 2020 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * SPDX-License-Identifier: GPL-3.0-or-later
+ *
+ */
+#include "pydoc_macros.h"
+#define D(...) DOC(gr, digital, __VA_ARGS__)
+/*
+ This file contains placeholders for docstrings for the Python bindings.
+ Do not edit! These were automatically extracted during the binding process
+ and will be overwritten during the build process
+ */
+
+
+static const char* __doc_gr_digital_meas_evm_cc = R"doc()doc";
+
+
+static const char* __doc_gr_digital_meas_evm_cc_meas_evm_cc = R"doc()doc";
+
+
+static const char* __doc_gr_digital_meas_evm_cc_make = R"doc()doc";
diff --git a/gr-digital/python/digital/bindings/linear_equalizer_python.cc b/gr-digital/python/digital/bindings/linear_equalizer_python.cc
new file mode 100644
index 0000000000..7697a0e0e2
--- /dev/null
+++ b/gr-digital/python/digital/bindings/linear_equalizer_python.cc
@@ -0,0 +1,63 @@
+/*
+ * Copyright 2020 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * SPDX-License-Identifier: GPL-3.0-or-later
+ *
+ */
+
+/* This file is automatically generated using bindtool */
+
+#include <pybind11/complex.h>
+#include <pybind11/pybind11.h>
+#include <pybind11/stl.h>
+
+namespace py = pybind11;
+
+#include <gnuradio/digital/linear_equalizer.h>
+// pydoc.h is automatically generated in the build directory
+#include <linear_equalizer_pydoc.h>
+
+void bind_linear_equalizer(py::module& m)
+{
+
+ using linear_equalizer = ::gr::digital::linear_equalizer;
+
+
+ py::class_<linear_equalizer, gr::sync_decimator, std::shared_ptr<linear_equalizer>>(
+ m, "linear_equalizer", D(linear_equalizer))
+
+ .def(py::init(&linear_equalizer::make),
+ py::arg("num_taps"),
+ py::arg("sps"),
+ py::arg("alg"),
+ py::arg("adapt_after_training") = true,
+ py::arg("training_sequence") = std::vector<gr_complex>(),
+ py::arg("training_start_tag") = "",
+ D(linear_equalizer, make))
+
+
+ .def("set_taps",
+ &linear_equalizer::set_taps,
+ py::arg("taps"),
+ D(linear_equalizer, set_taps))
+
+
+ .def("taps", &linear_equalizer::taps, D(linear_equalizer, taps))
+
+
+ .def("equalize",
+ &linear_equalizer::equalize,
+ py::arg("input_samples"),
+ py::arg("output_symbols"),
+ py::arg("num_inputs"),
+ py::arg("max_num_outputs"),
+ py::arg("training_start_samples") = std::vector<unsigned int>(0),
+ py::arg("history_included") = false,
+ py::arg("taps") = nullptr,
+ py::arg("state") = nullptr,
+ D(linear_equalizer, equalize))
+
+ ;
+}
diff --git a/gr-digital/python/digital/bindings/meas_evm_cc_python.cc b/gr-digital/python/digital/bindings/meas_evm_cc_python.cc
new file mode 100644
index 0000000000..fb0b233b89
--- /dev/null
+++ b/gr-digital/python/digital/bindings/meas_evm_cc_python.cc
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2020 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * SPDX-License-Identifier: GPL-3.0-or-later
+ *
+ */
+
+/* This file is automatically generated using bindtool */
+
+#include <pybind11/complex.h>
+#include <pybind11/pybind11.h>
+#include <pybind11/stl.h>
+
+namespace py = pybind11;
+
+#include <gnuradio/digital/meas_evm_cc.h>
+// pydoc.h is automatically generated in the build directory
+#include <meas_evm_cc_pydoc.h>
+
+void bind_meas_evm_cc(py::module& m)
+{
+
+ using meas_evm_cc = ::gr::digital::meas_evm_cc;
+
+ py::enum_<::gr::digital::evm_measurement_t>(m, "evm_measurement_t")
+ .value("EVM_PERCENT", ::gr::digital::evm_measurement_t::EVM_PERCENT) // 0
+ .value("EVM_DB", ::gr::digital::evm_measurement_t::EVM_DB) // 1
+ .export_values();
+
+ py::class_<meas_evm_cc,
+ gr::sync_block,
+ gr::block,
+ gr::basic_block,
+ std::shared_ptr<meas_evm_cc>>(m, "meas_evm_cc", D(meas_evm_cc))
+
+ .def(py::init(&meas_evm_cc::make),
+ py::arg("cons"),
+ py::arg("meas_type") = ::gr::digital::evm_measurement_t::EVM_PERCENT,
+ D(meas_evm_cc, make))
+
+
+ ;
+} \ No newline at end of file
diff --git a/gr-digital/python/digital/bindings/modulate_vector_python.cc b/gr-digital/python/digital/bindings/modulate_vector_python.cc
new file mode 100644
index 0000000000..6e486a841e
--- /dev/null
+++ b/gr-digital/python/digital/bindings/modulate_vector_python.cc
@@ -0,0 +1,29 @@
+/*
+ * Copyright 2020 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * SPDX-License-Identifier: GPL-3.0-or-later
+ *
+ */
+
+/* This file is automatically generated using bindtool */
+
+#include <pybind11/complex.h>
+#include <pybind11/pybind11.h>
+#include <pybind11/stl.h>
+
+namespace py = pybind11;
+
+#include <gnuradio/basic_block.h>
+#include <gnuradio/runtime_types.h>
+#include <gnuradio/digital/modulate_vector.h>
+
+void bind_modulate_vector(py::module& m)
+{
+
+ m.def("modulate_vector_bc",&::gr::digital::modulate_vector_bc,
+ py::arg("modulator"),
+ py::arg("data"),
+ py::arg("taps"));
+}
diff --git a/gr-digital/python/digital/bindings/python_bindings.cc b/gr-digital/python/digital/bindings/python_bindings.cc
index fddd0e7d90..e7a0428d4e 100644
--- a/gr-digital/python/digital/bindings/python_bindings.cc
+++ b/gr-digital/python/digital/bindings/python_bindings.cc
@@ -15,6 +15,10 @@
namespace py = pybind11;
+void bind_adaptive_algorithm(py::module&);
+void bind_adaptive_algorithm_cma(py::module&);
+void bind_adaptive_algorithm_lms(py::module&);
+void bind_adaptive_algorithm_nlms(py::module&);
void bind_additive_scrambler_bb(py::module&);
void bind_binary_slicer_fb(py::module&);
void bind_burst_shaper(py::module&);
@@ -37,6 +41,7 @@ void bind_cpmmod_bc(py::module&);
void bind_crc32(py::module&);
void bind_crc32_async_bb(py::module&);
void bind_crc32_bb(py::module&);
+void bind_decision_feedback_equalizer(py::module&);
void bind_descrambler_bb(py::module&);
void bind_diff_decoder_bb(py::module&);
void bind_diff_encoder_bb(py::module&);
@@ -58,10 +63,12 @@ void bind_header_payload_demux(py::module&);
void bind_interpolating_resampler_type(py::module&);
void bind_kurtotic_equalizer_cc(py::module&);
void bind_lfsr(py::module&);
+void bind_linear_equalizer(py::module&);
void bind_lms_dd_equalizer_cc(py::module&);
void bind_map_bb(py::module&);
+void bind_meas_evm_cc(py::module&);
void bind_metric_type(py::module&);
-// void bind_modulate_vector(py::module&);
+void bind_modulate_vector(py::module&);
void bind_mpsk_snr_est(py::module&);
void bind_mpsk_snr_est_cc(py::module&);
void bind_msk_timing_recovery_cc(py::module&);
@@ -114,6 +121,10 @@ PYBIND11_MODULE(digital_python, m)
// Allow access to base block methods
py::module::import("gnuradio.gr");
+ bind_adaptive_algorithm(m);
+ bind_adaptive_algorithm_cma(m);
+ bind_adaptive_algorithm_lms(m);
+ bind_adaptive_algorithm_nlms(m);
bind_additive_scrambler_bb(m);
bind_binary_slicer_fb(m);
bind_burst_shaper(m);
@@ -136,6 +147,7 @@ PYBIND11_MODULE(digital_python, m)
bind_crc32(m);
bind_crc32_async_bb(m);
bind_crc32_bb(m);
+ bind_decision_feedback_equalizer(m);
bind_descrambler_bb(m);
bind_diff_decoder_bb(m);
bind_diff_encoder_bb(m);
@@ -157,10 +169,12 @@ PYBIND11_MODULE(digital_python, m)
bind_interpolating_resampler_type(m);
bind_kurtotic_equalizer_cc(m);
bind_lfsr(m);
+ bind_linear_equalizer(m);
bind_lms_dd_equalizer_cc(m);
bind_map_bb(m);
+ bind_meas_evm_cc(m);
bind_metric_type(m);
- // bind_modulate_vector(m);
+ bind_modulate_vector(m);
bind_mpsk_snr_est(m);
bind_mpsk_snr_est_cc(m);
bind_msk_timing_recovery_cc(m);
diff --git a/gr-digital/python/digital/qa_decision_feedback_equalizer.py b/gr-digital/python/digital/qa_decision_feedback_equalizer.py
index a29b783a3e..1a9d3abe79 100755
--- a/gr-digital/python/digital/qa_decision_feedback_equalizer.py
+++ b/gr-digital/python/digital/qa_decision_feedback_equalizer.py
@@ -106,7 +106,7 @@ class qa_linear_equalizer(gr_unittest.TestCase):
preamble_symbols = self.map_symbols_to_constellation(self.unpack_values(self.preamble, 8, 2), cons)
alg = digital.adaptive_algorithm_lms(cons, gain).base()
- evm = digital.meas_evm_cc(cons, digital.evm_measurement_t_EVM_PERCENT)
+ evm = digital.meas_evm_cc(cons, digital.evm_measurement_t.EVM_PERCENT)
dfe = digital.decision_feedback_equalizer(num_taps_fwd, num_taps_rev, self.sps, alg, True, preamble_symbols, 'corr_est')
correst = digital.corr_est_cc(modulated_sync_word, self.sps, 12, corr_calc, digital.THRESHOLD_ABSOLUTE)
constmod = digital.generic_mod(
@@ -134,8 +134,8 @@ class qa_linear_equalizer(gr_unittest.TestCase):
self.tb.run()
# look at the last 1000 samples, should converge quickly, below 5% EVM
- upper_bound = tuple(20.0*numpy.ones((num_test,)))
- lower_bound = tuple(0.0*numpy.zeros((num_test,)))
+ upper_bound = list(20.0*numpy.ones((num_test,)))
+ lower_bound = list(0.0*numpy.zeros((num_test,)))
output_data = vsi.data()
output_data = output_data[-num_test:]
self.assertLess(output_data, upper_bound)
diff --git a/gr-digital/python/digital/qa_header_payload_demux.py b/gr-digital/python/digital/qa_header_payload_demux.py
index dea6c19a9b..bd1b2e1041 100644
--- a/gr-digital/python/digital/qa_header_payload_demux.py
+++ b/gr-digital/python/digital/qa_header_payload_demux.py
@@ -143,8 +143,8 @@ class qa_header_payload_demux (gr_unittest.TestCase):
payload_sink,
header_sink)
self.run_tb(payload_sink, len(payload), header_sink, len(header))
- self.assertEqual(header_sink.data(), header)
- self.assertEqual(payload_sink.data(), payload)
+ self.assertEqual(header_sink.data(), list(header))
+ self.assertEqual(payload_sink.data(), list(payload))
ptags_header = []
for tag in header_sink.tags():
ptag = gr.tag_to_python(tag)
@@ -201,8 +201,8 @@ class qa_header_payload_demux (gr_unittest.TestCase):
self.connect_all_blocks(data_src, None, hpd, mock_header_demod, payload_sink, header_sink)
self.run_tb(payload_sink, len(payload), header_sink, len(header))
# Check results
- self.assertEqual(header_sink.data(), header)
- self.assertEqual(payload_sink.data(), payload)
+ self.assertEqual(header_sink.data(), list(header))
+ self.assertEqual(payload_sink.data(), list(payload))
ptags_header = []
for tag in header_sink.tags():
ptag = gr.tag_to_python(tag)
@@ -225,10 +225,10 @@ class qa_header_payload_demux (gr_unittest.TestCase):
def test_001_headerpadding (self):
""" Like test 1, but with header padding. """
n_zeros = 3
- header = (1, 2, 3)
+ header = [1, 2, 3]
header_padding = 1
- payload = tuple(range(5, 20))
- data_signal = (0,) * n_zeros + header + payload
+ payload = list(range(5, 20))
+ data_signal = [0,] * n_zeros + header + payload
trigger_signal = [0] * len(data_signal)
trigger_signal[n_zeros] = 1
# This is dropped:
@@ -269,7 +269,7 @@ class qa_header_payload_demux (gr_unittest.TestCase):
self.run_tb(payload_sink, len(payload), header_sink, len(header)+2)
# Check values
# Header now is padded:
- self.assertEqual(header_sink.data(), (0,) + header + (payload[0],))
+ self.assertEqual(header_sink.data(), [0,] + header + [payload[0],])
self.assertEqual(payload_sink.data(), payload)
ptags_header = []
for tag in header_sink.tags():
@@ -293,11 +293,11 @@ class qa_header_payload_demux (gr_unittest.TestCase):
def test_001_headerpadding_payload_offset (self):
""" Like test 1, but with header padding + payload offset. """
n_zeros = 3
- header = (1, 2, 3)
+ header = [1, 2, 3]
header_padding = 1
payload_offset = -1
- payload = tuple(range(5, 20))
- data_signal = (0,) * n_zeros + header + payload + (0,) * 100
+ payload = list(range(5, 20))
+ data_signal = [0,] * n_zeros + header + payload + [0,] * 100
trigger_signal = [0] * len(data_signal)
trigger_signal[n_zeros] = 1
# This goes on output 1, item 3 + 1 (for payload offset)
@@ -339,7 +339,7 @@ class qa_header_payload_demux (gr_unittest.TestCase):
self.tb.stop()
self.tb.wait()
# Header is now padded:
- self.assertEqual(header_sink.data(), (0,) + header + (payload[0],))
+ self.assertEqual(header_sink.data(), [0,] + header + [payload[0],])
# Payload is now offset:
self.assertEqual(
payload_sink.data(),
@@ -433,12 +433,12 @@ class qa_header_payload_demux (gr_unittest.TestCase):
"""
### Tx Data
n_zeros = 5
- header = (1, 2, 3)
- header_fail = (-1, -2, -4) # Contents don't really matter
- payload1 = tuple(range(5, 20))
- payload2 = (42,)
+ header = [1, 2, 3]
+ header_fail = [-1, -2, -4] # Contents don't really matter
+ payload1 = list(range(5, 20))
+ payload2 = [42,]
sampling_rate = 2
- data_signal = (0,) * n_zeros + header + payload1
+ data_signal = [0,] * n_zeros + header + payload1
trigger_signal = [0,] * len(data_signal) * 2
trigger_signal[n_zeros] = 1
trigger_signal[len(data_signal)] = 1
@@ -448,8 +448,8 @@ class qa_header_payload_demux (gr_unittest.TestCase):
len(data_signal),
len(data_signal)+len(header_fail)+n_zeros))
tx_signal = data_signal + \
- header_fail + (0,) * n_zeros + \
- header + payload2 + (0,) * 1000
+ header_fail + [0,] * n_zeros + \
+ header + payload2 + [0,] * 1000
# Timing tag: This is preserved and updated:
timing_tag = make_tag('rx_time', (0, 0), 0)
# Rx freq tags:
@@ -513,7 +513,7 @@ class qa_header_payload_demux (gr_unittest.TestCase):
# 31: header 3
# 34: payload 2 (length 1)
# 35: 1000 zeros
- self.assertEqual(header_sink.data(), header + header_fail + header)
+ self.assertEqual(header_sink.data(), list(header + header_fail + header))
self.assertEqual(payload_sink.data(), payload1 + payload2)
tags_payload = [gr.tag_to_python(x) for x in payload_sink.tags()]
tags_payload = sorted([(x.offset, x.key, x.value) for x in tags_payload])
@@ -618,8 +618,8 @@ class qa_header_payload_demux (gr_unittest.TestCase):
payload_sink = blocks.vector_sink_f()
self.connect_all_blocks(data_src, trigger_src, hpd, mock_header_demod, payload_sink, header_sink)
self.run_tb(payload_sink, total_payload_len, header_sink, header_len*n_bursts)
- self.assertEqual(header_sink.data(), tuple([1]*header_len*n_bursts))
- self.assertEqual(payload_sink.data(), tuple([2]*total_payload_len))
+ self.assertEqual(header_sink.data(), list([1]*header_len*n_bursts))
+ self.assertEqual(payload_sink.data(), list([2]*total_payload_len))
if __name__ == '__main__':
gr_unittest.run(qa_header_payload_demux, "qa_header_payload_demux.xml")
diff --git a/gr-digital/python/digital/qa_linear_equalizer.py b/gr-digital/python/digital/qa_linear_equalizer.py
index d7a4a597f3..522575db54 100755
--- a/gr-digital/python/digital/qa_linear_equalizer.py
+++ b/gr-digital/python/digital/qa_linear_equalizer.py
@@ -104,7 +104,7 @@ class qa_linear_equalizer(gr_unittest.TestCase):
preamble_symbols = self.map_symbols_to_constellation(self.unpack_values(self.preamble, 8, 2), cons)
alg = digital.adaptive_algorithm_lms(cons, gain).base()
- evm = digital.meas_evm_cc(cons, digital.evm_measurement_t_EVM_PERCENT)
+ evm = digital.meas_evm_cc(cons, digital.evm_measurement_t.EVM_PERCENT)
leq = digital.linear_equalizer(num_taps, self.sps, alg, False, preamble_symbols, 'corr_est')
correst = digital.corr_est_cc(modulated_sync_word, self.sps, 12, corr_calc, digital.THRESHOLD_ABSOLUTE)
constmod = digital.generic_mod(
@@ -130,8 +130,8 @@ class qa_linear_equalizer(gr_unittest.TestCase):
self.tb.run()
# look at the last 1000 samples, should converge quickly, below 5% EVM
- upper_bound = tuple(20.0*numpy.ones((num_test,)))
- lower_bound = tuple(0.0*numpy.zeros((num_test,)))
+ upper_bound = list(20.0*numpy.ones((num_test,)))
+ lower_bound = list(0.0*numpy.zeros((num_test,)))
output_data = vsi.data()
output_data = output_data[-num_test:]
self.assertLess(output_data, upper_bound)
diff --git a/gr-digital/python/digital/qa_meas_evm_cc.py b/gr-digital/python/digital/qa_meas_evm_cc.py
index cf3b4577da..580d2acce5 100755
--- a/gr-digital/python/digital/qa_meas_evm_cc.py
+++ b/gr-digital/python/digital/qa_meas_evm_cc.py
@@ -27,13 +27,13 @@ class qa_meas_evm_cc(gr_unittest.TestCase):
def test_qpsk(self):
# set up fg
- expected_result = tuple(numpy.zeros((self.num_data,)))
+ expected_result = list(numpy.zeros((self.num_data,)))
self.cons = cons = digital.constellation_qpsk().base()
self.data = data = [random.randrange(len(cons.points())) for x in range(self.num_data)]
self.symbols = symbols = numpy.squeeze([cons.map_to_points_v(i) for i in data])
- evm = digital.meas_evm_cc(cons, digital.evm_measurement_t_EVM_PERCENT)
+ evm = digital.meas_evm_cc(cons, digital.evm_measurement_t.EVM_PERCENT)
vso = blocks.vector_source_c(symbols, False, 1, [])
# mc = blocks.multiply_const_cc(3.0+2.0j)
vsi = blocks.vector_sink_f()
@@ -47,13 +47,13 @@ class qa_meas_evm_cc(gr_unittest.TestCase):
def test_qpsk_nonzeroevm(self):
# set up fg
- expected_result = tuple(numpy.zeros((self.num_data,)))
+ expected_result = list(numpy.zeros((self.num_data,)))
self.cons = cons = digital.constellation_qpsk().base()
self.data = data = [random.randrange(len(cons.points())) for x in range(self.num_data)]
self.symbols = symbols = numpy.squeeze([cons.map_to_points_v(i) for i in data])
- evm = digital.meas_evm_cc(cons, digital.evm_measurement_t_EVM_PERCENT)
+ evm = digital.meas_evm_cc(cons, digital.evm_measurement_t.EVM_PERCENT)
vso = blocks.vector_source_c(symbols, False, 1, [])
mc = blocks.multiply_const_cc(3.0+2.0j)
vsi = blocks.vector_sink_f()
@@ -66,8 +66,8 @@ class qa_meas_evm_cc(gr_unittest.TestCase):
self.assertNotEqual(expected_result, output_data)
def test_qpsk_channel(self):
- upper_bound = tuple(50.0*numpy.ones((self.num_data,)))
- lower_bound = tuple(0.0*numpy.zeros((self.num_data,)))
+ upper_bound = list(50.0*numpy.ones((self.num_data,)))
+ lower_bound = list(0.0*numpy.zeros((self.num_data,)))
self.cons = cons = digital.constellation_qpsk().base()
self.data = data = [random.randrange(len(cons.points())) for x in range(self.num_data)]
@@ -81,7 +81,7 @@ class qa_meas_evm_cc(gr_unittest.TestCase):
noise_seed=0,
block_tags=False)
- evm = digital.meas_evm_cc(cons, digital.evm_measurement_t_EVM_PERCENT)
+ evm = digital.meas_evm_cc(cons, digital.evm_measurement_t.EVM_PERCENT)
vso = blocks.vector_source_c(symbols, False, 1, [])
mc = blocks.multiply_const_cc(3.0+2.0j)
vsi = blocks.vector_sink_f()
@@ -95,8 +95,8 @@ class qa_meas_evm_cc(gr_unittest.TestCase):
self.assertGreater(output_data, lower_bound)
def test_qam16_channel(self):
- upper_bound = tuple(50.0*numpy.ones((self.num_data,)))
- lower_bound = tuple(0.0*numpy.zeros((self.num_data,)))
+ upper_bound = list(50.0*numpy.ones((self.num_data,)))
+ lower_bound = list(0.0*numpy.zeros((self.num_data,)))
self.cons = cons = digital.constellation_16qam().base()
self.data = data = [random.randrange(len(cons.points())) for x in range(self.num_data)]
@@ -110,7 +110,7 @@ class qa_meas_evm_cc(gr_unittest.TestCase):
noise_seed=0,
block_tags=False)
- evm = digital.meas_evm_cc(cons, digital.evm_measurement_t_EVM_PERCENT)
+ evm = digital.meas_evm_cc(cons, digital.evm_measurement_t.EVM_PERCENT)
vso = blocks.vector_source_c(symbols, False, 1, [])
mc = blocks.multiply_const_cc(3.0+2.0j)
vsi = blocks.vector_sink_f()