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

📄 appv3.m

📁 turbo 均衡的经典文献matlab实现
💻 M
字号:
%TE-信道译码
%copyright:flyingxiang
function [Ldb,Lc]=appv3(C1,C0,L)

tran=length(L)/2;                                          %传输数据
gammad=zeros(4,4,tran);
pos=[1 1 0 0;0 0 1 1;1 1 0 0;0 0 1 1];
k=1;
for i=1:tran
   gammad(:,:,i)=.5*[C0(k)*C0(k+1),C1(k)*C1(k+1),0,0;
      0,0,C1(k)*C0(k+1),C0(k)*C1(k+1);
      C1(k)*C1(k+1),C0(k)*C0(k+1),0,0;
      0,0,C0(k)*C1(k+1),C1(k)*C0(k+1)];
   k=k+2;
end
%******************************************************************************
%由LLR产生d1
%******************************************************************************

S=4;                                                      %状态数目
Ac1=[0 1 0 0;0 0 1 0;1 0 0 0;0 0 0 1];
Ac0=[1 0 0 0;0 0 0 1;0 1 0 0;0 0 1 0];


B1d1=zeros(4,4,tran);
B0d0=zeros(4,4,tran);
numd1=zeros(1,tran);
dend1=zeros(1,tran);


%初始化前向递归向量fdb
fdb=zeros(S,1,tran+1);
fdb(:,1,1)=[1;0;0;0] ;
cdb(1)=1;
%递归计算fdb
for i=1:tran
   fdb(:,1,i+1)=gammad(:,:,i)'*fdb(:,1,i);
   cdb(i+1)=sum(fdb(:,1,i+1));
   fdb(:,1,i+1)=fdb(:,1,i+1)./cdb(i+1);
end

%初始化后向递规向量bdb
bdb=zeros(S,1,tran+1);
bdb(:,1,tran+1)=[1;1;1;1];
%递规计算后向向量bdb
for i=tran:-1:1
   bdb(:,1,i)=gammad(:,:,i)*bdb(:,1,i+1);
   cb(i)=sum(bdb(:,1,i));
   bdb(:,1,i)=bdb(:,1,i)./cb(i);
   
end

for n=1:tran
   B1d1(:,:,n)=Ac1.*gammad(:,:,n);
   B0d0(:,:,n)=Ac0.*gammad(:,:,n);
end


Ld1=zeros(1,tran);
saidad1=zeros(1,tran);

for k=1:tran
   numd1(k)=fdb(:,:,k)'*B1d1(:,:,k)*bdb(:,:,k+1);
   dend1(k)=fdb(:,:,k)'*B0d0(:,:,k)*bdb(:,:,k+1);
   Ld1(k)=log((numd1(k))/(dend1(k)));
end

for i=1:tran
   if Ld1(i)>=0
      d1(i)=1;
   else
      d1(i)=-1;
   end
end

%******************************************************************************
%由LLR产生d2
%******************************************************************************

S=4;                                                      %状态数目
Ac1=[0 1 0 0;0 0 0 1;1 0 0 0;0 0 1 0];
Ac0=[1 0 0 0;0 0 1 0;0 1 0 0;0 0 0 1];

B1d1=zeros(4,4,tran);
B0d0=zeros(4,4,tran);
numd2=zeros(1,tran);
dend2=zeros(1,tran);



for n=1:tran
   B1d1(:,:,n)=Ac1.*gammad(:,:,n);
   B0d0(:,:,n)=Ac0.*gammad(:,:,n);
end


Ld2=zeros(1,tran);
saidad2=zeros(1,tran);

for k=1:tran
   numd2(k)=fdb(:,:,k)'*B1d1(:,:,k)*bdb(:,:,k+1);
   dend2(k)=fdb(:,:,k)'*B0d0(:,:,k)*bdb(:,:,k+1);
   Ld2(k)=log((numd2(k))/(dend2(k)));
end

for i=1:tran
   if Ld2(i)>=0
      d2(i)=1;
   else
      d2(i)=-1;
   end
end


%********************************
%连接生成总的迭代数据
%********************************
conc=0;
for n=1:tran
   conc=[conc Ld1(n) Ld2(n)];
end
Lc=conc(2:length(L)+1);




%******************************************************************************
%由LLR生成译码输出
%******************************************************************************

S=4;                                                      %状态数目
Ac1=[0 1 0 0;0 0 0 1;0 1 0 0;0 0 0 1];
Ac0=[1 0 0 0;0 0 1 0;1 0 0 0;0 0 1 0];

B1d1=zeros(4,4,tran);
B0d0=zeros(4,4,tran);
numdb=zeros(1,tran);
dendb=zeros(1,tran);



for n=1:tran
   B1d1(:,:,n)=Ac1.*gammad(:,:,n);
   B0d0(:,:,n)=Ac0.*gammad(:,:,n);
end


Ldb=zeros(1,tran);
saidadb=zeros(1,tran);

for k=1:tran
   numdb(k)=fdb(:,:,k)'*B1d1(:,:,k)*bdb(:,:,k+1);
   dendb(k)=fdb(:,:,k)'*B0d0(:,:,k)*bdb(:,:,k+1);
   Ldb(k)=log((numdb(k))/(dendb(k)));
end











⌨️ 快捷键说明

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