?? com_decoder1.asv
字號:
function [so,e_p] = com_decoder1(a_p,in)
%****************************************************************
% 內容概述:子解碼器,輸入a_p是先驗信息,in是RSC編碼器輸出
% 利用硬件化的方式實現TURBO碼的p-MAX-LOG-MAP譯碼
% 生成矩陣按照3GPP標準為[1 1 0 1;1 0 1 1]
% 未使用另外一個譯碼器反饋的外部信息
% 輸入為經過高斯信道的RSC軟輸入,而輸出為軟輸出
% 創 建 人:朱殿榮/QQ:235347/MSN:njzdr@msn.com
% 單 位:南京郵電大學,通信工程系
% 創建時間:2005年7月17日
% 修改時間:
% 參考文獻:《數字通信--基礎與應用》
% 《High performace parallelised 3GPP Turbo Decoder》
% 《改進的Turbo碼算法及其FPGA實現過程的研究》,天津大學,張寧,趙雅興
% 版權聲明:任何人均可復制、傳播、修改此文件,同時需保留原始版權信息。
%****************************************************************
x=in(1,:); %輸入系統位
y=in(2,:); %輸入校驗位
%---初始化&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
Infty = -128;
pi=1;
% [n,K] = size(g);
% m = K - 1;
L_seq = length(in);
d(1:2,1:L_seq)=zeros(2,L_seq); %分支量度,2種可能結果,輸入為-1或者1
%D(i,k)
a(1:8,1:L_seq)=Infty*ones(8,L_seq); %前向分支量度,A(S,k)
a(1,1)=0; %寄存器狀態由全零開始
b(1:8,1:L_seq+1)=Infty*ones(8,L_seq+1); %后向分支量度,B(S,k)
b(1,L_seq+1)=0; %寄存器狀態由全零結束
va1(1:8,1)=zeros(8,1);
va0(1:8,1)=zeros(8,1);
va0_index=[2 1 4 3 6 5 8 7]';
a2a_index=([4 0 1 5 6 2 3 7]+1)';
vb1(1:8,1)=zeros(8,1);
vb0(1:8,1)=zeros(8,1);
vb0_index=[5 6 7 8 1 2 3 4]';
b2b_index=([1 2 5 6 0 3 4 7]+1)';
%初始化結束,開始計算
for k=1:L_seq
d(1,k)=pi*(a_p(k)+x(k)+y(k));
d(2,k)=pi*(a_p(k)+x(k)-y(k));
if k>1
va1=a(:,k-1)+[d(1,k);d(1,k);d(2,k);d(2,k);d(2,k);d(2,k);d(1,k);d(1,k)];
va0=a(:,k-1)-[d(1,k);d(1,k);d(2,k);d(2,k);d(2,k);d(2,k);d(1,k);d(1,k)];
va0=va0(va0_index);
a(:,k)=max(va0,va1);
a(a2a_index,k)=a(:,k);
end
if k==L_seq
%計算后向分支度量
vb1=b(:,k+1)+[d(1,k);d(2,k);d(2,k);d(1,k);d(1,k);d(2,k);d(2,k);d(1,k)];
vb0=b(:,k+1)-[d(1,k);d(2,k);d(2,k);d(1,k);d(1,k);d(2,k);d(2,k);d(1,k)];
vb0=vb0(vb0_index);
b(:,k)=max(vb0,vb1);
b(b2b_index,k)=b(:,k);
%計算LLR;
% llr_a=a(b2b_index,k);
% llr(k)=max(llr_a+vb1)-max(llr_a+vb0);
lanbda1=a(:
end
end
for k=L_seq-1:-1:1
vb1=b(:,k+1)+[d(1,k);d(2,k);d(2,k);d(1,k);d(1,k);d(2,k);d(2,k);d(1,k)];
vb0=b(:,k+1)-[d(1,k);d(2,k);d(2,k);d(1,k);d(1,k);d(2,k);d(2,k);d(1,k)];
vb0=vb0(vb0_index);
b(:,k)=max(vb0,vb1);
b(b2b_index,k)=b(:,k);
%計算LLR;
llr_a=a(b2b_index,k);
llr(k)=max(llr_a+vb1)-max(llr_a+vb0);
end
so=llr;
% 軟輸出
e_p=so-a_p;
% 為下一個子解碼器提供的外部信息
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -