LDPC译码算法


tic
%function [uhat,vhat]=ldpc_llrbpdecode(rx_waveform,SNR,amp,scale,H,rearranged_cols)
max_iter=100;
H=round(rand(128,256));%随机生成的矩阵
dim=size(H);
rows=dim(1);
cols=dim(2);%分别表示H的行数和列数

vhat(1,1:cols)=0;

zero(1,1:rows)=0;

u=round(rand(1,100));%根据H矩阵而定,这是编码出来的码字
num=length(u);
amp=1;
tx_waveform=bpsk(u,amp);
SNR=10;
rx_waveform=awgn(tx_waveform,SNR);
%sigma2=0.1;
scale(1:num)=1; 
pl1=1./(1+exp(-2*amp*rx_waveform.*scale/(SNR/2)));     %pl1为信道传递给变量节点的为1的初始概率,后面的参数是什么意思?rx-waveform是码率,SNR信噪比
pl0=1-pl1;%amp等于1?
%L=2.*rx_waveform./sigma2;

%newh(1:rows, 1:cols)=s;
[h1i h1j]=find(H==1);
h1num=length(h1i);
for i=1:h1num
    Lqmn(h1i(i),h1j(i))=log2((pl0(h1j(i))/pl1(h1j(i))));
end
iter=0;
for iteration=1:max_iter
    for i=1:h1num
        a(i)=tanh(Lqmn(h1i(i),h1j(i)));
        b(i)=tanh(Lqmn(h1i(i),h1j(i))*0.5);
        a(i)=b(i);
    end
    for i=1:rows
        colind=find(h1i==i);
        colnum=length(colind);
        for j=1:colnum
            proh_tanh=1;
            for k=1:colnum
                if k~=j
                    proh_tanh=proh_tanh*a(colind(k));
                end
            end  
         Lrmn(i,h1j(colind(j)))=log((1+proh_tanh)/(1-proh_tanh));
        end
    end
   for j=1:cols
        rowind=find(h1j==j);
        rownum=length(rowind);
        sum_rmn=0;
        for i=1:rownum
        sum_rmn=sum_rmn+Lrmn(h1i(rowind(i)),j);
        end %完成了每一列的求和运算
        for i=1:rownum
            Lq(h1i(rowind(i)),j)=Lqmn(h1i(rowind(i)),j)+sum_rmn;
            Lqmn(h1i(rowind(i)),j)=Lq(h1i(rowind(i)),j)-Lrmn(h1i(rowind(i)),j);
            if Lq(h1i(rowind(i)),j)>0
                vhat(j)=0;
            else
                vhat(j)=1;
            end
        end
   end
    iter=iter+1;
    c=vhat*H';
    %if (mul_GF2(vhat,H')==0)
       % number=iter;
       % break;
    %end
end
uhat=vhat(1:(cols-rows));
errmax=find(u~=vhat);
nerr=length(errmax)
toc

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fpga和matlab

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值