欢迎光临散文网 会员登陆 & 注册

LDPC 软判决算法-- 引入Tanner图

2022-08-30 23:57 作者:乐吧的数学  | 我要投稿

经过前面多篇文章和视频的讲解,我们已经清楚地了解了 LDPC 译码的流程和背后的逻辑思想。现在,我们可以引入 Tanner 图,来为 LDPC 译码算法做一个图形化的抽象和理解。我觉得,在理解了译码算法的流程之后,再引入 Tanner 图,就比较容易理解 Tanner 图的作用,有一个更清晰的图形化的理解,方便我们记忆 LDPC 译码的流程。


(录制的视频:https://www.bilibili.com/video/BV1iY4y1u7Gi/

我们知道,译码算法,不管是用 Log 形式的还是不用 Log 形式的,都有两个主要的步骤和思想:



1)校验方程成立与否的概率或者某种度量

2)比特取值的概率或者某种度量



而相互迭代这两个步骤,逐步逼近成功译码这个理想的目标。所以,我们可以把步骤 1) 的结果,称之为校验,则在 Tanner 图中引入校验节点;步骤 2)的结果,称之为数据或者比特,在 Tanner 图中引入变量节点。

在这两种节点之间,引入连线,规则是:某个比特参与某个校验方程,则在对应的比特节点和校验节点之间引入连线,表示一种相互关系:比特参与校验方程,校验方程含有比特。

这个一般称之为 Tanner 图,也称之为二分图,这个图本身,并不是算法的精确表达,而是对算法中各种角色之间关系的一种形象表达,至于这种表示的背后,还需要严格的数学推导作为支撑。即,角色之间的依赖关系是有什么样的数学公式来描述的。



本篇文章都是以这个校验矩阵为例子。


A%20%3D%20%5Cbegin%7Bbmatrix%7D%0A%20%201%26%201%20%26%201%20%26%200%20%26%200%20%26%201%20%26%201%20%26%200%20%26%200%20%26%201%5C%5C%0A%20%201%26%200%20%26%201%20%26%200%20%26%201%20%26%201%20%26%200%20%26%201%20%26%201%20%26%200%5C%5C%0A%20%200%26%200%20%26%201%20%26%201%20%26%201%20%26%200%20%26%201%20%26%200%20%26%201%20%26%201%5C%5C%0A%20%200%26%201%20%26%200%20%26%201%20%26%201%20%26%201%20%26%200%20%26%201%20%26%200%20%26%201%5C%5C%0A%20%201%26%201%20%26%200%20%26%201%20%26%200%20%26%200%20%26%201%20%26%201%20%26%201%20%26%200%0A%5Cend%7Bbmatrix%7D


我们译码出来的码字表示成向量形式:
c%3D%5Cbegin%7Bbmatrix%7D%0A%20%20c_1%20%26%20c_2%20%26%20c_3%20%26%20c_4%20%26%20c_5%20%26%20c_6%20%26%20c_7%20%20%26%20c_8%20%26%20c_9%20%26%20c_%7B10%7D%0A%5Cend%7Bbmatrix%7D


这个译码出来的码字,不是指发送的正确的码字,是表示我们待译码出来的,例如,我们可能想评估  c_1%3D1 的可能性(概率)。

我们把接收到的数据表示为一个向量:
r%3D%5Cbegin%7Bbmatrix%7D%0A%20%20r_1%20%26%20r_2%20%26%20r_3%20%26%20r_4%20%26%20r_5%20%26%20r_6%20%26%20r_7%20%20%26%20r_8%20%26%20r_9%20%26%20r_%7B10%7D%0A%5Cend%7Bbmatrix%7D


根据线性分组码相关的原理,我们知道有如下的校验方程:
z%20%3D%20c%20A%5ET

计算后的结果 z,是一个含有5个元素的向量,记为:

z%20%3D%20%5Cbegin%7Bbmatrix%7D%0A%20%20z_1%26%20z_2%20%26%20z_3%20%26%20z_4%20%26%20z_5%0A%5Cend%7Bbmatrix%7D


为了易于理解,我们把上面这个矩阵形式的方程,展开成 5 个校验方程:

