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

1602 篇文章 1618 订阅

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)

二、核心程序

%******************************************************
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:1:n_frame         % variance是单独加在同相(正交相)的噪声功率普密度
       [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
up29

三、测试结果

matlab2021a测试结果如下

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

fpga和matlab

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

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

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

打赏作者

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

抵扣说明:

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

余额充值