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

📄 llr_bp_decode.m

📁 实现ldpc的编译码功能
💻 M
字号:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%对数域bp译码算法         %%%%%
%%%%%《ldpc译码算法的研究与仿真》%%%
%%%%%                        %%%%%
%%%%%                        %%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [uhat vhat]=llr_bp_decode(rx_waveform,SNR,amp,scale,H,rearranged_cols)

dim=size(H);
rows=dim(1);
cols=dim(2);

vhat(1,1:cols)=0;
zero(1,1:rows)=0;

[hr,hc]=find(H==1);
len=length(hr);

s=struct('zmn',0,'lmn',0,'zn',0);
newh(1:rows, 1:cols)=s;

%step1

%qmn0=1-qn=pr(sn=+1|y)=1/(1+exp(-2*y/deta^2))
%qmn1=qn=pr(sn=-1|y)=1/(1+exp(2*y/deta^2))
%deta^2为噪声的方差,等于N0/2
%初始化对于每一个m.n,zmn=Fn
qmn0=1./(1+exp(-2*amp*rx_waveform.*scale/(SNR/2)));
qmn1=1-qmn0;%1./(1+exp(2*amp.*rx_waveform.*scale/(SNR/2)));
Fn=log(qmn0./qmn1);
for i=1:len
newh(hr(i),hc(i)).zmn=Fn(hc(i));
end

%step2
%迭代译码,迭代次数100
for iteration=1:100
%step2-1
%从校验节点到信息节点
    for i=1:rows
        colind=find(hr==i);
        colnum=length(colind);
        for j=1:colnum
            tmn_l=1;
            for k=1:colnum
                if k~=j
                   zmn_l=newh(i,hc(colind(k))).zmn;
                   tmn_l=tmn_l*((1-exp(zmn_l))/(1+exp(zmn_l)));
                end
            end
%             tmn_l=newh(i,hc(colind(j))).tmn;
            newh(i,hc(colind(j))).lmn=log((1-tmn_l)/(1+tmn_l));
        end
    end
%step2-2
%从信息节点到校验节点
    for j=1:cols
        rowind=find(hc==j);
        rownum=length(rowind);
        for i=1:rownum
            lmn_l=0;
            for k=1:rownum
                if k~=i
                  lmn_l=lmn_l+newh(hr(rowind(k)),j).lmn; 
                end
            end
            newh(hr(rowind(i)),j).zmn=Fn(j)+lmn_l;

        end
            %update pseudo posterior probability
            %更新伪后验概率
            newh(hr(rowind(i)),j).zn=newh(hr(rowind(i)),j).zmn+newh(hr(rowind(i)),j).lmn;
            %tentative decoding
            %译码尝试,对信息节点的后验概率作硬判决
            if newh(hr(rowind(i)),j).zn>0
                vhat(j)=1;
            else
                vhat(j)=0;
            end
    end
    
%step2-3
%硬判决
    if mul_GF2(vhat,H.')==zero
    %如果判决条件满足,译码结束,否则继续迭代
        break;
    end
end


uhat = extract_mesg(vhat,rearranged_cols);      






⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -