首页 > 编程语言 >m基于码率兼容打孔LDPC码BP译码算法的matlab误码率仿真

m基于码率兼容打孔LDPC码BP译码算法的matlab误码率仿真

时间:2023-09-19 22:33:11浏览次数:47  
标签:误码率 校验位 码率 概率分布 译码 算法 BP 码字 Array

1.算法仿真效果 matlab2022a仿真结果如下:

1.jpeg

2.算法涉及理论知识概要 码率兼容打孔LDPC码BP译码算法是一种改进的LDPC译码算法,能够在不同码率下实现更好的译码性能。该算法通过在LDPC码中引入打孔操作,使得码率可以灵活地调整,同时利用BP(Belief Propagation)译码算法进行迭代译码,提高了译码的准确性和可靠性。

一、LDPC编码

   LDPC编码算法基于稀疏矩阵的乘积码,通过奇偶校验位来纠正传输过程中的错误。其核心思想是通过尽可能低的密度奇偶校验位来构造大量的码字,使得每个码字的校验和为0。

    设原始信息位长度为k,校验位长度为r,总码字长度为n=k+r。将原始信息位放入一个长度为k的行向量中,将校验位放入一个长度为r的列向量中。然后构建一个(n-k)×n的校验矩阵H,其中每一行是一个奇偶校验位,每一列是一个码字。

   为了实现码率兼容,引入打孔操作。打孔操作是指在码字中删除一些校验位,使得总码率在一定范围内可调。具体实现时,可以按照一定规则随机删除一些校验位,或者根据码率要求计算需要删除的校验位数。打孔操作后,可以得到一个新的校验矩阵H',其中每一行仍是一个奇偶校验位,但每一列可能不再是完整的码字。

LDPC编码算法的实现步骤如下:

生成随机的(n-k)×n的校验矩阵H; 根据要求进行打孔操作,得到新的校验矩阵H'; 将原始信息位按顺序写入一个长度为k的行向量中; 根据校验矩阵H'计算校验和,得到长度为r'的列向量; 将原始信息位和校验位串联起来,得到长度为n的码字向量; 将码字向量进行比特反转,得到最终的LDPC码字。 二、BP译码算法

     BP译码算法是一种适用于LDPC编码的迭代译码算法,通过迭代更新信息位和校验位的概率分布来逐步逼近真实值。其核心思想是将译码问题转化为一个概率分布的最优化问题,通过迭代更新概率分布来逐步逼近真实值。

BP译码算法的实现步骤如下:

将接收到的码字向量y作为初始值传入概率更新函数update()中; 对于每一个信息位i,根据相邻信息位的概率分布计算该信息位的概率分布; 对于每一个校验位j,根据相邻信息位的概率分布计算该校验位的概率分布; 对于每一个信息位i和校验位j,根据概率分布计算该信息位是否满足校验位的条件; 如果所有校验位都满足条件,则译码成功,返回信息位向量x; 如果不满足条件,则将接收到的码字向量y作为初始值传入下一次迭代中。 其中,概率更新函数update()的实现如下:

对于每一个信息位i,根据相邻信息位的概率分布计算该信息位的概率分布; 对于每一个校验位j,根据相邻信息位的概率分布计算该校验位的概率分布; 对于每一个信息位i和校验位j,根据概率分布计算该信息位是否满足校验位的条件; 将计算结果更新到信息位向量x和校验位向量z中。 BP译码算法的核心是概率更新函数update(),它通过迭代更新信息位和校验位的概率分布来逐步逼近真实值。该算法具有较好的译码性能和较低的解码复杂度,适用于LDPC编码的迭代译码。

3.MATLAB核心程序

for n = 1:N
    Array = H_col(n,2:(H_col(n,1)+1));
    Array(Array>M) = [];
    for m = Array
        vn(m,n) = vi(n);
    end
end
 
