📄 doubinturboencode.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 + -