From 487da72790363937c20f93500a1883ac0fc93582 Mon Sep 17 00:00:00 2001
From: Martin Braun <martin.braun@ettus.com>
Date: Thu, 13 Aug 2020 17:06:36 +0200
Subject: fft: window: Allow normalizing windows

In some applications, it is useful to generate windows that have unit
power. The boxcar window (rectangle) is always of unit power, but the
other windows are not, leading to apple-to-oranges comparisons, e.g.,
when switching between window types in a live spectrum estimation
application.
---
 gr-fft/python/fft/bindings/window_python.cc |  5 ++--
 gr-fft/python/fft/qa_window.py              | 37 +++++++++++++++++++++++++++++
 2 files changed, 40 insertions(+), 2 deletions(-)
 create mode 100644 gr-fft/python/fft/qa_window.py

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

diff --git a/gr-fft/python/fft/bindings/window_python.cc b/gr-fft/python/fft/bindings/window_python.cc
index 51dd7200d1..e04a6c59df 100644
--- a/gr-fft/python/fft/bindings/window_python.cc
+++ b/gr-fft/python/fft/bindings/window_python.cc
@@ -13,8 +13,8 @@
 /* If manual edits are made, the following tags should be modified accordingly.    */
 /* BINDTOOL_GEN_AUTOMATIC(0)                                                       */
 /* BINDTOOL_USE_PYGCCXML(0)                                                        */
-/* BINDTOOL_HEADER_FILE(window.h)                                        */
-/* BINDTOOL_HEADER_FILE_HASH(b55c3b96105267729782fc5262efa28a)                     */
+/* BINDTOOL_HEADER_FILE(window.h)                                                  */
+/* BINDTOOL_HEADER_FILE_HASH(22de6d8875628eec777952b4902a09e9)                     */
 /***********************************************************************************/
 
 #include <pybind11/complex.h>
@@ -176,6 +176,7 @@ void bind_window(py::module& m)
                     py::arg("type"),
                     py::arg("ntaps"),
                     py::arg("beta") = 6.76,
+                    py::arg("normalize") = false,
                     D(window, build))
 
         ;
diff --git a/gr-fft/python/fft/qa_window.py b/gr-fft/python/fft/qa_window.py
new file mode 100644
index 0000000000..f5afd2640d
--- /dev/null
+++ b/gr-fft/python/fft/qa_window.py
@@ -0,0 +1,37 @@
+#!/usr/bin/env python3
+#
+# Copyright 2020 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# SPDX-License-Identifier: GPL-3.0-or-later
+#
+"""
+Unit tests for fft.window
+"""
+
+import numpy
+from gnuradio import gr_unittest
+from gnuradio import fft
+
+class test_window(gr_unittest.TestCase):
+    """
+    Unit tests for fft.window
+    """
+
+    def setUp(self):
+        pass
+
+    def tearDown(self):
+        pass
+
+    def test_normwin(self):
+        """
+        Verify window normalization
+        """
+        win = fft.window.build(fft.win_type.WIN_BLACKMAN_hARRIS, 21, normalize=True)
+        power = numpy.sum([x*x for x in win])/len(win)
+        self.assertAlmostEqual(power, 1.0)
+
+if __name__ == '__main__':
+    gr_unittest.run(test_window)
-- 
cgit v1.2.3