LDPC的密度进化 density evolution

一般译码和密度演进流程分析: 

密度进化是对PDF的传递,其threshold是对迭代后的PDF求积分,求出BER后的判断——是否达到设定的BER需求。所以中间迭代的值都是PDF函数(高斯近似理论中,因为AWGN信道的LLR值呈现N(mu,2mu)的分布,所以也假设中间迭代的PDF统计结果依然符合N(mu,2mu)的分布,迭代过程中的PDF使用均值进行计算就可以简化,而EXIT图是基于迭代后的分布的互信息的计算求得)。

X \sim N(\mu_1,\sigma_1^2), Y\sim N(\mu_2,\sigma_2^2), aX+bY\sim N(a\mu_1+b\mu_2,(a\sigma_1)^2+(b\sigma_2)^2)

规则码的变量和校验节点更新步骤中参与的节点数目都相等,所以更新中PDF的卷积次数相同;不规则码的变量和校验节点更新步骤中参与的节点数目不相等,所以要根据度分布多项式来求迭代后的平均值。

AWGN信道中,变量节点更新时,是高斯变量(LLR)的求和过程,即PDF函数卷积,卷积后的分布均值为参与卷积的PDF均值之和,方差也为PDF方差之和,所以变量节点的更新过程将更新后的PDF均值幅值变大,方差也变大。

校验节点更新时,通过对box-plus 运算的仿真,发现更新后的PDF均值幅度变小,方差也变小。

所以VNU CNU之间迭代时,不断地在对迭代后的PDF进行方差和均值的修正,努力使BER达到threshold。

那么,可不可以从这点出发找到使得BER快速趋于0的PDF运算,然后反向操作找到对应的improved译码过程?)

密度进化流程


(1)设定参数:

  • 给定当前码字,密度进化是在无环假设下进行的根据稀疏校验矩阵度分布进行的 所传递PDF的迭代,所以码字由度分布 (d_v,d_c) 确定,规则码由度分布常量表示,不规则码由度分布多项式表示;
  • 设定目标ber^*,即当前码字设计在其工作环境下的ber;
  • 信道参数\alpha,可以是BEC的删除概率,可以是BSC的转移概率,可以是AWGN的噪声方差,通过调整信道参数来求得满足要求的ber下的信道参数阈值;

(2)迭代步骤:

连续密度进化推导

LDPC迭代

(Sum-Product Algorithm)

密度化迭代(原始傅里叶变换版本)

a. 初始化:

初始输入译码器的信道信息为对数似然比:L_J^0=\log\frac{P(y|x=+1)}{P(y|x=-1)}=\frac{2y}{\sigma^2}

并将变量节点初始化:L_{j\to i}^0=L_j^0

迭代次数k=1。

<Channel codes classical and modern,chapter5 and chapter 9>

 

考虑二进制输入AWGN,x\in\{+1,-1\},输出为y=x+n,其中n \sim\mathcal N(0,\sigma^2)

显然,因为y \sim\mathcal N(1,\sigma^2),所以L_j^0\sim\mathcal N(\frac{2}{\sigma^2},\frac{4}{\sigma^4}*\sigma^2),即var=2mean。

若输入为非AWGN,则 LLR的分布需要另外推导。

 

这样我们就可以求出LLR信息的PDF。 

L_j^0 的PDF记为 p_c^0

b. VN更新:

L_{j\to i}^k=L_j^0+\sum_{i'\inN(j)-\{i\}}L_{i'\to j}^{k-1}

这一步因为是随机变量求和,且L_j^0服从初始PDF,L_{i'\to j}^{k-1}为迭代k-1次之后的随机变量,其PDF和初始PDF不同,但是因为是无环假设,所以每个外部节点变量的分布都假设相同,即PDF更新公式可以写为(随机变量的求和之后的PDF为其各自PDF的卷积):

p_v^k=p_c^0*[p_c^{k-1}]^{*(d_v-1)}, * 为卷积。

规则码的d_v都相同,而非规则码的更新公式为:

p_v^k=p_c^0*\sum_{d=1}^{d_v}\lambda_d (p_c^{k-1})^{*(d_v-1)},可见非规则码的更新公式就是增加了求平均的步骤。

其快速计算可以采用FFT取代卷积:

p_v^k=\mathcal F^{-1} \{\mathcal F\{p_c^0\}][\mathcal F\{p_c^{k-1}\}]^{d_v-1}\} (规则码)

 

c. CN更新:

 

原始连乘公式:

L_{i\to j}^k=2tanh^{-1}(\prod_{j'\in N(i)-\{j\}}tanh(\frac{1}{2}L_{j'\to i}^{k-1}))

 

