From 31c4a701e6b6fdf84bb1385663a0b707dd40a766 Mon Sep 17 00:00:00 2001
From: Josh Morman <jmorman@perspectalabs.com>
Date: Thu, 25 Mar 2021 16:27:51 -0400
Subject: digital: fix qa for equalizers

Signed-off-by: Josh Morman <jmorman@perspectalabs.com>
---
 gr-digital/python/digital/qa_cma_equalizer.py      | 42 --------------------
 .../digital/qa_decision_feedback_equalizer.py      | 41 +++++++++++++++-----
 gr-digital/python/digital/qa_linear_equalizer.py   | 36 +++++++++++++----
 gr-digital/python/digital/qa_lms_equalizer.py      | 45 ----------------------
 4 files changed, 59 insertions(+), 105 deletions(-)
 delete mode 100644 gr-digital/python/digital/qa_cma_equalizer.py
 delete mode 100644 gr-digital/python/digital/qa_lms_equalizer.py

(limited to 'gr-digital/python/digital')

diff --git a/gr-digital/python/digital/qa_cma_equalizer.py b/gr-digital/python/digital/qa_cma_equalizer.py
deleted file mode 100644
index f6da3d1b70..0000000000
--- a/gr-digital/python/digital/qa_cma_equalizer.py
+++ /dev/null
@@ -1,42 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2006,2007,2010,2011,2013 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# SPDX-License-Identifier: GPL-3.0-or-later
-#
-#
-
-
-from gnuradio import gr, gr_unittest, digital, blocks
-
-
-class test_cma_equalizer_fir(gr_unittest.TestCase):
-
-    def setUp(self):
-        self.tb = gr.top_block()
-
-    def tearDown(self):
-        self.tb = None
-
-    def transform(self, src_data):
-        SRC = blocks.vector_source_c(src_data, False)
-        EQU = digital.cma_equalizer_cc(4, 1.0, .001, 1)
-        DST = blocks.vector_sink_c()
-        self.tb.connect(SRC, EQU, DST)
-        self.tb.run()
-        return DST.data()
-
-    def test_001_identity(self):
-        # Constant modulus signal so no adjustments
-        src_data = (1 + 0j, 0 + 1j, -1 + 0j, 0 - 1j) * 1000
-        expected_data = src_data
-        result = self.transform(src_data)
-
-        N = -500
-        self.assertComplexTuplesAlmostEqual(expected_data[N:], result[N:])
-
-
-if __name__ == "__main__":
-    gr_unittest.run(test_cma_equalizer_fir)
diff --git a/gr-digital/python/digital/qa_decision_feedback_equalizer.py b/gr-digital/python/digital/qa_decision_feedback_equalizer.py
index 1249df46a1..1d4587a6f0 100755
--- a/gr-digital/python/digital/qa_decision_feedback_equalizer.py
+++ b/gr-digital/python/digital/qa_decision_feedback_equalizer.py
@@ -15,7 +15,7 @@ import numpy
 from gnuradio import digital, blocks, channels
 
 
-class qa_linear_equalizer(gr_unittest.TestCase):
+class qa_decision_feedback_equalizer(gr_unittest.TestCase):
 
     def unpack_values(self, values_in, bits_per_value, bits_per_symbol):
         # verify that 8 is divisible by bits_per_symbol
@@ -108,22 +108,43 @@ class qa_linear_equalizer(gr_unittest.TestCase):
     def tearDown(self):
         self.tb = None
 
-    def transform(self, src_data, gain, const):
-        SRC = blocks.vector_source_c(src_data, False)
-        EQU = digital.lms_dd_equalizer_cc(4, gain, 1, const.base())
-        DST = blocks.vector_sink_c()
-        self.tb.connect(SRC, EQU, DST)
+    def transform(self, src_data, const, alg):
+        src = blocks.vector_source_c(src_data, False)
+
+        leq = digital.decision_feedback_equalizer(
+            2,
+            1,
+            1,
+            alg,
+            True, 
+            [],
+            '')
+        dst = blocks.vector_sink_c()
+        self.tb.connect(src, leq, dst)
         self.tb.run()
-        return DST.data()
+        return dst.data()
+
+    def test_001_identity_lms(self):
+        # Constant modulus signal so no adjustments
+        const = digital.constellation_qpsk()
+        src_data = const.points() * 1000
+        alg = digital.adaptive_algorithm_lms(const, .1).base()
+        N = 100  # settling time
+        expected_data = src_data[N:]
+        result = self.transform(src_data, const, alg)[N:]
+
+        N = -500
+        self.assertComplexTuplesAlmostEqual(expected_data[N:], result[N:], 5)
 
