PRBS并行输出

PRBS(Pseudo-Random Binary Sequences)是通过LFSR和特征函数 伪随机数发生器产生的伪随机数序列,通常用于高速数字通信测试。

基本电路(单比特输出)

prbs N表示用N比特lfsr尝试伪随机数序列,常用的有N=7,9,11,15,32等。伪随机序列的长度为 2 N − 1 2^{N-1} 2N1。 那么如何搭建电路产生这些伪随机数呢?以PRBS7,生成多项式为 G ( x ) = x 7 + x 6 + 1 G(x)=x^7 + x^6+1 G(x)=x7+x6+1,对应External Feedback LFSR电路如下图,其中1~7表示移位寄存器。

image.png

这样的电路一个周期只能产生一比特输出,如果需要每T产生伪序列中的两个,那么该如何实现?或者我想输出是6,7两个寄存器,下一拍更新时,希望是如图电路移位两拍的结果。

两比特输出

生成多项式还对应生成多项式还有对应的特征矩阵M。假设x1-7分别对应图中1~7个寄存器的输出,则下一拍x’1-7的值可以通过矩阵M,由当前拍x1-7的值得到。

[ x 7 ′ x 6 ′ x 5 ′ x 4 ′ x 3 ′ x 2 ′ x 1 ′ ] = [ 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 ] [ x 7 x 6 x 5 x 4 x 3 x 2 x 1 ] \left[ \begin{matrix} x_7' \\ x_6'\\x_5'\\x_4'\\x_3'\\x_2'\\x_1'\\ \end{matrix} \right] = \left[ \begin{matrix} 0 & 1 & 0& 0& 0& 0& 0\\ 0 & 0 & 1& 0& 0& 0& 0\\ 0 & 0 & 0& 1& 0& 0& 0\\ 0 & 0 & 0& 0& 1& 0& 0\\ 0 & 0 & 0& 0& 0& 1& 0\\ 0 & 0 & 0& 0& 0& 0& 1\\ 1 & 1 & 0& 0& 0& 0& 0\\ \end{matrix} \right] \left[ \begin{matrix} x_7 \\ x_6 \\ x_5\\ x_4\\ x_3\\ x_2\\ x_1 \end{matrix} \right] x7x6x5x4x3x2x1 = 0000001100000101000000010000000100000001000000010 x7x6x5x4x3x2x1
如果一次更新要得到两拍后的结果,那么映射关系等于M^2,即
image.png

通过该映射关系,可以很容易写出x’1-7的更新逻辑。

x 7 ′ = x 5 x 6 ′ = x 4 x 5 ′ = x 3 x 4 ′ = x 2 x 3 ′ = x 1 x 2 ′ = x 7 ⊕ x 6 x 1 ′ = x 6 ⊕ x 5 \begin{align} x'_7 &= x_5 \\ x'_6 &= x_4 \\ x'_5 &= x_3 \\ x'_4 &= x_2 \\ x'_3 &= x_1 \\ x'_2 &= x_7 \oplus x_6 \\ x'_1 &= x_6 \oplus x_5\\ \end{align} x7x6x5x4x3x2x1=x5=x4=x3=x2=x1=x7x6=x6x5

十比特输出

如果需要一次产生10比特的伪随机序列,又该如何实现呢?初值固定后,这些伪随机序列也是固定的,因此每T产生此序列的10个数也是固定的,那么该如何做到呢?

基本电路只有7个寄存器,该如何一次性输出十个数呢?如果这样想,就容易落入死胡同。换个思路,通过生成矩阵,只要确定初值,我们可以得到移位任意拍的输出逻辑。所以下一拍x’7 表示移位10次后的结果,x’6表示移位11次后的结果,x’1表示移位16次的结果,另外准备3个寄存器x’0,x’-1,x’-2,分别表示移位17,18,19次的结果。我们只需要关心下一拍的更新逻辑!

image.png

image.png

所以根据 M 10 M^{10} M10我们可以得到如下更新逻辑:

x 7 ′ = x 4 ⊕ x 3 x 6 ′ = x 3 ⊕ x 2 x 5 ′ = x 2 ⊕ x 1 x 4 ′ = x 7 ⊕ x 6 ⊕ x 1 x 3 ′ = x 7 ⊕ x 5 x 2 ′ = x 6 ⊕ x 4 x 1 ′ = x 5 ⊕ x 3 x 0 ′ = x 4 ⊕ x 2 x − 1 ′ = x 3 ⊕ x 1 x − 2 ′ = x 7 ⊕ x 6 ⊕ x 2 \begin{align} x'_7 &= x_4 \oplus x_3 \\ x'_6 &= x_3 \oplus x_2 \\ x'_5 &= x_2 \oplus x_1 \\ x'_4 &= x_7 \oplus x_6 \oplus x_1 \\ x'_3 &= x_7 \oplus x_5 \\ x'_2 &= x_6 \oplus x_4 \\ x'_1 &= x_5 \oplus x_3\\ x'_0 &= x_4 \oplus x_2\\ x'_{-1} &= x_3 \oplus x_1\\ x'_{-2} &= x_7 \oplus x_6 \oplus x_2 \\ \end{align} x7x6x5x4x3x2x1x0x1x2=x4x3=x3x2=x2x1=x7x6x1=x7x5=x6x4=x5x3=x4x2=x3x1=x7x6x2

同理对于其他PRBS,都可以生成任意比特的输出。

原文

  • 23
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值