Think--LDPC编解码的细节学习
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||......