化简后公式(【实数域上的连乘】变为【符号域连乘+实数域上的连加】):

 

L_{i\to j}^k=\prod_{j'\in N(i)-\{j\}}sign(L_{j'\to i}^{k-1})\times \phi (\sum_{j'\in N(i)-\{j\}} \phi (|L_{j'\to i}^{k-1}|) )

 

其中,\phi(x)=-ln[tanh(\frac{x}{2})]=ln\frac{e^x+1}{e^x-1}

校验节点的推导也有根据原始SP公式的,这里针对化简后的公式,

L_{i\to j}^k=\prod_{j'\in N(i)-\{j\}}sign(L_{j'\to i}^{k-1})\times \phi (\sum_{j'\in N(i)-\{j\}} \phi (|L_{j'\to i}^{k-1}|) )

 

右边第一个连乘项为符号连乘,不利于推导PDF,所以令s_{j'\to i}^{k-1}=log_{-1}sign(L_{j'\to i}^{k-1}) ,

 

则该连乘项改为求和项

L_{i\to j}^k=mod(\sum_{j'\in N(i)-\{j\}}s_{j'\to i}^{k-1},2)\times \phi (\sum_{j'\in N(i)-\{j\}} \phi (|L_{j'\to i}^{k-1}|) )

 

到这一步,很自然地就把LLR变为符号(此处符号为真是符号以-1为底的对数,0或1)和幅值两部分:

L^k_{i\to j}=[s^k,|m^k|]

 

开始推导变量节点PDF计算

需要知识点:《LDPC码基础与应,贺鹤云编著》p.159

设随机变量X具有概率密度函数f_x(x),又设g(x)处处连续可导且有g'(x)>0(或恒有g'(x)<0),则y=g(x)是连续型随机变量,x=h(y)为y=g(x)的反函数,其概率密度函数为:

f_Y(y)=f_X(h(y))|h'(y)|,

min(g(-\infty), g(+\infty))<y<max(g(-\infty),g(+\infty))

 

STEP 1: 求右边第二个求和中的\phi (|L_{j'\to i}^{k-1}|)的PDF

(1) 当s_{j'\to i}^{k-1}=0时,L_{j'\to i}^{k-1}>0g(x)=y=\phi(L_{j'\to i}^{k-1})=-lntanh(\frac{L_{j'\to i}^{k-1}}{2})

g'(x)=\phi'(L_{j'\to i}^{k-1})=\frac{1}{sinh(L_{j'\to i}^{k-1})}, g'(x)<0, 

