线性反馈移位寄存器(Linear Feedback Shift Register,LFSR)

LFSR是一种移位寄存器电路,其中间步骤的两个或多个输出的线性组合会反馈到输入值。这就是为什么LFSR被称为线性反馈移位寄存器,如下图1所示 [1]。从图1中可以看出,LFSR主要由作为寄存器的D触发器和作为反馈运算的异或门组成。

图1. LFSR示例 [1]

更一般地,一个nnn阶的LFSR由nnn个D触发器和若干个异或门组成,如图2所示。其中,gng_ngn​为反馈系数,其值只能为0或1。1表示存在反馈回路,0表示不存在反馈回路,且g0g_{0}g0​总为1。以上图1中LFSR为例,其反馈系数为g0=1g_0=1g0​=1,g1=0g_1=0g1​=0,g2=0g_2=0g2​=0,g3=1g_3=1g3​=1,g4=1g_4=1g4​=1。反馈系数决定了哪些中间D触发器的比特会反馈到输入位(D1D_1D1​),也即决定了随机数的产生算法。LFSR最右边是输出位(DnD_nDn​),输出的序列相应称为LFSR序列(X0,X1,⋯X_0,X_1,\cdotsX0​,X1​,⋯)。LFSR的工作流程也很简单,每次时钟信号触发,D触发器内寄存的数据会整体位移一位(D1→D2D_1 \rightarrow D_2D1​→D2​,D2→D3D_2 \rightarrow D_3D2​→D3​,…,Dn−1→DnD_{n-1} \rightarrow D_nDn−1​→Dn​),同时一些中间结果的线性组合会反馈到输入位D1D_1D1​,而输出位DnD_nDn​会输出DnD_nDn​寄存的比特值XkX_kXk​。

图2. n阶LFSR示例 [2]

更深入点,我们看一下如何数学地描述LFSR序列 [3]:
Xn+k=(∑i=0n−1gn−iXk+i)mod 2,k=0,1,⋯(1)X_{n+k} = \left( \sum \limits_{i=0}^{n-1} g_{n-i} X_{k+i} \right) \text{mod}~2,~k=0,1,\cdots \tag{1}Xn+k​=(i=0∑n−1​gn−i​Xk+i​)mod 2, k=0,1,⋯(1)

我发现,这里很多文章都搞错了,或者搞不明白,所以我一开始也是被绕晕了,因为看了几份资料,说法不一。还好我死磕下去,按照自己理解和逻辑给理顺了。比如[2]中,将LFSR序列标号弄反了,虽然不能说是错误,但是不严谨,所以我将图2做了修改。

搞清楚上面这个式子,接下来我们再说一下如何去“表示”或“读”一个LFSR。关于这点,我看了一圈,很少有说明白的,甚至大名鼎鼎的sharetechnote都写错了。我这里总结大概有以下几种方法:

(1)抽头序列

什么叫抽头?维基百科的解释是“影响下一个状态的比特位叫做抽头”[4]。我们在这里将抽头形象(但是可能不严谨)地理解为反馈系数(但实际上g0g_0g0​并不表示一个比特位),所以抽头序列就是反馈系数的序列。

以图1为例,图1中的LFSR对应的抽头序列是[1 0 0 1 1](注意是按照递增的顺序,即序列从左往右依次对应g0,g1,⋯,gng_0,~g_1,~\cdots,~g_ng0​, g1​, ⋯, gn​)。

(2)特征多项式

以图1为例,图1中的LFSR对应的特征多项式为f(x)=x4+x3+1f(x) = x^4+x^3+1f(x)=x4+x3+1,或者更简单的表示为[4 3 0](1相当于x0x^0x0)。我们只要记住D触发器或者反馈系数是按照从左往右,序号依次递增的方式来标号即可(所以我又在图上标了D触发器的序号,这样帮助理解),这样就很容易写出LFSR对应的特征多项式,或者根据特征多项式画出LFSR。

图3. LFSR的表示 [1]

(3)递归公式

以图1为例,图1中的LFSR对应的递归公式为
Xk+4=(Xk+1+Xk)mod 2,k=0,1,⋯(2)X_{k+4} = \left(X_{k+1}+X_{k}\right) \text{mod}~2,~k=0,1,\cdots \tag{2}Xk+4​=(Xk+1​+Xk​)mod 2, k=0,1,⋯(2)
这个对照公式(1)或者图1也很好理解,只要记住图中的输出序列的序号,是从左往右依次递减的,这点和上面的反馈系数和D寄存器的序号规则正好相反。我们从右往左,将图最右边标上XkX_{k}Xk​,再依次类推。

最后,我们说一下LFSR的性质 [1]:

  • 如果初始状态相同,那么我们将始终得到相同的输出序列(即输出序列是确定的)。
  • 输出序列趋向于随机序列(伪随机)。
  • 经过一定次数的迭代后,我们将得到与初始状态相同的状态值(最大重复间隔可由2n−1\mathbf{2^{n}-1}2n−1计算得到,其中nnn为D触发器的数目,这里减去的1表示全0态)。

下图4给出了图1中LFSR在初始状态为[1,1,1,1][1,1,1,1][1,1,1,1]的情况下,状态变化和输出序列计算的整个过程。

图4. LFSR序列计算过程示例 [1]


注释
这里只是概要形象地解释了通信中常遇到的LFSR,实际的LFSR概念要更宽泛,也更复杂。比如,上述介绍的LFSR中,异或门可以替换为同或门 [4];LFSR一般分外接LFSR(即IE型LFSR或者Fibonacci LFSR)和内接LFSR(EE型LFSR或者Galois LFSR)[2] [4],但是我们在此不再深入。


最大长度序列(Maximum Length Sequence,MLS)

MLS也叫m-Sequence,其是LFSR序列的一种。m-Sequence区别于一般LFSR序列的地方在于,在D触发器数目相同的情况下,m-Sequence拥有最长的非重复序列,即其重复间隔为2n−1\mathbf{2^{n}-1}2n−1 [2]。

如果一个LFSR序列为MLS,那么其对应的特征多项式必须是一个本原多项式,即为不可约多项式必要不充分条件为:

  • 抽头数必须为偶数。
  • 抽头之间不能成对出现,必须是互质的。

一些比较典型的MLS如下表1中所示。

表1. 一些典型的m-Sequence [1]

Gold Code

Gold Code是以Robert Gold命名的。Gold Code是指一组特殊的二进制随机(伪随机)序列,该组序列中每个成员/序列之间的相关性很小。由于这种特性(成员序列之间的相关性小),Gold Code被广泛地用作各种无线通信系统的扰码 [6]。

我们可以非常简单地利用m-Sequence来生成Gold Code:选择两个m-Sequence,且这两个序列的移位寄存器的数量相同,然后将这2个序列按位进行异或操作,就会产生Gold Code。下图5给出了LTE中常见的31阶Gold Code生成器电路,其常用于信道编码的加扰、参考信号、循环冗余校验(CRC)。

图5. LTE中使用的31阶Gold Code生成器电路 [7]

上面图5中的31阶Gold Code生成器电路输出的伪随机序列对应的就是下面的这个式子。这个式子我们在通信中,包括LTE和5G NR中会经常碰到,我们会在相应的文章中再具体解释。

Reference

[1]: http://www.sharetechnote.com/html/Handbook_Communication_LFSR.html [2]: http://blog.sina.com.cn/s/blog_62d9edac01015lsd.html [3]: https://wenku.baidu.com/view/38a4fb1aff00bed5b9f31d7a.htm [4]: https://bk.tw.lvfukeji.com/wiki/LFSR [5]: http://www.sharetechnote.com/html/Handbook_Communication_mSequence.html [6]: http://www.sharetechnote.com/html/Handbook_Communication_GoldCode.html [7]: LTE - The UMTS Long Term Evolution: From Theory to Practice, 2nd Edition

