欢迎来到本博客❤️❤️
博主优势:博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。
⛳️座右铭:行百里者,半于九十。
本文目录如下:
目录
1 概述
2 运行结果
3 参考文献
4 Matlab代码实现
文献来源:
针对大型多用户(MU)多输入多输出(MIMO)无线接收机,提出了一种新颖的数据检测算法和相应的VLSI设计。我们的算法称为ADMIN,执行基于乘法器(ADMM)的无穷大范数约束均衡的交替方向方法。ADMIN 是一种迭代算法,如果用户数量与基站 (BS) 中的天线数量相比较少,则其性能优于线性探测器。ADMIN 在第一次迭代中计算线性最小均方误差 (MMSE) 解。当BS天线数量与用户数量之间的比率相当大时就足够了。我们为基于 LDL 分解的软输出 ADMIN 开发了一种分时迭代 VLSI 架构。我们的架构实现了线性 MMSE 的 685.71 Mb/s,对于在 212 纳米 CMOS 技术中采用 38-QAM 的 16 用户系统,可实现 64.28 Mb/s。
大型(或大规模)多用户 (MU) 多输入多输出 (MIMO) 是第五代 (5G) 无线通信系统的关键技术,可处理数量级以上的数据流量。大规模MU-MIMO的想法是为基站(BS)配备大量天线元件,这些天线元件可以为同一频段的大量用户终端提供服务[1],[2]。与传统的小规模MIMO无线系统相比,大规模MU-MIMO系统频谱效率的提高是以更高的计算复杂性为代价的。为了实现上行链路中的高速通信(用户与BS通信),最近提出了各种算法和VLSI架构[3]-[6];所有这些方法都使用线性最小均方误差(MMSE)均衡器的近似值。这些算法提供高吞吐量,但与基于精确反演的MMSE均衡器相比,会带来性能损失,特别是在用户数量与BS天线数量相当的系统中。卡斯塔涅达等.最近提出了一种近似半定弛豫的基于数据检测器,称为TASER,在这种“对称”系统中实现了接近最大似然的性能。然而,TASER仅限于BPSK和QPSK调制[7]。
该文提出一种基于乘子交替方向法(ADMM)的数据检测算法和VLSI设计。我们的算法被称为基于ADMM的无穷大范数(简称ADMIN),并执行无穷大范数或盒约束均衡,如果BS天线数量与用户之间的比率较小(两个或更少),则线性探测器的性能将大大优于线性探测器。ADMIN 本质上是迭代的,并在第一次迭代中执行线性 MMSE 均衡。因此,对于BS天线数量比用户数量多一个数量级的系统,执行一次ADMIN迭代就足够了。我们提出了一种VLSI架构,用于基于LDL的软输出ADMIN,供16个用户将数据传输到16天线BS。该架构采用 28 nm CMOS 技术实现,在吞吐量、面积和硬件效率方面与 [16] 中唯一可用的 7 用户 ASIC 实现相比。
部分代码:
%% ADMM-based infinity norm (ADMIN) detector
function [idxhat,bithat] = ADMIN(par,H,y,N0)
% -- preprocessing
% by setting beta to N0/par.Es we get the MMSE estimator in the first iteration
% this is pretty neat as this is a very good detector already
beta = N0/par.Es;%*3; % tweaking this one by 3 improved performance significantly
A = H'*H + beta*eye(par.MT);
L = chol(A,'lower');
yMF = H'*y;
% -- initialization
gamma = (1+sqrt(5))/2;%*2; %% tweaked with 2 to improve performance
alpha = max(real(par.symbols)); % symbol box
zhat = zeros(par.MT,1);
lambda = zeros(par.MT,1);
% -- ADMM loop
for iter=1:par.alg.maxiter
xhat = (L')\(L\(yMF+beta*(zhat-lambda))); % step 1
zhat = projinf(par,xhat+lambda,alpha); % step 2
lambda = lambda-real(gamma*(zhat-xhat)); % step 3
lambda = real(lambda);
end
% -- hard output detection
[~,idxhat] = min(abs(zhat*ones(1,length(par.symbols))-ones(par.MT,1)*par.symbols).^2,[],2);
bithat = par.bits(idxhat,:);
end
%% Optimized Coordinate Descent (OCD) BOX version
function [idxhat,bithat] = OCDBOX(par,H,y)
% -- initialization
[row, col] = size(H);
alpha = 0; % no regularization for BOX detector
beta = max(real(par.symbols));
% -- preprocessing
文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。