LDPC概率译码原理实例说明

本文深入介绍了Gallager概率译码公式及其应用,包括二进制序列概率计算和译码步骤。详细阐述了变量节点和校验节点的更新规则,并对比了对数译码算法,通过取对数简化乘法运算,降低计算复杂度。最后,探讨了归一化最小和译码方法,利用双曲正切函数特性加速计算。整个过程涵盖从初始化到译码判决的完整流程。
摘要由CSDN通过智能技术生成

1.1译码公式理解

译码公式的证明很多书籍里边已有介绍,这里不做证明直接引用。介绍Gallager概率译码公式之前先介绍引理:二进制序列长度为m且相互独立,第i个bit为1的概率为 P i P_{i} Pi,那么整个序列为偶数个1的概率为:

P e = 1 2 + 1 2 ∏ i = 1 m ( 1 − 2 P i ) P_{e} = \frac{1}{2} + \frac{1}{2}\prod_{i = 1}^{m}\left( 1 - 2P_{i} \right) Pe=21+21i=1m(12Pi)

为奇数个1的概率为:

P o = 1 2 − 1 2 ∏ i = 1 m ( 1 − 2 P i ) P_{o} = \frac{1}{2} - \frac{1}{2}\prod_{i = 1}^{m}\left( 1 - 2P_{i} \right) Po=2121i=1m(12Pi)

Gallager概率译码公式:
在这里插入图片描述

式中, P ( c d = 0 ∣ y , S ) P(c_{d} = 0|y,S) P(cd=0∣y,S) P ( c d = 1 ∣ y , S ) P(c_{d} = 1|y,S) P(cd=1∣y,S),在接收码字为 y y y,校验方程组S的条件下发送码字 c d c_{d} cd为0、1的概率。 P d P_{d} Pd发送码字独立,接收判决为1的概率(和信道的信噪比、调制方式、码率等有关)。 P i j P_{ij} Pij,第 i i i个校验方程中,第 j j j个bit为1的概率。 i ∈ c i ∏   , _{i \in c_{i}}^{\prod\ }, ici 校验节点概率相乘,位置在H矩阵中列非零校验节点。 j ∈ R j \ i j \in R_{j}\backslash i jRj\i,第 i i i个校验方程中去掉第 i i i个变量节点的其他所有变量节点,具体位置在H矩阵中每个校验方程去掉 i i i以外其他非零节点的位置。

1.2译码步骤

1.2.1 Gallager概率译码

一、变量节点初始化

5x10校验的矩阵H,行重为4,列重为2,本文中所有例子以该矩阵为依据,如下图所示,初始化公式推导不做介绍。假设接收的的序列 y y y={ y 0 y_{0} y0, y 1 y_{1} y1, y 2 . . . . , y 9 y_{2}....,y_{9} y2....,y9},信号采样BPSK调制,高斯信道下的初始化公式如下:
在这里插入图片描述

  1. 校验节点更新

    校验方程方程的计算规则是二元求和运算,因此,校验方程中校验节点为’1’的概率就是,校验结果奇数个’1’;校验方程中校验节点为’0’的概率就是,校验结果为偶数个1。
    在这里插入图片描述

    由5x10的校验矩阵可知,共5个校验方程,每个校验方程有4个校验节点。各个校验节点的详细计算过程如下:
    在这里插入图片描述

  2. 变量节点更新
    变量节点公式更新如下, a i j a_{ij} aij为校正因子,使 q i j ( t ) ( 0 ) q_{ij}^{(t)}(0) qij(t)(0)+ q i j ( t ) ( 1 ) q_{ij}^{(t)}(1) qij(t)(1)= 1。本文实例中校验矩阵H,有10列,每列有2个变量节点需要更新。
    q i j ( t ) ( 0 ) = a i j P i ( 0 ) ∏ j ∈ C i \ j ( r i j ( t ) ( 0 ) ) q_{ij}^{(t)}(0) = a_{ij}P_{i}(0)\prod_{j \in C_{i}\backslash j}^{}\left( r_{ij}^{(t)}(0) \right) qij(t)(0)=aijPi(0)jCi\j(rij(t)(0))
    q i j ( t ) ( 1 ) = a i j P i ( 1 ) ∏ j ∈ C i \ j ( r i j ( t ) ( 1 ) ) q_{ij}^{(t)}(1) = a_{ij}P_{i}(1)\prod_{j \in C_{i}\backslash j}^{}\left( r_{ij}^{(t)}(1) \right) qij(t)(1)=aijPi(1)jCi\j(rij(t)(1))

  3. 后验概率计算

    后验概率计算之后便可进行译码处理,概率计算公式如下。

