线性反馈移位寄存器

pylfsr的Python项目详细描述


线性反馈移位寄存器

Github Page

PyPi - project

Documentation

Python

要求:numpy

安装

pip

pip install pylfsr

从源代码构建

下载存储库或用git克隆它,在目录中的cd之后用

python setup.py install

示例

示例1:带反馈多项式的5位lfsrx^5+x^2+1

# import LFSR
import numpy as np
from pylfsr import LFSR

L = LFSR()

# print the info
L.info()

5 bit LFSR with feedback polynomial  x^5 + x^2 + 1
Expected Period (if polynomial is primitive) =  31
Current :
State        :  [1 1 1 1 1]
Count        :  0
Output bit   : -1
feedback bit : -1
L.next()
L.runKCycle(10)
L.runFullCycle()
L.info()

示例2**:5位lfsr,具有custum状态和反馈多项式

state = [0,0,0,1,0]
fpoly = [5,4,3,2]
L = LFSR(fpoly=fpoly,initstate =state, verbose=True)
L.info()
tempseq = L.runKCycle(10)
L.set(fpoly=[5,3])

例3**:23位lfsr,具有custum状态和反馈多项式

L = LFSR(fpoly=[23,18],initstate ='random',verbose=True)
L.info()
L.runKCycle(10)
L.info()
seq = L.seq

示例4**:获取反馈多项式或列表

参考号:http://www.partow.net/programming/polynomials/index.html

L = LFSR()
# list of 5-bit feedback polynomials
fpoly = L.get_fpolyList(m=5)

# list of all feedback polynomials as a dictionary
fpolyDict = L.get_fpolyList()

之间更改反馈多项式
L.changeFpoly(newfpoly =[23,14],reset=False)
seq1 = L.runKCycle(20)

# Change after 20 clocks
L.changeFpoly(newfpoly =[23,9],reset=False)
seq2 = L.runKCycle(20)

对于A5/1 GSM流密码生成器

参考文章:增强a5/1https://doi.org/10.1109/ETNCC.2011.5958486

# Three LFSRs initialzed with 'ones' though they are intialized with encription key
R1 = LFSR(fpoly = [19,18,17,14])
R2 = LFSR(fpoly = [23,22,21,8])
R3 = LFSR(fpoly = [22,21])

# clocking bits
b1 = R1.state[8]
b2 = R1.state[10]
b3 = R1.state[10]


Matlab

文件夹:https://github.com/Nikeshbajaj/Linear_Feedback_Shift_Register/tree/master/matlabfiles

说明 对于任何给定的反馈抽头(多项式),使用lfsr的genrate randon二进制序列, 这还将检查lfsr的三个基本属性

  1. 平衡属性
  2. 运行长度属性
  3. 自相关特性

此Matlab代码适用于具有给定抽头的任意长度LFSR(反馈多项式)-通用,有三个文件lfsrv1.m an lfsrv2.m,lfsrv3.m

LFSRv1

此函数将返回lfsr的所有状态,并检查lfsr的三个基本属性 (1)平衡特性(2)运行长度特性(3)自相关特性

示例

s=[1 1 0 0 1] 
t=[5 2]
[seq c] =LFSRv1(s,t)

lfsrv2

此函数将只返回生成的序列,所有lfsr的状态都不会进行属性验证 在这里。使用此函数可避免每次执行程序时进行验证。

示例

s=[1 1 0 0 1] 
t=[5 2]
[seq c] =LFSRv2(s,t)

LFSRv3(更快)

seq=lfsrv3(s,t,n) 此函数仅生成N位序列。这比其他两个函数更快,因为这并没有给出lfsr的每个状态

示例

s=[1 1 0 0 1]  
t=[5 2]
seq =LFSRv3(s,t,50)

提示

  • 如果要在任何程序的中间使用此函数,请使用验证为0的lfsrv2或lfsrv1。
  • 如果您想使长长度的lfsr快速运行,请使用lfsrv3.m

联系人:

如果有任何疑问、困惑或反馈,请与我联系

博士生:伦敦玛丽皇后大学和热那亚大学


欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java接口中的每个方法都是抽象的,但在抽象类中,我们也只能使用抽象方法   初始化Java中声明的、未初始化的变量会发生什么情况?   java BouncyCastle openPGP将字节[]数组加密为csv文件   在Java中将类A(和所有子类)映射到类B的实例的字典   RSA公钥编码,在Java和Android中,代码相同,结果不同   java在安卓中实现数字检测语音识别   java取消选择复选框   java如何在其他配置中重用Maven配置XML片段   java有没有一种有效的方法来检查HashMap是否包含映射到相同值的键?   spring处理程序调度失败;嵌套的例外是java。lang.NoClassDefFoundError:org/apache/http/client/HttpClient   带有ehcache的java多层缓存   java如何访问chromium(或任何其他浏览器)cookie   java通过将两个集合与spring data mongodb data中的条件合并来获取计数   安卓中R.java的语法错误