• 【大规模 MIMO 检测】基于ADMM的大型MU-MIMO无穷大范数检测研究(Matlab代码实现)


    💥💥💞💞欢迎来到本博客❤️❤️💥💥

    🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

    ⛳️座右铭:行百里者,半于九十。

    📋📋📋本文目录如下:🎁🎁🎁

    目录

    💥1 概述

    📚2 运行结果

    🎉3 参考文献

    🌈4 Matlab代码实现


    💥1 概述

    针对大型多用户(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 实现相比。

    📚2 运行结果

    部分代码:

    %% 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

    🎉3 参考文献

    文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。

    🌈4 Matlab代码实现

  • 相关阅读:
    深度学习框架安装与配置指南:PyTorch和TensorFlow详细教程
    Windows版MySql8.0安装(亲测成功!)
    方案:TSINGSEE青犀智能分析网关皮带撕裂算法的场景应用
    在k8s中创建ConfigMap的四种方式与初识helm包管理工具
    【MySQL进阶之路 | 高级篇】SQL执行过程
    Jsp 学习笔记
    基于react的瀑布流组件
    Netcode for Entities如何添加自定义序列化,让GhostField支持任意类型?以int3为例(1.2.3版本)
    es重启临时关闭自动分片
    更直观地学习 Git 命令
  • 原文地址:https://blog.csdn.net/Ke_Yan_She/article/details/132957456