scipy 1.8.0 Pypi GitHub Homepage
Other Docs
NotesParametersReturnsBackRef
max_len_seq(nbits, state=None, length=None, taps=None)

Notes

The algorithm for MLS generation is generically described in:

https://en.wikipedia.org/wiki/Maximum_length_sequence

The default values for taps are specifically taken from the first option listed for each value of nbits in:

https://web.archive.org/web/20181001062252/http://www.newwaveinstruments.com/resources/articles/m_sequence_linear_feedback_shift_register_lfsr.htm

versionadded

Parameters

nbits : int

Number of bits to use. Length of the resulting sequence will be (2**nbits) - 1 . Note that generating long sequences (e.g., greater than nbits == 16 ) can take a long time.

state : array_like, optional

If array, must be of length nbits , and will be cast to binary (bool) representation. If None, a seed of ones will be used, producing a repeatable representation. If state is all zeros, an error is raised as this is invalid. Default: None.

length : int, optional

Number of samples to compute. If None, the entire length (2**nbits) - 1 is computed.

taps : array_like, optional

Polynomial taps to use (e.g., [7, 6, 1] for an 8-bit sequence). If None, taps will be automatically selected (for up to nbits == 32 ).

Returns

seq : array

Resulting MLS sequence of 0's and 1's.

state : array

The final state of the shift register.

Maximum length sequence (MLS) generator.

Examples

MLS uses binary convention:

>>> from scipy.signal import max_len_seq
... max_len_seq(4)[0] array([1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0], dtype=int8)

MLS has a white spectrum (except for DC):

>>> import matplotlib.pyplot as plt
... from numpy.fft import fft, ifft, fftshift, fftfreq
... seq = max_len_seq(6)[0]*2-1 # +1 and -1
... spec = fft(seq)
... N = len(seq)
... plt.plot(fftshift(fftfreq(N)), fftshift(np.abs(spec)), '.-')
... plt.margins(0.1, 0.1)
... plt.grid(True)
... plt.show()

Circular autocorrelation of MLS is an impulse:

>>> acorrcirc = ifft(spec * np.conj(spec)).real
... plt.figure()
... plt.plot(np.arange(-N/2+1, N/2+1), fftshift(acorrcirc), '.-')
... plt.margins(0.1, 0.1)
... plt.grid(True)
... plt.show()

Linear autocorrelation of MLS is approximately an impulse:

>>> acorr = np.correlate(seq, seq, 'full')
... plt.figure()
... plt.plot(np.arange(-N+1, N), acorr, '.-')
... plt.margins(0.1, 0.1)
... plt.grid(True)
... plt.show()
See :

Back References

The following pages refer to to this document either explicitly or contain code examples using this.

scipy.signal._max_len_seq.max_len_seq

Local connectivity graph

Hover to see nodes names; edges to Self not shown, Caped at 50 nodes.

Using a canvas is more power efficient and can get hundred of nodes ; but does not allow hyperlinks; , arrows or text (beyond on hover)

SVG is more flexible but power hungry; and does not scale well to 50 + nodes.

All aboves nodes referred to, (or are referred from) current nodes; Edges from Self to other have been omitted (or all nodes would be connected to the central node "self" which is not useful). Nodes are colored by the library they belong to, and scaled with the number of references pointing them


GitHub : /scipy/signal/_max_len_seq.py#22
type: <class 'function'>
Commit: