当前位置:   article > 正文

基于LDPC+64QAM的通信链路误码率matlab仿真_ldpc,64qam

ldpc,64qam

up目录

一、理论基础

二、核心程序

三、测试结果


一、理论基础

       基于LDPC(低密度奇偶校验码)和64QAM(64调制解调)的通信链路是一种在数字通信系统中常见的配置,旨在实现高速数据传输和可靠性。下面将介绍这种通信链路的基本原理和结构:

1. LDPC 编码: LDPC 是一种通道编码技术,用于提高数据传输的可靠性。它是一种纠错码,通过在数据中添加校验位来检测和纠正传输过程中的错误。LDPC 码的主要特点是具有低密度奇偶校验矩阵,这使得编解码的复杂度相对较低,但具有出色的纠错性能。

2. 64QAM 调制: 64QAM 是一种调制技术,用于将数字数据映射到模拟信号中。它可以在有限的频带宽度内传输更多的数据,因此适用于高速数据传输。64QAM 将输入的数字比特流分成若干组,每组编码为一个复数点,其中64 表示了复数点的数量。每个点可以在正交调制的I(实部)和Q(虚部)分量上具有不同的振幅和相位,从而可以传输更多的比特。

3. 通信链路结构: 基于 LDPC + 64QAM 的通信链路包括以下主要组件:

  • 数据源: 这是要传输的数字数据源,通常是用户生成的信息。

  • LDPC 编码器: 数据从数据源经过 LDPC 编码,增加冗余信息以进行错误检测和纠正。

  • 调制器(Modulator): LDPC 编码后的数据经过 64QAM 调制,将数字数据映射到模拟信号。

  • 信道: 信号在通信信道中传输,可能会受到噪声、失真和干扰等影响。

  • 解调器(Demodulator): 接收端的解调器负责将接收到的信号从模拟信号还原为数字数据。

  • LDPC 解码器: 解调后的数据经过 LDPC 解码,以检测和纠正传输中的错误。

  • 数据接收: 最终的解码数据被发送给数据接收器,用于后续的数据处理或显示。

      信道编码是数字通信系统的重要组成部分。LDPC信道编码技术是编码界的重要成果之一。1/2码率的二元LDPC码在AWGN信道下的性能距信息理论中的Shannon极限仅差0.0045dB,它是目前距Shannon极限最近的纠错码。Gallagar在1962年提出LDPC码,1996年经过Mackey、Spielman和Wiberg等人的再发现后,LDPC码以其性能优越、全并行迭代译码结构、便于硬件实现等优点,在无线通信、存储工业等领域得到了广泛应用。

       LDPC 码作为纠错能力最强的信道编码,在深空通信中具有广泛的应用前景。研究了LDPC 码的BP 译码算法,并对该算法进行了仿真,分析了LDPC 码的误码率随BP 译码迭代次数的演化情况,提出了一种改进的B P 译码算法。经过仿真验证,改进的BP 译码算法,在信噪比低于译码阈值时能够大幅地减少译码迭代次数,降低运算复杂度,而性能却几乎没有降低。
       校验矩阵的构造是编码的前提,采用了随机构造法构造,并对矩阵的多种变换方法进行分析,比较了优缺点。译码算法是LDPC码的关键,译码复杂度的大小直接影响系统的实现。主要分硬判决译码、软判决和复合译码。
       一个LDPC码v vv 是一种(n nn,k kk)线性分组码,码长为n nn,信息序列长度为k kk,可由其校验矩阵H所唯一确定,校验矩阵中1的数目远小于0的数目,具有稀疏性。H的维数是m × n m\times nm×n,每一行对应一个校验方程(也称校验节点),每一列对应码字的一位(也称变量节点)。每一行中非零元素的个数称为行重,每一列中非零元素的个数称为列重。
       DPC码的译码方法可以分为两大类:基于硬判决的译码和基于软判决的译码。基于硬判决的译码运算量小比较实用;而软判决译码采用了后验概率信息,并通过迭代运算,使得LDPC码的性能得以逼近香农限。本博文主要关注基于软判决的译码及其改进算法。

       概率域上的BP算法包含了大量的连乘运算,硬件实现时具有较高的计算复杂度,资源消耗大。将概率信息用似然比表示,就得到对数域上的BP算法,大量的乘法运算可以转化为加法运算。
(1)信道初始消息:

(2)校验节点传递给变量节点的外信息: 

(3)变量节点传递给校验节点的外信息:

 (4)译码判决,经过迭代后变量节点的后验概率相应的修改为:

故后验概率大于0,将vi判决为0,反之判决为1。(对数值大于0,说明真数大于1,及分子对应的vi为0的概率大于分母对应vi为1的概率,故将vi判决为0)

二、核心程序

  1. %******************************************************
  2. for EbN0=start:step:finish;
  3. Liner_EbN0=10^(EbN0/10);
  4. pe_number=0;
  5. variance=0.5*(Eb/Liner_EbN0)/r; % 噪声方差, 来源于a^2/(2*delta^2)=Liner_EbN0,a^2信息幅值的平方即比特能量, 2*delta^2=N0. N0/r得到编码后的噪声功率谱密度
  6. for number_frame=1:1:n_frame % variance是单独加在同相(正交相)的噪声功率普密度
  7. [EbN0,number_frame]
  8. x_msg = (sign(randn(1,size(G,1)))+1)/2; % random bits
  9. x_code_msg= mod(x_msg*G,2); % coding
  10. in=x_code_msg;
  11. x_tx_msg= QAM64m(in); % 16QAM modulation
  12. real_tx=real(x_tx_msg); imag_tx=imag(x_tx_msg);
  13. waveform= x_tx_msg+sqrt(variance)*( randn(size(real_tx)) + randn(size(imag_tx))*i ) ; % AWGN transmission
  14. [f0,f1]=QAM64d(waveform,2*variance);
  15. LLR=log(f0./(f1+eps));
  16. [z_hat, success, k] = log_ldpc_decode(H,LLR,max_iter);; % likelihoods
  17. x_dec_msg = z_hat(1:size(G,1)); % 码率1/2 时使用
  18. pe_number=pe_number+sum(x_msg~=x_dec_msg);
  19. current_time=fix(clock);
  20. 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))
  21. Q=Q+1;
  22. fprintf('\n\n')
  23. end
  24. pe=pe_number/(L_frame*n_frame);
  25. plot_pe=[plot_pe,pe];
  26. end
  27. up29

三、测试结果

matlab2021a测试结果如下

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/400760
推荐阅读
相关标签
  

闽ICP备14008679号