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

📄 crsc.m

📁 采用 DVB反向链路(DVB-RCS)标准中的双二元Turbo码matlab仿真程序和仿真结果。支持1/2和1/3码率。支持MAP
💻 M
字号:
function [W,Y,Sc]=CRSC(A,B)
%-----[W,Y]=CRSC(A,B)------
%DVB-RCS标准中的CRSC编码器
%输入:
%A,B是输入的双二元序列
%输出:
%W,Y是编码后的校验序列
%Sc:循环状态
trellis=struct('NextStates',[0 7 4 3;4 3 0 7;1 6 5 2;5 2 1 6;6 1 2 5;2 5 6 1;7 0 3 4;3 4 7 0],...
    'Outputs',[ [0 0] [1 1] [1 1] [0 0];...
    [0 0] [1 1] [1 1] [0 0];...
    [0 1] [1 0] [1 0] [0 1];...
    [0 1] [1 0] [1 0] [0 1];...
    [1 1] [0 0] [0 0] [1 1];...
    [1 1] [0 0] [0 0] [1 1];...
    [1 0] [0 1] [0 1] [1 0];...
    [1 0] [0 1] [0 1] [1 0] ]);
%NextStates和Outputs均为8*4的矩阵(实际Outputs是8*8的)
%其行表示状态0~7
%列表示输入数据(A,B)对对应的十进制数0~3
lenA=length(A);
lenB=length(B);
if lenA~=lenB
    error('wrong input vector');
else
    %预编码
    state=0;
    for cnt=1:lenA  %循环结束得到(S_N)^0
        state=trellis.NextStates(state+1,2*A(cnt)+B(cnt)+1);
    end
    rem=mod(lenA,7);
    %循环状态Sc的查询表
    %行表示N mod 7,分别对应于1~6;列表示预编码结束状态,分别对应于0~7
    ScTable=[0 6 4 2 7 1 3 5;0 3 7 4 5 6 2 1;0 5 3 6 2 7 1 4;...
        0 4 1 5 6 2 7 3;0 2 5 7 1 3 4 6;0 7 6 1 3 4 5 2];
    %实际编码
    if rem~=0
        state=ScTable(rem,state+1); %循环状态Sc
        Sc=state;
    else
        error('wrong input frame length');
    end
    for cnt=1:lenA
        W(cnt)=trellis.Outputs(state+1,2*(2*A(cnt)+B(cnt))+1);
        Y(cnt)=trellis.Outputs(state+1,2*(2*A(cnt)+B(cnt))+2);
        state=trellis.NextStates(state+1,2*A(cnt)+B(cnt)+1);
    end
end

⌨️ 快捷键说明

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