summaryrefslogtreecommitdiff
path: root/gr-digital/python/digital/utils/lfsr.py
diff options
context:
space:
mode:
authorElof Wecksell <elof@wecksell.se>2021-01-12 10:35:31 +0100
committerMartin Braun <martin@gnuradio.org>2021-01-29 03:31:03 -0800
commitb16924381c90e07d5d8cf5bc236c7dc48a0fd677 (patch)
treee5fe0c4005af6c6f0a6178139439a478de0abacf /gr-digital/python/digital/utils/lfsr.py
parent761b327c761e0596f72cbe9f63e510f1b36c4b47 (diff)
gr-digital: improved performance and capability of scramblers to 64-bit registers. Use __builtin_parity or volk popcnt. qa was also enhanced to detect errors.
Signed-off-by: Elof Wecksell <elof@wecksell.se> Co-authored-by: Martin Braun <martin@gnuradio.org>
Diffstat (limited to 'gr-digital/python/digital/utils/lfsr.py')
-rw-r--r--gr-digital/python/digital/utils/lfsr.py21
1 files changed, 21 insertions, 0 deletions
diff --git a/gr-digital/python/digital/utils/lfsr.py b/gr-digital/python/digital/utils/lfsr.py
new file mode 100644
index 0000000000..2b8a47cb76
--- /dev/null
+++ b/gr-digital/python/digital/utils/lfsr.py
@@ -0,0 +1,21 @@
+#!/usr/bin/env python
+#
+# Copyright 2020 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# SPDX-License-Identifier: GPL-3.0-or-later
+#
+#
+
+def lfsr_args(seed, *exp):
+ """
+ Produce arguments to create scrambler objects from exponent polynomial expressions.
+ seed: start-value of register
+ *exp: exponents of desired polynomial.
+ Example:
+ >>> l = digital.lfsr(*lfrs_args(0b11001,7,1,0))
+ Creates an lfsr object with seed 0b11001, mask 0b1000011, K=6
+ """
+ from functools import reduce
+ return reduce(int.__xor__, map(lambda x:2**x, exp)), seed, max(exp)-1