一般译码和密度演进流程分析:
密度进化是对PDF的传递,其threshold是对迭代后的PDF求积分,求出BER后的判断——是否达到设定的BER需求。所以中间迭代的值都是PDF函数(高斯近似理论中,因为AWGN信道的LLR值呈现N(mu,2mu)的分布,所以也假设中间迭代的PDF统计结果依然符合N(mu,2mu)的分布,迭代过程中的PDF使用均值进行计算就可以简化,而EXIT图是基于迭代后的分布的互信息的计算求得)。
规则码的变量和校验节点更新步骤中参与的节点数目都相等,所以更新中PDF的卷积次数相同;不规则码的变量和校验节点更新步骤中参与的节点数目不相等,所以要根据度分布多项式来求迭代后的平均值。
AWGN信道中,变量节点更新时,是高斯变量(LLR)的求和过程,即PDF函数卷积,卷积后的分布均值为参与卷积的PDF均值之和,方差也为PDF方差之和,所以变量节点的更新过程将更新后的PDF均值幅值变大,方差也变大。
校验节点更新时,通过对box-plus 运算的仿真,发现更新后的PDF均值幅度变小,方差也变小。
所以VNU CNU之间迭代时,不断地在对迭代后的PDF进行方差和均值的修正,努力使BER达到threshold。
(那么,可不可以从这点出发找到使得BER快速趋于0的PDF运算,然后反向操作找到对应的improved译码过程?)
密度进化流程
(1)设定参数:
- 给定当前码字,密度进化是在无环假设下进行的根据稀疏校验矩阵度分布进行的 所传递PDF的迭代,所以码字由度分布
确定,规则码由度分布常量表示,不规则码由度分布多项式表示;
- 设定目标
,即当前码字设计在其工作环境下的ber;
- 信道参数
,可以是BEC的删除概率,可以是BSC的转移概率,可以是AWGN的噪声方差,通过调整信道参数来求得满足要求的ber下的信道参数阈值;
(2)迭代步骤:
连续密度进化推导
LDPC迭代 (Sum-Product Algorithm) | 密度化迭代(原始傅里叶变换版本) |
a. 初始化: 初始输入译码器的信道信息为对数似然比: 并将变量节点初始化: 迭代次数k=1。 | <Channel codes classical and modern,chapter5 and chapter 9>
考虑二进制输入AWGN, 显然,因为 若输入为非AWGN,则 LLR的分布需要另外推导。
这样我们就可以求出LLR信息的PDF。
|
b. VN更新: | 这一步因为是随机变量求和,且
规则码的d_v都相同,而非规则码的更新公式为:
其快速计算可以采用FFT取代卷积:
|
c. CN更新:
原始连乘公式:
化简后公式(【实数域上的连乘】变为【符号域连乘+实数域上的连加】):
其中, | 校验节点的推导也有根据原始SP公式的,这里针对化简后的公式,
右边第一个连乘项为符号连乘,不利于推导PDF,所以令
则该连乘项改为求和项
到这一步,很自然地就把LLR变为符号(此处符号为真是符号以-1为底的对数,0或1)和幅值两部分:
开始推导变量节点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)的反函数,其概率密度函数为:
STEP 1: 求右边第二个求和中的 (1) 当
因为 我们可以由 得到: 则:
同样的, (2) 当 得到 则:
STEP 2: 计算 运用变量节点更新的规则,随机变量求和为PDF卷积,但是此时的信息被分为正负两种情况,所以在使用傅里叶变换的时候需要用二维傅里叶变换进行,第一项为二元域变换{0,1},第二项为实数域变换【0,+\infty)。 卷积: 傅里叶变换: 首先 接着 最后 STEP 3: 计算 类似于STEP 1的推导,
关于上述的傅里叶变换并未深究,只是将书上的知识结合自己理解做了一个整理和总结,离散的密度进化和连续情况有很大不同。
|
d. LLR求和: | 密度进化其实只对应上述的迭代过程,每次迭代完得到 来决定是否继续迭代或者调整信道参数 |
e. 判决:
|
离散密度进化推导
LDPC迭代 (Box-plus Algorithm)
此译码算法是为了解决 其中最主要的步骤是使用盒加操作取代了 盒加box-plus见CN节点更新。 | 密度化迭代(量化版本) <Channel codes classical and modern,chapter5 and chapter 9> 代码不是采用的这个办法,可以了解一下。 |
a. 初始化: 初始输入译码器的信道信息为对数似然比: 对 并将变量节点初始化: 迭代次数k=1。 | 求出LLR信息的PDF:
将PDF进行量化,即对量化区间内的PDF进行积分,求出量化信号的出现概率,即概率质量函数PMF,又称概率谱密度。 |
b. VN更新: | 同非量化版本一致,这一步因为是随机变量求和,对于规则LDPC码来说
同样,其快速计算可以采用FFT取代卷积: |
c. CN更新:
原始连乘公式:
盒加化简后公式:
其中, 连乘即对该公式进行递归。box-plus可以做查找表进行计算。 并且可以对CN节点计算顺序进行特殊安排而减少运算次数从而减少复杂度(详细请自行查看文献,累了,扛不动枪了)。 | 这一步与基于原始SP算法,连续的密度进化推导大不同,box-plus运算 其中 该PMF运算可以写为PMF的盒加运算:
则左边的连续盒加运算可以写作PMF的盒加指数 将VN更新中的卷积带入上式得到: 此时与连续密度进化推导求 |
d. LLR求和: | 同样进行ber的计算,但是是离散的 决定是否继续迭代或者调整信道参数 |
e. 判决:
|
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);