摘要
大规模 MIMO(massive MIMO)通过在基站侧部署数十乃至数百根天线获得巨大的阵列增益,是 5G 及后续移动通信系统的关键技术之一。然而天线数量的增长与多用户复用也带来了显著的能耗问题,"每焦耳能量能传输多少比特"------即能量效率(Energy Efficiency, EE)------已成为与频谱效率并列的核心性能指标。本文以一个 KKK 用户单天线、基站配置 NNN 根天线的多用户大规模 MIMO 系统为对象,研究了上行与下行两种链路下的功率分配问题:以和速率最大化为目标的注入式注水(water-filling)算法,以及以能效最大化为目标的 Dinkelbach 分式规划算法。仿真结果表明:(1) 注水分配较均分功率显著提升下行和速率(总功率 10 W 时约提升 49%);(2) 能效关于发射功率呈先增后减的单峰特性,Dinkelbach 算法能够自动收敛到能效峰值对应的功率点,而"满功率/均分功率"基线在高功率区能效急剧下降。
关键词:大规模 MIMO;能量效率;功率分配;注水算法;Dinkelbach 算法;分式规划
1 引言
1.1 研究背景与意义
移动通信网络的能耗已成为运营商运营成本与碳排放的重要组成部分。在 5G 时代,基站密度的增加与大规模天线阵列的部署使得射频功放与电路功耗显著上升。因此,网络设计的目标不能再局限于最大化吞吐量,而必须在吞吐量与能耗之间取得折中。能量效率定义为单位功耗所能支持的数据速率(bit/J),是刻画这一折中的自然指标。
大规模 MIMO 为能效优化提供了独特的机会:基站侧 NNN 根天线的相干合并/预编码可以带来约 10lgN10\lg N10lgN 的阵列增益,使得在很低的发射功率下仍能维持可观的频谱效率。
功率分配是链路级资源分配中最基本的自由度。在多用户共享频谱的场景下,功率分配同时决定了有用信号强度与用户间干扰水平,因此"如何分功率"直接决定系统的速率与能效上限。
1.2 本文工作
本文基于一个完整的 MATLAB 仿真工程,系统研究了多用户大规模 MIMO 上、下行链路的两类功率分配问题:
- 和速率最大化:上行各用户有独立功率上限,最优解为满功率发射;下行基站受总功率约束,最优解为注入式注水,本文给出其 KKT 推导与二分法实现;
- 能效最大化:目标函数为"速率/功耗"的分式结构,属于分式规划问题。本文采用 Dinkelbach 算法1将其转化为一系列减法型凹优化子问题,子问题具有闭式解;下行链路在总功率约束起作用时,将内层子问题改写为带乘子的注水形式。
2 系统模型
2.1 小区与用户分布
考虑边长为 lll 的正方形小区,NNN 根天线的基站位于小区中心。KKK 个单天线用户在小区内独立均匀分布,位置坐标四舍五入到 1 m1\,\mathrm{m}1m 精度。用户 kkk 到基站的距离记为 dkd_kdk。
2.2 信道模型
用户 kkk 与基站间的大尺度增益为
βk=2 PL01+(dk/d0)η,(1) \beta_k = \frac{2\,PL_0}{1 + \left(d_k/d_0\right)^{\eta}}, \tag{1} βk=1+(dk/d0)η2PL0,(1)
其中 PL0PL_0PL0 为参考路损(取 −84 dB-84\,\mathrm{dB}−84dB),d0d_0d0 为参考距离(35 m35\,\mathrm{m}35m),η\etaη 为路损指数(3.53.53.5)。快衰落建模为独立瑞利衰落,N×1N\times 1N×1 的信道向量
hk=βk gk,gk∼CN(0,IN).(2) \mathbf h_k = \sqrt{\beta_k}\,\mathbf g_k, \qquad \mathbf g_k \sim \mathcal{CN}(\mathbf 0, \mathbf I_N). \tag{2} hk=βk gk,gk∼CN(0,IN).(2)
接收机噪声为功率 σ2=N0BF\sigma^2 = N_0 B Fσ2=N0BF 的复高斯白噪声,其中 N0N_0N0 为噪声功率谱密度,BBB 为带宽,FFF 为噪声系数。由式 (2) 有 E ∥hk∥2=Nβk\mathbb E\!\left\\lVert \\mathbf h_k\\rVert\^2\\right = N\beta_kE∥hk∥2=Nβk,即基站侧存在约 NNN 倍的阵列增益。
2.3 上行链路:最大比合并(MRC)
上行接收信号为
y=∑k=1Kpk hksk+n,(3) \mathbf y = \sum_{k=1}^{K} \sqrt{p_k}\,\mathbf h_k s_k + \mathbf n , \tag{3} y=k=1∑Kpk hksk+n,(3)
其中 pkp_kpk 为用户 kkk 的发射功率,sks_ksk 为单位功率数据符号,n∼CN(0,σ2IN)\mathbf n \sim \mathcal{CN}(\mathbf 0, \sigma^2 \mathbf I_N)n∼CN(0,σ2IN)。基站对用户 kkk 采用 MRC 合并,合并滤波器取 ck=hk\mathbf c_k = \mathbf h_kck=hk。合并后的输出为
ckHy=pk ∥hk∥2sk⏟Sk + ∑j≠kpj(hkHhj)sj⏟Ik + hkHn⏟Nk.(4) \mathbf c_k^{H}\mathbf y = \underbrace{\sqrt{p_k}\,\lVert\mathbf h_k\rVert^{2}s_k}{S_k} \;+\; \underbrace{\sum{j\neq k}\sqrt{p_j}\left(\mathbf h_k^{H}\mathbf h_j\right)s_j}{I_k} \;+\; \underbrace{\mathbf h_k^{H}\mathbf n}{N_k} . \tag{4} ckHy=Sk pk ∥hk∥2sk+Ik j=k∑pj (hkHhj)sj+Nk hkHn.(4)
式 (4) 中三项依次为:有用信号 SkS_kSk、用户间干扰 IkI_kIk 与噪声 NkN_kNk。
由式 (4),分子项 ∣ckHhk∣2=∥hk∥4|\mathbf c_k^H\mathbf h_k|^2 = \lVert\mathbf h_k\rVert^4∣ckHhk∣2=∥hk∥4 体现 NNN 根天线信号的相干叠加增益,而噪声项功率为 σ2∥hk∥2\sigma^2\lVert\mathbf h_k\rVert^2σ2∥hk∥2。于是用户 kkk 的 SINR 可写成"功率 × 有效信道增益"的形式:
SINRkUL=pk γkUL,γkUL=∥hk∥4σ2∥hk∥2+∑j≠kpj∣hkHhj∣2.(5) \mathrm{SINR}k^{\mathrm{UL}} = p_k\,\gamma_k^{\mathrm{UL}}, \qquad \gamma_k^{\mathrm{UL}} = \frac{\lVert\mathbf h_k\rVert^{4}}{\sigma^{2}\lVert\mathbf h_k\rVert^{2} + \displaystyle\sum{j\neq k} p_j\left|\mathbf h_k^{H}\mathbf h_j\right|^{2}} . \tag{5} SINRkUL=pkγkUL,γkUL=σ2∥hk∥2+j=k∑pj hkHhj 2∥hk∥4.(5)
当忽略干扰(噪声受限)时,式 (5) 退化为
γkUL=∥hk∥2σ2.(6) \gamma_k^{\mathrm{UL}} = \frac{\lVert\mathbf h_k\rVert^{2}}{\sigma^{2}} . \tag{6} γkUL=σ2∥hk∥2.(6)
2.4 下行链路:最大比发送(MRT)
下行基站对用户 kkk 采用 MRT 预编码,波束方向取 qk=hk/∥hk∥\mathbf q_k = \mathbf h_k/\lVert\mathbf h_k\rVertqk=hk/∥hk∥。用户 kkk 的接收信号为
yk=hkH∑j=1Kpj qjsj+nk,(7) y_k = \mathbf h_k^{H}\sum_{j=1}^{K}\sqrt{p_j}\,\mathbf q_j s_j + n_k , \tag{7} yk=hkHj=1∑Kpj qjsj+nk,(7)
由于 qk\mathbf q_kqk 与 hk\mathbf h_khk 同向,有用项 ∣hkHqk∣2=∥hk∥2|\mathbf h_k^H\mathbf q_k|^2 = \lVert\mathbf h_k\rVert^2∣hkHqk∣2=∥hk∥2,故
SINRkDL=pk γkDL,γkDL=∥hk∥2σ2+∑j≠kpj∣hkHqj∣2.(8) \mathrm{SINR}k^{\mathrm{DL}} = p_k\,\gamma_k^{\mathrm{DL}}, \qquad \gamma_k^{\mathrm{DL}} = \frac{\lVert\mathbf h_k\rVert^{2}}{\sigma^{2} + \displaystyle\sum{j\neq k} p_j\left|\mathbf h_k^{H}\mathbf q_j\right|^{2}} . \tag{8} SINRkDL=pkγkDL,γkDL=σ2+j=k∑pj hkHqj 2∥hk∥2.(8)
与上行不同,下行没有接收端合并增益(用户仅单天线),且干扰来自"其他用户的波束在本用户信道方向上的泄漏"。
2.5 速率与能效
给定功率向量 p=(p1,...,pK)\mathbf p = (p_1,\dots,p_K)p=(p1,...,pK),系统和速率为
R(p)=∑k=1KBlog2 (1+pkγk).(9) R(\mathbf p) = \sum_{k=1}^{K} B\log_2\!\left(1 + p_k\gamma_k\right). \tag{9} R(p)=k=1∑KBlog2(1+pkγk).(9)
总功耗由两部分组成:与发射功率成正比的功放功耗(μk\mu_kμk 为功放效率的倒数)和不随功率变化的电路静态功耗 Pc,kP_{c,k}Pc,k:
PtotUL(p)=∑k=1Kμkpk+∑k=1KPc,k(10) P_{\mathrm{tot}}^{\mathrm{UL}}(\mathbf p) = \sum_{k=1}^{K}\mu_k p_k + \sum_{k=1}^{K} P_{c,k} \tag{10} PtotUL(p)=k=1∑Kμkpk+k=1∑KPc,k(10)
(上行:功放与电路功耗均按用户逐项累加。)
PtotDL(p)=μ∑k=1Kpk+Pc(11) P_{\mathrm{tot}}^{\mathrm{DL}}(\mathbf p) = \mu\sum_{k=1}^{K} p_k + P_c \tag{11} PtotDL(p)=μk=1∑Kpk+Pc(11)
(下行:基站侧只有一套功放与一份电路功耗,故对总发射功率统一折算。)
能量效率定义为(PtotP_{\mathrm{tot}}Ptot 按上行或下行取式 (10) 或 (11))
EE(p)=R(p)Ptot(p)bit/J.(12) \mathrm{EE}(\mathbf p) = \frac{R(\mathbf p)}{P_{\mathrm{tot}}(\mathbf p)} \quad \\mathrm{bit/J}. \tag{12} EE(p)=Ptot(p)R(p)bit/J.(12)
3 问题建模
3.1 和速率最大化
上行:每个用户有独立的功率上限(终端电池约束),
maxp R(p)s.t.0≤pk≤Pmax, k=1,...,K.(13) \max_{\mathbf p}\; R(\mathbf p) \quad \text{s.t.}\quad 0 \le p_k \le P_{\max},\ k=1,\dots,K. \tag{13} pmaxR(p)s.t.0≤pk≤Pmax, k=1,...,K.(13)
在噪声受限假设下 RRR 关于每个 pkp_kpk 单调递增,故最优解为 pk∗=Pmaxp_k^* = P_{\max}pk∗=Pmax(满功率发射)。
下行:所有用户共享基站的总功率预算,
maxp R(p)s.t.pk≥0, ∑k=1Kpk≤Pmax.(14) \max_{\mathbf p}\; R(\mathbf p) \quad \text{s.t.}\quad p_k \ge 0,\ \sum_{k=1}^{K}p_k \le P_{\max}. \tag{14} pmaxR(p)s.t.pk≥0, k=1∑Kpk≤Pmax.(14)
此时"怎么分"不再平凡:满功率均分并非最优,最优解为注水结构,见 4.1 节。
3.2 能效最大化
上行与下行分别以式 (10)、(11) 为分母,能效最大化问题为
maxp R(p)Ptot(p)s.t.{0≤pk≤Pmax,上行,pk≥0, ∑kpk≤Pmax,下行.(15) \max_{\mathbf p}\; \frac{R(\mathbf p)}{P_{\mathrm{tot}}(\mathbf p)} \quad \text{s.t.}\quad \begin{cases} 0 \le p_k \le P_{\max}, & \text{上行},\\2pt p_k \ge 0,\ \sum_k p_k \le P_{\max}, & \text{下行}. \end{cases} \tag{15} pmaxPtot(p)R(p)s.t.{0≤pk≤Pmax,pk≥0, ∑kpk≤Pmax,上行,下行.(15)
该问题的目标是分式(比率)形式而非凹函数,无法直接套用注水/凸优化的标准结论,需借助分式规划理论,见 4.2 节。
4 求解算法
4.1 和速率最大化:注入式注水
对问题 (14) 构造拉格朗日函数(记总功率约束乘子为 ν≥0\nu \ge 0ν≥0):
L(p,ν)=∑k=1KBlog2(1+pkγk)−ν(∑k=1Kpk−Pmax).(16) \mathcal L(\mathbf p, \nu) = \sum_{k=1}^{K} B\log_2(1+p_k\gamma_k) - \nu\left(\sum_{k=1}^{K}p_k - P_{\max}\right). \tag{16} L(p,ν)=k=1∑KBlog2(1+pkγk)−ν(k=1∑Kpk−Pmax).(16)
由 KKT 条件,对 pk>0p_k > 0pk>0 有
∂L∂pk=Bγkln2 (1+pkγk)−ν=0 ⟹ pk∗=Bνln2−1γk+,(17) \frac{\partial \mathcal L}{\partial p_k} = \frac{B\gamma_k}{\ln 2\,(1+p_k\gamma_k)} - \nu = 0 \;\Longrightarrow\; p_k^{*} = \left\\frac{B}{\\nu\\ln 2} - \\frac{1}{\\gamma_k}\\right^{+}, \tag{17} ∂pk∂L=ln2(1+pkγk)Bγk−ν=0⟹pk∗=νln2B−γk1+,(17)
其中 x +=max(x,0)\\,x\\,^{+} = \max(x, 0)x+=max(x,0)。定义"水位" w=B/(νln2)w = B/(\nu\ln 2)w=B/(νln2),则
pk∗= w−1γk +,∑kpk∗=Pmax.(18) p_k^{*} = \left\\,w - \\frac{1}{\\gamma_k}\\,\\right^{+}, \qquad \sum_{k} p_k^{*} = P_{\max}. \tag{18} pk∗=w−γk1+,k∑pk∗=Pmax.(18)
式 (18) 具有直观的"注水"解释:把 1/γk1/\gamma_k1/γk 视为用户 kkk 处的"河床高度",把水位 www 视为水面高度,水面高于河床的"洼地"才注入功率;信道越好的用户河床越低、注水越多,信道过差(1/γk≥w1/\gamma_k \ge w1/γk≥w)的用户直接分配零功率。水位 www 由总功率约束唯一确定,工程上用二分法数值求解:由于 www 增大时 ∑kpk(w)\sum_k p_k(w)∑kpk(w) 单调不减,可用二分将总功率逼至预算的给定容差(本文取 10−5 W10^{-5}\,\mathrm{W}10−5W)内。
算法 1 给出其伪代码。
text
算法 1:二分法注水
输入: γ_1..γ_K, 总功率 P_max, 容差 ε
1: 取水位的搜索区间 [w_lo, w_hi],使总功率在两端分别偏大/偏小
2: repeat
3: w ← (w_lo + w_hi)/2
4: p_k ← [w − 1/γ_k]⁺, k = 1..K
5: if Σp_k < P_max − ε then w_hi ← w // 水位偏低
6: else if Σp_k > P_max + ε then w_lo ← w // 水位偏高
7: until |Σp_k − P_max| ≤ ε
输出: 最优功率 p* 与水位 w
4.2 能效最大化:Dinkelbach 算法
问题 (15) 的目标 EE(p)=f(p)/g(p)\mathrm{EE}(\mathbf p) = f(\mathbf p)/g(\mathbf p)EE(p)=f(p)/g(p) 中,f(p)=R(p)f(\mathbf p) = R(\mathbf p)f(p)=R(p) 为凹函数,g(p)=Ptot(p)g(\mathbf p) = P_{\mathrm{tot}}(\mathbf p)g(p)=Ptot(p) 为正的仿射函数。由非线性分式规划理论12,该问题等价于求解辅助函数
F(λ)=maxp∈P{f(p)−λ g(p)}(19) F(\lambda) = \max_{\mathbf p\in\mathcal P}\Big\{ f(\mathbf p) - \lambda\, g(\mathbf p) \Big\} \tag{19} F(λ)=p∈Pmax{f(p)−λg(p)}(19)
的零点。F(λ)F(\lambda)F(λ) 关于 λ\lambdaλ 严格单调递减、连续,且 F(λ)=0F(\lambda) = 0F(λ)=0 有唯一根 λ∗\lambda^{*}λ∗,λ∗\lambda^{*}λ∗ 即最优能效。Dinkelbach 算法按
pn=argmaxp∈P{R(p)−λnPtot(p)},λn+1=R(pn)Ptot(pn)(20) \mathbf p_n = \arg\max_{\mathbf p\in\mathcal P}\big\{R(\mathbf p) - \lambda_n P_{\mathrm{tot}}(\mathbf p)\big\}, \qquad \lambda_{n+1} = \frac{R(\mathbf p_n)}{P_{\mathrm{tot}}(\mathbf p_n)} \tag{20} pn=argp∈Pmax{R(p)−λnPtot(p)},λn+1=Ptot(pn)R(pn)(20)
交替迭代,可以证明 λn\lambda_nλn 单调收敛于 λ∗\lambda^{*}λ∗,且在根附近具有超线性收敛速度1。
内层子问题的闭式解。 式 (20) 的目标关于各 pkp_kpk 是可分的。以无总功率约束的情形(上行逐用户上限、下行约束不起作用的阶段)为例,对 pkp_kpk 求导并令其为零:
Bγkln2 (1+pkγk)=λμk ⟹ pk∗(λ)=Bλμkln2−1γk,(21) \frac{B\gamma_k}{\ln 2\,\big(1 + p_k\gamma_k\big)} = \lambda\mu_k \;\Longrightarrow\; p_k^{*}(\lambda) = \left\\frac{B}{\\lambda\\mu_k\\ln 2} - \\frac{1}{\\gamma_k}\\right, \tag{21} ln2(1+pkγk)Bγk=λμk⟹pk∗(λ)=λμkln2B−γk1,(21)
再投影到相应可行域:上行截断到 0,Pmax0, P_{\\max}0,Pmax,下行截断到 [0,+∞)[0,+\infty)[0,+∞)。直观上,λ\lambdaλ 是"每瓦功耗的价格":边际速率收益(式 (21) 左端)低于该价格的功率增量都不值得投入,这正解释了 Dinkelbach 方案在能效峰值后不再继续加功率的行为。
下行总功率约束起作用的情形。 若式 (21) 解出的 ∑kpk>Pmax\sum_k p_k > P_{\max}∑kpk>Pmax,说明总功率约束为紧约束,需引入乘子 ν\nuν。此时 KKT 条件给出
Bγkln2 (1+pkγk)=λμ+ν ⟹ pk∗(λ,ν)=B(λμ+ν)ln2−1γk+,∑kpk∗=Pmax.(22) \frac{B\gamma_k}{\ln 2\,(1+p_k\gamma_k)} = \lambda\mu + \nu \;\Longrightarrow\; p_k^{*}(\lambda, \nu) = \left\\frac{B}{(\\lambda\\mu + \\nu)\\ln 2} - \\frac{1}{\\gamma_k}\\right^{+}, \qquad \sum_k p_k^{*} = P_{\max}. \tag{22} ln2(1+pkγk)Bγk=λμ+ν⟹pk∗(λ,ν)=(λμ+ν)ln2B−γk1+,k∑pk∗=Pmax.(22)
即在 Dinkelbach 外层迭代内嵌一次"带 λ\lambdaλ 的注水":结构上仍是注水,只是水位 B/(λμ+ν)B/(\lambda\mu+\nu)B/(λμ+ν) 同时受能效价格 λ\lambdaλ 与总功率价格 ν\nuν 的压制。ν\nuν 同样由二分法确定。
5 仿真设置与结果分析
5.1 仿真参数
| 参数 | 符号 | 取值 |
|---|---|---|
| 用户数 | KKK | 10 |
| 基站天线数 | NNN | 64 |
| 蒙特卡洛投点次数 | NpN_pNp | 1000 |
| 小区边长 | lll | 300 m |
| 参考路损 | PL0PL_0PL0 | −84 dB |
| 参考距离 | d0d_0d0 | 35 m |
| 路损指数 | η\etaη | 3.5 |
| 噪声功率谱密度 | N0N_0N0 | −140 dBm/Hz |
| 带宽 | BBB | 1 GHz |
| 噪声系数 | FFF | 1(线性) |
| 功放效率倒数 | μk, μ\mu_k,\ \muμk, μ | 1(效率 100%) |
| 电路静态功耗 | Pc,kP_{c,k}Pc,k | 上行 1 W/用户;下行合计 1 W |
作为一个量级检查:由式 (1)(2) 与 E∥hk∥2=Nβk\mathbb E\lVert\mathbf h_k\rVert^2 = N\beta_kE∥hk∥2=Nβk,位于小区边缘(dk≈150 md_k \approx 150\,\mathrm{m}dk≈150m)的用户其噪声受限增益约为 γk≈Nβk/σ2≈0.31\gamma_k \approx N\beta_k/\sigma^2 \approx 0.31γk≈Nβk/σ2≈0.31(−5 dB-5\,\mathrm{dB}−5dB),而贴近基站的用户可达约 51(17 dB17\,\mathrm{dB}17dB),动态范围超过 20 dB20\,\mathrm{dB}20dB------这正是功率分配能够产生显著收益的物理基础。
5.2 结果与分析


5.3 部分代码
c
%% 下行链路(DOWNLINK):多用户大规模 MIMO 的功率分配仿真
% =========================================================================
% 系统模型
% l × l 的正方形小区,基站(BS)位于中心,配置 N 根天线;
% K 个单天线用户均匀随机分布,下行采用最大比发送(MRT),
% 即预编码向量取 q_k = h_k / ||h_k||。
%
% 本脚本完成两件事
% 1) 和速率最大化:注入式注水(Water-Filling)求解"总功率受限"下的
% 最优功率分配,并与均分功率(P_max/K)基线对比;
% 2) 能效最大化:用 Dinkelbach 分式规划求解,内层在总功率约束起作用时
% 切换为"带 λ 的注水"(WaterFillingEE)。
clear all
close all
clc
% ---------------- 随机种子 ----------------
% 与上行脚本用同一种子,故两者对应同一次"用户投点",便于横向比较
seed = 42;
rng(seed, 'twister');
% ---------------- 系统参数 ----------------
K = 10; % 用户数(每个用户单天线)
N = 64; % 基站天线数
Np = 1000; % 蒙特卡洛投点次数
% 小区几何:边长 l 的正方形,面积 a = l^2
l = 300;
a = l^2;
X_cell = [-l/2:1:l/2]; % 小区网格(仅示意,未参与计算)
Y_cell = [-l/2:1:l/2];
% 基站坐标(小区中心)
Uxc = 0;
Uyc = 0;
% 用户随机分布:均匀分布后取整到 1 m;K × Np 矩阵,每列是一次投点
Ux = round(l.*rand(K,Np) - l/2);
Uy = round(l.*rand(K,Np) - l/2);
% 用户到基站的距离(K × Np)
D = zeros(K, Np);
for np=1:Np
for k=1:K
D(k, np) = sqrt((Ux(k, np) - Uxc)^2 + (Uy(k, np) - Uyc)^2);
end
end
% ---------------- 路损与噪声参数 ----------------
PLo = 10^(-0.1 * 84); % 参考路损,-84 dB 的线性值
d0 = 35; % 参考距离 [m]
No_dBm = -140; % 噪声功率谱密度 [dBm/Hz]
No = (1e-3) * 10^(0.1 * No_dBm); % 换算为 W/Hz
F = 1; % 噪声系数(线性值)
eta = 3.5; % 路损指数
% 大尺度衰落(存的是幅度 sqrt(beta_k),而非功率增益 beta_k):
% sqrt(beta_k) = sqrt(2*PLo) / sqrt(1 + (d_k/d0)^eta)
PL_R = zeros(K, Np);
for np=1:Np
for k=1:K
PL_R(k, np) = sqrt(2 * PLo)./sqrt(1 + (D(k, np)./d0).^(eta));
end
end
% 快衰落:N × K × Np,每个元素 ~ CN(0,1)
H = (randn(N, K, Np) + sqrt(-1)*randn(N, K, Np))/sqrt(2);
% 合成信道(N × K × Np),h(:,k,np) 为第 np 次投点中用户 k 的下行信道向量
for np=1:Np
h(:,:,np) = PL_R(:,np)' .* H(:,:,np);
end
% ---------------- 带宽与噪声功率 ----------------
B = 1e9; % 带宽 1 GHz
Pn = No * B * F; % 噪声功率 σ² = N0·B·F [W]
% ---------------- 功耗模型参数 ----------------
% 下行只有基站侧一套功放,故 mu 为标量(= 1/mu 为功放效率,此处效率取 1)
Efficiency = 1;
Performance = 1 / Efficiency;
% 总发射功率扫描范围:-30 ~ 10 dBW,步长 2 dB
P_dB_max = [-30:2:10];
P_max = 10.^(0.1*P_dB_max); % 线性值 [W]
% ---------------- 结果数组预分配 ----------------
% 均分功率方案
P = zeros(K, length(P_max));
SNR = zeros(K, length(P_max), Np);
CSI = zeros(K, length(P_max), Np);
C = zeros(K, length(P_max), Np);
Ctot = zeros(length(P_max), Np); % 无干扰口径的和速率
SINR = zeros(K, length(P_max), Np);
CSI_I = zeros(K, length(P_max), Np);
C_I = zeros(K, length(P_max), Np);
Ctot_I = zeros(length(P_max), Np); % 含干扰口径的和速率
% 注水方案:最优功率与水位 1/ν
P_opt = zeros(K, length(P_max), Np);
WaterLevel = zeros(length(P_max), Np);
SNR_WF = zeros(K, length(P_max), Np);
CSI_WF = zeros(K, length(P_max), Np);
C_WF = zeros(K, length(P_max), Np);
Ctot_WF = zeros(length(P_max), Np); % 注水、无干扰
SINR_WFI = zeros(K, length(P_max), Np);
CSI_WFI = zeros(K, length(P_max), Np);
C_WFI = zeros(K, length(P_max), Np);
Ctot_WFI = zeros(length(P_max), Np); % 注水、含干扰
% 电路(静态)功耗:下行只有基站一处,取 1 W
P_c = 1;
% 均分方案的能效 [bit/J]
EE = zeros(length(P_max), Np);
% Dinkelbach 方案:最优功率、和速率、能效
P_opt_EE = zeros(K, length(P_max), Np);
Ctot_EE = zeros(length(P_max), Np);
EE_opt = zeros(length(P_max), Np);
% Dinkelbach 功率按"含干扰"口径重新评估后的结果
SINR_EE_opt_I = zeros(K, length(P_max), Np);
CSI_EE_opt_I = zeros(K, length(P_max), Np);
C_EE_opt_I = zeros(K, length(P_max), Np);
Ctot_EE_opt_I = zeros(length(P_max), Np);
EE_opt_I = zeros(length(P_max), Np);
% 注水方案的能效(作为 Dinkelbach 的初值使用)
EE_WF = zeros(length(P_max), Np);
% ---------------- 主循环:和速率与能效计算 ----------------
for np=1:Np
for i=1:length(P_max)
% ===== 基线方案:总功率均分给 K 个用户 =====
P(:,i) = (P_max(i) / K) * ones(K,1);
% 无干扰 / 含干扰两种口径的和速率
[Ctot(i,np), C(:,i,np), SNR(:,i,np), CSI(:,i,np)] = SumCapacityCalc(h(:,:,np), Pn, P(:,i), B, false);
[Ctot_I(i,np), C_I(:,i,np), SINR(:,i,np), CSI_I(:,i,np)] = SumCapacityCalc(h(:,:,np), Pn, P(:,i), B, true);
% 均分方案的能效(分子取含干扰的和速率,分母为总功率 + 电路功耗)
[EE(i,np)] = EnergyEfficiencyCalc(Ctot_I(i,np), Performance, P_max(i), P_c);
% ===== 和速率最优:注入式注水 =====
% 依据无干扰的 γ_k 与总功率预算,求出最优功率与水位 1/ν
[P_opt(:,i,np), WaterLevel(i,np)] = WaterFilling(CSI(:,i,np), P_max(i));
% 注水功率下的和速率(无干扰 / 含干扰)
[Ctot_WF(i,np), C_WF(:,i,np), SNR_WF(:,i,np), CSI_WF(:,i,np)] = SumCapacityCalc(h(:,:,np), Pn, P_opt(:,i,np), B, false);
[Ctot_WFI(i,np), C_WFI(:,i,np), SINR_WFI(:,i,np), CSI_WFI(:,i,np)] = SumCapacityCalc(h(:,:,np), Pn, P_opt(:,i,np), B, true);
% 注水方案的能效
% 注意:此处分子沿用均分功率的含干扰速率 Ctot_I(原始实现如此),
% 严格来说应为注水功率下的 Ctot_WFI。该值仅作 Dinkelbach 的初始 λ,
% 因此只影响迭代初值,不影响最终收敛结果。
[EE_WF(i,np)] = EnergyEfficiencyCalc(Ctot_I(i,np), Performance, sum(P_opt(:,i,np)), P_c);
% ===== 能效最优:Dinkelbach =====
% 初始 λ 取注水方案的能效;若内层解出的总功率超预算,函数内部会自动
% 改用"带 λ 的注水"(WaterFillingEE)重跑一遍
[EE_opt(i,np), P_opt_EE(:,i,np), Ctot_EE(i,np)] = Dinkelbach(B, CSI(:,i,np), Performance, P_c, Ctot(i,np), P_max(i), h(:,:,np), Pn, i, EE_WF(:,np), EE_opt(:,np), P_opt_EE(:,:,np));
% 把能效最优功率代入含干扰口径,得到实际可达的和速率与能效
[Ctot_EE_opt_I(i,np), C_EE_opt_I(:,i,np), SINR_EE_opt_I(:,i,np), CSI_EE_opt_I(:,i,np)] = SumCapacityCalc(h(:,:,np), Pn, P_opt_EE(:,i,np), B, true);
[EE_opt_I(i,np)] = EnergyEfficiencyCalc(Ctot_EE_opt_I(i,np), Performance, sum(P_opt_EE(:,i,np)), P_c);
end
end
% ---------------- 对 Np 次投点取平均 ----------------
% 和速率除以 B:bit/s -> bit/s/Hz
Ctot_I_av = mean(Ctot_I, 2) / B;
Ctot_WF_av = mean(Ctot_WF, 2) / B;
Ctot_WFI_av = mean(Ctot_WFI, 2) / B;
% 能效:bit/J -> Mbit/J
EE_av = mean(EE, 2) / 1e6;
EE_opt_av = mean(EE_opt, 2) / 1e6;
EE_opt_I_av = mean(EE_opt_I, 2) / 1e6;
% =========================================================================
% 绘图部分
% (每张图同时打印保存到 figures/ 目录)
% =========================================================================
% ---------- 图 1:一次投点下的用户随机分布 ----------
% 与上行脚本使用同一种子,因此两处画出的用户分布完全相同
% 注意:用变量保存图窗句柄,print 时显式传入,避免无显示(-batch)模式下抓错图窗
h_fig1 = figure;
pbaspect([1 1 1]);
title('一次随机投点下的用户分布与基站位置');
hold on;
plot(Ux(:, Np), Uy(:, Np), 'x', 'linewidth', 1, 'markersize', 5); % 用户
axis ([-l/2 l/2 -l/2 l/2]);
xlabel ('x 坐标 [m]');
ylabel ('y 坐标 [m]');
% 基站位置
plot(Uxc, Uyc, '*', 'linewidth', 1, 'markersize', 5);
grid on;
% ---------- 图 2:下行结果汇总(2×2 面板:和速率 / 能效 / 注水分配 / 信道增益倒数) ----------
% 原先把和速率、注水、能效分成三张图,这里合并为一张四面板图,便于横向对照
h_fig2 = figure('Position', [60 60 1150 820]);
% (a) 和速率 vs 总发射功率
subplot(2, 2, 1);
hold on;
% 注水、不计干扰:功率越大速率越高
semilogy(P_dB_max, Ctot_WF_av, '-og', 'linewidth', 2, 'markersize', 3);
% 注水、计入干扰
semilogy(P_dB_max, Ctot_WFI_av, '-or', 'linewidth', 2, 'markersize', 3);
% 均分功率、计入干扰:作为基线
semilogy(P_dB_max, Ctot_I_av, '-ob', 'linewidth', 2, 'markersize', 3);
title(['(a) 和速率平均值(天线数 N = ', num2str(N), ')']);
xlabel ('总发射功率 [dBW]');
ylabel ('和速率 [bit/s/Hz]');
legend({'不计干扰 + 注水', '计入干扰 + 注水', '计入干扰 + 均分'}, ...
'Location', 'southeast', 'FontSize', 7);
set(gca, 'FontSize', 9);
grid on;
% (b) 能量效率 vs 总发射功率
subplot(2, 2, 2);
hold on;
% Dinkelbach 方案、不计干扰:能效到峰值后趋于平台
semilogy(P_dB_max, EE_opt_av, '-o', 'linewidth', 2, 'markersize', 3);
% Dinkelbach 方案、计入干扰
semilogy(P_dB_max, EE_opt_I_av, '-o', 'linewidth', 2, 'markersize', 3);
% 均分功率基线、计入干扰
semilogy(P_dB_max, EE_av, '-o', 'linewidth', 2, 'markersize', 3);
title(['(b) 能量效率平均值(天线数 N = ', num2str(N), ')']);
xlabel ('总发射功率 [dBW]');
ylabel ('能量效率 [Mbit/J]');
legend({'不计干扰 + Dinkelbach', '计入干扰 + Dinkelbach', '计入干扰 + 均分'}, ...
'Location', 'southeast', 'FontSize', 7);
set(gca, 'FontSize', 9);
grid on;
% (c) 一次投点、10 dBW 下的注水功率分配(柱高为 p_k,虚线为水位 1/ν)
subplot(2, 2, 3);
hold on;
bar(P_opt(:,i,Np), 'r'); % 各用户分得的功率
plot([0 K+1], WaterLevel(i,Np) * [1 1], '--k'); % 水平虚线:水位
xlim([0 K+1]);
title(['(c) 注水功率分配(总功率 = ', num2str(P_max(i)), ' W)']);
xlabel ('用户序号');
ylabel ('功率 [W]');
set(gca, 'FontSize', 9);
grid on;
% (d) 各用户的信道增益倒数 1/γ_k
% 与 (c) 中的水位同口径(均取无干扰 γ_k),便于直接比较"谁在水面之下"
subplot(2, 2, 4);
hold on;
bar(1./CSI(:,i,Np)); % 各用户的 1/γ_k
xlim([0 K+1]);
title('(d) 信道增益倒数 1/\gamma_k');
xlabel ('用户序号');
ylabel ('1/\gamma_k');
set(gca, 'FontSize', 9);
grid on;
print(h_fig2, fullfile(img_dir, 'downlink-results.png'), '-dpng', '-r150');
% 脚本结束
6 结论
本文针对多用户大规模 MIMO 系统的上行(MRC)与下行(MRT)链路,完整地建模、推导并仿真了两类功率分配问题。主要结论如下:
- 和速率最大化 :上行在噪声受限假设下满功率即最优;下行最优解为注水结构 pk∗=w−1/γk+p_k^{*} = w - 1/\\gamma_k^{+}pk∗=w−1/γk+,在 K=10K=10K=10、N=64N=64N=64 的仿真设置下,注水较均分功率在总功率 10 W10\,\mathrm{W}10W 时带来约 49% 的和速率增益。
- 能效最大化:能效关于功率呈单峰特性,Dinkelbach 分式规划算法能够自动收敛到能效峰值,上行/下行最优能效分别较"满功率/均分"基线峰值提升明显。
未来工作包括:将用户间干扰纳入优化目标并采用 ZF/MMSE 收发结构、引入随天线数增长的电路功耗模型以求解能效最优天线数、考虑导频开销与不完美 CSI、以及附加 QoS/公平性约束的多目标功率分配。
参考文献
1 H. Q. Ngo, E. G. Larsson, and T. L. Marzetta, "Energy and spectral efficiency of very large multiuser MIMO systems," IEEE Transactions on Communications, vol. 61, no. 4, pp. 1436--1449, 2013.
2 S. Boyd and L. Vandenberghe, Convex Optimization. Cambridge, U.K.: Cambridge Univ. Press, 2004.