⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 iterative_detecion_decoding_2x2.m

📁 该文件夹为空时块码-卷积码级联系统的仿真程序
💻 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 + -