伪随机二进制序列(PRBS)

PRBS是Pseudo Random Binary Sequence的缩写,即“伪随机二进制序列”的意思。PRBS码具有“随机”特性,是因为在PRBS码流中,二进制数“0”和“1”是随机出现的,但是它又和真正意义上的随机码不同,这种 “随机”特性只是局部的,即在周期内部,“0”和“1”是随机出现的(码流生成函数与初始码确定后,码流的顺序也是固定的),但各个周期中的码流却是完全相同的,所以我们称其为“伪”随机码。

PRBS码的周期长度与其阶数有关,常用的阶数有7、9、11、15、20、23、31,也就是我们常说的PRBS7、PRBS9、PRBS11、PRBS15、PRBS20、PRBS23、PRBS31。

对于n阶PRBS码,每个周期的序列长度为2n-1,在每个周期内,“0”和“1”是随机分布的,并“0”和“1”的个数相等,连“1”的最大数目为n,连“0”的最大数目为n-1(反转后就是n-1个连“1”和n个连“0”)。下图是常用阶数码流参数统计表:

在对高速信号链路进行误码测试时,基本上都是利用PRBS码流来模拟真实的线网码流环境,因为在线网中,所有的数据都是随机出现的,没有任何规律可言,而PRBS码流在一定程度上具有这种“随机数据”特性,二进制“0”和“1”随机出现,其频谱特征与白噪声非常接近。PRBS码流的阶数越高,其包含的码型就越丰富,就越接近真实的线网环境,测试的结果就越准确。

 

PRBS码型发生器由移位寄存器和异或门(XOR)组成,如下图所示:

如下是一个用PRBS-7 产生伪乱数二进制数列的C语言例程:

#include <stdio.h> 
#include <stdint.h> 
#include <stdlib.h> 
    
int main ( int argc , char * argv []) {     
    uint8_t start = 0x02 ;   
    uint8_t a = start ;   
    int i ; for ( i = 1 ;; i ++ ) {     
        
        int newbit = ((( a >> 6 ) ^ ( a >> 5 )) & 1 );           
        a = (( a << 1 ) | newbit ) & 0x7f ;        
        printf ( "%x \n " , a ); 
        if ( a == start ) {    
            printf ( "repetition period is %d \n " , i ); 
            break ;
        }
    }
}

  • 3
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个使用VHDL语言生成14位二进制伪随机序列的示例代码: ``` library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.NUMERIC_STD.ALL; entity prbs14 is Port ( clk : in STD_LOGIC; reset : in STD_LOGIC; prbs_out : out STD_LOGIC_VECTOR (13 downto 0)); end prbs14; architecture Behavioral of prbs14 is signal prbs_reg : std_logic_vector(13 downto 0) := "00000000000000"; begin process (clk, reset) begin if (reset = '1') then prbs_reg <= "00000000000000"; elsif rising_edge(clk) then prbs_reg(0) <= prbs_reg(13) xor prbs_reg(12); prbs_reg(1) <= prbs_reg(0); prbs_reg(2) <= prbs_reg(1); prbs_reg(3) <= prbs_reg(2) xor prbs_reg(13); prbs_reg(4) <= prbs_reg(3); prbs_reg(5) <= prbs_reg(4); prbs_reg(6) <= prbs_reg(5) xor prbs_reg(13); prbs_reg(7) <= prbs_reg(6) xor prbs_reg(0); prbs_reg(8) <= prbs_reg(7); prbs_reg(9) <= prbs_reg(8); prbs_reg(10) <= prbs_reg(9); prbs_reg(11) <= prbs_reg(10); prbs_reg(12) <= prbs_reg(11); prbs_reg(13) <= prbs_reg(12); end if; end process; prbs_out <= prbs_reg; end Behavioral; ``` 在这个代码中,我们使用了一个14位的寄存器(prbs_reg)来存储伪随机序列的状态。在每个时钟上升沿时,我们使用一组异或门来计算下一个状态,并将其存储在寄存器中。最后,我们将寄存器的值赋给输出端口(prbs_out)来输出伪随机序列。 该代码中的异或门组合逻辑是根据多项式x^14 + x^13 + 1来生成的,这是一个常见的伪随机序列生成多项式。 你可以使用这个代码来生成伪随机序列,只需将其添加到你的VHDL项目中,并将其实例化到你的设计中。然后,你可以将其输出连接到其他模块或外部设备,以在你的系统中使用这个伪随机序列

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值