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