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