?? 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 + -