NR LDPC 04 -definition, Tanner and Protograph Constructions

 前言

         前面简要的介绍了LDPC相关知识,下面会参照NPTEL详细介绍一下。

分为8章,每章半个小时内容。8天左右的内容


目录:

1:   define

2: Tanner

3: protograph construction


一 定义

    1.1 定义

LDPC码最早在20世纪60年代由Gallager在他的博士论文中提出,但限于当时的技术条件,缺乏可行的译码算法,此后的35年间基本上被人们忽略,其间由Tanner在1981年推广了LDPC码并给出了LDPC码的图表示,即后来所称的Tanner图。1993年Berrou等人发现了Turbo码,在此基础上,1995年前后MacKay和Neal等人对LDPC码重新进行了研究,提出了可行的译码算法,从而进一步发现了LDPC码所具有的良好性能,迅速引起强烈反响和极大关注。经过十几年来的研究和发展,研究人员在各方面都取得了突破性的进展,LDPC码的相关技术也日趋成熟,甚至已经开始有了商业化的应用成果,并进入了无线通信等相关领域的标准。

LDPC码是通过校验矩阵定义的一类线性码,为使译码可行,在码长较长时需要校验矩阵满足“稀疏性”,即校验矩阵中1的密度比较低,也就是要求校验矩阵中1的个数远小于0的个数,并且码长越长,密度就要越低。

  1.2  LDPC为什么要等到30多年后才被应用起来

        1960 那个时代由于硬件的限制 ,LDPC 译码是一种并行计算的思想,没有办法去验证实现。 但是现在CPU,TPU,GPU技术快速发展,其实现已经非常简单了。很多技术比如离散傅里叶变换,教科书上面一直让我们使用的是FFT,IFFT, 如果放在TPU,GPU上面DFT会更有优势。

        DFT(N^2)会远远比FFT(Nlog_2N)快,主要也是FFT 采用的是蝶形算法,放在TPU上面

可以充分利用GPU,TPU的张量运算的并行运算的优势,可以一步就完成。 但是FFT至少需要log_2N步。

1.3  码率

        code rate = \frac{k}{N}

        k: 原始的发送bit 数

        N:   加过奇偶校验数后的bit 数

        前面也介绍过了,纠错码和码率是一个冲突的问题,不仅要保证高码率也要保证纠错能力。

1.4    为什么要稀疏

                      这里面有大量的理论去证明这块,包括后面的Tanner图的路径规划。

     这边简单的介绍一下便于理解

                      第一我们设计编码的时候必须要考虑码

c_1,c_2,c_3  :为奇偶校验比特

c_4,c_5,c_6,c_7: 为信息bit,最终就是需要正确解码出这些。

假设现在要解码,以BEC信道为例 c_4

\left\{\begin{matrix} c_1+c_4+c_5+c_7=0\\ c_2+c_4+c_6+c_7=0 \end{matrix}\right.

当其中任意一个SPC码,其中如果全部正确以及只有一个Erase的情况下

就能解码出c_4,

根据二项分布(N=4,p=0.5) 这种概率为0.05+0.25= 0.3

无法解码的概率为0.7.如果两个全部解码出错的概率为 0.7*0.7=0.49

如果有15个这样的SPC码就能达到0.9953的正确概率了。

根据二项分布(N=20,p=0.5) 这种概率为0000010+0.0000191= 0.00003

 

前面提过,要保证码率,越多码率越低,所以列要保持稀疏。

 

  

 

      

# -*- coding: utf-8 -*-
"""
Created on Tue May 10 11:45:41 2022

@author: chengxf2
"""
# -*- coding: utf-8 -*-
"""
Created on Sat May  7 12:00:44 2022

@author: chengxf2
"""
from scipy.stats import binom
import numpy as np
import matplotlib.pyplot as plt



'''
画出二项分布的图形
args
   prob: 概率分布
'''
def drawProb(N,prob):
    p = 0.5
 
    info = 'probability {}  N {}'.format(p, N)
    plt.figure(figsize=(8,6), dpi=80)
    plt.subplot(1,1,1)
    
    N= len(prob)
    index = np.arange(N)
    
    width = 0.35
    
    plt.bar(index, prob, width, label =info,color="#87CEFA")
    
    plt.xlabel("k")
    plt.ylabel('probability')
    plt.title("binom")
    #plt.xticks(index)
    #plt.yticks()
    plt.legend(loc="upper right")
    plt.show()

'''
  在n次独立重复的伯努利试验中,设每次试验中事件A发生的概率为p。
  用X表示n重伯努利试验中事件A发生的次数,则X的可能取值为0,1,…,n,
  且对每一个k(0≤k≤n),事件{X=k}即为“n次试验中事件A恰好发生k次,
  随机变量X的离散概率分布即为二项分布(Binomial Distribution)
  
  args
     n : n次试验
     p: 单次实验中事件A发送的概率
 
'''
def calc(n, p=0.5):
    
 
    prob =[]
    for  k in range(n+1):
        p_k= binom(n,p).pmf(k) #计算成功次数为i的概率

        prob.append(p_k)
        print("\n k: %d   概率:%8.7f "%(k,p_k))
  
    return prob
N=20     
prob = calc(N,0.5)
drawProb(N,prob)  

二  Tanner 图

   Tanner. RM , A recusrive approach to low complexity codes.

    IEEE Tans.on Info Theory ,1981 ,27, 533-547

 

 

   前面已经讲过Tanner 图怎么表示奇偶校验校验矩阵的,以及如何解码的。

    图的左边圆圈     bit nodes,      对应奇偶校验矩阵H 中的列

     图的右边方块    check nodes,对应奇偶校验矩阵H 中的行

     Degree 代表本行或者本列中1的个数和


三  Protograph  Constructions

      LDPC 奇偶校验矩阵通常都非常大,在很多标准里面都通过Protograph Constructions

去表示Tanner 图或者 H。

     

 

方法也很简单:

      第一步按照 Expansion factor 生成一个单位矩阵I,比如上图的5

   

      第二步按照 B矩阵,逐元素做  Expanded by right shift permutation matrices

     比如第一行第一列元素

       B[0,0]=1

      把单位矩阵向右循环1次,生成一个新的5*5矩阵,替代原来元素

      

         B[0,1]=-1

         就用一个全0 的矩阵替代

         B[0,2]=3,  把单位矩阵向右循环3次,生成一个新的5*5矩阵,替代原来元素

        

      其它的元素也是如此一次循环移位后,替代原来元素

    NR 5G 中最大的Expansion 为384

 

       

     4.1 Protograph  constructing

             base graphs  for different rates

             Expanded by right shift permutation matrices

              optimised for performance vs complexity

        NR

              two base graphs

               several expansions

               shorteing and puncturing for multiple rates 

it turns out the LDPC in standards are almost always Protograph Constructions.
so this is not the photograph in the sense of taking picture, this is protograph.
so what is a protograph, protograph is sort like an example graph which you repeat 
to make bigger graph.
     so the way they would define a protograph is as follows , so protograph construction
is basically a way of constructing your parity check matrix ,remember the parity check matrix
is usually big binary matrix right ,so 1000 by 2000 or some such matrix ,how do you specify
that , how do you specify whreas the ones are right ,how do you specify the Tanner graph.
  so for that the standards always use this protograph construction , there a lot of theoretical
reasons for why protograph constructions are very good, but let us just look at how they 
defined and how they sepcified.
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值