summaryrefslogtreecommitdiff
path: root/gr-fft/python/fft
diff options
context:
space:
mode:
authorMartin Braun <martin.braun@ettus.com>2020-08-13 17:06:36 +0200
committerMartin Braun <martin@gnuradio.org>2020-08-14 04:11:26 -0700
commit487da72790363937c20f93500a1883ac0fc93582 (patch)
tree5db582d67942a606458d573a7181f0b7d8ccb7c1 /gr-fft/python/fft
parent3adb522b0ddf6736605beea797016353a1d4a2b8 (diff)
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.
Diffstat (limited to 'gr-fft/python/fft')
-rw-r--r--gr-fft/python/fft/bindings/window_python.cc5
-rw-r--r--gr-fft/python/fft/qa_window.py37
2 files changed, 40 insertions, 2 deletions
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)