您的位置:首页 > 其它

关于LDPC的一些讨论

2011-10-23 23:46 183 查看
转自: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. 回答lovewa的问题:

這裡我有個小問題,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. 1. 前几天在杭州参加ICWMMN, 林舒教授作了关于LDPC码的特邀报告. 会下, 与林教授交谈. 林舒教授目前已转向多进制LDPC码研究. 他认为, 传统的二进制LDPC码只适合BSC与AWGN信道, 而多进制LDPC码可用于突发信道和多径信道.

2. 我们在二进制LDPC码的软译码时, 判决前信息传递与计算均采用32位浮点数.

3. 二进制LDPC码研究仍未解决的问题:

a. 二进制LDPC码最小码重与最小权重的计算公式.

b. 二进制LDPC码的快速软译码算法, 现有算法在FPGA硬件实现时, 有相当的难度.

单独用多进制LPDC码好还是用二进制LDPC码加上信道估计、均衡和交织好?有没有相关的研究?多进制和tcm,应该比较好,正弄还没有最后结果

14. lthcwww.epfl.ch/research/ldpcopt

有一些优化了得度数分布,和相应的阈值

15. 回答keepsmile:

非规则低密度码的校验节点和变量节点的度序列分布为:

lou(x) lamda(x) 那么码率就应该是1-积分(lou(x))/积分(lamda(x) );

比如规则码(dv,dc),码率r=1-dv/dc,码率确定了,度分布序列的关系也确定了

16. 搂主:

能给我解释一下密度进化算法中σ*σ=2m是怎么得出的吗?

回答:首先明确在密度进化分析理论中,σ^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. 下面是一个很好的学习纠错码的网址:绝大学多数的译码程序都可以找到。The Error Correcting Codes (ECC) Page

http://www.eccpage.com/

此外,像一些做纠错码的牛人的个人主页也有很好的参考价值,例如

http://www.mackayholidays.info/

18. 如果搞性能分析,还是从吃透Trans. Info. 2001 Feb那期专刊上面的经典论文开始吧。硬件实现方面,找M.M Mansour, Tong Zhang, D. Hocevar, E. Boutillon几个人的论文来看就够起步了。码设计问题,可以找找R.M. Tanner, 或者Shu Lin他们的paper。

另外贡献几个我收藏的连接吧,我认为都相当的经典。

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. LDPC码的构造沿两条思路进行:

1. 大Girth LDPC码的构造, Girth>=12, 国外学者的研究方向;

2.大distance LDPC码的构造, 我目前的研究方向.

20. 在Mackay 的研究组里有人构造了短码长的码,可参考网址:

http://wol.ra.phy.cam.ac.uk/mackay/PEG_ECC.html

有源代码可以下载

21. 1. 我对Tanner设计的QC LDPC码采用相同的解码算法进行了测试, 发现其BER性能比同样长度的Random LDPC码差很多, 原因在于QC LDPC码的最小距离(码重)远小于同样长度的Random LDPC码.

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. 1.我同样做过Tanner设计的QC LDPC码的性能曲线,有较高的错误平层。

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. 1. 如下地址的程序, 可做参考:

http://www.mathworks.com/matlabcentral/fileexchange/loadCategory.do?objectId=64&objectType=Category

2. 该程序对于长码,运行时间较长.

3. 该程序编码部分, 需要完善.

这个程序只能解规则LDPC码,并且是非系统编码的情况

25. 关于density evolution,可以看看这个。

http://www.comm.toronto.edu/~eckford/software/index.html

26. Hui Jin 和T. Richardson的论文 Fast Density Evolution。

part 1

richardson_fast_densit_evolution.part1.rar
(97.66k)

27. 我想问下,你们在运行哪个c代码时,fftw3库怎么编译的,能否指点一下!我在编译时,命令窗总是说找不到头文件fftw3.h?

他里面用<>引的头文件,你需要指定地址,比如用下面的命令。

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. 请教一下,大家做SPA的密度进化是用来设计度序列么?

是否考虑过用密度进化的高斯逼近算法来实现?(AWGN)

非AWGN信道,密度进化更复杂,Matlab程序来搜索度序列会很吃力吧?

29. LDPC码的构造不仅要考虑编码复杂度,而且要兼顾译码器的消息的routing 问题(校验矩阵具有一定结构特性),现在有几个我认为较好的构造方法

1. 分块IRA码,非规则重复积累码,实质上就是非规则LDPC码(DVB-S2)。

2.基于循环移位矩阵构造的LDPC码,原来802.16e中LDPC码的结构。

3.QC-LDPC码看上去编译码都不复杂,性能还不敢恭维。(怎么进一步提高性能,值得深入研究)

30. 1. 采用Hui Jin 和T. Richardson的论文 Fast Density Evolution评估LDPC码的好坏,是困难的, 因为该方法没有建立与检验矩阵的联系.

2. Richardson的其它论文存在类似问题, 尽管为著名学者.

31. QC LDPC码构造的几个问题:

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. 1. 我对Random LDPC码和QC LDPC码进行了计算, 发现Random LDPC码的最小距离可随码长线性增长, 但大部分QC LDPC码却无法做到, 仅少部分QC LDPC码的最小距离可随码长线性增长.

2. 一些QC LDPC码不存在Girth4,6, 但最小距离不随码长线性增长, 仿真实验结果:这部分QC LDPC码的BER曲线很差.

3. 仿真实验结果: 若QC LDPC码不存在Girth4,6, 且最小距离随码长线性增长, 则错误比特率曲线类似Random LDPC码.

4. 仿真实验结果: QC LDPC 好码最小距离>=2*最小Girth数, 但该结果未反映与码长的线性关系

33. stopping set 中文: 停止集合

error floor 中文:误码平台

我对Random LDPC码和QC LDPC码的短码和长码的最小距离都进行了计算,所使用的方法需要在11月论文发表后才能公开.

现有 LDPC码的最小距离计算为NP问题, 也是公开问题, 中长码距离的计算在PC机上以天为单位.

34. 编程能力较强的研究生可以实现下列两篇论文的LDPC码的最小汉明距离算法:

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. Hu 的算法源代码在mackay的网站上早已经有了

http://www.inference.phy.cam.ac.uk/mackay/MINDIST_ECC.html

36. 1. 我对下面的论文进行的算法实现表明, 该论文可能会漏掉LDPC码的最小汉明距离.

肖雯等, LDPC码的最小汉明距离估算, 信息技术, 2005年第1期.

2. Hu 的算法源代码在mackay的网站上早已经有了

http://www.inference.phy.cam.ac.uk/mackay/MINDIST_ECC.html

Hu 的算法源代码有问题.

37. 肖雯等的论文实际是Hu的论文的翻译.我用短码对肖雯等的论文算法进行了验证,结果发现许多低码重的码肖雯等的论文算法找不到.

 显然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. 有谁知道STIMI中的高度结构化的HS-LDPC码?有没有相关的文章?

40. C程序:http://www.cs.toronto.edu/~radford/ftp/LDPC-2006-02-08/index.html

这上面有的Radford M. Neal的程序和参考论文
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: