基于MATLAB的LDPC编译码误码率仿真,仿真调制为64QAM,对比不同译码迭代次数

目录

1.算法描述

2.仿真效果预览

3.MATLAB核心程序

4.完整MATLAB


1.算法描述

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

        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编码中,会用到一个叫做H矩阵的校验矩阵(Parity Check Matrix),比如,我们来看一个简单的H矩阵:

为了可以更加直观的理解H矩阵,可以借助Tanner图,来表示H矩阵: 

       64QAM(Quadrature Amplitude Modulation,相正交振幅调制),在使用同轴电缆的网络中,这种数字频率调制技术通常用于发送下行数据。64QAM在一个6MHz信道中,64QAM传输速率很高,最高可以支持38.015Mbps的峰值传输速率。但是,对干扰信号很敏感,使得它很难适应嘈杂的上行传输(从电缆用户到因特网)。参见QPSK, DQPSK, CDMA, S-CDMA, BPSK和VSB。
       它的调制效率高,对传输途径的信噪比要求高,具有带宽利用率高的特点,适合有线电视电缆传输;我国有线电视网中广泛应用的DVB-C 调制即QAM 调制方式。QAM是幅度和相位联合调制的技术,它同时利用了载波的幅度和相位来传递信息比特,不同的幅度和相位代表不同的编码符号。因此,在最小距离相同的条件下,QAM星座图中可以容纳更多的星座点即可实现更高的频带利用率。
 

2.仿真效果预览

matlab2022a仿真结果如下:

 

3.MATLAB核心程序

clc;
clear;
close all;
warning off;
addpath(genpath(pwd));
 
load G.mat;
load H.mat;
 
 
max_iter=1;
L_frame=size(G,1);
n_frame=200;
start=0;
step=2;
finish=12;
r=size(G,1)/size(G,2);
M=6;
Es=42;   % 一个64QAM符号能量 也是信号功率 
Eb=Es/M;
plot_pe=[];
Q=1;
 
%  err_list_index=1;  % used by test
axis_EbN0=start:step:finish;
%******************************************************
for EbN0=start:step:finish;
    Liner_EbN0=10^(EbN0/10);
    pe_number=0;
    variance=0.5*(Eb/Liner_EbN0)/r;  % 噪声方差, 来源于a^2/(2*delta^2)=Liner_EbN0,a^2信息幅值的平方即比特能量, 2*delta^2=N0.    N0/r得到编码后的噪声功率谱密度
   
    for number_frame=1:n_frame       
 
        [EbN0,number_frame]
        
        x_msg = (sign(randn(1,size(G,1)))+1)/2; % random bits
        x_code_msg= mod(x_msg*G,2); % coding 
        in=x_code_msg;
 
        x_tx_msg= QAM64m(in); % 16QAM modulation 
        
        real_tx=real(x_tx_msg);  imag_tx=imag(x_tx_msg);
 
        waveform= x_tx_msg+sqrt(variance)*( randn(size(real_tx)) + randn(size(imag_tx))*i ) ; % AWGN transmission 
        
        [f0,f1]=QAM64d(waveform,2*variance);
        LLR=log(f0./(f1+eps));
 
        [z_hat, success, k] = log_ldpc_decode(H,LLR,max_iter);; % likelihoods
        
      
        x_dec_msg = z_hat(1:size(G,1)); %  码率1/2 时使用
        
 
        
        pe_number=pe_number+sum(x_msg~=x_dec_msg);
        
        current_time=fix(clock);
       fprintf('i am working %g,total(%g)      %g年  %g月  %g日  %g时  %g分  %g秒\n\n',Q,(((finish-start)/step)+1)*n_frame,current_time(1),current_time(2),current_time(3),current_time(4),current_time(5),current_time(6))
        Q=Q+1;
        fprintf('\n\n')
        
    end
    pe=pe_number/(L_frame*n_frame);
    plot_pe=[plot_pe,pe];
end
 
semilogy(axis_EbN0,plot_pe,'b*-')
 
xlabel('Eb/N0 信号功率/噪声功率(db)')
ylabel('BER')
title('误码率')
grid on
 
if max_iter==50
   save R50.mat axis_EbN0 plot_pe
end
 
if max_iter==20
   save R20.mat axis_EbN0 plot_pe
end
 
 
if max_iter==5
   save R5.mat axis_EbN0 plot_pe
end
 
 
if max_iter==1
   save R1.mat axis_EbN0 plot_pe
end
 
A120

4.完整MATLAB

V

  • 0
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: LDPC(Low Density Parity Check)码是一种在现代通信系统中广泛使用的码技术。LDPC码具有高效的纠错能力和较低的误码率,因此在许多通信应用中广泛使用。为了评估LDPC码的性能,需要进行译码误码率仿真LDPC译码误码率仿真是通过模拟LDPC码在传输过程中产生的误码情况,来评估LDPC码的译码性能。在仿真中,需要确定LDPC码的码参数(比如码长、信息位数、校验位数和校验矩阵等)以及通信信道的参数(如信噪比、噪声功率谱密度、码率等)。然后,将LDPC码进行码,通过模拟传输过程将码后的LDPC码发送到接收端,对接收到的码字进行译码,计算译码错误率。 在进行LDPC译码误码率仿真时,需要采用一定的错误矫正策略来减少误码的数量。常用的策略包括迭代译码、硬判决译码、软判决译码等。通过比较不同策略的误码率性能,可以选择最优的译码策略,提高LDPC码的译码性能和通信系统的可靠性。 总之,LDPC译码误码率仿真是一个重要的性能评估方法,可以用来验证LDPC码在通信系统中的可靠性和纠错性能,并对LDPC码的码参数和译码策略进行优化。 ### 回答2: 自从Turbo码的提出以来,短的LDPC码一度被遗忘。但是,由于近年来LDPC码在高密度存储、数字电视、X(移动与WiFi混合网络)等许多领域被广泛使用,它们逐渐得到了人们的关注。误码率仿真是在这种背景下被广泛使用的方法之一。 LDPC码本身是一种线性卷积码,可以使用矩阵乘法计算出码字。码长和码率要求不同的应用场景需要不同的矩阵,因此需要评估每个矩阵的性能以选择最佳的一个。为此,需要进行误码率仿真。 使用MATLAB或Python等仿真工具,首先要设置好仿真环境,如信道模型、码字数量、SNR和仿真次数等。 一般推荐使用二进制对称信道(BSC)或二进制输入高斯信道(BEC)模型,因为它们可以很好地模拟实际通信信道的噪声和丢包率。 然后,将码之后的二进制消息添加噪声,并且通过LDPC译码器进行解码。解码后的信息和原始消息进行比较,统计误码率和比特误码率。 调整码器和译码器的参数,如所选矩阵的列数、行数、码长和窗口大小等,以找到最佳的一组参数。这通常需要多次仿真实验和参数调整。 最后,通过误码率仿真可以分析出LDPC码的性能,以及在不同条件下的码长、码率、噪声和丢包率等参数的最佳选择。 ### 回答3: LDPC(Low-Density Parity-Check)误码率仿真是一种广泛使用的误码率测试方法,它是通过LDPC码器和译码器进行实验来进行模拟仿真的。 在LDPC系统中,码器将信息位转换为一个更长的码序列,而译码器则对该序列进行解码并还原原始信息。在这个过程中,误码率是非常重要的参数,因为它反映了系统的可靠性。 误码率仿真通常包括以下步骤: 1. 首先,需要创建一个LDPC码器和译码器的模型。这可以使用MATLAB仿真软件来实现。模型应该能够生成可变码率和码字长度的码序列,并能够模拟发送和接收误差。 2. 然后,需要确定信噪比(SNR)的范围和步长。SNR是信号与噪声之间的比率,它决定了信号的质量。 3. 接下来,应该定义误码率的计算方式。常用的方法是比较原始信息和译码器输出的信息序列,并计算它们之间的差异。误码率可以表示为误码比例或误码率的百分比。 4. 然后,需要执行误码率仿真,并记录每个SNR值下的误码率数据。可以使用MATLAB的误码仿真工具箱来自动化这个过程。通常需要运行多次仿真以获得可靠的结果。 5. 最后,应该绘制误码率曲线来显示LDPC系统的性能。这个曲线可以用来评估系统的可靠性,并帮助选择最适合的码参数。 总而言之,LDPC译码误码率仿真是一个非常重要的过程,能够帮助设计和优化LDPC系统的性能。通过正确的仿真流程和数据分析,可以确保实际系统的高可靠性和优秀的性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

我爱C编程

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

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

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

打赏作者

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

抵扣说明:

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

余额充值