原创 DVB-S的m序列发生器matlab仿真

2012-6-27 20:01 3321 22 22 分类: 消费电子

最近一个朋友让帮忙做个DVB-S的m序列发生器仿真,做完记录下。

各个数字电视广播传输标准都含有能量扩散模块,即为了消除输入的TS流中含的长“0”或长“1”,进行的一个伪随机化处理,也就是我们说的能量扩散模块或者m序列发生器。

TS包的简单结构如下图:

 

1.jpg

固定长度为188字节,第一个为同步字节47H,DVB-S中还规定8个TS帧为一个超帧,对每个超帧的第一个TS帧的同步字节47H进行翻转成B8H。

PRBS的二进制生成多项式为:P(X)=1+X14+X15

结构图如下:

2.jpg

由一个移位寄存器、两个异或门和一个与门组成,其中移位寄存器的初始序列为100101010000000。

需注意的是,DVB-S中规定,每个超帧数据开始前需对PRBS进行初始化,并且每个同步字节都不进行伪随机化,但移位寄存器需要进行移位。综上,matlab仿真程序如下:

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% DVB-S PRBS
%  2012/6/25
%

%% initial
PACKAGE_BYTES = 188;
TEST_PACKETS = 400;
PRBS_INIT_DATA = [1 0 0 1 0 1 0 1 0 0 0 0 0 0 0];

%% PRBS
null_package_data = [71 31 255 16 zeros(1,184)+255];
data = repmat(null_package_data, [1 TEST_PACKETS]);
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 i>1
            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.*[128 64 32 16 8 4 2 1]);
        end
    end
end
data_after_prbs = data;

仅供参考。

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
22
关闭 站长推荐上一条 /3 下一条