📄 doubinturbodecode.m
字号:
function decoded=DouBinTurboDecode(Ar,Br,Wr1,Yr1,Wr2,Yr2,N,IntTimes,InVar,Sc1,Sc2)
%-----[VecOutA,VecOutB]=DouBinTurboDecode(Ar,Br,Wr1,Yr1,Wr2,Yr2,N)-----
%DVB-RCS标准的双二元解码器
%输入:
% Ar,Br:接收到的信息比特软值部分(加入了噪声),1*N维
% Wr1,Yr1:与第一个CRSC编码器对应的校验比特部分对应(加入了噪声),1*N维
% Wr2,Yr2:与第二个CRSC编码器对应的校验比特部分对应(加入了噪声),1*N维
% N:交织器的长度
% IntTimes:迭代次数
% InVar:信道方差
% Sc1和Sc2分别对应于两个CRSC的循环状态
%输出:
% decoded:解码输出的信息比特序列,1*N维
%
InLi1=zeros(3,N); %初始外信息
%对输入的Ar Br进行交织,供第二个SISO使用
[ArIntLed,BrIntLed]=interleaver(Ar,Br,N);
%开始迭代译码
NewIndex=InL2nd(N);
for iter=1:IntTimes
%第一个SISO
[OutLa1 ,OutLe1]=SISO(InLi1,Ar,Br,Wr1,Yr1,InVar,N,Sc1);
[InLi2(1,:) InLi2(2,:)]=interleaver(OutLe1(1,:),OutLe1(2,:),N);
InLi2(3,NewIndex+1)=OutLe1(3,:);
%第二个SISO
[OutLa2,OutLe2]=SISO(InLi2,ArIntLed,BrIntLed,Wr2,Yr2,InVar,N,Sc2);
[InLi1(1,:) InLi1(2,:)]=deinterleaver(OutLe2(1,:),OutLe2(2,:),N);
InLi1(3,:)=OutLe2(3,NewIndex+1);
end
%迭代结束,解交织
[OutLa(1,:) OutLa(2,:)]=deinterleaver(OutLa2(1,:),OutLa2(2,:),N);
OutLa(3,:)=OutLa2(3,NewIndex+1);
for k=1:N
MaxAbsIndex=FindMaxAbs(OutLa(:,k));
if(OutLa(MaxAbsIndex,k)<0)
UHat(k)=0;
decoded(2*k-1:2*k)=[0 0];
else
UHat(k)=MaxAbsIndex;
decoded(2*k-1:2*k)=de2bi(MaxAbsIndex,2,'left-msb');
end
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -