m基于毫米波大规模MIMO系统的的混合GMD波束形成算法matlab误码率仿真

98 阅读2分钟

1.算法仿真效果

matlab2022a仿真结果如下:

94e67c4d66fae83b901ba12dbdd3fce5_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.jpg  

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

       毫米波通信作为第五代移动通信(5G)和未来通信系统的重要技术,能够提供更高的数据传输速率和更大的系统容量。然而,毫米波通信在传输过程中容易受到路径损耗和大气衰减的影响,因此需要采用有效的波束形成算法来提高信号质量。混合波束形成技术结合了射频(RF)和基带(BB)波束形成的优点,能够有效地抵消信道损耗。

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

实现过程

 

信道估计:在实际系统中,信道信息通常是未知的,因此需要进行信道估计。可以通过发送已知的训练序列,并通过接收到的信号估计RF和BB信道矩阵。

 

RF权重计算:利用估计得到的RF信道矩阵,计算RF权重向量wr\mathbf{w}_r。可以采用GMD算法选择与信道向量hr\mathbf{h}_r成正比的权重向量。

 

BB权重计算:利用估计得到的BB信道矩阵,计算BB权重向量wb\mathbf{w}_b。同样,可以采用GMD算法选择与信道向量hb\mathbf{h}_b成正比的权重向量。

 

信号传输:将发送的信号x\mathbf{x}通过RF和BB权重向量进行波束形成,得到最终的传输信号x^\hat{x}

 

3.MATLAB核心程序 `%合并

            GH          = G';UH=U';

            G_1         = GH(1:Nsym,:);

            yc_svd      = UH(1:Nsym,:)*yo_svd;

            yc_gmd      = G_1*yo_gmd;

                    

            W_hysvd     = Wbb(:,:,jc)'*W_somp';

            yc_somp_svd = sqrt(Nsym/Nrf)W_hysvdyo_hysvd;

            

            W_hygmd     = G_SOMP'*W_somp';

            yc_somp_gmd = sqrt(Nsym/Nrf)W_hygmdyo_hygmd;

            

            

            %SVD解码

            tmp1      = func_VBLAST_decoder(yc_svd,Nsym,S(:,1:Nsym));

            msg_svd   = func_deQAM16(tmp1);

            

            tmp2      = func_VBLAST_decoder(yc_somp_svd,Nsym,S(:,1:Nsym));

            msg_hysvd = func_deQAM16(tmp2);

 

            %GMD-SIC解码

            tmp3      = func_VBLAST_decoder(yc_gmd,Nsym,M(:,1:Nsym));

            msg_gmd   = func_deQAM16(tmp3);

 

            tmp4      = func_VBLAST_decoder(yc_somp_gmd,Nsym,M2);

            msg_hygmd = func_deQAM16(tmp4);

            

 

            %错误计数

            cnt_svd   = cnt_svd + sum(msg1~= msg_svd);         

            cnt_hygmd = cnt_hygmd + sum(msg1~= msg_hysvd);                

            cnt_gmd   = cnt_gmd + sum(msg1~= msg_gmd);

            cnt_hysvd = cnt_hysvd + sum(msg1~= msg_hygmd);

           

        end

 

    end

    err_svd(ij)   = cnt_svd/N_tbits;

    err_gmd(ij)   = cnt_gmd/N_tbits;

    err_hysvd(ij) = cnt_hysvd/N_tbits;

    err_hygmd(ij) = cnt_hygmd/N_tbits;

end

 

figure;

semilogy(SNRss,smooth(err_svd),'-bs',...

    'LineWidth',1,...

    'MarkerSize',6,...

    'MarkerEdgeColor','k',...

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

hold on

semilogy(SNRss,smooth( err_hygmd),'-mo',...

    'LineWidth',1,...

    'MarkerSize',6,...

    'MarkerEdgeColor','k',...

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

hold on

semilogy(SNRss,smooth(err_gmd),'-b^',...

    'LineWidth',1,...

    'MarkerSize',6,...

    'MarkerEdgeColor','k',...

    'MarkerFaceColor',[0.2,0.9,0.5]);

hold on

semilogy(SNRss,smooth( err_hysvd),'-r>',...

    'LineWidth',1,...

    'MarkerSize',6,...

    'MarkerEdgeColor','k',...

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

hold on

 

xlabel('SNR (dB)')

ylabel('BER')

legend('全数字SVD','混合SVD','全数字GMD','混合GMD');

grid on`