⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 doubinturboencode.m

📁 采用 DVB反向链路(DVB-RCS)标准中的双二元Turbo码matlab仿真程序和仿真结果。支持1/2和1/3码率。支持MAP
💻 M
字号:
function [VecOutA,VecOutB,Sc1,Sc2]=DouBinTurboEncode(VecIn,N,Rate)
%---VecOut=DouBinTurboEncode(VecIn,N)----
%DVB-RCS标准的双二元编码器
%输入:
%   输入VecIn串行的二进制 0 1 数据,进入后被分为2路数据A,B
%   N为交织器的长度
%   Rate是编码速率,作为特例,只考虑码率为1/2和1/3两种情况
%输出:
%   VecOutA/VecOutB是编码之后的2路发送序列,采用BPSK调制
%   Sc1和Sc2分别对应于两个CRSC的循环状态
%对符号1映射为+1,而符号0映射为-1(这与常规相反,不过对性能不会影响)
%对凿孔的数据,发送+1和-1的中间值0
%
FrameNum=floor(length(VecIn)/N/2);  %总帧数目
if FrameNum<1
    error('Not enough data inputed');
else
%产生码率1/3的码字序列
    for cnt=1:FrameNum
        FrameA=VecIn(1+(cnt-1)*N*2:2:cnt*2*N-1);
        FrameB=VecIn(2+(cnt-1)*N*2:2:cnt*2*N);
        [W1,Y1,Sc1(cnt)]=CRSC(FrameA,FrameB);
        [InterFrameA,InterFrameB]=interleaver(FrameA,FrameB,N);
        [W2,Y2,Sc2(cnt)]=CRSC(InterFrameA,InterFrameB);
        VecOutA(1+(cnt-1)*N*3:cnt*3*N)=[FrameA Y1 W1];
        VecOutB(1+(cnt-1)*N*3:cnt*3*N)=[FrameB Y2 W2];
    end
end
%凿孔
if Rate==1/2
    for cnt=1:FrameNum
        VecOutA(1+(cnt-1)*N*3:cnt*2*N)=2*VecOutA(1+(cnt-1)*N*3:cnt*2*N)-1;
        VecOutA(cnt*2*N+1:cnt*3*N)=0;
        VecOutB(1+(cnt-1)*N*3:cnt*2*N)=2*VecOutB(1+(cnt-1)*N*3:cnt*2*N)-1;
        VecOutB(cnt*2*N+1:cnt*3*N)=0;
    end
elseif Rate==1/3
    VecOutA=2*VecOutA-1;
    VecOutB=2*VecOutB-1;
else
    error('wrong encoder rate is inputed')
end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -