论文部分内容阅读
LDPC编码是目前已知的性能十分先进的一种线性分组码,在实际的测试中,得到的性能直逼香农定理的极限。在最新的5G的通信标准中也被采纳为长码的编码方案。虽然LDPC码的理论已然十分成熟,但是对于LDPC码的研究手段依旧停留在仿真上。对于较长的LDPC码字的仿真,采用串行程序运行依旧难以避免时间开销过大的问题。为了解决长码字LDPC码所面临的这个问题。本文根据LDPC译码过程中行更新与列更新过程中所表现出的可并行性,利用C++作为编程工具,在OpenMP这个共享内存的并行编程模型的基础上,实现了新的并行仿真译码平台。DVBS-2标准中的LDPC码字均由信息位与校验位构成。DVBS-2标准指出该标准下LDPC码字编码的核心为校验位的确定,并给出了详细的方法。对于校验矩阵的求解方法并未提及。考虑到后续译码校验过程中校验矩阵的作用,本文通过对DVBS-2标准中对于校验位的确定方法的研究,采用反向思维的方式,推出了校验矩阵的计算方式,并给出相关证明。完成了对不同码率的校验矩阵的计算。通过对校验矩阵的研究,发现校验矩阵可表示为[H1,H2],并且其中H2具有特殊结构。在此基础上,本文没有采用DVBS-2标准推荐的编码方式,转而采用了一种更简单,高效的编码方式。其次,对于校验矩阵的保存方式也做了探讨。使用普通的链表存储方式程序可读性较好,并且译码校验校验矩阵引用方便。但是在列更新过程中校验矩阵列信息无法直接获取,同时行更新中的链表查询操作会耗费大量时间。在实际使用中,本文对校验矩阵采用链表和结构体数组两种方式进行保存。在译码校验过程中使用链表中的校验矩阵信息;在行更新中则直接引用结构体数组中的校验矩阵信息。列更新过程则直接计算得到校验矩阵列信息。实验结果表明,对于校验矩阵的列信息直接计算的方式与程序效率影响不大,行更新过程,采用结构体数组的保存方式可以有效提高程序的运行效率。译码端,本文采用最小和积译码算法作为本文仿真的核心译码算法。完成了最小和积译码算法在OpenMP平台的并行化实现。紧接着,本文对实际采用的OpenMP内置的Dynamic策略接口函数中唯一的chunksize参数,在4进程,译码迭代次数为10次的条件下做了仿真,发现不同的chunksize参数对程序运行时间影响明显,并总结了chunksize参数的设置规律。接着,本文探讨了当迭代次数不同时,不同的进程数对于程序执行时间的影响,并得到了相关的时间结果,同时基于该结果画出了加速比图,发现,随着进程数增加,加速比呈现下降趋势。同时变换并发数,进一步探索进程数与时间消耗的关系。最后,本文对在译码过程中节点的自信息的保存问题做了详细的讨论。对常见的两种方式做了讨论,并给出了最终方案的详细演进过程并对中间的方案做了比较详细的分析。由于兼顾引用时的效率因素,选择效果较好的方式,作为本文使用的矩阵压缩方式。接着,本文给出了对于DVBS-2标准中长码和短码若干码率的误码性能,以及并行译码平台的加速性能。对程序开发中所遇到的内存泄露,热点分析等编程问题给出了对应的解决办法。通过引入提前终止译码算法,限制低信噪比区间,译码算法的迭代次数并给出相关结果。同时,设计了译码平台的工作模式二,用于提高译码平台的整体效率,末尾给出了执行结果,并与工作模式一做了对比,证明工作模式二能有效提高译码效率。最后,对于如何优化OpenMP的内置策略给出了详细的方法,并给出了一个简单的优化方案,证明负载分配策略对并行程序的时间存在较明显的影响。