简介一份面向无线通信与大规模天线系统研究者的学术论文PDF聚焦Massive MIMO系统容量提升探讨基于统计信道状态信息SCSI的波束形成与功率分配联合优化问题。针对瞬时信道信息获取困难、反馈成本高的挑战该文提出以信噪泄漏比SLNR为准则解耦多用户波束形成设计并在基站总发射功率约束下以系统总遍历容量为目标迭代求解功率分配每次迭代均给出闭式解兼顾收敛性和可用性。仿真结果表明相比平均功率分配方案该算法能有效提升系统总容量资源另含系统模型、理论推导、仿真对比及参考文献等完整内容适合高校师生、科研人员及相关工程师参考。下载内容为单个PDF文件大小568KB已有486人学习浏览便于快速研读可作为该方向研究与复现的实用参考资料。1. 为什么 Massive MIMO 需要统计信道瞬时反馈在高速场景先扛不住了Massive MIMO 里做波束形成和功率分配多数实现默认拿瞬时 CSI 干活。天线从 8 根升到 64 根波束变窄同一时刻要反馈的信道状态信息量也基本成正比上涨。低速场景看不出问题用户一到 60 km/h 以上的移动速度一轮导频训练加上行反馈走完信道已经换了一副面孔空间增益被反馈延迟吃掉速率不升反降。统计信道不反馈某个时刻的快照只反馈协方差矩阵或角度谱。这类信息反映的是散射环境和用户位置级别的慢变特性快衰落被平均掉更新周期从毫秒级拉长到秒级反馈开销大幅降低。基于统计信道做波束形成和功率分配核心就是保留大规模阵列的空间增益适合高移动场景、FDD 部署和回传吃紧的系统。接下来从建模、特征波束、注水功率分配到工程避坑完整走一遍。2. 统计CSI模型的选型协方差矩阵、角度谱与特征空间2.1 统计CSI到底在描述什么协方差矩阵的物理拆解先给出数学定义。下行信道向量 h 是 N_t × 1 的复向量瞬时 CSI 就是直接反馈每一时刻的 h。统计 CSI 不做这件事它反馈的是二阶统计量 R E[hh^H]。矩阵的每个元素是不同天线对之间的相关系数对角线反映各天线位置的平均功率非对角线反映天线间相位关系。从 R 里可以提取出三类工程上有用的信息主来波方向、角度扩展、平均信道增益。在均匀线性阵列ULA下R 会呈现 Toeplitz 结构变换到角度域后等价于角度功率谱。天线间距固定时R 的有效秩基本由角度扩展决定角度扩展越小秩越低。举个例子64 天线、半波长间距的 ULA来波集中在某个方向且角度扩展只有 5 度时协方差矩阵做特征分解后前 2~4 个特征值通常就占了总能量的 90% 以上。这是统计信道能被压缩的数学基础不需要反馈完整的 N_t × N_t 矩阵可以只反馈若干特征方向和对应能量波束形成和功率分配都在这几个低维方向上做。2.2 什么时候该用统计CSI三个典型的选型信号不是所有 Massive MIMO 场景都适合换到统计 CSI。我一般先看三个信号再决定。第一个是用户移动速度。多普勒扩展超过几十赫兹时瞬时 CSI 的更新周期已经压到几毫秒以内反馈链路几乎被导频占满这时统计 CSI 的慢变特性是救命稻草。第二个是双工制式。FDD 下行 CSI 必须靠用户反馈无法利用信道互易性反馈开销本来就大统计 CSI 可以把反馈内容从每个子载波的 N_t 维复向量压缩成周期更新的协方差矩阵或角度谱这对 FDD 系统尤其有价值。TDD 如果互易性校准做得好也可以用统计 CSI但收益相对小一些。第三个是回传和调度粒度。系统如果已经按 1 ms 的调度周期运行很难再容纳频繁的 CSI 上报统计 CSI 的更新周期可以设计成 100 ms 级别甚至更高由高层调度器在周期边界统一触发。三个信号里如果前两点命中基本值得换。如果场景是室内低移动、回传充足瞬时 CSI 方案反而更直接没必要绕一圈。2.3 先拿到协方差矩阵最小可用的估计流程统计 CSI 从哪来最常见做法是在上行接收端利用导频解出瞬时信道样本再做时域滑动平均。TDD 可以直接拿上行估计结果FDD 也能做只是要额外处理频偏和校准。下面是一段最小可用的 Matlab 估计流程N_t 64; % 发射天线数 T_tr 300; % 参与统计的样本数 rho 0.98; % 遗忘因子越大越平滑跟踪越慢 R_est zeros(N_t, N_t); for t 1:T_tr % h_t: N_t x 1 瞬时信道样本由上行导频解出 R_est rho * R_est (1 - rho) * (h_t * h_t); end R_est R_est / trace(R_est) * N_t; % 功率归一化到 N_t这里的 h_t 在 TDD 场景可以从上行 SRS 或 DMRS 直接估计出来在 FDD 场景则依赖用户端下行导频测量后反馈但反馈粒度可以很粗比如只反馈 R 的低维投影系数。关键参数有两个。第一个是遗忘因子 rho取值范围通常在 0.95~0.99。它决定统计窗口的有效长度大约相当于 1/(1-rho) 个样本。rho0.98 时约 50 个样本rho0.99 时约 100 个样本。样本太少协方差矩阵噪声大特征值会被估计方差铺平看起来角度扩展变大了样本太多跟踪变慢用户拐个弯信道结构已经变了R_est 还停在原地。第二个是归一化我一般把矩阵迹归一化到 N_t这样每个特征值表示该特征波束相对平均功率的倍数后续功率分配里噪声功率和总功率就都在同一套线性单位下不用来回换算。到这里R_est 已经是后续所有波束形成和功率分配的唯一输入。下一步是特征分解把它拆成若干条可以独立分配能量的空间波束通道。3. 波束形成用特征波束把统计信道拆成独立的传输通道3.1 为什么特征波束天然适合统计信道拿到 R_est 后做特征分解R V Λ V^H。V 的每一列是一个特征向量Λ 对角元是特征值。统计意义上这几个方向之间的相关系数为零携带的散射能量互不重叠。物理上ULA 场景下特征向量趋近于某个角度上的空间导向矢量特征值就是该方向上的平均增益。最大特征值对应主来波方向次大对应次强多径簇方向依次类推。这种分解对波束形成的价值在对比里更明显瞬时信道下的最优波束要精确对准当前时刻的到达相位对反馈误差敏感统计信道下的特征波束只需要对准能量分布的主方向对小尺度快衰落天然不敏感。特征波束是长期平均意义上的波束指向宽度和旁瓣由角度扩展决定而不是由某一时刻的信道快照决定。只要散射环境没变波束指向就持续有效这正是移动场景需要的稳定性。另一个好处是特征波束之间互相正交。正交性让后续功率分配可以在每个波束上单独做不需要像多用户 MIMO 那样反复做迫零或最小均方误差迭代。代价也明确角度扩展很大的时候所需特征波束个数增加正交假设会被破坏。到那一步需要在功率分配阶段补一个波束间泄漏修正项但这属于进阶话题先把基础链路跑通更重要。3.2 特征波束个数怎么定不要只看特征值占比特征波束个数 K 是必须先拍板的设计参数。常见做法是看特征值累积占比但这条规则有几个边界要讲清楚。累计占比达到 90% 通常够用工程实测里 64 天线、角度扩展 5 度时 K 一般在 2~4取 95% 会更稳K 会多一两个多出来的波束增益通常不大但能为功率分配提供余量纯看占比有风险。协方差矩阵估计噪声大时特征值会被铺平累积占比曲线变钝按 90% 截断会导致 K 虚高多出来的特征波束其实是噪声空间。要先对角加载再算占比。常用的 K 与角度扩展对应关系大致如下64 天线 ULA半波长间距角度扩展度建议 K 范围前 K 个特征值占比约31~292% 以上103~490% 以上308~1288% 以上角度扩展到 K 的映射本质是瑞利分辨率的体现。角度扩展越大能量分布在越多空间格点上需要越多波束。K 不宜贪小否则漏掉的能量会让功率分配总增益缩水但 K 贪大会让后面注水面对一堆低增益波束被迫给它们分功率压低主波束的功率整体信噪比反而下降。3.3 从特征波束到发射权重要归一化还要处理相位模糊选定 K 个特征向量后波束形成矩阵 B V(:, 1:K)每一列是一个发射波束。实际发射每个波束都要做功率归一化不然合成功率不受控[V, D] eig(R_est); % 特征值降序排列 [lambda, idx] sort(diag(D), descend); V_sort V(:, idx); % 按 90% 能量截断选 K 个特征波束 cum_ratio cumsum(lambda) / sum(lambda); K find(cum_ratio 0.90, 1); % 波束矩阵每列是归一化的发射权矢量 B V_sort(:, 1:K); B B ./ sqrt(sum(abs(B).^2, 1)); % 每列模平方和 1归一化之后对第 k 个波束发射权重就是 B(:, k)。代码里 eig 默认不排序所以先对特征值降序find 取第一个满足累积占比的位置得到 K。归一化那一步是把每列的总发射功率约束成 1避免多波束叠加后总功率超出 PA 线性区。这里容易忽略的是特征向量的相位模糊EVD 得到的每个特征向量可以任意乘以 e^{jφ}。单独用一个波束看不出问题但多个波束同时发射时如果相对相位没对齐空间叠加方向会偏离预期。做法是在归一化之前做一次相位对齐具体代码放在第 5 章避坑里讲。到这里波束形成的输出已经明确K 个正交波束、每个波束对应一个平均增益 λ_k、每个波束有一套发射权矢量。剩下问题就是总功率怎么分配到 K 个波束上这就是功率分配干的事。4. 功率分配统计信道下的注水算法与迭代实现4.1 优化目标从哪来把遍历容量写成特征波束的和式K 个波束形成后接收端看这 K 条通道每条通道的统计增益就是 λ_k。在波束彼此正交的近似下系统速率可以写成C ≈ Σ_{k1}^{K} log2(1 p_k λ_k / σ²)其中 p_k 是分给第 k 个波束的功率σ² 是接收噪声功率。这个式子没考虑波束间残余干扰是遍历容量在正交近似下的确定性等价。低角度扩展场景这个近似相当准角度扩展大时会有偏差但用来做功率分配决策仍然够。单用户场景它就是速率下界多用户场景需要再叠加用户间干扰项不过那属于后续扩展。优化目标就是最大化 C约束是 Σ p_k P_total。这是经典注水问题解的结构和水位反比增益 λ_k 大的波束分到更多功率增益小的波束在总功率低时可能分不到功率。这个解在每个统计 CSI 周期只需要更新一次因为 λ_k 不变p_k 就不需要变。4.2 二分法找水位一段可以直接抄的注水实现注水的数值解法核心是找一个水位 μ使得每个波束功率 p_k max(μ - σ²/λ_k, 0)并且所有 p_k 之和恰好等于 P_total。二分法是最稳的实现方式P_total 4; % 总发射功率线性单位 sigma2 0.1; % 噪声功率和 lambda 同单位 lambda_pos lambda(1:K); % 参与分配的 K 个特征值 mu_low 0; mu_high max(lambda_pos) / sigma2 * P_total P_total; % 水位上界 for iter 1:25 mu 0.5 * (mu_low mu_high); p max(mu - sigma2 ./ lambda_pos, 0); if sum(p) P_total mu_low mu; else mu_high mu; end end p max(mu - sigma2 ./ lambda_pos, 0); p p * P_total / sum(p); % 二分取整误差重新归一化到总功率这段逻辑是每次二分先算当前水位下的总分配功率和 P_total 比大小确定水位应该往哪边收敛。25 次迭代已经把区间压缩到十万分之一足够任何定点实现嵌入式平台 15 次也几乎无损。这里常踩的一个坑是单位统一。lambda_pos 如果来自归一化到 traceN_t 后的 R_estσ² 就必须保持同一量纲如果之前没做归一化特征值绝对值会随参考功率漂移注水结果完全失真。保险做法是始终把 R_est 归一化然后 P_total 和 σ² 都按同一刻度给测。水位上界那个表达式保证第一次迭代时 sum(p) 必然小于 P_total让二分从单调侧收敛上界放宽只是多几次迭代不影响结果。4.3 三个必须要调的参数迭代次数、对角加载、驻留周期第一个是迭代次数。上面写了 25 次实际调的时候可以按平台算力压到 15 次。低信噪比场景 P_total 远小于 σ² 时注水解趋近于等功率分配这时直接跳过注水给每个波束分配 P_total/K能省掉大量重复运算。注水收益主要体现在中高信噪比区间这也是为什么 4.1 的公式里 SNR 项对功率分配行为影响这么大。第二个是对角加载。R_est 来自有限样本最小特征值往往不为 0而是被噪声顶起来的假值。注水里这些小 λ 对应的 p_k 会被放大把功率分给本来不存在的方向。典型做法是在特征分解前做对角加载% 对角加载delta 取平均增益的 1/100 到 1/1000 delta trace(R_est) / N_t / 100; R_ld R_est delta * eye(N_t);加载之后小特征值被垫高注水自动减少往噪声方向分功率。delta 不要加太大否则主特征值的相对比例被压平K 的选择和波束指向都会受影响。第三个是驻留周期。统计 CSI 的更新周期不需要和调度周期绑定。我通常把波束权值和功率分配结果缓存在基站侧按驻留周期统一刷新期间不做逐调度时隙的重新计算。驻留周期一般取 100 ms 到 1 s 量级低速用户放宽高速用户收紧。这个设计让移动场景下的空口反馈开销稳定在很低水平同时也给 DSP 留足 EVD 和注水的运算时间。提示驻留周期的下限不是算法定死的而是由角度扩展的变化速率决定。城区弯道多、建筑遮挡变化快周期要短开阔高速场景可以把周期拉长到秒级。5. 避坑统计信道波束形成和功率分配最常见的五个翻车现场5.1 遗忘因子设太大角度漂移后波束还停在原处现象用户从直行道路转入弯道持续十几秒吞吐率骤降但协方差矩阵在数值上看起来没有异常。原因遗忘因子取太大比如 0.99 以上统计窗口等效长度超过一百个样本角度漂移信息被平均掉了R_est 反映的是十几秒前的空间结构。解决让遗忘因子和多普勒关联。常见做法是 rho exp(-Ts / (10 * Tc))Ts 是统计样本间隔Tc 是相干时间。Tc 可以通过上行导频的时域相关在基站侧估计出来不需要额外反馈开销。这个改法只动一个标量不需要改算法结构。5.2 不做对角加载注水把功率分给了噪声子空间现象功率分配完成之后有 30% 以上的功率落在最后一个特征波束上但接收 SNR 没有相应提升有时反而下降。原因小特征值对应方向几乎没有实际来波。有限样本估计让它们的特征值变成非零小值注水对低增益通道的分配功率近似反比于 λ自然会把功率灌进这些虚假通道。解决在 EVD 前给 R_est 加小对角阵delta 相对平均增益低 20~30 dB也就是 trace(R_est)/N_t 的 1/100 到 1/1000。加载后再做特征分解和注水小特征值方向得到的功率会自动收敛到接近零。5.3 特征向量相位模糊导致多波束发射方向偏掉现象单波束发射时波束图正常两个波束同时发射时主瓣指向不对叠加增益比理论值低 3 dB 以上。原因EVD 得到的特征向量带任意相位旋转。单独用一个波束无所谓多个波束同时发射时波束间相位关系没有物理约束合成方向的电场矢量互相抵消。解决做波束矩阵后加一步相位对齐。对每个特征向量把绝对值最大的元素旋转到正实轴for kk 1:K [~, mi] max(abs(V_sort(:, kk))); V_sort(:, kk) V_sort(:, kk) * exp(-1i * angle(V_sort(mi, kk))); end这步做完特征波束的相对相位被固定在同一参考系下多波束合成不会出现方向偏斜。注意要在按列归一化之前做做完相位对齐再归一化功率。5.4 低SNR场景还跑完整注水算力和收益都不划算现象覆盖边缘低信噪比区域完整注水后和等功率分配的吞吐率差异小于 0.5%却白白占用 DSP 几百个周期。原因低 SNR 下注水水位 μ 远高于所有 σ²/λ_kp_k 近似等于 P_total/K注水退化成均功。这时候二分迭代没有任何收益。解决先判断总功率和噪声功率的比值。参考 SNR 低于 0 dB 时直接 p P_total/K * ones(K,1)。这个判断在统计 CSI 周期内只需要做一次省掉的算力可以用到信道估计或其他链路上。5.5 把统计CSI更新周期设计成和调度周期一样短开销砍不下来现象系统上报周期设成 10 ms反馈量确实下来了但波束权值频繁刷新EVD 和注水在每个周期都重算基带负载没减多少。原因调度器习惯性按瞬时 CSI 的思路设计触发条件统计 CSI 的触发没有独立设计。统计量在 10 ms 量级内几乎没有变化重算属于重复劳动。解决把统计 CSI 刷新周期和调度周期解耦。波束矩阵 EVD 和注水计算只在周期边界触发周期按用户移动性分两档低速用户 500 ms~1 s高速用户 100~200 ms。调度器在周期内部不需要重新请求权值直接复用缓存的结果。这五条按定位分前三条属于算法层后两条属于系统层。调试时先查算法层再看驻留周期和调度逻辑一般能快速定位现象先查哪里快速处置波束指向陈旧遗忘因子动态调整 rho功率分给小特征值方向对角加载加小 delta 对角阵多波束合成方向偏相位对齐最大元素旋转到正实轴算力浪费SNR 区间判断低 SNR 直接均功刷新过频驻留周期与调度周期解耦6. 进阶多用户配对与低复杂度特征波束计算6.1 多用户场景先按协方差矩阵正交性配对再做独立注水把统计 CSI 方案从单用户推到多用户最稳的路线不是直接做联合波束形成和功率分配而是基于协方差矩阵做用户配对。两个用户的传输能否共存主要看它们的接收协方差矩阵是否接近正交。可以定义配对因子 ρ |vec(R_a)^H vec(R_b)| / (||R_a||_F ||R_b||_F)ρ 小说明两用户波束方向在空间上错开干扰有限。多用户调度时先按 ρ 把用户分成可复用组组内再各自跑特征波束和注水这样把多用户优化拆成若干单用户优化工程上更稳。分组阈值一般取 ρ 0.3 可以放心复用ρ 0.7 建议换到不同时频资源。这个阈值不用调得太精细因为统计 CSI 本身是慢变信息即使组内残留一些干扰也可以在接收端靠 MIMO 检测吃掉。6.2 低复杂度主波束求解幂迭代能不能替代完整 EVD基站侧 DSP 资源紧张时不需要做完整特征分解。统计 CSI 场景下关注的往往是前几个大特征值对应的特征向量用幂迭代只求主导特征方向b randn(N_t, 1); b b / norm(b); for it 1:8 b R_est * b; b b / norm(b); end % b 收敛到最大特征值对应的特征向量方向 lambda_1 real(b * R_est * b);幂迭代每轮只做一次矩阵向量乘64 天线时 8 轮迭代的乘法量远小于一次完整 EVD。求第二个特征向量需要先从 R_est 里减去第一主分量再做收缩重复迭代。只取前两三个波束时这个做法比完整 EVD 便宜太多代价是估计误差在迭代中累积所以我会把 K 实际取到比所需多一个用特征值占比兜底。多用户场景沿用这个思路按协方差矩阵做配对组内用幂迭代求出前两个特征波束跑一次注水最后按小组功率约束做等比缩放。整套链路在现有基带平台上能把统计 CSI 的周期刷新成本压到很低。我在调这类链路时养成了一个习惯改参数前先画一遍协方差矩阵的热力图。热力图能直观看出主来波方向和角度扩展是否被估计干净很多时候比盯吞吐曲线更快定位问题后来做迭代版本时我把这条写进了调试流程第一步。希望帮到你。本文还有配套的精品资源点击获取