今天写了一个随机序列发生器,实际上是伪随机数,使用了LFSR(line feedback shift register)
LFSR
将移位寄存器中的值取出,做适当的运算,再返回到序列中作为新的输入,就可以构造出简单的伪随机数序列发生器,之所以是伪随机数序列,是因为这些看似无序的随机数实际上是周期性的,不难想到如果有寄存器中存储着n个元素,那么这些寄存器最多就有2^n个状态,而在线性运算下,全0不会转入其他状态,故LFSR序列的最长周期为:2^n-1.
LFSR的初始值被称为伪随机序列的种子,影响下一个状态的比特位叫做抽头。LFSR的触发器编号一般从1开始,抽头取值范围是1到2^n-1。抽头序列可以用来描述该LFSR的反馈多项式。理论表明,要使LFSR得到最长的周期,这个抽头序列构成的多项式加1就是其反馈多项式,必须是一个本原多项式,也就是说这个多项式不可约(即不能写成两个次数较低的多项式之乘积)
常用的本源多项式
x^2+x+1
x^3+x+1
x^4+x+1
x^5+x^2+1
x^6+x+1
x^7+x^3+1
x^8+x^4+x^3+x^2+1
x^9+x^4+1
x^10+x^3+1
x^11+x^2+1
目前常用的LFSR分为斐波那契LFSR和伽罗瓦LFSR
斐波那契LFSR也可以称为多到一型LFSR,即抽头序列对应bit位置的多个触发器的输出通过异或逻辑来驱动一个触发器的输入。
伽罗瓦LFSR和斐波那契刚好相反,它是一到多型的LFSR,即最后一个触发器的输出通过与抽头序列对应位置触发器前一级触发器的输出异或逻辑驱动多个抽头序列对应位置触发器的输入。
虽然这两种电路都产生伪随机序列,但是一到多型的伽罗瓦LFSR具有更高的速度,因为它的两个触发器之间仅使用一个异或门。
应该避免寄存器进入全为0的禁止态,因为全为0的状态是不用的,而且可能会导致在这个状态出不来。
预防办法:
(1)想办法给寄存器置位到某个允许的状态
(2)用额外的电路让寄存器能够从禁止状态自动进入允许状态