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

📄 doubinturbodecode.m

📁 采用 DVB反向链路(DVB-RCS)标准中的双二元Turbo码matlab仿真程序和仿真结果。支持1/2和1/3码率。支持MAP
💻 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 + -