伪随机序列:LFSR Sequence、m-Sequence和Gold Code/Sequence相关推荐

  1. Gold Code,Gold Sequence

    Gold Code Gold Code是以Robert Gold的名字命名的.它是一组特殊的二进制随机(伪随机)序列,其中成员序列之间的相关性很小.由于这种特性(较小的相关性),它被广泛地用作各种无线 ...

  2. matlab:Invalid character code sequence detected

    在运行别人的工具包时,出现了如下的错误: Invalid character code sequence detected 百度得到的答案都是说路径中有中文.但是我的所有环境都是英文路径的来着.后来通 ...

  3. oracle 批量导出sequence,Oracle中批量導出Sequence

    Java代碼 select'create sequence '||sequence_name|| ' minvalue '||min_value|| ' maxvalue '||max_value|| ...

  4. oracle sequence 应用,oracle应用之使用sequence批量写数据

    本博客是对之前写的博客Oracle批量新增更新数据的补充,oracle的知识真是多,其实要学精任何一门知识都是要花大量时间的,正所谓: 学如逆水行舟,不进则退 先介绍oracle sequence的一 ...

  5. oracle sequence 不同 会话 不连续_序列 Sequence

    Sequence是一个数据库对象,多个用户可以从中生成唯一的整数,可以使用序列自动生成主键值. 生成序列号时,序列号将递增,独立于事务提交或回滚; 如果两个用户同时递增同一序列,因为序列号是由另一个用 ...

  6. Mysql sequence使用_基于Mysql的Sequence实现

    团队更换新框架.新的业务全部使用新的框架,甚至是新的数据库--Mysql. 这边之前一直是使用oracle,各种订单号.流水号.批次号啥的,都是直接使用oracle的sequence提供的数字序列号. ...

  7. Oracle自增主键的添加[sequence]--表数据已存在

    --增加主键ID alter table CLERK_COMPARE add id number(16);--设置sequence使ID自增 create sequence SEQ_IDminvalu ...

  8. java sequencer_UVM学习笔记--sequence和sequencer(转)

    1. UVM sequence机制的意义 ======================= UVM的sequence机制最大的作用就是将test case和testbench分离开来. 对一个项目而言, ...

  9. The 2022 ICPC Asia Regionals Online Contest - A 01 Sequence

    01 Sequence 题目 Given a binary cyclic sequence S of length n, whose elements are either 0 or 1, you c ...

最新文章

  1. 自动化早已不是那个自动化
  2. OKR和KPI有什么区别?
  3. 西安python培训班多少钱-西安Python培训班哪个好
  4. Python 程序员经常犯的 10 个错误
  5. [机器学习]AutoML---谷歌开源AdaNet:基于TensorFlow的AutoML框架
  6. [css] 使用css实现气泡框的效果
  7. mysql dump工具升级_MySQL数据库升级
  8. LeetCode-----二维数组中的查找
  9. java.lang.NoClassDefFoundError: javax/mail/internet/AddressException解决
  10. 【Swing/文本组件】定义自动换行的文本域
  11. 数据库,可不只是 CRUD!
  12. DevOps使用教程 华为云(5)迭代计划 进度管理
  13. win10手柄测试软件,win10系统如何校准和设置游戏手柄?windows10校准和设置游戏手柄的方法...
  14. ubuntu下 端口映射
  15. 研究生必备的文献翻译软件知云文献翻译替代品--Mac monterey
  16. matlab使用hough变换函数进行车道检测
  17. GRE难句典型结构1
  18. 如何快速对比两个文件夹的文件的不同
  19. GOOGLE 真实地图模型和瓦片图下载
  20. 电脑GIF制作软件哪个好 怎么做QQ表情包

热门文章

  1. 连接mysql时报错:The driver has not received any packets from the server.
  2. 借助 docker 安装 pgAdmin
  3. c语言解析yaml文件,YAML课程
  4. 异或 Python3
  5. Mac M1安装fish shell
  6. [从头学绘画] 第15节 六十四式八卦掌 (25-32)
  7. VUE 自身页面跳转自身页面
  8. 【音视频开发之起始】
  9. C++中类与对象的关系
  10. 可信计算期末复习(郑大信安个人总结版)