tag 标签: m序列

相关博文
  • 热度 26
    2013-9-18 08:35
    1569 次阅读|
    5 个评论
    .
  • 热度 22
    2012-6-27 20:01
    3268 次阅读|
    0 个评论
    最近一个朋友让帮忙做个DVB-S的m序列发生器仿真,做完记录下。 各个数字电视广播传输标准都含有能量扩散模块,即为了消除输入的TS流中含的长“0”或长“1”,进行的一个伪随机化处理,也就是我们说的能量扩散模块或者m序列发生器。 TS包的简单结构如下图:   固定长度为188字节,第一个为同步字节47H,DVB-S中还规定8个TS帧为一个超帧,对每个超帧的第一个TS帧的同步字节47H进行翻转成B8H。 PRBS的二进制生成多项式为:P(X)=1+X 14 +X 15 结构图如下: 由一个移位寄存器、两个异或门和一个与门组成,其中移位寄存器的初始序列为100101010000000。 需注意的是,DVB-S中规定,每个超帧数据开始前需对PRBS进行初始化,并且每个同步字节都不进行伪随机化,但移位寄存器需要进行移位。 综上,matlab仿真程序如下: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% DVB-S PRBS %  2012/6/25 % %% initial PACKAGE_BYTES = 188; TEST_PACKETS = 400; PRBS_INIT_DATA = ; %% PRBS null_package_data = ; data = repmat(null_package_data, ); data_before_prbs = data; % super frame 1st sync change for periods=1:TEST_PACKETS;     for i=1:PACKAGE_BYTES;         if i==1 mod(periods,8)==1             data((periods - 1) * PACKAGE_BYTES + i) = 255 - 71;    % B8HEX         end     end end % frame data prbs for periods=1:TEST_PACKETS;     for i=1:PACKAGE_BYTES;         tempbin = zeros(1, 8);         if i==1 mod(periods,8)==1             PRBS = PRBS_INIT_DATA;         else             %PRBS generator is 1+x^14+x^15             tempbin = xor(PRBS(15:-1:8), PRBS(14:-1:7));             PRBS(15:-1:9) = PRBS(7:-1:1);             PRBS(8:-1:1) = tempbin;         end         if i1             tempdata = data((periods - 1) * PACKAGE_BYTES + i);             datastr = dec2bin(tempdata, 8);             tempdatabin = zeros(1, 8);             tempdatabin(1:8) = datastr(1:8) - 48;             databin = xor(tempbin, tempdatabin);             data((periods - 1) * PACKAGE_BYTES + i) = sum(databin.* );         end     end end data_after_prbs = data; 仅供参考。
相关资源