Module rpps.scram.lfsr

Classes

class Galois (seed, toggle)
Expand source code
class Galois(LFSR):
    __slots__ = ("_poly", "toggle")
    name = "Galois"

    def __init__(self, seed, toggle):
        super().__init__(seed)
        self._poly = toggle
        self.toggle = np.zeros((len(seed),), bool)
        self.toggle[len(seed) - toggle] = True

    def __str__(self):
        return f"{super().__str__()}:{self._poly.astype(int)}"

Ancestors

Subclasses

Class variables

var name

Instance variables

var toggle
Expand source code
class Galois(LFSR):
    __slots__ = ("_poly", "toggle")
    name = "Galois"

    def __init__(self, seed, toggle):
        super().__init__(seed)
        self._poly = toggle
        self.toggle = np.zeros((len(seed),), bool)
        self.toggle[len(seed) - toggle] = True

    def __str__(self):
        return f"{super().__str__()}:{self._poly.astype(int)}"
class LFSR (seed)
Expand source code
class LFSR:
    __slots__ = ("_seed", "lfsr")
    def __init__(self, seed):
        self._seed = seed
        self.lfsr = seed

    def __str__(self):
        return f"{type(self).__name__}"

    def reset(self):
        self.lfsr = self._seed

    def get_bit(self):
        ...

Subclasses

Instance variables

var lfsr
Expand source code
class LFSR:
    __slots__ = ("_seed", "lfsr")
    def __init__(self, seed):
        self._seed = seed
        self.lfsr = seed

    def __str__(self):
        return f"{type(self).__name__}"

    def reset(self):
        self.lfsr = self._seed

    def get_bit(self):
        ...

Methods

def get_bit(self)
Expand source code
def get_bit(self):
    ...
def reset(self)
Expand source code
def reset(self):
    self.lfsr = self._seed
class fibonacci (seed, taps)
Expand source code
class fibonacci(LFSR):
    __slots__ = ("taps")
    name = "Fibonacci"

    def __init__(self, seed, taps):
        super().__init__(seed)
        self.taps = taps

    def __str__(self):
        return f"{super().__str__()}:{self.taps.tolist()}"

    def get_bit(self):
        # Xor taps sequentially
        new_bit = np.bitwise_xor.reduce(self.lfsr[self.taps - 1]) & 1
        # shift one place to the right, [1,0,1,0,1,#] >> 1 = [#,1,0,1,0,1]
        self.lfsr[1:] = self.lfsr[:-1]  # clock LFSR
        self.lfsr[0] = new_bit  # set left-most bit (input bit)
        # return right-most bit (output bit)
        return self.lfsr[-1]

Ancestors

Class variables

var name

Instance variables

var taps
Expand source code
class fibonacci(LFSR):
    __slots__ = ("taps")
    name = "Fibonacci"

    def __init__(self, seed, taps):
        super().__init__(seed)
        self.taps = taps

    def __str__(self):
        return f"{super().__str__()}:{self.taps.tolist()}"

    def get_bit(self):
        # Xor taps sequentially
        new_bit = np.bitwise_xor.reduce(self.lfsr[self.taps - 1]) & 1
        # shift one place to the right, [1,0,1,0,1,#] >> 1 = [#,1,0,1,0,1]
        self.lfsr[1:] = self.lfsr[:-1]  # clock LFSR
        self.lfsr[0] = new_bit  # set left-most bit (input bit)
        # return right-most bit (output bit)
        return self.lfsr[-1]

Methods

def get_bit(self)
Expand source code
def get_bit(self):
    # Xor taps sequentially
    new_bit = np.bitwise_xor.reduce(self.lfsr[self.taps - 1]) & 1
    # shift one place to the right, [1,0,1,0,1,#] >> 1 = [#,1,0,1,0,1]
    self.lfsr[1:] = self.lfsr[:-1]  # clock LFSR
    self.lfsr[0] = new_bit  # set left-most bit (input bit)
    # return right-most bit (output bit)
    return self.lfsr[-1]
class galois_left (seed, toggle)
Expand source code
class galois_left(Galois):
    name = "Galois Left"
    def get_bit(self):
        lsb = self.lfsr[0]
        self.lfsr[1:] = self.lfsr[:-1]  # clock LFSR
        self.lfsr[0] = 0

        if lsb:
            self.lfsr = np.bitwise_xor(self.lfsr, self.toggle)
        return lsb

Ancestors

Class variables

var name

Methods

def get_bit(self)
Expand source code
def get_bit(self):
    lsb = self.lfsr[0]
    self.lfsr[1:] = self.lfsr[:-1]  # clock LFSR
    self.lfsr[0] = 0

    if lsb:
        self.lfsr = np.bitwise_xor(self.lfsr, self.toggle)
    return lsb
class galois_right (seed, toggle)
Expand source code
class galois_right(Galois):
    name = "Galois Right"
    def get_bit(self):
        msb = self.lfsr[-1]
        self.lfsr[:-1] = self.lfsr[1:]  # clock LFSR
        self.lfsr[-1] = 0

        if msb:
            self.lfsr = np.bitwise_xor(self.lfsr, self.toggle)
        return msb

Ancestors

Class variables

var name

Methods

def get_bit(self)
Expand source code
def get_bit(self):
    msb = self.lfsr[-1]
    self.lfsr[:-1] = self.lfsr[1:]  # clock LFSR
    self.lfsr[-1] = 0

    if msb:
        self.lfsr = np.bitwise_xor(self.lfsr, self.toggle)
    return msb