LDPC编译码基本原理
LDPC编译码基本原理
学习笔记 V1.1 2015/02/18 |
LDPC编译码基本原理 |
概述 |
本文是个人针对LDPC的学习笔记,主要针对LDPC译码算法做了简要的总结。该版本主要致力于阐述LDPC码译码原理,这是一份有很多"问题"的总结,希望能够慢慢完善。本文分为以下几个部分 |
修订历史 |
以下表格展示了本文档的修订过程
|
本文提到的LDPC编码均指二进制LDPC编码,多进制暂时不进行讨论。为方便起见本文中混用了似然函数和条件概率密度这两个概念,虽然这样做是不恰当的。
LDPC码是一种校验矩阵具有低密度的线性分组码。也就是说,LDPC码和普通的线性分组码没有什么不同,但冠以"低密度"三字,说明以下两点问题
校验矩阵是一个相对通用的表示工具,线性分组码都可以由校验矩阵确定。通用性往往意味着很多时候难以表现一些特性,譬如,低密度。一个好的表示方式往往是解决问题的关键。图论中有一个图的矩阵表示,校验矩阵是稀疏的,一个好的表示就是指出其中1的位置,我们在意的也就是这些位置。如果将稀疏矩阵采用图来描述,这一个目的就达到了,这一类图被称为Tanner图,如图 1。 Tanner图和校验矩阵具有以下对应关系。Tanner图有 图 1 校验矩阵和Tanner图
此时我们可以先明确一些关于校验矩阵和Tanner图的定义
现在,我们应该好好考虑编译码的问题了。编码过程中,知道校验矩阵后生成矩阵是可以求出来的。求出生成矩阵后,至少可以说明编码是可进行的。利用其它的一些性质,这个过程可以变得更容易。(此部分内容还没有仔细看) 关于译码规则,香农在证明第二定理的时候采用了最大似然译码准则。当然,译码准则的选取还取决于信道。譬如,二进制对称信道下汉明距离译码和最大似然是一致的。然而,实际信道往往被看作是加性高斯白噪声信道,这个时候我们更多的需要考虑采用最大似然译码准则了。同时,毋庸置疑的是我们应该采用软判决译码以达到好的效果。此时,似然函数可以表示为 |
1962年Gallager提出了LDPC码的基本概率译码算法,本节将阐述这一思想。
解决一个大的问题的基本思路在于将其分解为一系列的小问题。对于似然函数而言,如果求 如果
发送信号通过信道后成为了接收信号 那么我们有
当我们致力于求解 注意到乘号左侧是和信道有关的,右边的 (1)当两个校验方程一样的时候 此时(一般情况下) (2)校验方程具有相同项 此时(一般情况下) 可以认为,如果校验方程行线性无关,那么
引理: 一个长为 证明: 将上述函数展开为关于 这个函数与前一个函数的区别在于: 同样可得,序列中"1"的个数为奇数的概率是
上文已经阐述 所以在基于除 这个前提是无法达到的,上述过程中我们也看到了求解每一个比特的概率通过校验方程环环相扣。或许,如果我们可以找到一个线头,这个问题可能就可以求解了。但很可惜的是,由于比特的相互依赖关系,计算概率的过程实际上是一个环。(大部分情况下是这样的)这个时候,概率译码直接将其修剪成了一棵树以计算概率分布。 修剪的原则在于,上层节点不能运用底层节点已经用过的校验信息,防止陷入循环。此时,通过绘制校验树,就能够求解后验概率分布。 概率译码给出了一种求解方式,那么这种针对单一比特的求解方式在真实的计算过程中是否可行?如果基于计算所有码元考虑是否有更好的计算方法?这种方法求得的解是否最优?在我看来,由于其余比特的概率是不准确的(不是最佳估计),此时我们也不能够得到求解比特的真实后验概率。 |
如果我们回到要求解的式子 在求解 或许另一种思路在于,对所有的 感性的认识是由于接收到了其他节点和校验方程的信息,迭代之后的估计会更好。另一个认识是如果Tanner图的某一个环的girth很短,那么自身的信息会大量的传递回来。因为距离越远,传递信息的比重就会越小(乘了太多小于1的数),环girth很长就不用考虑这个问题。但这还需要更多的理性分析。 下面具体阐述置信传播算法,假定编码后的星座映射为假定编码后的星座映射为 初始值 首先我们计算 图 2 信息传递过程
之后我们更新各个变量节点的概率分布 这个时候我们发现了一个问题,如果对于每一个校验节点来说,我们都给
××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××× 这一部分不是我写的,可以参考任意一本LDPC书,这里就不放上来了 这一部分不是我写的,可以参考任意一本LDPC书,这里就不放上来了×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
我们注意到在任何一种算法中,终止条件都有一条是校验式等于零。为何要设置这一个终止条件?实际上在设计的过程中,我们会保证任意两个可用码字之间的距离足够远。在这一个前提假设下,迭代过程中一旦落入了可用码字空间内,即使错误,那么也是几乎没有转移到正确码字的可能的。因此设置了这一终止条件。 |
从概率译码到置信传播,一个采用了校验集合树的概念,一个运用了Tanner图。然而我们实际上还是计算的公式,具体来说是 加法和乘法的运用构成了整个概率模型。但为何在这些算法中都引入了图?图在这里面起到了什么作用?《Pattern Recognition and Machine Learning》在图模型章节的开篇是这样说的
However, we shall find it highly advantageous to augment the analysis using diagrammatic representations of probability distributions, called probabilistic graphical models. These offer several useful properties: 1. They provide a simple way to visualize the structure of a probabilistic model and can be used to design and motivate new models. 2. Insights into the properties of the model, including conditional independence properties, can be obtained by inspection of the graph. 3. Complex computations, required to perform inference and learning in sophisticated models, can be expressed in terms of graphical manipulations, in which underlying mathematical expressions are carried along implicitly.
很多时候我们更关注问题的表示而非其本身。就像LDPC关注校验矩阵的形式,以及数据的各种变换。概率模型也一样,三种图模型被用来表示概率模型,包括有向图模型、无向图模型(马尔可夫随机场)和因子图。三种模型各有优点,本节将介绍因子图。 对于多项式而言,我们有因式分解。譬如在解高次方程的时候,我们非常希望方程能够分解为多个低次方程的乘积。那么,对于概率分布函数而言,我们也希望能够这样做,即 其中 那么这一个式子的因子图表示如下 图 3 因子图
从这个例子,我们总结一下因子图是什么?因子图有两类节点,一是变量节点,另一个成为因子节点。这两类节点的内部没有边直接相连,变量的概率密度可以因式分解为因子节点的函数的乘积,因子节点的函数变量包括与其直接相连的变量节点。 写到这里忽然发现了一个很严重的问题,因子图这一表示是用来干什么的?不是我不想写,是我也不知道。如果从和积算法来说,因子图可以用来计算边缘概率分布。这也是《Pattern Recognition and Machine Learning》中引入因子图的理由。置信传播算法可以看作是和积算法的一个特例。 目的:计算边缘概率 手段:和积算法(要求两个节点之间只有一条路径,即多项式树结构) 实现方式:
图 4 因子图的分解
这里为何要这样做呢?一个算法要尽可能多的利用已知的结构和信息,和积算法的一个假设是图无环。同时我们发现,对于一个最简单的只有一个变量节点和因子节点的图来说(这时实际上没有意义了),我们已经达到我们要的结果。如果图无环的话,意味着只要我断开一条边,那么这个大的因子图就变成了两个小的因子图。 如果我们将节点 其中
我们设 我们可以将其看作是因子节点
或许,我们将"计算"改为"表示"更为合适。上文中一直提到"小因子图"显然是可以因子化的,也就是说可以表示为 那么 也就是说,实际上这个过程是小因子图的继续划分的过程,具体可以表示为下图 图 5 因子图的分解(续)
同理可设
如果我们继续将其分解下去,那么将再次计算到因子节点向变量节点传递的信息,而我们的目的正是如此,希望能够得到 图 6因子图的分解(续2)
由图 6 易知 也就是说
和积和积,何为和积?变量节点的信息传递是求乘积的过程,因子节点传递的过程是对求乘积后的结果进行求和的过程(依据该因子节点的方程)。 我们注意到实际上都有一个连接的其他节点求乘积的过程,这也就意味着如果一个节点只和一个节点相连,那么其传递的消息是(和1相乘值不变)
到这里,因子图和和积算法已经写完了,要把因子图和和积算法和LDPC译码算法对应起来,我们要解决的问题实际上有两个
这两个问题还有待进一步思考…… |
参考 |
《LDPC码基础与应用》 贺鹤云 《An Introduction to Low-Density Parity Check Codes》 Daniel J. Costello, Jr. 《LDPC码理论与应用》 袁东风 《Pattern Recognition and Machine Learning》 |
LDPC编译码基本原理的更多相关文章
- CCSDS标准的LDPC编译码仿真
html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,bi ...
- SSD ECC中的LDPC编解码原理
转自:http://blog.csdn.net/zhuzongpeng/article/details/78899198 目前SSD中ECC纠错代码主要两种BCH和LDPC.不过,随着SSD对ECC纠 ...
- i++ 反编译码
1.特点: 操作数栈,主要用于保存计算过程中的结果,同时作为集计算过程中变量临时的存储空间. 操作数栈就是JVM执行引擎的一个工作区,当方法执行开始,一个新栈帧也会随之被创建,这个方法的操作数栈是空的 ...
- LDPC译码算法代码概述
程序说明 V0.0 2015/1/24 LDPC译码算法代码概述 概述 本文介绍了包括LDPC_Simulation.m, ldpcdecoderbp1.m,ldpcdecoderminsum ...
- LDPC译码器的FPGA实现
应用笔记 V0.0 2015/3/17 LDPC译码器的FPGA实现 概述 本文将介绍LDPC译码器的FPGA实现,译码器设计对应CCSDS131x1o1s文档中提到的适用于深空通信任务的LD ...
- 如何加速MATLAB代码运行
学习笔记 V1.0 2015/4/17 如何加速MATLAB代码运行 概述 本文源于LDPCC的MATLAB代码,即<CCSDS标准的LDPC编译码仿真>.由于代码的问题,在信息位长度很长 ...
- c和fortran混编(基于GNU/Linux,转自 linzch)
网 上说要分c为主程序和fortran为主程序两种情况讨论,其实我觉得不用,只要你了解生成可执行文件的机制.这个机制就是:不论是单一语言模块之间的 链接还是不同语言之间的混合链接,本质目的都是要链接器 ...
- Huffman树的构造及编码与译码的实现
哈夫曼树介绍 哈夫曼树又称最优二叉树,是一种带权路径长度最短的二叉树.所谓树的带权路径长度,就是树中所有的叶结点的权值乘上其到根结点的路径长度(若根结点为0层,叶结点到根结点的路径长度为叶结点的层数) ...
- 集显也能硬件编码:Intel SDK && 各种音视频编解码学习详解
http://blog.sina.com.cn/s/blog_4155bb1d0100soq9.html INTEL MEDIA SDK是INTEL推出的基于其内建显示核心的编解码技术,我们在播放高清 ...
随机推荐
- 移动平台自动化测试从零开始-MonkeyRunner工具使用 (第二节)
选自:http://yuedu.baidu.com/search?word=%D3%DA%D3%BF&pbook=0 第2节 MonkeyRunner 安装部署 如果您已经正确的安装部署了A ...
- 《Xenogears》(异度装甲)隐含的原型与密码
<Xenogears>(异度装甲)隐含的原型与密码 X 彩虹按:一种高次元的“生命体”,因“事故”被抓来当成“超能源”,其实那不只是“无限的能源”而已,“它”是有意志的!在我们眼里看来,这 ...
- C#中将结构类型数据存储到二进制文件中方法
以往在vb6,vc6中都有现成的方法将结构类型数据写入和读取到二进制文件中,但是在c#中却没有现成的方法来实现,因此我查阅了一些资料,借鉴了网上一些同学的做法,自己写了个类似的例子来读写结构类型数据到 ...
- nexus安装实例
Nexus安装 1.下载Nexus:[笔者版本nexus-2.11.2-03-bundle.tar.gz] 2. 安装nexus [root@localhost local]# pwd /usr/lo ...
- BZOJ 2648: SJY摆棋子 kdtree
2648: SJY摆棋子 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=2648 Description 这天,SJY显得无聊.在家自己玩 ...
- mysql性能监控工具:mycheckpoint的使用方法
mycheckpoint 是针对mysql的一个性能监控.指标采集的python写成的工具. 工作原理说明: mycheckpoint是一段脚本,通过将其设置为crontab定时任务,每几分钟采集一次 ...
- centos7 Linux 尝试使用crontab
一.安装crontab [root@CentOS ~]# yum install vixie-cron[root@CentOS ~]# yum install crontabs 说明:vixie-cr ...
- 用户管理 之 Linux 用户管理工具介绍
Linux是一个多用户的操作系统,她有完美的用户管理工具,这些工具包括用户的查询.添加.修改,以及用户之间相互切换的工具等:通过这些工具,我们能安全.轻松的完成用户管理: 在这里我们要引入用户控制工具 ...
- 解决URL路径包含+等特殊符号,编码也无效的办法
<?xml version="1.0" encoding="UTF-8"?><configuration> <syste ...
- 操作系统性能分析与优化V1.0
操作系统性能分析与优化V1.0 : http://www.docin.com/p-759561760.html