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

Posted fpga&matlab

tags:

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

1.算法简介

       为满足高的数据需求,提出一种新的QC-LDPC码.该校验矩阵的校验部分为近似下三角结构,上对角线下面的非零元素可以任意放置,因此是一种半确定的结构.这种结构的码设计灵活,性能也极高.通过对该码的不同编译码算法进行比较,提出更有效的编译码算法.MATLAB仿真表明,此结构的QC-LDPC码比双对角线结构的QC-LDPC码具有更低的误码率,快速编码算法和Offset BP-based译码算法的有效性大大提高,且可以得到近似甚至超过传统算法的可靠性.

2.部分核心代码

clc; clear all;
load G;
load H;
%测试量化级数对误码性能的影响
codeword=zeros(1,6075);  %码字长度
cBit=zeros(1,675);       %校验位长度
rate=5402/6075;          %码率
SNR=[1:6];
sNum=length(SNR);
EbNo=10.^(0.1*SNR);
sigma=1./(sqrt(2*rate*EbNo));
maxcycle=10000;              %-------- 设定试验次数--------
maxblockerr=10;              %-------- 设定最大错误帧数--------
errornum=zeros(1,sNum);
numoferrorFrame=zeros(1,sNum);
numofFrame=zeros(1,sNum);
MS_BER=zeros(1,sNum);
MS_FER=zeros(1,sNum);
decInter=40;                %--------选择一个合适的迭代次数----------------

m=7;                      %-----------设置量化位数 m=3 5 7 9 (不含符号位) -----------------
unitarydata=zeros(1,6075); %存储归一化后的数据
a=zeros(1,6075);           %存储mbit量化后的数据
c=zeros(1,6075);
tic
for i=1:sNum
    cyc=0; 
    blockerr=0;
    while(cyc<maxcycle & blockerr<maxblockerr)
        cyc=cyc+1
        mBit=rand(1,5402)>=0.5;
        codeword=mod(mBit*G,2);
        waveform=bpsk(codeword,1);   % 1~~~~~-1;
                                     % 0~~~~~1;
        
     %--------------接收到的加噪后的码字------------
        re_waveform=waveform+sigma(i)*randn(1,6075);    
        jieduan_data=re_waveform;
        maxdata=1.8;
        for num=1:6075
            if re_waveform(num)>1.8
                jieduan_data(num)=1.8;
            elseif re_waveform(num)<-1.8
                jieduan_data(num)=-1.8;
            end
        end
        unitarydata=jieduan_data./maxdata;      % 将每位数据进行归一化
        a=unitarydata.*(2^m-1);                % 转换为跟量化级数相关的数据
        c=floor(a);                            % 取整
        
     %--------------最小和译码后误码率--------------------
        de_code=MinSumDecoder(c, H, decInter,1);


        errors=find(de_code~=codeword);
        eacherrornum=length(errors);
        errornum(i)=errornum(i)+eacherrornum;
        if eacherrornum~=0
            blockerr= blockerr+1;
        end
        blockerr
    end
    numoferrorFrame(i)=blockerr;
    numofFrame(i)=cyc;
    MS_BER(i)=errornum(i)/(6075*cyc)
    MS_FER(i)=numoferrorFrame(i)/cyc
    
end
toc

figure
plot(SNR,MS_BER,'g--*');
set(gca,'Yscale','log');
grid on;
ylabel('BER');
xlabel('SNR');
title('码长6075的QC-LDPC码译码误码率曲线');

3.仿真演示

4.相关参考文献

[1]刘丽, 王中训. 一种有效的QC-LDPC码设计及编译码仿真实现[C]// 中南大学出版社有限责任公司. 中南大学出版社有限责任公司, 2011:1068.

C46

以上是关于码长6075的qc-ldpc编译码的MATLAB误码率仿真的主要内容,如果未能解决你的问题,请参考以下文章

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

编码译码基于matlab QC-LDPC码编码和译码含Matlab译码 2194期

LDPC-6编码码长对LDPC译码性能的影响分析——以BP译码算法为例进行matlab仿真

斐波那契LDPC基于斐波那契序列的QC-LDPC改进,译码采用LLR-BP译码算法

m基于大衍数无高阶环稀疏校验矩阵H构造算法和RMP消息传递的QC-LDPC性能matlab仿真

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