伪随机序列

伪随机序列

伪随机(Pseudo Random,PN)序列作者有所了解,但是一直没有深入的去看。在学习5G NR的过程中,看到了comm.PNSequence这个Matlab的System object™,故准备在了解这个”函数“的同时,深入学习伪随机序列的生成过程。

一、LFSR线性反馈移位寄存器

说到伪随机序列就不得不介绍生成它的基本电路结构——线性反馈移位寄存器(Linear Feedback Shift Register,LFSR)。

特点与结构

LFSR是一种移位寄存器电路,中间步骤的两个或多个输出被线性组合并反馈到输入值,故被称为线性反馈移位寄存器。它具有如下特点:

  • 如果初始状态相同,则总是得到相同的输出序列(意味着输出序列是确定的,在无线通信中可以在收端生成和发端相同的序列)。
  • 输出序列趋向于随机序列(伪随机)。
  • 经过一定次数的迭代后,可以得到与初始状态值相同的状态。(最大间隔可以通过 (2n - 1) 计算,其中n是移位寄存器的个数)。

其结构如图1所示,其中D触发器充当寄存器,模2加的输出作为反馈:
图1 线性反馈移位寄存器LFSR的结构示意图

图1 线性反馈移位寄存器(LFSR)的结构示意图 [1]

就按上图的电路结构,假设初始的序列为 [0 0 0 1],下一个状态,第三项和第四项进行模2加得到结果为1,初始序列右移一位,将得到的模2加结果补到最左边,那么经过一次移位后将会得到新的状态 [1 0 0 0],同时得到伪随机序列的第一位输出值1。完整的寄存器状态变化如表1所示:

表1 初始序列为 [0 0 0 1] 时寄存器状态变化表

LFSR状态变化示意图

Generation Polynomial

在编程生成PN序列时,图1的LFSR电路会以多项式的形式存在。它被称为生成多项式。图2将帮助理解生成多项式和实际电路的对应关系。这里需要特别注意,[4 3 0]不是第三和第四项做异或(我一开始一直以为是这样的),注意多项式次数和D触发器的对应情况。
生成多项式和实际电路的对应关系

图2 生成多项式和实际电路的对应关系[1]

Mask

这个是我在看Matlab comm.PNSequence时看到的一个属性,姑且翻译成掩码。它也是一个多项式,用二进制向量表示,代表LFSR电路的输出结果是哪几个寄存器的值异或的结果。如图1,直接输出最右侧寄存器的值,Mask多项式就可以表示成 [0 0 0 1],如果输出结果不是最右侧寄存器直接输出,是和其它寄存器的值做异或后得出的,那么就可以通过不同的Mask去表征。比如:最右侧三个寄存器的值异或后得到输出,Mask就表示为 [0 1 1 1]。

二、comm.PNSequence

功能描述

comm.PNSequence通过使用线性反馈移位寄存器(LFSR)来生成一个二进制的伪随机序列。
此object所包含的属性(Property)如下:

  1. Polynomial——生成多项式。用于确定移位寄存器的反馈连接情况。此多项式的长度为N+1,N为移位寄存器输入的原始序列的长度。“z6+z+1” (default)
    有两种表示方法,以 “z8+z2+1” 为例可表示为 [1 0 0 0 0 0 1 0 1] 或者 [8 2 0]。
  2. InitialConditionSource——初始条件的来源。分为 “Property” 和 “Input port” 两种。“Property”(default)
    Input port包含内容如下:
    a)initcond——用于移位寄存器的初始寄存器条件。表示初始的序列。
    b)maskvec——掩码矢量。表示初始序列往那个方向移动。
    c)outputsize——输出序列的长度。长度要小于等于 2m-1。
    d)resetseq——复位PN序列生成器。
  3. InitialConditions——移位寄存器的初始状态。即初始序列。[0 0 0 0 0 1] (default) | binary scalar | binary vector
  4. MaskSource——用于指示移位寄存器移位方向的掩码来源。‘Property’ (default) | ‘Input port’
  5. Mask——指示移位寄存器移位方向的掩码,这个其实不能说是移位方向,是指最后输出序列的值的计算方法。0 (default) | integer scalar | binary vector
  6. VariableSizeOutput——是否启用可变大小的输出。false (default) | true
  7. MaximumOutputSize——最大输出大小。[10 1] (default) | vector of the form [m 1]
  8. SamplesPerFrame——输出的PN序列的长度。1 (default) | positive integer
  9. ResetInputPort——是否使寄存器复位输入。false (default) | true
  10. BitPackedOutput ——是否二进制打包输出。false (default) | true
  11. NumPackedBits——每个输出码字的位数。8 (default) | integer in the range [1, 32]
  12. SignedOutput——是否输出带符号的二进制数字。false (default) | true
  13. OutputDataType——输出的数据类型。‘double’ (default) | ‘logical’ | ‘Smallest unsigned integer’ | ‘Smallest integer’

使用方法

上面那么多的属性中,我觉得主要需要自己设置的其实就是黄色高亮的4个——“Polynomial”、“InitialConditions”、“Mask”、“SamplesPerFrame”。分别代表生成多项式,寄存器的初始状态,输出的计算多项式和输出的长度(状态迭代次数)。
例:

  1. 如果要用Matlab计算表1情况的PN序列,即将4个参数分别设置为:Polynomial为 [ 4 1 0 ],InitialConditions为 [ 0 0 0 1 ],Mask为 [ 0 0 0 1 ],SamplesPerFrame为 15。

——Matlab代码如下:

pnSequence = comm.PNSequence('Polynomial',[4 1 0], 'Mask',[0 0 0 1],...
    'SamplesPerFrame',15,'InitialConditions',[0 0 0 1]);
PN_OUT = pnSequence();

Matlab的输出结果如下图所示,可以看到PN_OUT的结果和表1完全一致:

Matlab的程序运行结果





参考资料:
[1] http://www.sharetechnote.com/html/Handbook_Communication_LFSR.html
[2] https://blog.csdn.net/Graduate2015/article/details/113133919

  • 13
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力毕业的沈一

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值