LDPC的两种常用译码算法

LDPC码简介

LDPC码(低密度检验码)是1962年Gallager提出的一种通信编码方式,也是当前最接近香农极限的编码,在信息传输速率高速增长的今天,LDPC码有着广阔的应用前景。目前5G通信领域中,LDPC和Polar码平分秋色,是当前研究的热点,有取代Turbo编码的可能性。
LDPC码在译码算法上有着显著的优势,LDPC基于稀疏校验矩阵,该矩阵中多数元素为0,仅有少数元素为1,这使得在译码过程中可以减少大量的计算量,提高译码效率;同时,稀疏矩阵使连续突发的错误对译码影响差距不大;在FPGA上,该算法有很好的并行性,硬件实现复杂度低。目前,LDPC的硬解码算法有log-BP算法和min-sum算法

LDPC译码流程

LDPC译码一般包括五部分

  • 初始化
  • 校验节点更新
  • 变量节点更新
  • 判决
  • 结束
Created with Raphaël 2.2.0 接收信道数据 初始化 校验节点更新 判决,校验节点信息 满足校验方程? 结束(译码成功) 最大迭代次数? 结束(译码失败) 比特节点更新 yes no yes no

首先,译码器接收信道数据,并进行初始化,更新校验节点,随后进行判决,校验节点信息,如果满足校验方程,则完成译码,如果不满足,而且未达到最大迭代次数时,更新比特节点,进行纠错,同时开始下一步迭代。当达到做大迭代次数后仍为满足校验方程,则译码失败。

BP算法

BP算法又称为和积算法,常被用于软判决,但也可以用硬判决来实现。BP算法中消息的传递形式为对数似然比(LLR),迭代译码过程就是校验及诶单与信息节点之间的数据传递与更新。
log-BP算法的译码过程:
输入数据:初始概率 P i 0 = P ( x i = 0 ) P^0_i=P(x_i=0) Pi0=P(xi=0) P i 1 = P ( x i = 1 ) = 1 − P i 0 , n = 1 , . . . , i P^1_i=P(x_i=1)=1-P^0_i,n=1,...,i Pi1=P(xi=1)=1Pi0,n=1,...,i
输出数据:硬判决结果 x ^ = x ^ 1 , . . . , x ^ i \hat x={\hat x_1,...,\hat x_i} x^=x^1,...,x^i
初始化:对接收到的 i i i个信息,计算初始信道信息: L ( c i ) = L ( q i j ) = l o g P i 0 P j 1 = 2 y i σ 2 L(c_i)=L(q_{ij})=log \frac{P^0_i}{P^1_j}=\frac{2y_i}{\sigma^2} L(ci)=L(qij)=logPj1Pi0=σ22yi其中, y i y_i yi为收到的混有噪声的信息, σ 2 \sigma^2 σ2为噪声平均功率。
迭代过程:

  1. 校验节点计算
    设有 L ( q i j ) = l o g q i j ( 0 ) q i j ( 1 ) = α i j β i j , L ( r j i ) = l o g r j i ( 0 ) r j i ( 1 ) ; L(q_{ij})=log\frac{q_{ij}(0)}{q_{ij}(1)}=\alpha_{ij}\beta_{ij}, L(r_{ji})=log\frac{r_{ji}(0)}{r_{ji}(1)}; L(qij)=logqij(1)qij(0)=αijβij,L(rji)=logrji(1)rji(0);式中, α i j = s i g n ( L ( q i j ) ) , β i j = a b s ( L ( q i j ) ) , \alpha_{ij}=sign(L(q_{ij})),\beta_{ij}=abs(L(q_{ij})), αij=sign(L(qij)),βij=abs(L(qij)), 则: L ( r j i ) = ∏ i ′ ∈ R i / j α i ′ j ∗ ϕ [ ∑ i ′ ∈ R j / i ϕ ( β i ′ j ) ] , L(r_{ji})=\prod_{i^{'} \in R_{i/j}} \alpha_{i^{'}j}*\phi[\sum_{i^{'}\in R_{j/i}}\phi(\beta_{i^{'}j})], L(rji)=iRi/jαijϕ[iRj/iϕ(βij)],
    式中, ϕ ( x ) = − l o g ( t a n h ( x / 2 ) ) ; \phi(x)=-log(tanh(x/2)); ϕ(x)=log(tanh(x/2));
  2. 信息节点计算
    L ( q i j ) = L ( c i ) + ∑ j ′ ∈ C i / j L ( r j ′ i ) , L(q_{ij})=L(c_i)+\sum_{j^{'}\in C_{i/j}}L(r_{j^{'}i}), L(qij)=L(ci)+jCi/jL(rji),对每个变量节点i在完成信息节点计算后,对 L ( Q i ) = l o g Q i ( 0 ) Q i ( 1 ) L(Q_i)=log \frac{Q_i(0)}{Q_i(1)} L(Qi)=logQi(1)Qi(0)进行更新,它表示从信息节点 c i c_i ci传递到校验节点 f i f_i fi的伪后验似然概率 L ( Q i ) = L ( c i ) + ∑ j ∈ C i L ( r j i ) ; L(Q_i)=L(c_i)+\sum_{j \in C_i}L(r_{ji}); L(Qi)=L(ci)+jCiL(rji);
  3. 判决
    L ( Q i ) L(Q_i) L(Qi)进行判决,如果 L ( Q i ) < 0 L(Q_i)<0 L(Qi)<0,则 x ^ i = 1 , \hat x_i=1, x^i=1,否则为0;如果 x ^ H T = 0 \hat xH^T=0 x^HT=0成立,则译码结束,否则跳到第一步直至满足校验等式或超过最大迭代次数为止。

