基于BP神经网络的CoSaMP信道估计算法matlab性能仿真,对比LS,OMP,MOMP,CoSaMP

1.算法仿真效果

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

 

 

 

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

 

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

        LS估计法实现方式较为简单,其估计过程没有考虑实际信道的噪声因素。因此,特别当毫米波MIMO信道干扰较大时,其估计性能较差,只适用于对信道估计精度要求较低,且信噪比较大的情况。

 

        OMP估计法是一种自适应的信道估计方法,其不需要预先获得信道矩阵H的稀疏解的原子数K。为了获得预设的信道估计精度时,OMP估计法需要比CoSaMP估计法更多的迭代次数。但是过多的迭代次数,会导致信道估计误差的不断累积,从而影响最终的信道估计性能。

 

        CoSaMP估计法具有较优的信道估计性能,但其在低信噪比下性能较差。但是,CoSaMP估计法性能依赖于在原子数K的取值,且CoSaMP信道估计的计算过程较为复杂,对计算效率有着较高的要求。

 

       NOMP估计法的性能较优,其同时具备OMP和CoSaMP两种方法的优点。因此,改算法可以通过较小的计算规模和少量的迭代次数完成毫米波MIMO信道的估计。但是该方法的使用场合存在一定的局限性,其适用于窄带毫米波群簇信道模型,而对于其他类型的毫米波MIMO信道模型,其性能将受到影响。

 

      基于BP神经网络的改进CoSaMP信道估计算法,通过BP神经网络运行得到的训练后的最优参数权重参数:

 

 

 

BP神经网络训练结束之后,可以得到BP神经网络训练得到的hcmp值。

 

再假设CoSaMP估计法得到的信道估计值:

 

 

 

       CoSaMP算法的毫米波MIMO信道估计输出值hcosamp和BP神经网络信道估计补偿输出值hcmp进行加权得到当前信道估计值,即:

 

 

 

3.MATLAB核心程序

for i1=1:MTKL 
    rng(i1);
    for j1=1:length(SNR)
        [i1,j1]
        [Noise0,sigma0] = func_whitenoise(seqdH,SNR(j1),V1);   
        %OFDM机制
        seqdH_ifft      = ifft(seqdH);
        
         Y              = seqdH_ifft+Noise0;
         Yfft           = fft(Y);
         %LS算法
         MSE_LS        = func_LS(seqd,H,Yfft,N); 
         %OMP
         MSE_OMP       = func_OMP(Yfft,seqd,H,invH,N,L,K);
         %NOOMP
         MSE_NOMP      = func_NOMP(Yfft,seqd,H,invH,N,L,K);
         %CoSaMP
         MSE_CoSaMP    = func_CoSaMP(Yfft,seqd,H,invH,N,L);         
         %CoSaMP
         MSE_CoSaMPnew = func_CoSaMPnew(Yfft,seqd,H,invH,N,L,K);
               
    end
end
 
figure;
semilogy(SNR,mean(R_LS),'-bs',...
    'LineWidth',1,...
    'MarkerSize',6,...
    'MarkerEdgeColor','k',...
    'MarkerFaceColor',[0.9,0.0,0.0]);
hold on;
semilogy(SNR,mean(R_OMP),'-mo',...
    'LineWidth',1,...
    'MarkerSize',6,...
    'MarkerEdgeColor','k',...
    'MarkerFaceColor',[0.5,0.9,0.0]);
hold on;
semilogy(SNR,mean(R_NOMP),'-b^',...
    'LineWidth',1,...
    'MarkerSize',6,...
    'MarkerEdgeColor','k',...
    'MarkerFaceColor',[0.2,0.9,0.5]);
hold on;
semilogy(SNR,mean(R_CoSaMP),'-r>',...
    'LineWidth',1,...
    'MarkerSize',6,...
    'MarkerEdgeColor','k',...
    'MarkerFaceColor',[0.9,0.9,0.0]);
hold on;
semilogy(SNR,mean(R_CoSaMPNEW),'-k<',...
    'LineWidth',1,...
    'MarkerSize',6,...
    'MarkerEdgeColor','k',...
    'MarkerFaceColor',[0.9,0.3,0.3]);
hold on;
 
xlabel('SNR');
ylabel('MSE');
grid on
legend('LS','OMP','MOMP','CoSaMP','BP+CoSaMP');
0X_070m

  

posted @ 2024-10-17 16:07  我爱C编程  阅读(10)  评论(0编辑  收藏  举报