无线通信代码搬运/复现系列(1) : 重新审视具有每天线功率约束的 MIMO 容量:固定点迭代和交替优化

news2024/9/23 15:28:12

无线通信代码搬运/复现系列(1)

“Revisiting the MIMO Capacity with Per-antenna Power Constraint: Fixed-point Iteration and Alternating Optimization,” IEEE Trans. Wireless Commun., vol. 18, no. 1, pp. 388-401, Jan. 2019 by T. M. Pham, R. Farrell, and L.-N. Tran

摘要— 在本文中,我们重新审视了在每天线功率约束(PAPC)下计算MIMO容量的基本问题。与可能接受类似注水解决方案的和功率约束对应物不同,PAPC的MIMO容量主要是在通用凸优化框架下研究的。这些方法的两个主要缺点是:1)它们的复杂性与问题大小迅速成比例,这对于大规模天线系统没有吸引力;和/或2)它们的收敛特性对问题数据很敏感。作为起点,我们首先考虑单用户MIMO场景,并提出了两种可证明收敛迭代算法来求其容量,第一种方法基于定点迭代,另一种方法基于交替优化和极小最大对偶性。具体而言,与现有方法相比,所提出的两种方法在每次迭代中都能利用填充水算法,收敛速度更快。然后,我们将所提出的解决方案扩展到多用户MIMO系统,这些系统具有基于脏纸编码的传输策略。在这方面,使用PAPC的高斯广播信道的容量区域也是使用闭合形式表达式计算的。数值结果证明了所提出的解决方案优于现有方法。
索引术语 — MIMO、定点迭代、交替优化、最小最大值对偶性、填充水、脏纸编码。

固定点算法

function [Sopt, nIterations, err_seq, obj_seq] = Algorithm1_FixedPoint(H, PAPC, errtol, maxIterations)
% 初始化
[m,n] = size(H);

