PRBS并行输出
PRBS(Pseudo-Random Binary Sequences)是通过LFSR和特征函数 伪随机数发生器产生的伪随机数序列,通常用于高速数字通信测试。
基本电路(单比特输出)
prbs N表示用N比特lfsr尝试伪随机数序列,常用的有N=7,9,11,15,32等。伪随机序列的长度为$2^{N-1}$。 那么如何搭建电路产生这些伪随机数呢?以PRBS7,生成多项式为$G(x)=x^7 + x^6+1$,对应External Feedback LFSR电路如下图,其中1~7表示移位寄存器。
这样的电路一个周期只能产生一比特输出,如果需要每T产生伪序列中的两个,那么该如何实现?或者我想输出是6,7两个寄存器,下一拍更新时,希望是如图电路移位两拍的结果。
两比特输出
生成多项式还对应生成多项式还有对应的特征矩阵M。假设x1-7分别对应图中1~7个寄存器的输出,则下一拍x'1-7的值可以通过矩阵M,由当前拍x1-7的值得到。
$$ \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] $$ 如果一次更新要得到两拍后的结果,那么映射关系等于M^2,即 ![image.png](//www.icfgblog.com/usr/uploads/auto_save_image/334a493541a485194e9696535d422858.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)通过该映射关系,可以很容易写出x'1-7的更新逻辑。
$$ \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} $$十比特输出
如果需要一次产生10比特的伪随机序列,又该如何实现呢?初值固定后,这些伪随机序列也是固定的,因此每T产生此序列的10个数也是固定的,那么该如何做到呢?
基本电路只有7个寄存器,该如何一次性输出十个数呢?如果这样想,就容易落入死胡同。换个思路,通过生成矩阵,只要确定初值,我们可以得到移位任意拍的输出逻辑。所以下一拍x'7 表示移位10次后的结果,x'6表示移位11次后的结果,x'1表示移位16次的结果,另外准备3个寄存器x'0,x'-1,x'-2,分别表示移位17,18,19次的结果。我们只需要关心下一拍的更新逻辑!
所以根据$M^{10}$我们可以得到如下更新逻辑:
$$ \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} $$同理对于其他PRBS,都可以生成任意比特的输出。
很好奇,M^10得到下面更新逻辑那一块还是没明白