基于Autoencoder自编码的64QAM星座图整形调制解调通信系统性能matlab仿真

49 阅读2分钟

1.算法运行效果图预览

 

40513102b15c59c60c267ae99e1373af_82780907_202309182348460665247485_Expires=1695052726&Signature=1AiSyGZJMp7IcoU3MHtEVJJFLGw%3D&domain=8.jpeg

09b79ce9fa701fc1956c9d761be4efc0_82780907_202309182348460675244728_Expires=1695052726&Signature=wBNRuKInNqejNLFdfNmQB7W9OBY%3D&domain=8.jpeg   f299fd335a175d978187b7bbfcc3c60a_82780907_202309182348460926920790_Expires=1695052726&Signature=Il0jHrIRWlVoRz8BkMIbNaK%2BA%2Bg%3D&domain=8.jpeg

2.算法运行软件版本

matlab2022a

 

 

3.算法理论概述

       自编码器(Autoencoder)是一种深度学习模型,可以通过无监督学习的方式来学习数据的低维表示。64QAM星座图整形调制解调通信系统是一种数字通信系统,可以在有限的带宽资源下实现高速数据传输。

b0d46186834f4adc890b1aae46eca908_82780907_202309182350050519659480_Expires=1695052805&Signature=WqYKR%2BnlGtoGQLPlVLjhb0jb6a8%3D&domain=8.png   b7c4d3fe8ee4d13906b230b8f305028c_82780907_202309182350050535852572_Expires=1695052805&Signature=2u9TYNg%2BaGhg5Uy7i472EcuaoPQ%3D&domain=8.png

4.4 实现过程

       首先,需要对输入的星座图数据进行预处理,包括数据格式转换、归一化等。预处理过程可以提高模型的鲁棒性和准确性。接下来,需要利用已知的星座图数据集对Autoencoder自编码器进行训练。在训练过程中,需要选择合适的损失函数和优化算法,以提高模型的准确性和泛化能力。        在模型训练完成后,需要利用测试数据集对模型进行测试。测试过程中,需要计算模型的准确性、召回率、精确度和F1值等指标,以评估模型的性能。

 

       在实际应用中,需要实现实时解调。这可以通过将训练好的模型部署到实际系统中来实现。在实时解调过程中,需要将接收到的信号进行采样和量化,并将量化后的信号输入到模型中进行解调。解调后的数据可以通过解码器进行解码,得到原始数据。

 

        基于Autoencoder自编码的64QAM星座图整形调制解调通信系统可以应用于数字通信系统中,特别是在高速数据传输场景下。该系统可以通过学习星座图整形和解调的映射关系,实现更加准确和鲁棒的调制和解调过程,提高数据传输的可靠性和速度。

 

4.部分核心程序 `parse(p,varargin{:})

      layer.NoiseMethod = p.Results.NoiseMethod;

      layer.EbNo = p.Results.EbNo;

      layer.EsNo = p.Results.EsNo;

      layer.SNR = p.Results.SNR;

      layer.BitsPerSymbol = p.Results.BitsPerSymbol;

      layer.SignalPower = p.Results.SignalPower;

      layer.Name = p.Results.Name;

      if isempty(p.Results.Description)

        switch p.Results.NoiseMethod

          case 'EbNo'

            value = layer.EbNo;

          case 'EsNo'

            value = layer.EsNo;

          case 'SNR'

            value = layer.SNR;

        end

        layer.Description = "AWGN channel with " + p.Results.NoiseMethod ...

          + " = " + num2str(value);

      else

        layer.Description = p.Results.Description;

      end

      layer.Type = 'AWGN Channel';

 

      samplesPerSymbol = 1;

      if strcmp(layer.NoiseMethod, 'EbNo')

        EsNo = layer.EbNo + 10*log10(layer.BitsPerSymbol);

        layer.LocalSNR = EsNo - 10*log10(samplesPerSymbol);

      elseif strcmp(layer.NoiseMethod, 'EsNo')

        EsNo = layer.EsNo;

        layer.LocalSNR = EsNo - 10*log10(samplesPerSymbol);

      else

        layer.LocalSNR = layer.SNR;

      end

    end

   

 ....................................................

    function dLdX = ...

        backward(layer, X, Z, dLdZ,memory)

 

     

      dLdX = dLdZ;

    end

   

    function sl = saveobj(layer)

      sl.NoiseMethod = layer.NoiseMethod;

      sl.EbNo = layer.EbNo;

      sl.EsNo = layer.EsNo;

      sl.SNR = layer.SNR;

      sl.BitsPerSymbol = layer.BitsPerSymbol;

      sl.SignalPower = layer.SignalPower;

      sl.LocalEsNo = layer.LocalEsNo;

      sl.LocalSNR = layer.LocalSNR;

    end

   

    function layer = reload(layer,sl)

      layer.NoiseMethod = sl.NoiseMethod;

      layer.EbNo = sl.EbNo;

      layer.EsNo = sl.EsNo;

      layer.SNR = sl.SNR;

      layer.BitsPerSymbol = sl.BitsPerSymbol;

      layer.SignalPower = sl.SignalPower;

      layer.LocalEsNo = sl.LocalEsNo;

      layer.LocalSNR = sl.LocalSNR;

    end

  end

 

  methods (Static)

    function layer = loadobj(sl)

      if isstruct(sl)

        layer = AutoEncode_channel;

      else

        layer = sl;

      end

      layer = reload(layer,sl);

    end

  end

end`