L_{j'\to i}^{k-1}的PDF为p_v^{k-1} 

因为\phi (x)反函数的对称性,即\phi (x)=\phi^{-1} (x),或者写为y=\phi (x), x=\phi(y)

我们可以由

g(x)=y=-lntanh(\frac{L_{j'\to i}^{k-1}}{2})

得到:

h(y)=L_{j'\to i}^{k-1}=-lntanh(\frac{y}{2})

h'(y)=\frac{1}{sinh(y)}

则:

y=\phi (|L_{j'\to i}^{k-1}|)的概率密度函数为:

 

 P(0,y)=p_v^{k-1}(-\ln \tanh(\frac{y}{2}))\frac{1}{\sinh(y)}, L_{j'\to i}^{k-1}>0

 同样的,

(2) 当s_{j'\to i}^{k-1}=1时,L_{j'\to i}^{k-1}<0

得到

则:

y=\phi (|L_{j'\to i}^{k-1}|)的概率密度函数为:

 

 P(1,y)=p_v^{k-1}(-\ln \tanh(\frac{-y}{2}))\frac{1}{\sinh(-y)}, L_{j'\to i}^{k-1}<0

STEP 2: 计算w=\sum\phi (|L_{j'\to i}^{k-1}|)=\sum y的PDF

运用变量节点更新的规则,随机变量求和为PDF卷积,但是此时的信息被分为正负两种情况,所以在使用傅里叶变换的时候需要用二维傅里叶变换进行,第一项为二元域变换{0,1},第二项为实数域变换【0,+\infty)。

卷积:p(w)=p(y)^{*(d_c-1)}

傅里叶变换:

首先

 \mathcal F\{p(y)\}_{(0,w)}=\mathcal F\{p(0,y)\}_w+\mathcal F\{p(1,y)\}_w

\mathcal F\{p(y)\}_{(1,w)}=\mathcal F\{p(0,y)\}_w-\mathcal F\{p(1,y)\}_w

接着

 \mathcal F\{p(w)\}_{(0,w)}=[\mathcal F\{p(y)\}_{(0,w)}]^{d_c-1}

\mathcal F\{p(w)\}_{(1,w)}=[\mathcal F\{p(y)\}_{(1,w)}]^{d_c-1}

最后

p(w)=\mathcal F^{-1}\{p(w)\}

STEP 3: 计算m^k=\phi^{-1}(w)=\phi^{-1}(\sum y)=\phi^{-1}(\sum\phi (|L_{j'\to i}^{k-1}|))的PDF

类似于STEP 1的推导,

P(0,m^k)=p_v^{k-1}(0,y)\frac{1}{\sinh(m^k)}|y=\phi(m^k), s=0

P(1,m^k)=p_v^{k-1}(1,y)\frac{1}{\sinh(-m^k)}|y=\phi(-m^k), s=1

 

关于上述的傅里叶变换并未深究,只是将书上的知识结合自己理解做了一个整理和总结,离散的密度进化和连续情况有很大不同。

 

 

d. LLR求和:

L_j^{total}=L_j^0+\sum_{i\in N(j)}L_{i\to j}^{k-1}

密度进化其实只对应上述的迭代过程,每次迭代完得到p_v^k之后,通过计算积分并与设置的ber比较

\int_{-\infty}^0p_v^k(x)dx\leq ber^*

来决定是否继续迭代或者调整信道参数\alpha

e. 判决:

  • \hat{v}=1, if L_j^{total}<0; \hat{v}=0, other.
  • if \hat vH^T=0, exit and output; otherwise k++ and goto step b.
 

离散密度进化推导

LDPC迭代

Box-plus Algorithm

 

此译码算法是为了解决\phi(x)=-ln[tanh(\frac{x}{2})]=ln\frac{e^x+1}{e^x-1}函数造成难以拟合的问题,即使用查找表也会有性能损失,所以采用盒加操作。

其中最主要的步骤是使用盒加操作取代了L_{i\to j}^k=2tanh^{-1}(\prod_{j'\in N(i)-\{j\}}tanh(\frac{1}{2}L_{j'\to i}^{k-1}))

盒加box-plus见CN节点更新。

密度化迭代(量化版本)

<Channel codes classical and modern,chapter5 and chapter 9> 代码不是采用的这个办法,可以了解一下。

 

a. 初始化:

初始输入译码器的信道信息为对数似然比:L_J^0=\log\frac{P(y|x=+1)}{P(y|x=-1)}=\frac{2y}{\sigma^2}

L_J^0量化,

并将变量节点初始化:L_{j\to i}^0=0

迭代次数k=1。

求出LLR信息的PDF: 

L_j^0 的PDF记为 p_c^0

将PDF进行量化,即对量化区间内的PDF进行积分,求出量化信号的出现概率,即概率质量函数PMF,又称概率谱密度。

b. VN更新:

L_{j\to i}^k=L_j^0+\sum_{i'\inN(j)-\{i\}}L_{i'\to j}^{k-1}

同非量化版本一致,这一步因为是随机变量求和,对于规则LDPC码来说

p_v^k=p_c^0*[p_c^{k-1}]^{*(d_v-1)}, * 为离散卷积。

同样,其快速计算可以采用FFT取代卷积:

p_v^k=\mathcal F^{-1} \{\mathcal F\{p_c^0\}][\mathcal F\{p_c^{k-1}\}]^{d_v-1}\}

c. CN更新:

 

原始连乘公式:

L_{i\to j}^k=2tanh^{-1}(\prod_{j'\in N(i)-\{j\}}tanh(\frac{1}{2}L_{j'\to i}^{k-1}))

 

盒加化简后公式:

 

L_{i\to j}^k=\boxplus_{j'\in N(i)-\{j\}}L_{j'\to i}^{k-1}

 

其中,\boxplux (a,b)=\mathcal B(a,b)=2 \tanh^{-1}(\tanh(a/2)\tanh(b/2))

连乘即对该公式进行递归。box-plus可以做查找表进行计算。

并且可以对CN节点计算顺序进行特殊安排而减少运算次数从而减少复杂度(详细请自行查看文献,累了,扛不动枪了)。

这一步与基于原始SP算法,连续的密度进化推导大不同,box-plus运算m=\mathcal B(m_1,m_2)=m_1\boxplus m_2的概率分布函数可以表示为:

P_m[k]=\sum_{(i,j):k\Delta=\mathcal B(i\Delta,j\Delta) }P_{m_1}[i]P_{m_2}[j]

其中\Delta为量化步长。

该PMF运算可以写为PMF的盒加运算:

 

P_m=P_{m_1}\boxplus P_{m_2}

则左边的连续盒加运算可以写作PMF的盒加指数

P_c^k=(P_v^{k-1})^{\boxplus (d_c-1)}

将VN更新中的卷积带入上式得到:

P_c^k=(p_c^0*[p_c^{k-1}]^{*(d_v-1)})^{\boxplus (d_c-1)}

此时与连续密度进化推导求P_v^k的式子不同,只需要求P_c^k就够了,因为在只发送+1的假设下,二者的错误概率积分结果所表征的意思相同。

d. LLR求和:

L_j^{total}=L_j^0+\sum_{i\in N(j)}L_{i\to j}^{k-1}

同样进行ber的计算,但是是离散的

\sum_{i<0}p_c^k[i](x)]\leq ber^*

决定是否继续迭代或者调整信道参数\alpha

e. 判决:

  • \hat{v}=1, if L_j^{total}<0; \hat{v}=0, other.
  • if \hat vH^T=0, exit and output; otherwise k++ and goto step b.
 

 

Regular Density Evolution version 0.1.1 

Copyright (C) 2003 by Andrew W. Eckford

实现方法:

This package contains MATLAB scripts which implement Richardson and Urbanke's density evolution technique to find the ultimate performance of LDPC codes in memoryless channels.

实现内容:

量化规则LDPC和非规则LDPC的密度进化,当量化步长无限小的时候,也就是Bi-AWGN信道输出时的密度进化了吧。

本代码是基于Richardson and Urbanke 2001年发表的IT文章进行的实现——The Capacity of Low-Density Parity-Check Codes Under Message-Passing Decoding,下文提到的box-plus离散算法是他们2004年在CL中提出的——On the Design of Low-Density Parity-Check Codes within 0.0045 dB of the Shannon Limit。

使用例子:

例1:二元对称信道,转移概率8.394% ,规则LDPC

 % 量化信道输入,输入幅度划分为6001等份
     chan = zeros(1,6001); 
 % chan(3000)为0均值点,所以chan(3240)是正确概率,chan(2762)是错误转移概率
     chan(3240) = 91.606; % 注意这里是离散的PMF,概率质量函数,所以sum(value*interval)=1
     chan(2762) = 8.394;
% 量化输入的数据格式,此格式为将输入映射到[-30,30]区间,6000等份量化
     ext = [-30 0.01 6001];
% 中间校验节点复杂函数的量化,后续待研究
     mapping = [-10 0.0002 50000];
% 变量节点重量
     dv = 3;
% 校验节点重量
     dc = 6;
% 迭代次数,在此信道下,该码经过100多次迭代可以达到10^-6的错误率,与 The Capacity of Low-Density Parity-Check Codes Under Message-Passing Decoding 中Table I的结论对应
     iter = 200;
% 目标ber (不断改变DE条件,使得输出的threshold逼近目标)
     stop_pe = 1e-6;
% 函数调用
     result_pe = de_regular(chan,iter,ext,mapping,stop_pe,dv,dc)

% 输出
    result_pe =

    0.0839    0.0788    0.0756    0.0730    0.0710

例2:二输入对称AWGN输出信道,规则LDPC

    chan = zeros(1,6001);
    ext = [-30 0.01 6001];% LLR input quantization 
    mapping = [-10 0.0002 50000];% 内部迭代计算PDF时的量化(离散计算) quantizaiton for check node values
    dv = 3;
    dc = 6;
    iter = 20;
    stop_pe = 1e-5;
% squre root of variance for Guass
    noise=1.0; 
% 高斯信道的量化,用补误差函数erfc()计算量化值
    chan=chan_mess(ext,noise);
    result_pe = de_regular(chan,iter,ext,mapping,stop_pe,dv,dc)

例3 : 二输入对称AWGN输出信道,非规则LDPC

    ext = [-30 0.01 6001]; 
    mapping = [-10 0.0002 50000];
    iter = 100;
    stop_pe = 1e-5; 
% 度分布多项式
    vard(1,:)=[0 0.2895    0.3158 0 0  0.3947];
    chkd(1,:)=[ 0 0 0 0 0 0.9032  0.0968];
% squre root of variance for Guass  
% 噪声从低到高,步长为ns_stp, 逐步试出符合stop_pe的threshold
    ns_str_low=0.9;   
    ns_str_high=0.94;     
    ns_stp=0.01; 
% 包括了信道信息的统计            threshold=threshold_tst(vard,chkd,ns_str_low,ns_str_high,ns_stp,ext,mapping,iter,stop_pe);
  • 10
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值