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

📄 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,1*2N维
%   N为交织器的长度
%   Rate是编码速率,作为特例,只考虑码率为1/2和1/3两种情况
%输出:
%   VecOutA/VecOutB是编码之后的2路发送序列,采用BPSK调制,1*3N维
%   Sc1和Sc2分别对应于两个CRSC的循环状态
%对符号1映射为+1,而符号0映射为-1(这与常规相反,不过对性能不会影响)
%对凿孔的数据,发送+1和-1的中间值0
%
len=length(VecIn);
if len~=2*N
    error('input data number is wrong');
else
    %产生码率1/3的码字序列
    FrameA=VecIn(1:2:2*N-1);
    FrameB=VecIn(2:2:2*N);
    [W1,Y1,Sc1]=CRSC(FrameA,FrameB);
    [InterFrameA,InterFrameB]=interleaver(FrameA,FrameB,N);
    [W2,Y2,Sc2]=CRSC(InterFrameA,InterFrameB);
    VecOutA=[FrameA Y1 W1];
    VecOutB=[FrameB Y2 W2];
end
%凿孔
if Rate==1/2
    VecOutA(1:2*N)=2*VecOutA(1:2*N)-1;
    VecOutA(1+2*N:3*N)=0;
    VecOutB(1:2*N)=2*VecOutB(1:2*N)-1;
    VecOutB(1+2*N:3*N)=0;
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 + -