基于稀疏CoSaMP算法的大规模MIMO信道估计matlab性能仿真,对比LS,OMP,MOMP,CoSaMP

57 阅读2分钟

1.算法仿真效果

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

 

1.jpeg

  2.jpeg

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

      大规模MIMO技术通过增加天线数量来显著提升无线通信系统的性能。然而,随着天线数量的增长,信道状态信息(CSI)的准确获取变得越来越具有挑战性。传统的信道估计方法往往需要大量的训练资源和复杂的计算过程,导致较高的开销。因此,利用压缩感知(Compressed Sensing, CS)技术进行信道估计成为研究热点之一。

 

2.1 信号模型

       在大规模MIMO系统中,假设基站配备了BSNBS​根天线,用户端配备了UENUE​根天线,则信道矩阵UEH∈CNBS​×NUE​描述了从用户端到基站端的信道响应。在时域中,接收信号可以表示为:

 

3.png

 

2.2 稀疏信号恢复理论

        压缩感知理论的核心在于,当信号是稀疏或者可稀疏化的,即可以表示为少量非零系数的线性组合时,可以通过远少于奈奎斯特采样率的数据采集来精确重构信号。信号s如果可以用基Ψ表示为:

 

4.png

 

       CoSaMP算法是一种高效的稀疏信号恢复算法,它通过迭代的方式逐步逼近稀疏信号。CoSaMP算法的主要步骤包括:

 

5.png

 

        在大规模MIMO系统中,由于空间相干性和环境的有限散射特性,信道矩阵H通常是稀疏的或近似稀疏的。这意味着在某些基变换下,信道矩阵可以被表示为少数非零元素的线性组合。这种稀疏性使得压缩感知方法成为一种有效的信道估计手段。

 

6.png

 

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_CoSaMPxs  = func_CoSaMPxs(Yfft,seqd,H,invH,N,L,K);        

 

         

         R_LS(i1,j1)       = MSE_LS;

         R_OMP(i1,j1)      = MSE_OMP;

         R_NOMP(i1,j1)     = MSE_NOMP;

         R_CoSaMP(i1,j1)   = MSE_CoSaMP;

         R_CoSaMPxs(i1,j1) = MSE_CoSaMPxs;             

    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_CoSaMPxs),'-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','稀疏CoSaMP');

0X_069m`