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

密度进化是对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,,输出为y=x+n,其中

显然,因为,所以,即var=2mean。

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

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

 的PDF记为 

b. VN更新:

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

, * 为卷积。

规则码的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: 求右边第二个求和中的的PDF

(1) 当时,

的PDF为

因为反函数的对称性,即,或者写为

我们可以由

得到:

则:

的概率密度函数为:

同样的,

(2) 当时,

得到

则:

的概率密度函数为:

STEP 2: 计算的PDF

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

卷积:

傅里叶变换:

首先

接着

最后

STEP 3: 计算的PDF

类似于STEP 1的推导,

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

d. LLR求和:

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

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

e. 判决:

  • if , exit and output; otherwise k++ and goto step b.
 

离散密度进化推导

LDPC迭代

(Box-plus Algorithm)

此译码算法是为了解决函数造成难以拟合的问题,即使用查找表也会有性能损失,所以采用盒加操作。

其中最主要的步骤是使用盒加操作取代了

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

密度化迭代(量化版本)

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

a. 初始化:

初始输入译码器的信道信息为对数似然比:

量化,

并将变量节点初始化:

迭代次数k=1。

求出LLR信息的PDF:

 的PDF记为 

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

b. VN更新:

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

, * 为离散卷积。

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

c. CN更新:

原始连乘公式:

盒加化简后公式:

其中,

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

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

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

其中为量化步长。

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

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

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

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

d. LLR求和:

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

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

e. 判决:

  • if , 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)=1chan(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 valuesdv = 3;dc = 6;iter = 20;stop_pe = 1e-5;
% squre root of variance for Guassnoise=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的thresholdns_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);

LDPC的密度进化 density evolution相关推荐

  1. 可用于SDR的C语言纠错编码通用算法收集(4)-LDPC低密度奇偶校验码

    为了配合学生借助 taskbus进行纯控制台STDIO模块的开发,我们收集了手头的通用纠错算法,便于学生进行开发学习.今天介绍LDPC编码. 1. 低密度奇偶校验编码LDPC 低密度奇偶校验码LDPC ...

  2. 密度聚类(Density peaks Clustering)Python实现

    密度聚类(Density peaks Clustering)Python实现 原文:http://blog.csdn.net/kryolith/article/details/39832573 Rod ...

  3. 2019/07/21_后生动物转录因子的早期进化 Early evolution of metazoan transcription factors_(lab paper)

    title: Early evolution of metazoan transcription factors 1. 发现大多数转录因子(Tf)家族起源于动物王国的黎明,是在当代动物谱系分化之前,在 ...

  4. 安卓屏幕密度(Density)和分辨率的关系

    density值表示每英寸有多少个显示点,与分辨率是两个不同的概念. 下面以480dip*800dip的WVGA(density=240dpi)为例,详细列出不同density下屏幕分辨率信息: de ...

  5. matlab期权风险评估算法,使用 MATLAB 应用程序根据期权价格估算风险中性密度 (risk-neutral density, RND)...

    我们为什么选择 MATLAB 我们决定创建 MATLAB 应用程序估算 RND,因为我们希望研究成果得到广泛应用,而不是仅限于在量化经济学领域或是熟悉 MATLAB 编程的和金融研究人员使用. 我们发 ...

  6. 通信算法之三:LDPC码的研究

    <源自:http://www.chinadata.com.cn/jishujcshow.asp?id=1159 > LDPC码的研究现状与发展动态   1 引言 自从Shannon提出信道 ...

  7. python绘制所有特征的密度图(density plot)

    python绘制所有特征的密度图(density plot) # python绘制所有特征的密度图: n = len(input_feats) #密度图kde,查查分布 cols = 4 rows = ...

  8. 人群计数经典方法Density Map Estimation,密度图估计

    (3)Density Map Estimation(主流) 这是crowd counting的主流方法 传统方法不好在哪里?object detection-based method和regressi ...

  9. 基于密度的聚类(Density-based clustering)-- 核密度估计(kernel density estimation)

    In density-based clustering, clusters are defined as areas of higher density than the remainder of t ...

最新文章

  1. 改进AI/ML部署的5种方法
  2. python 中文件输入输出及os模块对文件系统的操作
  3. Windows下多线程编程技术及其实现
  4. SystemParametersInfo (SPI_GETNONCLIENTMETRICS... 在VC 2008 里不能正常工作
  5. asp.net php 哪个好,ASP.NET、JSP和PHP究竟哪个好
  6. 机器学习预测信贷风险
  7. Git 简介和命令行操作
  8. MapInfo启动时,提示the Microsoft jet engine is not available
  9. 使用Spring框架对接Twitter(一)
  10. Matlab DIP(瓦)ch8图像压缩练习
  11. php ip 短时间 重复,记录服务器端ip,记录这个ip第一次启动文件的时间,并且排除重复的ip...
  12. 利用ST MCU内部的基准参考电压监测电源电压及其它
  13. 数据采集与清洗基础习题(四)Pandas初体验,头歌参考答案
  14. kali最高权限root
  15. 408数据结构考研笔记!超级详细!23最新考纲
  16. 谁吃土的时候没有受过委屈?
  17. BugkuCTF –备份是个好习惯
  18. WebView 入坑
  19. 2019中国科学院、中国工程院院士增选名单正式发布
  20. List中remove()方法的陷阱,开发谨记!

热门文章

  1. Oracle 10g在线整理碎片索引是否失效
  2. 怎么用python实现快递信息自动查询和跟踪?
  3. H.266/VVC技术学习之帧内模式编码
  4. Mac Office 2016 版安装
  5. 3.9使用ValidationSummary控件
  6. SAF(Storage Access Framework)使用攻略
  7. LCID表(区域设置ID表)
  8. jenkins定时任务时间设置方法
  9. 【C语言】C语言标准头文件
  10. python 移动平均线_Python中的移动平均线