📄 iterative_detecion_decoding_2x2.m
字号:
function biterr=iterative_detecion_decoding_2x2(ComSymbol,orig,H11,H21,H12,H22,NoisePwr,qam,iteration,tailpattern)
% Only support 16 QAM
biterr=zeros(1,iteration);
blocksize=length(ComSymbol);
info_num=blocksize*log2(qam)/2; % info bits number, 1/2 coding rate
state_num=64; % number of state in this trellis
load IQvalue_16QAM.mat;
Factor=H11.*conj(H11)+H21.*conj(H21)+H12.*conj(H12)+H22.*conj(H22)-1;
apr_s=log(1/16*ones(blocksize,qam)); % Inital constellation symbol probability as equal probability, Log version
app_s=zeros(1,qam); % symbol a posteriori probability, Log version
LLR_app_b=zeros(log2(qam),blocksize); % bit app Log-likelihood ratio for constellation bit (b3 b2 b1 b0)
LLR_apr_b=zeros(log2(qam),blocksize); % bit a priori Log-likelihood ratio for constellation bit (b3 b2 b1 b0)
LLR_ext_b=zeros(log2(qam),blocksize); % extrinsic information of each bit for deinterleaver
for iter=1:iteration
for loop=1:length(ComSymbol)
app_s = apr_s(loop,:)-(Factor(loop)*(IQvalue.*conj(IQvalue))+(abs(ComSymbol(loop)-IQvalue)).^2)/NoisePwr;
% convert symbol app to bit LLR: Max-Log approximation
LLR_app_b(1,loop)=logmap(app_s([8:15]+1))-logmap(app_s([0:7]+1)); % b3
LLR_app_b(2,loop)=logmap(app_s([4:7,12:15]+1))-logmap(app_s([0:3,8:11]+1)); % b2
LLR_app_b(3,loop)=logmap(app_s([2 3 6 7 10 11 14 15]+1))-logmap(app_s([0 1 4 5 8 9 12 13]+1)); % b1
LLR_app_b(4,loop)=logmap(app_s([1 3 5 7 9 11 13 15]+1))-logmap(app_s([0 2 4 6 8 10 12 14]+1)); % b0
end % end for loop
% Extrinsic information for each bit
LLR_ext_b=LLR_app_b-LLR_apr_b;
% Deinterleave
LLR_apr_c=deinterleave(LLR_ext_b(:)',log2(qam)/2); % LLR_apr_c: treated as a priori information by decoder
%LLR_app_c_1=deinterleave(LLR_app_b(:)',log2(qam)/2);
% LLR_c to probability of parity bits
%Pr_c(1,:)=1./(exp(LLR_apr_c)+1); % P{c=0}
%Pr_c(2,:)=1-Pr_c(1,:); % P{c=1}
% ### prologue step to look for good intial state, use viterbi algorithm ###
if tailpattern=='zero',
init_state=1;
else
%init_state=prologue_init_state(Pr_c);
end
% ###### MAP decoding ######
[LLR_app_d]=map_decoding(init_state,state_num,info_num,LLR_apr_c);
%[LLR_app_d,LLR_app_c]=map_decoding(init_state,state_num,info_num,LLR_app_c_1);
% bit error number in this iteration
hard_dec=(sign(LLR_app_d)+1)/2;
biterr(iter)=length(find(orig-hard_dec));
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -