?? decoder_3gpp_p_max.asv
字號:
%****************************************************************
% 內容概述:利用硬件化的方式實現TURBO碼的p-MAX-LOG-MAP譯碼
% 生成矩陣按照3GPP標準為[1 1 0 1;1 0 1 1]
% 未使用另外一個譯碼器反饋的外部信息
% 輸入為經過高斯信道的RSC軟輸入,而輸出為軟輸出
% 創 建 人:朱殿榮/QQ:235347/MSN:njzdr@msn.com
% 單 位:南京郵電大學,通信工程系
% 創建時間:2005年7月16日
% 修改時間:
% 參考文獻:《數字通信--基礎與應用》
% 《High performace parallelised 3GPP Turbo Decoder》
% 《改進的Turbo碼算法及其FPGA實現過程的研究》,天津大學,張寧,趙雅興
% 版權聲明:任何人均可復制、傳播、修改此文件,同時需保留原始版權信息。
%****************************************************************
clear;
x=[0.8 -0.7 0.86 0.68]; %輸入系統位
y=[0.9 0.96 -0.69 0.85]; %輸入校驗位
%---初始化&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
Infty = -128;
d(1:2,1:4)=zeros(2,4); %分支量度,2種可能結果,輸入為-1或者1
%D(i,k)
a(1:8,1:4)=Infty*ones(8,4); %前向分支量度,A(S,k)
a(1,1)=0; %寄存器狀態由全零開始
b(1:8,1:5)=Infty*ones(8,5); %后向分支量度,B(S,k)
b(1,5)=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)';
%計算分支量度D-----------------
%k=1&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
k=1;
d(1,k)=x(k)+y(k);
d(2,k)=x(k)-y(k);
%k=1時的前向狀態量度已經初始化,無需計算。
%k=2&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
k=2;
d(1,k)=x(k)+y(k);
d(2,k)=x(k)-y(k);
%其他分支量度為0,已經在初始化時設定,每個k時無需計算。
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);
%k=3&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
k=3;
d(1,k)=x(k)+y(k);
d(2,k)=x(k)-y(k);
%其他分支量度為0,已經在初始化時設定,每個k時無需計算。
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);
%k=4&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
k=4;
d(1,k)=x(k)+y(k);
d(2,k)=x(k)-y(k);
%其他分支量度為0,已經在初始化時設定,每個k時無需計算。
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);
%開始計算后向分支度量
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(a2a_index,k)=a(:,k);
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -