From db3ae11bc036074a0b0ed312b3ae8806ca195c6c Mon Sep 17 00:00:00 2001 From: Roman Zeyde Date: Wed, 21 Jan 2015 20:38:44 +0200 Subject: [PATCH] equalizer: use low-level random API, for Python 2<->3 interoperability Random.randrange() behaviour was changed at v3.2, see: https://bugs.python.org/issue9025 --- amodem/equalizer.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/amodem/equalizer.py b/amodem/equalizer.py index a8f3570..c14cef1 100644 --- a/amodem/equalizer.py +++ b/amodem/equalizer.py @@ -7,11 +7,11 @@ from amodem import sampling import itertools import random -_constellation = [1, 1j, -1, -1j] - class Equalizer(object): + _constellation = [1, 1j, -1, -1j] + def __init__(self, config): self.carriers = config.carriers self.omegas = 2 * np.pi * np.array(config.frequencies) / config.Fs @@ -20,7 +20,9 @@ class Equalizer(object): def train_symbols(self, length, seed=0, constant_prefix=16): r = random.Random(seed) - choose = lambda: [r.choice(_constellation) for j in range(self.Nfreq)] + # Use low-level randomness for cross-version compatibility. + random_symbol = lambda: self._constellation[r.getrandbits(2)] + choose = lambda: [random_symbol() for j in range(self.Nfreq)] symbols = np.array([choose() for _ in range(length)]) # Constant symbols (for analog debugging) symbols[:constant_prefix, :] = 1