基于遗传算法的256QAM星座图的最优概率整形matlab仿真,对比优化前后整形星座图和误码率

10 阅读3分钟

1.算法仿真效果

matlab2022a仿真结果如下(完整代码运行后无水印):

 

GA优化曲线:

 

0f3f3bd61f96d84b8225ede5bc6dd630_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.jpg

 

优化前后星座图对比

 

429c12cdded03e8f5f40463d09134510_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.jpg

 

优化前后误码率对比

 

9e5cb931435c1b886440a483209d70cd_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.jpg

 

仿真操作步骤可参考程序配套的操作视频。

 

2.算法涉及理论知识概要

       256QAM 是一种高阶调制方式,星座图中有256个星座点,每个星座点对应 8 比特信息。传统的 256QAM 采用均匀分布。通过改变改变星座图不同位置符号出现的概率,让外圈星座点出现频率降低,有利于减小平均功率,相当于增加了最小欧氏距离,从而有更好的传输性能。这就是我们所说的概率星座整形(PCS)了。它究竟有什么好处呢?

 

  1. 具有整形增益。

 

  1. 有望达到更高的传输容量,显著提升频谱效率。

 

  1. 传输速率可以灵活调整,以完美适配不同的传输信道。

 

  1. 无须多种支持多种QAM映射,仅使用方形QAM调制,需调整整形系数

 

        PCS的关键在于如何对均匀概率的输出映射成非均匀概率幅度分布,而且该概率分布还应该是最优的。理论上可以证明Maxwell-Boltzman分布对于方形QAM整形是最优的概率分布。概率星座整形一般使用如下的公式完成:

 

ef3ccfcc7ff82a1c71276cbb06f765a1_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

 

       参数v为整形因子。在本课题中,将通过GA优化算法,搜索最佳的参数v,进一步提升概率整形后的系统性能。以 256QAM 的误码率(BER)作为适应度函数。误码率越低,表明该概率整形因子  对应的星座点概率分布越优。在实际计算时,可通过蒙特卡罗仿真来估计误码率。具体步骤为:依据当前的  计算每个星座点的发送概率,生成大量发送符号,经过加性高斯白噪声(AWGN)信道传输,接收符号并进行解调,统计错误比特数,进而计算误码率。

 

       通过GA算法,获得最优的参数v,以降低256QAM 的误码率。

 

3.MATLAB核心程序 `MAXGEN = 15;

NIND   = 20;

Nums   = 1;

Chrom  = crtbp(NIND,Nums*10);

 

%sh

Areas = [];

for i = 1:Nums

    Areas = [Areas,[0;0.25]];% 优化概率整形参数v

end

FieldD = [rep([10],[1,Nums]);Areas;rep([0;0;0;0],[1,Nums])];

 

gen   = 0;

for a=1:1:NIND

    %计算对应的目标值

    X       = rand(1,Nums)/10;%初始值

    [epls]  = func_obj(X);

    E       = epls;

    Js(a,1) = E;

end

 

Objv  = (Js+eps);

gen   = 0;

 

%%

while gen < MAXGEN  

      gen

      Pe0 = 0.998;

      pe1 = 0.002;

 

      FitnV=ranking(Objv);    

      Selch=select('sus',Chrom,FitnV);    

      Selch=recombin('xovsp', Selch,Pe0);   

      Selch=mut( Selch,pe1);   

      phen1=bs2rv(Selch,FieldD);   

 

      for a=1:1:NIND  

          X     = phen1(a,:);

          %计算对应的目标值

          [epls]= func_obj(X);

          E       = epls;

          JJ(a,1) = E;

      end

      

      Objvsel=(JJ);    

      [Chrom,Objv]=reins(Chrom,Selch,1,1,Objv,Objvsel);   

      gen=gen+1;

 

      %保存参数收敛过程和误差收敛过程以及函数值拟合结论

 

      Error(gen) = mean(JJ) ;

      [V,I]      = min(JJ);

 

      VVV(gen)   = phen1(I,:);

      VVV2(gen)  = mean2(phen1) ;

end

 

figure;

plot(Error,'linewidth',2);

grid on

xlabel('迭代次数');

ylabel('遗传算法优化过程');

legend('Average fitness');

 

[V,I] = min(JJ);

VV     = phen1(I,:);

 

 

save GA_OPT.mat Error VV`