for i = 1:Iters
    % 更新校验节点
    for m = 1:M
        Array1           = H_row(m,2:(H_row(m,1)+1));
        Array1(Array1>N) = [];
        for n = Array1
            Array2            = H_row(m,2:(H_row(m,1)+1));
            Array2(Array2==n) = [];
            Array2(Array2>N)  = [];
            cn(m,n)           = 2*atanh(prod(tanh(vn(m,Array2)./2)));
        end
    end
    
    % 更新变量节点
    for n = 1:N
        Array          = H_col(n,2:(H_col(n,1)+1));
        Array(Array>M) = [];
        for m = Array
            Array3            = H_col(n,2:(H_col(n,1)+1));
            Array3(Array3==m) = [];
            Array3(Array3>M)  = [];
            vn(m,n)           = vi(n) + sum(cn(Array3,n));
        end
    end
    
    % 进行硬判决
    for n =1:N
        Array = H_col(n,2:(H_col(n,1)+1));
        Array(Array>M) = [];
        if vi(n)+sum(cn(Array,n))>=0
            w(n) = 0;
        else
            w(n) = 1;
        end
    end
    
    % 校验判决
    if sum(mod(w*H(1:M,1:N)',2))==0
        break;
    end
    
end

标签:误码率,校验位,码率,概率分布,译码,算法,BP,码字,Array
From: https://blog.51cto.com/matworld/7529874

相关文章

  • m基于码率兼容打孔LDPC码BP译码算法的matlab误码率仿真
    1.算法仿真效果matlab2022a仿真结果如下:   2.算法涉及理论知识概要       码率兼容打孔LDPC码BP译码算法是一种改进的LDPC译码算法,能够在不同码率下实现更好的译码性能。该算法通过在LDPC码中引入打孔操作,使得码率可以灵活地调整,同时利用BP(BeliefPropagation)译......
  • 自动扣取webpack通杀方法
    1.网站和目标https://m.ctyun.cn/wap/main/auth/login破解userName,password加密2.先下断点,找到加密的地方 ......
  • 穿越人海遇见你:Mobpush是如何实现智能化精准投放的
    精准投放的概念由来已久,在这个“内容为王”的信息爆炸时代,已经不仅仅是用户在单向的凭着自己的喜好筛选推送,同时也是推送运营者在主动的根据推文内容筛选其潜在的受众,对客户在收入、消费习惯、年纪、兴趣爱好的了解越多,就越可能激发用户点击推送的兴趣,从而提升成交转化率,实现推送投......
  • Webpack字体文件处理指南
    前言Webpack是一个现代的JavaScript应用程序打包工具,它可以帮助我们处理项目中的各种资源文件,包括字体文件。本篇博客将详细介绍如何使用Webpack来处理字体文件,并给出合理标题。为什么需要处理字体文件?在前端开发中,我们经常会使用各种字体文件来美化页面的显示效果。然而,如果不......
  • webpack打包报错:Unexpected token (Note that you need plugins to import files that
    关于这个问题,我在网上查找了一些资料(博客、问答),得到的答案多种多样:1.可能是缺少rollup的某种plugin;2.可能是系统环境的问题(windows/linux/macos);3.可能是某段代码引起的问题;4.。。。 经过对自身情况的逐步测试定位,发现->出问题的代码片段:callbacks:{onMouseMove,......
  • JBPM工作流
    工作流主要解决的问题1.可以方便的定制表单模板2.可以方便的定制流程3.表单按指定的步骤流转问题1.流程设计器 swing/awt/appletflexjavascript2.设计一套规则可以表达出所有的流程3.可以解释规则与按照规则执行以上的问题都是和流程有关的。......
  • Webpack性能优化 SplitChunksPlugin的使用详解
    使用前景在vue、react等使用webpack为项目打包工具的前端项目,在开发过程中,随着项目功能的逐渐增加,项目整体体积的不断增加,打包的时长和打包后部署的项目体积也在不停的增长,这样可能会导致一下两个问题:使用自动化部署工具Jenkins部署时,Jenkins因内存不足而崩溃打包产物过大,用户......
  • subprocess模块
    subprocess模块是python自带的,安主要用来取代一些旧的模块或方法,如os.system、os.spawn*、os.popen*、commands.*,因此如果需要用python调用外问命令或任务时,则优先使用subprocess模块。使用subprocess模块可以方便地执行操作系统支持的命令。一、subprocess.run()方法:subprocess.......
  • Intel正式发布雷电5:120Gbps带宽、240W充电逆天!玩法远胜USB4 2.0
    Intel正式发布了全新一代的Thunderbolt5接口标准,也就是雷电5,无论传输速度还是连接能力,都实现了一次巨大的飞跃,更是展示了基于雷电5的新一代笔记本、扩展坞原型。这里,我们就看看雷电5到底带来了哪些变化,可以如何改变我们的工作、生活和娱乐方式,以及Intel在背后有怎样的思考,做出了......
  • 为什么大家都在用 WebP?
    WebP是谷歌在2010年提出的一种新型的图片格式,放到现在来讲,已经不算是“新”技术了,毕竟已经有了更新的JPEGXL和AVIF。但是在日常工作中,大家时常会碰到保存下来的图片的后缀是.webp。那么WebP到底有什么魔力,让越来越多的网站“抛弃”常用的PNG、JPG而青睐它呢?了解Web......