RA-LDPC编译码和QC-LDPC编译码的误码率matlab仿真

Posted fpga和matlab

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RA-LDPC编译码和QC-LDPC编译码的误码率matlab仿真相关的知识,希望对你有一定的参考价值。

目录

一、理论基础

二、案例背景 

三、MATLAB程序

四、仿真结论分析


一、理论基础

参考资料:

程序流程:

RA-LDPC

参考资料:

程序流程:

 

二、案例背景 

       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 

以上是关于RA-LDPC编译码和QC-LDPC编译码的误码率matlab仿真的主要内容,如果未能解决你的问题,请参考以下文章

码长6075的qc-ldpc编译码的MATLAB误码率仿真

RSRS编译码理论与误码率性能matlab仿真和分析

RSRS编译码理论与误码率性能matlab仿真和分析

BCHBCH编译码理论与误码率性能matlab仿真和分析

TurboTurbo编译码理论与误码率matlab仿真和分析

HammingHamming编译码理论与误码率matlab仿真和分析