q i ( t ) ( 0 ) = a i P i ( 0 ) ∏ j ∈ C i ( r i j ( t ) ( 0 ) ) q_{i}^{(t)}(0) = a_{i}P_{i}(0)\prod_{j \in C_{i}}^{}\left( r_{ij}^{(t)}(0) \right) qi(t)(0)=aiPi(0)jCi(rij(t)(0))
q i ( t ) ( 1 ) = a i j P i ( 1 ) ∏ j ∈ C i ( r i j ( t ) ( 1 ) ) q_{i}^{(t)}(1) = a_{ij}P_{i}(1)\prod_{j \in C_{i}}^{}\left( r_{ij}^{(t)}(1) \right) qi(t)(1)=aijPi(1)jCi(rij(t)(1))

  1. 译码判决和码字校验

    q i ( t ) ( 0 ) q_{i}^{(t)}(0) qi(t)(0) < q i ( t ) ( 1 ) q_{i}^{(t)}(1) qi(t)(1),判决为’1’,否则判决为’0’。译码判决后的码字与H矩阵相乘为0,则译码成功,否则译码失败转为下一次迭代。

1.2.2对数译码算法

对数译码算法实质上是对Gallager概率译码公式等号两边取对数,将多个乘法变成对数域加法计算,减少计算量。

  1. 变量节点初始化

    对数域的初始化将概率译码的初始化公式取对数得到,此处省略公式推导,计算公式如下:
    在这里插入图片描述
    本文例子中,H矩阵初始化后变量节点如下图:
    在这里插入图片描述

  2. 校验节点计算

校验节点计算是对概率译码校验节点计算公式取对数得到,引入双曲正切函数,此处省略公式推导,计算公式如下:
L ( t ) ( r j i ) = 2 t a n h − 1 ( ∏ i ∈ R j \ i t a n h ( L ( t − 1 ) ( q i j ) ) ) L^{(t)}(r_{ji}) = {2tanh}^{- 1}\left( \prod_{i \in R_{j}\backslash i}^{}{tanh\left( L^{(t - 1)}(q_{ij}) \right)} \right) L(t)(rji)=2tanh1 iRj\itanh(L(t1)(qij))
3. 变量节点计算

变量节点计算是对概率译码变量节点计算公式取对数得到,将乘法运算转换成了对数域的加法计算,计算公式如下:
L ( t ) ( q i j ) = L ( P i ) + ∑ j ∈ C i \ j L ( t ) ( r j i ) L^{(t)}(q_{ij}) = L(P_{i}) + \sum_{j \in C_{i}\backslash j}^{}L^{(t)}(r_{ji}) L(t)(qij)=L(Pi)+jCi\jL(t)(rji)
四、后验概率计算
L ( t ) ( q i ) = L ( P i ) + ∑ j ∈ C i L ( t ) ( r j i ) L^{(t)}(q_{i}) = L(P_{i}) + \sum_{j \in C_{i}}^{}L^{(t)}(r_{ji}) L(t)(qi)=L(Pi)+jCiL(t)(rji)
五、码判决和码字校验
L ( t ) ( q i ) L^{(t)}(q_{i}) L(t)(qi)>0译码输出0,否则译码输出为’1’。码字校验方法同概率译码。

1.2.3归一化最小和译码

