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

66 阅读3分钟

1.算法仿真效果

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

 

1.jpeg

2.jpeg

3.jpeg

 

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

 

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

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

 

  1. 具有整形增益。

 

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

 

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

 

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

 

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

 

3a4afe7ae5620a6c837b0e0ce2df53c1_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)信道传输,接收符号并进行解调,统计错误比特数,进而计算误码率。

 

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

 

3.MATLAB核心程序

`for i=1:Iter

    i

    for j=1:Npeop

        rng(i+j)

        if func_obj(x1(j,:))<pbest1(j)

           p1(j,:)   = x1(j,:);%变量

           pbest1(j) = func_obj(x1(j,:));

        end

        if pbest1(j)<gbest1

           g1     = p1(j,:);%变量

           gbest1 = pbest1(j);

        end

        

        v1(j,:) = 0.8v1(j,:)+c1rand*(p1(j,:)-x1(j,:))+c2rand(g1-x1(j,:));

        x1(j,:) = x1(j,:)+v1(j,:);

         

        for k=1:dims

            if x1(j,k) >= tmps(2,k)

               x1(j,k) = tmps(2,k);

            end

            if x1(j,k) <= tmps(1,k)

               x1(j,k) = tmps(1,k);

            end

        end

 

        for k=1:dims

            if v1(j,k) >= tmps(2,k)/2

               v1(j,k) =  tmps(2,k)/2;

            end

            if v1(j,k) <= tmps(1,k)/2

               v1(j,k) =  tmps(1,k)/2;

            end

        end

 

    end

    gb1(i)=gbest1

end

figure;

plot(gb1,'-bs',...

    'LineWidth',1,...

    'MarkerSize',6,...

    'MarkerEdgeColor','k',...

    'MarkerFaceColor',[0.9,0.0,0.0]);

 

xlabel('优化迭代次数');

ylabel('适应度值');

VV    = g1;

save PSO_OPT.mat gb1 VV`