目录
一、理论基础
QC-LDPC是一种准循环低密度奇偶校验码(LDPC),其校验矩阵是一个循环矩阵,因此得名。它采用循环结构来实现高效编码和解码。它具有较低的错误率和误码率,并且接近香农限。
具体来说,QC-LDPC编译码的过程如下:
生成校验矩阵
首先,根据给定的码率和二元独立同分布随机输入序列的长度,生成一个稀疏的校验矩阵。该矩阵的行数和列数取决于码率和序列长度。为了使校验矩阵成为循环矩阵,需要在每行中添加一个随机的列向量。
编码
将输入信息序列与零序列进行异或运算,得到一个校验序列。将该校验序列插入到校验矩阵的每一列中,得到一个完整的校验矩阵。然后,使用高斯消元法对校验矩阵进行初等变换,得到一个单位矩阵。最后,通过异或运算得到编码序列。
解码
使用多级迭代解码算法进行解码。首先将二元输入序列转换为十进制整数,并将其映射到校验矩阵中的行。然后,使用迭代解码算法来计算每个位是0还是1。具体来说,每个迭代步骤包含以下两个步骤:
- 硬判决:根据校验矩阵和已经解码的位,计算出每个未解码位的硬判决值。该步骤可以通过高斯消元法来实现。
- 更新:根据硬判决值更新每个未解码位的概率,然后进行下一步迭代。具体来说,每个未解码位的概率由其对应列中所有已解码位的值决定。如果该位的硬判决值为0或1,则将其概率设置为1减去该硬判决值的概率。
重复以上步骤直到达到最大迭代次数或误差率低于阈值。
参考资料:
程序流程:
RA-LDPC(稀疏有损译码器)和QC-LDPC(准循环低密度奇偶校验码)都是低密度奇偶校验码(LDPC)的变种,具有非常高效的编码和解码能力,特别适合于长距离通信和大数据存储。下面详细介绍它们的原理和公式。RA-LDPC是一种二元LDPC码,其校验矩阵是一个稀疏矩阵,因此得名。它由多级迭代解码算法进行解码,该算法将二元输入序列转换为十进制整数,并将其映射到校验矩阵中的行。然后,使用迭代解码算法来计算每个位是0还是1。
具体来说,RA-LDPC编译码的过程如下:
生成校验矩阵
首先,根据给定的码率和二元独立同分布随机输入序列的长度,生成一个稀疏的校验矩阵。该矩阵的行数和列数取决于码率和序列长度。
编码
将输入信息序列与零序列进行异或运算,得到一个校验序列。将该校验序列插入到校验矩阵的每一列中,得到一个完整的校验矩阵。
解码
使用多级迭代解码算法进行解码。首先将二元输入序列转换为十进制整数,并将其映射到校验矩阵中的行。然后,使用迭代解码算法来计算每个位是0还是1。具体来说,每个迭代步骤包含以下两个步骤:
- 硬判决:根据校验矩阵和已经解码的位,计算出每个未解码位的硬判决值。
- 更新:根据硬判决值更新每个未解码位的概率,然后进行下一步迭代。
重复以上步骤直到达到最大迭代次数或误差率低于阈值。
参考资料:
程序流程:
二、案例背景
QC-LDPC(Quasi-Cyslic Low-Density Parity-Check Codes)即准循环LDPC码。之前介绍的LDPC码基本属于随机构造法,构造出的码性能很好,但校验矩阵具有不规律性,存在校验矩阵存储于读取困难、编码复杂度高等问题,相对难以实现。准循环LDPC码是结构化LDPC码的重要子集,其奇偶校验矩阵可以分成多个大小相等的方阵,每个方阵都是单位矩阵的循环移位矩阵或全0矩阵,非常便于存储器的存储和寻址,从而大大降低了LDPC码的编译码复杂度,并且具有重复累计结构的准循环LDPC码能够实现线性复杂度的快速编码。因此,目前实际中所使用的LDPC码大都使用这种校验矩阵构造方式。
QC-LDPC码的主要构造方法包括有限几何法,均衡不完全区组设计法和三 维立方体网格图法:其中,三维立方体网格图法作为一种特殊的均衡不完全区 组设计方法,可以使构造出的码字达到girth值为10。QC.LDPC码的girth值和 环分布是影响码字性能的重要因素。QC.LDPC码的生成矩阵也具有准循环形 式,这决定了它可以利用移位寄存器进行编码。双对角线结构的QC.LDPC码 可以由校验矩阵直接生成码字,因此能实现简单快速编码。
为了在分布式视频编码(DVC)中取得更好的压缩性能,将校验节点的合并和分裂进行有机结合,提出了一种码率自适应LDPC(RALDPC)编码新方法.该方法首先基于PEG算法构造高压缩比LDPC码字;然后由行均匀分裂得到低压缩比码字;最后通过合并或分裂校验矩阵对应的行来适度调整码率.为保证码字性能,还提出了校验节点合并的3个限制条件,并基于RALDPC提出了一种码率自适应DVC编码方案.
通过对LDPC码和RA码构造的深入研究,发现基于BP译码的系统RA 码编码器中的交织器对译码性能影响巨大,只要交织器参数满足一定关系就能保 证其校验矩阵无小环,从而达到很好的译码性能。在很大的码长和码率范围内基于BP 译码的RA码的译码性能非常好。这些确定结构的交织器在短码情况下,能比随 机交织器提供更好的性能;而在长码的情况下,也没有损失性能。这些新交织器, 不仅优于现今的简单交织器,并且比随机结构交织器具有更确定的结构,因此, 对RA码来说是一种更好的选择。 特别地,基于线性同余和素数思想的新交织器具有更好的实用性。
三、MATLAB程序
RA-LDPC:
clc;
clear;
close all;
warning off;
frame_num = 20;
min_errors = 10;
NoisedB = [0 0.5 1 1.5 2];
BER1 = zeros(size(NoisedB));
ind = 0;
for k = 1:length(NoisedB)
N0 = 1/10^(4*NoisedB(k)/10);
errors = 0;
frames = 0;
ind = 0;
while errors < min_errors || frames < frame_num
ind = ind + 1;
errors
ind
%产生随机数
x = round(rand(1,100));
%编码
[y,g] = func_RA_LDPC_Enc(x);
%BPSK
z = 2*y-1;
%AWGN噪声
rx = z + sqrt(N0)*(randn(1,length(z))+i*randn(1,length(z)));
llr = (abs(rx-1).^2-abs(rx+1).^2);
%译码
[decoded_llrs] = func_RA_LDPC_Dec(llr,g,999);
%计算误码率
errors = errors + sum(x ~= (decoded_llrs < 0));
frames = frames+1;
end
BER1(k) = errors/(frames*100)
end
figure;
semilogy(NoisedB,BER1,'r-*');
grid on
xlabel('SNR(db)');
ylabel('BER');
legend('RA-LDPC');
save RA.mat NoisedB BER1
QC-LDPC:
clc;
clear;
close all;
warning off;
%%
%参数的初始化
q = 127;
M = 5*q; %矩阵行数
N = 10*q;%矩阵列数
a = 2;
b = 7;
%QC构造稀疏矩阵
H = func_QC_H(a,b,q,M,N);
%将系数矩阵转换为生成矩阵
[G,valid] = func_H2G(H);
[N1,N2] = size(G);
%仿真信噪比
NoisedB = [0 0.5 1 1.5 2];
frame_num = 20;
All_frame = N2*frame_num;
for i = 1 : length(NoisedB)
Num_err = 0;
SNR = 10^(NoisedB(i)/10);
sigma = 1/sqrt(SNR);
for k = 1:frame_num
i
k
%产生随机数据作为测试数据
x = (sign(randn(1,size(G,1)))+1)/2;
%LDPC编码
y = mod(x*G,2);
%BPSK映射
z = 2*y-1;
%加入噪声
z = z + sigma*randn(1,N);
%LDPC译码
z_hat = func_Ldpc_dec(z,sigma,H);
x_hat = z_hat(M+1:N);
x_hat1= x_hat';
%误码率统计
Num_err = Num_err + sum(xor(x,x_hat1));
end
BER1(i) = Num_err/All_frame;
if BER1(i) < 0.01/All_frame
BER1(i) = 0.06/All_frame;
end
end
figure;
semilogy(NoisedB,BER1,'r-*');
grid on
xlabel('SNR(db)');
ylabel('BER');
legend('QC-LDPC');
save QC.mat NoisedB BER1
四、仿真结论分析
两者的误码率对比如下:
A14-07