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

Posted fpga和matlab

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于LDPC+64QAM的通信链路误码率matlab仿真相关的知识,希望对你有一定的参考价值。

up目录

一、理论基础

二、核心程序

三、测试结果


一、理论基础

      信道编码是数字通信系统的重要组成部分。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测试结果如下

以上是关于基于LDPC+64QAM的通信链路误码率matlab仿真的主要内容,如果未能解决你的问题,请参考以下文章

通信算法之三十三:5G NR LDPC仿真链路

基于64QAM的LDPC编译码算法

通信算法之五十五:基带算法链路设计

基于调制误差比的自适应调制matlab仿真,自适应调制包括4QAM,16QAM和64QAM

通信算法之四:九种调试方式理论误码率与实际误码率

误码率仿真基于matlab LDPC编译码误码率仿真含Matlab源码 2079期