%5Cbegin%7Beqnarray%7D%0Az_1%20%26%3D%20c_1%20%2B%20c_2%20%2B%20c_3%20%2B%20c_6%20%2B%20c_7%20%2B%20c_%7B10%7D%20%5C%5C%0Az_2%20%26%3D%20c_1%20%2B%20c_3%20%2B%20c_5%20%2B%20c_6%20%2B%20c_8%20%2B%20c_%7B9%7D%20%5C%5C%0Az_3%20%26%3D%20c_3%20%2B%20c_4%20%2B%20c_5%20%2B%20c_7%20%2B%20c_9%20%2B%20c_%7B10%7D%20%5C%5C%0Az_4%20%26%3D%20c_2%20%2B%20c_4%20%2B%20c_5%20%2B%20c_6%20%2B%20c_8%20%2B%20c_%7B10%7D%20%5C%5C%0Az_5%20%26%3D%20c_1%20%2B%20c_2%20%2B%20c_4%20%2B%20c_7%20%2B%20c_8%20%2B%20c_%7B9%7D%0A%5Cend%7Beqnarray%7D


那么,用 Tanner 图来表示这些依赖关系,可以表示成下图:


两种变量节点间的关系,可以用这个思想来描述:校验节点(校验方程)把自己的某种度量信息告知这个校验方程含有的比特对应的变量节点,同理,变量节点也把自己取值的概率信息的某种度量也发给包含这个比特的校验方程对应的校验节点。



我们之前推导的 LDPC 译码都是分两个主要步骤在迭代:用比特的概率信息估计校验方程的概率信息,然后用校验方程的信息更新比特的概率信息。这个过程,在 Tanner 图上来描述:变量节点的信息发送到与之相连的校验节点,校验节点据此计算出自己的信息,然后,校验节点把这个信息发送给与之相连的变量节点。

在 Tanner 图的表示中,则问题就变成:

1)节点之间发送的信息,是什么样的信息?

2)各个节点收到发来的信息后,如何计算自己的信息,或者说如何计算将要发出去的信息?



这两个问题的回答,都依赖于具体的算法,所以,不同的算法,上面两个问题的答案也不尽相同。我们之前讲的两种算法,就有两种不同的答案。



1. 节点之间发送的信息,是什么样的信息?



对于不用  log likelihood ratio 形式的算法

 校验节点 m 向变量节点 n 发送的信息:

r_%7Bmn%7D(x)%3Dp(z_m%3D0%7Cc_n%3Dx%2Cr)%20%3D%0A%20%20%20%20%20%20%5Csum_%7B%5C%7B%20%5C%7B%20x_%7B%5Cgrave%7Bn%7D%7D%2C%5Cspace%20%5Cgrave%7Bn%7D%20%5Cin%20N_%7Bm%2Cn%7D%5C%7D%3A%20x%3D%5Csum_l%20x_l%5C%7D%7D%0A%20%20%20%20%20%20%5Cquad%20%5Cprod_%7Bl%20%5Cin%20N_%7Bm%2Cn%7D%7Dp(c_l%3Dx_l%7Cr)



例如:

r_%7B25%7D(x)%3Dp(z_2%3D0%7Cc_5%3Dx%2Cr)%20%3D%0A%20%20%20%20%20%20%5Csum_%7B%5C%7Bx_1%2Bx_3%2Bx_6%2Bx_8%2Bx_9%3Dx%5C%7D%7D%0A%20%20%20%20%20%20%5Cquad%20%5Cprod_%7Bl%20%5Cin%20%5C%7B1%2C3%2C6%2C8%2C9%20%5C%7D%7Dp(c_l%3Dx_l%7Cr)%20%20%5C%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%5Csum_%7B%5C%7Bx_1%2Bx_3%2Bx_6%2Bx_8%2Bx_9%3Dx%5C%7D%7D%0A%20%20%20%20%20%20%5Cquad%20p(c_1%3Dx_l%7Cr)p(c_3%3Dx_3%7Cr)p(c_6%3Dx_6%7Cr)p(c_8%3Dx_8%7Cr)p(c_9%3Dx_9%7Cr)


当然,这个公式的计算,是有一个简化的快速算法的,这里就不讲了,有兴趣的朋友可以看专栏往期内容。



 变量节点 n 向 校验节点 m 发送的信息: r_%7Bm%2Cn%7D

q_%7Bmn%7D(x)%3Dp(c_n%3Dx%7C%5C%7Bz_%7Bm'%7D%3D0%5C%7D%2Cr)%20%3D%5Cfrac%7B1%7D%7Bp(%5C%7Bz_%7Bm'%7D%3D0%5C%7D%7Cr)%7Dp(c_n%3Dx%7Cr_n)%5Cprod_%7Bm'%7D%20p(z_%7Bm'%7D%3D0%7Cc_n%3Dx%2Cr)




例如:

