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

本文介绍了一种新型的QC-LDPC码,其校验矩阵采用半确定结构,具有高灵活性和性能。通过MATLAB仿真,研究了不同量化级数对误码率的影响,展示了量化编码和OffsetBP译码算法的改进效果。结果表明,该码在特定条件下表现出优于传统双对角线结构的误码性能。
摘要由CSDN通过智能技术生成

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

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fpga和matlab

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值