lambda_tilde = (ones(n,1)); 
lambda = 1./lambda_tilde;
[~, R] = qr(H); % 第2步:进行QR分解
err_seq = zeros(maxIterations,1);
obj_seq = zeros(maxIterations,1);
nIterations = maxIterations;
for iIter=1:maxIterations    
    % 第4步
    [~, Sigma_bar, V] = svd(R*diag(lambda.^(-1/2)));
    Sigma_bar(Sigma_bar<0) = 0;
    Sv = Sigma_bar(Sigma_bar>0).^(-2);
    Svs = 1-Sv;
    Svs(Svs <0) = 0;
    % 第6步
    Phi = V*diag(1-[Svs;zeros(n-length(Svs),1)])*V';
    % 第7步
    S = diag((lambda).^(-1)) - diag((lambda).^(-1/2))*Phi*diag((lambda).^(-1/2));
    obj_seq(iIter) = real(log(det(eye(m)+H*S*H')));
    % 第8步
    err_seq(iIter) = abs(sum((((lambda))).*(diag(S)-PAPC)));
    % 第9步
    lambda_tilde = real(PAPC + diag(Phi).*lambda_tilde);
    % 第10步
    lambda = ((lambda_tilde).^(-1));
    
    % 如果超过误差限则提前终止
    if (err_seq(iIter) < errtol)
        err_seq(iIter+1:maxIterations)=[];
        obj_seq(iIter+1:maxIterations)=[];
        nIterations = iIter;
        break;
    end
end

Sopt = S;
end

交替优化

function [Sopt, nIterations, err_seq, obj_seq] = Algorithm2_AlternatingOptimization(H, PAPC, errtol, maxIterations)
P_sum = sum(PAPC);
%initialization
[~, nTx] = size(H);
[G,R] = qr(H);
q = ones(nTx,1);
err_seq = zeros(maxIterations,1);
obj_seq = zeros(maxIterations,1);
nIterations = maxIterations;
for iIter =1:maxIterations    
    % step 3
    [U_tilde, Sigma_tilde, V_tilde] = svd(R*diag(q.^(-1/2)),'econ');
    Sigma_tilde = diag(Sigma_tilde); 
    [Sigma_tilde, ind] = sort(Sigma_tilde,'descend'); % sort eigen channels for water filling
    U_tilde = U_tilde(:, ind); % rearrange the columns of U after sorting
    V_tilde = V_tilde(:,ind); % rearrange the columns of V after sorting

    zeroeigchan = (Sigma_tilde < 1e-7); % ignore very small eigen channels
    U_tilde(:,zeroeigchan) = []; % remove columns of U accordingly
    V_tilde(:,zeroeigchan) = []; % remove columns of V accordingly
    U = (G*U_tilde); % U from SVD of H*diag(q.^(-1))
    Sigma = Sigma_tilde.^2;
    power = wf(Sigma,P_sum); % perform water filling
    chan_pos = (power>0); % get stricly positive eigen channels
    power_pos = power(chan_pos);

    U(:,~chan_pos) = []; % remove columns of U that have no power
    Sigma = Sigma(chan_pos); % remove eigen channels that have no power
    S_bar = U*diag(power_pos)*U'; % the optimal S_bar for given Q
    % end of step 3

    % calculate the objective
    obj_seq(iIter) = real(log((det(diag(q) + H'*S_bar*H)))) - sum(log(q));
    if (iIter>1)
        err_seq(iIter-1)=abs(obj_seq(iIter)-obj_seq(iIter-1));
        if(err_seq(iIter-1)<errtol)
            err_seq(iIter:end) = [];
            obj_seq(iIter+1:end) = [];
            nIterations = iIter;
            break
        end
    end
    % step 6
    % Newton method for solving (26)
    V_dot = V_tilde(:,chan_pos);
    % step 5
    phi_inv = 1./q - real(diag(diag(q.^-0.5)*V_dot*diag(1./(1+1./(Sigma.*power_pos)))*(V_dot')*diag(q.^-0.5)));
    gamma = 0.01;
    fgamma=1;
    while(abs(fgamma) > errtol)
        fgamma = sum(1./(gamma+phi_inv./PAPC)) - P_sum;
        fgamma_diff = -sum(1./((phi_inv./PAPC + gamma).^2));
        gamma = gamma - fgamma/fgamma_diff;
    end
    q = 1./(phi_inv+ gamma*PAPC);
    % end of newton's method

    
end

[U, ~, V] = svd(H*diag(q.^(-1/2)), 'econ');
Sopt = diag(q.^(-1/2))*V*U'*S_bar*U*V'*diag(q.^(-1/2));
end

function power= wf(eigchan,P)
% water filling algorithm for solving the problem max sum(log(1+eigchan_i.*p_i)) s.t. sum(p) == P
% NOTE: eigen must be shorted in descending order
waterlevel = 1;
nEigchans = length(eigchan);
igamma = waterlevel./(eigchan);
temp = 0;
% water filling algorithm
for k = nEigchans:-1:1
    temp = (P+sum(1./eigchan(1:k))*waterlevel)/k;
    if ((temp-igamma(k))>0)
        break;
    end
end
power = max(temp-igamma,0);
end

主程序

clear ;
clc
rng(1)
%initialization
SNRdB = 0;
P = 10.^(SNRdB/10);
eps = 1e-6;

maxIterations = 50;


nTx = 5;
nRx = 3;
H = (randn(nRx, nTx) + 1i*randn(nRx, nTx))/sqrt(2);
% 
% H =[0.2581+1i*0.6535i  0.2623+1i*0.9434i;
% 0.4385+1i*0.3081 0.4090-1i*0.2288];
% [nRx,nTx]=size(H);

PAPC = (P/nTx)*ones(nTx,1); % equal power constraint
% cvx_solver mosek
cvx_expert true
cvx_begin quiet
variable X(nTx,nTx) complex semidefinite
maximize(log_det(eye(nRx)+H*X*H'))
diag(X) <= PAPC
X == hermitian_semidefinite(nTx)
cvx_end
cvx_optval

%Alg1, fixed point
[Sopt_fp, nIterations_fp, err_seq_fp,obj_seq_fp] = Algorithm1_FixedPoint(H, PAPC, eps, maxIterations);

CMIMO_Alg1 = real(log(det(eye(nRx) + H*Sopt_fp*H')))

%Alg2, alternating optimization
[Sopt_ao, nIterations_ao, err_seq_ao,obj_seq_ao] = Algorithm2_AlternatingOptimization(H, PAPC, eps, maxIterations);
CMIMO_Alg2 = real(log(det(eye(nRx) + H*Sopt_ao*H')))



%plot duality
subplot(2,1,1)
semilogy(1:nIterations_fp,err_seq_fp,'--b','LineWidth',1.5);
hold on
semilogy(1:nIterations_ao-1,err_seq_ao,'-k','LineWidth',1.5);
legend('Algorithm 1', 'Algorithm 2','Location','Best');
xlabel('Iteration Index','FontSize',12,'FontWeight','bold');
ylabel('Duality gap','FontSize',12,'FontWeight','bold');
title('Residual error')
subplot(2,1,2)
plot(obj_seq_fp,'--b')
hold on
plot(obj_seq_ao,'-k')
plot(cvx_optval*ones(length(obj_seq_ao),1),'-r')
title('Convergence of the objective')
legend('Algorithm 1', 'Algorithm 2','Optimal Objective (CVX)','Location','Best');
saveas(gcf,'../results/convergence.png')



在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2050652.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++入门——05STL

STL&#xff08;Standard Template Library&#xff0c;标准模板库&#xff09;是C标准库的重要组成部分&#xff0c;是一个通用的数据结构和算法库。STL提供了一组经过精心设计的模板类和函数&#xff0c;用于处理各种常见的数据结构&#xff08;如容器&#xff09;和算法&…

六. 部署分类器-preprocess-speed-compare

目录 前言0. 简述1. 案例运行2. 代码分析2.1 main.cpp2.2 preprocess.cpp 3. 补充说明结语下载链接参考 前言 自动驾驶之心推出的 《CUDA与TensorRT部署实战课程》&#xff0c;链接。记录下个人学习笔记&#xff0c;仅供自己参考 本次课程我们来学习课程第六章—部署分类器&…

嵌入式面经篇八——进程线程

文章目录 前言一、进程&线程1、异步 IO 和同步 IO 区别&#xff1f;2、进程间通信方式&#xff1f;3、进程的地址空间模型&#xff1f;4、进程的五种状态分别是?5、子进程从父进程继承的资源有哪些&#xff1f;6、什么是进程上下文、中断上下文&#xff1f;7、如何防止僵尸…

写了一个分页 sql,因为粗心出了 bug 造成了 OOM!

大家好&#xff0c;我是君哥。 最近上完线后&#xff0c;凌晨收到一个生产告警&#xff0c;一个 OOM 异常导致了服务重启。今天来分享一下这个事故。 1.事故现场 事故的代码逻辑并不复杂&#xff0c;从一个大概有 8 万数据的表里面查出数据&#xff0c;汇总后对数据做处理。…

高校宣讲会管理系统--论文pf

TOC springboot370高校宣讲会管理系统--论文pf 第1章 绪论 1.1选题动因 当前的网络技术&#xff0c;软件技术等都具备成熟的理论基础&#xff0c;市场上也出现各种技术开发的软件&#xff0c;这些软件都被用于各个领域&#xff0c;包括生活和工作的领域。随着电脑和笔记本的…

【myz_tools】Python库 myz_tools:Python算法及文档自动化生成工具 - 0.2.0版更新

文章目录 0.2.0 更新内容如下函数generate_2d_combinations_iter函数generate_row_permutations函数calculate_total_permutations函数display_combinations函数evaluate_list_similarity函数check_unique 写在前面关于库库使用库内所有函数目录文件名称: common_maths.py函数部…

ZooKeeper分布式协调系统介绍

1. ZooKeeper概述 1.1 ZooKeeper介绍 ZooKeeper 是 Apache 软件基金会的一个项目&#xff0c;它确实提供了一种非常有用的服务&#xff0c;用于维护分布式系统中的配置信息、命名、提供分布式同步和提供组服务等。它的核心是原子广播和大约一致性模型&#xff0c;这使得它能够…

CCF-GESP五级考级——初等数论,全网最精简的求最大公约数gcd和最小公倍数lcm方法(100%好使)

&#x1f451;一、约数和因数的区别 约数必须在整除的前提下才存在&#xff0c;而因数是从乘积的角度来提出的。如果数与数相乘的积是数&#xff0c;是的因数。 1.约数只能对在整数范围内而言&#xff0c;而因数就不限于整数的范围。 举个栗子&#xff1a;。2和8是16的…

中仕公考:国考往年招录情况对比

2025年国考预计10月中旬启动&#xff0c;11月进行笔试。中仕为大家总结了往年的国考招录情况&#xff0c;希望能给大家一些参考。 2024年计划招录3.96万人。截止到考试结束&#xff0c;共有225.2万人参加了考试&#xff0c;参加考试人数与录用计划数之比约为57:1&#xff0c;2…

CSP-J 2023真题一轮

选择题 阅读题 第1题 第2题 第3题 完善程序 第1题 第2题 答案&#xff1a; 一、单选题 1-5 BDAAC 6-10 BCADA 11-15 ABBAD 二、阅读程序 1&#xff09; 16. √ 17. √ 18. ⅹ 19.A 20.B 2&#xff09; 21. √ 22. ⅹ 23. √ 24. D 25.B 26.D 3&#xff09; 27. √ 28. √ 29…

EasyCVR视频汇聚平台构建远程安防监控:5大亮点解析,助力安防无死角

随着科技的飞速发展&#xff0c;远程安防监控系统已经成为现代社会中不可或缺的一部分&#xff0c;无论是在小区、公共场所还是工业领域&#xff0c;安防监控都发挥着至关重要的作用。而EasyCVR作为一款功能强大的视频监控综合管理平台&#xff0c;其在构建远程安防监控系统方面…

谷歌浏览器下载文件被阻止怎么解除

在工作生活中&#xff0c;我们会使用谷歌浏览器下载各种各样的文件&#xff0c;不过偶尔会遇到文件下载被阻止的情况。为了解决这一问题&#xff0c;本文为大家分享了实用的措施建议&#xff0c;一起来了解一下吧。&#xff08;本文由https://chrome.cmrrs.com/站点的作者进行编…

python爬取豆瓣电影数据

目录 一、背景 二、分析网站 1、ajax请求 三、代码实现 1、导包 2、面向对象实现 3、发送请求 4、解析数据 5、保存数据 6、定义主函数 7、实例化对象运行主函数 8、运行效果 四、以下是全部完整代码 五、报错解决 1、数据库连接报错 2、数据插入报错 一、背景…

136 只出现一次的数字

解题思路&#xff1a; \qquad 这道题目明确要求了时间复杂度为O(N)&#xff0c;空间复杂度为O(1)&#xff0c;不然借助哈希表很容易能够在O(N)的空间复杂度下解决。特殊的要求只能特殊处理&#xff0c;解这道题只能记住异或这种较特殊的运算方式。 \qquad 异或是对二进制数进…

《深入探究 @SpringBootApplication 注解的内部原理》

《深入探究 SpringBootApplication 注解的内部原理》 SpringBootApplication注解涵盖了 Spring Boot 的包扫描原理、自动装配原理等众多重要原理。接下来&#xff0c;我们将对该注解展开深入且详尽的研究。而研究上述原理的关键&#xff0c;在于剖析SpringBootApplication内部…

网上商品订单转手系统bootpf

TOC springboot408网上商品订单转手系统bootpf 第1章 绪论 1.1选题动因 当前的网络技术&#xff0c;软件技术等都具备成熟的理论基础&#xff0c;市场上也出现各种技术开发的软件&#xff0c;这些软件都被用于各个领域&#xff0c;包括生活和工作的领域。随着电脑和笔记本的…

【SpringBoot】SpringBoot框架的整体环境搭建和使用(整合Mybatis,Druid,Junit4,PageHelper,logback等)

目录 1.介绍 1.1 配置文件 1.2 目录结构 2.基于SpringBoot的SpringMVC 4.整合Mybatis 5.整合Druid连接池 6.整合Junit4 7.整合Logback 8.整合PageHelper 9.SpringBoot整合Thymeleaf ​编辑 【附录】springboot的pom.xml 1.介绍 Spring框架的优点是方便解耦、简化开…

openEuler系统安装Visual Studio Code

openEuler系统安装Visual Studio Code 背景安装密钥和存储库更新包缓存并使用dnf安装包Fedora 22及以上版本旧版本使用yum 安装过程截图安装成功看桌面效果 背景 openEuler(openEuler-24.03-LTS)安装了麒麟UKUI桌面但是没有麒麟软件商店想安装Visual Studio Code 安装密钥和…

计算机毕业设计选什么题目好? springboot 大学志愿填报系统

✍✍计算机毕业编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java、…

东晟时尚服饰文化传承与发展研发中心成立

近期&#xff0c;东晟时尚创新科技&#xff08;北京&#xff09;有限公司宣布成立东晟时尚服饰文化传承与发展研发中心&#xff0c;此举标志着公司在促进中国传统文化与现代时尚产业结合方面迈出了关键步伐。 作为一家在时尚科技推广和设计研发应用服务领域具有战略眼光的企业&…