文章目录摘要1 背景意义2 理论基础2.1 大规模MIMO上行链路模型2.2 最大似然检测2.2 匹配滤波Matched Filter, MF2.3 最小均方误差检测MMSE2.3 SIMO性能上界2.4 诺伊曼级数近似Neumann Series2.5 高斯-赛德尔迭代Gauss-Seidel2.6共轭梯度法Conjugate Gradient, CG2.7优化坐标下降BOX检测器OCDBOX2.8 ADMM无穷范数检测器3 仿真结果摘要本文提出一个研究了大规模多输入多输出MIMO上行链路系统中主流信号检测算法的性能实现了八种具有代表性的检测器分为三类1传统线性检测方案包括匹配滤波MF和最小均方误差MMSE检测2基于近似求逆的检测方法包括诺伊曼级数近似、高斯-赛德尔迭代和共轭梯度CG检测3基于BOX约束的检测方法包括基于交替方向乘子法的无穷范数ADMIN检测器和优化坐标下降BOXOCDBOX检测器。此外单输入多输出SIMO上界作为理想性能基准提供。参考文章S. Shahabddin, M. Juntti and C. Studer, “ADMM-based infinity-norm detector for large-scale MIMO”, IEEE International symposium of circuits and systems, Maryland, USA, May 2017.1 背景意义大规模MIMO技术在基站端部署数十至数百根天线在同一时频资源内服务多个用户终端能够显著提升系统频谱效率和链路可靠性已成为5G无线通信系统的关键使能技术之一。然而大规模MIMO带来的性能增益是以计算复杂度的显著增加为代价的。在上行链路中基站需要从所有用户同时发送的叠加信号中准确检测出每个用户的发送符号这一检测过程的计算复杂度随着用户数和调制阶数的增长而急剧上升。最优的最大似然ML检测通过对所有可能的发送符号组合进行穷举搜索实现其复杂度随用户数呈指数增长[3]在大规模MIMO系统中完全不可行。传统的线性检测算法如匹配滤波MF和最小均方误差MMSE检测[4]虽然复杂度较低但在天线数接近用户数时性能严重恶化。2 理论基础2.1 大规模MIMO上行链路模型2.2 最大似然检测2.2 匹配滤波Matched Filter, MF2.3 最小均方误差检测MMSE2.3 SIMO性能上界假设在检测第 k 个用户时完美消除了所有其他用户的干扰2.4 诺伊曼级数近似Neumann Series2.5 高斯-赛德尔迭代Gauss-Seidel2.6共轭梯度法Conjugate Gradient, CG2.7优化坐标下降BOX检测器OCDBOX2.8 ADMM无穷范数检测器ADMM将18改写为等价形式采用ADMM求解3 仿真结果部分代码ifisempty(varargin)disp(使用默认仿真设置和参数...)%设置默认仿真参数 par.suffixexp;%仿真名称后缀:exp实验 par.runId0;%仿真ID用于复现结果 par.MR64;%接收天线数 par.MT16;%用户终端数不大于MR! par.mod64QAM;%调制类型:BPSK,QPSK,16QAM,64QAMpar.simName[ERR_num2str(par.MR)xnum2str(par.MT)_par.mod_par.suffix];%仿真名称用于保存结果 par.trials100;%蒙特卡洛试验次数 par.SNRdB_list10:2:20;%待仿真的SNR[dB]列表 par.detector{MF,SIMO,Conjugate-Gradient,Neumann,Gauss-Seidel,OCDBOX,ADMIN,MMSE};%待仿真的检测器列表%算法专用参数 par.alg.maxiter3;%迭代算法的最大迭代次数elsedisp(使用自定义仿真设置和参数...)parvarargin{1};%唯一参数为par结构体 end%--初始化%使用runId随机种子保证可复现性%rng(par.runId);%建立格雷映射的星座字母表依据IEEE802.11switch(par.mod)caseBPSKpar.symbols[-11];caseQPSKpar.symbols[-1-1i,-11i,...1-1i,11i];case16QAMpar.symbols[-3-3i,-3-1i,-33i,-31i,...-1-3i,-1-1i,-13i,-11i,...3-3i,3-1i,33i,31i,...1-3i,1-1i,13i,11i];case64QAMpar.symbols[-7-7i,-7-5i,-7-1i,-7-3i,-77i,-75i,-71i,-73i,...-5-7i,-5-5i,-5-1i,-5-3i,-57i,-55i,-51i,-53i,...-1-7i,-1-5i,-1-1i,-1-3i,-17i,-15i,-11i,-13i,...-3-7i,-3-5i,-3-1i,-3-3i,-37i,-35i,-31i,-33i,...7-7i,7-5i,7-1i,7-3i,77i,75i,71i,73i,...5-7i,5-5i,5-1i,5-3i,57i,55i,51i,53i,...1-7i,1-5i,1-1i,1-3i,17i,15i,11i,13i,...3-7i,3-5i,3-1i,3-3i,37i,35i,31i,33i];end%提取平均符号能量 par.Esmean(abs(par.symbols).^2);%预计算比特标签 par.Qlog2(length(par.symbols));%每个符号的比特数 par.bitsde2bi(0:length(par.symbols)-1,par.Q,left-msb);%跟踪仿真时间 time_elapsed0;%--开始仿真%初始化结果数组检测器 x SNR res.VERzeros(length(par.detector),length(par.SNRdB_list));%向量错误率 res.SERzeros(length(par.detector),length(par.SNRdB_list));%符号错误率 res.BERzeros(length(par.detector),length(par.SNRdB_list));%比特错误率%生成随机比特流天线 x 比特 x 试验 bitsrandi([01],par.MT,par.Q,par.trials);%试验循环 ticfort1:par.trials%生成发送符号 idxbi2de(bits(:,:,t),left-msb)1;spar.symbols(idx).;%生成独立同分布的高斯信道矩阵和噪声向量 nsqrt(0.5)*(randn(par.MR,1)1i*randn(par.MR,1));Hsqrt(0.5)*(randn(par.MR,par.MT)1i*randn(par.MR,par.MT));%通过无噪声信道发送稍后使用 xH*s;%SNR 循环fork1:length(par.SNRdB_list)%当前SNR点dB SNR_dBpar.SNRdB_list(k);%线性SNR SNR_lin10.^(SNR_dB./10);%每根接收天线的复噪声方差 N0par.Es*par.MT/SNR_lin;%通过有噪声信道发送数据 yxsqrt(N0)*n;%算法循环ford1:length(par.detector)switch(par.detector{d})%选择算法caseMF%匹配滤波[idxhat,bithat]MF(par,H,y);caseMMSE%MMSE检测器[idxhat,bithat]MMSE(par,H,y,N0);caseSIMO%SIMO下界[idxhat,bithat]SIMO(par,H,y,s);caseADMIN%基于ADMM的无穷范数检测器[idxhat,bithat]ADMIN(par,H,y,N0);caseOCDBOX%优化坐标下降BOX检测器[idxhat,bithat]OCDBOX(par,H,y);caseNeumann%诺伊曼级数近似[idxhat,bithat]Neumann(par,H,y,N0);caseGauss-Seidel%高斯-赛德尔检测器[idxhat,bithat]Gauss_Seidel(par,H,y,N0);caseConjugate-Gradient%共轭梯度检测器[idxhat,bithat]CG(par,H,y,N0);otherwiseerror(par.detector 类型未定义。)end%--计算错误指标 err(idx~idxhat);res.VER(d,k)res.VER(d,k)any(err);res.SER(d,k)res.SER(d,k)sum(err)/par.MT;res.BER(d,k)res.BER(d,k)sum(sum(bits(:,:,t)~bithat))/(par.MT*par.Q);end%算法循环结束 end%SNR循环结束%跟踪仿真时间iftoc10timetoc;time_elapsedtime_elapsedtime;fprintf(预计剩余仿真时间: %3.0f 分钟。\n,time_elapsed*(par.trials/t-1)/60);tic end end%试验循环结束%归一化结果 res.VERres.VER/par.trials;res.SERres.SER/par.trials;res.BERres.BER/par.trials;res.time_elapsedtime_elapsed;%--保存最终结果par和res结构体%save([par.simName_num2str(par.runId)],par,res);%--显示结果生成美观的Matlab图形 marker_style{bo-,rs--,mv-.,kp:,g*-,c--,yx:,k--};figure(1)ford1:length(par.detector)ifd1semilogy(par.SNRdB_list,res.BER(d,:),marker_style{d},LineWidth,2)hold onelsesemilogy(par.SNRdB_list,res.BER(d,:),marker_style{d},LineWidth,2)end end hold off grid onxlabel(每根接收天线的平均SNR [dB],FontSize,12)ylabel(比特误码率 (BER),FontSize,12)axis([min(par.SNRdB_list)max(par.SNRdB_list)1e-41])legend(par.detector,FontSize,12)set(gca,FontSize,12)end