log-BP算法充分利用了信息节点和校验节点的性质以及接受序列的所有信息,从而可以得到比进行香农极限的译码性能;该算法在二分图没有环的条件下可等效为最大似然译码算法。在迭代过程中,如果校验等式成立,译码结束,而不是进行固定次数的迭代,所以收敛很快,同时,并行的迭代算法有很好的硬件友好性,使复杂度和延时都很低。但在实际实现时,会不断用到函数 ϕ ( x ) \phi(x) ϕ(x),只能通过查找表来实现函数求值,最小和算法可以避免大量查表。

最小和算法

最小和算法(Min-sum)在性能上略有损失,但复杂度上有大幅度的下降。最小和算法中避免使用了 ϕ ( x ) \phi(x) ϕ(x)函数,该函数在x>0时随着x的增大而减小,则在迭代过程中步骤1中公式求和的部分受最小的 β i j \beta_ij βij影响大,于是有: ϕ [ ∑ i ′ ∈ R j / i ϕ ( β i ′ j ) ] ≈ ϕ ( ϕ ( min ⁡ i ′ β i ′ j ) ) = min ⁡ i ′ β i ′ j ; \phi[\sum_{i^{'}\in R_{j/i}}\phi(\beta_{i^{'}j})]\approx \phi(\phi(\min_{i^{'}}\beta_{i^{'}j}))=\min_{i^{'}}\beta_{i^{'}j}; ϕ[iRj/iϕ(βij)]ϕ(ϕ(miniβij))=miniβij; 最小和算法用上述等式代替了对应公式中的求和部分,只在校验节点计算一步有差距,其步骤为:

  1. 校验节点计算
    L ( r j i ) = ∏ i ′ ∈ R i / j α i ′ j ∗ min ⁡ i ′ β i ′ j L(r_{ji})=\prod_{i^{'} \in R_{i/j}} \alpha_{i^{'}j}*\min_{i^{'}}\beta_{i^{'}j} L(rji)=iRi/jαijiminβij
    最小和算法不需要查表,虽然降低了部分精度,但运算简洁,大大减少了运算复杂度。

你可能感兴趣的:(others,ldpc)