您现在的位置:首页 >> 编解码 >> 内容

m基于大衍数无高阶环稀疏校验矩阵H构造算法和RMP消息传递的QC-LDPC性能matlab仿真

时间:2023/2/16 21:57:09 点击:

  核心提示:14_013_m,包括程序操作录像+说明文档...

1.完整项目描述和程序获取

>面包多安全交易平台:https://mbd.pub/o/bread/ZJWVmZpr

>如果链接失效,可以直接打开本站店铺搜索相关店铺:

点击店铺

>如果链接失效,程序调试报错或者项目合作可以加微信或者QQ联系。

2.部分仿真图预览


3.算法概述

         在LDPC译码部分,其消息传递规则主要有SMP和RMP两种准则,两个复杂度类似,但是RMP的收敛速度更快。传统的BP译码算法,主要是基于SMP这种消息传递规则的。下面,我们就SMP和RMP的区别和性能优势进行分析:

        对于SMP译码算法,其在译码迭代过程中,校验节点和变量节点同时进行消息传递和处理,其校验节点和变量节点的更新是一个同步的过程。

        而对于RMP而言,其在译码迭代过程中,与校验节点相连的变量节点的更新可以使用该次迭代中已经更新过的消息,通过这种方式,可以提高算法的收敛性,所以在实际仿真中,基于RMP的译码算法,其收敛速度将远远大于基于SMP的译码算法。迭代一次RMP的译码效果相当于SMP算法多次迭代才能获得的性能。

4.部分源码

flag        = 1;

%%

n           = 3;

m           = 6;

p           = 150;

N           = m*p;

M           = n*p;

 

if flag==1

SNR         = [-1,0,1,1.5];

eln         = [500,200,100,25];

end

if flag==0

SNR         = [-1,0,1,2,3];

eln         = [500,300,200,100,100];

end

 

R           = n/m;

k           = R*log2(2);

EbN0        = SNR/k;

Max_iter    = 15; 

 

H1          = func_dys(n,m,p,flag);

pause(2);

%%

%开始循环,进行误码率仿真

for i=1:length(SNR)

    i

    Bit_err(i)    = 0; %设置误码率参数

    Num_err       = 0; %蒙特卡洛模拟次数

    Numbers       = 0; %误码率累加器

    %信道参数

    Hsd = 1;

    Hsr = 1;

    Hrd = 1;

    

    while Num_err <= eln(i) 

        fprintf('Eb/N0 = %f\n', SNR(i));

        Num_err

        N0  = 2*10^(-EbN0(i)/10);

        Trans_data             = round(rand(N-M,1));           %产生需要发送的随机数

        [ldpc_code,newH]       = func_Enc(Trans_data,H1);      %LDPC编码

        u                      = [ldpc_code;Trans_data];       %LDPC编码

        Trans_BPSK             = 2*u-1;                        %BPSK

        %S->D 

        Rec_sd                 = Hsd*Trans_BPSK+sqrt(N0/2)*randn(size(Trans_BPSK));

        %接收端

        [vhatsd,nb_itersd,successsd] = func_Dec(Rec_sd,newH,N0,Max_iter);

        [nberr,rat] = biterr(vhatsd(M+1:N)',Trans_data);

        %LDPC译码 

        Num_err              = Num_err+nberr;

        Numbers              = Numbers+1;

    end

    Bit_err(i) = Num_err/(N*Numbers);

end

figure;

semilogy(SNR,Bit_err,'o-');

xlabel('SNR(dB)');

ylabel('BER');

grid on;

if flag ==0

   save data0.mat SNR Bit_err

else

   save data1.mat SNR Bit_err 

end

14_013_m

作者:我爱C编程 来源:我爱C编程
本站最新成功开发工程项目案例
相关评论
发表我的评论
  • 大名:
  • 内容:
本类固顶
  • 没有
  • FPGA/MATLAB商业/科研类项目合作(www.store718.com) © 2025 版权所有 All Rights Reserved.
  • Email:1480526168@qq.com 站长QQ: 1480526168