sdr.m_sequence(degree: int, poly: PolyLike | None = None, index: int = 1, output: 'decimal' = 'decimal') ndarray[Any, dtype[int64]]
sdr.m_sequence(degree: int, poly: PolyLike | None = None, index: int = 1, output: 'field' = 'decimal') FieldArray
sdr.m_sequence(degree: int, poly: PolyLike | None = None, index: int = 1, output: 'bipolar' = 'decimal') ndarray[Any, dtype[float64]]

Generates a maximal-length sequence (m-sequence) from a Fibonacci linear feedback shift register (LFSR).

Parameters:
degree: int

The degree \(n\) of the LFSR.

poly: PolyLike | None = None

The feedback polynomial of the LFSR over \(\mathrm{GF}(q)\). Note, the feedback polynomial is the reciprocal of the characteristic polynomial that defines the linear recurrence relation. The default is None which uses the reciprocal primitive polynomial of degree \(n\) over \(\mathrm{GF}(2)\), galois.primitive_poly(2, degree).reverse().

index: int = 1

The index \(i\) in \([1, q^{n})\) of the m-sequence. The index represents the initial state of the LFSR. The index dictates the phase of the m-sequence. The integer index is interpreted as a polynomial over \(\mathrm{GF}(q)\), whose coefficients are the shift register values. The default is 1, which corresponds to the \([0, \dots, 0, 1]\) state.

output: 'decimal' = 'decimal'
output: 'field' = 'decimal'
output: 'bipolar' = 'decimal'

The output format of the m-sequence.

  • "decimal" (default): The m-sequence with decimal values in \([0, q^n)\).

  • "field": The m-sequence as a Galois field array over \(\mathrm{GF}(q^n)\).

  • "bipolar": The m-sequence with bipolar values of 1 and -1. Only valid for \(q = 2\).

Returns:

The length-\(q^n - 1\) m-sequence.

References

Examples

Generate a maximal-length sequence of degree-4 over \(\mathrm{GF}(2)\). Compare the sequence with index 1 to the sequence with index 2. They are just phase shifts of each other.

In [1]: sdr.m_sequence(4)
Out[1]: array([1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1])

In [2]: sdr.m_sequence(4, index=2)
Out[2]: array([0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0])

Generate a maximal-length sequence of degree-4 over \(\mathrm{GF}(3^2)\).

# Characteristic polynomial
In [3]: c = galois.primitive_poly(3**2, 4); c
Out[3]: Poly(x^4 + x + 5, GF(3^2))

# Feedback polynomial
In [4]: f = c.reverse(); f
Out[4]: Poly(5x^4 + x^3 + 1, GF(3^2))

In [5]: x = sdr.m_sequence(4, poly=f); x
Out[5]: array([1, 0, 0, ..., 5, 4, 6])

In [6]: x.size
Out[6]: 6560