m基于BP译码算法的QC-LDPC误码率matlab仿真,对比不同译码迭代次数的误码率性能

简介: m基于BP译码算法的QC-LDPC误码率matlab仿真,对比不同译码迭代次数的误码率性能

1.算法仿真效果
matlab2022a仿真结果如下:

ff9ba70d4bdc1e03ec8885bf6482b3c9_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

2.算法涉及理论知识概要

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

LDPC ( Low-density Parity-check,低密度奇偶校验)码是由 Gallager 在1963 年提出的一类具有稀疏校验矩阵的线性分组码 (linear block codes),然而在接下来的 30 年来由于计算能力的不足,它一直被人们忽视。1996年,D MacKay、M Neal 等人对它重新进行了研究,发现 LDPC 码具有逼近香农极限的优异性能。并且具有译码复杂度低、可并行译码以及译码错误的可检测性等特点,从而成为了信道编码理论新的研究热点。Mckay ,Luby 提出的非正则 LDPC 码将 LDPC 码的概念推广。非正则LDPC码 的性能不仅优于正则 LDPC 码,甚至还优于 Turbo 码的性能,是目前己知的最接近香农限的码。Richardson 和 Urbank 也为 LDPC 码的发展做出了巨大的贡献。首先,他们提出了一种新的编码算法,在很大程度上减轻了随机构造的 LDPC 码在编码上的巨大运算量需求和存储量需求。其次,他们发明了密度演进理论,能够有效的分析出一大类 LDPC 译码算法的译码门限。仿真结果表明,这是一个紧致的译码门限。最后,密度演进理论还可以用于指导非正则 LDPC码 的设计,以获得尽可能优秀的性能。

    在 LDPC 码的 Tanner 图中,从一个顶点出发,经过不同顶点后回到同一个顶点的一些“边”组成的回路称为“环”。经过的边的个数称为环的长度。所有环中周长最小的环称为 LDPC码的围长(girth) ‎。Tanner 图中的环不可避免的会对译码结果造成非常大的干扰。由于迭代概率译码会使信息在节点间交互传递,若存在环,从环的某一个节点出发的信息会沿着环上的节点不断传递并最终重新回到这个节点本身,从而使得节点自身信息不断累加,进而使得译码的最终结果失败的概率变大。显然,环长越小,信息传递回本身所需走的路径就越短,译码失败的概率就变得越高。Tanner 图形成一个环至少需要 4 个节点组成4 条相连的边,即环长最小为4,这类短环对码字的译码结果干扰最大。定义 LDPC码的行列(RC)约束为:两行或两列中不存在元素 1 的位置有 1 个以上相同的情况。显然,满足 RC 约束的 LDPC 码最低就是 6 环,去除了4 环的干扰。由于4环的检测以及避免最为简单并且必要,因此绝大部分构造方法都会满足 RC 约束。而构造大圈长的码字则需要精确的设计。

4d61f402d8d47998a37e882d4eb20fb3_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

   LDPC仿真系统图LDPC 码的奇偶校验矩阵H是一个稀疏矩阵,相对于行与列的长度,校验矩阵每行、列中非零元素的数目(我们习惯称作行重、列重)非常小,这也是LDPC码之所以称为低密度码的原因。由于校验矩阵H的稀疏性以及构造时所使用的不同规则,使得不同LDPC码的编码二分图(Taner图)具有不同的闭合环路分布。而二分图中闭合环路是影响LDPC码性能的重要因素,它使得LDPC码在类似可信度传播(Belief ProPagation)算法的一类迭代译码算法下,表现出完全不同的译码性能。当H的行重和列重保持不变或尽可能的保持均匀时,我们称这样的LDPC码为正则LDPC码,反之如果列、行重变化差异较大时,称为非正则的LDPC码。研究结果表明正确设计的非正则LDPC码的性能要优于正则LDPC。根据校验矩阵H中的元素是属于GF(2)还是GF(q)(q=2p),我们还可以将LDPC码分为二元域或多元域的LDPC码。研究表明多元域LDPC码的性能要比二元域的好。

   在LDPC码的校验矩阵中,如果行列重量固定为(P,Y),即每个校验节点有Y个变量节点参与校验,每个变量节点参与P个校验节点,我们称之为正则LDPC码。Gallager最初提出的Gallager码就具有这种性质。从编码二分图的角度来看,这种LDPC码的变量节点度数全部为P,而校验节点的度数都为Y。我们还可以适当放宽上述正则LDPC码的条件,行列重量的均值可以不是一个整数,但行列重量尽量服从均匀分布。另外为了保证LDPC码的二分图上不存在长度为4的圈。我们通常要求行与行以及列与列之间的交叠部分重量不超过1,所谓交叠部分即任意两列或两行的相同部分。我们可以将正则LDPC码校验矩阵H的特征概括如下:
  1. H的每行行重固定为P,每列列重固定为Y。
  2. 任意两行(列)之间同为1的列(行)数(称为重叠数)不超过1,即H矩阵中不含四角为1 的小方阵,也即无4线循环。
  3. 行重P和列重Y相对于H的行数M、列数N很小,H是个稀疏矩阵。

