ThinkLDPC编解码的细节学习

1. 信号源:

  二进制信号源为随机生成而二进制序列,为1·n矩阵;

  16进制是否为4·n矩阵,或者直接在二进制信号源的基础上用GF(q)值作为非0值;

2. Encode:(已有程序为Mackey方法a构造的H矩阵经高斯变换进而编码)

  1)  H = [I | P];  G = [P' | I];  G·H' = 0;

    u = s·G;    u = [c' s];   u·H' = 0

    c' = P * s' 可以分解成如下形式:

c = zeros(1,m);
for i = 1:m 
    c(i) = P(i,:) * s';
end
u = [c s];

  2) Mackey的H矩阵构造方法:

    a. 保证固定列重为p,而行的重量尽可能均匀的保持为q。同时要求任意两列之间的交叠重量不超过1。

    b. 将m/2的列,重量置为2,通常采用两个(m/2)*(m/2)的单位矩阵,上下叠放,剩余的列依然保持方法1的构造方法;

    c. 在前面所说的方法1和方法2的矩阵中,挑出部分使得双向图中出现短环的列,将其删除。再插入重新随机产生的列,使双向图中不再存在小于某个长度的环。

    (找时间验证下)用Mackey构造的方法1给出以一种准规则LDPC码的具体描述,选择一个不小于3的整数p,生成一个m*n矩阵A,使其具有固定列重量p和尽量一致的行重量q,对A进行高斯消元,得到系统形式的校验矩阵

      H=[P|I]

    如果A的各行不是线性无关的,就对其进行行列变换,使其具有结构

       A=[C1|C2]

    其中,C1是一个m*(n-m)稀疏矩阵,C2是一个m*m稀疏可逆矩阵,这样

      P=(C2^-1)*C1,G=[I P]。 

    d. 之前有看到PEG算法,但是pia了个霉的都是步骤概要,连最初发表的文章里都不详细(至少我这么觉着),所以不会实现,看C++程序有点头大......

    e. 消短环方法构造好像是吧><,找时间看看看能不能看明白......哎,理解能力不足,基础又不扎实,只能慢慢磨,累啊T.T

  3) 多进制时候,在已有的二进制H矩阵的基础上,用GF(q)替代1,看能否进行变换得到H=[I|P],或者按照Mackay给出的A的变换用C2和C1来得到G,进而求u。

  

3. Decode:

  1) 硬判决位比特翻转法:matlab里面可以实现通过原理达到u*H'为0,但实验时仅随意设的H矩阵,满足u*H'=0的u不唯一......郁闷= =

    文献给出的结果图也表明,对于硬判决算法和在此基础上的软判决算法在误码率还是很高的,不想和积译码算法随着信噪比提高,误码率快速下降。

  2) 和积译码算法:研究指出,传统的置信传播算法译码复杂度为O(n2),文献指出,引入快速傅里叶变换后,译码复杂度将为O(q),因此,需要实现引入FFT变换的算法减少复杂度......还不会= =

  3) 二进制的时候,是给每个变量符号定义了一个结构体,包括先验概率、校验点给出的后验概率和变量点的后验概率,那如果换到多进制,那么每个变量点的概率可能值将为q种,建一个概率数组?长度为q,q=0...15,分别计算其概率得出结论?不过这样的话好像复杂了,不过应该有公式吧,只不过进行判断赋值就是了......有时候想的容易,实现太难T.T....

4. 老天,谁能给我点代码借鉴借鉴学习学习||T.T||......

原文地址:https://www.cnblogs.com/heyuheitong/p/2786163.html