首页 > 其他分享 >通过matlab对比规则LDPC和非规则LDPC的误码率

通过matlab对比规则LDPC和非规则LDPC的误码率

时间:2023-03-12 12:11:59浏览次数:48  
标签:误码率 个数 LDPC 矩阵 校验 规则 节点

1.算法描述

       LDPC码是麻省理工学院Robert Gallager于1963年在博士论文中提出的一种具有稀疏校验矩阵的分组纠错码。几乎适用于所有的信道,因此成为编码界近年来的研究热点。它的性能逼近香农极限,且描述和实现简单,易于进行理论分析和研究,译码简单且可实行并行操作,适合硬件实现。

 

       LDPC 码可以通过校验矩阵 H 来唯一确定,校验矩阵 H 是大小为m*n 的稀疏矩阵,其中m 为校验位长度,n 为 LDPC 码码长,信息位长度为 k =n-m 。LDPC 码可以分为规则 LDPC 码和非规则 LDPC 码两种[3]。规则 LDPC 码的校验矩阵中不仅每一行中非零元素的个数是相同的,而且每一列中非零元素的个数也是相同的,而非规则LDPC码则不受到该条件的限制。下图给出的是一种规则LDPC码的校验矩阵。

 

 除了使用校验矩阵的方式来表示 LDPC 码之外,Tanner 在 1981 年提出的用 Tanner图来描述码字的方法可以形象的表示 LDPC 码的特性[4]。下图中表示的 Tanner 图与上图中的校验矩阵相对应。

 

 

 

 

 Tanner 图显示了 LDPC 码中校验节点和变量节点之间的连接关系。图中的校验节点对应校验矩阵 H 的行,变量节点对应校验矩阵 H 的列。与节点相连的边的数目被称为节点的度,从一个节点开始出发后又回到该节点时所经过的边的数目称之为循环长度,最短的循环长度被称为图的围长。

 

QC-LDPC码:

 

QC-LDPC码的校验矩阵是由全零阵,单位矩阵和循环右移的单位阵的子矩阵构成的。

 

QC-LDPC码校验矩阵的子矩阵具有如下特点:

 

(1) 每个子矩阵是一个方阵;

 

(2) 循环子矩阵的任一行(列)都是上一行(列)向右移动一位得到的,特别的,矩阵的第一行(列)由最后一行(列)循环右移一位得到;

 

(3) 循环矩阵完全可以由其第一行或者第一列决定。

 

根据这样的形式可以写出他的基矩阵,用来表示所构造的校验矩阵。

 

       如果校验矩阵中各行非零元素的个数相同,各列中非零元素的个数也相同,这样的LDPC码称为规则码,与规则码对照,如果校验矩阵的各行中非零元素的个数不同或各列中非零元素个数不同,此时的LDPC码称为非规则的LDPC码。

 

2.仿真效果预览

matlab2022a仿真结果如下:

 

 

 

 

3.MATLAB核心程序

 

Times    = 500;%仿真模拟次数,值越大,效果越好,仿真时间越长
R        = 0.5;%设置码率为1/2;
N        = 192;%设置奇偶校验矩阵大小     
M        = N*R;
EbN0     = [0 1 2 3 4 5 6];     %设置Eb/N0;
Max_iter = 100;                 %最大迭代次数
 
H  = func_Hgen(M,N);%产生奇偶校验矩阵
 
figure;
imshow(H,[]);title('奇偶校验均值H直观图');
for i=1:length(EbN0)
    
    
    Bit_err(i)    = 0; %设置误码率参数
    Num_err       = 0; %蒙特卡洛模拟次数
    Numbers       = 0; %误码率累加器
    iter_moy_temp = [];%叠加寄存器
    
    while Num_err <= Times    
        fprintf('Eb/N0 = %f\n', EbN0(i));
        Num_err
        Trans_data       = round(rand(N-M,1));           %产生需要发送的随机数
        [ldpc_code,newH] = func_Enc(Trans_data,H);       %LDPC编码
        u                = [ldpc_code;Trans_data];       %LDPC编码
        Trans_BPSK       = 2*u-1;                        %BPSK
      
        %通过高斯信道
        N0                   = 2*10^(-EbN0(i)/10);
        Rec_BPSK             = Trans_BPSK+sqrt(N0/2)*randn(size(Trans_BPSK));
        %LDPC译码 
        [vhat,nb_iter]       = func_Dec(Rec_BPSK,newH,N0,Max_iter);
        iter_moy_temp(end+1) = nb_iter;
        
        [nberr,rat]=biterr(vhat',u);
        Num_err=Num_err+nberr;
        Numbers=Numbers+1;
    end
    Bit_err(i)  = Num_err/(N*Numbers);
end

 

  

 

标签:误码率,个数,LDPC,矩阵,校验,规则,节点
From: https://www.cnblogs.com/51matlab/p/17207943.html

相关文章

  • Java基础 - 基本数据类型,基本数据类型之间的运算规则,引用数据类型
    基本数据类型:1.整数类型 类型:byte,short,int,long字节:byte1字节,short2字节,int4字节,long8字节容量:byte-128~127,short-3万~3万左右,-20亿~20亿左右,long特别大默认字......
  • 学会规则引擎Drools,让你早点下班
    前言现在有这么个需求,网上购物,需要根据不同的规则计算商品折扣,比如VIP客户增加5%的折扣,购买金额超过1000元的增加10%的折扣等,而且这些规则可能随时发生变化,甚至增加新的规......
  • m基于深度学习的OFDM信道估计和均衡算法误码率matlab仿真,对比了LS,MMSE以及LMMSE等传
    1.算法描述      随着无线通信的快速发展,5G正逐渐成长为支撑全社会各行业运作的大型基础性互联网络,其服务范围的大幅扩展对底层技术提出了诸多挑战,尤其是作为物......
  • .NET的RulesEngine(规则引擎)使用
    本文目录1、背景说明1.1规则引擎的使用场景1.2demo的代码说明2、演示2.1入门demo演示2.1.1代码展示2.1.2代码下载2.2规则参数说明2.2.1第一部分参数说明2.2.2第二......
  • Makefile 规则
    1.make后面不带参数默认执行的是第一个目标,而不是default,如下:$make===test===$catMakefiletest:@echo"===test==="default:@echo"===defaul......
  • m自适应FSK解调系统误码率matlab仿真
    1.算法描述FSK信号的解调也有非相干和相干两种,FSK信号可以看作是用两个频率源交替传输得到的,所以FSK的接收机由两个并联的ASK接收机组成。(1)相干解调相干解调是利用......
  • m自适应FSK解调系统误码率matlab仿真
    1.算法描述       FSK信号的解调也有非相干和相干两种,FSK信号可以看作是用两个频率源交替传输得到的,所以FSK的接收机由两个并联的ASK接收机组成。 (1)相干解调......
  • MySQL数据库如何在SQL语句中显式的使用排序规则?
    大家都知道,MySQL数据库在SQL语句中都是使用ORDERBY子句来进行排序,可以使用ASC或DESC关键字来指定排序的方式,即升序或降序。那如果要在排序时指定特定的排序规则,该怎么写......
  • MySQL如何指定字符集和排序规则?
    在MySQL中,可以使用以下两种方式指定字符集和排序规则:创建数据库或表时指定字符集和排序规则在创建数据库或表时,可以使用CHARACTERSET和COLLATE选项......
  • 变量得命名规则
    1.所有变量、方法类名:见名起意(看见名字要知道意思所以最好用英文)2.类成员变量:首字母小写和驼峰原则:moneySalary(除了第一个单词以为,后面得单纯首字母大写)3.局部变量:首字......