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

基于matlab的LDPC译码算法误码率对比仿真,对比BP和BF译码

时间:2023/3/11 18:17:37 点击:

  核心提示:A490,包括程序操作录像...

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

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

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

点击店铺

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

2.部分仿真图预览


3.算法概述

      在 LDPC 码的 Tanner 图中,从一个顶点出发,经过不同顶点后回到同一个顶点的一些“边”组成的回路称为“环”。经过的边的个数称为环的长度。所有环中周长最小的环称为 LDPC码的围长(girth) ‎。Tanner 图中的环不可避免的会对译码结果造成非常大的干扰。由于迭代概率译码会使信息在节点间交互传递,若存在环,从环的某一个节点出发的信息会沿着环上的节点不断传递并最终重新回到这个节点本身,从而使得节点自身信息不断累加,进而使得译码的最终结果失败的概率变大。显然,环长越小,信息传递回本身所需走的路径就越短,译码失败的概率就变得越高。Tanner 图形成一个环至少需要 4 个节点组成4 条相连的边,即环长最小为4,这类短环对码字的译码结果干扰最大。定义 LDPC码的行列(RC)约束为:两行或两列中不存在元素 1 的位置有 1 个以上相同的情况。显然,满足 RC 约束的 LDPC 码最低就是 6 环,去除了4 环的干扰。由于4环的检测以及避免最为简单并且必要,因此绝大部分构造方法都会满足 RC 约束。而构造大圈长的码字则需要精确的设计。

4.部分源码

..................................................

%%

%基本参数

n       = 576;                                                                   

k       = 288;                                                                    

rate    = k/n;                                                                 

IterNum = 20;

msg     = round(rand(1,k));

[H,c]   = encode(msg);

Nerr    = 500;

Npf     = Nerr*n;

for ij=1:length(EbN0db)

    ij

    en1   = 10^(EbN0db(ij)/10);

    sigma = 1/sqrt(2*rate*en1);

    cnt   = 0;

    Err1  = 0;

    while cnt < Nerr

        [ij,cnt]

        cnt        = cnt+1;

        code       = c;

        I          = 1-2*code;

        rec1       = I+sigma*randn(1,n);        

 

        est_code22 = BP_decode(rec1,H,sigma, IterNum); 

        est_code2  = est_code22(1:k);

        err1       = length(find(est_code2~=msg));

        Err1       = Err1+err1;

    end

    BER3(ij) = Err1/(Nerr*k);

end

 

for ij=1:length(EbN0db)

    ij  

    en2   = 10^(EbN0db(ij)/10);

    sigma = 1/sqrt(2*rate*en2);

    cnt   = 0;

    Err2  = 0;

    while cnt<Nerr

        [ij,cnt]

        cnt      = cnt+1;

        code     = c;

        I        = 1-2*code;

        rec1     = I + sigma*randn(1,n);

    

        est_code = BF_decode(rec1,H,IterNum);

    

        err2     = length(find(est_code~=c));

       

        Err2     = Err2+err2;

    end

    BER4(ij)=Err2/(Nerr*k);

end

figure

semilogy(EbN0db,BER1,'-bs',...

    'LineWidth',1,...

    'MarkerSize',6,...

    'MarkerEdgeColor','k',...

    'MarkerFaceColor',[0.9,0.0,0.0]);

hold on; 

semilogy(EbN0db,BER2,'-r>',...

    'LineWidth',1,...

    'MarkerSize',6,...

    'MarkerEdgeColor','k',...

    'MarkerFaceColor',[0.9,0.9,0.0]);

hold on; 

semilogy(EbN0db,BER3,'-k<',...

    'LineWidth',1,...

    'MarkerSize',6,...

    'MarkerEdgeColor','k',...

    'MarkerFaceColor',[0.9,0.3,0.3]);

hold on; 

semilogy(EbN0db,BER4,'-mo',...

    'LineWidth',1,...

    'MarkerSize',6,...

    'MarkerEdgeColor','k',...

    'MarkerFaceColor',[0.5,0.9,0.0]);

hold on; 

grid on

xlabel('EbN0(dB)');

ylabel('误码率');

legend('BP译码,迭代2次','BF译码,迭代2次','BP译码,迭代20次','BF译码,迭代20次');

A490

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