转自:http://zya20050621.blog.163.com/blog/static/647143252011313102724478/
关于LDPC的一些讨论
2011-04-13 10:27:24| 分类: CMMB | 标签: |字号大中小 订阅
1.经常有师弟师妹问我怎样学习LDPC码,现在我将个人学习LDPC码的心得写在下面,以供参考。
1. 了解LDPC码的基本概念(主要是校验矩阵与Tanner图的关系)之后,学习LDPC码的和积译码算法。这里建议首先用概率测度推出无环图下,变量节点和校验节点消息的更新公式,透彻理解“消息”、“更新”和“传递”的含义。
2. 看LDPC码和积译码算法的程序。要点在双循环链表、两个消息更新的计算步骤(检验节点和变量节点运算,也叫水平步骤和垂直步骤)。(c 程序可以在网上Mackey的网站下,我这也有)。
3. 对LDPC码的和积译码算法充分理解之后,可以看密度进化理论及其高斯逼近算法,推倒文章中的公式是很有助于理解和积译码算法的。
4.经过步骤3,我们应该对什么样的LDPC码性能会好有一个初步的理解,这样我们可以试着设计 LDPC码。(高斯逼近和密度进化程序我这也有)
5.理解信道编码定理和Turbo原理,“码长”“随机”“迭代译码“”对于一个实用好码很重要。
另外,在这之前最好弄清楚信噪比,编码速率,BER和FER的含义。
2.学习非正则LDPC码,推荐三篇文章:
1) T.J. Richardson and R.L. Urbanke. The capacity of low-density parity-check codes under message-passing decoding. IEEE Trans. Inf. Theory, 47(2): 599-618, Feb. 2001.
2)T.J. Richardson, M.A. Shokrollahi, and R.L. Urbanke. Design of capacity-approaching irregular low-density parity-check codes. IEEE Trans. Inf. Theory, 47(2):619-637, Feb. 2001.
3)S.-Y. Chung, T.J. Richardson, and R.L. Urbanke. Analysis of sum-product decoding of low-density parity-check codes using a Gaussian approximation. IEEE Trans. Inf. Theory, 47(2):657-670, Feb. 2001.
第一篇是讲LDPC码和积译码算法的密度进化理论,可以深刻理解优化的度序列对非规则码性能起着非常重要的作用。第二篇是第一篇的补充。
第三篇密度进化的高斯逼近理论。
我觉得在LDPC码研究方面,主要围绕着以下问题:
1)理论研究:LDPC码是线性分组码,距离谱甚至最小距离的确定都比较困难,但是一直是人们关心的问题。
2)应用方面:要求LDPC码性能优异,结构简单,利于译码器的硬件实现。(针对不同的应用环境,提供不同的码长,长码用非规则码应该是肯定的。)
Turbo码的码长和码率变化都很方便(3GPP adaptive coded modulation中使用),对于分组码的LDPC码似乎困难了些。是否可以构造一个始于删余操作的LDPC码?也就是设计一个好的 rate compatible LDPC code。
译码方面,真正的硬件实现和C语言编成是有很大区别的,内存,功耗,延时都要考虑。
3.做DVB-s2,确实需要知道校验矩阵,标准中已经明确给出。
如果你是初步学习LDPC码,可以先把给定的LDPC码校验矩阵转化成你现有的LDPC码的译码程序所需的形式,然后进行译码。
不过,我想你最终可能需要FPGA什么的实现译码器,以下两篇文章可以参考。可以用google搜索,得到
a synthesizable IP core for DVB S2 LDPC code decoding
low cost LDPC decoder for DVB-s2
4.多进制LDPC: 一般在突发错误信道和多阶调制系统中研究GF(q),q>2 的LDPC码.
如果要发文章的话,还是看看能不能做出像二进制LDPC码的外信息传递图(EXIT);在多进制调制系统中的LDPC码优化设计方法什么的;与多进制码级联(比如RS码),
要是实际应用的话,最好考虑一下译码复杂度和性能之间的折中
5.Keepsmile: (楼主,我是个LDPC初学者,关于密度进化我有几个问题想问你。前几天我根据On the design of low-density parity-check codes within 0.0045 dB of the shannon Limit 编了个程序,想求出最优度分布和阈值。再对密度进化迭代过程中是对每个节点进行迭代就象译码那样,还是只要求出平均的就行。还有误码率怎么求.我弄这个程序有一周了,怎么都不对。我想是我的思路存在很大的错误,希望楼主如果方便的话能够给些指点,做这个密度进化的具体思路是什么。非常,万分感谢楼主!)
问题1:再对密度进化迭代过程中是对每个节点进行迭代就象译码那样,还是只要求出平均的就行。
答1:看懂文章,密度进化是指译码消息(变量节点消息和校验节点消息)在译码迭代过程中的概率分布(对于连续信道,是概率密度)演进(进化,或改变),(变量节点消息的分布决定着误码率)。密度进化理论本身是建立在一个码集合上,是集合平均值。可以看看文章的前部分,说的比较清楚了。
所以这里,消息更新公式的本身已经是平均的概念了。平时做的译码算法是建立在一个具体的Tanner图(也就是一个特定的码)上的,所以要一个节点一个节点的计算。不知道说的明不明白。
6.keepsmile
问题2:怎么求门限值。
答2:对于满足对称条件的信道和译码算法,可以用密度进化理论来求得优化度序列和门限值。首先明白什么是门限值,对于AWGN信道,它的门限值一般是噪声功率。给定度序列,误码率,迭带次数,找一个最大的噪声功率值,当噪声功率超过这个值时,在给定迭带次数内,误码率无法达到给定的值;当噪声功率小于这个值时,在给定迭带次数内,误码率都小于给定的误码率。
给出一个程序的流程如下:设最大迭代次数M,误码率Pe,噪声功率n,噪声功率增加的步长nstep,第l次迭代的译码错误概率为Pl,
n = nstart;
Go = 1;
while(Go)
{
for (l = 0; l < M; l ++)
{
if (l ==0)
{
变量节点消息(第)和校验节点消息概率密度初始化;
}
else
{
变量节点消息概率密度更新;
校验节点概率密度更新;
计算Pl(后面给出怎样计算);
if(pl < pe)&&(l < M -1)
{//说明噪声小了,不到最大的迭带次数误码率就小于给定的值
n = nstart + nstep;
break;//结束第l次迭代,回到while(Go),重新开始更大噪声的计算
}
else if(pl > pe)&&(l = M - 1)
{
//说明噪声大了,到最大的迭带次数误码率仍大于给定的值
n = nstart - nstep;
}
else if (pl = pe)&&(l = M - 1)
{
go = 0;
break;
//什么时候能达到这样的条件取决于噪声增加的步长。结束条件可以放松,比如,可以记下连续的两个噪声参数,a1>a2,当噪声为a1时,(pl > pe)&&(l = M - 1),当噪声为a2 ,(pl<pe)&&(l < M - 1),则可认为a2为门限值,(它的精度取决于你选定的步长)
}
}// for l iteration
}// for while
一般情况下,你可以按照文章中叙述的,选定一个优化的度序列,相应的参数(迭带次数,误码率,门限值)都给定了,验证一下你的程序是否正确,只有门限值求正确了,才可能做度序列优化。
7.keepsmile3
问题3:如何求错误概率
答3:给你举个例子,你就知道了。
0映射成1,1成-1,,也就是 BPSK 调制。当传输为1,AWGN 信道,接收值x,其概率密度为高斯分布 f(x),有Pe = P(x < 0) + 1/2P(x = 0)。
对于高斯分布的变量,P(x < 0) 和P(x = 0)会求吧?概率密度做个积分就行了。
问题4,怎样优化度序列。
答4:这个困难一些。因为涉及到多个连续变量的优化问题。建议按照文章中的差分进化算法来做(differential evolution),可能要花一段时间看懂算法,再花一段时间看懂程序(网上可以找到)。算法的参数是你的变量节点度序列,成本函数是密度进化理论计算的门限值,(计算过程中需要计算校验节点分布,可以假设校验节点度数为dc和dc – 1,根据变量节点度数,求dc)
另外,这个程序写上几个月都可能,因为里面涉及FFT和IFFT,还有差分进化算法都挺复杂的。我知道的一个很有经验的LDPC码研究人员在编写这个程序,用了一个月的时间,本人,前前后后用了三个月,才得到与文章中相同的门限值。
所以请不要着急,建议初学者把基本原理弄明白,和积算法要透彻理解,才可以动手做这个。
8.学习信道编码,王新梅老师的书是比较好的参考。书中
BCH码,卷积码和Turbo码的编译码算法讲的比较清楚。
学习LDPC码,如果想看中文文献的话,王老师学生的博士毕业论文
是比较好的参考。贺玉成老师的博士论文,LDPC码的基础论述的清楚,分析的也比较透彻。
9.中国数字电视广播传输系统和STIMI.已经在标准局可以买到了。DVBS2可以在网上下。校验矩阵在标准附录中可以找到。
中国数字电视广播传输系统的LDPC码是清华杨知行教授和美国林舒教授做的STIMI是TIMI公司做的。
10.
http://www.cse.yorku.ca/~aeckford/software/index.html
这个网址可以下载Andrew Eckford's编写的密度进化程序。在他的readme文件中给定了信道消息,变量节点和校验节点消息的取值范围,量化的点数和量化的间隔,在自己编写程序的时候可以参照这些值,防止数据取值范围不恰当所引起的溢出。
11.
這裡我有個小問題,Pe應該是針對所有傳送位元而計算得來...
對於其中某個傳送位元已知,我們可以用上述方法計算其錯誤率~
但是所有的位元皆可這樣計算,最後是怎麼計算整體碼錯誤率?
在密度进化理论中,计算是基于平均的概念上的,是对所有变量节点(有傳送位元)统计错误概率,这一点可以仔细读读原文。
对于连续变量(其函数可能是不连续函数),这里假设为p(x)
则pe=p(x)在负无穷到0-上的积分+1/2p(x)在0-到0+上的积分
即第一个积分的范围是(负无穷到0-),第二个积分的范围是(0-到0+)
如果p(x)是个连续函数,则第二部分为0;如果在0上是一个间断点,第二部分不为0.
12.
http://www.cse.yorku.ca/~aeckford/software/index.html
差分进化:
http://www.icsi.berkeley.edu/~storn/code.html
在google上可以搜Differential Evolution
13.
2. 我们在二进制LDPC码的软译码时, 判决前信息传递与计算均采用32位浮点数.
3. 二进制LDPC码研究仍未解决的问题:
a. 二进制LDPC码最小码重与最小权重的计算公式.
b. 二进制LDPC码的快速软译码算法, 现有算法在FPGA硬件实现时, 有相当的难度.
单独用多进制LPDC码好还是用二进制LDPC码加上信道估计、均衡和交织好?有没有相关的研究?多进制和tcm,应该比较好,正弄还没有最后结果
14.
有一些优化了得度数分布,和相应的阈值
15.
非规则低密度码的校验节点和变量节点的度序列分布为:
lou(x) lamda(x) 那么码率就应该是1-积分(lou(x))/积分(lamda(x) );
比如规则码(dv,dc),码率r=1-dv/dc,码率确定了,度分布序列的关系也确定了
16.
回答:首先明确在密度进化分析理论中,σ^2=2m 是指服从高斯分布的消息应该满足的规律.
在密度进化理论的前提条件中有一条是信道对称性假设,即
P(y/x=1)= P(-y/x=-1) (1)
这里y直信道接收值,x是等概取值+-1 的二元变量。
由(1)式可知
P(-y/x=1)= P(y/x=-1) (2)
定义对数似然比消息为:
u(y) = log(p(x=1/y)/p(x=-1/y))= log(p(y /x=1)/p(-y /x=1)) (3)
可以证明这个消息是奇对称的,即
u(y) = -u(-y)
且有p(u) = p(y /x=1), p(-u) = p(-y /x=1) (4)
由(3)(4)式
u= log(p(y /x=1)/p(-y /x=1))=log(p(u)/p(-u)) (5)
从式(5)可以推导出:
p(u)=e^u*p(-u) (6)
在u服从N(m, σ^2)的正态分布时,有p(u) = 1/(sqrt(2π) σ)*exp(-(u-m)^2/(2*σ^2))
由(6)得
exp(-(u-m)^2/(2*σ^2))= exp(u)*exp(-(-u-m)^2/(2*σ^2))
=〉 -(u-m)^2/(2*σ^2) = u-(-u-m)^2/(2*σ^2)
=〉2*σ^2*u=(-u-m)^2-(u-m)^2
=〉σ^2=2m
强调一下,这个公式说明的是服从正态分布消息的一个特性
17.
http://www.eccpage.com/
此外,像一些做纠错码的牛人的个人主页也有很好的参考价值,例如
http://www.mackayholidays.info/
18.
另外贡献几个我收藏的连接吧,我认为都相当的经典。
1. Roberg G. Gallager (1963)
http://www.inference.phy.cam.ac.uk/mackay/gallager/papers/
2. Niclas Wiberg (1996)
http://www.essrl.wustl.edu/~jao/itrg/wiberg.pdf
3. Sae-Young Chung (2000)
http://wicl.kaist.ac.kr/pdf/sychung%20phd%20thesis.pdf
4. R. Urbanke主页
http://lthcwww.epfl.ch/index.php
还有他和T. Richardson合写的一本书,还没出版的版本可以下载:
http://lthcwww.epfl.ch/papers/mct.ps
5. David Markay主页
http://www.inference.phy.cam.ac.uk/mackay/
6. ECC page (《The art of ECC Error Correcting Coding》的主页)
http://www.eccpage.com/
上面有很多的源代码链接,包括ldpc。
19.
1. 大Girth LDPC码的构造, Girth>=12, 国外学者的研究方向;
2.大distance LDPC码的构造, 我目前的研究方向.
20.
http://wol.ra.phy.cam.ac.uk/mackay/PEG_ECC.html
有源代码可以下载
21.
2. 国外学者认为QC LDPC码BER性能差的原因是因为girth不够大, 但是Random LDPC码在没有girth 4的情况下, 可获得大的最小距离(码重), 但Tanner设计的QC LDPC码却很难达到Random LDPC码距离.
3. 关于stopping set, 目前还无时间仿真, 难以评论其优劣.
4. 如果 LDPC码Girth或distance性能很差, 好的迭代译码算法仍不能提高BER性能.
5. 好的 LDPC码, 迭代译码次数在20左右即可获得良好的BER, 且不存在误码平台.
22.
2.我觉得有以下原因:a)并不是一味的追求最小环最大就会提高码的性能,因为除了最小环长之外,还涉及环长的分布问题。b)同样,最小码重大也并不意味着码的性能好,码重分布更重要一些。c)从随机性考虑,QC-LDPC的随机性不好,所以性能没有优化的LDPC码的性能好是可以预见的。
一个好的LDPC码要具有足够的随机性(保证性能),也要有足够的结构特性(做到译码布线简单),所以DVB-S2中的码结构还是很值得借鉴的。大家有兴趣的话可以观察DVB-S2中的LDPC码,它是非规则LDPC码,可实现线性编码复杂度,度序列是优化的度序列,码的H矩阵有一定的随机性,也有很好的结构特性。
23.
http://www.inference.phy.cam.ac.uk/mackay/S0.html
如果觉得作者的程序有点复杂,就自己编一个,建议用C,用双循环链表存储校验矩阵。
24.
http://www.mathworks.com/matlabcentral/fileexchange/loadCategory.do?objectId=64&objectType=Category
2. 该程序对于长码,运行时间较长.
3. 该程序编码部分, 需要完善.
这个程序只能解规则LDPC码,并且是非系统编码的情况
25.
http://www.comm.toronto.edu/~eckford/software/index.html
26.
part 1
richardson_fast_densit_evolution.part1.rar (97.66k)
27.
他里面用<>引的头文件,你需要指定地址,比如用下面的命令。
gcc -I/Users/bloodemon/work/software/fftw/include density_evolution.c -L/Users/bloodemon/work/software/fftw/lib -o dderegular -lfftw3 -lm
-I后面的是fftw3.h头文件的地址
-L后面的是lib的地址
或者胡乱写个makefile
呵呵,楼上用的GCC,果然是牛人啊。我用的VC。用VC的话直接就把fftw3那个库文件放在当前目录,fftw3.h加到工作区里就可以了。
28.
是否考虑过用密度进化的高斯逼近算法来实现?(AWGN)
非AWGN信道,密度进化更复杂,Matlab程序来搜索度序列会很吃力吧?
29.
1. 分块IRA码,非规则重复积累码,实质上就是非规则LDPC码(DVB-S2)。
2.基于循环移位矩阵构造的LDPC码,原来802.16e中LDPC码的结构。
3.QC-LDPC码看上去编译码都不复杂,性能还不敢恭维。(怎么进一步提高性能,值得深入研究)
30.
2. Richardson的其它论文存在类似问题, 尽管为著名学者.
31.
1.在Tanner给出的QC LDPC码中, 有一小部分具有较好的Girth特性和距离特性.需要从理论上证明为何这小部分QC LDPC码具有这样的特性.
2.目前的大Girth QC LDPC码设计需要很长的码长,难以实际应用.
3.由Tanner给出的QC LDPC码的校验矩阵构造系统码生成矩阵时,需要对校验矩阵延拓,以避免校验矩阵的奇异性,但延拓可能破坏原校验矩阵的Girth特性和距离特性.
4.无Girth4的Random LDPC码尽管存在Girth6,8,10,12等,但距离特性非常好,这是QC LDPC码难以做到的,其原因为何?
32.
2. 一些QC LDPC码不存在Girth4,6, 但最小距离不随码长线性增长, 仿真实验结果:这部分QC LDPC码的BER曲线很差.
3. 仿真实验结果: 若QC LDPC码不存在Girth4,6, 且最小距离随码长线性增长, 则错误比特率曲线类似Random LDPC码.
4. 仿真实验结果: QC LDPC 好码最小距离>=2*最小Girth数, 但该结果未反映与码长的线性关系
33.
error floor 中文:误码平台
我对Random LDPC码和QC LDPC码的短码和长码的最小距离都进行了计算,所使用的方法需要在11月论文发表后才能公开.
现有 LDPC码的最小距离计算为NP问题, 也是公开问题, 中长码距离的计算在PC机上以天为单位.
34.
1. 肖雯等, LDPC码的最小汉明距离估算, 信息技术, 2005年第1期;
2.Xiao-Yu Hu, M, P, C. Fossorier, "On the Computation of the Minimum Distance of Low-Density Parity_Check Codes", 在Mackay 的主页可以找到.
35.
http://www.inference.phy.cam.ac.uk/mackay/MINDIST_ECC.html
36.
肖雯等, LDPC码的最小汉明距离估算, 信息技术, 2005年第1期.
2. Hu 的算法源代码在mackay的网站上早已经有了
http://www.inference.phy.cam.ac.uk/mackay/MINDIST_ECC.html
Hu 的算法源代码有问题.
37.
显然Hu的论文也有问题,该论文发表在2005 GlobalCOM.
Hu 在mackay的网站上的算法源代码无法编译.
http://www.inference.phy.cam.ac.uk/mackay/MINDIST_ECC.html
LDPC码的构造国外主要研究大Girth, Stopping Set.
LDPC码为目前的研究热点,仍有若干问题未解决,容易发表论文.
开始学先看Tanner和Mackay的论文,比较好懂.
yangxiao55
编译环境不同,编译不通过很正常。一般网上下载的程序都是需要改动的。
至于国外构造LDPC码,我并不认为大Girth和stopping set是热点,这两个是两三年前的事。
38.
1、给定度序列的情况下,分析和积译码器的集合平均特性;
2、给定迭代次数、误比特率和译码器,优化设计度序列(threshold 大)
39.
40.
这上面有的Radford M. Neal的程序和参考论文