-    def test_001_identity(self):
+    def test_002_identity_cma(self):
         # Constant modulus signal so no adjustments
         const = digital.constellation_qpsk()
         src_data = const.points() * 1000
+        alg = digital.adaptive_algorithm_cma(const, .001, 4).base()
 
         N = 100  # settling time
         expected_data = src_data[N:]
-        result = self.transform(src_data, 0.1, const)[N:]
+        result = self.transform(src_data, const, alg)[N:]
 
         N = -500
         self.assertComplexTuplesAlmostEqual(expected_data[N:], result[N:], 5)
@@ -223,4 +244,4 @@ class qa_linear_equalizer(gr_unittest.TestCase):
 
 
 if __name__ == '__main__':
-    gr_unittest.run(qa_linear_equalizer)
+    gr_unittest.run(qa_decision_feedback_equalizer)
diff --git a/gr-digital/python/digital/qa_linear_equalizer.py b/gr-digital/python/digital/qa_linear_equalizer.py
index 1ad3c3bece..64fd84d2f3 100755
--- a/gr-digital/python/digital/qa_linear_equalizer.py
+++ b/gr-digital/python/digital/qa_linear_equalizer.py
@@ -105,22 +105,42 @@ class qa_linear_equalizer(gr_unittest.TestCase):
     def tearDown(self):
         self.tb = None
 
-    def transform(self, src_data, gain, const):
-        SRC = blocks.vector_source_c(src_data, False)
-        EQU = digital.lms_dd_equalizer_cc(4, gain, 1, const.base())
-        DST = blocks.vector_sink_c()
-        self.tb.connect(SRC, EQU, DST)
+    def transform(self, src_data, const, alg):
+        src = blocks.vector_source_c(src_data, False)
+        leq = digital.linear_equalizer(
+            4,
+            1,
+            alg,
+            True, 
+            [],
+            '')
+        dst = blocks.vector_sink_c()
+        self.tb.connect(src, leq, dst)
         self.tb.run()
-        return DST.data()
+        return dst.data()
+
+    def test_001_identity_lms(self):
+        # Constant modulus signal so no adjustments
+        const = digital.constellation_qpsk()
+        src_data = const.points() * 1000
+        alg = digital.adaptive_algorithm_lms(const, .1).base()
+
+        N = 100  # settling time
+        expected_data = src_data[N:]
+        result = self.transform(src_data, const, alg)[N:]
+
+        N = -500
+        self.assertComplexTuplesAlmostEqual(expected_data[N:], result[N:], 5)
 
-    def test_001_identity(self):
+    def test_002_identity_cma(self):
         # Constant modulus signal so no adjustments
         const = digital.constellation_qpsk()
         src_data = const.points() * 1000
+        alg = digital.adaptive_algorithm_cma(const, .001, 4).base()
 
         N = 100  # settling time
         expected_data = src_data[N:]
-        result = self.transform(src_data, 0.1, const)[N:]
+        result = self.transform(src_data, const, alg)[N:]
 
         N = -500
         self.assertComplexTuplesAlmostEqual(expected_data[N:], result[N:], 5)
diff --git a/gr-digital/python/digital/qa_lms_equalizer.py b/gr-digital/python/digital/qa_lms_equalizer.py
deleted file mode 100644
index 23e3c6f28f..0000000000
--- a/gr-digital/python/digital/qa_lms_equalizer.py
+++ /dev/null
@@ -1,45 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2006,2007,2010,2011,2013 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# SPDX-License-Identifier: GPL-3.0-or-later
-#
-#
-
-
-from gnuradio import gr, gr_unittest, digital, blocks
-
-
-class test_lms_dd_equalizer(gr_unittest.TestCase):
-
-    def setUp(self):
-        self.tb = gr.top_block()
-
-    def tearDown(self):
-        self.tb = None
-
-    def transform(self, src_data, gain, const):
-        SRC = blocks.vector_source_c(src_data, False)
-        EQU = digital.lms_dd_equalizer_cc(4, gain, 1, const.base())
-        DST = blocks.vector_sink_c()
-        self.tb.connect(SRC, EQU, DST)
-        self.tb.run()
-        return DST.data()
-
-    def test_001_identity(self):
-        # Constant modulus signal so no adjustments
-        const = digital.constellation_qpsk()
-        src_data = const.points() * 1000
-
-        N = 100  # settling time
-        expected_data = src_data[N:]
-        result = self.transform(src_data, 0.1, const)[N:]
-
-        N = -500
-        self.assertComplexTuplesAlmostEqual(expected_data[N:], result[N:], 5)
-
-
-if __name__ == "__main__":
-    gr_unittest.run(test_lms_dd_equalizer)
-- 
cgit v1.2.3