API LFSR¶
class(fpoly=[5,2], initstate=’ones’, verbose=False)
help doc
Linear Feedback Shift Register
#Parameters ————————————
- initstatebinary np.array (row vector) or str =’ones’ or ‘random’, optional (default = ‘ones’)) Initial state of LFSR. default =’ones’
Initial state is intialized with ones and length of register is equal to degree of feedback polynomial if state=’rand’, initial state is intialized with random binary sequence of length equal to degree of feedback polynomial
- fpolyList, optional (default=[5,2])
Feedback polynomial, it has to be primitive polynomial of GF(2) field, for valid output of LFSR to get the list of feedback polynomials check method ‘get_fpolyList’ or check Refeferece: Ref: List of some primitive polynomial over GF(2)can be found at http://www.partow.net/programming/polynomials/index.html http://www.ams.org/journals/mcom/1962-16-079/S0025-5718-1962-0148256-1/S0025-5718-1962-0148256-1.pdf http://poincare.matf.bg.ac.rs/~ezivkovm/publications/primpol1.pdf
- verboseboolean, optional (default=False)
if True, state of LFSR will be printed at every cycle(iteration)
#Attributes ————————————
- countint
Count the cycle
- seqnp.array shape =(count,)
Output sequence stored in seq since first cycle. If -1, no cycle has been excecuted, count =0
- outbitbinary bit
Current output bit, Last bit of current state if -1, no cycle has been excecuted, count =0
- feedbackbitbinary bit
If -1, no cycle has been excecuted, count =0
- Mint
length of LFSR, M-bit LFSR,
- expectedPeriodint
Expected period of sequence if feedback polynomial is primitive and irreducible (as per reference), period will be 2^M -1
- feedpolystr
feedback polynomial
#Methods ————————————
- next()
run one cycle on LFSR with given feedback polynomial and update the count, state, feedback bit, output bit and seq
return: binary bit output bit : binary
- runKCycle(k)
run k cycles and update all the Parameters
return tempseq : shape =(k,)
output binary sequence of k cycles
- runFullCycle()
run full cycle ( = 2^M-1)
return seq : binary output sequence since start: shape = (count,)
- set(fpoly,state=’ones’)
set feedback polynomial and state
fpoly : list feedback polynomial like [5,4,3,2]
state : np.array, like np.array([1,0,0,1,1]), default =’ones’ Initial state is intialized with ones and length of register is equal to degree of feedback polynomial if state=’rand’, initial state is intialized with random binary sequence of length equal to degree of feedback polynomial
- reset()
Reseting LFSR to its initial state and count to 0
- changeFpoly(newfpoly, reset=False)
Changing Feedback polynomial newfpoly : list like, [5,4,2,1], changing the feedback polynomial
reset : boolean default=False if True, reset all the Parameters : count=0, seq=-1.. if False, leave the LFSR as it is only change the feedback polynomial as used in ‘Enhancement of A5/1: Using variable feedback polynomials of LFSR’ ref: 10.1109/ETNCC.2011.5958486
- check()
check if -degree of feedback polynomial <= length of LFSR >=1 -given intistate of LFSR is correct
- info()
display the information about LFSR with current state of variables
- get_fpolyList(m=None)
Get the list of primitive polynomials as feedback polynomials for m-bit LFSR if m is None, list of feedback polynomials for 1 < m < 32 is return as a dictionary
- get_Ifpoly(fpoly)
Get the image of primitive polynomial fpoly, which is also a valid primitive polynomial