在正则LDPC码的校验矩阵中。行重和列重的均值保持不变,所以校验矩阵中1的个数随着码长的增加而线性增长,整个校验矩阵的元素个数则成平方增长。当码长达到一定长度时,校验矩阵H是非常稀疏的低密度矩阵。对于正则的LDPC码,MacKay给出了以下两个结论:

  1. 对于任意给定列重大于3的LDPC码,存在某个小于信道传输容量且大于零的速率r ,当码长足够长时,可以实现以小于r且不为零的速率无差错的传输。也就是说任意给定一个不为零的传输速率r,存在一个小于相应香农限的噪声门限,当信道噪声低于该门限且码长足够长的时候,可以实现以r速率无差错的传输。
  2. 当LDPC码的校验矩阵H的列重Y不固定,而是根据信道特性和传输速率来确定时,则一定可以找到一个最佳码,实现在任意小于信道传输容量的速率下无差错的传输。

    对于LDPC 码的每个变量节点来说,当它参与的校验式越多,即度数Y越大,则它可以从更多的校验节点获取信息,也就可以更加准确的判断出它的正确值。对于H的每个校验节点来说,当它涉及的变量节点越少,即度数P越小,则它可以更准确的估计相关变量节点的状态。这种情况对于正则LDPc码来说是一对不可克服的矛盾,于是Luby,Mitzemnacher等人就引入了非正则LDPC码的概念。

3.MATLAB核心程序

clear;
close all;
warning off;
addpath(genpath(pwd));
global inters;
inters= 2;
%%
%参数的初始化
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:1:5];
LL        = [200,150,100,50,30,20,15,10,10,10]*4;
All_frame = N2;
 
for i = 1 : length(NoisedB)
    
    Num_err = 0;
    xx     = 10^(NoisedB(i)/10);
    sigma   = 1/sqrt(xx);
    idx     = 0;
    while Num_err<LL(i)
        [Num_err,i]
        idx= idx+1;
        %产生随机数据作为测试数据
        x = (sign(randn(1,size(G,1)))+1)/2;
        %LDPC编码
        y = mod(x*G,2);
        %BPSK映射
        z = 2*y-1;
        %加入噪声
        z = awgn(z,NoisedB(i),'measured');
        %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/idx;
end
figure;
semilogy(NoisedB,BER1,'r-*');
grid on
xlabel('SNR(db)');
ylabel('BER');
legend('QC-LDPC');
        
if inters==1
   save QC1.mat NoisedB BER1      
end    
if inters==2
   save QC2.mat NoisedB BER1      
end 
if inters==5
   save QC5.mat NoisedB BER1      
end   
if inters==10
   save QC10.mat NoisedB BER1      
end   
if inters==30
   save QC30.mat NoisedB BER1      
