Capacity maximization under sparse channels

本篇文章是对 IEEE 文章Low-Complexity Incremental Search-Aided
Hybrid Precoding and Combining
for Massive MIMO Systems
中主要算法的理解简述

System model

本文采用经典的mmWave 的点对点模型,如下所示
在这里插入图片描述
其中点对点信道采用常用的SV稀疏模型,如下所示
在这里插入图片描述
Remark:mmWave/THz点对点系统与传统微波通信最大的区别在于

  1. 收发天线数目较大
  2. 信道稀疏性
  3. 数据流数 N s N_s Ns小于等于信道的秩

尽管传统的beamforming方案也可以适用,但通常算法复杂度与天线规模正相关,代价高昂。另一方面,利用稀疏性能够有效降低复杂度,如OMP等方案。本篇文章的方案可以说兼顾了复杂度和性能,那究竟是怎么利用稀疏性的呢?

(注: 一个冷知识,低秩跟稀疏并不等价,e.g, 一个满秩矩阵,SVD分解,中间的奇异值矩阵是稀疏的)

Problem formulation

在这里插入图片描述
这里作者将原来直接最大化通过从steering vector set中选择相应的列来构成 analog precoder (即,analog precoder 元素的模值恒定), 而 baseband precoder/combiner可以通过对等效信道进行SVD分解得到。所以本篇文章的重点在如何求解第一个子问题,即
在这里插入图片描述
(注:因为combining matrix 的设计跟precoder 设计类似,不再赘述)

算法思想概述

观察(8a)这个式子,因为 F R F \mathbf{F}_{\rm RF} FRF 需要从一个finite set中选取,该算法的思想跟贪心算法有点相似。给定已经选好的集合,从剩下的集合里 选择 最能让 capacity 增大的 steering vector。接下来的问题就是

  1. 刻画objective function的递推关系式—得到capacity 增量的表达式
  2. 求解最大化增量的子问题
算法步骤

假设在第 m m m个iteration,已经选好了一个set A m \mathbf{A}_m Am, 记 A m + 1 = [ A m , a l ] \mathbf{A}_{m+1} = [ \mathbf{A}_m, \mathbf{a}_l] Am+1=[Am,al], 则

继续化简
在这里插入图片描述
在这里插入图片描述

这里可以看到,capacity的增量表达式 Δ l , m \Delta_{l,m} Δl,m已经写出来了,但 G m \mathbf{G}_m Gm牵涉到求逆,直接一维搜索需要计算 剩下集合的阶数个的求逆运算,而 G m \mathbf{G}_m Gm 可以进一步化简为在这里插入图片描述

此时 增量 的表达式需要更新的部分仅涉及到矩阵乘法,所以进行一维搜索就已经足够了

关于用到的数学性质的证明:Sylvester identitiy

### 什么是交替最大化(Alternating Maximization)算法? 交替最大化是一种优化技术,在机器学习和统计建模领域广泛应用。它通过分解复杂的目标函数为多个子问题来简化求解过程,每次固定一部分变量而仅针对另一部分进行优化[^3]。 具体而言,该方法假设目标函数可以表示为若干组参数之间的相互作用形式。在每一步迭代过程中,一组参数被视作常量,其余参数则依据当前固定的那组参数值更新其最优估计。这一策略类似于矩阵分解中的交替最小二乘法(ALS),其中用户-物品交互关系被近似表达成低秩矩阵的形式并利用迭代优化流程估算潜在因子[^1]。 尽管 ALS 主要应用于协同过滤场景下推荐系统的构建,但交替最大化的概念更为广泛,不仅限于线性模型或者特定应用背景之中。例如,在概率图模型里执行期望最大化(EM)算法时也体现了类似的思路——E步负责计算隐含数据分布下的条件期望;M步则是基于这些预期值调整显式可见的数据集合上的参数直至收敛为止[^2]。 下面给出一段简单的 Python 实现代码用于演示如何运用交替最大化解决一个假想的问题: ```python import numpy as np def alternating_maximization(X, Y, max_iter=100, tol=1e-4): """ A simple implementation of Alternating Maximization. Parameters: X : array-like, shape (n_samples,) Input data for variable set X. Y : array-like, shape (n_samples,) Input data for variable set Y. max_iter : int, default=100 Maximum number of iterations to perform. tol : float, default=1e-4 Tolerance for stopping criterion. Returns: optimized_X : ndarray, shape (n_samples,) Optimized values for X after convergence. optimized_Y : ndarray, shape (n_samples,) Optimized values for Y after convergence. """ prev_loss = None for _ in range(max_iter): # Optimize over X while keeping Y fixed optimized_X = optimize_over_x(Y) # Optimize over Y with new value of X optimized_Y = optimize_over_y(optimized_X) current_loss = compute_objective_function(optimized_X, optimized_Y) if prev_loss is not None and abs(current_loss - prev_loss) < tol: break prev_loss = current_loss return optimized_X, optimized_Y # Placeholder functions representing actual computations during each step def optimize_over_x(y_values): ... def optimize_over_y(x_values): ... def compute_objective_function(x_vals, y_vals): ... if __name__ == "__main__": initial_data_for_X = np.random.rand(100) initial_data_for_Y = np.random.rand(100) result_X, result_Y = alternating_maximization(initial_data_for_X, initial_data_for_Y) ``` 上述伪代码展示了基本框架结构,实际应用场景需替换掉占位符函数定义以适应具体的业务需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值