?? appv3.m
字號:
%TE-信道譯碼
%copyright:flyingxiang
function [Ldb,Lc]=appv3(C1,C0,L)
tran=length(L)/2; %傳輸數(shù)據(jù)
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; %狀態(tài)數(shù)目
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
%初始化后向遞規(guī)向量bdb
bdb=zeros(S,1,tran+1);
bdb(:,1,tran+1)=[1;1;1;1];
%遞規(guī)計算后向向量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; %狀態(tài)數(shù)目
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
%********************************
%連接生成總的迭代數(shù)據(jù)
%********************************
conc=0;
for n=1:tran
conc=[conc Ld1(n) Ld2(n)];
end
Lc=conc(2:length(L)+1);
%******************************************************************************
%由LLR生成譯碼輸出
%******************************************************************************
S=4; %狀態(tài)數(shù)目
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 + -