end   
相关文章
|
12天前
|
缓存 算法 物联网
基于AODV和leach协议的自组网络平台matlab仿真,对比吞吐量,负荷,丢包率,剩余节点个数,节点消耗能量
本系统基于MATLAB 2017b,对AODV与LEACH自组网进行了升级仿真,新增运动节点路由测试,修正丢包率统计。AODV是一种按需路由协议,结合DSDV和DSR,支持动态路由。程序包含参数设置、消息收发等功能模块,通过GUI界面配置节点数量、仿真时间和路由协议等参数,并计算网络性能指标。 该代码实现了节点能量管理、簇头选举、路由发现等功能,并统计了网络性能指标。
133 73
|
1天前
|
传感器 算法 C语言
基于无线传感器网络的节点分簇算法matlab仿真
该程序对传感器网络进行分簇,考虑节点能量状态、拓扑位置及孤立节点等因素。相较于LEACH算法,本程序评估网络持续时间、节点死亡趋势及能量消耗。使用MATLAB 2022a版本运行,展示了节点能量管理优化及网络生命周期延长的效果。通过簇头管理和数据融合,实现了能量高效和网络可扩展性。
|
1天前
|
算法 数据安全/隐私保护
星座图整形技术在光纤通信中的matlab性能仿真,分别对比标准QAM,概率整形QAM以及几何整形QAM
本文介绍了现代光纤通信系统中的星座图整形技术,包括标准QAM、概率整形QAM和几何整形QAM三种方法,并对比了它们的原理及优缺点。MATLAB 2022a仿真结果显示了不同技术的效果。标准QAM实现简单但效率有限;概率整形QAM通过非均匀符号分布提高传输效率;几何整形QAM优化星座点布局,增强抗干扰能力。附带的核心程序代码展示了GMI计算过程。
8 0
|
13天前
|
算法
基于ACO蚁群优化的UAV最优巡检路线规划算法matlab仿真
该程序基于蚁群优化算法(ACO)为无人机(UAV)规划最优巡检路线,将无人机视作“蚂蚁”,巡检点作为“食物源”,目标是最小化总距离、能耗或时间。使用MATLAB 2022a版本实现,通过迭代更新信息素浓度来优化路径。算法包括初始化信息素矩阵、蚂蚁移动与信息素更新,并在满足终止条件前不断迭代,最终输出最短路径及其长度。
|
16天前
|
算法 数据挖掘 vr&ar
基于ESTAR指数平滑转换自回归模型的CPI数据统计分析matlab仿真
该程序基于ESTAR指数平滑转换自回归模型,对CPI数据进行统计分析与MATLAB仿真,主要利用M-ESTAR模型计算WNL值、P值、Q值及12阶ARCH值。ESTAR模型结合指数平滑与状态转换自回归,适用于处理经济数据中的非线性趋势变化。在MATLAB 2022a版本中运行并通过ADF检验验证模型的平稳性,适用于复杂的高阶自回归模型。
|
16天前
|
机器学习/深度学习 算法
基于心电信号时空特征的QRS波检测算法matlab仿真
本课题旨在通过提取ECG信号的时空特征并应用QRS波检测算法识别心电信号中的峰值。使用MATLAB 2022a版本实现系统仿真,涵盖信号预处理、特征提取、特征选择、阈值设定及QRS波检测等关键步骤,以提高心脏疾病诊断准确性。预处理阶段采用滤波技术去除噪声,检测算法则结合了一阶导数和二阶导数计算确定QRS波峰值。
|
2月前
|
安全
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
本文介绍了2023年高教社杯数学建模竞赛D题的圈养湖羊空间利用率问题,包括问题分析、数学模型建立和MATLAB代码实现,旨在优化养殖场的生产计划和空间利用效率。
123 6
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
|
2月前
|
存储 算法 搜索推荐
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
本文提供了2022年华为杯数学建模竞赛B题的详细方案和MATLAB代码实现,包括方形件组批优化问题和排样优化问题,以及相关数学模型的建立和求解方法。
95 3
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
|
2月前
|
数据采集 存储 移动开发
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码
本文介绍了2023年五一杯数学建模竞赛B题的解题方法,详细阐述了如何通过数学建模和MATLAB编程来分析快递需求、预测运输数量、优化运输成本,并估计固定和非固定需求,提供了完整的建模方案和代码实现。
71 0
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码
|
5月前
|
数据安全/隐私保护
耐震时程曲线,matlab代码,自定义反应谱与地震波,优化源代码,地震波耐震时程曲线
地震波格式转换、时程转换、峰值调整、规范反应谱、计算反应谱、计算持时、生成人工波、时频域转换、数据滤波、基线校正、Arias截波、傅里叶变换、耐震时程曲线、脉冲波合成与提取、三联反应谱、地震动参数、延性反应谱、地震波缩尺、功率谱密度
下一篇
无影云桌面