q_%7B21%7D(x)%3Dp(c_1%3Dx%7C%5C%7Bz_%7Bm'%7D%3D0%2Cm'%5Cin%20%5C%7B1%2C5%5C%7D%5C%7D%2Cr)%20%3D%5Cfrac%7B1%7D%7Bp(%5C%7Bz_%7Bm'%7D%3D0%2Cm'%5Cin%20%5C%7B1%2C5%5C%7D%5C%7D%7Cr)%7Dp(c_1%3Dx%7Cr_n)%5Cprod_%7Bm'%5Cin%20%5C%7B1%2C5%5C%7D%5C%7D%7D%20p(z_%7Bm'%7D%3D0%7Cc_1%3Dx%2Cr)%20%20%20%5C%5C%0A%5Cfrac%7B1%7D%7Bp(%5C%7Bz_%7Bm'%7D%3D0%2Cm'%5Cin%20%5C%7B1%2C5%5C%7D%5C%7D%7Cr)%7Dp(c_1%3Dx%7Cr_n)%20%20p(z_1%3D0%7Cc_1%3Dx%2Cr)%20%20p(z_5%3D0%7Cc_1%3Dx%2Cr)%20







 对于 log likelihood ratio 形式的算法:

校验节点 m 向变量节点 n 发送的信息:

%5Ceta_%7Bm%2Cn%7D%5E%7B%5Bl%5D%7D%3D-%202%20tanh%5E%7B-1%7D(%5Cprod_%7Bj%20%5Cin%20N_%7Bm%2Cn%7D%20%7D%20tanh(-%5Cfrac%7B%5Clambda%5E%7B%5Bl%5D%7D(c_j%7C%5C%7Br_i%2Ci%20%5Cneq%20n%5C%7D)%7D%7B2%7D))


例如:
%5Ceta_%7B2%2C5%7D%5E%7B%5Bl%5D%7D%3D-%202%20tanh%5E%7B-1%7D(%5Cprod_%7Bj%20%5Cin%20%5C%7B1%2C3%2C6%2C8%2C9%5C%7D%20%7D%20tanh(-%5Cfrac%7B%5Clambda%5E%7B%5Bl%5D%7D(c_j%7C%5C%7Br_i%2Ci%20%5Cneq%205%5C%7D)%7D%7B2%7D))%20%20%5C%5C%20%20%20%20%5C%5C%0A%3D-%202%20tanh%5E%7B-1%7D(%20%20%5C%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20tanh(-%5Cfrac%7B%5Clambda%5E%7B%5Bl%5D%7D(c_1%7C%5C%7Br_i%2Ci%20%5Cneq%205%5C%7D)%7D%7B2%7D)%20%5C%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20tanh(-%5Cfrac%7B%5Clambda%5E%7B%5Bl%5D%7D(c_3%7C%5C%7Br_i%2Ci%20%5Cneq%205%5C%7D)%7D%7B2%7D)%5C%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20tanh(-%5Cfrac%7B%5Clambda%5E%7B%5Bl%5D%7D(c_6%7C%5C%7Br_i%2Ci%20%5Cneq%205%5C%7D)%7D%7B2%7D)%5C%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20tanh(-%5Cfrac%7B%5Clambda%5E%7B%5Bl%5D%7D(c_8%7C%5C%7Br_i%2Ci%20%5Cneq%205%5C%7D)%7D%7B2%7D)%5C%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20tanh(-%5Cfrac%7B%5Clambda%5E%7B%5Bl%5D%7D(c_9%7C%5C%7Br_i%2Ci%20%5Cneq%205%5C%7D)%7D%7B2%7D)%5C%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20)%20



变量节点 n 向 校验节点 m 发送的信息:

%5Clambda%5E%7B%5Bl%5D%7D(c_n%7Cr)%20%3D%20log%5Cfrac%7Bp(c_n%3D1%7Cr)%7D%7Bp(c_n%3D0%7Cr)%7D%20%3D%5Cfrac%7B2%7D%7B%5Csigma%5E2%7Dr_n%20%2B%20%5Csum_m%20%5Ceta%5E%7B%5Bl%5D%7D_%7Bm%2Cn%7D%20%20%20%5C%5C%20%20%5C%5C%0A%5Clambda%5E%7B%5Bl%2B1%5D%7D(c_j%7C%5C%7Br_i%2Ci%20%5Cneq%20n%5C%7D)%20%3D%20%5Clambda%5E%7B%5Bl%5D%7D(c_j%7Cr)%20-%5Ceta_%7Bm%2Cj%7D%5E%7B%5Bl%5D%7D


例如:

     变量节点 1 发给校验节点 2 的信息:

%5Clambda%5E%7B%5Bl%5D%7D(c_1%7Cr)%20%3D%20log%5Cfrac%7Bp(c_1%3D1%7Cr)%7D%7Bp(c_1%3D0%7Cr)%7D%20%3D%5Cfrac%7B2%7D%7B%5Csigma%5E2%7Dr_n%20%2B%20%5Csum_%7Bm%20%5Cin%20%5C%7B1%2C2%2C5%5C%7D%7D%20%5Ceta%5E%7B%5Bl%5D%7D_%7Bm%2C1%7D%20%20%20%5C%5C%20%20%5C%5C%0A%5Clambda%5E%7B%5Bl%2B1%5D%7D(c_1%7C%5C%7Br_i%2Ci%20%5Cneq%20n%5C%7D)%20%3D%20%5Clambda%5E%7B%5Bl%5D%7D(c_1%7Cr)%20-%5Ceta_%7B2%2C1%7D%5E%7B%5Bl%5D%7D


2. 对于第二个问题的回答,即各个节点收到发来的信息后,如何计算自己的信息,由于自己的消息,就是发给另外一种节点的信息,在回答第一个问题时,已经隐含了这个问题的答案。

变量节点收到校验节点的消息之后,计算出变量节点的信息,在非 log likelihood ratio算法中用的公式为:
q_%7Bmn%7D(x)%3Dp(c_n%3Dx%7C%5C%7Bz_%7Bm'%7D%3D0%5C%7D%2Cr)%20%3D%5Cfrac%7B1%7D%7Bp(%5C%7Bz_%7Bm'%7D%3D0%5C%7D%7Cr)%7Dp(c_n%3Dx%7Cr_n)%5Cprod_%7Bm'%7D%20p(z_%7Bm'%7D%3D0%7Cc_n%3Dx%2Cr)


所以,变量节点是对收到的来自校验节点的信息,用连乘的方式来计算

而在 log likelihood ratio 算法中,因为取了 log ,所以,变成了用连加来计算

%5Clambda%5E%7B%5Bl%5D%7D(c_n%7Cr)%20%3D%20log%5Cfrac%7Bp(c_n%3D1%7Cr)%7D%7Bp(c_n%3D0%7Cr)%7D%20%3D%5Cfrac%7B2%7D%7B%5Csigma%5E2%7Dr_n%20%2B%20%5Csum_m%20%5Ceta%5E%7B%5Bl%5D%7D_%7Bm%2Cn%7D%20%20%20%5C%5C%20%20%5C%5C%0A%5Clambda%5E%7B%5Bl%2B1%5D%7D(c_j%7C%5C%7Br_i%2Ci%20%5Cneq%20n%5C%7D)%20%3D%20%5Clambda%5E%7B%5Bl%5D%7D(c_j%7Cr)%20-%5Ceta_%7Bm%2Cj%7D%5E%7B%5Bl%5D%7D



校验节点收到变量节点的消息之后,计算出校验节点的信息,在非 log likelihood ratio算法中用的公式为:

r_%7Bmn%7D(x)%3Dp(z_m%3D0%7Cc_n%3Dx%2Cr)%20%3D%0A%20%20%20%20%20%20%5Csum_%7B%5C%7B%20%5C%7B%20x_%7B%5Cgrave%7Bn%7D%7D%2C%5Cspace%20%5Cgrave%7Bn%7D%20%5Cin%20N_%7Bm%2Cn%7D%5C%7D%3A%20x%3D%5Csum_l%20x_l%5C%7D%7D%0A%20%20%20%20%20%20%5Cquad%20%5Cprod_%7Bl%20%5Cin%20N_%7Bm%2Cn%7D%7Dp(c_l%3Dx_l%7Cr)


则对收到的各种变量节点的信息的组合,先做连乘,然后再做连加。

而在 log likelihood ratio 算法中,用 tanh 函数来表示,更为复杂的一种计算公式。

%5Ceta_%7Bm%2Cn%7D%5E%7B%5Bl%5D%7D%3D-%202%20tanh%5E%7B-1%7D(%5Cprod_%7Bj%20%5Cin%20N_%7Bm%2Cn%7D%20%7D%20tanh(-%5Cfrac%7B%5Clambda%5E%7B%5Bl%5D%7D(c_j%7C%5C%7Br_i%2Ci%20%5Cneq%20n%5C%7D)%7D%7B2%7D))


LDPC 软判决算法-- 引入Tanner图的评论 (共 条)

分享到微博请遵守国家法律