归一化最小和译码利用了双曲正切函数的性质:1、奇函数 f ( − x ) = − f ( x ) f( - x) = - f(x) f(x)=f(x),将双曲正切函数改写成符号函数和绝对值函数的乘积;2、值域 ∈ \in [-1,1],多个双曲正切函数相乘的积<最小的乘数。将双曲正切函数的乘积简化成符号函数的计算和最小值的选取函数。

  1. 变量节点初始化同对数译码算法。

  2. 校验节点更新

    计算公式如下: a a a为归一化系数, s g n sgn sgn为符号函数, i ∈ R j \ i m i n    , _{i \in R_{j}\backslash i}^{min\ \ }, iRj\imin  取最小值。

    L ( t ) ( r j i ) = a ∗ ( j ∈ R j \ i ∏    s g n ( L ( t − 1 ) ( q i j ) ) ) ∗ i ∈ R j \ i m i n    ∣ L ( t − 1 ) ( q i j ) L^{(t)}(r_{ji}) = a \ast \left(_{j \in R_{j}\backslash i}^{\prod\ \ }{sgn\left( L^{(t - 1)}(q_{ij}) \right)} \right) \ast_{i \in R_{j}\backslash i}^{min\ \ }{|L^{(t - 1)}}(q_{ij}) L(t)(rji)=a(jRj\i  sgn(L(t1)(qij)))iRj\imin  L(t1)(qij)|

    本文例子中H矩阵校验节点的详细计算步骤如下 : L r j i Lr_{ji} Lrji对应相应的校验节点,sgn是符号函数, L q i j Lq_{ij} Lqij对应相应的变量节点。

    校验方程0校验节点计算。
    Lr00 =a*sgn({Lq05,Lq06,Lq09})*min|({Lq05,Lq06,Lq09})|,计算不包含Lq00节点
    Lr05 =a*sgn({Lq00,Lq06,Lq09})*min|({Lq00,Lq06,Lq09})|,计算不包含Lq05节点
    Lr06 =a*sgn({Lq00,Lq05,Lq09})*min|({Lq00,Lq05,Lq09})|,计算不包含Lq06节点
    Lr09 =a*sgn({Lq00,Lq05,Lq06})*min|({Lq00,Lq05,Lq06})|,计算不包含Lq09节点
    校验方程1校验节点计算。
    Lr11 = a*sgn({Lq12,Lq15,Lq18})*min|({Lq12,Lq15,Lq18})|,计算不包含Lq11节点
    Lr12 = a*sgn({Lq11,Lq15,Lq18})*min|({Lq11,Lq15,Lq18})|,计算不包含Lq12节点
    Lr15 =a*sgn({Lq11,Lq12,Lq18})*min|({Lq11,Lq12,Lq18})|,计算不包含Lq15节点
    Lr18 =a*sgn({Lq11,Lq12,Lq15})*min|({Lq11,Lq12,Lq15})|,计算不包含Lq18节点
    校验方程2校验节点计算。
    Lr20 =a*sgn({Lq24,Lq28,Lq29})*min|({Lq24,Lq28,Lq29})|,计算不包含Lq20节点
    Lr24 =a*sgn({Lq20,Lq28,Lq29})*min|({Lq20,Lq28,Lq29})|,计算不包含Lq24节点
    Lr28 =a*sgn({Lq20,Lq24,Lq29})*min|({Lq20,Lq24,Lq29})|,计算不包含Lq28节点
    Lr29 =a*sgn({Lq20,Lq24,Lq28})*min|({Lq20,Lq24,Lq28})|,计算不包含Lq29节点
    校验方程3校验节点计算。
    Lr32 =a*sgn({Lq33,Lq34,Lq37})*min|({Lq33,Lq34,Lq37})|,计算不包含Lq32节点
    Lr33 =a*sgn({Lq32,Lq34,Lq37})*min|({Lq32,Lq34,Lq37})|,计算不包含Lq33节点
    Lr34 =a*sgn({Lq32,Lq33,Lq37})*min|({Lq32,Lq33,Lq37})|,计算不包含Lq34节点
    Lr37 =a*sgn({Lq32,Lq33,Lq34})*min|({Lq32,Lq33,Lq34})|,计算不包含Lq37节点
    校验方程4校验节点计算。
    Lr41 =a*sgn({Lq43,Lq46,Lq47})*min|({Lq43,Lq46,Lq47})|,计算不包含Lq41节点
    Lr43 =a*sgn({Lq41,Lq46,Lq47})*min|({Lq41,Lq46,Lq47})|,计算不包含Lq43节点
    Lr46 =a*sgn({Lq41,Lq43,Lq47})*min|({Lq41,Lq43,Lq47})|,计算不包含Lq46节点
    Lr47 =a*sgn({Lq41,Lq43,Lq46})*min|({Lq41,Lq43,Lq46})|,计算不包含Lq47节点

  3. 变量节点更新
    变量节点更新公式同对数概率译码。本文中H矩阵详细计算过程如下: L q i j Lq_{ij} Lqij对应相应的变量节点, L p i ∈ {Lp}_{i} \in Lpi{ 2 y 0 σ 2 \frac{2y0}{\sigma^{2}} σ22y0, 2 y 1 σ 2 \frac{2y1}{\sigma^{2}} σ22y1, 2 y 0 σ 2 \frac{2y0}{\sigma^{2}} σ22y0, 2 y 9 σ 2 \frac{2y9}{\sigma^{2}} σ22y9},对应的初始化对数似然概率, L r j i Lr_{ji} Lrji对应相应的校验节点。
    第一列变量节点更新
    Lq00 = Lp0+sum({Lr30});不包含Lr00节点
    Lq30 = Lp0+sum({Lr00});不包含Lr30节点
    第二列变量节点更新
    Lq11 = Lp1+sum({Lr41});不包含Lr11节点
    Lq41 = Lp1+sum({Lr11});不包含Lr41节点
    第三列变量节点更新
    Lq12 = Lp2+sum({Lr32});不包含Lr12节点
    Lq32 = Lp2+sum({Lr12});不包含Lr32节点
    第四列变量节点更新
    Lq33 = Lp3+sum({Lr43});不包含Lr33节点
    Lq43 = Lp3+sum({Lr33});不包含Lr43节点
    第五列变量节点更新
    Lq24 = Lp4+sum({Lr34});不包含Lr24节点
    Lq34 = Lp4+sum({Lr24});不包含Lr34节点
    第六列变量节点更新
    Lq05 = Lp5+sum({Lr15});不包含Lr05节点
    Lq15 = Lp5+sum({Lr05});不包含Lr15节点
    第七列变量节点更新
    Lq06 = Lp6+sum({Lr46});不包含Lr06节点
    Lq46 = Lp6+sum({Lr06});不包含Lr46节点
    第八列变量节点更新
    Lq37 = Lp7+sum({Lr47});不包含Lr37节点
    Lq47 = Lp7+sum({Lr37});不包含Lr47节点
    第九列变量节点更新
    Lq18 = Lp8+sum({Lr28});不包含Lr18节点
    Lq28 = Lp8+sum({Lr18});不包含Lr28节点
    第十列变量节点更新
    Lq09 = Lp9+sum({Lr29});不包含Lr09节点
    Lq29 = Lp9+sum({Lr09});不包含Lr29节点

  4. 后验概率计算
    后验概率计算公式同对数概率译码算法,本文中的H矩阵后验概率的详细计算过程如下:
    Lq0 = Lp0+sum({Lq00,Lq30})
    Lq1 = Lp0+sum({Lq11,Lq41})
    Lq2 = Lp0+sum({Lq12,Lq32})
    Lq3 = Lp0+sum({Lq33,Lq43})
    Lq4 = Lp0+sum({Lq24,Lq34})
    Lq5 = Lp0+sum({Lq05,Lq15})
    Lq6 = Lp0+sum({Lq06,Lq46})
    Lq7 = Lp0+sum({Lq37,Lq47})
    Lq8 = Lp0+sum({Lq18,Lq28})
    Lq9 = Lp0+sum({Lq09,Lq29})
    五、译码判决和码字校验同对数概率译码算法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值